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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/dist/cjs/config-20ozv4y8.js.map +1 -1
  2. package/dist/cjs/controller-BhcNbaX_.js.map +1 -1
  3. package/dist/cjs/controller-CSwG6gbQ.js.map +1 -1
  4. package/dist/cjs/cursors-BZmDRtaZ.js.map +1 -1
  5. package/dist/cjs/dom-BBil4aN3.js.map +1 -1
  6. package/dist/cjs/dom-CvGkFQon.js.map +1 -1
  7. package/dist/cjs/entities-D6kgGria.js.map +1 -1
  8. package/dist/cjs/geometry_pb-BTko2Wi0.js.map +1 -1
  9. package/dist/cjs/grpc-BsWFEUrc.js.map +1 -1
  10. package/dist/cjs/index.cjs.js.map +1 -1
  11. package/dist/cjs/model-C9WvOKYT.js.map +1 -1
  12. package/dist/cjs/model-D17EQTIh.js.map +1 -1
  13. package/dist/cjs/model-DAB4oD5n.js.map +1 -1
  14. package/dist/cjs/model-DkXCzhs_.js.map +1 -1
  15. package/dist/cjs/multiElementInteractionHandler-BHvRKVIp.js.map +1 -1
  16. package/dist/cjs/overlays-B-06bUbI.js.map +1 -1
  17. package/dist/cjs/queries-Da9I-xMf.js.map +1 -1
  18. package/dist/cjs/regl-component-HhKCyGQ3.js.map +1 -1
  19. package/dist/cjs/representation_pb-CrCGjlyP.js.map +1 -1
  20. package/dist/cjs/results-1wRRZiYG.js.map +1 -1
  21. package/dist/cjs/row-Cet6xXup.js.map +1 -1
  22. package/dist/cjs/stencil-Hsr_8Chs.js.map +1 -1
  23. package/dist/cjs/streamAttributes-D_J-W8-2.js.map +1 -1
  24. package/dist/cjs/templates-DvjgjnlO.js.map +1 -1
  25. package/dist/cjs/util-DIJSIQXH.js.map +1 -1
  26. package/dist/cjs/utils-CibrnHQ4.js.map +1 -1
  27. package/dist/cjs/utils-D8MbXbwO.js.map +1 -1
  28. package/dist/cjs/utils-qErVs2Vt.js.map +1 -1
  29. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +6 -8
  30. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
  31. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
  32. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
  33. package/dist/cjs/vertex-scene-tree.cjs.entry.js +2 -2
  34. package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
  35. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +2 -2
  36. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
  37. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
  38. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js.map +1 -1
  39. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
  40. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js.map +1 -1
  41. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +1 -1
  42. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js.map +1 -1
  43. package/dist/cjs/vertex-viewer-icon.cjs.entry.js.map +1 -1
  44. package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js.map +1 -1
  45. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
  46. package/dist/cjs/vertex-viewer-markup.cjs.entry.js +1 -1
  47. package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
  48. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js.map +1 -1
  49. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js.map +1 -1
  50. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +2 -2
  51. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js.map +1 -1
  52. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js.map +1 -1
  53. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +2 -2
  54. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
  55. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
  56. package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +1 -1
  57. package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js.map +1 -1
  58. package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js.map +1 -1
  59. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +4 -5
  60. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
  61. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +1 -1
  62. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js.map +1 -1
  63. package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js.map +1 -1
  64. package/dist/cjs/vertex-viewer.cjs.entry.js +9 -5
  65. package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
  66. package/dist/cjs/viewport-CG1VYkIU.js.map +1 -1
  67. package/dist/collection/components/scene-tree/errors.js.map +1 -1
  68. package/dist/collection/components/scene-tree/lib/controller.js.map +1 -1
  69. package/dist/collection/components/scene-tree/lib/dom.js.map +1 -1
  70. package/dist/collection/components/scene-tree/lib/errors.js.map +1 -1
  71. package/dist/collection/components/scene-tree/lib/grpc.js.map +1 -1
  72. package/dist/collection/components/scene-tree/lib/handlers.js.map +1 -1
  73. package/dist/collection/components/scene-tree/lib/row.js.map +1 -1
  74. package/dist/collection/components/scene-tree/lib/viewer-ops.js.map +1 -1
  75. package/dist/collection/components/scene-tree/scene-tree.js +2 -2
  76. package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
  77. package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
  78. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
  79. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
  80. package/dist/collection/components/scene-tree-table-cell/utils.js.map +1 -1
  81. package/dist/collection/components/scene-tree-table-layout/lib/dom.js.map +1 -1
  82. package/dist/collection/components/scene-tree-table-layout/lib/window.js.map +1 -1
  83. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +5 -5
  84. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
  85. package/dist/collection/components/viewer/utils.js.map +1 -1
  86. package/dist/collection/components/viewer/viewer.js +9 -5
  87. package/dist/collection/components/viewer/viewer.js.map +1 -1
  88. package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js +2 -2
  89. package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js.map +1 -1
  90. package/dist/collection/components/viewer-dom-element/utils.js.map +1 -1
  91. package/dist/collection/components/viewer-dom-element/viewer-dom-element.js +1 -1
  92. package/dist/collection/components/viewer-dom-element/viewer-dom-element.js.map +1 -1
  93. package/dist/collection/components/viewer-dom-group/utils.js.map +1 -1
  94. package/dist/collection/components/viewer-dom-group/viewer-dom-group.js +1 -1
  95. package/dist/collection/components/viewer-dom-group/viewer-dom-group.js.map +1 -1
  96. package/dist/collection/components/viewer-dom-renderer/renderer2d.js.map +1 -1
  97. package/dist/collection/components/viewer-dom-renderer/renderer3d.js.map +1 -1
  98. package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js.map +1 -1
  99. package/dist/collection/components/viewer-hit-result-indicator/lib/dom.js.map +1 -1
  100. package/dist/collection/components/viewer-hit-result-indicator/lib/indicator.js.map +1 -1
  101. package/dist/collection/components/viewer-hit-result-indicator/lib/plane.js.map +1 -1
  102. package/dist/collection/components/viewer-hit-result-indicator/lib/point.js.map +1 -1
  103. package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js +1 -1
  104. package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js.map +1 -1
  105. package/dist/collection/components/viewer-icon/viewer-icon.js.map +1 -1
  106. package/dist/collection/components/viewer-markup/markup-utils.js.map +1 -1
  107. package/dist/collection/components/viewer-markup/viewer-markup-components.js.map +1 -1
  108. package/dist/collection/components/viewer-markup/viewer-markup.js +1 -1
  109. package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
  110. package/dist/collection/components/viewer-markup-arrow/interactions.js.map +1 -1
  111. package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
  112. package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow-components.js.map +1 -1
  113. package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow.js.map +1 -1
  114. package/dist/collection/components/viewer-markup-circle/interactions.js.map +1 -1
  115. package/dist/collection/components/viewer-markup-circle/utils.js.map +1 -1
  116. package/dist/collection/components/viewer-markup-circle/viewer-markup-circle.js.map +1 -1
  117. package/dist/collection/components/viewer-markup-freeform/interactions.js.map +1 -1
  118. package/dist/collection/components/viewer-markup-freeform/utils.js.map +1 -1
  119. package/dist/collection/components/viewer-markup-freeform/viewer-markup-freeform.js.map +1 -1
  120. package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.js.map +1 -1
  121. package/dist/collection/components/viewer-measurement-details/viewer-measurement-details.js.map +1 -1
  122. package/dist/collection/components/viewer-measurement-distance/hitTest.js.map +1 -1
  123. package/dist/collection/components/viewer-measurement-distance/interactions.js.map +1 -1
  124. package/dist/collection/components/viewer-measurement-distance/utils.js.map +1 -1
  125. package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js.map +1 -1
  126. package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js +1 -1
  127. package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js.map +1 -1
  128. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +1 -1
  129. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js.map +1 -1
  130. package/dist/collection/components/viewer-measurement-precise/viewer-measurement-precise.js.map +1 -1
  131. package/dist/collection/components/viewer-pin-group/utils.js.map +1 -1
  132. package/dist/collection/components/viewer-pin-group/viewer-pin-group.js +2 -2
  133. package/dist/collection/components/viewer-pin-group/viewer-pin-group.js.map +1 -1
  134. package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
  135. package/dist/collection/components/viewer-pin-tool/utils.js.map +1 -1
  136. package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js +1 -1
  137. package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js.map +1 -1
  138. package/dist/collection/components/viewer-teleport-tool/viewer-teleport-tool.js.map +1 -1
  139. package/dist/collection/components/viewer-transform-widget/util.js +1 -2
  140. package/dist/collection/components/viewer-transform-widget/util.js.map +1 -1
  141. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
  142. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +3 -3
  143. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
  144. package/dist/collection/components/viewer-transform-widget/widget.js.map +1 -1
  145. package/dist/collection/components/viewer-view-cube/viewer-view-cube.js +1 -1
  146. package/dist/collection/components/viewer-view-cube/viewer-view-cube.js.map +1 -1
  147. package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js.map +1 -1
  148. package/dist/collection/lib/annotations/controller.js.map +1 -1
  149. package/dist/collection/lib/canvases/controller.js.map +1 -1
  150. package/dist/collection/lib/canvases/mapper.js.map +1 -1
  151. package/dist/collection/lib/config.js.map +1 -1
  152. package/dist/collection/lib/cursors.js.map +1 -1
  153. package/dist/collection/lib/dom.js.map +1 -1
  154. package/dist/collection/lib/grpc.js.map +1 -1
  155. package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
  156. package/dist/collection/lib/interactions/flyToPartKeyInteraction.js.map +1 -1
  157. package/dist/collection/lib/interactions/flyToPositionKeyInteraction.js.map +1 -1
  158. package/dist/collection/lib/interactions/interactionApi.js.map +1 -1
  159. package/dist/collection/lib/interactions/interactionApiOrthographic.js.map +1 -1
  160. package/dist/collection/lib/interactions/interactionApiPerspective.js.map +1 -1
  161. package/dist/collection/lib/interactions/mouseInteractionHandler.js.map +1 -1
  162. package/dist/collection/lib/interactions/mouseInteractions.js.map +1 -1
  163. package/dist/collection/lib/interactions/multiElementInteractionHandler.js.map +1 -1
  164. package/dist/collection/lib/interactions/multiPointerInteractionHandler.js.map +1 -1
  165. package/dist/collection/lib/interactions/multiTouchInteractionHandler.js.map +1 -1
  166. package/dist/collection/lib/interactions/pointerInteractionHandler.js.map +1 -1
  167. package/dist/collection/lib/interactions/tapInteractionHandler.js.map +1 -1
  168. package/dist/collection/lib/interactions/touchInteractionHandler.js.map +1 -1
  169. package/dist/collection/lib/keyBinding.js.map +1 -1
  170. package/dist/collection/lib/mappers/annotation.js.map +1 -1
  171. package/dist/collection/lib/mappers/camera.js.map +1 -1
  172. package/dist/collection/lib/mappers/color.js.map +1 -1
  173. package/dist/collection/lib/mappers/colorMaterial.js.map +1 -1
  174. package/dist/collection/lib/mappers/corePb.js.map +1 -1
  175. package/dist/collection/lib/mappers/corePbJs.js.map +1 -1
  176. package/dist/collection/lib/mappers/frameStreaming.js.map +1 -1
  177. package/dist/collection/lib/mappers/geometry.js.map +1 -1
  178. package/dist/collection/lib/mappers/material.js.map +1 -1
  179. package/dist/collection/lib/mappers/pagination.js.map +1 -1
  180. package/dist/collection/lib/mappers/scalar.js.map +1 -1
  181. package/dist/collection/lib/mappers/streamAttributes.js.map +1 -1
  182. package/dist/collection/lib/markup/interactions.js.map +1 -1
  183. package/dist/collection/lib/measurement/controller.js.map +1 -1
  184. package/dist/collection/lib/measurement/entities.js.map +1 -1
  185. package/dist/collection/lib/measurement/interactions.js.map +1 -1
  186. package/dist/collection/lib/measurement/mapper.js.map +1 -1
  187. package/dist/collection/lib/measurement/model.js.map +1 -1
  188. package/dist/collection/lib/measurement/overlays.js.map +1 -1
  189. package/dist/collection/lib/measurement/results.js.map +1 -1
  190. package/dist/collection/lib/meters.js.map +1 -1
  191. package/dist/collection/lib/model-views/controller.js.map +1 -1
  192. package/dist/collection/lib/model-views/mapper.js.map +1 -1
  193. package/dist/collection/lib/pins/controller.js.map +1 -1
  194. package/dist/collection/lib/pins/interactions.js.map +1 -1
  195. package/dist/collection/lib/pmi/controller.js.map +1 -1
  196. package/dist/collection/lib/pmi/mapper.js.map +1 -1
  197. package/dist/collection/lib/rendering/canvas.js.map +1 -1
  198. package/dist/collection/lib/rendering/imageLoaders.js.map +1 -1
  199. package/dist/collection/lib/rendering/matrices.js.map +1 -1
  200. package/dist/collection/lib/rendering/timing.js.map +1 -1
  201. package/dist/collection/lib/rendering/utils.js.map +1 -1
  202. package/dist/collection/lib/rendering/vectors.js.map +1 -1
  203. package/dist/collection/lib/scene-items/controller.js.map +1 -1
  204. package/dist/collection/lib/scene-items/mapper.js.map +1 -1
  205. package/dist/collection/lib/scenes/camera.js.map +1 -1
  206. package/dist/collection/lib/scenes/cameraRenderResult.js.map +1 -1
  207. package/dist/collection/lib/scenes/colorMaterial.js.map +1 -1
  208. package/dist/collection/lib/scenes/crossSectioner.js.map +1 -1
  209. package/dist/collection/lib/scenes/mapper.js.map +1 -1
  210. package/dist/collection/lib/scenes/operations.js.map +1 -1
  211. package/dist/collection/lib/scenes/queries.js.map +1 -1
  212. package/dist/collection/lib/scenes/raycaster.js.map +1 -1
  213. package/dist/collection/lib/scenes/scene.js.map +1 -1
  214. package/dist/collection/lib/scenes/sceneOperationExecuteResult.js.map +1 -1
  215. package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
  216. package/dist/collection/lib/stencil.js.map +1 -1
  217. package/dist/collection/lib/storage.js.map +1 -1
  218. package/dist/collection/lib/stream/dispatcher.js.map +1 -1
  219. package/dist/collection/lib/stream/stream.js.map +1 -1
  220. package/dist/collection/lib/stream/utils.js.map +1 -1
  221. package/dist/collection/lib/teleportation/interactions.js.map +1 -1
  222. package/dist/collection/lib/templates.js.map +1 -1
  223. package/dist/collection/lib/token.js.map +1 -1
  224. package/dist/collection/lib/transforms/axis-lines.js.map +1 -1
  225. package/dist/collection/lib/transforms/axis-rotation.js.map +1 -1
  226. package/dist/collection/lib/transforms/axis-translation.js.map +1 -1
  227. package/dist/collection/lib/transforms/controller.js.map +1 -1
  228. package/dist/collection/lib/transforms/drawable.js.map +1 -1
  229. package/dist/collection/lib/transforms/hits.js.map +1 -1
  230. package/dist/collection/lib/transforms/line.js.map +1 -1
  231. package/dist/collection/lib/transforms/mesh.js.map +1 -1
  232. package/dist/collection/lib/transforms/shape.js.map +1 -1
  233. package/dist/collection/lib/transforms/transformation-delta.js.map +1 -1
  234. package/dist/collection/lib/transforms/util.js.map +1 -1
  235. package/dist/collection/lib/types/clippingPlanes.js.map +1 -1
  236. package/dist/collection/lib/types/depthBuffer.js.map +1 -1
  237. package/dist/collection/lib/types/featureMap.js.map +1 -1
  238. package/dist/collection/lib/types/flags.js.map +1 -1
  239. package/dist/collection/lib/types/frame.js.map +1 -1
  240. package/dist/collection/lib/types/frameCamera.js.map +1 -1
  241. package/dist/collection/lib/types/loadableResource.js.map +1 -1
  242. package/dist/collection/lib/types/orientation.js.map +1 -1
  243. package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
  244. package/dist/collection/lib/types/standardView.js.map +1 -1
  245. package/dist/collection/lib/types/stencilBuffer.js.map +1 -1
  246. package/dist/collection/lib/types/synchronizedClock.js.map +1 -1
  247. package/dist/collection/lib/types/viewport.js.map +1 -1
  248. package/dist/collection/lib/visibilityObserver.js.map +1 -1
  249. package/dist/collection/lib/volume-intersection/controller.js.map +1 -1
  250. package/dist/collection/lib/volume-intersection/interactions.js.map +1 -1
  251. package/dist/collection/lib/volume-intersection/model.js.map +1 -1
  252. package/dist/collection/lib/walk-mode/controller.js.map +1 -1
  253. package/dist/collection/lib/walk-mode/interactions.js.map +1 -1
  254. package/dist/collection/lib/walk-mode/model.js.map +1 -1
  255. package/dist/collection/lib/webgl/regl-component.js.map +1 -1
  256. package/dist/collection/testing/annotations.js.map +1 -1
  257. package/dist/collection/testing/canvases.js.map +1 -1
  258. package/dist/collection/testing/colors.js.map +1 -1
  259. package/dist/collection/testing/eventually.js.map +1 -1
  260. package/dist/collection/testing/fixtures.js.map +1 -1
  261. package/dist/collection/testing/grpc.js +3 -9
  262. package/dist/collection/testing/grpc.js.map +1 -1
  263. package/dist/collection/testing/modelViews.js.map +1 -1
  264. package/dist/collection/testing/pmi.js.map +1 -1
  265. package/dist/collection/testing/random.js.map +1 -1
  266. package/dist/collection/testing/resizeObserver.js.map +1 -1
  267. package/dist/collection/testing/scene-items-helper.js.map +1 -1
  268. package/dist/collection/testing/sceneTree.js.map +1 -1
  269. package/dist/collection/testing/viewer.js.map +1 -1
  270. package/dist/collection/testing/webgl.js.map +1 -1
  271. package/dist/components/index.js.map +1 -1
  272. package/dist/components/{p-St4ctu2K.js → p-3-bKfpqr.js} +2 -2
  273. package/dist/components/{p-St4ctu2K.js.map → p-3-bKfpqr.js.map} +1 -1
  274. package/dist/components/p-3DqRAYgO.js.map +1 -1
  275. package/dist/components/p-B-ToCp8-.js.map +1 -1
  276. package/dist/components/p-B156bTbY.js +5 -0
  277. package/dist/components/p-B156bTbY.js.map +1 -0
  278. package/dist/components/p-B9R0QWr4.js.map +1 -1
  279. package/dist/components/p-BCOD9yfw.js.map +1 -1
  280. package/dist/components/p-BHAaIoH5.js.map +1 -1
  281. package/dist/components/{p-Doltf1wO.js → p-BOJJZ1cN.js} +2 -2
  282. package/dist/components/p-BOJJZ1cN.js.map +1 -0
  283. package/dist/components/p-BkHp-aAR.js.map +1 -1
  284. package/dist/components/p-Bkm6H5uq.js.map +1 -1
  285. package/dist/components/p-C-VWDW9n.js.map +1 -1
  286. package/dist/components/p-C79PxobX.js.map +1 -1
  287. package/dist/components/p-CAugdB_8.js.map +1 -1
  288. package/dist/components/p-CEzVEgdQ.js.map +1 -1
  289. package/dist/components/p-CGCJ5hbJ.js.map +1 -1
  290. package/dist/components/p-COlcifvm.js.map +1 -1
  291. package/dist/components/p-CXTH3zrN.js.map +1 -1
  292. package/dist/components/p-CZCXdo3t.js.map +1 -1
  293. package/dist/components/p-Cd7kap5W.js.map +1 -1
  294. package/dist/components/p-CiSHWNC4.js.map +1 -1
  295. package/dist/components/p-CjG1fMh1.js.map +1 -1
  296. package/dist/components/p-CkjXRDNL.js.map +1 -1
  297. package/dist/components/p-D0KZu516.js.map +1 -1
  298. package/dist/components/p-D12q-fpW.js.map +1 -1
  299. package/dist/components/p-D33gVA2W.js.map +1 -1
  300. package/dist/components/p-DC86ZXai.js.map +1 -1
  301. package/dist/components/{p-B80hfIq6.js → p-DF4kEsJU.js} +2 -2
  302. package/dist/components/p-DF4kEsJU.js.map +1 -0
  303. package/dist/components/p-DRh4_Z-g.js.map +1 -1
  304. package/dist/components/p-DRnMrHWY.js.map +1 -1
  305. package/dist/components/{p-b0ZzPHz8.js → p-DUC59SSO.js} +2 -2
  306. package/dist/components/p-DUC59SSO.js.map +1 -0
  307. package/dist/components/p-DVW2WZTq.js.map +1 -1
  308. package/dist/components/p-DZI8pnGz.js.map +1 -1
  309. package/dist/components/p-Dbz9yUqC.js.map +1 -1
  310. package/dist/components/p-Yfi0i5Kj.js.map +1 -1
  311. package/dist/components/p-abSJ29r7.js.map +1 -1
  312. package/dist/components/p-ahjMltGJ.js.map +1 -1
  313. package/dist/components/p-bal2RLiw.js.map +1 -1
  314. package/dist/components/{p-BopQW1sA.js → p-oK38ynrd.js} +2 -2
  315. package/dist/components/p-oK38ynrd.js.map +1 -0
  316. package/dist/components/vertex-scene-tree-table-cell.js +1 -1
  317. package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
  318. package/dist/components/vertex-scene-tree-table-layout.js +1 -1
  319. package/dist/components/vertex-scene-tree.js +1 -1
  320. package/dist/components/vertex-scene-tree.js.map +1 -1
  321. package/dist/components/vertex-viewer-box-query-tool.js +1 -1
  322. package/dist/components/vertex-viewer-box-query-tool.js.map +1 -1
  323. package/dist/components/vertex-viewer-dom-element.js +1 -1
  324. package/dist/components/vertex-viewer-dom-group.js +1 -1
  325. package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
  326. package/dist/components/vertex-viewer-hit-result-indicator.js.map +1 -1
  327. package/dist/components/vertex-viewer-markup-tool.js.map +1 -1
  328. package/dist/components/vertex-viewer-markup.js +1 -1
  329. package/dist/components/vertex-viewer-markup.js.map +1 -1
  330. package/dist/components/vertex-viewer-measurement-details.js.map +1 -1
  331. package/dist/components/vertex-viewer-measurement-distance.js +1 -1
  332. package/dist/components/vertex-viewer-measurement-distance.js.map +1 -1
  333. package/dist/components/vertex-viewer-measurement-line.js +1 -1
  334. package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
  335. package/dist/components/vertex-viewer-measurement-precise.js +1 -1
  336. package/dist/components/vertex-viewer-measurement-precise.js.map +1 -1
  337. package/dist/components/vertex-viewer-pin-group.js +1 -1
  338. package/dist/components/vertex-viewer-pin-tool.js +1 -1
  339. package/dist/components/vertex-viewer-pin-tool.js.map +1 -1
  340. package/dist/components/vertex-viewer-transform-widget.js +1 -1
  341. package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
  342. package/dist/components/vertex-viewer-view-cube.js +1 -1
  343. package/dist/components/vertex-viewer-view-cube.js.map +1 -1
  344. package/dist/components/vertex-viewer-walk-mode-tool.js.map +1 -1
  345. package/dist/components/vertex-viewer.js +1 -1
  346. package/dist/components/vertex-viewer.js.map +1 -1
  347. package/dist/esm/config-lglER3mU.js.map +1 -1
  348. package/dist/esm/controller-BMWGs-I6.js.map +1 -1
  349. package/dist/esm/controller-Iymb_J2R.js.map +1 -1
  350. package/dist/esm/cursors-BbBDEutb.js.map +1 -1
  351. package/dist/esm/dom-B3m2VjbN.js.map +1 -1
  352. package/dist/esm/dom-DX6pEG54.js.map +1 -1
  353. package/dist/esm/entities-zRken6VS.js.map +1 -1
  354. package/dist/esm/geometry_pb-BiZRfctN.js.map +1 -1
  355. package/dist/esm/grpc-CZAYqbTu.js.map +1 -1
  356. package/dist/esm/index.js.map +1 -1
  357. package/dist/esm/model-BYW5YIye.js.map +1 -1
  358. package/dist/esm/model-CLtwOS0o.js.map +1 -1
  359. package/dist/esm/model-D0EJdHmW.js.map +1 -1
  360. package/dist/esm/model-DHJ5aE4y.js.map +1 -1
  361. package/dist/esm/multiElementInteractionHandler-DwjL-r55.js.map +1 -1
  362. package/dist/esm/overlays-BE1oqniA.js.map +1 -1
  363. package/dist/esm/queries-DEzCmbTD.js.map +1 -1
  364. package/dist/esm/regl-component-DmkowWhg.js.map +1 -1
  365. package/dist/esm/representation_pb-g4f0WC4k.js.map +1 -1
  366. package/dist/esm/results-CFB6nKu8.js.map +1 -1
  367. package/dist/esm/row-CiSHWNC4.js.map +1 -1
  368. package/dist/esm/stencil-BV-7pO4q.js.map +1 -1
  369. package/dist/esm/streamAttributes-Cp8PEH9A.js.map +1 -1
  370. package/dist/esm/templates-DRh4_Z-g.js.map +1 -1
  371. package/dist/esm/util-BCZZYmp4.js.map +1 -1
  372. package/dist/esm/utils-BvZ9-fs0.js.map +1 -1
  373. package/dist/esm/utils-DC86ZXai.js.map +1 -1
  374. package/dist/esm/utils-D_pIldrS.js.map +1 -1
  375. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +6 -8
  376. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
  377. package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
  378. package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
  379. package/dist/esm/vertex-scene-tree.entry.js +2 -2
  380. package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
  381. package/dist/esm/vertex-viewer-box-query-tool.entry.js +2 -2
  382. package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
  383. package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
  384. package/dist/esm/vertex-viewer-dom-element_2.entry.js.map +1 -1
  385. package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
  386. package/dist/esm/vertex-viewer-dom-group.entry.js.map +1 -1
  387. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +1 -1
  388. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js.map +1 -1
  389. package/dist/esm/vertex-viewer-icon.entry.js.map +1 -1
  390. package/dist/esm/vertex-viewer-markup-arrow_3.entry.js.map +1 -1
  391. package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
  392. package/dist/esm/vertex-viewer-markup.entry.js +1 -1
  393. package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
  394. package/dist/esm/vertex-viewer-measurement-details.entry.js.map +1 -1
  395. package/dist/esm/vertex-viewer-measurement-distance.entry.js.map +1 -1
  396. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +2 -2
  397. package/dist/esm/vertex-viewer-measurement-line_2.entry.js.map +1 -1
  398. package/dist/esm/vertex-viewer-measurement-precise.entry.js.map +1 -1
  399. package/dist/esm/vertex-viewer-pin-group.entry.js +2 -2
  400. package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
  401. package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
  402. package/dist/esm/vertex-viewer-pin-tool.entry.js +1 -1
  403. package/dist/esm/vertex-viewer-pin-tool.entry.js.map +1 -1
  404. package/dist/esm/vertex-viewer-teleport-tool.entry.js.map +1 -1
  405. package/dist/esm/vertex-viewer-transform-widget.entry.js +4 -5
  406. package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
  407. package/dist/esm/vertex-viewer-view-cube.entry.js +1 -1
  408. package/dist/esm/vertex-viewer-view-cube.entry.js.map +1 -1
  409. package/dist/esm/vertex-viewer-walk-mode-tool.entry.js.map +1 -1
  410. package/dist/esm/vertex-viewer.entry.js +9 -5
  411. package/dist/esm/vertex-viewer.entry.js.map +1 -1
  412. package/dist/esm/viewport-C8WQZxvx.js.map +1 -1
  413. package/dist/types/regl-shape.d.ts +1 -1
  414. package/dist/viewer/index.esm.js.map +1 -1
  415. package/dist/viewer/{p-eac63070.entry.js → p-051b5154.entry.js} +2 -2
  416. package/dist/viewer/p-051b5154.entry.js.map +1 -0
  417. package/dist/viewer/{p-3d3a7eeb.entry.js → p-0984c51f.entry.js} +2 -2
  418. package/dist/viewer/{p-3d3a7eeb.entry.js.map → p-0984c51f.entry.js.map} +1 -1
  419. package/dist/viewer/{p-864f40c7.entry.js → p-11cf755a.entry.js} +2 -2
  420. package/dist/viewer/p-11cf755a.entry.js.map +1 -0
  421. package/dist/viewer/{p-29d14611.entry.js → p-16775f7d.entry.js} +2 -2
  422. package/dist/viewer/p-16775f7d.entry.js.map +1 -0
  423. package/dist/viewer/{p-5a85cae5.entry.js → p-1eb636f8.entry.js} +2 -2
  424. package/dist/viewer/p-1eb636f8.entry.js.map +1 -0
  425. package/dist/viewer/{p-e993f300.entry.js → p-228d1d43.entry.js} +2 -2
  426. package/dist/viewer/p-228d1d43.entry.js.map +1 -0
  427. package/dist/viewer/p-33f44cc1.entry.js.map +1 -1
  428. package/dist/viewer/{p-3300d3dc.entry.js → p-35601c85.entry.js} +2 -2
  429. package/dist/viewer/p-35601c85.entry.js.map +1 -0
  430. package/dist/viewer/p-47766566.entry.js.map +1 -1
  431. package/dist/viewer/p-6e3a6bbd.entry.js.map +1 -1
  432. package/dist/viewer/p-7f388b45.entry.js.map +1 -1
  433. package/dist/viewer/p-89544066.entry.js.map +1 -1
  434. package/dist/viewer/{p-07b99ac9.entry.js → p-8c369777.entry.js} +2 -2
  435. package/dist/viewer/p-8c369777.entry.js.map +1 -0
  436. package/dist/viewer/{p-e59983dc.entry.js → p-9835c5e2.entry.js} +2 -2
  437. package/dist/viewer/p-9835c5e2.entry.js.map +1 -0
  438. package/dist/viewer/{p-aa95e21a.entry.js → p-9d8ff406.entry.js} +2 -2
  439. package/dist/viewer/p-9d8ff406.entry.js.map +1 -0
  440. package/dist/viewer/p-BDvACHun.js.map +1 -1
  441. package/dist/viewer/p-BIkuvTVH.js.map +1 -1
  442. package/dist/viewer/p-BRPkbTVP.js.map +1 -1
  443. package/dist/viewer/p-BsBIynwj.js.map +1 -1
  444. package/dist/viewer/p-BxtKMwBH.js.map +1 -1
  445. package/dist/viewer/p-C4y4Noe-.js.map +1 -1
  446. package/dist/viewer/p-C6KrfydC.js.map +1 -1
  447. package/dist/viewer/p-C7dYsPFU.js.map +1 -1
  448. package/dist/viewer/p-C9Cqbq6H.js.map +1 -1
  449. package/dist/viewer/p-CVWO4w6b.js.map +1 -1
  450. package/dist/viewer/p-ChqXy0cG.js.map +1 -1
  451. package/dist/viewer/p-CiSHWNC4.js.map +1 -1
  452. package/dist/viewer/p-CjG1fMh1.js.map +1 -1
  453. package/dist/viewer/p-Cs5KOvOQ.js.map +1 -1
  454. package/dist/viewer/p-CyGlYje2.js.map +1 -1
  455. package/dist/viewer/p-D6eJC1q4.js.map +1 -1
  456. package/dist/viewer/p-DC86ZXai.js.map +1 -1
  457. package/dist/viewer/p-DRh4_Z-g.js.map +1 -1
  458. package/dist/viewer/p-DUX5FvBC.js.map +1 -1
  459. package/dist/viewer/p-DX6pEG54.js.map +1 -1
  460. package/dist/viewer/p-D_ixWHO7.js.map +1 -1
  461. package/dist/viewer/p-DacE-wPp.js.map +1 -1
  462. package/dist/viewer/p-Dp56p_jX.js.map +1 -1
  463. package/dist/viewer/p-EsKoKfmx.js.map +1 -1
  464. package/dist/viewer/p-F8e15or2.js.map +1 -1
  465. package/dist/viewer/p-Jfxh0jq9.js.map +1 -1
  466. package/dist/viewer/p-WPRMWirY.js.map +1 -1
  467. package/dist/viewer/p-_93RRNxT.js.map +1 -1
  468. package/dist/viewer/p-a8a81cba.entry.js +5 -0
  469. package/dist/viewer/p-a8a81cba.entry.js.map +1 -0
  470. package/dist/viewer/p-a9282481.entry.js.map +1 -1
  471. package/dist/viewer/{p-63f4f702.entry.js → p-c7e62d66.entry.js} +2 -2
  472. package/dist/viewer/p-c7e62d66.entry.js.map +1 -0
  473. package/dist/viewer/p-d37e647b.entry.js.map +1 -1
  474. package/dist/viewer/{p-302f2078.entry.js → p-d9fe788f.entry.js} +2 -2
  475. package/dist/viewer/p-d9fe788f.entry.js.map +1 -0
  476. package/dist/viewer/p-e9b83dae.entry.js.map +1 -1
  477. package/dist/viewer/{p-70f3629d.entry.js → p-f271dc4a.entry.js} +2 -2
  478. package/dist/viewer/p-f271dc4a.entry.js.map +1 -0
  479. package/dist/viewer/p-f65c0769.entry.js.map +1 -1
  480. package/dist/viewer/viewer.esm.js +1 -1
  481. package/package.json +7 -7
  482. package/dist/components/p-B80hfIq6.js.map +0 -1
  483. package/dist/components/p-BopQW1sA.js.map +0 -1
  484. package/dist/components/p-DNtS2F8J.js +0 -5
  485. package/dist/components/p-DNtS2F8J.js.map +0 -1
  486. package/dist/components/p-Doltf1wO.js.map +0 -1
  487. package/dist/components/p-b0ZzPHz8.js.map +0 -1
  488. package/dist/viewer/p-07b99ac9.entry.js.map +0 -1
  489. package/dist/viewer/p-29d14611.entry.js.map +0 -1
  490. package/dist/viewer/p-302f2078.entry.js.map +0 -1
  491. package/dist/viewer/p-3300d3dc.entry.js.map +0 -1
  492. package/dist/viewer/p-5a85cae5.entry.js.map +0 -1
  493. package/dist/viewer/p-60c915e3.entry.js +0 -5
  494. package/dist/viewer/p-60c915e3.entry.js.map +0 -1
  495. package/dist/viewer/p-63f4f702.entry.js.map +0 -1
  496. package/dist/viewer/p-70f3629d.entry.js.map +0 -1
  497. package/dist/viewer/p-864f40c7.entry.js.map +0 -1
  498. package/dist/viewer/p-aa95e21a.entry.js.map +0 -1
  499. package/dist/viewer/p-e59983dc.entry.js.map +0 -1
  500. package/dist/viewer/p-e993f300.entry.js.map +0 -1
  501. package/dist/viewer/p-eac63070.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"vertex-viewer-box-query-tool.entry.js","sources":["src/lib/volume-intersection/interactions.ts","src/components/viewer-box-query-tool/viewer-box-query-tool.css?tag=vertex-viewer-box-query-tool&encapsulation=shadow","src/components/viewer-box-query-tool/viewer-box-query-tool.tsx"],"sourcesContent":["import { Disposable } from '@vertexvis/utils';\n\nimport { boxQueryCursor } from '../cursors';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from '../interactions';\nimport { InteractionHandler } from '../interactions/interactionHandler';\nimport { VolumeIntersectionQueryController } from './controller';\n\nexport class VolumeIntersectionQueryInteractionHandler implements InteractionHandler {\n private element?: HTMLElement;\n private api?: InteractionApi;\n private isInteracting?: boolean;\n private enabled?: boolean;\n private elementBounds?: DOMRect;\n private crosshairCursorDisposable?: Disposable;\n private waitCursorDisposable?: Disposable;\n\n public constructor(private controller: VolumeIntersectionQueryController) {\n this.handleDragBegin = this.handleDragBegin.bind(this);\n this.handleDrag = this.handleDrag.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n\n this.enabled = true;\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.element.addEventListener('pointerdown', this.handleDragBegin);\n this.addCrosshairCursor();\n }\n\n public dispose(): void {\n this.element?.removeEventListener('pointerdown', this.handleDragBegin);\n window.removeEventListener('pointermove', this.handleDrag);\n window.removeEventListener('pointerup', this.handleDragEnd);\n this.crosshairCursorDisposable?.dispose();\n this.waitCursorDisposable?.dispose();\n\n this.element = undefined;\n this.api = undefined;\n this.enabled = true;\n }\n\n public disable(): void {\n this.enabled = false;\n }\n\n public enable(): void {\n this.enabled = true;\n }\n\n private handleDragBegin(event: PointerEvent): void {\n if (\n this.enabled &&\n this.isPrimaryMouseButtonClick(event) &&\n !this.isInteracting\n ) {\n this.elementBounds = this.element?.getBoundingClientRect();\n this.isInteracting = true;\n this.controller.setStartPoint(\n getMouseClientPosition(event, this.elementBounds)\n );\n\n window.addEventListener('pointermove', this.handleDrag);\n window.addEventListener('pointerup', this.handleDragEnd);\n }\n }\n\n private handleDrag(event: PointerEvent): void {\n if (this.enabled) {\n this.controller.setEndPoint(\n getMouseClientPosition(event, this.elementBounds)\n );\n }\n }\n\n private async handleDragEnd(): Promise<void> {\n this.isInteracting = false;\n\n window.removeEventListener('pointermove', this.handleDrag);\n window.removeEventListener('pointerup', this.handleDragEnd);\n\n this.crosshairCursorDisposable?.dispose();\n if (this.enabled) {\n this.addWaitCursor();\n try {\n await this.controller.execute();\n } finally {\n this.waitCursorDisposable?.dispose();\n this.addCrosshairCursor();\n }\n }\n }\n\n private isPrimaryMouseButtonClick(event: PointerEvent): boolean {\n return event.buttons === 1;\n }\n\n private addCrosshairCursor(): void {\n this.crosshairCursorDisposable?.dispose();\n this.crosshairCursorDisposable = this.api?.addCursor(boxQueryCursor);\n }\n\n private addWaitCursor(): void {\n this.waitCursorDisposable?.dispose();\n this.waitCursorDisposable = this.api?.addCursor('wait');\n }\n}\n",":host {\n /**\n * @prop --viewer-box-query-outline-exclusive-color: A CSS color that\n * specifies the color of box for an exclusive query. This will\n * be used in combination with `--viewer-box-query-outline-fill-opacity`\n * for the background color of the box. Defaults to `#0099cc`.\n */\n --viewer-box-query-outline-exclusive-color: #0099cc;\n /**\n * @prop --viewer-box-query-outline-exclusive-border-style: A border\n * style that specifies the type of border to display around the box for an\n * exclusive query. Defaults to `solid`.\n */\n --viewer-box-query-outline-exclusive-border-style: solid;\n /**\n * @prop --viewer-box-query-outline-inclusive-color: A CSS color that\n * specifies the color of box for an inclusive query. This will\n * be used in combination with `--viewer-box-query-outline-fill-opacity`\n * for the background color of the box. Defaults to `#00cc00`.\n */\n --viewer-box-query-outline-inclusive-color: #00cc00;\n /**\n * @prop --viewer-box-query-outline-inclusive-border-style: A border\n * style that specifies the type of border to display around the box for an\n * inclusive query. Defaults to `dashed`.\n */\n --viewer-box-query-outline-inclusive-border-style: dashed;\n /**\n * @prop --viewer-box-query-outline-border-radius: A CSS length that\n * specifies the border radius of the drawn box. Defaults to `0.25rem`.\n */\n --viewer-box-query-outline-border-radius: 0.25rem;\n /**\n * @prop--viewer-box-query-outline-fill-opacity: A number between \n * 0 and 1 that specifies the opacity of the background of the drawn box.\n * Defaults to `0.25`.\n */\n --viewer-box-query-outline-fill-opacity: 0.25;\n}\n\n.bounds {\n position: absolute;\n}\n\n.outline {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: var(--viewer-box-query-outline-border-radius);\n}\n\n:host([exclusive=\"true\"]) .outline {\n border: 3px var(--viewer-box-query-outline-exclusive-border-style) var(--viewer-box-query-outline-exclusive-color);\n}\n\n:host([inclusive=\"true\"]) .outline {\n border: 3px var(--viewer-box-query-outline-inclusive-border-style) var(--viewer-box-query-outline-inclusive-color);\n}\n\n.fill {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: var(--viewer-box-query-outline-fill-opacity);\n border-radius: var(--viewer-box-query-outline-border-radius);\n}\n\n:host([exclusive=\"true\"]) .fill {\n background-color: var(--viewer-box-query-outline-exclusive-color);\n}\n\n:host([inclusive=\"true\"]) .fill {\n background-color: var(--viewer-box-query-outline-inclusive-color);\n}","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { VolumeIntersectionQueryController } from '../../lib/volume-intersection/controller';\nimport { VolumeIntersectionQueryInteractionHandler } from '../../lib/volume-intersection/interactions';\nimport {\n QueryType,\n VolumeIntersectionQueryDetails,\n VolumeIntersectionQueryModel,\n} from '../../lib/volume-intersection/model';\nimport {\n VolumeIntersectionQueryMode,\n VolumeIntersectionQueryType,\n} from './types';\n\n/**\n * The `ViewerBoxQueryTool` allows for the drawing of a \"box\" on screen to represent\n * a query for items in a specific area of the viewer. This tool then allows for an\n * operation to be performed on the items contained (exclusive) by the box or both\n * contained by and intersecting with (inclusive) the box.\n */\n@Component({\n tag: 'vertex-viewer-box-query-tool',\n styleUrl: 'viewer-box-query-tool.css',\n shadow: true,\n})\nexport class ViewerBoxQueryTool {\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 controller that is responsible for performing operations using the\n * volume intersection query defined by the drawn box and updating the model.\n */\n @Prop({ mutable: true })\n public controller?: VolumeIntersectionQueryController;\n\n /**\n * The model that contains the points representing the corners of the box\n * displayed on screen, the type of the query to be performed, and methods\n * for setting these values.\n */\n @Prop({ mutable: true })\n public model?: VolumeIntersectionQueryModel;\n\n /**\n * The default operation to perform when a drag has completed and the intersection\n * query will be run. Defaults to `clearAndSelect`, and can be changed to `select` or `deselect`.\n *\n * `clearAndSelect` will clear all existing selection, and select the results of the query.\n * `select` will maintain existing selection, and select the results of the query.\n * `deselect` will maintain existing selection, and deselect the results of the query.\n *\n * The operation behavior for this intersection query tool can also be changed by\n * providing a custom implementation of the `VolumeIntersectionQueryController`, or\n * by using the `setOperationTransform` method of the default controller.\n */\n @Prop()\n public operationType: VolumeIntersectionQueryType = 'clearAndSelect';\n\n /**\n * An optional value to specify a singular mode of intersection query. This value\n * defaults to `undefined`, which will indicate that both `exclusive` and `inclusive`\n * queries should be made, with `inclusive` being represented by a left to right\n * drag behavior and `exclusive` being represented by a right to left drag.\n *\n * Setting this value to `inclusive` will cause dragging left to right and left to right\n * to result in an `inclusive` query, and the box will only be styled for `inclusive` queries.\n *\n * Setting this value to `exclusive` will cause dragging left to right and left to right\n * to result in an `exclusive` query, and the box will only be styled for `exclusive` queries.\n */\n @Prop()\n public mode?: VolumeIntersectionQueryMode;\n\n @State()\n private details?: VolumeIntersectionQueryDetails;\n\n /**\n * Event emitted when the `VolumeIntersectionQueryController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<VolumeIntersectionQueryController>;\n\n @Element()\n private hostEl!: HTMLVertexViewerBoxQueryToolElement;\n\n private interactionHandler?: VolumeIntersectionQueryInteractionHandler;\n private interactionHandlerDisposable?: Disposable;\n\n private operationStartedDisposable?: Disposable;\n private operationCompleteDisposable?: Disposable;\n private screenBoundsChangedDisposable?: Disposable;\n\n public constructor() {\n this.handleScreenBoundsChanged = this.handleScreenBoundsChanged.bind(this);\n this.handleExecuteStarted = this.handleExecuteStarted.bind(this);\n this.handleExecuteComplete = this.handleExecuteComplete.bind(this);\n }\n\n public componentWillLoad(): void {\n this.model = this.model ?? new VolumeIntersectionQueryModel(this.mode);\n\n this.screenBoundsChangedDisposable = this.model.onScreenBoundsChanged(\n this.handleScreenBoundsChanged\n );\n\n this.handleViewerChanged(this.viewer);\n this.handleControllerChange(this.controller);\n this.handleDefaultOperationChange(this.operationType);\n }\n\n public disconnectedCallback(): void {\n this.model?.reset();\n this.screenBoundsChangedDisposable?.dispose();\n this.operationStartedDisposable?.dispose();\n this.operationCompleteDisposable?.dispose();\n this.deregisterInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(newViewer?: HTMLVertexViewerElement): void {\n this.deregisterInteractionHandler();\n\n if (this.model != null && newViewer != null) {\n this.controller = new VolumeIntersectionQueryController(\n this.model,\n newViewer\n );\n this.handleDefaultOperationChange(this.operationType);\n this.registerInteractionHandler(this.controller, newViewer);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('operationType')\n protected handleDefaultOperationChange(\n updatedOperationType: VolumeIntersectionQueryType\n ): void {\n switch (updatedOperationType) {\n case 'clearAndSelect':\n this.setDefaultClearAndSelectOperation();\n break;\n case 'select':\n this.setDefaultSelectOperation();\n break;\n case 'deselect':\n this.setDefaultDeselectOperation();\n break;\n }\n }\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected handleModeChange(updatedMode?: VolumeIntersectionQueryMode): void {\n this.model?.setMode(updatedMode);\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChange(\n controller?: VolumeIntersectionQueryController\n ): void {\n this.operationStartedDisposable?.dispose();\n this.operationCompleteDisposable?.dispose();\n\n this.operationStartedDisposable = controller?.onExecuteStarted(\n this.handleExecuteStarted\n );\n this.operationStartedDisposable = controller?.onExecuteComplete(\n this.handleExecuteComplete\n );\n\n this.controllerChanged.emit(this.controller);\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <vertex-viewer-layer>\n {this.details != null && (\n <div\n class=\"bounds\"\n style={{\n left: `${this.details.screenBounds.x}px`,\n top: `${this.details.screenBounds.y}px`,\n width: `${this.details.screenBounds.width}px`,\n height: `${this.details.screenBounds.height}px`,\n }}\n >\n <slot name=\"bounds\">\n <div class=\"outline\"></div>\n <div class=\"fill\"></div>\n </slot>\n </div>\n )}\n </vertex-viewer-layer>\n </Host>\n );\n }\n\n private handleScreenBoundsChanged(\n details?: VolumeIntersectionQueryDetails\n ): void {\n this.details = details;\n\n this.updateTypeAttribute(details?.type);\n }\n\n private handleExecuteStarted(): void {\n this.interactionHandler?.disable();\n }\n\n private handleExecuteComplete(): void {\n this.interactionHandler?.enable();\n }\n\n private async registerInteractionHandler(\n controller: VolumeIntersectionQueryController,\n viewer: HTMLVertexViewerElement\n ): Promise<void> {\n this.interactionHandler = new VolumeIntersectionQueryInteractionHandler(\n controller\n );\n this.interactionHandlerDisposable = await viewer.registerInteractionHandler(\n this.interactionHandler\n );\n }\n\n private deregisterInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private updateTypeAttribute(type?: QueryType): void {\n this.hostEl.setAttribute('inclusive', `${type === 'inclusive'}`);\n this.hostEl.setAttribute('exclusive', `${type === 'exclusive'}`);\n }\n\n private setDefaultClearAndSelectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.select());\n this.controller?.setAdditionalTransforms([\n (op) => op.items.where((q) => q.withSelected()).deselect(),\n ]);\n }\n\n private setDefaultSelectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.select());\n this.controller?.setAdditionalTransforms([]);\n }\n\n private setDefaultDeselectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.deselect());\n this.controller?.setAdditionalTransforms([]);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vertex-viewer-box-query-tool.entry.js","sources":["src/lib/volume-intersection/interactions.ts","src/components/viewer-box-query-tool/viewer-box-query-tool.css?tag=vertex-viewer-box-query-tool&encapsulation=shadow","src/components/viewer-box-query-tool/viewer-box-query-tool.tsx"],"sourcesContent":["import { Disposable } from '@vertexvis/utils';\n\nimport { boxQueryCursor } from '../cursors';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from '../interactions';\nimport { InteractionHandler } from '../interactions/interactionHandler';\nimport { VolumeIntersectionQueryController } from './controller';\n\nexport class VolumeIntersectionQueryInteractionHandler implements InteractionHandler {\n private element?: HTMLElement;\n private api?: InteractionApi;\n private isInteracting?: boolean;\n private enabled?: boolean;\n private elementBounds?: DOMRect;\n private crosshairCursorDisposable?: Disposable;\n private waitCursorDisposable?: Disposable;\n\n public constructor(private controller: VolumeIntersectionQueryController) {\n this.handleDragBegin = this.handleDragBegin.bind(this);\n this.handleDrag = this.handleDrag.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n\n this.enabled = true;\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.element.addEventListener('pointerdown', this.handleDragBegin);\n this.addCrosshairCursor();\n }\n\n public dispose(): void {\n this.element?.removeEventListener('pointerdown', this.handleDragBegin);\n window.removeEventListener('pointermove', this.handleDrag);\n window.removeEventListener('pointerup', this.handleDragEnd);\n this.crosshairCursorDisposable?.dispose();\n this.waitCursorDisposable?.dispose();\n\n this.element = undefined;\n this.api = undefined;\n this.enabled = true;\n }\n\n public disable(): void {\n this.enabled = false;\n }\n\n public enable(): void {\n this.enabled = true;\n }\n\n private handleDragBegin(event: PointerEvent): void {\n if (\n this.enabled &&\n this.isPrimaryMouseButtonClick(event) &&\n !this.isInteracting\n ) {\n this.elementBounds = this.element?.getBoundingClientRect();\n this.isInteracting = true;\n this.controller.setStartPoint(\n getMouseClientPosition(event, this.elementBounds),\n );\n\n window.addEventListener('pointermove', this.handleDrag);\n window.addEventListener('pointerup', this.handleDragEnd);\n }\n }\n\n private handleDrag(event: PointerEvent): void {\n if (this.enabled) {\n this.controller.setEndPoint(\n getMouseClientPosition(event, this.elementBounds),\n );\n }\n }\n\n private async handleDragEnd(): Promise<void> {\n this.isInteracting = false;\n\n window.removeEventListener('pointermove', this.handleDrag);\n window.removeEventListener('pointerup', this.handleDragEnd);\n\n this.crosshairCursorDisposable?.dispose();\n if (this.enabled) {\n this.addWaitCursor();\n try {\n await this.controller.execute();\n } finally {\n this.waitCursorDisposable?.dispose();\n this.addCrosshairCursor();\n }\n }\n }\n\n private isPrimaryMouseButtonClick(event: PointerEvent): boolean {\n return event.buttons === 1;\n }\n\n private addCrosshairCursor(): void {\n this.crosshairCursorDisposable?.dispose();\n this.crosshairCursorDisposable = this.api?.addCursor(boxQueryCursor);\n }\n\n private addWaitCursor(): void {\n this.waitCursorDisposable?.dispose();\n this.waitCursorDisposable = this.api?.addCursor('wait');\n }\n}\n",":host {\n /**\n * @prop --viewer-box-query-outline-exclusive-color: A CSS color that\n * specifies the color of box for an exclusive query. This will\n * be used in combination with `--viewer-box-query-outline-fill-opacity`\n * for the background color of the box. Defaults to `#0099cc`.\n */\n --viewer-box-query-outline-exclusive-color: #0099cc;\n /**\n * @prop --viewer-box-query-outline-exclusive-border-style: A border\n * style that specifies the type of border to display around the box for an\n * exclusive query. Defaults to `solid`.\n */\n --viewer-box-query-outline-exclusive-border-style: solid;\n /**\n * @prop --viewer-box-query-outline-inclusive-color: A CSS color that\n * specifies the color of box for an inclusive query. This will\n * be used in combination with `--viewer-box-query-outline-fill-opacity`\n * for the background color of the box. Defaults to `#00cc00`.\n */\n --viewer-box-query-outline-inclusive-color: #00cc00;\n /**\n * @prop --viewer-box-query-outline-inclusive-border-style: A border\n * style that specifies the type of border to display around the box for an\n * inclusive query. Defaults to `dashed`.\n */\n --viewer-box-query-outline-inclusive-border-style: dashed;\n /**\n * @prop --viewer-box-query-outline-border-radius: A CSS length that\n * specifies the border radius of the drawn box. Defaults to `0.25rem`.\n */\n --viewer-box-query-outline-border-radius: 0.25rem;\n /**\n * @prop--viewer-box-query-outline-fill-opacity: A number between \n * 0 and 1 that specifies the opacity of the background of the drawn box.\n * Defaults to `0.25`.\n */\n --viewer-box-query-outline-fill-opacity: 0.25;\n}\n\n.bounds {\n position: absolute;\n}\n\n.outline {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: var(--viewer-box-query-outline-border-radius);\n}\n\n:host([exclusive=\"true\"]) .outline {\n border: 3px var(--viewer-box-query-outline-exclusive-border-style) var(--viewer-box-query-outline-exclusive-color);\n}\n\n:host([inclusive=\"true\"]) .outline {\n border: 3px var(--viewer-box-query-outline-inclusive-border-style) var(--viewer-box-query-outline-inclusive-color);\n}\n\n.fill {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: var(--viewer-box-query-outline-fill-opacity);\n border-radius: var(--viewer-box-query-outline-border-radius);\n}\n\n:host([exclusive=\"true\"]) .fill {\n background-color: var(--viewer-box-query-outline-exclusive-color);\n}\n\n:host([inclusive=\"true\"]) .fill {\n background-color: var(--viewer-box-query-outline-inclusive-color);\n}","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { VolumeIntersectionQueryController } from '../../lib/volume-intersection/controller';\nimport { VolumeIntersectionQueryInteractionHandler } from '../../lib/volume-intersection/interactions';\nimport {\n QueryType,\n VolumeIntersectionQueryDetails,\n VolumeIntersectionQueryModel,\n} from '../../lib/volume-intersection/model';\nimport {\n VolumeIntersectionQueryMode,\n VolumeIntersectionQueryType,\n} from './types';\n\n/**\n * The `ViewerBoxQueryTool` allows for the drawing of a \"box\" on screen to represent\n * a query for items in a specific area of the viewer. This tool then allows for an\n * operation to be performed on the items contained (exclusive) by the box or both\n * contained by and intersecting with (inclusive) the box.\n */\n@Component({\n tag: 'vertex-viewer-box-query-tool',\n styleUrl: 'viewer-box-query-tool.css',\n shadow: true,\n})\nexport class ViewerBoxQueryTool {\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 controller that is responsible for performing operations using the\n * volume intersection query defined by the drawn box and updating the model.\n */\n @Prop({ mutable: true })\n public controller?: VolumeIntersectionQueryController;\n\n /**\n * The model that contains the points representing the corners of the box\n * displayed on screen, the type of the query to be performed, and methods\n * for setting these values.\n */\n @Prop({ mutable: true })\n public model?: VolumeIntersectionQueryModel;\n\n /**\n * The default operation to perform when a drag has completed and the intersection\n * query will be run. Defaults to `clearAndSelect`, and can be changed to `select` or `deselect`.\n *\n * `clearAndSelect` will clear all existing selection, and select the results of the query.\n * `select` will maintain existing selection, and select the results of the query.\n * `deselect` will maintain existing selection, and deselect the results of the query.\n *\n * The operation behavior for this intersection query tool can also be changed by\n * providing a custom implementation of the `VolumeIntersectionQueryController`, or\n * by using the `setOperationTransform` method of the default controller.\n */\n @Prop()\n public operationType: VolumeIntersectionQueryType = 'clearAndSelect';\n\n /**\n * An optional value to specify a singular mode of intersection query. This value\n * defaults to `undefined`, which will indicate that both `exclusive` and `inclusive`\n * queries should be made, with `inclusive` being represented by a left to right\n * drag behavior and `exclusive` being represented by a right to left drag.\n *\n * Setting this value to `inclusive` will cause dragging left to right and left to right\n * to result in an `inclusive` query, and the box will only be styled for `inclusive` queries.\n *\n * Setting this value to `exclusive` will cause dragging left to right and left to right\n * to result in an `exclusive` query, and the box will only be styled for `exclusive` queries.\n */\n @Prop()\n public mode?: VolumeIntersectionQueryMode;\n\n @State()\n private details?: VolumeIntersectionQueryDetails;\n\n /**\n * Event emitted when the `VolumeIntersectionQueryController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<VolumeIntersectionQueryController>;\n\n @Element()\n private hostEl!: HTMLVertexViewerBoxQueryToolElement;\n\n private interactionHandler?: VolumeIntersectionQueryInteractionHandler;\n private interactionHandlerDisposable?: Disposable;\n\n private operationStartedDisposable?: Disposable;\n private operationCompleteDisposable?: Disposable;\n private screenBoundsChangedDisposable?: Disposable;\n\n public constructor() {\n this.handleScreenBoundsChanged = this.handleScreenBoundsChanged.bind(this);\n this.handleExecuteStarted = this.handleExecuteStarted.bind(this);\n this.handleExecuteComplete = this.handleExecuteComplete.bind(this);\n }\n\n public componentWillLoad(): void {\n this.model = this.model ?? new VolumeIntersectionQueryModel(this.mode);\n\n this.screenBoundsChangedDisposable = this.model.onScreenBoundsChanged(\n this.handleScreenBoundsChanged,\n );\n\n this.handleViewerChanged(this.viewer);\n this.handleControllerChange(this.controller);\n this.handleDefaultOperationChange(this.operationType);\n }\n\n public disconnectedCallback(): void {\n this.model?.reset();\n this.screenBoundsChangedDisposable?.dispose();\n this.operationStartedDisposable?.dispose();\n this.operationCompleteDisposable?.dispose();\n this.deregisterInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(newViewer?: HTMLVertexViewerElement): void {\n this.deregisterInteractionHandler();\n\n if (this.model != null && newViewer != null) {\n this.controller = new VolumeIntersectionQueryController(\n this.model,\n newViewer,\n );\n this.handleDefaultOperationChange(this.operationType);\n this.registerInteractionHandler(this.controller, newViewer);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('operationType')\n protected handleDefaultOperationChange(\n updatedOperationType: VolumeIntersectionQueryType,\n ): void {\n switch (updatedOperationType) {\n case 'clearAndSelect':\n this.setDefaultClearAndSelectOperation();\n break;\n case 'select':\n this.setDefaultSelectOperation();\n break;\n case 'deselect':\n this.setDefaultDeselectOperation();\n break;\n }\n }\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected handleModeChange(updatedMode?: VolumeIntersectionQueryMode): void {\n this.model?.setMode(updatedMode);\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChange(\n controller?: VolumeIntersectionQueryController,\n ): void {\n this.operationStartedDisposable?.dispose();\n this.operationCompleteDisposable?.dispose();\n\n this.operationStartedDisposable = controller?.onExecuteStarted(\n this.handleExecuteStarted,\n );\n this.operationStartedDisposable = controller?.onExecuteComplete(\n this.handleExecuteComplete,\n );\n\n this.controllerChanged.emit(this.controller);\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <vertex-viewer-layer>\n {this.details != null && (\n <div\n class=\"bounds\"\n style={{\n left: `${this.details.screenBounds.x}px`,\n top: `${this.details.screenBounds.y}px`,\n width: `${this.details.screenBounds.width}px`,\n height: `${this.details.screenBounds.height}px`,\n }}\n >\n <slot name=\"bounds\">\n <div class=\"outline\"></div>\n <div class=\"fill\"></div>\n </slot>\n </div>\n )}\n </vertex-viewer-layer>\n </Host>\n );\n }\n\n private handleScreenBoundsChanged(\n details?: VolumeIntersectionQueryDetails,\n ): void {\n this.details = details;\n\n this.updateTypeAttribute(details?.type);\n }\n\n private handleExecuteStarted(): void {\n this.interactionHandler?.disable();\n }\n\n private handleExecuteComplete(): void {\n this.interactionHandler?.enable();\n }\n\n private async registerInteractionHandler(\n controller: VolumeIntersectionQueryController,\n viewer: HTMLVertexViewerElement,\n ): Promise<void> {\n this.interactionHandler = new VolumeIntersectionQueryInteractionHandler(\n controller,\n );\n this.interactionHandlerDisposable = await viewer.registerInteractionHandler(\n this.interactionHandler,\n );\n }\n\n private deregisterInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private updateTypeAttribute(type?: QueryType): void {\n this.hostEl.setAttribute('inclusive', `${type === 'inclusive'}`);\n this.hostEl.setAttribute('exclusive', `${type === 'exclusive'}`);\n }\n\n private setDefaultClearAndSelectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.select());\n this.controller?.setAdditionalTransforms([\n (op) => op.items.where((q) => q.withSelected()).deselect(),\n ]);\n }\n\n private setDefaultSelectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.select());\n this.controller?.setAdditionalTransforms([]);\n }\n\n private setDefaultDeselectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.deselect());\n this.controller?.setAdditionalTransforms([]);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -250,7 +250,7 @@ const ViewerDomElement = class {
250
250
  * @ignore
251
251
  */
252
252
  render() {
253
- return (h(Host, { key: 'bf50fa97cdf5d144f262f721d3adc778340dc913' }, h("slot", { key: '46d2e88b7d3ec6daae905d8c509cbe1a2b0d0a12' })));
253
+ return (h(Host, { key: '9f708ca2a98e38bf3d61551273f43c691ab55edf' }, h("slot", { key: '510635ebdbe7bb9c73a8375b15c22f359a62c8e4' })));
254
254
  }
255
255
  static get watchers() { return {
256
256
  "position": [{
@@ -1 +1 @@
1
- {"file":"vertex-viewer-dom-element_2.entry.js","mappings":"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","names":["Vector3","Quaternion","Matrix4","Objects","Euler"],"sources":["src/components/viewer-dom-element/viewer-dom-element.css?tag=vertex-viewer-dom-element&encapsulation=shadow","src/components/viewer-dom-element/viewer-dom-element.tsx","src/components/viewer-dom-element/utils.ts","src/components/viewer-dom-group/utils.ts","src/components/viewer-dom-renderer/renderer2d.tsx","src/components/viewer-dom-renderer/renderer3d.tsx","src/components/viewer-dom-renderer/viewer-dom-renderer.css?tag=vertex-viewer-dom-renderer&encapsulation=scoped","src/components/viewer-dom-renderer/viewer-dom-renderer.tsx"],"sourcesContent":[":host {\n position: absolute;\n pointer-events: none;\n visibility: hidden;\n}\n\n/* Ignore Stencil's hydrated prop in favor of a custom `ready` selector. This\n * prevents flashing of elements before Stencil has a time to position the\n * element in 3D space.\n */\n:host([hydrated]) {\n visibility: hidden;\n}\n\n:host(.ready) {\n visibility: inherit;\n}\n\n:host(:not([interactions-off])) > * {\n pointer-events: auto;\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\n\nimport {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Euler, Matrix4, Quaternion, Vector3 } from '@vertexvis/geometry';\nimport { Objects } from '@vertexvis/utils';\n\nimport { HTMLDomRendererPositionableElement } from '../../interfaces';\n\n/**\n * The `ViewerDomElement` is responsible for managing a\n * `<vertex-viewer-dom-element>` element. These elements are intended to be\n * added as children to a `<vertex-viewer-dom-renderer>` and represent an\n * individual DOM element within a local 3D scene.\n */\n@Component({\n tag: 'vertex-viewer-dom-element',\n styleUrl: 'viewer-dom-element.css',\n shadow: true,\n})\nexport class ViewerDomElement implements HTMLDomRendererPositionableElement {\n /**\n * The local 3D position of where this element is located.\n */\n @Prop({ mutable: true, attribute: null })\n public position: Vector3.Vector3 = Vector3.origin();\n\n /**\n * @ignore\n */\n @Watch('position', { immediate: true })\n protected handlePositionChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local 3D position of where this element is located, as a JSON string.\n * JSON representation can either be in the format of `[x, y, z]` or `{\"x\": 0,\n * \"y\": 0, \"z\": 0}`.\n */\n @Prop({ attribute: 'position' })\n public positionJson = '';\n\n /**\n * @ignore\n */\n @Watch('positionJson', { immediate: true })\n protected handlePositionJsonChanged(): void {\n this.syncPosition();\n }\n\n /**\n * The local rotation of this element in Euler angles.\n */\n @Prop({ mutable: true, attribute: null })\n public rotation?: Euler.Euler;\n\n /**\n * @ignore\n */\n @Watch('rotation', { immediate: true })\n protected handleRotationChanged(): void {\n this.syncQuaternionWithRotation();\n }\n\n /**\n * The local rotation of this element in Euler angles, as a JSON string. JSON\n * representation can either be `[x, y, z, order]` or `{\"x\": 0, \"y\": 0, \"z\":\n * 0, \"order\": \"xyz\"}`.\n */\n @Prop({ attribute: 'rotation' })\n public rotationJson?: string;\n\n /**\n * @ignore\n */\n @Watch('rotationJson', { immediate: true })\n protected handleRotationJsonChanged(): void {\n this.syncRotation();\n }\n\n /**\n * The local rotation of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public quaternion: Quaternion.Quaternion = Quaternion.create();\n\n /**\n * @ignore\n */\n @Watch('quaternion', { immediate: true })\n protected handleQuaternionChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local quaternion rotation of this element, as a JSON string. JSON\n * representation can either be `[x, y, z, w]` or `{\"x\": 0, \"y\": 0, \"z\":\n * 0, \"w\": 1}`.\n */\n @Prop({ attribute: 'quaternion' })\n public quaternionJson = '';\n\n /**\n * @ignore\n */\n @Watch('quaternionJson', { immediate: true })\n protected handleQuaternionJsonChanged(): void {\n this.syncQuaternion();\n }\n\n /**\n * The local scale of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public scale: Vector3.Vector3 = Vector3.create(1, 1, 1);\n\n /**\n * @ignore\n */\n @Watch('scale', { immediate: true })\n protected handleScaleChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local scale of this element, as a JSON string. JSON string\n * representation can either be in the format of `[x, y, z]` or `{\"x\": 0, \"y\":\n * 0, \"z\": 0}`.\n */\n @Prop({ attribute: 'scale' })\n public scaleJson = '';\n\n /**\n * @ignore\n */\n @Watch('scaleJson', { immediate: true })\n protected handleScaleJsonChanged(): void {\n this.syncScale();\n }\n\n /**\n * @ignore\n */\n @Watch('matrix')\n protected handleMatrixChanged(\n newMatrix: Matrix4.Matrix4,\n oldMatrix: Matrix4.Matrix4\n ): void {\n if (!Objects.isEqual(newMatrix, oldMatrix)) {\n this.propertyChange.emit();\n }\n }\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Disables occlusion testing for this element. Defaults to enabled. When\n * enabled, the elements position will be tested against the current depth\n * buffer. If the position is occluded, then the `occluded` attribute will be\n * set.\n */\n @Prop()\n public occlusionOff = false;\n\n /**\n * Indicates if the element is hidden by geometry. This property can be used\n * with a CSS selector to modify the appearance of the element when its\n * occluded.\n *\n * @example\n *\n * ```html\n * <style>\n * vertex-viewer-dom-element[occluded] {\n * opacity: 0;\n * }\n * </style>\n * ```\n */\n @Prop({ reflect: true })\n public occluded = false;\n\n /**\n * Dispatched when the occlusion state is changed.\n */\n @Event({ bubbles: true })\n public occlusionStateChanged!: EventEmitter<boolean>;\n\n /**\n * **EXPERIMENTAL**\n * Disables detached testing for this element. Defaults to disabled. When\n * enabled, the elements position will be tested against the current depth\n * buffer. If the position is detached, then the `detached` attribute will be\n * set.\n */\n @Prop()\n public detachedOff = true;\n\n /**\n * **EXPERIMENTAL**\n * Indicates if the element is detached from geometry. This property can be used\n * with a CSS selector to modify the appearance of the element when its\n * detached.\n *\n * @example\n *\n * ```html\n * <style>\n * vertex-viewer-dom-element[detached] {\n * opacity: 0;\n * }\n * </style>\n * ```\n */\n @Prop({ reflect: true })\n public detached = false;\n\n /**\n * **EXPERIMENTAL**\n * Dispatched when the detached state is changed.\n */\n @Event({ bubbles: true })\n public detachedStateChanged!: EventEmitter<boolean>;\n\n /**\n * Disables the billboarding behavior of the element. When billboarding is\n * enabled, the element will always be oriented towards the screen.\n */\n @Prop()\n public billboardOff = false;\n\n /**\n * Disables interaction events from children.\n */\n @Prop({ reflect: true })\n public interactionsOff = false;\n\n /**\n * An event that is emitted when any property on the dom group changes\n */\n @Event({ bubbles: true })\n public propertyChange!: EventEmitter<void>;\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.syncProperties();\n }\n\n /**\n * @ignore\n */\n protected componentShouldUpdate(\n newValue: unknown,\n oldValue: unknown,\n prop: string\n ): boolean {\n return prop === 'occluded';\n }\n\n /**\n * @ignore\n */\n @Watch('occluded')\n protected handleOcclusionStateChanged(): void {\n this.occlusionStateChanged.emit(this.occluded);\n }\n\n /**\n * @ignore\n */\n @Watch('detached')\n protected handleDetachedStateChanged(): void {\n this.detachedStateChanged.emit(this.detached);\n }\n\n private syncProperties(): void {\n this.syncPosition();\n this.syncRotation();\n this.syncQuaternion();\n this.syncScale();\n this.syncMatrix();\n }\n\n private syncPosition(): void {\n this.position =\n this.positionJson.length > 0\n ? this.parseJson('positionJson', this.positionJson, Vector3.fromJson)\n : this.position;\n }\n\n private syncRotation(): void {\n this.rotation =\n this.rotationJson != null && this.rotationJson.length > 0\n ? this.parseJson('rotationJson', this.rotationJson, Euler.fromJson)\n : this.rotation;\n this.syncQuaternionWithRotation();\n }\n\n private syncQuaternionWithRotation(): void {\n this.quaternion =\n this.rotation != null\n ? Quaternion.fromEuler(this.rotation)\n : this.quaternion;\n }\n\n private syncQuaternion(): void {\n this.quaternion =\n this.quaternionJson.length > 0\n ? this.parseJson(\n 'quaternionJson',\n this.quaternionJson,\n Quaternion.fromJson\n )\n : this.quaternion;\n }\n\n private syncScale(): void {\n this.scale =\n this.scaleJson.length > 0\n ? this.parseJson('scaleJson', this.scaleJson, Vector3.fromJson)\n : this.scale;\n }\n\n private syncMatrix(): void {\n if (\n this.position != null &&\n this.quaternion != null &&\n this.scale != null\n ) {\n this.matrix = Matrix4.makeTRS(this.position, this.quaternion, this.scale);\n }\n }\n\n private parseJson<T>(\n propName: string,\n value: string,\n parse: (str: string) => T\n ): T {\n try {\n return parse(value);\n } catch (e) {\n console.warn(`Could not parse \\`${propName}\\`. Invalid JSON.`);\n throw e;\n }\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n}\n","export function isVertexViewerDomElement(\n el: unknown\n): el is HTMLVertexViewerDomElementElement {\n return (\n el instanceof HTMLElement &&\n el.nodeName === 'VERTEX-VIEWER-DOM-ELEMENT' &&\n (el as HTMLVertexViewerDomElementElement).matrix != null\n );\n}\n","export function isVertexViewerDomGroup(\n el: unknown\n): el is HTMLVertexViewerDomGroupElement {\n return (\n ((el instanceof HTMLElement && el.nodeName === 'VERTEX-VIEWER-DOM-GROUP') ||\n (el instanceof HTMLElement && el.dataset.isDomGroupElement != null)) &&\n (el as HTMLVertexViewerDomGroupElement).matrix != null\n );\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport { Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { DepthBuffer, Viewport } from '../../lib/types';\nimport { FrameCameraBase } from '../../lib/types/frame';\nimport { isVertexViewerDomElement } from '../viewer-dom-element/utils';\nimport { isVertexViewerDomGroup } from '../viewer-dom-group/utils';\n\ninterface ElementData {\n element: HTMLVertexViewerDomElementElement;\n worldMatrix: Matrix4.Matrix4;\n worldPosition: Vector3.Vector3;\n distanceToCamera: number;\n}\n\nexport const Renderer2d: FunctionalComponent = (_, children) => {\n return <div class=\"root-2d\">{children}</div>;\n};\n\nexport function update2d(\n hostEl: HTMLElement,\n parentWorldMatrix: Matrix4.Matrix4,\n viewport: Viewport,\n camera: FrameCameraBase,\n depthBuffer: DepthBuffer | undefined\n): void {\n const elements = getElementDepths(hostEl, parentWorldMatrix, camera).sort(\n (a, b) => a.distanceToCamera - b.distanceToCamera\n );\n\n for (let i = 0; i < elements.length; i++) {\n const { element, worldMatrix, worldPosition } = elements[i];\n\n const depthBufferIsNull = depthBuffer == null;\n const occluded =\n depthBufferIsNull ||\n (!element.occlusionOff &&\n depthBuffer?.isOccluded(worldPosition, viewport));\n const detached =\n depthBufferIsNull ||\n (!element.detachedOff &&\n depthBuffer?.isDetached(worldPosition, viewport));\n const screenPt = getScreenPosition(\n worldPosition,\n camera.projectionViewMatrix,\n viewport\n );\n\n updateTransform(element, screenPt);\n updateDepth(element, i, elements.length);\n update2d(element, worldMatrix, viewport, camera, depthBuffer);\n\n element.occluded = occluded ?? false;\n element.detached = detached ?? false;\n element.classList.add('ready');\n }\n}\n\nfunction getElementDepths(\n element: HTMLElement,\n parentWorldMatrix: Matrix4.Matrix4,\n camera: FrameCameraBase\n): ElementData[] {\n const results = [] as ElementData[];\n\n for (let i = 0; i < element.children.length; i++) {\n const child = element.children[i] as HTMLElement;\n\n if (isVertexViewerDomGroup(child)) {\n const worldMatrix = Matrix4.multiply(parentWorldMatrix, child.matrix);\n results.push(...getElementDepths(child, worldMatrix, camera));\n } else if (isVertexViewerDomElement(child)) {\n const worldMatrix = Matrix4.multiply(parentWorldMatrix, child.matrix);\n const worldPosition = Vector3.fromMatrixPosition(worldMatrix);\n const distanceToCamera = Vector3.distanceSquared(\n camera.position,\n worldPosition\n );\n results.push({\n element: child,\n worldMatrix,\n worldPosition,\n distanceToCamera,\n });\n } else {\n results.push(...getElementDepths(child, parentWorldMatrix, camera));\n }\n }\n\n return results;\n}\n\nfunction updateTransform(\n element: HTMLVertexViewerDomElementElement,\n relativePt: Point.Point\n): void {\n element.style.transform = [\n `translate(-50%, -50%)`,\n `translate(${relativePt.x}px, ${relativePt.y}px)`,\n ].join(' ');\n}\n\nfunction updateDepth(\n element: HTMLVertexViewerDomElementElement,\n index: number,\n elementCount: number\n): void {\n element.style.zIndex = `${elementCount - index}`;\n}\n\nfunction getScreenPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n viewport: Viewport\n): Point.Point {\n const ndcPt = Vector3.transformMatrix(pt, projectionViewMatrix);\n return viewport.transformVectorToViewport(ndcPt);\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport { Matrix4, Vector3 } from '@vertexvis/geometry';\n\nimport { DepthBuffer, Viewport } from '../../lib/types';\nimport { FrameCameraBase } from '../../lib/types/frame';\nimport { isVertexViewerDomElement } from '../viewer-dom-element/utils';\nimport { isVertexViewerDomGroup } from '../viewer-dom-group/utils';\n\ninterface Props {\n camera: FrameCameraBase;\n viewport: Viewport;\n}\n\nexport const Renderer3d: FunctionalComponent<Props> = (\n { camera, viewport },\n children\n) => {\n const pMatrix = Matrix4.toObject(camera.projectionMatrix);\n const fovY = camera.isOrthographic()\n ? ((camera.far * 2) / (camera.fovHeight * 2)) * (viewport.height / 2)\n : pMatrix.m22 * (viewport.height / 2);\n const cameraTransform = [\n `translateZ(${fovY}px)`,\n getCameraCssMatrix(camera.viewMatrix),\n `translate(${viewport.width / 2}px, ${viewport.height / 2}px)`,\n ].join(' ');\n\n return (\n <div class=\"root-3d\" style={{ perspective: `${fovY}px` }}>\n <div class=\"camera\" style={{ transform: cameraTransform }}>\n {children}\n </div>\n </div>\n );\n};\n\nexport function update3d(\n element: HTMLElement,\n parentWorldMatrix: Matrix4.Matrix4,\n viewport: Viewport,\n camera: FrameCameraBase,\n depthBuffer: DepthBuffer | undefined\n): void {\n for (let i = 0; i < element.children.length; i++) {\n const el = element.children[i] as HTMLElement;\n if (isVertexViewerDomElement(el)) {\n updateElement(\n el as HTMLVertexViewerDomElementElement,\n parentWorldMatrix,\n viewport,\n camera,\n depthBuffer\n );\n } else if (isVertexViewerDomGroup(el)) {\n updateGroup(el, parentWorldMatrix, viewport, camera, depthBuffer);\n } else {\n update3d(el, parentWorldMatrix, viewport, camera, depthBuffer);\n }\n }\n}\n\nfunction updateElement(\n element: HTMLVertexViewerDomElementElement,\n parentWorldMatrix: Matrix4.Matrix4,\n viewport: Viewport,\n camera: FrameCameraBase,\n depthBuffer: DepthBuffer | undefined\n): void {\n const worldMatrix = Matrix4.multiply(parentWorldMatrix, element.matrix);\n\n const positionWorld = Vector3.fromMatrixPosition(worldMatrix);\n const depthBufferIsNull = depthBuffer == null;\n const occluded =\n depthBufferIsNull ||\n (!element.occlusionOff && depthBuffer?.isOccluded(positionWorld, viewport));\n element.occluded = occluded ?? false;\n const detached =\n depthBufferIsNull ||\n (!element.detachedOff && depthBuffer?.isDetached(positionWorld, viewport));\n element.detached = detached ?? false;\n element.classList.add('ready');\n\n if (element.billboardOff) {\n element.style.transform = getElementCssMatrix(worldMatrix);\n } else {\n let m = camera.viewMatrix;\n m = Matrix4.transpose(m);\n m = Matrix4.position(m, worldMatrix);\n m = Matrix4.scale(m, element.scale);\n\n m[3] = 0;\n m[7] = 0;\n m[11] = 0;\n m[15] = 1;\n\n element.style.transform = getElementCssMatrix(m);\n }\n\n update3d(element, worldMatrix, viewport, camera, depthBuffer);\n}\n\nfunction updateGroup(\n element: HTMLVertexViewerDomGroupElement,\n parentWorldMatrix: Matrix4.Matrix4,\n viewport: Viewport,\n camera: FrameCameraBase,\n depthBuffer: DepthBuffer | undefined\n): void {\n const worldMatrix = Matrix4.multiply(parentWorldMatrix, element.matrix);\n update3d(element, worldMatrix, viewport, camera, depthBuffer);\n}\n\nfunction getCameraCssMatrix(viewMatrix: Matrix4.Matrix4): string {\n const elements = [\n epsilon(viewMatrix[0]),\n epsilon(-viewMatrix[1]),\n epsilon(viewMatrix[2]),\n epsilon(viewMatrix[3]),\n epsilon(viewMatrix[4]),\n epsilon(-viewMatrix[5]),\n epsilon(viewMatrix[6]),\n epsilon(viewMatrix[7]),\n epsilon(viewMatrix[8]),\n epsilon(-viewMatrix[9]),\n epsilon(viewMatrix[10]),\n epsilon(viewMatrix[11]),\n epsilon(viewMatrix[12]),\n epsilon(-viewMatrix[13]),\n epsilon(viewMatrix[14]),\n epsilon(viewMatrix[15]),\n ].join(', ');\n return `matrix3d(${elements})`;\n}\n\nfunction getElementCssMatrix(matrix: Matrix4.Matrix4): string {\n const values = [\n epsilon(matrix[0]),\n epsilon(matrix[1]),\n epsilon(matrix[2]),\n epsilon(matrix[3]),\n epsilon(-matrix[4]),\n epsilon(-matrix[5]),\n epsilon(-matrix[6]),\n epsilon(-matrix[7]),\n epsilon(matrix[8]),\n epsilon(matrix[9]),\n epsilon(matrix[10]),\n epsilon(matrix[11]),\n epsilon(matrix[12]),\n epsilon(matrix[13]),\n epsilon(matrix[14]),\n epsilon(matrix[15]),\n ].join(', ');\n\n return [`translate(-50%, -50%)`, `matrix3d(${values})`].join(' ');\n}\n\nfunction epsilon(value: number): number {\n return Math.abs(value) < 1e-10 ? 0 : value;\n}\n",":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n.root-3d {\n width: 100%;\n height: 100%;\n pointer-events: inherit;\n}\n\n.camera {\n transform-style: preserve-3d;\n pointer-events: inherit;\n width: 100%;\n height: 100%;\n}\n","import {\n Component,\n Element,\n h,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Matrix4 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { MultiElementInteractionHandler } from '../../lib/interactions/multiElementInteractionHandler';\nimport { DepthBuffer, Viewport } from '../../lib/types';\nimport { FrameCameraBase } from '../../lib/types/frame';\nimport { Renderer2d, update2d } from './renderer2d';\nimport { Renderer3d, update3d } from './renderer3d';\n\nexport type ViewerDomRendererDrawMode = '2d' | '3d';\n\n/**\n * The `ViewerDomRenderer` is responsible for managing a\n * `<vertex-viewer-dom-renderer>` element. This element supports drawing DOM\n * objects in a local 3D scene that is synced with a remote rendered scene.\n */\n@Component({\n tag: 'vertex-viewer-dom-renderer',\n styleUrl: 'viewer-dom-renderer.css',\n shadow: false,\n scoped: true,\n})\nexport class ViewerDomRenderer {\n /**\n * Specifies the drawing mode for the renderer.\n *\n * When in `3d` mode, elements are positioned using CSS 3D transforms and will\n * scale and rotate with the camera. In `2d` mode, a simpler 2D transform is\n * used, and elements will not scale or rotate with camera changes.\n */\n @Prop()\n public drawMode: ViewerDomRendererDrawMode = '3d';\n\n /**\n * Specifies whether to propagate events to the viewer's interaction handlers\n *\n * When `true` this <vertex-viewer-dom-renderer> will be registered as a valid event target\n * for the viewer. This enables camera interactions to be initiated from elements within this renderer.\n *\n * When `false` this <vertex-viewer-dom-renderer> will *not* be registered as a target\n * for the viewer.\n */\n @Prop()\n public propagateEventsToViewer = true;\n\n /**\n * The viewer synced to this renderer. This property will automatically be\n * assigned if the renderer is a child of `<vertex-viewer>`.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The current camera of the frame.\n *\n * This property will automatically be set when supplying a viewer to the\n * component, or when added as a child to `<vertex-viewer>`.\n */\n @Prop({ mutable: true })\n public camera?: FrameCameraBase;\n\n /**\n * The current depth buffer of the frame.\n *\n * This property will automatically be set when supplying a viewer to the\n * component, or when added as a child to `<vertex-viewer>`.\n */\n @Prop({ mutable: true })\n public depthBuffer?: DepthBuffer;\n\n @State()\n private viewport: Viewport = new Viewport(0, 0);\n\n @State()\n private invalidateFrameCounter = 0;\n\n @State()\n private interactionDisposables: Disposable[] = [];\n\n @Element()\n private hostEl!: HTMLElement;\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n const resized = new ResizeObserver(() => this.handleResize());\n resized.observe(this.hostEl);\n\n const mutation = new MutationObserver(() => this.handleChildrenChange());\n mutation.observe(this.hostEl, { childList: true });\n\n this.handleViewerChange(this.viewer, undefined);\n\n if (this.viewer?.frame != null) {\n this.handleViewerFrameDrawn();\n }\n }\n\n /**\n * @ignore\n */\n public render(): h.JSX.IntrinsicElements {\n if (this.camera != null) {\n if (this.drawMode === '2d') {\n return (\n <Host>\n <Renderer2d>\n <slot></slot>\n </Renderer2d>\n </Host>\n );\n } else {\n return (\n <Host>\n <Renderer3d camera={this.camera} viewport={this.viewport}>\n <slot></slot>\n </Renderer3d>\n </Host>\n );\n }\n } else {\n return <Host></Host>;\n }\n }\n\n /**\n * @ignore\n */\n protected componentWillRender(): void {\n this.updateElements();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChange(\n newViewer: HTMLVertexViewerElement | undefined,\n oldViewer: HTMLVertexViewerElement | undefined\n ): void {\n oldViewer?.removeEventListener('frameDrawn', this.handleViewerFrameDrawn);\n newViewer?.addEventListener('frameDrawn', this.handleViewerFrameDrawn);\n\n if (this.propagateEventsToViewer && newViewer != null) {\n this.handleEventPropagationToViewer(newViewer);\n }\n }\n\n /**\n * @ignore\n */\n @Listen('propertyChange')\n protected handlePropertyChange(): void {\n this.invalidateFrame();\n }\n\n private invalidateFrame(): void {\n this.invalidateFrameCounter = this.invalidateFrameCounter + 1;\n }\n\n /**\n * disposes any existing disposables, and registers new handlers on the newly provided viewer.\n * @param newViewer\n */\n private handleEventPropagationToViewer(\n newViewer: HTMLVertexViewerElement\n ): void {\n this.interactionDisposables.forEach((disposable) => {\n disposable.dispose();\n });\n\n this.interactionDisposables = [];\n\n newViewer.getInteractionHandlers().then((handlers) => {\n handlers.forEach((handler) => {\n if (handler instanceof MultiElementInteractionHandler) {\n const disposable = handler.registerAdditionalElement(this.hostEl);\n\n this.interactionDisposables = [\n ...this.interactionDisposables,\n disposable,\n ];\n }\n });\n });\n }\n\n private async updateElements(): Promise<void> {\n const { viewport, camera } = this;\n const worldMatrix = Matrix4.makeIdentity();\n\n if (camera != null) {\n if (this.drawMode === '3d') {\n update3d(this.hostEl, worldMatrix, viewport, camera, this.depthBuffer);\n } else {\n update2d(this.hostEl, worldMatrix, viewport, camera, this.depthBuffer);\n }\n }\n }\n\n private handleViewerFrameDrawn = async (): Promise<void> => {\n this.updatePropsFromViewer();\n };\n\n private handleResize(): void {\n const bounds = this.hostEl.getBoundingClientRect();\n this.viewport = new Viewport(bounds.width, bounds.height);\n }\n\n private handleChildrenChange(): void {\n this.invalidateFrame();\n }\n\n private async updatePropsFromViewer(): Promise<void> {\n const { frame } = this.viewer || {};\n\n this.depthBuffer = await frame?.depthBuffer();\n this.camera = frame?.scene.camera;\n }\n}\n"],"version":3}
1
+ {"file":"vertex-viewer-dom-element_2.entry.js","mappings":"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","names":["Vector3","Quaternion","Matrix4","Objects","Euler"],"sources":["src/components/viewer-dom-element/viewer-dom-element.css?tag=vertex-viewer-dom-element&encapsulation=shadow","src/components/viewer-dom-element/viewer-dom-element.tsx","src/components/viewer-dom-element/utils.ts","src/components/viewer-dom-group/utils.ts","src/components/viewer-dom-renderer/renderer2d.tsx","src/components/viewer-dom-renderer/renderer3d.tsx","src/components/viewer-dom-renderer/viewer-dom-renderer.css?tag=vertex-viewer-dom-renderer&encapsulation=scoped","src/components/viewer-dom-renderer/viewer-dom-renderer.tsx"],"sourcesContent":[":host {\n position: absolute;\n pointer-events: none;\n visibility: hidden;\n}\n\n/* Ignore Stencil's hydrated prop in favor of a custom `ready` selector. This\n * prevents flashing of elements before Stencil has a time to position the\n * element in 3D space.\n */\n:host([hydrated]) {\n visibility: hidden;\n}\n\n:host(.ready) {\n visibility: inherit;\n}\n\n:host(:not([interactions-off])) > * {\n pointer-events: auto;\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\n\nimport {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Euler, Matrix4, Quaternion, Vector3 } from '@vertexvis/geometry';\nimport { Objects } from '@vertexvis/utils';\n\nimport { HTMLDomRendererPositionableElement } from '../../interfaces';\n\n/**\n * The `ViewerDomElement` is responsible for managing a\n * `<vertex-viewer-dom-element>` element. These elements are intended to be\n * added as children to a `<vertex-viewer-dom-renderer>` and represent an\n * individual DOM element within a local 3D scene.\n */\n@Component({\n tag: 'vertex-viewer-dom-element',\n styleUrl: 'viewer-dom-element.css',\n shadow: true,\n})\nexport class ViewerDomElement implements HTMLDomRendererPositionableElement {\n /**\n * The local 3D position of where this element is located.\n */\n @Prop({ mutable: true, attribute: null })\n public position: Vector3.Vector3 = Vector3.origin();\n\n /**\n * @ignore\n */\n @Watch('position', { immediate: true })\n protected handlePositionChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local 3D position of where this element is located, as a JSON string.\n * JSON representation can either be in the format of `[x, y, z]` or `{\"x\": 0,\n * \"y\": 0, \"z\": 0}`.\n */\n @Prop({ attribute: 'position' })\n public positionJson = '';\n\n /**\n * @ignore\n */\n @Watch('positionJson', { immediate: true })\n protected handlePositionJsonChanged(): void {\n this.syncPosition();\n }\n\n /**\n * The local rotation of this element in Euler angles.\n */\n @Prop({ mutable: true, attribute: null })\n public rotation?: Euler.Euler;\n\n /**\n * @ignore\n */\n @Watch('rotation', { immediate: true })\n protected handleRotationChanged(): void {\n this.syncQuaternionWithRotation();\n }\n\n /**\n * The local rotation of this element in Euler angles, as a JSON string. JSON\n * representation can either be `[x, y, z, order]` or `{\"x\": 0, \"y\": 0, \"z\":\n * 0, \"order\": \"xyz\"}`.\n */\n @Prop({ attribute: 'rotation' })\n public rotationJson?: string;\n\n /**\n * @ignore\n */\n @Watch('rotationJson', { immediate: true })\n protected handleRotationJsonChanged(): void {\n this.syncRotation();\n }\n\n /**\n * The local rotation of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public quaternion: Quaternion.Quaternion = Quaternion.create();\n\n /**\n * @ignore\n */\n @Watch('quaternion', { immediate: true })\n protected handleQuaternionChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local quaternion rotation of this element, as a JSON string. JSON\n * representation can either be `[x, y, z, w]` or `{\"x\": 0, \"y\": 0, \"z\":\n * 0, \"w\": 1}`.\n */\n @Prop({ attribute: 'quaternion' })\n public quaternionJson = '';\n\n /**\n * @ignore\n */\n @Watch('quaternionJson', { immediate: true })\n protected handleQuaternionJsonChanged(): void {\n this.syncQuaternion();\n }\n\n /**\n * The local scale of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public scale: Vector3.Vector3 = Vector3.create(1, 1, 1);\n\n /**\n * @ignore\n */\n @Watch('scale', { immediate: true })\n protected handleScaleChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local scale of this element, as a JSON string. JSON string\n * representation can either be in the format of `[x, y, z]` or `{\"x\": 0, \"y\":\n * 0, \"z\": 0}`.\n */\n @Prop({ attribute: 'scale' })\n public scaleJson = '';\n\n /**\n * @ignore\n */\n @Watch('scaleJson', { immediate: true })\n protected handleScaleJsonChanged(): void {\n this.syncScale();\n }\n\n /**\n * @ignore\n */\n @Watch('matrix')\n protected handleMatrixChanged(\n newMatrix: Matrix4.Matrix4,\n oldMatrix: Matrix4.Matrix4,\n ): void {\n if (!Objects.isEqual(newMatrix, oldMatrix)) {\n this.propertyChange.emit();\n }\n }\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Disables occlusion testing for this element. Defaults to enabled. When\n * enabled, the elements position will be tested against the current depth\n * buffer. If the position is occluded, then the `occluded` attribute will be\n * set.\n */\n @Prop()\n public occlusionOff = false;\n\n /**\n * Indicates if the element is hidden by geometry. This property can be used\n * with a CSS selector to modify the appearance of the element when its\n * occluded.\n *\n * @example\n *\n * ```html\n * <style>\n * vertex-viewer-dom-element[occluded] {\n * opacity: 0;\n * }\n * </style>\n * ```\n */\n @Prop({ reflect: true })\n public occluded = false;\n\n /**\n * Dispatched when the occlusion state is changed.\n */\n @Event({ bubbles: true })\n public occlusionStateChanged!: EventEmitter<boolean>;\n\n /**\n * **EXPERIMENTAL**\n * Disables detached testing for this element. Defaults to disabled. When\n * enabled, the elements position will be tested against the current depth\n * buffer. If the position is detached, then the `detached` attribute will be\n * set.\n */\n @Prop()\n public detachedOff = true;\n\n /**\n * **EXPERIMENTAL**\n * Indicates if the element is detached from geometry. This property can be used\n * with a CSS selector to modify the appearance of the element when its\n * detached.\n *\n * @example\n *\n * ```html\n * <style>\n * vertex-viewer-dom-element[detached] {\n * opacity: 0;\n * }\n * </style>\n * ```\n */\n @Prop({ reflect: true })\n public detached = false;\n\n /**\n * **EXPERIMENTAL**\n * Dispatched when the detached state is changed.\n */\n @Event({ bubbles: true })\n public detachedStateChanged!: EventEmitter<boolean>;\n\n /**\n * Disables the billboarding behavior of the element. When billboarding is\n * enabled, the element will always be oriented towards the screen.\n */\n @Prop()\n public billboardOff = false;\n\n /**\n * Disables interaction events from children.\n */\n @Prop({ reflect: true })\n public interactionsOff = false;\n\n /**\n * An event that is emitted when any property on the dom group changes\n */\n @Event({ bubbles: true })\n public propertyChange!: EventEmitter<void>;\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.syncProperties();\n }\n\n /**\n * @ignore\n */\n protected componentShouldUpdate(\n newValue: unknown,\n oldValue: unknown,\n prop: string,\n ): boolean {\n return prop === 'occluded';\n }\n\n /**\n * @ignore\n */\n @Watch('occluded')\n protected handleOcclusionStateChanged(): void {\n this.occlusionStateChanged.emit(this.occluded);\n }\n\n /**\n * @ignore\n */\n @Watch('detached')\n protected handleDetachedStateChanged(): void {\n this.detachedStateChanged.emit(this.detached);\n }\n\n private syncProperties(): void {\n this.syncPosition();\n this.syncRotation();\n this.syncQuaternion();\n this.syncScale();\n this.syncMatrix();\n }\n\n private syncPosition(): void {\n this.position =\n this.positionJson.length > 0\n ? this.parseJson('positionJson', this.positionJson, Vector3.fromJson)\n : this.position;\n }\n\n private syncRotation(): void {\n this.rotation =\n this.rotationJson != null && this.rotationJson.length > 0\n ? this.parseJson('rotationJson', this.rotationJson, Euler.fromJson)\n : this.rotation;\n this.syncQuaternionWithRotation();\n }\n\n private syncQuaternionWithRotation(): void {\n this.quaternion =\n this.rotation != null\n ? Quaternion.fromEuler(this.rotation)\n : this.quaternion;\n }\n\n private syncQuaternion(): void {\n this.quaternion =\n this.quaternionJson.length > 0\n ? this.parseJson(\n 'quaternionJson',\n this.quaternionJson,\n Quaternion.fromJson,\n )\n : this.quaternion;\n }\n\n private syncScale(): void {\n this.scale =\n this.scaleJson.length > 0\n ? this.parseJson('scaleJson', this.scaleJson, Vector3.fromJson)\n : this.scale;\n }\n\n private syncMatrix(): void {\n if (\n this.position != null &&\n this.quaternion != null &&\n this.scale != null\n ) {\n this.matrix = Matrix4.makeTRS(this.position, this.quaternion, this.scale);\n }\n }\n\n private parseJson<T>(\n propName: string,\n value: string,\n parse: (str: string) => T,\n ): T {\n try {\n return parse(value);\n } catch (e) {\n console.warn(`Could not parse \\`${propName}\\`. Invalid JSON.`);\n throw e;\n }\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n}\n","export function isVertexViewerDomElement(\n el: unknown,\n): el is HTMLVertexViewerDomElementElement {\n return (\n el instanceof HTMLElement &&\n el.nodeName === 'VERTEX-VIEWER-DOM-ELEMENT' &&\n (el as HTMLVertexViewerDomElementElement).matrix != null\n );\n}\n","export function isVertexViewerDomGroup(\n el: unknown,\n): el is HTMLVertexViewerDomGroupElement {\n return (\n ((el instanceof HTMLElement && el.nodeName === 'VERTEX-VIEWER-DOM-GROUP') ||\n (el instanceof HTMLElement && el.dataset.isDomGroupElement != null)) &&\n (el as HTMLVertexViewerDomGroupElement).matrix != null\n );\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport { Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { DepthBuffer, Viewport } from '../../lib/types';\nimport { FrameCameraBase } from '../../lib/types/frame';\nimport { isVertexViewerDomElement } from '../viewer-dom-element/utils';\nimport { isVertexViewerDomGroup } from '../viewer-dom-group/utils';\n\ninterface ElementData {\n element: HTMLVertexViewerDomElementElement;\n worldMatrix: Matrix4.Matrix4;\n worldPosition: Vector3.Vector3;\n distanceToCamera: number;\n}\n\nexport const Renderer2d: FunctionalComponent = (_, children) => {\n return <div class=\"root-2d\">{children}</div>;\n};\n\nexport function update2d(\n hostEl: HTMLElement,\n parentWorldMatrix: Matrix4.Matrix4,\n viewport: Viewport,\n camera: FrameCameraBase,\n depthBuffer: DepthBuffer | undefined,\n): void {\n const elements = getElementDepths(hostEl, parentWorldMatrix, camera).sort(\n (a, b) => a.distanceToCamera - b.distanceToCamera,\n );\n\n for (let i = 0; i < elements.length; i++) {\n const { element, worldMatrix, worldPosition } = elements[i];\n\n const depthBufferIsNull = depthBuffer == null;\n const occluded =\n depthBufferIsNull ||\n (!element.occlusionOff &&\n depthBuffer?.isOccluded(worldPosition, viewport));\n const detached =\n depthBufferIsNull ||\n (!element.detachedOff &&\n depthBuffer?.isDetached(worldPosition, viewport));\n const screenPt = getScreenPosition(\n worldPosition,\n camera.projectionViewMatrix,\n viewport,\n );\n\n updateTransform(element, screenPt);\n updateDepth(element, i, elements.length);\n update2d(element, worldMatrix, viewport, camera, depthBuffer);\n\n element.occluded = occluded ?? false;\n element.detached = detached ?? false;\n element.classList.add('ready');\n }\n}\n\nfunction getElementDepths(\n element: HTMLElement,\n parentWorldMatrix: Matrix4.Matrix4,\n camera: FrameCameraBase,\n): ElementData[] {\n const results = [] as ElementData[];\n\n for (let i = 0; i < element.children.length; i++) {\n const child = element.children[i] as HTMLElement;\n\n if (isVertexViewerDomGroup(child)) {\n const worldMatrix = Matrix4.multiply(parentWorldMatrix, child.matrix);\n results.push(...getElementDepths(child, worldMatrix, camera));\n } else if (isVertexViewerDomElement(child)) {\n const worldMatrix = Matrix4.multiply(parentWorldMatrix, child.matrix);\n const worldPosition = Vector3.fromMatrixPosition(worldMatrix);\n const distanceToCamera = Vector3.distanceSquared(\n camera.position,\n worldPosition,\n );\n results.push({\n element: child,\n worldMatrix,\n worldPosition,\n distanceToCamera,\n });\n } else {\n results.push(...getElementDepths(child, parentWorldMatrix, camera));\n }\n }\n\n return results;\n}\n\nfunction updateTransform(\n element: HTMLVertexViewerDomElementElement,\n relativePt: Point.Point,\n): void {\n element.style.transform = [\n `translate(-50%, -50%)`,\n `translate(${relativePt.x}px, ${relativePt.y}px)`,\n ].join(' ');\n}\n\nfunction updateDepth(\n element: HTMLVertexViewerDomElementElement,\n index: number,\n elementCount: number,\n): void {\n element.style.zIndex = `${elementCount - index}`;\n}\n\nfunction getScreenPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n viewport: Viewport,\n): Point.Point {\n const ndcPt = Vector3.transformMatrix(pt, projectionViewMatrix);\n return viewport.transformVectorToViewport(ndcPt);\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport { Matrix4, Vector3 } from '@vertexvis/geometry';\n\nimport { DepthBuffer, Viewport } from '../../lib/types';\nimport { FrameCameraBase } from '../../lib/types/frame';\nimport { isVertexViewerDomElement } from '../viewer-dom-element/utils';\nimport { isVertexViewerDomGroup } from '../viewer-dom-group/utils';\n\ninterface Props {\n camera: FrameCameraBase;\n viewport: Viewport;\n}\n\nexport const Renderer3d: FunctionalComponent<Props> = (\n { camera, viewport },\n children,\n) => {\n const pMatrix = Matrix4.toObject(camera.projectionMatrix);\n const fovY = camera.isOrthographic()\n ? ((camera.far * 2) / (camera.fovHeight * 2)) * (viewport.height / 2)\n : pMatrix.m22 * (viewport.height / 2);\n const cameraTransform = [\n `translateZ(${fovY}px)`,\n getCameraCssMatrix(camera.viewMatrix),\n `translate(${viewport.width / 2}px, ${viewport.height / 2}px)`,\n ].join(' ');\n\n return (\n <div class=\"root-3d\" style={{ perspective: `${fovY}px` }}>\n <div class=\"camera\" style={{ transform: cameraTransform }}>\n {children}\n </div>\n </div>\n );\n};\n\nexport function update3d(\n element: HTMLElement,\n parentWorldMatrix: Matrix4.Matrix4,\n viewport: Viewport,\n camera: FrameCameraBase,\n depthBuffer: DepthBuffer | undefined,\n): void {\n for (let i = 0; i < element.children.length; i++) {\n const el = element.children[i] as HTMLElement;\n if (isVertexViewerDomElement(el)) {\n updateElement(\n el as HTMLVertexViewerDomElementElement,\n parentWorldMatrix,\n viewport,\n camera,\n depthBuffer,\n );\n } else if (isVertexViewerDomGroup(el)) {\n updateGroup(el, parentWorldMatrix, viewport, camera, depthBuffer);\n } else {\n update3d(el, parentWorldMatrix, viewport, camera, depthBuffer);\n }\n }\n}\n\nfunction updateElement(\n element: HTMLVertexViewerDomElementElement,\n parentWorldMatrix: Matrix4.Matrix4,\n viewport: Viewport,\n camera: FrameCameraBase,\n depthBuffer: DepthBuffer | undefined,\n): void {\n const worldMatrix = Matrix4.multiply(parentWorldMatrix, element.matrix);\n\n const positionWorld = Vector3.fromMatrixPosition(worldMatrix);\n const depthBufferIsNull = depthBuffer == null;\n const occluded =\n depthBufferIsNull ||\n (!element.occlusionOff && depthBuffer?.isOccluded(positionWorld, viewport));\n element.occluded = occluded ?? false;\n const detached =\n depthBufferIsNull ||\n (!element.detachedOff && depthBuffer?.isDetached(positionWorld, viewport));\n element.detached = detached ?? false;\n element.classList.add('ready');\n\n if (element.billboardOff) {\n element.style.transform = getElementCssMatrix(worldMatrix);\n } else {\n let m = camera.viewMatrix;\n m = Matrix4.transpose(m);\n m = Matrix4.position(m, worldMatrix);\n m = Matrix4.scale(m, element.scale);\n\n m[3] = 0;\n m[7] = 0;\n m[11] = 0;\n m[15] = 1;\n\n element.style.transform = getElementCssMatrix(m);\n }\n\n update3d(element, worldMatrix, viewport, camera, depthBuffer);\n}\n\nfunction updateGroup(\n element: HTMLVertexViewerDomGroupElement,\n parentWorldMatrix: Matrix4.Matrix4,\n viewport: Viewport,\n camera: FrameCameraBase,\n depthBuffer: DepthBuffer | undefined,\n): void {\n const worldMatrix = Matrix4.multiply(parentWorldMatrix, element.matrix);\n update3d(element, worldMatrix, viewport, camera, depthBuffer);\n}\n\nfunction getCameraCssMatrix(viewMatrix: Matrix4.Matrix4): string {\n const elements = [\n epsilon(viewMatrix[0]),\n epsilon(-viewMatrix[1]),\n epsilon(viewMatrix[2]),\n epsilon(viewMatrix[3]),\n epsilon(viewMatrix[4]),\n epsilon(-viewMatrix[5]),\n epsilon(viewMatrix[6]),\n epsilon(viewMatrix[7]),\n epsilon(viewMatrix[8]),\n epsilon(-viewMatrix[9]),\n epsilon(viewMatrix[10]),\n epsilon(viewMatrix[11]),\n epsilon(viewMatrix[12]),\n epsilon(-viewMatrix[13]),\n epsilon(viewMatrix[14]),\n epsilon(viewMatrix[15]),\n ].join(', ');\n return `matrix3d(${elements})`;\n}\n\nfunction getElementCssMatrix(matrix: Matrix4.Matrix4): string {\n const values = [\n epsilon(matrix[0]),\n epsilon(matrix[1]),\n epsilon(matrix[2]),\n epsilon(matrix[3]),\n epsilon(-matrix[4]),\n epsilon(-matrix[5]),\n epsilon(-matrix[6]),\n epsilon(-matrix[7]),\n epsilon(matrix[8]),\n epsilon(matrix[9]),\n epsilon(matrix[10]),\n epsilon(matrix[11]),\n epsilon(matrix[12]),\n epsilon(matrix[13]),\n epsilon(matrix[14]),\n epsilon(matrix[15]),\n ].join(', ');\n\n return [`translate(-50%, -50%)`, `matrix3d(${values})`].join(' ');\n}\n\nfunction epsilon(value: number): number {\n return Math.abs(value) < 1e-10 ? 0 : value;\n}\n",":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n.root-3d {\n width: 100%;\n height: 100%;\n pointer-events: inherit;\n}\n\n.camera {\n transform-style: preserve-3d;\n pointer-events: inherit;\n width: 100%;\n height: 100%;\n}\n","import {\n Component,\n Element,\n h,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Matrix4 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { MultiElementInteractionHandler } from '../../lib/interactions/multiElementInteractionHandler';\nimport { DepthBuffer, Viewport } from '../../lib/types';\nimport { FrameCameraBase } from '../../lib/types/frame';\nimport { Renderer2d, update2d } from './renderer2d';\nimport { Renderer3d, update3d } from './renderer3d';\n\nexport type ViewerDomRendererDrawMode = '2d' | '3d';\n\n/**\n * The `ViewerDomRenderer` is responsible for managing a\n * `<vertex-viewer-dom-renderer>` element. This element supports drawing DOM\n * objects in a local 3D scene that is synced with a remote rendered scene.\n */\n@Component({\n tag: 'vertex-viewer-dom-renderer',\n styleUrl: 'viewer-dom-renderer.css',\n shadow: false,\n scoped: true,\n})\nexport class ViewerDomRenderer {\n /**\n * Specifies the drawing mode for the renderer.\n *\n * When in `3d` mode, elements are positioned using CSS 3D transforms and will\n * scale and rotate with the camera. In `2d` mode, a simpler 2D transform is\n * used, and elements will not scale or rotate with camera changes.\n */\n @Prop()\n public drawMode: ViewerDomRendererDrawMode = '3d';\n\n /**\n * Specifies whether to propagate events to the viewer's interaction handlers\n *\n * When `true` this <vertex-viewer-dom-renderer> will be registered as a valid event target\n * for the viewer. This enables camera interactions to be initiated from elements within this renderer.\n *\n * When `false` this <vertex-viewer-dom-renderer> will *not* be registered as a target\n * for the viewer.\n */\n @Prop()\n public propagateEventsToViewer = true;\n\n /**\n * The viewer synced to this renderer. This property will automatically be\n * assigned if the renderer is a child of `<vertex-viewer>`.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The current camera of the frame.\n *\n * This property will automatically be set when supplying a viewer to the\n * component, or when added as a child to `<vertex-viewer>`.\n */\n @Prop({ mutable: true })\n public camera?: FrameCameraBase;\n\n /**\n * The current depth buffer of the frame.\n *\n * This property will automatically be set when supplying a viewer to the\n * component, or when added as a child to `<vertex-viewer>`.\n */\n @Prop({ mutable: true })\n public depthBuffer?: DepthBuffer;\n\n @State()\n private viewport: Viewport = new Viewport(0, 0);\n\n @State()\n private invalidateFrameCounter = 0;\n\n @State()\n private interactionDisposables: Disposable[] = [];\n\n @Element()\n private hostEl!: HTMLElement;\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n const resized = new ResizeObserver(() => this.handleResize());\n resized.observe(this.hostEl);\n\n const mutation = new MutationObserver(() => this.handleChildrenChange());\n mutation.observe(this.hostEl, { childList: true });\n\n this.handleViewerChange(this.viewer, undefined);\n\n if (this.viewer?.frame != null) {\n this.handleViewerFrameDrawn();\n }\n }\n\n /**\n * @ignore\n */\n public render(): h.JSX.IntrinsicElements {\n if (this.camera != null) {\n if (this.drawMode === '2d') {\n return (\n <Host>\n <Renderer2d>\n <slot></slot>\n </Renderer2d>\n </Host>\n );\n } else {\n return (\n <Host>\n <Renderer3d camera={this.camera} viewport={this.viewport}>\n <slot></slot>\n </Renderer3d>\n </Host>\n );\n }\n } else {\n return <Host></Host>;\n }\n }\n\n /**\n * @ignore\n */\n protected componentWillRender(): void {\n this.updateElements();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChange(\n newViewer: HTMLVertexViewerElement | undefined,\n oldViewer: HTMLVertexViewerElement | undefined,\n ): void {\n oldViewer?.removeEventListener('frameDrawn', this.handleViewerFrameDrawn);\n newViewer?.addEventListener('frameDrawn', this.handleViewerFrameDrawn);\n\n if (this.propagateEventsToViewer && newViewer != null) {\n this.handleEventPropagationToViewer(newViewer);\n }\n }\n\n /**\n * @ignore\n */\n @Listen('propertyChange')\n protected handlePropertyChange(): void {\n this.invalidateFrame();\n }\n\n private invalidateFrame(): void {\n this.invalidateFrameCounter = this.invalidateFrameCounter + 1;\n }\n\n /**\n * disposes any existing disposables, and registers new handlers on the newly provided viewer.\n * @param newViewer\n */\n private handleEventPropagationToViewer(\n newViewer: HTMLVertexViewerElement,\n ): void {\n this.interactionDisposables.forEach((disposable) => {\n disposable.dispose();\n });\n\n this.interactionDisposables = [];\n\n newViewer.getInteractionHandlers().then((handlers) => {\n handlers.forEach((handler) => {\n if (handler instanceof MultiElementInteractionHandler) {\n const disposable = handler.registerAdditionalElement(this.hostEl);\n\n this.interactionDisposables = [\n ...this.interactionDisposables,\n disposable,\n ];\n }\n });\n });\n }\n\n private async updateElements(): Promise<void> {\n const { viewport, camera } = this;\n const worldMatrix = Matrix4.makeIdentity();\n\n if (camera != null) {\n if (this.drawMode === '3d') {\n update3d(this.hostEl, worldMatrix, viewport, camera, this.depthBuffer);\n } else {\n update2d(this.hostEl, worldMatrix, viewport, camera, this.depthBuffer);\n }\n }\n }\n\n private handleViewerFrameDrawn = async (): Promise<void> => {\n this.updatePropsFromViewer();\n };\n\n private handleResize(): void {\n const bounds = this.hostEl.getBoundingClientRect();\n this.viewport = new Viewport(bounds.width, bounds.height);\n }\n\n private handleChildrenChange(): void {\n this.invalidateFrame();\n }\n\n private async updatePropsFromViewer(): Promise<void> {\n const { frame } = this.viewer || {};\n\n this.depthBuffer = await frame?.depthBuffer();\n this.camera = frame?.scene.camera;\n }\n}\n"],"version":3}
@@ -169,7 +169,7 @@ const ViewerDomGroup = class {
169
169
  * @ignore
170
170
  */
171
171
  render() {
172
- return (h(Host, { key: '38d400024a27631bf1f111d9a4f44b01469c814d' }, h("slot", { key: '50ab66305307ce5c45638c562830ca55c2956835' })));
172
+ return (h(Host, { key: '87104b72b8ce2b9bb12b563c5b3d601101dae27d' }, h("slot", { key: '2ea4e3087450f2210e9d152914d59c11dabc5221' })));
173
173
  }
174
174
  static get watchers() { return {
175
175
  "position": [{
@@ -1 +1 @@
1
- {"version":3,"file":"vertex-viewer-dom-group.entry.js","sources":["src/components/viewer-dom-group/viewer-dom-group.css?tag=vertex-viewer-dom-group&encapsulation=scoped","src/components/viewer-dom-group/viewer-dom-group.tsx"],"sourcesContent":[":host {\n display: block;\n transform-style: preserve-3d;\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\n\nimport {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Euler, Matrix4, Quaternion, Vector3 } from '@vertexvis/geometry';\nimport { Objects } from '@vertexvis/utils';\n\nimport { HTMLDomRendererPositionableElement } from '../../interfaces';\n\n@Component({\n tag: 'vertex-viewer-dom-group',\n styleUrl: 'viewer-dom-group.css',\n shadow: false,\n scoped: true,\n})\nexport class ViewerDomGroup implements HTMLDomRendererPositionableElement {\n /**\n * The local 3D position of where this element is located.\n */\n @Prop({ mutable: true, attribute: null })\n public position: Vector3.Vector3 = Vector3.origin();\n\n /**\n * @ignore\n */\n @Watch('position')\n protected handlePositionChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local 3D position of where this element is located, as a JSON string.\n * JSON representation can either be in the format of `[x, y, z]` or `{\"x\": 0,\n * \"y\": 0, \"z\": 0}`.\n */\n @Prop({ attribute: 'position' })\n public positionJson = '';\n\n /**\n * @ignore\n */\n @Watch('positionJson')\n protected handlePositionJsonChanged(): void {\n this.syncPosition();\n }\n\n /**\n * An event that is emitted when any property on the dom group changes\n */\n @Event({ bubbles: true })\n public propertyChange!: EventEmitter<void>;\n\n /**\n * The local rotation of this element in Euler angles.\n */\n @Prop({ mutable: true, attribute: null })\n public rotation?: Euler.Euler;\n\n /**\n * @ignore\n */\n @Watch('rotation')\n protected handleRotationChanged(): void {\n this.syncQuaternionWithRotation();\n }\n\n /**\n * The local rotation of this element in Euler angles, as a JSON string. JSON\n * representation can either be `[x, y, z, order]` or `{\"x\": 0, \"y\": 0, \"z\":\n * 0, \"order\": \"xyz\"}`.\n */\n @Prop({ attribute: 'rotation' })\n public rotationJson?: string;\n\n /**\n * @ignore\n */\n @Watch('rotationJson')\n protected handleRotationJsonChanged(): void {\n this.syncRotation();\n }\n\n /**\n * The local rotation of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public quaternion: Quaternion.Quaternion = Quaternion.create();\n\n /**\n * @ignore\n */\n @Watch('quaternion')\n protected handleQuaternionChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local rotation of this element, as a JSON string. JSON\n * representation can either be `[x, y, z, w]` or `{\"x\": 0, \"y\": 0, \"z\":\n * 0, \"w\": 1}`.\n */\n @Prop({ attribute: 'quaternion' })\n public quaternionJson = '';\n\n /**\n * @ignore\n */\n @Watch('quaternionJson')\n protected handleQuaternionJsonChanged(): void {\n this.syncQuaternion();\n }\n\n /**\n * The local scale of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public scale: Vector3.Vector3 = Vector3.create(1, 1, 1);\n\n /**\n * @ignore\n */\n @Watch('scale')\n protected handleScaleChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local scale of this element, as a JSON string. JSON string\n * representation can either be in the format of `[x, y, z]` or `{\"x\": 0, \"y\":\n * 0, \"z\": 0}`.\n */\n @Prop({ attribute: 'scale' })\n public scaleJson = '';\n\n /**\n * @ignore\n */\n @Watch('scaleJson')\n protected handleScaleJsonChanged(): void {\n this.syncScale();\n }\n\n /**\n * @ignore\n */\n @Watch('matrix')\n protected handleMatrixChanged(\n newMatrix: Matrix4.Matrix4,\n oldMatrix: Matrix4.Matrix4\n ): void {\n if (!Objects.isEqual(newMatrix, oldMatrix)) {\n this.propertyChange.emit();\n }\n }\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.syncProperties();\n }\n\n /**\n * @ignore\n */\n protected componentShouldUpdate(): boolean {\n return false;\n }\n\n private syncProperties(): void {\n this.syncPosition();\n this.syncRotation();\n this.syncQuaternion();\n this.syncScale();\n this.syncMatrix();\n }\n\n private syncPosition(): void {\n this.position =\n this.positionJson.length > 0\n ? this.parseJson('positionJson', this.positionJson, Vector3.fromJson)\n : this.position;\n }\n\n private syncRotation(): void {\n this.rotation =\n this.rotationJson != null && this.rotationJson.length > 0\n ? this.parseJson('rotationJson', this.rotationJson, Euler.fromJson)\n : this.rotation;\n this.syncQuaternionWithRotation();\n }\n\n private syncQuaternionWithRotation(): void {\n this.quaternion =\n this.rotation != null\n ? Quaternion.fromEuler(this.rotation)\n : this.quaternion;\n }\n\n private syncQuaternion(): void {\n this.quaternion =\n this.quaternionJson.length > 0\n ? this.parseJson(\n 'quaternionJson',\n this.quaternionJson,\n Quaternion.fromJson\n )\n : this.quaternion;\n }\n\n private syncScale(): void {\n this.scale =\n this.scaleJson.length > 0\n ? this.parseJson('scaleJson', this.scaleJson, Vector3.fromJson)\n : this.scale;\n }\n\n private syncMatrix(): void {\n this.matrix = Matrix4.makeTRS(this.position, this.quaternion, this.scale);\n }\n\n private parseJson<T>(\n propName: string,\n value: string,\n parse: (str: string) => T\n ): T {\n try {\n return parse(value);\n } catch (e) {\n console.warn(`Could not parse \\`${propName}\\`. Invalid JSON.`);\n throw e;\n }\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n}\n"],"names":["Vector3","Quaternion","Matrix4","Objects","Euler"],"mappings":"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"}
1
+ {"version":3,"file":"vertex-viewer-dom-group.entry.js","sources":["src/components/viewer-dom-group/viewer-dom-group.css?tag=vertex-viewer-dom-group&encapsulation=scoped","src/components/viewer-dom-group/viewer-dom-group.tsx"],"sourcesContent":[":host {\n display: block;\n transform-style: preserve-3d;\n}\n","/* eslint-disable @typescript-eslint/member-ordering */\n\nimport {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Euler, Matrix4, Quaternion, Vector3 } from '@vertexvis/geometry';\nimport { Objects } from '@vertexvis/utils';\n\nimport { HTMLDomRendererPositionableElement } from '../../interfaces';\n\n@Component({\n tag: 'vertex-viewer-dom-group',\n styleUrl: 'viewer-dom-group.css',\n shadow: false,\n scoped: true,\n})\nexport class ViewerDomGroup implements HTMLDomRendererPositionableElement {\n /**\n * The local 3D position of where this element is located.\n */\n @Prop({ mutable: true, attribute: null })\n public position: Vector3.Vector3 = Vector3.origin();\n\n /**\n * @ignore\n */\n @Watch('position')\n protected handlePositionChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local 3D position of where this element is located, as a JSON string.\n * JSON representation can either be in the format of `[x, y, z]` or `{\"x\": 0,\n * \"y\": 0, \"z\": 0}`.\n */\n @Prop({ attribute: 'position' })\n public positionJson = '';\n\n /**\n * @ignore\n */\n @Watch('positionJson')\n protected handlePositionJsonChanged(): void {\n this.syncPosition();\n }\n\n /**\n * An event that is emitted when any property on the dom group changes\n */\n @Event({ bubbles: true })\n public propertyChange!: EventEmitter<void>;\n\n /**\n * The local rotation of this element in Euler angles.\n */\n @Prop({ mutable: true, attribute: null })\n public rotation?: Euler.Euler;\n\n /**\n * @ignore\n */\n @Watch('rotation')\n protected handleRotationChanged(): void {\n this.syncQuaternionWithRotation();\n }\n\n /**\n * The local rotation of this element in Euler angles, as a JSON string. JSON\n * representation can either be `[x, y, z, order]` or `{\"x\": 0, \"y\": 0, \"z\":\n * 0, \"order\": \"xyz\"}`.\n */\n @Prop({ attribute: 'rotation' })\n public rotationJson?: string;\n\n /**\n * @ignore\n */\n @Watch('rotationJson')\n protected handleRotationJsonChanged(): void {\n this.syncRotation();\n }\n\n /**\n * The local rotation of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public quaternion: Quaternion.Quaternion = Quaternion.create();\n\n /**\n * @ignore\n */\n @Watch('quaternion')\n protected handleQuaternionChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local rotation of this element, as a JSON string. JSON\n * representation can either be `[x, y, z, w]` or `{\"x\": 0, \"y\": 0, \"z\":\n * 0, \"w\": 1}`.\n */\n @Prop({ attribute: 'quaternion' })\n public quaternionJson = '';\n\n /**\n * @ignore\n */\n @Watch('quaternionJson')\n protected handleQuaternionJsonChanged(): void {\n this.syncQuaternion();\n }\n\n /**\n * The local scale of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public scale: Vector3.Vector3 = Vector3.create(1, 1, 1);\n\n /**\n * @ignore\n */\n @Watch('scale')\n protected handleScaleChange(): void {\n this.syncMatrix();\n }\n\n /**\n * The local scale of this element, as a JSON string. JSON string\n * representation can either be in the format of `[x, y, z]` or `{\"x\": 0, \"y\":\n * 0, \"z\": 0}`.\n */\n @Prop({ attribute: 'scale' })\n public scaleJson = '';\n\n /**\n * @ignore\n */\n @Watch('scaleJson')\n protected handleScaleJsonChanged(): void {\n this.syncScale();\n }\n\n /**\n * @ignore\n */\n @Watch('matrix')\n protected handleMatrixChanged(\n newMatrix: Matrix4.Matrix4,\n oldMatrix: Matrix4.Matrix4,\n ): void {\n if (!Objects.isEqual(newMatrix, oldMatrix)) {\n this.propertyChange.emit();\n }\n }\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.syncProperties();\n }\n\n /**\n * @ignore\n */\n protected componentShouldUpdate(): boolean {\n return false;\n }\n\n private syncProperties(): void {\n this.syncPosition();\n this.syncRotation();\n this.syncQuaternion();\n this.syncScale();\n this.syncMatrix();\n }\n\n private syncPosition(): void {\n this.position =\n this.positionJson.length > 0\n ? this.parseJson('positionJson', this.positionJson, Vector3.fromJson)\n : this.position;\n }\n\n private syncRotation(): void {\n this.rotation =\n this.rotationJson != null && this.rotationJson.length > 0\n ? this.parseJson('rotationJson', this.rotationJson, Euler.fromJson)\n : this.rotation;\n this.syncQuaternionWithRotation();\n }\n\n private syncQuaternionWithRotation(): void {\n this.quaternion =\n this.rotation != null\n ? Quaternion.fromEuler(this.rotation)\n : this.quaternion;\n }\n\n private syncQuaternion(): void {\n this.quaternion =\n this.quaternionJson.length > 0\n ? this.parseJson(\n 'quaternionJson',\n this.quaternionJson,\n Quaternion.fromJson,\n )\n : this.quaternion;\n }\n\n private syncScale(): void {\n this.scale =\n this.scaleJson.length > 0\n ? this.parseJson('scaleJson', this.scaleJson, Vector3.fromJson)\n : this.scale;\n }\n\n private syncMatrix(): void {\n this.matrix = Matrix4.makeTRS(this.position, this.quaternion, this.scale);\n }\n\n private parseJson<T>(\n propName: string,\n value: string,\n parse: (str: string) => T,\n ): T {\n try {\n return parse(value);\n } catch (e) {\n console.warn(`Could not parse \\`${propName}\\`. Invalid JSON.`);\n throw e;\n }\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n}\n"],"names":["Vector3","Quaternion","Matrix4","Objects","Euler"],"mappings":"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"}
@@ -302,7 +302,7 @@ const ViewerHitResultIndicator = class {
302
302
  }
303
303
  render() {
304
304
  var _a, _b;
305
- return (h(Host, { key: 'b01a77bd8351c40aa405af4c6b78b455de415a18' }, h("canvas", { key: 'bef28c167aa8f5db50e8130111d63592ba9cd4b4', ref: (el) => {
305
+ return (h(Host, { key: '0631daa8ceb3c04fcabb3ca882ee4758d2017d5f' }, h("canvas", { key: '2b0be3f11e30545337f6dcb441c44a3424d484ef', ref: (el) => {
306
306
  this.canvasRef = el;
307
307
  }, class: "indicator", width: (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.viewport.width, height: (_b = this.viewer) === null || _b === void 0 ? void 0 : _b.viewport.height })));
308
308
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vertex-viewer-hit-result-indicator.entry.js","sources":["src/components/viewer-hit-result-indicator/lib/dom.ts","src/components/viewer-hit-result-indicator/lib/plane.ts","src/components/viewer-hit-result-indicator/lib/point.ts","src/components/viewer-hit-result-indicator/lib/indicator.ts","src/components/viewer-hit-result-indicator/viewer-hit-result-indicator.css?tag=vertex-viewer-hit-result-indicator&encapsulation=shadow","src/components/viewer-hit-result-indicator/viewer-hit-result-indicator.tsx"],"sourcesContent":["export function parseCssColorValue(\n styles: CSSStyleDeclaration,\n property: string\n): string {\n return styles.getPropertyValue(property).trim().replace(/[\"']*/g, '');\n}\n","import { Angle, Matrix4, Quaternion, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { MeshPoints } from '../../../lib/transforms/mesh';\nimport { FrameCameraBase } from '../../../lib/types';\n\nexport function computePlaneNdcValues(\n transform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n direction: Vector3.Vector3,\n planeSize: number\n): MeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n direction,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(transform))\n );\n\n const position = Vector3.fromMatrixPosition(transform);\n\n const worldX =\n Math.abs(Vector3.dot(transformedDirection, Vector3.up())) === 1\n ? Vector3.left()\n : Vector3.normalize(Vector3.cross(transformedDirection, Vector3.up()));\n const worldY = Vector3.normalize(Vector3.cross(worldX, transformedDirection));\n const xRay = Ray.create({\n origin: position,\n direction: worldX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: worldY,\n });\n\n const bottomLeft = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, -planeSize),\n transformedDirection,\n position\n );\n const topLeft = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, -planeSize),\n transformedDirection,\n position\n );\n const bottomRight = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, planeSize),\n transformedDirection,\n position\n );\n const topRight = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, planeSize),\n transformedDirection,\n position\n );\n\n const world = [bottomLeft, topLeft, topRight, bottomRight];\n\n return new MeshPoints(\n !isNaN(worldX.x),\n [bottomLeft, topLeft, topRight, bottomRight],\n world.map((v) => Vector3.transformMatrix(v, camera.projectionViewMatrix)),\n (vector) => Vector3.distance(position, vector)\n );\n}\n","import { Angle, Matrix4, Quaternion, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { MeshPoints } from '../../../lib/transforms/mesh';\nimport { FrameCameraBase } from '../../../lib/types';\n\nexport function computePointNdcValues(\n transform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n direction: Vector3.Vector3,\n rectangleSize: number\n): MeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n direction,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(transform))\n );\n\n const position = Vector3.fromMatrixPosition(transform);\n\n const worldX = Vector3.normalize(\n Vector3.cross(transformedDirection, Vector3.normalize(camera.viewVector))\n );\n const worldY = Vector3.normalize(Vector3.cross(transformedDirection, worldX));\n const xRay = Ray.create({\n origin: position,\n direction: worldX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: worldY,\n });\n\n const bottomLeft = Ray.at(xRay, -rectangleSize);\n const topLeft = Ray.at(yRay, -rectangleSize);\n const bottomRight = Ray.at(yRay, rectangleSize);\n const topRight = Ray.at(xRay, rectangleSize);\n\n const bottomLeftRotated = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n bottomLeft,\n transformedDirection,\n position\n );\n const topLeftRotated = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n topLeft,\n transformedDirection,\n position\n );\n const bottomRightRotated = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n bottomRight,\n transformedDirection,\n position\n );\n const topRightRotated = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n topRight,\n transformedDirection,\n position\n );\n\n const world = [\n bottomLeft,\n bottomLeftRotated,\n topLeft,\n topLeftRotated,\n topRight,\n topRightRotated,\n bottomRight,\n bottomRightRotated,\n ];\n\n return new MeshPoints(\n !isNaN(worldX.x),\n world,\n world.map((v) => Vector3.transformMatrix(v, camera.projectionViewMatrix)),\n (vector) => Vector3.distance(position, vector)\n );\n}\n","import { Matrix4 } from '@vertexvis/geometry';\nimport { Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\nimport regl from 'regl';\nimport shapeBuilder, { JoinStyle } from 'regl-shape';\n\nimport { axisPositions } from '../../../lib/transforms/axis-lines';\nimport { computeArrowNdcValues } from '../../../lib/transforms/axis-translation';\nimport { AxisLine } from '../../../lib/transforms/line';\nimport { Mesh, TriangleMesh } from '../../../lib/transforms/mesh';\nimport { Frame } from '../../../lib/types';\nimport { ReglComponent } from '../../../lib/webgl/regl-component';\nimport { computePlaneNdcValues } from './plane';\nimport { computePointNdcValues } from './point';\n\nexport interface DrawableElementColors {\n arrow?: Color.Color | string;\n plane?: Color.Color | string;\n outline?: Color.Color | string;\n}\n\nexport interface DrawableElementOpacities {\n plane?: string | number;\n}\n\n// The default amount to scale the computed `triangleSize` by when\n// computing the points for the hit position indicator.\nexport const DEFAULT_POINT_SIZE_SCALAR = 0.4;\n\n// The default amount to scale the computed `triangleSize` by when\n// computing the points for the hit plane indicator.\nexport const DEFAULT_PLANE_SIZE_SCALAR = 5;\n\nexport const DEFAULT_PLANE_OPACITY = 0.75;\n\nexport class HitIndicator extends ReglComponent {\n private axis?: AxisLine;\n private arrow?: TriangleMesh;\n private point?: Mesh;\n private plane?: Mesh;\n\n private transform?: Matrix4.Matrix4;\n private normal?: Vector3.Vector3;\n\n private arrowFillColor?: Color.Color | string;\n private planeFillColor?: Color.Color | string;\n private outlineColor?: Color.Color | string;\n\n private planeOpacity?: string | number;\n\n public constructor(\n canvasElement: HTMLCanvasElement,\n colors: DrawableElementColors = {},\n opacities: DrawableElementOpacities = {}\n ) {\n super(canvasElement);\n\n this.arrowFillColor = colors.arrow;\n this.planeFillColor = colors.plane;\n this.outlineColor = colors.outline;\n this.planeOpacity = opacities.plane;\n }\n\n public updateTransformAndNormal(\n transform?: Matrix4.Matrix4,\n normal?: Vector3.Vector3\n ): void {\n this.transform = transform;\n this.normal = normal;\n\n if (transform != null && normal != null && this.frame != null) {\n this.updateAndDraw();\n } else {\n this.clear();\n this.reglFrameDisposable?.cancel();\n this.reglFrameDisposable = undefined;\n }\n }\n\n public updateColors(colors: DrawableElementColors): void {\n this.arrowFillColor = colors.arrow ?? this.arrowFillColor;\n this.planeFillColor = colors.plane ?? this.planeFillColor;\n this.outlineColor = colors.outline ?? this.outlineColor;\n this.arrow?.updateFillColor(this.arrowFillColor);\n this.plane?.updateFillColor(this.planeFillColor);\n this.arrow?.updateOutlineColor(this.outlineColor);\n this.plane?.updateOutlineColor(this.outlineColor);\n this.point?.updateOutlineColor(this.outlineColor);\n this.axis?.updateOutlineColor(this.outlineColor);\n }\n\n public updateOpacities(opacities: DrawableElementOpacities): void {\n this.planeOpacity = opacities.plane;\n }\n\n protected hasData(): boolean {\n return this.transform != null && this.normal != null;\n }\n\n protected createOrUpdateElements(): void {\n if (this.transform != null && this.normal != null && this.frame != null) {\n if (this.arrow == null) {\n this.createElements(this.transform, this.normal, this.frame);\n } else {\n this.updateElements(this.transform, this.normal, this.frame);\n }\n }\n }\n\n private createElements(\n transform: Matrix4.Matrix4,\n normal: Vector3.Vector3,\n frame: Frame\n ): void {\n this.reglCommand = regl({\n canvas: this.canvasElement,\n extensions: 'angle_instanced_arrays',\n });\n const { createShape } = shapeBuilder(this.reglCommand);\n\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame\n );\n\n this.arrow = new TriangleMesh(\n createShape,\n 'hit-normal-arrow',\n computeArrowNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize\n ),\n this.outlineColor,\n this.arrowFillColor\n );\n this.plane = new Mesh(\n createShape,\n 'hit-plane',\n computePlaneNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize * DEFAULT_PLANE_SIZE_SCALAR\n ),\n this.outlineColor,\n this.planeFillColor,\n {\n opacity: this.getPlaneOpacity(),\n depth: 0.5,\n }\n );\n this.point = new Mesh(\n createShape,\n 'hit-position',\n computePointNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize * DEFAULT_POINT_SIZE_SCALAR\n ),\n this.outlineColor,\n this.outlineColor,\n {\n join: 'round' as JoinStyle,\n depth: 1,\n }\n );\n this.axis = new AxisLine(\n createShape,\n 'hit-normal-axis',\n axisPositions(transform, frame.scene.camera, this.arrow),\n this.outlineColor,\n this.arrowFillColor\n );\n\n this.availableElements = [this.arrow, this.point, this.plane, this.axis];\n }\n\n private updateElements(\n transform: Matrix4.Matrix4,\n normal: Vector3.Vector3,\n frame: Frame\n ): void {\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame\n );\n\n if (this.arrow != null) {\n this.arrow.updatePoints(\n computeArrowNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize\n )\n );\n this.axis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.arrow)\n );\n }\n if (this.plane != null) {\n this.plane.updatePoints(\n computePlaneNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize * DEFAULT_PLANE_SIZE_SCALAR\n )\n );\n }\n if (this.point != null) {\n this.point.updatePoints(\n computePointNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize * DEFAULT_POINT_SIZE_SCALAR\n )\n );\n }\n }\n\n private getPlaneOpacity(): number {\n if (this.planeOpacity != null) {\n return typeof this.planeOpacity === 'string'\n ? parseFloat(this.planeOpacity)\n : this.planeOpacity;\n }\n return DEFAULT_PLANE_OPACITY;\n }\n}\n",":host {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n /**\n * @prop --viewer-hit-result-indicator-arrow-color: A CSS color for the arrow\n * representing the normal for this hit indicator. Defaults to `#0099cc`.\n */\n --viewer-hit-result-indicator-arrow-color: #0099cc;\n\n /**\n * @prop --viewer-hit-result-indicator-plane-color: A CSS color for the plane\n * for this hit indicator. Defaults to `#0099cc`.\n */\n --viewer-hit-result-indicator-plane-color: #0099cc;\n\n /**\n * @prop --viewer-hit-result-indicator-outline-color: A CSS color for the outline\n * of the plane and arrow. Defaults to `#000000`.\n */\n --viewer-hit-result-indicator-outline-color: #000000;\n\n /**\n * @prop --viewer-hit-result-indicator-plane-opacity: A CSS number for the opacity\n * of the plane for this hit indicator. Defaults to `0.75`.\n */\n --viewer-hit-result-indicator-plane-opacity: 0.75;\n}\n\n.indicator {\n position: absolute;\n top: 0;\n left: 0;\n}\n","import { Component, Element, h, Host, Prop, Watch } from '@stencil/core';\nimport { Matrix4, Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\n\nimport { readDOM, writeDOM } from '../../lib/stencil';\nimport { parseCssColorValue } from './lib/dom';\nimport { DEFAULT_PLANE_OPACITY, HitIndicator } from './lib/indicator';\n\n@Component({\n tag: 'vertex-viewer-hit-result-indicator',\n styleUrl: 'viewer-hit-result-indicator.css',\n shadow: true,\n})\nexport class ViewerHitResultIndicator {\n /**\n * The viewer to connect to this indicator. If nested within a <vertex-viewer>,\n * this property will be populated automatically.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The position of this indicator. A point will be displayed at this position,\n * and it will be used alongside the provided `normal` to display a plane and\n * normal arrow centered at the position.\n */\n @Prop({ mutable: true })\n public position?: Vector3.Vector3;\n\n /**\n * The normal of this indicator. This value will be represented as an arrow,\n * and will be used alongside the provided `position` to display a plane.\n */\n @Prop({ mutable: true })\n public normal?: Vector3.Vector3;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private transform?: Matrix4.Matrix4;\n\n private arrowColor: Color.Color | string = '#0099cc';\n private planeColor: Color.Color | string = '#0099cc';\n private outlineColor: Color.Color | string = '#000000';\n private planeOpacity: number | string = DEFAULT_PLANE_OPACITY;\n\n private indicator?: HitIndicator;\n\n private canvasResizeObserver?: ResizeObserver;\n private canvasRef?: HTMLCanvasElement;\n\n protected componentDidLoad(): void {\n this.handleViewerChanged(this.viewer, undefined);\n\n this.canvasResizeObserver = new ResizeObserver(this.handleResize);\n\n if (this.canvasRef != null) {\n this.canvasResizeObserver.observe(this.canvasRef);\n\n this.setupIndicator(this.canvasRef);\n }\n\n readDOM(() => {\n const hostStyles = window.getComputedStyle(this.hostEl);\n\n this.arrowColor = parseCssColorValue(\n hostStyles,\n '--viewer-hit-result-indicator-arrow-color'\n );\n this.planeColor = parseCssColorValue(\n hostStyles,\n '--viewer-hit-result-indicator-plane-color'\n );\n this.outlineColor = parseCssColorValue(\n hostStyles,\n '--viewer-hit-result-indicator-outline-color'\n );\n this.planeOpacity = hostStyles\n .getPropertyValue('--viewer-hit-result-indicator-plane-opacity')\n .trim();\n\n this.indicator?.updateColors({\n arrow: this.arrowColor,\n plane: this.planeColor,\n outline: this.outlineColor,\n });\n this.indicator?.updateOpacities({\n plane: this.planeOpacity,\n });\n });\n }\n\n protected disconnectedCallback(): void {\n this.canvasResizeObserver?.disconnect();\n\n this.indicator?.dispose();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement\n ): void {\n oldViewer?.removeEventListener('frameDrawn', this.handleViewerFrameDrawn);\n oldViewer?.removeEventListener(\n 'dimensionschange',\n this.handleViewerDimensionsChange\n );\n newViewer?.addEventListener('frameDrawn', this.handleViewerFrameDrawn);\n newViewer?.addEventListener(\n 'dimensionschange',\n this.handleViewerDimensionsChange\n );\n }\n\n /**\n * @ignore\n */\n @Watch('position')\n protected handlePositionChanged(\n newPosition?: Vector3.Vector3,\n oldPosition?: Vector3.Vector3\n ): void {\n this.transform = this.createTransform();\n\n console.debug(\n `Updating indicator position [previous=${JSON.stringify(\n oldPosition\n )}, current=${JSON.stringify(newPosition)}]`\n );\n\n this.indicator?.updateTransformAndNormal(this.transform, this.normal);\n }\n\n @Watch('normal')\n protected handleNormalChanged(\n newNormal?: Vector3.Vector3,\n oldNormal?: Vector3.Vector3\n ): void {\n console.debug(\n `Updating indicator normal [previous=${JSON.stringify(\n oldNormal\n )}, current=${JSON.stringify(newNormal)}]`\n );\n\n if (newNormal) {\n this.indicator?.updateTransformAndNormal(this.transform, this.normal);\n }\n }\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <canvas\n ref={(el) => {\n this.canvasRef = el;\n }}\n class=\"indicator\"\n width={this.viewer?.viewport.width}\n height={this.viewer?.viewport.height}\n />\n </Host>\n );\n }\n\n private handleViewerFrameDrawn = (): void => {\n this.updatePropsFromViewer();\n };\n\n private handleViewerDimensionsChange = (): void => {\n writeDOM(() => {\n if (this.viewer != null && this.canvasRef != null) {\n this.canvasRef.width = this.viewer.viewport.width;\n this.canvasRef.height = this.viewer.viewport.height;\n\n this.updateAndRedrawIndicator();\n }\n });\n };\n\n private handleResize = (): void => {\n if (this.canvasRef != null) {\n this.updateAndRedrawIndicator();\n }\n };\n\n private updatePropsFromViewer = (): void => {\n const { frame } = this.viewer || {};\n\n if (frame != null) {\n const widget = this.getIndicator();\n\n widget.updateFrame(frame);\n }\n };\n\n private setupIndicator = (canvasRef: HTMLCanvasElement): HitIndicator => {\n console.debug(\n `Initializing hit indicator. [initial-position=${JSON.stringify(\n this.position\n )}, initial-normal=${JSON.stringify(this.normal)} has-initial-frame=${\n this.viewer?.frame != null\n }]`\n );\n\n this.indicator = new HitIndicator(\n canvasRef,\n {\n arrow: this.arrowColor,\n plane: this.planeColor,\n },\n {\n plane: this.planeOpacity,\n }\n );\n\n this.transform = this.createTransform();\n this.indicator.updateTransformAndNormal(this.transform, this.normal);\n if (this.viewer?.frame != null) {\n this.indicator.updateFrame(this.viewer.frame);\n }\n\n return this.indicator;\n };\n\n private updateAndRedrawIndicator = (): void => {\n readDOM(() => {\n this.getIndicator().updateAndDraw();\n });\n };\n\n private createTransform = (): Matrix4.Matrix4 | undefined => {\n if (this.position != null) {\n return Matrix4.makeTranslation(this.position);\n }\n };\n\n private getIndicator = (): HitIndicator => {\n if (this.indicator == null && this.canvasRef != null) {\n return this.setupIndicator(this.canvasRef);\n } else if (this.indicator != null) {\n return this.indicator;\n } else {\n throw new Error(\n 'Hit indicator was not initialized. The canvas element may not have been initialized.'\n );\n }\n };\n}\n"],"names":["Vector3","Matrix4","Quaternion","Ray","Angle"],"mappings":"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"}
1
+ {"version":3,"file":"vertex-viewer-hit-result-indicator.entry.js","sources":["src/components/viewer-hit-result-indicator/lib/dom.ts","src/components/viewer-hit-result-indicator/lib/plane.ts","src/components/viewer-hit-result-indicator/lib/point.ts","src/components/viewer-hit-result-indicator/lib/indicator.ts","src/components/viewer-hit-result-indicator/viewer-hit-result-indicator.css?tag=vertex-viewer-hit-result-indicator&encapsulation=shadow","src/components/viewer-hit-result-indicator/viewer-hit-result-indicator.tsx"],"sourcesContent":["export function parseCssColorValue(\n styles: CSSStyleDeclaration,\n property: string,\n): string {\n return styles.getPropertyValue(property).trim().replace(/[\"']*/g, '');\n}\n","import { Angle, Matrix4, Quaternion, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { MeshPoints } from '../../../lib/transforms/mesh';\nimport { FrameCameraBase } from '../../../lib/types';\n\nexport function computePlaneNdcValues(\n transform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n direction: Vector3.Vector3,\n planeSize: number,\n): MeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n direction,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(transform)),\n );\n\n const position = Vector3.fromMatrixPosition(transform);\n\n const worldX =\n Math.abs(Vector3.dot(transformedDirection, Vector3.up())) === 1\n ? Vector3.left()\n : Vector3.normalize(Vector3.cross(transformedDirection, Vector3.up()));\n const worldY = Vector3.normalize(Vector3.cross(worldX, transformedDirection));\n const xRay = Ray.create({\n origin: position,\n direction: worldX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: worldY,\n });\n\n const bottomLeft = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, -planeSize),\n transformedDirection,\n position,\n );\n const topLeft = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, -planeSize),\n transformedDirection,\n position,\n );\n const bottomRight = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, planeSize),\n transformedDirection,\n position,\n );\n const topRight = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, planeSize),\n transformedDirection,\n position,\n );\n\n const world = [bottomLeft, topLeft, topRight, bottomRight];\n\n return new MeshPoints(\n !isNaN(worldX.x),\n [bottomLeft, topLeft, topRight, bottomRight],\n world.map((v) => Vector3.transformMatrix(v, camera.projectionViewMatrix)),\n (vector) => Vector3.distance(position, vector),\n );\n}\n","import { Angle, Matrix4, Quaternion, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { MeshPoints } from '../../../lib/transforms/mesh';\nimport { FrameCameraBase } from '../../../lib/types';\n\nexport function computePointNdcValues(\n transform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n direction: Vector3.Vector3,\n rectangleSize: number,\n): MeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n direction,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(transform)),\n );\n\n const position = Vector3.fromMatrixPosition(transform);\n\n const worldX = Vector3.normalize(\n Vector3.cross(transformedDirection, Vector3.normalize(camera.viewVector)),\n );\n const worldY = Vector3.normalize(Vector3.cross(transformedDirection, worldX));\n const xRay = Ray.create({\n origin: position,\n direction: worldX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: worldY,\n });\n\n const bottomLeft = Ray.at(xRay, -rectangleSize);\n const topLeft = Ray.at(yRay, -rectangleSize);\n const bottomRight = Ray.at(yRay, rectangleSize);\n const topRight = Ray.at(xRay, rectangleSize);\n\n const bottomLeftRotated = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n bottomLeft,\n transformedDirection,\n position,\n );\n const topLeftRotated = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n topLeft,\n transformedDirection,\n position,\n );\n const bottomRightRotated = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n bottomRight,\n transformedDirection,\n position,\n );\n const topRightRotated = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n topRight,\n transformedDirection,\n position,\n );\n\n const world = [\n bottomLeft,\n bottomLeftRotated,\n topLeft,\n topLeftRotated,\n topRight,\n topRightRotated,\n bottomRight,\n bottomRightRotated,\n ];\n\n return new MeshPoints(\n !isNaN(worldX.x),\n world,\n world.map((v) => Vector3.transformMatrix(v, camera.projectionViewMatrix)),\n (vector) => Vector3.distance(position, vector),\n );\n}\n","import { Matrix4 } from '@vertexvis/geometry';\nimport { Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\nimport regl from 'regl';\nimport shapeBuilder, { JoinStyle } from 'regl-shape';\n\nimport { axisPositions } from '../../../lib/transforms/axis-lines';\nimport { computeArrowNdcValues } from '../../../lib/transforms/axis-translation';\nimport { AxisLine } from '../../../lib/transforms/line';\nimport { Mesh, TriangleMesh } from '../../../lib/transforms/mesh';\nimport { Frame } from '../../../lib/types';\nimport { ReglComponent } from '../../../lib/webgl/regl-component';\nimport { computePlaneNdcValues } from './plane';\nimport { computePointNdcValues } from './point';\n\nexport interface DrawableElementColors {\n arrow?: Color.Color | string;\n plane?: Color.Color | string;\n outline?: Color.Color | string;\n}\n\nexport interface DrawableElementOpacities {\n plane?: string | number;\n}\n\n// The default amount to scale the computed `triangleSize` by when\n// computing the points for the hit position indicator.\nexport const DEFAULT_POINT_SIZE_SCALAR = 0.4;\n\n// The default amount to scale the computed `triangleSize` by when\n// computing the points for the hit plane indicator.\nexport const DEFAULT_PLANE_SIZE_SCALAR = 5;\n\nexport const DEFAULT_PLANE_OPACITY = 0.75;\n\nexport class HitIndicator extends ReglComponent {\n private axis?: AxisLine;\n private arrow?: TriangleMesh;\n private point?: Mesh;\n private plane?: Mesh;\n\n private transform?: Matrix4.Matrix4;\n private normal?: Vector3.Vector3;\n\n private arrowFillColor?: Color.Color | string;\n private planeFillColor?: Color.Color | string;\n private outlineColor?: Color.Color | string;\n\n private planeOpacity?: string | number;\n\n public constructor(\n canvasElement: HTMLCanvasElement,\n colors: DrawableElementColors = {},\n opacities: DrawableElementOpacities = {},\n ) {\n super(canvasElement);\n\n this.arrowFillColor = colors.arrow;\n this.planeFillColor = colors.plane;\n this.outlineColor = colors.outline;\n this.planeOpacity = opacities.plane;\n }\n\n public updateTransformAndNormal(\n transform?: Matrix4.Matrix4,\n normal?: Vector3.Vector3,\n ): void {\n this.transform = transform;\n this.normal = normal;\n\n if (transform != null && normal != null && this.frame != null) {\n this.updateAndDraw();\n } else {\n this.clear();\n this.reglFrameDisposable?.cancel();\n this.reglFrameDisposable = undefined;\n }\n }\n\n public updateColors(colors: DrawableElementColors): void {\n this.arrowFillColor = colors.arrow ?? this.arrowFillColor;\n this.planeFillColor = colors.plane ?? this.planeFillColor;\n this.outlineColor = colors.outline ?? this.outlineColor;\n this.arrow?.updateFillColor(this.arrowFillColor);\n this.plane?.updateFillColor(this.planeFillColor);\n this.arrow?.updateOutlineColor(this.outlineColor);\n this.plane?.updateOutlineColor(this.outlineColor);\n this.point?.updateOutlineColor(this.outlineColor);\n this.axis?.updateOutlineColor(this.outlineColor);\n }\n\n public updateOpacities(opacities: DrawableElementOpacities): void {\n this.planeOpacity = opacities.plane;\n }\n\n protected hasData(): boolean {\n return this.transform != null && this.normal != null;\n }\n\n protected createOrUpdateElements(): void {\n if (this.transform != null && this.normal != null && this.frame != null) {\n if (this.arrow == null) {\n this.createElements(this.transform, this.normal, this.frame);\n } else {\n this.updateElements(this.transform, this.normal, this.frame);\n }\n }\n }\n\n private createElements(\n transform: Matrix4.Matrix4,\n normal: Vector3.Vector3,\n frame: Frame,\n ): void {\n this.reglCommand = regl({\n canvas: this.canvasElement,\n extensions: 'angle_instanced_arrays',\n });\n const { createShape } = shapeBuilder(this.reglCommand);\n\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame,\n );\n\n this.arrow = new TriangleMesh(\n createShape,\n 'hit-normal-arrow',\n computeArrowNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize,\n ),\n this.outlineColor,\n this.arrowFillColor,\n );\n this.plane = new Mesh(\n createShape,\n 'hit-plane',\n computePlaneNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize * DEFAULT_PLANE_SIZE_SCALAR,\n ),\n this.outlineColor,\n this.planeFillColor,\n {\n opacity: this.getPlaneOpacity(),\n depth: 0.5,\n },\n );\n this.point = new Mesh(\n createShape,\n 'hit-position',\n computePointNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize * DEFAULT_POINT_SIZE_SCALAR,\n ),\n this.outlineColor,\n this.outlineColor,\n {\n join: 'round' as JoinStyle,\n depth: 1,\n },\n );\n this.axis = new AxisLine(\n createShape,\n 'hit-normal-axis',\n axisPositions(transform, frame.scene.camera, this.arrow),\n this.outlineColor,\n this.arrowFillColor,\n );\n\n this.availableElements = [this.arrow, this.point, this.plane, this.axis];\n }\n\n private updateElements(\n transform: Matrix4.Matrix4,\n normal: Vector3.Vector3,\n frame: Frame,\n ): void {\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame,\n );\n\n if (this.arrow != null) {\n this.arrow.updatePoints(\n computeArrowNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize,\n ),\n );\n this.axis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.arrow),\n );\n }\n if (this.plane != null) {\n this.plane.updatePoints(\n computePlaneNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize * DEFAULT_PLANE_SIZE_SCALAR,\n ),\n );\n }\n if (this.point != null) {\n this.point.updatePoints(\n computePointNdcValues(\n transform,\n frame.scene.camera,\n normal,\n triangleSize * DEFAULT_POINT_SIZE_SCALAR,\n ),\n );\n }\n }\n\n private getPlaneOpacity(): number {\n if (this.planeOpacity != null) {\n return typeof this.planeOpacity === 'string'\n ? parseFloat(this.planeOpacity)\n : this.planeOpacity;\n }\n return DEFAULT_PLANE_OPACITY;\n }\n}\n",":host {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n /**\n * @prop --viewer-hit-result-indicator-arrow-color: A CSS color for the arrow\n * representing the normal for this hit indicator. Defaults to `#0099cc`.\n */\n --viewer-hit-result-indicator-arrow-color: #0099cc;\n\n /**\n * @prop --viewer-hit-result-indicator-plane-color: A CSS color for the plane\n * for this hit indicator. Defaults to `#0099cc`.\n */\n --viewer-hit-result-indicator-plane-color: #0099cc;\n\n /**\n * @prop --viewer-hit-result-indicator-outline-color: A CSS color for the outline\n * of the plane and arrow. Defaults to `#000000`.\n */\n --viewer-hit-result-indicator-outline-color: #000000;\n\n /**\n * @prop --viewer-hit-result-indicator-plane-opacity: A CSS number for the opacity\n * of the plane for this hit indicator. Defaults to `0.75`.\n */\n --viewer-hit-result-indicator-plane-opacity: 0.75;\n}\n\n.indicator {\n position: absolute;\n top: 0;\n left: 0;\n}\n","import { Component, Element, h, Host, Prop, Watch } from '@stencil/core';\nimport { Matrix4, Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\n\nimport { readDOM, writeDOM } from '../../lib/stencil';\nimport { parseCssColorValue } from './lib/dom';\nimport { DEFAULT_PLANE_OPACITY, HitIndicator } from './lib/indicator';\n\n@Component({\n tag: 'vertex-viewer-hit-result-indicator',\n styleUrl: 'viewer-hit-result-indicator.css',\n shadow: true,\n})\nexport class ViewerHitResultIndicator {\n /**\n * The viewer to connect to this indicator. If nested within a <vertex-viewer>,\n * this property will be populated automatically.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The position of this indicator. A point will be displayed at this position,\n * and it will be used alongside the provided `normal` to display a plane and\n * normal arrow centered at the position.\n */\n @Prop({ mutable: true })\n public position?: Vector3.Vector3;\n\n /**\n * The normal of this indicator. This value will be represented as an arrow,\n * and will be used alongside the provided `position` to display a plane.\n */\n @Prop({ mutable: true })\n public normal?: Vector3.Vector3;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private transform?: Matrix4.Matrix4;\n\n private arrowColor: Color.Color | string = '#0099cc';\n private planeColor: Color.Color | string = '#0099cc';\n private outlineColor: Color.Color | string = '#000000';\n private planeOpacity: number | string = DEFAULT_PLANE_OPACITY;\n\n private indicator?: HitIndicator;\n\n private canvasResizeObserver?: ResizeObserver;\n private canvasRef?: HTMLCanvasElement;\n\n protected componentDidLoad(): void {\n this.handleViewerChanged(this.viewer, undefined);\n\n this.canvasResizeObserver = new ResizeObserver(this.handleResize);\n\n if (this.canvasRef != null) {\n this.canvasResizeObserver.observe(this.canvasRef);\n\n this.setupIndicator(this.canvasRef);\n }\n\n readDOM(() => {\n const hostStyles = window.getComputedStyle(this.hostEl);\n\n this.arrowColor = parseCssColorValue(\n hostStyles,\n '--viewer-hit-result-indicator-arrow-color',\n );\n this.planeColor = parseCssColorValue(\n hostStyles,\n '--viewer-hit-result-indicator-plane-color',\n );\n this.outlineColor = parseCssColorValue(\n hostStyles,\n '--viewer-hit-result-indicator-outline-color',\n );\n this.planeOpacity = hostStyles\n .getPropertyValue('--viewer-hit-result-indicator-plane-opacity')\n .trim();\n\n this.indicator?.updateColors({\n arrow: this.arrowColor,\n plane: this.planeColor,\n outline: this.outlineColor,\n });\n this.indicator?.updateOpacities({\n plane: this.planeOpacity,\n });\n });\n }\n\n protected disconnectedCallback(): void {\n this.canvasResizeObserver?.disconnect();\n\n this.indicator?.dispose();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement,\n ): void {\n oldViewer?.removeEventListener('frameDrawn', this.handleViewerFrameDrawn);\n oldViewer?.removeEventListener(\n 'dimensionschange',\n this.handleViewerDimensionsChange,\n );\n newViewer?.addEventListener('frameDrawn', this.handleViewerFrameDrawn);\n newViewer?.addEventListener(\n 'dimensionschange',\n this.handleViewerDimensionsChange,\n );\n }\n\n /**\n * @ignore\n */\n @Watch('position')\n protected handlePositionChanged(\n newPosition?: Vector3.Vector3,\n oldPosition?: Vector3.Vector3,\n ): void {\n this.transform = this.createTransform();\n\n console.debug(\n `Updating indicator position [previous=${JSON.stringify(\n oldPosition,\n )}, current=${JSON.stringify(newPosition)}]`,\n );\n\n this.indicator?.updateTransformAndNormal(this.transform, this.normal);\n }\n\n @Watch('normal')\n protected handleNormalChanged(\n newNormal?: Vector3.Vector3,\n oldNormal?: Vector3.Vector3,\n ): void {\n console.debug(\n `Updating indicator normal [previous=${JSON.stringify(\n oldNormal,\n )}, current=${JSON.stringify(newNormal)}]`,\n );\n\n if (newNormal) {\n this.indicator?.updateTransformAndNormal(this.transform, this.normal);\n }\n }\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <canvas\n ref={(el) => {\n this.canvasRef = el;\n }}\n class=\"indicator\"\n width={this.viewer?.viewport.width}\n height={this.viewer?.viewport.height}\n />\n </Host>\n );\n }\n\n private handleViewerFrameDrawn = (): void => {\n this.updatePropsFromViewer();\n };\n\n private handleViewerDimensionsChange = (): void => {\n writeDOM(() => {\n if (this.viewer != null && this.canvasRef != null) {\n this.canvasRef.width = this.viewer.viewport.width;\n this.canvasRef.height = this.viewer.viewport.height;\n\n this.updateAndRedrawIndicator();\n }\n });\n };\n\n private handleResize = (): void => {\n if (this.canvasRef != null) {\n this.updateAndRedrawIndicator();\n }\n };\n\n private updatePropsFromViewer = (): void => {\n const { frame } = this.viewer || {};\n\n if (frame != null) {\n const widget = this.getIndicator();\n\n widget.updateFrame(frame);\n }\n };\n\n private setupIndicator = (canvasRef: HTMLCanvasElement): HitIndicator => {\n console.debug(\n `Initializing hit indicator. [initial-position=${JSON.stringify(\n this.position,\n )}, initial-normal=${JSON.stringify(this.normal)} has-initial-frame=${\n this.viewer?.frame != null\n }]`,\n );\n\n this.indicator = new HitIndicator(\n canvasRef,\n {\n arrow: this.arrowColor,\n plane: this.planeColor,\n },\n {\n plane: this.planeOpacity,\n },\n );\n\n this.transform = this.createTransform();\n this.indicator.updateTransformAndNormal(this.transform, this.normal);\n if (this.viewer?.frame != null) {\n this.indicator.updateFrame(this.viewer.frame);\n }\n\n return this.indicator;\n };\n\n private updateAndRedrawIndicator = (): void => {\n readDOM(() => {\n this.getIndicator().updateAndDraw();\n });\n };\n\n private createTransform = (): Matrix4.Matrix4 | undefined => {\n if (this.position != null) {\n return Matrix4.makeTranslation(this.position);\n }\n };\n\n private getIndicator = (): HitIndicator => {\n if (this.indicator == null && this.canvasRef != null) {\n return this.setupIndicator(this.canvasRef);\n } else if (this.indicator != null) {\n return this.indicator;\n } else {\n throw new Error(\n 'Hit indicator was not initialized. The canvas element may not have been initialized.',\n );\n }\n };\n}\n"],"names":["Vector3","Matrix4","Quaternion","Ray","Angle"],"mappings":"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"}