@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,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{r as t,c as e,h as i,H as s,a as n}from"./p-CCVkga9Q.js";import{c as o}from"./p-Dw4-tG-V.js";import{d as r,r as a}from"./p-BxtKMwBH.js";import{p as h}from"./p-CZZALKHT.js";import{_ as l}from"./p-C-NyjLsm.js";import{a as c}from"./p-DX6pEG54.js";import{i as d}from"./p-DeUGB_Ik.js";import{E as u}from"./p-CDM7zNn0.js";import"./p-CG9AChtV.js";const f=()=>`.notification-banner{background-color:var(--blue-200);padding-top:0px;padding-bottom:0px;padding-right:16px;padding-left:8px;display:flex;justify-content:space-between;font-size:0.875rem;line-height:0.5;color:var(--neutral-600)}.notification-banner-info{display:flex;align-items:center;gap:8px}.notification-banner-info .icon{color:var(--blue-600)}.notification-banner-actions{display:flex;align-items:center}.notification-banner-button{background:none;border:none;padding:0;margin:0;cursor:pointer;color:var(--blue-600);font-size:0.875rem;display:flex;align-items:center}.notification-banner-button:hover{color:var(--blue-800)}`;const v=class{constructor(i){t(this,i);this.action=e(this,"action")}render(){return i(s,{key:"097d901352c02a0f1580ca1e8069a09e2d8a0f99"},i("div",{key:"a2f0c563cc060dbd1067129820cc3a3d548edf7a",class:"notification-banner"},i("div",{key:"d4eaf47fd6b494a6ed400fc68e56daf41322ff3a",class:"notification-banner-info"},i("vertex-viewer-icon",{key:"b05fc97116087cde16673019f4845d6f93481b81",class:"icon",name:"info",size:"sm"}),i("p",{key:"48fbfa73c639e8f762b105a0c8e7cf530ff95456"},this.message)),this.actionLabel!=null&&i("div",{key:"6f2c8a07c730e3d1eab820beba978d7b7232fe3a",class:"notification-banner-actions"},i("button",{key:"23aeb9e7071847cd62a19d7a61df6b30ee48d834",class:"notification-banner-button",onClick:()=>this.action.emit()},this.actionLabel))))}};v.style=f();const p=()=>`button{border:none;background:transparent;cursor:pointer;margin:0;padding:0}:host{--scene-tree-search-search-icon-offset:8px;--scene-tree-search-clear-button-offset:8px;--scene-tree-search-input-padding:0.5rem 32px;--scene-tree-search-input-border:none;--scene-tree-search-input-border-radius:0.25rem;--scene-tree-search-input-background:none;--scene-tree-search-focused-input-background:var(--neutral-200);--scene-tree-search-focused-input-outline:none;display:block;width:100%;font-size:0.875rem}.root{width:100%;position:relative}.input{background:var(--scene-tree-search-input-background);border:var(--scene-tree-search-input-border);border-radius:var(--scene-tree-search-input-border-radius);box-sizing:border-box;font-size:inherit;padding:var(--scene-tree-search-input-padding);outline:none;width:100%}.input.background{background:var(--scene-tree-search-focused-input-background);outline:var(--scene-tree-search-focused-input-outline)}.overlay{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;pointer-events:none}.overlay-clear{display:none;right:var(--scene-tree-search-clear-button-offset)}.overlay-clear.show{display:flex}.icon{color:var(--neutral-700)}.icon-search{position:absolute;left:var(--scene-tree-search-search-icon-offset);pointer-events:none}.clear-btn{display:flex;align-items:center;justify-content:center;pointer-events:initial;cursor:pointer}.clear-btn:hover{color:var(--neutral-800)}.clear-btn:disabled{pointer-events:none;opacity:0.5}`;const b=class{constructor(i){t(this,i);this.search=e(this,"search");this.searchCompleted=e(this,"searchCompleted");this.disabled=false;this.placeholder=undefined;this.value="";this.focused=false;this.isSearching=false;this.handleTextInput=t=>{const e=t.target;this.value=e.value;if(this.debounce!=null||this.value===""){this.emitCurrentValue()}};this.handleTextFocus=()=>{this.focused=true};this.handleTextBlur=()=>{var t;this.focused=false;(t=this.searchDisposable)===null||t===void 0?void 0:t.dispose();if(this.value!==this.lastEmittedValue){this.emitCurrentValue()}};this.handleKeyPress=t=>{var e;if(t.key==="Enter"){(e=this.searchDisposable)===null||e===void 0?void 0:e.dispose();this.emitCurrentValue()}};this.handleClear=t=>{var e;t.preventDefault();this.value="";(e=this.searchDisposable)===null||e===void 0?void 0:e.dispose();this.emitCurrentValue();this.setFocus()}}async setFocus(){var t,e;if(typeof((t=this.inputEl)===null||t===void 0?void 0:t.focus)==="function"){(e=this.inputEl)===null||e===void 0?void 0:e.focus()}}controllerChanged(t){this.setupController()}componentDidLoad(){this.handleDebounceChanged();this.setupController()}disconnectedCallback(){var t;(t=this.onStateChangeDisposable)===null||t===void 0?void 0:t.dispose()}async clear(){var t;this.value="";(t=this.searchDisposable)===null||t===void 0?void 0:t.dispose();this.emitCurrentValue()}render(){return i(s,{key:"763e2f4c7ab3d80a197b94c123f61b25eba41b24"},i("div",{key:"14b5f4af01483f0d31ee77f03fc36fd1ff46e525",class:"root"},i("div",{key:"a1ebe30b97a16c83c9443402998e0f3f761d687d",class:"overlay icon icon-search"},i("slot",{key:"41073c4ecd626c3b4a38b0e62d95c6317cd2e98a",name:"search-icon"},this.isSearching?i("vertex-viewer-spinner",{slot:"search-icon",size:"xs"}):i("vertex-viewer-icon",{name:"search",size:"sm"}))),i("input",{key:"173d13b8d597425fdff082eb872225279e99bd34",class:o("input",{background:this.focused||this.value.length>0}),type:"text",ref:t=>this.inputEl=t,placeholder:this.placeholder,disabled:this.disabled,value:this.value,onInput:this.handleTextInput,onFocus:this.handleTextFocus,onBlur:this.handleTextBlur,onKeyPress:this.handleKeyPress}),i("div",{key:"f5b0de0431a9c8b051f61fcd76ce9eb430c0a0c9",class:o("overlay overlay-clear",{show:this.value.length>0})},i("button",{key:"92a36b952320fe724ba2f962a5a758a2e514fd18",class:"clear-btn icon",tabIndex:-1,onMouseDown:this.handleClear,disabled:this.disabled},i("slot",{key:"97dcec892120a855dd6a4d633f4a2cd84e57e670",name:"clear-icon"},i("vertex-viewer-icon",{key:"7df2c0ef411a569ccc0cd50cfbc43c6d8533d073",name:"close-circle",size:"sm"}))))))}handleDebounceChanged(){var t,e;(t=this.searchDisposable)===null||t===void 0?void 0:t.dispose();const i=r(this.search,(e=this.debounce)!==null&&e!==void 0?e:0);this.search=i;this.searchDisposable=i}setupController(){var t,e;(t=this.onStateChangeDisposable)===null||t===void 0?void 0:t.dispose();this.onStateChangeDisposable=(e=this.controller)===null||e===void 0?void 0:e.onStateChange.on((t=>{if(this.isSearching&&!t.isSearching){this.searchCompleted.emit(this.value)}this.isSearching=t.isSearching}))}emitCurrentValue(){this.lastEmittedValue=this.value;this.search.emit(this.value)}static get watchers(){return{controller:[{controllerChanged:0}]}}};b.style=p();function m(t){return t.toLowerCase()}var y=[/([a-z0-9])([A-Z])/g,/([A-Z])([A-Z][a-z])/g];var w=/[^A-Z0-9]+/gi;function g(t,e){if(e===void 0){e={}}var i=e.splitRegexp,s=i===void 0?y:i,n=e.stripRegexp,o=n===void 0?w:n,r=e.transform,a=r===void 0?m:r,h=e.delimiter,l=h===void 0?" ":h;var c=x(x(t,s,"$1\0$2"),o,"\0");var d=0;var u=c.length;while(c.charAt(d)==="\0")d++;while(c.charAt(u-1)==="\0")u--;return c.slice(d,u).split("\0").map(a).join(l)}function x(t,e,i){if(e instanceof RegExp)return t.replace(e,i);return e.reduce((function(t,e){return t.replace(e,i)}),t)}function k(t,e){var i=t.charAt(0);var s=t.substr(1).toLowerCase();if(e>0&&i>="0"&&i<="9"){return"_"+i+s}return""+i.toUpperCase()+s}function C(t,e){if(e===void 0){e={}}return g(t,l({delimiter:"",transform:k},e))}function z(t,e){if(e===0)return t.toLowerCase();return k(t,e)}function D(t,e){if(e===void 0){e={}}return C(t,l({transform:z},e))}const $=/{{(.+)}}/;class R{constructor(t){this.bindings=t}bind(t){this.bindings.forEach((e=>e.bind(t)))}}class _{constructor(t,e){this.node=t;this.expr=e}}class L extends _{constructor(t,e){super(t,e)}bind(t){const e=P(t,this.expr);if(e!==this.node.textContent){this.node.textContent=e}}}class M extends _{constructor(t,e,i){super(t,e);this.attr=i}bind(t){const e=P(t,this.expr);const i=this.node.getAttribute(this.attr);if(i!==e){this.node.setAttribute(this.attr,e)}}}class j extends _{constructor(t,e,i){super(t,e);this.prop=i}bind(t){const e=A(t,this.expr);const i=this.node[this.prop];if(i!==e){this.node[this.prop]=e}}}class E extends _{constructor(t,e,i){super(t,e);this.eventName=i}bind(t){var e;const i=V(this.expr);if(i!=null){(e=this.disposable)===null||e===void 0?void 0:e.dispose();const s=I(t,i,true);this.node.addEventListener(this.eventName,s);this.disposable={dispose:()=>{this.node.removeEventListener(this.eventName,s)}}}}}function H(t){const e=[];if(t.nodeType===Node.ELEMENT_NODE){const i=t;const s=T(i);s.forEach((t=>{if(t.name.startsWith("event:")){const s=D(t.name.replace("event:",""));e.push(new E(i,t.value,s))}else if(t.name.startsWith("attr:")){e.push(new M(i,t.value,t.name.replace("attr:","")))}else if(t.name.startsWith("prop:")){const s=D(t.name.replace("prop:",""));e.push(new j(i,t.value,s))}}))}else if(t.nodeType===Node.TEXT_NODE&&t.textContent!=null&&$.test(t.textContent)){e.push(new L(t,t.textContent))}for(let i=0;i<t.childNodes.length;i++){e.push(...H(t.childNodes[i]))}return e}function T(t){return Array.from(t.attributes).filter((t=>$.test(t.value)))}function V(t){const e=$.exec(t);return e!=null?e[1]:undefined}function P(t,e){const i=V(e);if(i!=null){const s=I(t,i,true);return e.replace(`{{${i}}}`,s===null||s===void 0?void 0:s.toString())}else{return e}}function A(t,e){const i=V(e);if(i!=null){const e=I(t,i,true);return e}else{return e}}function I(t,e,i=false){const[s,...n]=e.split(".");if(i&&n.length===0){return t}else if(i&&n.length>0){return I(t,n.join("."),false)}else{const e=t[s];if(n.length>0){return I(e,n.join("."),false)}else{return e}}}class W{constructor(t,e){this.container=t;this.elementFactory=e;this.instanceMap=new Map;this.elements=[]}swapHeadToTail(t){const e=this.elements.splice(0,t);this.elements.splice(this.elements.length,0,...e);return this.elements.concat()}swapTailToHead(t){const e=this.elements.splice(-t,t);this.elements.splice(0,0,...e);return this.elements.concat()}updateElements(t){const e=t-this.elements.length;if(e>0){for(let t=0;t<e;t++){this.createElement()}}else{for(let t=0;t<-e;t++){this.deleteElement()}}return this.elements.concat()}updateData(t){this.elements.forEach(((e,i)=>{const s=this.instanceMap.get(e);const n=t(i);s===null||s===void 0?void 0:s.bindings.bind(n)}))}updateElementFactory(t){this.elementFactory=t;this.updateElements(0)}iterateElements(t){this.elements.forEach(((e,i)=>{const s=this.instanceMap.get(e);t(e,s.bindings,i)}))}createElement(){const t=this.elementFactory();this.elements.push(t.element);this.instanceMap.set(t.element,t);this.container.append(t.element);return t}deleteElement(){const t=this.elements.pop();if(t!=null){this.instanceMap.delete(t);t.remove()}}}function N(t){const e=t.content.cloneNode(true);const i=e.firstElementChild;const s=new R(H(e));return{element:i,bindings:s}}function Z(t){var e;return(e=t.getBoundingClientRect().top)!==null&&e!==void 0?e:0}function G(t){return t.clientWidth}function B(t,e,i){t.scrollTo({top:e,...i})}class F{constructor(){this.onStateChange=new u}setHovered(t){this.onStateChange.emit(t)}stateChanged(t){return this.onStateChange.on(t)}}function K(t,e,i=200){window.clearTimeout(e);return window.setTimeout(t,i)}const U=()=>`:host{position:relative;display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden;font-size:0.825rem;--scene-tree-table-row-padding:2px 0px;--scene-tree-table-column-gap:0.5rem;--scene-tree-table-column-resize-cursor:col-resize}.header{position:relative;display:grid;width:100%;border-bottom:var(--scene-tree-toolbar-separator)}.table{position:relative;display:grid;width:100%;height:100%;overflow:auto}.resize-overlay{position:absolute;top:0;cursor:var(--scene-tree-table-column-resize-cursor);z-index:1000;width:100%;height:100%}.divider-overlay{position:absolute;top:0;display:grid;pointer-events:none;z-index:2000;width:100%;height:100%}`;const O=class{constructor(i){t(this,i);this.layoutRendered=e(this,"layoutRendered");this.columnsResized=e(this,"columnsResized");this.rows=[];this.totalRows=0;this.rowHeight=24;this.overScanCount=25;this.layoutOffset=0;this.scrollOffset=0;this.viewportStartIndex=0;this.viewportEndIndex=0;this.columnGridLayout="1fr";this.columnGridFixedLayout="";this.isComputingCellHeight=true;this.isScrolling=false;this.stateMap={viewportRows:[],columnWidths:[],columnWidthPercentages:[]};this.lastStartIndex=0;this.columnElements=[];this.cellHoverController=new F;this.layoutColumns=()=>{const t=this.viewportEndIndex-this.viewportStartIndex+1;const e=this.viewportStartIndex-this.lastStartIndex;this.lastStartIndex=this.viewportStartIndex;this.iterateColumns(((i,s,n)=>{s.updateElements(t);if(e>0){s.swapHeadToTail(e)}else{s.swapTailToHead(-e)}i.style.minHeight=`${this.rowHeight*this.totalRows}px`;const o=n===0?t=>`calc(${t} * 0.5rem)`:()=>`0`;s.iterateElements(((t,e,i)=>{const s=this.stateMap.viewportRows[i];if(d(s)){this.updateCell(s,t,e,i,o)}}))}))};this.updateCell=(t,e,i,s,n)=>{e.style.position="absolute";e.style.top=`${(this.viewportStartIndex+s)*this.rowHeight}px`;e.style.boxSizing="border-box";e.style.height=`${this.rowHeight}px`;e.style.width="100%";e.style.paddingLeft=n(t.node.depth);e.tree=this.tree;e.node=t.node;e.hoverController=this.cellHoverController;e.isScrolling=this.isScrolling;i.bind(t)};this.updateLayoutPosition=()=>{a((()=>{if(this.tableElement!=null){this.layoutOffset=Z(this.tableElement)}}))};this.recomputeColumnWidths=()=>{const t=this.getLayoutWidth();if(t!=null&&this.stateMap.columnWidths.length===this.stateMap.columnWidthPercentages.length){this.stateMap.columnWidths=this.stateMap.columnWidthPercentages.map((e=>e*t));this.columnsResized.emit(this.stateMap.columnWidths)}};this.recomputeColumnPercentages=()=>{const t=this.getLayoutWidth();if(t!=null&&this.stateMap.columnWidths.length===this.stateMap.columnWidthPercentages.length){this.stateMap.columnWidthPercentages=this.stateMap.columnWidths.map((e=>e/t))}};this.computeInitialColumnWidths=()=>{this.stateMap.columnWidths=this.columnElements.map((t=>{var e;return(e=t.initialWidth)!==null&&e!==void 0?e:100}));const t=this.getLayoutWidth();if(t!=null){const e=this.stateMap.columnWidths.reduce(((t,e)=>t+e),0);const i=this.stateMap.columnWidths.map((i=>i*(t/e)));this.stateMap.columnWidthPercentages=i.map((e=>e/t));this.stateMap.columnWidths=i}};this.updateColumnElements=()=>{this.columnElements=Array.from(this.hostEl.querySelectorAll("vertex-scene-tree-table-column"))};this.computeCellHeight=async()=>{var t;if(this.isComputingCellHeight&&this.columnElements.length>0){const e={index:0,node:{id:{hex:""},name:"Dummy row",expanded:false,selected:false,visible:false,partiallyVisible:false,isLeaf:false,depth:0,columnsList:[],filterHit:false,hasGeometry:false,phantom:false,endItem:false},metadata:{},data:{}};const{bindings:i,element:s}=this.createColumnCellInstance(this.columnElements[0]);i.bind(e);s.style.visibility="hidden";(t=this.columnElements[0])===null||t===void 0?void 0:t.appendChild(s);if(typeof s.componentOnReady==="function"){await s.componentOnReady()}let n=s.clientHeight;if(n===0){n=await new Promise((t=>{setTimeout((()=>t(s.getBoundingClientRect().height)),5)}))}this.rowHeight=n!==null&&n!==void 0?n:this.rowHeight;s.remove();this.isComputingCellHeight=this.rowHeight===0}};this.computeHeaderHeight=()=>{var t;if(this.stateMap.headerHeight==null){this.stateMap.headerHeight=(t=this.headerElement)===null||t===void 0?void 0:t.getBoundingClientRect().height;this.hostEl.style.setProperty("--header-height",`${this.stateMap.headerHeight}px`)}};this.computeColumnGridLayout=()=>{if(this.stateMap.columnWidths.length===0){this.stateMap.columnWidths=this.columnElements.map((t=>{var e;return(e=t.initialWidth)!==null&&e!==void 0?e:100}))}const t=this.getLayoutWidth();if(t!=null){if(this.stateMap.columnWidthPercentages.length===0){this.stateMap.columnWidthPercentages=this.columnElements.map((e=>{var i;return((i=e.initialWidth)!==null&&i!==void 0?i:100)/t}))}}this.columnGridLayout=`${this.stateMap.columnWidths.slice(0,-1).reduce(((t,e)=>`${t} ${e}px`),"")} 1fr`;this.columnGridFixedLayout=`${this.stateMap.columnWidths.reduce(((t,e)=>`${t} ${e}px`),"")}`};this.bindHeaderData=()=>{if(this.stateMap.headerInstances==null){this.stateMap.headerInstances=this.columnElements.map(((t,e)=>{var i;const s=this.createHeaderInstance(t);if(s!=null){s.element.style.paddingRight=e===this.columnElements.length-1?`0`:`var(--scene-tree-table-column-gap)`;s.element.slot="header";s.element.style.gridColumnStart=`${e+1}`;s.element.style.gridColumnEnd=`${e+2}`;(i=this.hostEl)===null||i===void 0?void 0:i.appendChild(s.element)}return s})).filter((t=>t!=null))}if(this.stateMap.headerDividerInstances==null){this.stateMap.headerDividerInstances=this.columnElements.slice(0,-1).map(((t,e)=>{var i;const s=this.createDividerInstance();s.element.slot="divider";s.element.style.position="absolute";s.element.style.right="0";s.element.style.pointerEvents="auto";s.element.style.gridColumnStart=`${e+1}`;s.element.style.gridColumnEnd=`${e+2}`;(i=this.hostEl)===null||i===void 0?void 0:i.appendChild(s.element);return s}))}};this.rebindHeaderData=()=>{var t,e;this.removeDividerDragListeners();(t=this.stateMap.headerInstances)===null||t===void 0?void 0:t.forEach((t=>t.element.remove()));(e=this.stateMap.headerDividerInstances)===null||e===void 0?void 0:e.forEach((t=>t.element.remove()));this.stateMap.headerInstances=undefined;this.stateMap.headerDividerInstances=undefined;this.bindHeaderData();this.addDividerDragListeners()};this.createDividerPointerDownHandler=t=>e=>{var i,s;e.preventDefault();e.stopPropagation();this.lastDividerPointerPosition=h.create(Math.floor(e.clientX),Math.floor(e.clientY));this.resizingColumnIndex=t;(s=(i=this.stateMap.headerDividerInstances)===null||i===void 0?void 0:i[t])===null||s===void 0?void 0:s.element.classList.add("dragging");window.addEventListener("pointermove",this.handleDividerPointerMove);window.addEventListener("pointerup",this.handleDividerPointerUp)};this.handleDividerPointerMove=t=>{const e=h.create(Math.floor(t.clientX),Math.floor(t.clientY));if(this.lastDividerPointerPosition!=null&&this.resizingColumnIndex!=null){const t=this.resizingColumnIndex;const i=h.subtract(this.lastDividerPointerPosition,e);if(Math.abs(i.x)>=1&&this.isValidResize(i,t)){this.stateMap.columnWidths=this.stateMap.columnWidths.map(((e,s)=>s===t?e-i.x:e));if(t+1<this.stateMap.columnWidths.length){this.stateMap.columnWidths=this.stateMap.columnWidths.map(((e,s)=>s===t+1?e+i.x:e))}this.lastDividerPointerPosition=e;this.computeColumnGridLayout()}}};this.handleDividerPointerUp=()=>{var t,e;if(this.resizingColumnIndex!=null){(e=(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t[this.resizingColumnIndex])===null||e===void 0?void 0:e.element.classList.remove("dragging")}this.lastDividerPointerPosition=undefined;this.resizingColumnIndex=undefined;this.recomputeColumnPercentages();this.recomputeColumnWidths();window.removeEventListener("pointermove",this.handleDividerPointerMove);window.removeEventListener("pointerup",this.handleDividerPointerUp)};this.isValidResize=(t,e)=>{var i,s,n,o;const r=this.columnElements[e];const a=this.columnElements[e+1];const h=this.stateMap.columnWidths[e];const l=this.stateMap.columnWidths[e+1];const c=(i=r.minWidth)!==null&&i!==void 0?i:0;const d=(s=r.maxWidth)!==null&&s!==void 0?s:Number.MAX_SAFE_INTEGER;const u=(n=a.minWidth)!==null&&n!==void 0?n:0;const f=(o=a.maxWidth)!==null&&o!==void 0?o:Number.MAX_SAFE_INTEGER;const v=h-t.x>c&&h-t.x<d;const p=a!=null?l+t.x>u&&l+t.x<f:true;return v&&p};this.handleScrollChanged=async t=>{this.isScrolling=true;this.scrollTimer=K((()=>{this.isScrolling=false}),this.scrollTimer);this.scrollOffset=t.target.scrollTop;await this.computeAndUpdateViewportRows()}}componentWillLoad(){this.updateColumnElements();this.createPools();this.initializeColumnLayout();this.headerResizeObserver=new ResizeObserver((()=>{this.stateMap.headerHeight=undefined;this.computeHeaderHeight();this.updateLayoutPosition()}));this.resizeObserver=new ResizeObserver((()=>{this.updateLayoutPosition();this.clearLayoutHeight();this.clearLayoutWidth();this.recomputeColumnWidths();this.computeColumnGridLayout()}))}async componentDidLoad(){var t,e,i;(t=this.tableElement)===null||t===void 0?void 0:t.addEventListener("scroll",this.handleScrollChanged,{passive:true});if(this.headerElement!=null){(e=this.headerResizeObserver)===null||e===void 0?void 0:e.observe(this.headerElement)}(i=this.resizeObserver)===null||i===void 0?void 0:i.observe(this.hostEl);await Promise.resolve();await this.initializeMeasuredLayout()}async componentWillRender(){await this.computeAndUpdateViewportRows()}componentDidRender(){this.layoutColumns();this.layoutRendered.emit()}async componentDidUpdate(){if(this.isComputingCellHeight){await this.computeCellHeight()}}disconnectedCallback(){var t,e,i;(t=this.tableElement)===null||t===void 0?void 0:t.removeEventListener("scroll",this.handleScrollChanged);this.removeDividerDragListeners();(e=this.headerResizeObserver)===null||e===void 0?void 0:e.disconnect();(i=this.resizeObserver)===null||i===void 0?void 0:i.disconnect();this.stateMap.columnWidths=[];this.stateMap.columnWidthPercentages=[]}async handleViewportRowsPropsChanged(){await this.computeAndUpdateViewportRows()}async scrollToPosition(t,e){if(this.tableElement!=null){B(this.tableElement,t,e)}}async attemptComputeCellHeight(){this.computeCellHeight()}render(){return i(s,{key:"fb503e5ce411669efe4549f3d8063fe630993341"},i("div",{key:"1b7acde237a9a7cf8d14f950cc664b82dd253486",class:"header",ref:t=>this.headerElement=t,style:{gridTemplateColumns:this.columnGridFixedLayout,display:this.columnElements.length<=1?"none":"grid"}},i("slot",{key:"ec62af4cb951011ed571418051d52b6cdf2dd152",name:"header"})),i("div",{key:"d3183a765e381d9899a00d4a70302a28bc7deddd",class:"table",ref:t=>this.tableElement=t,style:{gridTemplateColumns:this.columnGridLayout}},i("slot",{key:"5dcfa30b5f230987cd33d35e9011718c60786ad4",onSlotchange:()=>{this.ensureDividerTemplateDefined();this.updateColumnElements();this.recreateColumnPools();this.computeInitialColumnWidths();this.rebindHeaderData();this.computeColumnGridLayout()}})),i("div",{key:"df5e5e83a5d833c22e0234d36ae6b6be224b8504",class:"divider-overlay",style:{gridTemplateColumns:this.columnGridFixedLayout}},i("slot",{key:"98ea7728b5faf0dcf48464aebcb99aae0369b8cc",name:"divider"})),this.resizingColumnIndex!=null&&i("div",{key:"e146248e00f7e8c63de50efdc72bc93a02be4227",class:"resize-overlay"}))}computeViewportRows(){const t=this.getLayoutHeight();const e=t!=null&&t>0&&!this.isComputingCellHeight;if(e){const e=Math.ceil(t/this.rowHeight);const i=Math.floor(this.scrollOffset/this.rowHeight);const s=i+e;const n=Math.max(0,i-this.overScanCount);const o=Math.min(this.totalRows-1,s+this.overScanCount);const r=this.getViewportRows(n,o);this.viewportStartIndex=n;this.viewportEndIndex=o;this.stateMap.viewportRows=r}}initializeColumnLayout(){this.computeInitialColumnWidths();this.computeColumnGridLayout();this.ensureDividerTemplateDefined();this.rebindHeaderData()}async initializeMeasuredLayout(){await this.computeCellHeight();this.computeHeaderHeight()}async computeAndUpdateViewportRows(){var t;this.computeViewportRows();if(((t=this.controller)===null||t===void 0?void 0:t.isConnected)&&this.totalRows>0){await this.controller.updateActiveRowRange(this.viewportStartIndex,this.viewportEndIndex)}}createPools(){if(this.stateMap.columnElementPools==null){this.stateMap.columnElementPools=this.columnElements.reduce(((t,e)=>t.set(e,new W(e,(()=>this.createColumnCellInstance(e))))),new WeakMap)}}recreateColumnPools(){this.columnElements.forEach((t=>{var e,i,s;if(((e=this.stateMap.columnElementPools)===null||e===void 0?void 0:e.get(t))==null){(i=this.stateMap.columnElementPools)===null||i===void 0?void 0:i.set(t,new W(t,(()=>this.createColumnCellInstance(t))))}else{(s=this.stateMap.columnElementPools.get(t))===null||s===void 0?void 0:s.updateElementFactory((()=>this.createColumnCellInstance(t)))}}))}iterateColumns(t){this.columnElements.forEach(((e,i)=>{var s;const n=(s=this.stateMap.columnElementPools)===null||s===void 0?void 0:s.get(e);if(n!=null){t(e,n,i)}else{throw new Error("Cannot find pool for column")}}))}ensureDividerTemplateDefined(){const t=this.hostEl.querySelector('template[slot="divider"]');if(t==null){const t=document.createElement("template");t.slot="divider";t.innerHTML=`\n <vertex-scene-tree-table-resize-divider slot="divider">\n </vertex-scene-tree-table-resize-divider>\n `;this.hostEl.appendChild(t)}}createHeaderInstance(t){const e=t.querySelector('template[slot="header"]');if(e!=null){return N(e)}}createDividerInstance(){const t=this.hostEl.querySelector('template[slot="divider"]');if(t!=null){return N(t)}else{throw new Error("Table is missing divider template element")}}createColumnCellInstance(t){const e=t.querySelector('template:not([slot="header"])');if(e!=null){return N(e)}else{throw new Error("Column is missing cell template element")}}addDividerDragListeners(){var t;this.stateMap.headerDividerListeners=(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t.map(((t,e)=>{const i=this.createDividerPointerDownHandler(e);t.element.addEventListener("pointerdown",i);return i}))}removeDividerDragListeners(){var t;if(this.stateMap.headerDividerListeners!=null){const e=this.stateMap.headerDividerListeners;(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t.forEach(((t,i)=>{const s=e[i];if(s!=null){t.element.removeEventListener("pointerdown",s)}}));this.stateMap.headerDividerListeners=undefined}}getViewportRows(t,e){const i=this.rows.slice(t,e+1);return i.map((t=>t!=null?this.populateRowData(t):t))}populateRowData(t){var e;if(this.rowData!=null&&t!=null){const i=((e=this.rowData)===null||e===void 0?void 0:e.call(this,t))||{};return{...t,data:i}}else{return t}}getLayoutHeight(){if(this.layoutHeight==null&&this.tableElement!=null){this.layoutHeight=c(this.tableElement)}return this.layoutHeight}getLayoutWidth(){if(this.layoutWidth==null){const t=G(this.hostEl);if(t>0){this.layoutWidth=t}}return this.layoutWidth}clearLayoutHeight(){this.layoutHeight=undefined}clearLayoutWidth(){this.layoutWidth=undefined}get hostEl(){return n(this)}static get watchers(){return{rows:[{handleViewportRowsPropsChanged:0}],totalRows:[{handleViewportRowsPropsChanged:0}],rowHeight:[{handleViewportRowsPropsChanged:0}]}}};O.style=U();const Q=()=>`:host{--scene-tree-toolbar-content-gap:8px;display:flex;padding:0.5rem}.content{display:flex;align-items:center}.content-primary{width:100%}::slotted(:not(:first-child)){margin-left:var(--scene-tree-toolbar-content-gap)}`;const S=class{constructor(e){t(this,e)}render(){return i(s,{key:"7a3286d46171832c1fae126645568899b1004fa1"},i("div",{key:"ac81e6da67a1c41dbb30a23ec9658ddbac0cd9ea",class:"content"},i("slot",{key:"1993b705fbeeca9f7fee213662981403d89ea4c2",name:"before"})),i("div",{key:"ee8b5cf8eccb88a4b0b029c6f3a33c9c5f20ef09",class:"content content-primary"},i("slot",{key:"2cb220546b02b8dd353aa0270bbfa7f51dc0ca95"})),i("div",{key:"cd0c977e5f42f1dbacaad42306b1705a97b50ab9",class:"content"},i("slot",{key:"0f3af32f24077fa6d0bda7cc1fce3b9921b49f70",name:"after"})))}};S.style=Q();export{v as vertex_scene_tree_notification_banner,b as vertex_scene_tree_search,O as vertex_scene_tree_table_layout,S as vertex_scene_tree_toolbar};
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{r as t,c as e,h as i,H as s,a as n}from"./p-CCVkga9Q.js";import{c as o}from"./p-Dw4-tG-V.js";import{d as r,r as a}from"./p-BxtKMwBH.js";import{p as h}from"./p-2UsvOTHJ.js";import{_ as l}from"./p-C-NyjLsm.js";import{a as c}from"./p-DX6pEG54.js";import{i as d}from"./p-DeUGB_Ik.js";import{E as u}from"./p-CDM7zNn0.js";import"./p-CG9AChtV.js";const f=()=>`.notification-banner{background-color:var(--blue-200);padding-top:0px;padding-bottom:0px;padding-right:16px;padding-left:8px;display:flex;justify-content:space-between;font-size:0.875rem;line-height:0.5;color:var(--neutral-600)}.notification-banner-info{display:flex;align-items:center;gap:8px}.notification-banner-info .icon{color:var(--blue-600)}.notification-banner-actions{display:flex;align-items:center}.notification-banner-button{background:none;border:none;padding:0;margin:0;cursor:pointer;color:var(--blue-600);font-size:0.875rem;display:flex;align-items:center}.notification-banner-button:hover{color:var(--blue-800)}`;const v=class{constructor(i){t(this,i);this.action=e(this,"action")}render(){return i(s,{key:"097d901352c02a0f1580ca1e8069a09e2d8a0f99"},i("div",{key:"a2f0c563cc060dbd1067129820cc3a3d548edf7a",class:"notification-banner"},i("div",{key:"d4eaf47fd6b494a6ed400fc68e56daf41322ff3a",class:"notification-banner-info"},i("vertex-viewer-icon",{key:"b05fc97116087cde16673019f4845d6f93481b81",class:"icon",name:"info",size:"sm"}),i("p",{key:"48fbfa73c639e8f762b105a0c8e7cf530ff95456"},this.message)),this.actionLabel!=null&&i("div",{key:"6f2c8a07c730e3d1eab820beba978d7b7232fe3a",class:"notification-banner-actions"},i("button",{key:"23aeb9e7071847cd62a19d7a61df6b30ee48d834",class:"notification-banner-button",onClick:()=>this.action.emit()},this.actionLabel))))}};v.style=f();const p=()=>`button{border:none;background:transparent;cursor:pointer;margin:0;padding:0}:host{--scene-tree-search-search-icon-offset:8px;--scene-tree-search-clear-button-offset:8px;--scene-tree-search-input-padding:0.5rem 32px;--scene-tree-search-input-border:none;--scene-tree-search-input-border-radius:0.25rem;--scene-tree-search-input-background:none;--scene-tree-search-focused-input-background:var(--neutral-200);--scene-tree-search-focused-input-outline:none;display:block;width:100%;font-size:0.875rem}.root{width:100%;position:relative}.input{background:var(--scene-tree-search-input-background);border:var(--scene-tree-search-input-border);border-radius:var(--scene-tree-search-input-border-radius);box-sizing:border-box;font-size:inherit;padding:var(--scene-tree-search-input-padding);outline:none;width:100%}.input.background{background:var(--scene-tree-search-focused-input-background);outline:var(--scene-tree-search-focused-input-outline)}.overlay{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;pointer-events:none}.overlay-clear{display:none;right:var(--scene-tree-search-clear-button-offset)}.overlay-clear.show{display:flex}.icon{color:var(--neutral-700)}.icon-search{position:absolute;left:var(--scene-tree-search-search-icon-offset);pointer-events:none}.clear-btn{display:flex;align-items:center;justify-content:center;pointer-events:initial;cursor:pointer}.clear-btn:hover{color:var(--neutral-800)}.clear-btn:disabled{pointer-events:none;opacity:0.5}`;const b=class{constructor(i){t(this,i);this.search=e(this,"search");this.searchCompleted=e(this,"searchCompleted");this.disabled=false;this.placeholder=undefined;this.value="";this.focused=false;this.isSearching=false;this.handleTextInput=t=>{const e=t.target;this.value=e.value;if(this.debounce!=null||this.value===""){this.emitCurrentValue()}};this.handleTextFocus=()=>{this.focused=true};this.handleTextBlur=()=>{var t;this.focused=false;(t=this.searchDisposable)===null||t===void 0?void 0:t.dispose();if(this.value!==this.lastEmittedValue){this.emitCurrentValue()}};this.handleKeyPress=t=>{var e;if(t.key==="Enter"){(e=this.searchDisposable)===null||e===void 0?void 0:e.dispose();this.emitCurrentValue()}};this.handleClear=t=>{var e;t.preventDefault();this.value="";(e=this.searchDisposable)===null||e===void 0?void 0:e.dispose();this.emitCurrentValue();this.setFocus()}}async setFocus(){var t,e;if(typeof((t=this.inputEl)===null||t===void 0?void 0:t.focus)==="function"){(e=this.inputEl)===null||e===void 0?void 0:e.focus()}}controllerChanged(t){this.setupController()}componentDidLoad(){this.handleDebounceChanged();this.setupController()}disconnectedCallback(){var t;(t=this.onStateChangeDisposable)===null||t===void 0?void 0:t.dispose()}async clear(){var t;this.value="";(t=this.searchDisposable)===null||t===void 0?void 0:t.dispose();this.emitCurrentValue()}render(){return i(s,{key:"763e2f4c7ab3d80a197b94c123f61b25eba41b24"},i("div",{key:"14b5f4af01483f0d31ee77f03fc36fd1ff46e525",class:"root"},i("div",{key:"a1ebe30b97a16c83c9443402998e0f3f761d687d",class:"overlay icon icon-search"},i("slot",{key:"41073c4ecd626c3b4a38b0e62d95c6317cd2e98a",name:"search-icon"},this.isSearching?i("vertex-viewer-spinner",{slot:"search-icon",size:"xs"}):i("vertex-viewer-icon",{name:"search",size:"sm"}))),i("input",{key:"173d13b8d597425fdff082eb872225279e99bd34",class:o("input",{background:this.focused||this.value.length>0}),type:"text",ref:t=>this.inputEl=t,placeholder:this.placeholder,disabled:this.disabled,value:this.value,onInput:this.handleTextInput,onFocus:this.handleTextFocus,onBlur:this.handleTextBlur,onKeyPress:this.handleKeyPress}),i("div",{key:"f5b0de0431a9c8b051f61fcd76ce9eb430c0a0c9",class:o("overlay overlay-clear",{show:this.value.length>0})},i("button",{key:"92a36b952320fe724ba2f962a5a758a2e514fd18",class:"clear-btn icon",tabIndex:-1,onMouseDown:this.handleClear,disabled:this.disabled},i("slot",{key:"97dcec892120a855dd6a4d633f4a2cd84e57e670",name:"clear-icon"},i("vertex-viewer-icon",{key:"7df2c0ef411a569ccc0cd50cfbc43c6d8533d073",name:"close-circle",size:"sm"}))))))}handleDebounceChanged(){var t,e;(t=this.searchDisposable)===null||t===void 0?void 0:t.dispose();const i=r(this.search,(e=this.debounce)!==null&&e!==void 0?e:0);this.search=i;this.searchDisposable=i}setupController(){var t,e;(t=this.onStateChangeDisposable)===null||t===void 0?void 0:t.dispose();this.onStateChangeDisposable=(e=this.controller)===null||e===void 0?void 0:e.onStateChange.on((t=>{if(this.isSearching&&!t.isSearching){this.searchCompleted.emit(this.value)}this.isSearching=t.isSearching}))}emitCurrentValue(){this.lastEmittedValue=this.value;this.search.emit(this.value)}static get watchers(){return{controller:[{controllerChanged:0}]}}};b.style=p();function m(t){return t.toLowerCase()}var y=[/([a-z0-9])([A-Z])/g,/([A-Z])([A-Z][a-z])/g];var w=/[^A-Z0-9]+/gi;function g(t,e){if(e===void 0){e={}}var i=e.splitRegexp,s=i===void 0?y:i,n=e.stripRegexp,o=n===void 0?w:n,r=e.transform,a=r===void 0?m:r,h=e.delimiter,l=h===void 0?" ":h;var c=x(x(t,s,"$1\0$2"),o,"\0");var d=0;var u=c.length;while(c.charAt(d)==="\0")d++;while(c.charAt(u-1)==="\0")u--;return c.slice(d,u).split("\0").map(a).join(l)}function x(t,e,i){if(e instanceof RegExp)return t.replace(e,i);return e.reduce((function(t,e){return t.replace(e,i)}),t)}function k(t,e){var i=t.charAt(0);var s=t.substr(1).toLowerCase();if(e>0&&i>="0"&&i<="9"){return"_"+i+s}return""+i.toUpperCase()+s}function C(t,e){if(e===void 0){e={}}return g(t,l({delimiter:"",transform:k},e))}function z(t,e){if(e===0)return t.toLowerCase();return k(t,e)}function D(t,e){if(e===void 0){e={}}return C(t,l({transform:z},e))}const $=/{{(.+)}}/;class R{constructor(t){this.bindings=t}bind(t){this.bindings.forEach((e=>e.bind(t)))}}class _{constructor(t,e){this.node=t;this.expr=e}}class M extends _{constructor(t,e){super(t,e)}bind(t){const e=P(t,this.expr);if(e!==this.node.textContent){this.node.textContent=e}}}class L extends _{constructor(t,e,i){super(t,e);this.attr=i}bind(t){const e=P(t,this.expr);const i=this.node.getAttribute(this.attr);if(i!==e){this.node.setAttribute(this.attr,e)}}}class j extends _{constructor(t,e,i){super(t,e);this.prop=i}bind(t){const e=A(t,this.expr);const i=this.node[this.prop];if(i!==e){this.node[this.prop]=e}}}class E extends _{constructor(t,e,i){super(t,e);this.eventName=i}bind(t){var e;const i=V(this.expr);if(i!=null){(e=this.disposable)===null||e===void 0?void 0:e.dispose();const s=I(t,i,true);this.node.addEventListener(this.eventName,s);this.disposable={dispose:()=>{this.node.removeEventListener(this.eventName,s)}}}}}function H(t){const e=[];if(t.nodeType===Node.ELEMENT_NODE){const i=t;const s=T(i);s.forEach((t=>{if(t.name.startsWith("event:")){const s=D(t.name.replace("event:",""));e.push(new E(i,t.value,s))}else if(t.name.startsWith("attr:")){e.push(new L(i,t.value,t.name.replace("attr:","")))}else if(t.name.startsWith("prop:")){const s=D(t.name.replace("prop:",""));e.push(new j(i,t.value,s))}}))}else if(t.nodeType===Node.TEXT_NODE&&t.textContent!=null&&$.test(t.textContent)){e.push(new M(t,t.textContent))}for(let i=0;i<t.childNodes.length;i++){e.push(...H(t.childNodes[i]))}return e}function T(t){return Array.from(t.attributes).filter((t=>$.test(t.value)))}function V(t){const e=$.exec(t);return e!=null?e[1]:undefined}function P(t,e){const i=V(e);if(i!=null){const s=I(t,i,true);return e.replace(`{{${i}}}`,s===null||s===void 0?void 0:s.toString())}else{return e}}function A(t,e){const i=V(e);if(i!=null){const e=I(t,i,true);return e}else{return e}}function I(t,e,i=false){const[s,...n]=e.split(".");if(i&&n.length===0){return t}else if(i&&n.length>0){return I(t,n.join("."),false)}else{const e=t[s];if(n.length>0){return I(e,n.join("."),false)}else{return e}}}class W{constructor(t,e){this.container=t;this.elementFactory=e;this.instanceMap=new Map;this.elements=[]}swapHeadToTail(t){const e=this.elements.splice(0,t);this.elements.splice(this.elements.length,0,...e);return this.elements.concat()}swapTailToHead(t){const e=this.elements.splice(-t,t);this.elements.splice(0,0,...e);return this.elements.concat()}updateElements(t){const e=t-this.elements.length;if(e>0){for(let t=0;t<e;t++){this.createElement()}}else{for(let t=0;t<-e;t++){this.deleteElement()}}return this.elements.concat()}updateData(t){this.elements.forEach(((e,i)=>{const s=this.instanceMap.get(e);const n=t(i);s===null||s===void 0?void 0:s.bindings.bind(n)}))}updateElementFactory(t){this.elementFactory=t;this.updateElements(0)}iterateElements(t){this.elements.forEach(((e,i)=>{const s=this.instanceMap.get(e);t(e,s.bindings,i)}))}createElement(){const t=this.elementFactory();this.elements.push(t.element);this.instanceMap.set(t.element,t);this.container.append(t.element);return t}deleteElement(){const t=this.elements.pop();if(t!=null){this.instanceMap.delete(t);t.remove()}}}function N(t){const e=t.content.cloneNode(true);const i=e.firstElementChild;const s=new R(H(e));return{element:i,bindings:s}}function G(t){var e;return(e=t.getBoundingClientRect().top)!==null&&e!==void 0?e:0}function B(t){return t.clientWidth}function U(t,e,i){t.scrollTo({top:e,...i})}class Z{constructor(){this.onStateChange=new u}setHovered(t){this.onStateChange.emit(t)}stateChanged(t){return this.onStateChange.on(t)}}function F(t,e,i=200){window.clearTimeout(e);return window.setTimeout(t,i)}const O=()=>`:host{position:relative;display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden;font-size:0.825rem;--scene-tree-table-row-padding:2px 0px;--scene-tree-table-column-gap:0.5rem;--scene-tree-table-column-resize-cursor:col-resize}.header{position:relative;display:grid;width:100%;border-bottom:var(--scene-tree-toolbar-separator)}.table{position:relative;display:grid;width:100%;height:100%;overflow:auto}.resize-overlay{position:absolute;top:0;cursor:var(--scene-tree-table-column-resize-cursor);z-index:1000;width:100%;height:100%}.divider-overlay{position:absolute;top:0;display:grid;pointer-events:none;z-index:2000;width:100%;height:100%}`;const K=class{constructor(i){t(this,i);this.layoutRendered=e(this,"layoutRendered");this.columnsResized=e(this,"columnsResized");this.rows=[];this.totalRows=0;this.rowHeight=24;this.overScanCount=25;this.layoutOffset=0;this.scrollOffset=0;this.viewportStartIndex=0;this.viewportEndIndex=0;this.columnGridLayout="1fr";this.columnGridFixedLayout="";this.isComputingCellHeight=true;this.isScrolling=false;this.stateMap={viewportRows:[],columnWidths:[],columnWidthPercentages:[]};this.lastStartIndex=0;this.columnElements=[];this.cellHoverController=new Z;this.layoutColumns=()=>{const t=this.viewportEndIndex-this.viewportStartIndex+1;const e=this.viewportStartIndex-this.lastStartIndex;this.lastStartIndex=this.viewportStartIndex;this.iterateColumns(((i,s,n)=>{s.updateElements(t);if(e>0){s.swapHeadToTail(e)}else{s.swapTailToHead(-e)}i.style.minHeight=`${this.rowHeight*this.totalRows}px`;const o=n===0?t=>`calc(${t} * 0.5rem)`:()=>`0`;s.iterateElements(((t,e,i)=>{const s=this.stateMap.viewportRows[i];if(d(s)){this.updateCell(s,t,e,i,o)}}))}))};this.updateCell=(t,e,i,s,n)=>{e.style.position="absolute";e.style.top=`${(this.viewportStartIndex+s)*this.rowHeight}px`;e.style.boxSizing="border-box";e.style.height=`${this.rowHeight}px`;e.style.width="100%";e.style.paddingLeft=n(t.node.depth);e.tree=this.tree;e.node=t.node;e.hoverController=this.cellHoverController;e.isScrolling=this.isScrolling;i.bind(t)};this.updateLayoutPosition=()=>{a((()=>{if(this.tableElement!=null){this.layoutOffset=G(this.tableElement)}}))};this.recomputeColumnWidths=()=>{const t=this.getLayoutWidth();if(t!=null&&this.stateMap.columnWidths.length===this.stateMap.columnWidthPercentages.length){this.stateMap.columnWidths=this.stateMap.columnWidthPercentages.map((e=>e*t));this.columnsResized.emit(this.stateMap.columnWidths)}};this.recomputeColumnPercentages=()=>{const t=this.getLayoutWidth();if(t!=null&&this.stateMap.columnWidths.length===this.stateMap.columnWidthPercentages.length){this.stateMap.columnWidthPercentages=this.stateMap.columnWidths.map((e=>e/t))}};this.computeInitialColumnWidths=()=>{this.stateMap.columnWidths=this.columnElements.map((t=>{var e;return(e=t.initialWidth)!==null&&e!==void 0?e:100}));const t=this.getLayoutWidth();if(t!=null){const e=this.stateMap.columnWidths.reduce(((t,e)=>t+e),0);const i=this.stateMap.columnWidths.map((i=>i*(t/e)));this.stateMap.columnWidthPercentages=i.map((e=>e/t));this.stateMap.columnWidths=i}};this.updateColumnElements=()=>{this.columnElements=Array.from(this.hostEl.querySelectorAll("vertex-scene-tree-table-column"))};this.computeCellHeight=async()=>{var t;if(this.isComputingCellHeight&&this.columnElements.length>0){const e={index:0,node:{id:{hex:""},name:"Dummy row",expanded:false,selected:false,visible:false,partiallyVisible:false,isLeaf:false,depth:0,columnsList:[],filterHit:false,hasGeometry:false,phantom:false,endItem:false},metadata:{},data:{}};const{bindings:i,element:s}=this.createColumnCellInstance(this.columnElements[0]);i.bind(e);s.style.visibility="hidden";(t=this.columnElements[0])===null||t===void 0?void 0:t.appendChild(s);if(typeof s.componentOnReady==="function"){await s.componentOnReady()}let n=s.clientHeight;if(n===0){n=await new Promise((t=>{setTimeout((()=>t(s.getBoundingClientRect().height)),5)}))}this.rowHeight=n!==null&&n!==void 0?n:this.rowHeight;s.remove();this.isComputingCellHeight=this.rowHeight===0}};this.computeHeaderHeight=()=>{var t;if(this.stateMap.headerHeight==null){this.stateMap.headerHeight=(t=this.headerElement)===null||t===void 0?void 0:t.getBoundingClientRect().height;this.hostEl.style.setProperty("--header-height",`${this.stateMap.headerHeight}px`)}};this.computeColumnGridLayout=()=>{if(this.stateMap.columnWidths.length===0){this.stateMap.columnWidths=this.columnElements.map((t=>{var e;return(e=t.initialWidth)!==null&&e!==void 0?e:100}))}const t=this.getLayoutWidth();if(t!=null){if(this.stateMap.columnWidthPercentages.length===0){this.stateMap.columnWidthPercentages=this.columnElements.map((e=>{var i;return((i=e.initialWidth)!==null&&i!==void 0?i:100)/t}))}}this.columnGridLayout=`${this.stateMap.columnWidths.slice(0,-1).reduce(((t,e)=>`${t} ${e}px`),"")} 1fr`;this.columnGridFixedLayout=`${this.stateMap.columnWidths.reduce(((t,e)=>`${t} ${e}px`),"")}`};this.bindHeaderData=()=>{if(this.stateMap.headerInstances==null){this.stateMap.headerInstances=this.columnElements.map(((t,e)=>{var i;const s=this.createHeaderInstance(t);if(s!=null){s.element.style.paddingRight=e===this.columnElements.length-1?`0`:`var(--scene-tree-table-column-gap)`;s.element.slot="header";s.element.style.gridColumnStart=`${e+1}`;s.element.style.gridColumnEnd=`${e+2}`;(i=this.hostEl)===null||i===void 0?void 0:i.appendChild(s.element)}return s})).filter((t=>t!=null))}if(this.stateMap.headerDividerInstances==null){this.stateMap.headerDividerInstances=this.columnElements.slice(0,-1).map(((t,e)=>{var i;const s=this.createDividerInstance();s.element.slot="divider";s.element.style.position="absolute";s.element.style.right="0";s.element.style.pointerEvents="auto";s.element.style.gridColumnStart=`${e+1}`;s.element.style.gridColumnEnd=`${e+2}`;(i=this.hostEl)===null||i===void 0?void 0:i.appendChild(s.element);return s}))}};this.rebindHeaderData=()=>{var t,e;this.removeDividerDragListeners();(t=this.stateMap.headerInstances)===null||t===void 0?void 0:t.forEach((t=>t.element.remove()));(e=this.stateMap.headerDividerInstances)===null||e===void 0?void 0:e.forEach((t=>t.element.remove()));this.stateMap.headerInstances=undefined;this.stateMap.headerDividerInstances=undefined;this.bindHeaderData();this.addDividerDragListeners()};this.createDividerPointerDownHandler=t=>e=>{var i,s;e.preventDefault();e.stopPropagation();this.lastDividerPointerPosition=h.create(Math.floor(e.clientX),Math.floor(e.clientY));this.resizingColumnIndex=t;(s=(i=this.stateMap.headerDividerInstances)===null||i===void 0?void 0:i[t])===null||s===void 0?void 0:s.element.classList.add("dragging");window.addEventListener("pointermove",this.handleDividerPointerMove);window.addEventListener("pointerup",this.handleDividerPointerUp)};this.handleDividerPointerMove=t=>{const e=h.create(Math.floor(t.clientX),Math.floor(t.clientY));if(this.lastDividerPointerPosition!=null&&this.resizingColumnIndex!=null){const t=this.resizingColumnIndex;const i=h.subtract(this.lastDividerPointerPosition,e);if(Math.abs(i.x)>=1&&this.isValidResize(i,t)){this.stateMap.columnWidths=this.stateMap.columnWidths.map(((e,s)=>s===t?e-i.x:e));if(t+1<this.stateMap.columnWidths.length){this.stateMap.columnWidths=this.stateMap.columnWidths.map(((e,s)=>s===t+1?e+i.x:e))}this.lastDividerPointerPosition=e;this.computeColumnGridLayout()}}};this.handleDividerPointerUp=()=>{var t,e;if(this.resizingColumnIndex!=null){(e=(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t[this.resizingColumnIndex])===null||e===void 0?void 0:e.element.classList.remove("dragging")}this.lastDividerPointerPosition=undefined;this.resizingColumnIndex=undefined;this.recomputeColumnPercentages();this.recomputeColumnWidths();window.removeEventListener("pointermove",this.handleDividerPointerMove);window.removeEventListener("pointerup",this.handleDividerPointerUp)};this.isValidResize=(t,e)=>{var i,s,n,o;const r=this.columnElements[e];const a=this.columnElements[e+1];const h=this.stateMap.columnWidths[e];const l=this.stateMap.columnWidths[e+1];const c=(i=r.minWidth)!==null&&i!==void 0?i:0;const d=(s=r.maxWidth)!==null&&s!==void 0?s:Number.MAX_SAFE_INTEGER;const u=(n=a.minWidth)!==null&&n!==void 0?n:0;const f=(o=a.maxWidth)!==null&&o!==void 0?o:Number.MAX_SAFE_INTEGER;const v=h-t.x>c&&h-t.x<d;const p=a!=null?l+t.x>u&&l+t.x<f:true;return v&&p};this.handleScrollChanged=async t=>{this.isScrolling=true;this.scrollTimer=F((()=>{this.isScrolling=false}),this.scrollTimer);this.scrollOffset=t.target.scrollTop;await this.computeAndUpdateViewportRows()}}componentWillLoad(){this.updateColumnElements();this.createPools();this.initializeColumnLayout();this.headerResizeObserver=new ResizeObserver((()=>{this.stateMap.headerHeight=undefined;this.computeHeaderHeight();this.updateLayoutPosition()}));this.resizeObserver=new ResizeObserver((()=>{this.updateLayoutPosition();this.clearLayoutHeight();this.clearLayoutWidth();this.recomputeColumnWidths();this.computeColumnGridLayout()}))}async componentDidLoad(){var t,e,i;(t=this.tableElement)===null||t===void 0?void 0:t.addEventListener("scroll",this.handleScrollChanged,{passive:true});if(this.headerElement!=null){(e=this.headerResizeObserver)===null||e===void 0?void 0:e.observe(this.headerElement)}(i=this.resizeObserver)===null||i===void 0?void 0:i.observe(this.hostEl);await Promise.resolve();await this.initializeMeasuredLayout()}async componentWillRender(){await this.computeAndUpdateViewportRows()}componentDidRender(){this.layoutColumns();this.layoutRendered.emit()}async componentDidUpdate(){if(this.isComputingCellHeight){await this.computeCellHeight()}}disconnectedCallback(){var t,e,i;(t=this.tableElement)===null||t===void 0?void 0:t.removeEventListener("scroll",this.handleScrollChanged);this.removeDividerDragListeners();(e=this.headerResizeObserver)===null||e===void 0?void 0:e.disconnect();(i=this.resizeObserver)===null||i===void 0?void 0:i.disconnect();this.stateMap.columnWidths=[];this.stateMap.columnWidthPercentages=[]}async handleViewportRowsPropsChanged(){await this.computeAndUpdateViewportRows()}async scrollToPosition(t,e){if(this.tableElement!=null){U(this.tableElement,t,e)}}async attemptComputeCellHeight(){this.computeCellHeight()}render(){return i(s,{key:"fb503e5ce411669efe4549f3d8063fe630993341"},i("div",{key:"1b7acde237a9a7cf8d14f950cc664b82dd253486",class:"header",ref:t=>this.headerElement=t,style:{gridTemplateColumns:this.columnGridFixedLayout,display:this.columnElements.length<=1?"none":"grid"}},i("slot",{key:"ec62af4cb951011ed571418051d52b6cdf2dd152",name:"header"})),i("div",{key:"d3183a765e381d9899a00d4a70302a28bc7deddd",class:"table",ref:t=>this.tableElement=t,style:{gridTemplateColumns:this.columnGridLayout}},i("slot",{key:"5dcfa30b5f230987cd33d35e9011718c60786ad4",onSlotchange:()=>{this.ensureDividerTemplateDefined();this.updateColumnElements();this.recreateColumnPools();this.computeInitialColumnWidths();this.rebindHeaderData();this.computeColumnGridLayout()}})),i("div",{key:"df5e5e83a5d833c22e0234d36ae6b6be224b8504",class:"divider-overlay",style:{gridTemplateColumns:this.columnGridFixedLayout}},i("slot",{key:"98ea7728b5faf0dcf48464aebcb99aae0369b8cc",name:"divider"})),this.resizingColumnIndex!=null&&i("div",{key:"e146248e00f7e8c63de50efdc72bc93a02be4227",class:"resize-overlay"}))}computeViewportRows(){const t=this.getLayoutHeight();const e=t!=null&&t>0&&!this.isComputingCellHeight;if(e){const e=Math.ceil(t/this.rowHeight);const i=Math.floor(this.scrollOffset/this.rowHeight);const s=i+e;const n=Math.max(0,i-this.overScanCount);const o=Math.min(this.totalRows-1,s+this.overScanCount);const r=this.getViewportRows(n,o);this.viewportStartIndex=n;this.viewportEndIndex=o;this.stateMap.viewportRows=r}}initializeColumnLayout(){this.computeInitialColumnWidths();this.computeColumnGridLayout();this.ensureDividerTemplateDefined();this.rebindHeaderData()}async initializeMeasuredLayout(){await this.computeCellHeight();this.computeHeaderHeight()}async computeAndUpdateViewportRows(){var t;this.computeViewportRows();if(((t=this.controller)===null||t===void 0?void 0:t.isConnected)&&this.totalRows>0){await this.controller.updateActiveRowRange(this.viewportStartIndex,this.viewportEndIndex)}}createPools(){if(this.stateMap.columnElementPools==null){this.stateMap.columnElementPools=this.columnElements.reduce(((t,e)=>t.set(e,new W(e,(()=>this.createColumnCellInstance(e))))),new WeakMap)}}recreateColumnPools(){this.columnElements.forEach((t=>{var e,i,s;if(((e=this.stateMap.columnElementPools)===null||e===void 0?void 0:e.get(t))==null){(i=this.stateMap.columnElementPools)===null||i===void 0?void 0:i.set(t,new W(t,(()=>this.createColumnCellInstance(t))))}else{(s=this.stateMap.columnElementPools.get(t))===null||s===void 0?void 0:s.updateElementFactory((()=>this.createColumnCellInstance(t)))}}))}iterateColumns(t){this.columnElements.forEach(((e,i)=>{var s;const n=(s=this.stateMap.columnElementPools)===null||s===void 0?void 0:s.get(e);if(n!=null){t(e,n,i)}else{throw new Error("Cannot find pool for column")}}))}ensureDividerTemplateDefined(){const t=this.hostEl.querySelector('template[slot="divider"]');if(t==null){const t=document.createElement("template");t.slot="divider";t.innerHTML=`\n <vertex-scene-tree-table-resize-divider slot="divider">\n </vertex-scene-tree-table-resize-divider>\n `;this.hostEl.appendChild(t)}}createHeaderInstance(t){const e=t.querySelector('template[slot="header"]');if(e!=null){return N(e)}}createDividerInstance(){const t=this.hostEl.querySelector('template[slot="divider"]');if(t!=null){return N(t)}else{throw new Error("Table is missing divider template element")}}createColumnCellInstance(t){const e=t.querySelector('template:not([slot="header"])');if(e!=null){return N(e)}else{throw new Error("Column is missing cell template element")}}addDividerDragListeners(){var t;this.stateMap.headerDividerListeners=(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t.map(((t,e)=>{const i=this.createDividerPointerDownHandler(e);t.element.addEventListener("pointerdown",i);return i}))}removeDividerDragListeners(){var t;if(this.stateMap.headerDividerListeners!=null){const e=this.stateMap.headerDividerListeners;(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t.forEach(((t,i)=>{const s=e[i];if(s!=null){t.element.removeEventListener("pointerdown",s)}}));this.stateMap.headerDividerListeners=undefined}}getViewportRows(t,e){const i=this.rows.slice(t,e+1);return i.map((t=>t!=null?this.populateRowData(t):t))}populateRowData(t){var e;if(this.rowData!=null&&t!=null){const i=((e=this.rowData)===null||e===void 0?void 0:e.call(this,t))||{};return{...t,data:i}}else{return t}}getLayoutHeight(){if(this.layoutHeight==null&&this.tableElement!=null){this.layoutHeight=c(this.tableElement)}return this.layoutHeight}getLayoutWidth(){if(this.layoutWidth==null){const t=B(this.hostEl);if(t>0){this.layoutWidth=t}}return this.layoutWidth}clearLayoutHeight(){this.layoutHeight=undefined}clearLayoutWidth(){this.layoutWidth=undefined}get hostEl(){return n(this)}static get watchers(){return{rows:[{handleViewportRowsPropsChanged:0}],totalRows:[{handleViewportRowsPropsChanged:0}],rowHeight:[{handleViewportRowsPropsChanged:0}]}}};K.style=O();const J=()=>`:host{--scene-tree-toolbar-content-gap:8px;display:flex;padding:0.5rem}.content{display:flex;align-items:center}.content-primary{width:100%}::slotted(:not(:first-child)){margin-left:var(--scene-tree-toolbar-content-gap)}`;const Q=class{constructor(e){t(this,e)}render(){return i(s,{key:"7a3286d46171832c1fae126645568899b1004fa1"},i("div",{key:"ac81e6da67a1c41dbb30a23ec9658ddbac0cd9ea",class:"content"},i("slot",{key:"1993b705fbeeca9f7fee213662981403d89ea4c2",name:"before"})),i("div",{key:"ee8b5cf8eccb88a4b0b029c6f3a33c9c5f20ef09",class:"content content-primary"},i("slot",{key:"2cb220546b02b8dd353aa0270bbfa7f51dc0ca95"})),i("div",{key:"cd0c977e5f42f1dbacaad42306b1705a97b50ab9",class:"content"},i("slot",{key:"0f3af32f24077fa6d0bda7cc1fce3b9921b49f70",name:"after"})))}};Q.style=J();export{v as vertex_scene_tree_notification_banner,b as vertex_scene_tree_search,K as vertex_scene_tree_table_layout,Q as vertex_scene_tree_toolbar};
|
|
5
|
+
//# sourceMappingURL=p-fd3a5837.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["sceneTreeNotificationBannerCss","SceneTreeNotificationBanner","render","h","Host","key","class","name","size","this","message","actionLabel","onClick","action","emit","sceneTreeSearchCss","SceneTreeSearch","constructor","hostRef","disabled","placeholder","undefined","value","focused","isSearching","handleTextInput","event","input","target","debounce","emitCurrentValue","handleTextFocus","handleTextBlur","_a","searchDisposable","dispose","lastEmittedValue","handleKeyPress","handleClear","preventDefault","setFocus","inputEl","focus","_b","controllerChanged","controller","setupController","componentDidLoad","handleDebounceChanged","disconnectedCallback","onStateChangeDisposable","clear","slot","classNames","background","length","type","ref","onInput","onFocus","onBlur","onKeyPress","show","tabIndex","onMouseDown","emitter","debounceEvent","search","onStateChange","on","state","searchCompleted","lowerCase","str","toLowerCase","DEFAULT_SPLIT_REGEXP","DEFAULT_STRIP_REGEXP","noCase","options","splitRegexp","stripRegexp","_c","transform","_d","delimiter","result","replace","start","end","charAt","slice","split","map","join","re","RegExp","reduce","pascalCaseTransform","index","firstChar","lowerChars","substr","toUpperCase","pascalCase","__assign","camelCaseTransform","camelCase","bindingRegEx","CollectionBinding","bindings","bind","data","forEach","binding","NodeBinding","node","expr","TextNodeBinding","super","newContent","replaceBindingString","textContent","AttributeBinding","attr","newValue","oldValue","getAttribute","setAttribute","PropertyBinding","prop","replaceBinding","EventHandlerBinding","eventName","path","extractBindingPath","disposable","listener","getBindableValue","addEventListener","removeEventListener","generateBindings","nodeType","Node","ELEMENT_NODE","el","bindableAttributes","getBindableAttributes","startsWith","push","propName","TEXT_NODE","test","i","childNodes","element","Array","from","attributes","filter","exec","toString","isHead","head","tail","ElementPool","container","elementFactory","instanceMap","Map","elements","swapHeadToTail","count","sliced","splice","concat","swapTailToHead","updateElements","diff","createElement","deleteElement","updateData","f","instance","get","updateElementFactory","iterateElements","set","append","pop","delete","remove","generateInstanceFromTemplate","template","fragment","content","cloneNode","firstElementChild","getSceneTreeTableOffsetTop","getBoundingClientRect","top","getSceneTreeTableViewportWidth","clientWidth","scrollToTop","scrollTo","SceneTreeCellHoverController","EventDispatcher","setHovered","id","stateChanged","restartTimeout","fn","existingTimeout","delay","window","clearTimeout","setTimeout","sceneTreeTableLayoutCss","SceneTreeTableLayout","rows","totalRows","rowHeight","overScanCount","layoutOffset","scrollOffset","viewportStartIndex","viewportEndIndex","columnGridLayout","columnGridFixedLayout","isComputingCellHeight","isScrolling","stateMap","viewportRows","columnWidths","columnWidthPercentages","lastStartIndex","columnElements","cellHoverController","layoutColumns","visibleRowCount","iterateColumns","col","pool","colIndex","style","minHeight","cellPaddingLeft","depth","rowIndex","row","isLoadedRow","updateCell","cell","position","boxSizing","height","width","paddingLeft","tree","hoverController","updateLayoutPosition","readDOM","tableElement","recomputeColumnWidths","layoutWidth","getLayoutWidth","w","columnsResized","recomputeColumnPercentages","computeInitialColumnWidths","c","initialWidth","columnWidthSum","scaledColumnWidths","updateColumnElements","hostEl","querySelectorAll","computeCellHeight","async","dummyData","hex","expanded","selected","visible","partiallyVisible","isLeaf","columnsList","filterHit","hasGeometry","phantom","endItem","metadata","createColumnCellInstance","visibility","appendChild","componentOnReady","clientHeight","Promise","resolve","computeHeaderHeight","headerHeight","headerElement","setProperty","computeColumnGridLayout","res","bindHeaderData","headerInstances","createHeaderInstance","paddingRight","gridColumnStart","gridColumnEnd","headerDividerInstances","_","createDividerInstance","right","pointerEvents","rebindHeaderData","removeDividerDragListeners","addDividerDragListeners","createDividerPointerDownHandler","stopPropagation","lastDividerPointerPosition","Point","create","Math","floor","clientX","clientY","resizingColumnIndex","classList","add","handleDividerPointerMove","handleDividerPointerUp","current","resizingIndex","subtract","abs","x","isValidResize","currentColumn","nextColumn","currentWidth","nextWidth","currentMinWidth","minWidth","currentMaxWidth","maxWidth","Number","MAX_SAFE_INTEGER","nextMinWidth","nextMaxWidth","currentIsValid","nextIsValid","handleScrollChanged","scrollTimer","scrollTop","computeAndUpdateViewportRows","componentWillLoad","createPools","initializeColumnLayout","headerResizeObserver","ResizeObserver","resizeObserver","clearLayoutHeight","clearLayoutWidth","passive","observe","initializeMeasuredLayout","componentWillRender","componentDidRender","layoutRendered","componentDidUpdate","disconnect","handleViewportRowsPropsChanged","scrollToPosition","attemptComputeCellHeight","gridTemplateColumns","display","onSlotchange","ensureDividerTemplateDefined","recreateColumnPools","computeViewportRows","viewportHeight","getLayoutHeight","canComputeIndices","viewportCount","ceil","startIndex","max","endIndex","min","getViewportRows","isConnected","updateActiveRowRange","columnElementPools","WeakMap","column","Error","querySelector","defaultDividerTemplate","document","innerHTML","headerDividerListeners","d","listeners","populateRowData","rowData","call","layoutHeight","getSceneTreeViewportHeight","computedWidth","sceneTreeToolbarCss","SceneTreeToolbar"],"sources":["src/components/scene-tree-notification-banner/scene-tree-notification-banner.css?tag=vertex-scene-tree-notification-banner&encapsulation=shadow","src/components/scene-tree-notification-banner/scene-tree-notification-banner.tsx","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","../html-templates/dist/bundle.js","src/components/scene-tree-table-layout/lib/dom.ts","src/components/scene-tree-table-layout/lib/hover-controller.ts","src/components/scene-tree-table-layout/lib/window.ts","src/components/scene-tree-table-layout/scene-tree-table-layout.css?tag=vertex-scene-tree-table-layout&encapsulation=shadow","src/components/scene-tree-table-layout/scene-tree-table-layout.tsx","src/components/scene-tree-toolbar/scene-tree-toolbar.css?tag=vertex-scene-tree-toolbar&encapsulation=shadow","src/components/scene-tree-toolbar/scene-tree-toolbar.tsx"],"sourcesContent":[".notification-banner {\n background-color: var(--blue-200);\n padding-top: 0px;\n padding-bottom: 0px;\n padding-right: 16px;\n padding-left: 8px;\n display: flex;\n justify-content: space-between;\n font-size: 0.875rem;\n line-height: 0.5;\n color: var(--neutral-600);\n}\n\n.notification-banner-info {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.notification-banner-info .icon {\n color: var(--blue-600);\n}\n\n.notification-banner-actions {\n display: flex;\n align-items: center;\n}\n\n.notification-banner-button {\n background: none;\n border: none;\n padding: 0;\n margin: 0;\n cursor: pointer;\n color: var(--blue-600);\n font-size: 0.875rem;\n display: flex;\n align-items: center;\n}\n\n.notification-banner-button:hover {\n color: var(--blue-800);\n}\n","import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\n\n/**\n * A notification banner that displays a message and an action button.\n */\n@Component({\n tag: 'vertex-scene-tree-notification-banner',\n styleUrl: 'scene-tree-notification-banner.css',\n shadow: true,\n})\nexport class SceneTreeNotificationBanner {\n /**\n * The message to display in the banner.\n */\n @Prop()\n public message?: string;\n\n /**\n * The label of the action button.\n */\n @Prop()\n public actionLabel?: string;\n\n /**\n * An event that is emitted when the action button is clicked.\n */\n @Event()\n public action!: EventEmitter<void>;\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"notification-banner\">\n <div class=\"notification-banner-info\">\n <vertex-viewer-icon class=\"icon\" name=\"info\" size=\"sm\" />\n <p>{this.message}</p>\n </div>\n {this.actionLabel != null && (\n <div class=\"notification-banner-actions\">\n <button\n class=\"notification-banner-button\"\n onClick={() => this.action.emit()}\n >\n {this.actionLabel}\n </button>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","@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","import { __assign } from 'tslib';\n\n/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\n/**\n * Lower case as a function.\n */\nfunction lowerCase(str) {\n return str.toLowerCase();\n}\n\n// Support camel case (\"camelCase\" -> \"camel Case\" and \"CAMELCase\" -> \"CAMEL Case\").\nvar DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];\n// Remove all non-word characters.\nvar DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n/**\n * Normalize the string into something other libraries can manipulate easier.\n */\nfunction noCase(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? \" \" : _d;\n var result = replace(replace(input, splitRegexp, \"$1\\0$2\"), stripRegexp, \"\\0\");\n var start = 0;\n var end = result.length;\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\")\n start++;\n while (result.charAt(end - 1) === \"\\0\")\n end--;\n // Transform each token independently.\n return result.slice(start, end).split(\"\\0\").map(transform).join(delimiter);\n}\n/**\n * Replace `re` in the input string with the replacement value.\n */\nfunction replace(input, re, value) {\n if (re instanceof RegExp)\n return input.replace(re, value);\n return re.reduce(function (input, re) { return input.replace(re, value); }, input);\n}\n\nfunction pascalCaseTransform(input, index) {\n var firstChar = input.charAt(0);\n var lowerChars = input.substr(1).toLowerCase();\n if (index > 0 && firstChar >= \"0\" && firstChar <= \"9\") {\n return \"_\" + firstChar + lowerChars;\n }\n return \"\" + firstChar.toUpperCase() + lowerChars;\n}\nfunction pascalCase(input, options) {\n if (options === void 0) { options = {}; }\n return noCase(input, __assign({ delimiter: \"\", transform: pascalCaseTransform }, options));\n}\n\nfunction camelCaseTransform(input, index) {\n if (index === 0)\n return input.toLowerCase();\n return pascalCaseTransform(input, index);\n}\nfunction camelCase(input, options) {\n if (options === void 0) { options = {}; }\n return pascalCase(input, __assign({ transform: camelCaseTransform }, options));\n}\n\nconst bindingRegEx = /{{(.+)}}/;\nclass CollectionBinding {\n constructor(bindings) {\n this.bindings = bindings;\n }\n bind(data) {\n this.bindings.forEach((binding) => binding.bind(data));\n }\n}\nclass NodeBinding {\n constructor(node, expr) {\n this.node = node;\n this.expr = expr;\n }\n}\nclass TextNodeBinding extends NodeBinding {\n constructor(node, expr) {\n super(node, expr);\n }\n bind(data) {\n const newContent = replaceBindingString(data, this.expr);\n if (newContent !== this.node.textContent) {\n this.node.textContent = newContent;\n }\n }\n}\nclass AttributeBinding extends NodeBinding {\n constructor(node, expr, attr) {\n super(node, expr);\n this.attr = attr;\n }\n bind(data) {\n const newValue = replaceBindingString(data, this.expr);\n const oldValue = this.node.getAttribute(this.attr);\n if (oldValue !== newValue) {\n this.node.setAttribute(this.attr, newValue);\n }\n }\n}\nclass PropertyBinding extends NodeBinding {\n constructor(node, expr, prop) {\n super(node, expr);\n this.prop = prop;\n }\n bind(data) {\n const newValue = replaceBinding(data, this.expr);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const oldValue = this.node[this.prop];\n if (oldValue !== newValue) {\n this.node[this.prop] = newValue;\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n }\n}\nclass EventHandlerBinding extends NodeBinding {\n constructor(node, expr, eventName) {\n super(node, expr);\n this.eventName = eventName;\n }\n bind(data) {\n var _a;\n const path = extractBindingPath(this.expr);\n if (path != null) {\n (_a = this.disposable) === null || _a === void 0 ? void 0 : _a.dispose();\n const listener = getBindableValue(data, path, true);\n this.node.addEventListener(this.eventName, listener);\n this.disposable = {\n dispose: () => {\n this.node.removeEventListener(this.eventName, listener);\n },\n };\n }\n }\n}\nfunction generateBindings(node) {\n const bindings = [];\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node;\n const bindableAttributes = getBindableAttributes(el);\n bindableAttributes.forEach((attr) => {\n if (attr.name.startsWith('event:')) {\n const eventName = camelCase(attr.name.replace('event:', ''));\n bindings.push(new EventHandlerBinding(el, attr.value, eventName));\n }\n else if (attr.name.startsWith('attr:')) {\n bindings.push(new AttributeBinding(el, attr.value, attr.name.replace('attr:', '')));\n }\n else if (attr.name.startsWith('prop:')) {\n const propName = camelCase(attr.name.replace('prop:', ''));\n bindings.push(new PropertyBinding(el, attr.value, propName));\n }\n });\n }\n else if (node.nodeType === Node.TEXT_NODE &&\n node.textContent != null &&\n bindingRegEx.test(node.textContent)) {\n bindings.push(new TextNodeBinding(node, node.textContent));\n }\n for (let i = 0; i < node.childNodes.length; i++) {\n bindings.push(...generateBindings(node.childNodes[i]));\n }\n return bindings;\n}\nfunction getBindableAttributes(element) {\n return Array.from(element.attributes).filter((attr) => bindingRegEx.test(attr.value));\n}\nfunction extractBindingPath(expr) {\n const result = bindingRegEx.exec(expr);\n return result != null ? result[1] : undefined;\n}\nfunction replaceBindingString(data, expr) {\n const path = extractBindingPath(expr);\n if (path != null) {\n const value = getBindableValue(data, path, true);\n return expr.replace(`{{${path}}}`, value === null || value === void 0 ? void 0 : value.toString());\n }\n else {\n return expr;\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction replaceBinding(data, expr) {\n const path = extractBindingPath(expr);\n if (path != null) {\n const value = getBindableValue(data, path, true);\n return value;\n }\n else {\n return expr;\n }\n}\nfunction getBindableValue(data, path, isHead = false) {\n const [head, ...tail] = path.split('.');\n if (isHead && tail.length === 0) {\n return data;\n }\n else if (isHead && tail.length > 0) {\n return getBindableValue(data, tail.join('.'), false);\n }\n else {\n const value = data[head];\n if (tail.length > 0) {\n return getBindableValue(value, tail.join('.'), false);\n }\n else {\n return value;\n }\n }\n}\n\nclass ElementPool {\n constructor(container, elementFactory) {\n this.container = container;\n this.elementFactory = elementFactory;\n this.instanceMap = new Map();\n this.elements = [];\n }\n swapHeadToTail(count) {\n const sliced = this.elements.splice(0, count);\n this.elements.splice(this.elements.length, 0, ...sliced);\n return this.elements.concat();\n }\n swapTailToHead(count) {\n const sliced = this.elements.splice(-count, count);\n this.elements.splice(0, 0, ...sliced);\n return this.elements.concat();\n }\n updateElements(count) {\n const diff = count - this.elements.length;\n if (diff > 0) {\n for (let i = 0; i < diff; i++) {\n this.createElement();\n }\n }\n else {\n for (let i = 0; i < -diff; i++) {\n this.deleteElement();\n }\n }\n return this.elements.concat();\n }\n updateData(f) {\n this.elements.forEach((el, i) => {\n const instance = this.instanceMap.get(el);\n const data = f(i);\n instance === null || instance === void 0 ? void 0 : instance.bindings.bind(data);\n });\n }\n updateElementFactory(elementFactory) {\n this.elementFactory = elementFactory;\n this.updateElements(0);\n }\n iterateElements(f) {\n this.elements.forEach((el, i) => {\n const instance = this.instanceMap.get(el);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n f(el, instance.bindings, i);\n });\n }\n createElement() {\n const instance = this.elementFactory();\n this.elements.push(instance.element);\n this.instanceMap.set(instance.element, instance);\n this.container.append(instance.element);\n return instance;\n }\n deleteElement() {\n const element = this.elements.pop();\n if (element != null) {\n this.instanceMap.delete(element);\n element.remove();\n }\n }\n}\n\nfunction append(container, element, data) {\n const bindings = new CollectionBinding(generateBindings(element));\n bindings.bind(data);\n container.appendChild(element);\n const created = container.lastElementChild;\n if (created != null) {\n return { element: created, bindings };\n }\n else {\n throw new Error('Failed to append element');\n }\n}\nfunction generateInstanceFromTemplate(template) {\n const fragment = template.content.cloneNode(true);\n const element = fragment.firstElementChild;\n const bindings = new CollectionBinding(generateBindings(fragment));\n return { element, bindings };\n}\n\nexport { AttributeBinding, CollectionBinding, ElementPool, EventHandlerBinding, NodeBinding, PropertyBinding, TextNodeBinding, append, generateBindings, generateInstanceFromTemplate };\n//# sourceMappingURL=bundle.js.map\n","export type DomScrollToOptions = ScrollToOptions;\n\nexport function getSceneTreeTableOffsetTop(el: HTMLElement): number {\n return el.getBoundingClientRect().top ?? 0;\n}\n\nexport function getSceneTreeTableViewportWidth(el: HTMLElement): number {\n return el.clientWidth;\n}\n\nexport function scrollToTop(\n el: HTMLElement,\n top: number,\n options: Pick<DomScrollToOptions, 'behavior'>,\n): void {\n el.scrollTo({ top, ...options });\n}\n","import { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nexport class SceneTreeCellHoverController {\n public onStateChange = new EventDispatcher<string | undefined>();\n\n public setHovered(id?: string): void {\n this.onStateChange.emit(id);\n }\n\n public stateChanged(listener: Listener<string | undefined>): Disposable {\n return this.onStateChange.on(listener);\n }\n}\n","export function restartTimeout(\n fn: VoidFunction,\n existingTimeout?: number,\n delay = 200,\n): number {\n window.clearTimeout(existingTimeout);\n return window.setTimeout(fn, delay);\n}\n",":host {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow: hidden;\n font-size: 0.825rem;\n\n /**\n * @prop --scene-tree-table-row-padding: CSS lengths that specifies the amount of\n * padding between the row's border and content.\n */\n --scene-tree-table-row-padding: 2px 0px;\n\n /**\n * @prop --scene-tree-table-column-gap: CSS length that specifies the amount of\n * padding between columns in the table.\n */\n --scene-tree-table-column-gap: 0.5rem;\n\n /**\n * @prop --scene-tree-table-column-resize-cursor: A CSS cursor value that will\n * be displayed when resizing a column. Defaults to `col-resize`.\n */\n --scene-tree-table-column-resize-cursor: col-resize;\n}\n\n.header {\n position: relative;\n display: grid;\n width: 100%;\n border-bottom: var(--scene-tree-toolbar-separator);\n}\n\n.table {\n position: relative;\n display: grid;\n width: 100%;\n height: 100%;\n overflow: auto;\n}\n\n.resize-overlay {\n position: absolute;\n top: 0;\n cursor: var(--scene-tree-table-column-resize-cursor);\n z-index: 1000;\n width: 100%;\n height: 100%;\n}\n\n.divider-overlay {\n position: absolute;\n top: 0;\n display: grid;\n pointer-events: none;\n z-index: 2000;\n width: 100%;\n height: 100%;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport {\n Binding,\n ElementPool,\n generateInstanceFromTemplate,\n InstancedTemplate,\n} from '@vertexvis/html-templates';\n\nimport { readDOM } from '../../lib/stencil';\nimport { SceneTreeController } from '../scene-tree/lib/controller';\nimport { getSceneTreeViewportHeight } from '../scene-tree/lib/dom';\nimport { isLoadedRow, LoadedRow, Row } from '../scene-tree/lib/row';\nimport { RowDataProvider } from '../scene-tree/types';\nimport {\n DomScrollToOptions,\n getSceneTreeTableOffsetTop,\n getSceneTreeTableViewportWidth,\n scrollToTop,\n} from './lib/dom';\nimport { SceneTreeCellHoverController } from './lib/hover-controller';\nimport { restartTimeout } from './lib/window';\n\ninterface StateMap {\n columnElementPools?: WeakMap<\n HTMLVertexSceneTreeTableColumnElement,\n ElementPool\n >;\n headerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerListeners?: Array<(event: PointerEvent) => void>;\n\n viewportRows: Row[];\n\n headerHeight?: number;\n columnWidths: number[];\n columnWidthPercentages: number[];\n}\n\n@Component({\n tag: 'vertex-scene-tree-table-layout',\n styleUrl: 'scene-tree-table-layout.css',\n shadow: true,\n})\nexport class SceneTreeTableLayout {\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 * @internal\n */\n @Prop()\n public controller?: SceneTreeController;\n\n /**\n * @internal\n */\n @Prop()\n public rows: Row[] = [];\n\n /**\n * @internal\n */\n @Prop()\n public totalRows = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public rowHeight = 24;\n\n /**\n * The number of offscreen rows above and below the viewport to render. Having\n * a higher number reduces the chance of the browser not displaying a row\n * while scrolling.\n *\n * This prop will be automatically populated based on the `overScanCount` prop\n * specified in the parent `<vertex-scene-tree />` element.\n */\n @Prop()\n public overScanCount = 25;\n\n /**\n * A callback that is invoked immediately before a row is about to be rendered.\n * This callback can return additional data that can be bound to in a\n * template.\n *\n * This prop will be automatically populated based on the `rowData` prop\n * specified in the parent `<vertex-scene-tree />` element.\n *\n * @example\n *\n * ```html\n * <script>\n * const table = document.querySelector('vertex-scene-tree-table');\n * table.rowData = (row) => {\n * return { func: () => console.log('row', row.node.name) };\n * }\n * </script>\n *\n * <vertex-scene-tree>\n * <vertex-scene-tree-table>\n * <vertex-scene-tree-table-column>\n * <template>\n * <button event:click=\"{{row.data.func}}\">Hi</button>\n * </template>\n * </vertex-scene-tree-table-column>\n * </vertex-scene-tree-table>\n * </vertex-scene-tree>\n * ```\n */\n @Prop()\n public rowData?: RowDataProvider;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public scrollOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutHeight?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutWidth?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportStartIndex = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportEndIndex = 0;\n\n /**\n * @internal\n */\n @Event()\n public layoutRendered!: EventEmitter<void>;\n\n /**\n * An event that is emitted when the columns of this `<vertex-scene-tree-table-layout>`\n * are resized with an array containing the widths of the columns in pixels.\n */\n @Event({ bubbles: true })\n public columnsResized!: EventEmitter<number[]>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private columnGridLayout = '1fr';\n\n @State()\n private columnGridFixedLayout = '';\n\n @State()\n private isComputingCellHeight = true;\n\n @State()\n private lastDividerPointerPosition?: Point.Point;\n\n @State()\n private resizingColumnIndex?: number;\n\n @State()\n private isScrolling = false;\n\n @State()\n private scrollTimer: number | undefined;\n\n /**\n * This stores internal state that you want to preserve across live-reloads,\n * but shouldn't trigger a refresh if the data changes. Marking this with\n * @State to allow to preserve state across live-reloads.\n */\n @State()\n private stateMap: StateMap = {\n viewportRows: [],\n columnWidths: [],\n columnWidthPercentages: [],\n };\n\n private lastStartIndex = 0;\n private resizeObserver?: ResizeObserver;\n private headerResizeObserver?: ResizeObserver;\n\n private tableElement?: HTMLDivElement;\n private headerElement?: HTMLDivElement;\n private columnElements: HTMLVertexSceneTreeTableColumnElement[] = [];\n\n private cellHoverController = new SceneTreeCellHoverController();\n\n public componentWillLoad(): void {\n this.updateColumnElements();\n this.createPools();\n this.initializeColumnLayout();\n\n this.headerResizeObserver = new ResizeObserver(() => {\n this.stateMap.headerHeight = undefined;\n this.computeHeaderHeight();\n this.updateLayoutPosition();\n });\n\n this.resizeObserver = new ResizeObserver(() => {\n this.updateLayoutPosition();\n this.clearLayoutHeight();\n this.clearLayoutWidth();\n this.recomputeColumnWidths();\n this.computeColumnGridLayout();\n });\n }\n\n public async componentDidLoad(): Promise<void> {\n this.tableElement?.addEventListener('scroll', this.handleScrollChanged, {\n passive: true,\n });\n\n if (this.headerElement != null) {\n this.headerResizeObserver?.observe(this.headerElement);\n }\n\n this.resizeObserver?.observe(this.hostEl);\n\n // These measurements require rendered DOM, but mutating tracked values\n // directly in componentDidLoad triggers Stencil dev warnings.\n await Promise.resolve();\n await this.initializeMeasuredLayout();\n }\n\n public async componentWillRender(): Promise<void> {\n await this.computeAndUpdateViewportRows();\n }\n\n public componentDidRender(): void {\n this.layoutColumns();\n\n this.layoutRendered.emit();\n }\n\n public async componentDidUpdate(): Promise<void> {\n if (this.isComputingCellHeight) {\n await this.computeCellHeight();\n }\n }\n\n public disconnectedCallback(): void {\n this.tableElement?.removeEventListener('scroll', this.handleScrollChanged);\n this.removeDividerDragListeners();\n this.headerResizeObserver?.disconnect();\n this.resizeObserver?.disconnect();\n this.stateMap.columnWidths = [];\n this.stateMap.columnWidthPercentages = [];\n }\n\n @Watch('rows')\n @Watch('totalRows')\n @Watch('rowHeight')\n protected async handleViewportRowsPropsChanged(): Promise<void> {\n await this.computeAndUpdateViewportRows();\n }\n\n /**\n * Scrolls the table to the provided top value.\n *\n * @param top The position to scroll to.\n * @param options A set of options to configure the scrolling behavior.\n */\n @Method()\n public async scrollToPosition(\n top: number,\n options: Pick<DomScrollToOptions, 'behavior'>,\n ): Promise<void> {\n if (this.tableElement != null) {\n scrollToTop(this.tableElement, top, options);\n }\n }\n\n /**\n * Attempts to compute the height of templated cells. Used for internals\n * or testing.\n *\n * @internal\n * @ignore\n */\n @Method()\n public async attemptComputeCellHeight(): Promise<void> {\n this.computeCellHeight();\n }\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div\n class=\"header\"\n ref={(ref) => (this.headerElement = ref)}\n style={{\n gridTemplateColumns: this.columnGridFixedLayout,\n display: this.columnElements.length <= 1 ? 'none' : 'grid',\n }}\n >\n <slot name=\"header\" />\n </div>\n <div\n class=\"table\"\n ref={(ref) => (this.tableElement = ref)}\n style={{\n gridTemplateColumns: this.columnGridLayout,\n }}\n >\n <slot\n onSlotchange={() => {\n this.ensureDividerTemplateDefined();\n this.updateColumnElements();\n this.recreateColumnPools();\n this.computeInitialColumnWidths();\n this.rebindHeaderData();\n this.computeColumnGridLayout();\n }}\n />\n </div>\n <div\n class=\"divider-overlay\"\n style={{\n gridTemplateColumns: this.columnGridFixedLayout,\n }}\n >\n <slot name=\"divider\" />\n </div>\n {this.resizingColumnIndex != null && <div class=\"resize-overlay\" />}\n </Host>\n );\n }\n\n private computeViewportRows(): void {\n const viewportHeight = this.getLayoutHeight();\n const canComputeIndices =\n viewportHeight != null &&\n viewportHeight > 0 &&\n !this.isComputingCellHeight;\n\n if (canComputeIndices) {\n const viewportCount = Math.ceil(viewportHeight / this.rowHeight);\n\n const viewportStartIndex = Math.floor(this.scrollOffset / this.rowHeight);\n const viewportEndIndex = viewportStartIndex + viewportCount;\n\n const startIndex = Math.max(0, viewportStartIndex - this.overScanCount);\n const endIndex = Math.min(\n this.totalRows - 1,\n viewportEndIndex + this.overScanCount,\n );\n\n const rows = this.getViewportRows(startIndex, endIndex);\n\n this.viewportStartIndex = startIndex;\n this.viewportEndIndex = endIndex;\n this.stateMap.viewportRows = rows;\n }\n }\n\n private initializeColumnLayout(): void {\n this.computeInitialColumnWidths();\n this.computeColumnGridLayout();\n this.ensureDividerTemplateDefined();\n this.rebindHeaderData();\n }\n\n private async initializeMeasuredLayout(): Promise<void> {\n await this.computeCellHeight();\n this.computeHeaderHeight();\n }\n\n private async computeAndUpdateViewportRows(): Promise<void> {\n this.computeViewportRows();\n\n if (this.controller?.isConnected && this.totalRows > 0) {\n await this.controller.updateActiveRowRange(\n this.viewportStartIndex,\n this.viewportEndIndex,\n );\n }\n }\n\n private layoutColumns = (): void => {\n const visibleRowCount = this.viewportEndIndex - this.viewportStartIndex + 1;\n const diff = this.viewportStartIndex - this.lastStartIndex;\n this.lastStartIndex = this.viewportStartIndex;\n\n this.iterateColumns((col, pool, colIndex) => {\n pool.updateElements(visibleRowCount);\n\n if (diff > 0) {\n pool.swapHeadToTail(diff);\n } else {\n pool.swapTailToHead(-diff);\n }\n\n col.style.minHeight = `${this.rowHeight * this.totalRows}px`;\n\n const cellPaddingLeft =\n colIndex === 0\n ? (depth: number) => `calc(${depth} * 0.5rem)`\n : () => `0`;\n\n pool.iterateElements((el, binding, rowIndex) => {\n const row = this.stateMap.viewportRows[rowIndex];\n\n if (isLoadedRow(row)) {\n this.updateCell(row, el, binding, rowIndex, cellPaddingLeft);\n }\n });\n });\n };\n\n private updateCell = (\n row: LoadedRow,\n cell: HTMLElement,\n binding: Binding,\n rowIndex: number,\n cellPaddingLeft: (depth: number) => string,\n ): void => {\n cell.style.position = 'absolute';\n cell.style.top = `${(this.viewportStartIndex + rowIndex) * this.rowHeight}px`;\n cell.style.boxSizing = 'border-box';\n cell.style.height = `${this.rowHeight}px`;\n cell.style.width = '100%';\n cell.style.paddingLeft = cellPaddingLeft(row.node.depth);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n (cell as any).tree = this.tree;\n (cell as any).node = row.node;\n (cell as any).hoverController = this.cellHoverController;\n (cell as any).isScrolling = this.isScrolling;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n binding.bind(row);\n };\n\n private updateLayoutPosition = (): void => {\n readDOM(() => {\n if (this.tableElement != null) {\n this.layoutOffset = getSceneTreeTableOffsetTop(this.tableElement);\n }\n });\n };\n\n private recomputeColumnWidths = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidths = this.stateMap.columnWidthPercentages.map(\n (w) => w * layoutWidth,\n );\n\n this.columnsResized.emit(this.stateMap.columnWidths);\n }\n };\n\n private recomputeColumnPercentages = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidthPercentages = this.stateMap.columnWidths.map(\n (w) => w / layoutWidth,\n );\n }\n };\n\n private computeInitialColumnWidths = (): void => {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100,\n );\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n const columnWidthSum = this.stateMap.columnWidths.reduce(\n (result, w) => result + w,\n 0,\n );\n const scaledColumnWidths = this.stateMap.columnWidths.map(\n (w) => w * (layoutWidth / columnWidthSum),\n );\n\n this.stateMap.columnWidthPercentages = scaledColumnWidths.map(\n (w) => w / layoutWidth,\n );\n this.stateMap.columnWidths = scaledColumnWidths;\n }\n };\n\n private updateColumnElements = (): void => {\n this.columnElements = Array.from(\n this.hostEl.querySelectorAll('vertex-scene-tree-table-column'),\n ) as Array<HTMLVertexSceneTreeTableColumnElement>;\n };\n\n private createPools(): void {\n if (this.stateMap.columnElementPools == null) {\n this.stateMap.columnElementPools = this.columnElements.reduce(\n (map, c) =>\n map.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c)),\n ),\n new WeakMap(),\n );\n }\n }\n\n private recreateColumnPools(): void {\n this.columnElements.forEach((c) => {\n if (this.stateMap.columnElementPools?.get(c) == null) {\n this.stateMap.columnElementPools?.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c)),\n );\n } else {\n this.stateMap.columnElementPools\n .get(c)\n ?.updateElementFactory(() => this.createColumnCellInstance(c));\n }\n });\n }\n\n private iterateColumns(\n f: (\n column: HTMLVertexSceneTreeTableColumnElement,\n pool: ElementPool,\n index: number,\n ) => void,\n ): void {\n this.columnElements.forEach((column, i) => {\n const pool = this.stateMap.columnElementPools?.get(column);\n if (pool != null) {\n f(column, pool, i);\n } else {\n throw new Error('Cannot find pool for column');\n }\n });\n }\n\n private ensureDividerTemplateDefined(): void {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]',\n ) as HTMLTemplateElement;\n if (template == null) {\n const defaultDividerTemplate = document.createElement('template');\n defaultDividerTemplate.slot = 'divider';\n defaultDividerTemplate.innerHTML = `\n <vertex-scene-tree-table-resize-divider slot=\"divider\">\n </vertex-scene-tree-table-resize-divider>\n `;\n this.hostEl.appendChild(defaultDividerTemplate);\n }\n }\n\n private createHeaderInstance(\n column: HTMLVertexSceneTreeTableColumnElement,\n ): InstancedTemplate<HTMLElement> | undefined {\n const template = column.querySelector(\n 'template[slot=\"header\"]',\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n }\n }\n\n private createDividerInstance(): InstancedTemplate<HTMLElement> {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]',\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Table is missing divider template element');\n }\n }\n\n private createColumnCellInstance(\n column: HTMLVertexSceneTreeTableColumnElement,\n ): InstancedTemplate<HTMLElement> {\n const template = column.querySelector(\n 'template:not([slot=\"header\"])',\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Column is missing cell template element');\n }\n }\n\n private computeCellHeight = async (): Promise<void> => {\n if (this.isComputingCellHeight && this.columnElements.length > 0) {\n const dummyData: LoadedRow = {\n index: 0,\n node: {\n id: { hex: '' },\n name: 'Dummy row',\n expanded: false,\n selected: false,\n visible: false,\n partiallyVisible: false,\n isLeaf: false,\n depth: 0,\n columnsList: [],\n filterHit: false,\n hasGeometry: false,\n phantom: false,\n endItem: false,\n },\n metadata: {},\n data: {},\n };\n const { bindings, element } = this.createColumnCellInstance(\n this.columnElements[0],\n );\n bindings.bind(dummyData);\n element.style.visibility = 'hidden';\n\n this.columnElements[0]?.appendChild(element);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n if (typeof (element as any).componentOnReady === 'function') {\n await (element as any).componentOnReady();\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n let height = element.clientHeight;\n if (height === 0) {\n height = await new Promise((resolve) => {\n setTimeout(() => resolve(element.getBoundingClientRect().height), 5);\n });\n }\n\n this.rowHeight = height ?? this.rowHeight;\n element.remove();\n this.isComputingCellHeight = this.rowHeight === 0;\n }\n };\n\n private computeHeaderHeight = (): void => {\n if (this.stateMap.headerHeight == null) {\n this.stateMap.headerHeight =\n this.headerElement?.getBoundingClientRect().height;\n this.hostEl.style.setProperty(\n '--header-height',\n `${this.stateMap.headerHeight}px`,\n );\n }\n };\n\n private computeColumnGridLayout = (): void => {\n if (this.stateMap.columnWidths.length === 0) {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100,\n );\n }\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n if (this.stateMap.columnWidthPercentages.length === 0) {\n this.stateMap.columnWidthPercentages = this.columnElements.map(\n (c) => (c.initialWidth ?? 100) / layoutWidth,\n );\n }\n }\n\n /**\n * This layout uses `1fr` instead of the final column width to\n * allow the final column to shrink when a scrollbar appears.\n *\n * This flex behavior is not desired for the header and divider\n * elements since they are not scrollable, and `columnGridFixedLayout`\n * should be used instead.\n */\n this.columnGridLayout = `${this.stateMap.columnWidths\n .slice(0, -1)\n .reduce((res, w) => `${res} ${w}px`, '')} 1fr`;\n\n this.columnGridFixedLayout = `${this.stateMap.columnWidths.reduce(\n (res, w) => `${res} ${w}px`,\n '',\n )}`;\n };\n\n private bindHeaderData = (): void => {\n if (this.stateMap.headerInstances == null) {\n this.stateMap.headerInstances = this.columnElements\n .map((c, i) => {\n const instance = this.createHeaderInstance(c);\n\n if (instance != null) {\n instance.element.style.paddingRight =\n i === this.columnElements.length - 1\n ? `0`\n : `var(--scene-tree-table-column-gap)`;\n instance.element.slot = 'header';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n }\n\n return instance;\n })\n .filter((i) => i != null) as Array<InstancedTemplate<HTMLElement>>;\n }\n\n if (this.stateMap.headerDividerInstances == null) {\n this.stateMap.headerDividerInstances = this.columnElements\n .slice(0, -1)\n .map((_, i) => {\n const instance = this.createDividerInstance();\n\n instance.element.slot = 'divider';\n instance.element.style.position = 'absolute';\n instance.element.style.right = '0';\n instance.element.style.pointerEvents = 'auto';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n\n return instance;\n });\n }\n };\n\n private rebindHeaderData = (): void => {\n this.removeDividerDragListeners();\n\n this.stateMap.headerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerDividerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerInstances = undefined;\n this.stateMap.headerDividerInstances = undefined;\n\n this.bindHeaderData();\n this.addDividerDragListeners();\n };\n\n private addDividerDragListeners(): void {\n this.stateMap.headerDividerListeners =\n this.stateMap.headerDividerInstances?.map((d, i) => {\n const listener = this.createDividerPointerDownHandler(i);\n\n d.element.addEventListener('pointerdown', listener);\n\n return listener;\n });\n }\n\n private removeDividerDragListeners(): void {\n if (this.stateMap.headerDividerListeners != null) {\n const listeners = this.stateMap.headerDividerListeners;\n\n this.stateMap.headerDividerInstances?.forEach((d, i) => {\n const listener = listeners[i];\n if (listener != null) {\n d.element.removeEventListener('pointerdown', listener);\n }\n });\n this.stateMap.headerDividerListeners = undefined;\n }\n }\n\n private createDividerPointerDownHandler = (\n index: number,\n ): ((event: PointerEvent) => void) => {\n return (event: PointerEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n\n this.lastDividerPointerPosition = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY),\n );\n this.resizingColumnIndex = index;\n this.stateMap.headerDividerInstances?.[index]?.element.classList.add(\n 'dragging',\n );\n\n window.addEventListener('pointermove', this.handleDividerPointerMove);\n window.addEventListener('pointerup', this.handleDividerPointerUp);\n };\n };\n\n private handleDividerPointerMove = (event: PointerEvent): void => {\n const current = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY),\n );\n\n if (\n this.lastDividerPointerPosition != null &&\n this.resizingColumnIndex != null\n ) {\n const resizingIndex = this.resizingColumnIndex;\n const diff = Point.subtract(this.lastDividerPointerPosition, current);\n\n if (Math.abs(diff.x) >= 1 && this.isValidResize(diff, resizingIndex)) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex ? w - diff.x : w,\n );\n\n if (resizingIndex + 1 < this.stateMap.columnWidths.length) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex + 1 ? w + diff.x : w,\n );\n }\n\n this.lastDividerPointerPosition = current;\n this.computeColumnGridLayout();\n }\n }\n };\n\n private handleDividerPointerUp = (): void => {\n if (this.resizingColumnIndex != null) {\n this.stateMap.headerDividerInstances?.[\n this.resizingColumnIndex\n ]?.element.classList.remove('dragging');\n }\n this.lastDividerPointerPosition = undefined;\n this.resizingColumnIndex = undefined;\n\n this.recomputeColumnPercentages();\n this.recomputeColumnWidths();\n\n window.removeEventListener('pointermove', this.handleDividerPointerMove);\n window.removeEventListener('pointerup', this.handleDividerPointerUp);\n };\n\n private isValidResize = (diff: Point.Point, index: number): boolean => {\n const currentColumn = this.columnElements[index];\n const nextColumn = this.columnElements[index + 1];\n const currentWidth = this.stateMap.columnWidths[index];\n const nextWidth = this.stateMap.columnWidths[index + 1];\n const currentMinWidth = currentColumn.minWidth ?? 0;\n const currentMaxWidth = currentColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n const nextMinWidth = nextColumn.minWidth ?? 0;\n const nextMaxWidth = nextColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n\n const currentIsValid =\n currentWidth - diff.x > currentMinWidth &&\n currentWidth - diff.x < currentMaxWidth;\n const nextIsValid =\n nextColumn != null\n ? nextWidth + diff.x > nextMinWidth && nextWidth + diff.x < nextMaxWidth\n : true;\n\n return currentIsValid && nextIsValid;\n };\n\n private handleScrollChanged = async (event: Event): Promise<void> => {\n this.isScrolling = true;\n\n this.scrollTimer = restartTimeout(() => {\n this.isScrolling = false;\n }, this.scrollTimer);\n\n this.scrollOffset = (event.target as HTMLElement).scrollTop;\n await this.computeAndUpdateViewportRows();\n };\n\n private getViewportRows(startIndex: number, endIndex: number): Row[] {\n const rows = this.rows.slice(startIndex, endIndex + 1);\n return rows.map((row) => (row != null ? this.populateRowData(row) : row));\n }\n\n private populateRowData(row: Row): Row {\n if (this.rowData != null && row != null) {\n const data = this.rowData?.(row) || {};\n return { ...row, data };\n } else {\n return row;\n }\n }\n\n private getLayoutHeight(): number | undefined {\n if (this.layoutHeight == null && this.tableElement != null) {\n this.layoutHeight = getSceneTreeViewportHeight(this.tableElement);\n }\n return this.layoutHeight;\n }\n\n private getLayoutWidth(): number | undefined {\n if (this.layoutWidth == null) {\n const computedWidth = getSceneTreeTableViewportWidth(this.hostEl);\n if (computedWidth > 0) {\n this.layoutWidth = computedWidth;\n }\n }\n return this.layoutWidth;\n }\n\n private clearLayoutHeight(): void {\n this.layoutHeight = undefined;\n }\n\n private clearLayoutWidth(): void {\n this.layoutWidth = undefined;\n }\n}\n",":host {\n /**\n * @prop --scene-tree-toolbar-content-gap: A CSS length that specifies the\n * horizontal gap between slots.\n */\n --scene-tree-toolbar-content-gap: 8px;\n\n display: flex;\n padding: 0.5rem;\n}\n\n.content {\n display: flex;\n align-items: center;\n}\n\n.content-primary {\n width: 100%;\n}\n\n::slotted(:not(:first-child)) {\n margin-left: var(--scene-tree-toolbar-content-gap);\n}\n","import { Component, h, Host } from '@stencil/core';\n\n/**\n * @slot The primary content that will be placed in the center of the toolbar\n * and stretch to container's available width.\n * @slot before - Content that is placed before the primary content.\n * @slot after - Content that is placed after the primary content.\n */\n@Component({\n tag: 'vertex-scene-tree-toolbar',\n styleUrl: 'scene-tree-toolbar.css',\n shadow: true,\n})\nexport class SceneTreeToolbar {\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"content\">\n <slot name=\"before\" />\n </div>\n <div class=\"content content-primary\">\n <slot />\n </div>\n <div class=\"content\">\n <slot name=\"after\" />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-ipyYHvea.js","sources":["src/lib/keyBinding.ts","src/lib/walk-mode/controller.ts","src/lib/walk-mode/model.ts"],"sourcesContent":["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"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-ipyYHvea.js","sources":["src/lib/keyBinding.ts","src/lib/walk-mode/controller.ts","src/lib/walk-mode/model.ts"],"sourcesContent":["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"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{o as e}from"./p-CDM7zNn0.js";import{d as t}from"./p-CPk-nchx.js";import"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{o as e}from"./p-CDM7zNn0.js";import{d as t}from"./p-CPk-nchx.js";import"./p-BhKTTmpL.js";import"./p-BAhfr1Nx.js";const s=500;const r={durationMs:s};const n={throttleFrameDelivery:true,adaptiveRendering:true,logWsMessages:false,logFrameRate:false,letterboxFrames:false,grpcUseStreamingWebSocketTransport:true};const o={finePointerThreshold:1,coarsePointerThreshold:3,interactionDelay:75,useMinimumPerspectiveZoomDistance:true,mouseWheelInteractionEndDebounce:400,reverseMouseWheelDirection:false};const i={network:{apiHost:"https://platform.platprod.vertexvis.io",renderingHost:"wss://stream.platprod.vertexvis.io",sceneTreeHost:"https://scene-trees.platprod.vertexvis.io",sceneViewHost:"https://scenes.platprod.vertexvis.io"},flags:n,events:t,animation:r,interactions:o,EXPERIMENTAL_frameDelivery:{},EXPERIMENTAL_adaptiveRendering:{},EXPERIMENTAL_qualityOfService:{},EXPERIMENTAL_annotationPollingIntervalInMs:undefined};const a={...i,network:{apiHost:"https://platform.platdev.vertexvis.io",renderingHost:"wss://stream.platdev.vertexvis.io",sceneTreeHost:"https://scene-trees.platdev.vertexvis.io",sceneViewHost:"https://scenes.platdev.vertexvis.io"}};const p={...i,network:{apiHost:"https://platform.platstaging.vertexvis.io",renderingHost:"wss://stream.platstaging.vertexvis.io",sceneTreeHost:"https://scene-trees.platstaging.vertexvis.io",sceneViewHost:"https://scenes.platstaging.vertexvis.io"}};function c(e){switch(e){case"platdev":return a;case"platstaging":return p;default:return i}}function l(e="platprod",t){const s=v(e,t);return u(d(s))}function v(t="platprod",s){if(typeof s==="string"){s=JSON.parse(s)}const r=c(t);if(s==null){return r}else{return e.defaults({...s},r)}}function d(e){const t=e.network.apiHost.trim();const s=e.network.renderingHost.trim();const r=e.network.sceneTreeHost.trim();const n=e.network.sceneViewHost.trim();return{...e,network:{...e.network,apiHost:t,renderingHost:s,sceneTreeHost:r,sceneViewHost:n}}}function u(e){h(e.network,"apiHost","https://");h(e.network,"renderingHost","wss://");h(e.network,"sceneTreeHost","https://");h(e.network,"sceneViewHost","https://");return e}function h(e,t,s){if(!e[t].startsWith(s)){throw new Error(`Invalid ${t} "${e[t]}" specified. The URL must start with the ${s} scheme.`)}}export{l as p};
|
|
5
|
+
//# sourceMappingURL=p-kMZA0v7I.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-Ce1j43tF.js","sources":["src/lib/types/animation.ts","src/lib/types/flags.ts","src/lib/types/interactions.ts","src/lib/config.ts"],"sourcesContent":["const DEFAULT_ANIMATION_DURATION = 500;\n\nexport interface Animation {\n milliseconds: number;\n}\n\nexport function create(data: Partial<Animation> = {}): Animation {\n return {\n milliseconds: data.milliseconds || DEFAULT_ANIMATION_DURATION,\n };\n}\n\nexport interface AnimationConfig {\n durationMs: number;\n}\n\nexport const defaultAnimationConfig: AnimationConfig = {\n durationMs: DEFAULT_ANIMATION_DURATION,\n};\n","import { Objects } from '@vertexvis/utils';\n\ntype Flag =\n /**\n * Enables or disables a throttling of image delivery based on detected\n * network conditions.\n */\n | 'throttleFrameDelivery'\n\n /**\n * Enables or disables automatic quality adjustments of rendered frames to\n * improve the performance of delivering frames to the client.\n */\n | 'adaptiveRendering'\n\n /**\n * Enables or disables logging of WS message payloads.\n */\n | 'logWsMessages'\n\n /**\n * Toggles the logging of frame rates.\n */\n | 'logFrameRate'\n\n /**\n * Enables or disables the letterboxing of frames when the host dimensions\n * are larger than the supported maximum image size (1080p). By default\n * this option is disabled, and images will be scaled up to match the host.\n */\n | 'letterboxFrames'\n\n /**\n * Enables or disables the use of the `grpc.WebsocketTransport` for streaming\n * RPCs. By default this transport will be used, and streaming messages will\n * be sent over WebSocket.\n */\n | 'grpcUseStreamingWebSocketTransport';\n\n/**\n * A set of experimental features that can be enabled through the viewer's\n * config.\n */\nexport type Flags = { [K in Flag]: boolean };\n\nexport const defaultFlags: Flags = {\n throttleFrameDelivery: true,\n adaptiveRendering: true,\n logWsMessages: false,\n logFrameRate: false,\n letterboxFrames: false,\n grpcUseStreamingWebSocketTransport: true,\n};\n\nexport function createFlags(\n features: Partial<Flags>,\n fallbacks: Partial<Flags> = defaultFlags,\n): Flags {\n return Objects.defaults(features, fallbacks, defaultFlags);\n}\n","export interface InteractionConfig {\n /**\n * The amount of movement required with a fine (mouse, trackpad, etc) pointer\n * input before an interaction is considered a movement that will update the\n * camera. This threshold is always scaled up based on the device's pixel ratio.\n */\n finePointerThreshold: number;\n\n /**\n * The amount of movement required with a coarse (touch, stylus, etc) pointer\n * input before an interaction is considered a movement that will update the\n * camera. This threshold is always scaled up based on the device's pixel ratio.\n */\n coarsePointerThreshold: number;\n\n /**\n * The amount of time before a movement is considered an interaction and will\n * update the camera.\n */\n interactionDelay: number;\n\n /**\n * Whether the `zoomCameraToPoint` interaction through the `InteractionApiPerspective`\n * will enforce a minimum distance when moving the camera. When set, the camera will be\n * able to move through geometry under the cursor, rather than being restricted by the\n * point under the cursor. Defaults to `true`.\n */\n useMinimumPerspectiveZoomDistance: boolean;\n\n /**\n * The amount of time before a wheel interaction is ended.\n *\n * This delay is used to support successive sets of mouse events, and not cause\n * abrupt and unexpected ending of mouse interactions during natural pauses in mouse\n * wheel usage.\n */\n mouseWheelInteractionEndDebounce: number;\n\n /**\n * Reverses which direction the mouse wheel considers positive or negative\n * for zoom interactions.\n */\n reverseMouseWheelDirection: boolean;\n}\n\nexport const defaultInteractionConfig: InteractionConfig = {\n finePointerThreshold: 1,\n coarsePointerThreshold: 3,\n interactionDelay: 75,\n useMinimumPerspectiveZoomDistance: true,\n mouseWheelInteractionEndDebounce: 400,\n reverseMouseWheelDirection: false,\n};\n","import { FrameDeliverySettings } from '@vertexvis/stream-api';\nimport {\n AdaptiveRenderingSettings,\n QualityOfServiceSettings,\n} from '@vertexvis/stream-api';\nimport { DeepPartial, Objects } from '@vertexvis/utils';\n\nimport { Environment } from './environment';\nimport { Animation, Events, Flags, Interactions } from './types';\n\ninterface NetworkConfig {\n apiHost: string;\n renderingHost: string;\n sceneTreeHost: string;\n sceneViewHost: string;\n}\n\nexport interface Config {\n network: NetworkConfig;\n flags: Flags.Flags;\n events: Events.EventConfig;\n animation: Animation.AnimationConfig;\n interactions: Interactions.InteractionConfig;\n EXPERIMENTAL_frameDelivery: Omit<\n FrameDeliverySettings,\n 'rateLimitingEnabled'\n >;\n EXPERIMENTAL_adaptiveRendering: Omit<AdaptiveRenderingSettings, 'enabled'>;\n EXPERIMENTAL_qualityOfService: QualityOfServiceSettings;\n EXPERIMENTAL_annotationPollingIntervalInMs: number | undefined;\n}\n\nexport type PartialConfig = DeepPartial<Config>;\n\nexport type ConfigProvider = () => Config;\n\nexport type InteractionConfigProvider = () => Interactions.InteractionConfig;\n\nconst config: Config = {\n network: {\n apiHost: 'https://platform.platprod.vertexvis.io',\n renderingHost: 'wss://stream.platprod.vertexvis.io',\n sceneTreeHost: 'https://scene-trees.platprod.vertexvis.io',\n sceneViewHost: 'https://scenes.platprod.vertexvis.io',\n },\n flags: Flags.defaultFlags,\n events: Events.defaultEventConfig,\n animation: Animation.defaultAnimationConfig,\n interactions: Interactions.defaultInteractionConfig,\n EXPERIMENTAL_frameDelivery: {},\n EXPERIMENTAL_adaptiveRendering: {},\n EXPERIMENTAL_qualityOfService: {},\n EXPERIMENTAL_annotationPollingIntervalInMs: undefined,\n};\n\nconst platdevConfig: Config = {\n ...config,\n network: {\n apiHost: 'https://platform.platdev.vertexvis.io',\n renderingHost: 'wss://stream.platdev.vertexvis.io',\n sceneTreeHost: 'https://scene-trees.platdev.vertexvis.io',\n sceneViewHost: 'https://scenes.platdev.vertexvis.io',\n },\n};\n\nconst platstagingConfig: Config = {\n ...config,\n network: {\n apiHost: 'https://platform.platstaging.vertexvis.io',\n renderingHost: 'wss://stream.platstaging.vertexvis.io',\n sceneTreeHost: 'https://scene-trees.platstaging.vertexvis.io',\n sceneViewHost: 'https://scenes.platstaging.vertexvis.io',\n },\n};\n\nfunction getEnvironmentConfig(environment: Environment): Config {\n switch (environment) {\n case 'platdev':\n return platdevConfig;\n case 'platstaging':\n return platstagingConfig;\n default:\n return config;\n }\n}\n\nexport function parseAndValidateConfig(\n environment: Environment = 'platprod',\n config?: string | PartialConfig,\n): Config {\n const parsed = parseConfig(environment, config);\n\n return validateConfig(sanitizeConfig(parsed));\n}\n\nexport function parseConfig(\n environment: Environment = 'platprod',\n config?: string | PartialConfig,\n): Config {\n if (typeof config === 'string') {\n config = JSON.parse(config) as PartialConfig;\n }\n\n const envConfig = getEnvironmentConfig(environment);\n\n if (config == null) {\n return envConfig;\n } else {\n return Objects.defaults({ ...config }, envConfig);\n }\n}\n\nexport function sanitizeConfig(config: Config): Config {\n const sanitizedApiHost = config.network.apiHost.trim();\n const sanitizedRenderingHost = config.network.renderingHost.trim();\n const sanitizedSceneTreeHost = config.network.sceneTreeHost.trim();\n const sanitizedSceneViewHost = config.network.sceneViewHost.trim();\n\n return {\n ...config,\n network: {\n ...config.network,\n apiHost: sanitizedApiHost,\n renderingHost: sanitizedRenderingHost,\n sceneTreeHost: sanitizedSceneTreeHost,\n sceneViewHost: sanitizedSceneViewHost,\n },\n };\n}\n\nexport function validateConfig(config: Config): Config {\n validateUrlScheme(config.network, 'apiHost', 'https://');\n validateUrlScheme(config.network, 'renderingHost', 'wss://');\n validateUrlScheme(config.network, 'sceneTreeHost', 'https://');\n validateUrlScheme(config.network, 'sceneViewHost', 'https://');\n\n return config;\n}\n\nfunction validateUrlScheme(\n networkConfig: NetworkConfig,\n field: keyof NetworkConfig,\n expectedScheme: string,\n): void {\n if (!networkConfig[field].startsWith(expectedScheme)) {\n throw new Error(\n `Invalid ${field} \"${networkConfig[field]}\" specified. The URL must start with the ${expectedScheme} scheme.`,\n );\n }\n}\n"],"names":["Flags.defaultFlags","Events.defaultEventConfig","Animation.defaultAnimationConfig","Interactions.defaultInteractionConfig","Objects"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-kMZA0v7I.js","sources":["src/lib/types/animation.ts","src/lib/types/flags.ts","src/lib/types/interactions.ts","src/lib/config.ts"],"sourcesContent":["const DEFAULT_ANIMATION_DURATION = 500;\n\nexport interface Animation {\n milliseconds: number;\n}\n\nexport function create(data: Partial<Animation> = {}): Animation {\n return {\n milliseconds: data.milliseconds || DEFAULT_ANIMATION_DURATION,\n };\n}\n\nexport interface AnimationConfig {\n durationMs: number;\n}\n\nexport const defaultAnimationConfig: AnimationConfig = {\n durationMs: DEFAULT_ANIMATION_DURATION,\n};\n","import { Objects } from '@vertexvis/utils';\n\ntype Flag =\n /**\n * Enables or disables a throttling of image delivery based on detected\n * network conditions.\n */\n | 'throttleFrameDelivery'\n\n /**\n * Enables or disables automatic quality adjustments of rendered frames to\n * improve the performance of delivering frames to the client.\n */\n | 'adaptiveRendering'\n\n /**\n * Enables or disables logging of WS message payloads.\n */\n | 'logWsMessages'\n\n /**\n * Toggles the logging of frame rates.\n */\n | 'logFrameRate'\n\n /**\n * Enables or disables the letterboxing of frames when the host dimensions\n * are larger than the supported maximum image size (1080p). By default\n * this option is disabled, and images will be scaled up to match the host.\n */\n | 'letterboxFrames'\n\n /**\n * Enables or disables the use of the `grpc.WebsocketTransport` for streaming\n * RPCs. By default this transport will be used, and streaming messages will\n * be sent over WebSocket.\n */\n | 'grpcUseStreamingWebSocketTransport';\n\n/**\n * A set of experimental features that can be enabled through the viewer's\n * config.\n */\nexport type Flags = { [K in Flag]: boolean };\n\nexport const defaultFlags: Flags = {\n throttleFrameDelivery: true,\n adaptiveRendering: true,\n logWsMessages: false,\n logFrameRate: false,\n letterboxFrames: false,\n grpcUseStreamingWebSocketTransport: true,\n};\n\nexport function createFlags(\n features: Partial<Flags>,\n fallbacks: Partial<Flags> = defaultFlags,\n): Flags {\n return Objects.defaults(features, fallbacks, defaultFlags);\n}\n","export interface InteractionConfig {\n /**\n * The amount of movement required with a fine (mouse, trackpad, etc) pointer\n * input before an interaction is considered a movement that will update the\n * camera. This threshold is always scaled up based on the device's pixel ratio.\n */\n finePointerThreshold: number;\n\n /**\n * The amount of movement required with a coarse (touch, stylus, etc) pointer\n * input before an interaction is considered a movement that will update the\n * camera. This threshold is always scaled up based on the device's pixel ratio.\n */\n coarsePointerThreshold: number;\n\n /**\n * The amount of time before a movement is considered an interaction and will\n * update the camera.\n */\n interactionDelay: number;\n\n /**\n * Whether the `zoomCameraToPoint` interaction through the `InteractionApiPerspective`\n * will enforce a minimum distance when moving the camera. When set, the camera will be\n * able to move through geometry under the cursor, rather than being restricted by the\n * point under the cursor. Defaults to `true`.\n */\n useMinimumPerspectiveZoomDistance: boolean;\n\n /**\n * The amount of time before a wheel interaction is ended.\n *\n * This delay is used to support successive sets of mouse events, and not cause\n * abrupt and unexpected ending of mouse interactions during natural pauses in mouse\n * wheel usage.\n */\n mouseWheelInteractionEndDebounce: number;\n\n /**\n * Reverses which direction the mouse wheel considers positive or negative\n * for zoom interactions.\n */\n reverseMouseWheelDirection: boolean;\n}\n\nexport const defaultInteractionConfig: InteractionConfig = {\n finePointerThreshold: 1,\n coarsePointerThreshold: 3,\n interactionDelay: 75,\n useMinimumPerspectiveZoomDistance: true,\n mouseWheelInteractionEndDebounce: 400,\n reverseMouseWheelDirection: false,\n};\n","import { FrameDeliverySettings } from '@vertexvis/stream-api';\nimport {\n AdaptiveRenderingSettings,\n QualityOfServiceSettings,\n} from '@vertexvis/stream-api';\nimport { DeepPartial, Objects } from '@vertexvis/utils';\n\nimport { Environment } from './environment';\nimport { Animation, Events, Flags, Interactions } from './types';\n\ninterface NetworkConfig {\n apiHost: string;\n renderingHost: string;\n sceneTreeHost: string;\n sceneViewHost: string;\n}\n\nexport interface Config {\n network: NetworkConfig;\n flags: Flags.Flags;\n events: Events.EventConfig;\n animation: Animation.AnimationConfig;\n interactions: Interactions.InteractionConfig;\n EXPERIMENTAL_frameDelivery: Omit<\n FrameDeliverySettings,\n 'rateLimitingEnabled'\n >;\n EXPERIMENTAL_adaptiveRendering: Omit<AdaptiveRenderingSettings, 'enabled'>;\n EXPERIMENTAL_qualityOfService: QualityOfServiceSettings;\n EXPERIMENTAL_annotationPollingIntervalInMs: number | undefined;\n}\n\nexport type PartialConfig = DeepPartial<Config>;\n\nexport type ConfigProvider = () => Config;\n\nexport type InteractionConfigProvider = () => Interactions.InteractionConfig;\n\nconst config: Config = {\n network: {\n apiHost: 'https://platform.platprod.vertexvis.io',\n renderingHost: 'wss://stream.platprod.vertexvis.io',\n sceneTreeHost: 'https://scene-trees.platprod.vertexvis.io',\n sceneViewHost: 'https://scenes.platprod.vertexvis.io',\n },\n flags: Flags.defaultFlags,\n events: Events.defaultEventConfig,\n animation: Animation.defaultAnimationConfig,\n interactions: Interactions.defaultInteractionConfig,\n EXPERIMENTAL_frameDelivery: {},\n EXPERIMENTAL_adaptiveRendering: {},\n EXPERIMENTAL_qualityOfService: {},\n EXPERIMENTAL_annotationPollingIntervalInMs: undefined,\n};\n\nconst platdevConfig: Config = {\n ...config,\n network: {\n apiHost: 'https://platform.platdev.vertexvis.io',\n renderingHost: 'wss://stream.platdev.vertexvis.io',\n sceneTreeHost: 'https://scene-trees.platdev.vertexvis.io',\n sceneViewHost: 'https://scenes.platdev.vertexvis.io',\n },\n};\n\nconst platstagingConfig: Config = {\n ...config,\n network: {\n apiHost: 'https://platform.platstaging.vertexvis.io',\n renderingHost: 'wss://stream.platstaging.vertexvis.io',\n sceneTreeHost: 'https://scene-trees.platstaging.vertexvis.io',\n sceneViewHost: 'https://scenes.platstaging.vertexvis.io',\n },\n};\n\nfunction getEnvironmentConfig(environment: Environment): Config {\n switch (environment) {\n case 'platdev':\n return platdevConfig;\n case 'platstaging':\n return platstagingConfig;\n default:\n return config;\n }\n}\n\nexport function parseAndValidateConfig(\n environment: Environment = 'platprod',\n config?: string | PartialConfig,\n): Config {\n const parsed = parseConfig(environment, config);\n\n return validateConfig(sanitizeConfig(parsed));\n}\n\nexport function parseConfig(\n environment: Environment = 'platprod',\n config?: string | PartialConfig,\n): Config {\n if (typeof config === 'string') {\n config = JSON.parse(config) as PartialConfig;\n }\n\n const envConfig = getEnvironmentConfig(environment);\n\n if (config == null) {\n return envConfig;\n } else {\n return Objects.defaults({ ...config }, envConfig);\n }\n}\n\nexport function sanitizeConfig(config: Config): Config {\n const sanitizedApiHost = config.network.apiHost.trim();\n const sanitizedRenderingHost = config.network.renderingHost.trim();\n const sanitizedSceneTreeHost = config.network.sceneTreeHost.trim();\n const sanitizedSceneViewHost = config.network.sceneViewHost.trim();\n\n return {\n ...config,\n network: {\n ...config.network,\n apiHost: sanitizedApiHost,\n renderingHost: sanitizedRenderingHost,\n sceneTreeHost: sanitizedSceneTreeHost,\n sceneViewHost: sanitizedSceneViewHost,\n },\n };\n}\n\nexport function validateConfig(config: Config): Config {\n validateUrlScheme(config.network, 'apiHost', 'https://');\n validateUrlScheme(config.network, 'renderingHost', 'wss://');\n validateUrlScheme(config.network, 'sceneTreeHost', 'https://');\n validateUrlScheme(config.network, 'sceneViewHost', 'https://');\n\n return config;\n}\n\nfunction validateUrlScheme(\n networkConfig: NetworkConfig,\n field: keyof NetworkConfig,\n expectedScheme: string,\n): void {\n if (!networkConfig[field].startsWith(expectedScheme)) {\n throw new Error(\n `Invalid ${field} \"${networkConfig[field]}\" specified. The URL must start with the ${expectedScheme} scheme.`,\n );\n }\n}\n"],"names":["Flags.defaultFlags","Events.defaultEventConfig","Animation.defaultAnimationConfig","Interactions.defaultInteractionConfig","Objects"],"mappings":"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"}
|