@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":"vertex-viewer-measurement-precise.entry.js","sources":["src/lib/measurement/interactions.ts","src/components/viewer-measurement-precise/viewer-measurement-precise.css?tag=vertex-viewer-measurement-precise&encapsulation=shadow","src/components/viewer-measurement-precise/viewer-measurement-precise.tsx"],"sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { Cursor, measurementWithArrowCursor } from '../cursors';\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport { InteractionApi, InteractionHandler } from '../interactions';\nimport { EntityType } from '../types';\nimport { MeasurementController } from './controller';\nimport { MeasurementEntity } from './entities';\n\nexport class MeasurementInteractionHandler implements InteractionHandler {\n private controller: MeasurementController;\n private measurableEntityTypes: EntityType[];\n\n private element?: HTMLElement;\n private api?: InteractionApi;\n\n private cursor?: Disposable;\n private measurementInteraction?: InteractionHandler;\n\n private rectObserver = new ElementRectObserver();\n private get elementRect(): DOMRect | undefined {\n return this.rectObserver.rect;\n }\n\n public constructor(\n controller: MeasurementController,\n measurableEntityTypes: EntityType[]\n ) {\n this.controller = controller;\n this.measurableEntityTypes = measurableEntityTypes;\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.rectObserver.observe(element);\n\n element.addEventListener('pointermove', this.handlePointerMove);\n element.addEventListener('pointerdown', this.handlePointerDown);\n }\n\n public dispose(): void {\n this.rectObserver.disconnect();\n this.measurementInteraction?.dispose();\n this.clearCursor();\n\n this.element?.removeEventListener('pointermove', this.handlePointerMove);\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n\n this.element = undefined;\n this.api = undefined;\n }\n\n private addCursor(cursor: Cursor): void {\n this.cursor = this.ifInitialized(({ api }) => api.addCursor(cursor));\n }\n\n private clearCursor(): void {\n this.cursor?.dispose();\n this.cursor = undefined;\n }\n\n private handlePointerMove = async (event: PointerEvent): Promise<void> => {\n if (await this.isMeasurableEntityUnderPointer(event)) {\n this.clearCursor();\n this.addCursor(measurementWithArrowCursor);\n } else {\n this.clearCursor();\n }\n };\n\n private handlePointerDown = (event: PointerEvent): void => {\n this.ifNoInteraction(event, async () => {\n if (await this.isMeasurableEntityUnderPointer(event)) {\n this.measureEntityUnderPointer(event);\n } else {\n await this.controller.clearEntities();\n }\n });\n };\n\n private async isMeasurableEntityUnderPointer(\n event: PointerEvent\n ): Promise<boolean> {\n const pt = getMouseClientPosition(event, this.elementRect);\n const type = await this.api?.getEntityTypeAtPoint(pt);\n return type != null && this.measurableEntityTypes.includes(type);\n }\n\n private measureEntityUnderPointer(event: PointerEvent): void {\n this.ifInitialized(async ({ api }) => {\n const pt = getMouseClientPosition(event, this.elementRect);\n const [hit] = await api.hitItems(pt);\n const entity = hit != null ? MeasurementEntity.fromHit(hit) : undefined;\n\n if (entity != null) {\n await this.controller.addEntity(entity);\n } else {\n await this.controller.clearEntities();\n }\n });\n }\n\n protected ifInitialized<R>(\n f: (data: { element: HTMLElement; api: InteractionApi }) => R\n ): R {\n if (this.element != null && this.api != null) {\n return f({ element: this.element, api: this.api });\n } else {\n throw new Error('Measurement interaction handler not initialized.');\n }\n }\n\n protected ifNoInteraction(\n event: PointerEvent,\n f: () => void | Promise<void>\n ): void {\n const startPos = Point.create(event.clientX, event.clientY);\n let didInteract = false;\n\n const handleMouseMove = (event: PointerEvent): void => {\n const pos = Point.create(event.clientX, event.clientY);\n const dis = Point.distance(startPos, pos);\n didInteract = dis > 2;\n };\n\n const handleMouseUp = (): void => {\n window.removeEventListener('pointermove', handleMouseMove);\n window.removeEventListener('pointerup', handleMouseUp);\n\n if (!didInteract) {\n f();\n }\n };\n\n window.addEventListener('pointermove', handleMouseMove);\n window.addEventListener('pointerup', handleMouseUp);\n }\n}\n",":host {\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Component, h, Host, JSX, Prop, State, Watch } from '@stencil/core';\nimport { SceneViewAPIClient } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb_service';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { parseAndValidateConfig, PartialConfig } from '../../lib/config';\nimport { Environment } from '../../lib/environment';\nimport {\n MeasurementController,\n MeasurementModel,\n MeasurementOverlayManager,\n} from '../../lib/measurement';\nimport { MeasurementInteractionHandler } from '../../lib/measurement/interactions';\nimport { EntityType } from '../../lib/types';\n\n@Component({\n tag: 'vertex-viewer-measurement-precise',\n styleUrl: 'viewer-measurement-precise.css',\n shadow: true,\n})\nexport class ViewerMeasurementPrecise {\n /**\n * The model that contains the entities and outcomes from performing precise\n * measurements.\n */\n @Prop()\n public measurementModel: MeasurementModel = new MeasurementModel();\n\n /**\n * The manager that is responsible for measurement overlays to present by this\n * component.\n */\n @Prop()\n public measurementOverlays: MeasurementOverlayManager =\n new MeasurementOverlayManager();\n\n /**\n * The controller that is responsible for performing measurements and updating\n * the model.\n */\n @Prop({ mutable: true })\n public measurementController?: MeasurementController;\n\n /**\n * @internal\n *\n * An internal property that can be used to opt-in to performing measurements\n * on other types of entities.\n */\n @Prop()\n public measurableEntityTypes: EntityType[] = [\n EntityType.PRECISE_SURFACE,\n EntityType.IMPRECISE_SURFACE,\n ];\n\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 environment that will be used to request measurement results.\n */\n @Prop()\n public configEnv: Environment = 'platprod';\n\n /**\n * An optional configuration to setup network configuration of measurement\n * endpoints.\n */\n @Prop()\n public config?: PartialConfig | string;\n\n private registeredInteractionHandler?: Promise<Disposable>;\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurableEntityTypes')\n protected handleMeasurableEntityTypesChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurementController')\n protected handleMeasurementControllerChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurementModel', { immediate: true })\n protected handleMeasurementModelChanged(): void {\n this.setupController();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected render(): JSX.Element {\n return (\n <Host>\n <vertex-viewer-measurement-overlays\n viewer={this.viewer}\n measurementOverlays={this.measurementOverlays}\n />\n </Host>\n );\n }\n\n private setupController(): void {\n const config = parseAndValidateConfig(this.configEnv, this.config);\n const client = new SceneViewAPIClient(config.network.sceneViewHost);\n this.measurementController = new MeasurementController(\n this.measurementModel,\n client,\n () => this.viewer?.token,\n this.viewer?.deviceId\n );\n }\n\n private clearInteractionHandler(): void {\n this.registeredInteractionHandler?.then((handler) => handler.dispose());\n this.registeredInteractionHandler = undefined;\n }\n\n private setupInteractionHandler(): void {\n this.clearInteractionHandler();\n\n if (this.measurementController != null) {\n this.registeredInteractionHandler =\n this.viewer?.registerInteractionHandler(\n new MeasurementInteractionHandler(\n this.measurementController,\n this.measurableEntityTypes\n )\n );\n }\n }\n}\n"],"names":["Point","SceneViewAPIClient"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vertex-viewer-measurement-precise.entry.js","sources":["src/lib/measurement/interactions.ts","src/components/viewer-measurement-precise/viewer-measurement-precise.css?tag=vertex-viewer-measurement-precise&encapsulation=shadow","src/components/viewer-measurement-precise/viewer-measurement-precise.tsx"],"sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { Cursor, measurementWithArrowCursor } from '../cursors';\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport { InteractionApi, InteractionHandler } from '../interactions';\nimport { EntityType } from '../types';\nimport { MeasurementController } from './controller';\nimport { MeasurementEntity } from './entities';\n\nexport class MeasurementInteractionHandler implements InteractionHandler {\n private controller: MeasurementController;\n private measurableEntityTypes: EntityType[];\n\n private element?: HTMLElement;\n private api?: InteractionApi;\n\n private cursor?: Disposable;\n private measurementInteraction?: InteractionHandler;\n\n private rectObserver = new ElementRectObserver();\n private get elementRect(): DOMRect | undefined {\n return this.rectObserver.rect;\n }\n\n public constructor(\n controller: MeasurementController,\n measurableEntityTypes: EntityType[],\n ) {\n this.controller = controller;\n this.measurableEntityTypes = measurableEntityTypes;\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.rectObserver.observe(element);\n\n element.addEventListener('pointermove', this.handlePointerMove);\n element.addEventListener('pointerdown', this.handlePointerDown);\n }\n\n public dispose(): void {\n this.rectObserver.disconnect();\n this.measurementInteraction?.dispose();\n this.clearCursor();\n\n this.element?.removeEventListener('pointermove', this.handlePointerMove);\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n\n this.element = undefined;\n this.api = undefined;\n }\n\n private addCursor(cursor: Cursor): void {\n this.cursor = this.ifInitialized(({ api }) => api.addCursor(cursor));\n }\n\n private clearCursor(): void {\n this.cursor?.dispose();\n this.cursor = undefined;\n }\n\n private handlePointerMove = async (event: PointerEvent): Promise<void> => {\n if (await this.isMeasurableEntityUnderPointer(event)) {\n this.clearCursor();\n this.addCursor(measurementWithArrowCursor);\n } else {\n this.clearCursor();\n }\n };\n\n private handlePointerDown = (event: PointerEvent): void => {\n this.ifNoInteraction(event, async () => {\n if (await this.isMeasurableEntityUnderPointer(event)) {\n this.measureEntityUnderPointer(event);\n } else {\n await this.controller.clearEntities();\n }\n });\n };\n\n private async isMeasurableEntityUnderPointer(\n event: PointerEvent,\n ): Promise<boolean> {\n const pt = getMouseClientPosition(event, this.elementRect);\n const type = await this.api?.getEntityTypeAtPoint(pt);\n return type != null && this.measurableEntityTypes.includes(type);\n }\n\n private measureEntityUnderPointer(event: PointerEvent): void {\n this.ifInitialized(async ({ api }) => {\n const pt = getMouseClientPosition(event, this.elementRect);\n const [hit] = await api.hitItems(pt);\n const entity = hit != null ? MeasurementEntity.fromHit(hit) : undefined;\n\n if (entity != null) {\n await this.controller.addEntity(entity);\n } else {\n await this.controller.clearEntities();\n }\n });\n }\n\n protected ifInitialized<R>(\n f: (data: { element: HTMLElement; api: InteractionApi }) => R,\n ): R {\n if (this.element != null && this.api != null) {\n return f({ element: this.element, api: this.api });\n } else {\n throw new Error('Measurement interaction handler not initialized.');\n }\n }\n\n protected ifNoInteraction(\n event: PointerEvent,\n f: () => void | Promise<void>,\n ): void {\n const startPos = Point.create(event.clientX, event.clientY);\n let didInteract = false;\n\n const handleMouseMove = (event: PointerEvent): void => {\n const pos = Point.create(event.clientX, event.clientY);\n const dis = Point.distance(startPos, pos);\n didInteract = dis > 2;\n };\n\n const handleMouseUp = (): void => {\n window.removeEventListener('pointermove', handleMouseMove);\n window.removeEventListener('pointerup', handleMouseUp);\n\n if (!didInteract) {\n f();\n }\n };\n\n window.addEventListener('pointermove', handleMouseMove);\n window.addEventListener('pointerup', handleMouseUp);\n }\n}\n",":host {\n display: block;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Component, h, Host, JSX, Prop, State, Watch } from '@stencil/core';\nimport { SceneViewAPIClient } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb_service';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { parseAndValidateConfig, PartialConfig } from '../../lib/config';\nimport { Environment } from '../../lib/environment';\nimport {\n MeasurementController,\n MeasurementModel,\n MeasurementOverlayManager,\n} from '../../lib/measurement';\nimport { MeasurementInteractionHandler } from '../../lib/measurement/interactions';\nimport { EntityType } from '../../lib/types';\n\n@Component({\n tag: 'vertex-viewer-measurement-precise',\n styleUrl: 'viewer-measurement-precise.css',\n shadow: true,\n})\nexport class ViewerMeasurementPrecise {\n /**\n * The model that contains the entities and outcomes from performing precise\n * measurements.\n */\n @Prop()\n public measurementModel: MeasurementModel = new MeasurementModel();\n\n /**\n * The manager that is responsible for measurement overlays to present by this\n * component.\n */\n @Prop()\n public measurementOverlays: MeasurementOverlayManager =\n new MeasurementOverlayManager();\n\n /**\n * The controller that is responsible for performing measurements and updating\n * the model.\n */\n @Prop({ mutable: true })\n public measurementController?: MeasurementController;\n\n /**\n * @internal\n *\n * An internal property that can be used to opt-in to performing measurements\n * on other types of entities.\n */\n @Prop()\n public measurableEntityTypes: EntityType[] = [\n EntityType.PRECISE_SURFACE,\n EntityType.IMPRECISE_SURFACE,\n ];\n\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 environment that will be used to request measurement results.\n */\n @Prop()\n public configEnv: Environment = 'platprod';\n\n /**\n * An optional configuration to setup network configuration of measurement\n * endpoints.\n */\n @Prop()\n public config?: PartialConfig | string;\n\n private registeredInteractionHandler?: Promise<Disposable>;\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurableEntityTypes')\n protected handleMeasurableEntityTypesChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurementController')\n protected handleMeasurementControllerChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurementModel', { immediate: true })\n protected handleMeasurementModelChanged(): void {\n this.setupController();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected render(): JSX.Element {\n return (\n <Host>\n <vertex-viewer-measurement-overlays\n viewer={this.viewer}\n measurementOverlays={this.measurementOverlays}\n />\n </Host>\n );\n }\n\n private setupController(): void {\n const config = parseAndValidateConfig(this.configEnv, this.config);\n const client = new SceneViewAPIClient(config.network.sceneViewHost);\n this.measurementController = new MeasurementController(\n this.measurementModel,\n client,\n () => this.viewer?.token,\n this.viewer?.deviceId,\n );\n }\n\n private clearInteractionHandler(): void {\n this.registeredInteractionHandler?.then((handler) => handler.dispose());\n this.registeredInteractionHandler = undefined;\n }\n\n private setupInteractionHandler(): void {\n this.clearInteractionHandler();\n\n if (this.measurementController != null) {\n this.registeredInteractionHandler =\n this.viewer?.registerInteractionHandler(\n new MeasurementInteractionHandler(\n this.measurementController,\n this.measurableEntityTypes,\n ),\n );\n }\n }\n}\n"],"names":["Point","SceneViewAPIClient"],"mappings":"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"}
|
|
@@ -132,12 +132,12 @@ const ViewerPinGroup = class {
|
|
|
132
132
|
throw new Error('Unable to draw pin');
|
|
133
133
|
}
|
|
134
134
|
const { pinPoint, labelPoint } = this.computePinPoints(this.pin);
|
|
135
|
-
return (h(Fragment, { key: '
|
|
135
|
+
return (h(Fragment, { key: '3275077c2f3febce611262f97ad52424381eeeaf' }, h("vertex-viewer-dom-element", { key: '95c6a4cadb1b0437b0a8c9d9e8a4c8b6612bad44', "data-testid": `drawn-pin-${this.pin.id}`, position: this.pin.worldPosition, onPointerDown: async () => {
|
|
136
136
|
var _a;
|
|
137
137
|
await ((_a = this.labelEl) === null || _a === void 0 ? void 0 : _a.submit());
|
|
138
138
|
this.selectPin();
|
|
139
139
|
this.handleAnchorPointerDown();
|
|
140
|
-
}, detachedOff: false }, h(PinRenderer, { key: '
|
|
140
|
+
}, detachedOff: false }, h(PinRenderer, { key: 'cf3f679745095b62a6d8dacd705ee4f6093e3773', pin: this.pin, selected: this.selected, occluded: this.occluded, detached: this.detached })), isTextPin(this.pin) && !this.occluded && !this.detached && (h(Fragment, { key: 'b3f3318043cf62dc50021e5af93a333412ddffbb' }, h("vertex-viewer-pin-label-line", { key: 'ccb1e7184620f7d1d1a497066ea70c6e79ac6807', id: `pin-label-line-${(_a = this.pin) === null || _a === void 0 ? void 0 : _a.id}`, pinPoint: pinPoint, pin: this.pin, labelPoint: labelPoint, onPointerDown: () => this.selectPin() }), h("vertex-viewer-pin-label", { key: 'ad4d024b1b1b50aedd70cc35ad16abbca3aef827', pin: this.pin, ref: (el) => (this.labelEl = el), elementBounds: this.elementBounds, pinController: this.pinController, onPointerDown: () => this.selectPin() })))));
|
|
141
141
|
}
|
|
142
142
|
setLabelObserver() {
|
|
143
143
|
if (this.labelEl != null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertex-viewer-pin-group.entry.js","sources":["src/components/viewer-pin-group/pin-renderer.tsx","src/components/viewer-pin-group/utils.ts","src/components/viewer-pin-group/viewer-pin-group.css?tag=vertex-viewer-pin-group","src/components/viewer-pin-group/viewer-pin-group.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport classNames from 'classnames';\n\nimport { getPinColors, isIconPin, isTextPin, Pin } from '../../lib/pins/model';\n\ninterface PinRendererProps {\n pin?: Pin;\n selected: boolean;\n occluded: boolean;\n detached: boolean;\n}\n\nexport const PinRenderer: FunctionalComponent<PinRendererProps> = ({\n pin,\n selected,\n occluded,\n detached,\n}) => {\n const { primaryColor } = getPinColors(pin);\n\n return (\n <Fragment>\n {isTextPin(pin) && (\n <div\n id=\"pin-anchor\"\n class={classNames('pin-anchor', {\n selected: selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n background: primaryColor,\n }}\n ></div>\n )}\n\n {isIconPin(pin) && (\n <vertex-viewer-icon\n name=\"pin-fill\"\n size=\"lg\"\n class={classNames('pin', {\n 'pin-selected': selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n color: primaryColor,\n }}\n />\n )}\n </Fragment>\n );\n};\n","import { Dimensions, Point } from '@vertexvis/geometry';\n\nexport function getClosestCenterToPoint(\n boxPoint: Point.Point,\n pointToMeasure: Point.Point,\n dimensions: Dimensions.Dimensions\n): Point.Point {\n const topPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y,\n };\n\n const bottomPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y + dimensions.height,\n };\n\n const rightPoint = {\n x: boxPoint.x + dimensions.width,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const leftPoint = {\n x: boxPoint.x,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const candidates = [topPoint, bottomPoint, leftPoint, rightPoint];\n\n const distances = candidates.map((candidate) =>\n Point.distance(candidate, pointToMeasure)\n );\n\n const candidateIndex = distances.indexOf(Math.min(...distances));\n return candidates[candidateIndex];\n}\n",":host {\n\n /**\n * @prop --viewer-annotations-pin-primary-color: A CSS color that\n * specifies the primary color for the pins. This value gets used for the dot color \n * and borders\n */\n --viewer-annotations-pin-primary-color: var(--blue-700);\n\n /**\n * @prop --viewer-annotations-pin-accent-color: A CSS color that\n * specifies the accent color for the pins. This value gets used for background colors\n * \n */\n\n --viewer-annotations-pin-accent-color: var(--blue-200);\n /**\n * @prop viewer-annotations-pin-dot-color: A CSS color that\n * specifies the color of the anchor dot\n */\n --viewer-annotations-pin-dot-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-color: A CSS color that\n * specifies the color of the pin\n */\n --viewer-annotations-pin-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-font-size: A CSS property to specify\n the font size of the pin\n */\n --viewer-annotations-pin-font-size: 0.75rem;\n\n /**\n * @prop --viewer-annotations-pin-selected-stroke: A CSS color that\n * specifies the stroke color of a selected pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the border of a selected pin\n */\n --viewer-annotations-pin-selected-border: 2px solid var(--white);\n\n /**\n * @prop --viewer-annotations-pin-label-border: A CSS color that\n * specifies the border of a text pin anchor\n */\n --viewer-annotations-pin-label-border: 2px solid var(--black);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the stroke of a selected default pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n font-size: var(--viewer-annotations-pin-font-size);\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n.pin-anchor {\n position: absolute;\n border-radius: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 9px;\n height: 9px;\n box-sizing: border-box;\n border: var(--viewer-annotations-pin-label-border);\n background: var(--viewer-annotations-pin-dot-color);\n pointer-events: auto;\n cursor: pointer;\n}\n\n.selected {\n width: 13px;\n height: 13px;\n border: var(--viewer-annotations-pin-selected-border)\n}\n\n.pin {\n color: var(--viewer-annotations-pin-color);\n cursor: pointer;\n transition: opacity 0.3s ease-in;\n\n /**\n * Place bottom point of the pin at the location instead of the middle of the pin\n */\n transform: translate(0px, -12px);\n}\n\n.pin-selected {\n stroke-width: 1;\n stroke: var(--viewer-annotations-pin-selected-stroke);\n}\n\n.pin-occluded {\n opacity: .3;\n transition: opacity 0.3s ease-in;\n}\n\n.pin-detached {\n visibility: hidden;\n}","import {\n Component,\n Fragment,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n JSX,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { Dimensions, Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Viewport } from '../..';\nimport { PinController } from '../../lib/pins/controller';\nimport { isTextPin, Pin, TextPin } from '../../lib/pins/model';\nimport { PinModel } from '../../lib/pins/model';\nimport { translatePointToScreen } from '../viewer-pin-tool/utils';\nimport { PinRenderer } from './pin-renderer';\nimport { getClosestCenterToPoint } from './utils';\n\ninterface ComputedPoints {\n pinPoint: Point.Point;\n labelPoint?: Point.Point;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-group',\n styleUrl: 'viewer-pin-group.css',\n shadow: false,\n})\nexport class ViewerPinGroup {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: Pin;\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Projection view matrix used for computing the position of the pin line\n */\n @Prop()\n public projectionViewMatrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop({ mutable: true })\n public elementBounds?: DOMRect;\n\n /**\n * The model that contains the entities and outcomes from performing pin operations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * Whether the pin is \"selected\"\n */\n @Prop()\n public selected = false;\n\n /**\n * @internal\n * Whether the pin is occluded\n */\n @Prop({ mutable: true, reflect: true })\n public occluded = false;\n\n /**\n * @internal\n * Whether the pin is detached\n */\n @Prop({ mutable: true, reflect: true })\n public detached = false;\n\n @State()\n private invalidateStateCounter = 0;\n\n private labelEl: HTMLVertexViewerPinLabelElement | undefined;\n\n private resizeObserver?: ResizeObserver;\n\n protected componentWillLoad(): void {\n if (this.pinController == null) {\n this.pinController = new PinController(this.pinModel);\n }\n }\n\n protected componentDidLoad(): void {\n this.setLabelObserver();\n\n if (this.selected) {\n this.labelEl?.setFocus();\n }\n }\n\n /**\n * @ignore\n */\n @Listen('occlusionStateChanged')\n protected async handleOcclusionStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.occluded = event.detail;\n }\n\n /**\n * @ignore\n */\n @Listen('detachedStateChanged')\n protected async handleDetachedStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.detached = event.detail;\n }\n\n protected disconnectedCallback(): void {\n this.labelEl?.removeEventListener('labelChanged', this.invalidateState);\n this.resizeObserver?.disconnect();\n }\n\n protected render(): JSX.Element {\n if (this.pin == null) {\n throw new Error('Unable to draw pin');\n }\n\n const { pinPoint, labelPoint } = this.computePinPoints(this.pin);\n\n return (\n <Fragment>\n <vertex-viewer-dom-element\n data-testid={`drawn-pin-${this.pin.id}`}\n position={this.pin.worldPosition}\n onPointerDown={async () => {\n await this.labelEl?.submit();\n this.selectPin();\n this.handleAnchorPointerDown();\n }}\n detachedOff={false}\n >\n <PinRenderer\n pin={this.pin}\n selected={this.selected}\n occluded={this.occluded}\n detached={this.detached}\n />\n </vertex-viewer-dom-element>\n\n {isTextPin(this.pin) && !this.occluded && !this.detached && (\n <Fragment>\n <vertex-viewer-pin-label-line\n id={`pin-label-line-${this.pin?.id}`}\n pinPoint={pinPoint}\n pin={this.pin}\n labelPoint={labelPoint}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label-line>\n\n <vertex-viewer-pin-label\n pin={this.pin}\n ref={(el) => (this.labelEl = el)}\n elementBounds={this.elementBounds}\n pinController={this.pinController}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private invalidateState = (): void => {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n };\n\n private setLabelObserver(): void {\n if (this.labelEl != null) {\n this.labelEl.addEventListener('labelChanged', this.invalidateState);\n\n this.resizeObserver = new ResizeObserver(() => this.invalidateState());\n this.resizeObserver.observe(this.labelEl);\n }\n }\n\n private computePinPoints(pin: Pin): ComputedPoints {\n if (this.elementBounds != null && this.pin != null) {\n return isTextPin(this.pin) && this.pin.label.point != null\n ? this.computeTextPinPoints(this.pin, this.elementBounds)\n : this.computeDefaultPinPoints(this.pin, this.elementBounds);\n }\n\n return { pinPoint: pin.worldPosition };\n }\n\n private computeDefaultPinPoints(\n pin: Pin,\n elementBounds: DOMRect\n ): ComputedPoints {\n return {\n pinPoint: this.getFromWorldPosition(\n pin.worldPosition,\n this.projectionViewMatrix,\n elementBounds\n ),\n };\n }\n\n private computeTextPinPoints(\n pin: TextPin,\n elementBounds: DOMRect\n ): ComputedPoints {\n const { pinPoint } = this.computeDefaultPinPoints(pin, elementBounds);\n\n const screenPosition = translatePointToScreen(\n pin.label.point,\n elementBounds\n );\n\n const labelWidth = this.labelEl?.firstElementChild?.clientWidth || 0;\n const labelHeight = this.labelEl?.firstElementChild?.clientHeight || 0;\n\n return {\n pinPoint,\n labelPoint: getClosestCenterToPoint(screenPosition, pinPoint, {\n width: labelWidth,\n height: labelHeight,\n }),\n };\n }\n\n private handleAnchorPointerDown(): void {\n if (\n this.elementBounds != null &&\n this.pinController?.getToolMode() === 'edit' &&\n this.pin != null\n ) {\n this.pinController?.setDraggable({ id: this.pin.id });\n }\n }\n\n private selectPin(): void {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n\n private getFromWorldPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n dimensions: Dimensions.Dimensions\n ): Point.Point {\n const ndcPt = Vector3.transformMatrix(pt, projectionViewMatrix);\n return Viewport.fromDimensions(dimensions).transformVectorToViewport(ndcPt);\n }\n}\n"],"names":["classNames","Point","Matrix4","Vector3"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vertex-viewer-pin-group.entry.js","sources":["src/components/viewer-pin-group/pin-renderer.tsx","src/components/viewer-pin-group/utils.ts","src/components/viewer-pin-group/viewer-pin-group.css?tag=vertex-viewer-pin-group","src/components/viewer-pin-group/viewer-pin-group.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport classNames from 'classnames';\n\nimport { getPinColors, isIconPin, isTextPin, Pin } from '../../lib/pins/model';\n\ninterface PinRendererProps {\n pin?: Pin;\n selected: boolean;\n occluded: boolean;\n detached: boolean;\n}\n\nexport const PinRenderer: FunctionalComponent<PinRendererProps> = ({\n pin,\n selected,\n occluded,\n detached,\n}) => {\n const { primaryColor } = getPinColors(pin);\n\n return (\n <Fragment>\n {isTextPin(pin) && (\n <div\n id=\"pin-anchor\"\n class={classNames('pin-anchor', {\n selected: selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n background: primaryColor,\n }}\n ></div>\n )}\n\n {isIconPin(pin) && (\n <vertex-viewer-icon\n name=\"pin-fill\"\n size=\"lg\"\n class={classNames('pin', {\n 'pin-selected': selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n color: primaryColor,\n }}\n />\n )}\n </Fragment>\n );\n};\n","import { Dimensions, Point } from '@vertexvis/geometry';\n\nexport function getClosestCenterToPoint(\n boxPoint: Point.Point,\n pointToMeasure: Point.Point,\n dimensions: Dimensions.Dimensions,\n): Point.Point {\n const topPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y,\n };\n\n const bottomPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y + dimensions.height,\n };\n\n const rightPoint = {\n x: boxPoint.x + dimensions.width,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const leftPoint = {\n x: boxPoint.x,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const candidates = [topPoint, bottomPoint, leftPoint, rightPoint];\n\n const distances = candidates.map((candidate) =>\n Point.distance(candidate, pointToMeasure),\n );\n\n const candidateIndex = distances.indexOf(Math.min(...distances));\n return candidates[candidateIndex];\n}\n",":host {\n\n /**\n * @prop --viewer-annotations-pin-primary-color: A CSS color that\n * specifies the primary color for the pins. This value gets used for the dot color \n * and borders\n */\n --viewer-annotations-pin-primary-color: var(--blue-700);\n\n /**\n * @prop --viewer-annotations-pin-accent-color: A CSS color that\n * specifies the accent color for the pins. This value gets used for background colors\n * \n */\n\n --viewer-annotations-pin-accent-color: var(--blue-200);\n /**\n * @prop viewer-annotations-pin-dot-color: A CSS color that\n * specifies the color of the anchor dot\n */\n --viewer-annotations-pin-dot-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-color: A CSS color that\n * specifies the color of the pin\n */\n --viewer-annotations-pin-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-font-size: A CSS property to specify\n the font size of the pin\n */\n --viewer-annotations-pin-font-size: 0.75rem;\n\n /**\n * @prop --viewer-annotations-pin-selected-stroke: A CSS color that\n * specifies the stroke color of a selected pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the border of a selected pin\n */\n --viewer-annotations-pin-selected-border: 2px solid var(--white);\n\n /**\n * @prop --viewer-annotations-pin-label-border: A CSS color that\n * specifies the border of a text pin anchor\n */\n --viewer-annotations-pin-label-border: 2px solid var(--black);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the stroke of a selected default pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n font-size: var(--viewer-annotations-pin-font-size);\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n.pin-anchor {\n position: absolute;\n border-radius: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 9px;\n height: 9px;\n box-sizing: border-box;\n border: var(--viewer-annotations-pin-label-border);\n background: var(--viewer-annotations-pin-dot-color);\n pointer-events: auto;\n cursor: pointer;\n}\n\n.selected {\n width: 13px;\n height: 13px;\n border: var(--viewer-annotations-pin-selected-border)\n}\n\n.pin {\n color: var(--viewer-annotations-pin-color);\n cursor: pointer;\n transition: opacity 0.3s ease-in;\n\n /**\n * Place bottom point of the pin at the location instead of the middle of the pin\n */\n transform: translate(0px, -12px);\n}\n\n.pin-selected {\n stroke-width: 1;\n stroke: var(--viewer-annotations-pin-selected-stroke);\n}\n\n.pin-occluded {\n opacity: .3;\n transition: opacity 0.3s ease-in;\n}\n\n.pin-detached {\n visibility: hidden;\n}","import {\n Component,\n Fragment,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n JSX,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { Dimensions, Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Viewport } from '../..';\nimport { PinController } from '../../lib/pins/controller';\nimport { isTextPin, Pin, TextPin } from '../../lib/pins/model';\nimport { PinModel } from '../../lib/pins/model';\nimport { translatePointToScreen } from '../viewer-pin-tool/utils';\nimport { PinRenderer } from './pin-renderer';\nimport { getClosestCenterToPoint } from './utils';\n\ninterface ComputedPoints {\n pinPoint: Point.Point;\n labelPoint?: Point.Point;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-group',\n styleUrl: 'viewer-pin-group.css',\n shadow: false,\n})\nexport class ViewerPinGroup {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: Pin;\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Projection view matrix used for computing the position of the pin line\n */\n @Prop()\n public projectionViewMatrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop({ mutable: true })\n public elementBounds?: DOMRect;\n\n /**\n * The model that contains the entities and outcomes from performing pin operations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * Whether the pin is \"selected\"\n */\n @Prop()\n public selected = false;\n\n /**\n * @internal\n * Whether the pin is occluded\n */\n @Prop({ mutable: true, reflect: true })\n public occluded = false;\n\n /**\n * @internal\n * Whether the pin is detached\n */\n @Prop({ mutable: true, reflect: true })\n public detached = false;\n\n @State()\n private invalidateStateCounter = 0;\n\n private labelEl: HTMLVertexViewerPinLabelElement | undefined;\n\n private resizeObserver?: ResizeObserver;\n\n protected componentWillLoad(): void {\n if (this.pinController == null) {\n this.pinController = new PinController(this.pinModel);\n }\n }\n\n protected componentDidLoad(): void {\n this.setLabelObserver();\n\n if (this.selected) {\n this.labelEl?.setFocus();\n }\n }\n\n /**\n * @ignore\n */\n @Listen('occlusionStateChanged')\n protected async handleOcclusionStateChanged(\n event: CustomEvent<boolean>,\n ): Promise<void> {\n this.occluded = event.detail;\n }\n\n /**\n * @ignore\n */\n @Listen('detachedStateChanged')\n protected async handleDetachedStateChanged(\n event: CustomEvent<boolean>,\n ): Promise<void> {\n this.detached = event.detail;\n }\n\n protected disconnectedCallback(): void {\n this.labelEl?.removeEventListener('labelChanged', this.invalidateState);\n this.resizeObserver?.disconnect();\n }\n\n protected render(): JSX.Element {\n if (this.pin == null) {\n throw new Error('Unable to draw pin');\n }\n\n const { pinPoint, labelPoint } = this.computePinPoints(this.pin);\n\n return (\n <Fragment>\n <vertex-viewer-dom-element\n data-testid={`drawn-pin-${this.pin.id}`}\n position={this.pin.worldPosition}\n onPointerDown={async () => {\n await this.labelEl?.submit();\n this.selectPin();\n this.handleAnchorPointerDown();\n }}\n detachedOff={false}\n >\n <PinRenderer\n pin={this.pin}\n selected={this.selected}\n occluded={this.occluded}\n detached={this.detached}\n />\n </vertex-viewer-dom-element>\n\n {isTextPin(this.pin) && !this.occluded && !this.detached && (\n <Fragment>\n <vertex-viewer-pin-label-line\n id={`pin-label-line-${this.pin?.id}`}\n pinPoint={pinPoint}\n pin={this.pin}\n labelPoint={labelPoint}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label-line>\n\n <vertex-viewer-pin-label\n pin={this.pin}\n ref={(el) => (this.labelEl = el)}\n elementBounds={this.elementBounds}\n pinController={this.pinController}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private invalidateState = (): void => {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n };\n\n private setLabelObserver(): void {\n if (this.labelEl != null) {\n this.labelEl.addEventListener('labelChanged', this.invalidateState);\n\n this.resizeObserver = new ResizeObserver(() => this.invalidateState());\n this.resizeObserver.observe(this.labelEl);\n }\n }\n\n private computePinPoints(pin: Pin): ComputedPoints {\n if (this.elementBounds != null && this.pin != null) {\n return isTextPin(this.pin) && this.pin.label.point != null\n ? this.computeTextPinPoints(this.pin, this.elementBounds)\n : this.computeDefaultPinPoints(this.pin, this.elementBounds);\n }\n\n return { pinPoint: pin.worldPosition };\n }\n\n private computeDefaultPinPoints(\n pin: Pin,\n elementBounds: DOMRect,\n ): ComputedPoints {\n return {\n pinPoint: this.getFromWorldPosition(\n pin.worldPosition,\n this.projectionViewMatrix,\n elementBounds,\n ),\n };\n }\n\n private computeTextPinPoints(\n pin: TextPin,\n elementBounds: DOMRect,\n ): ComputedPoints {\n const { pinPoint } = this.computeDefaultPinPoints(pin, elementBounds);\n\n const screenPosition = translatePointToScreen(\n pin.label.point,\n elementBounds,\n );\n\n const labelWidth = this.labelEl?.firstElementChild?.clientWidth || 0;\n const labelHeight = this.labelEl?.firstElementChild?.clientHeight || 0;\n\n return {\n pinPoint,\n labelPoint: getClosestCenterToPoint(screenPosition, pinPoint, {\n width: labelWidth,\n height: labelHeight,\n }),\n };\n }\n\n private handleAnchorPointerDown(): void {\n if (\n this.elementBounds != null &&\n this.pinController?.getToolMode() === 'edit' &&\n this.pin != null\n ) {\n this.pinController?.setDraggable({ id: this.pin.id });\n }\n }\n\n private selectPin(): void {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n\n private getFromWorldPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n dimensions: Dimensions.Dimensions,\n ): Point.Point {\n const ndcPt = Vector3.transformMatrix(pt, projectionViewMatrix);\n return Viewport.fromDimensions(dimensions).transformVectorToViewport(ndcPt);\n }\n}\n"],"names":["classNames","Point","Matrix4","Vector3"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"vertex-viewer-pin-label_2.entry.js","mappings":"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","names":["point","Point","classNames"],"sources":["src/components/viewer-pin-label/utils.ts","src/components/viewer-pin-label/viewer-pin-label.css?tag=vertex-viewer-pin-label","src/components/viewer-pin-label/viewer-pin-label.tsx","src/components/viewer-pin-label-line/viewer-pin-label-line.css?tag=vertex-viewer-pin-label-line","src/components/viewer-pin-label-line/viewer-pin-label-line.tsx"],"sourcesContent":["export function getComputedStyle(el: HTMLElement): CSSStyleDeclaration {\n return window.getComputedStyle(el);\n}\n",":host {\n /**\n * @prop --viewer-annotations-pin-label-background-color: A CSS color that\n * specifies the color of the label background\n */\n --viewer-annotations-pin-label-background-color: var(--viewer-annotations-pin-accent-color);\n\n /**\n * @prop --viewer-annotations-pin-label-border-color: A CSS color that\n * specifies the color of the label's border\n */\n --viewer-annotations-pin-label-border-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-label-focused-border-color: A CSS color that\n * specifies the color of the label's border when focused. \n */\n --viewer-annotations-pin-label-focused-border-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-label-color: A CSS color that\n * specifies the color of the label \n */\n --viewer-annotations-pin-label-color: var(--white);\n\n /**\n * @prop --viewer-annotations-pin-label-padding-y: A var that\n * specifies the vertical padding of the label\n */\n --viewer-annotations-pin-label-padding-y: 0.375em;\n\n /**\n * @prop --viewer-annotations-pin-label-padding-x: A var that\n * specifies the horizontal padding of the label\n */\n --viewer-annotations-pin-label-padding-x: 0.5em;\n\n /**\n * @prop --viewer-annotations-pin-label-border-width: A CSS length that\n * specifies the width of the border on this label. Defaults to `2px`.\n */\n --viewer-annotations-pin-label-border-width: 2px;\n\n /**\n * @prop --viewer-annotations-pin-label-border-style: A CSS variable that\n * specifies the style of border on this label. Defaults to `solid`.\n */\n --viewer-annotations-pin-label-border-style: solid;\n\n /**\n * @prop --viewer-annotations-pin-label-border-radius: A var that\n * specifies the border radius of the label\n */\n --viewer-annotations-pin-label-border-radius: 0.25em;\n\n /**\n * @prop --viewer-annotations-pin-label-min-width: A CSS length that\n * specifies the minimum width of the label. Defaults to `2rem`.\n */\n --viewer-annotations-pin-label-min-width: 2rem;\n\n /**\n * @prop --viewer-annotations-pin-label-max-width: A CSS length that\n * specifies the maximum width of the label. Defaults to `25rem`.\n */\n --viewer-annotations-pin-label-max-width: 25rem;\n\n /**\n * @prop --viewer-annotations-pin-label-max-height: A CSS length that\n * specifies the maximum height of the label. Defaults to `50rem`.\n */\n --viewer-annotations-pin-label-max-height: 50rem;\n\n overflow: hidden;\n pointer-events: none;\n}\n\n:host([mode='']) .pin-label {\n color: var(--viewer-annotations-pin-label-color);\n background: var(--viewer-annotations-pin-label-background-color);\n}\n\n.pin-label-text {\n font-family: Arial, Helvetica, sans-serif;\n font-size: 0.875rem;\n line-height: 1rem;\n word-break: break-word;\n white-space: pre-wrap;\n}\n\n.pin-label-input-wrapper {\n display: flex;\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n min-width: var(--viewer-annotations-pin-label-min-width);\n max-width: var(--viewer-annotations-pin-label-max-width);\n max-height: var(--viewer-annotations-pin-label-max-height);\n background: var(--viewer-annotations-pin-label-background-color);\n border-width: var(--viewer-annotations-pin-label-border-width);\n border-style: var(--viewer-annotations-pin-label-border-style);\n border-color: var(--viewer-annotations-pin-label-border-color);\n border-radius: var(--viewer-annotations-pin-label-border-radius);\n}\n\n.pin-label-input-wrapper.focused {\n min-width: var(--viewer-annotations-pin-label-max-width);\n border-color: var(--viewer-annotations-pin-label-focused-border-color);\n}\n\n.pin-input-drag-target {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n\n.pin-label-input {\n resize: none;\n position: relative;\n outline: none;\n border: none;\n word-break: break-word;\n padding: 0 0 0 0;\n background-color: transparent;\n margin: var(--viewer-annotations-pin-label-padding-y) var(--viewer-annotations-pin-label-padding-x);\n width: var(--viewer-annotations-pin-label-min-width);\n flex-grow: 1;\n overflow: hidden;\n max-width: calc(var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)));\n}\n\n.pin-label-input.readonly {\n pointer-events: auto;\n color: black;\n cursor: pointer;\n}\n\n.pin-label-hidden {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n width: auto;\n height: auto;\n box-sizing: border-box;\n border-width: var(--viewer-annotations-pin-label-border-width);\n border-style: var(--viewer-annotations-pin-label-border-style);\n border-color: var(--viewer-annotations-pin-label-border-color);\n margin: var(--viewer-annotations-pin-label-padding-y) 0;\n padding: 0 var(--viewer-annotations-pin-label-padding-x);\n max-width: calc(var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)));\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport classNames from 'classnames';\n\nimport { getMouseClientPosition } from '../../lib/dom';\nimport { PinController } from '../../lib/pins/controller';\nimport {\n getPinColors,\n isTextPin,\n PinModel,\n TextPin,\n} from '../../lib/pins/model';\nimport { readDOM } from '../../lib/stencil';\nimport {\n translatePointToRelative,\n translatePointToScreen,\n} from '../viewer-pin-tool/utils';\nimport { getComputedStyle } from './utils';\n\n@Component({\n tag: 'vertex-viewer-pin-label',\n styleUrl: 'viewer-pin-label.css',\n shadow: false,\n})\nexport class VertexPinLabel {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: TextPin;\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop()\n public elementBounds?: DOMRect;\n\n /**\n * The current text value of the component. Value is updated on user\n * interaction.\n */\n @Prop({ mutable: true })\n public value = '';\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * @internal\n */\n @Event({ bubbles: true })\n public labelChanged!: EventEmitter<void>;\n\n /**\n * Emitted whenever the label is focused, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelFocused!: EventEmitter<string | undefined>;\n\n /**\n * Emitted whenever the label is blurred, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelBlurred!: EventEmitter<string | undefined>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private focused = false;\n\n @State()\n private computedScreenPosition?: Point.Point;\n\n @State()\n private textareaRows = 1;\n\n @State()\n private contentElBounds?: DOMRect;\n\n private relativePointerDownPosition?: Point.Point;\n private pinPointerDownPosition?: Point.Point;\n\n private inputEl?: HTMLTextAreaElement;\n private contentEl?: HTMLDivElement;\n\n private resizeObserver?: ResizeObserver;\n private contentResizeObserver?: ResizeObserver;\n\n /**\n * Gives focus to the component's internal text input.\n */\n @Method()\n public async setFocus(): Promise<void> {\n // HTMLInputElement.focus() doesn't exist in tests.\n if (typeof this.inputEl?.focus === 'function') {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n this.inputEl?.focus();\n }\n }\n\n /**\n * @internal\n * submits the current text, unfocuses the input and emits the blur event to consumers\n */\n @Method()\n public async submit(): Promise<void> {\n this.focused = false;\n this.labelBlurred.emit(this.pin?.id);\n if (this.pin != null) {\n this.pinController?.updatePin({\n ...this.pin,\n label: {\n point: this.pin.label.point,\n text: this.value,\n },\n });\n }\n }\n\n @Watch('focused')\n protected watchFocusChange(): void {\n this.labelChanged.emit();\n\n if (this.focused) {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n }\n\n @Watch('pin')\n protected watchPinChange(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n }\n\n @Watch('elementBounds')\n protected watchElementBoundsChange(): void {\n this.computeScreenPosition();\n }\n\n protected componentWillLoad(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n\n if (this.pinController == null) {\n this.pinController = new PinController(new PinModel());\n }\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => {\n this.labelChanged.emit();\n });\n\n this.contentResizeObserver = new ResizeObserver(this.computeContentSize);\n\n if (this.hostEl != null) {\n this.resizeObserver.observe(this.hostEl);\n }\n\n if (this.contentEl != null) {\n this.contentResizeObserver.observe(this.contentEl);\n }\n }\n\n protected disconnectedCallback(): void {\n this.resizeObserver?.disconnect();\n this.contentResizeObserver?.disconnect();\n }\n\n protected componentDidRender(): void {\n if (this.focused && this.inputEl != null) {\n this.setFocus();\n }\n }\n\n protected render(): JSX.Element {\n const { primaryColor, accentColor } = getPinColors(this.pin);\n return (\n <Host>\n <div\n class={classNames('pin-label-input-wrapper', {\n focused: this.focused,\n })}\n onPointerDown={this.handlePointerDown}\n style={{\n top: `${this.computedScreenPosition?.y.toString() || 0}px`,\n left: `${this.computedScreenPosition?.x.toString() || 0}px`,\n minWidth: this.computeMinWidth(),\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n borderColor: primaryColor,\n background: accentColor,\n }}\n >\n <textarea\n id={`pin-label-input-${this.pin?.id}`}\n class={classNames('pin-label-input', 'pin-label-text', {\n ['readonly']: !this.focused,\n })}\n disabled={!this.focused}\n ref={(ref) => (this.inputEl = ref)}\n value={this.value}\n rows={this.textareaRows}\n onKeyDown={this.handleInputKeyDown}\n onInput={this.handleTextInput}\n onBlur={this.handleTextBlur}\n />\n {/* This corrects for a behavior in Firefox where setting the `disabled` attribute to true */}\n {/* prevents any events from propagating. */}\n {!this.focused && (\n <div\n class=\"pin-input-drag-target\"\n onPointerDown={this.handlePointerDown}\n />\n )}\n </div>\n <div\n ref={(el) => (this.contentEl = el)}\n class={classNames('pin-label-text', 'pin-label-hidden')}\n style={{\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n }}\n >\n {this.hiddenContent()}\n </div>\n </Host>\n );\n }\n\n private hiddenContent(): Array<string | HTMLBRElement> {\n // This corrects some inconsistencies in how a newline character\n // is represented in a div. Leveraging `<br>`s results in a more\n // consistent representation of the newlines in a textarea.\n return this.value.includes('\\n')\n ? this.value\n .split('\\n')\n .reduce(\n (res, str) => [...res, str, <br />],\n [] as Array<string | HTMLBRElement>\n )\n : [this.value];\n }\n\n private computeMinWidth(): string {\n if (this.contentElBounds != null) {\n const expected = `${this.contentElBounds.width + 8}px`;\n\n return `min(${expected}, ${this.computeMaxWidth()})`;\n } else {\n return `var(--viewer-annotations-pin-label-min-width)`;\n }\n }\n\n private computeMaxWidth(): string {\n const expected = `var(--viewer-annotations-pin-label-max-width)`;\n\n return `min(${expected}, ${this.computeRemainingWidth()})`;\n }\n\n private computeMaxHeight(): string {\n const expected = `var(--viewer-annotations-pin-label-max-height)`;\n\n return `min(${expected}, ${this.computeRemainingHeight()})`;\n }\n\n private computeRemainingWidth(): string {\n return `calc(${this.elementBounds?.width.toString() || 0}px - ${\n this.computedScreenPosition?.x.toString() || 0\n }px)`;\n }\n\n private computeRemainingHeight(): string {\n return `calc(${this.elementBounds?.height.toString() || 0}px - ${\n this.computedScreenPosition?.y.toString() || 0\n }px)`;\n }\n\n private computeScreenPosition(): void {\n this.computedScreenPosition =\n isTextPin(this.pin) &&\n this.elementBounds != null &&\n this.pin.label.point != null\n ? translatePointToScreen(this.pin.label.point, this.elementBounds)\n : undefined;\n }\n\n private computeContentSize = (): void => {\n readDOM(() => {\n if (this.contentEl != null) {\n this.contentElBounds = this.contentEl.getBoundingClientRect();\n const computedStyles = getComputedStyle(this.contentEl);\n this.textareaRows = Math.max(\n 1,\n Math.ceil(\n (parseFloat(computedStyles.getPropertyValue('height')) -\n parseFloat(computedStyles.getPropertyValue('borderWidth')) * 2) /\n parseFloat(computedStyles.getPropertyValue('lineHeight'))\n )\n );\n }\n });\n };\n\n private handleInputKeyDown = (event: KeyboardEvent): void => {\n event.stopPropagation();\n if (\n event.key === 'Enter' &&\n (event.ctrlKey || event.metaKey || event.shiftKey)\n ) {\n this.textareaRows += 1;\n this.value += '\\n';\n } else if (event.key === 'Enter') {\n event.preventDefault();\n this.submit();\n }\n };\n\n private handlePointerDown = (event: PointerEvent): void => {\n if (!this.focused) {\n if (this.elementBounds != null) {\n if (event.buttons !== 2) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.relativePointerDownPosition = translatePointToRelative(\n getMouseClientPosition(event, this.elementBounds),\n this.elementBounds\n );\n this.pinPointerDownPosition = this.pin?.label.point;\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n }\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (\n this.elementBounds != null &&\n this.relativePointerDownPosition &&\n this.pinPointerDownPosition != null\n ) {\n // Prevent selection of any text while interacting with the label\n event.preventDefault();\n event.stopPropagation();\n\n const point = getMouseClientPosition(event, this.elementBounds);\n const relative = translatePointToRelative(point, this.elementBounds);\n\n const relativeDelta = Point.subtract(\n relative,\n this.relativePointerDownPosition\n );\n\n const myUpdatedPin =\n this.pin != null\n ? {\n ...this.pin,\n label: {\n ...this.pin.label,\n point: Point.add(this.pinPointerDownPosition, relativeDelta),\n },\n }\n : undefined;\n\n if (myUpdatedPin) {\n this.pinController?.updatePin(myUpdatedPin);\n this.computeScreenPosition();\n }\n }\n };\n\n private handlePointerUp = (event: PointerEvent): void => {\n if (\n this.pinController?.getToolMode() === 'edit' &&\n this.relativePointerDownPosition != null &&\n this.elementBounds != null\n ) {\n const pointerDownScreen = translatePointToScreen(\n this.relativePointerDownPosition,\n this.elementBounds\n );\n const distanceBetweenStartAndEndPoint = Point.distance(\n pointerDownScreen,\n getMouseClientPosition(event, this.elementBounds)\n );\n\n if (distanceBetweenStartAndEndPoint <= 2) {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n }\n }\n\n this.relativePointerDownPosition = undefined;\n this.pinPointerDownPosition = undefined;\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.removeEventListener('pointerup', this.handlePointerUp);\n };\n\n private handleTextBlur = (): void => {\n this.submit();\n };\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n };\n}\n","\n:host {\n /**\n * @prop --viewer-annotations-pin-label-line-color: A CSS color that\n * specifies the color of the label line\n */\n --viewer-annotations-pin-label-line-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-label-line-width: A CSS color that\n * specifies the width of the label line\n */\n --viewer-annotations-pin-label-line-width: 1;\n\n overflow: hidden;\n pointer-events: none;\n}\n\n.label-line {\n pointer-events: auto;\n stroke: var(--viewer-annotations-pin-label-line-color);\n stroke-width: var( --viewer-annotations-pin-label-line-width);\n cursor: default;\n}\n\n.svg {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n height: 100%;\n width: 100%;\n}\n","import {\n Component,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Prop,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\n\nimport { getPinColors, Pin } from '../../lib/pins/model';\n\n@Component({\n tag: 'vertex-viewer-pin-label-line',\n styleUrl: 'viewer-pin-label-line.css',\n shadow: false,\n})\nexport class VertexPinLabelLine {\n @Prop()\n public pinPoint: Point.Point | undefined;\n\n @Prop()\n public labelPoint: Point.Point | undefined;\n\n @Prop()\n public pin: Pin | undefined;\n\n protected render(): JSX.Element {\n const { primaryColor } = getPinColors(this.pin);\n return (\n <Host>\n <svg class=\"svg\">\n <line\n class=\"label-line\"\n style={{\n stroke: primaryColor,\n }}\n x1={this.labelPoint?.x}\n y1={this.labelPoint?.y}\n x2={this.pinPoint?.x}\n y2={this.pinPoint?.y}\n />\n </svg>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"vertex-viewer-pin-label_2.entry.js","mappings":"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","names":["point","Point","classNames"],"sources":["src/components/viewer-pin-label/utils.ts","src/components/viewer-pin-label/viewer-pin-label.css?tag=vertex-viewer-pin-label","src/components/viewer-pin-label/viewer-pin-label.tsx","src/components/viewer-pin-label-line/viewer-pin-label-line.css?tag=vertex-viewer-pin-label-line","src/components/viewer-pin-label-line/viewer-pin-label-line.tsx"],"sourcesContent":["export function getComputedStyle(el: HTMLElement): CSSStyleDeclaration {\n return window.getComputedStyle(el);\n}\n",":host {\n /**\n * @prop --viewer-annotations-pin-label-background-color: A CSS color that\n * specifies the color of the label background\n */\n --viewer-annotations-pin-label-background-color: var(--viewer-annotations-pin-accent-color);\n\n /**\n * @prop --viewer-annotations-pin-label-border-color: A CSS color that\n * specifies the color of the label's border\n */\n --viewer-annotations-pin-label-border-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-label-focused-border-color: A CSS color that\n * specifies the color of the label's border when focused. \n */\n --viewer-annotations-pin-label-focused-border-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-label-color: A CSS color that\n * specifies the color of the label \n */\n --viewer-annotations-pin-label-color: var(--white);\n\n /**\n * @prop --viewer-annotations-pin-label-padding-y: A var that\n * specifies the vertical padding of the label\n */\n --viewer-annotations-pin-label-padding-y: 0.375em;\n\n /**\n * @prop --viewer-annotations-pin-label-padding-x: A var that\n * specifies the horizontal padding of the label\n */\n --viewer-annotations-pin-label-padding-x: 0.5em;\n\n /**\n * @prop --viewer-annotations-pin-label-border-width: A CSS length that\n * specifies the width of the border on this label. Defaults to `2px`.\n */\n --viewer-annotations-pin-label-border-width: 2px;\n\n /**\n * @prop --viewer-annotations-pin-label-border-style: A CSS variable that\n * specifies the style of border on this label. Defaults to `solid`.\n */\n --viewer-annotations-pin-label-border-style: solid;\n\n /**\n * @prop --viewer-annotations-pin-label-border-radius: A var that\n * specifies the border radius of the label\n */\n --viewer-annotations-pin-label-border-radius: 0.25em;\n\n /**\n * @prop --viewer-annotations-pin-label-min-width: A CSS length that\n * specifies the minimum width of the label. Defaults to `2rem`.\n */\n --viewer-annotations-pin-label-min-width: 2rem;\n\n /**\n * @prop --viewer-annotations-pin-label-max-width: A CSS length that\n * specifies the maximum width of the label. Defaults to `25rem`.\n */\n --viewer-annotations-pin-label-max-width: 25rem;\n\n /**\n * @prop --viewer-annotations-pin-label-max-height: A CSS length that\n * specifies the maximum height of the label. Defaults to `50rem`.\n */\n --viewer-annotations-pin-label-max-height: 50rem;\n\n overflow: hidden;\n pointer-events: none;\n}\n\n:host([mode='']) .pin-label {\n color: var(--viewer-annotations-pin-label-color);\n background: var(--viewer-annotations-pin-label-background-color);\n}\n\n.pin-label-text {\n font-family: Arial, Helvetica, sans-serif;\n font-size: 0.875rem;\n line-height: 1rem;\n word-break: break-word;\n white-space: pre-wrap;\n}\n\n.pin-label-input-wrapper {\n display: flex;\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n min-width: var(--viewer-annotations-pin-label-min-width);\n max-width: var(--viewer-annotations-pin-label-max-width);\n max-height: var(--viewer-annotations-pin-label-max-height);\n background: var(--viewer-annotations-pin-label-background-color);\n border-width: var(--viewer-annotations-pin-label-border-width);\n border-style: var(--viewer-annotations-pin-label-border-style);\n border-color: var(--viewer-annotations-pin-label-border-color);\n border-radius: var(--viewer-annotations-pin-label-border-radius);\n}\n\n.pin-label-input-wrapper.focused {\n min-width: var(--viewer-annotations-pin-label-max-width);\n border-color: var(--viewer-annotations-pin-label-focused-border-color);\n}\n\n.pin-input-drag-target {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n\n.pin-label-input {\n resize: none;\n position: relative;\n outline: none;\n border: none;\n word-break: break-word;\n padding: 0 0 0 0;\n background-color: transparent;\n margin: var(--viewer-annotations-pin-label-padding-y) var(--viewer-annotations-pin-label-padding-x);\n width: var(--viewer-annotations-pin-label-min-width);\n flex-grow: 1;\n overflow: hidden;\n max-width: calc(var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)));\n}\n\n.pin-label-input.readonly {\n pointer-events: auto;\n color: black;\n cursor: pointer;\n}\n\n.pin-label-hidden {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n width: auto;\n height: auto;\n box-sizing: border-box;\n border-width: var(--viewer-annotations-pin-label-border-width);\n border-style: var(--viewer-annotations-pin-label-border-style);\n border-color: var(--viewer-annotations-pin-label-border-color);\n margin: var(--viewer-annotations-pin-label-padding-y) 0;\n padding: 0 var(--viewer-annotations-pin-label-padding-x);\n max-width: calc(var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)));\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport classNames from 'classnames';\n\nimport { getMouseClientPosition } from '../../lib/dom';\nimport { PinController } from '../../lib/pins/controller';\nimport {\n getPinColors,\n isTextPin,\n PinModel,\n TextPin,\n} from '../../lib/pins/model';\nimport { readDOM } from '../../lib/stencil';\nimport {\n translatePointToRelative,\n translatePointToScreen,\n} from '../viewer-pin-tool/utils';\nimport { getComputedStyle } from './utils';\n\n@Component({\n tag: 'vertex-viewer-pin-label',\n styleUrl: 'viewer-pin-label.css',\n shadow: false,\n})\nexport class VertexPinLabel {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: TextPin;\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop()\n public elementBounds?: DOMRect;\n\n /**\n * The current text value of the component. Value is updated on user\n * interaction.\n */\n @Prop({ mutable: true })\n public value = '';\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * @internal\n */\n @Event({ bubbles: true })\n public labelChanged!: EventEmitter<void>;\n\n /**\n * Emitted whenever the label is focused, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelFocused!: EventEmitter<string | undefined>;\n\n /**\n * Emitted whenever the label is blurred, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelBlurred!: EventEmitter<string | undefined>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private focused = false;\n\n @State()\n private computedScreenPosition?: Point.Point;\n\n @State()\n private textareaRows = 1;\n\n @State()\n private contentElBounds?: DOMRect;\n\n private relativePointerDownPosition?: Point.Point;\n private pinPointerDownPosition?: Point.Point;\n\n private inputEl?: HTMLTextAreaElement;\n private contentEl?: HTMLDivElement;\n\n private resizeObserver?: ResizeObserver;\n private contentResizeObserver?: ResizeObserver;\n\n /**\n * Gives focus to the component's internal text input.\n */\n @Method()\n public async setFocus(): Promise<void> {\n // HTMLInputElement.focus() doesn't exist in tests.\n if (typeof this.inputEl?.focus === 'function') {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n this.inputEl?.focus();\n }\n }\n\n /**\n * @internal\n * submits the current text, unfocuses the input and emits the blur event to consumers\n */\n @Method()\n public async submit(): Promise<void> {\n this.focused = false;\n this.labelBlurred.emit(this.pin?.id);\n if (this.pin != null) {\n this.pinController?.updatePin({\n ...this.pin,\n label: {\n point: this.pin.label.point,\n text: this.value,\n },\n });\n }\n }\n\n @Watch('focused')\n protected watchFocusChange(): void {\n this.labelChanged.emit();\n\n if (this.focused) {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n }\n\n @Watch('pin')\n protected watchPinChange(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n }\n\n @Watch('elementBounds')\n protected watchElementBoundsChange(): void {\n this.computeScreenPosition();\n }\n\n protected componentWillLoad(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n\n if (this.pinController == null) {\n this.pinController = new PinController(new PinModel());\n }\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => {\n this.labelChanged.emit();\n });\n\n this.contentResizeObserver = new ResizeObserver(this.computeContentSize);\n\n if (this.hostEl != null) {\n this.resizeObserver.observe(this.hostEl);\n }\n\n if (this.contentEl != null) {\n this.contentResizeObserver.observe(this.contentEl);\n }\n }\n\n protected disconnectedCallback(): void {\n this.resizeObserver?.disconnect();\n this.contentResizeObserver?.disconnect();\n }\n\n protected componentDidRender(): void {\n if (this.focused && this.inputEl != null) {\n this.setFocus();\n }\n }\n\n protected render(): JSX.Element {\n const { primaryColor, accentColor } = getPinColors(this.pin);\n return (\n <Host>\n <div\n class={classNames('pin-label-input-wrapper', {\n focused: this.focused,\n })}\n onPointerDown={this.handlePointerDown}\n style={{\n top: `${this.computedScreenPosition?.y.toString() || 0}px`,\n left: `${this.computedScreenPosition?.x.toString() || 0}px`,\n minWidth: this.computeMinWidth(),\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n borderColor: primaryColor,\n background: accentColor,\n }}\n >\n <textarea\n id={`pin-label-input-${this.pin?.id}`}\n class={classNames('pin-label-input', 'pin-label-text', {\n ['readonly']: !this.focused,\n })}\n disabled={!this.focused}\n ref={(ref) => (this.inputEl = ref)}\n value={this.value}\n rows={this.textareaRows}\n onKeyDown={this.handleInputKeyDown}\n onInput={this.handleTextInput}\n onBlur={this.handleTextBlur}\n />\n {/* This corrects for a behavior in Firefox where setting the `disabled` attribute to true */}\n {/* prevents any events from propagating. */}\n {!this.focused && (\n <div\n class=\"pin-input-drag-target\"\n onPointerDown={this.handlePointerDown}\n />\n )}\n </div>\n <div\n ref={(el) => (this.contentEl = el)}\n class={classNames('pin-label-text', 'pin-label-hidden')}\n style={{\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n }}\n >\n {this.hiddenContent()}\n </div>\n </Host>\n );\n }\n\n private hiddenContent(): Array<string | HTMLBRElement> {\n // This corrects some inconsistencies in how a newline character\n // is represented in a div. Leveraging `<br>`s results in a more\n // consistent representation of the newlines in a textarea.\n return this.value.includes('\\n')\n ? this.value\n .split('\\n')\n .reduce(\n (res, str) => [...res, str, <br />],\n [] as Array<string | HTMLBRElement>,\n )\n : [this.value];\n }\n\n private computeMinWidth(): string {\n if (this.contentElBounds != null) {\n const expected = `${this.contentElBounds.width + 8}px`;\n\n return `min(${expected}, ${this.computeMaxWidth()})`;\n } else {\n return `var(--viewer-annotations-pin-label-min-width)`;\n }\n }\n\n private computeMaxWidth(): string {\n const expected = `var(--viewer-annotations-pin-label-max-width)`;\n\n return `min(${expected}, ${this.computeRemainingWidth()})`;\n }\n\n private computeMaxHeight(): string {\n const expected = `var(--viewer-annotations-pin-label-max-height)`;\n\n return `min(${expected}, ${this.computeRemainingHeight()})`;\n }\n\n private computeRemainingWidth(): string {\n return `calc(${this.elementBounds?.width.toString() || 0}px - ${\n this.computedScreenPosition?.x.toString() || 0\n }px)`;\n }\n\n private computeRemainingHeight(): string {\n return `calc(${this.elementBounds?.height.toString() || 0}px - ${\n this.computedScreenPosition?.y.toString() || 0\n }px)`;\n }\n\n private computeScreenPosition(): void {\n this.computedScreenPosition =\n isTextPin(this.pin) &&\n this.elementBounds != null &&\n this.pin.label.point != null\n ? translatePointToScreen(this.pin.label.point, this.elementBounds)\n : undefined;\n }\n\n private computeContentSize = (): void => {\n readDOM(() => {\n if (this.contentEl != null) {\n this.contentElBounds = this.contentEl.getBoundingClientRect();\n const computedStyles = getComputedStyle(this.contentEl);\n this.textareaRows = Math.max(\n 1,\n Math.ceil(\n (parseFloat(computedStyles.getPropertyValue('height')) -\n parseFloat(computedStyles.getPropertyValue('borderWidth')) * 2) /\n parseFloat(computedStyles.getPropertyValue('lineHeight')),\n ),\n );\n }\n });\n };\n\n private handleInputKeyDown = (event: KeyboardEvent): void => {\n event.stopPropagation();\n if (\n event.key === 'Enter' &&\n (event.ctrlKey || event.metaKey || event.shiftKey)\n ) {\n this.textareaRows += 1;\n this.value += '\\n';\n } else if (event.key === 'Enter') {\n event.preventDefault();\n this.submit();\n }\n };\n\n private handlePointerDown = (event: PointerEvent): void => {\n if (!this.focused) {\n if (this.elementBounds != null) {\n if (event.buttons !== 2) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.relativePointerDownPosition = translatePointToRelative(\n getMouseClientPosition(event, this.elementBounds),\n this.elementBounds,\n );\n this.pinPointerDownPosition = this.pin?.label.point;\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n }\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (\n this.elementBounds != null &&\n this.relativePointerDownPosition &&\n this.pinPointerDownPosition != null\n ) {\n // Prevent selection of any text while interacting with the label\n event.preventDefault();\n event.stopPropagation();\n\n const point = getMouseClientPosition(event, this.elementBounds);\n const relative = translatePointToRelative(point, this.elementBounds);\n\n const relativeDelta = Point.subtract(\n relative,\n this.relativePointerDownPosition,\n );\n\n const myUpdatedPin =\n this.pin != null\n ? {\n ...this.pin,\n label: {\n ...this.pin.label,\n point: Point.add(this.pinPointerDownPosition, relativeDelta),\n },\n }\n : undefined;\n\n if (myUpdatedPin) {\n this.pinController?.updatePin(myUpdatedPin);\n this.computeScreenPosition();\n }\n }\n };\n\n private handlePointerUp = (event: PointerEvent): void => {\n if (\n this.pinController?.getToolMode() === 'edit' &&\n this.relativePointerDownPosition != null &&\n this.elementBounds != null\n ) {\n const pointerDownScreen = translatePointToScreen(\n this.relativePointerDownPosition,\n this.elementBounds,\n );\n const distanceBetweenStartAndEndPoint = Point.distance(\n pointerDownScreen,\n getMouseClientPosition(event, this.elementBounds),\n );\n\n if (distanceBetweenStartAndEndPoint <= 2) {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n }\n }\n\n this.relativePointerDownPosition = undefined;\n this.pinPointerDownPosition = undefined;\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.removeEventListener('pointerup', this.handlePointerUp);\n };\n\n private handleTextBlur = (): void => {\n this.submit();\n };\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n };\n}\n","\n:host {\n /**\n * @prop --viewer-annotations-pin-label-line-color: A CSS color that\n * specifies the color of the label line\n */\n --viewer-annotations-pin-label-line-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-label-line-width: A CSS color that\n * specifies the width of the label line\n */\n --viewer-annotations-pin-label-line-width: 1;\n\n overflow: hidden;\n pointer-events: none;\n}\n\n.label-line {\n pointer-events: auto;\n stroke: var(--viewer-annotations-pin-label-line-color);\n stroke-width: var( --viewer-annotations-pin-label-line-width);\n cursor: default;\n}\n\n.svg {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n height: 100%;\n width: 100%;\n}\n","import {\n Component,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Prop,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\n\nimport { getPinColors, Pin } from '../../lib/pins/model';\n\n@Component({\n tag: 'vertex-viewer-pin-label-line',\n styleUrl: 'viewer-pin-label-line.css',\n shadow: false,\n})\nexport class VertexPinLabelLine {\n @Prop()\n public pinPoint: Point.Point | undefined;\n\n @Prop()\n public labelPoint: Point.Point | undefined;\n\n @Prop()\n public pin: Pin | undefined;\n\n protected render(): JSX.Element {\n const { primaryColor } = getPinColors(this.pin);\n return (\n <Host>\n <svg class=\"svg\">\n <line\n class=\"label-line\"\n style={{\n stroke: primaryColor,\n }}\n x1={this.labelPoint?.x}\n y1={this.labelPoint?.y}\n x2={this.pinPoint?.x}\n y2={this.pinPoint?.y}\n />\n </svg>\n </Host>\n );\n }\n}\n"],"version":3}
|
|
@@ -346,7 +346,7 @@ const ViewerPinTool = class {
|
|
|
346
346
|
this.handleSetProjectionMatrix();
|
|
347
347
|
}
|
|
348
348
|
render() {
|
|
349
|
-
return (h(Host, { key: '
|
|
349
|
+
return (h(Host, { key: 'ce2867d4a624dabf607b9de837e73a0a0c40eaf9' }, h("vertex-viewer-dom-renderer", { key: '7d2dc3d75ca1818ba7b9b292ccbe1db7ac5c7ac8', viewer: this.viewer, drawMode: "2d" }, this.pins.map((pin) => {
|
|
350
350
|
return (h("vertex-viewer-pin-group", { id: `pin-group-${pin.id}`, "data-is-dom-group-element": true, pin: pin, elementBounds: this.elementBounds, pinModel: this.pinModel, pinController: this.pinController, projectionViewMatrix: this.projectionViewMatrix, selected: this.selectedPinId === pin.id }));
|
|
351
351
|
}))));
|
|
352
352
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertex-viewer-pin-tool.entry.js","sources":["src/lib/pins/interactions.ts","src/components/viewer-pin-tool/viewer-pin-tool.css?tag=vertex-viewer-pin-tool&encapsulation=shadow","src/components/viewer-pin-tool/viewer-pin-tool.tsx"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Disposable, UUID } from '@vertexvis/utils';\n\nimport { translatePointToRelative } from '../../components/viewer-pin-tool/utils';\nimport { Cursor, labelPinCursor, pinCursor } from '../cursors';\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport { InteractionApi, InteractionHandler } from '../interactions';\nimport { EntityType } from '../types/entities';\nimport { Draggable, PinController } from './controller';\nimport { Pin } from './model';\n\nexport class PinsInteractionHandler implements InteractionHandler {\n private controller: PinController;\n private element?: HTMLElement;\n private api?: InteractionApi;\n\n private cursor?: Disposable;\n\n private xOffset?: number;\n private yOffset?: number;\n\n private rectObserver = new ElementRectObserver();\n\n private droppableSurfaces: EntityType[] = [\n EntityType.PRECISE_SURFACE,\n EntityType.IMPRECISE_SURFACE,\n EntityType.GENERIC_GEOMETRY,\n ];\n\n private get elementRect(): DOMRect | undefined {\n return this.rectObserver.rect;\n }\n\n public constructor(\n controller: PinController,\n xOffset: number,\n yOffset: number\n ) {\n this.controller = controller;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n this.rectObserver.observe(element);\n\n element.addEventListener('pointermove', this.handlePointerMove);\n element.addEventListener('pointerdown', this.handlePointerDown);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n public dispose(): void {\n this.rectObserver.disconnect();\n this.clearCursor();\n this.element?.removeEventListener('pointermove', this.handlePointerMove);\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n window.removeEventListener('pointerup', this.handlePointerUp);\n\n this.element = undefined;\n this.api = undefined;\n }\n\n public async getWorldPositionForPoint(\n pt: Point.Point\n ): Promise<Vector3.Vector3 | undefined> {\n return this.ifInitialized(async ({ api }) => {\n const vector3 = await api.getWorldPointFromViewport(pt);\n\n return vector3;\n });\n }\n\n public async handlePlacePin(\n pt: Point.Point,\n existingPin?: Pin\n ): Promise<void> {\n this.ifInitialized(async ({ api }) => {\n const [hit] = await api.hitItems(pt);\n\n if (hit?.hitPoint != null && this.elementRect != null) {\n if (\n hit?.hitPoint != null &&\n hit?.hitPoint.x != null &&\n hit?.hitPoint.y != null &&\n hit?.hitPoint.z != null\n ) {\n const pinId = existingPin != null ? existingPin.id : UUID.create();\n\n const attributes =\n this.controller.getStyleAttributes() != null\n ? {\n style: this.controller.getStyleAttributes(),\n }\n : undefined;\n\n switch (this.controller.getToolType()) {\n case 'pin-icon':\n this.controller.setPin({\n type: 'icon',\n id: pinId,\n worldPosition: {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n partId: hit?.itemId?.hex ?? undefined,\n attributes,\n });\n break;\n case 'pin-text':\n const isNewPin = existingPin == null;\n const relativePoint = translatePointToRelative(\n pt,\n this.elementRect,\n isNewPin,\n this.xOffset,\n this.yOffset\n );\n this.controller.setPin({\n type: 'text',\n id: pinId,\n worldPosition: {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n partId: hit?.itemId?.hex ?? undefined,\n label: {\n point: relativePoint,\n },\n attributes,\n });\n this.controller.setSelectedPinId(pinId);\n break;\n }\n }\n } else {\n this.controller.setSelectedPinId();\n }\n });\n }\n\n private handlePointerMove = async (event: PointerEvent): Promise<void> => {\n const isDroppableSurface = await this.isDroppableSurface(event);\n const draggable = this.controller.getDraggable();\n if (draggable != null && isDroppableSurface) {\n this.handleDrag(draggable, event);\n }\n\n if (\n this.controller.getDraggable() == null &&\n this.controller.getToolMode() === 'edit' &&\n isDroppableSurface\n ) {\n this.addCursor(this.getCursorType());\n } else {\n this.clearCursor();\n }\n };\n\n private getCursorType(): Cursor {\n switch (this.controller.getToolType()) {\n case 'pin-icon':\n return pinCursor;\n case 'pin-text':\n return labelPinCursor;\n }\n }\n\n private handleDrag = async (\n draggable: Draggable,\n event: PointerEvent\n ): Promise<void> => {\n const pt = getMouseClientPosition(event, this.elementRect);\n const worldPosition = await this.getWorldPositionForPoint(pt);\n\n if (worldPosition != null) {\n this.controller.updateDraggable(\n {\n ...draggable,\n lastPoint: pt,\n },\n worldPosition\n );\n }\n };\n\n private handlePointerDown = async (\n pointerDown: PointerEvent\n ): Promise<Disposable> => {\n const pointerUp = (pointerUp: PointerEvent): void => {\n const distanceBetweenStartAndEndPoint = Point.distance(\n Point.create(pointerDown.clientX, pointerUp.clientY),\n Point.create(pointerUp.clientX, pointerUp.clientY)\n );\n\n if (distanceBetweenStartAndEndPoint <= 2 && pointerDown.buttons !== 2) {\n if (this.controller.getToolMode() === 'edit') {\n const pt = getMouseClientPosition(pointerDown, this.elementRect);\n\n this.handlePlacePin(pt);\n }\n }\n\n dispose();\n };\n\n const dispose = (): void => {\n window.removeEventListener('pointerup', pointerUp);\n };\n\n window.addEventListener('pointerup', pointerUp);\n\n return {\n dispose,\n };\n };\n\n private handlePointerUp = async (): Promise<void> => {\n const draggable = this.controller.getDraggable();\n const lastPoint = draggable?.lastPoint;\n\n this.controller.setDraggable(undefined);\n\n if (lastPoint != null && draggable != null) {\n this.ifInitialized(async ({ api }) => {\n const [hit] = await api.hitItems(lastPoint);\n\n if (\n hit?.hitPoint != null &&\n hit?.hitPoint?.x != null &&\n hit?.hitPoint?.y != null &&\n hit?.hitPoint?.z != null\n ) {\n this.controller.updateDraggable(\n {\n ...draggable,\n lastPoint,\n },\n {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n hit?.partId?.hex ?? undefined\n );\n }\n });\n }\n };\n\n private addCursor(cursor: Cursor): void {\n this.clearCursor();\n this.cursor = this.ifInitialized(({ api }) => api.addCursor(cursor));\n }\n\n private async isDroppableSurface(event: PointerEvent): Promise<boolean> {\n const pt = getMouseClientPosition(event, this.elementRect);\n const type = await this.api?.getEntityTypeAtPoint(pt);\n\n return type != null && this.droppableSurfaces.includes(type);\n }\n\n protected ifInitialized<R>(\n f: (data: { element: HTMLElement; api: InteractionApi }) => R\n ): R {\n if (this.element != null && this.api != null) {\n return f({ element: this.element, api: this.api });\n } else {\n throw new Error('Pins interaction handler not initialized.');\n }\n }\n\n private clearCursor(): void {\n this.cursor?.dispose();\n this.cursor = undefined;\n }\n}\n",":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n\n /**\n * @prop --viewer-pin-tool-initial-label-offset-x: The number of pixels to offset\n the label in the x direction. Defaults to 20.\n */\n --viewer-pin-tool-initial-label-offset-x: 20;\n\n /**\n * @prop --viewer-pin-tool-initial-label-offset-y: The number of pixels to offset\n the label in the y direction. Defaults to 20.\n */\n --viewer-pin-tool-initial-label-offset-y: 20;\n}\n","import {\n Component,\n Element,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Matrix4 } from '@vertexvis/geometry';\nimport { Color, Disposable } from '@vertexvis/utils';\n\nimport { PinController } from '../../lib/pins/controller';\nimport { PinsInteractionHandler } from '../../lib/pins/interactions';\nimport {\n Pin,\n PinModel,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from '../../lib/pins/model';\nimport { getMarkupBoundingClientRect } from '../viewer-markup/dom';\n\ninterface StateMap {\n shouldClearDepthBuffers?: boolean;\n shouldClearFeatureMaps?: boolean;\n shouldClearCameraControls?: boolean;\n shouldClearKeyboardControls?: boolean;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-tool',\n styleUrl: 'viewer-pin-tool.css',\n shadow: true,\n})\nexport class ViewerPinTool {\n /**\n * The controller that is responsible for drawing pins and updating the model\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * The model that contains the entities and outcomes from performing pin annotations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\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 type of pin.\n *\n * This property will automatically be set.\n */\n @Prop({ mutable: true })\n public tool: ViewerPinToolType = 'pin-icon';\n\n /**\n * The mode of the pin tool\n */\n @Prop({ mutable: true })\n public mode: ViewerPinToolMode = 'view';\n\n /**\n * The primary color for new pins. Setting this will override the primary template color, and will be used for any new\n * pins created with this `vertex-viewer-pin-tool`. This styling applies to pin anchors, and borders, etc.\n */\n @Prop({ mutable: true })\n public primaryColor: Color.Color | string | undefined;\n\n /**\n * The accent color for new pins. Setting this will override the accent template color, and will be used for any new\n * pins created with this `vertex-viewer-pin-tool`. This styling applies to some background colors, etc\n */\n @Prop({ mutable: true })\n public accentColor: Color.Color | string | undefined;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private pins: Pin[] = [];\n\n @State()\n private selectedPinId?: string;\n\n @State()\n private elementBounds?: DOMRect;\n\n @State()\n private projectionViewMatrix?: Matrix4.Matrix4;\n\n private registeredInteractionHandler?: Promise<Disposable>;\n private onEntitiesChangedHandler?: Disposable;\n private onEntityAddedHandler?: Disposable;\n\n private resizeObserver?: ResizeObserver;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected watchModeChange(): void {\n this.pinController?.setToolMode(this.mode);\n this.setupInteractionHandler();\n\n if (this.mode === 'edit') {\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n } else {\n this.resetFeatureMaps();\n this.resetCameraAndKeyboardControls();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('tool')\n protected watchTypeChange(): void {\n this.pinController?.setToolType(this.tool);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('accentColor')\n protected watchAccentColorChange(): void {\n this.pinController?.setAccentColor(this.accentColor);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('primaryColor')\n protected watchPrimaryColorChange(): void {\n this.pinController?.setPrimaryColor(this.primaryColor);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('pins')\n protected watchPinsChange(): void {\n if (this.pins.length > 0) {\n this.setDepthBuffers();\n this.setFeatureMaps();\n } else {\n this.resetDepthBuffers();\n this.resetFeatureMaps();\n }\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.updateViewport();\n this.setupController();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n\n this.pinModel.onEntitiesChanged((entities) => {\n this.pins = entities;\n });\n\n this.pinModel.onSelectionChange((selectedId) => {\n this.selectedPinId = selectedId;\n });\n\n this.handleViewerChanged(this.viewer, undefined);\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => this.updateViewport());\n this.resizeObserver.observe(this.hostEl);\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.clearModelListeners();\n this.resetDepthBuffers();\n this.resetFeatureMaps();\n this.resetCameraAndKeyboardControls();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement\n ): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n\n if (oldViewer != null) {\n oldViewer.removeEventListener(\n 'frameDrawn',\n this.handleSetProjectionMatrix\n );\n }\n\n if (newViewer != null) {\n newViewer.addEventListener('frameDrawn', this.handleSetProjectionMatrix);\n }\n\n this.handleSetProjectionMatrix();\n }\n\n private handleSetProjectionMatrix = (): void => {\n this.projectionViewMatrix =\n this.viewer?.frame?.scene.camera.projectionViewMatrix;\n };\n\n protected render(): JSX.Element {\n return (\n <Host>\n <vertex-viewer-dom-renderer viewer={this.viewer} drawMode=\"2d\">\n {this.pins.map((pin) => {\n return (\n <vertex-viewer-pin-group\n id={`pin-group-${pin.id}`}\n data-is-dom-group-element={true}\n pin={pin}\n elementBounds={this.elementBounds}\n pinModel={this.pinModel}\n pinController={this.pinController}\n projectionViewMatrix={this.projectionViewMatrix}\n selected={this.selectedPinId === pin.id}\n ></vertex-viewer-pin-group>\n );\n })}\n </vertex-viewer-dom-renderer>\n </Host>\n );\n }\n\n private setupController(): void {\n const attributes =\n this.accentColor || this.primaryColor\n ? {\n accentColor: this.accentColor,\n primaryColor: this.primaryColor,\n }\n : undefined;\n this.pinController = new PinController(\n this.pinModel,\n this.mode,\n this.tool,\n attributes\n );\n }\n\n private clearInteractionHandler(): void {\n this.registeredInteractionHandler?.then((handler) => handler.dispose());\n this.registeredInteractionHandler = undefined;\n }\n\n private setupInteractionHandler(): void {\n const hostStyles = window.getComputedStyle(this.hostEl);\n\n const xOffset = hostStyles\n .getPropertyValue('--viewer-pin-tool-initial-label-offset-x')\n .trim();\n const xOffsetAsNumber = Number.isFinite(Number.parseInt(xOffset))\n ? Number.parseInt(xOffset)\n : 20;\n\n const yOffset = hostStyles\n .getPropertyValue('--viewer-pin-tool-initial-label-offset-y')\n .trim();\n const yOffsetAsNumber = Number.isFinite(Number.parseInt(yOffset))\n ? Number.parseInt(yOffset)\n : 20;\n\n this.clearInteractionHandler();\n\n if (this.pinController != null) {\n this.registeredInteractionHandler =\n this.viewer?.registerInteractionHandler(\n new PinsInteractionHandler(\n this.pinController,\n xOffsetAsNumber,\n yOffsetAsNumber\n )\n );\n }\n }\n\n private clearModelListeners(): void {\n this.onEntitiesChangedHandler?.dispose();\n this.onEntitiesChangedHandler = undefined;\n this.onEntityAddedHandler?.dispose();\n this.onEntityAddedHandler = undefined;\n this.resizeObserver?.disconnect();\n }\n\n private updateViewport(): void {\n this.elementBounds = getMarkupBoundingClientRect(this.hostEl);\n }\n\n private setDepthBuffers(): void {\n if (\n this.pins.length > 0 &&\n this.viewer != null &&\n this.viewer.depthBuffers == null\n ) {\n this.stateMap.shouldClearDepthBuffers = true;\n this.viewer.depthBuffers = 'final';\n }\n }\n\n private resetDepthBuffers(): void {\n if (this.stateMap.shouldClearDepthBuffers && this.viewer != null) {\n this.viewer.depthBuffers = undefined;\n this.stateMap.shouldClearDepthBuffers = undefined;\n }\n }\n\n private setFeatureMaps(): void {\n if (\n (this.pins.length > 0 || this.mode === 'edit') &&\n this.viewer != null &&\n this.viewer.featureMaps == null\n ) {\n this.stateMap.shouldClearFeatureMaps = true;\n this.viewer.featureMaps = 'final';\n }\n }\n\n private resetFeatureMaps(): void {\n if (this.stateMap.shouldClearFeatureMaps && this.viewer != null) {\n this.viewer.featureMaps = undefined;\n this.stateMap.shouldClearFeatureMaps = undefined;\n }\n }\n\n private setCameraAndKeyboardControls(): void {\n if (this.mode === 'edit' && this.viewer != null) {\n // Check camera controls\n if (this.viewer.cameraControls) {\n this.stateMap.shouldClearCameraControls = true;\n this.viewer.cameraControls = false;\n }\n\n // Check keyboard controls\n if (this.viewer.keyboardControls) {\n this.stateMap.shouldClearKeyboardControls = true;\n this.viewer.keyboardControls = false;\n }\n }\n }\n\n private resetCameraAndKeyboardControls(): void {\n if (this.viewer != null) {\n if (this.stateMap.shouldClearCameraControls) {\n this.viewer.cameraControls = true;\n this.stateMap.shouldClearCameraControls = undefined;\n }\n\n if (this.stateMap.shouldClearKeyboardControls) {\n this.viewer.keyboardControls = true;\n this.stateMap.shouldClearKeyboardControls = undefined;\n }\n }\n }\n}\n"],"names":["Point","UUID"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vertex-viewer-pin-tool.entry.js","sources":["src/lib/pins/interactions.ts","src/components/viewer-pin-tool/viewer-pin-tool.css?tag=vertex-viewer-pin-tool&encapsulation=shadow","src/components/viewer-pin-tool/viewer-pin-tool.tsx"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Disposable, UUID } from '@vertexvis/utils';\n\nimport { translatePointToRelative } from '../../components/viewer-pin-tool/utils';\nimport { Cursor, labelPinCursor, pinCursor } from '../cursors';\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport { InteractionApi, InteractionHandler } from '../interactions';\nimport { EntityType } from '../types/entities';\nimport { Draggable, PinController } from './controller';\nimport { Pin } from './model';\n\nexport class PinsInteractionHandler implements InteractionHandler {\n private controller: PinController;\n private element?: HTMLElement;\n private api?: InteractionApi;\n\n private cursor?: Disposable;\n\n private xOffset?: number;\n private yOffset?: number;\n\n private rectObserver = new ElementRectObserver();\n\n private droppableSurfaces: EntityType[] = [\n EntityType.PRECISE_SURFACE,\n EntityType.IMPRECISE_SURFACE,\n EntityType.GENERIC_GEOMETRY,\n ];\n\n private get elementRect(): DOMRect | undefined {\n return this.rectObserver.rect;\n }\n\n public constructor(\n controller: PinController,\n xOffset: number,\n yOffset: number,\n ) {\n this.controller = controller;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n this.rectObserver.observe(element);\n\n element.addEventListener('pointermove', this.handlePointerMove);\n element.addEventListener('pointerdown', this.handlePointerDown);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n public dispose(): void {\n this.rectObserver.disconnect();\n this.clearCursor();\n this.element?.removeEventListener('pointermove', this.handlePointerMove);\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n window.removeEventListener('pointerup', this.handlePointerUp);\n\n this.element = undefined;\n this.api = undefined;\n }\n\n public async getWorldPositionForPoint(\n pt: Point.Point,\n ): Promise<Vector3.Vector3 | undefined> {\n return this.ifInitialized(async ({ api }) => {\n const vector3 = await api.getWorldPointFromViewport(pt);\n\n return vector3;\n });\n }\n\n public async handlePlacePin(\n pt: Point.Point,\n existingPin?: Pin,\n ): Promise<void> {\n this.ifInitialized(async ({ api }) => {\n const [hit] = await api.hitItems(pt);\n\n if (hit?.hitPoint != null && this.elementRect != null) {\n if (\n hit?.hitPoint != null &&\n hit?.hitPoint.x != null &&\n hit?.hitPoint.y != null &&\n hit?.hitPoint.z != null\n ) {\n const pinId = existingPin != null ? existingPin.id : UUID.create();\n\n const attributes =\n this.controller.getStyleAttributes() != null\n ? {\n style: this.controller.getStyleAttributes(),\n }\n : undefined;\n\n switch (this.controller.getToolType()) {\n case 'pin-icon':\n this.controller.setPin({\n type: 'icon',\n id: pinId,\n worldPosition: {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n partId: hit?.itemId?.hex ?? undefined,\n attributes,\n });\n break;\n case 'pin-text':\n const isNewPin = existingPin == null;\n const relativePoint = translatePointToRelative(\n pt,\n this.elementRect,\n isNewPin,\n this.xOffset,\n this.yOffset,\n );\n this.controller.setPin({\n type: 'text',\n id: pinId,\n worldPosition: {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n partId: hit?.itemId?.hex ?? undefined,\n label: {\n point: relativePoint,\n },\n attributes,\n });\n this.controller.setSelectedPinId(pinId);\n break;\n }\n }\n } else {\n this.controller.setSelectedPinId();\n }\n });\n }\n\n private handlePointerMove = async (event: PointerEvent): Promise<void> => {\n const isDroppableSurface = await this.isDroppableSurface(event);\n const draggable = this.controller.getDraggable();\n if (draggable != null && isDroppableSurface) {\n this.handleDrag(draggable, event);\n }\n\n if (\n this.controller.getDraggable() == null &&\n this.controller.getToolMode() === 'edit' &&\n isDroppableSurface\n ) {\n this.addCursor(this.getCursorType());\n } else {\n this.clearCursor();\n }\n };\n\n private getCursorType(): Cursor {\n switch (this.controller.getToolType()) {\n case 'pin-icon':\n return pinCursor;\n case 'pin-text':\n return labelPinCursor;\n }\n }\n\n private handleDrag = async (\n draggable: Draggable,\n event: PointerEvent,\n ): Promise<void> => {\n const pt = getMouseClientPosition(event, this.elementRect);\n const worldPosition = await this.getWorldPositionForPoint(pt);\n\n if (worldPosition != null) {\n this.controller.updateDraggable(\n {\n ...draggable,\n lastPoint: pt,\n },\n worldPosition,\n );\n }\n };\n\n private handlePointerDown = async (\n pointerDown: PointerEvent,\n ): Promise<Disposable> => {\n const pointerUp = (pointerUp: PointerEvent): void => {\n const distanceBetweenStartAndEndPoint = Point.distance(\n Point.create(pointerDown.clientX, pointerUp.clientY),\n Point.create(pointerUp.clientX, pointerUp.clientY),\n );\n\n if (distanceBetweenStartAndEndPoint <= 2 && pointerDown.buttons !== 2) {\n if (this.controller.getToolMode() === 'edit') {\n const pt = getMouseClientPosition(pointerDown, this.elementRect);\n\n this.handlePlacePin(pt);\n }\n }\n\n dispose();\n };\n\n const dispose = (): void => {\n window.removeEventListener('pointerup', pointerUp);\n };\n\n window.addEventListener('pointerup', pointerUp);\n\n return {\n dispose,\n };\n };\n\n private handlePointerUp = async (): Promise<void> => {\n const draggable = this.controller.getDraggable();\n const lastPoint = draggable?.lastPoint;\n\n this.controller.setDraggable(undefined);\n\n if (lastPoint != null && draggable != null) {\n this.ifInitialized(async ({ api }) => {\n const [hit] = await api.hitItems(lastPoint);\n\n if (\n hit?.hitPoint != null &&\n hit?.hitPoint?.x != null &&\n hit?.hitPoint?.y != null &&\n hit?.hitPoint?.z != null\n ) {\n this.controller.updateDraggable(\n {\n ...draggable,\n lastPoint,\n },\n {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n hit?.partId?.hex ?? undefined,\n );\n }\n });\n }\n };\n\n private addCursor(cursor: Cursor): void {\n this.clearCursor();\n this.cursor = this.ifInitialized(({ api }) => api.addCursor(cursor));\n }\n\n private async isDroppableSurface(event: PointerEvent): Promise<boolean> {\n const pt = getMouseClientPosition(event, this.elementRect);\n const type = await this.api?.getEntityTypeAtPoint(pt);\n\n return type != null && this.droppableSurfaces.includes(type);\n }\n\n protected ifInitialized<R>(\n f: (data: { element: HTMLElement; api: InteractionApi }) => R,\n ): R {\n if (this.element != null && this.api != null) {\n return f({ element: this.element, api: this.api });\n } else {\n throw new Error('Pins interaction handler not initialized.');\n }\n }\n\n private clearCursor(): void {\n this.cursor?.dispose();\n this.cursor = undefined;\n }\n}\n",":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n\n /**\n * @prop --viewer-pin-tool-initial-label-offset-x: The number of pixels to offset\n the label in the x direction. Defaults to 20.\n */\n --viewer-pin-tool-initial-label-offset-x: 20;\n\n /**\n * @prop --viewer-pin-tool-initial-label-offset-y: The number of pixels to offset\n the label in the y direction. Defaults to 20.\n */\n --viewer-pin-tool-initial-label-offset-y: 20;\n}\n","import {\n Component,\n Element,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Matrix4 } from '@vertexvis/geometry';\nimport { Color, Disposable } from '@vertexvis/utils';\n\nimport { PinController } from '../../lib/pins/controller';\nimport { PinsInteractionHandler } from '../../lib/pins/interactions';\nimport {\n Pin,\n PinModel,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from '../../lib/pins/model';\nimport { getMarkupBoundingClientRect } from '../viewer-markup/dom';\n\ninterface StateMap {\n shouldClearDepthBuffers?: boolean;\n shouldClearFeatureMaps?: boolean;\n shouldClearCameraControls?: boolean;\n shouldClearKeyboardControls?: boolean;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-tool',\n styleUrl: 'viewer-pin-tool.css',\n shadow: true,\n})\nexport class ViewerPinTool {\n /**\n * The controller that is responsible for drawing pins and updating the model\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * The model that contains the entities and outcomes from performing pin annotations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\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 type of pin.\n *\n * This property will automatically be set.\n */\n @Prop({ mutable: true })\n public tool: ViewerPinToolType = 'pin-icon';\n\n /**\n * The mode of the pin tool\n */\n @Prop({ mutable: true })\n public mode: ViewerPinToolMode = 'view';\n\n /**\n * The primary color for new pins. Setting this will override the primary template color, and will be used for any new\n * pins created with this `vertex-viewer-pin-tool`. This styling applies to pin anchors, and borders, etc.\n */\n @Prop({ mutable: true })\n public primaryColor: Color.Color | string | undefined;\n\n /**\n * The accent color for new pins. Setting this will override the accent template color, and will be used for any new\n * pins created with this `vertex-viewer-pin-tool`. This styling applies to some background colors, etc\n */\n @Prop({ mutable: true })\n public accentColor: Color.Color | string | undefined;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private pins: Pin[] = [];\n\n @State()\n private selectedPinId?: string;\n\n @State()\n private elementBounds?: DOMRect;\n\n @State()\n private projectionViewMatrix?: Matrix4.Matrix4;\n\n private registeredInteractionHandler?: Promise<Disposable>;\n private onEntitiesChangedHandler?: Disposable;\n private onEntityAddedHandler?: Disposable;\n\n private resizeObserver?: ResizeObserver;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected watchModeChange(): void {\n this.pinController?.setToolMode(this.mode);\n this.setupInteractionHandler();\n\n if (this.mode === 'edit') {\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n } else {\n this.resetFeatureMaps();\n this.resetCameraAndKeyboardControls();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('tool')\n protected watchTypeChange(): void {\n this.pinController?.setToolType(this.tool);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('accentColor')\n protected watchAccentColorChange(): void {\n this.pinController?.setAccentColor(this.accentColor);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('primaryColor')\n protected watchPrimaryColorChange(): void {\n this.pinController?.setPrimaryColor(this.primaryColor);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('pins')\n protected watchPinsChange(): void {\n if (this.pins.length > 0) {\n this.setDepthBuffers();\n this.setFeatureMaps();\n } else {\n this.resetDepthBuffers();\n this.resetFeatureMaps();\n }\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.updateViewport();\n this.setupController();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n\n this.pinModel.onEntitiesChanged((entities) => {\n this.pins = entities;\n });\n\n this.pinModel.onSelectionChange((selectedId) => {\n this.selectedPinId = selectedId;\n });\n\n this.handleViewerChanged(this.viewer, undefined);\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => this.updateViewport());\n this.resizeObserver.observe(this.hostEl);\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.clearModelListeners();\n this.resetDepthBuffers();\n this.resetFeatureMaps();\n this.resetCameraAndKeyboardControls();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement,\n ): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n\n if (oldViewer != null) {\n oldViewer.removeEventListener(\n 'frameDrawn',\n this.handleSetProjectionMatrix,\n );\n }\n\n if (newViewer != null) {\n newViewer.addEventListener('frameDrawn', this.handleSetProjectionMatrix);\n }\n\n this.handleSetProjectionMatrix();\n }\n\n private handleSetProjectionMatrix = (): void => {\n this.projectionViewMatrix =\n this.viewer?.frame?.scene.camera.projectionViewMatrix;\n };\n\n protected render(): JSX.Element {\n return (\n <Host>\n <vertex-viewer-dom-renderer viewer={this.viewer} drawMode=\"2d\">\n {this.pins.map((pin) => {\n return (\n <vertex-viewer-pin-group\n id={`pin-group-${pin.id}`}\n data-is-dom-group-element={true}\n pin={pin}\n elementBounds={this.elementBounds}\n pinModel={this.pinModel}\n pinController={this.pinController}\n projectionViewMatrix={this.projectionViewMatrix}\n selected={this.selectedPinId === pin.id}\n ></vertex-viewer-pin-group>\n );\n })}\n </vertex-viewer-dom-renderer>\n </Host>\n );\n }\n\n private setupController(): void {\n const attributes =\n this.accentColor || this.primaryColor\n ? {\n accentColor: this.accentColor,\n primaryColor: this.primaryColor,\n }\n : undefined;\n this.pinController = new PinController(\n this.pinModel,\n this.mode,\n this.tool,\n attributes,\n );\n }\n\n private clearInteractionHandler(): void {\n this.registeredInteractionHandler?.then((handler) => handler.dispose());\n this.registeredInteractionHandler = undefined;\n }\n\n private setupInteractionHandler(): void {\n const hostStyles = window.getComputedStyle(this.hostEl);\n\n const xOffset = hostStyles\n .getPropertyValue('--viewer-pin-tool-initial-label-offset-x')\n .trim();\n const xOffsetAsNumber = Number.isFinite(Number.parseInt(xOffset))\n ? Number.parseInt(xOffset)\n : 20;\n\n const yOffset = hostStyles\n .getPropertyValue('--viewer-pin-tool-initial-label-offset-y')\n .trim();\n const yOffsetAsNumber = Number.isFinite(Number.parseInt(yOffset))\n ? Number.parseInt(yOffset)\n : 20;\n\n this.clearInteractionHandler();\n\n if (this.pinController != null) {\n this.registeredInteractionHandler =\n this.viewer?.registerInteractionHandler(\n new PinsInteractionHandler(\n this.pinController,\n xOffsetAsNumber,\n yOffsetAsNumber,\n ),\n );\n }\n }\n\n private clearModelListeners(): void {\n this.onEntitiesChangedHandler?.dispose();\n this.onEntitiesChangedHandler = undefined;\n this.onEntityAddedHandler?.dispose();\n this.onEntityAddedHandler = undefined;\n this.resizeObserver?.disconnect();\n }\n\n private updateViewport(): void {\n this.elementBounds = getMarkupBoundingClientRect(this.hostEl);\n }\n\n private setDepthBuffers(): void {\n if (\n this.pins.length > 0 &&\n this.viewer != null &&\n this.viewer.depthBuffers == null\n ) {\n this.stateMap.shouldClearDepthBuffers = true;\n this.viewer.depthBuffers = 'final';\n }\n }\n\n private resetDepthBuffers(): void {\n if (this.stateMap.shouldClearDepthBuffers && this.viewer != null) {\n this.viewer.depthBuffers = undefined;\n this.stateMap.shouldClearDepthBuffers = undefined;\n }\n }\n\n private setFeatureMaps(): void {\n if (\n (this.pins.length > 0 || this.mode === 'edit') &&\n this.viewer != null &&\n this.viewer.featureMaps == null\n ) {\n this.stateMap.shouldClearFeatureMaps = true;\n this.viewer.featureMaps = 'final';\n }\n }\n\n private resetFeatureMaps(): void {\n if (this.stateMap.shouldClearFeatureMaps && this.viewer != null) {\n this.viewer.featureMaps = undefined;\n this.stateMap.shouldClearFeatureMaps = undefined;\n }\n }\n\n private setCameraAndKeyboardControls(): void {\n if (this.mode === 'edit' && this.viewer != null) {\n // Check camera controls\n if (this.viewer.cameraControls) {\n this.stateMap.shouldClearCameraControls = true;\n this.viewer.cameraControls = false;\n }\n\n // Check keyboard controls\n if (this.viewer.keyboardControls) {\n this.stateMap.shouldClearKeyboardControls = true;\n this.viewer.keyboardControls = false;\n }\n }\n }\n\n private resetCameraAndKeyboardControls(): void {\n if (this.viewer != null) {\n if (this.stateMap.shouldClearCameraControls) {\n this.viewer.cameraControls = true;\n this.stateMap.shouldClearCameraControls = undefined;\n }\n\n if (this.stateMap.shouldClearKeyboardControls) {\n this.viewer.keyboardControls = true;\n this.stateMap.shouldClearKeyboardControls = undefined;\n }\n }\n }\n}\n"],"names":["Point","UUID"],"mappings":"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"}
|