@vertexvis/viewer 0.24.4-canary.8 → 0.24.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/README.template.md +6 -0
  2. package/dist/cjs/{controller-f032798e.js → controller-4996f10d.js} +2 -2
  3. package/dist/cjs/{controller-f032798e.js.map → controller-4996f10d.js.map} +1 -1
  4. package/dist/cjs/{cursors-2dfb0ef3.js → cursors-17ad74ac.js} +2 -2
  5. package/dist/cjs/{cursors-2dfb0ef3.js.map → cursors-17ad74ac.js.map} +1 -1
  6. package/dist/cjs/dom-fc408b4c.js.map +1 -1
  7. package/dist/cjs/{errors-04aa7cf2.js → errors-78196ad4.js} +9 -1
  8. package/dist/cjs/errors-78196ad4.js.map +1 -0
  9. package/dist/cjs/{index-5fa5a527.js → index-0abd8b0b.js} +2 -2
  10. package/dist/cjs/index-0abd8b0b.js.map +1 -0
  11. package/dist/cjs/index.cjs.js +4 -4
  12. package/dist/cjs/loader.cjs.js +1 -1
  13. package/dist/cjs/loader.cjs.js.map +1 -1
  14. package/dist/cjs/{queries-68cd2664.js → queries-4580caa5.js} +9 -3
  15. package/dist/cjs/queries-4580caa5.js.map +1 -0
  16. package/dist/cjs/{shadow-css-8962c4a9.js → shadow-css-37297ac8.js} +1 -1
  17. package/dist/cjs/shadow-css-37297ac8.js.map +1 -0
  18. package/dist/cjs/{stencil-a3f4e15b.js → stencil-40ef9119.js} +2 -2
  19. package/dist/cjs/{stencil-a3f4e15b.js.map → stencil-40ef9119.js.map} +1 -1
  20. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +8 -2
  21. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
  22. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
  23. package/dist/cjs/vertex-scene-tree-table-column.cjs.entry.js +1 -1
  24. package/dist/cjs/vertex-scene-tree-table-header.cjs.entry.js +1 -1
  25. package/dist/cjs/vertex-scene-tree-table-resize-divider.cjs.entry.js +1 -1
  26. package/dist/cjs/vertex-scene-tree-toolbar-group.cjs.entry.js +1 -1
  27. package/dist/cjs/vertex-scene-tree.cjs.entry.js +3 -3
  28. package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
  29. package/dist/cjs/vertex-viewer-annotation-callout.cjs.entry.js +1 -1
  30. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +2 -2
  31. package/dist/cjs/vertex-viewer-button_3.cjs.entry.js +1 -1
  32. package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js +1 -1
  33. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
  34. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
  35. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +2 -2
  36. package/dist/cjs/vertex-viewer-icon.cjs.entry.js +1 -1
  37. package/dist/cjs/vertex-viewer-layer.cjs.entry.js +1 -1
  38. package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +1 -1
  39. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +1 -1
  40. package/dist/cjs/vertex-viewer-markup.cjs.entry.js +1 -1
  41. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +1 -1
  42. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +2 -2
  43. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +1 -1
  44. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +2 -2
  45. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +5 -5
  46. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
  47. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +2 -2
  48. package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +2 -2
  49. package/dist/cjs/vertex-viewer-spinner.cjs.entry.js +1 -1
  50. package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js +1 -1
  51. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +2 -2
  52. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +2 -2
  53. package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js +4 -4
  54. package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js.map +1 -1
  55. package/dist/cjs/vertex-viewer.cjs.entry.js +31 -15
  56. package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
  57. package/dist/cjs/viewer.cjs.js +1 -1
  58. package/dist/cjs/viewer.cjs.js.map +1 -1
  59. package/dist/collection/components/scene-tree/scene-tree.js +1 -1
  60. package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
  61. package/dist/collection/components/scene-tree-search/scene-tree-search.js +21 -1
  62. package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
  63. package/dist/collection/components/viewer/viewer.js +23 -13
  64. package/dist/collection/components/viewer/viewer.js.map +1 -1
  65. package/dist/collection/components/viewer-pin-group/viewer-pin-group.css +5 -0
  66. package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js +3 -3
  67. package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js.map +1 -1
  68. package/dist/collection/lib/cursors.js +1 -1
  69. package/dist/collection/lib/cursors.js.map +1 -1
  70. package/dist/collection/lib/model-views/controller.js +7 -1
  71. package/dist/collection/lib/model-views/controller.js.map +1 -1
  72. package/dist/collection/lib/stream/stream.js +6 -5
  73. package/dist/collection/lib/stream/stream.js.map +1 -1
  74. package/dist/collection/testing/viewer.js +2 -2
  75. package/dist/collection/testing/viewer.js.map +1 -1
  76. package/dist/components/cursors.js +1 -1
  77. package/dist/components/cursors.js.map +1 -1
  78. package/dist/components/errors.js +8 -1
  79. package/dist/components/errors.js.map +1 -1
  80. package/dist/components/queries.js +7 -1
  81. package/dist/components/queries.js.map +1 -1
  82. package/dist/components/scene-tree-search.js +6 -0
  83. package/dist/components/scene-tree-search.js.map +1 -1
  84. package/dist/components/vertex-scene-tree.js.map +1 -1
  85. package/dist/components/vertex-viewer-walk-mode-tool.js +3 -3
  86. package/dist/components/vertex-viewer-walk-mode-tool.js.map +1 -1
  87. package/dist/components/vertex-viewer.js +27 -11
  88. package/dist/components/vertex-viewer.js.map +1 -1
  89. package/dist/components/viewer-pin-group.js +1 -1
  90. package/dist/components/viewer-pin-group.js.map +1 -1
  91. package/dist/esm/{controller-00b61632.js → controller-8cfb590e.js} +2 -2
  92. package/dist/esm/{controller-00b61632.js.map → controller-8cfb590e.js.map} +1 -1
  93. package/dist/esm/{cursors-9e349d61.js → cursors-3806bc04.js} +2 -2
  94. package/dist/esm/{cursors-9e349d61.js.map → cursors-3806bc04.js.map} +1 -1
  95. package/dist/esm/dom-dba69343.js.map +1 -1
  96. package/dist/esm/{errors-0cbe2f60.js → errors-3fccf79a.js} +9 -2
  97. package/dist/{cjs/errors-04aa7cf2.js.map → esm/errors-3fccf79a.js.map} +1 -1
  98. package/dist/esm/{index-f3e96c9e.js → index-c12dc0cd.js} +2 -2
  99. package/dist/esm/index-c12dc0cd.js.map +1 -0
  100. package/dist/esm/index.js +4 -4
  101. package/dist/esm/index.mjs +4 -4
  102. package/dist/esm/loader.js +1 -1
  103. package/dist/esm/loader.js.map +1 -1
  104. package/dist/esm/loader.mjs +1 -1
  105. package/dist/esm/{queries-794dddcf.js → queries-948a88f9.js} +9 -3
  106. package/dist/esm/queries-948a88f9.js.map +1 -0
  107. package/dist/esm/{shadow-css-9363884b.js → shadow-css-d5069bdf.js} +1 -1
  108. package/dist/esm/shadow-css-d5069bdf.js.map +1 -0
  109. package/dist/esm/{stencil-9d9f090f.js → stencil-38b2fc28.js} +2 -2
  110. package/dist/esm/{stencil-9d9f090f.js.map → stencil-38b2fc28.js.map} +1 -1
  111. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +8 -2
  112. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
  113. package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
  114. package/dist/esm/vertex-scene-tree-table-column.entry.js +1 -1
  115. package/dist/esm/vertex-scene-tree-table-header.entry.js +1 -1
  116. package/dist/esm/vertex-scene-tree-table-resize-divider.entry.js +1 -1
  117. package/dist/esm/vertex-scene-tree-toolbar-group.entry.js +1 -1
  118. package/dist/esm/vertex-scene-tree.entry.js +3 -3
  119. package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
  120. package/dist/esm/vertex-viewer-annotation-callout.entry.js +1 -1
  121. package/dist/esm/vertex-viewer-box-query-tool.entry.js +2 -2
  122. package/dist/esm/vertex-viewer-button_3.entry.js +1 -1
  123. package/dist/esm/vertex-viewer-default-toolbar.entry.js +1 -1
  124. package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
  125. package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
  126. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +2 -2
  127. package/dist/esm/vertex-viewer-icon.entry.js +1 -1
  128. package/dist/esm/vertex-viewer-layer.entry.js +1 -1
  129. package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +1 -1
  130. package/dist/esm/vertex-viewer-markup-tool.entry.js +1 -1
  131. package/dist/esm/vertex-viewer-markup.entry.js +1 -1
  132. package/dist/esm/vertex-viewer-measurement-details.entry.js +1 -1
  133. package/dist/esm/vertex-viewer-measurement-distance.entry.js +2 -2
  134. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +1 -1
  135. package/dist/esm/vertex-viewer-measurement-precise.entry.js +2 -2
  136. package/dist/esm/vertex-viewer-pin-group.entry.js +5 -5
  137. package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
  138. package/dist/esm/vertex-viewer-pin-label_2.entry.js +2 -2
  139. package/dist/esm/vertex-viewer-pin-tool.entry.js +2 -2
  140. package/dist/esm/vertex-viewer-spinner.entry.js +1 -1
  141. package/dist/esm/vertex-viewer-teleport-tool.entry.js +1 -1
  142. package/dist/esm/vertex-viewer-transform-widget.entry.js +2 -2
  143. package/dist/esm/vertex-viewer-view-cube.entry.js +2 -2
  144. package/dist/esm/vertex-viewer-walk-mode-tool.entry.js +4 -4
  145. package/dist/esm/vertex-viewer-walk-mode-tool.entry.js.map +1 -1
  146. package/dist/esm/vertex-viewer.entry.js +31 -15
  147. package/dist/esm/vertex-viewer.entry.js.map +1 -1
  148. package/dist/esm/viewer.js +1 -1
  149. package/dist/esm/viewer.js.map +1 -1
  150. package/dist/types/components/scene-tree/scene-tree.d.ts +1 -1
  151. package/dist/types/components/scene-tree-search/scene-tree-search.d.ts +5 -1
  152. package/dist/types/components/viewer/viewer.d.ts +3 -2
  153. package/dist/types/components.d.ts +11 -7
  154. package/dist/types/lib/stream/stream.d.ts +1 -1
  155. package/dist/types/testing/viewer.d.ts +2 -2
  156. package/dist/viewer/index.esm.js +1 -1
  157. package/dist/viewer/{p-0e0973f0.entry.js → p-03efd0d6.entry.js} +2 -2
  158. package/dist/viewer/{p-7f0eeb06.entry.js → p-0988832f.entry.js} +2 -2
  159. package/dist/viewer/{p-78a1be4e.entry.js → p-0aa04328.entry.js} +2 -2
  160. package/dist/viewer/p-18ce3f3b.entry.js +5 -0
  161. package/dist/viewer/{p-93960b4f.entry.js.map → p-18ce3f3b.entry.js.map} +1 -1
  162. package/dist/viewer/{p-2ecdcd5d.entry.js → p-23f0bb30.entry.js} +2 -2
  163. package/dist/viewer/{p-06b8bca7.entry.js → p-296311d3.entry.js} +2 -2
  164. package/dist/viewer/{p-2172230d.entry.js → p-2fd66679.entry.js} +2 -2
  165. package/dist/viewer/{p-5540add8.entry.js → p-362f3e12.entry.js} +2 -2
  166. package/dist/viewer/{p-110f66c6.js → p-388f809e.js} +2 -2
  167. package/dist/viewer/p-388f809e.js.map +1 -0
  168. package/dist/viewer/{p-48b63c5f.entry.js → p-45044ff2.entry.js} +2 -2
  169. package/dist/viewer/{p-9fc2e56e.entry.js → p-45b5b5ed.entry.js} +2 -2
  170. package/dist/viewer/{p-f79933ae.entry.js → p-4bd1ea70.entry.js} +2 -2
  171. package/dist/viewer/{p-842cc51b.entry.js → p-4bf16450.entry.js} +2 -2
  172. package/dist/viewer/{p-a057d7f2.entry.js → p-56fa8168.entry.js} +2 -2
  173. package/dist/viewer/{p-8c367e87.entry.js → p-59f204e7.entry.js} +2 -2
  174. package/dist/viewer/p-59f204e7.entry.js.map +1 -0
  175. package/dist/viewer/{p-33033b58.entry.js → p-6cf6eb8a.entry.js} +2 -2
  176. package/dist/viewer/p-715255e1.entry.js +5 -0
  177. package/dist/viewer/p-715255e1.entry.js.map +1 -0
  178. package/dist/viewer/{p-5f9352c0.entry.js → p-75f5ae33.entry.js} +2 -2
  179. package/dist/viewer/{p-7eea3fb3.entry.js → p-7a87ae97.entry.js} +2 -2
  180. package/dist/viewer/{p-b974c985.entry.js → p-86e1ee86.entry.js} +2 -2
  181. package/dist/viewer/p-86e1ee86.entry.js.map +1 -0
  182. package/dist/viewer/p-89d93218.entry.js +5 -0
  183. package/dist/viewer/p-89d93218.entry.js.map +1 -0
  184. package/dist/viewer/{p-07325d65.entry.js → p-8c53ed63.entry.js} +2 -2
  185. package/dist/viewer/p-991f7bac.js.map +1 -1
  186. package/dist/viewer/{p-983db3dd.entry.js → p-a009c6d9.entry.js} +2 -2
  187. package/dist/viewer/{p-dcb64250.entry.js → p-a3bc0b79.entry.js} +2 -2
  188. package/dist/viewer/{p-29318a17.entry.js → p-aece4279.entry.js} +2 -2
  189. package/dist/viewer/{p-be257155.js → p-b8c0f6ff.js} +1 -1
  190. package/dist/viewer/p-b8c0f6ff.js.map +1 -0
  191. package/dist/viewer/{p-2507658c.js → p-ba120f65.js} +2 -2
  192. package/dist/viewer/p-ba120f65.js.map +1 -0
  193. package/dist/viewer/p-bab8266e.js +5 -0
  194. package/dist/viewer/p-bab8266e.js.map +1 -0
  195. package/dist/viewer/{p-05562c21.entry.js → p-bcddbdb2.entry.js} +2 -2
  196. package/dist/viewer/{p-40e8a5ea.entry.js → p-c3b071a3.entry.js} +2 -2
  197. package/dist/viewer/{p-fbfa1e82.entry.js → p-cd3f0870.entry.js} +2 -2
  198. package/dist/viewer/{p-d2677c13.entry.js → p-d9e75269.entry.js} +2 -2
  199. package/dist/viewer/p-e1eaedd8.js +5 -0
  200. package/dist/viewer/{p-a27a9775.entry.js → p-e70e2c04.entry.js} +2 -2
  201. package/dist/viewer/{p-ffa8a2dd.entry.js → p-ebea8f56.entry.js} +2 -2
  202. package/dist/viewer/{p-342dac8b.js → p-eda9f5d4.js} +2 -2
  203. package/dist/viewer/{p-342dac8b.js.map → p-eda9f5d4.js.map} +1 -1
  204. package/dist/viewer/{p-9d54d593.entry.js → p-f292e8ae.entry.js} +2 -2
  205. package/dist/viewer/{p-6f1b22f0.js → p-f8951894.js} +2 -2
  206. package/dist/viewer/{p-d024c250.entry.js → p-f8a9c4d2.entry.js} +2 -2
  207. package/dist/viewer/viewer.esm.js +1 -1
  208. package/dist/viewer/viewer.esm.js.map +1 -1
  209. package/package.json +7 -7
  210. package/readme.md +10 -4
  211. package/dist/cjs/index-5fa5a527.js.map +0 -1
  212. package/dist/cjs/queries-68cd2664.js.map +0 -1
  213. package/dist/cjs/shadow-css-8962c4a9.js.map +0 -1
  214. package/dist/esm/errors-0cbe2f60.js.map +0 -1
  215. package/dist/esm/index-f3e96c9e.js.map +0 -1
  216. package/dist/esm/queries-794dddcf.js.map +0 -1
  217. package/dist/esm/shadow-css-9363884b.js.map +0 -1
  218. package/dist/viewer/p-04bf6b89.js +0 -5
  219. package/dist/viewer/p-110f66c6.js.map +0 -1
  220. package/dist/viewer/p-2507658c.js.map +0 -1
  221. package/dist/viewer/p-2ce9b8f7.entry.js +0 -5
  222. package/dist/viewer/p-2ce9b8f7.entry.js.map +0 -1
  223. package/dist/viewer/p-629a5ae7.entry.js +0 -5
  224. package/dist/viewer/p-629a5ae7.entry.js.map +0 -1
  225. package/dist/viewer/p-8c367e87.entry.js.map +0 -1
  226. package/dist/viewer/p-93960b4f.entry.js +0 -5
  227. package/dist/viewer/p-b974c985.entry.js.map +0 -1
  228. package/dist/viewer/p-be257155.js.map +0 -1
  229. package/dist/viewer/p-d9093da4.js +0 -5
  230. package/dist/viewer/p-d9093da4.js.map +0 -1
  231. /package/dist/viewer/{p-0e0973f0.entry.js.map → p-03efd0d6.entry.js.map} +0 -0
  232. /package/dist/viewer/{p-7f0eeb06.entry.js.map → p-0988832f.entry.js.map} +0 -0
  233. /package/dist/viewer/{p-78a1be4e.entry.js.map → p-0aa04328.entry.js.map} +0 -0
  234. /package/dist/viewer/{p-2ecdcd5d.entry.js.map → p-23f0bb30.entry.js.map} +0 -0
  235. /package/dist/viewer/{p-06b8bca7.entry.js.map → p-296311d3.entry.js.map} +0 -0
  236. /package/dist/viewer/{p-2172230d.entry.js.map → p-2fd66679.entry.js.map} +0 -0
  237. /package/dist/viewer/{p-5540add8.entry.js.map → p-362f3e12.entry.js.map} +0 -0
  238. /package/dist/viewer/{p-48b63c5f.entry.js.map → p-45044ff2.entry.js.map} +0 -0
  239. /package/dist/viewer/{p-9fc2e56e.entry.js.map → p-45b5b5ed.entry.js.map} +0 -0
  240. /package/dist/viewer/{p-f79933ae.entry.js.map → p-4bd1ea70.entry.js.map} +0 -0
  241. /package/dist/viewer/{p-842cc51b.entry.js.map → p-4bf16450.entry.js.map} +0 -0
  242. /package/dist/viewer/{p-a057d7f2.entry.js.map → p-56fa8168.entry.js.map} +0 -0
  243. /package/dist/viewer/{p-33033b58.entry.js.map → p-6cf6eb8a.entry.js.map} +0 -0
  244. /package/dist/viewer/{p-5f9352c0.entry.js.map → p-75f5ae33.entry.js.map} +0 -0
  245. /package/dist/viewer/{p-7eea3fb3.entry.js.map → p-7a87ae97.entry.js.map} +0 -0
  246. /package/dist/viewer/{p-07325d65.entry.js.map → p-8c53ed63.entry.js.map} +0 -0
  247. /package/dist/viewer/{p-983db3dd.entry.js.map → p-a009c6d9.entry.js.map} +0 -0
  248. /package/dist/viewer/{p-dcb64250.entry.js.map → p-a3bc0b79.entry.js.map} +0 -0
  249. /package/dist/viewer/{p-29318a17.entry.js.map → p-aece4279.entry.js.map} +0 -0
  250. /package/dist/viewer/{p-05562c21.entry.js.map → p-bcddbdb2.entry.js.map} +0 -0
  251. /package/dist/viewer/{p-40e8a5ea.entry.js.map → p-c3b071a3.entry.js.map} +0 -0
  252. /package/dist/viewer/{p-fbfa1e82.entry.js.map → p-cd3f0870.entry.js.map} +0 -0
  253. /package/dist/viewer/{p-d2677c13.entry.js.map → p-d9e75269.entry.js.map} +0 -0
  254. /package/dist/viewer/{p-04bf6b89.js.map → p-e1eaedd8.js.map} +0 -0
  255. /package/dist/viewer/{p-a27a9775.entry.js.map → p-e70e2c04.entry.js.map} +0 -0
  256. /package/dist/viewer/{p-ffa8a2dd.entry.js.map → p-ebea8f56.entry.js.map} +0 -0
  257. /package/dist/viewer/{p-9d54d593.entry.js.map → p-f292e8ae.entry.js.map} +0 -0
  258. /package/dist/viewer/{p-6f1b22f0.js.map → p-f8951894.js.map} +0 -0
  259. /package/dist/viewer/{p-d024c250.entry.js.map → p-f8a9c4d2.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../../src/components/viewer/viewer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\nimport { SceneViewAPIClient } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb_service';\nimport { toProtoDuration, WebSocketClientImpl } from '@vertexvis/stream-api';\nimport { Color, Disposable, EventDispatcher, UUID } from '@vertexvis/utils';\nimport classnames from 'classnames';\n\nimport {\n CrossSectioningOptions,\n FeatureHighlightOptions,\n FeatureLineOptions,\n FrameType,\n PhantomOptions,\n SceneComparisonOptions,\n SelectionHighlightingOptions,\n StreamAttributes,\n} from '../../interfaces';\nimport {\n AnnotationController,\n AnnotationState,\n} from '../../lib/annotations/controller';\nimport { CanvasController } from '../../lib/canvases';\nimport {\n Config,\n parseAndValidateConfig,\n PartialConfig,\n} from '../../lib/config';\nimport { Cursor, CursorManager } from '../../lib/cursors';\nimport { cssCursor } from '../../lib/dom';\nimport { Environment } from '../../lib/environment';\nimport {\n ComponentInitializationError,\n InteractionHandlerError,\n ViewerInitializationError,\n} from '../../lib/errors';\nimport {\n InteractionApiOrthographic,\n InteractionApiPerspective,\n} from '../../lib/interactions';\nimport { BaseInteractionHandler } from '../../lib/interactions/baseInteractionHandler';\nimport { FlyToPartKeyInteraction } from '../../lib/interactions/flyToPartKeyInteraction';\nimport { FlyToPositionKeyInteraction } from '../../lib/interactions/flyToPositionKeyInteraction';\nimport { InteractionApi } from '../../lib/interactions/interactionApi';\nimport { InteractionHandler } from '../../lib/interactions/interactionHandler';\nimport { KeyInteraction } from '../../lib/interactions/keyInteraction';\nimport { MouseInteractionHandler } from '../../lib/interactions/mouseInteractionHandler';\nimport { MultiPointerInteractionHandler } from '../../lib/interactions/multiPointerInteractionHandler';\nimport { PointerInteractionHandler } from '../../lib/interactions/pointerInteractionHandler';\nimport { TapEventDetails } from '../../lib/interactions/tapEventDetails';\nimport { TapInteractionHandler } from '../../lib/interactions/tapInteractionHandler';\nimport { TouchInteractionHandler } from '../../lib/interactions/touchInteractionHandler';\nimport { fromPbFrameOrThrow, toPbCameraTypeOrThrow } from '../../lib/mappers';\nimport { paintTime, Timing } from '../../lib/meters';\nimport { ModelViewController } from '../../lib/model-views/controller';\nimport { PmiController } from '../../lib/pmi';\nimport {\n CanvasRenderer,\n createCanvasRenderer,\n measureCanvasRenderer,\n} from '../../lib/rendering';\nimport { SceneItemController } from '../../lib/scene-items/controller';\nimport { Scene } from '../../lib/scenes/scene';\nimport { writeDOM } from '../../lib/stencil';\nimport {\n getStorageEntry,\n StorageKeys,\n upsertStorageEntry,\n} from '../../lib/storage';\nimport {\n Connected,\n Connecting,\n ConnectionFailed,\n Disconnected,\n ViewerStreamState,\n} from '../../lib/stream/state';\nimport { ViewerStream } from '../../lib/stream/stream';\nimport {\n FrameCamera,\n Orientation,\n SceneViewSummary,\n StencilBufferManager,\n Viewport,\n} from '../../lib/types';\nimport { Frame } from '../../lib/types/frame';\nimport { FrameCameraType } from '../../lib/types/frameCamera';\nimport { VisibilityObserver } from '../../lib/visibilityObserver';\nimport {\n DEFAULT_VIEWER_SCENE_WAIT_MS,\n getElementBoundingClientRect,\n getElementPropertyValue,\n} from './utils';\n\ninterface ConnectedStatus {\n jwt: string;\n status: 'connected';\n}\n\ninterface ConnectingStatus {\n status: 'connecting';\n}\n\ninterface DisconnectedStatus {\n status: 'disconnected';\n}\n\ninterface ConnectionFailedStatus {\n status: 'connection-failed';\n errorMessage: string;\n}\n\nexport interface LoadOptions {\n cameraType?: FrameCameraType;\n}\n\n/**\n * Internal state values for the component. Used to preserve values across live\n * reload refreshes.\n */\ninterface StateMap {\n streamWorldOrientation?: Orientation;\n cursorManager: CursorManager;\n interactionTarget?: HTMLElement;\n streamState: ViewerStreamState;\n streamListeners?: Disposable;\n depthBuffersOverrideForAnnotations?: boolean;\n}\n\n/** @internal */\nexport type ConnectionStatus =\n | ConnectingStatus\n | ConnectedStatus\n | DisconnectedStatus\n | ConnectionFailedStatus;\n\n@Component({\n tag: 'vertex-viewer',\n styleUrl: 'viewer.css',\n shadow: true,\n})\nexport class Viewer {\n @Element() private hostElement!: HTMLVertexViewerElement;\n\n /**\n * A URN of the scene resource to load when the component is mounted in the\n * DOM tree. The specified resource is a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n */\n @Prop() public src?: string;\n\n /**\n * The Client ID associated with your Vertex Application.\n */\n @Prop() public clientId?: string;\n\n /**\n * Property used for internals or testing.\n *\n * @internal\n */\n @Prop({ mutable: true }) public deviceId?: string;\n\n /**\n * An object or JSON encoded string that defines configuration settings for\n * the viewer.\n */\n @Prop() public config?: PartialConfig | string;\n\n /**\n * Sets the default environment for the viewer. This setting is used for\n * auto-configuring network hosts.\n *\n * Use the `config` property for manually setting hosts.\n *\n * @see Viewer.config\n */\n @Prop() public configEnv: Environment = 'platprod';\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public resolvedConfig?: Config;\n\n /**\n * Enables or disables the default mouse and touch interactions provided by\n * the viewer. Enabled by default.\n */\n @Prop() public cameraControls = true;\n\n /**\n * The type of camera model to represent the scene with. Can be either\n * `perspective` or `orthographic`, and defaults to `perspective`.\n */\n @Prop({ mutable: true, reflect: true }) public cameraType: FrameCameraType =\n 'perspective';\n\n /**\n * Enables or disables the default keyboard shortcut interactions provided by\n * the viewer. Enabled by default, requires `cameraControls` being enabled.\n *\n */\n @Prop() public keyboardControls = true;\n\n /**\n * Sets the rotation interaction behavior. True by default.\n *\n * When rotateAroundTapPoint is true and the user clicks on geometry, then the model will rotate\n * around the point that was clicked. When rotateAroundTapPoint is true and the user clicks\n * in empty space (not on geometry), then the model will rotate around the center of the viewport.\n *\n * When rotateAroundTapPoint is false, then the model will always rotate around the center of the viewport.\n */\n @Prop() public rotateAroundTapPoint = true;\n\n /**\n * A token that can be used to make API calls to other Vertex services.\n *\n * @internal\n */\n @Prop({ mutable: true }) public token?: string;\n\n /**\n * Specifies when a depth buffer is requested from rendering. Possible values\n * are:\n *\n * * `undefined`: A depth buffer is never requested.\n * * `final`: A depth buffer is only requested on the final frame.\n * * `all`: A depth buffer is requested for every frame.\n *\n * Depth buffers can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance. Some features,\n * like measurement and pins, require that depth buffers are requested and\n * will override an 'undefined' value when the feature is active.\n */\n @Prop() public depthBuffers?: FrameType;\n\n /**\n * Specifies how phantom parts should appear.\n * The opacity must be between 0 and 1, where 0 is completely hidden and 1 is completely visible.\n */\n @Prop({ attribute: null })\n public phantom?: PhantomOptions = { opacity: 0.1 };\n\n /**\n * Specifies whether to use the default lights for the scene. When false, default\n * lights are used. When true, no default lights are used, and the lights must\n * be specified separately.\n */\n @Prop() public noDefaultLights = false;\n\n /**\n * Specifies whether to enable temporal refinement of still images.\n */\n @Prop() public enableTemporalRefinement = true;\n\n /**\n * Specifies experimental rendering options. For Vertex use only.\n *\n * @internal\n */\n @Prop() public experimentalRenderingOptions = '';\n\n /**\n * Specifies if and how to render feature lines.\n */\n @Prop({ attribute: null }) public featureLines?: FeatureLineOptions;\n\n /**\n * Specifies the halo selection properties.\n * Parameter notes:\n * * lineWidth values supported currently are 0-5. This width is currently the value x2. For example, 1 will have a pixel width of 2.\n * * color is optional. This will be the color of the selected items in the viewer.\n * * opacity is also optional. The opacity will be applied to everything selected besides the highlighted outer line.\n */\n @Prop({ attribute: null })\n public selectionHighlighting?: SelectionHighlightingOptions;\n\n /**\n * Specifies how selected features should be highlighted.\n */\n @Prop({ attribute: null })\n public featureHighlighting?: FeatureHighlightOptions;\n\n /**\n * Specifies if and how to compare to another scene\n */\n @Prop({ attribute: null })\n public sceneComparison?: SceneComparisonOptions;\n\n /**\n * Specifies some options related to presentation of cross-sections\n */\n @Prop({ attribute: null })\n public crossSectioning?: CrossSectioningOptions;\n\n /**\n * Specifies when a feature map is returned from rendering. Feature maps\n * include information about the surfaces, edges and cross sections that are\n * in a frame.\n *\n * Possible values are:\n *\n * * `undefined`: A feature map is never requested.\n * * `final`: A feature map is only requested on the final frame.\n * * `all`: A feature map is requested for every frame.\n *\n * Feature maps can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance.\n */\n @Prop() public featureMaps?: FrameType;\n\n /**\n * An optional value that will debounce frame updates when resizing\n * this viewer element.\n */\n @Prop() public resizeDebounce = 100;\n\n /**\n * The last frame that was received, which can be used to inspect the scene\n * and camera information.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public frame: Frame | undefined;\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public stream?: ViewerStream;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public stencilBuffer: StencilBufferManager = new StencilBufferManager(\n this.hostElement\n );\n\n /**\n * Represents the current viewport of the viewer. The viewport represents the\n * dimensions of the canvas where a frame is rendered. It contains methods for\n * translating between viewport coordinates, frame coordinates and world\n * coordinates.\n */\n @Prop({ mutable: true })\n public viewport: Viewport = Viewport.fromDimensions(Dimensions.create(0, 0));\n\n /**\n * The annotation controller for accessing annotations associated with the\n * scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public annotations: AnnotationController | undefined;\n\n /**\n * The controller for accessing model views associated with the scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public modelViews: ModelViewController | undefined;\n\n /**\n * The controller for accessing and viewing PMI.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public pmi: PmiController | undefined;\n\n /**\n * The controller for accessing and viewing SceneItems.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public sceneItems: SceneItemController | undefined;\n\n /**\n * The controller for accessing canvases and their associated markup.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public canvases: CanvasController | undefined;\n\n /**\n * Experimental flag indicating that connections to Vertex should be established\n * if the viewer is initially hidden through its own style or computed style, or\n * has not been scrolled into view.\n *\n * *Caution:* Setting this flag can result in reduced performance,\n * and should generally not be used in a production setting.\n */\n @Prop()\n public experimentalSkipVisibilityCheck = false;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer.\n * The event includes the location of the tap or click.\n *\n * This event can be used in combination with the {@link VertexViewer.scene scene} method\n * to query for items at the point of the tap.\n *\n * @see {@link Scene.raycaster Scene.raycaster} for more information.\n */\n @Event() public tap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user double taps or clicks a location in the viewer.\n * The event includes the location of the first tap or click.\n */\n @Event() public doubletap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer and the\n * configured amount of time passes without receiving a mouseup or touchend.\n * The event includes the location of the tap or click.\n */\n @Event() public longpress!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event when a frame has been received by the viewer. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameReceived!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a frame has been drawn to the viewer's canvas. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameDrawn!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a provided oauth2 token is about to expire, or is about to expire,\n * causing issues with establishing a websocket connection, or performing API calls.\n */\n @Event() public tokenExpired!: EventEmitter<void>;\n\n /**\n * Emits an event when the connection status changes for the viewer\n */\n @Event() public connectionChange!: EventEmitter<ConnectionStatus>;\n\n /**\n * Emits an event when the scene is ready to be interacted with.\n */\n @Event() public sceneReady!: EventEmitter<void>;\n\n /**\n * Emits an event when a frame is received with a different scene attribute.\n */\n @Event() public sceneChanged!: EventEmitter<void>;\n\n /**\n * Emits an event when the user has started an interaction.\n */\n @Event() public interactionStarted!: EventEmitter<void>;\n\n /**\n * Emits an event when the user hs finished an interaction.\n */\n @Event() public interactionFinished!: EventEmitter<void>;\n\n /**\n * Emits an event when the camera type changes.\n */\n @Event() public cameraTypeChanged!: EventEmitter<FrameCameraType>;\n\n /**\n * Emits an event when the state for annotation changes.\n */\n @Event() public annotationStateChanged!: EventEmitter<AnnotationState>;\n\n /**\n * Used for internals or testing.\n *\n * @internal\n */\n @Event() public deviceIdChange!: EventEmitter<string>;\n\n @Event() public dimensionschange!: EventEmitter<Dimensions.Dimensions>;\n\n @State() private dimensions?: Dimensions.Dimensions;\n @State() private hostDimensions?: Dimensions.Dimensions;\n @State() private errorMessage?: string;\n\n @State() private cursor?: Cursor;\n\n /**\n * This stores internal state that you want to preserve across live-reloads,\n * but shouldn't trigger a refresh if the data changes. Marking this with\n * @State to allow to preserve state across live-reloads.\n */\n @State() private stateMap: StateMap = {\n cursorManager: new CursorManager(),\n streamState: { type: 'disconnected' },\n };\n\n private viewerContainerElement?: HTMLElement;\n private canvasContainerElement?: HTMLElement;\n private canvasElement?: HTMLCanvasElement;\n\n private canvasRenderer!: CanvasRenderer;\n\n private mutationObserver?: MutationObserver;\n private styleObserver?: MutationObserver;\n private resizeObserver?: ResizeObserver;\n private visibilityObserver?: VisibilityObserver;\n private isResizing?: boolean;\n private isResizeUpdate?: boolean;\n private isVisible = false;\n\n private resizeTimer?: NodeJS.Timeout;\n\n private interactionHandlers: InteractionHandler[] = [];\n private defaultInteractionHandlerDisposables: Array<Disposable> = [];\n private tapHandlerDisposable?: Disposable;\n private interactionApi!: InteractionApi;\n private tapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private defaultTapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private baseInteractionHandler?: BaseInteractionHandler;\n\n private internalFrameDrawnDispatcher = new EventDispatcher<Frame>();\n\n public constructor() {\n this.handleElementResize = this.handleElementResize.bind(this);\n this.handleVisibilityChange = this.handleVisibilityChange.bind(this);\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.visibilityObserver = new VisibilityObserver(\n this.handleVisibilityChange\n );\n this.isVisible = this.visibilityObserver.isVisible(this.hostElement);\n\n if (!this.isVisible) {\n this.visibilityObserver?.observe(this.hostElement);\n }\n\n this.stream?.resume();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.updateResolvedConfig();\n this.calculateComponentDimensions();\n\n this.resizeObserver = new ResizeObserver(this.handleElementResize);\n this.registerSlotChangeListeners();\n\n const config = this.getResolvedConfig();\n const client = new SceneViewAPIClient(config.network.sceneViewHost);\n\n this.annotations = new AnnotationController(\n client,\n () => this.token,\n () => this.deviceId\n );\n this.annotations.onStateChange.on((state: AnnotationState) => {\n this.annotationStateChanged.emit(state);\n\n const numberOfAnnotationSets = Object.keys(state.annotations).length;\n this.handleAnnotationSetsChange(numberOfAnnotationSets);\n });\n\n this.stream =\n this.stream ??\n new ViewerStream(new WebSocketClientImpl(), {\n loggingEnabled: config.flags.logWsMessages,\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n this.addStreamListeners();\n\n this.modelViews = new ModelViewController(\n client,\n this.stream,\n () => this.token,\n () => this.deviceId\n );\n\n this.pmi = new PmiController(\n client,\n () => this.token,\n () => this.deviceId\n );\n\n this.sceneItems = new SceneItemController(\n client,\n () => this.token,\n () => this.deviceId\n );\n\n this.canvases = new CanvasController(\n client,\n () => this.token,\n () => this.deviceId\n );\n\n this.updateStreamAttributes();\n this.stateMap.cursorManager.onChanged.on(() => this.handleCursorChanged());\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n this.interactionApi = this.createInteractionApi();\n this.isVisible =\n this.visibilityObserver?.isVisible(this.hostElement) ?? true;\n\n if (this.canvasContainerElement != null) {\n this.resizeObserver?.observe(this.canvasContainerElement);\n }\n\n this.loadOrResumeStream().catch((e) => {\n console.error('Error loading scene', e);\n });\n\n await this.initializeDefaultInteractionHandlers();\n this.injectViewerApi();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.visibilityObserver?.disconnect();\n this.annotations?.disconnect();\n\n this.stream?.pause();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div\n ref={(ref) => (this.viewerContainerElement = ref)}\n class=\"viewer-container\"\n style={{ cursor: cssCursor(this.cursor ?? '') }}\n onContextMenu={(event) => event.preventDefault()}\n >\n <div\n ref={(ref) => (this.canvasContainerElement = ref)}\n class={classnames('canvas-container', {\n 'enable-pointer-events ': window.PointerEvent != null,\n })}\n >\n <canvas\n ref={(ref) => {\n this.canvasElement = ref;\n this.stateMap.interactionTarget = ref;\n }}\n class=\"canvas\"\n ></canvas>\n {this.errorMessage != null ? (\n <div class=\"error-message\">{this.errorMessage}</div>\n ) : null}\n </div>\n <slot></slot>\n </div>\n </Host>\n );\n }\n\n /**\n * @internal\n */\n @Method()\n public async dispatchFrameDrawn(frame: Frame): Promise<void> {\n this.frame = frame;\n this.internalFrameDrawnDispatcher.emit(frame);\n this.frameDrawn.emit(frame);\n }\n\n /**\n * Registers and initializes an interaction handler with the viewer. Returns a\n * `Disposable` that should be used to deregister the interaction handler.\n *\n * `InteractionHandler`s are used to build custom mouse and touch interactions\n * for the viewer. Use `<vertex-viewer camera-controls=\"false\" />` to disable\n * the default camera controls provided by the viewer.\n *\n * @example\n * ```\n * class CustomInteractionHandler extends InteractionHandler {\n * private element: HTMLElement;\n * private api: InteractionApi;\n *\n * public dispose(): void {\n * this.element.removeEventListener('click', this.handleElementClick);\n * }\n *\n * public initialize(element: HTMLElement, api: InteractionApi): void {\n * this.api = api;\n * this.element = element;\n * this.element.addEventListener('click', this.handleElementClick);\n * }\n *\n * private handleElementClick = (event: MouseEvent) => {\n * api.tap({ x: event.clientX, y: event.clientY });\n * }\n * }\n *\n * const viewer = document.querySelector(\"vertex-viewer\");\n * viewer.registerInteractionHandler(new CustomInteractionHandler);\n * ```\n *\n * @param interactionHandler The interaction handler to register.\n * @returns {Promise<void>} A promise containing the disposable to use to\n * deregister the handler.\n */\n @Method()\n public async registerInteractionHandler(\n interactionHandler: InteractionHandler\n ): Promise<Disposable> {\n this.interactionHandlers.push(interactionHandler);\n this.initializeInteractionHandler(interactionHandler);\n return {\n dispose: () => {\n const index = this.interactionHandlers.indexOf(interactionHandler);\n if (index !== -1) {\n this.interactionHandlers[index].dispose();\n this.interactionHandlers.splice(index, 1);\n }\n },\n };\n }\n\n /**\n * Registers a key interaction to be invoked when a specific set of\n * keys are pressed during a `tap` event.\n *\n * `KeyInteraction`s are used to build custom keyboard shortcuts for the\n * viewer using the current state of they keyboard to determine whether\n * the `fn` should be invoked. Use `<vertex-viewer keyboard-controls=\"false\" />`\n * to disable the default keyboard shortcuts provided by the viewer.\n *\n * @example\n * ```\n * class CustomKeyboardInteraction extends KeyInteraction<TapEventDetails> {\n * constructor(private viewer: HTMLVertexViewerElement) {}\n *\n * public predicate(keyState: KeyState): boolean {\n * return keyState['Alt'];\n * }\n *\n * public async fn(event: TapEventDetails) {\n * const scene = await this.viewer.scene();\n * const result = await scene.raycaster().hitItems(event.position);\n *\n * if (result.hits.length > 0) {\n * await scene\n * .camera()\n * .fitTo(q => q.withItemId(result.hits[0].itemId))\n * .render();\n * }\n * }\n * }\n * ```\n *\n * @param keyInteraction - The `KeyInteraction` to register.\n */\n @Method()\n public async registerTapKeyInteraction(\n keyInteraction: KeyInteraction<TapEventDetails>\n ): Promise<void> {\n this.tapKeyInteractions = [...this.tapKeyInteractions, keyInteraction];\n }\n\n /**\n * The HTML element that will handle interaction events from the user. Used by\n * components to listen for interaction events from the same element as the\n * viewer. Note, this property maybe removed in the future when refactoring\n * our interaction handling.\n *\n * @internal\n * @deprecated Use `InteractionHandler`.\n */\n @Method()\n public async getInteractionTarget_DEPRECATED(): Promise<HTMLElement> {\n if (this.stateMap.interactionTarget != null) {\n return this.stateMap.interactionTarget;\n } else throw new Error('Interaction target is undefined.');\n }\n\n /**\n * Adds a cursor to the viewer, and displays it if the cursor has the highest\n * priority.\n *\n * Cursors are managed as a prioritized list. A cursor is displayed if it has\n * the highest priority or if the cursor is the most recently added cursor in\n * the set of cursors with the same priority.\n *\n * To remove a cursor, call `dispose()` on the returned disposable.\n *\n * @param cursor The cursor to add.\n * @param priority The priority of the cursor.\n * @returns A disposable that can be used to remove the cursor.\n * @see See {@link CursorManager} for constants to pass to `priority`.\n */\n @Method()\n public async addCursor(\n cursor: Cursor,\n priority?: number\n ): Promise<Disposable> {\n return this.stateMap.cursorManager.add(cursor, priority);\n }\n\n @Method()\n public async getInteractionHandlers(): Promise<InteractionHandler[]> {\n return this.interactionHandlers;\n }\n\n /**\n * @internal\n * @ignore\n */\n @Method()\n public async getKeyInteractions(): Promise<\n KeyInteraction<TapEventDetails>[]\n > {\n return this.tapKeyInteractions;\n }\n\n @Method()\n public async getBaseInteractionHandler(): Promise<\n BaseInteractionHandler | undefined\n > {\n return this.baseInteractionHandler;\n }\n\n /**\n * @deprecated Use `token`.\n */\n @Method()\n public async getJwt(): Promise<string | undefined> {\n return this.token;\n }\n\n @Watch('src')\n public handleSrcChanged(src: string | undefined): void {\n if (src != null) {\n this.load(src, { cameraType: this.cameraType });\n } else {\n this.unload();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('cameraControls')\n protected handleCameraControlsChanged(): void {\n this.initializeDefaultCameraInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('keyboardControls')\n protected handleKeyboardControlsChanged(): void {\n this.initializeDefaultKeyboardInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('rotateAroundTapPoint')\n protected handleRotateAboutTapPointChanged(): void {\n this.updateStreamAttributes();\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n } else {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate');\n }\n }\n\n @Watch('cameraType')\n protected handleCameraTypeChanged(\n updatedCameraType: string,\n previousCameraType: string\n ): void {\n if (updatedCameraType !== previousCameraType) {\n this.updateCameraType();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('experimentalRenderingOptions')\n @Watch('depthBuffers')\n @Watch('featureHighlighting')\n @Watch('featureLines')\n @Watch('featureMaps')\n @Watch('noDefaultLights')\n @Watch('phantom')\n @Watch('sceneComparison')\n @Watch('crossSectioning')\n @Watch('selectionHighlighting')\n protected handleStreamAttributesChanged(): void {\n this.updateStreamAttributes();\n }\n\n /**\n * @ignore\n */\n @Watch('enableTemporalRefinement')\n protected handleEnableTemporalRefinementChanged(): void {\n this.updateEnableTemporalRefinement();\n }\n\n /**\n * @ignore\n */\n @Watch('config')\n protected handleConfigChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * @ignore\n */\n @Watch('configEnv')\n protected handleConfigEnvChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * Loads the given scene into the viewer and return a `Promise` that\n * resolves when the scene has been loaded. The specified scene is\n * provided as a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n *\n * @param urn The URN of the resource to load.\n * @param options Optional configurations when loading the scene.\n * cameraType (Optional) The camera type to load. If not included, the default camera type for the resource will be used.\n */\n @Method()\n public async load(urn: string, options?: LoadOptions): Promise<void> {\n const shouldLoadBasedOnVisibility =\n this.experimentalSkipVisibilityCheck || this.isVisible;\n\n if (!shouldLoadBasedOnVisibility) {\n console.debug(\n 'Detected the viewer is hidden. Delaying load until visible.'\n );\n\n return;\n }\n\n if (this.stream != null && this.dimensions != null) {\n const { EXPERIMENTAL_annotationPollingIntervalInMs } =\n this.getResolvedConfig();\n\n this.calculateComponentDimensions();\n\n this.stream.update({\n streamAttributes: this.getStreamAttributes(),\n config: parseAndValidateConfig(this.configEnv, this.config),\n dimensions: this.dimensions,\n frameBgColor: this.getBackgroundColor(),\n });\n await this.stream?.load(\n urn,\n this.clientId,\n this.getDeviceId(),\n this.getResolvedConfig(),\n options?.cameraType\n );\n this.sceneReady.emit();\n\n if (EXPERIMENTAL_annotationPollingIntervalInMs !== undefined) {\n this.annotations?.connect(EXPERIMENTAL_annotationPollingIntervalInMs);\n }\n } else {\n throw new ViewerInitializationError(\n 'Cannot load scene. Viewer has not been initialized.'\n );\n }\n }\n\n /**\n * Disconnects the websocket and removes any internal state associated with\n * the scene.\n */\n @Method()\n public async unload(): Promise<void> {\n if (this.stream != null) {\n this.annotations?.disconnect();\n this.stream.disconnect();\n\n this.frame = undefined;\n this.errorMessage = undefined;\n }\n\n if (this.canvasElement != null) {\n const context = this.canvasElement.getContext('2d');\n if (context != null) {\n context.clearRect(\n 0,\n 0,\n this.canvasElement.width,\n this.canvasElement.height\n );\n }\n }\n }\n\n /**\n * Disconnects the websocket and clears the internal state associated with\n * the scene before reconnecting to the same scene.\n */\n @Method()\n public async reload(): Promise<void> {\n if (this.src != null) {\n await this.unload();\n await this.load(this.src, { cameraType: this.cameraType });\n }\n }\n\n /**\n * Returns an object that is used to perform operations on the `Scene` that's\n * currently being viewed. These operations include updating items,\n * positioning the camera and performing hit tests.\n */\n @Method()\n public async scene(): Promise<Scene> {\n return this.createScene();\n }\n\n /**\n * Returns `true` indicating that the scene is ready to be interacted with.\n */\n @Method()\n public async isSceneReady(): Promise<boolean> {\n return this.stateMap.streamState.type === 'connected';\n }\n\n @Listen('tap')\n private async handleTapEvent(\n event: CustomEvent<TapEventDetails>\n ): Promise<void> {\n this.tapKeyInteractions\n .filter((i) => i.predicate(event.detail))\n .forEach((i) => i.fn(event.detail));\n }\n\n private emitConnectionChange(status: ConnectionStatus): void {\n if (status.status === 'connected') {\n // NOTE: Uncomment once FSS is deployed.\n // if (status.jwt.length === 0) {\n // throw new MissingJWTError('JWT is empty');\n // }\n }\n this.connectionChange.emit(status);\n }\n\n private handleElementResize(entries: ResizeObserverEntry[]): void {\n const dimensionsHaveChanged =\n entries.length > 0 &&\n this.dimensions != null &&\n !Dimensions.isEqual(entries[0].contentRect, this.viewport);\n\n if (dimensionsHaveChanged) {\n if (this.resizeTimer != null) {\n clearTimeout(this.resizeTimer);\n this.resizeTimer = undefined;\n }\n\n if (!this.isResizing) {\n this.resizeTimer = setTimeout(() => {\n this.isResizing = true;\n this.isResizeUpdate = true;\n this.recalculateComponentDimensions();\n }, this.resizeDebounce);\n }\n }\n }\n\n private handleVisibilityChange(visible: boolean): void {\n this.isVisible = visible;\n\n if (this.isVisible) {\n this.visibilityObserver?.disconnect();\n\n this.loadOrResumeStream();\n }\n }\n\n private async loadOrResumeStream(): Promise<void> {\n const streamPaused = this.stream?.isPaused() ?? false;\n\n if (this.src != null && !streamPaused) {\n await this.load(this.src, { cameraType: this.cameraType });\n } else if (streamPaused) {\n this.stream?.resume();\n }\n }\n\n private registerSlotChangeListeners(): void {\n this.mutationObserver = new MutationObserver((_) => this.injectViewerApi());\n this.mutationObserver.observe(this.hostElement, {\n childList: true,\n subtree: true,\n });\n\n this.styleObserver = new MutationObserver((_) => this.syncViewerStyles());\n this.styleObserver.observe(this.hostElement, {\n attributes: true,\n attributeFilter: ['style'],\n });\n }\n\n private injectViewerApi(): void {\n function queryChildren(el: Element): HTMLElement[] {\n return Array.from(el.querySelectorAll('*'));\n }\n\n const children = queryChildren(this.hostElement);\n\n children\n .filter((node) => node.nodeName.startsWith('VERTEX-'))\n .reduce(\n (elements, element) => [\n ...elements,\n element,\n ...queryChildren(element),\n ],\n [] as Element[]\n )\n .forEach((node) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (node as any).viewer = this.hostElement;\n });\n }\n\n private syncViewerStyles(): void {\n const backgroundColor = this.getBackgroundColor();\n\n this.stream?.update({\n frameBgColor: backgroundColor,\n streamAttributes: this.getStreamAttributes(),\n });\n }\n\n private calculateComponentDimensions(): void {\n const maxPixelCount = 2073600;\n const bounds = this.getBounds();\n if (bounds?.width != null && bounds?.height != null) {\n const measuredViewport = Dimensions.create(bounds.width, bounds.height);\n const trimmedViewport = Dimensions.scaleFit(\n maxPixelCount,\n measuredViewport\n );\n\n this.hostDimensions = measuredViewport;\n this.dimensions =\n trimmedViewport != null\n ? Dimensions.create(trimmedViewport.width, trimmedViewport.height)\n : undefined;\n this.viewport = Viewport.fromDimensions(\n this.getCanvasDimensions() ?? Dimensions.create(0, 0)\n );\n }\n }\n\n private recalculateComponentDimensions(): void {\n if (this.isResizing) {\n this.calculateComponentDimensions();\n this.isResizing = false;\n\n if (this.stream?.getState().type === 'connected') {\n this.updateDimensions(this.dimensions);\n }\n }\n }\n\n private reportPerformance(timings: Timing[]): void {\n if (this.stateMap.streamState.type === 'connected') {\n const payload = {\n timings: timings.map((t) => ({\n receiveToPaintDuration: toProtoDuration(t.duration),\n })),\n };\n this.getStream().recordPerformance(payload, false);\n }\n }\n\n private addStreamListeners(): void {\n this.stateMap.streamListeners = this.getStream().stateChanged.on((s) => {\n this.handleStreamStateChanged(this.stateMap.streamState, s);\n });\n }\n\n private handleStreamStateChanged(\n previous: ViewerStreamState,\n state: ViewerStreamState\n ): void {\n this.stateMap.streamState = state;\n\n if (state.type === 'connecting') {\n this.handleConnecting(previous, state);\n } else if (state.type === 'connected') {\n this.handleConnected(previous, state);\n } else if (state.type === 'connection-failed') {\n this.handleConnectionFailed(previous, state);\n } else if (state.type === 'disconnected') {\n this.handleDisconnected(previous, state);\n }\n }\n\n private handleConnecting(\n previous: ViewerStreamState,\n state: Connecting\n ): void {\n if (previous.type !== 'connecting') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'connecting' });\n }\n }\n\n private handleConnected(previous: ViewerStreamState, state: Connected): void {\n this.token = state.token.token;\n\n if (previous.type !== 'connected') {\n this.errorMessage = undefined;\n this.canvasRenderer = measureCanvasRenderer(\n paintTime,\n createCanvasRenderer(),\n this.getResolvedConfig().flags.logFrameRate,\n (timings) => this.reportPerformance(timings)\n );\n this.emitConnectionChange({\n status: 'connected',\n jwt: state.token.token,\n });\n this.deviceIdChange.emit(state.deviceId);\n }\n\n if (this.frame?.getId() !== state.frame.getId()) {\n this.updateFrame(state.frame);\n }\n\n this.updateDimensions(this.dimensions);\n }\n\n private handleConnectionFailed(\n previous: ViewerStreamState,\n state: ConnectionFailed\n ): void {\n if (previous.type !== 'connection-failed') {\n this.token = undefined;\n this.errorMessage = state.message;\n this.emitConnectionChange({\n status: 'connection-failed',\n errorMessage: state.message,\n });\n }\n }\n\n private handleDisconnected(\n previous: ViewerStreamState,\n state: Disconnected\n ): void {\n if (previous.type !== 'disconnected') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'disconnected' });\n }\n }\n\n private updateDimensions(dimensions?: Dimensions.Dimensions): void {\n this.stream?.update({ dimensions });\n this.dimensionschange.emit(dimensions);\n }\n\n private async updateFrame(frame: Frame): Promise<void> {\n const canvasDimensions = this.getCanvasDimensions();\n\n if (\n this.canvasElement != null &&\n canvasDimensions != null &&\n this.frame?.getId() !== frame.getId()\n ) {\n const canvas = this.canvasElement.getContext('2d');\n if (canvas != null) {\n const previousFrame = this.frame;\n this.frame = SceneViewSummary.copySummaryIfInvalid(\n frame,\n previousFrame\n );\n\n this.updateInteractionApi(previousFrame);\n\n const data = {\n canvas,\n canvasDimensions,\n dimensions: this.dimensions,\n frame: this.frame,\n viewport: this.viewport,\n beforeDraw: () => {\n this.updateCanvasDimensions(canvasDimensions);\n this.isResizeUpdate = false;\n },\n predicate: () => {\n if (this.isResizeUpdate) {\n return (\n this.dimensions == null ||\n Dimensions.isEqual(\n this.dimensions,\n data.frame.image.imageAttr.frameDimensions\n )\n );\n }\n return true;\n },\n };\n\n this.frameReceived.emit(this.frame);\n\n if (this.frame.scene.hasChanged) {\n this.sceneChanged.emit();\n }\n\n const drawnFrame = await this.canvasRenderer(data);\n\n if (drawnFrame != null) {\n this.updateViewerBackground();\n\n this.dispatchFrameDrawn(drawnFrame);\n }\n }\n }\n }\n\n private updateViewerBackground(): void {\n const backgroundColor = this.getBackgroundColor();\n\n writeDOM(() => {\n this.viewerContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null ? Color.toHexString(backgroundColor) : '#ffffff'\n );\n this.canvasContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null ? Color.toHexString(backgroundColor) : '#ffffff'\n );\n });\n }\n\n private async initializeDefaultInteractionHandlers(): Promise<void> {\n await this.initializeDefaultCameraInteractionHandlers();\n await this.initializeDefaultTapInteractionHandler();\n this.initializeDefaultKeyboardInteractionHandlers();\n\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n }\n }\n\n private clearDefaultCameraInteractionHandlers(): void {\n this.defaultInteractionHandlerDisposables.forEach((disposable) =>\n disposable.dispose()\n );\n this.defaultInteractionHandlerDisposables = [];\n }\n\n private clearDefaultKeyboardInteractions(): void {\n this.defaultTapKeyInteractions.forEach((interaction) => {\n const index = this.tapKeyInteractions.indexOf(interaction);\n if (index !== -1) {\n this.tapKeyInteractions.splice(index, 1);\n }\n });\n this.tapKeyInteractions = [];\n }\n\n private async initializeDefaultCameraInteractionHandlers(): Promise<void> {\n this.clearDefaultCameraInteractionHandlers();\n\n if (this.cameraControls) {\n if (window.PointerEvent != null) {\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new PointerInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler\n );\n const multiPointerDisposable = await this.registerInteractionHandler(\n new MultiPointerInteractionHandler()\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n multiPointerDisposable,\n ];\n } else {\n // fallback to touch events and mouse events as a default\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new MouseInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler\n );\n const touchDisposable = await this.registerInteractionHandler(\n new TouchInteractionHandler()\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n touchDisposable,\n ];\n }\n }\n }\n\n private initializeDefaultKeyboardInteractionHandlers(): void {\n this.clearDefaultKeyboardInteractions();\n\n if (this.keyboardControls && this.stream != null) {\n this.baseInteractionHandler?.setDefaultKeyboardControls(\n this.keyboardControls\n );\n\n const flyToPart = new FlyToPartKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale()\n );\n const flyToPosition = new FlyToPositionKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale(),\n () => this.createScene()\n );\n\n this.registerTapKeyInteraction(flyToPart);\n this.registerTapKeyInteraction(flyToPosition);\n\n this.defaultTapKeyInteractions = [flyToPart, flyToPosition];\n }\n }\n\n private async initializeDefaultTapInteractionHandler(): Promise<void> {\n if (this.tapHandlerDisposable == null) {\n if (window.PointerEvent != null) {\n const tapInteractionHandler = new TapInteractionHandler(\n 'pointerdown',\n 'pointerup',\n 'pointermove',\n () => this.getResolvedConfig()\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler\n );\n } else {\n const tapInteractionHandler = new TapInteractionHandler(\n 'mousedown',\n 'mouseup',\n 'mousemove',\n () => this.getResolvedConfig()\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler\n );\n }\n }\n }\n\n private initializeInteractionHandler(handler: InteractionHandler): void {\n if (this.stateMap.interactionTarget == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction target is undefined.'\n );\n }\n if (this.interactionApi == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction APi is undefined.'\n );\n }\n handler.initialize(this.stateMap.interactionTarget, this.interactionApi);\n }\n\n private createInteractionApi(): InteractionApi {\n if (this.stream == null) {\n throw new ComponentInitializationError(\n 'Cannot create interaction API. Component has not been initialized.'\n );\n }\n\n return this.frame == null || this.frame.scene.camera.isPerspective()\n ? new InteractionApiPerspective(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished\n )\n : new InteractionApiOrthographic(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished\n );\n }\n\n private handleCursorChanged(): void {\n window.requestAnimationFrame(() => {\n this.cursor = this.stateMap.cursorManager.getActiveCursor();\n });\n }\n\n private async createScene(): Promise<Scene> {\n const state = await this.waitForConnectedState();\n\n const cameraTypeMapper = toPbCameraTypeOrThrow();\n\n const { frame, sceneId, sceneViewId, worldOrientation } = state;\n\n return new Scene(\n this.getStream(),\n frame,\n fromPbFrameOrThrow(worldOrientation),\n cameraTypeMapper,\n () => this.getImageScale(),\n this.viewport,\n sceneId,\n sceneViewId\n );\n }\n\n /**\n * This function is currently not in use, but will be required\n * when we want to automatically configure the background color of\n * JPEG images.\n */\n private getBackgroundColor(): Color.Color | undefined {\n if (this.canvasContainerElement != null) {\n const imageBackground = getElementPropertyValue(\n this.hostElement,\n '--image-background'\n );\n const viewerBackground = getElementPropertyValue(\n this.hostElement,\n '--viewer-background'\n );\n const propertyColor = imageBackground ?? viewerBackground;\n\n return propertyColor != null\n ? Color.fromCss(propertyColor)\n : Color.create(255, 255, 255);\n }\n }\n\n private getBounds(): ClientRect | undefined {\n return getElementBoundingClientRect(this.hostElement);\n }\n\n private getCanvasDimensions(): Dimensions.Dimensions | undefined {\n return this.getResolvedConfig().flags.letterboxFrames\n ? this.dimensions\n : this.hostDimensions;\n }\n\n private getImageScale(): Point.Point | undefined {\n const canvasDimensions = this.getCanvasDimensions();\n if (this.dimensions != null && canvasDimensions != null) {\n return Point.create(\n this.dimensions.width / canvasDimensions.width,\n this.dimensions.height / canvasDimensions.height\n );\n }\n }\n\n private getStreamAttributes(): StreamAttributes {\n return {\n depthBuffers: this.getDepthBufferStreamAttributesValue(),\n experimentalRenderingOptions: this.experimentalRenderingOptions,\n featureHighlighting: this.featureHighlighting,\n featureLines: this.featureLines,\n featureMaps: this.featureMaps,\n frames: {\n frameBackgroundColor: this.getBackgroundColor(),\n },\n noDefaultLights: this.noDefaultLights,\n phantom: this.phantom,\n sceneComparison: this.sceneComparison,\n selectionHighlighting: this.selectionHighlighting,\n crossSectioning: this.crossSectioning,\n };\n }\n\n private updateCanvasDimensions(dimensions: Dimensions.Dimensions): void {\n if (this.canvasElement != null) {\n this.canvasElement.width = dimensions.width;\n this.canvasElement.height = dimensions.height;\n }\n }\n\n private updateStreamAttributes(): void {\n this.stream?.update({ streamAttributes: this.getStreamAttributes() });\n }\n\n private updateEnableTemporalRefinement(): void {\n this.stream?.update({\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n }\n\n private updateInteractionApi(previousFrame?: Frame): void {\n if (this.frame != null) {\n const hasChangedFromPerspective =\n (previousFrame == null || previousFrame.scene.camera.isPerspective()) &&\n this.frame.scene.camera.isOrthographic();\n const hasChangedFromOrthographic =\n (previousFrame == null ||\n previousFrame.scene.camera.isOrthographic()) &&\n this.frame.scene.camera.isPerspective();\n\n if (hasChangedFromPerspective || hasChangedFromOrthographic) {\n this.interactionApi = this.createInteractionApi();\n this.cameraType = this.frame.scene.camera.isPerspective()\n ? 'perspective'\n : 'orthographic';\n this.cameraTypeChanged.emit(this.cameraType);\n\n this.interactionHandlers.forEach((handler) =>\n this.initializeInteractionHandler(handler)\n );\n }\n }\n }\n\n private updateCameraType(): void {\n if (this.frame != null) {\n if (\n this.cameraType === 'orthographic' &&\n this.frame.scene.camera.isPerspective()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toOrthographic(\n this.frame.scene.camera,\n this.frame.scene.boundingBox\n )\n ),\n });\n } else if (\n this.cameraType === 'perspective' &&\n this.frame.scene.camera.isOrthographic()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toPerspective(this.frame.scene.camera)\n ),\n });\n }\n }\n }\n\n private handleAnnotationSetsChange(numberOfAnnotationSets: number): void {\n if (\n numberOfAnnotationSets > 0 &&\n this.getStreamAttributes().depthBuffers == null\n ) {\n // Annotation sets are present in the viewer, but depth buffers are not being requested.\n // The annotation sets require the depth buffers to render, so turn on depth buffers.\n this.stateMap.depthBuffersOverrideForAnnotations = true;\n this.updateStreamAttributes();\n } else if (\n numberOfAnnotationSets === 0 &&\n this.stateMap.depthBuffersOverrideForAnnotations\n ) {\n // Depth buffers were turned on because annotation sets were present in the viewer.\n // However, the annotation sets are no longer present, so the depth buffer override is no longer needed.\n this.stateMap.depthBuffersOverrideForAnnotations = false;\n this.updateStreamAttributes();\n }\n }\n\n private getDepthBufferStreamAttributesValue(): FrameType {\n const depthBuffer =\n this.depthBuffers ??\n (this.rotateAroundTapPoint ||\n this.stateMap.depthBuffersOverrideForAnnotations\n ? 'final'\n : undefined);\n return depthBuffer;\n }\n\n private updateResolvedConfig(): void {\n this.resolvedConfig = parseAndValidateConfig(this.configEnv, this.config);\n }\n\n private getResolvedConfig(): Config {\n return getRequiredProp(\n 'Resolved config is undefined',\n () => this.resolvedConfig\n );\n }\n\n private getStream(): ViewerStream {\n return getRequiredProp('Stream is undefined', () => this.stream);\n }\n\n private getDeviceId(): string | undefined {\n if (this.deviceId == null) {\n try {\n this.deviceId = getStorageEntry(\n StorageKeys.DEVICE_ID,\n (entry) => entry['device-id']\n );\n } catch (e) {\n console.warn('Cannot read device ID. Local storage is not supported.');\n }\n\n if (this.deviceId == null) {\n this.deviceId = UUID.create();\n\n try {\n upsertStorageEntry(StorageKeys.DEVICE_ID, {\n ['device-id']: this.deviceId,\n });\n } catch (e) {\n console.warn(\n 'Cannot write device ID. Local storage is not supported.'\n );\n }\n }\n }\n return this.deviceId;\n }\n\n private async waitForConnectedState(): Promise<Connected> {\n if (this.stateMap.streamState.type !== 'connected') {\n console.debug(\n 'Stream was not in a connected state. Waiting for successful connection.'\n );\n return new Promise<Connected>((resolve, reject) => {\n const disposable = this.getStream().onStateChanged((state) => {\n if (state.type === 'connected') {\n resolve(state);\n }\n });\n\n setTimeout(() => {\n disposable.dispose();\n reject(new Error('Timed out waiting for connected state.'));\n }, DEFAULT_VIEWER_SCENE_WAIT_MS);\n });\n }\n\n return this.stateMap.streamState;\n }\n}\n\nfunction getRequiredProp<T>(errorMsg: string, getter: () => T | undefined): T {\n const value = getter();\n if (value != null) {\n return value;\n } else throw new Error(errorMsg);\n}\n"]}
1
+ {"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../../src/components/viewer/viewer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\nimport { SceneViewAPIClient } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb_service';\nimport { toProtoDuration, WebSocketClientImpl } from '@vertexvis/stream-api';\nimport { Color, Disposable, EventDispatcher, UUID } from '@vertexvis/utils';\nimport classnames from 'classnames';\n\nimport {\n CrossSectioningOptions,\n FeatureHighlightOptions,\n FeatureLineOptions,\n FrameType,\n PhantomOptions,\n SceneComparisonOptions,\n SelectionHighlightingOptions,\n StreamAttributes,\n} from '../../interfaces';\nimport {\n AnnotationController,\n AnnotationState,\n} from '../../lib/annotations/controller';\nimport { CanvasController } from '../../lib/canvases';\nimport {\n Config,\n parseAndValidateConfig,\n PartialConfig,\n} from '../../lib/config';\nimport { Cursor, CursorManager } from '../../lib/cursors';\nimport { cssCursor } from '../../lib/dom';\nimport { Environment } from '../../lib/environment';\nimport {\n ComponentInitializationError,\n InteractionHandlerError,\n MissingJWTError,\n ViewerInitializationError,\n} from '../../lib/errors';\nimport {\n InteractionApiOrthographic,\n InteractionApiPerspective,\n} from '../../lib/interactions';\nimport { BaseInteractionHandler } from '../../lib/interactions/baseInteractionHandler';\nimport { FlyToPartKeyInteraction } from '../../lib/interactions/flyToPartKeyInteraction';\nimport { FlyToPositionKeyInteraction } from '../../lib/interactions/flyToPositionKeyInteraction';\nimport { InteractionApi } from '../../lib/interactions/interactionApi';\nimport { InteractionHandler } from '../../lib/interactions/interactionHandler';\nimport { KeyInteraction } from '../../lib/interactions/keyInteraction';\nimport { MouseInteractionHandler } from '../../lib/interactions/mouseInteractionHandler';\nimport { MultiPointerInteractionHandler } from '../../lib/interactions/multiPointerInteractionHandler';\nimport { PointerInteractionHandler } from '../../lib/interactions/pointerInteractionHandler';\nimport { TapEventDetails } from '../../lib/interactions/tapEventDetails';\nimport { TapInteractionHandler } from '../../lib/interactions/tapInteractionHandler';\nimport { TouchInteractionHandler } from '../../lib/interactions/touchInteractionHandler';\nimport { fromPbFrameOrThrow, toPbCameraTypeOrThrow } from '../../lib/mappers';\nimport { paintTime, Timing } from '../../lib/meters';\nimport { ModelViewController } from '../../lib/model-views/controller';\nimport { PmiController } from '../../lib/pmi';\nimport {\n CanvasRenderer,\n createCanvasRenderer,\n measureCanvasRenderer,\n} from '../../lib/rendering';\nimport { SceneItemController } from '../../lib/scene-items/controller';\nimport { Scene } from '../../lib/scenes/scene';\nimport { writeDOM } from '../../lib/stencil';\nimport {\n getStorageEntry,\n StorageKeys,\n upsertStorageEntry,\n} from '../../lib/storage';\nimport {\n Connected,\n Connecting,\n ConnectionFailed,\n Disconnected,\n ViewerStreamState,\n} from '../../lib/stream/state';\nimport { ViewerStream } from '../../lib/stream/stream';\nimport {\n FrameCamera,\n Orientation,\n SceneViewSummary,\n StencilBufferManager,\n Viewport,\n} from '../../lib/types';\nimport { Frame } from '../../lib/types/frame';\nimport { FrameCameraType } from '../../lib/types/frameCamera';\nimport { VisibilityObserver } from '../../lib/visibilityObserver';\nimport {\n DEFAULT_VIEWER_SCENE_WAIT_MS,\n getElementBoundingClientRect,\n getElementPropertyValue,\n} from './utils';\n\ninterface ConnectedStatus {\n jwt: string;\n status: 'connected';\n}\n\ninterface ConnectingStatus {\n status: 'connecting';\n}\n\ninterface DisconnectedStatus {\n status: 'disconnected';\n}\n\ninterface ConnectionFailedStatus {\n status: 'connection-failed';\n errorMessage: string;\n}\n\nexport interface LoadOptions {\n cameraType?: FrameCameraType;\n}\n\n/**\n * Internal state values for the component. Used to preserve values across live\n * reload refreshes.\n */\ninterface StateMap {\n streamWorldOrientation?: Orientation;\n cursorManager: CursorManager;\n interactionTarget?: HTMLElement;\n streamState: ViewerStreamState;\n streamListeners?: Disposable;\n depthBuffersOverrideForAnnotations?: boolean;\n}\n\n/** @internal */\nexport type ConnectionStatus =\n | ConnectingStatus\n | ConnectedStatus\n | DisconnectedStatus\n | ConnectionFailedStatus;\n\n@Component({\n tag: 'vertex-viewer',\n styleUrl: 'viewer.css',\n shadow: true,\n})\nexport class Viewer {\n @Element() private hostElement!: HTMLVertexViewerElement;\n\n /**\n * A URN of the scene resource to load when the component is mounted in the\n * DOM tree. The specified resource is a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n */\n @Prop() public src?: string;\n\n /**\n * The Client ID associated with your Vertex Application.\n */\n @Prop() public clientId?: string;\n\n /**\n * Property used for internals or testing.\n *\n * @internal\n */\n @Prop({ mutable: true }) public deviceId?: string;\n\n /**\n * An object or JSON encoded string that defines configuration settings for\n * the viewer.\n */\n @Prop() public config?: PartialConfig | string;\n\n /**\n * Sets the default environment for the viewer. This setting is used for\n * auto-configuring network hosts.\n *\n * Use the `config` property for manually setting hosts.\n *\n * @see Viewer.config\n */\n @Prop() public configEnv: Environment = 'platprod';\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public resolvedConfig?: Config;\n\n /**\n * Enables or disables the default mouse and touch interactions provided by\n * the viewer. Enabled by default.\n */\n @Prop() public cameraControls = true;\n\n /**\n * The type of camera model to represent the scene with. Can be either\n * `perspective` or `orthographic`, and defaults to `perspective`.\n */\n @Prop({ mutable: true, reflect: true }) public cameraType: FrameCameraType =\n 'perspective';\n\n /**\n * Enables or disables the default keyboard shortcut interactions provided by\n * the viewer. Enabled by default, requires `cameraControls` being enabled.\n *\n */\n @Prop() public keyboardControls = true;\n\n /**\n * Sets the rotation interaction behavior. True by default.\n *\n * When rotateAroundTapPoint is true and the user clicks on geometry, then the model will rotate\n * around the point that was clicked. When rotateAroundTapPoint is true and the user clicks\n * in empty space (not on geometry), then the model will rotate around the center of the viewport.\n *\n * When rotateAroundTapPoint is false, then the model will always rotate around the center of the viewport.\n */\n @Prop() public rotateAroundTapPoint = true;\n\n /**\n * A token that can be used to make API calls to other Vertex services.\n *\n * @internal\n */\n @Prop({ mutable: true }) public token?: string;\n\n /**\n * Specifies when a depth buffer is requested from rendering. Possible values\n * are:\n *\n * * `undefined`: A depth buffer is never requested.\n * * `final`: A depth buffer is only requested on the final frame.\n * * `all`: A depth buffer is requested for every frame.\n *\n * Depth buffers can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance. Some features,\n * like measurement and pins, require that depth buffers are requested and\n * will override an 'undefined' value when the feature is active.\n */\n @Prop() public depthBuffers?: FrameType;\n\n /**\n * Specifies how phantom parts should appear.\n * The opacity must be between 0 and 1, where 0 is completely hidden and 1 is completely visible.\n */\n @Prop({ attribute: null })\n public phantom?: PhantomOptions = { opacity: 0.1 };\n\n /**\n * Specifies whether to use the default lights for the scene. When false, default\n * lights are used. When true, no default lights are used, and the lights must\n * be specified separately.\n */\n @Prop() public noDefaultLights = false;\n\n /**\n * Specifies whether to enable temporal refinement of still images.\n */\n @Prop() public enableTemporalRefinement = true;\n\n /**\n * Specifies experimental rendering options. For Vertex use only.\n *\n * @internal\n */\n @Prop() public experimentalRenderingOptions = '';\n\n /**\n * Specifies if and how to render feature lines.\n */\n @Prop({ attribute: null }) public featureLines?: FeatureLineOptions;\n\n /**\n * Specifies the halo selection properties.\n * Parameter notes:\n * * lineWidth values supported currently are 0-5. This width is currently the value x2. For example, 1 will have a pixel width of 2.\n * * color is optional. This will be the color of the selected items in the viewer.\n * * opacity is also optional. The opacity will be applied to everything selected besides the highlighted outer line.\n */\n @Prop({ attribute: null })\n public selectionHighlighting?: SelectionHighlightingOptions;\n\n /**\n * Specifies how selected features should be highlighted.\n */\n @Prop({ attribute: null })\n public featureHighlighting?: FeatureHighlightOptions;\n\n /**\n * Specifies if and how to compare to another scene\n */\n @Prop({ attribute: null })\n public sceneComparison?: SceneComparisonOptions;\n\n /**\n * Specifies options related to presentation of cross-sections.\n * Defaults to showing the cross-section with an end cap that matches the part color.\n */\n @Prop({ attribute: null })\n public crossSectioning?: CrossSectioningOptions = {\n endCapEnabled: true,\n endCapColor: undefined,\n };\n\n /**\n * Specifies when a feature map is returned from rendering. Feature maps\n * include information about the surfaces, edges and cross-sections that are\n * in a frame.\n *\n * Possible values are:\n *\n * * `undefined`: A feature map is never requested.\n * * `final`: A feature map is only requested on the final frame.\n * * `all`: A feature map is requested for every frame.\n *\n * Feature maps can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance.\n */\n @Prop() public featureMaps?: FrameType;\n\n /**\n * An optional value that will debounce frame updates when resizing\n * this viewer element.\n */\n @Prop() public resizeDebounce = 100;\n\n /**\n * The last frame that was received, which can be used to inspect the scene\n * and camera information.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public frame: Frame | undefined;\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public stream?: ViewerStream;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public stencilBuffer: StencilBufferManager = new StencilBufferManager(\n this.hostElement\n );\n\n /**\n * Represents the current viewport of the viewer. The viewport represents the\n * dimensions of the canvas where a frame is rendered. It contains methods for\n * translating between viewport coordinates, frame coordinates and world\n * coordinates.\n */\n @Prop({ mutable: true })\n public viewport: Viewport = Viewport.fromDimensions(Dimensions.create(0, 0));\n\n /**\n * The annotation controller for accessing annotations associated with the\n * scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public annotations: AnnotationController | undefined;\n\n /**\n * The controller for accessing model views associated with the scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public modelViews: ModelViewController | undefined;\n\n /**\n * The controller for accessing and viewing PMI.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public pmi: PmiController | undefined;\n\n /**\n * The controller for accessing and viewing SceneItems.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public sceneItems: SceneItemController | undefined;\n\n /**\n * The controller for accessing canvases and their associated markup.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public canvases: CanvasController | undefined;\n\n /**\n * Experimental flag indicating that connections to Vertex should be established\n * if the viewer is initially hidden through its own style or computed style, or\n * has not been scrolled into view.\n *\n * *Caution:* Setting this flag can result in reduced performance,\n * and should generally not be used in a production setting.\n */\n @Prop()\n public experimentalSkipVisibilityCheck = false;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer.\n * The event includes the location of the tap or click.\n *\n * This event can be used in combination with the {@link VertexViewer.scene scene} method\n * to query for items at the point of the tap.\n *\n * @see {@link Scene.raycaster Scene.raycaster} for more information.\n */\n @Event() public tap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user double taps or clicks a location in the viewer.\n * The event includes the location of the first tap or click.\n */\n @Event() public doubletap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer and the\n * configured amount of time passes without receiving a mouseup or touchend.\n * The event includes the location of the tap or click.\n */\n @Event() public longpress!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event when a frame has been received by the viewer. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameReceived!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a frame has been drawn to the viewer's canvas. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameDrawn!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a provided oauth2 token is about to expire, or is about to expire,\n * causing issues with establishing a websocket connection, or performing API calls.\n */\n @Event() public tokenExpired!: EventEmitter<void>;\n\n /**\n * Emits an event when the connection status changes for the viewer\n */\n @Event() public connectionChange!: EventEmitter<ConnectionStatus>;\n\n /**\n * Emits an event when the scene is ready to be interacted with.\n */\n @Event() public sceneReady!: EventEmitter<void>;\n\n /**\n * Emits an event when a frame is received with a different scene attribute.\n */\n @Event() public sceneChanged!: EventEmitter<void>;\n\n /**\n * Emits an event when the user has started an interaction.\n */\n @Event() public interactionStarted!: EventEmitter<void>;\n\n /**\n * Emits an event when the user hs finished an interaction.\n */\n @Event() public interactionFinished!: EventEmitter<void>;\n\n /**\n * Emits an event when the camera type changes.\n */\n @Event() public cameraTypeChanged!: EventEmitter<FrameCameraType>;\n\n /**\n * Emits an event when the state for annotation changes.\n */\n @Event() public annotationStateChanged!: EventEmitter<AnnotationState>;\n\n /**\n * Used for internals or testing.\n *\n * @internal\n */\n @Event() public deviceIdChange!: EventEmitter<string>;\n\n @Event() public dimensionschange!: EventEmitter<Dimensions.Dimensions>;\n\n @State() private dimensions?: Dimensions.Dimensions;\n @State() private hostDimensions?: Dimensions.Dimensions;\n @State() private errorMessage?: string;\n\n @State() private cursor?: Cursor;\n\n /**\n * This stores internal state that you want to preserve across live-reloads,\n * but shouldn't trigger a refresh if the data changes. Marking this with\n * @State to allow to preserve state across live-reloads.\n */\n @State() private stateMap: StateMap = {\n cursorManager: new CursorManager(),\n streamState: { type: 'disconnected' },\n };\n\n private viewerContainerElement?: HTMLElement;\n private canvasContainerElement?: HTMLElement;\n private canvasElement?: HTMLCanvasElement;\n\n private canvasRenderer!: CanvasRenderer;\n\n private mutationObserver?: MutationObserver;\n private styleObserver?: MutationObserver;\n private resizeObserver?: ResizeObserver;\n private visibilityObserver?: VisibilityObserver;\n private isResizing?: boolean;\n private isResizeUpdate?: boolean;\n private isVisible = false;\n\n private resizeTimer?: NodeJS.Timeout;\n\n private interactionHandlers: InteractionHandler[] = [];\n private defaultInteractionHandlerDisposables: Array<Disposable> = [];\n private tapHandlerDisposable?: Disposable;\n private interactionApi!: InteractionApi;\n private tapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private defaultTapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private baseInteractionHandler?: BaseInteractionHandler;\n\n private internalFrameDrawnDispatcher = new EventDispatcher<Frame>();\n\n public constructor() {\n this.handleElementResize = this.handleElementResize.bind(this);\n this.handleVisibilityChange = this.handleVisibilityChange.bind(this);\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.visibilityObserver = new VisibilityObserver(\n this.handleVisibilityChange\n );\n this.isVisible = this.visibilityObserver.isVisible(this.hostElement);\n\n if (!this.isVisible) {\n this.visibilityObserver?.observe(this.hostElement);\n }\n\n this.stream?.resume();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.updateResolvedConfig();\n this.calculateComponentDimensions();\n\n this.resizeObserver = new ResizeObserver(this.handleElementResize);\n this.registerSlotChangeListeners();\n\n const config = this.getResolvedConfig();\n const client = new SceneViewAPIClient(config.network.sceneViewHost);\n\n this.annotations = new AnnotationController(\n client,\n () => this.token,\n () => this.deviceId\n );\n this.annotations.onStateChange.on((state: AnnotationState) => {\n this.annotationStateChanged.emit(state);\n\n const numberOfAnnotationSets = Object.keys(state.annotations).length;\n this.handleAnnotationSetsChange(numberOfAnnotationSets);\n });\n\n this.stream =\n this.stream ??\n new ViewerStream(new WebSocketClientImpl(), {\n loggingEnabled: config.flags.logWsMessages,\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n this.addStreamListeners();\n\n this.modelViews = new ModelViewController(\n client,\n this.stream,\n () => this.token,\n () => this.deviceId\n );\n\n this.pmi = new PmiController(\n client,\n () => this.token,\n () => this.deviceId\n );\n\n this.sceneItems = new SceneItemController(\n client,\n () => this.token,\n () => this.deviceId\n );\n\n this.canvases = new CanvasController(\n client,\n () => this.token,\n () => this.deviceId\n );\n\n this.updateStreamAttributes();\n this.stateMap.cursorManager.onChanged.on(() => this.handleCursorChanged());\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n this.interactionApi = this.createInteractionApi();\n this.isVisible =\n this.visibilityObserver?.isVisible(this.hostElement) ?? true;\n\n if (this.canvasContainerElement != null) {\n this.resizeObserver?.observe(this.canvasContainerElement);\n }\n\n this.loadOrResumeStream().catch((e) => {\n console.error('Error loading scene', e);\n });\n\n await this.initializeDefaultInteractionHandlers();\n this.injectViewerApi();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.visibilityObserver?.disconnect();\n this.annotations?.disconnect();\n\n this.stream?.pause();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div\n ref={(ref) => (this.viewerContainerElement = ref)}\n class=\"viewer-container\"\n style={{ cursor: cssCursor(this.cursor ?? '') }}\n onContextMenu={(event) => event.preventDefault()}\n >\n <div\n ref={(ref) => (this.canvasContainerElement = ref)}\n class={classnames('canvas-container', {\n 'enable-pointer-events ': window.PointerEvent != null,\n })}\n >\n <canvas\n ref={(ref) => {\n this.canvasElement = ref;\n this.stateMap.interactionTarget = ref;\n }}\n class=\"canvas\"\n ></canvas>\n {this.errorMessage != null ? (\n <div class=\"error-message\">{this.errorMessage}</div>\n ) : null}\n </div>\n <slot></slot>\n </div>\n </Host>\n );\n }\n\n /**\n * @internal\n */\n @Method()\n public async dispatchFrameDrawn(frame: Frame): Promise<void> {\n this.frame = frame;\n this.internalFrameDrawnDispatcher.emit(frame);\n this.frameDrawn.emit(frame);\n }\n\n /**\n * Registers and initializes an interaction handler with the viewer. Returns a\n * `Disposable` that should be used to deregister the interaction handler.\n *\n * `InteractionHandler`s are used to build custom mouse and touch interactions\n * for the viewer. Use `<vertex-viewer camera-controls=\"false\" />` to disable\n * the default camera controls provided by the viewer.\n *\n * @example\n * ```\n * class CustomInteractionHandler extends InteractionHandler {\n * private element: HTMLElement;\n * private api: InteractionApi;\n *\n * public dispose(): void {\n * this.element.removeEventListener('click', this.handleElementClick);\n * }\n *\n * public initialize(element: HTMLElement, api: InteractionApi): void {\n * this.api = api;\n * this.element = element;\n * this.element.addEventListener('click', this.handleElementClick);\n * }\n *\n * private handleElementClick = (event: MouseEvent) => {\n * api.tap({ x: event.clientX, y: event.clientY });\n * }\n * }\n *\n * const viewer = document.querySelector(\"vertex-viewer\");\n * viewer.registerInteractionHandler(new CustomInteractionHandler);\n * ```\n *\n * @param interactionHandler The interaction handler to register.\n * @returns {Promise<void>} A promise containing the disposable to use to\n * deregister the handler.\n */\n @Method()\n public async registerInteractionHandler(\n interactionHandler: InteractionHandler\n ): Promise<Disposable> {\n this.interactionHandlers.push(interactionHandler);\n this.initializeInteractionHandler(interactionHandler);\n return {\n dispose: () => {\n const index = this.interactionHandlers.indexOf(interactionHandler);\n if (index !== -1) {\n this.interactionHandlers[index].dispose();\n this.interactionHandlers.splice(index, 1);\n }\n },\n };\n }\n\n /**\n * Registers a key interaction to be invoked when a specific set of\n * keys are pressed during a `tap` event.\n *\n * `KeyInteraction`s are used to build custom keyboard shortcuts for the\n * viewer using the current state of they keyboard to determine whether\n * the `fn` should be invoked. Use `<vertex-viewer keyboard-controls=\"false\" />`\n * to disable the default keyboard shortcuts provided by the viewer.\n *\n * @example\n * ```\n * class CustomKeyboardInteraction extends KeyInteraction<TapEventDetails> {\n * constructor(private viewer: HTMLVertexViewerElement) {}\n *\n * public predicate(keyState: KeyState): boolean {\n * return keyState['Alt'];\n * }\n *\n * public async fn(event: TapEventDetails) {\n * const scene = await this.viewer.scene();\n * const result = await scene.raycaster().hitItems(event.position);\n *\n * if (result.hits.length > 0) {\n * await scene\n * .camera()\n * .fitTo(q => q.withItemId(result.hits[0].itemId))\n * .render();\n * }\n * }\n * }\n * ```\n *\n * @param keyInteraction - The `KeyInteraction` to register.\n */\n @Method()\n public async registerTapKeyInteraction(\n keyInteraction: KeyInteraction<TapEventDetails>\n ): Promise<void> {\n this.tapKeyInteractions = [...this.tapKeyInteractions, keyInteraction];\n }\n\n /**\n * The HTML element that will handle interaction events from the user. Used by\n * components to listen for interaction events from the same element as the\n * viewer. Note, this property maybe removed in the future when refactoring\n * our interaction handling.\n *\n * @internal\n * @deprecated Use `InteractionHandler`.\n */\n @Method()\n public async getInteractionTarget_DEPRECATED(): Promise<HTMLElement> {\n if (this.stateMap.interactionTarget != null) {\n return this.stateMap.interactionTarget;\n } else throw new Error('Interaction target is undefined.');\n }\n\n /**\n * Adds a cursor to the viewer, and displays it if the cursor has the highest\n * priority.\n *\n * Cursors are managed as a prioritized list. A cursor is displayed if it has\n * the highest priority or if the cursor is the most recently added cursor in\n * the set of cursors with the same priority.\n *\n * To remove a cursor, call `dispose()` on the returned disposable.\n *\n * @param cursor The cursor to add.\n * @param priority The priority of the cursor.\n * @returns A disposable that can be used to remove the cursor.\n * @see See {@link CursorManager} for constants to pass to `priority`.\n */\n @Method()\n public async addCursor(\n cursor: Cursor,\n priority?: number\n ): Promise<Disposable> {\n return this.stateMap.cursorManager.add(cursor, priority);\n }\n\n @Method()\n public async getInteractionHandlers(): Promise<InteractionHandler[]> {\n return this.interactionHandlers;\n }\n\n /**\n * @internal\n * @ignore\n */\n @Method()\n public async getKeyInteractions(): Promise<\n KeyInteraction<TapEventDetails>[]\n > {\n return this.tapKeyInteractions;\n }\n\n @Method()\n public async getBaseInteractionHandler(): Promise<\n BaseInteractionHandler | undefined\n > {\n return this.baseInteractionHandler;\n }\n\n /**\n * @deprecated Use `token`.\n */\n @Method()\n public async getJwt(): Promise<string | undefined> {\n return this.token;\n }\n\n @Watch('src')\n public handleSrcChanged(src: string | undefined): void {\n if (src != null) {\n this.load(src, { cameraType: this.cameraType });\n } else {\n this.unload();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('cameraControls')\n protected handleCameraControlsChanged(): void {\n this.initializeDefaultCameraInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('keyboardControls')\n protected handleKeyboardControlsChanged(): void {\n this.initializeDefaultKeyboardInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('rotateAroundTapPoint')\n protected handleRotateAboutTapPointChanged(): void {\n this.updateStreamAttributes();\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n } else {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate');\n }\n }\n\n @Watch('cameraType')\n protected handleCameraTypeChanged(\n updatedCameraType: string,\n previousCameraType: string\n ): void {\n if (updatedCameraType !== previousCameraType) {\n this.updateCameraType();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('experimentalRenderingOptions')\n @Watch('depthBuffers')\n @Watch('featureHighlighting')\n @Watch('featureLines')\n @Watch('featureMaps')\n @Watch('noDefaultLights')\n @Watch('phantom')\n @Watch('sceneComparison')\n @Watch('crossSectioning')\n @Watch('selectionHighlighting')\n protected handleStreamAttributesChanged(): void {\n this.updateStreamAttributes();\n }\n\n /**\n * @ignore\n */\n @Watch('enableTemporalRefinement')\n protected handleEnableTemporalRefinementChanged(): void {\n this.updateEnableTemporalRefinement();\n }\n\n /**\n * @ignore\n */\n @Watch('config')\n protected handleConfigChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * @ignore\n */\n @Watch('configEnv')\n protected handleConfigEnvChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * Loads the given scene into the viewer and return a `Promise` that\n * resolves when the scene has been loaded. The specified scene is\n * provided as a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n *\n * @param urn The URN of the resource to load.\n * @param options Optional configurations when loading the scene.\n * cameraType (Optional) The camera type to load. If not included, the default camera type for the resource will be used.\n */\n @Method()\n public async load(urn: string, options?: LoadOptions): Promise<void> {\n const shouldLoadBasedOnVisibility =\n this.experimentalSkipVisibilityCheck || this.isVisible;\n\n if (!shouldLoadBasedOnVisibility) {\n console.debug(\n 'Detected the viewer is hidden. Delaying load until visible.'\n );\n\n return;\n }\n\n if (this.stream != null && this.dimensions != null) {\n const { EXPERIMENTAL_annotationPollingIntervalInMs } =\n this.getResolvedConfig();\n\n this.calculateComponentDimensions();\n\n this.stream.update({\n streamAttributes: this.getStreamAttributes(),\n config: parseAndValidateConfig(this.configEnv, this.config),\n dimensions: this.dimensions,\n frameBgColor: this.getBackgroundColor(),\n });\n const state = await this.stream?.load(\n urn,\n this.clientId,\n this.getDeviceId(),\n this.getResolvedConfig(),\n options?.cameraType\n );\n\n if (state.type === 'connected') {\n this.sceneReady.emit();\n\n if (EXPERIMENTAL_annotationPollingIntervalInMs !== undefined) {\n this.annotations?.connect(EXPERIMENTAL_annotationPollingIntervalInMs);\n }\n }\n } else {\n throw new ViewerInitializationError(\n 'Cannot load scene. Viewer has not been initialized.'\n );\n }\n }\n\n /**\n * Disconnects the websocket and removes any internal state associated with\n * the scene.\n */\n @Method()\n public async unload(): Promise<void> {\n if (this.stream != null) {\n this.annotations?.disconnect();\n this.stream.disconnect();\n\n this.frame = undefined;\n this.errorMessage = undefined;\n }\n\n if (this.canvasElement != null) {\n const context = this.canvasElement.getContext('2d');\n if (context != null) {\n context.clearRect(\n 0,\n 0,\n this.canvasElement.width,\n this.canvasElement.height\n );\n }\n }\n }\n\n /**\n * Disconnects the websocket and clears the internal state associated with\n * the scene before reconnecting to the same scene.\n */\n @Method()\n public async reload(): Promise<void> {\n if (this.src != null) {\n await this.unload();\n await this.load(this.src, { cameraType: this.cameraType });\n }\n }\n\n /**\n * Returns an object that is used to perform operations on the `Scene` that's\n * currently being viewed. These operations include updating items,\n * positioning the camera and performing hit tests.\n */\n @Method()\n public async scene(): Promise<Scene> {\n return this.createScene();\n }\n\n /**\n * Returns `true` indicating that the scene is ready to be interacted with.\n */\n @Method()\n public async isSceneReady(): Promise<boolean> {\n return this.stateMap.streamState.type === 'connected';\n }\n\n @Listen('tap')\n private async handleTapEvent(\n event: CustomEvent<TapEventDetails>\n ): Promise<void> {\n this.tapKeyInteractions\n .filter((i) => i.predicate(event.detail))\n .forEach((i) => i.fn(event.detail));\n }\n\n private emitConnectionChange(status: ConnectionStatus): void {\n if (status.status === 'connected') {\n if (status.jwt.length === 0) {\n throw new MissingJWTError('JWT is empty');\n }\n }\n this.connectionChange.emit(status);\n }\n\n private handleElementResize(entries: ResizeObserverEntry[]): void {\n const dimensionsHaveChanged =\n entries.length > 0 &&\n this.dimensions != null &&\n !Dimensions.isEqual(entries[0].contentRect, this.viewport);\n\n if (dimensionsHaveChanged) {\n if (this.resizeTimer != null) {\n clearTimeout(this.resizeTimer);\n this.resizeTimer = undefined;\n }\n\n if (!this.isResizing) {\n this.resizeTimer = setTimeout(() => {\n this.isResizing = true;\n this.isResizeUpdate = true;\n this.recalculateComponentDimensions();\n }, this.resizeDebounce);\n }\n }\n }\n\n private handleVisibilityChange(visible: boolean): void {\n this.isVisible = visible;\n\n if (this.isVisible) {\n this.visibilityObserver?.disconnect();\n\n this.loadOrResumeStream();\n }\n }\n\n private async loadOrResumeStream(): Promise<void> {\n const streamPaused = this.stream?.isPaused() ?? false;\n\n if (this.src != null && !streamPaused) {\n await this.load(this.src, { cameraType: this.cameraType });\n } else if (streamPaused) {\n this.stream?.resume();\n }\n }\n\n private registerSlotChangeListeners(): void {\n this.mutationObserver = new MutationObserver((_) => this.injectViewerApi());\n this.mutationObserver.observe(this.hostElement, {\n childList: true,\n subtree: true,\n });\n\n this.styleObserver = new MutationObserver((_) => this.syncViewerStyles());\n this.styleObserver.observe(this.hostElement, {\n attributes: true,\n attributeFilter: ['style'],\n });\n }\n\n private injectViewerApi(): void {\n function queryChildren(el: Element): HTMLElement[] {\n return Array.from(el.querySelectorAll('*'));\n }\n\n const children = queryChildren(this.hostElement);\n\n children\n .filter((node) => node.nodeName.startsWith('VERTEX-'))\n .reduce(\n (elements, element) => [\n ...elements,\n element,\n ...queryChildren(element),\n ],\n [] as Element[]\n )\n .forEach((node) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (node as any).viewer = this.hostElement;\n });\n }\n\n private syncViewerStyles(): void {\n const backgroundColor = this.getBackgroundColor();\n\n this.stream?.update({\n frameBgColor: backgroundColor,\n streamAttributes: this.getStreamAttributes(),\n });\n }\n\n private calculateComponentDimensions(): void {\n const maxPixelCount = 2073600;\n const bounds = this.getBounds();\n if (bounds?.width != null && bounds?.height != null) {\n const measuredViewport = Dimensions.create(bounds.width, bounds.height);\n const trimmedViewport = Dimensions.scaleFit(\n maxPixelCount,\n measuredViewport\n );\n\n this.hostDimensions = measuredViewport;\n this.dimensions =\n trimmedViewport != null\n ? Dimensions.create(trimmedViewport.width, trimmedViewport.height)\n : undefined;\n this.viewport = Viewport.fromDimensions(\n this.getCanvasDimensions() ?? Dimensions.create(0, 0)\n );\n }\n }\n\n private recalculateComponentDimensions(): void {\n if (this.isResizing) {\n this.calculateComponentDimensions();\n this.isResizing = false;\n\n if (this.stream?.getState().type === 'connected') {\n this.updateDimensions(this.dimensions);\n }\n }\n }\n\n private reportPerformance(timings: Timing[]): void {\n if (this.stateMap.streamState.type === 'connected') {\n const payload = {\n timings: timings.map((t) => ({\n receiveToPaintDuration: toProtoDuration(t.duration),\n })),\n };\n this.getStream().recordPerformance(payload, false);\n }\n }\n\n private addStreamListeners(): void {\n this.stateMap.streamListeners = this.getStream().stateChanged.on((s) => {\n this.handleStreamStateChanged(this.stateMap.streamState, s);\n });\n }\n\n private handleStreamStateChanged(\n previous: ViewerStreamState,\n state: ViewerStreamState\n ): void {\n this.stateMap.streamState = state;\n\n if (state.type === 'connecting') {\n this.handleConnecting(previous, state);\n } else if (state.type === 'connected') {\n this.handleConnected(previous, state);\n } else if (state.type === 'connection-failed') {\n this.handleConnectionFailed(previous, state);\n } else if (state.type === 'disconnected') {\n this.handleDisconnected(previous, state);\n }\n }\n\n private handleConnecting(\n previous: ViewerStreamState,\n state: Connecting\n ): void {\n if (previous.type !== 'connecting') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'connecting' });\n }\n }\n\n private handleConnected(previous: ViewerStreamState, state: Connected): void {\n this.token = state.token.token;\n\n if (previous.type !== 'connected') {\n this.errorMessage = undefined;\n this.canvasRenderer = measureCanvasRenderer(\n paintTime,\n createCanvasRenderer(),\n this.getResolvedConfig().flags.logFrameRate,\n (timings) => this.reportPerformance(timings)\n );\n this.emitConnectionChange({\n status: 'connected',\n jwt: state.token.token,\n });\n this.deviceIdChange.emit(state.deviceId);\n }\n\n if (this.frame?.getId() !== state.frame.getId()) {\n this.updateFrame(state.frame);\n }\n\n this.updateDimensions(this.dimensions);\n }\n\n private handleConnectionFailed(\n previous: ViewerStreamState,\n state: ConnectionFailed\n ): void {\n if (previous.type !== 'connection-failed') {\n this.token = undefined;\n this.errorMessage = state.message;\n this.emitConnectionChange({\n status: 'connection-failed',\n errorMessage: state.message,\n });\n }\n }\n\n private handleDisconnected(\n previous: ViewerStreamState,\n state: Disconnected\n ): void {\n if (previous.type !== 'disconnected') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'disconnected' });\n }\n }\n\n private updateDimensions(dimensions?: Dimensions.Dimensions): void {\n this.stream?.update({ dimensions });\n this.dimensionschange.emit(dimensions);\n }\n\n private async updateFrame(frame: Frame): Promise<void> {\n const canvasDimensions = this.getCanvasDimensions();\n\n if (\n this.canvasElement != null &&\n canvasDimensions != null &&\n this.frame?.getId() !== frame.getId()\n ) {\n const canvas = this.canvasElement.getContext('2d');\n if (canvas != null) {\n const previousFrame = this.frame;\n this.frame = SceneViewSummary.copySummaryIfInvalid(\n frame,\n previousFrame\n );\n\n this.updateInteractionApi(previousFrame);\n\n const data = {\n canvas,\n canvasDimensions,\n dimensions: this.dimensions,\n frame: this.frame,\n viewport: this.viewport,\n beforeDraw: () => {\n this.updateCanvasDimensions(canvasDimensions);\n this.isResizeUpdate = false;\n },\n predicate: () => {\n if (this.isResizeUpdate) {\n return (\n this.dimensions == null ||\n Dimensions.isEqual(\n this.dimensions,\n data.frame.image.imageAttr.frameDimensions\n )\n );\n }\n return true;\n },\n };\n\n this.frameReceived.emit(this.frame);\n\n if (this.frame.scene.hasChanged) {\n this.sceneChanged.emit();\n }\n\n const drawnFrame = await this.canvasRenderer(data);\n\n if (drawnFrame != null) {\n this.updateViewerBackground();\n\n this.dispatchFrameDrawn(drawnFrame);\n }\n }\n }\n }\n\n private updateViewerBackground(): void {\n const backgroundColor = this.getBackgroundColor();\n\n writeDOM(() => {\n this.viewerContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null ? Color.toHexString(backgroundColor) : '#ffffff'\n );\n this.canvasContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null ? Color.toHexString(backgroundColor) : '#ffffff'\n );\n });\n }\n\n private async initializeDefaultInteractionHandlers(): Promise<void> {\n await this.initializeDefaultCameraInteractionHandlers();\n await this.initializeDefaultTapInteractionHandler();\n this.initializeDefaultKeyboardInteractionHandlers();\n\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n }\n }\n\n private clearDefaultCameraInteractionHandlers(): void {\n this.defaultInteractionHandlerDisposables.forEach((disposable) =>\n disposable.dispose()\n );\n this.defaultInteractionHandlerDisposables = [];\n }\n\n private clearDefaultKeyboardInteractions(): void {\n this.defaultTapKeyInteractions.forEach((interaction) => {\n const index = this.tapKeyInteractions.indexOf(interaction);\n if (index !== -1) {\n this.tapKeyInteractions.splice(index, 1);\n }\n });\n this.tapKeyInteractions = [];\n }\n\n private async initializeDefaultCameraInteractionHandlers(): Promise<void> {\n this.clearDefaultCameraInteractionHandlers();\n\n if (this.cameraControls) {\n if (window.PointerEvent != null) {\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new PointerInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler\n );\n const multiPointerDisposable = await this.registerInteractionHandler(\n new MultiPointerInteractionHandler()\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n multiPointerDisposable,\n ];\n } else {\n // fallback to touch events and mouse events as a default\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new MouseInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler\n );\n const touchDisposable = await this.registerInteractionHandler(\n new TouchInteractionHandler()\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n touchDisposable,\n ];\n }\n }\n }\n\n private initializeDefaultKeyboardInteractionHandlers(): void {\n this.clearDefaultKeyboardInteractions();\n\n if (this.keyboardControls && this.stream != null) {\n this.baseInteractionHandler?.setDefaultKeyboardControls(\n this.keyboardControls\n );\n\n const flyToPart = new FlyToPartKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale()\n );\n const flyToPosition = new FlyToPositionKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale(),\n () => this.createScene()\n );\n\n this.registerTapKeyInteraction(flyToPart);\n this.registerTapKeyInteraction(flyToPosition);\n\n this.defaultTapKeyInteractions = [flyToPart, flyToPosition];\n }\n }\n\n private async initializeDefaultTapInteractionHandler(): Promise<void> {\n if (this.tapHandlerDisposable == null) {\n if (window.PointerEvent != null) {\n const tapInteractionHandler = new TapInteractionHandler(\n 'pointerdown',\n 'pointerup',\n 'pointermove',\n () => this.getResolvedConfig()\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler\n );\n } else {\n const tapInteractionHandler = new TapInteractionHandler(\n 'mousedown',\n 'mouseup',\n 'mousemove',\n () => this.getResolvedConfig()\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler\n );\n }\n }\n }\n\n private initializeInteractionHandler(handler: InteractionHandler): void {\n if (this.stateMap.interactionTarget == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction target is undefined.'\n );\n }\n if (this.interactionApi == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction APi is undefined.'\n );\n }\n handler.initialize(this.stateMap.interactionTarget, this.interactionApi);\n }\n\n private createInteractionApi(): InteractionApi {\n if (this.stream == null) {\n throw new ComponentInitializationError(\n 'Cannot create interaction API. Component has not been initialized.'\n );\n }\n\n return this.frame == null || this.frame.scene.camera.isPerspective()\n ? new InteractionApiPerspective(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished\n )\n : new InteractionApiOrthographic(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished\n );\n }\n\n private handleCursorChanged(): void {\n window.requestAnimationFrame(() => {\n this.cursor = this.stateMap.cursorManager.getActiveCursor();\n });\n }\n\n private async createScene(): Promise<Scene> {\n const state = await this.waitForConnectedState();\n\n const cameraTypeMapper = toPbCameraTypeOrThrow();\n\n const { frame, sceneId, sceneViewId, worldOrientation } = state;\n\n return new Scene(\n this.getStream(),\n frame,\n fromPbFrameOrThrow(worldOrientation),\n cameraTypeMapper,\n () => this.getImageScale(),\n this.viewport,\n sceneId,\n sceneViewId\n );\n }\n\n /**\n * This function is currently not in use, but will be required\n * when we want to automatically configure the background color of\n * JPEG images.\n */\n private getBackgroundColor(): Color.Color | undefined {\n if (this.canvasContainerElement != null) {\n const imageBackground = getElementPropertyValue(\n this.hostElement,\n '--image-background'\n );\n const viewerBackground = getElementPropertyValue(\n this.hostElement,\n '--viewer-background'\n );\n const propertyColor = imageBackground ?? viewerBackground;\n\n return propertyColor != null\n ? Color.fromCss(propertyColor)\n : Color.create(255, 255, 255);\n }\n }\n\n private getBounds(): ClientRect | undefined {\n return getElementBoundingClientRect(this.hostElement);\n }\n\n private getCanvasDimensions(): Dimensions.Dimensions | undefined {\n return this.getResolvedConfig().flags.letterboxFrames\n ? this.dimensions\n : this.hostDimensions;\n }\n\n private getImageScale(): Point.Point | undefined {\n const canvasDimensions = this.getCanvasDimensions();\n if (this.dimensions != null && canvasDimensions != null) {\n return Point.create(\n this.dimensions.width / canvasDimensions.width,\n this.dimensions.height / canvasDimensions.height\n );\n }\n }\n\n private getStreamAttributes(): StreamAttributes {\n return {\n depthBuffers: this.getDepthBufferStreamAttributesValue(),\n experimentalRenderingOptions: this.experimentalRenderingOptions,\n featureHighlighting: this.featureHighlighting,\n featureLines: this.featureLines,\n featureMaps: this.featureMaps,\n frames: {\n frameBackgroundColor: this.getBackgroundColor(),\n },\n noDefaultLights: this.noDefaultLights,\n phantom: this.phantom,\n sceneComparison: this.sceneComparison,\n selectionHighlighting: this.selectionHighlighting,\n crossSectioning: this.crossSectioning,\n };\n }\n\n private updateCanvasDimensions(dimensions: Dimensions.Dimensions): void {\n if (this.canvasElement != null) {\n this.canvasElement.width = dimensions.width;\n this.canvasElement.height = dimensions.height;\n }\n }\n\n private updateStreamAttributes(): void {\n this.stream?.update({ streamAttributes: this.getStreamAttributes() });\n }\n\n private updateEnableTemporalRefinement(): void {\n this.stream?.update({\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n }\n\n private updateInteractionApi(previousFrame?: Frame): void {\n if (this.frame != null) {\n const hasChangedFromPerspective =\n (previousFrame == null || previousFrame.scene.camera.isPerspective()) &&\n this.frame.scene.camera.isOrthographic();\n const hasChangedFromOrthographic =\n (previousFrame == null ||\n previousFrame.scene.camera.isOrthographic()) &&\n this.frame.scene.camera.isPerspective();\n\n if (hasChangedFromPerspective || hasChangedFromOrthographic) {\n this.interactionApi = this.createInteractionApi();\n this.cameraType = this.frame.scene.camera.isPerspective()\n ? 'perspective'\n : 'orthographic';\n this.cameraTypeChanged.emit(this.cameraType);\n\n this.interactionHandlers.forEach((handler) =>\n this.initializeInteractionHandler(handler)\n );\n }\n }\n }\n\n private updateCameraType(): void {\n if (this.frame != null) {\n if (\n this.cameraType === 'orthographic' &&\n this.frame.scene.camera.isPerspective()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toOrthographic(\n this.frame.scene.camera,\n this.frame.scene.boundingBox\n )\n ),\n });\n } else if (\n this.cameraType === 'perspective' &&\n this.frame.scene.camera.isOrthographic()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toPerspective(this.frame.scene.camera)\n ),\n });\n }\n }\n }\n\n private handleAnnotationSetsChange(numberOfAnnotationSets: number): void {\n if (\n numberOfAnnotationSets > 0 &&\n this.getDepthBufferStreamAttributesValue() == null\n ) {\n // Annotation sets are present in the viewer, but depth buffers are not being requested.\n // The annotation sets require the depth buffers to render, so turn on depth buffers.\n this.stateMap.depthBuffersOverrideForAnnotations = true;\n this.updateStreamAttributes();\n } else if (\n numberOfAnnotationSets === 0 &&\n this.stateMap.depthBuffersOverrideForAnnotations\n ) {\n // Depth buffers were turned on because annotation sets were present in the viewer.\n // However, the annotation sets are no longer present, so the depth buffer override is no longer needed.\n this.stateMap.depthBuffersOverrideForAnnotations = false;\n this.updateStreamAttributes();\n }\n }\n\n private getDepthBufferStreamAttributesValue(): FrameType {\n const depthBuffer =\n this.depthBuffers ??\n (this.rotateAroundTapPoint ||\n this.stateMap.depthBuffersOverrideForAnnotations\n ? 'final'\n : undefined);\n return depthBuffer;\n }\n\n private updateResolvedConfig(): void {\n this.resolvedConfig = parseAndValidateConfig(this.configEnv, this.config);\n }\n\n private getResolvedConfig(): Config {\n return getRequiredProp(\n 'Resolved config is undefined',\n () => this.resolvedConfig\n );\n }\n\n private getStream(): ViewerStream {\n return getRequiredProp('Stream is undefined', () => this.stream);\n }\n\n private getDeviceId(): string | undefined {\n if (this.deviceId == null) {\n try {\n this.deviceId = getStorageEntry(\n StorageKeys.DEVICE_ID,\n (entry) => entry['device-id']\n );\n } catch (e) {\n console.warn('Cannot read device ID. Local storage is not supported.');\n }\n\n if (this.deviceId == null) {\n this.deviceId = UUID.create();\n\n try {\n upsertStorageEntry(StorageKeys.DEVICE_ID, {\n ['device-id']: this.deviceId,\n });\n } catch (e) {\n console.warn(\n 'Cannot write device ID. Local storage is not supported.'\n );\n }\n }\n }\n return this.deviceId;\n }\n\n private async waitForConnectedState(): Promise<Connected> {\n if (this.stateMap.streamState.type !== 'connected') {\n console.debug(\n 'Stream was not in a connected state. Waiting for successful connection.'\n );\n return new Promise<Connected>((resolve, reject) => {\n const disposable = this.getStream().onStateChanged((state) => {\n if (state.type === 'connected') {\n resolve(state);\n }\n });\n\n setTimeout(() => {\n disposable.dispose();\n reject(new Error('Timed out waiting for connected state.'));\n }, DEFAULT_VIEWER_SCENE_WAIT_MS);\n });\n }\n\n return this.stateMap.streamState;\n }\n}\n\nfunction getRequiredProp<T>(errorMsg: string, getter: () => T | undefined): T {\n const value = getter();\n if (value != null) {\n return value;\n } else throw new Error(errorMsg);\n}\n"]}
@@ -90,6 +90,11 @@
90
90
  color: var(--viewer-annotations-pin-color);
91
91
  cursor: pointer;
92
92
  transition: opacity 0.3s ease-in;
93
+
94
+ /**
95
+ * Place bottom point of the pin at the location instead of the middle of the pin
96
+ */
97
+ transform: translate(0px, -12px);
93
98
  }
94
99
 
95
100
  .pin-selected {
@@ -128,7 +128,7 @@ export class ViewerWalkModeTool {
128
128
  }
129
129
  }
130
130
  async ensureTeleportToolConfigured() {
131
- var _a, _b, _c, _d, _e;
131
+ var _a, _b, _c;
132
132
  if (this.hostEl != null) {
133
133
  const slotted = (_b = (_a = this.hostEl) === null || _a === void 0 ? void 0 : _a.querySelector('vertex-viewer-teleport-tool[slot="teleport-tool"]')) !== null && _b !== void 0 ? _b : undefined;
134
134
  const slottedTeleportTool = (slotted === null || slotted === void 0 ? void 0 : slotted.tagName) === 'VERTEX-VIEWER-TELEPORT-TOOL'
@@ -138,9 +138,9 @@ export class ViewerWalkModeTool {
138
138
  this.stateMap.teleportTool = slottedTeleportTool;
139
139
  }
140
140
  else {
141
- const slot = (_e = (_d = (_c = this.hostEl) === null || _c === void 0 ? void 0 : _c.shadowRoot) === null || _d === void 0 ? void 0 : _d.querySelector('slot[name="teleport-tool"]')) !== null && _e !== void 0 ? _e : undefined;
142
141
  this.stateMap.teleportTool = document.createElement('vertex-viewer-teleport-tool');
143
- slot === null || slot === void 0 ? void 0 : slot.appendChild(this.stateMap.teleportTool);
142
+ this.stateMap.teleportTool.slot = 'teleport-tool';
143
+ (_c = this.hostEl) === null || _c === void 0 ? void 0 : _c.appendChild(this.stateMap.teleportTool);
144
144
  }
145
145
  }
146
146
  }
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-walk-mode-tool.js","sourceRoot":"","sources":["../../../../../src/components/viewer-walk-mode-tool/viewer-walk-mode-tool.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { InteractionType } from '../../lib/interactions/baseInteractionHandler';\nimport { WalkModeController } from '../../lib/walk-mode/controller';\nimport { WalkInteractionHandler } from '../../lib/walk-mode/interactions';\nimport { ViewerTeleportMode, WalkModeModel } from '../../lib/walk-mode/model';\n\ninterface StateMap {\n teleportTool?: HTMLVertexViewerTeleportToolElement;\n previousPrimaryInteractionType?: InteractionType;\n}\n\n/**\n * The `<vertex-viewer-walk-mode-tool>` allows for additional interactions\n * intended for walking through a model instead of orbiting a model.\n */\n@Component({\n tag: 'vertex-viewer-walk-mode-tool',\n styleUrl: 'viewer-walk-mode-tool.css',\n shadow: true,\n})\nexport class ViewerWalkModeTool {\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The `WalkModeController` responsible for controlling `KeyBinding`s and excluded\n * elements, as well as updating the `WalkModeModel` with various configuration\n * settings.\n */\n @Prop({ mutable: true })\n public controller?: WalkModeController;\n\n /**\n * The `WalkModeModel` responsible for tracking configuration and emitting\n * events for interaction handlers to respond to.\n */\n @Prop({ mutable: true })\n public model: WalkModeModel = new WalkModeModel();\n\n /**\n * The type of teleportation to perform when clicking. This value is passed through\n * to a `<vertex-viewer-teleport-tool>`'s mode attribute.\n *\n * `teleport` - the camera's `position` is moved to the location of the hit result\n * constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `teleport-and-align` - the camera's `position`, `lookAt`, and `up` vectors are updated\n * to align to the plane represented by the hit result's position and normal.\n *\n * `teleport-toward` - the camera's `position` is moved a fixed distance toward the location of the\n * hit result constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `undefined` - no teleportation will occur when clicking.\n *\n * Defaults to `undefined`.\n */\n @Prop()\n public teleportMode?: ViewerTeleportMode;\n\n /**\n * Determines whether the interaction handlers for this tool should respond to events.\n * When set to `true`, the default viewer interaction mode will be overridden to use the\n * `pivot` camera interaction type, keyboard controls for movement will be added, and\n * setting the `teleportMode` will enable the tool.\n *\n * Defaults to `true`.\n */\n @Prop()\n public enabled = true;\n\n /**\n * Event emitted when the `WalkModeController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<WalkModeController>;\n\n @Element()\n private hostEl?: HTMLElement;\n\n private interactionHandlerDisposable?: Disposable;\n private interactionHandler?: WalkInteractionHandler;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n await this.ensureTeleportToolConfigured();\n this.updateTeleportTool();\n await this.setPivotInteractionMode();\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setPivotInteractionMode();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.resetInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('enabled')\n protected handleEnabledChanged(): void {\n this.controller?.setEnabled(this.enabled);\n this.toggleInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n this.updateTeleportTool();\n this.toggleInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('teleportMode')\n protected handleTeleportModeChanged(): void {\n this.updateTeleportTool();\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChanged(): void {\n this.updateTeleportTool();\n this.controllerChanged.emit(this.controller);\n }\n\n /**\n * @ignore\n */\n @Watch('model')\n protected handleModelChanged(): void {\n this.setupController();\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n }\n\n protected render(): JSX.Element {\n return (\n <Host>\n <slot\n name=\"teleport-tool\"\n onSlotchange={async () => {\n await this.ensureTeleportToolConfigured();\n this.updateTeleportTool();\n }}\n ></slot>\n </Host>\n );\n }\n\n private setupController(): void {\n if (this.controller == null) {\n this.controller = new WalkModeController(this.model);\n this.controllerChanged.emit(this.controller);\n } else {\n this.controller.updateModel(this.model);\n }\n }\n\n private clearInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandlerDisposable = undefined;\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private async setupInteractionHandler(): Promise<void> {\n if (this.interactionHandler == null) {\n this.interactionHandler = new WalkInteractionHandler(this.model);\n\n this.interactionHandlerDisposable =\n await this.viewer?.registerInteractionHandler(this.interactionHandler);\n }\n }\n\n private async ensureTeleportToolConfigured(): Promise<void> {\n if (this.hostEl != null) {\n const slotted: Element | undefined =\n this.hostEl?.querySelector(\n 'vertex-viewer-teleport-tool[slot=\"teleport-tool\"]'\n ) ?? undefined;\n const slottedTeleportTool =\n slotted?.tagName === 'VERTEX-VIEWER-TELEPORT-TOOL'\n ? (slotted as HTMLVertexViewerTeleportToolElement)\n : undefined;\n\n if (slottedTeleportTool != null) {\n this.stateMap.teleportTool = slottedTeleportTool;\n } else {\n const slot: HTMLSlotElement | undefined =\n this.hostEl?.shadowRoot?.querySelector(\n 'slot[name=\"teleport-tool\"]'\n ) ?? undefined;\n\n this.stateMap.teleportTool = document.createElement(\n 'vertex-viewer-teleport-tool'\n );\n slot?.appendChild(this.stateMap.teleportTool);\n }\n }\n }\n\n private updateTeleportTool(): void {\n if (this.stateMap.teleportTool != null) {\n this.stateMap.teleportTool.viewer = this.viewer;\n this.stateMap.teleportTool.controller = this.controller;\n this.stateMap.teleportTool.model = this.model;\n this.stateMap.teleportTool.mode = this.teleportMode;\n }\n }\n\n private toggleInteractionMode(): void {\n if (this.enabled) {\n this.setPivotInteractionMode();\n } else {\n this.resetInteractionMode();\n }\n }\n\n private async setPivotInteractionMode(): Promise<void> {\n const baseInteractionHandler =\n await this.viewer?.getBaseInteractionHandler();\n\n if (this.enabled && baseInteractionHandler != null) {\n const interactionType =\n baseInteractionHandler.getPrimaryInteractionType();\n this.stateMap.previousPrimaryInteractionType =\n interactionType === 'pivot'\n ? this.stateMap.previousPrimaryInteractionType\n : interactionType;\n baseInteractionHandler.setPrimaryInteractionType('pivot');\n }\n }\n\n private async resetInteractionMode(): Promise<void> {\n const baseInteractionHandler =\n await this.viewer?.getBaseInteractionHandler();\n\n if (\n baseInteractionHandler != null &&\n baseInteractionHandler.getPrimaryInteractionType() === 'pivot' &&\n this.stateMap.previousPrimaryInteractionType != null\n ) {\n baseInteractionHandler.setPrimaryInteractionType(\n this.stateMap.previousPrimaryInteractionType\n );\n this.stateMap.previousPrimaryInteractionType = undefined;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"viewer-walk-mode-tool.js","sourceRoot":"","sources":["../../../../../src/components/viewer-walk-mode-tool/viewer-walk-mode-tool.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { InteractionType } from '../../lib/interactions/baseInteractionHandler';\nimport { WalkModeController } from '../../lib/walk-mode/controller';\nimport { WalkInteractionHandler } from '../../lib/walk-mode/interactions';\nimport { ViewerTeleportMode, WalkModeModel } from '../../lib/walk-mode/model';\n\ninterface StateMap {\n teleportTool?: HTMLVertexViewerTeleportToolElement;\n previousPrimaryInteractionType?: InteractionType;\n}\n\n/**\n * The `<vertex-viewer-walk-mode-tool>` allows for additional interactions\n * intended for walking through a model instead of orbiting a model.\n */\n@Component({\n tag: 'vertex-viewer-walk-mode-tool',\n styleUrl: 'viewer-walk-mode-tool.css',\n shadow: true,\n})\nexport class ViewerWalkModeTool {\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The `WalkModeController` responsible for controlling `KeyBinding`s and excluded\n * elements, as well as updating the `WalkModeModel` with various configuration\n * settings.\n */\n @Prop({ mutable: true })\n public controller?: WalkModeController;\n\n /**\n * The `WalkModeModel` responsible for tracking configuration and emitting\n * events for interaction handlers to respond to.\n */\n @Prop({ mutable: true })\n public model: WalkModeModel = new WalkModeModel();\n\n /**\n * The type of teleportation to perform when clicking. This value is passed through\n * to a `<vertex-viewer-teleport-tool>`'s mode attribute.\n *\n * `teleport` - the camera's `position` is moved to the location of the hit result\n * constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `teleport-and-align` - the camera's `position`, `lookAt`, and `up` vectors are updated\n * to align to the plane represented by the hit result's position and normal.\n *\n * `teleport-toward` - the camera's `position` is moved a fixed distance toward the location of the\n * hit result constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `undefined` - no teleportation will occur when clicking.\n *\n * Defaults to `undefined`.\n */\n @Prop()\n public teleportMode?: ViewerTeleportMode;\n\n /**\n * Determines whether the interaction handlers for this tool should respond to events.\n * When set to `true`, the default viewer interaction mode will be overridden to use the\n * `pivot` camera interaction type, keyboard controls for movement will be added, and\n * setting the `teleportMode` will enable the tool.\n *\n * Defaults to `true`.\n */\n @Prop()\n public enabled = true;\n\n /**\n * Event emitted when the `WalkModeController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<WalkModeController>;\n\n @Element()\n private hostEl?: HTMLElement;\n\n private interactionHandlerDisposable?: Disposable;\n private interactionHandler?: WalkInteractionHandler;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n await this.ensureTeleportToolConfigured();\n this.updateTeleportTool();\n await this.setPivotInteractionMode();\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setPivotInteractionMode();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.resetInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('enabled')\n protected handleEnabledChanged(): void {\n this.controller?.setEnabled(this.enabled);\n this.toggleInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n this.updateTeleportTool();\n this.toggleInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('teleportMode')\n protected handleTeleportModeChanged(): void {\n this.updateTeleportTool();\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChanged(): void {\n this.updateTeleportTool();\n this.controllerChanged.emit(this.controller);\n }\n\n /**\n * @ignore\n */\n @Watch('model')\n protected handleModelChanged(): void {\n this.setupController();\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n }\n\n protected render(): JSX.Element {\n return (\n <Host>\n <slot\n name=\"teleport-tool\"\n onSlotchange={async () => {\n await this.ensureTeleportToolConfigured();\n this.updateTeleportTool();\n }}\n ></slot>\n </Host>\n );\n }\n\n private setupController(): void {\n if (this.controller == null) {\n this.controller = new WalkModeController(this.model);\n this.controllerChanged.emit(this.controller);\n } else {\n this.controller.updateModel(this.model);\n }\n }\n\n private clearInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandlerDisposable = undefined;\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private async setupInteractionHandler(): Promise<void> {\n if (this.interactionHandler == null) {\n this.interactionHandler = new WalkInteractionHandler(this.model);\n\n this.interactionHandlerDisposable =\n await this.viewer?.registerInteractionHandler(this.interactionHandler);\n }\n }\n\n private async ensureTeleportToolConfigured(): Promise<void> {\n if (this.hostEl != null) {\n const slotted: Element | undefined =\n this.hostEl?.querySelector(\n 'vertex-viewer-teleport-tool[slot=\"teleport-tool\"]'\n ) ?? undefined;\n const slottedTeleportTool =\n slotted?.tagName === 'VERTEX-VIEWER-TELEPORT-TOOL'\n ? (slotted as HTMLVertexViewerTeleportToolElement)\n : undefined;\n\n if (slottedTeleportTool != null) {\n this.stateMap.teleportTool = slottedTeleportTool;\n } else {\n this.stateMap.teleportTool = document.createElement(\n 'vertex-viewer-teleport-tool'\n );\n this.stateMap.teleportTool.slot = 'teleport-tool';\n\n this.hostEl?.appendChild(this.stateMap.teleportTool);\n }\n }\n }\n\n private updateTeleportTool(): void {\n if (this.stateMap.teleportTool != null) {\n this.stateMap.teleportTool.viewer = this.viewer;\n this.stateMap.teleportTool.controller = this.controller;\n this.stateMap.teleportTool.model = this.model;\n this.stateMap.teleportTool.mode = this.teleportMode;\n }\n }\n\n private toggleInteractionMode(): void {\n if (this.enabled) {\n this.setPivotInteractionMode();\n } else {\n this.resetInteractionMode();\n }\n }\n\n private async setPivotInteractionMode(): Promise<void> {\n const baseInteractionHandler =\n await this.viewer?.getBaseInteractionHandler();\n\n if (this.enabled && baseInteractionHandler != null) {\n const interactionType =\n baseInteractionHandler.getPrimaryInteractionType();\n this.stateMap.previousPrimaryInteractionType =\n interactionType === 'pivot'\n ? this.stateMap.previousPrimaryInteractionType\n : interactionType;\n baseInteractionHandler.setPrimaryInteractionType('pivot');\n }\n }\n\n private async resetInteractionMode(): Promise<void> {\n const baseInteractionHandler =\n await this.viewer?.getBaseInteractionHandler();\n\n if (\n baseInteractionHandler != null &&\n baseInteractionHandler.getPrimaryInteractionType() === 'pivot' &&\n this.stateMap.previousPrimaryInteractionType != null\n ) {\n baseInteractionHandler.setPrimaryInteractionType(\n this.stateMap.previousPrimaryInteractionType\n );\n this.stateMap.previousPrimaryInteractionType = undefined;\n }\n }\n}\n"]}
@@ -109,7 +109,7 @@ export const measurementWithArrowCursor = {
109
109
  export const pinCursor = {
110
110
  url: "data:image/svg+xml,%3Csvg width='36px' height='36px' viewBox='0 0 24 24' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M12,2 C7.581722,2 4,5.581722 4,10 C4.00435812,11.7714969 4.41127263,13.5188357 5.19,15.11 C6.15517666,17.0237439 7.49502409,18.7240579 9.13,20.11 C9.86916736,20.7592093 10.6620019,21.3446357 11.5,21.86 L12,22.14 L12.5,21.86 C13.8750156,21.0120029 15.1296156,19.9827599 16.23,18.8 C17.2698142,17.7023203 18.1394508,16.4551671 18.81,15.1 C19.5872532,13.5118707 19.9941287,11.7681184 20,10 C20,5.581722 16.418278,2 12,2 Z M12,13 C10.3431458,13 9,11.6568542 9,10 C9,8.34314575 10.3431458,7 12,7 C13.6568542,7 15,8.34314575 15,10 C15,10.7956495 14.6839295,11.5587112 14.1213203,12.1213203 C13.5587112,12.6839295 12.7956495,13 12,13 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='icons/pin-filled' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cmask id='mask-2' fill='white'%3E%3Cuse xlink:href='%23path-1'%3E%3C/use%3E%3C/mask%3E%3Cuse id='Shape' stroke='%23FAFAFA' fill='%23BDBDBD' fill-rule='nonzero' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/svg%3E",
111
111
  offsetX: 17,
112
- offsetY: 22,
112
+ offsetY: 32,
113
113
  };
114
114
  export const labelPinCursor = {
115
115
  url: "data:image/svg+xml,%3Csvg width='36px' height='36px' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 16 24' %3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill:none;%7D.cls-2%7Bfill:%23616161;%7D.cls-3%7Bclip-path:url(%23clip-path);%7D%3C/style%3E%3CclipPath id='clip-path'%3E%3Ccircle cx='-576.76' cy='-107.26' r='4'/%3E%3C/clipPath%3E%3C/defs%3E%3Cpath d='M8,16H8a.48.48,0,0,1-.42-.23L5.75,13H3.51A1.5,1.5,0,0,1,2,11.5v-8A1.5,1.5,0,0,1,3.51,2h9A1.51,1.51,0,0,1,14,3.5v8a1.5,1.5,0,0,1-1.5,1.5H10.22L8.39,15.81A.5.5,0,0,1,8,16ZM3.51,3a.5.5,0,0,0-.5.5v8a.5.5,0,0,0,.5.5H6a.5.5,0,0,1,.42.23L8,14.61l1.55-2.38A.5.5,0,0,1,10,12h2.56a.5.5,0,0,0,.5-.5v-8a.51.51,0,0,0-.5-.5Z'/%3E%3Ccircle cx='8.01' cy='20' r='2'/%3E%3C/svg%3E%0A",