@vertexvis/viewer 1.1.1-testing.3 → 1.1.1-testing.5
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-OELTgslY.js} +3 -3
- package/dist/cjs/{config-CepHuwRF.js.map → config-OELTgslY.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-rj-TEPKc.js} +4 -4
- package/dist/cjs/{entities-BdWnb6KI.js.map → entities-rj-TEPKc.js.map} +1 -1
- package/dist/cjs/{geometry_pb-BISQT2vx.js → geometry_pb-asn2mNvW.js} +3 -3
- package/dist/cjs/{geometry_pb-BISQT2vx.js.map → geometry_pb-asn2mNvW.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-e19TP_oF.js} +5 -5
- package/dist/cjs/queries-e19TP_oF.js.map +1 -0
- package/dist/cjs/{regl-component-CB004H91.js → regl-component-DjVaO3t3.js} +6 -6
- package/dist/cjs/{regl-component-CB004H91.js.map → regl-component-DjVaO3t3.js.map} +1 -1
- package/dist/cjs/{representation_pb-CHCm5o1e.js → representation_pb-BVBPrHLf.js} +3 -3
- package/dist/cjs/{representation_pb-CHCm5o1e.js.map → representation_pb-BVBPrHLf.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-M3UUIO3l.js} +118 -95
- package/dist/cjs/streamAttributes-M3UUIO3l.js.map +1 -0
- 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 +2 -2
- 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 +3 -3
- 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 +9 -8
- 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 +7 -7
- 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-search/scene-tree-search.js +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.css +10 -10
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
- package/dist/collection/components/scene-tree-table-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 +4 -3
- 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 +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.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/collection/workers/png-decoder-pool.js +4 -3
- package/dist/collection/workers/png-decoder-pool.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-CZgX-9yo.js → p-5bk1mHRt.js} +2 -2
- package/dist/components/{p-DRGCkSEK.js → p-B8530k7R.js} +2 -2
- package/dist/components/{p-garvKln8.js → p-BAuOB8M-.js} +2 -2
- package/dist/components/p-BAuOB8M-.js.map +1 -0
- package/dist/components/{p-BKQMbekH.js → p-BCuMPvZO.js} +2 -2
- 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-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-BgzjmANj.js +5 -0
- package/dist/components/p-BgzjmANj.js.map +1 -0
- package/dist/components/p-BjvjKoy7.js +5 -0
- package/dist/components/p-BjvjKoy7.js.map +1 -0
- package/dist/components/p-Bwtyddca.js +5 -0
- package/dist/components/p-Bwtyddca.js.map +1 -0
- package/dist/components/{p-CMdP8O-G.js → p-Bx42CNGV.js} +2 -2
- package/dist/components/{p-CelQDFR0.js → p-C12jtCFb.js} +2 -2
- package/dist/components/p-C86HMDzi.js +5 -0
- package/dist/components/p-C86HMDzi.js.map +1 -0
- 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-BqeEZXPn.js → p-CPROw2BU.js} +2 -2
- package/dist/components/p-CSVgoQU8.js +5 -0
- package/dist/components/p-CSVgoQU8.js.map +1 -0
- package/dist/components/{p-DnVcQAR9.js → p-CTi-0-dI.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-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-DUo-H-nW.js +5 -0
- package/dist/components/p-DUo-H-nW.js.map +1 -0
- package/dist/components/{p-MnZadXO8.js → p-D_h07qsA.js} +2 -2
- 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/components/{p-CfTvpqud.js → p-KidjtXKE.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-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
- package/dist/components/{p-CNprIkKd.js → p-rDr0x5Z7.js} +2 -2
- package/dist/components/vertex-scene-tree-search.js +1 -1
- 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-Cqrcty7U.js} +3 -3
- package/dist/esm/{config-CyaUTJEG.js.map → config-Cqrcty7U.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-CawBZH7i.js} +4 -4
- package/dist/esm/{entities-DriL3zBC.js.map → entities-CawBZH7i.js.map} +1 -1
- package/dist/esm/{geometry_pb-BEB8SExe.js → geometry_pb-COdZQiRi.js} +3 -3
- package/dist/esm/{geometry_pb-BEB8SExe.js.map → geometry_pb-COdZQiRi.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-B4XotYyr.js} +5 -5
- package/dist/esm/queries-B4XotYyr.js.map +1 -0
- package/dist/esm/{regl-component-zzdsBise.js → regl-component-B1_h3_s8.js} +6 -6
- package/dist/esm/{regl-component-zzdsBise.js.map → regl-component-B1_h3_s8.js.map} +1 -1
- package/dist/esm/{representation_pb-CQdJxiGO.js → representation_pb-C4MJfZMo.js} +3 -3
- package/dist/esm/{representation_pb-CQdJxiGO.js.map → representation_pb-C4MJfZMo.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-BW9JzMeG.js} +117 -94
- package/dist/esm/streamAttributes-BW9JzMeG.js.map +1 -0
- 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 +2 -2
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +3 -3
- 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 +9 -8
- 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 +7 -7
- 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/types/workers/png-decoder-pool.d.ts +0 -1
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/{p-12a673f0.entry.js → p-1506f9a2.entry.js} +2 -2
- package/dist/viewer/p-1506f9a2.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-7b4eec65.entry.js → p-293d8f3f.entry.js} +2 -2
- 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-a108a305.entry.js → p-2faddbf8.entry.js} +2 -2
- package/dist/viewer/{p-e3981cf8.entry.js → p-36349a80.entry.js} +2 -2
- package/dist/viewer/p-36349a80.entry.js.map +1 -0
- package/dist/viewer/{p-aa0359e0.entry.js → p-3c5dd716.entry.js} +2 -2
- package/dist/viewer/p-44395076.entry.js +5 -0
- package/dist/viewer/p-44395076.entry.js.map +1 -0
- package/dist/viewer/{p-fe434552.entry.js → p-45cc095e.entry.js} +2 -2
- 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-56e39cff.entry.js → p-83683307.entry.js} +2 -2
- package/dist/viewer/{p-91fca24b.entry.js → p-93311f46.entry.js} +2 -2
- package/dist/viewer/{p-BIR7Lfxx.js → p-BEOO-Ypv.js} +2 -2
- package/dist/viewer/{p-BIR7Lfxx.js.map → p-BEOO-Ypv.js.map} +1 -1
- package/dist/viewer/{p-C6YtUG51.js → p-BJGbLthH.js} +2 -2
- package/dist/viewer/{p-C6YtUG51.js.map → p-BJGbLthH.js.map} +1 -1
- 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-C-huOg09.js → p-Br21pGVj.js} +2 -2
- package/dist/viewer/{p-C-huOg09.js.map → p-Br21pGVj.js.map} +1 -1
- package/dist/viewer/{p-Ce1j43tF.js → p-Bw_ryWU0.js} +2 -2
- package/dist/viewer/{p-Ce1j43tF.js.map → p-Bw_ryWU0.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-B-J4CqZy.js → p-C4_1Jc7H.js} +2 -2
- package/dist/viewer/{p-B-J4CqZy.js.map → p-C4_1Jc7H.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-Cc3XhAoA.js +5 -0
- package/dist/viewer/p-Cc3XhAoA.js.map +1 -0
- 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-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-UQXG8bCI.js → p-DBfvBC5O.js} +2 -2
- package/dist/viewer/p-DBfvBC5O.js.map +1 -0
- 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-Cju1inFh.js → p-DYDhLlLS.js} +2 -2
- package/dist/viewer/p-DYDhLlLS.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-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
- package/dist/viewer/{p-mpsCUvSn.js.map → p-_qi2VkC2.js.map} +1 -1
- package/dist/viewer/{p-9312a936.entry.js → p-a94b626c.entry.js} +2 -2
- package/dist/viewer/p-b5cc83a4.entry.js.map +1 -1
- 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-ce711ae0.entry.js +5 -0
- package/dist/viewer/p-ce711ae0.entry.js.map +1 -0
- package/dist/viewer/{p-82ed4346.entry.js → p-ced98004.entry.js} +2 -2
- package/dist/viewer/p-d357d235.entry.js.map +1 -1
- package/dist/viewer/p-dcb6ddfe.entry.js +5 -0
- package/dist/viewer/p-dcb6ddfe.entry.js.map +1 -0
- package/dist/viewer/p-e98db875.entry.js.map +1 -1
- package/dist/viewer/{p-c2454523.entry.js → p-ea45c3e9.entry.js} +2 -2
- package/dist/viewer/p-ebd9dd99.entry.js +5 -0
- package/dist/viewer/p-ebd9dd99.entry.js.map +1 -0
- package/dist/viewer/{p-a893a299.entry.js → p-ecd594f2.entry.js} +2 -2
- package/dist/viewer/{p-03a531d9.entry.js → p-ef9437ca.entry.js} +2 -2
- package/dist/viewer/p-fec5a15d.entry.js +5 -0
- package/dist/viewer/p-fec5a15d.entry.js.map +1 -0
- package/dist/viewer/p-ipyYHvea.js.map +1 -1
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +10 -10
- 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/streamAttributes-CJOD7AxG.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 +0 -5
- package/dist/components/p-DH341c7b.js.map +0 -1
- package/dist/components/p-DjrtwKcK.js +0 -5
- package/dist/components/p-DjrtwKcK.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-Y8W_BXUk.js +0 -5
- package/dist/components/p-Y8W_BXUk.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/streamAttributes-CTs61PCl.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 +0 -5
- 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.map +0 -1
- package/dist/viewer/p-Cr2EnhS-.js +0 -5
- package/dist/viewer/p-Cr2EnhS-.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 +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-CZgX-9yo.js.map → p-5bk1mHRt.js.map} +0 -0
- /package/dist/components/{p-DRGCkSEK.js.map → p-B8530k7R.js.map} +0 -0
- /package/dist/components/{p-BKQMbekH.js.map → p-BCuMPvZO.js.map} +0 -0
- /package/dist/components/{p-C02XtMl4.js.map → p-BHyxBmg6.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-CMdP8O-G.js.map → p-Bx42CNGV.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-BqeEZXPn.js.map → p-CPROw2BU.js.map} +0 -0
- /package/dist/components/{p-DnVcQAR9.js.map → p-CTi-0-dI.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-MnZadXO8.js.map → p-D_h07qsA.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-CfTvpqud.js.map → p-KidjtXKE.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-7b4eec65.entry.js.map → p-293d8f3f.entry.js.map} +0 -0
- /package/dist/viewer/{p-510fd2e1.entry.js.map → p-2d2fa147.entry.js.map} +0 -0
- /package/dist/viewer/{p-a108a305.entry.js.map → p-2faddbf8.entry.js.map} +0 -0
- /package/dist/viewer/{p-aa0359e0.entry.js.map → p-3c5dd716.entry.js.map} +0 -0
- /package/dist/viewer/{p-fe434552.entry.js.map → p-45cc095e.entry.js.map} +0 -0
- /package/dist/viewer/{p-71c03352.entry.js.map → p-53f6cc59.entry.js.map} +0 -0
- /package/dist/viewer/{p-56e39cff.entry.js.map → p-83683307.entry.js.map} +0 -0
- /package/dist/viewer/{p-91fca24b.entry.js.map → p-93311f46.entry.js.map} +0 -0
- /package/dist/viewer/{p-9312a936.entry.js.map → p-a94b626c.entry.js.map} +0 -0
- /package/dist/viewer/{p-82ed4346.entry.js.map → p-ced98004.entry.js.map} +0 -0
- /package/dist/viewer/{p-c2454523.entry.js.map → p-ea45c3e9.entry.js.map} +0 -0
- /package/dist/viewer/{p-a893a299.entry.js.map → p-ecd594f2.entry.js.map} +0 -0
- /package/dist/viewer/{p-03a531d9.entry.js.map → p-ef9437ca.entry.js.map} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{e as t,p as r,v as s,r as o,g as n}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{e as t,p as r,v as s,r as o,g as n}from"./p-2UsvOTHJ.js";class i{constructor(r,s){this.width=r;this.height=s;this.center=t.center(this.dimensions)}static fromDimensions(t){return new i(t.width,t.height)}transformNdcPointToViewport(t){return r.create(t.x*this.center.x+this.center.x,-t.y*this.center.y+this.center.y)}transformVectorToViewport(t){return this.transformNdcPointToViewport(t)}transformWorldToViewport(t,r){const o=s.multiplyByTransformMatrixColumnMajor(t,r);return this.transformVectorToViewport(o)}transformPointToViewport(t,s){const{x:o,y:n}=this.calculateFrameScale(s);return r.scale(t,1*o,1*n)}transformPointToFrame(t,s){const{x:o,y:n}=this.calculateFrameScale(s);return r.scale(t,1/o,1/n)}transformPointToWorldSpace(t,r,s){const o=this.transformPointToFrame(t,r);const n=this.transformPointToRay(t,r,r.camera);return r.getWorldPoint(o,n,s)}transformPointToRay(t,r,n){const i=this.transformScreenPointToNdc(t,r);if(n.isPerspective()){const t=s.fromMatrixPosition(n.worldMatrix);const r=s.transformNdcToWorldSpace(s.create(i.x,i.y,.5),n.worldMatrix,n.projectionMatrixInverse);const e=s.normalize(s.subtract(r,t));return o.create({origin:t,direction:e})}else{const t=s.transformNdcToWorldSpace(s.create(i.x,i.y,0),n.worldMatrix,n.projectionMatrixInverse);return o.create({origin:t,direction:s.normalize(n.viewVector)})}}transformScreenPointToNdc(t,s){const o=this.transformPointToFrame(t,s);return r.create(o.x/s.imageAttr.frameDimensions.width*2-1,-(o.y/s.imageAttr.frameDimensions.height)*2+1)}calculateDrawRect(t){const{x:r,y:s}=this.calculateFrameScale(t);return n.scale(t.imageAttr.imageRect,r,s)}calculateFrameScale(t){const{frameDimensions:s}=t.imageAttr;const o=n.fromDimensions(s);const i=n.fromDimensions(this.dimensions);const e=n.containFit(i,o);const c=e.width/o.width;const a=e.height/o.height;return r.create(c,a)}get dimensions(){return t.create(this.width,this.height)}}export{i as V};
|
|
5
|
+
//# sourceMappingURL=p-CeZe0Qql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-EG7pMA2M.js","sources":["src/lib/types/viewport.ts"],"sourcesContent":["import {\n Dimensions,\n Matrix4,\n Point,\n Ray,\n Rectangle,\n Vector3,\n} from '@vertexvis/geometry';\n\nimport { DepthBuffer } from './depthBuffer';\nimport type { FrameCameraBase, FrameImageLike } from './frame';\n\n/**\n * A `Viewport` represents the drawing area in the viewer.\n *\n * When a frame is received from the rendering pipeline, it might not be the\n * same dimensions of the viewport because of an interactive frame or because of\n * bandwidth limitations or other performance reasons.\n *\n * The viewport contains methods to scale an image to the viewport, as well as\n * translate 2D coordinates between the viewport and the frame.\n */\nexport class Viewport implements Dimensions.Dimensions {\n /**\n * The center point of the viewport.\n */\n public readonly center: Point.Point;\n\n public constructor(\n /**\n * The width of the viewport.\n */\n public readonly width: number,\n\n /**\n * The height of the viewport.\n */\n public readonly height: number,\n ) {\n this.center = Dimensions.center(this.dimensions);\n }\n\n /**\n * Returns a new viewport with the given dimensions.\n * @param dimensions The dimensions of the viewport\n * @returns A new viewport.\n */\n public static fromDimensions(dimensions: Dimensions.Dimensions): Viewport {\n return new Viewport(dimensions.width, dimensions.height);\n }\n\n /**\n * Transforms a normalized device coordinate to a 2D point within the\n * viewport.\n *\n * @param ndc A 2D point in NDC.\n * @returns A 2D point in the coordinate space of the viewport.\n */\n public transformNdcPointToViewport(ndc: Point.Point): Point.Point {\n return Point.create(\n ndc.x * this.center.x + this.center.x,\n -ndc.y * this.center.y + this.center.y,\n );\n }\n\n /**\n * Transforms a normalized device coordinate to a 2D point within the\n * viewport.\n *\n * @param ndc A 3D point in NDC.\n * @returns A 2D point in the coordinate space of the viewport.\n */\n public transformVectorToViewport(ndc: Vector3.Vector3): Point.Point {\n return this.transformNdcPointToViewport(ndc);\n }\n\n /**\n * Transforms a world point to 2D point in viewport space.\n *\n * @param worldPt The world point to transform.\n * @param projectionViewMatrix The projection matrix to transform a 3D point to 2D point.\n * @returns A point in viewport space.\n */\n public transformWorldToViewport(\n worldPt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n ): Point.Point {\n const ndc = Vector3.multiplyByTransformMatrixColumnMajor(\n worldPt,\n projectionViewMatrix,\n );\n return this.transformVectorToViewport(ndc);\n }\n\n public transformPointToViewport(\n pt: Point.Point,\n image: FrameImageLike,\n ): Point.Point {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Point.scale(pt, 1 * scaleX, 1 * scaleY);\n }\n\n /**\n * Transforms a point in viewport coordinate space to a point in a frame's\n * coordinate space.\n *\n * @param pt A point in viewport coordinate space.\n * @param image An image of a frame.\n * @returns A point in the coordinate space of the frame.\n */\n public transformPointToFrame(\n pt: Point.Point,\n image: FrameImageLike,\n ): Point.Point {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Point.scale(pt, 1 / scaleX, 1 / scaleY);\n }\n\n /**\n * Transforms a point in viewport coordinates to a point in world space\n * coordinates. This method expects a depth buffer in order to compute a value\n * for the Z axis.\n *\n * @param pt A point in viewport coordinates.\n * @param depthBuffer A depth buffer for computing the Z axis.\n * @param fallbackNormalizedDepth A fallback value if the depth is the max\n * depth value, or cannot be determined.\n * @returns\n */\n public transformPointToWorldSpace(\n pt: Point.Point,\n depthBuffer: DepthBuffer,\n fallbackNormalizedDepth?: number,\n ): Vector3.Vector3 {\n const depthPt = this.transformPointToFrame(pt, depthBuffer);\n const ray = this.transformPointToRay(pt, depthBuffer, depthBuffer.camera);\n return depthBuffer.getWorldPoint(depthPt, ray, fallbackNormalizedDepth);\n }\n\n /**\n * Transforms a point in viewport coordinates to a ray.\n *\n * For perspective cameras, the returned ray will have an\n * origin that is at the position of the camera with a direction\n * that is pointing into world space away from the camera.\n *\n * For orthographic cameras, the returned ray will have an\n * origin that is at the world point of viewport coordinate\n * with a direction that is pointing into world space away\n * from the camera.\n *\n * @param pt A point in viewport coordinates.\n * @param image An image of a frame.\n * @param camera A camera used to determine orientation of the scene.\n * @returns A ray\n */\n public transformPointToRay(\n pt: Point.Point,\n image: FrameImageLike,\n camera: FrameCameraBase,\n ): Ray.Ray {\n const ndc = this.transformScreenPointToNdc(pt, image);\n\n // Calculate the ray depending on the camera type\n if (camera.isPerspective()) {\n const origin = Vector3.fromMatrixPosition(camera.worldMatrix);\n const lookAtPoint = Vector3.transformNdcToWorldSpace(\n Vector3.create(ndc.x, ndc.y, 0.5),\n camera.worldMatrix,\n camera.projectionMatrixInverse,\n );\n const direction = Vector3.normalize(\n Vector3.subtract(lookAtPoint, origin),\n );\n return Ray.create({ origin, direction });\n } else {\n const origin = Vector3.transformNdcToWorldSpace(\n Vector3.create(ndc.x, ndc.y, 0),\n camera.worldMatrix,\n camera.projectionMatrixInverse,\n );\n return Ray.create({\n origin,\n direction: Vector3.normalize(camera.viewVector),\n });\n }\n }\n\n /**\n * Maps a screen point to normalized device coordinates (NDC). A screen point\n * at 0,0 represents the top-left of the viewport.\n *\n * @param screenPt A screen point.\n */\n public transformScreenPointToNdc(\n screenPt: Point.Point,\n image: FrameImageLike,\n ): Point.Point {\n const framePt = this.transformPointToFrame(screenPt, image);\n return Point.create(\n (framePt.x / image.imageAttr.frameDimensions.width) * 2 - 1,\n -(framePt.y / image.imageAttr.frameDimensions.height) * 2 + 1,\n );\n }\n\n /**\n * Computes a rectangle that is scaled correctly to be drawn within the\n * viewport.\n *\n * @param image The image to be drawn.\n * @param imageDimensions The dimensions of the received image.\n * @returns A rectangle.\n */\n public calculateDrawRect(image: FrameImageLike): Rectangle.Rectangle {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Rectangle.scale(image.imageAttr.imageRect, scaleX, scaleY);\n }\n\n private calculateFrameScale(image: FrameImageLike): Point.Point {\n const { frameDimensions: dimensions } = image.imageAttr;\n\n const imageRect = Rectangle.fromDimensions(dimensions);\n const viewport = Rectangle.fromDimensions(this.dimensions);\n const fit = Rectangle.containFit(viewport, imageRect);\n\n const scaleX = fit.width / imageRect.width;\n const scaleY = fit.height / imageRect.height;\n\n return Point.create(scaleX, scaleY);\n }\n\n public get dimensions(): Dimensions.Dimensions {\n return Dimensions.create(this.width, this.height);\n }\n}\n"],"names":["Dimensions","Point","Vector3","Ray","Rectangle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-CeZe0Qql.js","sources":["src/lib/types/viewport.ts"],"sourcesContent":["import {\n Dimensions,\n Matrix4,\n Point,\n Ray,\n Rectangle,\n Vector3,\n} from '@vertexvis/geometry';\n\nimport { DepthBuffer } from './depthBuffer';\nimport type { FrameCameraBase, FrameImageLike } from './frame';\n\n/**\n * A `Viewport` represents the drawing area in the viewer.\n *\n * When a frame is received from the rendering pipeline, it might not be the\n * same dimensions of the viewport because of an interactive frame or because of\n * bandwidth limitations or other performance reasons.\n *\n * The viewport contains methods to scale an image to the viewport, as well as\n * translate 2D coordinates between the viewport and the frame.\n */\nexport class Viewport implements Dimensions.Dimensions {\n /**\n * The center point of the viewport.\n */\n public readonly center: Point.Point;\n\n public constructor(\n /**\n * The width of the viewport.\n */\n public readonly width: number,\n\n /**\n * The height of the viewport.\n */\n public readonly height: number,\n ) {\n this.center = Dimensions.center(this.dimensions);\n }\n\n /**\n * Returns a new viewport with the given dimensions.\n * @param dimensions The dimensions of the viewport\n * @returns A new viewport.\n */\n public static fromDimensions(dimensions: Dimensions.Dimensions): Viewport {\n return new Viewport(dimensions.width, dimensions.height);\n }\n\n /**\n * Transforms a normalized device coordinate to a 2D point within the\n * viewport.\n *\n * @param ndc A 2D point in NDC.\n * @returns A 2D point in the coordinate space of the viewport.\n */\n public transformNdcPointToViewport(ndc: Point.Point): Point.Point {\n return Point.create(\n ndc.x * this.center.x + this.center.x,\n -ndc.y * this.center.y + this.center.y,\n );\n }\n\n /**\n * Transforms a normalized device coordinate to a 2D point within the\n * viewport.\n *\n * @param ndc A 3D point in NDC.\n * @returns A 2D point in the coordinate space of the viewport.\n */\n public transformVectorToViewport(ndc: Vector3.Vector3): Point.Point {\n return this.transformNdcPointToViewport(ndc);\n }\n\n /**\n * Transforms a world point to 2D point in viewport space.\n *\n * @param worldPt The world point to transform.\n * @param projectionViewMatrix The projection matrix to transform a 3D point to 2D point.\n * @returns A point in viewport space.\n */\n public transformWorldToViewport(\n worldPt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n ): Point.Point {\n const ndc = Vector3.multiplyByTransformMatrixColumnMajor(\n worldPt,\n projectionViewMatrix,\n );\n return this.transformVectorToViewport(ndc);\n }\n\n public transformPointToViewport(\n pt: Point.Point,\n image: FrameImageLike,\n ): Point.Point {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Point.scale(pt, 1 * scaleX, 1 * scaleY);\n }\n\n /**\n * Transforms a point in viewport coordinate space to a point in a frame's\n * coordinate space.\n *\n * @param pt A point in viewport coordinate space.\n * @param image An image of a frame.\n * @returns A point in the coordinate space of the frame.\n */\n public transformPointToFrame(\n pt: Point.Point,\n image: FrameImageLike,\n ): Point.Point {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Point.scale(pt, 1 / scaleX, 1 / scaleY);\n }\n\n /**\n * Transforms a point in viewport coordinates to a point in world space\n * coordinates. This method expects a depth buffer in order to compute a value\n * for the Z axis.\n *\n * @param pt A point in viewport coordinates.\n * @param depthBuffer A depth buffer for computing the Z axis.\n * @param fallbackNormalizedDepth A fallback value if the depth is the max\n * depth value, or cannot be determined.\n * @returns\n */\n public transformPointToWorldSpace(\n pt: Point.Point,\n depthBuffer: DepthBuffer,\n fallbackNormalizedDepth?: number,\n ): Vector3.Vector3 {\n const depthPt = this.transformPointToFrame(pt, depthBuffer);\n const ray = this.transformPointToRay(pt, depthBuffer, depthBuffer.camera);\n return depthBuffer.getWorldPoint(depthPt, ray, fallbackNormalizedDepth);\n }\n\n /**\n * Transforms a point in viewport coordinates to a ray.\n *\n * For perspective cameras, the returned ray will have an\n * origin that is at the position of the camera with a direction\n * that is pointing into world space away from the camera.\n *\n * For orthographic cameras, the returned ray will have an\n * origin that is at the world point of viewport coordinate\n * with a direction that is pointing into world space away\n * from the camera.\n *\n * @param pt A point in viewport coordinates.\n * @param image An image of a frame.\n * @param camera A camera used to determine orientation of the scene.\n * @returns A ray\n */\n public transformPointToRay(\n pt: Point.Point,\n image: FrameImageLike,\n camera: FrameCameraBase,\n ): Ray.Ray {\n const ndc = this.transformScreenPointToNdc(pt, image);\n\n // Calculate the ray depending on the camera type\n if (camera.isPerspective()) {\n const origin = Vector3.fromMatrixPosition(camera.worldMatrix);\n const lookAtPoint = Vector3.transformNdcToWorldSpace(\n Vector3.create(ndc.x, ndc.y, 0.5),\n camera.worldMatrix,\n camera.projectionMatrixInverse,\n );\n const direction = Vector3.normalize(\n Vector3.subtract(lookAtPoint, origin),\n );\n return Ray.create({ origin, direction });\n } else {\n const origin = Vector3.transformNdcToWorldSpace(\n Vector3.create(ndc.x, ndc.y, 0),\n camera.worldMatrix,\n camera.projectionMatrixInverse,\n );\n return Ray.create({\n origin,\n direction: Vector3.normalize(camera.viewVector),\n });\n }\n }\n\n /**\n * Maps a screen point to normalized device coordinates (NDC). A screen point\n * at 0,0 represents the top-left of the viewport.\n *\n * @param screenPt A screen point.\n */\n public transformScreenPointToNdc(\n screenPt: Point.Point,\n image: FrameImageLike,\n ): Point.Point {\n const framePt = this.transformPointToFrame(screenPt, image);\n return Point.create(\n (framePt.x / image.imageAttr.frameDimensions.width) * 2 - 1,\n -(framePt.y / image.imageAttr.frameDimensions.height) * 2 + 1,\n );\n }\n\n /**\n * Computes a rectangle that is scaled correctly to be drawn within the\n * viewport.\n *\n * @param image The image to be drawn.\n * @param imageDimensions The dimensions of the received image.\n * @returns A rectangle.\n */\n public calculateDrawRect(image: FrameImageLike): Rectangle.Rectangle {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Rectangle.scale(image.imageAttr.imageRect, scaleX, scaleY);\n }\n\n private calculateFrameScale(image: FrameImageLike): Point.Point {\n const { frameDimensions: dimensions } = image.imageAttr;\n\n const imageRect = Rectangle.fromDimensions(dimensions);\n const viewport = Rectangle.fromDimensions(this.dimensions);\n const fit = Rectangle.containFit(viewport, imageRect);\n\n const scaleX = fit.width / imageRect.width;\n const scaleY = fit.height / imageRect.height;\n\n return Point.create(scaleX, scaleY);\n }\n\n public get dimensions(): Dimensions.Dimensions {\n return Dimensions.create(this.width, this.height);\n }\n}\n"],"names":["Dimensions","Point","Vector3","Ray","Rectangle"],"mappings":";;;;;AAYA;;;;;;;;;AASG;MACU,QAAQ,CAAA;AAMnB,IAAA,WAAA;AACE;;AAEG;IACa,KAAa;AAE7B;;AAEG;IACa,MAAc,EAAA;AALd,QAAA,IAAA,CAAA,KAAK,GAAL,KAAK;AAKL,QAAA,IAAA,CAAA,MAAM,GAAN,MAAM;QAEtB,IAAI,CAAC,MAAM,GAAGA,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;;AAGlD;;;;AAIG;IACI,OAAO,cAAc,CAAC,UAAiC,EAAA;QAC5D,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;;AAG1D;;;;;;AAMG;AACI,IAAA,2BAA2B,CAAC,GAAgB,EAAA;AACjD,QAAA,OAAOC,KAAK,CAAC,MAAM,CACjB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EACrC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CACvC;;AAGH;;;;;;AAMG;AACI,IAAA,yBAAyB,CAAC,GAAoB,EAAA;AACnD,QAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC;;AAG9C;;;;;;AAMG;IACI,wBAAwB,CAC7B,OAAwB,EACxB,oBAAqC,EAAA;QAErC,MAAM,GAAG,GAAGC,OAAO,CAAC,oCAAoC,CACtD,OAAO,EACP,oBAAoB,CACrB;AACD,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC;;IAGrC,wBAAwB,CAC7B,EAAe,EACf,KAAqB,EAAA;AAErB,QAAA,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAChE,QAAA,OAAOD,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;;AAGhD;;;;;;;AAOG;IACI,qBAAqB,CAC1B,EAAe,EACf,KAAqB,EAAA;AAErB,QAAA,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAChE,QAAA,OAAOA,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;;AAGhD;;;;;;;;;;AAUG;AACI,IAAA,0BAA0B,CAC/B,EAAe,EACf,WAAwB,EACxB,uBAAgC,EAAA;QAEhC,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,EAAE,WAAW,CAAC;AAC3D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC;QACzE,OAAO,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,uBAAuB,CAAC;;AAGzE;;;;;;;;;;;;;;;;AAgBG;AACI,IAAA,mBAAmB,CACxB,EAAe,EACf,KAAqB,EACrB,MAAuB,EAAA;QAEvB,MAAM,GAAG,GAAG,IAAI,CAAC,yBAAyB,CAAC,EAAE,EAAE,KAAK,CAAC;;AAGrD,QAAA,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAGC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC;AAC7D,YAAA,MAAM,WAAW,GAAGA,OAAO,CAAC,wBAAwB,CAClDA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EACjC,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,uBAAuB,CAC/B;AACD,YAAA,MAAM,SAAS,GAAGA,OAAO,CAAC,SAAS,CACjCA,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CACtC;YACD,OAAOC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;;aACnC;AACL,YAAA,MAAM,MAAM,GAAGD,OAAO,CAAC,wBAAwB,CAC7CA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAC/B,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,uBAAuB,CAC/B;YACD,OAAOC,GAAG,CAAC,MAAM,CAAC;gBAChB,MAAM;gBACN,SAAS,EAAED,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;AAChD,aAAA,CAAC;;;AAIN;;;;;AAKG;IACI,yBAAyB,CAC9B,QAAqB,EACrB,KAAqB,EAAA;QAErB,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC;AAC3D,QAAA,OAAOD,KAAK,CAAC,MAAM,CACjB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAC3D,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAC9D;;AAGH;;;;;;;AAOG;AACI,IAAA,iBAAiB,CAAC,KAAqB,EAAA;AAC5C,QAAA,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAChE,QAAA,OAAOG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;;AAG3D,IAAA,mBAAmB,CAAC,KAAqB,EAAA;QAC/C,MAAM,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,SAAS;QAEvD,MAAM,SAAS,GAAGA,SAAS,CAAC,cAAc,CAAC,UAAU,CAAC;QACtD,MAAM,QAAQ,GAAGA,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1D,MAAM,GAAG,GAAGA,SAAS,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;QAErD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK;QAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;QAE5C,OAAOH,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;AAGrC,IAAA,IAAW,UAAU,GAAA;AACnB,QAAA,OAAOD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;;AAEpD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-CioaIHsi.js","sources":["src/lib/grpc.ts"],"sourcesContent":["import { grpc } from '@improbable-eng/grpc-web';\n\nexport type GrpcCaller<R, E> = (\n handler: GrpcHandler<R, E>,\n) => void | Promise<void>;\n\ntype GrpcHandler<R, E> = (err: E | null, res: R | null) => void | Promise<void>;\n\nexport type JwtProvider = () =>\n
|
|
1
|
+
{"version":3,"file":"p-CioaIHsi.js","sources":["src/lib/grpc.ts"],"sourcesContent":["import { grpc } from '@improbable-eng/grpc-web';\n\nexport type GrpcCaller<R, E> = (\n handler: GrpcHandler<R, E>,\n) => void | Promise<void>;\n\ntype GrpcHandler<R, E> = (err: E | null, res: R | null) => void | Promise<void>;\n\nexport type JwtProvider = () =>\n Promise<string | undefined> | string | undefined;\n\nexport function requestUnary<R, E = unknown>(\n caller: GrpcCaller<R, E>,\n): Promise<R> {\n return new Promise((resolve, reject) => {\n caller((err, res) => {\n if (err != null) {\n reject(err instanceof Error ? err : new Error(String(err)));\n } else if (res != null) {\n resolve(res);\n } else {\n reject(new Error('Invalid gRPC response. Error and result are empty.'));\n }\n });\n });\n}\n\nexport async function* requestPaged<R, E = unknown>(\n fetch: (cursor: string | undefined) => GrpcCaller<R, E>,\n next: (res: R) => string | undefined,\n): AsyncGenerator<R, void, void> {\n let cursor = undefined;\n\n do {\n const res = await requestUnary(fetch(cursor));\n yield res;\n cursor = next(res);\n } while (cursor != null);\n}\n\nexport async function createMetadata(\n jwtProvider: JwtProvider,\n deviceId?: string,\n): Promise<grpc.Metadata> {\n const jwt = await jwtProvider();\n const meta = new grpc.Metadata({\n 'jwt-context': JSON.stringify({\n jwt,\n metadata: { 'x-device-id': deviceId || '' },\n }),\n });\n\n return meta;\n}\n"],"names":["grpc"],"mappings":";;;;;AAWM,SAAU,YAAY,CAC1B,MAAwB,EAAA;IAExB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,QAAA,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AAClB,YAAA,IAAI,GAAG,IAAI,IAAI,EAAE;gBACf,MAAM,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;;AACtD,iBAAA,IAAI,GAAG,IAAI,IAAI,EAAE;gBACtB,OAAO,CAAC,GAAG,CAAC;;iBACP;AACL,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;;AAE3E,SAAC,CAAC;AACJ,KAAC,CAAC;AACJ;AAEO,gBAAgB,YAAY,CACjC,KAAuD,EACvD,IAAoC,EAAA;IAEpC,IAAI,MAAM,GAAG,SAAS;AAEtB,IAAA,GAAG;QACD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC7C,QAAA,MAAM,GAAG;AACT,QAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;AACpB,KAAC,QAAQ,MAAM,IAAI,IAAI;AACzB;AAEO,eAAe,cAAc,CAClC,WAAwB,EACxB,QAAiB,EAAA;AAEjB,IAAA,MAAM,GAAG,GAAG,MAAM,WAAW,EAAE;AAC/B,IAAA,MAAM,IAAI,GAAG,IAAIA,6BAAI,CAAC,QAAQ,CAAC;AAC7B,QAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;YAC5B,GAAG;AACH,YAAA,QAAQ,EAAE,EAAE,aAAa,EAAE,QAAQ,IAAI,EAAE,EAAE;SAC5C,CAAC;AACH,KAAA,CAAC;AAEF,IAAA,OAAO,IAAI;AACb;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{p as t,e as i}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{p as t,e as i}from"./p-2UsvOTHJ.js";import{r as s,E as n,c as e}from"./p-CDM7zNn0.js";class o{constructor(t,i="view",s="pin-icon",n=undefined){this.model=t;this.mode=i;this.type=s;this.styleAttributes=n}addPin(t){this.model.addPin(t)}clearPins(){this.model.clearPins()}removePin(t){this.model.removePin(t)}setPins(t){this.model.setPins(t)}setPin(t){this.model.setPin(t)}updatePin(t){this.model.updatePin(t)}setSelectedPinId(t){this.model.setSelectedPin(t)}getToolMode(){return this.mode}getToolType(){return this.type}setToolMode(t){this.mode=t}setToolType(t){this.type=t}getDraggable(){return this.draggable}setDraggable(t){this.draggable=t}setPrimaryColor(t){this.styleAttributes={...this.styleAttributes,primaryColor:t}}setAccentColor(t){this.styleAttributes={...this.styleAttributes,accentColor:t}}getStyleAttributes(){return this.styleAttributes}updateDraggable(t,i,s){if(this.draggable!=null){this.draggable=t}const n=this.model.getPinById(t.id);if(n!=null){this.updatePin({...n,worldPosition:i,partId:s})}}}function r(i,s){const n=Math.max(s.start,Math.min(s.end,i.x));const e=Math.max(s.start,Math.min(s.end,i.y));return t.create(n,e)}function h(s,n){return t.add(t.scale(s,n.width,n.height),i.center(n))}function l(n,e,o,h,l){const u=1/e.height;const d=1/e.width;const a=i.center(e);const c=t.scale(t.subtract(n,a),d,u);if(o){const i=t.scale(t.create(h,l),d,u);const e=a.x>n.x;const o=e?i.x:-3*i.x;const v=a.y>n.y;const f=v?i.y:-3*i.y;const P=t.add(c,t.create(o,f));return r(P,s.create(-.5,.5))}else{return r(c,s.create(-.5,.5))}}function u(t){return(t===null||t===void 0?void 0:t.type)==="text"}function d(t){return(t===null||t===void 0?void 0:t.type)==="icon"}function a(t){return typeof t==="string"?t:e.toHexString(t)}function c(t){var i,s,n,e,o,r,h,l;return{primaryColor:((s=(i=t===null||t===void 0?void 0:t.attributes)===null||i===void 0?void 0:i.style)===null||s===void 0?void 0:s.primaryColor)==null?undefined:a((e=(n=t===null||t===void 0?void 0:t.attributes)===null||n===void 0?void 0:n.style)===null||e===void 0?void 0:e.primaryColor),accentColor:((r=(o=t===null||t===void 0?void 0:t.attributes)===null||o===void 0?void 0:o.style)===null||r===void 0?void 0:r.accentColor)==null?undefined:a((l=(h=t===null||t===void 0?void 0:t.attributes)===null||h===void 0?void 0:h.style)===null||l===void 0?void 0:l.accentColor)}}class v{constructor(){this.entities={};this.entityAdded=new n;this.entityUpdated=new n;this.entitiesChanged=new n;this.selectionChanged=new n}addPin(t,i=false){if(this.entities[t.id]==null){this.entities={...this.entities,[t.id]:t};if(!i){this.entitiesChanged.emit(this.getPins());this.entityAdded.emit(t)}return true}else{return false}}clearPins(){this.getPins().forEach((t=>this.removePin(t)))}getPins(){return Object.keys(this.entities).map((t=>this.entities[t]))}getPinById(t){return this.entities[t]}getSelectedPinId(){return this.selectedPinId}removePin(t){if(this.entities[t.id]!=null){delete this.entities[t.id];this.entitiesChanged.emit(this.getPins());return true}else{return false}}setPins(t){this.clearPins();t.forEach((t=>this.addPin(t,true)));this.entitiesChanged.emit(this.getPins());return true}setPin(t){const i=this.entities[t.id]==null;this.entities={...this.entities,[t.id]:t};this.entitiesChanged.emit(this.getPins());if(i){this.entityAdded.emit(t)}return true}updatePin(t){const i=this.getPinById(t.id);if(i!=null){this.entities={...this.entities,[t.id]:t};this.entitiesChanged.emit(this.getPins());this.entityUpdated.emit(t);return true}return false}onEntitiesChanged(t){return this.entitiesChanged.on(t)}onEntityAdded(t){return this.entityAdded.on(t)}onEntityUpdated(t){return this.entityUpdated.on(t)}onSelectionChange(t){return this.selectionChanged.on(t)}setSelectedPin(t){this.selectedPinId=t;this.selectionChanged.emit(this.selectedPinId)}}export{v as P,o as a,u as b,h as c,c as g,d as i,l as t};
|
|
5
|
+
//# sourceMappingURL=p-CxBXErQ8.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-EUeCUp3y.js","sources":["src/lib/pins/controller.ts","src/components/viewer-pin-tool/utils.ts","src/lib/pins/model.ts"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\n\nimport {\n Pin,\n PinModel,\n PinStyleAttributes,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from './model';\n\nexport interface Draggable {\n id: string;\n lastPoint?: Point.Point;\n}\n\n/**\n * The `PinController` is responsible for adding pin entities to the viewer canvas\n */\nexport class PinController {\n private draggable?: Draggable;\n\n public constructor(\n private model: PinModel,\n private mode: ViewerPinToolMode = 'view',\n private type: ViewerPinToolType = 'pin-icon',\n private styleAttributes: PinStyleAttributes | undefined = undefined,\n ) {}\n\n /**\n * Registers an entity to place on the canvas and places the pin on the associated part.\n *\n * @param pin The pin entity\n * @returns A void promise\n */\n public addPin(pin: Pin): void {\n this.model.addPin(pin);\n }\n\n /**\n * Clears all entities and returns a promise that resolves with an empty list\n * of pin results.\n */\n public clearPins(): void {\n this.model.clearPins();\n }\n\n /**\n * Deregisters an entity and performs a pin if this entity was\n * removed.\n *\n * @param entity The entity to remove.\n * @returns A promise that resolves with the results after removing this\n * entity.\n */\n public removePin(pin: Pin): void {\n this.model.removePin(pin);\n }\n\n /**\n * Registers a set of entities and adds a pin\n *\n * @param entities The pin entities to draw.\n * @returns A promise that resolves with the results after registering these\n * entities.\n */\n public setPins(pins: Set<Pin>): void {\n this.model.setPins(pins);\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param pin A pin to set\n * @returns `true` if the entity has been added.\n */\n public setPin(pin: Pin): void {\n this.model.setPin(pin);\n }\n\n /**\n * Updates an existing pin\n * @param pin A pin to set\n * @returns `true` if the entity has been updated, false otherwise\n */\n public updatePin(pin: Pin): void {\n this.model.updatePin(pin);\n }\n\n /**\n * Tells the controller which pin is selected in the model\n * @param pinId\n */\n public setSelectedPinId(pinId?: string): void {\n this.model.setSelectedPin(pinId);\n }\n\n public getToolMode(): ViewerPinToolMode {\n return this.mode;\n }\n\n public getToolType(): ViewerPinToolType {\n return this.type;\n }\n\n public setToolMode(mode: ViewerPinToolMode): void {\n this.mode = mode;\n }\n\n public setToolType(type: ViewerPinToolType): void {\n this.type = type;\n }\n\n public getDraggable(): Draggable | undefined {\n return this.draggable;\n }\n\n public setDraggable(draggable: Draggable | undefined): void {\n this.draggable = draggable;\n }\n\n public setPrimaryColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n primaryColor: color,\n };\n }\n\n public setAccentColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n accentColor: color,\n };\n }\n\n public getStyleAttributes(): PinStyleAttributes | undefined {\n return this.styleAttributes;\n }\n\n public updateDraggable(\n draggable: Draggable,\n worldPosition: Vector3.Vector3,\n partId?: string,\n ): void {\n if (this.draggable != null) {\n this.draggable = draggable;\n }\n const pin = this.model.getPinById(draggable.id);\n if (pin != null) {\n this.updatePin({\n ...pin,\n worldPosition,\n partId,\n });\n }\n }\n}\n","import { Dimensions, Point } from '@vertexvis/geometry';\nimport { Range } from '@vertexvis/utils';\n\nexport function constrainRelativePoint(\n pt: Point.Point,\n range: Range.Range,\n): Point.Point {\n const constrainedX = Math.max(range.start, Math.min(range.end, pt.x));\n const constrainedY = Math.max(range.start, Math.min(range.end, pt.y));\n\n return Point.create(constrainedX, constrainedY);\n}\n\n/**\n * Translates a point in relative units to a point in screen units.\n */\nexport function translatePointToScreen(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n): Point.Point {\n return Point.add(\n Point.scale(pt, canvasDimensions.width, canvasDimensions.height),\n Dimensions.center(canvasDimensions),\n );\n}\n\n/**\n * Translates a point in screen units to a point in relative units.\n */\nexport function translatePointToRelative(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n includeOffset?: boolean,\n xOffset?: number,\n yOffset?: number,\n): Point.Point {\n const verticalScaleFactor = 1 / canvasDimensions.height;\n const horizontalScaleFactor = 1 / canvasDimensions.width;\n const canvasCenterPoint = Dimensions.center(canvasDimensions);\n\n const point = Point.scale(\n Point.subtract(pt, canvasCenterPoint),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n if (includeOffset) {\n const offset = Point.scale(\n Point.create(xOffset, yOffset),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n // We want to place the label towards the center of the screen.\n // The given point corresponds to the upper left corner of the label, so increase the offset\n // when placing it to the left or above to ensure that part of the label line is visible\n const centerIsToTheRightInXDirection = canvasCenterPoint.x > pt.x;\n const xOffsetCalculated = centerIsToTheRightInXDirection\n ? offset.x\n : -3 * offset.x;\n\n const centerIsBelowInYDirection = canvasCenterPoint.y > pt.y;\n const yOffsetCalculated = centerIsBelowInYDirection\n ? offset.y\n : -3 * offset.y;\n\n const offsetPoint = Point.add(\n point,\n Point.create(xOffsetCalculated, yOffsetCalculated),\n );\n\n return constrainRelativePoint(offsetPoint, Range.create(-0.5, 0.5));\n } else {\n return constrainRelativePoint(point, Range.create(-0.5, 0.5));\n }\n}\n","import { Color, Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\n/**\n * The types of pins that can be performed by this tool.\n */\nexport type ViewerPinToolType = 'pin-icon' | 'pin-text';\n\n/**\n * The mode of the pin tool\n */\nexport type ViewerPinToolMode = 'edit' | 'view';\n\n/**\n * A model representing the state of pins.\n *\n */\n\nimport { Point, Vector3 } from '@vertexvis/geometry';\n\ninterface BasePinAttributes {\n style?: PinStyleAttributes;\n}\n\ninterface BasePin {\n id: string;\n worldPosition: Vector3.Vector3;\n partId?: string;\n attributes?: BasePinAttributes;\n}\n\nexport interface TextPin extends BasePin {\n type: 'text';\n label: PinLabel;\n}\n\n// Future: Support custom icons.\nexport interface IconPin extends BasePin {\n type: 'icon';\n}\n\nexport type Pin = IconPin | TextPin;\n\nexport interface PinLabel {\n point: Point.Point;\n text?: string;\n}\n\nexport function isTextPin(pin?: Pin): pin is TextPin {\n return pin?.type === 'text';\n}\n\nexport interface PinStyleAttributes {\n primaryColor?: Color.Color | string;\n accentColor?: Color.Color | string;\n}\n\nexport function isIconPin(pin?: Pin): pin is Pin {\n return pin?.type === 'icon';\n}\n\nfunction convertColorToString(color: Color.Color | string): string {\n return typeof color === 'string' ? color : Color.toHexString(color);\n}\nexport function getPinColors(pin?: Pin): {\n primaryColor?: string;\n accentColor?: string;\n} {\n return {\n primaryColor:\n pin?.attributes?.style?.primaryColor == null\n ? undefined\n : convertColorToString(pin?.attributes?.style?.primaryColor),\n accentColor:\n pin?.attributes?.style?.accentColor == null\n ? undefined\n : convertColorToString(pin?.attributes?.style?.accentColor),\n };\n}\n\nexport class PinModel {\n private entities: Record<string, Pin> = {};\n private selectedPinId?: string;\n\n private readonly entityAdded = new EventDispatcher<Pin>();\n private readonly entityUpdated = new EventDispatcher<Pin>();\n private readonly entitiesChanged = new EventDispatcher<Pin[]>();\n private readonly selectionChanged = new EventDispatcher<string | undefined>();\n\n /**\n * Registers an entity to be drawn in the canvas\n *\n * @param pin A pin entity to draw.\n * @returns `true` if the entity has been added.\n */\n public addPin(pin: Pin, suppressEvent = false): boolean {\n if (this.entities[pin.id] == null) {\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n\n if (!suppressEvent) {\n this.entitiesChanged.emit(this.getPins());\n this.entityAdded.emit(pin);\n }\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Clears all registered entities from the model.\n */\n public clearPins(): void {\n this.getPins().forEach((e) => this.removePin(e));\n }\n\n /**\n * Returns all the entities registered with the model.\n */\n public getPins(): Pin[] {\n return Object.keys(this.entities).map((key) => this.entities[key]);\n }\n\n /**\n * Returns single entity by id if present in the model.\n */\n public getPinById(id: string): Pin | undefined {\n return this.entities[id];\n }\n\n public getSelectedPinId(): string | undefined {\n return this.selectedPinId;\n }\n\n /**\n * Unregisters an entity from the model.\n *\n * @param entity The entity to remove.\n * @returns `true` if the entity was removed.\n */\n public removePin(entity: Pin): boolean {\n if (this.entities[entity.id] != null) {\n delete this.entities[entity.id];\n this.entitiesChanged.emit(this.getPins());\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param entities A set of entities to draw.\n * @returns `true` if the entity has been added.\n */\n public setPins(pins: Set<Pin>): boolean {\n this.clearPins();\n pins.forEach((e) => this.addPin(e, true));\n this.entitiesChanged.emit(this.getPins());\n\n return true;\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param pin A pin to set\n * @returns `true` if the entity has been set\n */\n public setPin(pin: Pin): boolean {\n const isNewPin = this.entities[pin.id] == null;\n\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n\n this.entitiesChanged.emit(this.getPins());\n if (isNewPin) {\n this.entityAdded.emit(pin);\n }\n\n return true;\n }\n\n /**\n * Updates a pin in the model.\n *\n * @param pin A pin to update\n * @returns `true` if the entity has been updated\n */\n public updatePin(pin: Pin): boolean {\n const pinById = this.getPinById(pin.id);\n if (pinById != null) {\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n this.entitiesChanged.emit(this.getPins());\n this.entityUpdated.emit(pin);\n\n return true;\n }\n return false;\n }\n\n /**\n * Registers an event listener that will be invoked when the model's\n * pin entities change.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntitiesChanged(listener: Listener<Pin[]>): Disposable {\n return this.entitiesChanged.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when a new pin\n * is added to the model.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntityAdded(listener: Listener<Pin>): Disposable {\n return this.entityAdded.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when a pin\n * is updated in the model.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntityUpdated(listener: Listener<Pin>): Disposable {\n return this.entityUpdated.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when the model's\n * pin selection changes\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onSelectionChange(listener: Listener<string | undefined>): Disposable {\n return this.selectionChanged.on(listener);\n }\n\n /**\n * Sets the selected pin id\n * @param pinId\n */\n public setSelectedPin(pinId?: string): void {\n this.selectedPinId = pinId;\n this.selectionChanged.emit(this.selectedPinId);\n }\n}\n"],"names":["Point","Dimensions","point","Range","color","Color"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-CxBXErQ8.js","sources":["src/lib/pins/controller.ts","src/components/viewer-pin-tool/utils.ts","src/lib/pins/model.ts"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\n\nimport {\n Pin,\n PinModel,\n PinStyleAttributes,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from './model';\n\nexport interface Draggable {\n id: string;\n lastPoint?: Point.Point;\n}\n\n/**\n * The `PinController` is responsible for adding pin entities to the viewer canvas\n */\nexport class PinController {\n private draggable?: Draggable;\n\n public constructor(\n private model: PinModel,\n private mode: ViewerPinToolMode = 'view',\n private type: ViewerPinToolType = 'pin-icon',\n private styleAttributes: PinStyleAttributes | undefined = undefined,\n ) {}\n\n /**\n * Registers an entity to place on the canvas and places the pin on the associated part.\n *\n * @param pin The pin entity\n * @returns A void promise\n */\n public addPin(pin: Pin): void {\n this.model.addPin(pin);\n }\n\n /**\n * Clears all entities and returns a promise that resolves with an empty list\n * of pin results.\n */\n public clearPins(): void {\n this.model.clearPins();\n }\n\n /**\n * Deregisters an entity and performs a pin if this entity was\n * removed.\n *\n * @param entity The entity to remove.\n * @returns A promise that resolves with the results after removing this\n * entity.\n */\n public removePin(pin: Pin): void {\n this.model.removePin(pin);\n }\n\n /**\n * Registers a set of entities and adds a pin\n *\n * @param entities The pin entities to draw.\n * @returns A promise that resolves with the results after registering these\n * entities.\n */\n public setPins(pins: Set<Pin>): void {\n this.model.setPins(pins);\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param pin A pin to set\n * @returns `true` if the entity has been added.\n */\n public setPin(pin: Pin): void {\n this.model.setPin(pin);\n }\n\n /**\n * Updates an existing pin\n * @param pin A pin to set\n * @returns `true` if the entity has been updated, false otherwise\n */\n public updatePin(pin: Pin): void {\n this.model.updatePin(pin);\n }\n\n /**\n * Tells the controller which pin is selected in the model\n * @param pinId\n */\n public setSelectedPinId(pinId?: string): void {\n this.model.setSelectedPin(pinId);\n }\n\n public getToolMode(): ViewerPinToolMode {\n return this.mode;\n }\n\n public getToolType(): ViewerPinToolType {\n return this.type;\n }\n\n public setToolMode(mode: ViewerPinToolMode): void {\n this.mode = mode;\n }\n\n public setToolType(type: ViewerPinToolType): void {\n this.type = type;\n }\n\n public getDraggable(): Draggable | undefined {\n return this.draggable;\n }\n\n public setDraggable(draggable: Draggable | undefined): void {\n this.draggable = draggable;\n }\n\n public setPrimaryColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n primaryColor: color,\n };\n }\n\n public setAccentColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n accentColor: color,\n };\n }\n\n public getStyleAttributes(): PinStyleAttributes | undefined {\n return this.styleAttributes;\n }\n\n public updateDraggable(\n draggable: Draggable,\n worldPosition: Vector3.Vector3,\n partId?: string,\n ): void {\n if (this.draggable != null) {\n this.draggable = draggable;\n }\n const pin = this.model.getPinById(draggable.id);\n if (pin != null) {\n this.updatePin({\n ...pin,\n worldPosition,\n partId,\n });\n }\n }\n}\n","import { Dimensions, Point } from '@vertexvis/geometry';\nimport { Range } from '@vertexvis/utils';\n\nexport function constrainRelativePoint(\n pt: Point.Point,\n range: Range.Range,\n): Point.Point {\n const constrainedX = Math.max(range.start, Math.min(range.end, pt.x));\n const constrainedY = Math.max(range.start, Math.min(range.end, pt.y));\n\n return Point.create(constrainedX, constrainedY);\n}\n\n/**\n * Translates a point in relative units to a point in screen units.\n */\nexport function translatePointToScreen(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n): Point.Point {\n return Point.add(\n Point.scale(pt, canvasDimensions.width, canvasDimensions.height),\n Dimensions.center(canvasDimensions),\n );\n}\n\n/**\n * Translates a point in screen units to a point in relative units.\n */\nexport function translatePointToRelative(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n includeOffset?: boolean,\n xOffset?: number,\n yOffset?: number,\n): Point.Point {\n const verticalScaleFactor = 1 / canvasDimensions.height;\n const horizontalScaleFactor = 1 / canvasDimensions.width;\n const canvasCenterPoint = Dimensions.center(canvasDimensions);\n\n const point = Point.scale(\n Point.subtract(pt, canvasCenterPoint),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n if (includeOffset) {\n const offset = Point.scale(\n Point.create(xOffset, yOffset),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n // We want to place the label towards the center of the screen.\n // The given point corresponds to the upper left corner of the label, so increase the offset\n // when placing it to the left or above to ensure that part of the label line is visible\n const centerIsToTheRightInXDirection = canvasCenterPoint.x > pt.x;\n const xOffsetCalculated = centerIsToTheRightInXDirection\n ? offset.x\n : -3 * offset.x;\n\n const centerIsBelowInYDirection = canvasCenterPoint.y > pt.y;\n const yOffsetCalculated = centerIsBelowInYDirection\n ? offset.y\n : -3 * offset.y;\n\n const offsetPoint = Point.add(\n point,\n Point.create(xOffsetCalculated, yOffsetCalculated),\n );\n\n return constrainRelativePoint(offsetPoint, Range.create(-0.5, 0.5));\n } else {\n return constrainRelativePoint(point, Range.create(-0.5, 0.5));\n }\n}\n","import { Color, Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\n/**\n * The types of pins that can be performed by this tool.\n */\nexport type ViewerPinToolType = 'pin-icon' | 'pin-text';\n\n/**\n * The mode of the pin tool\n */\nexport type ViewerPinToolMode = 'edit' | 'view';\n\n/**\n * A model representing the state of pins.\n *\n */\n\nimport { Point, Vector3 } from '@vertexvis/geometry';\n\ninterface BasePinAttributes {\n style?: PinStyleAttributes;\n}\n\ninterface BasePin {\n id: string;\n worldPosition: Vector3.Vector3;\n partId?: string;\n attributes?: BasePinAttributes;\n}\n\nexport interface TextPin extends BasePin {\n type: 'text';\n label: PinLabel;\n}\n\n// Future: Support custom icons.\nexport interface IconPin extends BasePin {\n type: 'icon';\n}\n\nexport type Pin = IconPin | TextPin;\n\nexport interface PinLabel {\n point: Point.Point;\n text?: string;\n}\n\nexport function isTextPin(pin?: Pin): pin is TextPin {\n return pin?.type === 'text';\n}\n\nexport interface PinStyleAttributes {\n primaryColor?: Color.Color | string;\n accentColor?: Color.Color | string;\n}\n\nexport function isIconPin(pin?: Pin): pin is Pin {\n return pin?.type === 'icon';\n}\n\nfunction convertColorToString(color: Color.Color | string): string {\n return typeof color === 'string' ? color : Color.toHexString(color);\n}\nexport function getPinColors(pin?: Pin): {\n primaryColor?: string;\n accentColor?: string;\n} {\n return {\n primaryColor:\n pin?.attributes?.style?.primaryColor == null\n ? undefined\n : convertColorToString(pin?.attributes?.style?.primaryColor),\n accentColor:\n pin?.attributes?.style?.accentColor == null\n ? undefined\n : convertColorToString(pin?.attributes?.style?.accentColor),\n };\n}\n\nexport class PinModel {\n private entities: Record<string, Pin> = {};\n private selectedPinId?: string;\n\n private readonly entityAdded = new EventDispatcher<Pin>();\n private readonly entityUpdated = new EventDispatcher<Pin>();\n private readonly entitiesChanged = new EventDispatcher<Pin[]>();\n private readonly selectionChanged = new EventDispatcher<string | undefined>();\n\n /**\n * Registers an entity to be drawn in the canvas\n *\n * @param pin A pin entity to draw.\n * @returns `true` if the entity has been added.\n */\n public addPin(pin: Pin, suppressEvent = false): boolean {\n if (this.entities[pin.id] == null) {\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n\n if (!suppressEvent) {\n this.entitiesChanged.emit(this.getPins());\n this.entityAdded.emit(pin);\n }\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Clears all registered entities from the model.\n */\n public clearPins(): void {\n this.getPins().forEach((e) => this.removePin(e));\n }\n\n /**\n * Returns all the entities registered with the model.\n */\n public getPins(): Pin[] {\n return Object.keys(this.entities).map((key) => this.entities[key]);\n }\n\n /**\n * Returns single entity by id if present in the model.\n */\n public getPinById(id: string): Pin | undefined {\n return this.entities[id];\n }\n\n public getSelectedPinId(): string | undefined {\n return this.selectedPinId;\n }\n\n /**\n * Unregisters an entity from the model.\n *\n * @param entity The entity to remove.\n * @returns `true` if the entity was removed.\n */\n public removePin(entity: Pin): boolean {\n if (this.entities[entity.id] != null) {\n delete this.entities[entity.id];\n this.entitiesChanged.emit(this.getPins());\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param entities A set of entities to draw.\n * @returns `true` if the entity has been added.\n */\n public setPins(pins: Set<Pin>): boolean {\n this.clearPins();\n pins.forEach((e) => this.addPin(e, true));\n this.entitiesChanged.emit(this.getPins());\n\n return true;\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param pin A pin to set\n * @returns `true` if the entity has been set\n */\n public setPin(pin: Pin): boolean {\n const isNewPin = this.entities[pin.id] == null;\n\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n\n this.entitiesChanged.emit(this.getPins());\n if (isNewPin) {\n this.entityAdded.emit(pin);\n }\n\n return true;\n }\n\n /**\n * Updates a pin in the model.\n *\n * @param pin A pin to update\n * @returns `true` if the entity has been updated\n */\n public updatePin(pin: Pin): boolean {\n const pinById = this.getPinById(pin.id);\n if (pinById != null) {\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n this.entitiesChanged.emit(this.getPins());\n this.entityUpdated.emit(pin);\n\n return true;\n }\n return false;\n }\n\n /**\n * Registers an event listener that will be invoked when the model's\n * pin entities change.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntitiesChanged(listener: Listener<Pin[]>): Disposable {\n return this.entitiesChanged.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when a new pin\n * is added to the model.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntityAdded(listener: Listener<Pin>): Disposable {\n return this.entityAdded.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when a pin\n * is updated in the model.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntityUpdated(listener: Listener<Pin>): Disposable {\n return this.entityUpdated.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when the model's\n * pin selection changes\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onSelectionChange(listener: Listener<string | undefined>): Disposable {\n return this.selectionChanged.on(listener);\n }\n\n /**\n * Sets the selected pin id\n * @param pinId\n */\n public setSelectedPin(pinId?: string): void {\n this.selectedPinId = pinId;\n this.selectionChanged.emit(this.selectedPinId);\n }\n}\n"],"names":["Point","Dimensions","point","Range","color","Color"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{p as n}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{p as n}from"./p-2UsvOTHJ.js";function t(t,r){const e=n.create(t.clientX,t.clientY);if(r==null){return e}else{return n.subtract(e,n.create(r.left,r.top))}}function r(n){const{x:t,y:r}=n;return`translate(-50%, -50%) translate(${t}px, ${r}px)`}function e(n){var t,r;if(typeof n==="string"){return n}else{const e=[`url("${n.url}")`,(t=n.offsetX)!==null&&t!==void 0?t:0,(r=n.offsetY)!==null&&r!==void 0?r:0,", auto"];return e.join(" ")}}function o(){if(typeof window!=="undefined"){return window.devicePixelRatio}return 1}export{r as a,o as b,e as c,t as g};
|
|
5
|
+
//# sourceMappingURL=p-D0aTA_2m.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-
|
|
1
|
+
{"version":3,"file":"p-D0aTA_2m.js","sources":["src/lib/dom.ts"],"sourcesContent":["import { Point } from '@vertexvis/geometry';\n\nimport { Cursor } from './cursors';\n\nexport function getMouseClientPosition(\n event: MouseEvent,\n offsets?: DOMRect,\n): Point.Point {\n const pt = Point.create(event.clientX, event.clientY);\n if (offsets == null) {\n return pt;\n } else {\n return Point.subtract(pt, Point.create(offsets.left, offsets.top));\n }\n}\n\n/**\n * Returns a CSS transform that will center an element at the given position.\n */\nexport function cssTransformCenterAt(position: Point.Point): string {\n const { x, y } = position;\n return `translate(-50%, -50%) translate(${x}px, ${y}px)`;\n}\n\n/**\n * Returns a CSS value for a cursor.\n */\nexport function cssCursor(cursor: Cursor): string {\n if (typeof cursor === 'string') {\n return cursor;\n } else {\n const parts = [\n `url(\"${cursor.url}\")`,\n cursor.offsetX ?? 0,\n cursor.offsetY ?? 0,\n ', auto',\n ];\n return parts.join(' ');\n }\n}\n\nexport function getWindowDevicePixelRatio(): number {\n if (typeof window !== 'undefined') {\n return window.devicePixelRatio;\n }\n return 1;\n}\n"],"names":["Point"],"mappings":";;;;;AAIM,SAAU,sBAAsB,CACpC,KAAiB,EACjB,OAAiB,EAAA;AAEjB,IAAA,MAAM,EAAE,GAAGA,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACrD,IAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,QAAA,OAAO,EAAE;;SACJ;AACL,QAAA,OAAOA,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAEA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;;AAEtE;AAEA;;AAEG;AACG,SAAU,oBAAoB,CAAC,QAAqB,EAAA;AACxD,IAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ;AACzB,IAAA,OAAO,CAAA,gCAAA,EAAmC,CAAC,CAAA,IAAA,EAAO,CAAC,KAAK;AAC1D;AAEA;;AAEG;AACG,SAAU,SAAS,CAAC,MAAc,EAAA;;AACtC,IAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,QAAA,OAAO,MAAM;;SACR;AACL,QAAA,MAAM,KAAK,GAAG;YACZ,CAAA,KAAA,EAAQ,MAAM,CAAC,GAAG,CAAA,EAAA,CAAI;YACtB,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YACnB,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YACnB,QAAQ;SACT;AACD,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;;AAE1B;SAEgB,yBAAyB,GAAA;AACvC,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,OAAO,MAAM,CAAC,gBAAgB;;AAEhC,IAAA,OAAO,CAAC;AACV;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{a as n,g as t,p as o}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{a as n,g as t,p as o}from"./p-2UsvOTHJ.js";function r(n=0,t=0){return{x:n,y:t}}function c(n,t){const o=s(n,t);return Math.sqrt(o.x*o.x+o.y*o.y)}function s(n,t){return{x:n.x-t.x,y:n.y-t.y}}function e(n,t){return{x:n.x+t.x,y:n.y+t.y}}function u(n,t){return{x:n.x*t,y:n.y*t}}function a(n){return Math.sqrt(n.x*n.x+n.y*n.y)}function i(n){const t=a(n);if(t===0){return r(0,0)}else{return u(n,1/t)}}function f(n,t){return i(s(t,n))}function M(n,t){const o=f(n,t);if(o.x===0||o.y===0){return r(-1*o.y,o.x)}if(Math.abs(o.x)>Math.abs(o.y)){const n=1-Math.pow(o.x,2);const t=-1*o.x*o.y;return i(r(n,t))}else{const n=-1*o.x*o.y;const t=1-Math.pow(o.y,2);return i(r(n,t))}}function h(n){const t=JSON.parse(n);if(Array.isArray(t)){const[n,o]=t;return r(n,o)}else{const{x:n,y:o}=t;return r(n,o)}}function E(n,t,o,r){const c=M(n,t);const a=f(n,t);const i=s(t,e(u(a,o*Math.cos(r)),u(c,o*Math.sin(r))));const h=s(t,s(u(a,o*Math.cos(r)),u(c,o*Math.sin(r))));return{leftPoint:i,rightPoint:h}}function R(t,o,r=65,s=85){const a=c(t,o);const i=Math.max(4,Math.min(16,a*.25));const f=Math.max(4,Math.min(12,a*.16));const M=Math.min(5,a*.1);const h=i/a;const R=e(u(o,1-h),u(t,h));const y=n.toRadians(r/2);const $=i/Math.cos(y);const p=E(t,o,$,y);const x=n.toRadians(s/2);const l=i/Math.cos(x);const L=E(t,o,l,x);const T=n.toRadians(90);const g=E(t,o,f,T);return{tip:o,base:R,arrowTriangle:p,arrowLine:L,hash:g,radius:M}}function y(n,t=1){const o=T(n.tip,n.arrowTriangle.rightPoint,t);const r=T(n.tip,n.arrowTriangle.leftPoint,t);const c=T(n.tip,n.base,t);return[n.tip,o,c,r].map((n=>`${n.x},${n.y}`)).join(" ")}function $(n,t=1){const o=T(n.tip,n.arrowLine.rightPoint,t);const r=T(n.tip,n.arrowLine.leftPoint,t);return`M${o.x} ${o.y} L${n.tip.x} ${n.tip.y} L${r.x} ${r.y} L${n.tip.x} ${n.tip.y} Z`}function p(n,t=1){const o=T(n.tip,n.hash.rightPoint,t);const r=T(n.tip,n.hash.leftPoint,t);return{x1:o.x,y1:o.y,x2:r.x,y2:r.y}}function x(n,t=1){return{cx:n.tip.x,cy:n.tip.y,r:n.radius*t}}function l(n){return n instanceof HTMLElement&&n.nodeName==="VERTEX-VIEWER-MARKUP-ARROW"}function L(n){return typeof n==="string"?h(n):n}function T(n,t,o){return e(n,u(s(t,n),o))}function g(n){return n instanceof HTMLElement&&n.nodeName==="VERTEX-VIEWER-MARKUP-CIRCLE"}function O(n){return typeof n==="string"?t.fromJson(n):n}function V(n){return typeof n==="string"?JSON.parse(n).map((n=>o.fromJson(JSON.stringify(n)))):n}function m(n){return n instanceof HTMLElement&&n.nodeName==="VERTEX-VIEWER-MARKUP-FREEFORM"}export{g as a,m as b,y as c,$ as d,p as e,x as f,R as g,O as h,l as i,V as j,L as p};
|
|
5
|
+
//# sourceMappingURL=p-DBfvBC5O.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-DBfvBC5O.js","sources":["../geometry/src/point.ts","src/components/viewer-markup-arrow/utils.ts","src/components/viewer-markup-circle/utils.ts","src/components/viewer-markup-freeform/utils.ts"],"sourcesContent":["import * as Angle from './angle';\nimport { lerp as lerpNumber } from './math';\n\n/**\n * A `Point` represents a cartesian coordinate with a horizontal and vertical\n * position or length.\n */\nexport interface Point {\n x: number;\n y: number;\n}\n\n/**\n * Returns a new `Point` with the given horizontal and vertical position.\n */\nexport function create(x = 0, y = 0): Point {\n return { x, y };\n}\n\n/**\n * Converts a polar coordinate (length and angle) into a Cartesian coordinate.\n */\nexport function polar(length: number, radians: Angle.Angle): Point {\n const x = Math.cos(radians) * length;\n const y = Math.sin(radians) * length;\n return create(x, y);\n}\n\n/**\n * Returns the distance between two points.\n */\nexport function distance(a: Point, b: Point): number {\n const delta = subtract(a, b);\n return Math.sqrt(delta.x * delta.x + delta.y * delta.y);\n}\n\n/**\n * Returns a new `Point` where `b` is subtracted from `a`.\n */\nexport function subtract(a: Point, b: Point): Point {\n return { x: a.x - b.x, y: a.y - b.y };\n}\n\n/**\n * Returns a new `Point` where `b` is added to `a`.\n */\nexport function add(a: Point, b: Point): Point {\n return { x: a.x + b.x, y: a.y + b.y };\n}\n\n/**\n * Returns `true` if the `x` and `y` positions of `a` and `b` are equal.\n */\nexport function isEqual(a: Point, b: Point): boolean {\n return a.x === b.x && a.y === b.y;\n}\n\n/**\n * Performs a linear interpolation between `a` and `b` and returns the result.\n * The value of `t` is clamped between `[0, 1]`.\n *\n * @param a The start value.\n * @param b The end value.\n * @param t A value between 0 and 1.\n * @returns A point between `a` and `b`.\n */\nexport function lerp(a: Point, b: Point, t: number): Point {\n return {\n x: lerpNumber(a.x, b.x, t),\n y: lerpNumber(a.y, b.y, t),\n };\n}\n\n/**\n * Returns a new `Point` where `x` and `y` are inverted.\n */\nexport function negate(pt: Point): Point {\n return create(-pt.x, -pt.y);\n}\n\n/**\n * Returns a new `Point` where `x` and `y` are multiplied by the given scale\n * factors.\n */\nexport function scale(pt: Point, scaleX: number, scaleY: number): Point {\n return {\n x: pt.x * scaleX,\n y: pt.y * scaleY,\n };\n}\n\n/**\n * Returns a new `Point` where `x` and `y` are multiplied by the given scale\n * factor.\n */\nexport function scaleProportional(pt: Point, scale: number): Point {\n return {\n x: pt.x * scale,\n y: pt.y * scale,\n };\n}\n\n/**\n * Returns the magnitude of a point.\n */\nexport function magnitude(pt: Point): number {\n return Math.sqrt(pt.x * pt.x + pt.y * pt.y);\n}\n\n/**\n * Transforms a vector into the corresponding normal (unit) vector.\n */\nexport function normalizeVector(pt: Point): Point {\n const magnitudeOfPoint = magnitude(pt);\n if (magnitudeOfPoint === 0) {\n return create(0, 0);\n } else {\n return scaleProportional(pt, 1 / magnitudeOfPoint);\n }\n}\n\n/**\n * Returns a new normal (unit) vector pointing between the two given points.\n */\nexport function normalDirectionVector(ptA: Point, ptB: Point): Point {\n return normalizeVector(subtract(ptB, ptA));\n}\n\n/**\n * Returns a vector orthogonal to the vector between the two given points.\n */\nexport function orthogonalVector(ptA: Point, ptB: Point): Point {\n const unitVectorBetweenPoints = normalDirectionVector(ptA, ptB);\n\n // Handle vectors that are parallel to the x or y axis\n if (unitVectorBetweenPoints.x === 0 || unitVectorBetweenPoints.y === 0) {\n return create(-1 * unitVectorBetweenPoints.y, unitVectorBetweenPoints.x);\n }\n\n if (\n Math.abs(unitVectorBetweenPoints.x) > Math.abs(unitVectorBetweenPoints.y)\n ) {\n const vectorXValue = 1 - Math.pow(unitVectorBetweenPoints.x, 2);\n const vectorYValue =\n -1 * unitVectorBetweenPoints.x * unitVectorBetweenPoints.y;\n return normalizeVector(create(vectorXValue, vectorYValue));\n } else {\n const vectorXValue =\n -1 * unitVectorBetweenPoints.x * unitVectorBetweenPoints.y;\n const vectorYValue = 1 - Math.pow(unitVectorBetweenPoints.y, 2);\n return normalizeVector(create(vectorXValue, vectorYValue));\n }\n}\n\n/**\n * Parses a JSON string representation of a Point and returns an object.\n *\n * @param json A JSON string, either in the form `[x,y]` or `{\"x\": 0, \"y\": 0}`\n * @returns A parsed Point.\n */\nexport function fromJson(json: string): Point {\n const obj = JSON.parse(json);\n if (Array.isArray(obj)) {\n const [x, y] = obj;\n return create(x, y);\n } else {\n const { x, y } = obj;\n return create(x, y);\n }\n}\n","import { Angle } from '@vertexvis/geometry';\n\nimport * as Point from '../../../../geometry/src/point';\n\nexport type LineAnchorStyle =\n 'arrow-triangle' | 'arrow-line' | 'dot' | 'hash' | 'none';\n\nexport interface LineAnchorStylePoints {\n tip: Point.Point;\n base: Point.Point;\n arrowTriangle: ArrowheadPoints;\n arrowLine: ArrowheadPoints;\n hash: ArrowheadPoints;\n radius: number;\n}\n\nexport interface ArrowheadPoints {\n leftPoint: Point.Point;\n rightPoint: Point.Point;\n}\n\nexport interface LinePoints {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\nexport interface CirclePoints {\n cx: number;\n cy: number;\n r: number;\n}\n\nexport function createArrowheadPoints(\n start: Point.Point,\n end: Point.Point,\n arrowSideLength: number,\n arrowHeadTheta: number,\n): ArrowheadPoints {\n const arrowOrthogonalVector = Point.orthogonalVector(start, end);\n const normalizedDirection = Point.normalDirectionVector(start, end);\n\n const arrowLeft = Point.subtract(\n end,\n Point.add(\n Point.scaleProportional(\n normalizedDirection,\n arrowSideLength * Math.cos(arrowHeadTheta),\n ),\n Point.scaleProportional(\n arrowOrthogonalVector,\n arrowSideLength * Math.sin(arrowHeadTheta),\n ),\n ),\n );\n const arrowRight = Point.subtract(\n end,\n Point.subtract(\n Point.scaleProportional(\n normalizedDirection,\n arrowSideLength * Math.cos(arrowHeadTheta),\n ),\n Point.scaleProportional(\n arrowOrthogonalVector,\n arrowSideLength * Math.sin(arrowHeadTheta),\n ),\n ),\n );\n\n return {\n leftPoint: arrowLeft,\n rightPoint: arrowRight,\n };\n}\n\nexport function createLineAnchorStylePoints(\n start: Point.Point,\n end: Point.Point,\n triangleArrowAngle = 65,\n lineArrowAngle = 85,\n): LineAnchorStylePoints {\n // Adjust the size of the end style to the distance between the start and end points\n const distance = Point.distance(start, end);\n const arrowHeadHeight = Math.max(4, Math.min(16, distance * 0.25));\n const hashHeight = Math.max(4, Math.min(12, distance * 0.16));\n const radius = Math.min(5, distance * 0.1);\n\n // Triangle arrow position\n const triangleArrowRelativeHeight = arrowHeadHeight / distance;\n const triangleArrowBasePosition = Point.add(\n Point.scaleProportional(end, 1 - triangleArrowRelativeHeight),\n Point.scaleProportional(start, triangleArrowRelativeHeight),\n );\n const triangleArrowTheta = Angle.toRadians(triangleArrowAngle / 2);\n const triangleArrowSideLength =\n arrowHeadHeight / Math.cos(triangleArrowTheta);\n const triangleArrow = createArrowheadPoints(\n start,\n end,\n triangleArrowSideLength,\n triangleArrowTheta,\n );\n\n // Line arrow position\n const lineArrowTheta = Angle.toRadians(lineArrowAngle / 2);\n const lineArrowSideLength = arrowHeadHeight / Math.cos(lineArrowTheta);\n const lineArrow = createArrowheadPoints(\n start,\n end,\n lineArrowSideLength,\n lineArrowTheta,\n );\n\n // Hash position\n // Setting the arrowHeadAngle to 90 degrees results in a\n // straight hash mark perpendicular to the direction of the line\n const hashLineTheta = Angle.toRadians(90);\n const hashLine = createArrowheadPoints(start, end, hashHeight, hashLineTheta);\n\n return {\n tip: end,\n base: triangleArrowBasePosition,\n arrowTriangle: triangleArrow,\n arrowLine: lineArrow,\n hash: hashLine,\n radius: radius,\n };\n}\n\nexport function arrowheadPointsToPolygonPoints(\n points: LineAnchorStylePoints,\n scale = 1,\n): string {\n const scaledRight = scalePointProportional(\n points.tip,\n points.arrowTriangle.rightPoint,\n scale,\n );\n const scaledLeft = scalePointProportional(\n points.tip,\n points.arrowTriangle.leftPoint,\n scale,\n );\n const scaledBase = scalePointProportional(points.tip, points.base, scale);\n\n return [points.tip, scaledRight, scaledBase, scaledLeft]\n .map((pt) => `${pt.x},${pt.y}`)\n .join(' ');\n}\n\nexport function arrowheadPointsToPathPoints(\n points: LineAnchorStylePoints,\n scale = 1,\n): string {\n const scaledRight = scalePointProportional(\n points.tip,\n points.arrowLine.rightPoint,\n scale,\n );\n const scaledLeft = scalePointProportional(\n points.tip,\n points.arrowLine.leftPoint,\n scale,\n );\n\n return `M${scaledRight.x} ${scaledRight.y} L${points.tip.x} ${points.tip.y} L${scaledLeft.x} ${scaledLeft.y} L${points.tip.x} ${points.tip.y} Z`;\n}\n\nexport function arrowheadPointsToHashPoints(\n points: LineAnchorStylePoints,\n scale = 1,\n): LinePoints {\n const scaledRight = scalePointProportional(\n points.tip,\n points.hash.rightPoint,\n scale,\n );\n const scaledLeft = scalePointProportional(\n points.tip,\n points.hash.leftPoint,\n scale,\n );\n\n return {\n x1: scaledRight.x,\n y1: scaledRight.y,\n x2: scaledLeft.x,\n y2: scaledLeft.y,\n };\n}\n\nexport function arrowheadPointsToCirclePoints(\n points: LineAnchorStylePoints,\n scale = 1,\n): CirclePoints {\n return {\n cx: points.tip.x,\n cy: points.tip.y,\n r: points.radius * scale,\n };\n}\n\nexport function isVertexViewerArrowMarkup(\n el: unknown,\n): el is HTMLVertexViewerMarkupArrowElement {\n return (\n el instanceof HTMLElement && el.nodeName === 'VERTEX-VIEWER-MARKUP-ARROW'\n );\n}\n\nexport function parsePoint(\n value: string | Point.Point | undefined,\n): Point.Point | undefined {\n return typeof value === 'string' ? Point.fromJson(value) : value;\n}\n\nexport function scalePointProportional(\n basePoint: Point.Point,\n scaledPoint: Point.Point,\n scale: number,\n): Point.Point {\n return Point.add(\n basePoint,\n Point.scaleProportional(Point.subtract(scaledPoint, basePoint), scale),\n );\n}\n","import { Rectangle } from '@vertexvis/geometry';\n\nexport function isVertexViewerCircleMarkup(\n el: unknown,\n): el is HTMLVertexViewerMarkupCircleElement {\n return (\n el instanceof HTMLElement && el.nodeName === 'VERTEX-VIEWER-MARKUP-CIRCLE'\n );\n}\n\nexport function parseBounds(\n value: string | Rectangle.Rectangle | undefined,\n): Rectangle.Rectangle | undefined {\n return typeof value === 'string' ? Rectangle.fromJson(value) : value;\n}\n","import { Point } from '@vertexvis/geometry';\n\nexport function parsePoints(\n value: string | Point.Point[] | undefined,\n): Point.Point[] | undefined {\n return typeof value === 'string'\n ? JSON.parse(value).map((values: number[]) =>\n Point.fromJson(JSON.stringify(values)),\n )\n : value;\n}\n\nexport function isVertexViewerFreeformMarkup(\n el: unknown,\n): el is HTMLVertexViewerMarkupFreeformElement {\n return (\n el instanceof HTMLElement && el.nodeName === 'VERTEX-VIEWER-MARKUP-FREEFORM'\n );\n}\n"],"names":["Point.orthogonalVector","Point.normalDirectionVector","Point.subtract","Point.add","Point.scaleProportional","distance","Point.distance","Angle","Point.fromJson","Rectangle","Point"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{E as i,b as t}from"./p-CDM7zNn0.js";import{p as s}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{E as i,b as t}from"./p-CDM7zNn0.js";import{p as s}from"./p-2UsvOTHJ.js";import{g as h}from"./p-D0aTA_2m.js";const e=16;const n=1.2;class o{constructor(t,s,h,e,n,o,l,r,a,d){this.downEvent=t;this.upEvent=s;this.moveEvent=h;this.rotateInteraction=e;this.rotatePointInteraction=n;this.zoomInteraction=o;this.panInteraction=l;this.twistInteraction=r;this.pivotInteraction=a;this.getConfig=d;this.isDragging=false;this.keyboardControls=false;this.disableIndividualInteractions=false;this.primaryInteractionTypeChange=new i;this.primaryInteraction=e;this.handleDownEvent=this.handleDownEvent.bind(this);this.handleMouseWheel=this.handleMouseWheel.bind(this);this.handleWindowMove=this.handleWindowMove.bind(this);this.handleWindowUp=this.handleWindowUp.bind(this);this.handleDoubleClick=this.handleDoubleClick.bind(this)}initialize(i,t){this.element=i;this.interactionApi=t;i.addEventListener(this.downEvent,this.handleDownEvent);i.addEventListener("mousedown",this.handleDoubleClick);i.addEventListener("wheel",this.handleMouseWheel,{passive:false})}dispose(){var i,t,s;(i=this.element)===null||i===void 0?void 0:i.removeEventListener(this.downEvent,this.handleDownEvent);(t=this.element)===null||t===void 0?void 0:t.removeEventListener("mousedown",this.handleDoubleClick);(s=this.element)===null||s===void 0?void 0:s.removeEventListener("wheel",this.handleMouseWheel);this.element=undefined}onPrimaryInteractionTypeChange(i){return this.primaryInteractionTypeChange.on(i)}setCurrentInteractionType(i){var t;switch(i){case"rotate":this.currentInteraction=this.rotateInteraction;break;case"zoom":this.currentInteraction=this.zoomInteraction;break;case"pan":this.currentInteraction=this.panInteraction;break;case"twist":this.currentInteraction=this.twistInteraction;break;case"rotate-point":this.currentInteraction=this.rotatePointInteraction;break;case"pivot":this.currentInteraction=this.pivotInteraction;break;default:this.currentInteraction=undefined}if(this.draggingInteraction){const i=this.draggingInteraction.getPosition();this.draggingInteraction=this.currentInteraction||this.primaryInteraction;(t=this.interactionApi)===null||t===void 0?void 0:t.resetLastAngle();this.draggingInteraction.setPosition(i)}}getPrimaryInteractionType(){return this.primaryInteraction.getType()}getCurrentInteractionType(){return(this.currentInteraction||this.primaryInteraction).getType()}setPrimaryInteractionType(i){switch(i){case"rotate":this.primaryInteraction=this.rotateInteraction;this.lastPrimaryRotateInteraction=this.rotateInteraction;break;case"rotate-point":this.primaryInteraction=this.rotatePointInteraction;this.lastPrimaryRotateInteraction=this.rotatePointInteraction;break;case"zoom":this.primaryInteraction=this.zoomInteraction;break;case"pan":this.primaryInteraction=this.panInteraction;break;case"pivot":this.primaryInteraction=this.pivotInteraction;break}this.primaryInteractionTypeChange.emit()}setDefaultKeyboardControls(i){this.keyboardControls=i}handleDownEvent(i){i.preventDefault();this.interactionTimer=window.setTimeout((()=>{this.downPosition=s.create(i.screenX,i.screenY);this.downPositionCanvas=this.getCanvasPosition(i);this.interactionTimer=undefined;if(this.lastMoveEvent!=null){this.handleWindowMove(this.lastMoveEvent)}}),this.getConfig().interactions.interactionDelay);window.addEventListener(this.moveEvent,this.handleWindowMove);window.addEventListener(this.upEvent,this.handleWindowUp)}handleWindowMove(i){if(this.interactionTimer==null){if(this.disableIndividualInteractions){return}const t=s.create(i.screenX,i.screenY);const h=this.interactionApi!=null?this.interactionApi.pixelThreshold(this.isTouch(i)):2;if(this.downPosition!=null&&s.distance(t,this.downPosition)>=h&&!this.isDragging){this.beginDrag(i);this.isDragging=true}if(this.isDragging){this.drag(i)}}this.lastMoveEvent=i}async handleWindowUp(i){if(this.isDragging){this.endDrag(i);this.isDragging=false}if(this.interactionTimer!=null){window.clearTimeout(this.interactionTimer);this.interactionTimer=undefined}window.removeEventListener(this.moveEvent,this.handleWindowMove);window.removeEventListener(this.upEvent,this.handleWindowUp);this.lastMoveEvent=undefined}async handleDoubleClick(i){if(i.detail===2&&i.buttons===4&&this.interactionApi!=null){await this.interactionApi.viewAll()}}beginDrag(i){var t;if(this.keyboardControls&&i.metaKey&&i.shiftKey){this.currentInteraction=this.rotatePointInteraction}else if(this.keyboardControls&&i.shiftKey&&i.altKey){this.currentInteraction=this.twistInteraction}else if(this.keyboardControls&&i.shiftKey){this.currentInteraction=this.zoomInteraction}else if(this.keyboardControls&&(i.metaKey||i.ctrlKey)){this.currentInteraction=this.panInteraction}else if(this.keyboardControls&&i.altKey){this.currentInteraction=this.rotateInteraction}if(i.buttons===1){this.draggingInteraction=this.currentInteraction||this.primaryInteraction}else if(i.buttons===2){this.draggingInteraction=this.panInteraction}else if(i.buttons===4){this.draggingInteraction=(t=this.lastPrimaryRotateInteraction)!==null&&t!==void 0?t:this.rotateInteraction}if(this.draggingInteraction!=null&&this.interactionApi!=null&&this.element!=null){this.zoomInteraction.endDrag(i,this.interactionApi);this.draggingInteraction.beginDrag(i,this.downPositionCanvas||s.create(i.clientX,i.clientY),this.interactionApi,this.element)}}drag(i){if(this.keyboardControls&&i.altKey&&i.shiftKey){this.currentInteraction=this.twistInteraction}else{this.currentInteraction=undefined}this.draggingInteraction=this.currentInteraction||this.draggingInteraction||this.primaryInteraction;if(this.draggingInteraction!=null&&this.interactionApi!=null){this.draggingInteraction.drag(i,this.interactionApi)}}endDrag(i){if(this.keyboardControls&&this.currentInteraction===this.twistInteraction){this.currentInteraction=undefined}if(this.draggingInteraction!=null&&this.interactionApi!=null){this.draggingInteraction.endDrag(i,this.interactionApi);this.draggingInteraction=undefined}}handleMouseWheel(i){i.preventDefault();if(this.element!=null&&this.interactionApi!=null&&i.buttons!==4){const t=-this.wheelDeltaToPixels(i.deltaY,i.deltaMode)/10;const s=this.element.getBoundingClientRect();const e=h(i,s);const n=Math.abs(i.deltaY);if(n<12){void this.zoomInteraction.zoomToPoint(e,t,this.interactionApi)}else{const i=Math.min(10,Math.ceil(n/12));const s=t/i;for(let t=1;t<=i;t++){const i=t*5;window.setTimeout((()=>{if(this.interactionApi!=null){this.zoomInteraction.zoomToPoint(e,s,this.interactionApi,i)}}),i)}}}}wheelDeltaToPixels(i,t){if(this.bodyStyleCache==null){const i=window.getComputedStyle(document.body);const t=Number.parseFloat(i.getPropertyValue("fontSize"))||e;const s=Number.parseFloat(i.getPropertyValue("lineHeight"));this.bodyStyleCache={lineHeightPixels:Number.isFinite(s)?s:t*n,height:Number.parseFloat(i.getPropertyValue("height"))||window.innerHeight};window.setTimeout((()=>{this.bodyStyleCache=undefined}),4800)}if(t===1){return i*this.bodyStyleCache.lineHeightPixels}else if(t===2){return i*this.bodyStyleCache.height}return i}getCanvasPosition(i){var t;const h=(t=this.element)===null||t===void 0?void 0:t.getBoundingClientRect();const e=h!=null?s.create(h.left,h.top):undefined;return e!=null?s.subtract(s.create(i.clientX,i.clientY),e):undefined}isTouch(i){return window.PointerEvent!=null&&i instanceof PointerEvent?i.pointerType==="touch":false}}class l extends o{constructor(){super(...arguments);this.registeredExternalElements={}}registerAdditionalElement(i){const s=t.create();const h=this.addEventListenersToElement(i);this.registeredExternalElements[s]=h;return h}deregisterAdditionalElementById(i){const t=this.registeredExternalElements[i];t.dispose();this.registeredExternalElements=Object.fromEntries(Object.entries(this.registeredExternalElements).filter((([t])=>t!==i)))}deregisterAllListeners(){Object.keys(this.registeredExternalElements).forEach((i=>this.deregisterAdditionalElementById(i)))}}export{o as B,l as M};
|
|
5
|
+
//# sourceMappingURL=p-DIbJ8Ijj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-DIbJ8Ijj.js","sources":["src/lib/interactions/baseInteractionHandler.ts","src/lib/interactions/multiElementInteractionHandler.ts"],"sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { ConfigProvider } from '../config';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from './interactionApi';\nimport { BaseEvent } from './interactionEvent';\nimport { InteractionHandler } from './interactionHandler';\nimport {\n MouseInteraction,\n PanInteraction,\n PivotInteraction,\n RotateInteraction,\n RotatePointInteraction,\n TwistInteraction,\n ZoomInteraction,\n} from './mouseInteractions';\n\nexport type InteractionType =\n 'rotate' | 'zoom' | 'pan' | 'twist' | 'rotate-point' | 'pivot';\n\nconst DEFAULT_FONT_SIZE = 16;\nconst DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER = 1.2;\n\nexport abstract class BaseInteractionHandler implements InteractionHandler {\n protected interactionApi?: InteractionApi;\n protected element?: HTMLElement;\n protected downPosition?: Point.Point;\n private downPositionCanvas?: Point.Point;\n private primaryInteraction: MouseInteraction;\n private currentInteraction?: MouseInteraction;\n private draggingInteraction: MouseInteraction | undefined;\n private lastPrimaryRotateInteraction?: MouseInteraction;\n private isDragging = false;\n private lastMoveEvent?: BaseEvent;\n private interactionTimer?: number;\n private keyboardControls = false;\n\n protected disableIndividualInteractions = false;\n\n private bodyStyleCache?: {\n lineHeightPixels: number;\n height: number;\n };\n\n private primaryInteractionTypeChange = new EventDispatcher<void>();\n\n public constructor(\n protected downEvent: 'mousedown' | 'pointerdown',\n protected upEvent: 'mouseup' | 'pointerup',\n protected moveEvent: 'mousemove' | 'pointermove',\n private rotateInteraction: RotateInteraction,\n private rotatePointInteraction: RotatePointInteraction,\n private zoomInteraction: ZoomInteraction,\n private panInteraction: PanInteraction,\n private twistInteraction: TwistInteraction,\n private pivotInteraction: PivotInteraction,\n private getConfig: ConfigProvider,\n ) {\n this.primaryInteraction = rotateInteraction;\n this.handleDownEvent = this.handleDownEvent.bind(this);\n this.handleMouseWheel = this.handleMouseWheel.bind(this);\n this.handleWindowMove = this.handleWindowMove.bind(this);\n this.handleWindowUp = this.handleWindowUp.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.interactionApi = api;\n element.addEventListener(this.downEvent, this.handleDownEvent);\n element.addEventListener('mousedown', this.handleDoubleClick);\n element.addEventListener('wheel', this.handleMouseWheel, {\n passive: false,\n });\n }\n\n public dispose(): void {\n this.element?.removeEventListener(this.downEvent, this.handleDownEvent);\n this.element?.removeEventListener('mousedown', this.handleDoubleClick);\n this.element?.removeEventListener('wheel', this.handleMouseWheel);\n this.element = undefined;\n }\n\n public onPrimaryInteractionTypeChange(listener: Listener<void>): Disposable {\n return this.primaryInteractionTypeChange.on(listener);\n }\n\n public setCurrentInteractionType(type?: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.currentInteraction = this.rotateInteraction;\n break;\n case 'zoom':\n this.currentInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.currentInteraction = this.panInteraction;\n break;\n case 'twist':\n this.currentInteraction = this.twistInteraction;\n break;\n case 'rotate-point':\n this.currentInteraction = this.rotatePointInteraction;\n break;\n case 'pivot':\n this.currentInteraction = this.pivotInteraction;\n break;\n default:\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction) {\n const point = this.draggingInteraction.getPosition();\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n this.interactionApi?.resetLastAngle();\n this.draggingInteraction.setPosition(point);\n }\n }\n\n public getPrimaryInteractionType(): InteractionType {\n return this.primaryInteraction.getType();\n }\n\n public getCurrentInteractionType(): InteractionType {\n return (this.currentInteraction || this.primaryInteraction).getType();\n }\n\n public setPrimaryInteractionType(type: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.primaryInteraction = this.rotateInteraction;\n this.lastPrimaryRotateInteraction = this.rotateInteraction;\n break;\n case 'rotate-point':\n this.primaryInteraction = this.rotatePointInteraction;\n this.lastPrimaryRotateInteraction = this.rotatePointInteraction;\n break;\n case 'zoom':\n this.primaryInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.primaryInteraction = this.panInteraction;\n break;\n case 'pivot':\n this.primaryInteraction = this.pivotInteraction;\n break;\n }\n this.primaryInteractionTypeChange.emit();\n }\n\n public setDefaultKeyboardControls(keyboardControls: boolean): void {\n this.keyboardControls = keyboardControls;\n }\n\n protected handleDownEvent(event: BaseEvent): void {\n // Prevent selection of any text while interacting with the model.\n event.preventDefault();\n\n this.interactionTimer = window.setTimeout(() => {\n this.downPosition = Point.create(event.screenX, event.screenY);\n this.downPositionCanvas = this.getCanvasPosition(event);\n this.interactionTimer = undefined;\n\n // Perform the current movement in the case that the interaction timer elapses\n if (this.lastMoveEvent != null) {\n this.handleWindowMove(this.lastMoveEvent);\n }\n }, this.getConfig().interactions.interactionDelay);\n\n window.addEventListener(this.moveEvent, this.handleWindowMove);\n window.addEventListener(this.upEvent, this.handleWindowUp);\n }\n\n protected handleWindowMove(event: BaseEvent): void {\n if (this.interactionTimer == null) {\n if (this.disableIndividualInteractions) {\n return;\n }\n\n const position = Point.create(event.screenX, event.screenY);\n const pixelThreshold =\n this.interactionApi != null\n ? this.interactionApi.pixelThreshold(this.isTouch(event))\n : 2;\n if (\n this.downPosition != null &&\n Point.distance(position, this.downPosition) >= pixelThreshold &&\n !this.isDragging\n ) {\n this.beginDrag(event);\n this.isDragging = true;\n }\n\n if (this.isDragging) {\n this.drag(event);\n }\n }\n\n this.lastMoveEvent = event;\n }\n\n protected async handleWindowUp(event: BaseEvent): Promise<void> {\n if (this.isDragging) {\n this.endDrag(event);\n this.isDragging = false;\n }\n\n if (this.interactionTimer != null) {\n window.clearTimeout(this.interactionTimer);\n this.interactionTimer = undefined;\n }\n\n window.removeEventListener(this.moveEvent, this.handleWindowMove);\n window.removeEventListener(this.upEvent, this.handleWindowUp);\n this.lastMoveEvent = undefined;\n }\n\n protected async handleDoubleClick(event: BaseEvent): Promise<void> {\n // event.detail is the number of clicks that have happened recently. If the number is 2, then the user double clicked.\n if (\n event.detail === 2 &&\n event.buttons === 4 &&\n this.interactionApi != null\n ) {\n await this.interactionApi.viewAll();\n }\n }\n\n protected beginDrag(event: BaseEvent): void {\n if (this.keyboardControls && event.metaKey && event.shiftKey) {\n this.currentInteraction = this.rotatePointInteraction;\n } else if (this.keyboardControls && event.shiftKey && event.altKey) {\n this.currentInteraction = this.twistInteraction;\n } else if (this.keyboardControls && event.shiftKey) {\n this.currentInteraction = this.zoomInteraction;\n } else if (this.keyboardControls && (event.metaKey || event.ctrlKey)) {\n this.currentInteraction = this.panInteraction;\n } else if (this.keyboardControls && event.altKey) {\n this.currentInteraction = this.rotateInteraction;\n }\n\n if (event.buttons === 1) {\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n } else if (event.buttons === 2) {\n this.draggingInteraction = this.panInteraction;\n } else if (event.buttons === 4) {\n this.draggingInteraction =\n this.lastPrimaryRotateInteraction ?? this.rotateInteraction;\n }\n\n if (\n this.draggingInteraction != null &&\n this.interactionApi != null &&\n this.element != null\n ) {\n // Ensure any scroll wheel interactions have been ended prior to beginning\n // another interaction to prevent the interaction from being ended early.\n this.zoomInteraction.endDrag(event, this.interactionApi);\n\n this.draggingInteraction.beginDrag(\n event,\n this.downPositionCanvas || Point.create(event.clientX, event.clientY),\n this.interactionApi,\n this.element,\n );\n }\n }\n\n protected drag(event: BaseEvent): void {\n if (this.keyboardControls && event.altKey && event.shiftKey) {\n this.currentInteraction = this.twistInteraction;\n } else {\n this.currentInteraction = undefined;\n }\n this.draggingInteraction =\n this.currentInteraction ||\n this.draggingInteraction ||\n this.primaryInteraction;\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.drag(event, this.interactionApi);\n }\n }\n\n protected endDrag(event: BaseEvent): void {\n if (\n this.keyboardControls &&\n this.currentInteraction === this.twistInteraction\n ) {\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.endDrag(event, this.interactionApi);\n this.draggingInteraction = undefined;\n }\n }\n\n protected handleMouseWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (\n this.element != null &&\n this.interactionApi != null &&\n event.buttons !== 4\n ) {\n const delta =\n -this.wheelDeltaToPixels(event.deltaY, event.deltaMode) / 10;\n const rect = this.element.getBoundingClientRect();\n const point = getMouseClientPosition(event, rect);\n const scrollSize = Math.abs(event.deltaY);\n\n if (scrollSize < 12) {\n // For small wheel movements, send a single zoom event.\n void this.zoomInteraction.zoomToPoint(\n point,\n delta,\n this.interactionApi,\n );\n } else {\n const divisions = Math.min(10, Math.ceil(scrollSize / 12));\n const zoomDelta = delta / divisions;\n // For larger wheel movements, divide the delta into multiple zoom events with increasing delay\n // which approximates a smooth zoom deceleration curve for the end user.\n for (let i = 1; i <= divisions; i++) {\n const delayMs = i * 5;\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi,\n delayMs,\n );\n }\n }, delayMs);\n }\n }\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n // Cached values are an optimization we can use given mouseWheel\n // events can happen dozen or hundreds of times per scroll, but body style\n // is very unlikely to change frequently or while doing wheel movements.\n if (this.bodyStyleCache == null) {\n const bodyStyle = window.getComputedStyle(document.body);\n const fontSize =\n Number.parseFloat(bodyStyle.getPropertyValue('fontSize')) ||\n DEFAULT_FONT_SIZE;\n const lineHeight = Number.parseFloat(\n bodyStyle.getPropertyValue('lineHeight'),\n );\n this.bodyStyleCache = {\n lineHeightPixels: Number.isFinite(lineHeight)\n ? lineHeight\n : fontSize * DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER,\n height:\n Number.parseFloat(bodyStyle.getPropertyValue('height')) ||\n window.innerHeight,\n };\n window.setTimeout(() => {\n this.bodyStyleCache = undefined;\n }, 4800); // For now hardcoded. Could be derived. eg mouseWheelInteractionEndDebounce * 12\n }\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return deltaY * this.bodyStyleCache.lineHeightPixels;\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return deltaY * this.bodyStyleCache.height;\n }\n // deltaMode 0 corresponds to DOM_DELTA_PIXEL, which computes deltas in pixels\n return deltaY;\n }\n\n protected getCanvasPosition(event: BaseEvent): Point.Point | undefined {\n const canvasBounds = this.element?.getBoundingClientRect();\n const canvasOffset =\n canvasBounds != null\n ? Point.create(canvasBounds.left, canvasBounds.top)\n : undefined;\n\n return canvasOffset != null\n ? Point.subtract(Point.create(event.clientX, event.clientY), canvasOffset)\n : undefined;\n }\n\n protected isTouch(event: BaseEvent): boolean {\n return window.PointerEvent != null && event instanceof PointerEvent\n ? event.pointerType === 'touch'\n : false;\n }\n}\n","import { Disposable, UUID } from '@vertexvis/utils';\n\nimport { BaseInteractionHandler } from './baseInteractionHandler';\n\nexport abstract class MultiElementInteractionHandler extends BaseInteractionHandler {\n protected registeredExternalElements: Record<UUID.UUID, Disposable> = {};\n\n public registerAdditionalElement(external: HTMLElement): Disposable {\n const id = UUID.create();\n const disposable = this.addEventListenersToElement(external);\n\n this.registeredExternalElements[id] = disposable;\n return disposable;\n }\n\n public deregisterAdditionalElementById(id: UUID.UUID): void {\n const externalElement = this.registeredExternalElements[id];\n\n externalElement.dispose();\n\n this.registeredExternalElements = Object.fromEntries(\n Object.entries(this.registeredExternalElements).filter(\n ([key]) => key !== id,\n ),\n );\n }\n\n protected deregisterAllListeners(): void {\n Object.keys(this.registeredExternalElements).forEach((id) =>\n this.deregisterAdditionalElementById(id),\n );\n }\n\n public abstract addEventListenersToElement(element?: HTMLElement): Disposable;\n}\n"],"names":["Point","UUID"],"mappings":"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"}
|