@vertexvis/viewer 1.1.1-testing.3 → 1.1.1-testing.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/README.template.md +14 -8
- package/dist/cjs/{bundle-07I6_WqC.js → bundle-BCS0nA91.js} +28 -25
- package/dist/cjs/bundle-BCS0nA91.js.map +1 -0
- package/dist/cjs/{config-CepHuwRF.js → config-BY0v6BSK.js} +3 -3
- package/dist/cjs/{config-CepHuwRF.js.map → config-BY0v6BSK.js.map} +1 -1
- package/dist/cjs/{controller-Dklbe0Y6.js → controller-DvE3p6ta.js} +3 -3
- package/dist/cjs/{controller-Dklbe0Y6.js.map → controller-DvE3p6ta.js.map} +1 -1
- package/dist/cjs/{dom-Dlu6-7PF.js → dom-BuQSLPWr.js} +3 -3
- package/dist/cjs/{dom-Dlu6-7PF.js.map → dom-BuQSLPWr.js.map} +1 -1
- package/dist/cjs/{entities-BdWnb6KI.js → entities-CEaa12yP.js} +4 -4
- package/dist/cjs/{entities-BdWnb6KI.js.map → entities-CEaa12yP.js.map} +1 -1
- package/dist/cjs/{geometry_pb-BISQT2vx.js → geometry_pb-EVfAEuPO.js} +3 -3
- package/dist/cjs/{geometry_pb-BISQT2vx.js.map → geometry_pb-EVfAEuPO.js.map} +1 -1
- package/dist/cjs/grpc-D5Apx_zz.js.map +1 -1
- package/dist/cjs/index.cjs.js +13 -13
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{markup-C-qyTwID.js → markup-Du4uVRo4.js} +3 -3
- package/dist/cjs/{markup-C-qyTwID.js.map → markup-Du4uVRo4.js.map} +1 -1
- package/dist/cjs/{model-Dy5FvjIA.js → model-BC6acIWJ.js} +3 -3
- package/dist/cjs/{model-Dy5FvjIA.js.map → model-BC6acIWJ.js.map} +1 -1
- package/dist/cjs/model-Bw4h8wNt.js.map +1 -1
- package/dist/cjs/{model-k5VBFN6C.js → model-DqxeakCS.js} +3 -3
- package/dist/cjs/{model-k5VBFN6C.js.map → model-DqxeakCS.js.map} +1 -1
- package/dist/cjs/{multiElementInteractionHandler-Bqpg2wVT.js → multiElementInteractionHandler-Bdeo6FYp.js} +6 -5
- package/dist/cjs/multiElementInteractionHandler-Bdeo6FYp.js.map +1 -0
- package/dist/cjs/{overlays-BujVkBnG.js → overlays-DASFbMSp.js} +3 -3
- package/dist/cjs/{overlays-BujVkBnG.js.map → overlays-DASFbMSp.js.map} +1 -1
- package/dist/cjs/{queries-GhYmoomu.js → queries-LthBzEHD.js} +5 -5
- package/dist/cjs/queries-LthBzEHD.js.map +1 -0
- package/dist/cjs/{regl-component-CB004H91.js → regl-component-B_JaaVlv.js} +6 -6
- package/dist/cjs/{regl-component-CB004H91.js.map → regl-component-B_JaaVlv.js.map} +1 -1
- package/dist/cjs/{representation_pb-CHCm5o1e.js → representation_pb-B6XR10pQ.js} +3 -3
- package/dist/cjs/{representation_pb-CHCm5o1e.js.map → representation_pb-B6XR10pQ.js.map} +1 -1
- package/dist/cjs/{results-BpfUIwa8.js → results-CU9Ctm2K.js} +3 -3
- package/dist/cjs/{results-BpfUIwa8.js.map → results-CU9Ctm2K.js.map} +1 -1
- package/dist/cjs/{streamAttributes-CJOD7AxG.js → streamAttributes-nCF7u7lv.js} +4 -4
- package/dist/cjs/{streamAttributes-CJOD7AxG.js.map → streamAttributes-nCF7u7lv.js.map} +1 -1
- package/dist/cjs/{util-smaTO4bk.js → util-gX3IGslq.js} +3 -3
- package/dist/cjs/{util-smaTO4bk.js.map → util-gX3IGslq.js.map} +1 -1
- package/dist/cjs/{utils-BsXO-wLi.js → utils-D5TGpFAV.js} +3 -3
- package/dist/cjs/utils-D5TGpFAV.js.map +1 -0
- package/dist/cjs/{utils-DY6afhh8.js → utils-opS9hsaU.js} +3 -3
- package/dist/cjs/{utils-DY6afhh8.js.map → utils-opS9hsaU.js.map} +1 -1
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +1 -1
- 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 +2 -2
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-column.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +3 -3
- package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-annotation-callout.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-button_3.cjs.entry.js +6 -1
- package/dist/cjs/vertex-viewer-button_3.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +8 -8
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +7 -7
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +7 -7
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +7 -6
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-spinner.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +6 -6
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +8 -8
- package/dist/cjs/viewer.cjs.js +1 -1
- package/dist/cjs/{viewport-B70DgDZj.js → viewport-BDbB9o9T.js} +3 -3
- package/dist/cjs/{viewport-B70DgDZj.js.map → viewport-BDbB9o9T.js.map} +1 -1
- package/dist/collection/components/scene-tree/scene-tree.css +2 -3
- package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
- package/dist/collection/components/scene-tree-notification-banner/scene-tree-notification-banner.css +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.css +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.css +10 -10
- package/dist/collection/components/scene-tree-table-column/scene-tree-table-column.css +0 -1
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.css +3 -3
- package/dist/collection/components/viewer-annotation-callout/viewer-annotation-callout.css +3 -4
- package/dist/collection/components/viewer-box-query-tool/types.js.map +1 -1
- package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.css +9 -7
- package/dist/collection/components/viewer-button/viewer-button.js +32 -1
- package/dist/collection/components/viewer-button/viewer-button.js.map +1 -1
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.css +2 -2
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.js +1 -1
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.js.map +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.css +2 -2
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.css +12 -11
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.css +21 -8
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js +2 -1
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
- package/dist/collection/components/viewer-pin-label-line/viewer-pin-label-line.css +5 -4
- package/dist/collection/components/viewer-spinner/viewer-spinner.css +2 -2
- 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.css +1 -2
- package/dist/collection/lib/grpc.js.map +1 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js +2 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/scenes/scene.js.map +1 -1
- package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
- package/dist/collection/lib/stream/state.js.map +1 -1
- package/dist/collection/lib/types/loadableResource.js.map +1 -1
- package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
- package/dist/collection/lib/walk-mode/model.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/p-2UsvOTHJ.js +5 -0
- package/dist/components/p-2UsvOTHJ.js.map +1 -0
- package/dist/components/{p-garvKln8.js → p-BAuOB8M-.js} +2 -2
- package/dist/components/p-BAuOB8M-.js.map +1 -0
- package/dist/components/p-BFEV_v80.js +5 -0
- package/dist/components/p-BFEV_v80.js.map +1 -0
- package/dist/components/{p-C02XtMl4.js → p-BHyxBmg6.js} +2 -2
- package/dist/components/{p-CfTvpqud.js → p-BNRm88jS.js} +2 -2
- package/dist/components/{p-O1_Yvjd6.js → p-BT9d9jRt.js} +2 -2
- package/dist/components/{p-oDn1DcWj.js → p-BZDn1Vuv.js} +2 -2
- package/dist/components/{p-VEJB73Ei.js → p-Bdf4AcJ2.js} +2 -2
- package/dist/components/{p-CelQDFR0.js → p-C12jtCFb.js} +2 -2
- package/dist/components/{p-Dzs4u_ZY.js → p-CABws4i9.js} +2 -2
- package/dist/components/p-CIuxJYJL.js.map +1 -1
- package/dist/components/{p-CZgX-9yo.js → p-COznr3CH.js} +2 -2
- package/dist/components/{p-BqeEZXPn.js → p-CPROw2BU.js} +2 -2
- package/dist/components/{p-BKQMbekH.js → p-CWcvgy8e.js} +2 -2
- package/dist/components/{p-CMdP8O-G.js → p-Ca253f0h.js} +2 -2
- package/dist/components/{p-EG7pMA2M.js → p-CeZe0Qql.js} +2 -2
- package/dist/components/p-CioaIHsi.js.map +1 -1
- package/dist/components/{p-DH341c7b.js → p-Cku0WCYo.js} +2 -2
- package/dist/components/p-Cku0WCYo.js.map +1 -0
- package/dist/components/{p-Due5EmBt.js → p-Clyxptbp.js} +2 -2
- package/dist/components/{p-taOlygmc.js → p-Cs2aiMUK.js} +2 -2
- package/dist/components/p-Cs2aiMUK.js.map +1 -0
- package/dist/components/{p-DjrtwKcK.js → p-CvEK3ZK1.js} +2 -2
- package/dist/components/p-Cxz4L6FA.js +5 -0
- package/dist/components/p-Cxz4L6FA.js.map +1 -0
- package/dist/components/{p-MnZadXO8.js → p-D1Vdomj_.js} +2 -2
- package/dist/components/{p-DRGCkSEK.js → p-D3bzgaCV.js} +2 -2
- package/dist/components/{p-DnVcQAR9.js → p-D3in41xo.js} +2 -2
- package/dist/components/p-DTwJX9HL.js +5 -0
- package/dist/components/p-DTwJX9HL.js.map +1 -0
- package/dist/components/p-DUo-H-nW.js +5 -0
- package/dist/components/p-DUo-H-nW.js.map +1 -0
- package/dist/components/{p-DCTZZ5Rd.js → p-DjQ6RXWP.js} +2 -2
- package/dist/components/p-DxuSiXYg.js.map +1 -1
- package/dist/components/{p-CxzyM08j.js → p-DyL2wWm6.js} +2 -2
- package/dist/components/{p-avWSFTeP.js → p-JvS9LLoO.js} +2 -2
- package/dist/{viewer/p-7m7Vr5V7.js → components/p-Ng27jBsS.js} +2 -2
- package/dist/components/p-Ng27jBsS.js.map +1 -0
- package/dist/components/{p-BC777sCK.js → p-UJR-ixsy.js} +2 -2
- package/dist/components/{p-Ib4vgh2t.js → p-UrT4ZJv3.js} +2 -2
- package/dist/components/{p-Ib4vgh2t.js.map → p-UrT4ZJv3.js.map} +1 -1
- package/dist/components/p-Y8W_BXUk.js.map +1 -1
- package/dist/components/{p-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
- package/dist/components/{p-CNprIkKd.js → p-rDr0x5Z7.js} +2 -2
- 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-column.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-annotation-callout.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-button.js +1 -1
- package/dist/components/vertex-viewer-default-toolbar.js +1 -1
- package/dist/components/vertex-viewer-default-toolbar.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-dom-renderer.js +1 -1
- package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
- package/dist/components/vertex-viewer-markup-arrow.js +1 -1
- package/dist/components/vertex-viewer-markup-circle.js +1 -1
- package/dist/components/vertex-viewer-markup-freeform.js +1 -1
- package/dist/components/vertex-viewer-markup-tool.js +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 +1 -1
- package/dist/components/vertex-viewer-measurement-distance.js +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-pin-group.js +1 -1
- package/dist/components/vertex-viewer-pin-label-line.js +1 -1
- package/dist/components/vertex-viewer-pin-label.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +1 -1
- package/dist/components/vertex-viewer-teleport-tool.js +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-walk-mode-tool.js +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/esm/{bundle-CZZALKHT.js → bundle-2UsvOTHJ.js} +28 -25
- package/dist/esm/bundle-2UsvOTHJ.js.map +1 -0
- package/dist/esm/{config-CyaUTJEG.js → config-ss9ha12b.js} +3 -3
- package/dist/esm/{config-CyaUTJEG.js.map → config-ss9ha12b.js.map} +1 -1
- package/dist/esm/{controller-ByBd8r3O.js → controller-BPECXXfj.js} +3 -3
- package/dist/esm/{controller-ByBd8r3O.js.map → controller-BPECXXfj.js.map} +1 -1
- package/dist/esm/{dom-Bbf2HAst.js → dom-DaP9SiyY.js} +3 -3
- package/dist/esm/{dom-Bbf2HAst.js.map → dom-DaP9SiyY.js.map} +1 -1
- package/dist/esm/{entities-DriL3zBC.js → entities-DEFAhYdV.js} +4 -4
- package/dist/esm/{entities-DriL3zBC.js.map → entities-DEFAhYdV.js.map} +1 -1
- package/dist/esm/{geometry_pb-BEB8SExe.js → geometry_pb-D7fM1PYG.js} +3 -3
- package/dist/esm/{geometry_pb-BEB8SExe.js.map → geometry_pb-D7fM1PYG.js.map} +1 -1
- package/dist/esm/grpc-hWL8wFvk.js.map +1 -1
- package/dist/esm/index.js +13 -13
- package/dist/esm/index.mjs +13 -13
- package/dist/esm/loader.js +1 -1
- package/dist/esm/loader.mjs +1 -1
- package/dist/esm/{markup-y96-uR-l.js → markup-B58g75Hr.js} +3 -3
- package/dist/esm/{markup-y96-uR-l.js.map → markup-B58g75Hr.js.map} +1 -1
- package/dist/esm/{model-BJQo0DxL.js → model-B5KuXEsl.js} +3 -3
- package/dist/esm/{model-BJQo0DxL.js.map → model-B5KuXEsl.js.map} +1 -1
- package/dist/esm/model-BHVr1tU0.js.map +1 -1
- package/dist/esm/{model-CTdG73h9.js → model-Dc6T63-k.js} +3 -3
- package/dist/esm/{model-CTdG73h9.js.map → model-Dc6T63-k.js.map} +1 -1
- package/dist/esm/{multiElementInteractionHandler-C45E8VzE.js → multiElementInteractionHandler-3tE3OPpw.js} +6 -5
- package/dist/esm/multiElementInteractionHandler-3tE3OPpw.js.map +1 -0
- package/dist/esm/{overlays-DmcRtaSn.js → overlays-BwIqsqLW.js} +3 -3
- package/dist/esm/{overlays-DmcRtaSn.js.map → overlays-BwIqsqLW.js.map} +1 -1
- package/dist/esm/{queries-DWjy-LsV.js → queries-BcmE5Zbq.js} +5 -5
- package/dist/esm/queries-BcmE5Zbq.js.map +1 -0
- package/dist/esm/{regl-component-zzdsBise.js → regl-component-gIonUTBJ.js} +6 -6
- package/dist/esm/{regl-component-zzdsBise.js.map → regl-component-gIonUTBJ.js.map} +1 -1
- package/dist/esm/{representation_pb-CQdJxiGO.js → representation_pb-Bf023NuN.js} +3 -3
- package/dist/esm/{representation_pb-CQdJxiGO.js.map → representation_pb-Bf023NuN.js.map} +1 -1
- package/dist/esm/{results-ClIgKssN.js → results-De9arm7M.js} +3 -3
- package/dist/esm/{results-ClIgKssN.js.map → results-De9arm7M.js.map} +1 -1
- package/dist/esm/{streamAttributes-CTs61PCl.js → streamAttributes-Bj2xDHfI.js} +3 -3
- package/dist/esm/{streamAttributes-CTs61PCl.js.map → streamAttributes-Bj2xDHfI.js.map} +1 -1
- package/dist/esm/{util-DUjEw5Kh.js → util-CMPFqnEv.js} +3 -3
- package/dist/esm/{util-DUjEw5Kh.js.map → util-CMPFqnEv.js.map} +1 -1
- package/dist/esm/{utils-DOjHP1wA.js → utils-B1mSYmAK.js} +3 -3
- package/dist/esm/{utils-DOjHP1wA.js.map → utils-B1mSYmAK.js.map} +1 -1
- package/dist/esm/{utils-DJ5FvINs.js → utils-c-mcLgsj.js} +3 -3
- package/dist/esm/utils-c-mcLgsj.js.map +1 -0
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +2 -2
- package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-column.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +3 -3
- package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-annotation-callout.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-box-query-tool.entry.js +4 -4
- package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-button_3.entry.js +6 -1
- package/dist/esm/vertex-viewer-button_3.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-default-toolbar.entry.js +2 -2
- package/dist/esm/vertex-viewer-default-toolbar.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +5 -5
- package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +5 -5
- package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +3 -3
- package/dist/esm/vertex-viewer-markup-tool.entry.js +4 -4
- package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup.entry.js +3 -3
- package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-details.entry.js +3 -3
- package/dist/esm/vertex-viewer-measurement-distance.entry.js +8 -8
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +5 -5
- package/dist/esm/vertex-viewer-measurement-precise.entry.js +7 -7
- package/dist/esm/vertex-viewer-pin-group.entry.js +7 -7
- package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-label_2.entry.js +7 -6
- package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-tool.entry.js +3 -3
- package/dist/esm/vertex-viewer-spinner.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-teleport-tool.entry.js +2 -2
- package/dist/esm/vertex-viewer-transform-widget.entry.js +6 -6
- package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-view-cube.entry.js +2 -2
- package/dist/esm/vertex-viewer-walk-mode-tool.entry.js +1 -1
- package/dist/esm/vertex-viewer.entry.js +8 -8
- package/dist/esm/viewer.js +1 -1
- package/dist/esm/{viewport-D90kzsD7.js → viewport-CHtidaFL.js} +3 -3
- package/dist/esm/{viewport-D90kzsD7.js.map → viewport-CHtidaFL.js.map} +1 -1
- package/dist/types/components/viewer-button/viewer-button.d.ts +5 -0
- package/dist/types/components.d.ts +14 -1
- package/dist/types/lib/walk-mode/model.d.ts +10 -10
- package/dist/types/regl-shape.d.ts +1 -5
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/{p-12a673f0.entry.js → p-00540193.entry.js} +2 -2
- package/dist/viewer/p-00540193.entry.js.map +1 -0
- package/dist/viewer/{p-78f422af.entry.js → p-287e0670.entry.js} +2 -2
- package/dist/viewer/{p-78f422af.entry.js.map → p-287e0670.entry.js.map} +1 -1
- package/dist/viewer/p-2UsvOTHJ.js +5 -0
- package/dist/viewer/p-2UsvOTHJ.js.map +1 -0
- package/dist/viewer/{p-510fd2e1.entry.js → p-2d2fa147.entry.js} +2 -2
- package/dist/viewer/{p-fe434552.entry.js → p-30a5748d.entry.js} +2 -2
- package/dist/viewer/p-32a51a21.entry.js +5 -0
- package/dist/viewer/p-32a51a21.entry.js.map +1 -0
- package/dist/viewer/{p-aa0359e0.entry.js → p-3c5dd716.entry.js} +2 -2
- package/dist/viewer/{p-9312a936.entry.js → p-48020de1.entry.js} +2 -2
- package/dist/viewer/{p-d5542b6a.entry.js → p-4dd67d16.entry.js} +2 -2
- package/dist/viewer/p-4dd67d16.entry.js.map +1 -0
- package/dist/viewer/p-504e77a7.entry.js +5 -0
- package/dist/viewer/{p-c2c3579f.entry.js.map → p-504e77a7.entry.js.map} +1 -1
- package/dist/viewer/{p-71c03352.entry.js → p-53f6cc59.entry.js} +2 -2
- package/dist/viewer/{p-7b4eec65.entry.js → p-5cfb3047.entry.js} +2 -2
- package/dist/viewer/{p-e3981cf8.entry.js → p-7cb9c9bb.entry.js} +2 -2
- package/dist/viewer/p-7cb9c9bb.entry.js.map +1 -0
- package/dist/viewer/{p-56e39cff.entry.js → p-83683307.entry.js} +2 -2
- package/dist/viewer/{p-a108a305.entry.js → p-9a39315d.entry.js} +2 -2
- package/dist/viewer/{p-O1_Yvjd6.js → p-BT9d9jRt.js} +2 -2
- package/dist/viewer/{p-O1_Yvjd6.js.map → p-BT9d9jRt.js.map} +1 -1
- package/dist/viewer/{p-VEJB73Ei.js → p-Bdf4AcJ2.js} +2 -2
- package/dist/viewer/{p-VEJB73Ei.js.map → p-Bdf4AcJ2.js.map} +1 -1
- package/dist/viewer/{p-Cr2EnhS-.js → p-BhKTTmpL.js} +2 -2
- package/dist/viewer/{p-Cr2EnhS-.js.map → p-BhKTTmpL.js.map} +1 -1
- package/dist/viewer/{p-CelQDFR0.js → p-C12jtCFb.js} +2 -2
- package/dist/viewer/{p-CelQDFR0.js.map → p-C12jtCFb.js.map} +1 -1
- package/dist/viewer/p-CEDqc5sS.js +5 -0
- package/dist/viewer/{p-BDy3SLKk.js.map → p-CEDqc5sS.js.map} +1 -1
- package/dist/viewer/{p-C6YtUG51.js → p-CS8PfgcI.js} +2 -2
- package/dist/viewer/{p-C6YtUG51.js.map → p-CS8PfgcI.js.map} +1 -1
- package/dist/viewer/{p-EG7pMA2M.js → p-CeZe0Qql.js} +2 -2
- package/dist/viewer/{p-EG7pMA2M.js.map → p-CeZe0Qql.js.map} +1 -1
- package/dist/viewer/p-CioaIHsi.js.map +1 -1
- package/dist/viewer/{p-EUeCUp3y.js → p-CxBXErQ8.js} +2 -2
- package/dist/viewer/{p-EUeCUp3y.js.map → p-CxBXErQ8.js.map} +1 -1
- package/dist/viewer/{p-BIR7Lfxx.js → p-CyiY_hsD.js} +2 -2
- package/dist/viewer/{p-BIR7Lfxx.js.map → p-CyiY_hsD.js.map} +1 -1
- package/dist/viewer/{p-CIBBr-p1.js → p-D0aTA_2m.js} +2 -2
- package/dist/viewer/{p-CIBBr-p1.js.map → p-D0aTA_2m.js.map} +1 -1
- package/dist/viewer/{p-C-huOg09.js → p-D2IEHEGM.js} +2 -2
- package/dist/viewer/{p-C-huOg09.js.map → p-D2IEHEGM.js.map} +1 -1
- package/dist/viewer/{p-UQXG8bCI.js → p-DBfvBC5O.js} +2 -2
- package/dist/viewer/p-DBfvBC5O.js.map +1 -0
- package/dist/viewer/{p-B-J4CqZy.js → p-DHK23fw4.js} +2 -2
- package/dist/viewer/{p-B-J4CqZy.js.map → p-DHK23fw4.js.map} +1 -1
- package/dist/{components/p-QhlhRt6X.js → viewer/p-DIbJ8Ijj.js} +2 -2
- package/dist/viewer/p-DIbJ8Ijj.js.map +1 -0
- package/dist/viewer/{p-CxzyM08j.js → p-DyL2wWm6.js} +2 -2
- package/dist/viewer/{p-CxzyM08j.js.map → p-DyL2wWm6.js.map} +1 -1
- package/dist/viewer/{p-avWSFTeP.js → p-JvS9LLoO.js} +2 -2
- package/dist/viewer/{p-avWSFTeP.js.map → p-JvS9LLoO.js.map} +1 -1
- package/dist/viewer/p-_LpaX1ga.js +5 -0
- package/dist/viewer/p-_LpaX1ga.js.map +1 -0
- package/dist/viewer/{p-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
- package/dist/viewer/{p-mpsCUvSn.js.map → p-_qi2VkC2.js.map} +1 -1
- package/dist/viewer/p-b5cc83a4.entry.js.map +1 -1
- package/dist/viewer/{p-82ed4346.entry.js → p-b79c295a.entry.js} +2 -2
- package/dist/viewer/{p-fc7d9b2b.entry.js → p-c531ca97.entry.js} +2 -2
- package/dist/viewer/{p-fc7d9b2b.entry.js.map → p-c531ca97.entry.js.map} +1 -1
- package/dist/viewer/p-c9dee5c4.entry.js +5 -0
- package/dist/viewer/p-c9dee5c4.entry.js.map +1 -0
- package/dist/viewer/{p-c2454523.entry.js → p-cc835213.entry.js} +2 -2
- package/dist/viewer/p-ce711ae0.entry.js +5 -0
- package/dist/viewer/p-ce711ae0.entry.js.map +1 -0
- package/dist/viewer/p-d357d235.entry.js.map +1 -1
- package/dist/viewer/{p-91fca24b.entry.js → p-d5a57757.entry.js} +2 -2
- package/dist/viewer/p-e4913b06.entry.js +5 -0
- package/dist/viewer/p-e4913b06.entry.js.map +1 -0
- package/dist/viewer/p-e98db875.entry.js.map +1 -1
- package/dist/viewer/{p-a893a299.entry.js → p-edc2f914.entry.js} +2 -2
- package/dist/viewer/{p-03a531d9.entry.js → p-ef9437ca.entry.js} +2 -2
- package/dist/viewer/{p-49578ec9.entry.js → p-fd3a5837.entry.js} +2 -2
- package/dist/viewer/p-fd3a5837.entry.js.map +1 -0
- package/dist/viewer/p-ipyYHvea.js.map +1 -1
- package/dist/viewer/{p-Ce1j43tF.js → p-kMZA0v7I.js} +2 -2
- package/dist/viewer/{p-Ce1j43tF.js.map → p-kMZA0v7I.js.map} +1 -1
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +8 -8
- package/readme.md +14 -8
- package/dist/cjs/bundle-07I6_WqC.js.map +0 -1
- package/dist/cjs/multiElementInteractionHandler-Bqpg2wVT.js.map +0 -1
- package/dist/cjs/queries-GhYmoomu.js.map +0 -1
- package/dist/cjs/utils-BsXO-wLi.js.map +0 -1
- package/dist/components/p-B4sO9HdX.js +0 -5
- package/dist/components/p-B4sO9HdX.js.map +0 -1
- package/dist/components/p-C--Voxln.js +0 -5
- package/dist/components/p-C--Voxln.js.map +0 -1
- package/dist/components/p-CZZALKHT.js +0 -5
- package/dist/components/p-CZZALKHT.js.map +0 -1
- package/dist/components/p-Cn0vKqIN.js +0 -5
- package/dist/components/p-Cn0vKqIN.js.map +0 -1
- package/dist/components/p-DH341c7b.js.map +0 -1
- package/dist/components/p-Dmc49hX3.js +0 -5
- package/dist/components/p-Dmc49hX3.js.map +0 -1
- package/dist/components/p-QhlhRt6X.js.map +0 -1
- package/dist/components/p-garvKln8.js.map +0 -1
- package/dist/components/p-taOlygmc.js.map +0 -1
- package/dist/esm/bundle-CZZALKHT.js.map +0 -1
- package/dist/esm/multiElementInteractionHandler-C45E8VzE.js.map +0 -1
- package/dist/esm/queries-DWjy-LsV.js.map +0 -1
- package/dist/esm/utils-DJ5FvINs.js.map +0 -1
- package/dist/viewer/p-02384d83.entry.js +0 -5
- package/dist/viewer/p-02384d83.entry.js.map +0 -1
- package/dist/viewer/p-12a673f0.entry.js.map +0 -1
- package/dist/viewer/p-49578ec9.entry.js.map +0 -1
- package/dist/viewer/p-4c223366.entry.js +0 -5
- package/dist/viewer/p-4c223366.entry.js.map +0 -1
- package/dist/viewer/p-7m7Vr5V7.js.map +0 -1
- package/dist/viewer/p-8774425b.entry.js +0 -5
- package/dist/viewer/p-8774425b.entry.js.map +0 -1
- package/dist/viewer/p-9c02567d.entry.js +0 -5
- package/dist/viewer/p-9c02567d.entry.js.map +0 -1
- package/dist/viewer/p-BDy3SLKk.js +0 -5
- package/dist/viewer/p-CZZALKHT.js +0 -5
- package/dist/viewer/p-CZZALKHT.js.map +0 -1
- package/dist/viewer/p-Cju1inFh.js +0 -5
- package/dist/viewer/p-Cju1inFh.js.map +0 -1
- package/dist/viewer/p-UQXG8bCI.js.map +0 -1
- package/dist/viewer/p-c2c3579f.entry.js +0 -5
- package/dist/viewer/p-d5542b6a.entry.js.map +0 -1
- package/dist/viewer/p-e3981cf8.entry.js.map +0 -1
- /package/dist/components/{p-C02XtMl4.js.map → p-BHyxBmg6.js.map} +0 -0
- /package/dist/components/{p-CfTvpqud.js.map → p-BNRm88jS.js.map} +0 -0
- /package/dist/components/{p-O1_Yvjd6.js.map → p-BT9d9jRt.js.map} +0 -0
- /package/dist/components/{p-oDn1DcWj.js.map → p-BZDn1Vuv.js.map} +0 -0
- /package/dist/components/{p-VEJB73Ei.js.map → p-Bdf4AcJ2.js.map} +0 -0
- /package/dist/components/{p-CelQDFR0.js.map → p-C12jtCFb.js.map} +0 -0
- /package/dist/components/{p-Dzs4u_ZY.js.map → p-CABws4i9.js.map} +0 -0
- /package/dist/components/{p-CZgX-9yo.js.map → p-COznr3CH.js.map} +0 -0
- /package/dist/components/{p-BqeEZXPn.js.map → p-CPROw2BU.js.map} +0 -0
- /package/dist/components/{p-BKQMbekH.js.map → p-CWcvgy8e.js.map} +0 -0
- /package/dist/components/{p-CMdP8O-G.js.map → p-Ca253f0h.js.map} +0 -0
- /package/dist/components/{p-EG7pMA2M.js.map → p-CeZe0Qql.js.map} +0 -0
- /package/dist/components/{p-Due5EmBt.js.map → p-Clyxptbp.js.map} +0 -0
- /package/dist/components/{p-DjrtwKcK.js.map → p-CvEK3ZK1.js.map} +0 -0
- /package/dist/components/{p-MnZadXO8.js.map → p-D1Vdomj_.js.map} +0 -0
- /package/dist/components/{p-DRGCkSEK.js.map → p-D3bzgaCV.js.map} +0 -0
- /package/dist/components/{p-DnVcQAR9.js.map → p-D3in41xo.js.map} +0 -0
- /package/dist/components/{p-DCTZZ5Rd.js.map → p-DjQ6RXWP.js.map} +0 -0
- /package/dist/components/{p-CxzyM08j.js.map → p-DyL2wWm6.js.map} +0 -0
- /package/dist/components/{p-avWSFTeP.js.map → p-JvS9LLoO.js.map} +0 -0
- /package/dist/components/{p-BC777sCK.js.map → p-UJR-ixsy.js.map} +0 -0
- /package/dist/components/{p-mpsCUvSn.js.map → p-_qi2VkC2.js.map} +0 -0
- /package/dist/components/{p-CNprIkKd.js.map → p-rDr0x5Z7.js.map} +0 -0
- /package/dist/viewer/{p-510fd2e1.entry.js.map → p-2d2fa147.entry.js.map} +0 -0
- /package/dist/viewer/{p-fe434552.entry.js.map → p-30a5748d.entry.js.map} +0 -0
- /package/dist/viewer/{p-aa0359e0.entry.js.map → p-3c5dd716.entry.js.map} +0 -0
- /package/dist/viewer/{p-9312a936.entry.js.map → p-48020de1.entry.js.map} +0 -0
- /package/dist/viewer/{p-71c03352.entry.js.map → p-53f6cc59.entry.js.map} +0 -0
- /package/dist/viewer/{p-7b4eec65.entry.js.map → p-5cfb3047.entry.js.map} +0 -0
- /package/dist/viewer/{p-56e39cff.entry.js.map → p-83683307.entry.js.map} +0 -0
- /package/dist/viewer/{p-a108a305.entry.js.map → p-9a39315d.entry.js.map} +0 -0
- /package/dist/viewer/{p-82ed4346.entry.js.map → p-b79c295a.entry.js.map} +0 -0
- /package/dist/viewer/{p-c2454523.entry.js.map → p-cc835213.entry.js.map} +0 -0
- /package/dist/viewer/{p-91fca24b.entry.js.map → p-d5a57757.entry.js.map} +0 -0
- /package/dist/viewer/{p-a893a299.entry.js.map → p-edc2f914.entry.js.map} +0 -0
- /package/dist/viewer/{p-03a531d9.entry.js.map → p-ef9437ca.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["viewerMarkupToolCss","ViewerMarkupTool","constructor","hostRef","this","tool","disabled","startLineAnchorStyle","endLineAnchorStyle","centeringBehavior","scale","stateMap","handleMarkupInteractionBegin","markupBegin","emit","handleMarkupInteractionEnd","markupElement","isVertexViewerFreeformMarkup","points","bounds","length","markupEnd","FreeformMarkup","isVertexViewerCircleMarkup","CircleMarkup","isVertexViewerArrowMarkup","start","end","ArrowMarkup","handleViewerChanged","viewer","handlePropertyChanged","updateMarkupElement","handleScalingConfigurationChanged","componentDidLoad","reset","undefined","mode","render","h","Host","createArrowMarkupElement","arrowTemplateId","element","stampTemplateWithId","window","document","body","console","warn","createElement","createCircleMarkupElement","circleTemplateId","createFreeformMarkupElement","freeformTemplateId","createNewMarkupElement","remove","dispose","removeEventListener","newMarkupElement","hostEl","append","originatingViewport","offset","addEventListener"],"sources":["src/components/viewer-markup-tool/viewer-markup-tool.css?tag=vertex-viewer-markup-tool&encapsulation=shadow","src/components/viewer-markup-tool/viewer-markup-tool.tsx"],"sourcesContent":[":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n}\n\n:host([elevated=\"\"]) {\n z-index: 100;\n}","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\nimport { BasicViewer } from '@vertexvis/utils';\n\nimport { stampTemplateWithId } from '../../lib/templates';\nimport {\n ArrowMarkup,\n CircleMarkup,\n FreeformMarkup,\n Markup,\n MarkupCenteringBehavior,\n} from '../../lib/types/markup';\nimport {\n isVertexViewerArrowMarkup,\n LineAnchorStyle,\n} from '../viewer-markup-arrow/utils';\nimport { isVertexViewerCircleMarkup } from '../viewer-markup-circle/utils';\nimport { isVertexViewerFreeformMarkup } from '../viewer-markup-freeform/utils';\n\n/**\n * The types of markup that can be performed by this tool.\n */\nexport type ViewerMarkupToolType = 'arrow' | 'circle' | 'freeform';\n\ninterface StateMap {\n markupElement?:\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement;\n}\n\n@Component({\n tag: 'vertex-viewer-markup-tool',\n styleUrl: 'viewer-markup-tool.css',\n shadow: true,\n})\nexport class ViewerMarkupTool {\n /**\n * An HTML template that describes the HTML to use for new arrow\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-arrow>`.\n */\n @Prop()\n public arrowTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new circle\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-circle>`.\n */\n @Prop()\n public circleTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new freeform\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-freeform>`.\n */\n @Prop()\n public freeformTemplateId?: string;\n\n /**\n * The type of markup.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Prop()\n public tool: ViewerMarkupToolType = 'arrow';\n\n /**\n * Disables markups.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Prop()\n public disabled = false;\n\n /**\n * The viewer to connect to markup.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` or `<vertex-viewer>` element.\n */\n @Prop()\n public viewer?: BasicViewer;\n\n /**\n * The style of the starting anchor. This defaults to none.\n */\n @Prop({ mutable: true })\n public startLineAnchorStyle: LineAnchorStyle = 'none';\n\n /**\n * The style of the ending anchor. This defaults to 'arrow-triangle.'\n */\n @Prop({ mutable: true })\n public endLineAnchorStyle: LineAnchorStyle = 'arrow-triangle';\n\n /**\n * The original viewport dimensions where this markup was created. This value is used\n * to determine where the markup should be rendered relative to the current viewport,\n * enabling some markup to appear \"off-screen\".\n *\n * When provided, all NDC values will be considered relative to this viewport.\n */\n @Prop()\n public originatingViewport?: Dimensions.Dimensions;\n\n /**\n * Defines the behavior of the provided markup when the originating viewport is smaller\n * than the current viewport, or is scaled to a size smaller than the current viewport\n * using the `scale` property.\n *\n * Options:\n * - `x-only`: Markup will be centered horizontally, but not vertically.\n * - `y-only`: Markup will be centered vertically, but not horizontally.\n * - `both`: Markup will be centered both horizontally and vertically.\n * - `none`: Markup will not be centered (default).\n */\n @Prop()\n public centeringBehavior: MarkupCenteringBehavior = 'none';\n\n /**\n * The current offset of the visible viewport. This value is used to determine where\n * markup should be rendered relative to the current viewport, enabling some markup to appear \"off-screen\".\n *\n * When provided, all computed coordinates will be offset by this amount.\n */\n @Prop()\n public offset?: Point.Point;\n\n /**\n * The scale to render this markup at. This value is used to scale the element's bounds\n * along with any `offset` to determine the final computed coordinates.\n *\n * When provided, all computed coordinates will be scaled by this amount.\n */\n @Prop()\n public scale = 1;\n\n /**\n * An event that is dispatched when a user begins a new markup.\n */\n @Event({ bubbles: true })\n public markupBegin!: EventEmitter<void>;\n\n /**\n * An event that is dispatched when a user has finished their markup.\n */\n @Event({ bubbles: true })\n public markupEnd!: EventEmitter<Markup>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n /**\n * Captures internal state that you want to preserve across dev refreshes, but\n * don't want to trigger a render when the state changes.\n */\n @State()\n private stateMap: StateMap = {};\n\n @Watch('viewer')\n protected async handleViewerChanged(): Promise<void> {\n if (this.stateMap.markupElement != null) {\n this.stateMap.markupElement.viewer = this.viewer;\n }\n }\n\n /**\n * @ignore\n */\n @Watch('arrowTemplateId')\n @Watch('circleTemplateId')\n @Watch('disabled')\n @Watch('endLineAnchorStyle')\n @Watch('freeformTemplateId')\n @Watch('startLineAnchorStyle')\n @Watch('tool')\n protected handlePropertyChanged(): void {\n this.updateMarkupElement();\n }\n\n @Watch('scale')\n @Watch('offset')\n @Watch('originatingViewport')\n @Watch('centeringBehavior')\n protected handleScalingConfigurationChanged(): void {\n this.updateMarkupElement();\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n this.updateMarkupElement();\n }\n\n /**\n * Resets the state of the internally managed markup element\n * to allow for creating a new markup. This state is automatically\n * managed when this element is placed as a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Method()\n public async reset(): Promise<void> {\n const { markupElement } = this.stateMap;\n if (isVertexViewerFreeformMarkup(markupElement)) {\n markupElement.points = undefined;\n markupElement.bounds = undefined;\n markupElement.mode = 'create';\n } else if (isVertexViewerCircleMarkup(markupElement)) {\n markupElement.bounds = undefined;\n markupElement.mode = 'create';\n } else if (isVertexViewerArrowMarkup(markupElement)) {\n markupElement.start = undefined;\n markupElement.end = undefined;\n markupElement.mode = 'create';\n }\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n if (!this.disabled) {\n if (\n this.tool === 'arrow' ||\n this.tool === 'circle' ||\n this.tool === 'freeform'\n ) {\n return (\n <Host>\n <slot />\n </Host>\n );\n } else {\n return <Host>{`Unsupported tool type '${this.tool}'.`}</Host>;\n }\n } else {\n return <Host></Host>;\n }\n }\n\n private createArrowMarkupElement(): HTMLVertexViewerMarkupArrowElement {\n if (this.arrowTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.arrowTemplateId,\n isVertexViewerArrowMarkup,\n () =>\n console.warn(\n `Arrow template with ID ${this.arrowTemplateId} not found. Using default arrow element.`,\n ),\n () =>\n console.warn(\n `Arrow template does not contain a vertex-viewer-markup-arrow. Using default arrow element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-arrow');\n }\n\n private createCircleMarkupElement(): HTMLVertexViewerMarkupCircleElement {\n if (this.circleTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.circleTemplateId,\n isVertexViewerCircleMarkup,\n () =>\n console.warn(\n `Circle template with ID ${this.circleTemplateId} not found. Using default circle element.`,\n ),\n () =>\n console.warn(\n `Circle template does not contain a vertex-viewer-markup-circle. Using default circle element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-circle');\n }\n\n private createFreeformMarkupElement(): HTMLVertexViewerMarkupFreeformElement {\n if (this.freeformTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.freeformTemplateId,\n isVertexViewerFreeformMarkup,\n () =>\n console.warn(\n `Freeform template with ID ${this.freeformTemplateId} not found. Using default freeform element.`,\n ),\n () =>\n console.warn(\n `Freeform template does not contain a vertex-viewer-markup-freeform. Using default freeform element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-freeform');\n }\n\n private createNewMarkupElement():\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement {\n switch (this.tool) {\n case 'arrow':\n return this.createArrowMarkupElement();\n case 'circle':\n return this.createCircleMarkupElement();\n case 'freeform':\n return this.createFreeformMarkupElement();\n }\n }\n\n private updateMarkupElement(): void {\n const { markupElement } = this.stateMap;\n if (markupElement != null) {\n markupElement.remove();\n markupElement.dispose();\n markupElement.viewer = undefined;\n markupElement.removeEventListener(\n 'interactionBegin',\n this.handleMarkupInteractionBegin,\n );\n markupElement.removeEventListener(\n 'interactionEnd',\n this.handleMarkupInteractionEnd,\n );\n }\n\n if (!this.disabled) {\n const newMarkupElement = this.createNewMarkupElement();\n this.hostEl.append(newMarkupElement);\n\n if (this.tool === 'arrow') {\n (\n newMarkupElement as HTMLVertexViewerMarkupArrowElement\n ).startLineAnchorStyle = this.startLineAnchorStyle;\n (\n newMarkupElement as HTMLVertexViewerMarkupArrowElement\n ).endLineAnchorStyle = this.endLineAnchorStyle;\n }\n\n newMarkupElement.mode = 'create';\n newMarkupElement.viewer = this.viewer;\n newMarkupElement.originatingViewport = this.originatingViewport;\n newMarkupElement.centeringBehavior = this.centeringBehavior;\n newMarkupElement.offset = this.offset;\n newMarkupElement.scale = this.scale;\n newMarkupElement.addEventListener(\n 'interactionBegin',\n this.handleMarkupInteractionBegin,\n );\n newMarkupElement.addEventListener(\n 'interactionEnd',\n this.handleMarkupInteractionEnd,\n );\n this.stateMap.markupElement = newMarkupElement;\n }\n }\n\n private handleMarkupInteractionBegin = (): void => {\n this.markupBegin.emit();\n };\n\n private handleMarkupInteractionEnd = (): void => {\n const { markupElement } = this.stateMap;\n if (isVertexViewerFreeformMarkup(markupElement)) {\n const { points, bounds } = markupElement;\n\n if (points != null && points.length > 0 && bounds != null) {\n this.markupEnd.emit(new FreeformMarkup({ points, bounds }));\n }\n } else if (isVertexViewerCircleMarkup(markupElement)) {\n const { bounds } = markupElement;\n\n if (bounds != null) {\n this.markupEnd.emit(new CircleMarkup({ bounds }));\n }\n } else if (isVertexViewerArrowMarkup(markupElement)) {\n const { start, end } = markupElement;\n\n if (start != null && end != null) {\n this.markupEnd.emit(new ArrowMarkup({ start, end }));\n }\n }\n };\n}\n"],"mappings":";;;2QAAA,MAAMA,EAAsB,IAAM,8G,MC+CrBC,EAAgB,MAL7B,WAAAC,CAAAC,G,oFAqCSC,KAAAC,KAA6B,QAS7BD,KAAAE,SAAW,MAeXF,KAAAG,qBAAwC,OAMxCH,KAAAI,mBAAsC,iBAwBtCJ,KAAAK,kBAA6C,OAkB7CL,KAAAM,MAAQ,EAsBPN,KAAAO,SAAqB,GAyNrBP,KAAAQ,6BAA+B,KACrCR,KAAKS,YAAYC,MAAM,EAGjBV,KAAAW,2BAA6B,KACnC,MAAMC,cAAEA,GAAkBZ,KAAKO,SAC/B,GAAIM,EAA6BD,GAAgB,CAC/C,MAAME,OAAEA,EAAMC,OAAEA,GAAWH,EAE3B,GAAIE,GAAU,MAAQA,EAAOE,OAAS,GAAKD,GAAU,KAAM,CACzDf,KAAKiB,UAAUP,KAAK,IAAIQ,EAAe,CAAEJ,SAAQC,W,OAE9C,GAAII,EAA2BP,GAAgB,CACpD,MAAMG,OAAEA,GAAWH,EAEnB,GAAIG,GAAU,KAAM,CAClBf,KAAKiB,UAAUP,KAAK,IAAIU,EAAa,CAAEL,W,OAEpC,GAAIM,EAA0BT,GAAgB,CACnD,MAAMU,MAAEA,EAAKC,IAAEA,GAAQX,EAEvB,GAAIU,GAAS,MAAQC,GAAO,KAAM,CAChCvB,KAAKiB,UAAUP,KAAK,IAAIc,EAAY,CAAEF,QAAOC,Q,GAIpD,CAhPW,yBAAME,GACd,GAAIzB,KAAKO,SAASK,eAAiB,KAAM,CACvCZ,KAAKO,SAASK,cAAcc,OAAS1B,KAAK0B,M,EAcpC,qBAAAC,GACR3B,KAAK4B,qB,CAOG,iCAAAC,GACR7B,KAAK4B,qB,CAMG,gBAAAE,GACR9B,KAAK4B,qB,CAUA,WAAMG,GACX,MAAMnB,cAAEA,GAAkBZ,KAAKO,SAC/B,GAAIM,EAA6BD,GAAgB,CAC/CA,EAAcE,OAASkB,UACvBpB,EAAcG,OAASiB,UACvBpB,EAAcqB,KAAO,Q,MAChB,GAAId,EAA2BP,GAAgB,CACpDA,EAAcG,OAASiB,UACvBpB,EAAcqB,KAAO,Q,MAChB,GAAIZ,EAA0BT,GAAgB,CACnDA,EAAcU,MAAQU,UACtBpB,EAAcW,IAAMS,UACpBpB,EAAcqB,KAAO,Q,EAOf,MAAAC,GACR,IAAKlC,KAAKE,SAAU,CAClB,GACEF,KAAKC,OAAS,SACdD,KAAKC,OAAS,UACdD,KAAKC,OAAS,WACd,CACA,OACEkC,EAACC,EAAI,KACHD,EAAA,a,KAGC,CACL,OAAOA,EAACC,EAAI,KAAE,0BAA0BpC,KAAKC,S,MAE1C,CACL,OAAOkC,EAACC,EAAI,K,EAIR,wBAAAC,GACN,GAAIrC,KAAKsC,iBAAmB,KAAM,CAChC,MAAMC,EAAUC,EACdC,OAAOC,SAASC,KAChB3C,KAAKsC,gBACLjB,GACA,IACEuB,QAAQC,KACN,0BAA0B7C,KAAKsC,6DAEnC,IACEM,QAAQC,KACN,gGAIN,GAAIN,GAAW,KAAM,CACnB,OAAOA,C,EAIX,OAAOG,SAASI,cAAc,6B,CAGxB,yBAAAC,GACN,GAAI/C,KAAKgD,kBAAoB,KAAM,CACjC,MAAMT,EAAUC,EACdC,OAAOC,SAASC,KAChB3C,KAAKgD,iBACL7B,GACA,IACEyB,QAAQC,KACN,2BAA2B7C,KAAKgD,+DAEpC,IACEJ,QAAQC,KACN,mGAIN,GAAIN,GAAW,KAAM,CACnB,OAAOA,C,EAIX,OAAOG,SAASI,cAAc,8B,CAGxB,2BAAAG,GACN,GAAIjD,KAAKkD,oBAAsB,KAAM,CACnC,MAAMX,EAAUC,EACdC,OAAOC,SAASC,KAChB3C,KAAKkD,mBACLrC,GACA,IACE+B,QAAQC,KACN,6BAA6B7C,KAAKkD,mEAEtC,IACEN,QAAQC,KACN,yGAIN,GAAIN,GAAW,KAAM,CACnB,OAAOA,C,EAIX,OAAOG,SAASI,cAAc,gC,CAGxB,sBAAAK,GAIN,OAAQnD,KAAKC,MACX,IAAK,QACH,OAAOD,KAAKqC,2BACd,IAAK,SACH,OAAOrC,KAAK+C,4BACd,IAAK,WACH,OAAO/C,KAAKiD,8B,CAIV,mBAAArB,GACN,MAAMhB,cAAEA,GAAkBZ,KAAKO,SAC/B,GAAIK,GAAiB,KAAM,CACzBA,EAAcwC,SACdxC,EAAcyC,UACdzC,EAAcc,OAASM,UACvBpB,EAAc0C,oBACZ,mBACAtD,KAAKQ,8BAEPI,EAAc0C,oBACZ,iBACAtD,KAAKW,2B,CAIT,IAAKX,KAAKE,SAAU,CAClB,MAAMqD,EAAmBvD,KAAKmD,yBAC9BnD,KAAKwD,OAAOC,OAAOF,GAEnB,GAAIvD,KAAKC,OAAS,QAAS,CAEvBsD,EACApD,qBAAuBH,KAAKG,qBAE5BoD,EACAnD,mBAAqBJ,KAAKI,kB,CAG9BmD,EAAiBtB,KAAO,SACxBsB,EAAiB7B,OAAS1B,KAAK0B,OAC/B6B,EAAiBG,oBAAsB1D,KAAK0D,oBAC5CH,EAAiBlD,kBAAoBL,KAAKK,kBAC1CkD,EAAiBI,OAAS3D,KAAK2D,OAC/BJ,EAAiBjD,MAAQN,KAAKM,MAC9BiD,EAAiBK,iBACf,mBACA5D,KAAKQ,8BAEP+C,EAAiBK,iBACf,iBACA5D,KAAKW,4BAEPX,KAAKO,SAASK,cAAgB2C,C","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["viewerMarkupToolCss","ViewerMarkupTool","constructor","hostRef","this","tool","disabled","startLineAnchorStyle","endLineAnchorStyle","centeringBehavior","scale","stateMap","handleMarkupInteractionBegin","markupBegin","emit","handleMarkupInteractionEnd","markupElement","isVertexViewerFreeformMarkup","points","bounds","length","markupEnd","FreeformMarkup","isVertexViewerCircleMarkup","CircleMarkup","isVertexViewerArrowMarkup","start","end","ArrowMarkup","handleViewerChanged","viewer","handlePropertyChanged","updateMarkupElement","handleScalingConfigurationChanged","componentDidLoad","reset","undefined","mode","render","h","Host","createArrowMarkupElement","arrowTemplateId","element","stampTemplateWithId","window","document","body","console","warn","createElement","createCircleMarkupElement","circleTemplateId","createFreeformMarkupElement","freeformTemplateId","createNewMarkupElement","remove","dispose","removeEventListener","newMarkupElement","hostEl","append","originatingViewport","offset","addEventListener"],"sources":["src/components/viewer-markup-tool/viewer-markup-tool.css?tag=vertex-viewer-markup-tool&encapsulation=shadow","src/components/viewer-markup-tool/viewer-markup-tool.tsx"],"sourcesContent":[":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n}\n\n:host([elevated='']) {\n z-index: 100;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\nimport { BasicViewer } from '@vertexvis/utils';\n\nimport { stampTemplateWithId } from '../../lib/templates';\nimport {\n ArrowMarkup,\n CircleMarkup,\n FreeformMarkup,\n Markup,\n MarkupCenteringBehavior,\n} from '../../lib/types/markup';\nimport {\n isVertexViewerArrowMarkup,\n LineAnchorStyle,\n} from '../viewer-markup-arrow/utils';\nimport { isVertexViewerCircleMarkup } from '../viewer-markup-circle/utils';\nimport { isVertexViewerFreeformMarkup } from '../viewer-markup-freeform/utils';\n\n/**\n * The types of markup that can be performed by this tool.\n */\nexport type ViewerMarkupToolType = 'arrow' | 'circle' | 'freeform';\n\ninterface StateMap {\n markupElement?:\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement;\n}\n\n@Component({\n tag: 'vertex-viewer-markup-tool',\n styleUrl: 'viewer-markup-tool.css',\n shadow: true,\n})\nexport class ViewerMarkupTool {\n /**\n * An HTML template that describes the HTML to use for new arrow\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-arrow>`.\n */\n @Prop()\n public arrowTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new circle\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-circle>`.\n */\n @Prop()\n public circleTemplateId?: string;\n\n /**\n * An HTML template that describes the HTML to use for new freeform\n * markup. It's expected that the template contains a\n * `<vertex-viewer-markup-freeform>`.\n */\n @Prop()\n public freeformTemplateId?: string;\n\n /**\n * The type of markup.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Prop()\n public tool: ViewerMarkupToolType = 'arrow';\n\n /**\n * Disables markups.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Prop()\n public disabled = false;\n\n /**\n * The viewer to connect to markup.\n *\n * This property will automatically be set when a child of a\n * `<vertex-viewer-markup>` or `<vertex-viewer>` element.\n */\n @Prop()\n public viewer?: BasicViewer;\n\n /**\n * The style of the starting anchor. This defaults to none.\n */\n @Prop({ mutable: true })\n public startLineAnchorStyle: LineAnchorStyle = 'none';\n\n /**\n * The style of the ending anchor. This defaults to 'arrow-triangle.'\n */\n @Prop({ mutable: true })\n public endLineAnchorStyle: LineAnchorStyle = 'arrow-triangle';\n\n /**\n * The original viewport dimensions where this markup was created. This value is used\n * to determine where the markup should be rendered relative to the current viewport,\n * enabling some markup to appear \"off-screen\".\n *\n * When provided, all NDC values will be considered relative to this viewport.\n */\n @Prop()\n public originatingViewport?: Dimensions.Dimensions;\n\n /**\n * Defines the behavior of the provided markup when the originating viewport is smaller\n * than the current viewport, or is scaled to a size smaller than the current viewport\n * using the `scale` property.\n *\n * Options:\n * - `x-only`: Markup will be centered horizontally, but not vertically.\n * - `y-only`: Markup will be centered vertically, but not horizontally.\n * - `both`: Markup will be centered both horizontally and vertically.\n * - `none`: Markup will not be centered (default).\n */\n @Prop()\n public centeringBehavior: MarkupCenteringBehavior = 'none';\n\n /**\n * The current offset of the visible viewport. This value is used to determine where\n * markup should be rendered relative to the current viewport, enabling some markup to appear \"off-screen\".\n *\n * When provided, all computed coordinates will be offset by this amount.\n */\n @Prop()\n public offset?: Point.Point;\n\n /**\n * The scale to render this markup at. This value is used to scale the element's bounds\n * along with any `offset` to determine the final computed coordinates.\n *\n * When provided, all computed coordinates will be scaled by this amount.\n */\n @Prop()\n public scale = 1;\n\n /**\n * An event that is dispatched when a user begins a new markup.\n */\n @Event({ bubbles: true })\n public markupBegin!: EventEmitter<void>;\n\n /**\n * An event that is dispatched when a user has finished their markup.\n */\n @Event({ bubbles: true })\n public markupEnd!: EventEmitter<Markup>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n /**\n * Captures internal state that you want to preserve across dev refreshes, but\n * don't want to trigger a render when the state changes.\n */\n @State()\n private stateMap: StateMap = {};\n\n @Watch('viewer')\n protected async handleViewerChanged(): Promise<void> {\n if (this.stateMap.markupElement != null) {\n this.stateMap.markupElement.viewer = this.viewer;\n }\n }\n\n /**\n * @ignore\n */\n @Watch('arrowTemplateId')\n @Watch('circleTemplateId')\n @Watch('disabled')\n @Watch('endLineAnchorStyle')\n @Watch('freeformTemplateId')\n @Watch('startLineAnchorStyle')\n @Watch('tool')\n protected handlePropertyChanged(): void {\n this.updateMarkupElement();\n }\n\n @Watch('scale')\n @Watch('offset')\n @Watch('originatingViewport')\n @Watch('centeringBehavior')\n protected handleScalingConfigurationChanged(): void {\n this.updateMarkupElement();\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n this.updateMarkupElement();\n }\n\n /**\n * Resets the state of the internally managed markup element\n * to allow for creating a new markup. This state is automatically\n * managed when this element is placed as a child of a\n * `<vertex-viewer-markup>` element.\n */\n @Method()\n public async reset(): Promise<void> {\n const { markupElement } = this.stateMap;\n if (isVertexViewerFreeformMarkup(markupElement)) {\n markupElement.points = undefined;\n markupElement.bounds = undefined;\n markupElement.mode = 'create';\n } else if (isVertexViewerCircleMarkup(markupElement)) {\n markupElement.bounds = undefined;\n markupElement.mode = 'create';\n } else if (isVertexViewerArrowMarkup(markupElement)) {\n markupElement.start = undefined;\n markupElement.end = undefined;\n markupElement.mode = 'create';\n }\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n if (!this.disabled) {\n if (\n this.tool === 'arrow' ||\n this.tool === 'circle' ||\n this.tool === 'freeform'\n ) {\n return (\n <Host>\n <slot />\n </Host>\n );\n } else {\n return <Host>{`Unsupported tool type '${this.tool}'.`}</Host>;\n }\n } else {\n return <Host></Host>;\n }\n }\n\n private createArrowMarkupElement(): HTMLVertexViewerMarkupArrowElement {\n if (this.arrowTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.arrowTemplateId,\n isVertexViewerArrowMarkup,\n () =>\n console.warn(\n `Arrow template with ID ${this.arrowTemplateId} not found. Using default arrow element.`,\n ),\n () =>\n console.warn(\n `Arrow template does not contain a vertex-viewer-markup-arrow. Using default arrow element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-arrow');\n }\n\n private createCircleMarkupElement(): HTMLVertexViewerMarkupCircleElement {\n if (this.circleTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.circleTemplateId,\n isVertexViewerCircleMarkup,\n () =>\n console.warn(\n `Circle template with ID ${this.circleTemplateId} not found. Using default circle element.`,\n ),\n () =>\n console.warn(\n `Circle template does not contain a vertex-viewer-markup-circle. Using default circle element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-circle');\n }\n\n private createFreeformMarkupElement(): HTMLVertexViewerMarkupFreeformElement {\n if (this.freeformTemplateId != null) {\n const element = stampTemplateWithId(\n window.document.body,\n this.freeformTemplateId,\n isVertexViewerFreeformMarkup,\n () =>\n console.warn(\n `Freeform template with ID ${this.freeformTemplateId} not found. Using default freeform element.`,\n ),\n () =>\n console.warn(\n `Freeform template does not contain a vertex-viewer-markup-freeform. Using default freeform element.`,\n ),\n );\n\n if (element != null) {\n return element;\n }\n }\n\n return document.createElement('vertex-viewer-markup-freeform');\n }\n\n private createNewMarkupElement():\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement {\n switch (this.tool) {\n case 'arrow':\n return this.createArrowMarkupElement();\n case 'circle':\n return this.createCircleMarkupElement();\n case 'freeform':\n return this.createFreeformMarkupElement();\n }\n }\n\n private updateMarkupElement(): void {\n const { markupElement } = this.stateMap;\n if (markupElement != null) {\n markupElement.remove();\n markupElement.dispose();\n markupElement.viewer = undefined;\n markupElement.removeEventListener(\n 'interactionBegin',\n this.handleMarkupInteractionBegin,\n );\n markupElement.removeEventListener(\n 'interactionEnd',\n this.handleMarkupInteractionEnd,\n );\n }\n\n if (!this.disabled) {\n const newMarkupElement = this.createNewMarkupElement();\n this.hostEl.append(newMarkupElement);\n\n if (this.tool === 'arrow') {\n (\n newMarkupElement as HTMLVertexViewerMarkupArrowElement\n ).startLineAnchorStyle = this.startLineAnchorStyle;\n (\n newMarkupElement as HTMLVertexViewerMarkupArrowElement\n ).endLineAnchorStyle = this.endLineAnchorStyle;\n }\n\n newMarkupElement.mode = 'create';\n newMarkupElement.viewer = this.viewer;\n newMarkupElement.originatingViewport = this.originatingViewport;\n newMarkupElement.centeringBehavior = this.centeringBehavior;\n newMarkupElement.offset = this.offset;\n newMarkupElement.scale = this.scale;\n newMarkupElement.addEventListener(\n 'interactionBegin',\n this.handleMarkupInteractionBegin,\n );\n newMarkupElement.addEventListener(\n 'interactionEnd',\n this.handleMarkupInteractionEnd,\n );\n this.stateMap.markupElement = newMarkupElement;\n }\n }\n\n private handleMarkupInteractionBegin = (): void => {\n this.markupBegin.emit();\n };\n\n private handleMarkupInteractionEnd = (): void => {\n const { markupElement } = this.stateMap;\n if (isVertexViewerFreeformMarkup(markupElement)) {\n const { points, bounds } = markupElement;\n\n if (points != null && points.length > 0 && bounds != null) {\n this.markupEnd.emit(new FreeformMarkup({ points, bounds }));\n }\n } else if (isVertexViewerCircleMarkup(markupElement)) {\n const { bounds } = markupElement;\n\n if (bounds != null) {\n this.markupEnd.emit(new CircleMarkup({ bounds }));\n }\n } else if (isVertexViewerArrowMarkup(markupElement)) {\n const { start, end } = markupElement;\n\n if (start != null && end != null) {\n this.markupEnd.emit(new ArrowMarkup({ start, end }));\n }\n }\n };\n}\n"],"mappings":";;;2QAAA,MAAMA,EAAsB,IAAM,8G,MC+CrBC,EAAgB,MAL7B,WAAAC,CAAAC,G,oFAqCSC,KAAAC,KAA6B,QAS7BD,KAAAE,SAAW,MAeXF,KAAAG,qBAAwC,OAMxCH,KAAAI,mBAAsC,iBAwBtCJ,KAAAK,kBAA6C,OAkB7CL,KAAAM,MAAQ,EAsBPN,KAAAO,SAAqB,GAyNrBP,KAAAQ,6BAA+B,KACrCR,KAAKS,YAAYC,MAAM,EAGjBV,KAAAW,2BAA6B,KACnC,MAAMC,cAAEA,GAAkBZ,KAAKO,SAC/B,GAAIM,EAA6BD,GAAgB,CAC/C,MAAME,OAAEA,EAAMC,OAAEA,GAAWH,EAE3B,GAAIE,GAAU,MAAQA,EAAOE,OAAS,GAAKD,GAAU,KAAM,CACzDf,KAAKiB,UAAUP,KAAK,IAAIQ,EAAe,CAAEJ,SAAQC,W,OAE9C,GAAII,EAA2BP,GAAgB,CACpD,MAAMG,OAAEA,GAAWH,EAEnB,GAAIG,GAAU,KAAM,CAClBf,KAAKiB,UAAUP,KAAK,IAAIU,EAAa,CAAEL,W,OAEpC,GAAIM,EAA0BT,GAAgB,CACnD,MAAMU,MAAEA,EAAKC,IAAEA,GAAQX,EAEvB,GAAIU,GAAS,MAAQC,GAAO,KAAM,CAChCvB,KAAKiB,UAAUP,KAAK,IAAIc,EAAY,CAAEF,QAAOC,Q,GAIpD,CAhPW,yBAAME,GACd,GAAIzB,KAAKO,SAASK,eAAiB,KAAM,CACvCZ,KAAKO,SAASK,cAAcc,OAAS1B,KAAK0B,M,EAcpC,qBAAAC,GACR3B,KAAK4B,qB,CAOG,iCAAAC,GACR7B,KAAK4B,qB,CAMG,gBAAAE,GACR9B,KAAK4B,qB,CAUA,WAAMG,GACX,MAAMnB,cAAEA,GAAkBZ,KAAKO,SAC/B,GAAIM,EAA6BD,GAAgB,CAC/CA,EAAcE,OAASkB,UACvBpB,EAAcG,OAASiB,UACvBpB,EAAcqB,KAAO,Q,MAChB,GAAId,EAA2BP,GAAgB,CACpDA,EAAcG,OAASiB,UACvBpB,EAAcqB,KAAO,Q,MAChB,GAAIZ,EAA0BT,GAAgB,CACnDA,EAAcU,MAAQU,UACtBpB,EAAcW,IAAMS,UACpBpB,EAAcqB,KAAO,Q,EAOf,MAAAC,GACR,IAAKlC,KAAKE,SAAU,CAClB,GACEF,KAAKC,OAAS,SACdD,KAAKC,OAAS,UACdD,KAAKC,OAAS,WACd,CACA,OACEkC,EAACC,EAAI,KACHD,EAAA,a,KAGC,CACL,OAAOA,EAACC,EAAI,KAAE,0BAA0BpC,KAAKC,S,MAE1C,CACL,OAAOkC,EAACC,EAAI,K,EAIR,wBAAAC,GACN,GAAIrC,KAAKsC,iBAAmB,KAAM,CAChC,MAAMC,EAAUC,EACdC,OAAOC,SAASC,KAChB3C,KAAKsC,gBACLjB,GACA,IACEuB,QAAQC,KACN,0BAA0B7C,KAAKsC,6DAEnC,IACEM,QAAQC,KACN,gGAIN,GAAIN,GAAW,KAAM,CACnB,OAAOA,C,EAIX,OAAOG,SAASI,cAAc,6B,CAGxB,yBAAAC,GACN,GAAI/C,KAAKgD,kBAAoB,KAAM,CACjC,MAAMT,EAAUC,EACdC,OAAOC,SAASC,KAChB3C,KAAKgD,iBACL7B,GACA,IACEyB,QAAQC,KACN,2BAA2B7C,KAAKgD,+DAEpC,IACEJ,QAAQC,KACN,mGAIN,GAAIN,GAAW,KAAM,CACnB,OAAOA,C,EAIX,OAAOG,SAASI,cAAc,8B,CAGxB,2BAAAG,GACN,GAAIjD,KAAKkD,oBAAsB,KAAM,CACnC,MAAMX,EAAUC,EACdC,OAAOC,SAASC,KAChB3C,KAAKkD,mBACLrC,GACA,IACE+B,QAAQC,KACN,6BAA6B7C,KAAKkD,mEAEtC,IACEN,QAAQC,KACN,yGAIN,GAAIN,GAAW,KAAM,CACnB,OAAOA,C,EAIX,OAAOG,SAASI,cAAc,gC,CAGxB,sBAAAK,GAIN,OAAQnD,KAAKC,MACX,IAAK,QACH,OAAOD,KAAKqC,2BACd,IAAK,SACH,OAAOrC,KAAK+C,4BACd,IAAK,WACH,OAAO/C,KAAKiD,8B,CAIV,mBAAArB,GACN,MAAMhB,cAAEA,GAAkBZ,KAAKO,SAC/B,GAAIK,GAAiB,KAAM,CACzBA,EAAcwC,SACdxC,EAAcyC,UACdzC,EAAcc,OAASM,UACvBpB,EAAc0C,oBACZ,mBACAtD,KAAKQ,8BAEPI,EAAc0C,oBACZ,iBACAtD,KAAKW,2B,CAIT,IAAKX,KAAKE,SAAU,CAClB,MAAMqD,EAAmBvD,KAAKmD,yBAC9BnD,KAAKwD,OAAOC,OAAOF,GAEnB,GAAIvD,KAAKC,OAAS,QAAS,CAEvBsD,EACApD,qBAAuBH,KAAKG,qBAE5BoD,EACAnD,mBAAqBJ,KAAKI,kB,CAG9BmD,EAAiBtB,KAAO,SACxBsB,EAAiB7B,OAAS1B,KAAK0B,OAC/B6B,EAAiBG,oBAAsB1D,KAAK0D,oBAC5CH,EAAiBlD,kBAAoBL,KAAKK,kBAC1CkD,EAAiBI,OAAS3D,KAAK2D,OAC/BJ,EAAiBjD,MAAQN,KAAKM,MAC9BiD,EAAiBK,iBACf,mBACA5D,KAAKQ,8BAEP+C,EAAiBK,iBACf,iBACA5D,KAAKW,4BAEPX,KAAKO,SAASK,cAAgB2C,C","ignoreList":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import{r as i,c as e,h as t,H as s,a as o}from"./p-CCVkga9Q.js";import{a as l,V as r}from"./p-Bdf4AcJ2.js";import{b as h}from"./p-DxMDDbmh.js";import{g as n}from"./p-D0aTA_2m.js";import"./p-5kcpg4MZ.js";import"./p-CG9AChtV.js";import"./p-CDM7zNn0.js";import"./p-2UsvOTHJ.js";class d{constructor(i){this.controller=i;this.handleDragBegin=this.handleDragBegin.bind(this);this.handleDrag=this.handleDrag.bind(this);this.handleDragEnd=this.handleDragEnd.bind(this);this.enabled=true}initialize(i,e){this.element=i;this.api=e;this.element.addEventListener("pointerdown",this.handleDragBegin);this.addCrosshairCursor()}dispose(){var i,e,t;(i=this.element)===null||i===void 0?void 0:i.removeEventListener("pointerdown",this.handleDragBegin);window.removeEventListener("pointermove",this.handleDrag);window.removeEventListener("pointerup",this.handleDragEnd);(e=this.crosshairCursorDisposable)===null||e===void 0?void 0:e.dispose();(t=this.waitCursorDisposable)===null||t===void 0?void 0:t.dispose();this.element=undefined;this.api=undefined;this.enabled=true}disable(){this.enabled=false}enable(){this.enabled=true}handleDragBegin(i){var e;if(this.enabled&&this.isPrimaryMouseButtonClick(i)&&!this.isInteracting){this.elementBounds=(e=this.element)===null||e===void 0?void 0:e.getBoundingClientRect();this.isInteracting=true;this.controller.setStartPoint(n(i,this.elementBounds));window.addEventListener("pointermove",this.handleDrag);window.addEventListener("pointerup",this.handleDragEnd)}}handleDrag(i){if(this.enabled){this.controller.setEndPoint(n(i,this.elementBounds))}}async handleDragEnd(){var i,e;this.isInteracting=false;window.removeEventListener("pointermove",this.handleDrag);window.removeEventListener("pointerup",this.handleDragEnd);(i=this.crosshairCursorDisposable)===null||i===void 0?void 0:i.dispose();if(this.enabled){this.addWaitCursor();try{await this.controller.execute()}finally{(e=this.waitCursorDisposable)===null||e===void 0?void 0:e.dispose();this.addCrosshairCursor()}}}isPrimaryMouseButtonClick(i){return i.buttons===1}addCrosshairCursor(){var i,e;(i=this.crosshairCursorDisposable)===null||i===void 0?void 0:i.dispose();this.crosshairCursorDisposable=(e=this.api)===null||e===void 0?void 0:e.addCursor(h)}addWaitCursor(){var i,e;(i=this.waitCursorDisposable)===null||i===void 0?void 0:i.dispose();this.waitCursorDisposable=(e=this.api)===null||e===void 0?void 0:e.addCursor("wait")}}const a=()=>`:host{--viewer-box-query-outline-exclusive-color:#0099cc;--viewer-box-query-outline-exclusive-border-style:solid;--viewer-box-query-outline-inclusive-color:#00cc00;--viewer-box-query-outline-inclusive-border-style:dashed;--viewer-box-query-outline-border-radius:0.25rem;--viewer-box-query-outline-fill-opacity:0.25}.bounds{position:absolute}.outline{position:absolute;top:0;left:0;width:100%;height:100%;box-sizing:border-box;border-radius:var(--viewer-box-query-outline-border-radius)}:host([exclusive='true']) .outline{border:3px var(--viewer-box-query-outline-exclusive-border-style) var(--viewer-box-query-outline-exclusive-color)}:host([inclusive='true']) .outline{border:3px var(--viewer-box-query-outline-inclusive-border-style) var(--viewer-box-query-outline-inclusive-color)}.fill{position:absolute;top:0;left:0;width:100%;height:100%;opacity:var(--viewer-box-query-outline-fill-opacity);border-radius:var(--viewer-box-query-outline-border-radius)}:host([exclusive='true']) .fill{background-color:var(--viewer-box-query-outline-exclusive-color)}:host([inclusive='true']) .fill{background-color:var(--viewer-box-query-outline-inclusive-color)}`;const u=class{constructor(t){i(this,t);this.controllerChanged=e(this,"controllerChanged");this.operationType="clearAndSelect";this.handleScreenBoundsChanged=this.handleScreenBoundsChanged.bind(this);this.handleExecuteStarted=this.handleExecuteStarted.bind(this);this.handleExecuteComplete=this.handleExecuteComplete.bind(this)}componentWillLoad(){var i;this.model=(i=this.model)!==null&&i!==void 0?i:new l(this.mode);this.screenBoundsChangedDisposable=this.model.onScreenBoundsChanged(this.handleScreenBoundsChanged);this.handleViewerChanged(this.viewer);this.handleControllerChange(this.controller);this.handleDefaultOperationChange(this.operationType)}disconnectedCallback(){var i,e,t,s;(i=this.model)===null||i===void 0?void 0:i.reset();(e=this.screenBoundsChangedDisposable)===null||e===void 0?void 0:e.dispose();(t=this.operationStartedDisposable)===null||t===void 0?void 0:t.dispose();(s=this.operationCompleteDisposable)===null||s===void 0?void 0:s.dispose();this.deregisterInteractionHandler()}handleViewerChanged(i){this.deregisterInteractionHandler();if(this.model!=null&&i!=null){this.controller=new r(this.model,i);this.handleDefaultOperationChange(this.operationType);this.registerInteractionHandler(this.controller,i)}}handleDefaultOperationChange(i){switch(i){case"clearAndSelect":this.setDefaultClearAndSelectOperation();break;case"select":this.setDefaultSelectOperation();break;case"deselect":this.setDefaultDeselectOperation();break}}handleModeChange(i){var e;(e=this.model)===null||e===void 0?void 0:e.setMode(i)}handleControllerChange(i){var e,t;(e=this.operationStartedDisposable)===null||e===void 0?void 0:e.dispose();(t=this.operationCompleteDisposable)===null||t===void 0?void 0:t.dispose();this.operationStartedDisposable=i===null||i===void 0?void 0:i.onExecuteStarted(this.handleExecuteStarted);this.operationStartedDisposable=i===null||i===void 0?void 0:i.onExecuteComplete(this.handleExecuteComplete);this.controllerChanged.emit(this.controller)}render(){return t(s,{key:"754fc6867397c6f7f366b078f9a4403344cb5137"},t("vertex-viewer-layer",{key:"df484423586be7270901b01bbabe62659a681a3a"},this.details!=null&&t("div",{key:"354f3d5f616264e8635258b7e9f05ab8350338ff",class:"bounds",style:{left:`${this.details.screenBounds.x}px`,top:`${this.details.screenBounds.y}px`,width:`${this.details.screenBounds.width}px`,height:`${this.details.screenBounds.height}px`}},t("slot",{key:"fa7330cb175bd1b40cf1aea9b0e845315b05c7b2",name:"bounds"},t("div",{key:"6d03c4c016ce759f51a61406a79769c5c8c00acd",class:"outline"}),t("div",{key:"b648029136d216ca805cc73c66c61d74e1297a5b",class:"fill"})))))}handleScreenBoundsChanged(i){this.details=i;this.updateTypeAttribute(i===null||i===void 0?void 0:i.type)}handleExecuteStarted(){var i;(i=this.interactionHandler)===null||i===void 0?void 0:i.disable()}handleExecuteComplete(){var i;(i=this.interactionHandler)===null||i===void 0?void 0:i.enable()}async registerInteractionHandler(i,e){this.interactionHandler=new d(i);this.interactionHandlerDisposable=await e.registerInteractionHandler(this.interactionHandler)}deregisterInteractionHandler(){var i,e;(i=this.interactionHandlerDisposable)===null||i===void 0?void 0:i.dispose();(e=this.interactionHandler)===null||e===void 0?void 0:e.dispose();this.interactionHandler=undefined}updateTypeAttribute(i){this.hostEl.setAttribute("inclusive",`${i==="inclusive"}`);this.hostEl.setAttribute("exclusive",`${i==="exclusive"}`)}setDefaultClearAndSelectOperation(){var i,e;(i=this.controller)===null||i===void 0?void 0:i.setOperationTransform((i=>i.select()));(e=this.controller)===null||e===void 0?void 0:e.setAdditionalTransforms([i=>i.items.where((i=>i.withSelected())).deselect()])}setDefaultSelectOperation(){var i,e;(i=this.controller)===null||i===void 0?void 0:i.setOperationTransform((i=>i.select()));(e=this.controller)===null||e===void 0?void 0:e.setAdditionalTransforms([])}setDefaultDeselectOperation(){var i,e;(i=this.controller)===null||i===void 0?void 0:i.setOperationTransform((i=>i.deselect()));(e=this.controller)===null||e===void 0?void 0:e.setAdditionalTransforms([])}get hostEl(){return o(this)}static get watchers(){return{viewer:[{handleViewerChanged:0}],operationType:[{handleDefaultOperationChange:0}],mode:[{handleModeChange:0}],controller:[{handleControllerChange:0}]}}};u.style=a();export{u as vertex_viewer_box_query_tool};
|
|
5
|
+
//# sourceMappingURL=p-c9dee5c4.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["VolumeIntersectionQueryInteractionHandler","constructor","controller","this","handleDragBegin","bind","handleDrag","handleDragEnd","enabled","initialize","element","api","addEventListener","addCrosshairCursor","dispose","_a","removeEventListener","window","_b","crosshairCursorDisposable","_c","waitCursorDisposable","undefined","disable","enable","event","isPrimaryMouseButtonClick","isInteracting","elementBounds","getBoundingClientRect","setStartPoint","getMouseClientPosition","setEndPoint","addWaitCursor","execute","buttons","addCursor","boxQueryCursor","viewerBoxQueryToolCss","ViewerBoxQueryTool","hostRef","operationType","handleScreenBoundsChanged","handleExecuteStarted","handleExecuteComplete","componentWillLoad","model","VolumeIntersectionQueryModel","mode","screenBoundsChangedDisposable","onScreenBoundsChanged","handleViewerChanged","viewer","handleControllerChange","handleDefaultOperationChange","disconnectedCallback","reset","operationStartedDisposable","_d","operationCompleteDisposable","deregisterInteractionHandler","newViewer","VolumeIntersectionQueryController","registerInteractionHandler","updatedOperationType","setDefaultClearAndSelectOperation","setDefaultSelectOperation","setDefaultDeselectOperation","handleModeChange","updatedMode","setMode","onExecuteStarted","onExecuteComplete","controllerChanged","emit","render","h","Host","key","details","class","style","left","screenBounds","x","top","y","width","height","name","updateTypeAttribute","type","interactionHandler","interactionHandlerDisposable","hostEl","setAttribute","setOperationTransform","builder","select","setAdditionalTransforms","op","items","where","q","withSelected","deselect"],"sources":["src/lib/volume-intersection/interactions.ts","src/components/viewer-box-query-tool/viewer-box-query-tool.css?tag=vertex-viewer-box-query-tool&encapsulation=shadow","src/components/viewer-box-query-tool/viewer-box-query-tool.tsx"],"sourcesContent":["import { Disposable } from '@vertexvis/utils';\n\nimport { boxQueryCursor } from '../cursors';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from '../interactions';\nimport { InteractionHandler } from '../interactions/interactionHandler';\nimport { VolumeIntersectionQueryController } from './controller';\n\nexport class VolumeIntersectionQueryInteractionHandler implements InteractionHandler {\n private element?: HTMLElement;\n private api?: InteractionApi;\n private isInteracting?: boolean;\n private enabled?: boolean;\n private elementBounds?: DOMRect;\n private crosshairCursorDisposable?: Disposable;\n private waitCursorDisposable?: Disposable;\n\n public constructor(private controller: VolumeIntersectionQueryController) {\n this.handleDragBegin = this.handleDragBegin.bind(this);\n this.handleDrag = this.handleDrag.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n\n this.enabled = true;\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.element.addEventListener('pointerdown', this.handleDragBegin);\n this.addCrosshairCursor();\n }\n\n public dispose(): void {\n this.element?.removeEventListener('pointerdown', this.handleDragBegin);\n window.removeEventListener('pointermove', this.handleDrag);\n window.removeEventListener('pointerup', this.handleDragEnd);\n this.crosshairCursorDisposable?.dispose();\n this.waitCursorDisposable?.dispose();\n\n this.element = undefined;\n this.api = undefined;\n this.enabled = true;\n }\n\n public disable(): void {\n this.enabled = false;\n }\n\n public enable(): void {\n this.enabled = true;\n }\n\n private handleDragBegin(event: PointerEvent): void {\n if (\n this.enabled &&\n this.isPrimaryMouseButtonClick(event) &&\n !this.isInteracting\n ) {\n this.elementBounds = this.element?.getBoundingClientRect();\n this.isInteracting = true;\n this.controller.setStartPoint(\n getMouseClientPosition(event, this.elementBounds),\n );\n\n window.addEventListener('pointermove', this.handleDrag);\n window.addEventListener('pointerup', this.handleDragEnd);\n }\n }\n\n private handleDrag(event: PointerEvent): void {\n if (this.enabled) {\n this.controller.setEndPoint(\n getMouseClientPosition(event, this.elementBounds),\n );\n }\n }\n\n private async handleDragEnd(): Promise<void> {\n this.isInteracting = false;\n\n window.removeEventListener('pointermove', this.handleDrag);\n window.removeEventListener('pointerup', this.handleDragEnd);\n\n this.crosshairCursorDisposable?.dispose();\n if (this.enabled) {\n this.addWaitCursor();\n try {\n await this.controller.execute();\n } finally {\n this.waitCursorDisposable?.dispose();\n this.addCrosshairCursor();\n }\n }\n }\n\n private isPrimaryMouseButtonClick(event: PointerEvent): boolean {\n return event.buttons === 1;\n }\n\n private addCrosshairCursor(): void {\n this.crosshairCursorDisposable?.dispose();\n this.crosshairCursorDisposable = this.api?.addCursor(boxQueryCursor);\n }\n\n private addWaitCursor(): void {\n this.waitCursorDisposable?.dispose();\n this.waitCursorDisposable = this.api?.addCursor('wait');\n }\n}\n",":host {\n /**\n * @prop --viewer-box-query-outline-exclusive-color: A CSS color that\n * specifies the color of box for an exclusive query. This will\n * be used in combination with `--viewer-box-query-outline-fill-opacity`\n * for the background color of the box. Defaults to `#0099cc`.\n */\n --viewer-box-query-outline-exclusive-color: #0099cc;\n /**\n * @prop --viewer-box-query-outline-exclusive-border-style: A border\n * style that specifies the type of border to display around the box for an\n * exclusive query. Defaults to `solid`.\n */\n --viewer-box-query-outline-exclusive-border-style: solid;\n /**\n * @prop --viewer-box-query-outline-inclusive-color: A CSS color that\n * specifies the color of box for an inclusive query. This will\n * be used in combination with `--viewer-box-query-outline-fill-opacity`\n * for the background color of the box. Defaults to `#00cc00`.\n */\n --viewer-box-query-outline-inclusive-color: #00cc00;\n /**\n * @prop --viewer-box-query-outline-inclusive-border-style: A border\n * style that specifies the type of border to display around the box for an\n * inclusive query. Defaults to `dashed`.\n */\n --viewer-box-query-outline-inclusive-border-style: dashed;\n /**\n * @prop --viewer-box-query-outline-border-radius: A CSS length that\n * specifies the border radius of the drawn box. Defaults to `0.25rem`.\n */\n --viewer-box-query-outline-border-radius: 0.25rem;\n /**\n * @prop--viewer-box-query-outline-fill-opacity: A number between \n * 0 and 1 that specifies the opacity of the background of the drawn box.\n * Defaults to `0.25`.\n */\n --viewer-box-query-outline-fill-opacity: 0.25;\n}\n\n.bounds {\n position: absolute;\n}\n\n.outline {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: var(--viewer-box-query-outline-border-radius);\n}\n\n:host([exclusive='true']) .outline {\n border: 3px var(--viewer-box-query-outline-exclusive-border-style)\n var(--viewer-box-query-outline-exclusive-color);\n}\n\n:host([inclusive='true']) .outline {\n border: 3px var(--viewer-box-query-outline-inclusive-border-style)\n var(--viewer-box-query-outline-inclusive-color);\n}\n\n.fill {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: var(--viewer-box-query-outline-fill-opacity);\n border-radius: var(--viewer-box-query-outline-border-radius);\n}\n\n:host([exclusive='true']) .fill {\n background-color: var(--viewer-box-query-outline-exclusive-color);\n}\n\n:host([inclusive='true']) .fill {\n background-color: var(--viewer-box-query-outline-inclusive-color);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { VolumeIntersectionQueryController } from '../../lib/volume-intersection/controller';\nimport { VolumeIntersectionQueryInteractionHandler } from '../../lib/volume-intersection/interactions';\nimport {\n QueryType,\n VolumeIntersectionQueryDetails,\n VolumeIntersectionQueryModel,\n} from '../../lib/volume-intersection/model';\nimport {\n VolumeIntersectionQueryMode,\n VolumeIntersectionQueryType,\n} from './types';\n\n/**\n * The `ViewerBoxQueryTool` allows for the drawing of a \"box\" on screen to represent\n * a query for items in a specific area of the viewer. This tool then allows for an\n * operation to be performed on the items contained (exclusive) by the box or both\n * contained by and intersecting with (inclusive) the box.\n */\n@Component({\n tag: 'vertex-viewer-box-query-tool',\n styleUrl: 'viewer-box-query-tool.css',\n shadow: true,\n})\nexport class ViewerBoxQueryTool {\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The controller that is responsible for performing operations using the\n * volume intersection query defined by the drawn box and updating the model.\n */\n @Prop({ mutable: true })\n public controller?: VolumeIntersectionQueryController;\n\n /**\n * The model that contains the points representing the corners of the box\n * displayed on screen, the type of the query to be performed, and methods\n * for setting these values.\n */\n @Prop({ mutable: true })\n public model?: VolumeIntersectionQueryModel;\n\n /**\n * The default operation to perform when a drag has completed and the intersection\n * query will be run. Defaults to `clearAndSelect`, and can be changed to `select` or `deselect`.\n *\n * `clearAndSelect` will clear all existing selection, and select the results of the query.\n * `select` will maintain existing selection, and select the results of the query.\n * `deselect` will maintain existing selection, and deselect the results of the query.\n *\n * The operation behavior for this intersection query tool can also be changed by\n * providing a custom implementation of the `VolumeIntersectionQueryController`, or\n * by using the `setOperationTransform` method of the default controller.\n */\n @Prop()\n public operationType: VolumeIntersectionQueryType = 'clearAndSelect';\n\n /**\n * An optional value to specify a singular mode of intersection query. This value\n * defaults to `undefined`, which will indicate that both `exclusive` and `inclusive`\n * queries should be made, with `inclusive` being represented by a left to right\n * drag behavior and `exclusive` being represented by a right to left drag.\n *\n * Setting this value to `inclusive` will cause dragging left to right and left to right\n * to result in an `inclusive` query, and the box will only be styled for `inclusive` queries.\n *\n * Setting this value to `exclusive` will cause dragging left to right and left to right\n * to result in an `exclusive` query, and the box will only be styled for `exclusive` queries.\n */\n @Prop()\n public mode?: VolumeIntersectionQueryMode;\n\n @State()\n private details?: VolumeIntersectionQueryDetails;\n\n /**\n * Event emitted when the `VolumeIntersectionQueryController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<VolumeIntersectionQueryController>;\n\n @Element()\n private hostEl!: HTMLVertexViewerBoxQueryToolElement;\n\n private interactionHandler?: VolumeIntersectionQueryInteractionHandler;\n private interactionHandlerDisposable?: Disposable;\n\n private operationStartedDisposable?: Disposable;\n private operationCompleteDisposable?: Disposable;\n private screenBoundsChangedDisposable?: Disposable;\n\n public constructor() {\n this.handleScreenBoundsChanged = this.handleScreenBoundsChanged.bind(this);\n this.handleExecuteStarted = this.handleExecuteStarted.bind(this);\n this.handleExecuteComplete = this.handleExecuteComplete.bind(this);\n }\n\n public componentWillLoad(): void {\n this.model = this.model ?? new VolumeIntersectionQueryModel(this.mode);\n\n this.screenBoundsChangedDisposable = this.model.onScreenBoundsChanged(\n this.handleScreenBoundsChanged,\n );\n\n this.handleViewerChanged(this.viewer);\n this.handleControllerChange(this.controller);\n this.handleDefaultOperationChange(this.operationType);\n }\n\n public disconnectedCallback(): void {\n this.model?.reset();\n this.screenBoundsChangedDisposable?.dispose();\n this.operationStartedDisposable?.dispose();\n this.operationCompleteDisposable?.dispose();\n this.deregisterInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(newViewer?: HTMLVertexViewerElement): void {\n this.deregisterInteractionHandler();\n\n if (this.model != null && newViewer != null) {\n this.controller = new VolumeIntersectionQueryController(\n this.model,\n newViewer,\n );\n this.handleDefaultOperationChange(this.operationType);\n this.registerInteractionHandler(this.controller, newViewer);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('operationType')\n protected handleDefaultOperationChange(\n updatedOperationType: VolumeIntersectionQueryType,\n ): void {\n switch (updatedOperationType) {\n case 'clearAndSelect':\n this.setDefaultClearAndSelectOperation();\n break;\n case 'select':\n this.setDefaultSelectOperation();\n break;\n case 'deselect':\n this.setDefaultDeselectOperation();\n break;\n }\n }\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected handleModeChange(updatedMode?: VolumeIntersectionQueryMode): void {\n this.model?.setMode(updatedMode);\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChange(\n controller?: VolumeIntersectionQueryController,\n ): void {\n this.operationStartedDisposable?.dispose();\n this.operationCompleteDisposable?.dispose();\n\n this.operationStartedDisposable = controller?.onExecuteStarted(\n this.handleExecuteStarted,\n );\n this.operationStartedDisposable = controller?.onExecuteComplete(\n this.handleExecuteComplete,\n );\n\n this.controllerChanged.emit(this.controller);\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <vertex-viewer-layer>\n {this.details != null && (\n <div\n class=\"bounds\"\n style={{\n left: `${this.details.screenBounds.x}px`,\n top: `${this.details.screenBounds.y}px`,\n width: `${this.details.screenBounds.width}px`,\n height: `${this.details.screenBounds.height}px`,\n }}\n >\n <slot name=\"bounds\">\n <div class=\"outline\"></div>\n <div class=\"fill\"></div>\n </slot>\n </div>\n )}\n </vertex-viewer-layer>\n </Host>\n );\n }\n\n private handleScreenBoundsChanged(\n details?: VolumeIntersectionQueryDetails,\n ): void {\n this.details = details;\n\n this.updateTypeAttribute(details?.type);\n }\n\n private handleExecuteStarted(): void {\n this.interactionHandler?.disable();\n }\n\n private handleExecuteComplete(): void {\n this.interactionHandler?.enable();\n }\n\n private async registerInteractionHandler(\n controller: VolumeIntersectionQueryController,\n viewer: HTMLVertexViewerElement,\n ): Promise<void> {\n this.interactionHandler = new VolumeIntersectionQueryInteractionHandler(\n controller,\n );\n this.interactionHandlerDisposable = await viewer.registerInteractionHandler(\n this.interactionHandler,\n );\n }\n\n private deregisterInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private updateTypeAttribute(type?: QueryType): void {\n this.hostEl.setAttribute('inclusive', `${type === 'inclusive'}`);\n this.hostEl.setAttribute('exclusive', `${type === 'exclusive'}`);\n }\n\n private setDefaultClearAndSelectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.select());\n this.controller?.setAdditionalTransforms([\n (op) => op.items.where((q) => q.withSelected()).deselect(),\n ]);\n }\n\n private setDefaultSelectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.select());\n this.controller?.setAdditionalTransforms([]);\n }\n\n private setDefaultDeselectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.deselect());\n this.controller?.setAdditionalTransforms([]);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{h as t,r as e,c as i,H as s,a as n}from"./p-CCVkga9Q.js";import{v as r,a,p as o,l as h}from"./p-CZZALKHT.js";import{m as l}from"./p-DxMDDbmh.js";import{a as c,g as d}from"./p-CIBBr-p1.js";import"./p-C-huOg09.js";import"./p-BNuMPeJ8.js";import"./p-ux1ckSDN.js";import"./p-5kcpg4MZ.js";import{o as u,D as m}from"./p-Cr2EnhS-.js";import{M as v}from"./p-BY3lpCm6.js";import{M as p}from"./p-CxzyM08j.js";import{m as w}from"./p-mpsCUvSn.js";import"./p-BAhfr1Nx.js";import{V as f}from"./p-EG7pMA2M.js";import{E as g,m as b}from"./p-CDM7zNn0.js";import{g as y}from"./p-BDy3SLKk.js";import{c as C}from"./p-Dw4-tG-V.js";import"./p-CG9AChtV.js";const P=16;const E=10;function M(t){return t.getBoundingClientRect()}class x{constructor(t,e,i,s){this.stencil=t;this.depthBuffer=e;this.viewport=i;this.camera=s}hitTest(t){const e=this.viewport.transformPointToFrame(t,this.depthBuffer);if(this.stencil!=null){const i=this.viewport.transformPointToFrame(t,this.stencil);return this.stencil.hitTest(i)||this.depthBuffer.hitTest(e)}else{return this.depthBuffer.hitTest(e)}}snapToNearestPixel(t,e){if(this.stencil!=null){const i=this.viewport.transformPointToFrame(t,this.stencil);const s=this.stencil.snapToNearestPixel(i,e);return this.viewport.transformPointToViewport(s,this.stencil)}else{return t}}transformPointToWorld(t,{ignoreHitTest:e=false}={}){const i=this.pickDepthBuffer(t);if(i!=null){return this.viewport.transformPointToWorldSpace(t,i)}else if(e){return this.viewport.transformPointToWorldSpace(t,this.depthBuffer)}}pickDepthBuffer(t){if(this.stencil!=null){const e=this.viewport.transformPointToFrame(t,this.stencil);if(this.stencil.hitTest(e)){return this.stencil.depthBuffer}}const e=this.viewport.transformPointToFrame(t,this.depthBuffer);return this.depthBuffer.hitTest(e)?this.depthBuffer:undefined}}class D{constructor(t){this.model=t}newMeasurement(t,e){const i=e.hitTester().transformPointToWorld(t);return i!=null?new j(t,i,this.model):undefined}editMeasurement(t){const e=this.model.getMeasurement();if(e==null){throw new Error("Cannot edit measurement. Measurement is empty.")}return t==="start"?new I(e,this.model):new S(e,this.model)}clearIndicator(){this.model.setIndicator(undefined)}moveIndicator(t,e){const i=e.hitTester().transformPointToWorld(t);this.model.setIndicator(i);return i!=null}}class k{constructor(){this.measurementChanged=new g;this.indicatorChanged=new g}static empty(){return new k}getMeasurement(){return this.measurement}setMeasurement(t){if(this.measurement!==t){this.measurement=t;this.measurementChanged.emit(t)}}setMeasurementFromValues(t,e,i){if(t!=null&&e!=null){const s=i?B(t,e):T(t,e);this.setMeasurement(s)}else{this.setMeasurement(undefined)}}onMeasurementChanged(t){return this.measurementChanged.on(t)}getIndicator(){return this.indicator}setIndicator(t){if(this.indicator!==t){this.indicator=t;this.indicatorChanged.emit(t)}}onIndicatorChanged(t){return this.indicatorChanged.on(t)}}class j{constructor(t,e,i){this.pt=t;this.world=e;this.model=i;this.hitWorldValid=true;this.preventUpdate=false}fetchStartIfMissing(t){if(this.pendingStart==null){this.pendingStart=this.fetchStart(t)}}async fetchStart(t){const e=await t.raycaster();const i=await L(e,this.pt);if(i==null){const e=t.hitTester().transformPointToWorld(this.pt);this.hitWorld=e;this.hitWorldValid=false}else{this.hitWorld=i;this.hitWorldValid=true}}update(t,e){var i;if(!this.preventUpdate){this.fetchStartIfMissing(e);const s=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});const n=e.hitTester().hitTest(t);const r=(i=this.hitWorld)!==null&&i!==void 0?i:this.world;if(s==null){throw new Error("Cannot update new measurement interaction. End point is empty.")}else if(!this.hitWorldValid||!n){this.model.setIndicator(s);this.setMeasurement(T(r,s))}else{this.model.setIndicator(s);this.setMeasurement(B(r,s))}}}async finish(t,e){var i;this.preventUpdate=true;this.fetchStartIfMissing(e);await this.pendingStart;this.model.setIndicator(undefined);const s=await e.raycaster();const n=await L(s,t);const r=(i=this.hitWorld)!==null&&i!==void 0?i:this.world;this.preventUpdate=false;if(n==null){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});if(i==null){throw new Error("Cannot complete new measurement interaction. End point is empty.")}return this.setMeasurement(T(r,i))}else if(!this.hitWorldValid){return this.setMeasurement(T(r,n))}else{return this.setMeasurement(B(r,n))}}setMeasurement(t){this.model.setMeasurement(t);return t}}class A{constructor(t,e){this.measurement=t;this.model=e}update(t,e){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});const s=e.hitTester().hitTest(t);if(i==null){throw new Error("Cannot update new measurement interaction. End point is empty.")}else if(!s){this.model.setIndicator(i);this.setMeasurement(this.getInvalidMeasurement(i))}else{this.model.setIndicator(i);this.setMeasurement(this.getValidMeasurement(i))}}async finish(t,e){const i=await e.raycaster();const s=await L(i,t);this.model.setIndicator(undefined);if(s==null){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});if(i==null){throw new Error("Cannot complete edit measurement interaction. End point is empty.")}return this.setMeasurement(this.getInvalidMeasurement(i))}else{return this.setMeasurement(this.getValidMeasurement(s))}}setMeasurement(t){this.model.setMeasurement(t);return t}}class I extends A{constructor(t,e){super(t,e)}getInvalidMeasurement(t){return T(t,this.measurement.end)}getValidMeasurement(t){return B(t,this.measurement.end)}}class S extends A{constructor(t,e){super(t,e)}getInvalidMeasurement(t){return T(this.measurement.start,t)}getValidMeasurement(t){return B(this.measurement.start,t)}}async function L(t,e){var i;const s=await t.hitItems(e);const[n]=(i=s===null||s===void 0?void 0:s.hits)!==null&&i!==void 0?i:[];if((n===null||n===void 0?void 0:n.hitPoint)!=null){const t=u(n.hitPoint);if(b.isInvalid(t)){throw new Error(`Invalid hit response [${t.errors.join(",")}]`)}return t}else return undefined}function B(t,e){return{start:t,end:e,distance:r.distance(t,e),valid:true}}function T(t,e){return{start:t,end:e,valid:false}}const V=({startPt:e,endPt:i,centerPt:s,indicatorPt:n,distance:r,anchorLabelOffset:h,lineCapLength:l,linePointerEvents:d,hideStartAnchor:u,hideEndAnchor:m,onStartAnchorPointerDown:v,onEndAnchorPointerDown:p})=>{const w=e!=null&&i!=null?a.fromPoints(e,i):undefined;const f=w!=null&&e!=null&&h!=null?o.add(e,o.polar(-h,w)):undefined;const g=w!=null&&i!=null&&h!=null?o.add(i,o.polar(h,w)):undefined;return t("div",null,e!=null&&i!=null&&t("vertex-viewer-measurement-line",{class:C("line",{"hide-start-line-cap":u,"hide-end-line-cap":m}),start:e,end:i,capLength:l,pointerEvents:d}),!u&&e!=null&&t("div",{id:"start-anchor",class:"anchor anchor-start",style:{transform:c(e)},onPointerDown:v},t("slot",{name:"start-anchor"},t("div",{class:"anchor-placeholder"}))),!u&&f&&t("div",{class:"anchor-label anchor-label-start",style:{transform:c(f)}},t("slot",{name:"start-label"})),!m&&i!=null&&t("div",{id:"end-anchor",class:"anchor anchor-end",style:{transform:c(i)},onPointerDown:p},t("slot",{name:"end-anchor"},t("div",{class:"anchor-placeholder"}))),!m&&g&&t("div",{class:"anchor-label anchor-label-end",style:{transform:c(g)}},t("slot",{name:"end-label"})),s!=null&&t("div",{id:"label",class:"distance-label",style:{transform:c(s)}},r),n!=null&&t("div",{class:"indicator",style:{transform:c(n)}},t("slot",{name:"indicator"},t("div",{class:"indicator-placeholder"}))))};const H=()=>`:host{--viewer-measurement-distance-accent-color:var(--neutral-900);--viewer-measurement-distance-contrast-color:var(--white);--viewer-measurement-distance-invalid-accent-color:var(--red-600);--viewer-measurement-distance-invalid-contrast-color:var(--white);--viewer-measurement-distance-line-stroke-width:1.25px;--viewer-measurement-distance-line-fill-width:2px;--viewer-measurement-distance-distance-border:1px solid var(--viewer-measurement-distance-accent-color);--viewer-measurement-distance-distance-border-radius:0.25rem;--viewer-measurement-distance-distance-padding:0.375rem 0.5rem;color:var(--viewer-measurement-distance-accent-color);font-size:0.75rem;position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none}:host([invalid]:not([invalid='false'])){--viewer-measurement-distance-accent-color:var( --viewer-measurement-distance-invalid-accent-color ) !important;--viewer-measurement-distance-contrast-color:var( --viewer-measurement-distance-invalid-contrast-color ) !important}.line{--viewer-measurement-line-stroke:var( --viewer-measurement-distance-contrast-color );--viewer-measurement-line-stroke-opacity:0.75;--viewer-measurement-line-stroke-width:var( --viewer-measurement-distance-line-stroke-width );--viewer-measurement-line-fill:var( --viewer-measurement-distance-accent-color );--viewer-measurement-line-fill-width:var( --viewer-measurement-distance-line-fill-width );position:absolute;width:100%;height:100%}.anchor{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;pointer-events:auto}:host([interacting-anchor='start']) .anchor-start,:host([interacting-anchor='start']) .anchor-label-start{visibility:hidden}.hide-start-line-cap,:host([interacting-anchor='start']) .line{--viewer-measurement-line-start-cap-visibility:hidden}:host([interacting-anchor='end']) .anchor-end,:host([interacting-anchor='end']) .anchor-label-end{visibility:hidden}.hide-end-line-cap,:host([interacting-anchor='end']) .line{--viewer-measurement-line-end-cap-visibility:hidden}.anchor-label{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;pointer-events:auto}:host(:not([mode=''])){cursor:inherit}:host(:not([mode=''])) .anchor{cursor:move}:host([mode='']) .anchor{visibility:hidden}.anchor-placeholder{background:var(--viewer-measurement-distance-contrast-color);width:12px;height:12px;border-radius:50%;box-sizing:border-box}:host(:not([mode=''])) .anchor-placeholder{border:2px solid var(--viewer-measurement-distance-accent-color);background:var(--viewer-measurement-distance-contrast-color)}:host([mode='']) .distance-label{color:var(--viewer-measurement-distance-contrast-color);background:var(--viewer-measurement-distance-accent-color)}.distance-label{position:absolute;background:var(--viewer-measurement-distance-contrast-color);border:var(--viewer-measurement-distance-distance-border);border-radius:var(--viewer-measurement-distance-distance-border-radius);padding:var(--viewer-measurement-distance-distance-padding);pointer-events:auto}.indicator{position:absolute}.indicator-placeholder{background:var(--viewer-measurement-distance-accent-color);border:1px solid var(--viewer-measurement-distance-contrast-color);width:6px;height:6px;border-radius:50%;box-sizing:border-box}`;const O=3;const z=class{constructor(t){e(this,t);this.editBegin=i(this,"editBegin");this.editEnd=i(this,"editEnd");this.showAxisReferenceLines=false;this.snapDistance=P;this.units="millimeters";this.fractionalDigits=2;this.anchorLabelOffset=20;this.lineCapLength=E;this.mode="";this.interactingAnchor="none";this.invalid=false;this.measurementModel=new v;this.viewport=new f(0,0);this.interactionCount=0;this.invalidateStateCounter=0;this.stateMap={};this.measurementUnits=new m(this.units);this.model=k.empty();this.controller=new D(this.model);this.overlays=new p;this.isUserInteractingWithModel=false;this.handleFrameDrawn=()=>{this.invalidateState()};this.clearIndicator=()=>{this.controller.clearIndicator()};this.updateStartAnchor=async t=>{await this.getStencilBuffer();if(this.interactionCount===0){const e=d(t,this.elementBounds);const i=this.snapPoint(e,t);await this.updateIndicator(i)}};this.newMeasurement=t=>{if(this.interactionCount===0&&t.button===0){const e=t=>{const e=()=>{window.removeEventListener("pointerup",i);window.removeEventListener("pointermove",s)};const i=async()=>{e();t()};const s=t=>{if(t.buttons>0){e()}};window.addEventListener("pointermove",s);window.addEventListener("pointerup",i)};const i=t=>{let e=o.create(0,0);const i=i=>{const s=o.distance(e,d(i,this.elementBounds));if(s>=O){t()}};const s=()=>{window.removeEventListener("pointermove",i);window.removeEventListener("pointerup",n)};const n=()=>s();const r=t=>{e=d(t,this.elementBounds);window.addEventListener("pointermove",i);window.addEventListener("pointerup",n)};window.addEventListener("pointerdown",r);return{dispose:()=>window.removeEventListener("pointerdown",r)}};const s=()=>{const t=i((()=>{var t;this.isUserInteractingWithModel=true;(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose()}));const e=()=>{window.removeEventListener("pointermove",s);window.removeEventListener("pointerup",n);t.dispose()};const s=this.createInteractionMoveHandler();const n=async t=>{var i;if(t.button===0){if(this.isUserInteractingWithModel){this.isUserInteractingWithModel=false}else{const s=this.getHitProvider();if(s!=null){const n=d(t,this.elementBounds);const r=this.snapPoint(n,t);await((i=this.interaction)===null||i===void 0?void 0:i.finish(r,s));e();this.updateMeasurementPropsFromModel();this.endEditing()}}}};this.beginEditing("replace","end");this.newInteractionHandler={dispose:e};window.addEventListener("pointermove",s);window.addEventListener("pointerup",n)};const n=this.getHitProvider();if(n!=null){const i=d(t,this.elementBounds);const r=this.snapPoint(i,t);this.interaction=this.controller.newMeasurement(r,n);if(this.interaction!=null){e(s)}}}}}async computeElementMetrics(){var t,e,i;const s=(t=this.hostEl.shadowRoot)===null||t===void 0?void 0:t.getElementById("start-anchor");const n=(e=this.hostEl.shadowRoot)===null||e===void 0?void 0:e.getElementById("end-anchor");const r=(i=this.hostEl.shadowRoot)===null||i===void 0?void 0:i.getElementById("label");if(s!=null&&n!=null&&r!=null){return{startAnchor:s.getBoundingClientRect(),endAnchor:n.getBoundingClientRect(),label:r.getBoundingClientRect()}}else{return undefined}}connectedCallback(){this.setDepthBuffers()}disconnectedCallback(){var t,e;(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose();(e=this.newInteractionHandler)===null||e===void 0?void 0:e.dispose();this.resetDepthBuffers()}async componentWillLoad(){this.updatePropsFromJson();this.model.setMeasurementFromValues(this.start,this.end,!this.invalid);await this.getStencilBuffer();this.updateViewport();this.setDepthBuffers();await this.handleViewerChanged(this.viewer);await this.handleModeChanged();await this.computePropsAndState();this.model.onIndicatorChanged((t=>{this.indicatorPt=t}))}componentDidLoad(){const t=new ResizeObserver((()=>this.updateViewport()));t.observe(this.hostEl)}async componentWillUpdate(){await this.computePropsAndState()}render(){return t(s,{key:"58113224139c37a54bf9329ed27e6a8983d5cccd"},this.showAxisReferenceLines&&t("vertex-viewer-measurement-overlays",{key:"d2166c4a965761f472f5b3323844d82980baa29f",measurementOverlays:this.overlays,viewer:this.viewer}),this.renderMeasurement())}renderMeasurement(){const e=this.computeElementPositions();const{startPt:i,endPt:s,labelPt:n,indicatorPt:r,hideStart:a,hideEnd:o}=e;const h=this.formatDistance(this.distance);if(this.mode==="edit"||this.mode==="replace"){return t(V,{startPt:i,endPt:s,centerPt:n,indicatorPt:r,distance:h,anchorLabelOffset:this.anchorLabelOffset,lineCapLength:this.lineCapLength,hideStartAnchor:a,hideEndAnchor:o,onStartAnchorPointerDown:this.handleEditAnchor("start"),onEndAnchorPointerDown:this.handleEditAnchor("end")})}else{return t(V,{startPt:i,endPt:s,centerPt:n,indicatorPt:this.indicatorPt,distance:h,hideStartAnchor:a,hideEndAnchor:o,anchorLabelOffset:this.anchorLabelOffset,lineCapLength:this.lineCapLength,linePointerEvents:"painted"})}}async handleViewerChanged(t,e){if(e!=null){e.removeEventListener("frameDrawn",this.handleFrameDrawn);await this.removeInteractionListeners(e)}if(t!=null){t.addEventListener("frameDrawn",this.handleFrameDrawn);await this.addInteractionListeners(t)}}handleUnitsChanged(){this.measurementUnits=new m(this.units)}handleCameraChanged(){this.updateCamera()}async handleModeChanged(){var t;if(this.mode===""){(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose()}if(this.viewer!=null){await this.removeInteractionListeners(this.viewer);await this.addInteractionListeners(this.viewer)}}handleStartChanged(){this.updateInteractionModel()}handleEndChanged(){this.updateInteractionModel()}handleInvalidChanged(){this.updateInteractionModel()}async computePropsAndState(){this.updateCamera();await this.updateDepthBuffer();this.updateMeasurementPropsFromModel();this.updateOverlays()}updateOverlays(){var t;(t=this.overlay)===null||t===void 0?void 0:t.dispose();if(this.showAxisReferenceLines&&this.interactionCount===0&&!this.invalid&&this.start!=null&&this.end!=null){this.overlay=this.overlays.addDistanceVector(this.start,this.end)}}async setCursor(t){var e,i;(e=this.stateMap.hoverCursor)===null||e===void 0?void 0:e.dispose();if(!this.isUserInteractingWithModel){this.stateMap.hoverCursor=await((i=this.viewer)===null||i===void 0?void 0:i.addCursor(t))}}computeElementPositions(){if(this.mode==="replace"){return this.computeReplaceElementPositions()}else{return this.computeEditOrViewElementPositions()}}computeEditOrViewElementPositions(){const t=this.model.getMeasurement();if(this.internalCamera!=null&&t!=null){return this.computeLineElementPositions(h.create(t))}else{return{}}}computeReplaceElementPositions(){if(this.internalCamera!=null){const t=this.model.getMeasurement();const e=t!=null?this.computeLineElementPositions(h.create(t)):{};const i=this.indicatorPt!=null?{indicatorPt:this.viewport.transformWorldToViewport(this.indicatorPt,this.internalCamera.projectionViewMatrix)}:{};return{...e,...i}}else{return{}}}computeLineElementPositions(t){if(this.internalCamera!=null){return y(t,this.interactingAnchor,{viewport:this.viewport,camera:this.internalCamera})}else{return{}}}updateCamera(){var t,e;this.internalCamera=this.camera||((e=(t=this.viewer)===null||t===void 0?void 0:t.frame)===null||e===void 0?void 0:e.scene.camera)}async updateDepthBuffer(){var t,e;this.stateMap.depthBuffer=await((e=(t=this.viewer)===null||t===void 0?void 0:t.frame)===null||e===void 0?void 0:e.depthBuffer())}updateViewport(){const t=M(this.hostEl);this.viewport=new f(t.width,t.height);this.elementBounds=t}updatePropsFromJson(){var t,e;this.start=N((t=this.startJson)!==null&&t!==void 0?t:this.start);this.end=N((e=this.endJson)!==null&&e!==void 0?e:this.end)}updateInteractionModel(){this.model.setMeasurementFromValues(this.start,this.end,!this.invalid)}invalidateState(){this.invalidateStateCounter=this.invalidateStateCounter+1}async addInteractionListeners(t){const e=await t.getInteractionTarget_DEPRECATED();if(this.mode==="replace"){e.addEventListener("pointermove",this.updateStartAnchor);e.addEventListener("pointerdown",this.newMeasurement);e.addEventListener("pointerleave",this.clearIndicator)}}async removeInteractionListeners(t){const e=await t.getInteractionTarget_DEPRECATED();e.removeEventListener("pointermove",this.updateStartAnchor);e.removeEventListener("pointerdown",this.newMeasurement);e.removeEventListener("pointerleave",this.clearIndicator)}handleEditAnchor(t){if(this.mode==="edit"||this.mode==="replace"){const e=this.createInteractionMoveHandler();const i=async t=>{var s;const n=this.getHitProvider();if(n!=null){window.removeEventListener("pointermove",e);window.removeEventListener("pointerup",i);const r=d(t,this.elementBounds);const a=this.snapPoint(r,t);await((s=this.interaction)===null||s===void 0?void 0:s.finish(a,n));this.updateMeasurementPropsFromModel();this.endEditing()}};return async s=>{await this.getStencilBuffer();if(s.button===0){this.beginEditing("edit",t);this.interaction=this.controller.editMeasurement(t);window.addEventListener("pointermove",e);window.addEventListener("pointerup",i)}}}}createInteractionMoveHandler(){return async t=>{var e;const i=this.getHitProvider();if(this.elementBounds!=null&&i!=null){t.preventDefault();await this.getStencilBuffer();const s=d(t,this.elementBounds);const n=this.snapPoint(s,t);(e=this.interaction)===null||e===void 0?void 0:e.update(n,i);this.updateMeasurementPropsFromModel()}}}async getStencilBuffer(){var t;const e=await((t=this.viewer)===null||t===void 0?void 0:t.stencilBuffer.latestAfterInteraction());this.stateMap.stencil=e}snapPoint(t,e){const i=this.getHitProvider();if(i!=null&&!e.shiftKey){const e=Math.max(0,this.snapDistance);return i.hitTester().snapToNearestPixel(t,e)}return t}formatDistance(t){const e=t!=null?this.measurementUnits.convertWorldValueToReal(t):undefined;if(this.labelFormatter!=null){return this.labelFormatter(e)}else{const t=this.measurementUnits.unit.abbreviatedName;return e==null?"---":`~${e.toFixed(this.fractionalDigits)} ${t}`}}beginEditing(t,e){if(this.interactionCount===0){this.interactingAnchor=e;this.editBegin.emit({type:t,anchor:e})}this.interactionCount=this.interactionCount+1}endEditing(){if(this.interactionCount===1){const t=this.model.getMeasurement();this.interactingAnchor="none";this.updateMeasurementModel();if(t!=null){this.editEnd.emit(t)}}this.interactionCount=this.interactionCount-1}updateMeasurementModel(){this.measurementModel.clearOutcome();if(!this.invalid&&this.start!=null&&this.end!=null){this.measurementModel.setOutcome({isApproximate:true,results:[w(this.start,this.end)]})}}getHitProvider(){if(this.hitProvider==null){const t=this.getHitTester();const e=this.viewer;if(e!=null&&t!=null){return{hitTester:()=>t,raycaster:async()=>(await e.scene()).raycaster()}}}else return this.hitProvider}getHitTester(){const{stencil:t,depthBuffer:e}=this.stateMap;if(e!=null){return new x(t,e,this.viewport,this.internalCamera)}}updateMeasurementPropsFromModel(){const t=this.model.getMeasurement();this.start=t===null||t===void 0?void 0:t.start;this.end=t===null||t===void 0?void 0:t.end;this.distance=t===null||t===void 0?void 0:t.distance;this.invalid=t!=null&&!t.valid}async updateIndicator(t){var e;const i=this.getHitProvider();const s=i==null||!this.controller.moveIndicator(t,i);if(s){(e=this.stateMap.hoverCursor)===null||e===void 0?void 0:e.dispose()}else{await this.setCursor(l)}}setDepthBuffers(){if(this.mode!=null&&this.viewer!=null&&this.viewer.depthBuffers==null){this.stateMap.shouldClearDepthBuffers=true;this.viewer.depthBuffers="final"}}resetDepthBuffers(){if(this.stateMap.shouldClearDepthBuffers&&this.viewer!=null){this.viewer.depthBuffers=undefined;this.stateMap.shouldClearDepthBuffers=undefined}}get hostEl(){return n(this)}static get watchers(){return{viewer:[{handleViewerChanged:0}],units:[{handleUnitsChanged:1}],camera:[{handleCameraChanged:0}],mode:[{handleModeChanged:0}],start:[{handleStartChanged:0}],end:[{handleEndChanged:0}],invalid:[{handleInvalidChanged:0}]}}};function N(t){return typeof t==="string"?r.fromJson(t):t}z.style=H();export{z as vertex_viewer_measurement_distance};
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{h as t,r as e,c as i,H as s,a as n}from"./p-CCVkga9Q.js";import{v as r,a,p as o,l as h}from"./p-2UsvOTHJ.js";import{m as l}from"./p-DxMDDbmh.js";import{a as c,g as d}from"./p-D0aTA_2m.js";import"./p-D2IEHEGM.js";import"./p-BNuMPeJ8.js";import"./p-ux1ckSDN.js";import"./p-5kcpg4MZ.js";import{o as u,D as m}from"./p-BhKTTmpL.js";import{M as v}from"./p-BY3lpCm6.js";import{M as p}from"./p-DyL2wWm6.js";import{m as w}from"./p-_qi2VkC2.js";import"./p-BAhfr1Nx.js";import{V as f}from"./p-CeZe0Qql.js";import{E as g,m as b}from"./p-CDM7zNn0.js";import{g as y}from"./p-CEDqc5sS.js";import{c as C}from"./p-Dw4-tG-V.js";import"./p-CG9AChtV.js";const P=16;const E=10;function M(t){return t.getBoundingClientRect()}class D{constructor(t,e,i,s){this.stencil=t;this.depthBuffer=e;this.viewport=i;this.camera=s}hitTest(t){const e=this.viewport.transformPointToFrame(t,this.depthBuffer);if(this.stencil!=null){const i=this.viewport.transformPointToFrame(t,this.stencil);return this.stencil.hitTest(i)||this.depthBuffer.hitTest(e)}else{return this.depthBuffer.hitTest(e)}}snapToNearestPixel(t,e){if(this.stencil!=null){const i=this.viewport.transformPointToFrame(t,this.stencil);const s=this.stencil.snapToNearestPixel(i,e);return this.viewport.transformPointToViewport(s,this.stencil)}else{return t}}transformPointToWorld(t,{ignoreHitTest:e=false}={}){const i=this.pickDepthBuffer(t);if(i!=null){return this.viewport.transformPointToWorldSpace(t,i)}else if(e){return this.viewport.transformPointToWorldSpace(t,this.depthBuffer)}}pickDepthBuffer(t){if(this.stencil!=null){const e=this.viewport.transformPointToFrame(t,this.stencil);if(this.stencil.hitTest(e)){return this.stencil.depthBuffer}}const e=this.viewport.transformPointToFrame(t,this.depthBuffer);return this.depthBuffer.hitTest(e)?this.depthBuffer:undefined}}class x{constructor(t){this.model=t}newMeasurement(t,e){const i=e.hitTester().transformPointToWorld(t);return i!=null?new j(t,i,this.model):undefined}editMeasurement(t){const e=this.model.getMeasurement();if(e==null){throw new Error("Cannot edit measurement. Measurement is empty.")}return t==="start"?new I(e,this.model):new S(e,this.model)}clearIndicator(){this.model.setIndicator(undefined)}moveIndicator(t,e){const i=e.hitTester().transformPointToWorld(t);this.model.setIndicator(i);return i!=null}}class k{constructor(){this.measurementChanged=new g;this.indicatorChanged=new g}static empty(){return new k}getMeasurement(){return this.measurement}setMeasurement(t){if(this.measurement!==t){this.measurement=t;this.measurementChanged.emit(t)}}setMeasurementFromValues(t,e,i){if(t!=null&&e!=null){const s=i?T(t,e):V(t,e);this.setMeasurement(s)}else{this.setMeasurement(undefined)}}onMeasurementChanged(t){return this.measurementChanged.on(t)}getIndicator(){return this.indicator}setIndicator(t){if(this.indicator!==t){this.indicator=t;this.indicatorChanged.emit(t)}}onIndicatorChanged(t){return this.indicatorChanged.on(t)}}class j{constructor(t,e,i){this.pt=t;this.world=e;this.model=i;this.hitWorldValid=true;this.preventUpdate=false}fetchStartIfMissing(t){if(this.pendingStart==null){this.pendingStart=this.fetchStart(t)}}async fetchStart(t){const e=await t.raycaster();const i=await L(e,this.pt);if(i==null){const e=t.hitTester().transformPointToWorld(this.pt);this.hitWorld=e;this.hitWorldValid=false}else{this.hitWorld=i;this.hitWorldValid=true}}update(t,e){var i;if(!this.preventUpdate){this.fetchStartIfMissing(e);const s=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});const n=e.hitTester().hitTest(t);const r=(i=this.hitWorld)!==null&&i!==void 0?i:this.world;if(s==null){throw new Error("Cannot update new measurement interaction. End point is empty.")}else if(!this.hitWorldValid||!n){this.model.setIndicator(s);this.setMeasurement(V(r,s))}else{this.model.setIndicator(s);this.setMeasurement(T(r,s))}}}async finish(t,e){var i;this.preventUpdate=true;this.fetchStartIfMissing(e);await this.pendingStart;this.model.setIndicator(undefined);const s=await e.raycaster();const n=await L(s,t);const r=(i=this.hitWorld)!==null&&i!==void 0?i:this.world;this.preventUpdate=false;if(n==null){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});if(i==null){throw new Error("Cannot complete new measurement interaction. End point is empty.")}return this.setMeasurement(V(r,i))}else if(!this.hitWorldValid){return this.setMeasurement(V(r,n))}else{return this.setMeasurement(T(r,n))}}setMeasurement(t){this.model.setMeasurement(t);return t}}class A{constructor(t,e){this.measurement=t;this.model=e}update(t,e){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});const s=e.hitTester().hitTest(t);if(i==null){throw new Error("Cannot update new measurement interaction. End point is empty.")}else if(!s){this.model.setIndicator(i);this.setMeasurement(this.getInvalidMeasurement(i))}else{this.model.setIndicator(i);this.setMeasurement(this.getValidMeasurement(i))}}async finish(t,e){const i=await e.raycaster();const s=await L(i,t);this.model.setIndicator(undefined);if(s==null){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});if(i==null){throw new Error("Cannot complete edit measurement interaction. End point is empty.")}return this.setMeasurement(this.getInvalidMeasurement(i))}else{return this.setMeasurement(this.getValidMeasurement(s))}}setMeasurement(t){this.model.setMeasurement(t);return t}}class I extends A{constructor(t,e){super(t,e)}getInvalidMeasurement(t){return V(t,this.measurement.end)}getValidMeasurement(t){return T(t,this.measurement.end)}}class S extends A{constructor(t,e){super(t,e)}getInvalidMeasurement(t){return V(this.measurement.start,t)}getValidMeasurement(t){return T(this.measurement.start,t)}}async function L(t,e){var i;const s=await t.hitItems(e);const[n]=(i=s===null||s===void 0?void 0:s.hits)!==null&&i!==void 0?i:[];if((n===null||n===void 0?void 0:n.hitPoint)!=null){const t=u(n.hitPoint);if(b.isInvalid(t)){throw new Error(`Invalid hit response [${t.errors.join(",")}]`)}return t}else return undefined}function T(t,e){return{start:t,end:e,distance:r.distance(t,e),valid:true}}function V(t,e){return{start:t,end:e,valid:false}}const B=({startPt:e,endPt:i,centerPt:s,indicatorPt:n,distance:r,anchorLabelOffset:h,lineCapLength:l,linePointerEvents:d,hideStartAnchor:u,hideEndAnchor:m,onStartAnchorPointerDown:v,onEndAnchorPointerDown:p})=>{const w=e!=null&&i!=null?a.fromPoints(e,i):undefined;const f=w!=null&&e!=null&&h!=null?o.add(e,o.polar(-h,w)):undefined;const g=w!=null&&i!=null&&h!=null?o.add(i,o.polar(h,w)):undefined;return t("div",null,e!=null&&i!=null&&t("vertex-viewer-measurement-line",{class:C("line",{"hide-start-line-cap":u,"hide-end-line-cap":m}),start:e,end:i,capLength:l,pointerEvents:d}),!u&&e!=null&&t("div",{id:"start-anchor",class:"anchor anchor-start",style:{transform:c(e)},onPointerDown:v},t("slot",{name:"start-anchor"},t("div",{class:"anchor-placeholder"}))),!u&&f&&t("div",{class:"anchor-label anchor-label-start",style:{transform:c(f)}},t("slot",{name:"start-label"})),!m&&i!=null&&t("div",{id:"end-anchor",class:"anchor anchor-end",style:{transform:c(i)},onPointerDown:p},t("slot",{name:"end-anchor"},t("div",{class:"anchor-placeholder"}))),!m&&g&&t("div",{class:"anchor-label anchor-label-end",style:{transform:c(g)}},t("slot",{name:"end-label"})),s!=null&&t("div",{id:"label",class:"distance-label",style:{transform:c(s)}},r),n!=null&&t("div",{class:"indicator",style:{transform:c(n)}},t("slot",{name:"indicator"},t("div",{class:"indicator-placeholder"}))))};const H=()=>`:host{--viewer-measurement-distance-accent-color:var(--neutral-900);--viewer-measurement-distance-contrast-color:var(--white);--viewer-measurement-distance-invalid-accent-color:var(--red-600);--viewer-measurement-distance-invalid-contrast-color:var(--white);--viewer-measurement-distance-line-stroke-width:1.25px;--viewer-measurement-distance-line-fill-width:2px;--viewer-measurement-distance-distance-border:1px solid var(--viewer-measurement-distance-accent-color);--viewer-measurement-distance-distance-border-radius:0.25rem;--viewer-measurement-distance-distance-padding:0.375rem 0.5rem;color:var(--viewer-measurement-distance-accent-color);font-size:0.75rem;position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none}:host([invalid]:not([invalid='false'])){--viewer-measurement-distance-accent-color:var( --viewer-measurement-distance-invalid-accent-color ) !important;--viewer-measurement-distance-contrast-color:var( --viewer-measurement-distance-invalid-contrast-color ) !important}.line{--viewer-measurement-line-stroke:var( --viewer-measurement-distance-contrast-color );--viewer-measurement-line-stroke-opacity:0.75;--viewer-measurement-line-stroke-width:var( --viewer-measurement-distance-line-stroke-width );--viewer-measurement-line-fill:var( --viewer-measurement-distance-accent-color );--viewer-measurement-line-fill-width:var( --viewer-measurement-distance-line-fill-width );position:absolute;width:100%;height:100%}.anchor{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;pointer-events:auto}:host([interacting-anchor='start']) .anchor-start,:host([interacting-anchor='start']) .anchor-label-start{visibility:hidden}.hide-start-line-cap,:host([interacting-anchor='start']) .line{--viewer-measurement-line-start-cap-visibility:hidden}:host([interacting-anchor='end']) .anchor-end,:host([interacting-anchor='end']) .anchor-label-end{visibility:hidden}.hide-end-line-cap,:host([interacting-anchor='end']) .line{--viewer-measurement-line-end-cap-visibility:hidden}.anchor-label{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;pointer-events:auto}:host(:not([mode=''])){cursor:inherit}:host(:not([mode=''])) .anchor{cursor:move}:host([mode='']) .anchor{visibility:hidden}.anchor-placeholder{background:var(--viewer-measurement-distance-contrast-color);width:12px;height:12px;border-radius:50%;box-sizing:border-box}:host(:not([mode=''])) .anchor-placeholder{border:2px solid var(--viewer-measurement-distance-accent-color);background:var(--viewer-measurement-distance-contrast-color)}:host([mode='']) .distance-label{color:var(--viewer-measurement-distance-contrast-color);background:var(--viewer-measurement-distance-accent-color)}.distance-label{position:absolute;background:var(--viewer-measurement-distance-contrast-color);border:var(--viewer-measurement-distance-distance-border);border-radius:var(--viewer-measurement-distance-distance-border-radius);padding:var(--viewer-measurement-distance-distance-padding);pointer-events:auto}.indicator{position:absolute}.indicator-placeholder{background:var(--viewer-measurement-distance-accent-color);border:1px solid var(--viewer-measurement-distance-contrast-color);width:6px;height:6px;border-radius:50%;box-sizing:border-box}`;const O=3;const z=class{constructor(t){e(this,t);this.editBegin=i(this,"editBegin");this.editEnd=i(this,"editEnd");this.showAxisReferenceLines=false;this.snapDistance=P;this.units="millimeters";this.fractionalDigits=2;this.anchorLabelOffset=20;this.lineCapLength=E;this.mode="";this.interactingAnchor="none";this.invalid=false;this.measurementModel=new v;this.viewport=new f(0,0);this.interactionCount=0;this.invalidateStateCounter=0;this.stateMap={};this.measurementUnits=new m(this.units);this.model=k.empty();this.controller=new x(this.model);this.overlays=new p;this.isUserInteractingWithModel=false;this.handleFrameDrawn=()=>{this.invalidateState()};this.clearIndicator=()=>{this.controller.clearIndicator()};this.updateStartAnchor=async t=>{await this.getStencilBuffer();if(this.interactionCount===0){const e=d(t,this.elementBounds);const i=this.snapPoint(e,t);await this.updateIndicator(i)}};this.newMeasurement=t=>{if(this.interactionCount===0&&t.button===0){const e=t=>{const e=()=>{window.removeEventListener("pointerup",i);window.removeEventListener("pointermove",s)};const i=async()=>{e();t()};const s=t=>{if(t.buttons>0){e()}};window.addEventListener("pointermove",s);window.addEventListener("pointerup",i)};const i=t=>{let e=o.create(0,0);const i=i=>{const s=o.distance(e,d(i,this.elementBounds));if(s>=O){t()}};const s=()=>{window.removeEventListener("pointermove",i);window.removeEventListener("pointerup",n)};const n=()=>s();const r=t=>{e=d(t,this.elementBounds);window.addEventListener("pointermove",i);window.addEventListener("pointerup",n)};window.addEventListener("pointerdown",r);return{dispose:()=>window.removeEventListener("pointerdown",r)}};const s=()=>{const t=i((()=>{var t;this.isUserInteractingWithModel=true;(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose()}));const e=()=>{window.removeEventListener("pointermove",s);window.removeEventListener("pointerup",n);t.dispose()};const s=this.createInteractionMoveHandler();const n=async t=>{var i;if(t.button===0){if(this.isUserInteractingWithModel){this.isUserInteractingWithModel=false}else{const s=this.getHitProvider();if(s!=null){const n=d(t,this.elementBounds);const r=this.snapPoint(n,t);await((i=this.interaction)===null||i===void 0?void 0:i.finish(r,s));e();this.updateMeasurementPropsFromModel();this.endEditing()}}}};this.beginEditing("replace","end");this.newInteractionHandler={dispose:e};window.addEventListener("pointermove",s);window.addEventListener("pointerup",n)};const n=this.getHitProvider();if(n!=null){const i=d(t,this.elementBounds);const r=this.snapPoint(i,t);this.interaction=this.controller.newMeasurement(r,n);if(this.interaction!=null){e(s)}}}}}async computeElementMetrics(){var t,e,i;const s=(t=this.hostEl.shadowRoot)===null||t===void 0?void 0:t.getElementById("start-anchor");const n=(e=this.hostEl.shadowRoot)===null||e===void 0?void 0:e.getElementById("end-anchor");const r=(i=this.hostEl.shadowRoot)===null||i===void 0?void 0:i.getElementById("label");if(s!=null&&n!=null&&r!=null){return{startAnchor:s.getBoundingClientRect(),endAnchor:n.getBoundingClientRect(),label:r.getBoundingClientRect()}}else{return undefined}}connectedCallback(){this.setDepthBuffers()}disconnectedCallback(){var t,e;(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose();(e=this.newInteractionHandler)===null||e===void 0?void 0:e.dispose();this.resetDepthBuffers()}async componentWillLoad(){this.updatePropsFromJson();this.model.setMeasurementFromValues(this.start,this.end,!this.invalid);await this.getStencilBuffer();this.updateViewport();this.setDepthBuffers();await this.handleViewerChanged(this.viewer);await this.handleModeChanged();await this.computePropsAndState();this.model.onIndicatorChanged((t=>{this.indicatorPt=t}))}componentDidLoad(){const t=new ResizeObserver((()=>this.updateViewport()));t.observe(this.hostEl)}async componentWillUpdate(){await this.computePropsAndState()}render(){return t(s,{key:"58113224139c37a54bf9329ed27e6a8983d5cccd"},this.showAxisReferenceLines&&t("vertex-viewer-measurement-overlays",{key:"d2166c4a965761f472f5b3323844d82980baa29f",measurementOverlays:this.overlays,viewer:this.viewer}),this.renderMeasurement())}renderMeasurement(){const e=this.computeElementPositions();const{startPt:i,endPt:s,labelPt:n,indicatorPt:r,hideStart:a,hideEnd:o}=e;const h=this.formatDistance(this.distance);if(this.mode==="edit"||this.mode==="replace"){return t(B,{startPt:i,endPt:s,centerPt:n,indicatorPt:r,distance:h,anchorLabelOffset:this.anchorLabelOffset,lineCapLength:this.lineCapLength,hideStartAnchor:a,hideEndAnchor:o,onStartAnchorPointerDown:this.handleEditAnchor("start"),onEndAnchorPointerDown:this.handleEditAnchor("end")})}else{return t(B,{startPt:i,endPt:s,centerPt:n,indicatorPt:this.indicatorPt,distance:h,hideStartAnchor:a,hideEndAnchor:o,anchorLabelOffset:this.anchorLabelOffset,lineCapLength:this.lineCapLength,linePointerEvents:"painted"})}}async handleViewerChanged(t,e){if(e!=null){e.removeEventListener("frameDrawn",this.handleFrameDrawn);await this.removeInteractionListeners(e)}if(t!=null){t.addEventListener("frameDrawn",this.handleFrameDrawn);await this.addInteractionListeners(t)}}handleUnitsChanged(){this.measurementUnits=new m(this.units)}handleCameraChanged(){this.updateCamera()}async handleModeChanged(){var t;if(this.mode===""){(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose()}if(this.viewer!=null){await this.removeInteractionListeners(this.viewer);await this.addInteractionListeners(this.viewer)}}handleStartChanged(){this.updateInteractionModel()}handleEndChanged(){this.updateInteractionModel()}handleInvalidChanged(){this.updateInteractionModel()}async computePropsAndState(){this.updateCamera();await this.updateDepthBuffer();this.updateMeasurementPropsFromModel();this.updateOverlays()}updateOverlays(){var t;(t=this.overlay)===null||t===void 0?void 0:t.dispose();if(this.showAxisReferenceLines&&this.interactionCount===0&&!this.invalid&&this.start!=null&&this.end!=null){this.overlay=this.overlays.addDistanceVector(this.start,this.end)}}async setCursor(t){var e,i;(e=this.stateMap.hoverCursor)===null||e===void 0?void 0:e.dispose();if(!this.isUserInteractingWithModel){this.stateMap.hoverCursor=await((i=this.viewer)===null||i===void 0?void 0:i.addCursor(t))}}computeElementPositions(){if(this.mode==="replace"){return this.computeReplaceElementPositions()}else{return this.computeEditOrViewElementPositions()}}computeEditOrViewElementPositions(){const t=this.model.getMeasurement();if(this.internalCamera!=null&&t!=null){return this.computeLineElementPositions(h.create(t))}else{return{}}}computeReplaceElementPositions(){if(this.internalCamera!=null){const t=this.model.getMeasurement();const e=t!=null?this.computeLineElementPositions(h.create(t)):{};const i=this.indicatorPt!=null?{indicatorPt:this.viewport.transformWorldToViewport(this.indicatorPt,this.internalCamera.projectionViewMatrix)}:{};return{...e,...i}}else{return{}}}computeLineElementPositions(t){if(this.internalCamera!=null){return y(t,this.interactingAnchor,{viewport:this.viewport,camera:this.internalCamera})}else{return{}}}updateCamera(){var t,e;this.internalCamera=this.camera||((e=(t=this.viewer)===null||t===void 0?void 0:t.frame)===null||e===void 0?void 0:e.scene.camera)}async updateDepthBuffer(){var t,e;this.stateMap.depthBuffer=await((e=(t=this.viewer)===null||t===void 0?void 0:t.frame)===null||e===void 0?void 0:e.depthBuffer())}updateViewport(){const t=M(this.hostEl);this.viewport=new f(t.width,t.height);this.elementBounds=t}updatePropsFromJson(){var t,e;this.start=N((t=this.startJson)!==null&&t!==void 0?t:this.start);this.end=N((e=this.endJson)!==null&&e!==void 0?e:this.end)}updateInteractionModel(){this.model.setMeasurementFromValues(this.start,this.end,!this.invalid)}invalidateState(){this.invalidateStateCounter=this.invalidateStateCounter+1}async addInteractionListeners(t){const e=await t.getInteractionTarget_DEPRECATED();if(this.mode==="replace"){e.addEventListener("pointermove",this.updateStartAnchor);e.addEventListener("pointerdown",this.newMeasurement);e.addEventListener("pointerleave",this.clearIndicator)}}async removeInteractionListeners(t){const e=await t.getInteractionTarget_DEPRECATED();e.removeEventListener("pointermove",this.updateStartAnchor);e.removeEventListener("pointerdown",this.newMeasurement);e.removeEventListener("pointerleave",this.clearIndicator)}handleEditAnchor(t){if(this.mode==="edit"||this.mode==="replace"){const e=this.createInteractionMoveHandler();const i=async t=>{var s;const n=this.getHitProvider();if(n!=null){window.removeEventListener("pointermove",e);window.removeEventListener("pointerup",i);const r=d(t,this.elementBounds);const a=this.snapPoint(r,t);await((s=this.interaction)===null||s===void 0?void 0:s.finish(a,n));this.updateMeasurementPropsFromModel();this.endEditing()}};return async s=>{await this.getStencilBuffer();if(s.button===0){this.beginEditing("edit",t);this.interaction=this.controller.editMeasurement(t);window.addEventListener("pointermove",e);window.addEventListener("pointerup",i)}}}}createInteractionMoveHandler(){return async t=>{var e;const i=this.getHitProvider();if(this.elementBounds!=null&&i!=null){t.preventDefault();await this.getStencilBuffer();const s=d(t,this.elementBounds);const n=this.snapPoint(s,t);(e=this.interaction)===null||e===void 0?void 0:e.update(n,i);this.updateMeasurementPropsFromModel()}}}async getStencilBuffer(){var t;const e=await((t=this.viewer)===null||t===void 0?void 0:t.stencilBuffer.latestAfterInteraction());this.stateMap.stencil=e}snapPoint(t,e){const i=this.getHitProvider();if(i!=null&&!e.shiftKey){const e=Math.max(0,this.snapDistance);return i.hitTester().snapToNearestPixel(t,e)}return t}formatDistance(t){const e=t!=null?this.measurementUnits.convertWorldValueToReal(t):undefined;if(this.labelFormatter!=null){return this.labelFormatter(e)}else{const t=this.measurementUnits.unit.abbreviatedName;return e==null?"---":`~${e.toFixed(this.fractionalDigits)} ${t}`}}beginEditing(t,e){if(this.interactionCount===0){this.interactingAnchor=e;this.editBegin.emit({type:t,anchor:e})}this.interactionCount=this.interactionCount+1}endEditing(){if(this.interactionCount===1){const t=this.model.getMeasurement();this.interactingAnchor="none";this.updateMeasurementModel();if(t!=null){this.editEnd.emit(t)}}this.interactionCount=this.interactionCount-1}updateMeasurementModel(){this.measurementModel.clearOutcome();if(!this.invalid&&this.start!=null&&this.end!=null){this.measurementModel.setOutcome({isApproximate:true,results:[w(this.start,this.end)]})}}getHitProvider(){if(this.hitProvider==null){const t=this.getHitTester();const e=this.viewer;if(e!=null&&t!=null){return{hitTester:()=>t,raycaster:async()=>(await e.scene()).raycaster()}}}else return this.hitProvider}getHitTester(){const{stencil:t,depthBuffer:e}=this.stateMap;if(e!=null){return new D(t,e,this.viewport,this.internalCamera)}}updateMeasurementPropsFromModel(){const t=this.model.getMeasurement();this.start=t===null||t===void 0?void 0:t.start;this.end=t===null||t===void 0?void 0:t.end;this.distance=t===null||t===void 0?void 0:t.distance;this.invalid=t!=null&&!t.valid}async updateIndicator(t){var e;const i=this.getHitProvider();const s=i==null||!this.controller.moveIndicator(t,i);if(s){(e=this.stateMap.hoverCursor)===null||e===void 0?void 0:e.dispose()}else{await this.setCursor(l)}}setDepthBuffers(){if(this.mode!=null&&this.viewer!=null&&this.viewer.depthBuffers==null){this.stateMap.shouldClearDepthBuffers=true;this.viewer.depthBuffers="final"}}resetDepthBuffers(){if(this.stateMap.shouldClearDepthBuffers&&this.viewer!=null){this.viewer.depthBuffers=undefined;this.stateMap.shouldClearDepthBuffers=undefined}}get hostEl(){return n(this)}static get watchers(){return{viewer:[{handleViewerChanged:0}],units:[{handleUnitsChanged:1}],camera:[{handleCameraChanged:0}],mode:[{handleModeChanged:0}],start:[{handleStartChanged:0}],end:[{handleEndChanged:0}],invalid:[{handleInvalidChanged:0}]}}};function N(t){return typeof t==="string"?r.fromJson(t):t}z.style=H();export{z as vertex_viewer_measurement_distance};
|
|
5
|
+
//# sourceMappingURL=p-cc835213.entry.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import{r as e,h as t,H as i}from"./p-CCVkga9Q.js";import{c as o}from"./p-Dw4-tG-V.js";import"./p-CG9AChtV.js";const r=()=>`:host{cursor:pointer}.viewer-button{align-items:center;background:none;border:none;color:inherit;cursor:inherit;display:flex;padding:0}`;const n=class{constructor(t){e(this,t);this.ariaLabel=null}render(){return t(i,{key:"48d5d5322a3a9a0ea1057612fe2a8f1c9bef5171"},t("button",{key:"d0e8582256ea5b9a10e33819991e2d6e76271c43",class:"viewer-button","aria-label":this.ariaLabel},t("slot",{key:"cc647426fc0a227fc0aa0e1f49ff65cdedd73f1d"})))}};n.style=r();const a=()=>`.layer{padding:1rem;display:flex}.layer.position-top{align-items:flex-start}.layer.position-middle{align-items:center}.layer.position-bottom{align-items:flex-end}.layer.position-left{justify-content:flex-start}.layer.position-center{justify-content:center}.layer.position-right{justify-content:flex-end}.inner{display:flex}.inner.vertical{flex-direction:column}.inner.horizonal{flex-direction:row}::slotted(*){pointer-events:initial}`;const s=class{constructor(t){e(this,t);this.placement="bottom-center";this.direction="horizontal"}render(){const[e,i]=this.placement.split("-");return t("vertex-viewer-layer",{key:"9a806f9d919ccd7dccdb849e8403cac35ad50e4d",class:o("layer",{"position-top":e==="top","position-middle":e==="middle","position-bottom":e==="bottom","position-left":i==="left","position-center":i==="center","position-right":i==="right"})},t("div",{key:"07b21949f6065f08e78143fe664b17348f67e28f",class:o("inner",{vertical:this.direction==="vertical",horizontal:this.direction==="horizontal"})},t("slot",{key:"d5b7ee0c96e101a581c1e3d6d4e286ab843942a1"})))}};s.style=a();const l=()=>`.inner{display:flex;align-items:center;margin:auto}.inner.vertical{flex-direction:column}.inner.horizontal{flex-direction:row}`;const c=class{constructor(t){e(this,t);this.direction="horizontal"}render(){return t("div",{key:"85bedc4a9bd37bc5236b7c28c8ab9f49f84e2867",class:o("inner",{horizontal:this.direction==="horizontal",vertical:this.direction==="vertical"})},t("slot",{key:"4186eebdeeea2915e8fbd136efe7873af224ffa3"}))}};c.style=l();export{n as vertex_viewer_button,s as vertex_viewer_toolbar,c as vertex_viewer_toolbar_group};
|
|
5
|
+
//# sourceMappingURL=p-ce711ae0.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["viewerButtonCss","ViewerButton","constructor","hostRef","this","ariaLabel","render","h","Host","key","class","viewerToolbarCss","ViewerToolbar","placement","direction","vertical","horizontal","split","classname","viewerToolbarGroupCss","ViewerToolbarGroup","classNames"],"sources":["src/components/viewer-button/viewer-button.css?tag=vertex-viewer-button&encapsulation=shadow","src/components/viewer-button/viewer-button.tsx","src/components/viewer-toolbar/viewer-toolbar.css?tag=vertex-viewer-toolbar&encapsulation=shadow","src/components/viewer-toolbar/viewer-toolbar.tsx","src/components/viewer-toolbar-group/viewer-toolbar-group.css?tag=vertex-viewer-toolbar-group&encapsulation=shadow","src/components/viewer-toolbar-group/viewer-toolbar-group.tsx"],"sourcesContent":[":host {\n cursor: pointer;\n}\n\n.viewer-button {\n align-items: center;\n background: none;\n border: none;\n color: inherit;\n cursor: inherit;\n display: flex;\n padding: 0;\n}\n","import { Component, h, Host, Prop } from '@stencil/core';\n\n@Component({\n tag: 'vertex-viewer-button',\n styleUrl: 'viewer-button.css',\n shadow: true,\n})\nexport class ViewerButton {\n /**\n * Accessible name applied to the internal native button. Use this for\n * icon-only buttons or when the slotted content does not provide a name.\n */\n @Prop({ attribute: 'aria-label' })\n public ariaLabel: string | null = null;\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <button class=\"viewer-button\" aria-label={this.ariaLabel}>\n <slot></slot>\n </button>\n </Host>\n );\n }\n}\n",".layer {\n padding: 1rem;\n display: flex;\n}\n\n.layer.position-top {\n align-items: flex-start;\n}\n\n.layer.position-middle {\n align-items: center;\n}\n\n.layer.position-bottom {\n align-items: flex-end;\n}\n\n.layer.position-left {\n justify-content: flex-start;\n}\n\n.layer.position-center {\n justify-content: center;\n}\n\n.layer.position-right {\n justify-content: flex-end;\n}\n\n.inner {\n display: flex;\n}\n\n.inner.vertical {\n flex-direction: column;\n}\n\n.inner.horizonal {\n flex-direction: row;\n}\n\n::slotted(*) {\n pointer-events: initial;\n}\n","import { Component, h, Prop } from '@stencil/core';\nimport classname from 'classnames';\n\nimport { ViewerToolbarDirection, ViewerToolbarPlacement } from './types';\n\n@Component({\n tag: 'vertex-viewer-toolbar',\n styleUrl: 'viewer-toolbar.css',\n shadow: true,\n})\nexport class ViewerToolbar {\n /**\n * Specifies where the toolbar is positioned.\n */\n @Prop()\n public placement: ViewerToolbarPlacement = 'bottom-center';\n\n @Prop()\n public direction: ViewerToolbarDirection = 'horizontal';\n\n public render(): h.JSX.IntrinsicElements {\n const [vertical, horizontal] = this.placement.split('-');\n\n return (\n <vertex-viewer-layer\n class={classname('layer', {\n 'position-top': vertical === 'top',\n 'position-middle': vertical === 'middle',\n 'position-bottom': vertical === 'bottom',\n 'position-left': horizontal === 'left',\n 'position-center': horizontal === 'center',\n 'position-right': horizontal === 'right',\n })}\n >\n <div\n class={classname('inner', {\n vertical: this.direction === 'vertical',\n horizontal: this.direction === 'horizontal',\n })}\n >\n <slot></slot>\n </div>\n </vertex-viewer-layer>\n );\n }\n}\n",".inner {\n display: flex;\n align-items: center;\n margin: auto;\n}\n\n.inner.vertical {\n flex-direction: column;\n}\n\n.inner.horizontal {\n flex-direction: row;\n}\n","import { Component, h, Prop } from '@stencil/core';\nimport classNames from 'classnames';\n\nimport { ViewerToolbarGroupDirection } from './types';\n\n@Component({\n tag: 'vertex-viewer-toolbar-group',\n styleUrl: 'viewer-toolbar-group.css',\n shadow: true,\n})\nexport class ViewerToolbarGroup {\n @Prop()\n public direction: ViewerToolbarGroupDirection = 'horizontal';\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <div\n class={classNames('inner', {\n horizontal: this.direction === 'horizontal',\n vertical: this.direction === 'vertical',\n })}\n >\n <slot></slot>\n </div>\n );\n }\n}\n"],"mappings":";;;8GAAA,MAAMA,EAAkB,IAAM,0I,MCOjBC,EAAY,MALzB,WAAAC,CAAAC,G,UAWSC,KAAAC,UAA2B,IAWnC,CATQ,MAAAC,GACL,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,UAAAE,IAAA,2CAAQC,MAAM,gBAAe,aAAaN,KAAKC,WAC7CE,EAAA,QAAAE,IAAA,8C,eCnBV,MAAME,EAAmB,IAAM,ob,MCUlBC,EAAa,MAL1B,WAAAV,CAAAC,G,UAUSC,KAAAS,UAAoC,gBAGpCT,KAAAU,UAAoC,YA2B5C,CAzBQ,MAAAR,GACL,MAAOS,EAAUC,GAAcZ,KAAKS,UAAUI,MAAM,KAEpD,OACEV,EAAA,uBAAAE,IAAA,2CACEC,MAAOQ,EAAU,QAAS,CACxB,eAAgBH,IAAa,MAC7B,kBAAmBA,IAAa,SAChC,kBAAmBA,IAAa,SAChC,gBAAiBC,IAAe,OAChC,kBAAmBA,IAAe,SAClC,iBAAkBA,IAAe,WAGnCT,EAAA,OAAAE,IAAA,2CACEC,MAAOQ,EAAU,QAAS,CACxBH,SAAUX,KAAKU,YAAc,WAC7BE,WAAYZ,KAAKU,YAAc,gBAGjCP,EAAA,QAAAE,IAAA,8C,eCxCV,MAAMU,EAAwB,IAAM,iI,MCUvBC,EAAkB,MAL/B,WAAAlB,CAAAC,G,UAOSC,KAAAU,UAAyC,YAcjD,CAZQ,MAAAR,GACL,OACEC,EAAA,OAAAE,IAAA,2CACEC,MAAOW,EAAW,QAAS,CACzBL,WAAYZ,KAAKU,YAAc,aAC/BC,SAAUX,KAAKU,YAAc,cAG/BP,EAAA,QAAAE,IAAA,6C","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["sceneTreeTableColumnCss","SceneTreeTableColumn","render","h","Host","key","class","name"],"sources":["src/components/scene-tree-table-column/scene-tree-table-column.css?tag=vertex-scene-tree-table-column&encapsulation=shadow","src/components/scene-tree-table-column/scene-tree-table-column.tsx"],"sourcesContent":[":host {\n width: 100%;\n height: 100%;\n position: relative;\n}\n\n.hidden {\n visibility: hidden;\n pointer-events: none;\n}\n\n.column {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n
|
|
1
|
+
{"version":3,"names":["sceneTreeTableColumnCss","SceneTreeTableColumn","render","h","Host","key","class","name"],"sources":["src/components/scene-tree-table-column/scene-tree-table-column.css?tag=vertex-scene-tree-table-column&encapsulation=shadow","src/components/scene-tree-table-column/scene-tree-table-column.tsx"],"sourcesContent":[":host {\n width: 100%;\n height: 100%;\n position: relative;\n}\n\n.hidden {\n visibility: hidden;\n pointer-events: none;\n}\n\n.column {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n","import { Component, h, Host, Prop } from '@stencil/core';\n\n@Component({\n tag: 'vertex-scene-tree-table-column',\n styleUrl: 'scene-tree-table-column.css',\n shadow: true,\n})\nexport class SceneTreeTableColumn {\n /**\n * The initial width of this column.\n */\n @Prop()\n public initialWidth?: number;\n\n /**\n * The minimum width of this column.\n */\n @Prop()\n public minWidth?: number;\n\n /**\n * The maximum width of this column.\n */\n @Prop()\n public maxWidth?: number;\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"hidden\">\n <slot name=\"header\" />\n </div>\n <div class=\"column\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":";;;kDAAA,MAAMA,EAA0B,IAAM,kL,MCOzBC,EAAoB,M,yBAmBxB,MAAAC,GACL,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,OAAAE,IAAA,2CAAKC,MAAM,UACTH,EAAA,QAAAE,IAAA,2CAAME,KAAK,YAEbJ,EAAA,OAAAE,IAAA,2CAAKC,MAAM,UACTH,EAAA,QAAAE,IAAA,8C","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{r as t,h as i,H as e}from"./p-CCVkga9Q.js";import{s}from"./p-BU0JYf18.js";import{p as n}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{r as t,h as i,H as e}from"./p-CCVkga9Q.js";import{s}from"./p-BU0JYf18.js";import{p as n}from"./p-kMZA0v7I.js";import{a as o,M as r}from"./p-CyiY_hsD.js";import"./p-5kcpg4MZ.js";import"./p-D2IEHEGM.js";import"./p-BNuMPeJ8.js";import"./p-BhKTTmpL.js";import{M as a}from"./p-BY3lpCm6.js";import{M as h}from"./p-DyL2wWm6.js";import{p as l}from"./p-2UsvOTHJ.js";import{a as d}from"./p-DxMDDbmh.js";import{g as p}from"./p-D0aTA_2m.js";import{E as m}from"./p-CFus3r7d.js";import{E as u}from"./p-BAhfr1Nx.js";import"./p-ux1ckSDN.js";import"./p-CG9AChtV.js";import"./p-CDM7zNn0.js";import"./p-CPk-nchx.js";import"./p-CioaIHsi.js";class c{get elementRect(){return this.rectObserver.rect}constructor(t,i){this.rectObserver=new m;this.handlePointerMove=async t=>{if(await this.isMeasurableEntityUnderPointer(t)){this.clearCursor();this.addCursor(d)}else{this.clearCursor()}};this.handlePointerDown=t=>{this.ifNoInteraction(t,(async()=>{if(await this.isMeasurableEntityUnderPointer(t)){this.measureEntityUnderPointer(t)}else{await this.controller.clearEntities()}}))};this.controller=t;this.measurableEntityTypes=i}initialize(t,i){this.element=t;this.api=i;this.rectObserver.observe(t);t.addEventListener("pointermove",this.handlePointerMove);t.addEventListener("pointerdown",this.handlePointerDown)}dispose(){var t,i,e;this.rectObserver.disconnect();(t=this.measurementInteraction)===null||t===void 0?void 0:t.dispose();this.clearCursor();(i=this.element)===null||i===void 0?void 0:i.removeEventListener("pointermove",this.handlePointerMove);(e=this.element)===null||e===void 0?void 0:e.removeEventListener("pointerdown",this.handlePointerDown);this.element=undefined;this.api=undefined}addCursor(t){this.cursor=this.ifInitialized((({api:i})=>i.addCursor(t)))}clearCursor(){var t;(t=this.cursor)===null||t===void 0?void 0:t.dispose();this.cursor=undefined}async isMeasurableEntityUnderPointer(t){var i;const e=p(t,this.elementRect);const s=await((i=this.api)===null||i===void 0?void 0:i.getEntityTypeAtPoint(e));return s!=null&&this.measurableEntityTypes.includes(s)}measureEntityUnderPointer(t){this.ifInitialized((async({api:i})=>{const e=p(t,this.elementRect);const[s]=await i.hitItems(e);const n=s!=null?o.fromHit(s):undefined;if(n!=null){await this.controller.addEntity(n)}else{await this.controller.clearEntities()}}))}ifInitialized(t){if(this.element!=null&&this.api!=null){return t({element:this.element,api:this.api})}else{throw new Error("Measurement interaction handler not initialized.")}}ifNoInteraction(t,i){const e=l.create(t.clientX,t.clientY);let s=false;const n=t=>{const i=l.create(t.clientX,t.clientY);const n=l.distance(e,i);s=n>2};const o=()=>{window.removeEventListener("pointermove",n);window.removeEventListener("pointerup",o);if(!s){i()}};window.addEventListener("pointermove",n);window.addEventListener("pointerup",o)}}const v=()=>`:host{display:block;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none}`;const f=class{constructor(i){t(this,i);this.measurementModel=new a;this.measurementOverlays=new h;this.measurableEntityTypes=[u.PRECISE_SURFACE,u.IMPRECISE_SURFACE];this.configEnv="platprod"}connectedCallback(){this.setupInteractionHandler()}componentWillLoad(){this.setupController();this.setupInteractionHandler()}disconnectedCallback(){this.clearInteractionHandler()}handleMeasurableEntityTypesChanged(){this.setupInteractionHandler()}handleMeasurementControllerChanged(){this.setupInteractionHandler()}handleMeasurementModelChanged(){this.setupController()}handleViewerChanged(){this.setupInteractionHandler()}render(){return i(e,{key:"191b29e7710d24dc5462b10bf5fc947de5facf6c"},i("vertex-viewer-measurement-overlays",{key:"9da7740e1f54c300f6a76a7dc516054e40bbed05",viewer:this.viewer,measurementOverlays:this.measurementOverlays}))}setupController(){var t;const i=n(this.configEnv,this.config);const e=new s.SceneViewAPIClient(i.network.sceneViewHost);this.measurementController=new r(this.measurementModel,e,(()=>{var t;return(t=this.viewer)===null||t===void 0?void 0:t.token}),(t=this.viewer)===null||t===void 0?void 0:t.deviceId)}clearInteractionHandler(){var t;(t=this.registeredInteractionHandler)===null||t===void 0?void 0:t.then((t=>t.dispose()));this.registeredInteractionHandler=undefined}setupInteractionHandler(){var t;this.clearInteractionHandler();if(this.measurementController!=null){this.registeredInteractionHandler=(t=this.viewer)===null||t===void 0?void 0:t.registerInteractionHandler(new c(this.measurementController,this.measurableEntityTypes))}}static get watchers(){return{measurableEntityTypes:[{handleMeasurableEntityTypesChanged:0}],measurementController:[{handleMeasurementControllerChanged:0}],measurementModel:[{handleMeasurementModelChanged:1}],viewer:[{handleViewerChanged:0}]}}};f.style=v();export{f as vertex_viewer_measurement_precise};
|
|
5
|
+
//# sourceMappingURL=p-d5a57757.entry.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import{h as i,F as t,r as e}from"./p-CCVkga9Q.js";import{p as n,m as o,v as s}from"./p-2UsvOTHJ.js";import"./p-DMG1CW3A.js";import"./p-DxMDDbmh.js";import"./p-D2IEHEGM.js";import"./p-BNuMPeJ8.js";import"./p-ux1ckSDN.js";import"./p-5kcpg4MZ.js";import"./p-BhKTTmpL.js";import"./p-DHK23fw4.js";import"./p-BAhfr1Nx.js";import{V as r}from"./p-CeZe0Qql.js";import{g as a,i as l,b as d,P as p,a as h,c}from"./p-CxBXErQ8.js";import{c as v}from"./p-Dw4-tG-V.js";import"./p--8q6LyIm.js";import"./p-CDM7zNn0.js";import"./p-CG9AChtV.js";import"./p-DeUGB_Ik.js";const u=({pin:e,selected:n,occluded:o,detached:s})=>{const{primaryColor:r}=a(e);return i(t,null,d(e)&&i("div",{id:"pin-anchor",class:v("pin-anchor",{selected:n,"pin-occluded":o,"pin-detached":s}),style:{background:r}}),l(e)&&i("vertex-viewer-icon",{name:"pin-fill",size:"lg",class:v("pin",{"pin-selected":n,"pin-occluded":o,"pin-detached":s}),style:{color:r}}))};function b(i,t,e){const o={x:i.x+e.width/2,y:i.y};const s={x:i.x+e.width/2,y:i.y+e.height};const r={x:i.x+e.width,y:i.y+e.height/2};const a={x:i.x,y:i.y+e.height/2};const l=[o,s,a,r];const d=l.map((i=>n.distance(i,t)));const p=d.indexOf(Math.min(...d));return l[p]}const f=()=>`:host{--viewer-annotations-pin-primary-color:var(--blue-700);--viewer-annotations-pin-accent-color:var(--blue-200);--viewer-annotations-pin-dot-color:var( --viewer-annotations-pin-primary-color );--viewer-annotations-pin-color:var(--viewer-annotations-pin-primary-color);--viewer-annotations-pin-font-size:0.75rem;--viewer-annotations-pin-selected-stroke:var(--white);--viewer-annotations-pin-selected-border:2px solid var(--white);--viewer-annotations-pin-label-border:2px solid var(--black);--viewer-annotations-pin-selected-stroke:var(--white);font-size:var(--viewer-annotations-pin-font-size);position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none}.pin-anchor{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;width:9px;height:9px;box-sizing:border-box;border:var(--viewer-annotations-pin-label-border);background:var(--viewer-annotations-pin-dot-color);pointer-events:auto;cursor:pointer}.selected{width:13px;height:13px;border:var(--viewer-annotations-pin-selected-border)}.pin{color:var(--viewer-annotations-pin-color);cursor:pointer;transition:opacity 0.3s ease-in;transform:translate(0px, -12px)}.pin-selected{stroke-width:1;stroke:var(--viewer-annotations-pin-selected-stroke)}.pin-occluded{opacity:0.3;transition:opacity 0.3s ease-in}.pin-detached{visibility:hidden}`;const m=class{constructor(i){e(this,i);this.matrix=o.makeIdentity();this.projectionViewMatrix=o.makeIdentity();this.pinModel=new p;this.selected=false;this.occluded=false;this.detached=false;this.invalidateStateCounter=0;this.invalidateState=()=>{this.invalidateStateCounter=this.invalidateStateCounter+1}}componentWillLoad(){if(this.pinController==null){this.pinController=new h(this.pinModel)}}componentDidLoad(){var i;this.setLabelObserver();if(this.selected){(i=this.labelEl)===null||i===void 0?void 0:i.setFocus()}}async handleOcclusionStateChanged(i){this.occluded=i.detail}async handleDetachedStateChanged(i){this.detached=i.detail}disconnectedCallback(){var i,t;(i=this.labelEl)===null||i===void 0?void 0:i.removeEventListener("labelChanged",this.invalidateState);(t=this.resizeObserver)===null||t===void 0?void 0:t.disconnect()}render(){var e;if(this.pin==null){throw new Error("Unable to draw pin")}const{pinPoint:n,labelPoint:o}=this.computePinPoints(this.pin);return i(t,{key:"84a22b24189e46d618c7266874d6584feb4e0b93"},i("vertex-viewer-dom-element",{key:"d4b9cf5194049099b2a7a2c1ef07fc3757e91cdc","data-testid":`drawn-pin-${this.pin.id}`,position:this.pin.worldPosition,onPointerDown:async()=>{var i;await((i=this.labelEl)===null||i===void 0?void 0:i.submit());this.selectPin();this.handleAnchorPointerDown()},detachedOff:false},i(u,{key:"7312b90e959e7d61de89c80ff032c29c5d32d888",pin:this.pin,selected:this.selected,occluded:this.occluded,detached:this.detached})),d(this.pin)&&!this.occluded&&!this.detached&&i(t,{key:"975ae561cc3eb0bf6d259d99c10c48ab0bb2661a"},i("vertex-viewer-pin-label-line",{key:"cbb32a2788a89f53c5ea2e2e6abe83b0b49c0fd4",id:`pin-label-line-${(e=this.pin)===null||e===void 0?void 0:e.id}`,pinPoint:n,pin:this.pin,labelPoint:o,onPointerDown:()=>this.selectPin()}),i("vertex-viewer-pin-label",{key:"296958cff46f102cef5621c2512b71f0d4d97ff9",pin:this.pin,ref:i=>this.labelEl=i,elementBounds:this.elementBounds,pinController:this.pinController,onPointerDown:()=>this.selectPin()})))}setLabelObserver(){if(this.labelEl!=null){this.labelEl.addEventListener("labelChanged",this.invalidateState);this.resizeObserver=new ResizeObserver((()=>this.invalidateState()));this.resizeObserver.observe(this.labelEl)}}computePinPoints(i){if(this.elementBounds!=null&&this.pin!=null){return d(this.pin)&&this.pin.label.point!=null?this.computeTextPinPoints(this.pin,this.elementBounds):this.computeDefaultPinPoints(this.pin,this.elementBounds)}return{pinPoint:i.worldPosition}}computeDefaultPinPoints(i,t){return{pinPoint:this.getFromWorldPosition(i.worldPosition,this.projectionViewMatrix,t)}}computeTextPinPoints(i,t){var e,n,o,s;const{pinPoint:r}=this.computeDefaultPinPoints(i,t);const a=c(i.label.point,t);const l=((n=(e=this.labelEl)===null||e===void 0?void 0:e.firstElementChild)===null||n===void 0?void 0:n.clientWidth)||0;const d=((s=(o=this.labelEl)===null||o===void 0?void 0:o.firstElementChild)===null||s===void 0?void 0:s.clientHeight)||0;return{pinPoint:r,labelPoint:b(a,r,{width:l,height:d})}}handleAnchorPointerDown(){var i,t;if(this.elementBounds!=null&&((i=this.pinController)===null||i===void 0?void 0:i.getToolMode())==="edit"&&this.pin!=null){(t=this.pinController)===null||t===void 0?void 0:t.setDraggable({id:this.pin.id})}}selectPin(){var i,t;(i=this.pinController)===null||i===void 0?void 0:i.setSelectedPinId((t=this.pin)===null||t===void 0?void 0:t.id)}getFromWorldPosition(i,t,e){const n=s.multiplyByTransformMatrixColumnMajor(i,t);return r.fromDimensions(e).transformVectorToViewport(n)}};m.style=f();export{m as vertex_viewer_pin_group};
|
|
5
|
+
//# sourceMappingURL=p-e4913b06.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PinRenderer","pin","selected","occluded","detached","primaryColor","getPinColors","h","Fragment","isTextPin","id","class","classNames","style","background","isIconPin","name","size","color","getClosestCenterToPoint","boxPoint","pointToMeasure","dimensions","topPoint","x","width","y","bottomPoint","height","rightPoint","leftPoint","candidates","distances","map","candidate","Point","distance","candidateIndex","indexOf","Math","min","viewerPinGroupCss","ViewerPinGroup","constructor","hostRef","this","matrix","Matrix4","makeIdentity","projectionViewMatrix","pinModel","PinModel","invalidateStateCounter","invalidateState","componentWillLoad","pinController","PinController","componentDidLoad","setLabelObserver","_a","labelEl","setFocus","handleOcclusionStateChanged","event","detail","handleDetachedStateChanged","disconnectedCallback","removeEventListener","_b","resizeObserver","disconnect","render","Error","pinPoint","labelPoint","computePinPoints","key","position","worldPosition","onPointerDown","async","submit","selectPin","handleAnchorPointerDown","detachedOff","ref","el","elementBounds","addEventListener","ResizeObserver","observe","label","point","computeTextPinPoints","computeDefaultPinPoints","getFromWorldPosition","screenPosition","translatePointToScreen","labelWidth","firstElementChild","clientWidth","labelHeight","_d","_c","clientHeight","getToolMode","setDraggable","setSelectedPinId","pt","ndcPt","Vector3","multiplyByTransformMatrixColumnMajor","Viewport","fromDimensions","transformVectorToViewport"],"sources":["src/components/viewer-pin-group/pin-renderer.tsx","src/components/viewer-pin-group/utils.ts","src/components/viewer-pin-group/viewer-pin-group.css?tag=vertex-viewer-pin-group","src/components/viewer-pin-group/viewer-pin-group.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Fragment, FunctionalComponent, h } from '@stencil/core';\nimport classNames from 'classnames';\n\nimport { getPinColors, isIconPin, isTextPin, Pin } from '../../lib/pins/model';\n\ninterface PinRendererProps {\n pin?: Pin;\n selected: boolean;\n occluded: boolean;\n detached: boolean;\n}\n\nexport const PinRenderer: FunctionalComponent<PinRendererProps> = ({\n pin,\n selected,\n occluded,\n detached,\n}) => {\n const { primaryColor } = getPinColors(pin);\n\n return (\n <Fragment>\n {isTextPin(pin) && (\n <div\n id=\"pin-anchor\"\n class={classNames('pin-anchor', {\n selected: selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n background: primaryColor,\n }}\n ></div>\n )}\n\n {isIconPin(pin) && (\n <vertex-viewer-icon\n name=\"pin-fill\"\n size=\"lg\"\n class={classNames('pin', {\n 'pin-selected': selected,\n 'pin-occluded': occluded,\n 'pin-detached': detached,\n })}\n style={{\n color: primaryColor,\n }}\n />\n )}\n </Fragment>\n );\n};\n","import { Dimensions, Point } from '@vertexvis/geometry';\n\nexport function getClosestCenterToPoint(\n boxPoint: Point.Point,\n pointToMeasure: Point.Point,\n dimensions: Dimensions.Dimensions,\n): Point.Point {\n const topPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y,\n };\n\n const bottomPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y + dimensions.height,\n };\n\n const rightPoint = {\n x: boxPoint.x + dimensions.width,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const leftPoint = {\n x: boxPoint.x,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const candidates = [topPoint, bottomPoint, leftPoint, rightPoint];\n\n const distances = candidates.map((candidate) =>\n Point.distance(candidate, pointToMeasure),\n );\n\n const candidateIndex = distances.indexOf(Math.min(...distances));\n return candidates[candidateIndex];\n}\n",":host {\n /**\n * @prop --viewer-annotations-pin-primary-color: A CSS color that\n * specifies the primary color for the pins. This value gets used for the dot color \n * and borders\n */\n --viewer-annotations-pin-primary-color: var(--blue-700);\n\n /**\n * @prop --viewer-annotations-pin-accent-color: A CSS color that\n * specifies the accent color for the pins. This value gets used for background colors\n * \n */\n\n --viewer-annotations-pin-accent-color: var(--blue-200);\n /**\n * @prop viewer-annotations-pin-dot-color: A CSS color that\n * specifies the color of the anchor dot\n */\n --viewer-annotations-pin-dot-color: var(\n --viewer-annotations-pin-primary-color\n );\n\n /**\n * @prop --viewer-annotations-pin-color: A CSS color that\n * specifies the color of the pin\n */\n --viewer-annotations-pin-color: var(--viewer-annotations-pin-primary-color);\n\n /**\n * @prop --viewer-annotations-pin-font-size: A CSS property to specify\n the font size of the pin\n */\n --viewer-annotations-pin-font-size: 0.75rem;\n\n /**\n * @prop --viewer-annotations-pin-selected-stroke: A CSS color that\n * specifies the stroke color of a selected pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the border of a selected pin\n */\n --viewer-annotations-pin-selected-border: 2px solid var(--white);\n\n /**\n * @prop --viewer-annotations-pin-label-border: A CSS color that\n * specifies the border of a text pin anchor\n */\n --viewer-annotations-pin-label-border: 2px solid var(--black);\n\n /**\n * @prop --viewer-annotations-pin-selected-border: A CSS color that\n * specifies the stroke of a selected default pin\n */\n --viewer-annotations-pin-selected-stroke: var(--white);\n\n font-size: var(--viewer-annotations-pin-font-size);\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n}\n\n.pin-anchor {\n position: absolute;\n border-radius: 50%;\n transform: translate(-50%, -50%);\n display: block;\n width: 9px;\n height: 9px;\n box-sizing: border-box;\n border: var(--viewer-annotations-pin-label-border);\n background: var(--viewer-annotations-pin-dot-color);\n pointer-events: auto;\n cursor: pointer;\n}\n\n.selected {\n width: 13px;\n height: 13px;\n border: var(--viewer-annotations-pin-selected-border);\n}\n\n.pin {\n color: var(--viewer-annotations-pin-color);\n cursor: pointer;\n transition: opacity 0.3s ease-in;\n\n /**\n * Place bottom point of the pin at the location instead of the middle of the pin\n */\n transform: translate(0px, -12px);\n}\n\n.pin-selected {\n stroke-width: 1;\n stroke: var(--viewer-annotations-pin-selected-stroke);\n}\n\n.pin-occluded {\n opacity: 0.3;\n transition: opacity 0.3s ease-in;\n}\n\n.pin-detached {\n visibility: hidden;\n}\n","import {\n Component,\n Fragment,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n JSX,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { Dimensions, Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Viewport } from '../..';\nimport { PinController } from '../../lib/pins/controller';\nimport { isTextPin, Pin, TextPin } from '../../lib/pins/model';\nimport { PinModel } from '../../lib/pins/model';\nimport { translatePointToScreen } from '../viewer-pin-tool/utils';\nimport { PinRenderer } from './pin-renderer';\nimport { getClosestCenterToPoint } from './utils';\n\ninterface ComputedPoints {\n pinPoint: Point.Point;\n labelPoint?: Point.Point;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-group',\n styleUrl: 'viewer-pin-group.css',\n shadow: false,\n})\nexport class ViewerPinGroup {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: Pin;\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Projection view matrix used for computing the position of the pin line\n */\n @Prop()\n public projectionViewMatrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop({ mutable: true })\n public elementBounds?: DOMRect;\n\n /**\n * The model that contains the entities and outcomes from performing pin operations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * Whether the pin is \"selected\"\n */\n @Prop()\n public selected = false;\n\n /**\n * @internal\n * Whether the pin is occluded\n */\n @Prop({ mutable: true, reflect: true })\n public occluded = false;\n\n /**\n * @internal\n * Whether the pin is detached\n */\n @Prop({ mutable: true, reflect: true })\n public detached = false;\n\n @State()\n private invalidateStateCounter = 0;\n\n private labelEl: HTMLVertexViewerPinLabelElement | undefined;\n\n private resizeObserver?: ResizeObserver;\n\n protected componentWillLoad(): void {\n if (this.pinController == null) {\n this.pinController = new PinController(this.pinModel);\n }\n }\n\n protected componentDidLoad(): void {\n this.setLabelObserver();\n\n if (this.selected) {\n this.labelEl?.setFocus();\n }\n }\n\n /**\n * @ignore\n */\n @Listen('occlusionStateChanged')\n protected async handleOcclusionStateChanged(\n event: CustomEvent<boolean>,\n ): Promise<void> {\n this.occluded = event.detail;\n }\n\n /**\n * @ignore\n */\n @Listen('detachedStateChanged')\n protected async handleDetachedStateChanged(\n event: CustomEvent<boolean>,\n ): Promise<void> {\n this.detached = event.detail;\n }\n\n protected disconnectedCallback(): void {\n this.labelEl?.removeEventListener('labelChanged', this.invalidateState);\n this.resizeObserver?.disconnect();\n }\n\n protected render(): JSX.Element {\n if (this.pin == null) {\n throw new Error('Unable to draw pin');\n }\n\n const { pinPoint, labelPoint } = this.computePinPoints(this.pin);\n\n return (\n <Fragment>\n <vertex-viewer-dom-element\n data-testid={`drawn-pin-${this.pin.id}`}\n position={this.pin.worldPosition}\n onPointerDown={async () => {\n await this.labelEl?.submit();\n this.selectPin();\n this.handleAnchorPointerDown();\n }}\n detachedOff={false}\n >\n <PinRenderer\n pin={this.pin}\n selected={this.selected}\n occluded={this.occluded}\n detached={this.detached}\n />\n </vertex-viewer-dom-element>\n\n {isTextPin(this.pin) && !this.occluded && !this.detached && (\n <Fragment>\n <vertex-viewer-pin-label-line\n id={`pin-label-line-${this.pin?.id}`}\n pinPoint={pinPoint}\n pin={this.pin}\n labelPoint={labelPoint}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label-line>\n\n <vertex-viewer-pin-label\n pin={this.pin}\n ref={(el) => (this.labelEl = el)}\n elementBounds={this.elementBounds}\n pinController={this.pinController}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private invalidateState = (): void => {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n };\n\n private setLabelObserver(): void {\n if (this.labelEl != null) {\n this.labelEl.addEventListener('labelChanged', this.invalidateState);\n\n this.resizeObserver = new ResizeObserver(() => this.invalidateState());\n this.resizeObserver.observe(this.labelEl);\n }\n }\n\n private computePinPoints(pin: Pin): ComputedPoints {\n if (this.elementBounds != null && this.pin != null) {\n return isTextPin(this.pin) && this.pin.label.point != null\n ? this.computeTextPinPoints(this.pin, this.elementBounds)\n : this.computeDefaultPinPoints(this.pin, this.elementBounds);\n }\n\n return { pinPoint: pin.worldPosition };\n }\n\n private computeDefaultPinPoints(\n pin: Pin,\n elementBounds: DOMRect,\n ): ComputedPoints {\n return {\n pinPoint: this.getFromWorldPosition(\n pin.worldPosition,\n this.projectionViewMatrix,\n elementBounds,\n ),\n };\n }\n\n private computeTextPinPoints(\n pin: TextPin,\n elementBounds: DOMRect,\n ): ComputedPoints {\n const { pinPoint } = this.computeDefaultPinPoints(pin, elementBounds);\n\n const screenPosition = translatePointToScreen(\n pin.label.point,\n elementBounds,\n );\n\n const labelWidth = this.labelEl?.firstElementChild?.clientWidth || 0;\n const labelHeight = this.labelEl?.firstElementChild?.clientHeight || 0;\n\n return {\n pinPoint,\n labelPoint: getClosestCenterToPoint(screenPosition, pinPoint, {\n width: labelWidth,\n height: labelHeight,\n }),\n };\n }\n\n private handleAnchorPointerDown(): void {\n if (\n this.elementBounds != null &&\n this.pinController?.getToolMode() === 'edit' &&\n this.pin != null\n ) {\n this.pinController?.setDraggable({ id: this.pin.id });\n }\n }\n\n private selectPin(): void {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n\n private getFromWorldPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n dimensions: Dimensions.Dimensions,\n ): Point.Point {\n const ndcPt = Vector3.multiplyByTransformMatrixColumnMajor(\n pt,\n projectionViewMatrix,\n );\n return Viewport.fromDimensions(dimensions).transformVectorToViewport(ndcPt);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["viewerSpinnerCss","ViewerSpinner","constructor","hostRef","this","size","render","h","key","class","classNames"],"sources":["src/components/viewer-spinner/viewer-spinner.css?tag=vertex-viewer-spinner&encapsulation=shadow","src/components/viewer-spinner/viewer-spinner.tsx"],"sourcesContent":[".spinner {\n position: relative;\n height: 16px;\n width: 16px;\n}\n\n.spinner div {\n position: absolute;\n display: block;\n animation: spinner 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-radius: 50%;\n border-style: solid;\n box-sizing: border-box;\n border-color: var(--neutral-800) transparent transparent transparent;\n border-width: 1px;\n\n margin: 0;\n}\n\n.spinner div:nth-child(1) {\n animation-delay: -0.45s;\n}\n\n.spinner div:nth-child(2) {\n animation-delay: -0.3s;\n}\n\n.spinner div:nth-child(3) {\n animation-delay: -0.15s;\n}\n\n/* xs */\n.spinner.xs {\n height: 16px;\n width: 16px;\n}\n\n.spinner.xs div {\n border-width: 1px;\n height: 16px;\n width: 16px;\n margin: 0;\n}\n\n/* sm */\n.spinner.sm {\n height: 24px;\n width: 24px;\n}\n\n.spinner.sm div {\n border-width: 3px;\n height: 18px;\n width: 18px;\n margin: 2px;\n}\n\n/* md */\n.spinner.md {\n height: 32px;\n width: 32px;\n}\n\n.spinner.md div {\n border-width:
|
|
1
|
+
{"version":3,"names":["viewerSpinnerCss","ViewerSpinner","constructor","hostRef","this","size","render","h","key","class","classNames"],"sources":["src/components/viewer-spinner/viewer-spinner.css?tag=vertex-viewer-spinner&encapsulation=shadow","src/components/viewer-spinner/viewer-spinner.tsx"],"sourcesContent":[".spinner {\n position: relative;\n height: 16px;\n width: 16px;\n}\n\n.spinner div {\n position: absolute;\n display: block;\n animation: spinner 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-radius: 50%;\n border-style: solid;\n box-sizing: border-box;\n border-color: var(--neutral-800) transparent transparent transparent;\n border-width: 1px;\n\n margin: 0;\n}\n\n.spinner div:nth-child(1) {\n animation-delay: -0.45s;\n}\n\n.spinner div:nth-child(2) {\n animation-delay: -0.3s;\n}\n\n.spinner div:nth-child(3) {\n animation-delay: -0.15s;\n}\n\n/* xs */\n.spinner.xs {\n height: 16px;\n width: 16px;\n}\n\n.spinner.xs div {\n border-width: 1px;\n height: 16px;\n width: 16px;\n margin: 0;\n}\n\n/* sm */\n.spinner.sm {\n height: 24px;\n width: 24px;\n}\n\n.spinner.sm div {\n border-width: 3px;\n height: 18px;\n width: 18px;\n margin: 2px;\n}\n\n/* md */\n.spinner.md {\n height: 32px;\n width: 32px;\n}\n\n.spinner.md div {\n border-width: 3px;\n height: 32px;\n width: 32px;\n margin: 2px;\n}\n\n/* lg */\n.spinner.lg {\n height: 64px;\n width: 64px;\n}\n\n.spinner.lg div {\n border-width: 6px;\n height: 52px;\n width: 52px;\n margin: 6px;\n}\n\n@keyframes spinner {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n","import { Component, h, Prop } from '@stencil/core';\nimport classNames from 'classnames';\n\n/**\n * The predefined sizes for the spinner.\n */\nexport type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | undefined;\n\n@Component({\n tag: 'vertex-viewer-spinner',\n styleUrl: 'viewer-spinner.css',\n shadow: true,\n})\nexport class ViewerSpinner {\n /**\n * The size of the spinner. Can be `'xs' | 'sm' | 'md' | 'lg' | undefined`. Predefined\n * sizes are set to:\n *\n * * `xm`: 16px\n * * `sm`: 24px\n * * `md`: 32px\n * * `lg`: 64px\n */\n @Prop()\n public size?: SpinnerSize = 'md';\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <div\n class={classNames('spinner', {\n ['xs']: this.size === 'xs',\n ['sm']: this.size === 'sm',\n ['md']: this.size === 'md',\n ['lg']: this.size === 'lg',\n })}\n >\n <div />\n <div />\n <div />\n <div />\n </div>\n );\n }\n}\n"],"mappings":";;;uGAAA,MAAMA,EAAmB,IAAM,46B,MCalBC,EAAa,MAL1B,WAAAC,CAAAC,G,UAgBSC,KAAAC,KAAqB,IAmB7B,CAjBQ,MAAAC,GACL,OACEC,EAAA,OAAAC,IAAA,2CACEC,MAAOC,EAAW,UAAW,CAC3B,CAAC,MAAON,KAAKC,OAAS,KACtB,CAAC,MAAOD,KAAKC,OAAS,KACtB,CAAC,MAAOD,KAAKC,OAAS,KACtB,CAAC,MAAOD,KAAKC,OAAS,QAGxBE,EAAA,OAAAC,IAAA,6CACAD,EAAA,OAAAC,IAAA,6CACAD,EAAA,OAAAC,IAAA,6CACAD,EAAA,OAAAC,IAAA,6C","ignoreList":[]}
|