@vertexvis/viewer 1.0.2-canary.2 → 1.0.2-canary.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/config-20ozv4y8.js.map +1 -1
- package/dist/cjs/controller-BhcNbaX_.js.map +1 -1
- package/dist/cjs/controller-CSwG6gbQ.js.map +1 -1
- package/dist/cjs/cursors-BZmDRtaZ.js.map +1 -1
- package/dist/cjs/dom-BBil4aN3.js.map +1 -1
- package/dist/cjs/dom-CvGkFQon.js.map +1 -1
- package/dist/cjs/entities-D6kgGria.js.map +1 -1
- package/dist/cjs/geometry_pb-BTko2Wi0.js.map +1 -1
- package/dist/cjs/grpc-BsWFEUrc.js.map +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/model-C9WvOKYT.js.map +1 -1
- package/dist/cjs/model-D17EQTIh.js.map +1 -1
- package/dist/cjs/model-DAB4oD5n.js.map +1 -1
- package/dist/cjs/model-DkXCzhs_.js.map +1 -1
- package/dist/cjs/multiElementInteractionHandler-BHvRKVIp.js.map +1 -1
- package/dist/cjs/overlays-B-06bUbI.js.map +1 -1
- package/dist/cjs/queries-Da9I-xMf.js.map +1 -1
- package/dist/cjs/regl-component-HhKCyGQ3.js.map +1 -1
- package/dist/cjs/representation_pb-CrCGjlyP.js.map +1 -1
- package/dist/cjs/results-1wRRZiYG.js.map +1 -1
- package/dist/cjs/row-Cet6xXup.js.map +1 -1
- package/dist/cjs/stencil-Hsr_8Chs.js.map +1 -1
- package/dist/cjs/streamAttributes-D_J-W8-2.js.map +1 -1
- package/dist/cjs/templates-DvjgjnlO.js.map +1 -1
- package/dist/cjs/util-DIJSIQXH.js.map +1 -1
- package/dist/cjs/utils-CibrnHQ4.js.map +1 -1
- package/dist/cjs/utils-D8MbXbwO.js.map +1 -1
- package/dist/cjs/utils-qErVs2Vt.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +6 -8
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +2 -2
- package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +4 -5
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +9 -5
- package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
- package/dist/cjs/viewport-CG1VYkIU.js.map +1 -1
- package/dist/collection/components/scene-tree/errors.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/controller.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/dom.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/errors.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/grpc.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/handlers.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/row.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/viewer-ops.js.map +1 -1
- package/dist/collection/components/scene-tree/scene-tree.js +2 -2
- package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
- package/dist/collection/components/scene-tree-table-cell/utils.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/lib/dom.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/lib/window.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +5 -5
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
- package/dist/collection/components/viewer/utils.js.map +1 -1
- package/dist/collection/components/viewer/viewer.js +9 -5
- package/dist/collection/components/viewer/viewer.js.map +1 -1
- package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js +2 -2
- package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js.map +1 -1
- package/dist/collection/components/viewer-dom-element/utils.js.map +1 -1
- package/dist/collection/components/viewer-dom-element/viewer-dom-element.js +1 -1
- package/dist/collection/components/viewer-dom-element/viewer-dom-element.js.map +1 -1
- package/dist/collection/components/viewer-dom-group/utils.js.map +1 -1
- package/dist/collection/components/viewer-dom-group/viewer-dom-group.js +1 -1
- package/dist/collection/components/viewer-dom-group/viewer-dom-group.js.map +1 -1
- package/dist/collection/components/viewer-dom-renderer/renderer2d.js.map +1 -1
- package/dist/collection/components/viewer-dom-renderer/renderer3d.js.map +1 -1
- package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/dom.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/indicator.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/plane.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/point.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js.map +1 -1
- package/dist/collection/components/viewer-icon/viewer-icon.js.map +1 -1
- package/dist/collection/components/viewer-markup/markup-utils.js.map +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup-components.js.map +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup.js +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/interactions.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow-components.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow.js.map +1 -1
- package/dist/collection/components/viewer-markup-circle/interactions.js.map +1 -1
- package/dist/collection/components/viewer-markup-circle/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-circle/viewer-markup-circle.js.map +1 -1
- package/dist/collection/components/viewer-markup-freeform/interactions.js.map +1 -1
- package/dist/collection/components/viewer-markup-freeform/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-freeform/viewer-markup-freeform.js.map +1 -1
- package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.js.map +1 -1
- package/dist/collection/components/viewer-measurement-details/viewer-measurement-details.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/hitTest.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/interactions.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/utils.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js.map +1 -1
- package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js +1 -1
- package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js.map +1 -1
- package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +1 -1
- package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js.map +1 -1
- package/dist/collection/components/viewer-measurement-precise/viewer-measurement-precise.js.map +1 -1
- package/dist/collection/components/viewer-pin-group/utils.js.map +1 -1
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.js +2 -2
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.js.map +1 -1
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
- package/dist/collection/components/viewer-pin-tool/utils.js.map +1 -1
- package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js +1 -1
- package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js.map +1 -1
- package/dist/collection/components/viewer-teleport-tool/viewer-teleport-tool.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/util.js +1 -2
- package/dist/collection/components/viewer-transform-widget/util.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +3 -3
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/widget.js.map +1 -1
- package/dist/collection/components/viewer-view-cube/viewer-view-cube.js +1 -1
- package/dist/collection/components/viewer-view-cube/viewer-view-cube.js.map +1 -1
- package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js.map +1 -1
- package/dist/collection/lib/annotations/controller.js.map +1 -1
- package/dist/collection/lib/canvases/controller.js.map +1 -1
- package/dist/collection/lib/canvases/mapper.js.map +1 -1
- package/dist/collection/lib/config.js.map +1 -1
- package/dist/collection/lib/cursors.js.map +1 -1
- package/dist/collection/lib/dom.js.map +1 -1
- package/dist/collection/lib/grpc.js.map +1 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/flyToPartKeyInteraction.js.map +1 -1
- package/dist/collection/lib/interactions/flyToPositionKeyInteraction.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApi.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApiOrthographic.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApiPerspective.js.map +1 -1
- package/dist/collection/lib/interactions/mouseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/mouseInteractions.js.map +1 -1
- package/dist/collection/lib/interactions/multiElementInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/multiPointerInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/multiTouchInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/pointerInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/tapInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/touchInteractionHandler.js.map +1 -1
- package/dist/collection/lib/keyBinding.js.map +1 -1
- package/dist/collection/lib/mappers/annotation.js.map +1 -1
- package/dist/collection/lib/mappers/camera.js.map +1 -1
- package/dist/collection/lib/mappers/color.js.map +1 -1
- package/dist/collection/lib/mappers/colorMaterial.js.map +1 -1
- package/dist/collection/lib/mappers/corePb.js.map +1 -1
- package/dist/collection/lib/mappers/corePbJs.js.map +1 -1
- package/dist/collection/lib/mappers/frameStreaming.js.map +1 -1
- package/dist/collection/lib/mappers/geometry.js.map +1 -1
- package/dist/collection/lib/mappers/material.js.map +1 -1
- package/dist/collection/lib/mappers/pagination.js.map +1 -1
- package/dist/collection/lib/mappers/scalar.js.map +1 -1
- package/dist/collection/lib/mappers/streamAttributes.js.map +1 -1
- package/dist/collection/lib/markup/interactions.js.map +1 -1
- package/dist/collection/lib/measurement/controller.js.map +1 -1
- package/dist/collection/lib/measurement/entities.js.map +1 -1
- package/dist/collection/lib/measurement/interactions.js.map +1 -1
- package/dist/collection/lib/measurement/mapper.js.map +1 -1
- package/dist/collection/lib/measurement/model.js.map +1 -1
- package/dist/collection/lib/measurement/overlays.js.map +1 -1
- package/dist/collection/lib/measurement/results.js.map +1 -1
- package/dist/collection/lib/meters.js.map +1 -1
- package/dist/collection/lib/model-views/controller.js.map +1 -1
- package/dist/collection/lib/model-views/mapper.js.map +1 -1
- package/dist/collection/lib/pins/controller.js.map +1 -1
- package/dist/collection/lib/pins/interactions.js.map +1 -1
- package/dist/collection/lib/pmi/controller.js.map +1 -1
- package/dist/collection/lib/pmi/mapper.js.map +1 -1
- package/dist/collection/lib/rendering/canvas.js.map +1 -1
- package/dist/collection/lib/rendering/imageLoaders.js.map +1 -1
- package/dist/collection/lib/rendering/matrices.js.map +1 -1
- package/dist/collection/lib/rendering/timing.js.map +1 -1
- package/dist/collection/lib/rendering/utils.js.map +1 -1
- package/dist/collection/lib/rendering/vectors.js.map +1 -1
- package/dist/collection/lib/scene-items/controller.js.map +1 -1
- package/dist/collection/lib/scene-items/mapper.js.map +1 -1
- package/dist/collection/lib/scenes/camera.js.map +1 -1
- package/dist/collection/lib/scenes/cameraRenderResult.js.map +1 -1
- package/dist/collection/lib/scenes/colorMaterial.js.map +1 -1
- package/dist/collection/lib/scenes/crossSectioner.js.map +1 -1
- package/dist/collection/lib/scenes/mapper.js.map +1 -1
- package/dist/collection/lib/scenes/operations.js.map +1 -1
- package/dist/collection/lib/scenes/queries.js.map +1 -1
- package/dist/collection/lib/scenes/raycaster.js.map +1 -1
- package/dist/collection/lib/scenes/scene.js.map +1 -1
- package/dist/collection/lib/scenes/sceneOperationExecuteResult.js.map +1 -1
- package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
- package/dist/collection/lib/stencil.js.map +1 -1
- package/dist/collection/lib/storage.js.map +1 -1
- package/dist/collection/lib/stream/dispatcher.js.map +1 -1
- package/dist/collection/lib/stream/stream.js.map +1 -1
- package/dist/collection/lib/stream/utils.js.map +1 -1
- package/dist/collection/lib/teleportation/interactions.js.map +1 -1
- package/dist/collection/lib/templates.js.map +1 -1
- package/dist/collection/lib/token.js.map +1 -1
- package/dist/collection/lib/transforms/axis-lines.js.map +1 -1
- package/dist/collection/lib/transforms/axis-rotation.js.map +1 -1
- package/dist/collection/lib/transforms/axis-translation.js.map +1 -1
- package/dist/collection/lib/transforms/controller.js.map +1 -1
- package/dist/collection/lib/transforms/drawable.js.map +1 -1
- package/dist/collection/lib/transforms/hits.js.map +1 -1
- package/dist/collection/lib/transforms/line.js.map +1 -1
- package/dist/collection/lib/transforms/mesh.js.map +1 -1
- package/dist/collection/lib/transforms/shape.js.map +1 -1
- package/dist/collection/lib/transforms/transformation-delta.js.map +1 -1
- package/dist/collection/lib/transforms/util.js.map +1 -1
- package/dist/collection/lib/types/clippingPlanes.js.map +1 -1
- package/dist/collection/lib/types/depthBuffer.js.map +1 -1
- package/dist/collection/lib/types/featureMap.js.map +1 -1
- package/dist/collection/lib/types/flags.js.map +1 -1
- package/dist/collection/lib/types/frame.js.map +1 -1
- package/dist/collection/lib/types/frameCamera.js.map +1 -1
- package/dist/collection/lib/types/loadableResource.js.map +1 -1
- package/dist/collection/lib/types/orientation.js.map +1 -1
- package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
- package/dist/collection/lib/types/standardView.js.map +1 -1
- package/dist/collection/lib/types/stencilBuffer.js.map +1 -1
- package/dist/collection/lib/types/synchronizedClock.js.map +1 -1
- package/dist/collection/lib/types/viewport.js.map +1 -1
- package/dist/collection/lib/visibilityObserver.js.map +1 -1
- package/dist/collection/lib/volume-intersection/controller.js.map +1 -1
- package/dist/collection/lib/volume-intersection/interactions.js.map +1 -1
- package/dist/collection/lib/volume-intersection/model.js.map +1 -1
- package/dist/collection/lib/walk-mode/controller.js.map +1 -1
- package/dist/collection/lib/walk-mode/interactions.js.map +1 -1
- package/dist/collection/lib/walk-mode/model.js.map +1 -1
- package/dist/collection/lib/webgl/regl-component.js.map +1 -1
- package/dist/collection/testing/annotations.js.map +1 -1
- package/dist/collection/testing/canvases.js.map +1 -1
- package/dist/collection/testing/colors.js.map +1 -1
- package/dist/collection/testing/eventually.js.map +1 -1
- package/dist/collection/testing/fixtures.js.map +1 -1
- package/dist/collection/testing/grpc.js +3 -9
- package/dist/collection/testing/grpc.js.map +1 -1
- package/dist/collection/testing/modelViews.js.map +1 -1
- package/dist/collection/testing/pmi.js.map +1 -1
- package/dist/collection/testing/random.js.map +1 -1
- package/dist/collection/testing/resizeObserver.js.map +1 -1
- package/dist/collection/testing/scene-items-helper.js.map +1 -1
- package/dist/collection/testing/sceneTree.js.map +1 -1
- package/dist/collection/testing/viewer.js.map +1 -1
- package/dist/collection/testing/webgl.js.map +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/{p-St4ctu2K.js → p-3-bKfpqr.js} +2 -2
- package/dist/components/{p-St4ctu2K.js.map → p-3-bKfpqr.js.map} +1 -1
- package/dist/components/p-3DqRAYgO.js.map +1 -1
- package/dist/components/p-B-ToCp8-.js.map +1 -1
- package/dist/components/p-B156bTbY.js +5 -0
- package/dist/components/p-B156bTbY.js.map +1 -0
- package/dist/components/p-B9R0QWr4.js.map +1 -1
- package/dist/components/p-BCOD9yfw.js.map +1 -1
- package/dist/components/p-BHAaIoH5.js.map +1 -1
- package/dist/components/{p-Doltf1wO.js → p-BOJJZ1cN.js} +2 -2
- package/dist/components/p-BOJJZ1cN.js.map +1 -0
- package/dist/components/p-BkHp-aAR.js.map +1 -1
- package/dist/components/p-Bkm6H5uq.js.map +1 -1
- package/dist/components/p-C-VWDW9n.js.map +1 -1
- package/dist/components/p-C79PxobX.js.map +1 -1
- package/dist/components/p-CAugdB_8.js.map +1 -1
- package/dist/components/p-CEzVEgdQ.js.map +1 -1
- package/dist/components/p-CGCJ5hbJ.js.map +1 -1
- package/dist/components/p-COlcifvm.js.map +1 -1
- package/dist/components/p-CXTH3zrN.js.map +1 -1
- package/dist/components/p-CZCXdo3t.js.map +1 -1
- package/dist/components/p-Cd7kap5W.js.map +1 -1
- package/dist/components/p-CiSHWNC4.js.map +1 -1
- package/dist/components/p-CjG1fMh1.js.map +1 -1
- package/dist/components/p-CkjXRDNL.js.map +1 -1
- package/dist/components/p-D0KZu516.js.map +1 -1
- package/dist/components/p-D12q-fpW.js.map +1 -1
- package/dist/components/p-D33gVA2W.js.map +1 -1
- package/dist/components/p-DC86ZXai.js.map +1 -1
- package/dist/components/{p-B80hfIq6.js → p-DF4kEsJU.js} +2 -2
- package/dist/components/p-DF4kEsJU.js.map +1 -0
- package/dist/components/p-DRh4_Z-g.js.map +1 -1
- package/dist/components/p-DRnMrHWY.js.map +1 -1
- package/dist/components/{p-b0ZzPHz8.js → p-DUC59SSO.js} +2 -2
- package/dist/components/p-DUC59SSO.js.map +1 -0
- package/dist/components/p-DVW2WZTq.js.map +1 -1
- package/dist/components/p-DZI8pnGz.js.map +1 -1
- package/dist/components/p-Dbz9yUqC.js.map +1 -1
- package/dist/components/p-Yfi0i5Kj.js.map +1 -1
- package/dist/components/p-abSJ29r7.js.map +1 -1
- package/dist/components/p-ahjMltGJ.js.map +1 -1
- package/dist/components/p-bal2RLiw.js.map +1 -1
- package/dist/components/{p-BopQW1sA.js → p-oK38ynrd.js} +2 -2
- package/dist/components/p-oK38ynrd.js.map +1 -0
- package/dist/components/vertex-scene-tree-table-cell.js +1 -1
- package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
- package/dist/components/vertex-scene-tree-table-layout.js +1 -1
- package/dist/components/vertex-scene-tree.js +1 -1
- package/dist/components/vertex-scene-tree.js.map +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js.map +1 -1
- package/dist/components/vertex-viewer-dom-element.js +1 -1
- package/dist/components/vertex-viewer-dom-group.js +1 -1
- package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
- package/dist/components/vertex-viewer-hit-result-indicator.js.map +1 -1
- package/dist/components/vertex-viewer-markup-tool.js.map +1 -1
- package/dist/components/vertex-viewer-markup.js +1 -1
- package/dist/components/vertex-viewer-markup.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-details.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-distance.js +1 -1
- package/dist/components/vertex-viewer-measurement-distance.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-line.js +1 -1
- package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
- package/dist/components/vertex-viewer-measurement-precise.js +1 -1
- package/dist/components/vertex-viewer-measurement-precise.js.map +1 -1
- package/dist/components/vertex-viewer-pin-group.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js.map +1 -1
- package/dist/components/vertex-viewer-transform-widget.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
- package/dist/components/vertex-viewer-view-cube.js +1 -1
- package/dist/components/vertex-viewer-view-cube.js.map +1 -1
- package/dist/components/vertex-viewer-walk-mode-tool.js.map +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/components/vertex-viewer.js.map +1 -1
- package/dist/esm/config-lglER3mU.js.map +1 -1
- package/dist/esm/controller-BMWGs-I6.js.map +1 -1
- package/dist/esm/controller-Iymb_J2R.js.map +1 -1
- package/dist/esm/cursors-BbBDEutb.js.map +1 -1
- package/dist/esm/dom-B3m2VjbN.js.map +1 -1
- package/dist/esm/dom-DX6pEG54.js.map +1 -1
- package/dist/esm/entities-zRken6VS.js.map +1 -1
- package/dist/esm/geometry_pb-BiZRfctN.js.map +1 -1
- package/dist/esm/grpc-CZAYqbTu.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/model-BYW5YIye.js.map +1 -1
- package/dist/esm/model-CLtwOS0o.js.map +1 -1
- package/dist/esm/model-D0EJdHmW.js.map +1 -1
- package/dist/esm/model-DHJ5aE4y.js.map +1 -1
- package/dist/esm/multiElementInteractionHandler-DwjL-r55.js.map +1 -1
- package/dist/esm/overlays-BE1oqniA.js.map +1 -1
- package/dist/esm/queries-DEzCmbTD.js.map +1 -1
- package/dist/esm/regl-component-DmkowWhg.js.map +1 -1
- package/dist/esm/representation_pb-g4f0WC4k.js.map +1 -1
- package/dist/esm/results-CFB6nKu8.js.map +1 -1
- package/dist/esm/row-CiSHWNC4.js.map +1 -1
- package/dist/esm/stencil-BV-7pO4q.js.map +1 -1
- package/dist/esm/streamAttributes-Cp8PEH9A.js.map +1 -1
- package/dist/esm/templates-DRh4_Z-g.js.map +1 -1
- package/dist/esm/util-BCZZYmp4.js.map +1 -1
- package/dist/esm/utils-BvZ9-fs0.js.map +1 -1
- package/dist/esm/utils-DC86ZXai.js.map +1 -1
- package/dist/esm/utils-D_pIldrS.js.map +1 -1
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +6 -8
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +2 -2
- package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-box-query-tool.entry.js +2 -2
- package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
- package/dist/esm/vertex-viewer-dom-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-icon.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup-arrow_3.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup.entry.js +1 -1
- package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-details.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-distance.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +2 -2
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-precise.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-group.entry.js +2 -2
- package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-tool.entry.js +1 -1
- package/dist/esm/vertex-viewer-pin-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-teleport-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-transform-widget.entry.js +4 -5
- package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-view-cube.entry.js +1 -1
- package/dist/esm/vertex-viewer-view-cube.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-walk-mode-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer.entry.js +9 -5
- package/dist/esm/vertex-viewer.entry.js.map +1 -1
- package/dist/esm/viewport-C8WQZxvx.js.map +1 -1
- package/dist/types/regl-shape.d.ts +1 -1
- package/dist/viewer/index.esm.js.map +1 -1
- package/dist/viewer/{p-eac63070.entry.js → p-051b5154.entry.js} +2 -2
- package/dist/viewer/p-051b5154.entry.js.map +1 -0
- package/dist/viewer/{p-3d3a7eeb.entry.js → p-0984c51f.entry.js} +2 -2
- package/dist/viewer/{p-3d3a7eeb.entry.js.map → p-0984c51f.entry.js.map} +1 -1
- package/dist/viewer/{p-864f40c7.entry.js → p-11cf755a.entry.js} +2 -2
- package/dist/viewer/p-11cf755a.entry.js.map +1 -0
- package/dist/viewer/{p-29d14611.entry.js → p-16775f7d.entry.js} +2 -2
- package/dist/viewer/p-16775f7d.entry.js.map +1 -0
- package/dist/viewer/{p-5a85cae5.entry.js → p-1eb636f8.entry.js} +2 -2
- package/dist/viewer/p-1eb636f8.entry.js.map +1 -0
- package/dist/viewer/{p-e993f300.entry.js → p-228d1d43.entry.js} +2 -2
- package/dist/viewer/p-228d1d43.entry.js.map +1 -0
- package/dist/viewer/p-33f44cc1.entry.js.map +1 -1
- package/dist/viewer/{p-3300d3dc.entry.js → p-35601c85.entry.js} +2 -2
- package/dist/viewer/p-35601c85.entry.js.map +1 -0
- package/dist/viewer/p-47766566.entry.js.map +1 -1
- package/dist/viewer/p-6e3a6bbd.entry.js.map +1 -1
- package/dist/viewer/p-7f388b45.entry.js.map +1 -1
- package/dist/viewer/p-89544066.entry.js.map +1 -1
- package/dist/viewer/{p-07b99ac9.entry.js → p-8c369777.entry.js} +2 -2
- package/dist/viewer/p-8c369777.entry.js.map +1 -0
- package/dist/viewer/{p-e59983dc.entry.js → p-9835c5e2.entry.js} +2 -2
- package/dist/viewer/p-9835c5e2.entry.js.map +1 -0
- package/dist/viewer/{p-aa95e21a.entry.js → p-9d8ff406.entry.js} +2 -2
- package/dist/viewer/p-9d8ff406.entry.js.map +1 -0
- package/dist/viewer/p-BDvACHun.js.map +1 -1
- package/dist/viewer/p-BIkuvTVH.js.map +1 -1
- package/dist/viewer/p-BRPkbTVP.js.map +1 -1
- package/dist/viewer/p-BsBIynwj.js.map +1 -1
- package/dist/viewer/p-BxtKMwBH.js.map +1 -1
- package/dist/viewer/p-C4y4Noe-.js.map +1 -1
- package/dist/viewer/p-C6KrfydC.js.map +1 -1
- package/dist/viewer/p-C7dYsPFU.js.map +1 -1
- package/dist/viewer/p-C9Cqbq6H.js.map +1 -1
- package/dist/viewer/p-CVWO4w6b.js.map +1 -1
- package/dist/viewer/p-ChqXy0cG.js.map +1 -1
- package/dist/viewer/p-CiSHWNC4.js.map +1 -1
- package/dist/viewer/p-CjG1fMh1.js.map +1 -1
- package/dist/viewer/p-Cs5KOvOQ.js.map +1 -1
- package/dist/viewer/p-CyGlYje2.js.map +1 -1
- package/dist/viewer/p-D6eJC1q4.js.map +1 -1
- package/dist/viewer/p-DC86ZXai.js.map +1 -1
- package/dist/viewer/p-DRh4_Z-g.js.map +1 -1
- package/dist/viewer/p-DUX5FvBC.js.map +1 -1
- package/dist/viewer/p-DX6pEG54.js.map +1 -1
- package/dist/viewer/p-D_ixWHO7.js.map +1 -1
- package/dist/viewer/p-DacE-wPp.js.map +1 -1
- package/dist/viewer/p-Dp56p_jX.js.map +1 -1
- package/dist/viewer/p-EsKoKfmx.js.map +1 -1
- package/dist/viewer/p-F8e15or2.js.map +1 -1
- package/dist/viewer/p-Jfxh0jq9.js.map +1 -1
- package/dist/viewer/p-WPRMWirY.js.map +1 -1
- package/dist/viewer/p-_93RRNxT.js.map +1 -1
- package/dist/viewer/p-a8a81cba.entry.js +5 -0
- package/dist/viewer/p-a8a81cba.entry.js.map +1 -0
- package/dist/viewer/p-a9282481.entry.js.map +1 -1
- package/dist/viewer/{p-63f4f702.entry.js → p-c7e62d66.entry.js} +2 -2
- package/dist/viewer/p-c7e62d66.entry.js.map +1 -0
- package/dist/viewer/p-d37e647b.entry.js.map +1 -1
- package/dist/viewer/{p-302f2078.entry.js → p-d9fe788f.entry.js} +2 -2
- package/dist/viewer/p-d9fe788f.entry.js.map +1 -0
- package/dist/viewer/p-e9b83dae.entry.js.map +1 -1
- package/dist/viewer/{p-70f3629d.entry.js → p-f271dc4a.entry.js} +2 -2
- package/dist/viewer/p-f271dc4a.entry.js.map +1 -0
- package/dist/viewer/p-f65c0769.entry.js.map +1 -1
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +7 -7
- package/dist/components/p-B80hfIq6.js.map +0 -1
- package/dist/components/p-BopQW1sA.js.map +0 -1
- package/dist/components/p-DNtS2F8J.js +0 -5
- package/dist/components/p-DNtS2F8J.js.map +0 -1
- package/dist/components/p-Doltf1wO.js.map +0 -1
- package/dist/components/p-b0ZzPHz8.js.map +0 -1
- package/dist/viewer/p-07b99ac9.entry.js.map +0 -1
- package/dist/viewer/p-29d14611.entry.js.map +0 -1
- package/dist/viewer/p-302f2078.entry.js.map +0 -1
- package/dist/viewer/p-3300d3dc.entry.js.map +0 -1
- package/dist/viewer/p-5a85cae5.entry.js.map +0 -1
- package/dist/viewer/p-60c915e3.entry.js +0 -5
- package/dist/viewer/p-60c915e3.entry.js.map +0 -1
- package/dist/viewer/p-63f4f702.entry.js.map +0 -1
- package/dist/viewer/p-70f3629d.entry.js.map +0 -1
- package/dist/viewer/p-864f40c7.entry.js.map +0 -1
- package/dist/viewer/p-aa95e21a.entry.js.map +0 -1
- package/dist/viewer/p-e59983dc.entry.js.map +0 -1
- package/dist/viewer/p-e993f300.entry.js.map +0 -1
- package/dist/viewer/p-eac63070.entry.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../../src/components/viewer/viewer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\nimport { SceneViewAPIClient } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb_service';\nimport { toProtoDuration, WebSocketClientImpl } from '@vertexvis/stream-api';\nimport {\n BasicInteractionHandler,\n BasicViewer,\n Color,\n Disposable,\n EventDispatcher,\n UUID,\n} from '@vertexvis/utils';\nimport classnames from 'classnames';\n\nimport {\n CrossSectioningOptions,\n FeatureHighlightOptions,\n FeatureLineOptions,\n FrameType,\n PhantomOptions,\n SceneComparisonOptions,\n SelectionHighlightingOptions,\n StreamAttributes,\n} from '../../interfaces';\nimport {\n AnnotationController,\n AnnotationState,\n} from '../../lib/annotations/controller';\nimport { CanvasController } from '../../lib/canvases';\nimport {\n Config,\n parseAndValidateConfig,\n PartialConfig,\n} from '../../lib/config';\nimport { Cursor, CursorManager } from '../../lib/cursors';\nimport { cssCursor } from '../../lib/dom';\nimport { Environment } from '../../lib/environment';\nimport {\n ComponentInitializationError,\n InteractionHandlerError,\n MissingJWTError,\n ViewerInitializationError,\n} from '../../lib/errors';\nimport {\n InteractionApiOrthographic,\n InteractionApiPerspective,\n} from '../../lib/interactions';\nimport { BaseInteractionHandler } from '../../lib/interactions/baseInteractionHandler';\nimport { FlyToPartKeyInteraction } from '../../lib/interactions/flyToPartKeyInteraction';\nimport { FlyToPositionKeyInteraction } from '../../lib/interactions/flyToPositionKeyInteraction';\nimport { InteractionApi } from '../../lib/interactions/interactionApi';\nimport { InteractionHandler } from '../../lib/interactions/interactionHandler';\nimport { KeyInteraction } from '../../lib/interactions/keyInteraction';\nimport { MouseInteractionHandler } from '../../lib/interactions/mouseInteractionHandler';\nimport { MultiPointerInteractionHandler } from '../../lib/interactions/multiPointerInteractionHandler';\nimport { PointerInteractionHandler } from '../../lib/interactions/pointerInteractionHandler';\nimport { TapEventDetails } from '../../lib/interactions/tapEventDetails';\nimport { TapInteractionHandler } from '../../lib/interactions/tapInteractionHandler';\nimport { TouchInteractionHandler } from '../../lib/interactions/touchInteractionHandler';\nimport { fromPbFrameOrThrow, toPbCameraTypeOrThrow } from '../../lib/mappers';\nimport { paintTime, Timing } from '../../lib/meters';\nimport { ModelViewController } from '../../lib/model-views/controller';\nimport { PmiController } from '../../lib/pmi';\nimport {\n CanvasRenderer,\n createCanvasRenderer,\n measureCanvasRenderer,\n} from '../../lib/rendering';\nimport { SceneItemController } from '../../lib/scene-items/controller';\nimport { Scene } from '../../lib/scenes/scene';\nimport { writeDOM } from '../../lib/stencil';\nimport {\n getStorageEntry,\n StorageKeys,\n upsertStorageEntry,\n} from '../../lib/storage';\nimport {\n Connected,\n Connecting,\n ConnectionFailed,\n Disconnected,\n ViewerStreamState,\n} from '../../lib/stream/state';\nimport { ViewerStream } from '../../lib/stream/stream';\nimport {\n FrameCamera,\n Orientation,\n SceneViewSummary,\n StencilBufferManager,\n Viewport,\n} from '../../lib/types';\nimport { Frame } from '../../lib/types/frame';\nimport { FrameCameraType } from '../../lib/types/frameCamera';\nimport { VisibilityObserver } from '../../lib/visibilityObserver';\nimport {\n DEFAULT_VIEWER_SCENE_WAIT_MS,\n getElementBoundingClientRect,\n getElementPropertyValue,\n} from './utils';\n\ninterface ConnectedStatus {\n jwt: string;\n status: 'connected';\n}\n\ninterface ConnectingStatus {\n status: 'connecting';\n}\n\ninterface DisconnectedStatus {\n status: 'disconnected';\n}\n\ninterface ConnectionFailedStatus {\n status: 'connection-failed';\n errorMessage: string;\n}\n\nexport interface LoadOptions {\n cameraType?: FrameCameraType;\n}\n\n/**\n * Internal state values for the component. Used to preserve values across live\n * reload refreshes.\n */\ninterface StateMap {\n streamWorldOrientation?: Orientation;\n cursorManager: CursorManager;\n interactionTarget?: HTMLElement;\n streamState: ViewerStreamState;\n streamListeners?: Disposable;\n depthBuffersOverrideForAnnotations?: boolean;\n}\n\n/** @internal */\nexport type ConnectionStatus =\n | ConnectingStatus\n | ConnectedStatus\n | DisconnectedStatus\n | ConnectionFailedStatus;\n\n@Component({\n tag: 'vertex-viewer',\n styleUrl: 'viewer.css',\n shadow: true,\n})\nexport class Viewer implements BasicViewer {\n @Element() private hostElement!: HTMLVertexViewerElement;\n\n /**\n * A URN of the scene resource to load when the component is mounted in the\n * DOM tree. The specified resource is a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n */\n @Prop() public src?: string;\n\n /**\n * The Client ID associated with your Vertex Application.\n */\n @Prop() public clientId?: string;\n\n /**\n * Property used for internals or testing.\n *\n * @internal\n */\n @Prop({ mutable: true }) public deviceId?: string;\n\n /**\n * An object or JSON encoded string that defines configuration settings for\n * the viewer.\n */\n @Prop() public config?: PartialConfig | string;\n\n /**\n * Sets the default environment for the viewer. This setting is used for\n * auto-configuring network hosts.\n *\n * Use the `config` property for manually setting hosts.\n *\n * @see Viewer.config\n */\n @Prop() public configEnv: Environment = 'platprod';\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public resolvedConfig?: Config;\n\n /**\n * Enables or disables the default mouse and touch interactions provided by\n * the viewer. Enabled by default.\n */\n @Prop() public cameraControls = true;\n\n /**\n * The type of camera model to represent the scene with. Can be either\n * `perspective` or `orthographic`, and defaults to `perspective`.\n */\n @Prop({ mutable: true, reflect: true }) public cameraType: FrameCameraType =\n 'perspective';\n\n /**\n * Enables or disables the default keyboard shortcut interactions provided by\n * the viewer. Enabled by default, requires `cameraControls` being enabled.\n *\n */\n @Prop() public keyboardControls = true;\n\n /**\n * Sets the rotation interaction behavior. True by default.\n *\n * When rotateAroundTapPoint is true and the user clicks on geometry, then the model will rotate\n * around the point that was clicked. When rotateAroundTapPoint is true and the user clicks\n * in empty space (not on geometry), then the model will rotate around the center of the viewport.\n *\n * When rotateAroundTapPoint is false, then the model will always rotate around the center of the viewport.\n */\n @Prop() public rotateAroundTapPoint = true;\n\n /**\n * A token that can be used to make API calls to other Vertex services.\n *\n * @internal\n */\n @Prop({ mutable: true }) public token?: string;\n\n /**\n * Specifies when a depth buffer is requested from rendering. Possible values\n * are:\n *\n * * `undefined`: A depth buffer is never requested.\n * * `final`: A depth buffer is only requested on the final frame.\n * * `all`: A depth buffer is requested for every frame.\n *\n * Depth buffers can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance. Some features,\n * like measurement and pins, require that depth buffers are requested and\n * will override an 'undefined' value when the feature is active.\n */\n @Prop() public depthBuffers?: FrameType;\n\n /**\n * Specifies how phantom parts should appear.\n * The opacity must be between 0 and 1, where 0 is completely hidden and 1 is completely visible.\n */\n @Prop({ attribute: null })\n public phantom?: PhantomOptions = { opacity: 0.1 };\n\n /**\n * Specifies whether to use the default lights for the scene. When false, default\n * lights are used. When true, no default lights are used, and the lights must\n * be specified separately.\n */\n @Prop() public noDefaultLights = false;\n\n /**\n * Specifies whether to enable temporal refinement of still images.\n */\n @Prop() public enableTemporalRefinement = true;\n\n /**\n * Specifies experimental rendering options. For Vertex use only.\n *\n * @internal\n */\n @Prop() public experimentalRenderingOptions = '';\n\n /**\n * Specifies if and how to render feature lines.\n */\n @Prop({ attribute: null }) public featureLines?: FeatureLineOptions;\n\n /**\n * Specifies the halo selection properties.\n * Parameter notes:\n * * lineWidth values supported currently are 0-5. This width is currently the value x2. For example, 1 will have a pixel width of 2.\n * * color is optional. This will be the color of the selected items in the viewer.\n * * opacity is also optional. The opacity will be applied to everything selected besides the highlighted outer line.\n */\n @Prop({ attribute: null })\n public selectionHighlighting?: SelectionHighlightingOptions;\n\n /**\n * Specifies how selected features should be highlighted.\n */\n @Prop({ attribute: null })\n public featureHighlighting?: FeatureHighlightOptions;\n\n /**\n * Specifies if and how to compare to another scene\n */\n @Prop({ attribute: null })\n public sceneComparison?: SceneComparisonOptions;\n\n /**\n * Specifies options related to presentation of cross-sections.\n * Defaults to showing the cross-section with an end cap that matches the part color.\n */\n @Prop({ attribute: null })\n public crossSectioning?: CrossSectioningOptions = {\n endCapEnabled: true,\n endCapColor: undefined,\n };\n\n /**\n * Specifies when a feature map is returned from rendering. Feature maps\n * include information about the surfaces, edges and cross-sections that are\n * in a frame.\n *\n * Possible values are:\n *\n * * `undefined`: A feature map is never requested.\n * * `final`: A feature map is only requested on the final frame.\n * * `all`: A feature map is requested for every frame.\n *\n * Feature maps can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance.\n */\n @Prop() public featureMaps?: FrameType;\n\n /**\n * An optional value that will debounce frame updates when resizing\n * this viewer element.\n */\n @Prop() public resizeDebounce = 100;\n\n /**\n * The last frame that was received, which can be used to inspect the scene\n * and camera information.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public frame: Frame | undefined;\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public stream?: ViewerStream;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public stencilBuffer!: StencilBufferManager;\n\n /**\n * Represents the current viewport of the viewer. The viewport represents the\n * dimensions of the canvas where a frame is rendered. It contains methods for\n * translating between viewport coordinates, frame coordinates and world\n * coordinates.\n */\n @Prop({ mutable: true })\n public viewport: Viewport = Viewport.fromDimensions(Dimensions.create(0, 0));\n\n /**\n * The annotation controller for accessing annotations associated with the\n * scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public annotations: AnnotationController | undefined;\n\n /**\n * The controller for accessing model views associated with the scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public modelViews: ModelViewController | undefined;\n\n /**\n * The controller for accessing and viewing PMI.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public pmi: PmiController | undefined;\n\n /**\n * The controller for accessing and viewing SceneItems.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public sceneItems: SceneItemController | undefined;\n\n /**\n * The controller for accessing canvases and their associated markup.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public canvases: CanvasController | undefined;\n\n /**\n * Experimental flag indicating that connections to Vertex should be established\n * if the viewer is initially hidden through its own style or computed style, or\n * has not been scrolled into view.\n *\n * *Caution:* Setting this flag can result in reduced performance,\n * and should generally not be used in a production setting.\n */\n @Prop()\n public experimentalSkipVisibilityCheck = false;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer.\n * The event includes the location of the tap or click.\n *\n * This event can be used in combination with the {@link scene} method\n * to query for items at the point of the tap.\n *\n * @see {@link Scene.raycaster Scene.raycaster} for more information.\n */\n @Event() public tap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user double taps or clicks a location in the viewer.\n * The event includes the location of the first tap or click.\n */\n @Event() public doubletap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer and the\n * configured amount of time passes without receiving a mouseup or touchend.\n * The event includes the location of the tap or click.\n */\n @Event() public longpress!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event when a frame has been received by the viewer. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameReceived!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a frame has been drawn to the viewer's canvas. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameDrawn!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a provided oauth2 token is about to expire, or is about to expire,\n * causing issues with establishing a websocket connection, or performing API calls.\n */\n @Event() public tokenExpired!: EventEmitter<void>;\n\n /**\n * Emits an event when the connection status changes for the viewer\n */\n @Event() public connectionChange!: EventEmitter<ConnectionStatus>;\n\n /**\n * Emits an event when the scene is ready to be interacted with.\n */\n @Event() public sceneReady!: EventEmitter<void>;\n\n /**\n * Emits an event when a frame is received with a different scene attribute.\n */\n @Event() public sceneChanged!: EventEmitter<void>;\n\n /**\n * Emits an event when the user has started an interaction.\n */\n @Event() public interactionStarted!: EventEmitter<void>;\n\n /**\n * Emits an event when the user hs finished an interaction.\n */\n @Event() public interactionFinished!: EventEmitter<void>;\n\n /**\n * Emits an event when the camera type changes.\n */\n @Event() public cameraTypeChanged!: EventEmitter<FrameCameraType>;\n\n /**\n * Emits an event when the state for annotation changes.\n */\n @Event() public annotationStateChanged!: EventEmitter<AnnotationState>;\n\n /**\n * Used for internals or testing.\n *\n * @internal\n */\n @Event() public deviceIdChange!: EventEmitter<string>;\n\n @Event() public dimensionschange!: EventEmitter<Dimensions.Dimensions>;\n\n @State() private dimensions?: Dimensions.Dimensions;\n @State() private hostDimensions?: Dimensions.Dimensions;\n @State() private errorMessage?: string;\n\n @State() private cursor?: Cursor;\n\n /**\n * This stores internal state that you want to preserve across live-reloads,\n * but shouldn't trigger a refresh if the data changes. Marking this with\n * @State to allow to preserve state across live-reloads.\n */\n @State() private stateMap: StateMap = {\n cursorManager: new CursorManager(),\n streamState: { type: 'disconnected' },\n };\n\n private viewerContainerElement?: HTMLElement;\n private canvasContainerElement?: HTMLElement;\n private canvasElement?: HTMLCanvasElement;\n\n private canvasRenderer!: CanvasRenderer;\n\n private mutationObserver?: MutationObserver;\n private styleObserver?: MutationObserver;\n private resizeObserver?: ResizeObserver;\n private visibilityObserver?: VisibilityObserver;\n private isResizing?: boolean;\n private isResizeUpdate?: boolean;\n private isVisible = false;\n\n private resizeTimer?: NodeJS.Timeout;\n private streamAttributesUpdateTimer?: NodeJS.Timeout;\n private frameRenderVersion = 0;\n\n private interactionHandlers: InteractionHandler[] = [];\n private defaultInteractionHandlerDisposables: Array<Disposable> = [];\n private tapHandlerDisposable?: Disposable;\n private interactionApi!: InteractionApi;\n private tapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private defaultTapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private baseInteractionHandler?: BaseInteractionHandler;\n\n private internalFrameDrawnDispatcher = new EventDispatcher<Frame>();\n\n public constructor() {\n this.handleElementResize = this.handleElementResize.bind(this);\n this.handleVisibilityChange = this.handleVisibilityChange.bind(this);\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.stencilBuffer ??= new StencilBufferManager(this.hostElement);\n\n this.visibilityObserver = new VisibilityObserver(\n this.handleVisibilityChange\n );\n this.isVisible = this.visibilityObserver.isVisible(this.hostElement);\n\n if (!this.isVisible) {\n this.visibilityObserver?.observe(this.hostElement);\n }\n\n this.stream?.resume();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.updateResolvedConfig();\n this.calculateComponentDimensions();\n\n this.resizeObserver = new ResizeObserver(this.handleElementResize);\n this.registerSlotChangeListeners();\n\n const config = this.getResolvedConfig();\n const client = new SceneViewAPIClient(config.network.sceneViewHost);\n\n this.annotations = new AnnotationController(\n client,\n () => this.token,\n () => this.deviceId\n );\n this.annotations.onStateChange.on((state: AnnotationState) => {\n this.annotationStateChanged.emit(state);\n\n const numberOfAnnotationSets = Object.keys(state.annotations).length;\n this.handleAnnotationSetsChange(numberOfAnnotationSets);\n });\n\n this.stream =\n this.stream ??\n new ViewerStream(new WebSocketClientImpl(), {\n loggingEnabled: config.flags.logWsMessages,\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n this.addStreamListeners();\n\n this.modelViews = new ModelViewController(\n client,\n this.stream,\n () => this.token,\n () => this.deviceId\n );\n\n this.pmi = new PmiController(\n client,\n () => this.token,\n () => this.deviceId\n );\n\n this.sceneItems = new SceneItemController(\n client,\n () => this.token,\n () => this.deviceId\n );\n\n this.canvases = new CanvasController(\n client,\n () => this.token,\n () => this.deviceId\n );\n\n this.updateStreamAttributes();\n this.stateMap.cursorManager.onChanged.on(() => this.handleCursorChanged());\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n this.interactionApi = this.createInteractionApi();\n this.isVisible =\n this.visibilityObserver?.isVisible(this.hostElement) ?? true;\n\n if (this.canvasContainerElement != null) {\n this.resizeObserver?.observe(this.canvasContainerElement);\n }\n\n this.loadOrResumeStream().catch((e) => {\n console.error('Error loading scene', e);\n });\n\n await this.initializeDefaultInteractionHandlers();\n this.injectViewerApi();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.visibilityObserver?.disconnect();\n this.annotations?.disconnect();\n\n this.stream?.pause();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div\n ref={(ref) => (this.viewerContainerElement = ref)}\n class=\"viewer-container\"\n style={{ cursor: cssCursor(this.cursor ?? '') }}\n onContextMenu={(event) => event.preventDefault()}\n >\n <div\n ref={(ref) => (this.canvasContainerElement = ref)}\n class={classnames('canvas-container', {\n 'enable-pointer-events ': window.PointerEvent != null,\n })}\n >\n <canvas\n ref={(ref) => {\n this.canvasElement = ref;\n this.stateMap.interactionTarget = ref;\n }}\n class=\"canvas\"\n ></canvas>\n {this.errorMessage != null ? (\n <div class=\"error-message\">{this.errorMessage}</div>\n ) : null}\n </div>\n <slot></slot>\n </div>\n </Host>\n );\n }\n\n /**\n * @internal\n */\n @Method()\n public async dispatchFrameDrawn(frame: Frame): Promise<void> {\n this.frame = frame;\n this.internalFrameDrawnDispatcher.emit(frame);\n this.frameDrawn.emit(frame);\n }\n\n /**\n * Registers and initializes an interaction handler with the viewer. Returns a\n * `Disposable` that should be used to deregister the interaction handler.\n *\n * `InteractionHandler`s are used to build custom mouse and touch interactions\n * for the viewer. Use `<vertex-viewer camera-controls=\"false\" />` to disable\n * the default camera controls provided by the viewer.\n *\n * @example\n * ```\n * class CustomInteractionHandler extends InteractionHandler {\n * private element: HTMLElement;\n * private api: InteractionApi;\n *\n * public dispose(): void {\n * this.element.removeEventListener('click', this.handleElementClick);\n * }\n *\n * public initialize(element: HTMLElement, api: InteractionApi): void {\n * this.api = api;\n * this.element = element;\n * this.element.addEventListener('click', this.handleElementClick);\n * }\n *\n * private handleElementClick = (event: MouseEvent) => {\n * api.tap({ x: event.clientX, y: event.clientY });\n * }\n * }\n *\n * const viewer = document.querySelector(\"vertex-viewer\");\n * viewer.registerInteractionHandler(new CustomInteractionHandler);\n * ```\n *\n * @param interactionHandler The interaction handler to register.\n * @returns {Promise<void>} A promise containing the disposable to use to\n * deregister the handler.\n */\n @Method()\n public async registerInteractionHandler(\n interactionHandler: InteractionHandler\n ): Promise<Disposable> {\n this.interactionHandlers.push(interactionHandler);\n this.initializeInteractionHandler(interactionHandler);\n return {\n dispose: () => {\n const index = this.interactionHandlers.indexOf(interactionHandler);\n if (index !== -1) {\n this.interactionHandlers[index].dispose();\n this.interactionHandlers.splice(index, 1);\n }\n },\n };\n }\n\n /**\n * Registers and initializes an interaction handler with the viewer. Returns a\n * `Disposable` that should be used to deregister the interaction handler.\n *\n * `InteractionHandler`s are used to build custom mouse and touch interactions\n * for the viewer. Use `<vertex-viewer camera-controls=\"false\" />` to disable\n * the default camera controls provided by the viewer.\n *\n * @example\n * ```\n * class CustomInteractionHandler extends InteractionHandler {\n * private element: HTMLElement;\n * private api: InteractionApi;\n *\n * public dispose(): void {\n * this.element.removeEventListener('click', this.handleElementClick);\n * }\n *\n * public initialize(element: HTMLElement, api: InteractionApi): void {\n * this.api = api;\n * this.element = element;\n * this.element.addEventListener('click', this.handleElementClick);\n * }\n *\n * private handleElementClick = (event: MouseEvent) => {\n * api.tap({ x: event.clientX, y: event.clientY });\n * }\n * }\n *\n * const viewer = document.querySelector(\"vertex-viewer\");\n * viewer.registerInteractionHandler(new CustomInteractionHandler);\n * ```\n *\n * @param interactionHandler The interaction handler to register.\n * @returns {Promise<void>} A promise containing the disposable to use to\n * deregister the handler.\n */\n @Method()\n public async registerBasicInteractionHandler(\n interactionHandler: BasicInteractionHandler\n ): Promise<Disposable> {\n this.interactionHandlers.push(interactionHandler);\n this.initializeBasicInteractionHandler(interactionHandler);\n return {\n dispose: () => {\n const index = this.interactionHandlers.indexOf(interactionHandler);\n if (index !== -1) {\n this.interactionHandlers[index].dispose();\n this.interactionHandlers.splice(index, 1);\n }\n },\n };\n }\n\n /**\n * Registers a key interaction to be invoked when a specific set of\n * keys are pressed during a `tap` event.\n *\n * `KeyInteraction`s are used to build custom keyboard shortcuts for the\n * viewer using the current state of they keyboard to determine whether\n * the `fn` should be invoked. Use `<vertex-viewer keyboard-controls=\"false\" />`\n * to disable the default keyboard shortcuts provided by the viewer.\n *\n * @example\n * ```\n * class CustomKeyboardInteraction extends KeyInteraction<TapEventDetails> {\n * constructor(private viewer: HTMLVertexViewerElement) {}\n *\n * public predicate(keyState: KeyState): boolean {\n * return keyState['Alt'];\n * }\n *\n * public async fn(event: TapEventDetails) {\n * const scene = await this.viewer.scene();\n * const result = await scene.raycaster().hitItems(event.position);\n *\n * if (result.hits.length > 0) {\n * await scene\n * .camera()\n * .fitTo(q => q.withItemId(result.hits[0].itemId))\n * .render();\n * }\n * }\n * }\n * ```\n *\n * @param keyInteraction - The `KeyInteraction` to register.\n */\n @Method()\n public async registerTapKeyInteraction(\n keyInteraction: KeyInteraction<TapEventDetails>\n ): Promise<void> {\n this.tapKeyInteractions = [...this.tapKeyInteractions, keyInteraction];\n }\n\n /**\n * The HTML element that will handle interaction events from the user. Used by\n * components to listen for interaction events from the same element as the\n * viewer. Note, this property maybe removed in the future when refactoring\n * our interaction handling.\n *\n * @internal\n * @deprecated Use `InteractionHandler`.\n */\n @Method()\n public async getInteractionTarget_DEPRECATED(): Promise<HTMLElement> {\n if (this.stateMap.interactionTarget != null) {\n return this.stateMap.interactionTarget;\n } else throw new Error('Interaction target is undefined.');\n }\n\n /**\n * Adds a cursor to the viewer, and displays it if the cursor has the highest\n * priority.\n *\n * Cursors are managed as a prioritized list. A cursor is displayed if it has\n * the highest priority or if the cursor is the most recently added cursor in\n * the set of cursors with the same priority.\n *\n * To remove a cursor, call `dispose()` on the returned disposable.\n *\n * @param cursor The cursor to add.\n * @param priority The priority of the cursor.\n * @returns A disposable that can be used to remove the cursor.\n * @see See {@link CursorManager} for constants to pass to `priority`.\n */\n @Method()\n public async addCursor(\n cursor: Cursor,\n priority?: number\n ): Promise<Disposable> {\n return this.stateMap.cursorManager.add(cursor, priority);\n }\n\n @Method()\n public async getInteractionHandlers(): Promise<InteractionHandler[]> {\n return this.interactionHandlers;\n }\n\n /**\n * @internal\n * @ignore\n */\n @Method()\n public async getKeyInteractions(): Promise<\n KeyInteraction<TapEventDetails>[]\n > {\n return this.tapKeyInteractions;\n }\n\n @Method()\n public async getBaseInteractionHandler(): Promise<\n BaseInteractionHandler | undefined\n > {\n return this.baseInteractionHandler;\n }\n\n /**\n * @deprecated Use `token`.\n */\n @Method()\n public async getJwt(): Promise<string | undefined> {\n return this.token;\n }\n\n @Watch('src')\n public handleSrcChanged(src: string | undefined): void {\n if (src != null) {\n this.load(src, { cameraType: this.cameraType });\n } else {\n this.unload();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('cameraControls')\n protected handleCameraControlsChanged(): void {\n this.initializeDefaultCameraInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('keyboardControls')\n protected handleKeyboardControlsChanged(): void {\n this.initializeDefaultKeyboardInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('rotateAroundTapPoint')\n protected handleRotateAboutTapPointChanged(): void {\n this.updateStreamAttributes();\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n } else {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate');\n }\n }\n\n @Watch('cameraType')\n protected handleCameraTypeChanged(\n updatedCameraType: string,\n previousCameraType: string\n ): void {\n if (updatedCameraType !== previousCameraType) {\n this.updateCameraType();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('crossSectioning')\n @Watch('depthBuffers')\n @Watch('experimentalRenderingOptions')\n @Watch('featureHighlighting')\n @Watch('featureLines')\n @Watch('featureMaps')\n @Watch('noDefaultLights')\n @Watch('phantom')\n @Watch('sceneComparison')\n @Watch('selectionHighlighting')\n protected handleStreamAttributesChanged(): void {\n this.handleUpdateStreamAttributesWithTimer();\n }\n\n // Group stream attribute changes happening in quick succession to\n // ensure the correct attributes are applied to the stream\n private handleUpdateStreamAttributesWithTimer = (): void => {\n const streamAttributesUpdateThrottleInMilliseconds = 50;\n\n if (this.streamAttributesUpdateTimer == null) {\n this.streamAttributesUpdateTimer = setTimeout(() => {\n this.streamAttributesUpdateTimer = undefined;\n this.updateStreamAttributes();\n }, streamAttributesUpdateThrottleInMilliseconds);\n }\n };\n\n /**\n * @ignore\n */\n @Watch('enableTemporalRefinement')\n protected handleEnableTemporalRefinementChanged(): void {\n this.updateEnableTemporalRefinement();\n }\n\n /**\n * @ignore\n */\n @Watch('config')\n protected handleConfigChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * @ignore\n */\n @Watch('configEnv')\n protected handleConfigEnvChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * Loads the given scene into the viewer and return a `Promise` that\n * resolves when the scene has been loaded. The specified scene is\n * provided as a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n *\n * @param urn The URN of the resource to load.\n * @param options Optional configurations when loading the scene.\n * cameraType (Optional) The camera type to load. If not included, the default camera type for the resource will be used.\n */\n @Method()\n public async load(urn: string, options?: LoadOptions): Promise<void> {\n const shouldLoadBasedOnVisibility =\n this.experimentalSkipVisibilityCheck || this.isVisible;\n\n if (!shouldLoadBasedOnVisibility) {\n console.debug(\n 'Detected the viewer is hidden. Delaying load until visible.'\n );\n\n return;\n }\n\n if (this.stream != null && this.dimensions != null) {\n const { EXPERIMENTAL_annotationPollingIntervalInMs } =\n this.getResolvedConfig();\n\n this.calculateComponentDimensions();\n\n this.stream.update({\n streamAttributes: this.getStreamAttributes(),\n config: parseAndValidateConfig(this.configEnv, this.config),\n dimensions: this.dimensions,\n frameBgColor: this.getBackgroundColor(),\n });\n const state = await this.stream?.load(\n urn,\n this.clientId,\n this.getDeviceId(),\n this.getResolvedConfig(),\n options?.cameraType\n );\n\n if (state.type === 'connected') {\n this.sceneReady.emit();\n\n if (EXPERIMENTAL_annotationPollingIntervalInMs !== undefined) {\n this.annotations?.connect(EXPERIMENTAL_annotationPollingIntervalInMs);\n }\n }\n } else {\n throw new ViewerInitializationError(\n 'Cannot load scene. Viewer has not been initialized.'\n );\n }\n }\n\n /**\n * Disconnects the websocket and removes any internal state associated with\n * the scene.\n */\n @Method()\n public async unload(): Promise<void> {\n if (this.stream != null) {\n this.frameRenderVersion += 1;\n this.annotations?.disconnect();\n this.stream.disconnect();\n\n this.frame = undefined;\n this.errorMessage = undefined;\n }\n\n if (this.canvasElement != null) {\n const context = this.canvasElement.getContext('2d');\n if (context != null) {\n context.clearRect(\n 0,\n 0,\n this.canvasElement.width,\n this.canvasElement.height\n );\n }\n }\n }\n\n /**\n * Disconnects the websocket and clears the internal state associated with\n * the scene before reconnecting to the same scene.\n */\n @Method()\n public async reload(): Promise<void> {\n if (this.src != null) {\n await this.unload();\n await this.load(this.src, { cameraType: this.cameraType });\n }\n }\n\n /**\n * Returns an object that is used to perform operations on the `Scene` that's\n * currently being viewed. These operations include updating items,\n * positioning the camera and performing hit tests.\n */\n @Method()\n public async scene(): Promise<Scene> {\n return this.createScene();\n }\n\n /**\n * Returns `true` indicating that the scene is ready to be interacted with.\n */\n @Method()\n public async isSceneReady(): Promise<boolean> {\n return this.stateMap.streamState.type === 'connected';\n }\n\n @Listen('tap')\n private async handleTapEvent(\n event: CustomEvent<TapEventDetails>\n ): Promise<void> {\n this.tapKeyInteractions\n .filter((i) => i.predicate(event.detail))\n .forEach((i) => i.fn(event.detail));\n }\n\n private emitConnectionChange(status: ConnectionStatus): void {\n if (status.status === 'connected') {\n if (status.jwt.length === 0) {\n throw new MissingJWTError('JWT is empty');\n }\n }\n\n if (!this.hostElement.isConnected) {\n return;\n }\n\n this.connectionChange.emit(status);\n }\n\n private handleElementResize(entries: ResizeObserverEntry[]): void {\n const dimensionsHaveChanged =\n entries.length > 0 &&\n this.dimensions != null &&\n !Dimensions.isEqual(entries[0].contentRect, this.viewport);\n\n if (dimensionsHaveChanged) {\n if (this.resizeTimer != null) {\n clearTimeout(this.resizeTimer);\n this.resizeTimer = undefined;\n }\n\n if (!this.isResizing) {\n this.resizeTimer = setTimeout(() => {\n this.isResizing = true;\n this.isResizeUpdate = true;\n this.recalculateComponentDimensions();\n }, this.resizeDebounce);\n }\n }\n }\n\n private handleVisibilityChange(visible: boolean): void {\n this.isVisible = visible;\n\n if (this.isVisible) {\n this.visibilityObserver?.disconnect();\n\n this.loadOrResumeStream();\n }\n }\n\n private async loadOrResumeStream(): Promise<void> {\n const streamPaused = this.stream?.isPaused() ?? false;\n\n if (this.src != null && !streamPaused) {\n await this.load(this.src, { cameraType: this.cameraType });\n } else if (streamPaused) {\n this.stream?.resume();\n }\n }\n\n private registerSlotChangeListeners(): void {\n this.mutationObserver = new MutationObserver((_) => this.injectViewerApi());\n this.mutationObserver.observe(this.hostElement, {\n childList: true,\n subtree: true,\n });\n\n this.styleObserver = new MutationObserver((_) => this.syncViewerStyles());\n this.styleObserver.observe(this.hostElement, {\n attributes: true,\n attributeFilter: ['style'],\n });\n }\n\n private injectViewerApi(): void {\n function queryChildren(el: Element): HTMLElement[] {\n return Array.from(el.querySelectorAll('*'));\n }\n\n const children = queryChildren(this.hostElement);\n\n children\n .filter((node) => node.nodeName.startsWith('VERTEX-'))\n .reduce(\n (elements, element) => [\n ...elements,\n element,\n ...queryChildren(element),\n ],\n [] as Element[]\n )\n .forEach((node) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (node as any).viewer = this.hostElement;\n });\n }\n\n private syncViewerStyles(): void {\n const backgroundColor = this.getBackgroundColor();\n\n this.stream?.update({\n frameBgColor: backgroundColor,\n streamAttributes: this.getStreamAttributes(),\n });\n }\n\n private calculateComponentDimensions(): void {\n const maxPixelCount = 2073600;\n const bounds = this.getBounds();\n if (bounds?.width != null && bounds?.height != null) {\n const measuredViewport = Dimensions.create(bounds.width, bounds.height);\n const trimmedViewport = Dimensions.scaleFit(\n maxPixelCount,\n measuredViewport\n );\n\n this.hostDimensions = measuredViewport;\n this.dimensions =\n trimmedViewport != null\n ? Dimensions.create(trimmedViewport.width, trimmedViewport.height)\n : undefined;\n this.viewport = Viewport.fromDimensions(\n this.getCanvasDimensions() ?? Dimensions.create(0, 0)\n );\n }\n }\n\n private recalculateComponentDimensions(): void {\n if (this.isResizing) {\n this.calculateComponentDimensions();\n this.isResizing = false;\n\n if (this.stream?.getState().type === 'connected') {\n this.updateDimensions(this.dimensions);\n }\n }\n }\n\n private reportPerformance(timings: Timing[]): void {\n if (this.stateMap.streamState.type === 'connected') {\n const payload = {\n timings: timings.map((t) => ({\n receiveToPaintDuration: toProtoDuration(t.duration),\n })),\n };\n this.getStream().recordPerformance(payload, false);\n }\n }\n\n private addStreamListeners(): void {\n this.stateMap.streamListeners = this.getStream().stateChanged.on((s) => {\n this.handleStreamStateChanged(this.stateMap.streamState, s);\n });\n }\n\n private handleStreamStateChanged(\n previous: ViewerStreamState,\n state: ViewerStreamState\n ): void {\n this.stateMap.streamState = state;\n\n if (state.type === 'connecting') {\n this.handleConnecting(previous, state);\n } else if (state.type === 'connected') {\n this.handleConnected(previous, state);\n } else if (state.type === 'connection-failed') {\n this.handleConnectionFailed(previous, state);\n } else if (state.type === 'disconnected') {\n this.handleDisconnected(previous, state);\n }\n }\n\n private handleConnecting(\n previous: ViewerStreamState,\n state: Connecting\n ): void {\n if (previous.type !== 'connecting') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'connecting' });\n }\n }\n\n private handleConnected(previous: ViewerStreamState, state: Connected): void {\n this.token = state.token.token;\n\n if (previous.type !== 'connected') {\n this.errorMessage = undefined;\n this.canvasRenderer = measureCanvasRenderer(\n paintTime,\n createCanvasRenderer(),\n this.getResolvedConfig().flags.logFrameRate,\n (timings) => this.reportPerformance(timings)\n );\n this.emitConnectionChange({\n status: 'connected',\n jwt: state.token.token,\n });\n this.deviceIdChange.emit(state.deviceId);\n }\n\n if (this.frame?.getId() !== state.frame.getId()) {\n this.updateFrame(state.frame);\n }\n\n this.updateDimensions(this.dimensions);\n }\n\n private handleConnectionFailed(\n previous: ViewerStreamState,\n state: ConnectionFailed\n ): void {\n if (previous.type !== 'connection-failed') {\n this.token = undefined;\n this.errorMessage = state.message;\n this.emitConnectionChange({\n status: 'connection-failed',\n errorMessage: state.message,\n });\n }\n }\n\n private handleDisconnected(\n previous: ViewerStreamState,\n state: Disconnected\n ): void {\n if (previous.type !== 'disconnected') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'disconnected' });\n }\n }\n\n private updateDimensions(dimensions?: Dimensions.Dimensions): void {\n this.stream?.update({ dimensions });\n this.dimensionschange.emit(dimensions);\n }\n\n private async updateFrame(frame: Frame): Promise<void> {\n const canvasDimensions = this.getCanvasDimensions();\n const frameRenderVersion = this.frameRenderVersion;\n\n if (\n this.canvasElement != null &&\n canvasDimensions != null &&\n this.frame?.getId() !== frame.getId()\n ) {\n const canvas = this.canvasElement.getContext('2d');\n if (canvas != null) {\n const previousFrame = this.frame;\n this.frame = SceneViewSummary.copySummaryIfInvalid(\n frame,\n previousFrame\n );\n\n this.updateInteractionApi(previousFrame);\n\n const data = {\n canvas,\n canvasDimensions,\n dimensions: this.dimensions,\n frame: this.frame,\n viewport: this.viewport,\n beforeDraw: () => {\n this.updateCanvasDimensions(canvasDimensions);\n this.isResizeUpdate = false;\n },\n predicate: () => {\n if (this.isResizeUpdate) {\n return (\n this.dimensions == null ||\n Dimensions.isEqual(\n this.dimensions,\n data.frame.image.imageAttr.frameDimensions\n )\n );\n }\n return true;\n },\n };\n\n this.frameReceived.emit(this.frame);\n\n if (this.frame.scene.hasChanged) {\n this.sceneChanged.emit();\n }\n\n const drawnFrame = await this.canvasRenderer(data);\n\n if (\n drawnFrame != null &&\n frameRenderVersion === this.frameRenderVersion\n ) {\n this.updateViewerBackground();\n\n this.dispatchFrameDrawn(drawnFrame);\n }\n }\n }\n }\n\n private updateViewerBackground(): void {\n const backgroundColor = this.getBackgroundColor();\n\n writeDOM(() => {\n this.viewerContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null ? Color.toHexString(backgroundColor) : '#ffffff'\n );\n this.canvasContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null ? Color.toHexString(backgroundColor) : '#ffffff'\n );\n });\n }\n\n private async initializeDefaultInteractionHandlers(): Promise<void> {\n await this.initializeDefaultCameraInteractionHandlers();\n await this.initializeDefaultTapInteractionHandler();\n this.initializeDefaultKeyboardInteractionHandlers();\n\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n }\n }\n\n private clearDefaultCameraInteractionHandlers(): void {\n this.defaultInteractionHandlerDisposables.forEach((disposable) =>\n disposable.dispose()\n );\n this.defaultInteractionHandlerDisposables = [];\n }\n\n private clearDefaultKeyboardInteractions(): void {\n this.defaultTapKeyInteractions.forEach((interaction) => {\n const index = this.tapKeyInteractions.indexOf(interaction);\n if (index !== -1) {\n this.tapKeyInteractions.splice(index, 1);\n }\n });\n this.tapKeyInteractions = [];\n }\n\n private async initializeDefaultCameraInteractionHandlers(): Promise<void> {\n this.clearDefaultCameraInteractionHandlers();\n\n if (this.cameraControls) {\n if (window.PointerEvent != null) {\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new PointerInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler\n );\n const multiPointerDisposable = await this.registerInteractionHandler(\n new MultiPointerInteractionHandler()\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n multiPointerDisposable,\n ];\n } else {\n // fallback to touch events and mouse events as a default\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new MouseInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler\n );\n const touchDisposable = await this.registerInteractionHandler(\n new TouchInteractionHandler()\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n touchDisposable,\n ];\n }\n }\n }\n\n private initializeDefaultKeyboardInteractionHandlers(): void {\n this.clearDefaultKeyboardInteractions();\n\n if (this.keyboardControls && this.stream != null) {\n this.baseInteractionHandler?.setDefaultKeyboardControls(\n this.keyboardControls\n );\n\n const flyToPart = new FlyToPartKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale()\n );\n const flyToPosition = new FlyToPositionKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale(),\n () => this.createScene()\n );\n\n this.registerTapKeyInteraction(flyToPart);\n this.registerTapKeyInteraction(flyToPosition);\n\n this.defaultTapKeyInteractions = [flyToPart, flyToPosition];\n }\n }\n\n private async initializeDefaultTapInteractionHandler(): Promise<void> {\n if (this.tapHandlerDisposable == null) {\n if (window.PointerEvent != null) {\n const tapInteractionHandler = new TapInteractionHandler(\n 'pointerdown',\n 'pointerup',\n 'pointermove',\n () => this.getResolvedConfig()\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler\n );\n } else {\n const tapInteractionHandler = new TapInteractionHandler(\n 'mousedown',\n 'mouseup',\n 'mousemove',\n () => this.getResolvedConfig()\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler\n );\n }\n }\n }\n\n private initializeInteractionHandler(handler: InteractionHandler): void {\n if (this.stateMap.interactionTarget == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction target is undefined.'\n );\n }\n if (this.interactionApi == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction APi is undefined.'\n );\n }\n handler.initialize(this.stateMap.interactionTarget, this.interactionApi);\n }\n\n private initializeBasicInteractionHandler(\n handler: BasicInteractionHandler\n ): void {\n if (this.stateMap.interactionTarget == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction target is undefined.'\n );\n }\n handler.initialize(this.stateMap.interactionTarget);\n }\n\n private createInteractionApi(): InteractionApi {\n if (this.stream == null) {\n throw new ComponentInitializationError(\n 'Cannot create interaction API. Component has not been initialized.'\n );\n }\n\n return this.frame == null || this.frame.scene.camera.isPerspective()\n ? new InteractionApiPerspective(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished\n )\n : new InteractionApiOrthographic(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished\n );\n }\n\n private handleCursorChanged(): void {\n window.requestAnimationFrame(() => {\n this.cursor = this.stateMap.cursorManager.getActiveCursor();\n });\n }\n\n private async createScene(): Promise<Scene> {\n const state = await this.waitForConnectedState();\n\n const cameraTypeMapper = toPbCameraTypeOrThrow();\n\n const { frame, sceneId, sceneViewId, worldOrientation } = state;\n\n return new Scene(\n this.getStream(),\n frame,\n fromPbFrameOrThrow(worldOrientation),\n cameraTypeMapper,\n () => this.getImageScale(),\n this.viewport,\n sceneId,\n sceneViewId\n );\n }\n\n /**\n * This function is currently not in use, but will be required\n * when we want to automatically configure the background color of\n * JPEG images.\n */\n private getBackgroundColor(): Color.Color | undefined {\n if (this.canvasContainerElement != null) {\n const imageBackground = getElementPropertyValue(\n this.hostElement,\n '--image-background'\n );\n const viewerBackground = getElementPropertyValue(\n this.hostElement,\n '--viewer-background'\n );\n const propertyColor = imageBackground ?? viewerBackground;\n\n return propertyColor != null\n ? Color.fromCss(propertyColor)\n : Color.create(255, 255, 255);\n }\n }\n\n private getBounds(): ClientRect | undefined {\n return getElementBoundingClientRect(this.hostElement);\n }\n\n private getCanvasDimensions(): Dimensions.Dimensions | undefined {\n return this.getResolvedConfig().flags.letterboxFrames\n ? this.dimensions\n : this.hostDimensions;\n }\n\n private getImageScale(): Point.Point | undefined {\n const canvasDimensions = this.getCanvasDimensions();\n if (this.dimensions != null && canvasDimensions != null) {\n return Point.create(\n this.dimensions.width / canvasDimensions.width,\n this.dimensions.height / canvasDimensions.height\n );\n }\n }\n\n private getStreamAttributes(): StreamAttributes {\n return {\n depthBuffers: this.getDepthBufferStreamAttributesValue(),\n experimentalRenderingOptions: this.experimentalRenderingOptions,\n featureHighlighting: this.featureHighlighting,\n featureLines: this.featureLines,\n featureMaps: this.featureMaps,\n frames: {\n frameBackgroundColor: this.getBackgroundColor(),\n },\n noDefaultLights: this.noDefaultLights,\n phantom: this.phantom,\n sceneComparison: this.sceneComparison,\n selectionHighlighting: this.selectionHighlighting,\n crossSectioning: this.crossSectioning,\n };\n }\n\n private updateCanvasDimensions(dimensions: Dimensions.Dimensions): void {\n if (this.canvasElement != null) {\n this.canvasElement.width = dimensions.width;\n this.canvasElement.height = dimensions.height;\n }\n }\n\n private updateStreamAttributes(): void {\n this.stream?.update({ streamAttributes: this.getStreamAttributes() });\n }\n\n private updateEnableTemporalRefinement(): void {\n this.stream?.update({\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n }\n\n private updateInteractionApi(previousFrame?: Frame): void {\n if (this.frame != null) {\n const hasChangedFromPerspective =\n (previousFrame == null || previousFrame.scene.camera.isPerspective()) &&\n this.frame.scene.camera.isOrthographic();\n const hasChangedFromOrthographic =\n (previousFrame == null ||\n previousFrame.scene.camera.isOrthographic()) &&\n this.frame.scene.camera.isPerspective();\n\n if (hasChangedFromPerspective || hasChangedFromOrthographic) {\n this.interactionApi = this.createInteractionApi();\n this.cameraType = this.frame.scene.camera.isPerspective()\n ? 'perspective'\n : 'orthographic';\n this.cameraTypeChanged.emit(this.cameraType);\n\n this.interactionHandlers.forEach((handler) =>\n this.initializeInteractionHandler(handler)\n );\n }\n }\n }\n\n private updateCameraType(): void {\n if (this.frame != null) {\n if (\n this.cameraType === 'orthographic' &&\n this.frame.scene.camera.isPerspective()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toOrthographic(\n this.frame.scene.camera,\n this.frame.scene.boundingBox\n )\n ),\n });\n } else if (\n this.cameraType === 'perspective' &&\n this.frame.scene.camera.isOrthographic()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toPerspective(this.frame.scene.camera)\n ),\n });\n }\n }\n }\n\n private handleAnnotationSetsChange(numberOfAnnotationSets: number): void {\n if (\n numberOfAnnotationSets > 0 &&\n this.getDepthBufferStreamAttributesValue() == null\n ) {\n // Annotation sets are present in the viewer, but depth buffers are not being requested.\n // The annotation sets require the depth buffers to render, so turn on depth buffers.\n this.stateMap.depthBuffersOverrideForAnnotations = true;\n this.updateStreamAttributes();\n } else if (\n numberOfAnnotationSets === 0 &&\n this.stateMap.depthBuffersOverrideForAnnotations\n ) {\n // Depth buffers were turned on because annotation sets were present in the viewer.\n // However, the annotation sets are no longer present, so the depth buffer override is no longer needed.\n this.stateMap.depthBuffersOverrideForAnnotations = false;\n this.updateStreamAttributes();\n }\n }\n\n private getDepthBufferStreamAttributesValue(): FrameType {\n const depthBuffer =\n this.depthBuffers ??\n (this.rotateAroundTapPoint ||\n this.stateMap.depthBuffersOverrideForAnnotations\n ? 'final'\n : undefined);\n return depthBuffer;\n }\n\n private updateResolvedConfig(): void {\n this.resolvedConfig = parseAndValidateConfig(this.configEnv, this.config);\n }\n\n private getResolvedConfig(): Config {\n return getRequiredProp(\n 'Resolved config is undefined',\n () => this.resolvedConfig\n );\n }\n\n private getStream(): ViewerStream {\n return getRequiredProp('Stream is undefined', () => this.stream);\n }\n\n private getDeviceId(): string | undefined {\n if (this.deviceId == null) {\n try {\n this.deviceId = getStorageEntry(\n StorageKeys.DEVICE_ID,\n (entry) => entry['device-id']\n );\n } catch (e) {\n console.warn('Cannot read device ID. Local storage is not supported.');\n }\n\n if (this.deviceId == null) {\n this.deviceId = UUID.create();\n\n try {\n upsertStorageEntry(StorageKeys.DEVICE_ID, {\n ['device-id']: this.deviceId,\n });\n } catch (e) {\n console.warn(\n 'Cannot write device ID. Local storage is not supported.'\n );\n }\n }\n }\n return this.deviceId;\n }\n\n private async waitForConnectedState(): Promise<Connected> {\n if (this.stateMap.streamState.type !== 'connected') {\n console.debug(\n 'Stream was not in a connected state. Waiting for successful connection.'\n );\n return new Promise<Connected>((resolve, reject) => {\n const disposable = this.getStream().onStateChanged((state) => {\n if (state.type === 'connected') {\n resolve(state);\n }\n });\n\n setTimeout(() => {\n disposable.dispose();\n reject(new Error('Timed out waiting for connected state.'));\n }, DEFAULT_VIEWER_SCENE_WAIT_MS);\n });\n }\n\n return this.stateMap.streamState;\n }\n}\n\nfunction getRequiredProp<T>(errorMsg: string, getter: () => T | undefined): T {\n const value = getter();\n if (value != null) {\n return value;\n } else throw new Error(errorMsg);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../../src/components/viewer/viewer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\nimport { SceneViewAPIClient } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb_service';\nimport { toProtoDuration, WebSocketClientImpl } from '@vertexvis/stream-api';\nimport {\n BasicInteractionHandler,\n BasicViewer,\n Color,\n Disposable,\n EventDispatcher,\n UUID,\n} from '@vertexvis/utils';\nimport classnames from 'classnames';\n\nimport {\n CrossSectioningOptions,\n FeatureHighlightOptions,\n FeatureLineOptions,\n FrameType,\n PhantomOptions,\n SceneComparisonOptions,\n SelectionHighlightingOptions,\n StreamAttributes,\n} from '../../interfaces';\nimport {\n AnnotationController,\n AnnotationState,\n} from '../../lib/annotations/controller';\nimport { CanvasController } from '../../lib/canvases';\nimport {\n Config,\n parseAndValidateConfig,\n PartialConfig,\n} from '../../lib/config';\nimport { Cursor, CursorManager } from '../../lib/cursors';\nimport { cssCursor } from '../../lib/dom';\nimport { Environment } from '../../lib/environment';\nimport {\n ComponentInitializationError,\n InteractionHandlerError,\n MissingJWTError,\n ViewerInitializationError,\n} from '../../lib/errors';\nimport {\n InteractionApiOrthographic,\n InteractionApiPerspective,\n} from '../../lib/interactions';\nimport { BaseInteractionHandler } from '../../lib/interactions/baseInteractionHandler';\nimport { FlyToPartKeyInteraction } from '../../lib/interactions/flyToPartKeyInteraction';\nimport { FlyToPositionKeyInteraction } from '../../lib/interactions/flyToPositionKeyInteraction';\nimport { InteractionApi } from '../../lib/interactions/interactionApi';\nimport { InteractionHandler } from '../../lib/interactions/interactionHandler';\nimport { KeyInteraction } from '../../lib/interactions/keyInteraction';\nimport { MouseInteractionHandler } from '../../lib/interactions/mouseInteractionHandler';\nimport { MultiPointerInteractionHandler } from '../../lib/interactions/multiPointerInteractionHandler';\nimport { PointerInteractionHandler } from '../../lib/interactions/pointerInteractionHandler';\nimport { TapEventDetails } from '../../lib/interactions/tapEventDetails';\nimport { TapInteractionHandler } from '../../lib/interactions/tapInteractionHandler';\nimport { TouchInteractionHandler } from '../../lib/interactions/touchInteractionHandler';\nimport { fromPbFrameOrThrow, toPbCameraTypeOrThrow } from '../../lib/mappers';\nimport { paintTime, Timing } from '../../lib/meters';\nimport { ModelViewController } from '../../lib/model-views/controller';\nimport { PmiController } from '../../lib/pmi';\nimport {\n CanvasRenderer,\n createCanvasRenderer,\n measureCanvasRenderer,\n} from '../../lib/rendering';\nimport { SceneItemController } from '../../lib/scene-items/controller';\nimport { Scene } from '../../lib/scenes/scene';\nimport { writeDOM } from '../../lib/stencil';\nimport {\n getStorageEntry,\n StorageKeys,\n upsertStorageEntry,\n} from '../../lib/storage';\nimport {\n Connected,\n Connecting,\n ConnectionFailed,\n Disconnected,\n ViewerStreamState,\n} from '../../lib/stream/state';\nimport { ViewerStream } from '../../lib/stream/stream';\nimport {\n FrameCamera,\n Orientation,\n SceneViewSummary,\n StencilBufferManager,\n Viewport,\n} from '../../lib/types';\nimport { Frame } from '../../lib/types/frame';\nimport { FrameCameraType } from '../../lib/types/frameCamera';\nimport { VisibilityObserver } from '../../lib/visibilityObserver';\nimport {\n DEFAULT_VIEWER_SCENE_WAIT_MS,\n getElementBoundingClientRect,\n getElementPropertyValue,\n} from './utils';\n\ninterface ConnectedStatus {\n jwt: string;\n status: 'connected';\n}\n\ninterface ConnectingStatus {\n status: 'connecting';\n}\n\ninterface DisconnectedStatus {\n status: 'disconnected';\n}\n\ninterface ConnectionFailedStatus {\n status: 'connection-failed';\n errorMessage: string;\n}\n\nexport interface LoadOptions {\n cameraType?: FrameCameraType;\n}\n\n/**\n * Internal state values for the component. Used to preserve values across live\n * reload refreshes.\n */\ninterface StateMap {\n streamWorldOrientation?: Orientation;\n cursorManager: CursorManager;\n interactionTarget?: HTMLElement;\n streamState: ViewerStreamState;\n streamListeners?: Disposable;\n depthBuffersOverrideForAnnotations?: boolean;\n}\n\n/** @internal */\nexport type ConnectionStatus =\n | ConnectingStatus\n | ConnectedStatus\n | DisconnectedStatus\n | ConnectionFailedStatus;\n\n@Component({\n tag: 'vertex-viewer',\n styleUrl: 'viewer.css',\n shadow: true,\n})\nexport class Viewer implements BasicViewer {\n @Element() private hostElement!: HTMLVertexViewerElement;\n\n /**\n * A URN of the scene resource to load when the component is mounted in the\n * DOM tree. The specified resource is a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n */\n @Prop() public src?: string;\n\n /**\n * The Client ID associated with your Vertex Application.\n */\n @Prop() public clientId?: string;\n\n /**\n * Property used for internals or testing.\n *\n * @internal\n */\n @Prop({ mutable: true }) public deviceId?: string;\n\n /**\n * An object or JSON encoded string that defines configuration settings for\n * the viewer.\n */\n @Prop() public config?: PartialConfig | string;\n\n /**\n * Sets the default environment for the viewer. This setting is used for\n * auto-configuring network hosts.\n *\n * Use the `config` property for manually setting hosts.\n *\n * @see Viewer.config\n */\n @Prop() public configEnv: Environment = 'platprod';\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public resolvedConfig?: Config;\n\n /**\n * Enables or disables the default mouse and touch interactions provided by\n * the viewer. Enabled by default.\n */\n @Prop() public cameraControls = true;\n\n /**\n * The type of camera model to represent the scene with. Can be either\n * `perspective` or `orthographic`, and defaults to `perspective`.\n */\n @Prop({ mutable: true, reflect: true }) public cameraType: FrameCameraType =\n 'perspective';\n\n /**\n * Enables or disables the default keyboard shortcut interactions provided by\n * the viewer. Enabled by default, requires `cameraControls` being enabled.\n *\n */\n @Prop() public keyboardControls = true;\n\n /**\n * Sets the rotation interaction behavior. True by default.\n *\n * When rotateAroundTapPoint is true and the user clicks on geometry, then the model will rotate\n * around the point that was clicked. When rotateAroundTapPoint is true and the user clicks\n * in empty space (not on geometry), then the model will rotate around the center of the viewport.\n *\n * When rotateAroundTapPoint is false, then the model will always rotate around the center of the viewport.\n */\n @Prop() public rotateAroundTapPoint = true;\n\n /**\n * A token that can be used to make API calls to other Vertex services.\n *\n * @internal\n */\n @Prop({ mutable: true }) public token?: string;\n\n /**\n * Specifies when a depth buffer is requested from rendering. Possible values\n * are:\n *\n * * `undefined`: A depth buffer is never requested.\n * * `final`: A depth buffer is only requested on the final frame.\n * * `all`: A depth buffer is requested for every frame.\n *\n * Depth buffers can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance. Some features,\n * like measurement and pins, require that depth buffers are requested and\n * will override an 'undefined' value when the feature is active.\n */\n @Prop() public depthBuffers?: FrameType;\n\n /**\n * Specifies how phantom parts should appear.\n * The opacity must be between 0 and 1, where 0 is completely hidden and 1 is completely visible.\n */\n @Prop({ attribute: null })\n public phantom?: PhantomOptions = { opacity: 0.1 };\n\n /**\n * Specifies whether to use the default lights for the scene. When false, default\n * lights are used. When true, no default lights are used, and the lights must\n * be specified separately.\n */\n @Prop() public noDefaultLights = false;\n\n /**\n * Specifies whether to enable temporal refinement of still images.\n */\n @Prop() public enableTemporalRefinement = true;\n\n /**\n * Specifies experimental rendering options. For Vertex use only.\n *\n * @internal\n */\n @Prop() public experimentalRenderingOptions = '';\n\n /**\n * Specifies if and how to render feature lines.\n */\n @Prop({ attribute: null }) public featureLines?: FeatureLineOptions;\n\n /**\n * Specifies the halo selection properties.\n * Parameter notes:\n * * lineWidth values supported currently are 0-5. This width is currently the value x2. For example, 1 will have a pixel width of 2.\n * * color is optional. This will be the color of the selected items in the viewer.\n * * opacity is also optional. The opacity will be applied to everything selected besides the highlighted outer line.\n */\n @Prop({ attribute: null })\n public selectionHighlighting?: SelectionHighlightingOptions;\n\n /**\n * Specifies how selected features should be highlighted.\n */\n @Prop({ attribute: null })\n public featureHighlighting?: FeatureHighlightOptions;\n\n /**\n * Specifies if and how to compare to another scene\n */\n @Prop({ attribute: null })\n public sceneComparison?: SceneComparisonOptions;\n\n /**\n * Specifies options related to presentation of cross-sections.\n * Defaults to showing the cross-section with an end cap that matches the part color.\n */\n @Prop({ attribute: null })\n public crossSectioning?: CrossSectioningOptions = {\n endCapEnabled: true,\n endCapColor: undefined,\n };\n\n /**\n * Specifies when a feature map is returned from rendering. Feature maps\n * include information about the surfaces, edges and cross-sections that are\n * in a frame.\n *\n * Possible values are:\n *\n * * `undefined`: A feature map is never requested.\n * * `final`: A feature map is only requested on the final frame.\n * * `all`: A feature map is requested for every frame.\n *\n * Feature maps can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance.\n */\n @Prop() public featureMaps?: FrameType;\n\n /**\n * An optional value that will debounce frame updates when resizing\n * this viewer element.\n */\n @Prop() public resizeDebounce = 100;\n\n /**\n * The last frame that was received, which can be used to inspect the scene\n * and camera information.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public frame: Frame | undefined;\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public stream?: ViewerStream;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public stencilBuffer!: StencilBufferManager;\n\n /**\n * Represents the current viewport of the viewer. The viewport represents the\n * dimensions of the canvas where a frame is rendered. It contains methods for\n * translating between viewport coordinates, frame coordinates and world\n * coordinates.\n */\n @Prop({ mutable: true })\n public viewport: Viewport = Viewport.fromDimensions(Dimensions.create(0, 0));\n\n /**\n * The annotation controller for accessing annotations associated with the\n * scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public annotations: AnnotationController | undefined;\n\n /**\n * The controller for accessing model views associated with the scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public modelViews: ModelViewController | undefined;\n\n /**\n * The controller for accessing and viewing PMI.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public pmi: PmiController | undefined;\n\n /**\n * The controller for accessing and viewing SceneItems.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public sceneItems: SceneItemController | undefined;\n\n /**\n * The controller for accessing canvases and their associated markup.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public canvases: CanvasController | undefined;\n\n /**\n * Experimental flag indicating that connections to Vertex should be established\n * if the viewer is initially hidden through its own style or computed style, or\n * has not been scrolled into view.\n *\n * *Caution:* Setting this flag can result in reduced performance,\n * and should generally not be used in a production setting.\n */\n @Prop()\n public experimentalSkipVisibilityCheck = false;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer.\n * The event includes the location of the tap or click.\n *\n * This event can be used in combination with the {@link scene} method\n * to query for items at the point of the tap.\n *\n * @see {@link Scene.raycaster Scene.raycaster} for more information.\n */\n @Event() public tap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user double taps or clicks a location in the viewer.\n * The event includes the location of the first tap or click.\n */\n @Event() public doubletap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer and the\n * configured amount of time passes without receiving a mouseup or touchend.\n * The event includes the location of the tap or click.\n */\n @Event() public longpress!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event when a frame has been received by the viewer. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameReceived!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a frame has been drawn to the viewer's canvas. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameDrawn!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a provided oauth2 token is about to expire, or is about to expire,\n * causing issues with establishing a websocket connection, or performing API calls.\n */\n @Event() public tokenExpired!: EventEmitter<void>;\n\n /**\n * Emits an event when the connection status changes for the viewer\n */\n @Event() public connectionChange!: EventEmitter<ConnectionStatus>;\n\n /**\n * Emits an event when the scene is ready to be interacted with.\n */\n @Event() public sceneReady!: EventEmitter<void>;\n\n /**\n * Emits an event when a frame is received with a different scene attribute.\n */\n @Event() public sceneChanged!: EventEmitter<void>;\n\n /**\n * Emits an event when the user has started an interaction.\n */\n @Event() public interactionStarted!: EventEmitter<void>;\n\n /**\n * Emits an event when the user hs finished an interaction.\n */\n @Event() public interactionFinished!: EventEmitter<void>;\n\n /**\n * Emits an event when the camera type changes.\n */\n @Event() public cameraTypeChanged!: EventEmitter<FrameCameraType>;\n\n /**\n * Emits an event when the state for annotation changes.\n */\n @Event() public annotationStateChanged!: EventEmitter<AnnotationState>;\n\n /**\n * Used for internals or testing.\n *\n * @internal\n */\n @Event() public deviceIdChange!: EventEmitter<string>;\n\n @Event() public dimensionschange!: EventEmitter<Dimensions.Dimensions>;\n\n @State() private dimensions?: Dimensions.Dimensions;\n @State() private hostDimensions?: Dimensions.Dimensions;\n @State() private errorMessage?: string;\n\n @State() private cursor?: Cursor;\n\n /**\n * This stores internal state that you want to preserve across live-reloads,\n * but shouldn't trigger a refresh if the data changes. Marking this with\n * @State to allow to preserve state across live-reloads.\n */\n @State() private stateMap: StateMap = {\n cursorManager: new CursorManager(),\n streamState: { type: 'disconnected' },\n };\n\n private viewerContainerElement?: HTMLElement;\n private canvasContainerElement?: HTMLElement;\n private canvasElement?: HTMLCanvasElement;\n\n private canvasRenderer!: CanvasRenderer;\n\n private mutationObserver?: MutationObserver;\n private styleObserver?: MutationObserver;\n private resizeObserver?: ResizeObserver;\n private visibilityObserver?: VisibilityObserver;\n private isResizing?: boolean;\n private isResizeUpdate?: boolean;\n private isVisible = false;\n\n private resizeTimer?: NodeJS.Timeout;\n private streamAttributesUpdateTimer?: NodeJS.Timeout;\n private frameRenderVersion = 0;\n\n private interactionHandlers: InteractionHandler[] = [];\n private defaultInteractionHandlerDisposables: Array<Disposable> = [];\n private tapHandlerDisposable?: Disposable;\n private interactionApi!: InteractionApi;\n private tapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private defaultTapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private baseInteractionHandler?: BaseInteractionHandler;\n\n private internalFrameDrawnDispatcher = new EventDispatcher<Frame>();\n\n public constructor() {\n this.handleElementResize = this.handleElementResize.bind(this);\n this.handleVisibilityChange = this.handleVisibilityChange.bind(this);\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.stencilBuffer ??= new StencilBufferManager(this.hostElement);\n\n this.visibilityObserver = new VisibilityObserver(\n this.handleVisibilityChange,\n );\n this.isVisible = this.visibilityObserver.isVisible(this.hostElement);\n\n if (!this.isVisible) {\n this.visibilityObserver?.observe(this.hostElement);\n }\n\n this.stream?.resume();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.updateResolvedConfig();\n this.calculateComponentDimensions();\n\n this.resizeObserver = new ResizeObserver(this.handleElementResize);\n this.registerSlotChangeListeners();\n\n const config = this.getResolvedConfig();\n const client = new SceneViewAPIClient(config.network.sceneViewHost);\n\n this.annotations = new AnnotationController(\n client,\n () => this.token,\n () => this.deviceId,\n );\n this.annotations.onStateChange.on((state: AnnotationState) => {\n this.annotationStateChanged.emit(state);\n\n const numberOfAnnotationSets = Object.keys(state.annotations).length;\n this.handleAnnotationSetsChange(numberOfAnnotationSets);\n });\n\n this.stream =\n this.stream ??\n new ViewerStream(new WebSocketClientImpl(), {\n loggingEnabled: config.flags.logWsMessages,\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n this.addStreamListeners();\n\n this.modelViews = new ModelViewController(\n client,\n this.stream,\n () => this.token,\n () => this.deviceId,\n );\n\n this.pmi = new PmiController(\n client,\n () => this.token,\n () => this.deviceId,\n );\n\n this.sceneItems = new SceneItemController(\n client,\n () => this.token,\n () => this.deviceId,\n );\n\n this.canvases = new CanvasController(\n client,\n () => this.token,\n () => this.deviceId,\n );\n\n this.updateStreamAttributes();\n this.stateMap.cursorManager.onChanged.on(() => this.handleCursorChanged());\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n this.interactionApi = this.createInteractionApi();\n this.isVisible =\n this.visibilityObserver?.isVisible(this.hostElement) ?? true;\n\n if (this.canvasContainerElement != null) {\n this.resizeObserver?.observe(this.canvasContainerElement);\n }\n\n this.loadOrResumeStream().catch((e) => {\n console.error('Error loading scene', e);\n });\n\n await this.initializeDefaultInteractionHandlers();\n this.injectViewerApi();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.visibilityObserver?.disconnect();\n this.annotations?.disconnect();\n\n this.stream?.pause();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div\n ref={(ref) => (this.viewerContainerElement = ref)}\n class=\"viewer-container\"\n style={{ cursor: cssCursor(this.cursor ?? '') }}\n onContextMenu={(event) => event.preventDefault()}\n >\n <div\n ref={(ref) => (this.canvasContainerElement = ref)}\n class={classnames('canvas-container', {\n 'enable-pointer-events ': window.PointerEvent != null,\n })}\n >\n <canvas\n ref={(ref) => {\n this.canvasElement = ref;\n this.stateMap.interactionTarget = ref;\n }}\n class=\"canvas\"\n ></canvas>\n {this.errorMessage != null ? (\n <div class=\"error-message\">{this.errorMessage}</div>\n ) : null}\n </div>\n <slot></slot>\n </div>\n </Host>\n );\n }\n\n /**\n * @internal\n */\n @Method()\n public async dispatchFrameDrawn(frame: Frame): Promise<void> {\n this.frame = frame;\n this.internalFrameDrawnDispatcher.emit(frame);\n this.frameDrawn.emit(frame);\n }\n\n /**\n * Registers and initializes an interaction handler with the viewer. Returns a\n * `Disposable` that should be used to deregister the interaction handler.\n *\n * `InteractionHandler`s are used to build custom mouse and touch interactions\n * for the viewer. Use `<vertex-viewer camera-controls=\"false\" />` to disable\n * the default camera controls provided by the viewer.\n *\n * @example\n * ```\n * class CustomInteractionHandler extends InteractionHandler {\n * private element: HTMLElement;\n * private api: InteractionApi;\n *\n * public dispose(): void {\n * this.element.removeEventListener('click', this.handleElementClick);\n * }\n *\n * public initialize(element: HTMLElement, api: InteractionApi): void {\n * this.api = api;\n * this.element = element;\n * this.element.addEventListener('click', this.handleElementClick);\n * }\n *\n * private handleElementClick = (event: MouseEvent) => {\n * api.tap({ x: event.clientX, y: event.clientY });\n * }\n * }\n *\n * const viewer = document.querySelector(\"vertex-viewer\");\n * viewer.registerInteractionHandler(new CustomInteractionHandler);\n * ```\n *\n * @param interactionHandler The interaction handler to register.\n * @returns {Promise<void>} A promise containing the disposable to use to\n * deregister the handler.\n */\n @Method()\n public async registerInteractionHandler(\n interactionHandler: InteractionHandler,\n ): Promise<Disposable> {\n this.interactionHandlers.push(interactionHandler);\n this.initializeInteractionHandler(interactionHandler);\n return {\n dispose: () => {\n const index = this.interactionHandlers.indexOf(interactionHandler);\n if (index !== -1) {\n this.interactionHandlers[index].dispose();\n this.interactionHandlers.splice(index, 1);\n }\n },\n };\n }\n\n /**\n * Registers and initializes an interaction handler with the viewer. Returns a\n * `Disposable` that should be used to deregister the interaction handler.\n *\n * `InteractionHandler`s are used to build custom mouse and touch interactions\n * for the viewer. Use `<vertex-viewer camera-controls=\"false\" />` to disable\n * the default camera controls provided by the viewer.\n *\n * @example\n * ```\n * class CustomInteractionHandler extends InteractionHandler {\n * private element: HTMLElement;\n * private api: InteractionApi;\n *\n * public dispose(): void {\n * this.element.removeEventListener('click', this.handleElementClick);\n * }\n *\n * public initialize(element: HTMLElement, api: InteractionApi): void {\n * this.api = api;\n * this.element = element;\n * this.element.addEventListener('click', this.handleElementClick);\n * }\n *\n * private handleElementClick = (event: MouseEvent) => {\n * api.tap({ x: event.clientX, y: event.clientY });\n * }\n * }\n *\n * const viewer = document.querySelector(\"vertex-viewer\");\n * viewer.registerInteractionHandler(new CustomInteractionHandler);\n * ```\n *\n * @param interactionHandler The interaction handler to register.\n * @returns {Promise<void>} A promise containing the disposable to use to\n * deregister the handler.\n */\n @Method()\n public async registerBasicInteractionHandler(\n interactionHandler: BasicInteractionHandler,\n ): Promise<Disposable> {\n this.interactionHandlers.push(interactionHandler);\n this.initializeBasicInteractionHandler(interactionHandler);\n return {\n dispose: () => {\n const index = this.interactionHandlers.indexOf(interactionHandler);\n if (index !== -1) {\n this.interactionHandlers[index].dispose();\n this.interactionHandlers.splice(index, 1);\n }\n },\n };\n }\n\n /**\n * Registers a key interaction to be invoked when a specific set of\n * keys are pressed during a `tap` event.\n *\n * `KeyInteraction`s are used to build custom keyboard shortcuts for the\n * viewer using the current state of they keyboard to determine whether\n * the `fn` should be invoked. Use `<vertex-viewer keyboard-controls=\"false\" />`\n * to disable the default keyboard shortcuts provided by the viewer.\n *\n * @example\n * ```\n * class CustomKeyboardInteraction extends KeyInteraction<TapEventDetails> {\n * constructor(private viewer: HTMLVertexViewerElement) {}\n *\n * public predicate(keyState: KeyState): boolean {\n * return keyState['Alt'];\n * }\n *\n * public async fn(event: TapEventDetails) {\n * const scene = await this.viewer.scene();\n * const result = await scene.raycaster().hitItems(event.position);\n *\n * if (result.hits.length > 0) {\n * await scene\n * .camera()\n * .fitTo(q => q.withItemId(result.hits[0].itemId))\n * .render();\n * }\n * }\n * }\n * ```\n *\n * @param keyInteraction - The `KeyInteraction` to register.\n */\n @Method()\n public async registerTapKeyInteraction(\n keyInteraction: KeyInteraction<TapEventDetails>,\n ): Promise<void> {\n this.tapKeyInteractions = [...this.tapKeyInteractions, keyInteraction];\n }\n\n /**\n * The HTML element that will handle interaction events from the user. Used by\n * components to listen for interaction events from the same element as the\n * viewer. Note, this property maybe removed in the future when refactoring\n * our interaction handling.\n *\n * @internal\n * @deprecated Use `InteractionHandler`.\n */\n @Method()\n public async getInteractionTarget_DEPRECATED(): Promise<HTMLElement> {\n if (this.stateMap.interactionTarget != null) {\n return this.stateMap.interactionTarget;\n } else throw new Error('Interaction target is undefined.');\n }\n\n /**\n * Adds a cursor to the viewer, and displays it if the cursor has the highest\n * priority.\n *\n * Cursors are managed as a prioritized list. A cursor is displayed if it has\n * the highest priority or if the cursor is the most recently added cursor in\n * the set of cursors with the same priority.\n *\n * To remove a cursor, call `dispose()` on the returned disposable.\n *\n * @param cursor The cursor to add.\n * @param priority The priority of the cursor.\n * @returns A disposable that can be used to remove the cursor.\n * @see See {@link CursorManager} for constants to pass to `priority`.\n */\n @Method()\n public async addCursor(\n cursor: Cursor,\n priority?: number,\n ): Promise<Disposable> {\n return this.stateMap.cursorManager.add(cursor, priority);\n }\n\n @Method()\n public async getInteractionHandlers(): Promise<InteractionHandler[]> {\n return this.interactionHandlers;\n }\n\n /**\n * @internal\n * @ignore\n */\n @Method()\n public async getKeyInteractions(): Promise<\n KeyInteraction<TapEventDetails>[]\n > {\n return this.tapKeyInteractions;\n }\n\n @Method()\n public async getBaseInteractionHandler(): Promise<\n BaseInteractionHandler | undefined\n > {\n return this.baseInteractionHandler;\n }\n\n /**\n * @deprecated Use `token`.\n */\n @Method()\n public async getJwt(): Promise<string | undefined> {\n return this.token;\n }\n\n @Watch('src')\n public handleSrcChanged(src: string | undefined): void {\n if (src != null) {\n this.load(src, { cameraType: this.cameraType });\n } else {\n this.unload();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('cameraControls')\n protected handleCameraControlsChanged(): void {\n this.initializeDefaultCameraInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('keyboardControls')\n protected handleKeyboardControlsChanged(): void {\n this.initializeDefaultKeyboardInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('rotateAroundTapPoint')\n protected handleRotateAboutTapPointChanged(): void {\n this.updateStreamAttributes();\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n } else {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate');\n }\n }\n\n @Watch('cameraType')\n protected handleCameraTypeChanged(\n updatedCameraType: string,\n previousCameraType: string,\n ): void {\n if (updatedCameraType !== previousCameraType) {\n this.updateCameraType();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('crossSectioning')\n @Watch('depthBuffers')\n @Watch('experimentalRenderingOptions')\n @Watch('featureHighlighting')\n @Watch('featureLines')\n @Watch('featureMaps')\n @Watch('noDefaultLights')\n @Watch('phantom')\n @Watch('sceneComparison')\n @Watch('selectionHighlighting')\n protected handleStreamAttributesChanged(): void {\n this.handleUpdateStreamAttributesWithTimer();\n }\n\n // Group stream attribute changes happening in quick succession to\n // ensure the correct attributes are applied to the stream\n private handleUpdateStreamAttributesWithTimer = (): void => {\n const streamAttributesUpdateThrottleInMilliseconds = 50;\n\n if (this.streamAttributesUpdateTimer == null) {\n this.streamAttributesUpdateTimer = setTimeout(() => {\n this.streamAttributesUpdateTimer = undefined;\n this.updateStreamAttributes();\n }, streamAttributesUpdateThrottleInMilliseconds);\n }\n };\n\n /**\n * @ignore\n */\n @Watch('enableTemporalRefinement')\n protected handleEnableTemporalRefinementChanged(): void {\n this.updateEnableTemporalRefinement();\n }\n\n /**\n * @ignore\n */\n @Watch('config')\n protected handleConfigChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * @ignore\n */\n @Watch('configEnv')\n protected handleConfigEnvChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * Loads the given scene into the viewer and return a `Promise` that\n * resolves when the scene has been loaded. The specified scene is\n * provided as a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n *\n * @param urn The URN of the resource to load.\n * @param options Optional configurations when loading the scene.\n * cameraType (Optional) The camera type to load. If not included, the default camera type for the resource will be used.\n */\n @Method()\n public async load(urn: string, options?: LoadOptions): Promise<void> {\n const shouldLoadBasedOnVisibility =\n this.experimentalSkipVisibilityCheck || this.isVisible;\n\n if (!shouldLoadBasedOnVisibility) {\n console.debug(\n 'Detected the viewer is hidden. Delaying load until visible.',\n );\n\n return;\n }\n\n if (this.stream != null && this.dimensions != null) {\n const { EXPERIMENTAL_annotationPollingIntervalInMs } =\n this.getResolvedConfig();\n\n this.calculateComponentDimensions();\n\n this.stream.update({\n streamAttributes: this.getStreamAttributes(),\n config: parseAndValidateConfig(this.configEnv, this.config),\n dimensions: this.dimensions,\n frameBgColor: this.getBackgroundColor(),\n });\n const state = await this.stream?.load(\n urn,\n this.clientId,\n this.getDeviceId(),\n this.getResolvedConfig(),\n options?.cameraType,\n );\n\n if (state.type === 'connected') {\n this.sceneReady.emit();\n\n if (EXPERIMENTAL_annotationPollingIntervalInMs !== undefined) {\n this.annotations?.connect(EXPERIMENTAL_annotationPollingIntervalInMs);\n }\n }\n } else {\n throw new ViewerInitializationError(\n 'Cannot load scene. Viewer has not been initialized.',\n );\n }\n }\n\n /**\n * Disconnects the websocket and removes any internal state associated with\n * the scene.\n */\n @Method()\n public async unload(): Promise<void> {\n if (this.stream != null) {\n this.frameRenderVersion += 1;\n this.annotations?.disconnect();\n this.stream.disconnect();\n\n this.frame = undefined;\n this.errorMessage = undefined;\n }\n\n if (this.canvasElement != null) {\n const context = this.canvasElement.getContext('2d');\n if (context != null) {\n context.clearRect(\n 0,\n 0,\n this.canvasElement.width,\n this.canvasElement.height,\n );\n }\n }\n }\n\n /**\n * Disconnects the websocket and clears the internal state associated with\n * the scene before reconnecting to the same scene.\n */\n @Method()\n public async reload(): Promise<void> {\n if (this.src != null) {\n await this.unload();\n await this.load(this.src, { cameraType: this.cameraType });\n }\n }\n\n /**\n * Returns an object that is used to perform operations on the `Scene` that's\n * currently being viewed. These operations include updating items,\n * positioning the camera and performing hit tests.\n */\n @Method()\n public async scene(): Promise<Scene> {\n return this.createScene();\n }\n\n /**\n * Returns `true` indicating that the scene is ready to be interacted with.\n */\n @Method()\n public async isSceneReady(): Promise<boolean> {\n return this.stateMap.streamState.type === 'connected';\n }\n\n @Listen('tap')\n private async handleTapEvent(\n event: CustomEvent<TapEventDetails>,\n ): Promise<void> {\n this.tapKeyInteractions\n .filter((i) => i.predicate(event.detail))\n .forEach((i) => i.fn(event.detail));\n }\n\n private emitConnectionChange(status: ConnectionStatus): void {\n if (status.status === 'connected') {\n if (status.jwt.length === 0) {\n throw new MissingJWTError('JWT is empty');\n }\n }\n\n if (!this.hostElement.isConnected) {\n return;\n }\n\n this.connectionChange.emit(status);\n }\n\n private handleElementResize(entries: ResizeObserverEntry[]): void {\n const dimensionsHaveChanged =\n entries.length > 0 &&\n this.dimensions != null &&\n !Dimensions.isEqual(entries[0].contentRect, this.viewport);\n\n if (dimensionsHaveChanged) {\n if (this.resizeTimer != null) {\n clearTimeout(this.resizeTimer);\n this.resizeTimer = undefined;\n }\n\n if (!this.isResizing) {\n this.resizeTimer = setTimeout(() => {\n this.isResizing = true;\n this.isResizeUpdate = true;\n this.recalculateComponentDimensions();\n }, this.resizeDebounce);\n }\n }\n }\n\n private handleVisibilityChange(visible: boolean): void {\n this.isVisible = visible;\n\n if (this.isVisible) {\n this.visibilityObserver?.disconnect();\n\n this.loadOrResumeStream();\n }\n }\n\n private async loadOrResumeStream(): Promise<void> {\n const streamPaused = this.stream?.isPaused() ?? false;\n\n if (this.src != null && !streamPaused) {\n await this.load(this.src, { cameraType: this.cameraType });\n } else if (streamPaused) {\n this.stream?.resume();\n }\n }\n\n private registerSlotChangeListeners(): void {\n this.mutationObserver = new MutationObserver((_) => this.injectViewerApi());\n this.mutationObserver.observe(this.hostElement, {\n childList: true,\n subtree: true,\n });\n\n this.styleObserver = new MutationObserver((_) => this.syncViewerStyles());\n this.styleObserver.observe(this.hostElement, {\n attributes: true,\n attributeFilter: ['style'],\n });\n }\n\n private injectViewerApi(): void {\n function queryChildren(el: Element): HTMLElement[] {\n return Array.from(el.querySelectorAll('*'));\n }\n\n const children = queryChildren(this.hostElement);\n\n children\n .filter((node) => node.nodeName.startsWith('VERTEX-'))\n .reduce(\n (elements, element) => [\n ...elements,\n element,\n ...queryChildren(element),\n ],\n [] as Element[],\n )\n .forEach((node) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (node as any).viewer = this.hostElement;\n });\n }\n\n private syncViewerStyles(): void {\n const backgroundColor = this.getBackgroundColor();\n\n this.stream?.update({\n frameBgColor: backgroundColor,\n streamAttributes: this.getStreamAttributes(),\n });\n }\n\n private calculateComponentDimensions(): void {\n const maxPixelCount = 2073600;\n const bounds = this.getBounds();\n if (bounds?.width != null && bounds?.height != null) {\n const measuredViewport = Dimensions.create(bounds.width, bounds.height);\n const trimmedViewport = Dimensions.scaleFit(\n maxPixelCount,\n measuredViewport,\n );\n\n this.hostDimensions = measuredViewport;\n this.dimensions =\n trimmedViewport != null\n ? Dimensions.create(trimmedViewport.width, trimmedViewport.height)\n : undefined;\n this.viewport = Viewport.fromDimensions(\n this.getCanvasDimensions() ?? Dimensions.create(0, 0),\n );\n }\n }\n\n private recalculateComponentDimensions(): void {\n if (this.isResizing) {\n this.calculateComponentDimensions();\n this.isResizing = false;\n\n if (this.stream?.getState().type === 'connected') {\n this.updateDimensions(this.dimensions);\n }\n }\n }\n\n private reportPerformance(timings: Timing[]): void {\n if (this.stateMap.streamState.type === 'connected') {\n const payload = {\n timings: timings.map((t) => ({\n receiveToPaintDuration: toProtoDuration(t.duration),\n })),\n };\n this.getStream().recordPerformance(payload, false);\n }\n }\n\n private addStreamListeners(): void {\n this.stateMap.streamListeners = this.getStream().stateChanged.on((s) => {\n this.handleStreamStateChanged(this.stateMap.streamState, s);\n });\n }\n\n private handleStreamStateChanged(\n previous: ViewerStreamState,\n state: ViewerStreamState,\n ): void {\n this.stateMap.streamState = state;\n\n if (state.type === 'connecting') {\n this.handleConnecting(previous, state);\n } else if (state.type === 'connected') {\n this.handleConnected(previous, state);\n } else if (state.type === 'connection-failed') {\n this.handleConnectionFailed(previous, state);\n } else if (state.type === 'disconnected') {\n this.handleDisconnected(previous, state);\n }\n }\n\n private handleConnecting(\n previous: ViewerStreamState,\n state: Connecting,\n ): void {\n if (previous.type !== 'connecting') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'connecting' });\n }\n }\n\n private handleConnected(previous: ViewerStreamState, state: Connected): void {\n this.token = state.token.token;\n\n if (previous.type !== 'connected') {\n this.errorMessage = undefined;\n this.canvasRenderer = measureCanvasRenderer(\n paintTime,\n createCanvasRenderer(),\n this.getResolvedConfig().flags.logFrameRate,\n (timings) => this.reportPerformance(timings),\n );\n this.emitConnectionChange({\n status: 'connected',\n jwt: state.token.token,\n });\n this.deviceIdChange.emit(state.deviceId);\n }\n\n if (this.frame?.getId() !== state.frame.getId()) {\n this.updateFrame(state.frame);\n }\n\n this.updateDimensions(this.dimensions);\n }\n\n private handleConnectionFailed(\n previous: ViewerStreamState,\n state: ConnectionFailed,\n ): void {\n if (previous.type !== 'connection-failed') {\n this.token = undefined;\n this.errorMessage = state.message;\n this.emitConnectionChange({\n status: 'connection-failed',\n errorMessage: state.message,\n });\n }\n }\n\n private handleDisconnected(\n previous: ViewerStreamState,\n state: Disconnected,\n ): void {\n if (previous.type !== 'disconnected') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'disconnected' });\n }\n }\n\n private updateDimensions(dimensions?: Dimensions.Dimensions): void {\n this.stream?.update({ dimensions });\n this.dimensionschange.emit(dimensions);\n }\n\n private async updateFrame(frame: Frame): Promise<void> {\n const canvasDimensions = this.getCanvasDimensions();\n const frameRenderVersion = this.frameRenderVersion;\n\n if (\n this.canvasElement != null &&\n canvasDimensions != null &&\n this.frame?.getId() !== frame.getId()\n ) {\n const canvas = this.canvasElement.getContext('2d');\n if (canvas != null) {\n const previousFrame = this.frame;\n this.frame = SceneViewSummary.copySummaryIfInvalid(\n frame,\n previousFrame,\n );\n\n this.updateInteractionApi(previousFrame);\n\n const data = {\n canvas,\n canvasDimensions,\n dimensions: this.dimensions,\n frame: this.frame,\n viewport: this.viewport,\n beforeDraw: () => {\n this.updateCanvasDimensions(canvasDimensions);\n this.isResizeUpdate = false;\n },\n predicate: () => {\n if (this.isResizeUpdate) {\n return (\n this.dimensions == null ||\n Dimensions.isEqual(\n this.dimensions,\n data.frame.image.imageAttr.frameDimensions,\n )\n );\n }\n return true;\n },\n };\n\n this.frameReceived.emit(this.frame);\n\n if (this.frame.scene.hasChanged) {\n this.sceneChanged.emit();\n }\n\n const drawnFrame = await this.canvasRenderer(data);\n\n if (\n drawnFrame != null &&\n frameRenderVersion === this.frameRenderVersion\n ) {\n this.updateViewerBackground();\n\n this.dispatchFrameDrawn(drawnFrame);\n }\n }\n }\n }\n\n private updateViewerBackground(): void {\n const backgroundColor = this.getBackgroundColor();\n\n writeDOM(() => {\n this.viewerContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null\n ? Color.toHexString(backgroundColor)\n : '#ffffff',\n );\n this.canvasContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null\n ? Color.toHexString(backgroundColor)\n : '#ffffff',\n );\n });\n }\n\n private async initializeDefaultInteractionHandlers(): Promise<void> {\n await this.initializeDefaultCameraInteractionHandlers();\n await this.initializeDefaultTapInteractionHandler();\n this.initializeDefaultKeyboardInteractionHandlers();\n\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n }\n }\n\n private clearDefaultCameraInteractionHandlers(): void {\n this.defaultInteractionHandlerDisposables.forEach((disposable) =>\n disposable.dispose(),\n );\n this.defaultInteractionHandlerDisposables = [];\n }\n\n private clearDefaultKeyboardInteractions(): void {\n this.defaultTapKeyInteractions.forEach((interaction) => {\n const index = this.tapKeyInteractions.indexOf(interaction);\n if (index !== -1) {\n this.tapKeyInteractions.splice(index, 1);\n }\n });\n this.tapKeyInteractions = [];\n }\n\n private async initializeDefaultCameraInteractionHandlers(): Promise<void> {\n this.clearDefaultCameraInteractionHandlers();\n\n if (this.cameraControls) {\n if (window.PointerEvent != null) {\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new PointerInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler,\n );\n const multiPointerDisposable = await this.registerInteractionHandler(\n new MultiPointerInteractionHandler(),\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n multiPointerDisposable,\n ];\n } else {\n // fallback to touch events and mouse events as a default\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new MouseInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler,\n );\n const touchDisposable = await this.registerInteractionHandler(\n new TouchInteractionHandler(),\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n touchDisposable,\n ];\n }\n }\n }\n\n private initializeDefaultKeyboardInteractionHandlers(): void {\n this.clearDefaultKeyboardInteractions();\n\n if (this.keyboardControls && this.stream != null) {\n this.baseInteractionHandler?.setDefaultKeyboardControls(\n this.keyboardControls,\n );\n\n const flyToPart = new FlyToPartKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale(),\n );\n const flyToPosition = new FlyToPositionKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale(),\n () => this.createScene(),\n );\n\n this.registerTapKeyInteraction(flyToPart);\n this.registerTapKeyInteraction(flyToPosition);\n\n this.defaultTapKeyInteractions = [flyToPart, flyToPosition];\n }\n }\n\n private async initializeDefaultTapInteractionHandler(): Promise<void> {\n if (this.tapHandlerDisposable == null) {\n if (window.PointerEvent != null) {\n const tapInteractionHandler = new TapInteractionHandler(\n 'pointerdown',\n 'pointerup',\n 'pointermove',\n () => this.getResolvedConfig(),\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler,\n );\n } else {\n const tapInteractionHandler = new TapInteractionHandler(\n 'mousedown',\n 'mouseup',\n 'mousemove',\n () => this.getResolvedConfig(),\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler,\n );\n }\n }\n }\n\n private initializeInteractionHandler(handler: InteractionHandler): void {\n if (this.stateMap.interactionTarget == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction target is undefined.',\n );\n }\n if (this.interactionApi == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction APi is undefined.',\n );\n }\n handler.initialize(this.stateMap.interactionTarget, this.interactionApi);\n }\n\n private initializeBasicInteractionHandler(\n handler: BasicInteractionHandler,\n ): void {\n if (this.stateMap.interactionTarget == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction target is undefined.',\n );\n }\n handler.initialize(this.stateMap.interactionTarget);\n }\n\n private createInteractionApi(): InteractionApi {\n if (this.stream == null) {\n throw new ComponentInitializationError(\n 'Cannot create interaction API. Component has not been initialized.',\n );\n }\n\n return this.frame == null || this.frame.scene.camera.isPerspective()\n ? new InteractionApiPerspective(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished,\n )\n : new InteractionApiOrthographic(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished,\n );\n }\n\n private handleCursorChanged(): void {\n window.requestAnimationFrame(() => {\n this.cursor = this.stateMap.cursorManager.getActiveCursor();\n });\n }\n\n private async createScene(): Promise<Scene> {\n const state = await this.waitForConnectedState();\n\n const cameraTypeMapper = toPbCameraTypeOrThrow();\n\n const { frame, sceneId, sceneViewId, worldOrientation } = state;\n\n return new Scene(\n this.getStream(),\n frame,\n fromPbFrameOrThrow(worldOrientation),\n cameraTypeMapper,\n () => this.getImageScale(),\n this.viewport,\n sceneId,\n sceneViewId,\n );\n }\n\n /**\n * This function is currently not in use, but will be required\n * when we want to automatically configure the background color of\n * JPEG images.\n */\n private getBackgroundColor(): Color.Color | undefined {\n if (this.canvasContainerElement != null) {\n const imageBackground = getElementPropertyValue(\n this.hostElement,\n '--image-background',\n );\n const viewerBackground = getElementPropertyValue(\n this.hostElement,\n '--viewer-background',\n );\n const propertyColor = imageBackground ?? viewerBackground;\n\n return propertyColor != null\n ? Color.fromCss(propertyColor)\n : Color.create(255, 255, 255);\n }\n }\n\n private getBounds(): ClientRect | undefined {\n return getElementBoundingClientRect(this.hostElement);\n }\n\n private getCanvasDimensions(): Dimensions.Dimensions | undefined {\n return this.getResolvedConfig().flags.letterboxFrames\n ? this.dimensions\n : this.hostDimensions;\n }\n\n private getImageScale(): Point.Point | undefined {\n const canvasDimensions = this.getCanvasDimensions();\n if (this.dimensions != null && canvasDimensions != null) {\n return Point.create(\n this.dimensions.width / canvasDimensions.width,\n this.dimensions.height / canvasDimensions.height,\n );\n }\n }\n\n private getStreamAttributes(): StreamAttributes {\n return {\n depthBuffers: this.getDepthBufferStreamAttributesValue(),\n experimentalRenderingOptions: this.experimentalRenderingOptions,\n featureHighlighting: this.featureHighlighting,\n featureLines: this.featureLines,\n featureMaps: this.featureMaps,\n frames: {\n frameBackgroundColor: this.getBackgroundColor(),\n },\n noDefaultLights: this.noDefaultLights,\n phantom: this.phantom,\n sceneComparison: this.sceneComparison,\n selectionHighlighting: this.selectionHighlighting,\n crossSectioning: this.crossSectioning,\n };\n }\n\n private updateCanvasDimensions(dimensions: Dimensions.Dimensions): void {\n if (this.canvasElement != null) {\n this.canvasElement.width = dimensions.width;\n this.canvasElement.height = dimensions.height;\n }\n }\n\n private updateStreamAttributes(): void {\n this.stream?.update({ streamAttributes: this.getStreamAttributes() });\n }\n\n private updateEnableTemporalRefinement(): void {\n this.stream?.update({\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n }\n\n private updateInteractionApi(previousFrame?: Frame): void {\n if (this.frame != null) {\n const hasChangedFromPerspective =\n (previousFrame == null || previousFrame.scene.camera.isPerspective()) &&\n this.frame.scene.camera.isOrthographic();\n const hasChangedFromOrthographic =\n (previousFrame == null ||\n previousFrame.scene.camera.isOrthographic()) &&\n this.frame.scene.camera.isPerspective();\n\n if (hasChangedFromPerspective || hasChangedFromOrthographic) {\n this.interactionApi = this.createInteractionApi();\n this.cameraType = this.frame.scene.camera.isPerspective()\n ? 'perspective'\n : 'orthographic';\n this.cameraTypeChanged.emit(this.cameraType);\n\n this.interactionHandlers.forEach((handler) =>\n this.initializeInteractionHandler(handler),\n );\n }\n }\n }\n\n private updateCameraType(): void {\n if (this.frame != null) {\n if (\n this.cameraType === 'orthographic' &&\n this.frame.scene.camera.isPerspective()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toOrthographic(\n this.frame.scene.camera,\n this.frame.scene.boundingBox,\n ),\n ),\n });\n } else if (\n this.cameraType === 'perspective' &&\n this.frame.scene.camera.isOrthographic()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toPerspective(this.frame.scene.camera),\n ),\n });\n }\n }\n }\n\n private handleAnnotationSetsChange(numberOfAnnotationSets: number): void {\n if (\n numberOfAnnotationSets > 0 &&\n this.getDepthBufferStreamAttributesValue() == null\n ) {\n // Annotation sets are present in the viewer, but depth buffers are not being requested.\n // The annotation sets require the depth buffers to render, so turn on depth buffers.\n this.stateMap.depthBuffersOverrideForAnnotations = true;\n this.updateStreamAttributes();\n } else if (\n numberOfAnnotationSets === 0 &&\n this.stateMap.depthBuffersOverrideForAnnotations\n ) {\n // Depth buffers were turned on because annotation sets were present in the viewer.\n // However, the annotation sets are no longer present, so the depth buffer override is no longer needed.\n this.stateMap.depthBuffersOverrideForAnnotations = false;\n this.updateStreamAttributes();\n }\n }\n\n private getDepthBufferStreamAttributesValue(): FrameType {\n const depthBuffer =\n this.depthBuffers ??\n (this.rotateAroundTapPoint ||\n this.stateMap.depthBuffersOverrideForAnnotations\n ? 'final'\n : undefined);\n return depthBuffer;\n }\n\n private updateResolvedConfig(): void {\n this.resolvedConfig = parseAndValidateConfig(this.configEnv, this.config);\n }\n\n private getResolvedConfig(): Config {\n return getRequiredProp(\n 'Resolved config is undefined',\n () => this.resolvedConfig,\n );\n }\n\n private getStream(): ViewerStream {\n return getRequiredProp('Stream is undefined', () => this.stream);\n }\n\n private getDeviceId(): string | undefined {\n if (this.deviceId == null) {\n try {\n this.deviceId = getStorageEntry(\n StorageKeys.DEVICE_ID,\n (entry) => entry['device-id'],\n );\n } catch (e) {\n console.warn('Cannot read device ID. Local storage is not supported.');\n }\n\n if (this.deviceId == null) {\n this.deviceId = UUID.create();\n\n try {\n upsertStorageEntry(StorageKeys.DEVICE_ID, {\n ['device-id']: this.deviceId,\n });\n } catch (e) {\n console.warn(\n 'Cannot write device ID. Local storage is not supported.',\n );\n }\n }\n }\n return this.deviceId;\n }\n\n private async waitForConnectedState(): Promise<Connected> {\n if (this.stateMap.streamState.type !== 'connected') {\n console.debug(\n 'Stream was not in a connected state. Waiting for successful connection.',\n );\n return new Promise<Connected>((resolve, reject) => {\n const disposable = this.getStream().onStateChanged((state) => {\n if (state.type === 'connected') {\n resolve(state);\n }\n });\n\n setTimeout(() => {\n disposable.dispose();\n reject(new Error('Timed out waiting for connected state.'));\n }, DEFAULT_VIEWER_SCENE_WAIT_MS);\n });\n }\n\n return this.stateMap.streamState;\n }\n}\n\nfunction getRequiredProp<T>(errorMsg: string, getter: () => T | undefined): T {\n const value = getter();\n if (value != null) {\n return value;\n } else throw new Error(errorMsg);\n}\n"]}
|
|
@@ -95,12 +95,12 @@ export class ViewerBoxQueryTool {
|
|
|
95
95
|
* @ignore
|
|
96
96
|
*/
|
|
97
97
|
render() {
|
|
98
|
-
return (h(Host, { key: '
|
|
98
|
+
return (h(Host, { key: 'f6486b363c74a4d9d9207fd1d33b058ff384280b' }, h("vertex-viewer-layer", { key: '4247b1a8ed16f9282c5825ca134b3fb7f4f48ef9' }, this.details != null && (h("div", { key: '79c30a0d7d494c8beafb666d50484e0a524b1949', class: "bounds", style: {
|
|
99
99
|
left: `${this.details.screenBounds.x}px`,
|
|
100
100
|
top: `${this.details.screenBounds.y}px`,
|
|
101
101
|
width: `${this.details.screenBounds.width}px`,
|
|
102
102
|
height: `${this.details.screenBounds.height}px`,
|
|
103
|
-
} }, h("slot", { key: '
|
|
103
|
+
} }, h("slot", { key: '9678ec156727bad5ac6e0cac6790793d3445afe2', name: "bounds" }, h("div", { key: 'e01b158201e7e74e3783776a03b764c4ef997be5', class: "outline" }), h("div", { key: '7aa279e343a34a51c4630d4c1c168e26fd5622c5', class: "fill" })))))));
|
|
104
104
|
}
|
|
105
105
|
handleScreenBoundsChanged(details) {
|
|
106
106
|
this.details = details;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer-box-query-tool.js","sourceRoot":"","sources":["../../../../../src/components/viewer-box-query-tool/viewer-box-query-tool.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
|
|
1
|
+
{"version":3,"file":"viewer-box-query-tool.js","sourceRoot":"","sources":["../../../../../src/components/viewer-box-query-tool/viewer-box-query-tool.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/components/viewer-dom-element/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,wBAAwB,CACtC,EAAW;IAEX,OAAO,CACL,EAAE,YAAY,WAAW;QACzB,EAAE,CAAC,QAAQ,KAAK,2BAA2B;QAC1C,EAAwC,CAAC,MAAM,IAAI,IAAI,CACzD,CAAC;AACJ,CAAC","sourcesContent":["export function isVertexViewerDomElement(\n el: unknown
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/components/viewer-dom-element/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,wBAAwB,CACtC,EAAW;IAEX,OAAO,CACL,EAAE,YAAY,WAAW;QACzB,EAAE,CAAC,QAAQ,KAAK,2BAA2B;QAC1C,EAAwC,CAAC,MAAM,IAAI,IAAI,CACzD,CAAC;AACJ,CAAC","sourcesContent":["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"]}
|
|
@@ -243,7 +243,7 @@ export class ViewerDomElement {
|
|
|
243
243
|
* @ignore
|
|
244
244
|
*/
|
|
245
245
|
render() {
|
|
246
|
-
return (h(Host, { key: '
|
|
246
|
+
return (h(Host, { key: '9f708ca2a98e38bf3d61551273f43c691ab55edf' }, h("slot", { key: '510635ebdbe7bb9c73a8375b15c22f359a62c8e4' })));
|
|
247
247
|
}
|
|
248
248
|
static get is() { return "vertex-viewer-dom-element"; }
|
|
249
249
|
static get encapsulation() { return "shadow"; }
|