@vertexvis/viewer 1.0.2-canary.2 → 1.0.2-canary.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/config-20ozv4y8.js.map +1 -1
- package/dist/cjs/controller-BhcNbaX_.js.map +1 -1
- package/dist/cjs/controller-CSwG6gbQ.js.map +1 -1
- package/dist/cjs/cursors-BZmDRtaZ.js.map +1 -1
- package/dist/cjs/dom-BBil4aN3.js.map +1 -1
- package/dist/cjs/dom-CvGkFQon.js.map +1 -1
- package/dist/cjs/entities-D6kgGria.js.map +1 -1
- package/dist/cjs/geometry_pb-BTko2Wi0.js.map +1 -1
- package/dist/cjs/grpc-BsWFEUrc.js.map +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/model-C9WvOKYT.js.map +1 -1
- package/dist/cjs/model-D17EQTIh.js.map +1 -1
- package/dist/cjs/model-DAB4oD5n.js.map +1 -1
- package/dist/cjs/model-DkXCzhs_.js.map +1 -1
- package/dist/cjs/multiElementInteractionHandler-BHvRKVIp.js.map +1 -1
- package/dist/cjs/overlays-B-06bUbI.js.map +1 -1
- package/dist/cjs/queries-Da9I-xMf.js.map +1 -1
- package/dist/cjs/regl-component-HhKCyGQ3.js.map +1 -1
- package/dist/cjs/representation_pb-CrCGjlyP.js.map +1 -1
- package/dist/cjs/results-1wRRZiYG.js.map +1 -1
- package/dist/cjs/row-Cet6xXup.js.map +1 -1
- package/dist/cjs/stencil-Hsr_8Chs.js.map +1 -1
- package/dist/cjs/streamAttributes-D_J-W8-2.js.map +1 -1
- package/dist/cjs/templates-DvjgjnlO.js.map +1 -1
- package/dist/cjs/util-DIJSIQXH.js.map +1 -1
- package/dist/cjs/utils-CibrnHQ4.js.map +1 -1
- package/dist/cjs/utils-D8MbXbwO.js.map +1 -1
- package/dist/cjs/utils-qErVs2Vt.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +6 -8
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +2 -2
- package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +4 -5
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +9 -5
- package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
- package/dist/cjs/viewport-CG1VYkIU.js.map +1 -1
- package/dist/collection/components/scene-tree/errors.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/controller.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/dom.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/errors.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/grpc.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/handlers.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/row.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/viewer-ops.js.map +1 -1
- package/dist/collection/components/scene-tree/scene-tree.js +2 -2
- package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
- package/dist/collection/components/scene-tree-table-cell/utils.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/lib/dom.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/lib/window.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +5 -5
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
- package/dist/collection/components/viewer/utils.js.map +1 -1
- package/dist/collection/components/viewer/viewer.js +9 -5
- package/dist/collection/components/viewer/viewer.js.map +1 -1
- package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js +2 -2
- package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js.map +1 -1
- package/dist/collection/components/viewer-dom-element/utils.js.map +1 -1
- package/dist/collection/components/viewer-dom-element/viewer-dom-element.js +1 -1
- package/dist/collection/components/viewer-dom-element/viewer-dom-element.js.map +1 -1
- package/dist/collection/components/viewer-dom-group/utils.js.map +1 -1
- package/dist/collection/components/viewer-dom-group/viewer-dom-group.js +1 -1
- package/dist/collection/components/viewer-dom-group/viewer-dom-group.js.map +1 -1
- package/dist/collection/components/viewer-dom-renderer/renderer2d.js.map +1 -1
- package/dist/collection/components/viewer-dom-renderer/renderer3d.js.map +1 -1
- package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/dom.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/indicator.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/plane.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/point.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js.map +1 -1
- package/dist/collection/components/viewer-icon/viewer-icon.js.map +1 -1
- package/dist/collection/components/viewer-markup/markup-utils.js.map +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup-components.js.map +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup.js +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/interactions.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow-components.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow.js.map +1 -1
- package/dist/collection/components/viewer-markup-circle/interactions.js.map +1 -1
- package/dist/collection/components/viewer-markup-circle/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-circle/viewer-markup-circle.js.map +1 -1
- package/dist/collection/components/viewer-markup-freeform/interactions.js.map +1 -1
- package/dist/collection/components/viewer-markup-freeform/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-freeform/viewer-markup-freeform.js.map +1 -1
- package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.js.map +1 -1
- package/dist/collection/components/viewer-measurement-details/viewer-measurement-details.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/hitTest.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/interactions.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/utils.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js.map +1 -1
- package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js +1 -1
- package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js.map +1 -1
- package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +1 -1
- package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js.map +1 -1
- package/dist/collection/components/viewer-measurement-precise/viewer-measurement-precise.js.map +1 -1
- package/dist/collection/components/viewer-pin-group/utils.js.map +1 -1
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.js +2 -2
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.js.map +1 -1
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
- package/dist/collection/components/viewer-pin-tool/utils.js.map +1 -1
- package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js +1 -1
- package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js.map +1 -1
- package/dist/collection/components/viewer-teleport-tool/viewer-teleport-tool.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/util.js +1 -2
- package/dist/collection/components/viewer-transform-widget/util.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +3 -3
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/widget.js.map +1 -1
- package/dist/collection/components/viewer-view-cube/viewer-view-cube.js +1 -1
- package/dist/collection/components/viewer-view-cube/viewer-view-cube.js.map +1 -1
- package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js.map +1 -1
- package/dist/collection/lib/annotations/controller.js.map +1 -1
- package/dist/collection/lib/canvases/controller.js.map +1 -1
- package/dist/collection/lib/canvases/mapper.js.map +1 -1
- package/dist/collection/lib/config.js.map +1 -1
- package/dist/collection/lib/cursors.js.map +1 -1
- package/dist/collection/lib/dom.js.map +1 -1
- package/dist/collection/lib/grpc.js.map +1 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/flyToPartKeyInteraction.js.map +1 -1
- package/dist/collection/lib/interactions/flyToPositionKeyInteraction.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApi.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApiOrthographic.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApiPerspective.js.map +1 -1
- package/dist/collection/lib/interactions/mouseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/mouseInteractions.js.map +1 -1
- package/dist/collection/lib/interactions/multiElementInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/multiPointerInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/multiTouchInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/pointerInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/tapInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/touchInteractionHandler.js.map +1 -1
- package/dist/collection/lib/keyBinding.js.map +1 -1
- package/dist/collection/lib/mappers/annotation.js.map +1 -1
- package/dist/collection/lib/mappers/camera.js.map +1 -1
- package/dist/collection/lib/mappers/color.js.map +1 -1
- package/dist/collection/lib/mappers/colorMaterial.js.map +1 -1
- package/dist/collection/lib/mappers/corePb.js.map +1 -1
- package/dist/collection/lib/mappers/corePbJs.js.map +1 -1
- package/dist/collection/lib/mappers/frameStreaming.js.map +1 -1
- package/dist/collection/lib/mappers/geometry.js.map +1 -1
- package/dist/collection/lib/mappers/material.js.map +1 -1
- package/dist/collection/lib/mappers/pagination.js.map +1 -1
- package/dist/collection/lib/mappers/scalar.js.map +1 -1
- package/dist/collection/lib/mappers/streamAttributes.js.map +1 -1
- package/dist/collection/lib/markup/interactions.js.map +1 -1
- package/dist/collection/lib/measurement/controller.js.map +1 -1
- package/dist/collection/lib/measurement/entities.js.map +1 -1
- package/dist/collection/lib/measurement/interactions.js.map +1 -1
- package/dist/collection/lib/measurement/mapper.js.map +1 -1
- package/dist/collection/lib/measurement/model.js.map +1 -1
- package/dist/collection/lib/measurement/overlays.js.map +1 -1
- package/dist/collection/lib/measurement/results.js.map +1 -1
- package/dist/collection/lib/meters.js.map +1 -1
- package/dist/collection/lib/model-views/controller.js.map +1 -1
- package/dist/collection/lib/model-views/mapper.js.map +1 -1
- package/dist/collection/lib/pins/controller.js.map +1 -1
- package/dist/collection/lib/pins/interactions.js.map +1 -1
- package/dist/collection/lib/pmi/controller.js.map +1 -1
- package/dist/collection/lib/pmi/mapper.js.map +1 -1
- package/dist/collection/lib/rendering/canvas.js.map +1 -1
- package/dist/collection/lib/rendering/imageLoaders.js.map +1 -1
- package/dist/collection/lib/rendering/matrices.js.map +1 -1
- package/dist/collection/lib/rendering/timing.js.map +1 -1
- package/dist/collection/lib/rendering/utils.js.map +1 -1
- package/dist/collection/lib/rendering/vectors.js.map +1 -1
- package/dist/collection/lib/scene-items/controller.js.map +1 -1
- package/dist/collection/lib/scene-items/mapper.js.map +1 -1
- package/dist/collection/lib/scenes/camera.js.map +1 -1
- package/dist/collection/lib/scenes/cameraRenderResult.js.map +1 -1
- package/dist/collection/lib/scenes/colorMaterial.js.map +1 -1
- package/dist/collection/lib/scenes/crossSectioner.js.map +1 -1
- package/dist/collection/lib/scenes/mapper.js.map +1 -1
- package/dist/collection/lib/scenes/operations.js.map +1 -1
- package/dist/collection/lib/scenes/queries.js.map +1 -1
- package/dist/collection/lib/scenes/raycaster.js.map +1 -1
- package/dist/collection/lib/scenes/scene.js.map +1 -1
- package/dist/collection/lib/scenes/sceneOperationExecuteResult.js.map +1 -1
- package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
- package/dist/collection/lib/stencil.js.map +1 -1
- package/dist/collection/lib/storage.js.map +1 -1
- package/dist/collection/lib/stream/dispatcher.js.map +1 -1
- package/dist/collection/lib/stream/stream.js.map +1 -1
- package/dist/collection/lib/stream/utils.js.map +1 -1
- package/dist/collection/lib/teleportation/interactions.js.map +1 -1
- package/dist/collection/lib/templates.js.map +1 -1
- package/dist/collection/lib/token.js.map +1 -1
- package/dist/collection/lib/transforms/axis-lines.js.map +1 -1
- package/dist/collection/lib/transforms/axis-rotation.js.map +1 -1
- package/dist/collection/lib/transforms/axis-translation.js.map +1 -1
- package/dist/collection/lib/transforms/controller.js.map +1 -1
- package/dist/collection/lib/transforms/drawable.js.map +1 -1
- package/dist/collection/lib/transforms/hits.js.map +1 -1
- package/dist/collection/lib/transforms/line.js.map +1 -1
- package/dist/collection/lib/transforms/mesh.js.map +1 -1
- package/dist/collection/lib/transforms/shape.js.map +1 -1
- package/dist/collection/lib/transforms/transformation-delta.js.map +1 -1
- package/dist/collection/lib/transforms/util.js.map +1 -1
- package/dist/collection/lib/types/clippingPlanes.js.map +1 -1
- package/dist/collection/lib/types/depthBuffer.js.map +1 -1
- package/dist/collection/lib/types/featureMap.js.map +1 -1
- package/dist/collection/lib/types/flags.js.map +1 -1
- package/dist/collection/lib/types/frame.js.map +1 -1
- package/dist/collection/lib/types/frameCamera.js.map +1 -1
- package/dist/collection/lib/types/loadableResource.js.map +1 -1
- package/dist/collection/lib/types/orientation.js.map +1 -1
- package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
- package/dist/collection/lib/types/standardView.js.map +1 -1
- package/dist/collection/lib/types/stencilBuffer.js.map +1 -1
- package/dist/collection/lib/types/synchronizedClock.js.map +1 -1
- package/dist/collection/lib/types/viewport.js.map +1 -1
- package/dist/collection/lib/visibilityObserver.js.map +1 -1
- package/dist/collection/lib/volume-intersection/controller.js.map +1 -1
- package/dist/collection/lib/volume-intersection/interactions.js.map +1 -1
- package/dist/collection/lib/volume-intersection/model.js.map +1 -1
- package/dist/collection/lib/walk-mode/controller.js.map +1 -1
- package/dist/collection/lib/walk-mode/interactions.js.map +1 -1
- package/dist/collection/lib/walk-mode/model.js.map +1 -1
- package/dist/collection/lib/webgl/regl-component.js.map +1 -1
- package/dist/collection/testing/annotations.js.map +1 -1
- package/dist/collection/testing/canvases.js.map +1 -1
- package/dist/collection/testing/colors.js.map +1 -1
- package/dist/collection/testing/eventually.js.map +1 -1
- package/dist/collection/testing/fixtures.js.map +1 -1
- package/dist/collection/testing/grpc.js +3 -9
- package/dist/collection/testing/grpc.js.map +1 -1
- package/dist/collection/testing/modelViews.js.map +1 -1
- package/dist/collection/testing/pmi.js.map +1 -1
- package/dist/collection/testing/random.js.map +1 -1
- package/dist/collection/testing/resizeObserver.js.map +1 -1
- package/dist/collection/testing/scene-items-helper.js.map +1 -1
- package/dist/collection/testing/sceneTree.js.map +1 -1
- package/dist/collection/testing/viewer.js.map +1 -1
- package/dist/collection/testing/webgl.js.map +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/{p-St4ctu2K.js → p-3-bKfpqr.js} +2 -2
- package/dist/components/{p-St4ctu2K.js.map → p-3-bKfpqr.js.map} +1 -1
- package/dist/components/p-3DqRAYgO.js.map +1 -1
- package/dist/components/p-B-ToCp8-.js.map +1 -1
- package/dist/components/p-B156bTbY.js +5 -0
- package/dist/components/p-B156bTbY.js.map +1 -0
- package/dist/components/p-B9R0QWr4.js.map +1 -1
- package/dist/components/p-BCOD9yfw.js.map +1 -1
- package/dist/components/p-BHAaIoH5.js.map +1 -1
- package/dist/components/{p-Doltf1wO.js → p-BOJJZ1cN.js} +2 -2
- package/dist/components/p-BOJJZ1cN.js.map +1 -0
- package/dist/components/p-BkHp-aAR.js.map +1 -1
- package/dist/components/p-Bkm6H5uq.js.map +1 -1
- package/dist/components/p-C-VWDW9n.js.map +1 -1
- package/dist/components/p-C79PxobX.js.map +1 -1
- package/dist/components/p-CAugdB_8.js.map +1 -1
- package/dist/components/p-CEzVEgdQ.js.map +1 -1
- package/dist/components/p-CGCJ5hbJ.js.map +1 -1
- package/dist/components/p-COlcifvm.js.map +1 -1
- package/dist/components/p-CXTH3zrN.js.map +1 -1
- package/dist/components/p-CZCXdo3t.js.map +1 -1
- package/dist/components/p-Cd7kap5W.js.map +1 -1
- package/dist/components/p-CiSHWNC4.js.map +1 -1
- package/dist/components/p-CjG1fMh1.js.map +1 -1
- package/dist/components/p-CkjXRDNL.js.map +1 -1
- package/dist/components/p-D0KZu516.js.map +1 -1
- package/dist/components/p-D12q-fpW.js.map +1 -1
- package/dist/components/p-D33gVA2W.js.map +1 -1
- package/dist/components/p-DC86ZXai.js.map +1 -1
- package/dist/components/{p-B80hfIq6.js → p-DF4kEsJU.js} +2 -2
- package/dist/components/p-DF4kEsJU.js.map +1 -0
- package/dist/components/p-DRh4_Z-g.js.map +1 -1
- package/dist/components/p-DRnMrHWY.js.map +1 -1
- package/dist/components/{p-b0ZzPHz8.js → p-DUC59SSO.js} +2 -2
- package/dist/components/p-DUC59SSO.js.map +1 -0
- package/dist/components/p-DVW2WZTq.js.map +1 -1
- package/dist/components/p-DZI8pnGz.js.map +1 -1
- package/dist/components/p-Dbz9yUqC.js.map +1 -1
- package/dist/components/p-Yfi0i5Kj.js.map +1 -1
- package/dist/components/p-abSJ29r7.js.map +1 -1
- package/dist/components/p-ahjMltGJ.js.map +1 -1
- package/dist/components/p-bal2RLiw.js.map +1 -1
- package/dist/components/{p-BopQW1sA.js → p-oK38ynrd.js} +2 -2
- package/dist/components/p-oK38ynrd.js.map +1 -0
- package/dist/components/vertex-scene-tree-table-cell.js +1 -1
- package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
- package/dist/components/vertex-scene-tree-table-layout.js +1 -1
- package/dist/components/vertex-scene-tree.js +1 -1
- package/dist/components/vertex-scene-tree.js.map +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js.map +1 -1
- package/dist/components/vertex-viewer-dom-element.js +1 -1
- package/dist/components/vertex-viewer-dom-group.js +1 -1
- package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
- package/dist/components/vertex-viewer-hit-result-indicator.js.map +1 -1
- package/dist/components/vertex-viewer-markup-tool.js.map +1 -1
- package/dist/components/vertex-viewer-markup.js +1 -1
- package/dist/components/vertex-viewer-markup.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-details.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-distance.js +1 -1
- package/dist/components/vertex-viewer-measurement-distance.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-line.js +1 -1
- package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
- package/dist/components/vertex-viewer-measurement-precise.js +1 -1
- package/dist/components/vertex-viewer-measurement-precise.js.map +1 -1
- package/dist/components/vertex-viewer-pin-group.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js.map +1 -1
- package/dist/components/vertex-viewer-transform-widget.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
- package/dist/components/vertex-viewer-view-cube.js +1 -1
- package/dist/components/vertex-viewer-view-cube.js.map +1 -1
- package/dist/components/vertex-viewer-walk-mode-tool.js.map +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/components/vertex-viewer.js.map +1 -1
- package/dist/esm/config-lglER3mU.js.map +1 -1
- package/dist/esm/controller-BMWGs-I6.js.map +1 -1
- package/dist/esm/controller-Iymb_J2R.js.map +1 -1
- package/dist/esm/cursors-BbBDEutb.js.map +1 -1
- package/dist/esm/dom-B3m2VjbN.js.map +1 -1
- package/dist/esm/dom-DX6pEG54.js.map +1 -1
- package/dist/esm/entities-zRken6VS.js.map +1 -1
- package/dist/esm/geometry_pb-BiZRfctN.js.map +1 -1
- package/dist/esm/grpc-CZAYqbTu.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/model-BYW5YIye.js.map +1 -1
- package/dist/esm/model-CLtwOS0o.js.map +1 -1
- package/dist/esm/model-D0EJdHmW.js.map +1 -1
- package/dist/esm/model-DHJ5aE4y.js.map +1 -1
- package/dist/esm/multiElementInteractionHandler-DwjL-r55.js.map +1 -1
- package/dist/esm/overlays-BE1oqniA.js.map +1 -1
- package/dist/esm/queries-DEzCmbTD.js.map +1 -1
- package/dist/esm/regl-component-DmkowWhg.js.map +1 -1
- package/dist/esm/representation_pb-g4f0WC4k.js.map +1 -1
- package/dist/esm/results-CFB6nKu8.js.map +1 -1
- package/dist/esm/row-CiSHWNC4.js.map +1 -1
- package/dist/esm/stencil-BV-7pO4q.js.map +1 -1
- package/dist/esm/streamAttributes-Cp8PEH9A.js.map +1 -1
- package/dist/esm/templates-DRh4_Z-g.js.map +1 -1
- package/dist/esm/util-BCZZYmp4.js.map +1 -1
- package/dist/esm/utils-BvZ9-fs0.js.map +1 -1
- package/dist/esm/utils-DC86ZXai.js.map +1 -1
- package/dist/esm/utils-D_pIldrS.js.map +1 -1
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +6 -8
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +2 -2
- package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-box-query-tool.entry.js +2 -2
- package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
- package/dist/esm/vertex-viewer-dom-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-icon.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup-arrow_3.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup.entry.js +1 -1
- package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-details.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-distance.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +2 -2
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-precise.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-group.entry.js +2 -2
- package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-tool.entry.js +1 -1
- package/dist/esm/vertex-viewer-pin-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-teleport-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-transform-widget.entry.js +4 -5
- package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-view-cube.entry.js +1 -1
- package/dist/esm/vertex-viewer-view-cube.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-walk-mode-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer.entry.js +9 -5
- package/dist/esm/vertex-viewer.entry.js.map +1 -1
- package/dist/esm/viewport-C8WQZxvx.js.map +1 -1
- package/dist/types/regl-shape.d.ts +1 -1
- package/dist/viewer/index.esm.js.map +1 -1
- package/dist/viewer/{p-eac63070.entry.js → p-051b5154.entry.js} +2 -2
- package/dist/viewer/p-051b5154.entry.js.map +1 -0
- package/dist/viewer/{p-3d3a7eeb.entry.js → p-0984c51f.entry.js} +2 -2
- package/dist/viewer/{p-3d3a7eeb.entry.js.map → p-0984c51f.entry.js.map} +1 -1
- package/dist/viewer/{p-864f40c7.entry.js → p-11cf755a.entry.js} +2 -2
- package/dist/viewer/p-11cf755a.entry.js.map +1 -0
- package/dist/viewer/{p-29d14611.entry.js → p-16775f7d.entry.js} +2 -2
- package/dist/viewer/p-16775f7d.entry.js.map +1 -0
- package/dist/viewer/{p-5a85cae5.entry.js → p-1eb636f8.entry.js} +2 -2
- package/dist/viewer/p-1eb636f8.entry.js.map +1 -0
- package/dist/viewer/{p-e993f300.entry.js → p-228d1d43.entry.js} +2 -2
- package/dist/viewer/p-228d1d43.entry.js.map +1 -0
- package/dist/viewer/p-33f44cc1.entry.js.map +1 -1
- package/dist/viewer/{p-3300d3dc.entry.js → p-35601c85.entry.js} +2 -2
- package/dist/viewer/p-35601c85.entry.js.map +1 -0
- package/dist/viewer/p-47766566.entry.js.map +1 -1
- package/dist/viewer/p-6e3a6bbd.entry.js.map +1 -1
- package/dist/viewer/p-7f388b45.entry.js.map +1 -1
- package/dist/viewer/p-89544066.entry.js.map +1 -1
- package/dist/viewer/{p-07b99ac9.entry.js → p-8c369777.entry.js} +2 -2
- package/dist/viewer/p-8c369777.entry.js.map +1 -0
- package/dist/viewer/{p-e59983dc.entry.js → p-9835c5e2.entry.js} +2 -2
- package/dist/viewer/p-9835c5e2.entry.js.map +1 -0
- package/dist/viewer/{p-aa95e21a.entry.js → p-9d8ff406.entry.js} +2 -2
- package/dist/viewer/p-9d8ff406.entry.js.map +1 -0
- package/dist/viewer/p-BDvACHun.js.map +1 -1
- package/dist/viewer/p-BIkuvTVH.js.map +1 -1
- package/dist/viewer/p-BRPkbTVP.js.map +1 -1
- package/dist/viewer/p-BsBIynwj.js.map +1 -1
- package/dist/viewer/p-BxtKMwBH.js.map +1 -1
- package/dist/viewer/p-C4y4Noe-.js.map +1 -1
- package/dist/viewer/p-C6KrfydC.js.map +1 -1
- package/dist/viewer/p-C7dYsPFU.js.map +1 -1
- package/dist/viewer/p-C9Cqbq6H.js.map +1 -1
- package/dist/viewer/p-CVWO4w6b.js.map +1 -1
- package/dist/viewer/p-ChqXy0cG.js.map +1 -1
- package/dist/viewer/p-CiSHWNC4.js.map +1 -1
- package/dist/viewer/p-CjG1fMh1.js.map +1 -1
- package/dist/viewer/p-Cs5KOvOQ.js.map +1 -1
- package/dist/viewer/p-CyGlYje2.js.map +1 -1
- package/dist/viewer/p-D6eJC1q4.js.map +1 -1
- package/dist/viewer/p-DC86ZXai.js.map +1 -1
- package/dist/viewer/p-DRh4_Z-g.js.map +1 -1
- package/dist/viewer/p-DUX5FvBC.js.map +1 -1
- package/dist/viewer/p-DX6pEG54.js.map +1 -1
- package/dist/viewer/p-D_ixWHO7.js.map +1 -1
- package/dist/viewer/p-DacE-wPp.js.map +1 -1
- package/dist/viewer/p-Dp56p_jX.js.map +1 -1
- package/dist/viewer/p-EsKoKfmx.js.map +1 -1
- package/dist/viewer/p-F8e15or2.js.map +1 -1
- package/dist/viewer/p-Jfxh0jq9.js.map +1 -1
- package/dist/viewer/p-WPRMWirY.js.map +1 -1
- package/dist/viewer/p-_93RRNxT.js.map +1 -1
- package/dist/viewer/p-a8a81cba.entry.js +5 -0
- package/dist/viewer/p-a8a81cba.entry.js.map +1 -0
- package/dist/viewer/p-a9282481.entry.js.map +1 -1
- package/dist/viewer/{p-63f4f702.entry.js → p-c7e62d66.entry.js} +2 -2
- package/dist/viewer/p-c7e62d66.entry.js.map +1 -0
- package/dist/viewer/p-d37e647b.entry.js.map +1 -1
- package/dist/viewer/{p-302f2078.entry.js → p-d9fe788f.entry.js} +2 -2
- package/dist/viewer/p-d9fe788f.entry.js.map +1 -0
- package/dist/viewer/p-e9b83dae.entry.js.map +1 -1
- package/dist/viewer/{p-70f3629d.entry.js → p-f271dc4a.entry.js} +2 -2
- package/dist/viewer/p-f271dc4a.entry.js.map +1 -0
- package/dist/viewer/p-f65c0769.entry.js.map +1 -1
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +7 -7
- package/dist/components/p-B80hfIq6.js.map +0 -1
- package/dist/components/p-BopQW1sA.js.map +0 -1
- package/dist/components/p-DNtS2F8J.js +0 -5
- package/dist/components/p-DNtS2F8J.js.map +0 -1
- package/dist/components/p-Doltf1wO.js.map +0 -1
- package/dist/components/p-b0ZzPHz8.js.map +0 -1
- package/dist/viewer/p-07b99ac9.entry.js.map +0 -1
- package/dist/viewer/p-29d14611.entry.js.map +0 -1
- package/dist/viewer/p-302f2078.entry.js.map +0 -1
- package/dist/viewer/p-3300d3dc.entry.js.map +0 -1
- package/dist/viewer/p-5a85cae5.entry.js.map +0 -1
- package/dist/viewer/p-60c915e3.entry.js +0 -5
- package/dist/viewer/p-60c915e3.entry.js.map +0 -1
- package/dist/viewer/p-63f4f702.entry.js.map +0 -1
- package/dist/viewer/p-70f3629d.entry.js.map +0 -1
- package/dist/viewer/p-864f40c7.entry.js.map +0 -1
- package/dist/viewer/p-aa95e21a.entry.js.map +0 -1
- package/dist/viewer/p-e59983dc.entry.js.map +0 -1
- package/dist/viewer/p-e993f300.entry.js.map +0 -1
- package/dist/viewer/p-eac63070.entry.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer-pin-label.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-label/viewer-pin-label.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n 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"]}
|
|
1
|
+
{"version":3,"file":"viewer-pin-label.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-label/viewer-pin-label.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n 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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-tool/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,UAAU,sBAAsB,CACpC,EAAe,EACf,KAAkB;IAElB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,OAAO,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,EAAe,EACf,gBAAuC;IAEvC,OAAO,KAAK,CAAC,GAAG,CACd,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAChE,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,EAAe,EACf,gBAAuC,EACvC,aAAuB,EACvB,OAAgB,EAChB,OAAgB;IAEhB,MAAM,mBAAmB,GAAG,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACxD,MAAM,qBAAqB,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC;IACzD,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE9D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CACvB,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC,EACrC,qBAAqB,EACrB,mBAAmB,CACpB,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CACxB,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAC9B,qBAAqB,EACrB,mBAAmB,CACpB,CAAC;QAEF,+DAA+D;QAC/D,4FAA4F;QAC5F,wFAAwF;QACxF,MAAM,8BAA8B,GAAG,iBAAiB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,iBAAiB,GAAG,8BAA8B;YACtD,CAAC,CAAC,MAAM,CAAC,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAElB,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,iBAAiB,GAAG,yBAAyB;YACjD,CAAC,CAAC,MAAM,CAAC,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAElB,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAC3B,KAAK,EACL,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CACnD,CAAC;QAEF,OAAO,sBAAsB,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,OAAO,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC","sourcesContent":["import { Dimensions, Point } from '@vertexvis/geometry';\nimport { Range } from '@vertexvis/utils';\n\nexport function constrainRelativePoint(\n pt: Point.Point,\n range: Range.Range
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-tool/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,UAAU,sBAAsB,CACpC,EAAe,EACf,KAAkB;IAElB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,OAAO,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,EAAe,EACf,gBAAuC;IAEvC,OAAO,KAAK,CAAC,GAAG,CACd,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAChE,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,EAAe,EACf,gBAAuC,EACvC,aAAuB,EACvB,OAAgB,EAChB,OAAgB;IAEhB,MAAM,mBAAmB,GAAG,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACxD,MAAM,qBAAqB,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC;IACzD,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAE9D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CACvB,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC,EACrC,qBAAqB,EACrB,mBAAmB,CACpB,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CACxB,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAC9B,qBAAqB,EACrB,mBAAmB,CACpB,CAAC;QAEF,+DAA+D;QAC/D,4FAA4F;QAC5F,wFAAwF;QACxF,MAAM,8BAA8B,GAAG,iBAAiB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,iBAAiB,GAAG,8BAA8B;YACtD,CAAC,CAAC,MAAM,CAAC,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAElB,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,iBAAiB,GAAG,yBAAyB;YACjD,CAAC,CAAC,MAAM,CAAC,CAAC;YACV,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAElB,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAC3B,KAAK,EACL,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CACnD,CAAC;QAEF,OAAO,sBAAsB,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,OAAO,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC","sourcesContent":["import { Dimensions, Point } from '@vertexvis/geometry';\nimport { Range } from '@vertexvis/utils';\n\nexport function constrainRelativePoint(\n pt: Point.Point,\n range: Range.Range,\n): Point.Point {\n const constrainedX = Math.max(range.start, Math.min(range.end, pt.x));\n const constrainedY = Math.max(range.start, Math.min(range.end, pt.y));\n\n return Point.create(constrainedX, constrainedY);\n}\n\n/**\n * Translates a point in relative units to a point in screen units.\n */\nexport function translatePointToScreen(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n): Point.Point {\n return Point.add(\n Point.scale(pt, canvasDimensions.width, canvasDimensions.height),\n Dimensions.center(canvasDimensions),\n );\n}\n\n/**\n * Translates a point in screen units to a point in relative units.\n */\nexport function translatePointToRelative(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n includeOffset?: boolean,\n xOffset?: number,\n yOffset?: number,\n): Point.Point {\n const verticalScaleFactor = 1 / canvasDimensions.height;\n const horizontalScaleFactor = 1 / canvasDimensions.width;\n const canvasCenterPoint = Dimensions.center(canvasDimensions);\n\n const point = Point.scale(\n Point.subtract(pt, canvasCenterPoint),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n if (includeOffset) {\n const offset = Point.scale(\n Point.create(xOffset, yOffset),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n // We want to place the label towards the center of the screen.\n // The given point corresponds to the upper left corner of the label, so increase the offset\n // when placing it to the left or above to ensure that part of the label line is visible\n const centerIsToTheRightInXDirection = canvasCenterPoint.x > pt.x;\n const xOffsetCalculated = centerIsToTheRightInXDirection\n ? offset.x\n : -3 * offset.x;\n\n const centerIsBelowInYDirection = canvasCenterPoint.y > pt.y;\n const yOffsetCalculated = centerIsBelowInYDirection\n ? offset.y\n : -3 * offset.y;\n\n const offsetPoint = Point.add(\n point,\n Point.create(xOffsetCalculated, yOffsetCalculated),\n );\n\n return constrainRelativePoint(offsetPoint, Range.create(-0.5, 0.5));\n } else {\n return constrainRelativePoint(point, Range.create(-0.5, 0.5));\n }\n}\n"]}
|
|
@@ -143,7 +143,7 @@ export class ViewerPinTool {
|
|
|
143
143
|
this.handleSetProjectionMatrix();
|
|
144
144
|
}
|
|
145
145
|
render() {
|
|
146
|
-
return (h(Host, { key: '
|
|
146
|
+
return (h(Host, { key: 'ce2867d4a624dabf607b9de837e73a0a0c40eaf9' }, h("vertex-viewer-dom-renderer", { key: '7d2dc3d75ca1818ba7b9b292ccbe1db7ac5c7ac8', viewer: this.viewer, drawMode: "2d" }, this.pins.map((pin) => {
|
|
147
147
|
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 }));
|
|
148
148
|
}))));
|
|
149
149
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer-pin-tool.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-tool/viewer-pin-tool.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
|
|
1
|
+
{"version":3,"file":"viewer-pin-tool.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-tool/viewer-pin-tool.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer-teleport-tool.js","sourceRoot":"","sources":["../../../../../src/components/viewer-teleport-tool/viewer-teleport-tool.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { TeleportInteractionHandler } from '../../lib/teleportation/interactions';\nimport { WalkModeController } from '../../lib/walk-mode/controller';\nimport { ViewerTeleportMode, WalkModeModel } from '../../lib/walk-mode/model';\n\ninterface StateMap {\n shouldClearDepthBuffers?: boolean;\n}\n\n/**\n * The `<vertex-viewer-teleport-tool>` allows for click-based \"teleportation\"\n * around a model, which is particularly useful for walking through a model.\n * This tool is automatically included as part of the <vertex-viewer-walk-mode-tool>.\n */\n@Component({\n tag: 'vertex-viewer-teleport-tool',\n styleUrl: 'viewer-teleport-tool.css',\n shadow: true,\n})\nexport class ViewerTeleportTool {\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 teleportation to perform when clicking.\n *\n * `teleport` - the camera's `position` is moved to the location of the hit result\n * constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `teleport-and-align` - the camera's `position`, `lookAt`, and `up` vectors are updated\n * to align to the plane represented by the hit result's position and normal.\n *\n * `teleport-toward` - the camera's `position` is moved a fixed distance toward the location of the\n * hit result constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `undefined` - no teleportation will occur when clicking.\n *\n * Defaults to `undefined`.\n */\n @Prop({ mutable: true })\n public mode?: ViewerTeleportMode;\n\n /**\n * Indicates whether animations will be used when performing camera\n * operations. Defaults to `false`.\n */\n @Prop()\n public animationsDisabled = false;\n\n /**\n * The duration of animations, in milliseconds. Defaults to `500`.\n */\n @Prop()\n public animationMs?: number = 500;\n\n @Prop({ mutable: true })\n public controller?: WalkModeController;\n\n @Prop({ mutable: true })\n public model: WalkModeModel = new WalkModeModel();\n\n /**\n * Event emitted when the `WalkModeController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<WalkModeController>;\n\n private interactionHandlerDisposable?: Disposable;\n private interactionHandler?: TeleportInteractionHandler;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.resetDepthBuffers();\n }\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected handleModeChange(): void {\n this.controller?.setTeleportMode(this.mode);\n\n if (this.mode != null) {\n this.setDepthBuffers();\n } else {\n this.resetDepthBuffers();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n @Watch('animationMs')\n protected handleAnimationMsChanged(): void {\n if (this.animationMs != null) {\n this.interactionHandler?.setAnimations({ durationMs: this.animationMs });\n }\n }\n\n /**\n * @ignore\n */\n @Watch('animationsDisabled')\n protected handleAnimationsDisabledChanged(): void {\n if (this.animationsDisabled) {\n this.interactionHandler?.setAnimations(undefined);\n } else if (this.animationMs != null) {\n this.interactionHandler?.setAnimations({ durationMs: this.animationMs });\n }\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChanged(): void {\n this.setupInteractionHandler();\n this.setupController();\n this.controllerChanged.emit(this.controller);\n }\n\n @Watch('model')\n protected handleModelChanged(): void {\n this.setupController();\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n }\n\n protected render(): JSX.Element {\n return <Host></Host>;\n }\n\n private setupController(): void {\n if (this.controller == null) {\n this.controller = new WalkModeController(this.model);\n this.controller.setTeleportMode(this.mode);\n this.controllerChanged.emit(this.controller);\n } else {\n this.controller.setTeleportMode(this.mode);\n this.controller.updateModel(this.model);\n }\n }\n\n private setDepthBuffers(): void {\n if (\n this.mode != null &&\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 clearInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandlerDisposable = undefined;\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private async setupInteractionHandler(): Promise<void> {\n if (this.interactionHandler == null) {\n this.interactionHandler = new TeleportInteractionHandler(\n this.model,\n !this.animationsDisabled && this.animationMs != null\n ? { durationMs: this.animationMs }\n : undefined\n );\n\n this.interactionHandlerDisposable =\n await this.viewer?.registerInteractionHandler(this.interactionHandler);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"viewer-teleport-tool.js","sourceRoot":"","sources":["../../../../../src/components/viewer-teleport-tool/viewer-teleport-tool.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { TeleportInteractionHandler } from '../../lib/teleportation/interactions';\nimport { WalkModeController } from '../../lib/walk-mode/controller';\nimport { ViewerTeleportMode, WalkModeModel } from '../../lib/walk-mode/model';\n\ninterface StateMap {\n shouldClearDepthBuffers?: boolean;\n}\n\n/**\n * The `<vertex-viewer-teleport-tool>` allows for click-based \"teleportation\"\n * around a model, which is particularly useful for walking through a model.\n * This tool is automatically included as part of the <vertex-viewer-walk-mode-tool>.\n */\n@Component({\n tag: 'vertex-viewer-teleport-tool',\n styleUrl: 'viewer-teleport-tool.css',\n shadow: true,\n})\nexport class ViewerTeleportTool {\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 teleportation to perform when clicking.\n *\n * `teleport` - the camera's `position` is moved to the location of the hit result\n * constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `teleport-and-align` - the camera's `position`, `lookAt`, and `up` vectors are updated\n * to align to the plane represented by the hit result's position and normal.\n *\n * `teleport-toward` - the camera's `position` is moved a fixed distance toward the location of the\n * hit result constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `undefined` - no teleportation will occur when clicking.\n *\n * Defaults to `undefined`.\n */\n @Prop({ mutable: true })\n public mode?: ViewerTeleportMode;\n\n /**\n * Indicates whether animations will be used when performing camera\n * operations. Defaults to `false`.\n */\n @Prop()\n public animationsDisabled = false;\n\n /**\n * The duration of animations, in milliseconds. Defaults to `500`.\n */\n @Prop()\n public animationMs?: number = 500;\n\n @Prop({ mutable: true })\n public controller?: WalkModeController;\n\n @Prop({ mutable: true })\n public model: WalkModeModel = new WalkModeModel();\n\n /**\n * Event emitted when the `WalkModeController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<WalkModeController>;\n\n private interactionHandlerDisposable?: Disposable;\n private interactionHandler?: TeleportInteractionHandler;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.resetDepthBuffers();\n }\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected handleModeChange(): void {\n this.controller?.setTeleportMode(this.mode);\n\n if (this.mode != null) {\n this.setDepthBuffers();\n } else {\n this.resetDepthBuffers();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n @Watch('animationMs')\n protected handleAnimationMsChanged(): void {\n if (this.animationMs != null) {\n this.interactionHandler?.setAnimations({ durationMs: this.animationMs });\n }\n }\n\n /**\n * @ignore\n */\n @Watch('animationsDisabled')\n protected handleAnimationsDisabledChanged(): void {\n if (this.animationsDisabled) {\n this.interactionHandler?.setAnimations(undefined);\n } else if (this.animationMs != null) {\n this.interactionHandler?.setAnimations({ durationMs: this.animationMs });\n }\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChanged(): void {\n this.setupInteractionHandler();\n this.setupController();\n this.controllerChanged.emit(this.controller);\n }\n\n @Watch('model')\n protected handleModelChanged(): void {\n this.setupController();\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n }\n\n protected render(): JSX.Element {\n return <Host></Host>;\n }\n\n private setupController(): void {\n if (this.controller == null) {\n this.controller = new WalkModeController(this.model);\n this.controller.setTeleportMode(this.mode);\n this.controllerChanged.emit(this.controller);\n } else {\n this.controller.setTeleportMode(this.mode);\n this.controller.updateModel(this.model);\n }\n }\n\n private setDepthBuffers(): void {\n if (\n this.mode != null &&\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 clearInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandlerDisposable = undefined;\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private async setupInteractionHandler(): Promise<void> {\n if (this.interactionHandler == null) {\n this.interactionHandler = new TeleportInteractionHandler(\n this.model,\n !this.animationsDisabled && this.animationMs != null\n ? { durationMs: this.animationMs }\n : undefined,\n );\n\n this.interactionHandlerDisposable =\n await this.viewer?.registerInteractionHandler(this.interactionHandler);\n }\n }\n}\n"]}
|
|
@@ -191,8 +191,7 @@ export function computeInputPosition(viewport, bounds, shapePoints) {
|
|
|
191
191
|
export function calculateNewRotationAngle(event, rotationSnapKey, angleOfRotation, // In radians
|
|
192
192
|
lastAngle, // In radians
|
|
193
193
|
existingAngle, // In degrees
|
|
194
|
-
rotationSnapDegrees
|
|
195
|
-
) {
|
|
194
|
+
rotationSnapDegrees) {
|
|
196
195
|
const rotationSnapKeyIsHeld = (rotationSnapKey === 'alt' && event.altKey) ||
|
|
197
196
|
(rotationSnapKey === 'ctrl' && event.ctrlKey) ||
|
|
198
197
|
(rotationSnapKey === 'meta' && event.metaKey) ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../../src/components/viewer-transform-widget/util.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Angle,\n Euler,\n Matrix4,\n Plane,\n Point,\n Quaternion,\n Ray,\n Rectangle,\n Vector3,\n} from '@vertexvis/geometry';\n\nimport {\n AngleUnits,\n AngleUnitType,\n DistanceUnits,\n DistanceUnitType,\n Frame,\n Viewport,\n} from '../../lib/types';\nimport { ModifierKey } from '../../lib/types/keys';\nimport { TransformWidgetInputPlacement } from './viewer-transform-widget-components';\n\nexport interface PointAndPlacement {\n point: Point.Point;\n placement: TransformWidgetInputPlacement;\n}\n\nexport function convertPointToCanvas(\n point: Point.Point,\n bounds?: DOMRect\n): Point.Point | undefined {\n return bounds != null\n ? Point.create(point.x - bounds.left, point.y - bounds.top)\n : undefined;\n}\n\nexport function convertCanvasPointToWorld(\n point?: Point.Point,\n frame?: Frame,\n viewport?: Viewport,\n transform?: Matrix4.Matrix4\n): Vector3.Vector3 | undefined {\n const position =\n transform != null ? Vector3.fromMatrixPosition(transform) : undefined;\n\n if (point != null && frame != null && viewport != null && position != null) {\n const ray = viewport.transformPointToRay(\n point,\n frame.image,\n frame.scene.camera\n );\n\n if (frame.scene.camera.isOrthographic()) {\n // Offset the point to past the bounding sphere of the model to\n // adjust the position plane location.\n const offsetPoint = Ray.at(\n Ray.create({\n origin: position,\n direction: frame.scene.camera.direction,\n }),\n Vector3.magnitude(frame.scene.camera.viewVector) * 2\n );\n\n return Ray.intersectPlane(\n ray,\n Plane.fromNormalAndCoplanarPoint(\n frame.scene.camera.direction,\n offsetPoint\n )\n );\n } else {\n return Ray.intersectPlane(\n ray,\n Plane.fromNormalAndCoplanarPoint(frame.scene.camera.direction, position)\n );\n }\n }\n return undefined;\n}\n\nexport function computeInputDeltaTransform(\n current: Matrix4.Matrix4,\n identifier: string,\n value: number,\n lastValue: number,\n distanceUnit: DistanceUnitType,\n angleUnit: AngleUnitType\n): Matrix4.Matrix4 {\n return Matrix4.multiply(\n current,\n computeInputGlobalTransform(\n identifier,\n value,\n lastValue,\n distanceUnit,\n angleUnit\n )\n );\n}\n\nfunction computeInputGlobalTransform(\n identifier: string,\n value: number,\n lastValue: number,\n distanceUnit: DistanceUnitType,\n angleUnit: AngleUnitType\n): Matrix4.Matrix4 {\n const units = new DistanceUnits(distanceUnit);\n const angles = new AngleUnits(angleUnit);\n\n const rotation = (): number => angles.convertFrom(value - lastValue);\n const position = (): number =>\n units.convertRealValueToWorld(value - lastValue);\n\n switch (identifier) {\n case 'x-translate':\n return Matrix4.makeTranslation(Vector3.create(position(), 0, 0));\n case 'y-translate':\n return Matrix4.makeTranslation(Vector3.create(0, position(), 0));\n case 'z-translate':\n return Matrix4.makeTranslation(Vector3.create(0, 0, position()));\n case 'x-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.left(), rotation())\n );\n case 'y-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.down(), rotation())\n );\n case 'z-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.forward(), rotation())\n );\n default:\n return Matrix4.makeIdentity();\n }\n}\n\nexport function eulerOrderForIdentifier(identifier: string): Euler.EulerOrder {\n switch (identifier) {\n case 'x-rotate':\n return 'xyz';\n case 'y-rotate':\n return 'yzx';\n case 'z-rotate':\n return 'zxy';\n default:\n return 'xyz';\n }\n}\n\nexport function computeInputDisplayValue(\n identifier: string,\n current: Matrix4.Matrix4,\n start: Matrix4.Matrix4,\n distanceUnit: DistanceUnitType,\n angleUnit: AngleUnitType\n): number {\n const units = new DistanceUnits(distanceUnit);\n const angles = new AngleUnits(angleUnit);\n\n const rotation = (): Matrix4.Matrix4 =>\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(current));\n const transformDiff = (): Matrix4.Matrix4 =>\n Matrix4.multiply(current, Matrix4.invert(start));\n const relativeTranslationDiff = (): Vector3.Vector3 =>\n Vector3.transformMatrix(\n Vector3.fromMatrixPosition(transformDiff()),\n Matrix4.invert(rotation())\n );\n const relativeRotationDiff = (): Euler.Euler =>\n Euler.fromRotationMatrix(\n Matrix4.multiply(Matrix4.invert(rotation()), start),\n eulerOrderForIdentifier(identifier)\n );\n\n switch (identifier) {\n case 'x-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().x);\n case 'y-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().y);\n case 'z-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().z);\n case 'x-rotate':\n return angles.convertTo(Angle.normalizeRadians(relativeRotationDiff().x));\n case 'y-rotate':\n return angles.convertTo(Angle.normalizeRadians(relativeRotationDiff().y));\n case 'z-rotate':\n return angles.convertTo(Angle.normalizeRadians(relativeRotationDiff().z));\n default:\n return 0;\n }\n}\n\nexport function computeHandleDeltaTransform(\n current: Matrix4.Matrix4,\n previous: Vector3.Vector3,\n next: Vector3.Vector3,\n viewVector: Vector3.Vector3,\n angle: number,\n identifier: string\n): Matrix4.Matrix4 {\n return computeHandleGlobalTransform(\n current,\n Vector3.subtract(next, previous),\n viewVector,\n angle,\n identifier\n );\n}\n\nfunction computeHandleGlobalTransform(\n currentTransformationMatrix: Matrix4.Matrix4,\n translationVectorWorld: Vector3.Vector3,\n viewVector: Vector3.Vector3,\n angle: number,\n identifier: string\n): Matrix4.Matrix4 {\n switch (identifier) {\n case 'x-translate':\n return performTranslationConstrainedToAxis(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.right()\n );\n case 'y-translate':\n return performTranslationConstrainedToAxis(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.up()\n );\n case 'z-translate':\n return performTranslationConstrainedToAxis(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.back()\n );\n case 'xy-translate':\n return performTranslationConstrainedToPlane(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.create(0, 0, 1)\n );\n case 'xz-translate':\n return performTranslationConstrainedToPlane(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.create(0, 1, 0)\n );\n case 'yz-translate':\n return performTranslationConstrainedToPlane(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.create(1, 0, 0)\n );\n case 'x-rotate':\n return performRotationAroundAxis(\n currentTransformationMatrix,\n viewVector,\n Vector3.right(),\n angle\n );\n case 'y-rotate':\n return performRotationAroundAxis(\n currentTransformationMatrix,\n viewVector,\n Vector3.up(),\n angle\n );\n case 'z-rotate':\n return performRotationAroundAxis(\n currentTransformationMatrix,\n viewVector,\n Vector3.forward(),\n angle\n );\n default:\n return currentTransformationMatrix;\n }\n}\n\nexport function performRotationAroundAxis(\n currentTransformationMatrix: Matrix4.Matrix4,\n viewVector: Vector3.Vector3,\n localRotationAxis: Vector3.Vector3,\n rotationAngle: number\n): Matrix4.Matrix4 {\n // Determine the rotation axis in world coordinates\n const worldRotationAxis = computeRotationAxis(\n currentTransformationMatrix,\n viewVector,\n localRotationAxis\n );\n\n // Determine the rotation matrix in world coordinates\n const worldRotationQuaternion = Quaternion.fromAxisAngle(\n worldRotationAxis,\n rotationAngle\n );\n const worldRotationMatrix = Matrix4.makeRotation(worldRotationQuaternion);\n\n return Matrix4.multiply(currentTransformationMatrix, worldRotationMatrix);\n}\n\nexport function computeRotationAxis(\n currentTransformationMatrix: Matrix4.Matrix4,\n viewVector: Vector3.Vector3,\n localRotationAxis: Vector3.Vector3\n): Vector3.Vector3 {\n const changeOfBasisToWorld = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(currentTransformationMatrix)\n );\n const worldRotationAxis = Vector3.transformMatrix(\n localRotationAxis,\n changeOfBasisToWorld\n );\n const worldNegatedRotationAxis = Vector3.transformMatrix(\n Vector3.negate(localRotationAxis),\n changeOfBasisToWorld\n );\n\n return Vector3.dot(viewVector, worldRotationAxis) >\n Vector3.dot(viewVector, worldNegatedRotationAxis)\n ? localRotationAxis\n : Vector3.negate(localRotationAxis);\n}\n\nexport function performTranslationConstrainedToAxis(\n currentTransformationMatrix: Matrix4.Matrix4,\n translationVectorWorld: Vector3.Vector3,\n constrainToLocalAxis: Vector3.Vector3\n): Matrix4.Matrix4 {\n // Ensure that constrainToLocalAxis is a unit vector\n const constrainToLocalAxisUnitVector =\n Vector3.normalize(constrainToLocalAxis);\n\n // Convert the axis to constrain the translation to from local to world\n const changeOfBasisToWorld = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(currentTransformationMatrix)\n );\n const constrainToWorldAxis = Vector3.transformMatrix(\n constrainToLocalAxisUnitVector,\n changeOfBasisToWorld\n );\n\n // Project the translation vector onto the desired axis for translation\n const translationVectorProjectedToWorldAxis = Vector3.project(\n translationVectorWorld,\n constrainToWorldAxis\n );\n\n // Use the projected vector to determine the translation matrix\n const translationMatrix = Matrix4.makeTranslation(\n translationVectorProjectedToWorldAxis\n );\n\n // Multiply the translation matrix with the current transformation matrix to\n // determine the new transformation matrix\n return Matrix4.multiply(translationMatrix, currentTransformationMatrix);\n}\n\nexport function performTranslationConstrainedToPlane(\n currentTransformationMatrix: Matrix4.Matrix4,\n translationVectorWorld: Vector3.Vector3,\n localNormalVectorToPlane: Vector3.Vector3\n): Matrix4.Matrix4 {\n // Ensure that localNormalVectorToPlane is a unit vector\n const localNormalVectorToPlaneUnitVector = Vector3.normalize(\n localNormalVectorToPlane\n );\n\n // Convert the normal vector from local to world\n const changeOfBasisToWorld = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(currentTransformationMatrix)\n );\n const worldNormalVectorToPlane = Vector3.transformMatrix(\n localNormalVectorToPlaneUnitVector,\n changeOfBasisToWorld\n );\n\n // Use the worldNormalVectorToPlane and the current position of the widget to define the plane to translate on\n const currentPosition = Vector3.fromMatrixPosition(\n currentTransformationMatrix\n );\n const worldPlaneToConstrainTranslationTo = Plane.fromNormalAndCoplanarPoint(\n worldNormalVectorToPlane,\n currentPosition\n );\n\n // Project the translation vector onto the desired plane for translation\n const translationVectorProjectedToWorldPlane = Plane.projectPoint(\n worldPlaneToConstrainTranslationTo,\n translationVectorWorld\n );\n\n // Account for the plane offset to calculate the position change (the vector to translate by)\n const constrainedTranslationVector = Vector3.add(\n translationVectorProjectedToWorldPlane,\n Vector3.scale(\n worldPlaneToConstrainTranslationTo.constant,\n worldPlaneToConstrainTranslationTo.normal\n )\n );\n\n // Use the projected vector to perform the translation and determine the new transformation matrix\n const translationMatrix = Matrix4.makeTranslation(\n constrainedTranslationVector\n );\n return Matrix4.multiply(translationMatrix, currentTransformationMatrix);\n}\n\nexport function computeInputPosition(\n viewport: Viewport,\n bounds: Rectangle.Rectangle,\n shapePoints: Point.Point[]\n): PointAndPlacement {\n if (shapePoints.length === 0) {\n throw new Error(\n 'Unable to compute input position. At least one shape point must be provided.'\n );\n }\n\n const paddedBounds = Rectangle.pad(bounds, 5);\n const canvasPoints = shapePoints.map((sp) =>\n viewport.transformNdcPointToViewport(sp)\n );\n\n const topLeft = Rectangle.topLeft(paddedBounds);\n const topRight = Point.add(topLeft, Point.create(paddedBounds.width, 0));\n const bottomRight = Rectangle.bottomRight(paddedBounds);\n const bottomLeft = Point.subtract(\n bottomRight,\n Point.create(paddedBounds.width, 0)\n );\n\n const center = Point.scale(\n canvasPoints.reduce((sum, pt) => Point.add(sum, pt), Point.create()),\n 1 / canvasPoints.length,\n 1 / canvasPoints.length\n );\n\n const closestPoint = [topRight, bottomLeft, bottomRight].reduce(\n (closest, pt) =>\n Point.distance(center, pt) < Point.distance(center, closest)\n ? pt\n : closest,\n topLeft\n );\n\n switch (closestPoint) {\n case topLeft:\n return { point: closestPoint, placement: 'top-left' };\n case topRight:\n return { point: closestPoint, placement: 'top-right' };\n case bottomLeft:\n return { point: closestPoint, placement: 'bottom-left' };\n default:\n return { point: closestPoint, placement: 'bottom-right' };\n }\n}\n\nexport function calculateNewRotationAngle(\n event: PointerEvent,\n rotationSnapKey: ModifierKey,\n angleOfRotation: number, // In radians\n lastAngle: number, // In radians\n existingAngle?: number, // In degrees\n rotationSnapDegrees?: number // In degrees\n): number {\n const rotationSnapKeyIsHeld =\n (rotationSnapKey === 'alt' && event.altKey) ||\n (rotationSnapKey === 'ctrl' && event.ctrlKey) ||\n (rotationSnapKey === 'meta' && event.metaKey) ||\n (rotationSnapKey === 'shift' && event.shiftKey);\n\n // Check if the widget should snap to a certain angle\n if (\n rotationSnapKeyIsHeld &&\n rotationSnapDegrees != null &&\n rotationSnapDegrees > 0 &&\n Number.isInteger(rotationSnapDegrees)\n ) {\n const angleChangeRelativeToLastAngle = angleOfRotation - lastAngle;\n const angleChangeRelativeToLastAngleDegrees = Angle.toDegrees(\n angleChangeRelativeToLastAngle\n );\n\n // This method rounds the angle change to the nearest multiple of this.rotationSnapDegrees\n const angleChangeRounded =\n Math.round(angleChangeRelativeToLastAngleDegrees / rotationSnapDegrees) *\n rotationSnapDegrees;\n\n // Check if there is already an existing rotation angle\n if (existingAngle != null) {\n // If there is an existing angle displayed in the widget, it might not be a multiple of the\n // desired number, so the difference needs to be accounted for\n const existingAngleRounded =\n Math.round(existingAngle / rotationSnapDegrees) * rotationSnapDegrees;\n const neededAdjustmentDueToExistingAngle =\n existingAngle - existingAngleRounded;\n\n // Adjust the rounded angle change to account for the existing angle, then\n // covert the rounded value to radians and return\n const adjustedAngle =\n angleChangeRounded - neededAdjustmentDueToExistingAngle;\n const angleChangeRoundedRadians = Angle.toRadians(adjustedAngle);\n return angleChangeRoundedRadians + lastAngle;\n } else {\n // There isn't an existing angle to account for, so convert the rounded value to radians and return\n const angleChangeRoundedRadians = Angle.toRadians(angleChangeRounded);\n return angleChangeRoundedRadians + lastAngle;\n }\n } else {\n // Angle should not be snapped, so return the original angle\n return angleOfRotation;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../../src/components/viewer-transform-widget/util.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Angle,\n Euler,\n Matrix4,\n Plane,\n Point,\n Quaternion,\n Ray,\n Rectangle,\n Vector3,\n} from '@vertexvis/geometry';\n\nimport {\n AngleUnits,\n AngleUnitType,\n DistanceUnits,\n DistanceUnitType,\n Frame,\n Viewport,\n} from '../../lib/types';\nimport { ModifierKey } from '../../lib/types/keys';\nimport { TransformWidgetInputPlacement } from './viewer-transform-widget-components';\n\nexport interface PointAndPlacement {\n point: Point.Point;\n placement: TransformWidgetInputPlacement;\n}\n\nexport function convertPointToCanvas(\n point: Point.Point,\n bounds?: DOMRect,\n): Point.Point | undefined {\n return bounds != null\n ? Point.create(point.x - bounds.left, point.y - bounds.top)\n : undefined;\n}\n\nexport function convertCanvasPointToWorld(\n point?: Point.Point,\n frame?: Frame,\n viewport?: Viewport,\n transform?: Matrix4.Matrix4,\n): Vector3.Vector3 | undefined {\n const position =\n transform != null ? Vector3.fromMatrixPosition(transform) : undefined;\n\n if (point != null && frame != null && viewport != null && position != null) {\n const ray = viewport.transformPointToRay(\n point,\n frame.image,\n frame.scene.camera,\n );\n\n if (frame.scene.camera.isOrthographic()) {\n // Offset the point to past the bounding sphere of the model to\n // adjust the position plane location.\n const offsetPoint = Ray.at(\n Ray.create({\n origin: position,\n direction: frame.scene.camera.direction,\n }),\n Vector3.magnitude(frame.scene.camera.viewVector) * 2,\n );\n\n return Ray.intersectPlane(\n ray,\n Plane.fromNormalAndCoplanarPoint(\n frame.scene.camera.direction,\n offsetPoint,\n ),\n );\n } else {\n return Ray.intersectPlane(\n ray,\n Plane.fromNormalAndCoplanarPoint(\n frame.scene.camera.direction,\n position,\n ),\n );\n }\n }\n return undefined;\n}\n\nexport function computeInputDeltaTransform(\n current: Matrix4.Matrix4,\n identifier: string,\n value: number,\n lastValue: number,\n distanceUnit: DistanceUnitType,\n angleUnit: AngleUnitType,\n): Matrix4.Matrix4 {\n return Matrix4.multiply(\n current,\n computeInputGlobalTransform(\n identifier,\n value,\n lastValue,\n distanceUnit,\n angleUnit,\n ),\n );\n}\n\nfunction computeInputGlobalTransform(\n identifier: string,\n value: number,\n lastValue: number,\n distanceUnit: DistanceUnitType,\n angleUnit: AngleUnitType,\n): Matrix4.Matrix4 {\n const units = new DistanceUnits(distanceUnit);\n const angles = new AngleUnits(angleUnit);\n\n const rotation = (): number => angles.convertFrom(value - lastValue);\n const position = (): number =>\n units.convertRealValueToWorld(value - lastValue);\n\n switch (identifier) {\n case 'x-translate':\n return Matrix4.makeTranslation(Vector3.create(position(), 0, 0));\n case 'y-translate':\n return Matrix4.makeTranslation(Vector3.create(0, position(), 0));\n case 'z-translate':\n return Matrix4.makeTranslation(Vector3.create(0, 0, position()));\n case 'x-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.left(), rotation()),\n );\n case 'y-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.down(), rotation()),\n );\n case 'z-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.forward(), rotation()),\n );\n default:\n return Matrix4.makeIdentity();\n }\n}\n\nexport function eulerOrderForIdentifier(identifier: string): Euler.EulerOrder {\n switch (identifier) {\n case 'x-rotate':\n return 'xyz';\n case 'y-rotate':\n return 'yzx';\n case 'z-rotate':\n return 'zxy';\n default:\n return 'xyz';\n }\n}\n\nexport function computeInputDisplayValue(\n identifier: string,\n current: Matrix4.Matrix4,\n start: Matrix4.Matrix4,\n distanceUnit: DistanceUnitType,\n angleUnit: AngleUnitType,\n): number {\n const units = new DistanceUnits(distanceUnit);\n const angles = new AngleUnits(angleUnit);\n\n const rotation = (): Matrix4.Matrix4 =>\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(current));\n const transformDiff = (): Matrix4.Matrix4 =>\n Matrix4.multiply(current, Matrix4.invert(start));\n const relativeTranslationDiff = (): Vector3.Vector3 =>\n Vector3.transformMatrix(\n Vector3.fromMatrixPosition(transformDiff()),\n Matrix4.invert(rotation()),\n );\n const relativeRotationDiff = (): Euler.Euler =>\n Euler.fromRotationMatrix(\n Matrix4.multiply(Matrix4.invert(rotation()), start),\n eulerOrderForIdentifier(identifier),\n );\n\n switch (identifier) {\n case 'x-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().x);\n case 'y-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().y);\n case 'z-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().z);\n case 'x-rotate':\n return angles.convertTo(Angle.normalizeRadians(relativeRotationDiff().x));\n case 'y-rotate':\n return angles.convertTo(Angle.normalizeRadians(relativeRotationDiff().y));\n case 'z-rotate':\n return angles.convertTo(Angle.normalizeRadians(relativeRotationDiff().z));\n default:\n return 0;\n }\n}\n\nexport function computeHandleDeltaTransform(\n current: Matrix4.Matrix4,\n previous: Vector3.Vector3,\n next: Vector3.Vector3,\n viewVector: Vector3.Vector3,\n angle: number,\n identifier: string,\n): Matrix4.Matrix4 {\n return computeHandleGlobalTransform(\n current,\n Vector3.subtract(next, previous),\n viewVector,\n angle,\n identifier,\n );\n}\n\nfunction computeHandleGlobalTransform(\n currentTransformationMatrix: Matrix4.Matrix4,\n translationVectorWorld: Vector3.Vector3,\n viewVector: Vector3.Vector3,\n angle: number,\n identifier: string,\n): Matrix4.Matrix4 {\n switch (identifier) {\n case 'x-translate':\n return performTranslationConstrainedToAxis(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.right(),\n );\n case 'y-translate':\n return performTranslationConstrainedToAxis(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.up(),\n );\n case 'z-translate':\n return performTranslationConstrainedToAxis(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.back(),\n );\n case 'xy-translate':\n return performTranslationConstrainedToPlane(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.create(0, 0, 1),\n );\n case 'xz-translate':\n return performTranslationConstrainedToPlane(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.create(0, 1, 0),\n );\n case 'yz-translate':\n return performTranslationConstrainedToPlane(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.create(1, 0, 0),\n );\n case 'x-rotate':\n return performRotationAroundAxis(\n currentTransformationMatrix,\n viewVector,\n Vector3.right(),\n angle,\n );\n case 'y-rotate':\n return performRotationAroundAxis(\n currentTransformationMatrix,\n viewVector,\n Vector3.up(),\n angle,\n );\n case 'z-rotate':\n return performRotationAroundAxis(\n currentTransformationMatrix,\n viewVector,\n Vector3.forward(),\n angle,\n );\n default:\n return currentTransformationMatrix;\n }\n}\n\nexport function performRotationAroundAxis(\n currentTransformationMatrix: Matrix4.Matrix4,\n viewVector: Vector3.Vector3,\n localRotationAxis: Vector3.Vector3,\n rotationAngle: number,\n): Matrix4.Matrix4 {\n // Determine the rotation axis in world coordinates\n const worldRotationAxis = computeRotationAxis(\n currentTransformationMatrix,\n viewVector,\n localRotationAxis,\n );\n\n // Determine the rotation matrix in world coordinates\n const worldRotationQuaternion = Quaternion.fromAxisAngle(\n worldRotationAxis,\n rotationAngle,\n );\n const worldRotationMatrix = Matrix4.makeRotation(worldRotationQuaternion);\n\n return Matrix4.multiply(currentTransformationMatrix, worldRotationMatrix);\n}\n\nexport function computeRotationAxis(\n currentTransformationMatrix: Matrix4.Matrix4,\n viewVector: Vector3.Vector3,\n localRotationAxis: Vector3.Vector3,\n): Vector3.Vector3 {\n const changeOfBasisToWorld = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(currentTransformationMatrix),\n );\n const worldRotationAxis = Vector3.transformMatrix(\n localRotationAxis,\n changeOfBasisToWorld,\n );\n const worldNegatedRotationAxis = Vector3.transformMatrix(\n Vector3.negate(localRotationAxis),\n changeOfBasisToWorld,\n );\n\n return Vector3.dot(viewVector, worldRotationAxis) >\n Vector3.dot(viewVector, worldNegatedRotationAxis)\n ? localRotationAxis\n : Vector3.negate(localRotationAxis);\n}\n\nexport function performTranslationConstrainedToAxis(\n currentTransformationMatrix: Matrix4.Matrix4,\n translationVectorWorld: Vector3.Vector3,\n constrainToLocalAxis: Vector3.Vector3,\n): Matrix4.Matrix4 {\n // Ensure that constrainToLocalAxis is a unit vector\n const constrainToLocalAxisUnitVector =\n Vector3.normalize(constrainToLocalAxis);\n\n // Convert the axis to constrain the translation to from local to world\n const changeOfBasisToWorld = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(currentTransformationMatrix),\n );\n const constrainToWorldAxis = Vector3.transformMatrix(\n constrainToLocalAxisUnitVector,\n changeOfBasisToWorld,\n );\n\n // Project the translation vector onto the desired axis for translation\n const translationVectorProjectedToWorldAxis = Vector3.project(\n translationVectorWorld,\n constrainToWorldAxis,\n );\n\n // Use the projected vector to determine the translation matrix\n const translationMatrix = Matrix4.makeTranslation(\n translationVectorProjectedToWorldAxis,\n );\n\n // Multiply the translation matrix with the current transformation matrix to\n // determine the new transformation matrix\n return Matrix4.multiply(translationMatrix, currentTransformationMatrix);\n}\n\nexport function performTranslationConstrainedToPlane(\n currentTransformationMatrix: Matrix4.Matrix4,\n translationVectorWorld: Vector3.Vector3,\n localNormalVectorToPlane: Vector3.Vector3,\n): Matrix4.Matrix4 {\n // Ensure that localNormalVectorToPlane is a unit vector\n const localNormalVectorToPlaneUnitVector = Vector3.normalize(\n localNormalVectorToPlane,\n );\n\n // Convert the normal vector from local to world\n const changeOfBasisToWorld = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(currentTransformationMatrix),\n );\n const worldNormalVectorToPlane = Vector3.transformMatrix(\n localNormalVectorToPlaneUnitVector,\n changeOfBasisToWorld,\n );\n\n // Use the worldNormalVectorToPlane and the current position of the widget to define the plane to translate on\n const currentPosition = Vector3.fromMatrixPosition(\n currentTransformationMatrix,\n );\n const worldPlaneToConstrainTranslationTo = Plane.fromNormalAndCoplanarPoint(\n worldNormalVectorToPlane,\n currentPosition,\n );\n\n // Project the translation vector onto the desired plane for translation\n const translationVectorProjectedToWorldPlane = Plane.projectPoint(\n worldPlaneToConstrainTranslationTo,\n translationVectorWorld,\n );\n\n // Account for the plane offset to calculate the position change (the vector to translate by)\n const constrainedTranslationVector = Vector3.add(\n translationVectorProjectedToWorldPlane,\n Vector3.scale(\n worldPlaneToConstrainTranslationTo.constant,\n worldPlaneToConstrainTranslationTo.normal,\n ),\n );\n\n // Use the projected vector to perform the translation and determine the new transformation matrix\n const translationMatrix = Matrix4.makeTranslation(\n constrainedTranslationVector,\n );\n return Matrix4.multiply(translationMatrix, currentTransformationMatrix);\n}\n\nexport function computeInputPosition(\n viewport: Viewport,\n bounds: Rectangle.Rectangle,\n shapePoints: Point.Point[],\n): PointAndPlacement {\n if (shapePoints.length === 0) {\n throw new Error(\n 'Unable to compute input position. At least one shape point must be provided.',\n );\n }\n\n const paddedBounds = Rectangle.pad(bounds, 5);\n const canvasPoints = shapePoints.map((sp) =>\n viewport.transformNdcPointToViewport(sp),\n );\n\n const topLeft = Rectangle.topLeft(paddedBounds);\n const topRight = Point.add(topLeft, Point.create(paddedBounds.width, 0));\n const bottomRight = Rectangle.bottomRight(paddedBounds);\n const bottomLeft = Point.subtract(\n bottomRight,\n Point.create(paddedBounds.width, 0),\n );\n\n const center = Point.scale(\n canvasPoints.reduce((sum, pt) => Point.add(sum, pt), Point.create()),\n 1 / canvasPoints.length,\n 1 / canvasPoints.length,\n );\n\n const closestPoint = [topRight, bottomLeft, bottomRight].reduce(\n (closest, pt) =>\n Point.distance(center, pt) < Point.distance(center, closest)\n ? pt\n : closest,\n topLeft,\n );\n\n switch (closestPoint) {\n case topLeft:\n return { point: closestPoint, placement: 'top-left' };\n case topRight:\n return { point: closestPoint, placement: 'top-right' };\n case bottomLeft:\n return { point: closestPoint, placement: 'bottom-left' };\n default:\n return { point: closestPoint, placement: 'bottom-right' };\n }\n}\n\nexport function calculateNewRotationAngle(\n event: PointerEvent,\n rotationSnapKey: ModifierKey,\n angleOfRotation: number, // In radians\n lastAngle: number, // In radians\n existingAngle?: number, // In degrees\n rotationSnapDegrees?: number, // In degrees\n): number {\n const rotationSnapKeyIsHeld =\n (rotationSnapKey === 'alt' && event.altKey) ||\n (rotationSnapKey === 'ctrl' && event.ctrlKey) ||\n (rotationSnapKey === 'meta' && event.metaKey) ||\n (rotationSnapKey === 'shift' && event.shiftKey);\n\n // Check if the widget should snap to a certain angle\n if (\n rotationSnapKeyIsHeld &&\n rotationSnapDegrees != null &&\n rotationSnapDegrees > 0 &&\n Number.isInteger(rotationSnapDegrees)\n ) {\n const angleChangeRelativeToLastAngle = angleOfRotation - lastAngle;\n const angleChangeRelativeToLastAngleDegrees = Angle.toDegrees(\n angleChangeRelativeToLastAngle,\n );\n\n // This method rounds the angle change to the nearest multiple of this.rotationSnapDegrees\n const angleChangeRounded =\n Math.round(angleChangeRelativeToLastAngleDegrees / rotationSnapDegrees) *\n rotationSnapDegrees;\n\n // Check if there is already an existing rotation angle\n if (existingAngle != null) {\n // If there is an existing angle displayed in the widget, it might not be a multiple of the\n // desired number, so the difference needs to be accounted for\n const existingAngleRounded =\n Math.round(existingAngle / rotationSnapDegrees) * rotationSnapDegrees;\n const neededAdjustmentDueToExistingAngle =\n existingAngle - existingAngleRounded;\n\n // Adjust the rounded angle change to account for the existing angle, then\n // covert the rounded value to radians and return\n const adjustedAngle =\n angleChangeRounded - neededAdjustmentDueToExistingAngle;\n const angleChangeRoundedRadians = Angle.toRadians(adjustedAngle);\n return angleChangeRoundedRadians + lastAngle;\n } else {\n // There isn't an existing angle to account for, so convert the rounded value to radians and return\n const angleChangeRoundedRadians = Angle.toRadians(angleChangeRounded);\n return angleChangeRoundedRadians + lastAngle;\n }\n } else {\n // Angle should not be snapped, so return the original angle\n return angleOfRotation;\n }\n}\n"]}
|
package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer-transform-widget-components.js","sourceRoot":"","sources":["../../../../../src/components/viewer-transform-widget/viewer-transform-widget-components.tsx"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\n\nimport { AngleUnits, DistanceUnits, Viewport } from '../../lib/types';\n\nexport type TransformWidgetInputPlacement =\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right';\n\nexport interface TransformWidgetInputWrapperProps {\n ref: (el?: HTMLDivElement) => void;\n bounds?: DOMRect;\n\n viewport: Viewport;\n point: Point.Point;\n placement: TransformWidgetInputPlacement;\n\n displayUnit: DistanceUnits | AngleUnits;\n}\n\nexport const TransformWidgetInputWrapper: FunctionalComponent<\n TransformWidgetInputWrapperProps\n> = ({ ref, bounds, viewport, point, placement, displayUnit }, children) => {\n const inputPlacement = constrainInputToViewport(\n viewport,\n bounds ?? Dimensions.create(0, 0),\n point,\n placement
|
|
1
|
+
{"version":3,"file":"viewer-transform-widget-components.js","sourceRoot":"","sources":["../../../../../src/components/viewer-transform-widget/viewer-transform-widget-components.tsx"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\n\nimport { AngleUnits, DistanceUnits, Viewport } from '../../lib/types';\n\nexport type TransformWidgetInputPlacement =\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right';\n\nexport interface TransformWidgetInputWrapperProps {\n ref: (el?: HTMLDivElement) => void;\n bounds?: DOMRect;\n\n viewport: Viewport;\n point: Point.Point;\n placement: TransformWidgetInputPlacement;\n\n displayUnit: DistanceUnits | AngleUnits;\n}\n\nexport const TransformWidgetInputWrapper: FunctionalComponent<\n TransformWidgetInputWrapperProps\n> = ({ ref, bounds, viewport, point, placement, displayUnit }, children) => {\n const inputPlacement = constrainInputToViewport(\n viewport,\n bounds ?? Dimensions.create(0, 0),\n point,\n placement,\n );\n\n return (\n <div\n ref={ref}\n class=\"widget-input wrapper\"\n style={{\n ...inputPlacement,\n height: bounds?.height != null ? `${bounds.height}px` : undefined,\n }}\n >\n {children}\n <div class=\"widget-input units\">{displayUnit.unit.abbreviatedName}</div>\n </div>\n );\n};\n\nexport interface TransformWidgetInputProps {\n ref: (el?: HTMLInputElement) => void;\n\n identifier?: string;\n disabled?: boolean;\n\n onChange?: (value: number) => void | Promise<void>;\n onIncrement?: VoidFunction;\n onDecrement?: VoidFunction;\n onBlur?: VoidFunction;\n onUndo?: VoidFunction;\n}\n\nexport const TransformWidgetInput: FunctionalComponent<\n TransformWidgetInputProps\n> = ({\n ref,\n identifier,\n disabled,\n onChange,\n onIncrement,\n onDecrement,\n onBlur,\n onUndo,\n}) => {\n const handleChange = (event: Event): void => {\n if (event.target != null) {\n const parsed = parseFloat((event.target as HTMLInputElement).value);\n\n if (!isNaN(parsed)) {\n onChange?.(parseFloat((event.target as HTMLInputElement).value));\n }\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n const commandOrControlModifier = event.ctrlKey || event.metaKey;\n\n if (event.key === 'ArrowUp') {\n onIncrement?.();\n } else if (event.key === 'ArrowDown') {\n onDecrement?.();\n } else if (event.key === 'z' && commandOrControlModifier && onUndo) {\n event.preventDefault();\n\n onUndo();\n }\n };\n\n return (\n <input\n ref={ref}\n disabled={disabled}\n class={`widget-input ${identifier}`}\n type=\"text\"\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={onBlur}\n ></input>\n );\n};\n\nfunction constrainTo(dimension: number, length: number): number {\n return Math.min(dimension, Math.max(0, length));\n}\n\ninterface InputPlacement {\n left?: string;\n right?: string;\n top?: string;\n bottom?: string;\n}\n\nfunction constrainInputToViewport(\n viewport: Viewport,\n inputDimensions: Dimensions.Dimensions,\n point: Point.Point,\n placement: TransformWidgetInputPlacement,\n padding = 5,\n): InputPlacement {\n const { width, height } = viewport.dimensions;\n const paddedWidth = inputDimensions.width + padding;\n const paddedHeight = inputDimensions.height + padding;\n\n function toCssLength(length: number): string {\n return `${length}px`;\n }\n\n switch (placement) {\n case 'top-left':\n return {\n right: toCssLength(constrainTo(width - paddedWidth, width - point.x)),\n bottom: toCssLength(\n constrainTo(height - paddedHeight, height - point.y),\n ),\n };\n case 'top-right':\n return {\n left: toCssLength(constrainTo(width - paddedWidth, point.x)),\n bottom: toCssLength(\n constrainTo(height - paddedHeight, height - point.y),\n ),\n };\n case 'bottom-left':\n return {\n right: toCssLength(constrainTo(width - paddedWidth, width - point.x)),\n top: toCssLength(constrainTo(height - paddedHeight, point.y)),\n };\n case 'bottom-right':\n default:\n return {\n left: toCssLength(constrainTo(width - paddedWidth, point.x)),\n top: toCssLength(constrainTo(height - paddedHeight, point.y)),\n };\n }\n}\n"]}
|
|
@@ -686,11 +686,11 @@ export class ViewerTransformWidget {
|
|
|
686
686
|
}
|
|
687
687
|
render() {
|
|
688
688
|
var _a, _b, _c, _d, _e, _f;
|
|
689
|
-
return (h(Host, { key: '
|
|
689
|
+
return (h(Host, { key: '5d32e8df03f363c836a8a6194f9ff945227a70c8' }, h("canvas", { key: 'ba1d8b8b1fb99b808809d32176f341d12708af32', ref: (el) => {
|
|
690
690
|
this.canvasRef = el;
|
|
691
691
|
}, class: classNames('widget', {
|
|
692
692
|
hovered: this.hovered != null,
|
|
693
|
-
}), tabindex: "0", width: (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.viewport.width, height: (_b = this.viewer) === null || _b === void 0 ? void 0 : _b.viewport.height, onPointerDown: this.handleBeginDrag, onKeyDown: this.handleKeyDown }), this.showInputs && this.inputPosition && ((_c = this.viewer) === null || _c === void 0 ? void 0 : _c.viewport) && (h(TransformWidgetInputWrapper, { key: '
|
|
693
|
+
}), tabindex: "0", width: (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.viewport.width, height: (_b = this.viewer) === null || _b === void 0 ? void 0 : _b.viewport.height, onPointerDown: this.handleBeginDrag, onKeyDown: this.handleKeyDown }), this.showInputs && this.inputPosition && ((_c = this.viewer) === null || _c === void 0 ? void 0 : _c.viewport) && (h(TransformWidgetInputWrapper, { key: '734bd29977c8efe57e5e4e9d838279c8d7777ead', ref: (el) => {
|
|
694
694
|
var _a, _b;
|
|
695
695
|
if (el != null) {
|
|
696
696
|
(_a = this.inputResizeObserver) === null || _a === void 0 ? void 0 : _a.observe(el);
|
|
@@ -699,7 +699,7 @@ export class ViewerTransformWidget {
|
|
|
699
699
|
(_b = this.inputResizeObserver) === null || _b === void 0 ? void 0 : _b.unobserve(this.inputWrapperRef);
|
|
700
700
|
}
|
|
701
701
|
this.inputWrapperRef = el;
|
|
702
|
-
}, bounds: this.inputBounds, viewport: this.viewer.viewport, point: this.inputPosition.point, placement: this.inputPosition.placement, displayUnit: this.getDisplayedUnits() }, h(TransformWidgetInput, { key: '
|
|
702
|
+
}, bounds: this.inputBounds, viewport: this.viewer.viewport, point: this.inputPosition.point, placement: this.inputPosition.placement, displayUnit: this.getDisplayedUnits() }, h(TransformWidgetInput, { key: '0d8d997c37a534fcbfe24d452e520a321fea2f18', ref: (el) => {
|
|
703
703
|
this.inputRef = el;
|
|
704
704
|
}, identifier: (_e = (_d = this.dragging) === null || _d === void 0 ? void 0 : _d.identifier) !== null && _e !== void 0 ? _e : (_f = this.lastDragged) === null || _f === void 0 ? void 0 : _f.identifier, disabled: this.isEndingTransform, onChange: this.handleInputChange, onIncrement: () => this.handleInputStep(1), onDecrement: () => this.handleInputStep(-1), onBlur: () => {
|
|
705
705
|
this.inputShouldFocus = false;
|