@vertexvis/viewer 1.1.1-testing.3 → 1.1.1-testing.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.template.md +14 -8
- package/dist/cjs/{bundle-07I6_WqC.js → bundle-BCS0nA91.js} +28 -25
- package/dist/cjs/bundle-BCS0nA91.js.map +1 -0
- package/dist/cjs/{config-CepHuwRF.js → config-BY0v6BSK.js} +3 -3
- package/dist/cjs/{config-CepHuwRF.js.map → config-BY0v6BSK.js.map} +1 -1
- package/dist/cjs/{controller-Dklbe0Y6.js → controller-DvE3p6ta.js} +3 -3
- package/dist/cjs/{controller-Dklbe0Y6.js.map → controller-DvE3p6ta.js.map} +1 -1
- package/dist/cjs/{dom-Dlu6-7PF.js → dom-BuQSLPWr.js} +3 -3
- package/dist/cjs/{dom-Dlu6-7PF.js.map → dom-BuQSLPWr.js.map} +1 -1
- package/dist/cjs/{entities-BdWnb6KI.js → entities-CEaa12yP.js} +4 -4
- package/dist/cjs/{entities-BdWnb6KI.js.map → entities-CEaa12yP.js.map} +1 -1
- package/dist/cjs/{geometry_pb-BISQT2vx.js → geometry_pb-EVfAEuPO.js} +3 -3
- package/dist/cjs/{geometry_pb-BISQT2vx.js.map → geometry_pb-EVfAEuPO.js.map} +1 -1
- package/dist/cjs/grpc-D5Apx_zz.js.map +1 -1
- package/dist/cjs/index.cjs.js +13 -13
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{markup-C-qyTwID.js → markup-Du4uVRo4.js} +3 -3
- package/dist/cjs/{markup-C-qyTwID.js.map → markup-Du4uVRo4.js.map} +1 -1
- package/dist/cjs/{model-Dy5FvjIA.js → model-BC6acIWJ.js} +3 -3
- package/dist/cjs/{model-Dy5FvjIA.js.map → model-BC6acIWJ.js.map} +1 -1
- package/dist/cjs/model-Bw4h8wNt.js.map +1 -1
- package/dist/cjs/{model-k5VBFN6C.js → model-DqxeakCS.js} +3 -3
- package/dist/cjs/{model-k5VBFN6C.js.map → model-DqxeakCS.js.map} +1 -1
- package/dist/cjs/{multiElementInteractionHandler-Bqpg2wVT.js → multiElementInteractionHandler-Bdeo6FYp.js} +6 -5
- package/dist/cjs/multiElementInteractionHandler-Bdeo6FYp.js.map +1 -0
- package/dist/cjs/{overlays-BujVkBnG.js → overlays-DASFbMSp.js} +3 -3
- package/dist/cjs/{overlays-BujVkBnG.js.map → overlays-DASFbMSp.js.map} +1 -1
- package/dist/cjs/{queries-GhYmoomu.js → queries-LthBzEHD.js} +5 -5
- package/dist/cjs/queries-LthBzEHD.js.map +1 -0
- package/dist/cjs/{regl-component-CB004H91.js → regl-component-B_JaaVlv.js} +6 -6
- package/dist/cjs/{regl-component-CB004H91.js.map → regl-component-B_JaaVlv.js.map} +1 -1
- package/dist/cjs/{representation_pb-CHCm5o1e.js → representation_pb-B6XR10pQ.js} +3 -3
- package/dist/cjs/{representation_pb-CHCm5o1e.js.map → representation_pb-B6XR10pQ.js.map} +1 -1
- package/dist/cjs/{results-BpfUIwa8.js → results-CU9Ctm2K.js} +3 -3
- package/dist/cjs/{results-BpfUIwa8.js.map → results-CU9Ctm2K.js.map} +1 -1
- package/dist/cjs/{streamAttributes-CJOD7AxG.js → streamAttributes-nCF7u7lv.js} +4 -4
- package/dist/cjs/{streamAttributes-CJOD7AxG.js.map → streamAttributes-nCF7u7lv.js.map} +1 -1
- package/dist/cjs/{util-smaTO4bk.js → util-gX3IGslq.js} +3 -3
- package/dist/cjs/{util-smaTO4bk.js.map → util-gX3IGslq.js.map} +1 -1
- package/dist/cjs/{utils-BsXO-wLi.js → utils-D5TGpFAV.js} +3 -3
- package/dist/cjs/utils-D5TGpFAV.js.map +1 -0
- package/dist/cjs/{utils-DY6afhh8.js → utils-opS9hsaU.js} +3 -3
- package/dist/cjs/{utils-DY6afhh8.js.map → utils-opS9hsaU.js.map} +1 -1
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +2 -2
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-column.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +3 -3
- package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-annotation-callout.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-button_3.cjs.entry.js +6 -1
- package/dist/cjs/vertex-viewer-button_3.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +8 -8
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +7 -7
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +7 -7
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +7 -6
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-spinner.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +6 -6
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +8 -8
- package/dist/cjs/viewer.cjs.js +1 -1
- package/dist/cjs/{viewport-B70DgDZj.js → viewport-BDbB9o9T.js} +3 -3
- package/dist/cjs/{viewport-B70DgDZj.js.map → viewport-BDbB9o9T.js.map} +1 -1
- package/dist/collection/components/scene-tree/scene-tree.css +2 -3
- package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
- package/dist/collection/components/scene-tree-notification-banner/scene-tree-notification-banner.css +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.css +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.css +10 -10
- package/dist/collection/components/scene-tree-table-column/scene-tree-table-column.css +0 -1
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.css +3 -3
- package/dist/collection/components/viewer-annotation-callout/viewer-annotation-callout.css +3 -4
- package/dist/collection/components/viewer-box-query-tool/types.js.map +1 -1
- package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.css +9 -7
- package/dist/collection/components/viewer-button/viewer-button.js +32 -1
- package/dist/collection/components/viewer-button/viewer-button.js.map +1 -1
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.css +2 -2
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.js +1 -1
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.js.map +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.css +2 -2
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.css +12 -11
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.css +21 -8
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js +2 -1
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
- package/dist/collection/components/viewer-pin-label-line/viewer-pin-label-line.css +5 -4
- package/dist/collection/components/viewer-spinner/viewer-spinner.css +2 -2
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.css +1 -2
- package/dist/collection/lib/grpc.js.map +1 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js +2 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/scenes/scene.js.map +1 -1
- package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
- package/dist/collection/lib/stream/state.js.map +1 -1
- package/dist/collection/lib/types/loadableResource.js.map +1 -1
- package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
- package/dist/collection/lib/walk-mode/model.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/p-2UsvOTHJ.js +5 -0
- package/dist/components/p-2UsvOTHJ.js.map +1 -0
- package/dist/components/{p-garvKln8.js → p-BAuOB8M-.js} +2 -2
- package/dist/components/p-BAuOB8M-.js.map +1 -0
- package/dist/components/p-BFEV_v80.js +5 -0
- package/dist/components/p-BFEV_v80.js.map +1 -0
- package/dist/components/{p-C02XtMl4.js → p-BHyxBmg6.js} +2 -2
- package/dist/components/{p-CfTvpqud.js → p-BNRm88jS.js} +2 -2
- package/dist/components/{p-O1_Yvjd6.js → p-BT9d9jRt.js} +2 -2
- package/dist/components/{p-oDn1DcWj.js → p-BZDn1Vuv.js} +2 -2
- package/dist/components/{p-VEJB73Ei.js → p-Bdf4AcJ2.js} +2 -2
- package/dist/components/{p-CelQDFR0.js → p-C12jtCFb.js} +2 -2
- package/dist/components/{p-Dzs4u_ZY.js → p-CABws4i9.js} +2 -2
- package/dist/components/p-CIuxJYJL.js.map +1 -1
- package/dist/components/{p-CZgX-9yo.js → p-COznr3CH.js} +2 -2
- package/dist/components/{p-BqeEZXPn.js → p-CPROw2BU.js} +2 -2
- package/dist/components/{p-BKQMbekH.js → p-CWcvgy8e.js} +2 -2
- package/dist/components/{p-CMdP8O-G.js → p-Ca253f0h.js} +2 -2
- package/dist/components/{p-EG7pMA2M.js → p-CeZe0Qql.js} +2 -2
- package/dist/components/p-CioaIHsi.js.map +1 -1
- package/dist/components/{p-DH341c7b.js → p-Cku0WCYo.js} +2 -2
- package/dist/components/p-Cku0WCYo.js.map +1 -0
- package/dist/components/{p-Due5EmBt.js → p-Clyxptbp.js} +2 -2
- package/dist/components/{p-taOlygmc.js → p-Cs2aiMUK.js} +2 -2
- package/dist/components/p-Cs2aiMUK.js.map +1 -0
- package/dist/components/{p-DjrtwKcK.js → p-CvEK3ZK1.js} +2 -2
- package/dist/components/p-Cxz4L6FA.js +5 -0
- package/dist/components/p-Cxz4L6FA.js.map +1 -0
- package/dist/components/{p-MnZadXO8.js → p-D1Vdomj_.js} +2 -2
- package/dist/components/{p-DRGCkSEK.js → p-D3bzgaCV.js} +2 -2
- package/dist/components/{p-DnVcQAR9.js → p-D3in41xo.js} +2 -2
- package/dist/components/p-DTwJX9HL.js +5 -0
- package/dist/components/p-DTwJX9HL.js.map +1 -0
- package/dist/components/p-DUo-H-nW.js +5 -0
- package/dist/components/p-DUo-H-nW.js.map +1 -0
- package/dist/components/{p-DCTZZ5Rd.js → p-DjQ6RXWP.js} +2 -2
- package/dist/components/p-DxuSiXYg.js.map +1 -1
- package/dist/components/{p-CxzyM08j.js → p-DyL2wWm6.js} +2 -2
- package/dist/components/{p-avWSFTeP.js → p-JvS9LLoO.js} +2 -2
- package/dist/{viewer/p-7m7Vr5V7.js → components/p-Ng27jBsS.js} +2 -2
- package/dist/components/p-Ng27jBsS.js.map +1 -0
- package/dist/components/{p-BC777sCK.js → p-UJR-ixsy.js} +2 -2
- package/dist/components/{p-Ib4vgh2t.js → p-UrT4ZJv3.js} +2 -2
- package/dist/components/{p-Ib4vgh2t.js.map → p-UrT4ZJv3.js.map} +1 -1
- package/dist/components/p-Y8W_BXUk.js.map +1 -1
- package/dist/components/{p-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
- package/dist/components/{p-CNprIkKd.js → p-rDr0x5Z7.js} +2 -2
- package/dist/components/vertex-scene-tree-table-cell.js +1 -1
- package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
- package/dist/components/vertex-scene-tree-table-column.js.map +1 -1
- package/dist/components/vertex-scene-tree-table-layout.js +1 -1
- package/dist/components/vertex-scene-tree.js +1 -1
- package/dist/components/vertex-scene-tree.js.map +1 -1
- package/dist/components/vertex-viewer-annotation-callout.js.map +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js.map +1 -1
- package/dist/components/vertex-viewer-button.js +1 -1
- package/dist/components/vertex-viewer-default-toolbar.js +1 -1
- package/dist/components/vertex-viewer-default-toolbar.js.map +1 -1
- package/dist/components/vertex-viewer-dom-element.js +1 -1
- package/dist/components/vertex-viewer-dom-group.js +1 -1
- package/dist/components/vertex-viewer-dom-renderer.js +1 -1
- package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
- package/dist/components/vertex-viewer-markup-arrow.js +1 -1
- package/dist/components/vertex-viewer-markup-circle.js +1 -1
- package/dist/components/vertex-viewer-markup-freeform.js +1 -1
- package/dist/components/vertex-viewer-markup-tool.js +1 -1
- package/dist/components/vertex-viewer-markup-tool.js.map +1 -1
- package/dist/components/vertex-viewer-markup.js +1 -1
- package/dist/components/vertex-viewer-markup.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-details.js +1 -1
- package/dist/components/vertex-viewer-measurement-distance.js +1 -1
- package/dist/components/vertex-viewer-measurement-line.js +1 -1
- package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
- package/dist/components/vertex-viewer-measurement-precise.js +1 -1
- package/dist/components/vertex-viewer-pin-group.js +1 -1
- package/dist/components/vertex-viewer-pin-label-line.js +1 -1
- package/dist/components/vertex-viewer-pin-label.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +1 -1
- package/dist/components/vertex-viewer-teleport-tool.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
- package/dist/components/vertex-viewer-view-cube.js +1 -1
- package/dist/components/vertex-viewer-walk-mode-tool.js +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/esm/{bundle-CZZALKHT.js → bundle-2UsvOTHJ.js} +28 -25
- package/dist/esm/bundle-2UsvOTHJ.js.map +1 -0
- package/dist/esm/{config-CyaUTJEG.js → config-ss9ha12b.js} +3 -3
- package/dist/esm/{config-CyaUTJEG.js.map → config-ss9ha12b.js.map} +1 -1
- package/dist/esm/{controller-ByBd8r3O.js → controller-BPECXXfj.js} +3 -3
- package/dist/esm/{controller-ByBd8r3O.js.map → controller-BPECXXfj.js.map} +1 -1
- package/dist/esm/{dom-Bbf2HAst.js → dom-DaP9SiyY.js} +3 -3
- package/dist/esm/{dom-Bbf2HAst.js.map → dom-DaP9SiyY.js.map} +1 -1
- package/dist/esm/{entities-DriL3zBC.js → entities-DEFAhYdV.js} +4 -4
- package/dist/esm/{entities-DriL3zBC.js.map → entities-DEFAhYdV.js.map} +1 -1
- package/dist/esm/{geometry_pb-BEB8SExe.js → geometry_pb-D7fM1PYG.js} +3 -3
- package/dist/esm/{geometry_pb-BEB8SExe.js.map → geometry_pb-D7fM1PYG.js.map} +1 -1
- package/dist/esm/grpc-hWL8wFvk.js.map +1 -1
- package/dist/esm/index.js +13 -13
- package/dist/esm/index.mjs +13 -13
- package/dist/esm/loader.js +1 -1
- package/dist/esm/loader.mjs +1 -1
- package/dist/esm/{markup-y96-uR-l.js → markup-B58g75Hr.js} +3 -3
- package/dist/esm/{markup-y96-uR-l.js.map → markup-B58g75Hr.js.map} +1 -1
- package/dist/esm/{model-BJQo0DxL.js → model-B5KuXEsl.js} +3 -3
- package/dist/esm/{model-BJQo0DxL.js.map → model-B5KuXEsl.js.map} +1 -1
- package/dist/esm/model-BHVr1tU0.js.map +1 -1
- package/dist/esm/{model-CTdG73h9.js → model-Dc6T63-k.js} +3 -3
- package/dist/esm/{model-CTdG73h9.js.map → model-Dc6T63-k.js.map} +1 -1
- package/dist/esm/{multiElementInteractionHandler-C45E8VzE.js → multiElementInteractionHandler-3tE3OPpw.js} +6 -5
- package/dist/esm/multiElementInteractionHandler-3tE3OPpw.js.map +1 -0
- package/dist/esm/{overlays-DmcRtaSn.js → overlays-BwIqsqLW.js} +3 -3
- package/dist/esm/{overlays-DmcRtaSn.js.map → overlays-BwIqsqLW.js.map} +1 -1
- package/dist/esm/{queries-DWjy-LsV.js → queries-BcmE5Zbq.js} +5 -5
- package/dist/esm/queries-BcmE5Zbq.js.map +1 -0
- package/dist/esm/{regl-component-zzdsBise.js → regl-component-gIonUTBJ.js} +6 -6
- package/dist/esm/{regl-component-zzdsBise.js.map → regl-component-gIonUTBJ.js.map} +1 -1
- package/dist/esm/{representation_pb-CQdJxiGO.js → representation_pb-Bf023NuN.js} +3 -3
- package/dist/esm/{representation_pb-CQdJxiGO.js.map → representation_pb-Bf023NuN.js.map} +1 -1
- package/dist/esm/{results-ClIgKssN.js → results-De9arm7M.js} +3 -3
- package/dist/esm/{results-ClIgKssN.js.map → results-De9arm7M.js.map} +1 -1
- package/dist/esm/{streamAttributes-CTs61PCl.js → streamAttributes-Bj2xDHfI.js} +3 -3
- package/dist/esm/{streamAttributes-CTs61PCl.js.map → streamAttributes-Bj2xDHfI.js.map} +1 -1
- package/dist/esm/{util-DUjEw5Kh.js → util-CMPFqnEv.js} +3 -3
- package/dist/esm/{util-DUjEw5Kh.js.map → util-CMPFqnEv.js.map} +1 -1
- package/dist/esm/{utils-DOjHP1wA.js → utils-B1mSYmAK.js} +3 -3
- package/dist/esm/{utils-DOjHP1wA.js.map → utils-B1mSYmAK.js.map} +1 -1
- package/dist/esm/{utils-DJ5FvINs.js → utils-c-mcLgsj.js} +3 -3
- package/dist/esm/utils-c-mcLgsj.js.map +1 -0
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +2 -2
- package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-column.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +3 -3
- package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-annotation-callout.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-box-query-tool.entry.js +4 -4
- package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-button_3.entry.js +6 -1
- package/dist/esm/vertex-viewer-button_3.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-default-toolbar.entry.js +2 -2
- package/dist/esm/vertex-viewer-default-toolbar.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +5 -5
- package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +5 -5
- package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +3 -3
- package/dist/esm/vertex-viewer-markup-tool.entry.js +4 -4
- package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup.entry.js +3 -3
- package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-details.entry.js +3 -3
- package/dist/esm/vertex-viewer-measurement-distance.entry.js +8 -8
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +5 -5
- package/dist/esm/vertex-viewer-measurement-precise.entry.js +7 -7
- package/dist/esm/vertex-viewer-pin-group.entry.js +7 -7
- package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-label_2.entry.js +7 -6
- package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-tool.entry.js +3 -3
- package/dist/esm/vertex-viewer-spinner.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-teleport-tool.entry.js +2 -2
- package/dist/esm/vertex-viewer-transform-widget.entry.js +6 -6
- package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-view-cube.entry.js +2 -2
- package/dist/esm/vertex-viewer-walk-mode-tool.entry.js +1 -1
- package/dist/esm/vertex-viewer.entry.js +8 -8
- package/dist/esm/viewer.js +1 -1
- package/dist/esm/{viewport-D90kzsD7.js → viewport-CHtidaFL.js} +3 -3
- package/dist/esm/{viewport-D90kzsD7.js.map → viewport-CHtidaFL.js.map} +1 -1
- package/dist/types/components/viewer-button/viewer-button.d.ts +5 -0
- package/dist/types/components.d.ts +14 -1
- package/dist/types/lib/walk-mode/model.d.ts +10 -10
- package/dist/types/regl-shape.d.ts +1 -5
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/{p-12a673f0.entry.js → p-00540193.entry.js} +2 -2
- package/dist/viewer/p-00540193.entry.js.map +1 -0
- package/dist/viewer/{p-78f422af.entry.js → p-287e0670.entry.js} +2 -2
- package/dist/viewer/{p-78f422af.entry.js.map → p-287e0670.entry.js.map} +1 -1
- package/dist/viewer/p-2UsvOTHJ.js +5 -0
- package/dist/viewer/p-2UsvOTHJ.js.map +1 -0
- package/dist/viewer/{p-510fd2e1.entry.js → p-2d2fa147.entry.js} +2 -2
- package/dist/viewer/{p-fe434552.entry.js → p-30a5748d.entry.js} +2 -2
- package/dist/viewer/p-32a51a21.entry.js +5 -0
- package/dist/viewer/p-32a51a21.entry.js.map +1 -0
- package/dist/viewer/{p-aa0359e0.entry.js → p-3c5dd716.entry.js} +2 -2
- package/dist/viewer/{p-9312a936.entry.js → p-48020de1.entry.js} +2 -2
- package/dist/viewer/{p-d5542b6a.entry.js → p-4dd67d16.entry.js} +2 -2
- package/dist/viewer/p-4dd67d16.entry.js.map +1 -0
- package/dist/viewer/p-504e77a7.entry.js +5 -0
- package/dist/viewer/{p-c2c3579f.entry.js.map → p-504e77a7.entry.js.map} +1 -1
- package/dist/viewer/{p-71c03352.entry.js → p-53f6cc59.entry.js} +2 -2
- package/dist/viewer/{p-7b4eec65.entry.js → p-5cfb3047.entry.js} +2 -2
- package/dist/viewer/{p-e3981cf8.entry.js → p-7cb9c9bb.entry.js} +2 -2
- package/dist/viewer/p-7cb9c9bb.entry.js.map +1 -0
- package/dist/viewer/{p-56e39cff.entry.js → p-83683307.entry.js} +2 -2
- package/dist/viewer/{p-a108a305.entry.js → p-9a39315d.entry.js} +2 -2
- package/dist/viewer/{p-O1_Yvjd6.js → p-BT9d9jRt.js} +2 -2
- package/dist/viewer/{p-O1_Yvjd6.js.map → p-BT9d9jRt.js.map} +1 -1
- package/dist/viewer/{p-VEJB73Ei.js → p-Bdf4AcJ2.js} +2 -2
- package/dist/viewer/{p-VEJB73Ei.js.map → p-Bdf4AcJ2.js.map} +1 -1
- package/dist/viewer/{p-Cr2EnhS-.js → p-BhKTTmpL.js} +2 -2
- package/dist/viewer/{p-Cr2EnhS-.js.map → p-BhKTTmpL.js.map} +1 -1
- package/dist/viewer/{p-CelQDFR0.js → p-C12jtCFb.js} +2 -2
- package/dist/viewer/{p-CelQDFR0.js.map → p-C12jtCFb.js.map} +1 -1
- package/dist/viewer/p-CEDqc5sS.js +5 -0
- package/dist/viewer/{p-BDy3SLKk.js.map → p-CEDqc5sS.js.map} +1 -1
- package/dist/viewer/{p-C6YtUG51.js → p-CS8PfgcI.js} +2 -2
- package/dist/viewer/{p-C6YtUG51.js.map → p-CS8PfgcI.js.map} +1 -1
- package/dist/viewer/{p-EG7pMA2M.js → p-CeZe0Qql.js} +2 -2
- package/dist/viewer/{p-EG7pMA2M.js.map → p-CeZe0Qql.js.map} +1 -1
- package/dist/viewer/p-CioaIHsi.js.map +1 -1
- package/dist/viewer/{p-EUeCUp3y.js → p-CxBXErQ8.js} +2 -2
- package/dist/viewer/{p-EUeCUp3y.js.map → p-CxBXErQ8.js.map} +1 -1
- package/dist/viewer/{p-BIR7Lfxx.js → p-CyiY_hsD.js} +2 -2
- package/dist/viewer/{p-BIR7Lfxx.js.map → p-CyiY_hsD.js.map} +1 -1
- package/dist/viewer/{p-CIBBr-p1.js → p-D0aTA_2m.js} +2 -2
- package/dist/viewer/{p-CIBBr-p1.js.map → p-D0aTA_2m.js.map} +1 -1
- package/dist/viewer/{p-C-huOg09.js → p-D2IEHEGM.js} +2 -2
- package/dist/viewer/{p-C-huOg09.js.map → p-D2IEHEGM.js.map} +1 -1
- package/dist/viewer/{p-UQXG8bCI.js → p-DBfvBC5O.js} +2 -2
- package/dist/viewer/p-DBfvBC5O.js.map +1 -0
- package/dist/viewer/{p-B-J4CqZy.js → p-DHK23fw4.js} +2 -2
- package/dist/viewer/{p-B-J4CqZy.js.map → p-DHK23fw4.js.map} +1 -1
- package/dist/{components/p-QhlhRt6X.js → viewer/p-DIbJ8Ijj.js} +2 -2
- package/dist/viewer/p-DIbJ8Ijj.js.map +1 -0
- package/dist/viewer/{p-CxzyM08j.js → p-DyL2wWm6.js} +2 -2
- package/dist/viewer/{p-CxzyM08j.js.map → p-DyL2wWm6.js.map} +1 -1
- package/dist/viewer/{p-avWSFTeP.js → p-JvS9LLoO.js} +2 -2
- package/dist/viewer/{p-avWSFTeP.js.map → p-JvS9LLoO.js.map} +1 -1
- package/dist/viewer/p-_LpaX1ga.js +5 -0
- package/dist/viewer/p-_LpaX1ga.js.map +1 -0
- package/dist/viewer/{p-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
- package/dist/viewer/{p-mpsCUvSn.js.map → p-_qi2VkC2.js.map} +1 -1
- package/dist/viewer/p-b5cc83a4.entry.js.map +1 -1
- package/dist/viewer/{p-82ed4346.entry.js → p-b79c295a.entry.js} +2 -2
- package/dist/viewer/{p-fc7d9b2b.entry.js → p-c531ca97.entry.js} +2 -2
- package/dist/viewer/{p-fc7d9b2b.entry.js.map → p-c531ca97.entry.js.map} +1 -1
- package/dist/viewer/p-c9dee5c4.entry.js +5 -0
- package/dist/viewer/p-c9dee5c4.entry.js.map +1 -0
- package/dist/viewer/{p-c2454523.entry.js → p-cc835213.entry.js} +2 -2
- package/dist/viewer/p-ce711ae0.entry.js +5 -0
- package/dist/viewer/p-ce711ae0.entry.js.map +1 -0
- package/dist/viewer/p-d357d235.entry.js.map +1 -1
- package/dist/viewer/{p-91fca24b.entry.js → p-d5a57757.entry.js} +2 -2
- package/dist/viewer/p-e4913b06.entry.js +5 -0
- package/dist/viewer/p-e4913b06.entry.js.map +1 -0
- package/dist/viewer/p-e98db875.entry.js.map +1 -1
- package/dist/viewer/{p-a893a299.entry.js → p-edc2f914.entry.js} +2 -2
- package/dist/viewer/{p-03a531d9.entry.js → p-ef9437ca.entry.js} +2 -2
- package/dist/viewer/{p-49578ec9.entry.js → p-fd3a5837.entry.js} +2 -2
- package/dist/viewer/p-fd3a5837.entry.js.map +1 -0
- package/dist/viewer/p-ipyYHvea.js.map +1 -1
- package/dist/viewer/{p-Ce1j43tF.js → p-kMZA0v7I.js} +2 -2
- package/dist/viewer/{p-Ce1j43tF.js.map → p-kMZA0v7I.js.map} +1 -1
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +8 -8
- package/readme.md +14 -8
- package/dist/cjs/bundle-07I6_WqC.js.map +0 -1
- package/dist/cjs/multiElementInteractionHandler-Bqpg2wVT.js.map +0 -1
- package/dist/cjs/queries-GhYmoomu.js.map +0 -1
- package/dist/cjs/utils-BsXO-wLi.js.map +0 -1
- package/dist/components/p-B4sO9HdX.js +0 -5
- package/dist/components/p-B4sO9HdX.js.map +0 -1
- package/dist/components/p-C--Voxln.js +0 -5
- package/dist/components/p-C--Voxln.js.map +0 -1
- package/dist/components/p-CZZALKHT.js +0 -5
- package/dist/components/p-CZZALKHT.js.map +0 -1
- package/dist/components/p-Cn0vKqIN.js +0 -5
- package/dist/components/p-Cn0vKqIN.js.map +0 -1
- package/dist/components/p-DH341c7b.js.map +0 -1
- package/dist/components/p-Dmc49hX3.js +0 -5
- package/dist/components/p-Dmc49hX3.js.map +0 -1
- package/dist/components/p-QhlhRt6X.js.map +0 -1
- package/dist/components/p-garvKln8.js.map +0 -1
- package/dist/components/p-taOlygmc.js.map +0 -1
- package/dist/esm/bundle-CZZALKHT.js.map +0 -1
- package/dist/esm/multiElementInteractionHandler-C45E8VzE.js.map +0 -1
- package/dist/esm/queries-DWjy-LsV.js.map +0 -1
- package/dist/esm/utils-DJ5FvINs.js.map +0 -1
- package/dist/viewer/p-02384d83.entry.js +0 -5
- package/dist/viewer/p-02384d83.entry.js.map +0 -1
- package/dist/viewer/p-12a673f0.entry.js.map +0 -1
- package/dist/viewer/p-49578ec9.entry.js.map +0 -1
- package/dist/viewer/p-4c223366.entry.js +0 -5
- package/dist/viewer/p-4c223366.entry.js.map +0 -1
- package/dist/viewer/p-7m7Vr5V7.js.map +0 -1
- package/dist/viewer/p-8774425b.entry.js +0 -5
- package/dist/viewer/p-8774425b.entry.js.map +0 -1
- package/dist/viewer/p-9c02567d.entry.js +0 -5
- package/dist/viewer/p-9c02567d.entry.js.map +0 -1
- package/dist/viewer/p-BDy3SLKk.js +0 -5
- package/dist/viewer/p-CZZALKHT.js +0 -5
- package/dist/viewer/p-CZZALKHT.js.map +0 -1
- package/dist/viewer/p-Cju1inFh.js +0 -5
- package/dist/viewer/p-Cju1inFh.js.map +0 -1
- package/dist/viewer/p-UQXG8bCI.js.map +0 -1
- package/dist/viewer/p-c2c3579f.entry.js +0 -5
- package/dist/viewer/p-d5542b6a.entry.js.map +0 -1
- package/dist/viewer/p-e3981cf8.entry.js.map +0 -1
- /package/dist/components/{p-C02XtMl4.js.map → p-BHyxBmg6.js.map} +0 -0
- /package/dist/components/{p-CfTvpqud.js.map → p-BNRm88jS.js.map} +0 -0
- /package/dist/components/{p-O1_Yvjd6.js.map → p-BT9d9jRt.js.map} +0 -0
- /package/dist/components/{p-oDn1DcWj.js.map → p-BZDn1Vuv.js.map} +0 -0
- /package/dist/components/{p-VEJB73Ei.js.map → p-Bdf4AcJ2.js.map} +0 -0
- /package/dist/components/{p-CelQDFR0.js.map → p-C12jtCFb.js.map} +0 -0
- /package/dist/components/{p-Dzs4u_ZY.js.map → p-CABws4i9.js.map} +0 -0
- /package/dist/components/{p-CZgX-9yo.js.map → p-COznr3CH.js.map} +0 -0
- /package/dist/components/{p-BqeEZXPn.js.map → p-CPROw2BU.js.map} +0 -0
- /package/dist/components/{p-BKQMbekH.js.map → p-CWcvgy8e.js.map} +0 -0
- /package/dist/components/{p-CMdP8O-G.js.map → p-Ca253f0h.js.map} +0 -0
- /package/dist/components/{p-EG7pMA2M.js.map → p-CeZe0Qql.js.map} +0 -0
- /package/dist/components/{p-Due5EmBt.js.map → p-Clyxptbp.js.map} +0 -0
- /package/dist/components/{p-DjrtwKcK.js.map → p-CvEK3ZK1.js.map} +0 -0
- /package/dist/components/{p-MnZadXO8.js.map → p-D1Vdomj_.js.map} +0 -0
- /package/dist/components/{p-DRGCkSEK.js.map → p-D3bzgaCV.js.map} +0 -0
- /package/dist/components/{p-DnVcQAR9.js.map → p-D3in41xo.js.map} +0 -0
- /package/dist/components/{p-DCTZZ5Rd.js.map → p-DjQ6RXWP.js.map} +0 -0
- /package/dist/components/{p-CxzyM08j.js.map → p-DyL2wWm6.js.map} +0 -0
- /package/dist/components/{p-avWSFTeP.js.map → p-JvS9LLoO.js.map} +0 -0
- /package/dist/components/{p-BC777sCK.js.map → p-UJR-ixsy.js.map} +0 -0
- /package/dist/components/{p-mpsCUvSn.js.map → p-_qi2VkC2.js.map} +0 -0
- /package/dist/components/{p-CNprIkKd.js.map → p-rDr0x5Z7.js.map} +0 -0
- /package/dist/viewer/{p-510fd2e1.entry.js.map → p-2d2fa147.entry.js.map} +0 -0
- /package/dist/viewer/{p-fe434552.entry.js.map → p-30a5748d.entry.js.map} +0 -0
- /package/dist/viewer/{p-aa0359e0.entry.js.map → p-3c5dd716.entry.js.map} +0 -0
- /package/dist/viewer/{p-9312a936.entry.js.map → p-48020de1.entry.js.map} +0 -0
- /package/dist/viewer/{p-71c03352.entry.js.map → p-53f6cc59.entry.js.map} +0 -0
- /package/dist/viewer/{p-7b4eec65.entry.js.map → p-5cfb3047.entry.js.map} +0 -0
- /package/dist/viewer/{p-56e39cff.entry.js.map → p-83683307.entry.js.map} +0 -0
- /package/dist/viewer/{p-a108a305.entry.js.map → p-9a39315d.entry.js.map} +0 -0
- /package/dist/viewer/{p-82ed4346.entry.js.map → p-b79c295a.entry.js.map} +0 -0
- /package/dist/viewer/{p-c2454523.entry.js.map → p-cc835213.entry.js.map} +0 -0
- /package/dist/viewer/{p-91fca24b.entry.js.map → p-d5a57757.entry.js.map} +0 -0
- /package/dist/viewer/{p-a893a299.entry.js.map → p-edc2f914.entry.js.map} +0 -0
- /package/dist/viewer/{p-03a531d9.entry.js.map → p-ef9437ca.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TeleportInteractionHandler","constructor","model","animationConfiguration","this","rectObserver","ElementRectObserver","handlePointerDown","bind","handlePointerUp","handleEnabledChange","handleTeleportModeChange","enabledChangeDisposable","onEnabledChange","dispose","disable","_a","element","undefined","api","disconnect","initialize","observe","getEnabled","setAnimations","config","enable","teleportModeChangeDisposable","onTeleportModeChange","addEventListener","getTeleportMode","_b","cursorDisposable","_c","removeEventListener","event","downPosition","getMouseClientPosition","rect","downButtons","buttons","window","mode","threshold","pixelThreshold","point","isRightClick","hasModifier","shiftKey","altKey","metaKey","ctrlKey","Point","distance","teleportToHit","teleportTowardHit","teleportAndAlign","beginInteraction","isInteracting","endInteraction","worldPoint","getWorldPointFromViewport","mouseRay","getRayFromPoint","teleportDistancePercentage","teleportCollisionDistance","getConfiguration","teleportDistanceScalar","performInteraction","camera","boundingBox","stepDistance","Math","max","Vector3","toArray","BoundingBox","lengths","positionPlane","Plane","fromNormalAndCoplanarPoint","up","position","projectedWorldPoint","projectPoint","distanceToWorldPoint","mouseRayAtWorldPoint","Ray","create","origin","nextPosition","at","update","lookAt","add","subtract","projectedNextStep","getWorldPointWithFallback","shortestBoundingBoxLength","shortestLength","heightScalar","getTeleportHeightPercentage","cameraPlane","projectedHitPosition","rayToHitPosition","direction","normalize","distanceToHitPosition","distanceToLookAt","newPosition","newPositionViewVectorRay","viewVector","hits","hitItems","hit","hitNormal","hitPoint","upRay","alignTo","fn","transformCamera","renderConfiguration","enabled","addCursor","min","animation","milliseconds","durationMs","KeyBinding","bindings","map","binding","toLowerCase","matches","keys","length","every","bindingMatches","negated","includes","key","replace","WalkModeController","excludeTagNames","excludePredicates","updateModelExclusions","updateModel","setEnabled","setTeleportMode","updateConfiguration","configuration","existing","setConfiguration","addKeyBinding","operation","replaceKeyBinding","excludeElement","args","filter","tn","setExcludedPredicate","el","some","tagName","p","ViewerWalkModeOperation","WalkModeModel","keyBindings","MOVE_DOWN","MOVE_UP","PIVOT_DOWN","PIVOT_LEFT","PIVOT_RIGHT","PIVOT_UP","WALK_BACKWARD","WALK_FORWARD","WALK_LEFT","WALK_RIGHT","teleportHeightPercentage","keyboardWalkSpeed","keyboardPivotDegrees","keyboardRepeatIntervalMs","enabledChanged","EventDispatcher","teleportModeChanged","configurationChanged","keyBindingsChanged","emit","teleportMode","keyBinding","predicate","excludedPredicate","getKeyboardWalkSpeed","getKeyboardPivotDegrees","getKeyboardRepeatInterval","getKeyBindings","operationMatches","state","isElementExcluded","call","listener","on","onConfigurationChange","onKeyBindingsChange","viewerTeleportToolCss","ViewerTeleportTool","__stencil_proxyCustomElement","HTMLElement","registerHost","animationsDisabled","animationMs","stateMap","componentWillLoad","setupController","setupInteractionHandler","setDepthBuffers","connectedCallback","disconnectedCallback","clearInteractionHandler","resetDepthBuffers","handleModeChange","controller","handleViewerChanged","handleAnimationMsChanged","interactionHandler","handleAnimationsDisabledChanged","handleControllerChanged","controllerChanged","handleModelChanged","render","h","Host","viewer","depthBuffers","shouldClearDepthBuffers","interactionHandlerDisposable","registerInteractionHandler"],"sources":["src/lib/teleportation/interactions.ts","src/lib/keyBinding.ts","src/lib/walk-mode/controller.ts","src/lib/walk-mode/model.ts","src/components/viewer-teleport-tool/viewer-teleport-tool.css?tag=vertex-viewer-teleport-tool&encapsulation=shadow","src/components/viewer-teleport-tool/viewer-teleport-tool.tsx"],"sourcesContent":["import { BoundingBox, Plane, Point, Ray, Vector3 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport {\n CameraTransform,\n InteractionApi,\n InteractionHandler,\n} from '../interactions';\nimport { Camera, CameraRenderOptions } from '../scenes';\nimport { ViewerTeleportMode, WalkModeModel } from '../walk-mode/model';\n\nexport interface AnimationConfiguration {\n durationMs: number;\n}\n\nexport class TeleportInteractionHandler implements InteractionHandler {\n private api?: InteractionApi;\n private element?: HTMLElement;\n\n private rectObserver = new ElementRectObserver();\n\n private downPosition?: Point.Point;\n private downButtons?: number;\n\n private enabledChangeDisposable?: Disposable;\n private teleportModeChangeDisposable?: Disposable;\n private cursorDisposable?: Disposable;\n\n public constructor(\n private model: WalkModeModel,\n private animationConfiguration?: AnimationConfiguration,\n ) {\n this.handlePointerDown = this.handlePointerDown.bind(this);\n this.handlePointerUp = this.handlePointerUp.bind(this);\n this.handleEnabledChange = this.handleEnabledChange.bind(this);\n this.handleTeleportModeChange = this.handleTeleportModeChange.bind(this);\n\n this.enabledChangeDisposable = this.model.onEnabledChange(\n this.handleEnabledChange,\n );\n }\n\n public dispose(): void {\n this.disable();\n this.enabledChangeDisposable?.dispose();\n\n this.element = undefined;\n this.api = undefined;\n\n this.rectObserver.disconnect();\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.rectObserver.observe(element);\n\n this.handleEnabledChange(this.model.getEnabled());\n }\n\n public setAnimations(config?: AnimationConfiguration): void {\n this.animationConfiguration = config;\n }\n\n public enable(): void {\n this.disable();\n\n this.teleportModeChangeDisposable = this.model.onTeleportModeChange(\n this.handleTeleportModeChange,\n );\n this.element?.addEventListener('pointerdown', this.handlePointerDown);\n\n this.handleTeleportModeChange(this.model.getTeleportMode());\n }\n\n public disable(): void {\n this.teleportModeChangeDisposable?.dispose();\n this.cursorDisposable?.dispose();\n\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n }\n\n private async handlePointerDown(event: PointerEvent): Promise<void> {\n this.downPosition = getMouseClientPosition(event, this.rectObserver.rect);\n this.downButtons = event.buttons;\n\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n private async handlePointerUp(event: PointerEvent): Promise<void> {\n const mode = this.model.getTeleportMode();\n const threshold = this.api?.pixelThreshold() ?? 2;\n const point = getMouseClientPosition(event, this.rectObserver.rect);\n const isRightClick = this.downButtons === 2;\n const hasModifier =\n event.shiftKey || event.altKey || event.metaKey || event.ctrlKey;\n\n if (\n mode != null &&\n this.downPosition != null &&\n Point.distance(this.downPosition, point) <= threshold &&\n !isRightClick &&\n !hasModifier\n ) {\n switch (mode) {\n case 'teleport':\n return this.teleportToHit(point);\n case 'teleport-toward':\n return this.teleportTowardHit(point);\n case 'teleport-and-align':\n return this.teleportAndAlign(point);\n }\n }\n\n this.downPosition = undefined;\n\n window.removeEventListener('pointerup', this.handlePointerUp);\n }\n\n private async beginInteraction(): Promise<void> {\n if (!this.api?.isInteracting()) {\n await this.api?.beginInteraction();\n }\n }\n\n private async endInteraction(): Promise<void> {\n await this.api?.endInteraction();\n }\n\n private async teleportTowardHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n const mouseRay = this.api?.getRayFromPoint(point);\n\n if (mouseRay != null) {\n const { teleportDistancePercentage, teleportCollisionDistance } =\n this.model.getConfiguration();\n const teleportDistanceScalar = teleportDistancePercentage / 100;\n\n return this.performInteraction(({ camera, boundingBox }) => {\n const stepDistance =\n Math.max(...Vector3.toArray(BoundingBox.lengths(boundingBox))) *\n teleportDistanceScalar;\n\n const positionPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position,\n );\n const projectedWorldPoint = Plane.projectPoint(\n positionPlane,\n worldPoint ?? camera.position,\n );\n const distanceToWorldPoint = Vector3.distance(\n camera.position,\n projectedWorldPoint,\n );\n\n if (\n distanceToWorldPoint < stepDistance &&\n distanceToWorldPoint > teleportCollisionDistance * 1.1\n ) {\n const mouseRayAtWorldPoint = Ray.create({\n ...mouseRay,\n origin: projectedWorldPoint,\n });\n const nextPosition = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRayAtWorldPoint, -teleportCollisionDistance),\n );\n\n return camera.update({\n position: nextPosition,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(nextPosition, camera.position),\n ),\n });\n } else {\n const projectedNextStep = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRay, stepDistance),\n );\n\n return camera.update({\n position: projectedNextStep,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(projectedNextStep, camera.position),\n ),\n });\n }\n });\n }\n }\n\n private async teleportToHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.getWorldPointWithFallback(point);\n\n if (worldPoint != null) {\n return this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const cameraPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position,\n );\n const projectedHitPosition = Plane.projectPoint(\n cameraPlane,\n worldPoint,\n );\n\n const rayToHitPosition = Ray.create({\n origin: camera.position,\n direction: Vector3.normalize(\n Vector3.subtract(projectedHitPosition, camera.position),\n ),\n });\n const distanceToHitPosition = Vector3.distance(\n camera.position,\n projectedHitPosition,\n );\n const distanceToLookAt = Vector3.distance(\n camera.position,\n camera.lookAt,\n );\n\n const newPosition = Ray.at(\n rayToHitPosition,\n distanceToHitPosition - shortestBoundingBoxLength * heightScalar,\n );\n const newPositionViewVectorRay = Ray.create({\n origin: newPosition,\n direction: Vector3.normalize(camera.viewVector),\n });\n\n return camera.update({\n position: newPosition,\n lookAt: Ray.at(newPositionViewVectorRay, distanceToLookAt),\n });\n });\n }\n }\n\n private async teleportAndAlign(point: Point.Point): Promise<void> {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n if (hit?.hitNormal != null && hit?.hitPoint) {\n await this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const upRay = Ray.create({\n origin: hit.hitPoint as Vector3.Vector3,\n direction: hit.hitNormal as Vector3.Vector3,\n });\n\n return camera.alignTo(\n Ray.at(upRay, shortestBoundingBoxLength * heightScalar),\n hit.hitNormal as Vector3.Vector3,\n );\n });\n }\n }\n\n private async performInteraction(fn: CameraTransform<Camera>): Promise<void> {\n await this.beginInteraction();\n await this.api?.transformCamera(fn, this.renderConfiguration());\n await this.endInteraction();\n }\n\n private async getWorldPointWithFallback(\n point: Point.Point,\n ): Promise<Vector3.Vector3 | undefined> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n\n if (worldPoint == null) {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n return hit?.hitPoint != null\n ? (hit.hitPoint as Vector3.Vector3)\n : worldPoint;\n }\n return worldPoint;\n }\n\n private handleEnabledChange(enabled: boolean): void {\n if (enabled) {\n this.enable();\n } else {\n this.disable();\n }\n }\n\n private handleTeleportModeChange(mode?: ViewerTeleportMode): void {\n this.cursorDisposable?.dispose();\n\n if (mode != null) {\n this.cursorDisposable = this.api?.addCursor('crosshair');\n }\n }\n\n private shortestLength(boundingBox: BoundingBox.BoundingBox): number {\n return Math.min(...Vector3.toArray(BoundingBox.lengths(boundingBox)));\n }\n\n private renderConfiguration(): CameraRenderOptions {\n return this.animationConfiguration != null\n ? { animation: { milliseconds: this.animationConfiguration.durationMs } }\n : {};\n }\n}\n","export class KeyBinding {\n private bindings: string[];\n\n public constructor(...bindings: string[]) {\n this.bindings = bindings.map((binding) => binding.toLowerCase());\n }\n\n public matches(keys: Record<string, boolean>): boolean {\n return (\n this.bindings.length > 0 &&\n this.bindings.every((binding) => this.bindingMatches(keys, binding))\n );\n }\n\n private bindingMatches(\n keys: Record<string, boolean>,\n binding: string,\n ): boolean {\n const negated = binding.includes('!');\n const key = binding.replace('!', '');\n\n return negated ? !keys[key] : keys[key];\n }\n}\n","import { Disposable } from '@vertexvis/utils';\n\nimport { KeyBinding } from '../keyBinding';\nimport {\n ViewerTeleportMode,\n ViewerWalkModeConfiguration,\n ViewerWalkModeOperation,\n WalkModeModel,\n} from './model';\n\nexport class WalkModeController {\n private excludeTagNames: Array<string> = [\n 'VERTEX-SCENE-TREE',\n 'VERTEX-SCENE-TREE-SEARCH',\n 'VERTEX-VIEWER-PIN-TOOL',\n 'INPUT',\n 'TEXTAREA',\n ];\n\n private excludePredicates: Array<(el: Element) => boolean> = [];\n\n public constructor(private model: WalkModeModel) {\n this.updateModelExclusions();\n }\n\n /**\n * @internal\n */\n public updateModel(model: WalkModeModel): void {\n this.model = model;\n }\n\n /**\n * Sets whether downstream walk mode interaction handlers are enabled.\n * Setting this value to `false` will remove all event listeners for\n * the interactions, and setting this value to `true` will add or\n * re-add the event listeners.\n */\n public setEnabled(enabled: boolean): void {\n this.model.setEnabled(enabled);\n }\n\n /**\n * Sets the `ViewerTeleportMode` to be used with a `<vertex-viewer-teleport-tool>`.\n */\n public setTeleportMode(mode?: ViewerTeleportMode): void {\n this.model.setTeleportMode(mode);\n }\n\n /**\n * Updates the configuration for downstream walk mode interaction handlers.\n *\n * `teleportHeightPercentage` - percentage used for fine-tuning the distance to offset\n * the camera from a surface when performing a `teleport-and-align`. This percentage is\n * used alongside the shortest side of the visible bounding box to determine how far to\n * place the camera from the surface that has been hit, with a larger percentage placing\n * the camera further from the surface and vice-versa. Defaults to 11.75%.\n *\n * `teleportDistancePercentage` - percentage used for fine-tuning the distance moved per\n * click with the `teleport-toward` mode. This percentage is used alongside the longest\n * side of the visible bounding box to determine how far to move the camera's position\n * with each click, with a larger percentage moving the camera further and vice-versa.\n * Defaults to 2%.\n *\n * `teleportCollisionDistance` - distance used alongside the `teleportCollisionPercentage`\n * to determine whether a click with the `teleport-toward` mode would cause a \"collision\",\n * or would pass through the point clicked. If such a collision would occur, the camera is\n * instead placed this distance back from the point clicked once, then allowed to pass\n * through the point on subsequent clicks. Note that this will not apply if clicks occur\n * in quick succession without setting the `depthBuffers` property on the `<vertex-viewer>`\n * to `all` frames. Defaults to `1000`.\n *\n * `keyboardWalkSpeed` - speed to move the camera when performing keyboard-based\n * walk interactions. A larger number here will result in a faster walk speed through\n * the model and vice-versa. Defaults to `5`.\n *\n * `keyboardPivotDegrees` - number of degrees to move the camera when performing\n * keyboard-based pivot interactions. Defaults to `1`.\n *\n * `keyboardRepeatIntervalMs` - number of milliseconds to repeat keyboard-based interactions.\n * this value is multiplicative with the `keyboardWalkSpeed` and `keyboardPivotDegrees`, and\n * lower numbers will result in faster movement and vice-versa. Defaults to `25`.\n *\n */\n public updateConfiguration(\n configuration: Partial<ViewerWalkModeConfiguration>,\n ): void {\n const existing = this.model.getConfiguration();\n\n this.model.setConfiguration({\n ...existing,\n ...configuration,\n });\n }\n\n /**\n * Adds a custom keybinding for a specific walk operation. This will append to the\n * existing set of keybindings to allow for multiple keybindings for a specific\n * operation. To replace the defaults, see `replaceKeyBinding`.\n */\n public addKeyBinding(\n operation: ViewerWalkModeOperation,\n ...keys: string[]\n ): void {\n this.model.addKeyBinding(operation, new KeyBinding(...keys));\n }\n\n /**\n * Adds a custom keybinding for a specific walk operation. This will replace any\n * existing keybindings to allow for overriding the default behavior.\n *\n * @example\n * ```\n * const walkModeTool = document.querySelector('vertex-viewer-walk-mode-tool');\n *\n * // Remove keybinding for the `PIVOT_UP` operation\n * walkModeTool.controller.replaceKeyBinding('PIVOT_UP');\n *\n * // Replace keybinding for `WALK_FORWARD` with `ArrowUp` instead of `w`\n * walkModeTool.controller.replaceKeyBinding('WALK_FORWARD', 'ArrowUp');\n * ```\n */\n public replaceKeyBinding(\n operation: ViewerWalkModeOperation,\n ...keys: string[]\n ): void {\n this.model.replaceKeyBinding(operation, new KeyBinding(...keys));\n }\n\n /**\n * Adds an exclusion for specific elements when responding to keyboard\n * events. This is useful when there are other elements on screen that\n * require keyboard interaction and the walk mode handlers should not\n * respond to the keyboard events. Can be either a element's `tagName`\n * or a predicate. Returns a `Disposable` that can be used to remove the\n * exclusion.\n *\n * Default `tagName` exclusions:\n * 'VERTEX-SCENE-TREE'\n * 'VERTEX-SCENE-TREE-SEARCH'\n * 'VERTEX-VIEWER-PIN-TOOL'\n * 'INPUT'\n * 'TEXTAREA'\n */\n public excludeElement(predicate: (el: Element) => boolean): Disposable;\n public excludeElement(tagName: string): Disposable;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public excludeElement(...args: any[]): Disposable {\n if (typeof args[0] === 'string') {\n this.excludeTagNames = [...this.excludeTagNames, args[0]];\n\n this.updateModelExclusions();\n\n return {\n dispose: () => {\n this.excludeTagNames = this.excludeTagNames.filter(\n (tn) => tn !== args[0],\n );\n },\n };\n } else {\n this.excludePredicates = [...this.excludePredicates, args[0]];\n\n this.updateModelExclusions();\n\n return {\n dispose: () => {\n this.excludePredicates = this.excludePredicates.filter(\n (tn) => tn !== args[0],\n );\n },\n };\n }\n }\n\n private updateModelExclusions(): void {\n this.model.setExcludedPredicate(\n (el) =>\n this.excludeTagNames.some((tn) => tn === el.tagName) ||\n this.excludePredicates.some((p) => p(el)),\n );\n }\n}\n","import { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { KeyBinding } from '../keyBinding';\n\nexport interface ViewerWalkModeConfiguration {\n teleportHeightPercentage: number;\n teleportDistancePercentage: number;\n teleportCollisionDistance: number;\n keyboardWalkSpeed: number;\n keyboardPivotDegrees: number;\n keyboardRepeatIntervalMs: number;\n}\n\nexport type ViewerTeleportMode =\n | 'teleport'\n | 'teleport-and-align'\n | 'teleport-toward';\n\nexport enum ViewerWalkModeOperation {\n 'MOVE_DOWN' = 'MOVE_DOWN',\n 'MOVE_UP' = 'MOVE_UP',\n 'PIVOT_DOWN' = 'PIVOT_DOWN',\n 'PIVOT_LEFT' = 'PIVOT_LEFT',\n 'PIVOT_RIGHT' = 'PIVOT_RIGHT',\n 'PIVOT_UP' = 'PIVOT_UP',\n 'WALK_BACKWARD' = 'WALK_BACKWARD',\n 'WALK_FORWARD' = 'WALK_FORWARD',\n 'WALK_LEFT' = 'WALK_LEFT',\n 'WALK_RIGHT' = 'WALK_RIGHT',\n}\n\nexport type ViewerWalkModeKeyBindings = Record<\n ViewerWalkModeOperation,\n KeyBinding[]\n>;\n\nexport class WalkModeModel {\n private keyBindings: ViewerWalkModeKeyBindings = {\n [ViewerWalkModeOperation.MOVE_DOWN]: [\n new KeyBinding('PageDown', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.MOVE_UP]: [\n new KeyBinding('PageUp', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_DOWN]: [\n new KeyBinding('ArrowDown', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_LEFT]: [\n new KeyBinding('ArrowLeft', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_RIGHT]: [\n new KeyBinding('ArrowRight', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_UP]: [\n new KeyBinding('ArrowUp', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.WALK_BACKWARD]: [new KeyBinding('s')],\n [ViewerWalkModeOperation.WALK_FORWARD]: [new KeyBinding('w')],\n [ViewerWalkModeOperation.WALK_LEFT]: [new KeyBinding('a')],\n [ViewerWalkModeOperation.WALK_RIGHT]: [new KeyBinding('d')],\n };\n\n private configuration: ViewerWalkModeConfiguration = {\n teleportHeightPercentage: 11.75,\n teleportDistancePercentage: 2,\n teleportCollisionDistance: 1000,\n keyboardWalkSpeed: 5,\n keyboardPivotDegrees: 1,\n keyboardRepeatIntervalMs: 25,\n };\n\n private excludedPredicate?: (el: Element) => boolean;\n\n private enabled = true;\n private teleportMode?: ViewerTeleportMode;\n\n private enabledChanged: EventDispatcher<boolean> = new EventDispatcher();\n\n private teleportModeChanged: EventDispatcher<ViewerTeleportMode | undefined> =\n new EventDispatcher<ViewerTeleportMode | undefined>();\n\n private configurationChanged: EventDispatcher<ViewerWalkModeConfiguration> =\n new EventDispatcher<ViewerWalkModeConfiguration>();\n\n private keyBindingsChanged: EventDispatcher<ViewerWalkModeKeyBindings> =\n new EventDispatcher<ViewerWalkModeKeyBindings>();\n\n public setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n this.enabledChanged.emit(enabled);\n }\n\n public setTeleportMode(mode?: ViewerTeleportMode): void {\n this.teleportMode = mode;\n this.teleportModeChanged.emit(mode);\n }\n\n public setConfiguration(configuration: ViewerWalkModeConfiguration): void {\n this.configuration = configuration;\n this.configurationChanged.emit(configuration);\n }\n\n public addKeyBinding(\n operation: ViewerWalkModeOperation,\n keyBinding: KeyBinding,\n ): void {\n this.keyBindings[operation] = [...this.keyBindings[operation], keyBinding];\n this.keyBindingsChanged.emit(this.keyBindings);\n }\n\n public replaceKeyBinding(\n operation: ViewerWalkModeOperation,\n keyBinding: KeyBinding,\n ): void {\n this.keyBindings[operation] = [keyBinding];\n this.keyBindingsChanged.emit(this.keyBindings);\n }\n\n public setExcludedPredicate(predicate: (el: Element) => boolean): void {\n this.excludedPredicate = predicate;\n }\n\n public getEnabled(): boolean {\n return this.enabled;\n }\n\n public getTeleportMode(): ViewerTeleportMode | undefined {\n return this.teleportMode;\n }\n\n public getTeleportHeightPercentage(): number {\n return this.configuration.teleportHeightPercentage;\n }\n\n public getKeyboardWalkSpeed(): number {\n return this.configuration.keyboardWalkSpeed;\n }\n\n public getKeyboardPivotDegrees(): number {\n return this.configuration.keyboardPivotDegrees;\n }\n\n public getKeyboardRepeatInterval(): number {\n return this.configuration.keyboardRepeatIntervalMs;\n }\n\n public getConfiguration(): ViewerWalkModeConfiguration {\n return this.configuration;\n }\n\n public getKeyBindings(): ViewerWalkModeKeyBindings {\n return this.keyBindings;\n }\n\n public operationMatches(\n operation: ViewerWalkModeOperation,\n state: Record<string, boolean>,\n ): boolean {\n return this.keyBindings[operation].some((binding) =>\n binding.matches(state),\n );\n }\n\n public isElementExcluded(el: Element): boolean {\n return !!this.excludedPredicate?.(el);\n }\n\n public onEnabledChange(listener: Listener<boolean>): Disposable {\n return this.enabledChanged.on(listener);\n }\n\n public onTeleportModeChange(\n listener: Listener<ViewerTeleportMode | undefined>,\n ): Disposable {\n return this.teleportModeChanged.on(listener);\n }\n\n public onConfigurationChange(\n listener: Listener<ViewerWalkModeConfiguration>,\n ): Disposable {\n return this.configurationChanged.on(listener);\n }\n\n public onKeyBindingsChange(\n listener: Listener<ViewerWalkModeKeyBindings>,\n ): Disposable {\n return this.keyBindingsChanged.on(listener);\n }\n}\n",":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n}\n","import {\n Component,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { TeleportInteractionHandler } from '../../lib/teleportation/interactions';\nimport { WalkModeController } from '../../lib/walk-mode/controller';\nimport { ViewerTeleportMode, WalkModeModel } from '../../lib/walk-mode/model';\n\ninterface StateMap {\n shouldClearDepthBuffers?: boolean;\n}\n\n/**\n * The `<vertex-viewer-teleport-tool>` allows for click-based \"teleportation\"\n * around a model, which is particularly useful for walking through a model.\n * This tool is automatically included as part of the <vertex-viewer-walk-mode-tool>.\n */\n@Component({\n tag: 'vertex-viewer-teleport-tool',\n styleUrl: 'viewer-teleport-tool.css',\n shadow: true,\n})\nexport class ViewerTeleportTool {\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The type of teleportation to perform when clicking.\n *\n * `teleport` - the camera's `position` is moved to the location of the hit result\n * constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `teleport-and-align` - the camera's `position`, `lookAt`, and `up` vectors are updated\n * to align to the plane represented by the hit result's position and normal.\n *\n * `teleport-toward` - the camera's `position` is moved a fixed distance toward the location of the\n * hit result constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `undefined` - no teleportation will occur when clicking.\n *\n * Defaults to `undefined`.\n */\n @Prop({ mutable: true })\n public mode?: ViewerTeleportMode;\n\n /**\n * Indicates whether animations will be used when performing camera\n * operations. Defaults to `false`.\n */\n @Prop()\n public animationsDisabled = false;\n\n /**\n * The duration of animations, in milliseconds. Defaults to `500`.\n */\n @Prop()\n public animationMs?: number = 500;\n\n @Prop({ mutable: true })\n public controller?: WalkModeController;\n\n @Prop({ mutable: true })\n public model: WalkModeModel = new WalkModeModel();\n\n /**\n * Event emitted when the `WalkModeController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<WalkModeController>;\n\n private interactionHandlerDisposable?: Disposable;\n private interactionHandler?: TeleportInteractionHandler;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.resetDepthBuffers();\n }\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected handleModeChange(): void {\n this.controller?.setTeleportMode(this.mode);\n\n if (this.mode != null) {\n this.setDepthBuffers();\n } else {\n this.resetDepthBuffers();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n @Watch('animationMs')\n protected handleAnimationMsChanged(): void {\n if (this.animationMs != null) {\n this.interactionHandler?.setAnimations({ durationMs: this.animationMs });\n }\n }\n\n /**\n * @ignore\n */\n @Watch('animationsDisabled')\n protected handleAnimationsDisabledChanged(): void {\n if (this.animationsDisabled) {\n this.interactionHandler?.setAnimations(undefined);\n } else if (this.animationMs != null) {\n this.interactionHandler?.setAnimations({ durationMs: this.animationMs });\n }\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChanged(): void {\n this.setupInteractionHandler();\n this.setupController();\n this.controllerChanged.emit(this.controller);\n }\n\n @Watch('model')\n protected handleModelChanged(): void {\n this.setupController();\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n }\n\n protected render(): JSX.Element {\n return <Host></Host>;\n }\n\n private setupController(): void {\n if (this.controller == null) {\n this.controller = new WalkModeController(this.model);\n this.controller.setTeleportMode(this.mode);\n this.controllerChanged.emit(this.controller);\n } else {\n this.controller.setTeleportMode(this.mode);\n this.controller.updateModel(this.model);\n }\n }\n\n private setDepthBuffers(): void {\n if (\n this.mode != null &&\n this.viewer != null &&\n this.viewer.depthBuffers == null\n ) {\n this.stateMap.shouldClearDepthBuffers = true;\n this.viewer.depthBuffers = 'final';\n }\n }\n\n private resetDepthBuffers(): void {\n if (this.stateMap.shouldClearDepthBuffers && this.viewer != null) {\n this.viewer.depthBuffers = undefined;\n this.stateMap.shouldClearDepthBuffers = undefined;\n }\n }\n\n private clearInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandlerDisposable = undefined;\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private async setupInteractionHandler(): Promise<void> {\n if (this.interactionHandler == null) {\n this.interactionHandler = new TeleportInteractionHandler(\n this.model,\n !this.animationsDisabled && this.animationMs != null\n ? { durationMs: this.animationMs }\n : undefined,\n );\n\n this.interactionHandlerDisposable =\n await this.viewer?.registerInteractionHandler(this.interactionHandler);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["TeleportInteractionHandler","constructor","model","animationConfiguration","this","rectObserver","ElementRectObserver","handlePointerDown","bind","handlePointerUp","handleEnabledChange","handleTeleportModeChange","enabledChangeDisposable","onEnabledChange","dispose","disable","_a","element","undefined","api","disconnect","initialize","observe","getEnabled","setAnimations","config","enable","teleportModeChangeDisposable","onTeleportModeChange","addEventListener","getTeleportMode","_b","cursorDisposable","_c","removeEventListener","event","downPosition","getMouseClientPosition","rect","downButtons","buttons","window","mode","threshold","pixelThreshold","point","isRightClick","hasModifier","shiftKey","altKey","metaKey","ctrlKey","Point","distance","teleportToHit","teleportTowardHit","teleportAndAlign","beginInteraction","isInteracting","endInteraction","worldPoint","getWorldPointFromViewport","mouseRay","getRayFromPoint","teleportDistancePercentage","teleportCollisionDistance","getConfiguration","teleportDistanceScalar","performInteraction","camera","boundingBox","stepDistance","Math","max","Vector3","toArray","BoundingBox","lengths","positionPlane","Plane","fromNormalAndCoplanarPoint","up","position","projectedWorldPoint","projectPoint","distanceToWorldPoint","mouseRayAtWorldPoint","Ray","create","origin","nextPosition","at","update","lookAt","add","subtract","projectedNextStep","getWorldPointWithFallback","shortestBoundingBoxLength","shortestLength","heightScalar","getTeleportHeightPercentage","cameraPlane","projectedHitPosition","rayToHitPosition","direction","normalize","distanceToHitPosition","distanceToLookAt","newPosition","newPositionViewVectorRay","viewVector","hits","hitItems","hit","hitNormal","hitPoint","upRay","alignTo","fn","transformCamera","renderConfiguration","enabled","addCursor","min","animation","milliseconds","durationMs","KeyBinding","bindings","map","binding","toLowerCase","matches","keys","length","every","bindingMatches","negated","includes","key","replace","WalkModeController","excludeTagNames","excludePredicates","updateModelExclusions","updateModel","setEnabled","setTeleportMode","updateConfiguration","configuration","existing","setConfiguration","addKeyBinding","operation","replaceKeyBinding","excludeElement","args","filter","tn","setExcludedPredicate","el","some","tagName","p","ViewerWalkModeOperation","WalkModeModel","keyBindings","MOVE_DOWN","MOVE_UP","PIVOT_DOWN","PIVOT_LEFT","PIVOT_RIGHT","PIVOT_UP","WALK_BACKWARD","WALK_FORWARD","WALK_LEFT","WALK_RIGHT","teleportHeightPercentage","keyboardWalkSpeed","keyboardPivotDegrees","keyboardRepeatIntervalMs","enabledChanged","EventDispatcher","teleportModeChanged","configurationChanged","keyBindingsChanged","emit","teleportMode","keyBinding","predicate","excludedPredicate","getKeyboardWalkSpeed","getKeyboardPivotDegrees","getKeyboardRepeatInterval","getKeyBindings","operationMatches","state","isElementExcluded","call","listener","on","onConfigurationChange","onKeyBindingsChange","viewerTeleportToolCss","ViewerTeleportTool","__stencil_proxyCustomElement","HTMLElement","registerHost","animationsDisabled","animationMs","stateMap","componentWillLoad","setupController","setupInteractionHandler","setDepthBuffers","connectedCallback","disconnectedCallback","clearInteractionHandler","resetDepthBuffers","handleModeChange","controller","handleViewerChanged","handleAnimationMsChanged","interactionHandler","handleAnimationsDisabledChanged","handleControllerChanged","controllerChanged","handleModelChanged","render","h","Host","viewer","depthBuffers","shouldClearDepthBuffers","interactionHandlerDisposable","registerInteractionHandler"],"sources":["src/lib/teleportation/interactions.ts","src/lib/keyBinding.ts","src/lib/walk-mode/controller.ts","src/lib/walk-mode/model.ts","src/components/viewer-teleport-tool/viewer-teleport-tool.css?tag=vertex-viewer-teleport-tool&encapsulation=shadow","src/components/viewer-teleport-tool/viewer-teleport-tool.tsx"],"sourcesContent":["import { BoundingBox, Plane, Point, Ray, Vector3 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport {\n CameraTransform,\n InteractionApi,\n InteractionHandler,\n} from '../interactions';\nimport { Camera, CameraRenderOptions } from '../scenes';\nimport { ViewerTeleportMode, WalkModeModel } from '../walk-mode/model';\n\nexport interface AnimationConfiguration {\n durationMs: number;\n}\n\nexport class TeleportInteractionHandler implements InteractionHandler {\n private api?: InteractionApi;\n private element?: HTMLElement;\n\n private rectObserver = new ElementRectObserver();\n\n private downPosition?: Point.Point;\n private downButtons?: number;\n\n private enabledChangeDisposable?: Disposable;\n private teleportModeChangeDisposable?: Disposable;\n private cursorDisposable?: Disposable;\n\n public constructor(\n private model: WalkModeModel,\n private animationConfiguration?: AnimationConfiguration,\n ) {\n this.handlePointerDown = this.handlePointerDown.bind(this);\n this.handlePointerUp = this.handlePointerUp.bind(this);\n this.handleEnabledChange = this.handleEnabledChange.bind(this);\n this.handleTeleportModeChange = this.handleTeleportModeChange.bind(this);\n\n this.enabledChangeDisposable = this.model.onEnabledChange(\n this.handleEnabledChange,\n );\n }\n\n public dispose(): void {\n this.disable();\n this.enabledChangeDisposable?.dispose();\n\n this.element = undefined;\n this.api = undefined;\n\n this.rectObserver.disconnect();\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.rectObserver.observe(element);\n\n this.handleEnabledChange(this.model.getEnabled());\n }\n\n public setAnimations(config?: AnimationConfiguration): void {\n this.animationConfiguration = config;\n }\n\n public enable(): void {\n this.disable();\n\n this.teleportModeChangeDisposable = this.model.onTeleportModeChange(\n this.handleTeleportModeChange,\n );\n this.element?.addEventListener('pointerdown', this.handlePointerDown);\n\n this.handleTeleportModeChange(this.model.getTeleportMode());\n }\n\n public disable(): void {\n this.teleportModeChangeDisposable?.dispose();\n this.cursorDisposable?.dispose();\n\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n }\n\n private async handlePointerDown(event: PointerEvent): Promise<void> {\n this.downPosition = getMouseClientPosition(event, this.rectObserver.rect);\n this.downButtons = event.buttons;\n\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n private async handlePointerUp(event: PointerEvent): Promise<void> {\n const mode = this.model.getTeleportMode();\n const threshold = this.api?.pixelThreshold() ?? 2;\n const point = getMouseClientPosition(event, this.rectObserver.rect);\n const isRightClick = this.downButtons === 2;\n const hasModifier =\n event.shiftKey || event.altKey || event.metaKey || event.ctrlKey;\n\n if (\n mode != null &&\n this.downPosition != null &&\n Point.distance(this.downPosition, point) <= threshold &&\n !isRightClick &&\n !hasModifier\n ) {\n switch (mode) {\n case 'teleport':\n return this.teleportToHit(point);\n case 'teleport-toward':\n return this.teleportTowardHit(point);\n case 'teleport-and-align':\n return this.teleportAndAlign(point);\n }\n }\n\n this.downPosition = undefined;\n\n window.removeEventListener('pointerup', this.handlePointerUp);\n }\n\n private async beginInteraction(): Promise<void> {\n if (!this.api?.isInteracting()) {\n await this.api?.beginInteraction();\n }\n }\n\n private async endInteraction(): Promise<void> {\n await this.api?.endInteraction();\n }\n\n private async teleportTowardHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n const mouseRay = this.api?.getRayFromPoint(point);\n\n if (mouseRay != null) {\n const { teleportDistancePercentage, teleportCollisionDistance } =\n this.model.getConfiguration();\n const teleportDistanceScalar = teleportDistancePercentage / 100;\n\n return this.performInteraction(({ camera, boundingBox }) => {\n const stepDistance =\n Math.max(...Vector3.toArray(BoundingBox.lengths(boundingBox))) *\n teleportDistanceScalar;\n\n const positionPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position,\n );\n const projectedWorldPoint = Plane.projectPoint(\n positionPlane,\n worldPoint ?? camera.position,\n );\n const distanceToWorldPoint = Vector3.distance(\n camera.position,\n projectedWorldPoint,\n );\n\n if (\n distanceToWorldPoint < stepDistance &&\n distanceToWorldPoint > teleportCollisionDistance * 1.1\n ) {\n const mouseRayAtWorldPoint = Ray.create({\n ...mouseRay,\n origin: projectedWorldPoint,\n });\n const nextPosition = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRayAtWorldPoint, -teleportCollisionDistance),\n );\n\n return camera.update({\n position: nextPosition,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(nextPosition, camera.position),\n ),\n });\n } else {\n const projectedNextStep = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRay, stepDistance),\n );\n\n return camera.update({\n position: projectedNextStep,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(projectedNextStep, camera.position),\n ),\n });\n }\n });\n }\n }\n\n private async teleportToHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.getWorldPointWithFallback(point);\n\n if (worldPoint != null) {\n return this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const cameraPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position,\n );\n const projectedHitPosition = Plane.projectPoint(\n cameraPlane,\n worldPoint,\n );\n\n const rayToHitPosition = Ray.create({\n origin: camera.position,\n direction: Vector3.normalize(\n Vector3.subtract(projectedHitPosition, camera.position),\n ),\n });\n const distanceToHitPosition = Vector3.distance(\n camera.position,\n projectedHitPosition,\n );\n const distanceToLookAt = Vector3.distance(\n camera.position,\n camera.lookAt,\n );\n\n const newPosition = Ray.at(\n rayToHitPosition,\n distanceToHitPosition - shortestBoundingBoxLength * heightScalar,\n );\n const newPositionViewVectorRay = Ray.create({\n origin: newPosition,\n direction: Vector3.normalize(camera.viewVector),\n });\n\n return camera.update({\n position: newPosition,\n lookAt: Ray.at(newPositionViewVectorRay, distanceToLookAt),\n });\n });\n }\n }\n\n private async teleportAndAlign(point: Point.Point): Promise<void> {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n if (hit?.hitNormal != null && hit?.hitPoint) {\n await this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const upRay = Ray.create({\n origin: hit.hitPoint as Vector3.Vector3,\n direction: hit.hitNormal as Vector3.Vector3,\n });\n\n return camera.alignTo(\n Ray.at(upRay, shortestBoundingBoxLength * heightScalar),\n hit.hitNormal as Vector3.Vector3,\n );\n });\n }\n }\n\n private async performInteraction(fn: CameraTransform<Camera>): Promise<void> {\n await this.beginInteraction();\n await this.api?.transformCamera(fn, this.renderConfiguration());\n await this.endInteraction();\n }\n\n private async getWorldPointWithFallback(\n point: Point.Point,\n ): Promise<Vector3.Vector3 | undefined> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n\n if (worldPoint == null) {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n return hit?.hitPoint != null\n ? (hit.hitPoint as Vector3.Vector3)\n : worldPoint;\n }\n return worldPoint;\n }\n\n private handleEnabledChange(enabled: boolean): void {\n if (enabled) {\n this.enable();\n } else {\n this.disable();\n }\n }\n\n private handleTeleportModeChange(mode?: ViewerTeleportMode): void {\n this.cursorDisposable?.dispose();\n\n if (mode != null) {\n this.cursorDisposable = this.api?.addCursor('crosshair');\n }\n }\n\n private shortestLength(boundingBox: BoundingBox.BoundingBox): number {\n return Math.min(...Vector3.toArray(BoundingBox.lengths(boundingBox)));\n }\n\n private renderConfiguration(): CameraRenderOptions {\n return this.animationConfiguration != null\n ? { animation: { milliseconds: this.animationConfiguration.durationMs } }\n : {};\n }\n}\n","export class KeyBinding {\n private bindings: string[];\n\n public constructor(...bindings: string[]) {\n this.bindings = bindings.map((binding) => binding.toLowerCase());\n }\n\n public matches(keys: Record<string, boolean>): boolean {\n return (\n this.bindings.length > 0 &&\n this.bindings.every((binding) => this.bindingMatches(keys, binding))\n );\n }\n\n private bindingMatches(\n keys: Record<string, boolean>,\n binding: string,\n ): boolean {\n const negated = binding.includes('!');\n const key = binding.replace('!', '');\n\n return negated ? !keys[key] : keys[key];\n }\n}\n","import { Disposable } from '@vertexvis/utils';\n\nimport { KeyBinding } from '../keyBinding';\nimport {\n ViewerTeleportMode,\n ViewerWalkModeConfiguration,\n ViewerWalkModeOperation,\n WalkModeModel,\n} from './model';\n\nexport class WalkModeController {\n private excludeTagNames: Array<string> = [\n 'VERTEX-SCENE-TREE',\n 'VERTEX-SCENE-TREE-SEARCH',\n 'VERTEX-VIEWER-PIN-TOOL',\n 'INPUT',\n 'TEXTAREA',\n ];\n\n private excludePredicates: Array<(el: Element) => boolean> = [];\n\n public constructor(private model: WalkModeModel) {\n this.updateModelExclusions();\n }\n\n /**\n * @internal\n */\n public updateModel(model: WalkModeModel): void {\n this.model = model;\n }\n\n /**\n * Sets whether downstream walk mode interaction handlers are enabled.\n * Setting this value to `false` will remove all event listeners for\n * the interactions, and setting this value to `true` will add or\n * re-add the event listeners.\n */\n public setEnabled(enabled: boolean): void {\n this.model.setEnabled(enabled);\n }\n\n /**\n * Sets the `ViewerTeleportMode` to be used with a `<vertex-viewer-teleport-tool>`.\n */\n public setTeleportMode(mode?: ViewerTeleportMode): void {\n this.model.setTeleportMode(mode);\n }\n\n /**\n * Updates the configuration for downstream walk mode interaction handlers.\n *\n * `teleportHeightPercentage` - percentage used for fine-tuning the distance to offset\n * the camera from a surface when performing a `teleport-and-align`. This percentage is\n * used alongside the shortest side of the visible bounding box to determine how far to\n * place the camera from the surface that has been hit, with a larger percentage placing\n * the camera further from the surface and vice-versa. Defaults to 11.75%.\n *\n * `teleportDistancePercentage` - percentage used for fine-tuning the distance moved per\n * click with the `teleport-toward` mode. This percentage is used alongside the longest\n * side of the visible bounding box to determine how far to move the camera's position\n * with each click, with a larger percentage moving the camera further and vice-versa.\n * Defaults to 2%.\n *\n * `teleportCollisionDistance` - distance used alongside the `teleportCollisionPercentage`\n * to determine whether a click with the `teleport-toward` mode would cause a \"collision\",\n * or would pass through the point clicked. If such a collision would occur, the camera is\n * instead placed this distance back from the point clicked once, then allowed to pass\n * through the point on subsequent clicks. Note that this will not apply if clicks occur\n * in quick succession without setting the `depthBuffers` property on the `<vertex-viewer>`\n * to `all` frames. Defaults to `1000`.\n *\n * `keyboardWalkSpeed` - speed to move the camera when performing keyboard-based\n * walk interactions. A larger number here will result in a faster walk speed through\n * the model and vice-versa. Defaults to `5`.\n *\n * `keyboardPivotDegrees` - number of degrees to move the camera when performing\n * keyboard-based pivot interactions. Defaults to `1`.\n *\n * `keyboardRepeatIntervalMs` - number of milliseconds to repeat keyboard-based interactions.\n * this value is multiplicative with the `keyboardWalkSpeed` and `keyboardPivotDegrees`, and\n * lower numbers will result in faster movement and vice-versa. Defaults to `25`.\n *\n */\n public updateConfiguration(\n configuration: Partial<ViewerWalkModeConfiguration>,\n ): void {\n const existing = this.model.getConfiguration();\n\n this.model.setConfiguration({\n ...existing,\n ...configuration,\n });\n }\n\n /**\n * Adds a custom keybinding for a specific walk operation. This will append to the\n * existing set of keybindings to allow for multiple keybindings for a specific\n * operation. To replace the defaults, see `replaceKeyBinding`.\n */\n public addKeyBinding(\n operation: ViewerWalkModeOperation,\n ...keys: string[]\n ): void {\n this.model.addKeyBinding(operation, new KeyBinding(...keys));\n }\n\n /**\n * Adds a custom keybinding for a specific walk operation. This will replace any\n * existing keybindings to allow for overriding the default behavior.\n *\n * @example\n * ```\n * const walkModeTool = document.querySelector('vertex-viewer-walk-mode-tool');\n *\n * // Remove keybinding for the `PIVOT_UP` operation\n * walkModeTool.controller.replaceKeyBinding('PIVOT_UP');\n *\n * // Replace keybinding for `WALK_FORWARD` with `ArrowUp` instead of `w`\n * walkModeTool.controller.replaceKeyBinding('WALK_FORWARD', 'ArrowUp');\n * ```\n */\n public replaceKeyBinding(\n operation: ViewerWalkModeOperation,\n ...keys: string[]\n ): void {\n this.model.replaceKeyBinding(operation, new KeyBinding(...keys));\n }\n\n /**\n * Adds an exclusion for specific elements when responding to keyboard\n * events. This is useful when there are other elements on screen that\n * require keyboard interaction and the walk mode handlers should not\n * respond to the keyboard events. Can be either a element's `tagName`\n * or a predicate. Returns a `Disposable` that can be used to remove the\n * exclusion.\n *\n * Default `tagName` exclusions:\n * 'VERTEX-SCENE-TREE'\n * 'VERTEX-SCENE-TREE-SEARCH'\n * 'VERTEX-VIEWER-PIN-TOOL'\n * 'INPUT'\n * 'TEXTAREA'\n */\n public excludeElement(predicate: (el: Element) => boolean): Disposable;\n public excludeElement(tagName: string): Disposable;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public excludeElement(...args: any[]): Disposable {\n if (typeof args[0] === 'string') {\n this.excludeTagNames = [...this.excludeTagNames, args[0]];\n\n this.updateModelExclusions();\n\n return {\n dispose: () => {\n this.excludeTagNames = this.excludeTagNames.filter(\n (tn) => tn !== args[0],\n );\n },\n };\n } else {\n this.excludePredicates = [...this.excludePredicates, args[0]];\n\n this.updateModelExclusions();\n\n return {\n dispose: () => {\n this.excludePredicates = this.excludePredicates.filter(\n (tn) => tn !== args[0],\n );\n },\n };\n }\n }\n\n private updateModelExclusions(): void {\n this.model.setExcludedPredicate(\n (el) =>\n this.excludeTagNames.some((tn) => tn === el.tagName) ||\n this.excludePredicates.some((p) => p(el)),\n );\n }\n}\n","import { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { KeyBinding } from '../keyBinding';\n\nexport interface ViewerWalkModeConfiguration {\n teleportHeightPercentage: number;\n teleportDistancePercentage: number;\n teleportCollisionDistance: number;\n keyboardWalkSpeed: number;\n keyboardPivotDegrees: number;\n keyboardRepeatIntervalMs: number;\n}\n\nexport type ViewerTeleportMode =\n 'teleport' | 'teleport-and-align' | 'teleport-toward';\n\nexport enum ViewerWalkModeOperation {\n MOVE_DOWN = 'MOVE_DOWN',\n MOVE_UP = 'MOVE_UP',\n PIVOT_DOWN = 'PIVOT_DOWN',\n PIVOT_LEFT = 'PIVOT_LEFT',\n PIVOT_RIGHT = 'PIVOT_RIGHT',\n PIVOT_UP = 'PIVOT_UP',\n WALK_BACKWARD = 'WALK_BACKWARD',\n WALK_FORWARD = 'WALK_FORWARD',\n WALK_LEFT = 'WALK_LEFT',\n WALK_RIGHT = 'WALK_RIGHT',\n}\n\nexport type ViewerWalkModeKeyBindings = Record<\n ViewerWalkModeOperation,\n KeyBinding[]\n>;\n\nexport class WalkModeModel {\n private keyBindings: ViewerWalkModeKeyBindings = {\n [ViewerWalkModeOperation.MOVE_DOWN]: [\n new KeyBinding('PageDown', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.MOVE_UP]: [\n new KeyBinding('PageUp', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_DOWN]: [\n new KeyBinding('ArrowDown', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_LEFT]: [\n new KeyBinding('ArrowLeft', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_RIGHT]: [\n new KeyBinding('ArrowRight', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_UP]: [\n new KeyBinding('ArrowUp', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.WALK_BACKWARD]: [new KeyBinding('s')],\n [ViewerWalkModeOperation.WALK_FORWARD]: [new KeyBinding('w')],\n [ViewerWalkModeOperation.WALK_LEFT]: [new KeyBinding('a')],\n [ViewerWalkModeOperation.WALK_RIGHT]: [new KeyBinding('d')],\n };\n\n private configuration: ViewerWalkModeConfiguration = {\n teleportHeightPercentage: 11.75,\n teleportDistancePercentage: 2,\n teleportCollisionDistance: 1000,\n keyboardWalkSpeed: 5,\n keyboardPivotDegrees: 1,\n keyboardRepeatIntervalMs: 25,\n };\n\n private excludedPredicate?: (el: Element) => boolean;\n\n private enabled = true;\n private teleportMode?: ViewerTeleportMode;\n\n private enabledChanged: EventDispatcher<boolean> = new EventDispatcher();\n\n private teleportModeChanged: EventDispatcher<ViewerTeleportMode | undefined> =\n new EventDispatcher<ViewerTeleportMode | undefined>();\n\n private configurationChanged: EventDispatcher<ViewerWalkModeConfiguration> =\n new EventDispatcher<ViewerWalkModeConfiguration>();\n\n private keyBindingsChanged: EventDispatcher<ViewerWalkModeKeyBindings> =\n new EventDispatcher<ViewerWalkModeKeyBindings>();\n\n public setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n this.enabledChanged.emit(enabled);\n }\n\n public setTeleportMode(mode?: ViewerTeleportMode): void {\n this.teleportMode = mode;\n this.teleportModeChanged.emit(mode);\n }\n\n public setConfiguration(configuration: ViewerWalkModeConfiguration): void {\n this.configuration = configuration;\n this.configurationChanged.emit(configuration);\n }\n\n public addKeyBinding(\n operation: ViewerWalkModeOperation,\n keyBinding: KeyBinding,\n ): void {\n this.keyBindings[operation] = [...this.keyBindings[operation], keyBinding];\n this.keyBindingsChanged.emit(this.keyBindings);\n }\n\n public replaceKeyBinding(\n operation: ViewerWalkModeOperation,\n keyBinding: KeyBinding,\n ): void {\n this.keyBindings[operation] = [keyBinding];\n this.keyBindingsChanged.emit(this.keyBindings);\n }\n\n public setExcludedPredicate(predicate: (el: Element) => boolean): void {\n this.excludedPredicate = predicate;\n }\n\n public getEnabled(): boolean {\n return this.enabled;\n }\n\n public getTeleportMode(): ViewerTeleportMode | undefined {\n return this.teleportMode;\n }\n\n public getTeleportHeightPercentage(): number {\n return this.configuration.teleportHeightPercentage;\n }\n\n public getKeyboardWalkSpeed(): number {\n return this.configuration.keyboardWalkSpeed;\n }\n\n public getKeyboardPivotDegrees(): number {\n return this.configuration.keyboardPivotDegrees;\n }\n\n public getKeyboardRepeatInterval(): number {\n return this.configuration.keyboardRepeatIntervalMs;\n }\n\n public getConfiguration(): ViewerWalkModeConfiguration {\n return this.configuration;\n }\n\n public getKeyBindings(): ViewerWalkModeKeyBindings {\n return this.keyBindings;\n }\n\n public operationMatches(\n operation: ViewerWalkModeOperation,\n state: Record<string, boolean>,\n ): boolean {\n return this.keyBindings[operation].some((binding) =>\n binding.matches(state),\n );\n }\n\n public isElementExcluded(el: Element): boolean {\n return !!this.excludedPredicate?.(el);\n }\n\n public onEnabledChange(listener: Listener<boolean>): Disposable {\n return this.enabledChanged.on(listener);\n }\n\n public onTeleportModeChange(\n listener: Listener<ViewerTeleportMode | undefined>,\n ): Disposable {\n return this.teleportModeChanged.on(listener);\n }\n\n public onConfigurationChange(\n listener: Listener<ViewerWalkModeConfiguration>,\n ): Disposable {\n return this.configurationChanged.on(listener);\n }\n\n public onKeyBindingsChange(\n listener: Listener<ViewerWalkModeKeyBindings>,\n ): Disposable {\n return this.keyBindingsChanged.on(listener);\n }\n}\n",":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n}\n","import {\n Component,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { TeleportInteractionHandler } from '../../lib/teleportation/interactions';\nimport { WalkModeController } from '../../lib/walk-mode/controller';\nimport { ViewerTeleportMode, WalkModeModel } from '../../lib/walk-mode/model';\n\ninterface StateMap {\n shouldClearDepthBuffers?: boolean;\n}\n\n/**\n * The `<vertex-viewer-teleport-tool>` allows for click-based \"teleportation\"\n * around a model, which is particularly useful for walking through a model.\n * This tool is automatically included as part of the <vertex-viewer-walk-mode-tool>.\n */\n@Component({\n tag: 'vertex-viewer-teleport-tool',\n styleUrl: 'viewer-teleport-tool.css',\n shadow: true,\n})\nexport class ViewerTeleportTool {\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The type of teleportation to perform when clicking.\n *\n * `teleport` - the camera's `position` is moved to the location of the hit result\n * constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `teleport-and-align` - the camera's `position`, `lookAt`, and `up` vectors are updated\n * to align to the plane represented by the hit result's position and normal.\n *\n * `teleport-toward` - the camera's `position` is moved a fixed distance toward the location of the\n * hit result constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `undefined` - no teleportation will occur when clicking.\n *\n * Defaults to `undefined`.\n */\n @Prop({ mutable: true })\n public mode?: ViewerTeleportMode;\n\n /**\n * Indicates whether animations will be used when performing camera\n * operations. Defaults to `false`.\n */\n @Prop()\n public animationsDisabled = false;\n\n /**\n * The duration of animations, in milliseconds. Defaults to `500`.\n */\n @Prop()\n public animationMs?: number = 500;\n\n @Prop({ mutable: true })\n public controller?: WalkModeController;\n\n @Prop({ mutable: true })\n public model: WalkModeModel = new WalkModeModel();\n\n /**\n * Event emitted when the `WalkModeController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<WalkModeController>;\n\n private interactionHandlerDisposable?: Disposable;\n private interactionHandler?: TeleportInteractionHandler;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.resetDepthBuffers();\n }\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected handleModeChange(): void {\n this.controller?.setTeleportMode(this.mode);\n\n if (this.mode != null) {\n this.setDepthBuffers();\n } else {\n this.resetDepthBuffers();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n @Watch('animationMs')\n protected handleAnimationMsChanged(): void {\n if (this.animationMs != null) {\n this.interactionHandler?.setAnimations({ durationMs: this.animationMs });\n }\n }\n\n /**\n * @ignore\n */\n @Watch('animationsDisabled')\n protected handleAnimationsDisabledChanged(): void {\n if (this.animationsDisabled) {\n this.interactionHandler?.setAnimations(undefined);\n } else if (this.animationMs != null) {\n this.interactionHandler?.setAnimations({ durationMs: this.animationMs });\n }\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChanged(): void {\n this.setupInteractionHandler();\n this.setupController();\n this.controllerChanged.emit(this.controller);\n }\n\n @Watch('model')\n protected handleModelChanged(): void {\n this.setupController();\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n }\n\n protected render(): JSX.Element {\n return <Host></Host>;\n }\n\n private setupController(): void {\n if (this.controller == null) {\n this.controller = new WalkModeController(this.model);\n this.controller.setTeleportMode(this.mode);\n this.controllerChanged.emit(this.controller);\n } else {\n this.controller.setTeleportMode(this.mode);\n this.controller.updateModel(this.model);\n }\n }\n\n private setDepthBuffers(): void {\n if (\n this.mode != null &&\n this.viewer != null &&\n this.viewer.depthBuffers == null\n ) {\n this.stateMap.shouldClearDepthBuffers = true;\n this.viewer.depthBuffers = 'final';\n }\n }\n\n private resetDepthBuffers(): void {\n if (this.stateMap.shouldClearDepthBuffers && this.viewer != null) {\n this.viewer.depthBuffers = undefined;\n this.stateMap.shouldClearDepthBuffers = undefined;\n }\n }\n\n private clearInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandlerDisposable = undefined;\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private async setupInteractionHandler(): Promise<void> {\n if (this.interactionHandler == null) {\n this.interactionHandler = new TeleportInteractionHandler(\n this.model,\n !this.animationsDisabled && this.animationMs != null\n ? { durationMs: this.animationMs }\n : undefined,\n );\n\n this.interactionHandlerDisposable =\n await this.viewer?.registerInteractionHandler(this.interactionHandler);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["sceneTreeSearchCss","SceneTreeSearch","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","disabled","placeholder","undefined","value","focused","isSearching","handleTextInput","event","input","target","debounce","emitCurrentValue","handleTextFocus","handleTextBlur","_a","searchDisposable","dispose","lastEmittedValue","handleKeyPress","key","handleClear","preventDefault","setFocus","inputEl","focus","_b","controllerChanged","controller","setupController","componentDidLoad","handleDebounceChanged","disconnectedCallback","onStateChangeDisposable","clear","render","h","Host","class","name","slot","size","classNames","background","length","type","ref","onInput","onFocus","onBlur","onKeyPress","show","tabIndex","onMouseDown","emitter","debounceEvent","search","onStateChange","on","state","searchCompleted","emit"],"sources":["src/components/scene-tree-search/scene-tree-search.css?tag=vertex-scene-tree-search&encapsulation=shadow","src/components/scene-tree-search/scene-tree-search.tsx"],"sourcesContent":["@import url('../../css/button-reset.css');\n\n:host {\n /**\n * @prop --scene-tree-search-search-icon-offset: A CSS length that specifies\n * the horizontal offset of the search icon\n */\n --scene-tree-search-search-icon-offset: 8px;\n\n /**\n * @prop --scene-tree-search-clear-button-offset: A CSS length that specifies\n * the horizontal offset of the clear button.\n */\n --scene-tree-search-clear-button-offset: 8px;\n\n /**\n * @prop --scene-tree-search-input-padding: A CSS padding value that specifies\n * horizontal and vertical lengths of the internal text input.\n */\n --scene-tree-search-input-padding: 0.5rem 32px;\n\n /**\n * @prop --scene-tree-search-input-border: A CSS border value that specifies\n * the border of the internal text input.\n */\n --scene-tree-search-input-border: none;\n\n /**\n * @prop --scene-tree-search-input-border-radius: A CSS length that specifies\n * the radius of the internal text input.\n */\n --scene-tree-search-input-border-radius: 0.25rem;\n\n /**\n * @prop --scene-tree-search-input-background: A CSS background that specifies\n * the background color or image of the internal text input.\n */\n --scene-tree-search-input-background: none;\n\n /**\n * @prop --scene-tree-search-focused-input-background: A CSS background value\n * that specifies the background of the internal text input when focused.\n */\n --scene-tree-search-focused-input-background: var(--neutral-200);\n\n /**\n * @prop --scene-tree-search-focused-input-outline: A CSS outline value that\n * specifies the outline of the internal text input when focused.\n */\n --scene-tree-search-focused-input-outline: none;\n\n display: block;\n width: 100%;\n font-size: 0.875rem;\n}\n\n.root {\n width: 100%;\n position: relative;\n}\n\n.input {\n background: var(--scene-tree-search-input-background);\n border: var(--scene-tree-search-input-border);\n border-radius: var(--scene-tree-search-input-border-radius);\n box-sizing: border-box;\n font-size: inherit;\n padding: var(--scene-tree-search-input-padding);\n outline: none;\n width: 100%;\n}\n\n.input.background {\n background: var(--scene-tree-search-focused-input-background);\n outline: var(--scene-tree-search-focused-input-outline);\n}\n\n.overlay {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n}\n\n.overlay-clear {\n display: none;\n right: var(--scene-tree-search-clear-button-offset);\n}\n\n.overlay-clear.show {\n display: flex;\n}\n\n.icon {\n color: var(--neutral-700);\n}\n\n.icon-search {\n position: absolute;\n left: var(--scene-tree-search-search-icon-offset);\n pointer-events: none;\n}\n\n.clear-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: initial;\n cursor: pointer;\n}\n.clear-btn:hover {\n color: var(--neutral-800);\n}\n.clear-btn:disabled {\n pointer-events: none;\n opacity: 0.5;\n}","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\nimport classNames from 'classnames';\n\nimport { debounceEvent } from '../../lib/stencil';\nimport { SceneTreeController } from '../scene-tree/lib/controller';\n\n/**\n * @slot search-icon - A slot that replaces the component's default search icon.\n * @slot clear-icon - A slot that replaces the component's default clear icon.\n */\n@Component({\n tag: 'vertex-scene-tree-search',\n styleUrl: 'scene-tree-search.css',\n shadow: true,\n})\nexport class SceneTreeSearch {\n /**\n * Specifies the delay, in milliseconds, to emit `search` events after user\n * input.\n *\n * If this value is specified, searches will automatically occur after a\n * keystroke has occurred and the debounce threshold has elapsed.\n *\n * Defaults to `undefined`, and searches only occur on an `Enter` press\n * or a `blur` event.\n */\n @Prop()\n public debounce?: number;\n\n /**\n * If `true`, disables user interaction of the component.\n */\n @Prop()\n public disabled = false;\n\n /**\n * Placeholder text if `value` is empty.\n */\n @Prop()\n public placeholder?: string = undefined;\n\n /**\n * The scene tree controller\n */\n @Prop()\n public controller?: SceneTreeController;\n\n /**\n * The current text value of the component. Value is updated on user\n * interaction.\n */\n @Prop({ mutable: true })\n public value = '';\n\n /**\n * An event that is emitted when a user has changed or cleared the search\n * term. The event may be delayed according to the current `debounce` value.\n */\n @Event({ bubbles: true })\n public search!: EventEmitter<string>;\n\n /**\n * An event that is emitted when a search has completed.\n */\n @Event({ bubbles: true })\n public searchCompleted!: EventEmitter<string>;\n\n @State()\n private focused = false;\n\n @State()\n private isSearching = false;\n\n private lastEmittedValue?: string;\n private inputEl?: HTMLInputElement;\n private onStateChangeDisposable?: Disposable;\n private searchDisposable?: Disposable;\n\n /**\n * Gives focus to the component's internal text input.\n */\n @Method()\n public async setFocus(): Promise<void> {\n // HTMLInputElement.focus() doesn't exist in tests.\n if (typeof this.inputEl?.focus === 'function') {\n this.inputEl?.focus();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n public controllerChanged(controller: SceneTreeController): void {\n this.setupController();\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n this.handleDebounceChanged();\n\n this.setupController();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.onStateChangeDisposable?.dispose();\n }\n\n /**\n * Clears the current search term and clears any debounced filters.\n */\n @Method()\n public async clear(): Promise<void> {\n this.value = '';\n this.searchDisposable?.dispose();\n this.emitCurrentValue();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"root\">\n <div class=\"overlay icon icon-search\">\n <slot name=\"search-icon\">\n {this.isSearching ? (\n <vertex-viewer-spinner slot=\"search-icon\" size=\"xs\" />\n ) : (\n <vertex-viewer-icon name=\"search\" size=\"sm\" />\n )}\n </slot>\n </div>\n\n <input\n class={classNames('input', {\n background: this.focused || this.value.length > 0,\n })}\n type=\"text\"\n ref={(ref) => (this.inputEl = ref)}\n placeholder={this.placeholder}\n disabled={this.disabled}\n value={this.value}\n onInput={this.handleTextInput}\n onFocus={this.handleTextFocus}\n onBlur={this.handleTextBlur}\n onKeyPress={this.handleKeyPress}\n />\n\n <div\n class={classNames('overlay overlay-clear', {\n show: this.value.length > 0,\n })}\n >\n <button\n class=\"clear-btn icon\"\n tabIndex={-1}\n onMouseDown={this.handleClear}\n disabled={this.disabled}\n >\n <slot name=\"clear-icon\">\n <vertex-viewer-icon name=\"close-circle\" size=\"sm\" />\n </slot>\n </button>\n </div>\n </div>\n </Host>\n );\n }\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n\n if (this.debounce != null || this.value === '') {\n this.emitCurrentValue();\n }\n };\n\n private handleTextFocus = (): void => {\n this.focused = true;\n };\n\n private handleTextBlur = (): void => {\n this.focused = false;\n\n this.searchDisposable?.dispose();\n\n if (this.value !== this.lastEmittedValue) {\n this.emitCurrentValue();\n }\n };\n\n private handleKeyPress = (event: KeyboardEvent): void => {\n if (event.key === 'Enter') {\n this.searchDisposable?.dispose();\n this.emitCurrentValue();\n }\n };\n\n private handleClear = (event: MouseEvent): void => {\n event.preventDefault();\n\n this.value = '';\n this.searchDisposable?.dispose();\n this.emitCurrentValue();\n this.setFocus();\n };\n\n private handleDebounceChanged(): void {\n this.searchDisposable?.dispose();\n\n const emitter = debounceEvent(this.search, this.debounce ?? 0);\n\n // Track this emitter in two separate variables to maintain the `EventEmitter` typing for\n // `this.search`. This allows for correct generation of `CustomEvent` types.\n this.search = emitter;\n this.searchDisposable = emitter;\n }\n\n private setupController(): void {\n this.onStateChangeDisposable?.dispose();\n\n this.onStateChangeDisposable = this.controller?.onStateChange.on(\n (state) => {\n // If a search was previously being performed, but has now finished,\n // emit the event that the search has completed.\n if (this.isSearching && !state.isSearching) {\n this.searchCompleted.emit(this.value);\n }\n\n this.isSearching = state.isSearching;\n },\n );\n }\n\n private emitCurrentValue(): void {\n this.lastEmittedValue = this.value;\n this.search.emit(this.value);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["sceneTreeSearchCss","SceneTreeSearch","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","disabled","placeholder","undefined","value","focused","isSearching","handleTextInput","event","input","target","debounce","emitCurrentValue","handleTextFocus","handleTextBlur","_a","searchDisposable","dispose","lastEmittedValue","handleKeyPress","key","handleClear","preventDefault","setFocus","inputEl","focus","_b","controllerChanged","controller","setupController","componentDidLoad","handleDebounceChanged","disconnectedCallback","onStateChangeDisposable","clear","render","h","Host","class","name","slot","size","classNames","background","length","type","ref","onInput","onFocus","onBlur","onKeyPress","show","tabIndex","onMouseDown","emitter","debounceEvent","search","onStateChange","on","state","searchCompleted","emit"],"sources":["src/components/scene-tree-search/scene-tree-search.css?tag=vertex-scene-tree-search&encapsulation=shadow","src/components/scene-tree-search/scene-tree-search.tsx"],"sourcesContent":["@import url('../../css/button-reset.css');\n\n:host {\n /**\n * @prop --scene-tree-search-search-icon-offset: A CSS length that specifies\n * the horizontal offset of the search icon\n */\n --scene-tree-search-search-icon-offset: 8px;\n\n /**\n * @prop --scene-tree-search-clear-button-offset: A CSS length that specifies\n * the horizontal offset of the clear button.\n */\n --scene-tree-search-clear-button-offset: 8px;\n\n /**\n * @prop --scene-tree-search-input-padding: A CSS padding value that specifies\n * horizontal and vertical lengths of the internal text input.\n */\n --scene-tree-search-input-padding: 0.5rem 32px;\n\n /**\n * @prop --scene-tree-search-input-border: A CSS border value that specifies\n * the border of the internal text input.\n */\n --scene-tree-search-input-border: none;\n\n /**\n * @prop --scene-tree-search-input-border-radius: A CSS length that specifies\n * the radius of the internal text input.\n */\n --scene-tree-search-input-border-radius: 0.25rem;\n\n /**\n * @prop --scene-tree-search-input-background: A CSS background that specifies\n * the background color or image of the internal text input.\n */\n --scene-tree-search-input-background: none;\n\n /**\n * @prop --scene-tree-search-focused-input-background: A CSS background value\n * that specifies the background of the internal text input when focused.\n */\n --scene-tree-search-focused-input-background: var(--neutral-200);\n\n /**\n * @prop --scene-tree-search-focused-input-outline: A CSS outline value that\n * specifies the outline of the internal text input when focused.\n */\n --scene-tree-search-focused-input-outline: none;\n\n display: block;\n width: 100%;\n font-size: 0.875rem;\n}\n\n.root {\n width: 100%;\n position: relative;\n}\n\n.input {\n background: var(--scene-tree-search-input-background);\n border: var(--scene-tree-search-input-border);\n border-radius: var(--scene-tree-search-input-border-radius);\n box-sizing: border-box;\n font-size: inherit;\n padding: var(--scene-tree-search-input-padding);\n outline: none;\n width: 100%;\n}\n\n.input.background {\n background: var(--scene-tree-search-focused-input-background);\n outline: var(--scene-tree-search-focused-input-outline);\n}\n\n.overlay {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n}\n\n.overlay-clear {\n display: none;\n right: var(--scene-tree-search-clear-button-offset);\n}\n\n.overlay-clear.show {\n display: flex;\n}\n\n.icon {\n color: var(--neutral-700);\n}\n\n.icon-search {\n position: absolute;\n left: var(--scene-tree-search-search-icon-offset);\n pointer-events: none;\n}\n\n.clear-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: initial;\n cursor: pointer;\n}\n.clear-btn:hover {\n color: var(--neutral-800);\n}\n.clear-btn:disabled {\n pointer-events: none;\n opacity: 0.5;\n}\n","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\nimport classNames from 'classnames';\n\nimport { debounceEvent } from '../../lib/stencil';\nimport { SceneTreeController } from '../scene-tree/lib/controller';\n\n/**\n * @slot search-icon - A slot that replaces the component's default search icon.\n * @slot clear-icon - A slot that replaces the component's default clear icon.\n */\n@Component({\n tag: 'vertex-scene-tree-search',\n styleUrl: 'scene-tree-search.css',\n shadow: true,\n})\nexport class SceneTreeSearch {\n /**\n * Specifies the delay, in milliseconds, to emit `search` events after user\n * input.\n *\n * If this value is specified, searches will automatically occur after a\n * keystroke has occurred and the debounce threshold has elapsed.\n *\n * Defaults to `undefined`, and searches only occur on an `Enter` press\n * or a `blur` event.\n */\n @Prop()\n public debounce?: number;\n\n /**\n * If `true`, disables user interaction of the component.\n */\n @Prop()\n public disabled = false;\n\n /**\n * Placeholder text if `value` is empty.\n */\n @Prop()\n public placeholder?: string = undefined;\n\n /**\n * The scene tree controller\n */\n @Prop()\n public controller?: SceneTreeController;\n\n /**\n * The current text value of the component. Value is updated on user\n * interaction.\n */\n @Prop({ mutable: true })\n public value = '';\n\n /**\n * An event that is emitted when a user has changed or cleared the search\n * term. The event may be delayed according to the current `debounce` value.\n */\n @Event({ bubbles: true })\n public search!: EventEmitter<string>;\n\n /**\n * An event that is emitted when a search has completed.\n */\n @Event({ bubbles: true })\n public searchCompleted!: EventEmitter<string>;\n\n @State()\n private focused = false;\n\n @State()\n private isSearching = false;\n\n private lastEmittedValue?: string;\n private inputEl?: HTMLInputElement;\n private onStateChangeDisposable?: Disposable;\n private searchDisposable?: Disposable;\n\n /**\n * Gives focus to the component's internal text input.\n */\n @Method()\n public async setFocus(): Promise<void> {\n // HTMLInputElement.focus() doesn't exist in tests.\n if (typeof this.inputEl?.focus === 'function') {\n this.inputEl?.focus();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n public controllerChanged(controller: SceneTreeController): void {\n this.setupController();\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n this.handleDebounceChanged();\n\n this.setupController();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.onStateChangeDisposable?.dispose();\n }\n\n /**\n * Clears the current search term and clears any debounced filters.\n */\n @Method()\n public async clear(): Promise<void> {\n this.value = '';\n this.searchDisposable?.dispose();\n this.emitCurrentValue();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"root\">\n <div class=\"overlay icon icon-search\">\n <slot name=\"search-icon\">\n {this.isSearching ? (\n <vertex-viewer-spinner slot=\"search-icon\" size=\"xs\" />\n ) : (\n <vertex-viewer-icon name=\"search\" size=\"sm\" />\n )}\n </slot>\n </div>\n\n <input\n class={classNames('input', {\n background: this.focused || this.value.length > 0,\n })}\n type=\"text\"\n ref={(ref) => (this.inputEl = ref)}\n placeholder={this.placeholder}\n disabled={this.disabled}\n value={this.value}\n onInput={this.handleTextInput}\n onFocus={this.handleTextFocus}\n onBlur={this.handleTextBlur}\n onKeyPress={this.handleKeyPress}\n />\n\n <div\n class={classNames('overlay overlay-clear', {\n show: this.value.length > 0,\n })}\n >\n <button\n class=\"clear-btn icon\"\n tabIndex={-1}\n onMouseDown={this.handleClear}\n disabled={this.disabled}\n >\n <slot name=\"clear-icon\">\n <vertex-viewer-icon name=\"close-circle\" size=\"sm\" />\n </slot>\n </button>\n </div>\n </div>\n </Host>\n );\n }\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n\n if (this.debounce != null || this.value === '') {\n this.emitCurrentValue();\n }\n };\n\n private handleTextFocus = (): void => {\n this.focused = true;\n };\n\n private handleTextBlur = (): void => {\n this.focused = false;\n\n this.searchDisposable?.dispose();\n\n if (this.value !== this.lastEmittedValue) {\n this.emitCurrentValue();\n }\n };\n\n private handleKeyPress = (event: KeyboardEvent): void => {\n if (event.key === 'Enter') {\n this.searchDisposable?.dispose();\n this.emitCurrentValue();\n }\n };\n\n private handleClear = (event: MouseEvent): void => {\n event.preventDefault();\n\n this.value = '';\n this.searchDisposable?.dispose();\n this.emitCurrentValue();\n this.setFocus();\n };\n\n private handleDebounceChanged(): void {\n this.searchDisposable?.dispose();\n\n const emitter = debounceEvent(this.search, this.debounce ?? 0);\n\n // Track this emitter in two separate variables to maintain the `EventEmitter` typing for\n // `this.search`. This allows for correct generation of `CustomEvent` types.\n this.search = emitter;\n this.searchDisposable = emitter;\n }\n\n private setupController(): void {\n this.onStateChangeDisposable?.dispose();\n\n this.onStateChangeDisposable = this.controller?.onStateChange.on(\n (state) => {\n // If a search was previously being performed, but has now finished,\n // emit the event that the search has completed.\n if (this.isSearching && !state.isSearching) {\n this.searchCompleted.emit(this.value);\n }\n\n this.isSearching = state.isSearching;\n },\n );\n }\n\n private emitCurrentValue(): void {\n this.lastEmittedValue = this.value;\n this.search.emit(this.value);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{v as t}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{v as t}from"./p-2UsvOTHJ.js";function i(i,n){return{type:"minimum-distance",point1:i,point2:n,distance:t.distance(i,n)}}export{i as m};
|
|
5
|
+
//# sourceMappingURL=p-_qi2VkC2.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{t as n,p as t,H as s,d as e,h as o,e as i}from"./p-Bb32XUUS.js";import{v as a,q as h,m as r,h as d}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{t as n,p as t,H as s,d as e,h as o,e as i}from"./p-Bb32XUUS.js";import{v as a,q as h,m as r,h as d}from"./p-2UsvOTHJ.js";import{o as l}from"./p-CDM7zNn0.js";const c=()=>`.sc-vertex-viewer-dom-group-h{display:block;transform-style:preserve-3d}`;const u=t(class n extends s{constructor(n){super();if(n!==false){this.__registerHost()}this.propertyChange=e(this,"propertyChange");this.position=a.origin();this.positionJson="";this.quaternion=h.create();this.quaternionJson="";this.scale=a.create(1,1,1);this.scaleJson="";this.matrix=r.makeIdentity()}handlePositionChange(){this.syncMatrix()}handlePositionJsonChanged(){this.syncPosition()}handleRotationChanged(){this.syncQuaternionWithRotation()}handleRotationJsonChanged(){this.syncRotation()}handleQuaternionChange(){this.syncMatrix()}handleQuaternionJsonChanged(){this.syncQuaternion()}handleScaleChange(){this.syncMatrix()}handleScaleJsonChanged(){this.syncScale()}handleMatrixChanged(n,t){if(!l.isEqual(n,t)){this.propertyChange.emit()}}componentWillLoad(){this.syncProperties()}componentShouldUpdate(){return false}syncProperties(){this.syncPosition();this.syncRotation();this.syncQuaternion();this.syncScale();this.syncMatrix()}syncPosition(){this.position=this.positionJson.length>0?this.parseJson("positionJson",this.positionJson,a.fromJson):this.position}syncRotation(){this.rotation=this.rotationJson!=null&&this.rotationJson.length>0?this.parseJson("rotationJson",this.rotationJson,d.fromJson):this.rotation;this.syncQuaternionWithRotation()}syncQuaternionWithRotation(){this.quaternion=this.rotation!=null?h.fromEuler(this.rotation):this.quaternion}syncQuaternion(){this.quaternion=this.quaternionJson.length>0?this.parseJson("quaternionJson",this.quaternionJson,h.fromJson):this.quaternion}syncScale(){this.scale=this.scaleJson.length>0?this.parseJson("scaleJson",this.scaleJson,a.fromJson):this.scale}syncMatrix(){this.matrix=r.makeTRS(this.position,this.quaternion,this.scale)}parseJson(n,t,s){try{return s(t)}catch(t){console.warn(`Could not parse \`${n}\`. Invalid JSON.`);throw t}}render(){return o(i,{key:"37c070b2d355a3c5e37ee8e3a7a457dc51976822"},o("slot",{key:"0af1478c04d2c4b88f4ded8fa18897970f9cd125"}))}static get watchers(){return{position:[{handlePositionChange:0}],positionJson:[{handlePositionJsonChanged:0}],rotation:[{handleRotationChanged:0}],rotationJson:[{handleRotationJsonChanged:0}],quaternion:[{handleQuaternionChange:0}],quaternionJson:[{handleQuaternionJsonChanged:0}],scale:[{handleScaleChange:0}],scaleJson:[{handleScaleJsonChanged:0}],matrix:[{handleMatrixChanged:0}]}}static get style(){return c()}},[262,"vertex-viewer-dom-group",{position:[1040],positionJson:[1,"position"],rotation:[1040],rotationJson:[1,"rotation"],quaternion:[1040],quaternionJson:[1,"quaternion"],scale:[1040],scaleJson:[1,"scale"],matrix:[1040]},undefined,{position:[{handlePositionChange:0}],positionJson:[{handlePositionJsonChanged:0}],rotation:[{handleRotationChanged:0}],rotationJson:[{handleRotationJsonChanged:0}],quaternion:[{handleQuaternionChange:0}],quaternionJson:[{handleQuaternionJsonChanged:0}],scale:[{handleScaleChange:0}],scaleJson:[{handleScaleJsonChanged:0}],matrix:[{handleMatrixChanged:0}]}]);function g(){if(typeof customElements==="undefined"){return}const t=["vertex-viewer-dom-group"];t.forEach((t=>{switch(t){case"vertex-viewer-dom-group":if(!customElements.get(n(t))){customElements.define(n(t),u)}break}}))}g();export{u as V,g as d};
|
|
5
|
+
//# sourceMappingURL=p-rDr0x5Z7.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{t as e,p as i,H as t,d as s,h as n,e as o}from"./p-Bb32XUUS.js";import{d as l}from"./p-CPk-nchx.js";import"./p-DjrtwKcK.js";import{b as d}from"./p-DC86ZXai.js";import{d as r}from"./p-Bkm6H5uq.js";const a=()=>`button{border:none;background:transparent;cursor:pointer;margin:0;padding:0}:host{display:flex;align-items:center;box-sizing:border-box;--scene-tree-cell-background-hover:var(--blue-200);--scene-tree-cell-background-selected:var(--blue-300);--scene-tree-cell-text-positioning:left;--scene-tree-cell-padding:0.25rem 0;font-size:var(--scene-tree-default-font-size, unset);font-family:var(--scene-tree-default-font-family, unset);color:var(--scene-tree-default-font-color, #444444)}:host([is-hovered]){background:var(--scene-tree-cell-background-hover)}:host([is-selected]){background:var(--scene-tree-cell-background-selected)}.wrapper{display:flex;align-items:center;box-sizing:border-box;width:100%;height:100%;padding:var(--scene-tree-cell-padding)}.content{width:100%;text-align:var(--scene-tree-cell-text-positioning);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.column-spacer{width:var(--scene-tree-table-column-gap)}.expand-btn{cursor:pointer;display:flex;align-items:center;justify-content:center;min-width:24px;min-height:24px}:host([is-leaf]) .expand-btn,:host([is-end-item]) .expand-btn{visibility:hidden;cursor:default}.no-shrink{flex-shrink:0}.end-item-btn{cursor:default;display:flex;align-items:center;justify-content:center;min-width:24px;min-height:24px}:host(:not([is-end-item])) .end-item-btn{visibility:hidden;cursor:default}.end-item-icon{width:14px;height:14px;fill:var(--scene-tree-secondary-font-color, var(--neutral-600))}.visibility-btn,.isolate-btn{cursor:pointer;display:flex;align-items:center;justify-content:center;width:20px;height:20px}.icon{width:14px;height:14px;fill:var(--scene-tree-default-font-color, currentColor)}`;const h=i(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow();this.expandToggled=s(this,"expandToggled");this.visibilityToggled=s(this,"visibilityToggled");this.selectionToggled=s(this,"selectionToggled");this.isolatePressed=s(this,"isolatePressed");this.cellLoaded=s(this,"cellLoaded");this.placeholder="--";this.alwaysShowIcons=false;this.hovered=false;this.displayValue=()=>{const e=this.value==null||this.value.trim()===""?this.placeholder:this.value;return e};this.handleCellPointerEnter=()=>{var e,i,t;(e=this.hoverController)===null||e===void 0?void 0:e.setHovered((t=(i=this.node)===null||i===void 0?void 0:i.id)===null||t===void 0?void 0:t.hex)};this.handleCellPointerLeave=()=>{var e;(e=this.hoverController)===null||e===void 0?void 0:e.setHovered(undefined)};this.handleCellPointerUp=e=>{if(!this.isScrolling&&this.node!=null&&this.tree!=null&&this.longPressTimer!=null){if(this.selectionHandler!=null){this.selectionHandler(e,this.node,this.tree)}else{this.performDefaultSelectionOperation(e)}this.selectionToggled.emit({node:this.node,originalEvent:e})}this.clearLongPressTimer()};this.handleCellPointerDown=e=>{this.restartLongPressTimer()};this.createActionPointerUpHandler=e=>i=>{i.preventDefault();i.stopPropagation();d(this.hostEl);e(i)};this.toggleExpansion=async e=>{if(this.tree!=null&&this.node!=null){if(this.expansionHandler!=null){this.expansionHandler(e,this.node,this.tree)}else{await this.performDefaultExpansionOperation(this.node,this.tree)}this.expandToggled.emit({node:this.node,originalEvent:e})}};this.toggleVisibility=async e=>{if(this.tree!=null&&this.node!=null){if(this.visibilityHandler!=null){this.visibilityHandler(e,this.node,this.tree)}else{await this.performDefaultVisibilityOperation(this.node,this.tree)}this.visibilityToggled.emit({node:this.node,originalEvent:e})}};this.isolate=async e=>{if(this.tree!=null&&this.node!=null){if(this.isolateHandler!=null){this.isolateHandler(e,this.node,this.tree)}else{await this.performDefaultIsolateOperation(this.node,this.tree)}this.isolatePressed.emit({node:this.node,originalEvent:e})}};this.performDefaultSelectionOperation=e=>{var i,t,s,n,o,l;if(!e.defaultPrevented&&e.button===0){if((e.ctrlKey||e.metaKey)&&((i=this.node)===null||i===void 0?void 0:i.selected)){(t=this.tree)===null||t===void 0?void 0:t.deselectItem(this.node)}else if((s=this.node)===null||s===void 0?void 0:s.selected){(n=this.tree)===null||n===void 0?void 0:n.selectItem(this.node,{recurseParent:true})}else if(!((o=this.node)===null||o===void 0?void 0:o.selected)){(l=this.tree)===null||l===void 0?void 0:l.selectItem(this.node,{append:e.ctrlKey||e.metaKey,range:e.shiftKey})}}};this.performDefaultVisibilityOperation=async(e,i)=>{await i.toggleItemVisibility(e)};this.performDefaultIsolateOperation=async(e,i)=>{await i.isolateItem(e)};this.performDefaultExpansionOperation=async(e,i)=>{await i.toggleExpandItem(e)}}componentDidLoad(){var e;this.hoverListener=(e=this.hoverController)===null||e===void 0?void 0:e.stateChanged((e=>{var i,t;this.hovered=e===((t=(i=this.node)===null||i===void 0?void 0:i.id)===null||t===void 0?void 0:t.hex)}));this.cellLoaded.emit();this.clearLongPressTimer()}disconnectedCallback(){var e;(e=this.hoverListener)===null||e===void 0?void 0:e.dispose();this.clearLongPressTimer()}componentWillRender(){var e,i,t,s,n,o;this.toggleAttribute("is-hovered",this.hovered);this.toggleAttribute("is-hidden",!((e=this.node)===null||e===void 0?void 0:e.visible));this.toggleAttribute("is-selected",!!((i=this.node)===null||i===void 0?void 0:i.selected));this.toggleAttribute("is-partial",!!((t=this.node)===null||t===void 0?void 0:t.partiallyVisible));this.toggleAttribute("is-leaf",!!((s=this.node)===null||s===void 0?void 0:s.isLeaf));this.toggleAttribute("is-end-item",!!((n=this.node)===null||n===void 0?void 0:n.endItem));this.toggleAttribute("is-filter-hit",!!((o=this.node)===null||o===void 0?void 0:o.filterHit))}render(){var e,i,t,s;const l=this.node==null?{visibility:"hidden"}:undefined;const d=this.getBackgroundColorStyle();const r=this.getEndItemIcon();const a=this.getExpansionIcon();const h=this.getIsolateIcon();const c=this.getVisibilityIcon();const v=this.expandToggle&&!r;const u=r&&!v;return n(o,{key:"703090cacf3d026e220ead0a051d70b186fa056e",onPointerEnter:this.handleCellPointerEnter,onPointerLeave:this.handleCellPointerLeave,onPointerUp:this.handleCellPointerUp,onPointerDown:this.handleCellPointerDown,style:{...l,"background-color":d}},n("div",{key:"25a45f3cebed75a1d0e469cce01e1cabec5450c4",class:"wrapper"},n("div",{key:"7ba2f3c1b9a5551287f6683f87de841f0717e87b",class:"no-shrink"},n("slot",{key:"04bd203d0e034aa4fce3a0b64d24718ab0ba50af",name:"left-gutter"})),v&&n("button",{key:"9dfa16123e24eeb90e208aa0d5936b9bacd9d8f4",class:"expand-btn no-shrink","data-testid":"expand-"+((e=this.node)===null||e===void 0?void 0:e.name),onPointerUp:this.createActionPointerUpHandler(this.toggleExpansion)},a&&n("vertex-viewer-icon",{key:"dd3c2a86b90d627b3234b76075dafef393418945",class:"icon",name:a,size:"sm"})),u&&n("button",{key:"d486186bcae525c9b520cc0cd07848389f9ffd87",class:"end-item-btn no-shrink","data-testid":"end-item-"+((i=this.node)===null||i===void 0?void 0:i.name)},r&&n("vertex-viewer-icon",{key:"70449bce2c41f6d07bd316a6f607b17c2484d4a0",class:"end-item-icon",name:r,size:"sm"})),n("div",{key:"a693f0db50d607f4f8c427f86ce99a6813b2d691",class:"content"},this.value!=null&&this.value.trim()!==""?n("slot",null,this.displayValue()):n("slot",{name:"placeholder"},this.placeholder)),this.isolateButton&&n("button",{key:"6d981678a7307f45e7f4636085676bd091187de4",class:"isolate-btn no-shrink","data-testid":"isolate-btn-"+((t=this.node)===null||t===void 0?void 0:t.name),onPointerUp:this.createActionPointerUpHandler(this.isolate)},h&&n("vertex-viewer-icon",{key:"9fee42c3d4a82445781fc99c31c5980778d94440",class:"icon",name:"locate",size:"sm"})),this.visibilityToggle&&n("button",{key:"ae999f4eadf1214f9583a503ccc49cfceee60e44",class:"visibility-btn no-shrink","data-testid":"visibility-btn-"+((s=this.node)===null||s===void 0?void 0:s.name),onPointerUp:this.createActionPointerUpHandler(this.toggleVisibility)},c&&n("vertex-viewer-icon",{key:"af24355ad0af2b8cb4fe66a5d25f9bf85796e460",class:"icon",name:c,size:"sm"})),n("div",{key:"1000b80cc334bc103563af29aea0a0629d3229c3",class:"no-shrink"},n("slot",{key:"788690a3c64964d744d8effc3898fefb19d1ae5a",name:"right-gutter"})),!this.visibilityToggle&&!this.isolateButton&&n("div",{key:"6012bc2d3b2fef8533597d92233db11b6b5982a1",class:"column-spacer"})))}toggleAttribute(e,i){if(i){this.hostEl.setAttribute(e,"")}else{this.hostEl.removeAttribute(e)}}clearLongPressTimer(){if(this.longPressTimer!=null){window.clearTimeout(this.longPressTimer)}this.longPressTimer=undefined}restartLongPressTimer(){this.clearLongPressTimer();this.longPressTimer=window.setTimeout((()=>{this.clearLongPressTimer()}),l.longPressThreshold)}getBackgroundColorStyle(){var e,i;const t=this.getCssVariableWithFallbacks(`--scene-tree-row-background-color-depth-${(e=this.node)===null||e===void 0?void 0:e.depth}`,"--scene-tree-row-background-color");const s=this.getCssVariableWithFallbacks("--scene-tree-selected-row-background-color","--scene-tree-cell-background-selected");const n=this.getCssVariableWithFallbacks("--scene-tree-hovered-row-background-color","--scene-tree-cell-background-hover");if(!!((i=this.node)===null||i===void 0?void 0:i.selected)){return s}else if(this.hovered){return n}return t}getCssVariableWithFallbacks(e,...i){const t=[...i].reverse();return[...t,e].reduce(((e,i)=>`var(${i}, ${e})`),"unset")}getIsolateIcon(){if(this.hovered||this.alwaysShowIcons){return"locate"}return undefined}getExpansionIcon(){var e,i,t;if(!((e=this.node)===null||e===void 0?void 0:e.isLeaf)&&!((i=this.node)===null||i===void 0?void 0:i.endItem)){return((t=this.node)===null||t===void 0?void 0:t.expanded)?"chevron-down":"chevron-right"}return undefined}getEndItemIcon(){var e,i,t;if(this.endItemIndicator&&((e=this.node)===null||e===void 0?void 0:e.endItem)&&(!((i=this.node)===null||i===void 0?void 0:i.isLeaf)||((t=this.node)===null||t===void 0?void 0:t.filterHit))){return"lock"}return undefined}getVisibilityIcon(){var e,i,t,s,n;if((this.hovered||this.alwaysShowIcons)&&!((e=this.node)===null||e===void 0?void 0:e.partiallyVisible)&&((i=this.node)===null||i===void 0?void 0:i.visible)){return"eye-open"}else if(!((t=this.node)===null||t===void 0?void 0:t.partiallyVisible)&&!((s=this.node)===null||s===void 0?void 0:s.visible)){return"eye-half"}else if((n=this.node)===null||n===void 0?void 0:n.partiallyVisible){return"eye-half-dotted"}return undefined}get hostEl(){return this}static get style(){return a()}},[257,"vertex-scene-tree-table-cell",{node:[16],tree:[16],value:[1],placeholder:[1],alwaysShowIcons:[4,"always-show-icons"],hovered:[1028],isScrolling:[4,"is-scrolling"],expandToggle:[4,"expand-toggle"],endItemIndicator:[4,"end-item-indicator"],visibilityToggle:[4,"visibility-toggle"],isolateButton:[4,"isolate-button"],selectionHandler:[16],visibilityHandler:[16],expansionHandler:[16],isolateHandler:[16],hoverController:[16]}]);function c(){if(typeof customElements==="undefined"){return}const i=["vertex-scene-tree-table-cell","vertex-viewer-icon"];i.forEach((i=>{switch(i){case"vertex-scene-tree-table-cell":if(!customElements.get(e(i))){customElements.define(e(i),h)}break;case"vertex-viewer-icon":if(!customElements.get(e(i))){r()}break}}))}c();const v=h;const u=c;export{v as VertexSceneTreeTableCell,u as defineCustomElement};
|
|
4
|
+
import{t as e,p as i,H as t,d as s,h as n,e as o}from"./p-Bb32XUUS.js";import{d as l}from"./p-CPk-nchx.js";import"./p-CvEK3ZK1.js";import{b as d}from"./p-DC86ZXai.js";import{d as r}from"./p-Bkm6H5uq.js";const a=()=>`button{border:none;background:transparent;cursor:pointer;margin:0;padding:0}:host{display:flex;align-items:center;box-sizing:border-box;--scene-tree-cell-background-hover:var(--blue-200);--scene-tree-cell-background-selected:var(--blue-300);--scene-tree-cell-text-positioning:left;--scene-tree-cell-padding:0.25rem 0;font-size:var(--scene-tree-default-font-size, unset);font-family:var(--scene-tree-default-font-family, unset);color:var(--scene-tree-default-font-color, #444444)}:host([is-hovered]){background:var(--scene-tree-cell-background-hover)}:host([is-selected]){background:var(--scene-tree-cell-background-selected)}.wrapper{display:flex;align-items:center;box-sizing:border-box;width:100%;height:100%;padding:var(--scene-tree-cell-padding)}.content{width:100%;text-align:var(--scene-tree-cell-text-positioning);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.column-spacer{width:var(--scene-tree-table-column-gap)}.expand-btn{cursor:pointer;display:flex;align-items:center;justify-content:center;min-width:24px;min-height:24px}:host([is-leaf]) .expand-btn,:host([is-end-item]) .expand-btn{visibility:hidden;cursor:default}.no-shrink{flex-shrink:0}.end-item-btn{cursor:default;display:flex;align-items:center;justify-content:center;min-width:24px;min-height:24px}:host(:not([is-end-item])) .end-item-btn{visibility:hidden;cursor:default}.end-item-icon{width:14px;height:14px;fill:var(--scene-tree-secondary-font-color, var(--neutral-600))}.visibility-btn,.isolate-btn{cursor:pointer;display:flex;align-items:center;justify-content:center;width:20px;height:20px}.icon{width:14px;height:14px;fill:var(--scene-tree-default-font-color, currentColor)}`;const h=i(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow();this.expandToggled=s(this,"expandToggled");this.visibilityToggled=s(this,"visibilityToggled");this.selectionToggled=s(this,"selectionToggled");this.isolatePressed=s(this,"isolatePressed");this.cellLoaded=s(this,"cellLoaded");this.placeholder="--";this.alwaysShowIcons=false;this.hovered=false;this.displayValue=()=>{const e=this.value==null||this.value.trim()===""?this.placeholder:this.value;return e};this.handleCellPointerEnter=()=>{var e,i,t;(e=this.hoverController)===null||e===void 0?void 0:e.setHovered((t=(i=this.node)===null||i===void 0?void 0:i.id)===null||t===void 0?void 0:t.hex)};this.handleCellPointerLeave=()=>{var e;(e=this.hoverController)===null||e===void 0?void 0:e.setHovered(undefined)};this.handleCellPointerUp=e=>{if(!this.isScrolling&&this.node!=null&&this.tree!=null&&this.longPressTimer!=null){if(this.selectionHandler!=null){this.selectionHandler(e,this.node,this.tree)}else{this.performDefaultSelectionOperation(e)}this.selectionToggled.emit({node:this.node,originalEvent:e})}this.clearLongPressTimer()};this.handleCellPointerDown=e=>{this.restartLongPressTimer()};this.createActionPointerUpHandler=e=>i=>{i.preventDefault();i.stopPropagation();d(this.hostEl);e(i)};this.toggleExpansion=async e=>{if(this.tree!=null&&this.node!=null){if(this.expansionHandler!=null){this.expansionHandler(e,this.node,this.tree)}else{await this.performDefaultExpansionOperation(this.node,this.tree)}this.expandToggled.emit({node:this.node,originalEvent:e})}};this.toggleVisibility=async e=>{if(this.tree!=null&&this.node!=null){if(this.visibilityHandler!=null){this.visibilityHandler(e,this.node,this.tree)}else{await this.performDefaultVisibilityOperation(this.node,this.tree)}this.visibilityToggled.emit({node:this.node,originalEvent:e})}};this.isolate=async e=>{if(this.tree!=null&&this.node!=null){if(this.isolateHandler!=null){this.isolateHandler(e,this.node,this.tree)}else{await this.performDefaultIsolateOperation(this.node,this.tree)}this.isolatePressed.emit({node:this.node,originalEvent:e})}};this.performDefaultSelectionOperation=e=>{var i,t,s,n,o,l;if(!e.defaultPrevented&&e.button===0){if((e.ctrlKey||e.metaKey)&&((i=this.node)===null||i===void 0?void 0:i.selected)){(t=this.tree)===null||t===void 0?void 0:t.deselectItem(this.node)}else if((s=this.node)===null||s===void 0?void 0:s.selected){(n=this.tree)===null||n===void 0?void 0:n.selectItem(this.node,{recurseParent:true})}else if(!((o=this.node)===null||o===void 0?void 0:o.selected)){(l=this.tree)===null||l===void 0?void 0:l.selectItem(this.node,{append:e.ctrlKey||e.metaKey,range:e.shiftKey})}}};this.performDefaultVisibilityOperation=async(e,i)=>{await i.toggleItemVisibility(e)};this.performDefaultIsolateOperation=async(e,i)=>{await i.isolateItem(e)};this.performDefaultExpansionOperation=async(e,i)=>{await i.toggleExpandItem(e)}}componentDidLoad(){var e;this.hoverListener=(e=this.hoverController)===null||e===void 0?void 0:e.stateChanged((e=>{var i,t;this.hovered=e===((t=(i=this.node)===null||i===void 0?void 0:i.id)===null||t===void 0?void 0:t.hex)}));this.cellLoaded.emit();this.clearLongPressTimer()}disconnectedCallback(){var e;(e=this.hoverListener)===null||e===void 0?void 0:e.dispose();this.clearLongPressTimer()}componentWillRender(){var e,i,t,s,n,o;this.toggleAttribute("is-hovered",this.hovered);this.toggleAttribute("is-hidden",!((e=this.node)===null||e===void 0?void 0:e.visible));this.toggleAttribute("is-selected",!!((i=this.node)===null||i===void 0?void 0:i.selected));this.toggleAttribute("is-partial",!!((t=this.node)===null||t===void 0?void 0:t.partiallyVisible));this.toggleAttribute("is-leaf",!!((s=this.node)===null||s===void 0?void 0:s.isLeaf));this.toggleAttribute("is-end-item",!!((n=this.node)===null||n===void 0?void 0:n.endItem));this.toggleAttribute("is-filter-hit",!!((o=this.node)===null||o===void 0?void 0:o.filterHit))}render(){var e,i,t,s;const l=this.node==null?{visibility:"hidden"}:undefined;const d=this.getBackgroundColorStyle();const r=this.getEndItemIcon();const a=this.getExpansionIcon();const h=this.getIsolateIcon();const c=this.getVisibilityIcon();const v=this.expandToggle&&!r;const u=r&&!v;return n(o,{key:"703090cacf3d026e220ead0a051d70b186fa056e",onPointerEnter:this.handleCellPointerEnter,onPointerLeave:this.handleCellPointerLeave,onPointerUp:this.handleCellPointerUp,onPointerDown:this.handleCellPointerDown,style:{...l,"background-color":d}},n("div",{key:"25a45f3cebed75a1d0e469cce01e1cabec5450c4",class:"wrapper"},n("div",{key:"7ba2f3c1b9a5551287f6683f87de841f0717e87b",class:"no-shrink"},n("slot",{key:"04bd203d0e034aa4fce3a0b64d24718ab0ba50af",name:"left-gutter"})),v&&n("button",{key:"9dfa16123e24eeb90e208aa0d5936b9bacd9d8f4",class:"expand-btn no-shrink","data-testid":"expand-"+((e=this.node)===null||e===void 0?void 0:e.name),onPointerUp:this.createActionPointerUpHandler(this.toggleExpansion)},a&&n("vertex-viewer-icon",{key:"dd3c2a86b90d627b3234b76075dafef393418945",class:"icon",name:a,size:"sm"})),u&&n("button",{key:"d486186bcae525c9b520cc0cd07848389f9ffd87",class:"end-item-btn no-shrink","data-testid":"end-item-"+((i=this.node)===null||i===void 0?void 0:i.name)},r&&n("vertex-viewer-icon",{key:"70449bce2c41f6d07bd316a6f607b17c2484d4a0",class:"end-item-icon",name:r,size:"sm"})),n("div",{key:"a693f0db50d607f4f8c427f86ce99a6813b2d691",class:"content"},this.value!=null&&this.value.trim()!==""?n("slot",null,this.displayValue()):n("slot",{name:"placeholder"},this.placeholder)),this.isolateButton&&n("button",{key:"6d981678a7307f45e7f4636085676bd091187de4",class:"isolate-btn no-shrink","data-testid":"isolate-btn-"+((t=this.node)===null||t===void 0?void 0:t.name),onPointerUp:this.createActionPointerUpHandler(this.isolate)},h&&n("vertex-viewer-icon",{key:"9fee42c3d4a82445781fc99c31c5980778d94440",class:"icon",name:"locate",size:"sm"})),this.visibilityToggle&&n("button",{key:"ae999f4eadf1214f9583a503ccc49cfceee60e44",class:"visibility-btn no-shrink","data-testid":"visibility-btn-"+((s=this.node)===null||s===void 0?void 0:s.name),onPointerUp:this.createActionPointerUpHandler(this.toggleVisibility)},c&&n("vertex-viewer-icon",{key:"af24355ad0af2b8cb4fe66a5d25f9bf85796e460",class:"icon",name:c,size:"sm"})),n("div",{key:"1000b80cc334bc103563af29aea0a0629d3229c3",class:"no-shrink"},n("slot",{key:"788690a3c64964d744d8effc3898fefb19d1ae5a",name:"right-gutter"})),!this.visibilityToggle&&!this.isolateButton&&n("div",{key:"6012bc2d3b2fef8533597d92233db11b6b5982a1",class:"column-spacer"})))}toggleAttribute(e,i){if(i){this.hostEl.setAttribute(e,"")}else{this.hostEl.removeAttribute(e)}}clearLongPressTimer(){if(this.longPressTimer!=null){window.clearTimeout(this.longPressTimer)}this.longPressTimer=undefined}restartLongPressTimer(){this.clearLongPressTimer();this.longPressTimer=window.setTimeout((()=>{this.clearLongPressTimer()}),l.longPressThreshold)}getBackgroundColorStyle(){var e,i;const t=this.getCssVariableWithFallbacks(`--scene-tree-row-background-color-depth-${(e=this.node)===null||e===void 0?void 0:e.depth}`,"--scene-tree-row-background-color");const s=this.getCssVariableWithFallbacks("--scene-tree-selected-row-background-color","--scene-tree-cell-background-selected");const n=this.getCssVariableWithFallbacks("--scene-tree-hovered-row-background-color","--scene-tree-cell-background-hover");if(!!((i=this.node)===null||i===void 0?void 0:i.selected)){return s}else if(this.hovered){return n}return t}getCssVariableWithFallbacks(e,...i){const t=[...i].reverse();return[...t,e].reduce(((e,i)=>`var(${i}, ${e})`),"unset")}getIsolateIcon(){if(this.hovered||this.alwaysShowIcons){return"locate"}return undefined}getExpansionIcon(){var e,i,t;if(!((e=this.node)===null||e===void 0?void 0:e.isLeaf)&&!((i=this.node)===null||i===void 0?void 0:i.endItem)){return((t=this.node)===null||t===void 0?void 0:t.expanded)?"chevron-down":"chevron-right"}return undefined}getEndItemIcon(){var e,i,t;if(this.endItemIndicator&&((e=this.node)===null||e===void 0?void 0:e.endItem)&&(!((i=this.node)===null||i===void 0?void 0:i.isLeaf)||((t=this.node)===null||t===void 0?void 0:t.filterHit))){return"lock"}return undefined}getVisibilityIcon(){var e,i,t,s,n;if((this.hovered||this.alwaysShowIcons)&&!((e=this.node)===null||e===void 0?void 0:e.partiallyVisible)&&((i=this.node)===null||i===void 0?void 0:i.visible)){return"eye-open"}else if(!((t=this.node)===null||t===void 0?void 0:t.partiallyVisible)&&!((s=this.node)===null||s===void 0?void 0:s.visible)){return"eye-half"}else if((n=this.node)===null||n===void 0?void 0:n.partiallyVisible){return"eye-half-dotted"}return undefined}get hostEl(){return this}static get style(){return a()}},[257,"vertex-scene-tree-table-cell",{node:[16],tree:[16],value:[1],placeholder:[1],alwaysShowIcons:[4,"always-show-icons"],hovered:[1028],isScrolling:[4,"is-scrolling"],expandToggle:[4,"expand-toggle"],endItemIndicator:[4,"end-item-indicator"],visibilityToggle:[4,"visibility-toggle"],isolateButton:[4,"isolate-button"],selectionHandler:[16],visibilityHandler:[16],expansionHandler:[16],isolateHandler:[16],hoverController:[16]}]);function c(){if(typeof customElements==="undefined"){return}const i=["vertex-scene-tree-table-cell","vertex-viewer-icon"];i.forEach((i=>{switch(i){case"vertex-scene-tree-table-cell":if(!customElements.get(e(i))){customElements.define(e(i),h)}break;case"vertex-viewer-icon":if(!customElements.get(e(i))){r()}break}}))}c();const v=h;const u=c;export{v as VertexSceneTreeTableCell,u as defineCustomElement};
|
|
5
5
|
//# sourceMappingURL=vertex-scene-tree-table-cell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["sceneTreeTableCellCss","SceneTreeTableCell","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","placeholder","alwaysShowIcons","hovered","displayValue","resp","value","trim","handleCellPointerEnter","_a","hoverController","setHovered","_c","_b","node","id","hex","handleCellPointerLeave","undefined","handleCellPointerUp","event","isScrolling","tree","longPressTimer","selectionHandler","performDefaultSelectionOperation","selectionToggled","emit","originalEvent","clearLongPressTimer","handleCellPointerDown","restartLongPressTimer","createActionPointerUpHandler","action","preventDefault","stopPropagation","blurElement","hostEl","toggleExpansion","async","expansionHandler","performDefaultExpansionOperation","expandToggled","toggleVisibility","visibilityHandler","performDefaultVisibilityOperation","visibilityToggled","isolate","isolateHandler","performDefaultIsolateOperation","isolatePressed","defaultPrevented","button","ctrlKey","metaKey","selected","deselectItem","_d","selectItem","recurseParent","_e","_f","append","range","shiftKey","toggleItemVisibility","isolateItem","toggleExpandItem","componentDidLoad","hoverListener","stateChanged","cellLoaded","disconnectedCallback","dispose","componentWillRender","toggleAttribute","visible","partiallyVisible","isLeaf","endItem","filterHit","render","hiddenStyle","visibility","backgroundColorStyle","getBackgroundColorStyle","endItemIcon","getEndItemIcon","expansionIcon","getExpansionIcon","isolateIcon","getIsolateIcon","visibilityIcon","getVisibilityIcon","showSpaceForExpansionIcon","expandToggle","showSpaceForEndItemIcon","h","Host","key","onPointerEnter","onPointerLeave","onPointerUp","onPointerDown","style","class","name","size","isolateButton","visibilityToggle","attr","setAttribute","removeAttribute","window","clearTimeout","setTimeout","Events.defaultEventConfig","longPressThreshold","getCssVariableWithFallbacks","depth","selectedBackgroundColorStyle","hoveredBackgroundColorStyle","variable","fallbacks","sequencedFallbacks","reverse","reduce","res","s","expanded","endItemIndicator"],"sources":["src/components/scene-tree-table-cell/scene-tree-table-cell.css?tag=vertex-scene-tree-table-cell&encapsulation=shadow","src/components/scene-tree-table-cell/scene-tree-table-cell.tsx"],"sourcesContent":["@import url('../../css/button-reset.css');\n\n:host {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n\n /**\n * @prop --scene-tree-cell-background-hover: A CSS background of a cell when\n * hovered.\n */\n --scene-tree-cell-background-hover: var(--blue-200);\n\n /**\n * @prop --scene-tree-cell-background-selected: A CSS background color of a\n * cell when selected.\n */\n --scene-tree-cell-background-selected: var(--blue-300);\n\n /**\n * @prop --scene-tree-cell-text-positioning: A CSS text alignment\n * value that indicates how text should be positioned.\n */\n --scene-tree-cell-text-positioning: left;\n\n /**\n * @prop --scene-tree-cell-padding: CSS lengths that specifies the amount of\n * padding between the cell's border and content.\n */\n --scene-tree-cell-padding: 0.25rem 0;\n\n font-size: var(--scene-tree-default-font-size, unset);\n font-family: var(--scene-tree-default-font-family, unset);\n color: var(--scene-tree-default-font-color, #444444);\n}\n\n:host([is-hovered]) {\n background: var(--scene-tree-cell-background-hover);\n}\n\n:host([is-selected]) {\n background: var(--scene-tree-cell-background-selected);\n}\n\n.wrapper {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n padding: var(--scene-tree-cell-padding);\n}\n\n.content {\n width: 100%;\n text-align: var(--scene-tree-cell-text-positioning);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.column-spacer {\n width: var(--scene-tree-table-column-gap);\n}\n\n.expand-btn {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n min-height: 24px;\n}\n\n:host([is-leaf]) .expand-btn,\n:host([is-end-item]) .expand-btn {\n visibility: hidden;\n cursor: default;\n}\n\n.no-shrink {\n flex-shrink: 0;\n}\n\n.end-item-btn {\n cursor: default;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n min-height: 24px;\n}\n\n:host(:not([is-end-item])) .end-item-btn {\n visibility: hidden;\n cursor: default;\n}\n\n.end-item-icon {\n width: 14px;\n height: 14px;\n fill: var(--scene-tree-secondary-font-color, var(--neutral-600));\n}\n\n.visibility-btn,\n.isolate-btn {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n}\n\n.icon {\n width: 14px;\n height: 14px;\n fill: var(--scene-tree-default-font-color, currentColor);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n} from '@stencil/core';\nimport { Node } from '@vertexvis/scene-tree-protos/scenetree/protos/domain_pb';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { Events } from '../../lib/types';\nimport { SceneTreeOperationHandler } from '../scene-tree/lib/handlers';\nimport { SceneTreeCellHoverController } from '../scene-tree-table-layout/lib/hover-controller';\nimport { ViewerIconName } from '../viewer-icon/viewer-icon';\nimport { blurElement } from './utils';\n\nexport interface SceneTreeTableCellEventDetails {\n node?: Node.AsObject;\n originalEvent: PointerEvent;\n}\n\n@Component({\n tag: 'vertex-scene-tree-table-cell',\n styleUrl: 'scene-tree-table-cell.css',\n shadow: true,\n})\nexport class SceneTreeTableCell {\n /**\n * The node data that is associated to the row that this cell belongs to.\n * Contains information related to if the node is expanded, visible, etc.\n */\n @Prop()\n public node?: Node.AsObject;\n\n /**\n * A reference to the scene tree to perform operations for interactions. Such\n * as expansion, visibility and selection.\n */\n @Prop()\n public tree?: HTMLVertexSceneTreeElement;\n\n /**\n * The value to display in this cell.\n */\n @Prop()\n public value?: string;\n\n /**\n * The value to display in this cell if the `value` specified is\n * undefined. Defaults to \"--\".\n */\n @Prop()\n public placeholder = '--';\n\n /**\n * Whether to always show the requested icons in the cell. If false,\n * the icons will only appear when hovering over the cell.\n */\n @Prop()\n public alwaysShowIcons = false;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public hovered = false;\n\n /**\n * @internal\n */\n @Prop()\n public isScrolling?: boolean;\n\n /**\n * Indicates whether to display a button for toggling the expanded state of\n * the node associated with this cell.\n */\n @Prop()\n public expandToggle?: boolean;\n\n /**\n * Indicates whether to display an indicator that the node associated with\n * this cell is an end item.\n */\n @Prop()\n public endItemIndicator?: boolean;\n\n /**\n * Indicates whether to display a button for toggling the visibility state of\n * the node associated with this cell.\n */\n @Prop()\n public visibilityToggle?: boolean;\n\n /**\n * Indicates whether to display a button for isolating (show only + fly to)\n * the node associated with this cell.\n */\n @Prop()\n public isolateButton?: boolean;\n\n /**\n * An optional handler that will override this cell's default selection\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public selectionHandler?: SceneTreeOperationHandler;\n\n /**\n * An optional handler that will override this cell's default visibility\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public visibilityHandler?: SceneTreeOperationHandler;\n\n /**\n * An optional handler that will override this cell's default expansion\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public expansionHandler?: SceneTreeOperationHandler;\n\n /**\n * An optional handler that will override this cell's default isolate\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public isolateHandler?: SceneTreeOperationHandler;\n\n /**\n * @internal\n */\n @Prop()\n public hoverController?: SceneTreeCellHoverController;\n\n /**\n * An event that is emitted when a user requests to expand the node. This is\n * emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public expandToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * An event that is emitted when a user requests to change the node's\n * visibility. This event is emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public visibilityToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * An event that is emitted when a user requests to change the node's selection\n * state. This event is emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public selectionToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * An event that is emitted when a user requests to isolate the node.\n * This event is emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public isolatePressed!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * Used for internals or testing.\n *\n * @private\n */\n @Event({ bubbles: true })\n public cellLoaded!: EventEmitter<void>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private hoverListener?: Disposable;\n\n private longPressTimer?: number;\n\n public componentDidLoad(): void {\n this.hoverListener = this.hoverController?.stateChanged((id?: string) => {\n this.hovered = id === this.node?.id?.hex;\n });\n\n this.cellLoaded.emit();\n this.clearLongPressTimer();\n }\n\n public disconnectedCallback(): void {\n this.hoverListener?.dispose();\n this.clearLongPressTimer();\n }\n\n public componentWillRender(): void {\n this.toggleAttribute('is-hovered', this.hovered);\n this.toggleAttribute('is-hidden', !this.node?.visible);\n this.toggleAttribute('is-selected', !!this.node?.selected);\n this.toggleAttribute('is-partial', !!this.node?.partiallyVisible);\n this.toggleAttribute('is-leaf', !!this.node?.isLeaf);\n this.toggleAttribute('is-end-item', !!this.node?.endItem);\n this.toggleAttribute('is-filter-hit', !!this.node?.filterHit);\n }\n\n public render(): h.JSX.IntrinsicElements {\n // Overrides the `.hydrated` visibility when we have nothing to display\n const hiddenStyle =\n this.node == null ? { visibility: 'hidden' } : undefined;\n const backgroundColorStyle = this.getBackgroundColorStyle();\n\n const endItemIcon = this.getEndItemIcon();\n const expansionIcon = this.getExpansionIcon();\n const isolateIcon = this.getIsolateIcon();\n const visibilityIcon = this.getVisibilityIcon();\n\n const showSpaceForExpansionIcon = this.expandToggle && !endItemIcon;\n const showSpaceForEndItemIcon = endItemIcon && !showSpaceForExpansionIcon;\n\n return (\n <Host\n onPointerEnter={this.handleCellPointerEnter}\n onPointerLeave={this.handleCellPointerLeave}\n onPointerUp={this.handleCellPointerUp}\n onPointerDown={this.handleCellPointerDown}\n style={{\n ...hiddenStyle,\n 'background-color': backgroundColorStyle,\n }}\n >\n <div class=\"wrapper\">\n <div class=\"no-shrink\">\n <slot name=\"left-gutter\" />\n </div>\n {showSpaceForExpansionIcon && (\n <button\n class=\"expand-btn no-shrink\"\n data-testid={'expand-' + this.node?.name}\n onPointerUp={this.createActionPointerUpHandler(\n this.toggleExpansion,\n )}\n >\n {expansionIcon && (\n <vertex-viewer-icon\n class=\"icon\"\n name={expansionIcon}\n size=\"sm\"\n />\n )}\n </button>\n )}\n\n {showSpaceForEndItemIcon && (\n <button\n class=\"end-item-btn no-shrink\"\n data-testid={'end-item-' + this.node?.name}\n >\n {endItemIcon && (\n <vertex-viewer-icon\n class=\"end-item-icon\"\n name={endItemIcon}\n size=\"sm\"\n />\n )}\n </button>\n )}\n\n <div class=\"content\">\n {this.value != null && this.value.trim() !== '' ? (\n <slot>{this.displayValue()}</slot>\n ) : (\n <slot name=\"placeholder\">{this.placeholder}</slot>\n )}\n </div>\n {this.isolateButton && (\n <button\n class=\"isolate-btn no-shrink\"\n data-testid={'isolate-btn-' + this.node?.name}\n onPointerUp={this.createActionPointerUpHandler(this.isolate)}\n >\n {isolateIcon && (\n <vertex-viewer-icon class=\"icon\" name=\"locate\" size=\"sm\" />\n )}\n </button>\n )}\n {this.visibilityToggle && (\n <button\n class=\"visibility-btn no-shrink\"\n data-testid={'visibility-btn-' + this.node?.name}\n onPointerUp={this.createActionPointerUpHandler(\n this.toggleVisibility,\n )}\n >\n {visibilityIcon && (\n <vertex-viewer-icon\n class=\"icon\"\n name={visibilityIcon}\n size=\"sm\"\n />\n )}\n </button>\n )}\n <div class=\"no-shrink\">\n <slot name=\"right-gutter\" />\n </div>\n {!this.visibilityToggle && !this.isolateButton && (\n <div class=\"column-spacer\" />\n )}\n </div>\n </Host>\n );\n }\n\n private displayValue = (): string => {\n const resp =\n this.value == null || this.value.trim() === ''\n ? this.placeholder\n : this.value;\n\n return resp;\n };\n\n private handleCellPointerEnter = (): void => {\n this.hoverController?.setHovered(this.node?.id?.hex);\n };\n\n private handleCellPointerLeave = (): void => {\n this.hoverController?.setHovered(undefined);\n };\n\n private handleCellPointerUp = (event: PointerEvent): void => {\n if (\n !this.isScrolling &&\n this.node != null &&\n this.tree != null &&\n this.longPressTimer != null\n ) {\n if (this.selectionHandler != null) {\n this.selectionHandler(event, this.node, this.tree);\n } else {\n this.performDefaultSelectionOperation(event);\n }\n this.selectionToggled.emit({ node: this.node, originalEvent: event });\n }\n this.clearLongPressTimer();\n };\n\n private handleCellPointerDown = (event: PointerEvent): void => {\n this.restartLongPressTimer();\n };\n\n private createActionPointerUpHandler = (\n action: (event: PointerEvent) => void,\n ): ((event: PointerEvent) => void) => {\n return (event) => {\n // Blur the `hostEl` after a `preventDefault` to clear focus that\n // is left on the element after `pointerdown` event.\n event.preventDefault();\n event.stopPropagation();\n blurElement(this.hostEl);\n\n action(event);\n };\n };\n\n private toggleExpansion = async (event: PointerEvent): Promise<void> => {\n if (this.tree != null && this.node != null) {\n if (this.expansionHandler != null) {\n this.expansionHandler(event, this.node, this.tree);\n } else {\n await this.performDefaultExpansionOperation(this.node, this.tree);\n }\n this.expandToggled.emit({ node: this.node, originalEvent: event });\n }\n };\n\n private toggleVisibility = async (event: PointerEvent): Promise<void> => {\n if (this.tree != null && this.node != null) {\n if (this.visibilityHandler != null) {\n this.visibilityHandler(event, this.node, this.tree);\n } else {\n await this.performDefaultVisibilityOperation(this.node, this.tree);\n }\n this.visibilityToggled.emit({ node: this.node, originalEvent: event });\n }\n };\n\n private toggleAttribute(attr: string, value: boolean): void {\n if (value) {\n this.hostEl.setAttribute(attr, '');\n } else {\n this.hostEl.removeAttribute(attr);\n }\n }\n\n private isolate = async (event: PointerEvent): Promise<void> => {\n if (this.tree != null && this.node != null) {\n if (this.isolateHandler != null) {\n this.isolateHandler(event, this.node, this.tree);\n } else {\n await this.performDefaultIsolateOperation(this.node, this.tree);\n }\n this.isolatePressed.emit({ node: this.node, originalEvent: event });\n }\n };\n\n private performDefaultSelectionOperation = (event: PointerEvent): void => {\n if (!event.defaultPrevented && event.button === 0) {\n if ((event.ctrlKey || event.metaKey) && this.node?.selected) {\n this.tree?.deselectItem(this.node);\n } else if (this.node?.selected) {\n this.tree?.selectItem(this.node, {\n recurseParent: true,\n });\n } else if (!this.node?.selected) {\n this.tree?.selectItem(this.node, {\n append: event.ctrlKey || event.metaKey,\n range: event.shiftKey,\n });\n }\n }\n };\n\n private performDefaultVisibilityOperation = async (\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement,\n ): Promise<void> => {\n await tree.toggleItemVisibility(node);\n };\n\n private performDefaultIsolateOperation = async (\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement,\n ): Promise<void> => {\n await tree.isolateItem(node);\n };\n\n private performDefaultExpansionOperation = async (\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement,\n ): Promise<void> => {\n await tree.toggleExpandItem(node);\n };\n\n private clearLongPressTimer(): void {\n if (this.longPressTimer != null) {\n window.clearTimeout(this.longPressTimer);\n }\n this.longPressTimer = undefined;\n }\n\n private restartLongPressTimer(): void {\n this.clearLongPressTimer();\n this.longPressTimer = window.setTimeout(() => {\n this.clearLongPressTimer();\n }, Events.defaultEventConfig.longPressThreshold);\n }\n\n private getBackgroundColorStyle(): string {\n const backgroundColorStyle = this.getCssVariableWithFallbacks(\n `--scene-tree-row-background-color-depth-${this.node?.depth}`,\n '--scene-tree-row-background-color',\n );\n const selectedBackgroundColorStyle = this.getCssVariableWithFallbacks(\n '--scene-tree-selected-row-background-color',\n '--scene-tree-cell-background-selected',\n );\n const hoveredBackgroundColorStyle = this.getCssVariableWithFallbacks(\n '--scene-tree-hovered-row-background-color',\n '--scene-tree-cell-background-hover',\n );\n\n if (!!this.node?.selected) {\n return selectedBackgroundColorStyle;\n } else if (this.hovered) {\n return hoveredBackgroundColorStyle;\n }\n return backgroundColorStyle;\n }\n\n private getCssVariableWithFallbacks(\n variable: string,\n ...fallbacks: string[]\n ): string {\n const sequencedFallbacks = [...fallbacks].reverse();\n\n return [...sequencedFallbacks, variable].reduce(\n (res, s) => `var(${s}, ${res})`,\n 'unset',\n );\n }\n\n private getIsolateIcon(): ViewerIconName | undefined {\n if (this.hovered || this.alwaysShowIcons) {\n return 'locate';\n }\n return undefined;\n }\n\n private getExpansionIcon(): ViewerIconName | undefined {\n if (!this.node?.isLeaf && !this.node?.endItem) {\n return this.node?.expanded ? 'chevron-down' : 'chevron-right';\n }\n return undefined;\n }\n\n private getEndItemIcon(): ViewerIconName | undefined {\n // Return the end item icon for an item if it is set as an end item and either is not a leaf item\n // or matches the filter. Note that in the filtered view, an end item matching the filter will always be\n // marked as a leaf node because its children will be excluded from the search results and therefore\n // not present in the filtered tree.\n if (\n this.endItemIndicator &&\n this.node?.endItem &&\n (!this.node?.isLeaf || this.node?.filterHit)\n ) {\n return 'lock';\n }\n return undefined;\n }\n\n private getVisibilityIcon(): ViewerIconName | undefined {\n if (\n (this.hovered || this.alwaysShowIcons) &&\n !this.node?.partiallyVisible &&\n this.node?.visible\n ) {\n return 'eye-open';\n } else if (!this.node?.partiallyVisible && !this.node?.visible) {\n return 'eye-half';\n } else if (this.node?.partiallyVisible) {\n return 'eye-half-dotted';\n }\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["sceneTreeTableCellCss","SceneTreeTableCell","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","placeholder","alwaysShowIcons","hovered","displayValue","resp","value","trim","handleCellPointerEnter","_a","hoverController","setHovered","_c","_b","node","id","hex","handleCellPointerLeave","undefined","handleCellPointerUp","event","isScrolling","tree","longPressTimer","selectionHandler","performDefaultSelectionOperation","selectionToggled","emit","originalEvent","clearLongPressTimer","handleCellPointerDown","restartLongPressTimer","createActionPointerUpHandler","action","preventDefault","stopPropagation","blurElement","hostEl","toggleExpansion","async","expansionHandler","performDefaultExpansionOperation","expandToggled","toggleVisibility","visibilityHandler","performDefaultVisibilityOperation","visibilityToggled","isolate","isolateHandler","performDefaultIsolateOperation","isolatePressed","defaultPrevented","button","ctrlKey","metaKey","selected","deselectItem","_d","selectItem","recurseParent","_e","_f","append","range","shiftKey","toggleItemVisibility","isolateItem","toggleExpandItem","componentDidLoad","hoverListener","stateChanged","cellLoaded","disconnectedCallback","dispose","componentWillRender","toggleAttribute","visible","partiallyVisible","isLeaf","endItem","filterHit","render","hiddenStyle","visibility","backgroundColorStyle","getBackgroundColorStyle","endItemIcon","getEndItemIcon","expansionIcon","getExpansionIcon","isolateIcon","getIsolateIcon","visibilityIcon","getVisibilityIcon","showSpaceForExpansionIcon","expandToggle","showSpaceForEndItemIcon","h","Host","key","onPointerEnter","onPointerLeave","onPointerUp","onPointerDown","style","class","name","size","isolateButton","visibilityToggle","attr","setAttribute","removeAttribute","window","clearTimeout","setTimeout","Events.defaultEventConfig","longPressThreshold","getCssVariableWithFallbacks","depth","selectedBackgroundColorStyle","hoveredBackgroundColorStyle","variable","fallbacks","sequencedFallbacks","reverse","reduce","res","s","expanded","endItemIndicator"],"sources":["src/components/scene-tree-table-cell/scene-tree-table-cell.css?tag=vertex-scene-tree-table-cell&encapsulation=shadow","src/components/scene-tree-table-cell/scene-tree-table-cell.tsx"],"sourcesContent":["@import url('../../css/button-reset.css');\n\n:host {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n\n /**\n * @prop --scene-tree-cell-background-hover: A CSS background of a cell when\n * hovered.\n */\n --scene-tree-cell-background-hover: var(--blue-200);\n\n /**\n * @prop --scene-tree-cell-background-selected: A CSS background color of a\n * cell when selected.\n */\n --scene-tree-cell-background-selected: var(--blue-300);\n\n /**\n * @prop --scene-tree-cell-text-positioning: A CSS text alignment\n * value that indicates how text should be positioned.\n */\n --scene-tree-cell-text-positioning: left;\n\n /**\n * @prop --scene-tree-cell-padding: CSS lengths that specifies the amount of\n * padding between the cell's border and content.\n */\n --scene-tree-cell-padding: 0.25rem 0;\n\n font-size: var(--scene-tree-default-font-size, unset);\n font-family: var(--scene-tree-default-font-family, unset);\n color: var(--scene-tree-default-font-color, #444444);\n}\n\n:host([is-hovered]) {\n background: var(--scene-tree-cell-background-hover);\n}\n\n:host([is-selected]) {\n background: var(--scene-tree-cell-background-selected);\n}\n\n.wrapper {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n padding: var(--scene-tree-cell-padding);\n}\n\n.content {\n width: 100%;\n text-align: var(--scene-tree-cell-text-positioning);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.column-spacer {\n width: var(--scene-tree-table-column-gap);\n}\n\n.expand-btn {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n min-height: 24px;\n}\n\n:host([is-leaf]) .expand-btn,\n:host([is-end-item]) .expand-btn {\n visibility: hidden;\n cursor: default;\n}\n\n.no-shrink {\n flex-shrink: 0;\n}\n\n.end-item-btn {\n cursor: default;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n min-height: 24px;\n}\n\n:host(:not([is-end-item])) .end-item-btn {\n visibility: hidden;\n cursor: default;\n}\n\n.end-item-icon {\n width: 14px;\n height: 14px;\n fill: var(--scene-tree-secondary-font-color, var(--neutral-600));\n}\n\n.visibility-btn,\n.isolate-btn {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n}\n\n.icon {\n width: 14px;\n height: 14px;\n fill: var(--scene-tree-default-font-color, currentColor);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n} from '@stencil/core';\nimport { Node } from '@vertexvis/scene-tree-protos/scenetree/protos/domain_pb';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { Events } from '../../lib/types';\nimport { SceneTreeOperationHandler } from '../scene-tree/lib/handlers';\nimport { SceneTreeCellHoverController } from '../scene-tree-table-layout/lib/hover-controller';\nimport { ViewerIconName } from '../viewer-icon/viewer-icon';\nimport { blurElement } from './utils';\n\nexport interface SceneTreeTableCellEventDetails {\n node?: Node.AsObject;\n originalEvent: PointerEvent;\n}\n\n@Component({\n tag: 'vertex-scene-tree-table-cell',\n styleUrl: 'scene-tree-table-cell.css',\n shadow: true,\n})\nexport class SceneTreeTableCell {\n /**\n * The node data that is associated to the row that this cell belongs to.\n * Contains information related to if the node is expanded, visible, etc.\n */\n @Prop()\n public node?: Node.AsObject;\n\n /**\n * A reference to the scene tree to perform operations for interactions. Such\n * as expansion, visibility and selection.\n */\n @Prop()\n public tree?: HTMLVertexSceneTreeElement;\n\n /**\n * The value to display in this cell.\n */\n @Prop()\n public value?: string;\n\n /**\n * The value to display in this cell if the `value` specified is\n * undefined. Defaults to \"--\".\n */\n @Prop()\n public placeholder = '--';\n\n /**\n * Whether to always show the requested icons in the cell. If false,\n * the icons will only appear when hovering over the cell.\n */\n @Prop()\n public alwaysShowIcons = false;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public hovered = false;\n\n /**\n * @internal\n */\n @Prop()\n public isScrolling?: boolean;\n\n /**\n * Indicates whether to display a button for toggling the expanded state of\n * the node associated with this cell.\n */\n @Prop()\n public expandToggle?: boolean;\n\n /**\n * Indicates whether to display an indicator that the node associated with\n * this cell is an end item.\n */\n @Prop()\n public endItemIndicator?: boolean;\n\n /**\n * Indicates whether to display a button for toggling the visibility state of\n * the node associated with this cell.\n */\n @Prop()\n public visibilityToggle?: boolean;\n\n /**\n * Indicates whether to display a button for isolating (show only + fly to)\n * the node associated with this cell.\n */\n @Prop()\n public isolateButton?: boolean;\n\n /**\n * An optional handler that will override this cell's default selection\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public selectionHandler?: SceneTreeOperationHandler;\n\n /**\n * An optional handler that will override this cell's default visibility\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public visibilityHandler?: SceneTreeOperationHandler;\n\n /**\n * An optional handler that will override this cell's default expansion\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public expansionHandler?: SceneTreeOperationHandler;\n\n /**\n * An optional handler that will override this cell's default isolate\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public isolateHandler?: SceneTreeOperationHandler;\n\n /**\n * @internal\n */\n @Prop()\n public hoverController?: SceneTreeCellHoverController;\n\n /**\n * An event that is emitted when a user requests to expand the node. This is\n * emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public expandToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * An event that is emitted when a user requests to change the node's\n * visibility. This event is emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public visibilityToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * An event that is emitted when a user requests to change the node's selection\n * state. This event is emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public selectionToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * An event that is emitted when a user requests to isolate the node.\n * This event is emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public isolatePressed!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * Used for internals or testing.\n *\n * @private\n */\n @Event({ bubbles: true })\n public cellLoaded!: EventEmitter<void>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private hoverListener?: Disposable;\n\n private longPressTimer?: number;\n\n public componentDidLoad(): void {\n this.hoverListener = this.hoverController?.stateChanged((id?: string) => {\n this.hovered = id === this.node?.id?.hex;\n });\n\n this.cellLoaded.emit();\n this.clearLongPressTimer();\n }\n\n public disconnectedCallback(): void {\n this.hoverListener?.dispose();\n this.clearLongPressTimer();\n }\n\n public componentWillRender(): void {\n this.toggleAttribute('is-hovered', this.hovered);\n this.toggleAttribute('is-hidden', !this.node?.visible);\n this.toggleAttribute('is-selected', !!this.node?.selected);\n this.toggleAttribute('is-partial', !!this.node?.partiallyVisible);\n this.toggleAttribute('is-leaf', !!this.node?.isLeaf);\n this.toggleAttribute('is-end-item', !!this.node?.endItem);\n this.toggleAttribute('is-filter-hit', !!this.node?.filterHit);\n }\n\n public render(): h.JSX.IntrinsicElements {\n // Overrides the `.hydrated` visibility when we have nothing to display\n const hiddenStyle =\n this.node == null ? { visibility: 'hidden' } : undefined;\n const backgroundColorStyle = this.getBackgroundColorStyle();\n\n const endItemIcon = this.getEndItemIcon();\n const expansionIcon = this.getExpansionIcon();\n const isolateIcon = this.getIsolateIcon();\n const visibilityIcon = this.getVisibilityIcon();\n\n const showSpaceForExpansionIcon = this.expandToggle && !endItemIcon;\n const showSpaceForEndItemIcon = endItemIcon && !showSpaceForExpansionIcon;\n\n return (\n <Host\n onPointerEnter={this.handleCellPointerEnter}\n onPointerLeave={this.handleCellPointerLeave}\n onPointerUp={this.handleCellPointerUp}\n onPointerDown={this.handleCellPointerDown}\n style={{\n ...hiddenStyle,\n 'background-color': backgroundColorStyle,\n }}\n >\n <div class=\"wrapper\">\n <div class=\"no-shrink\">\n <slot name=\"left-gutter\" />\n </div>\n {showSpaceForExpansionIcon && (\n <button\n class=\"expand-btn no-shrink\"\n data-testid={'expand-' + this.node?.name}\n onPointerUp={this.createActionPointerUpHandler(\n this.toggleExpansion,\n )}\n >\n {expansionIcon && (\n <vertex-viewer-icon\n class=\"icon\"\n name={expansionIcon}\n size=\"sm\"\n />\n )}\n </button>\n )}\n\n {showSpaceForEndItemIcon && (\n <button\n class=\"end-item-btn no-shrink\"\n data-testid={'end-item-' + this.node?.name}\n >\n {endItemIcon && (\n <vertex-viewer-icon\n class=\"end-item-icon\"\n name={endItemIcon}\n size=\"sm\"\n />\n )}\n </button>\n )}\n\n <div class=\"content\">\n {this.value != null && this.value.trim() !== '' ? (\n <slot>{this.displayValue()}</slot>\n ) : (\n <slot name=\"placeholder\">{this.placeholder}</slot>\n )}\n </div>\n {this.isolateButton && (\n <button\n class=\"isolate-btn no-shrink\"\n data-testid={'isolate-btn-' + this.node?.name}\n onPointerUp={this.createActionPointerUpHandler(this.isolate)}\n >\n {isolateIcon && (\n <vertex-viewer-icon class=\"icon\" name=\"locate\" size=\"sm\" />\n )}\n </button>\n )}\n {this.visibilityToggle && (\n <button\n class=\"visibility-btn no-shrink\"\n data-testid={'visibility-btn-' + this.node?.name}\n onPointerUp={this.createActionPointerUpHandler(\n this.toggleVisibility,\n )}\n >\n {visibilityIcon && (\n <vertex-viewer-icon\n class=\"icon\"\n name={visibilityIcon}\n size=\"sm\"\n />\n )}\n </button>\n )}\n <div class=\"no-shrink\">\n <slot name=\"right-gutter\" />\n </div>\n {!this.visibilityToggle && !this.isolateButton && (\n <div class=\"column-spacer\" />\n )}\n </div>\n </Host>\n );\n }\n\n private displayValue = (): string => {\n const resp =\n this.value == null || this.value.trim() === ''\n ? this.placeholder\n : this.value;\n\n return resp;\n };\n\n private handleCellPointerEnter = (): void => {\n this.hoverController?.setHovered(this.node?.id?.hex);\n };\n\n private handleCellPointerLeave = (): void => {\n this.hoverController?.setHovered(undefined);\n };\n\n private handleCellPointerUp = (event: PointerEvent): void => {\n if (\n !this.isScrolling &&\n this.node != null &&\n this.tree != null &&\n this.longPressTimer != null\n ) {\n if (this.selectionHandler != null) {\n this.selectionHandler(event, this.node, this.tree);\n } else {\n this.performDefaultSelectionOperation(event);\n }\n this.selectionToggled.emit({ node: this.node, originalEvent: event });\n }\n this.clearLongPressTimer();\n };\n\n private handleCellPointerDown = (event: PointerEvent): void => {\n this.restartLongPressTimer();\n };\n\n private createActionPointerUpHandler = (\n action: (event: PointerEvent) => void,\n ): ((event: PointerEvent) => void) => {\n return (event) => {\n // Blur the `hostEl` after a `preventDefault` to clear focus that\n // is left on the element after `pointerdown` event.\n event.preventDefault();\n event.stopPropagation();\n blurElement(this.hostEl);\n\n action(event);\n };\n };\n\n private toggleExpansion = async (event: PointerEvent): Promise<void> => {\n if (this.tree != null && this.node != null) {\n if (this.expansionHandler != null) {\n this.expansionHandler(event, this.node, this.tree);\n } else {\n await this.performDefaultExpansionOperation(this.node, this.tree);\n }\n this.expandToggled.emit({ node: this.node, originalEvent: event });\n }\n };\n\n private toggleVisibility = async (event: PointerEvent): Promise<void> => {\n if (this.tree != null && this.node != null) {\n if (this.visibilityHandler != null) {\n this.visibilityHandler(event, this.node, this.tree);\n } else {\n await this.performDefaultVisibilityOperation(this.node, this.tree);\n }\n this.visibilityToggled.emit({ node: this.node, originalEvent: event });\n }\n };\n\n private toggleAttribute(attr: string, value: boolean): void {\n if (value) {\n this.hostEl.setAttribute(attr, '');\n } else {\n this.hostEl.removeAttribute(attr);\n }\n }\n\n private isolate = async (event: PointerEvent): Promise<void> => {\n if (this.tree != null && this.node != null) {\n if (this.isolateHandler != null) {\n this.isolateHandler(event, this.node, this.tree);\n } else {\n await this.performDefaultIsolateOperation(this.node, this.tree);\n }\n this.isolatePressed.emit({ node: this.node, originalEvent: event });\n }\n };\n\n private performDefaultSelectionOperation = (event: PointerEvent): void => {\n if (!event.defaultPrevented && event.button === 0) {\n if ((event.ctrlKey || event.metaKey) && this.node?.selected) {\n this.tree?.deselectItem(this.node);\n } else if (this.node?.selected) {\n this.tree?.selectItem(this.node, {\n recurseParent: true,\n });\n } else if (!this.node?.selected) {\n this.tree?.selectItem(this.node, {\n append: event.ctrlKey || event.metaKey,\n range: event.shiftKey,\n });\n }\n }\n };\n\n private performDefaultVisibilityOperation = async (\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement,\n ): Promise<void> => {\n await tree.toggleItemVisibility(node);\n };\n\n private performDefaultIsolateOperation = async (\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement,\n ): Promise<void> => {\n await tree.isolateItem(node);\n };\n\n private performDefaultExpansionOperation = async (\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement,\n ): Promise<void> => {\n await tree.toggleExpandItem(node);\n };\n\n private clearLongPressTimer(): void {\n if (this.longPressTimer != null) {\n window.clearTimeout(this.longPressTimer);\n }\n this.longPressTimer = undefined;\n }\n\n private restartLongPressTimer(): void {\n this.clearLongPressTimer();\n this.longPressTimer = window.setTimeout(() => {\n this.clearLongPressTimer();\n }, Events.defaultEventConfig.longPressThreshold);\n }\n\n private getBackgroundColorStyle(): string {\n const backgroundColorStyle = this.getCssVariableWithFallbacks(\n `--scene-tree-row-background-color-depth-${this.node?.depth}`,\n '--scene-tree-row-background-color',\n );\n const selectedBackgroundColorStyle = this.getCssVariableWithFallbacks(\n '--scene-tree-selected-row-background-color',\n '--scene-tree-cell-background-selected',\n );\n const hoveredBackgroundColorStyle = this.getCssVariableWithFallbacks(\n '--scene-tree-hovered-row-background-color',\n '--scene-tree-cell-background-hover',\n );\n\n if (!!this.node?.selected) {\n return selectedBackgroundColorStyle;\n } else if (this.hovered) {\n return hoveredBackgroundColorStyle;\n }\n return backgroundColorStyle;\n }\n\n private getCssVariableWithFallbacks(\n variable: string,\n ...fallbacks: string[]\n ): string {\n const sequencedFallbacks = [...fallbacks].reverse();\n\n return [...sequencedFallbacks, variable].reduce(\n (res, s) => `var(${s}, ${res})`,\n 'unset',\n );\n }\n\n private getIsolateIcon(): ViewerIconName | undefined {\n if (this.hovered || this.alwaysShowIcons) {\n return 'locate';\n }\n return undefined;\n }\n\n private getExpansionIcon(): ViewerIconName | undefined {\n if (!this.node?.isLeaf && !this.node?.endItem) {\n return this.node?.expanded ? 'chevron-down' : 'chevron-right';\n }\n return undefined;\n }\n\n private getEndItemIcon(): ViewerIconName | undefined {\n // Return the end item icon for an item if it is set as an end item and either is not a leaf item\n // or matches the filter. Note that in the filtered view, an end item matching the filter will always be\n // marked as a leaf node because its children will be excluded from the search results and therefore\n // not present in the filtered tree.\n if (\n this.endItemIndicator &&\n this.node?.endItem &&\n (!this.node?.isLeaf || this.node?.filterHit)\n ) {\n return 'lock';\n }\n return undefined;\n }\n\n private getVisibilityIcon(): ViewerIconName | undefined {\n if (\n (this.hovered || this.alwaysShowIcons) &&\n !this.node?.partiallyVisible &&\n this.node?.visible\n ) {\n return 'eye-open';\n } else if (!this.node?.partiallyVisible && !this.node?.visible) {\n return 'eye-half';\n } else if (this.node?.partiallyVisible) {\n return 'eye-half-dotted';\n }\n return undefined;\n }\n}\n"],"mappings":";;;2MAAA,MAAMA,EAAwB,IAAM,qoD,MC4BvBC,EAAkBC,EAAA,MAAAD,UAAAE,EAL/B,WAAAC,CAAAC,G,mSA+BSC,KAAAC,YAAc,KAOdD,KAAAE,gBAAkB,MAMlBF,KAAAG,QAAU,MA6PTH,KAAAI,aAAe,KACrB,MAAMC,EACJL,KAAKM,OAAS,MAAQN,KAAKM,MAAMC,SAAW,GACxCP,KAAKC,YACLD,KAAKM,MAEX,OAAOD,CAAI,EAGLL,KAAAQ,uBAAyB,K,WAC/BC,EAAAT,KAAKU,mBAAe,MAAAD,SAAA,SAAAA,EAAEE,YAAWC,GAAAC,EAAAb,KAAKc,QAAI,MAAAD,SAAA,SAAAA,EAAEE,MAAE,MAAAH,SAAA,SAAAA,EAAEI,IAAI,EAG9ChB,KAAAiB,uBAAyB,K,OAC/BR,EAAAT,KAAKU,mBAAe,MAAAD,SAAA,SAAAA,EAAEE,WAAWO,UAAU,EAGrClB,KAAAmB,oBAAuBC,IAC7B,IACGpB,KAAKqB,aACNrB,KAAKc,MAAQ,MACbd,KAAKsB,MAAQ,MACbtB,KAAKuB,gBAAkB,KACvB,CACA,GAAIvB,KAAKwB,kBAAoB,KAAM,CACjCxB,KAAKwB,iBAAiBJ,EAAOpB,KAAKc,KAAMd,KAAKsB,K,KACxC,CACLtB,KAAKyB,iCAAiCL,E,CAExCpB,KAAK0B,iBAAiBC,KAAK,CAAEb,KAAMd,KAAKc,KAAMc,cAAeR,G,CAE/DpB,KAAK6B,qBAAqB,EAGpB7B,KAAA8B,sBAAyBV,IAC/BpB,KAAK+B,uBAAuB,EAGtB/B,KAAAgC,6BACNC,GAEQb,IAGNA,EAAMc,iBACNd,EAAMe,kBACNC,EAAYpC,KAAKqC,QAEjBJ,EAAOb,EAAM,EAITpB,KAAAsC,gBAAkBC,MAAOnB,IAC/B,GAAIpB,KAAKsB,MAAQ,MAAQtB,KAAKc,MAAQ,KAAM,CAC1C,GAAId,KAAKwC,kBAAoB,KAAM,CACjCxC,KAAKwC,iBAAiBpB,EAAOpB,KAAKc,KAAMd,KAAKsB,K,KACxC,OACCtB,KAAKyC,iCAAiCzC,KAAKc,KAAMd,KAAKsB,K,CAE9DtB,KAAK0C,cAAcf,KAAK,CAAEb,KAAMd,KAAKc,KAAMc,cAAeR,G,GAItDpB,KAAA2C,iBAAmBJ,MAAOnB,IAChC,GAAIpB,KAAKsB,MAAQ,MAAQtB,KAAKc,MAAQ,KAAM,CAC1C,GAAId,KAAK4C,mBAAqB,KAAM,CAClC5C,KAAK4C,kBAAkBxB,EAAOpB,KAAKc,KAAMd,KAAKsB,K,KACzC,OACCtB,KAAK6C,kCAAkC7C,KAAKc,KAAMd,KAAKsB,K,CAE/DtB,KAAK8C,kBAAkBnB,KAAK,CAAEb,KAAMd,KAAKc,KAAMc,cAAeR,G,GAY1DpB,KAAA+C,QAAUR,MAAOnB,IACvB,GAAIpB,KAAKsB,MAAQ,MAAQtB,KAAKc,MAAQ,KAAM,CAC1C,GAAId,KAAKgD,gBAAkB,KAAM,CAC/BhD,KAAKgD,eAAe5B,EAAOpB,KAAKc,KAAMd,KAAKsB,K,KACtC,OACCtB,KAAKiD,+BAA+BjD,KAAKc,KAAMd,KAAKsB,K,CAE5DtB,KAAKkD,eAAevB,KAAK,CAAEb,KAAMd,KAAKc,KAAMc,cAAeR,G,GAIvDpB,KAAAyB,iCAAoCL,I,gBAC1C,IAAKA,EAAM+B,kBAAoB/B,EAAMgC,SAAW,EAAG,CACjD,IAAKhC,EAAMiC,SAAWjC,EAAMkC,YAAY7C,EAAAT,KAAKc,QAAI,MAAAL,SAAA,SAAAA,EAAE8C,UAAU,EAC3D1C,EAAAb,KAAKsB,QAAI,MAAAT,SAAA,SAAAA,EAAE2C,aAAaxD,KAAKc,K,MACxB,IAAIF,EAAAZ,KAAKc,QAAI,MAAAF,SAAA,SAAAA,EAAE2C,SAAU,EAC9BE,EAAAzD,KAAKsB,QAAI,MAAAmC,SAAA,SAAAA,EAAEC,WAAW1D,KAAKc,KAAM,CAC/B6C,cAAe,M,MAEZ,MAAKC,EAAA5D,KAAKc,QAAI,MAAA8C,SAAA,SAAAA,EAAEL,UAAU,EAC/BM,EAAA7D,KAAKsB,QAAI,MAAAuC,SAAA,SAAAA,EAAEH,WAAW1D,KAAKc,KAAM,CAC/BgD,OAAQ1C,EAAMiC,SAAWjC,EAAMkC,QAC/BS,MAAO3C,EAAM4C,U,IAMbhE,KAAA6C,kCAAoCN,MAC1CzB,EACAQ,WAEMA,EAAK2C,qBAAqBnD,EAAK,EAG/Bd,KAAAiD,+BAAiCV,MACvCzB,EACAQ,WAEMA,EAAK4C,YAAYpD,EAAK,EAGtBd,KAAAyC,iCAAmCF,MACzCzB,EACAQ,WAEMA,EAAK6C,iBAAiBrD,EAAK,CA8FpC,CAlWQ,gBAAAsD,G,MACLpE,KAAKqE,eAAgB5D,EAAAT,KAAKU,mBAAe,MAAAD,SAAA,SAAAA,EAAE6D,cAAcvD,I,QACvDf,KAAKG,QAAUY,MAAOF,GAAAJ,EAAAT,KAAKc,QAAI,MAAAL,SAAA,SAAAA,EAAEM,MAAE,MAAAF,SAAA,SAAAA,EAAEG,IAAG,IAG1ChB,KAAKuE,WAAW5C,OAChB3B,KAAK6B,qB,CAGA,oBAAA2C,G,OACL/D,EAAAT,KAAKqE,iBAAa,MAAA5D,SAAA,SAAAA,EAAEgE,UACpBzE,KAAK6B,qB,CAGA,mBAAA6C,G,gBACL1E,KAAK2E,gBAAgB,aAAc3E,KAAKG,SACxCH,KAAK2E,gBAAgB,eAAclE,EAAAT,KAAKc,QAAI,MAAAL,SAAA,SAAAA,EAAEmE,UAC9C5E,KAAK2E,gBAAgB,kBAAiB9D,EAAAb,KAAKc,QAAI,MAAAD,SAAA,SAAAA,EAAE0C,WACjDvD,KAAK2E,gBAAgB,iBAAgB/D,EAAAZ,KAAKc,QAAI,MAAAF,SAAA,SAAAA,EAAEiE,mBAChD7E,KAAK2E,gBAAgB,cAAalB,EAAAzD,KAAKc,QAAI,MAAA2C,SAAA,SAAAA,EAAEqB,SAC7C9E,KAAK2E,gBAAgB,kBAAiBf,EAAA5D,KAAKc,QAAI,MAAA8C,SAAA,SAAAA,EAAEmB,UACjD/E,KAAK2E,gBAAgB,oBAAmBd,EAAA7D,KAAKc,QAAI,MAAA+C,SAAA,SAAAA,EAAEmB,W,CAG9C,MAAAC,G,YAEL,MAAMC,EACJlF,KAAKc,MAAQ,KAAO,CAAEqE,WAAY,UAAajE,UACjD,MAAMkE,EAAuBpF,KAAKqF,0BAElC,MAAMC,EAActF,KAAKuF,iBACzB,MAAMC,EAAgBxF,KAAKyF,mBAC3B,MAAMC,EAAc1F,KAAK2F,iBACzB,MAAMC,EAAiB5F,KAAK6F,oBAE5B,MAAMC,EAA4B9F,KAAK+F,eAAiBT,EACxD,MAAMU,EAA0BV,IAAgBQ,EAEhD,OACEG,EAACC,EAAI,CAAAC,IAAA,2CACHC,eAAgBpG,KAAKQ,uBACrB6F,eAAgBrG,KAAKiB,uBACrBqF,YAAatG,KAAKmB,oBAClBoF,cAAevG,KAAK8B,sBACpB0E,MAAO,IACFtB,EACH,mBAAoBE,IAGtBa,EAAA,OAAAE,IAAA,2CAAKM,MAAM,WACTR,EAAA,OAAAE,IAAA,2CAAKM,MAAM,aACTR,EAAA,QAAAE,IAAA,2CAAMO,KAAK,iBAEZZ,GACCG,EAAA,UAAAE,IAAA,2CACEM,MAAM,uBAAsB,cACf,YAAYhG,EAAAT,KAAKc,QAAI,MAAAL,SAAA,SAAAA,EAAEiG,MACpCJ,YAAatG,KAAKgC,6BAChBhC,KAAKsC,kBAGNkD,GACCS,EAAA,sBAAAE,IAAA,2CACEM,MAAM,OACNC,KAAMlB,EACNmB,KAAK,QAMZX,GACCC,EAAA,UAAAE,IAAA,2CACEM,MAAM,yBAAwB,cACjB,cAAc5F,EAAAb,KAAKc,QAAI,MAAAD,SAAA,SAAAA,EAAE6F,OAErCpB,GACCW,EAAA,sBAAAE,IAAA,2CACEM,MAAM,gBACNC,KAAMpB,EACNqB,KAAK,QAMbV,EAAA,OAAAE,IAAA,2CAAKM,MAAM,WACRzG,KAAKM,OAAS,MAAQN,KAAKM,MAAMC,SAAW,GAC3C0F,EAAA,YAAOjG,KAAKI,gBAEZ6F,EAAA,QAAMS,KAAK,eAAe1G,KAAKC,cAGlCD,KAAK4G,eACJX,EAAA,UAAAE,IAAA,2CACEM,MAAM,wBAAuB,cAChB,iBAAiB7F,EAAAZ,KAAKc,QAAI,MAAAF,SAAA,SAAAA,EAAE8F,MACzCJ,YAAatG,KAAKgC,6BAA6BhC,KAAK+C,UAEnD2C,GACCO,EAAA,sBAAAE,IAAA,2CAAoBM,MAAM,OAAOC,KAAK,SAASC,KAAK,QAIzD3G,KAAK6G,kBACJZ,EAAA,UAAAE,IAAA,2CACEM,MAAM,2BAA0B,cACnB,oBAAoBhD,EAAAzD,KAAKc,QAAI,MAAA2C,SAAA,SAAAA,EAAEiD,MAC5CJ,YAAatG,KAAKgC,6BAChBhC,KAAK2C,mBAGNiD,GACCK,EAAA,sBAAAE,IAAA,2CACEM,MAAM,OACNC,KAAMd,EACNe,KAAK,QAKbV,EAAA,OAAAE,IAAA,2CAAKM,MAAM,aACTR,EAAA,QAAAE,IAAA,2CAAMO,KAAK,mBAEX1G,KAAK6G,mBAAqB7G,KAAK4G,eAC/BX,EAAA,OAAAE,IAAA,2CAAKM,MAAM,mB,CAiFb,eAAA9B,CAAgBmC,EAAcxG,GACpC,GAAIA,EAAO,CACTN,KAAKqC,OAAO0E,aAAaD,EAAM,G,KAC1B,CACL9G,KAAKqC,OAAO2E,gBAAgBF,E,EAqDxB,mBAAAjF,GACN,GAAI7B,KAAKuB,gBAAkB,KAAM,CAC/B0F,OAAOC,aAAalH,KAAKuB,e,CAE3BvB,KAAKuB,eAAiBL,S,CAGhB,qBAAAa,GACN/B,KAAK6B,sBACL7B,KAAKuB,eAAiB0F,OAAOE,YAAW,KACtCnH,KAAK6B,qBAAqB,GACzBuF,EAA0BC,mB,CAGvB,uBAAAhC,G,QACN,MAAMD,EAAuBpF,KAAKsH,4BAChC,4CAA2C7G,EAAAT,KAAKc,QAAI,MAAAL,SAAA,SAAAA,EAAE8G,QACtD,qCAEF,MAAMC,EAA+BxH,KAAKsH,4BACxC,6CACA,yCAEF,MAAMG,EAA8BzH,KAAKsH,4BACvC,4CACA,sCAGF,OAAMzG,EAAAb,KAAKc,QAAI,MAAAD,SAAA,SAAAA,EAAE0C,UAAU,CACzB,OAAOiE,C,MACF,GAAIxH,KAAKG,QAAS,CACvB,OAAOsH,C,CAET,OAAOrC,C,CAGD,2BAAAkC,CACNI,KACGC,GAEH,MAAMC,EAAqB,IAAID,GAAWE,UAE1C,MAAO,IAAID,EAAoBF,GAAUI,QACvC,CAACC,EAAKC,IAAM,OAAOA,MAAMD,MACzB,Q,CAII,cAAApC,GACN,GAAI3F,KAAKG,SAAWH,KAAKE,gBAAiB,CACxC,MAAO,Q,CAET,OAAOgB,S,CAGD,gBAAAuE,G,UACN,MAAKhF,EAAAT,KAAKc,QAAI,MAAAL,SAAA,SAAAA,EAAEqE,YAAWjE,EAAAb,KAAKc,QAAI,MAAAD,SAAA,SAAAA,EAAEkE,SAAS,CAC7C,QAAOnE,EAAAZ,KAAKc,QAAI,MAAAF,SAAA,SAAAA,EAAEqH,UAAW,eAAiB,e,CAEhD,OAAO/G,S,CAGD,cAAAqE,G,UAKN,GACEvF,KAAKkI,oBACLzH,EAAAT,KAAKc,QAAI,MAAAL,SAAA,SAAAA,EAAEsE,cACTlE,EAAAb,KAAKc,QAAI,MAAAD,SAAA,SAAAA,EAAEiE,WAAUlE,EAAAZ,KAAKc,QAAI,MAAAF,SAAA,SAAAA,EAAEoE,YAClC,CACA,MAAO,M,CAET,OAAO9D,S,CAGD,iBAAA2E,G,cACN,IACG7F,KAAKG,SAAWH,KAAKE,qBACrBO,EAAAT,KAAKc,QAAI,MAAAL,SAAA,SAAAA,EAAEoE,qBACZhE,EAAAb,KAAKc,QAAI,MAAAD,SAAA,SAAAA,EAAE+D,SACX,CACA,MAAO,U,MACF,MAAKhE,EAAAZ,KAAKc,QAAI,MAAAF,SAAA,SAAAA,EAAEiE,sBAAqBpB,EAAAzD,KAAKc,QAAI,MAAA2C,SAAA,SAAAA,EAAEmB,SAAS,CAC9D,MAAO,U,MACF,IAAIhB,EAAA5D,KAAKc,QAAI,MAAA8C,SAAA,SAAAA,EAAEiB,iBAAkB,CACtC,MAAO,iB,CAET,OAAO3D,S","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["sceneTreeTableColumnCss","SceneTreeTableColumn","__stencil_proxyCustomElement","HTMLElement","render","h","Host","key","class","name"],"sources":["src/components/scene-tree-table-column/scene-tree-table-column.css?tag=vertex-scene-tree-table-column&encapsulation=shadow","src/components/scene-tree-table-column/scene-tree-table-column.tsx"],"sourcesContent":[":host {\n width: 100%;\n height: 100%;\n position: relative;\n}\n\n.hidden {\n visibility: hidden;\n pointer-events: none;\n}\n\n.column {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n
|
|
1
|
+
{"version":3,"names":["sceneTreeTableColumnCss","SceneTreeTableColumn","__stencil_proxyCustomElement","HTMLElement","render","h","Host","key","class","name"],"sources":["src/components/scene-tree-table-column/scene-tree-table-column.css?tag=vertex-scene-tree-table-column&encapsulation=shadow","src/components/scene-tree-table-column/scene-tree-table-column.tsx"],"sourcesContent":[":host {\n width: 100%;\n height: 100%;\n position: relative;\n}\n\n.hidden {\n visibility: hidden;\n pointer-events: none;\n}\n\n.column {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n","import { Component, h, Host, Prop } from '@stencil/core';\n\n@Component({\n tag: 'vertex-scene-tree-table-column',\n styleUrl: 'scene-tree-table-column.css',\n shadow: true,\n})\nexport class SceneTreeTableColumn {\n /**\n * The initial width of this column.\n */\n @Prop()\n public initialWidth?: number;\n\n /**\n * The minimum width of this column.\n */\n @Prop()\n public minWidth?: number;\n\n /**\n * The maximum width of this column.\n */\n @Prop()\n public maxWidth?: number;\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"hidden\">\n <slot name=\"header\" />\n </div>\n <div class=\"column\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":";;;gEAAA,MAAMA,EAA0B,IAAM,kL,MCOzBC,EAAoBC,EAAA,MAAAD,UAAAE,E,iFAmBxB,MAAAC,GACL,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,OAAAE,IAAA,2CAAKC,MAAM,UACTH,EAAA,QAAAE,IAAA,2CAAME,KAAK,YAEbJ,EAAA,OAAAE,IAAA,2CAAKC,MAAM,UACTH,EAAA,QAAAE,IAAA,8C","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{S as o,d as s}from"./p-
|
|
4
|
+
import{S as o,d as s}from"./p-BAuOB8M-.js";const t=o;const p=s;export{t as VertexSceneTreeTableLayout,p as defineCustomElement};
|
|
5
5
|
//# sourceMappingURL=vertex-scene-tree-table-layout.js.map
|