@vertexvis/viewer 1.1.1-testing.3 → 1.1.1-testing.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.template.md +14 -8
- package/dist/cjs/{bundle-07I6_WqC.js → bundle-BCS0nA91.js} +28 -25
- package/dist/cjs/bundle-BCS0nA91.js.map +1 -0
- package/dist/cjs/{config-CepHuwRF.js → config-OELTgslY.js} +3 -3
- package/dist/cjs/{config-CepHuwRF.js.map → config-OELTgslY.js.map} +1 -1
- package/dist/cjs/{controller-Dklbe0Y6.js → controller-DvE3p6ta.js} +3 -3
- package/dist/cjs/{controller-Dklbe0Y6.js.map → controller-DvE3p6ta.js.map} +1 -1
- package/dist/cjs/{dom-Dlu6-7PF.js → dom-BuQSLPWr.js} +3 -3
- package/dist/cjs/{dom-Dlu6-7PF.js.map → dom-BuQSLPWr.js.map} +1 -1
- package/dist/cjs/{entities-BdWnb6KI.js → entities-rj-TEPKc.js} +4 -4
- package/dist/cjs/{entities-BdWnb6KI.js.map → entities-rj-TEPKc.js.map} +1 -1
- package/dist/cjs/{geometry_pb-BISQT2vx.js → geometry_pb-asn2mNvW.js} +3 -3
- package/dist/cjs/{geometry_pb-BISQT2vx.js.map → geometry_pb-asn2mNvW.js.map} +1 -1
- package/dist/cjs/grpc-D5Apx_zz.js.map +1 -1
- package/dist/cjs/index.cjs.js +13 -13
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{markup-C-qyTwID.js → markup-Du4uVRo4.js} +3 -3
- package/dist/cjs/{markup-C-qyTwID.js.map → markup-Du4uVRo4.js.map} +1 -1
- package/dist/cjs/{model-Dy5FvjIA.js → model-BC6acIWJ.js} +3 -3
- package/dist/cjs/{model-Dy5FvjIA.js.map → model-BC6acIWJ.js.map} +1 -1
- package/dist/cjs/model-Bw4h8wNt.js.map +1 -1
- package/dist/cjs/{model-k5VBFN6C.js → model-DqxeakCS.js} +3 -3
- package/dist/cjs/{model-k5VBFN6C.js.map → model-DqxeakCS.js.map} +1 -1
- package/dist/cjs/{multiElementInteractionHandler-Bqpg2wVT.js → multiElementInteractionHandler-Bdeo6FYp.js} +6 -5
- package/dist/cjs/multiElementInteractionHandler-Bdeo6FYp.js.map +1 -0
- package/dist/cjs/{overlays-BujVkBnG.js → overlays-DASFbMSp.js} +3 -3
- package/dist/cjs/{overlays-BujVkBnG.js.map → overlays-DASFbMSp.js.map} +1 -1
- package/dist/cjs/{queries-GhYmoomu.js → queries-e19TP_oF.js} +5 -5
- package/dist/cjs/queries-e19TP_oF.js.map +1 -0
- package/dist/cjs/{regl-component-CB004H91.js → regl-component-DjVaO3t3.js} +6 -6
- package/dist/cjs/{regl-component-CB004H91.js.map → regl-component-DjVaO3t3.js.map} +1 -1
- package/dist/cjs/{representation_pb-CHCm5o1e.js → representation_pb-BVBPrHLf.js} +3 -3
- package/dist/cjs/{representation_pb-CHCm5o1e.js.map → representation_pb-BVBPrHLf.js.map} +1 -1
- package/dist/cjs/{results-BpfUIwa8.js → results-CU9Ctm2K.js} +3 -3
- package/dist/cjs/{results-BpfUIwa8.js.map → results-CU9Ctm2K.js.map} +1 -1
- package/dist/cjs/{streamAttributes-CJOD7AxG.js → streamAttributes-M3UUIO3l.js} +118 -95
- package/dist/cjs/streamAttributes-M3UUIO3l.js.map +1 -0
- package/dist/cjs/{util-smaTO4bk.js → util-gX3IGslq.js} +3 -3
- package/dist/cjs/{util-smaTO4bk.js.map → util-gX3IGslq.js.map} +1 -1
- package/dist/cjs/{utils-BsXO-wLi.js → utils-D5TGpFAV.js} +3 -3
- package/dist/cjs/utils-D5TGpFAV.js.map +1 -0
- package/dist/cjs/{utils-DY6afhh8.js → utils-opS9hsaU.js} +3 -3
- package/dist/cjs/{utils-DY6afhh8.js.map → utils-opS9hsaU.js.map} +1 -1
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +2 -2
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +3 -3
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-column.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +3 -3
- package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-annotation-callout.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-button_3.cjs.entry.js +6 -1
- package/dist/cjs/vertex-viewer-button_3.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +8 -8
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +7 -7
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +7 -7
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +9 -8
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-spinner.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +7 -7
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +8 -8
- package/dist/cjs/viewer.cjs.js +1 -1
- package/dist/cjs/{viewport-B70DgDZj.js → viewport-BDbB9o9T.js} +3 -3
- package/dist/cjs/{viewport-B70DgDZj.js.map → viewport-BDbB9o9T.js.map} +1 -1
- package/dist/collection/components/scene-tree/scene-tree.css +2 -3
- package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
- package/dist/collection/components/scene-tree-notification-banner/scene-tree-notification-banner.css +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.css +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.js +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.css +10 -10
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
- package/dist/collection/components/scene-tree-table-column/scene-tree-table-column.css +0 -1
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.css +3 -3
- package/dist/collection/components/viewer-annotation-callout/viewer-annotation-callout.css +3 -4
- package/dist/collection/components/viewer-box-query-tool/types.js.map +1 -1
- package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.css +9 -7
- package/dist/collection/components/viewer-button/viewer-button.js +32 -1
- package/dist/collection/components/viewer-button/viewer-button.js.map +1 -1
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.css +2 -2
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.js +1 -1
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.js.map +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.css +2 -2
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.css +12 -11
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.css +21 -8
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js +4 -3
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
- package/dist/collection/components/viewer-pin-label-line/viewer-pin-label-line.css +5 -4
- package/dist/collection/components/viewer-spinner/viewer-spinner.css +2 -2
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.css +1 -2
- package/dist/collection/lib/grpc.js.map +1 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js +2 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/scenes/scene.js.map +1 -1
- package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
- package/dist/collection/lib/stream/state.js.map +1 -1
- package/dist/collection/lib/types/loadableResource.js.map +1 -1
- package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
- package/dist/collection/lib/walk-mode/model.js.map +1 -1
- package/dist/collection/workers/png-decoder-pool.js +4 -3
- package/dist/collection/workers/png-decoder-pool.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/p-2UsvOTHJ.js +5 -0
- package/dist/components/p-2UsvOTHJ.js.map +1 -0
- package/dist/components/{p-CZgX-9yo.js → p-5bk1mHRt.js} +2 -2
- package/dist/components/{p-DRGCkSEK.js → p-B8530k7R.js} +2 -2
- package/dist/components/{p-garvKln8.js → p-BAuOB8M-.js} +2 -2
- package/dist/components/p-BAuOB8M-.js.map +1 -0
- package/dist/components/{p-BKQMbekH.js → p-BCuMPvZO.js} +2 -2
- package/dist/components/p-BFEV_v80.js +5 -0
- package/dist/components/p-BFEV_v80.js.map +1 -0
- package/dist/components/{p-C02XtMl4.js → p-BHyxBmg6.js} +2 -2
- package/dist/components/{p-O1_Yvjd6.js → p-BT9d9jRt.js} +2 -2
- package/dist/components/{p-oDn1DcWj.js → p-BZDn1Vuv.js} +2 -2
- package/dist/components/{p-VEJB73Ei.js → p-Bdf4AcJ2.js} +2 -2
- package/dist/components/p-BgzjmANj.js +5 -0
- package/dist/components/p-BgzjmANj.js.map +1 -0
- package/dist/components/p-BjvjKoy7.js +5 -0
- package/dist/components/p-BjvjKoy7.js.map +1 -0
- package/dist/components/p-Bwtyddca.js +5 -0
- package/dist/components/p-Bwtyddca.js.map +1 -0
- package/dist/components/{p-CMdP8O-G.js → p-Bx42CNGV.js} +2 -2
- package/dist/components/{p-CelQDFR0.js → p-C12jtCFb.js} +2 -2
- package/dist/components/p-C86HMDzi.js +5 -0
- package/dist/components/p-C86HMDzi.js.map +1 -0
- package/dist/components/{p-Dzs4u_ZY.js → p-CABws4i9.js} +2 -2
- package/dist/components/p-CIuxJYJL.js.map +1 -1
- package/dist/components/{p-BqeEZXPn.js → p-CPROw2BU.js} +2 -2
- package/dist/components/p-CSVgoQU8.js +5 -0
- package/dist/components/p-CSVgoQU8.js.map +1 -0
- package/dist/components/{p-DnVcQAR9.js → p-CTi-0-dI.js} +2 -2
- package/dist/components/{p-EG7pMA2M.js → p-CeZe0Qql.js} +2 -2
- package/dist/components/p-CioaIHsi.js.map +1 -1
- package/dist/components/{p-Due5EmBt.js → p-Clyxptbp.js} +2 -2
- package/dist/components/{p-taOlygmc.js → p-Cs2aiMUK.js} +2 -2
- package/dist/components/p-Cs2aiMUK.js.map +1 -0
- package/dist/components/p-DUo-H-nW.js +5 -0
- package/dist/components/p-DUo-H-nW.js.map +1 -0
- package/dist/components/{p-MnZadXO8.js → p-D_h07qsA.js} +2 -2
- package/dist/components/{p-DCTZZ5Rd.js → p-DjQ6RXWP.js} +2 -2
- package/dist/components/p-DxuSiXYg.js.map +1 -1
- package/dist/components/{p-CxzyM08j.js → p-DyL2wWm6.js} +2 -2
- package/dist/components/{p-avWSFTeP.js → p-JvS9LLoO.js} +2 -2
- package/dist/components/{p-CfTvpqud.js → p-KidjtXKE.js} +2 -2
- package/dist/{viewer/p-7m7Vr5V7.js → components/p-Ng27jBsS.js} +2 -2
- package/dist/components/p-Ng27jBsS.js.map +1 -0
- package/dist/components/{p-BC777sCK.js → p-UJR-ixsy.js} +2 -2
- package/dist/components/{p-Ib4vgh2t.js → p-UrT4ZJv3.js} +2 -2
- package/dist/components/{p-Ib4vgh2t.js.map → p-UrT4ZJv3.js.map} +1 -1
- package/dist/components/{p-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
- package/dist/components/{p-CNprIkKd.js → p-rDr0x5Z7.js} +2 -2
- package/dist/components/vertex-scene-tree-search.js +1 -1
- package/dist/components/vertex-scene-tree-table-cell.js +1 -1
- package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
- package/dist/components/vertex-scene-tree-table-column.js.map +1 -1
- package/dist/components/vertex-scene-tree-table-layout.js +1 -1
- package/dist/components/vertex-scene-tree.js +1 -1
- package/dist/components/vertex-scene-tree.js.map +1 -1
- package/dist/components/vertex-viewer-annotation-callout.js.map +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js.map +1 -1
- package/dist/components/vertex-viewer-button.js +1 -1
- package/dist/components/vertex-viewer-default-toolbar.js +1 -1
- package/dist/components/vertex-viewer-default-toolbar.js.map +1 -1
- package/dist/components/vertex-viewer-dom-element.js +1 -1
- package/dist/components/vertex-viewer-dom-group.js +1 -1
- package/dist/components/vertex-viewer-dom-renderer.js +1 -1
- package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
- package/dist/components/vertex-viewer-markup-arrow.js +1 -1
- package/dist/components/vertex-viewer-markup-circle.js +1 -1
- package/dist/components/vertex-viewer-markup-freeform.js +1 -1
- package/dist/components/vertex-viewer-markup-tool.js +1 -1
- package/dist/components/vertex-viewer-markup-tool.js.map +1 -1
- package/dist/components/vertex-viewer-markup.js +1 -1
- package/dist/components/vertex-viewer-markup.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-details.js +1 -1
- package/dist/components/vertex-viewer-measurement-distance.js +1 -1
- package/dist/components/vertex-viewer-measurement-line.js +1 -1
- package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
- package/dist/components/vertex-viewer-measurement-precise.js +1 -1
- package/dist/components/vertex-viewer-pin-group.js +1 -1
- package/dist/components/vertex-viewer-pin-label-line.js +1 -1
- package/dist/components/vertex-viewer-pin-label.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +1 -1
- package/dist/components/vertex-viewer-teleport-tool.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
- package/dist/components/vertex-viewer-view-cube.js +1 -1
- package/dist/components/vertex-viewer-walk-mode-tool.js +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/esm/{bundle-CZZALKHT.js → bundle-2UsvOTHJ.js} +28 -25
- package/dist/esm/bundle-2UsvOTHJ.js.map +1 -0
- package/dist/esm/{config-CyaUTJEG.js → config-Cqrcty7U.js} +3 -3
- package/dist/esm/{config-CyaUTJEG.js.map → config-Cqrcty7U.js.map} +1 -1
- package/dist/esm/{controller-ByBd8r3O.js → controller-BPECXXfj.js} +3 -3
- package/dist/esm/{controller-ByBd8r3O.js.map → controller-BPECXXfj.js.map} +1 -1
- package/dist/esm/{dom-Bbf2HAst.js → dom-DaP9SiyY.js} +3 -3
- package/dist/esm/{dom-Bbf2HAst.js.map → dom-DaP9SiyY.js.map} +1 -1
- package/dist/esm/{entities-DriL3zBC.js → entities-CawBZH7i.js} +4 -4
- package/dist/esm/{entities-DriL3zBC.js.map → entities-CawBZH7i.js.map} +1 -1
- package/dist/esm/{geometry_pb-BEB8SExe.js → geometry_pb-COdZQiRi.js} +3 -3
- package/dist/esm/{geometry_pb-BEB8SExe.js.map → geometry_pb-COdZQiRi.js.map} +1 -1
- package/dist/esm/grpc-hWL8wFvk.js.map +1 -1
- package/dist/esm/index.js +13 -13
- package/dist/esm/index.mjs +13 -13
- package/dist/esm/loader.js +1 -1
- package/dist/esm/loader.mjs +1 -1
- package/dist/esm/{markup-y96-uR-l.js → markup-B58g75Hr.js} +3 -3
- package/dist/esm/{markup-y96-uR-l.js.map → markup-B58g75Hr.js.map} +1 -1
- package/dist/esm/{model-BJQo0DxL.js → model-B5KuXEsl.js} +3 -3
- package/dist/esm/{model-BJQo0DxL.js.map → model-B5KuXEsl.js.map} +1 -1
- package/dist/esm/model-BHVr1tU0.js.map +1 -1
- package/dist/esm/{model-CTdG73h9.js → model-Dc6T63-k.js} +3 -3
- package/dist/esm/{model-CTdG73h9.js.map → model-Dc6T63-k.js.map} +1 -1
- package/dist/esm/{multiElementInteractionHandler-C45E8VzE.js → multiElementInteractionHandler-3tE3OPpw.js} +6 -5
- package/dist/esm/multiElementInteractionHandler-3tE3OPpw.js.map +1 -0
- package/dist/esm/{overlays-DmcRtaSn.js → overlays-BwIqsqLW.js} +3 -3
- package/dist/esm/{overlays-DmcRtaSn.js.map → overlays-BwIqsqLW.js.map} +1 -1
- package/dist/esm/{queries-DWjy-LsV.js → queries-B4XotYyr.js} +5 -5
- package/dist/esm/queries-B4XotYyr.js.map +1 -0
- package/dist/esm/{regl-component-zzdsBise.js → regl-component-B1_h3_s8.js} +6 -6
- package/dist/esm/{regl-component-zzdsBise.js.map → regl-component-B1_h3_s8.js.map} +1 -1
- package/dist/esm/{representation_pb-CQdJxiGO.js → representation_pb-C4MJfZMo.js} +3 -3
- package/dist/esm/{representation_pb-CQdJxiGO.js.map → representation_pb-C4MJfZMo.js.map} +1 -1
- package/dist/esm/{results-ClIgKssN.js → results-De9arm7M.js} +3 -3
- package/dist/esm/{results-ClIgKssN.js.map → results-De9arm7M.js.map} +1 -1
- package/dist/esm/{streamAttributes-CTs61PCl.js → streamAttributes-BW9JzMeG.js} +117 -94
- package/dist/esm/streamAttributes-BW9JzMeG.js.map +1 -0
- package/dist/esm/{util-DUjEw5Kh.js → util-CMPFqnEv.js} +3 -3
- package/dist/esm/{util-DUjEw5Kh.js.map → util-CMPFqnEv.js.map} +1 -1
- package/dist/esm/{utils-DOjHP1wA.js → utils-B1mSYmAK.js} +3 -3
- package/dist/esm/{utils-DOjHP1wA.js.map → utils-B1mSYmAK.js.map} +1 -1
- package/dist/esm/{utils-DJ5FvINs.js → utils-c-mcLgsj.js} +3 -3
- package/dist/esm/utils-c-mcLgsj.js.map +1 -0
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +2 -2
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +3 -3
- package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-column.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +3 -3
- package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-annotation-callout.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-box-query-tool.entry.js +4 -4
- package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-button_3.entry.js +6 -1
- package/dist/esm/vertex-viewer-button_3.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-default-toolbar.entry.js +2 -2
- package/dist/esm/vertex-viewer-default-toolbar.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +5 -5
- package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +5 -5
- package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +3 -3
- package/dist/esm/vertex-viewer-markup-tool.entry.js +4 -4
- package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup.entry.js +3 -3
- package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-details.entry.js +3 -3
- package/dist/esm/vertex-viewer-measurement-distance.entry.js +8 -8
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +5 -5
- package/dist/esm/vertex-viewer-measurement-precise.entry.js +7 -7
- package/dist/esm/vertex-viewer-pin-group.entry.js +7 -7
- package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-label_2.entry.js +9 -8
- package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-tool.entry.js +3 -3
- package/dist/esm/vertex-viewer-spinner.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-teleport-tool.entry.js +2 -2
- package/dist/esm/vertex-viewer-transform-widget.entry.js +7 -7
- package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-view-cube.entry.js +2 -2
- package/dist/esm/vertex-viewer-walk-mode-tool.entry.js +1 -1
- package/dist/esm/vertex-viewer.entry.js +8 -8
- package/dist/esm/viewer.js +1 -1
- package/dist/esm/{viewport-D90kzsD7.js → viewport-CHtidaFL.js} +3 -3
- package/dist/esm/{viewport-D90kzsD7.js.map → viewport-CHtidaFL.js.map} +1 -1
- package/dist/types/components/viewer-button/viewer-button.d.ts +5 -0
- package/dist/types/components.d.ts +14 -1
- package/dist/types/lib/walk-mode/model.d.ts +10 -10
- package/dist/types/regl-shape.d.ts +1 -5
- package/dist/types/workers/png-decoder-pool.d.ts +0 -1
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/{p-12a673f0.entry.js → p-1506f9a2.entry.js} +2 -2
- package/dist/viewer/p-1506f9a2.entry.js.map +1 -0
- package/dist/viewer/{p-78f422af.entry.js → p-287e0670.entry.js} +2 -2
- package/dist/viewer/{p-78f422af.entry.js.map → p-287e0670.entry.js.map} +1 -1
- package/dist/viewer/{p-7b4eec65.entry.js → p-293d8f3f.entry.js} +2 -2
- package/dist/viewer/p-2UsvOTHJ.js +5 -0
- package/dist/viewer/p-2UsvOTHJ.js.map +1 -0
- package/dist/viewer/{p-510fd2e1.entry.js → p-2d2fa147.entry.js} +2 -2
- package/dist/viewer/{p-a108a305.entry.js → p-2faddbf8.entry.js} +2 -2
- package/dist/viewer/{p-e3981cf8.entry.js → p-36349a80.entry.js} +2 -2
- package/dist/viewer/p-36349a80.entry.js.map +1 -0
- package/dist/viewer/{p-aa0359e0.entry.js → p-3c5dd716.entry.js} +2 -2
- package/dist/viewer/p-44395076.entry.js +5 -0
- package/dist/viewer/p-44395076.entry.js.map +1 -0
- package/dist/viewer/{p-fe434552.entry.js → p-45cc095e.entry.js} +2 -2
- package/dist/viewer/p-504e77a7.entry.js +5 -0
- package/dist/viewer/{p-c2c3579f.entry.js.map → p-504e77a7.entry.js.map} +1 -1
- package/dist/viewer/{p-71c03352.entry.js → p-53f6cc59.entry.js} +2 -2
- package/dist/viewer/{p-56e39cff.entry.js → p-83683307.entry.js} +2 -2
- package/dist/viewer/{p-91fca24b.entry.js → p-93311f46.entry.js} +2 -2
- package/dist/viewer/{p-BIR7Lfxx.js → p-BEOO-Ypv.js} +2 -2
- package/dist/viewer/{p-BIR7Lfxx.js.map → p-BEOO-Ypv.js.map} +1 -1
- package/dist/viewer/{p-C6YtUG51.js → p-BJGbLthH.js} +2 -2
- package/dist/viewer/{p-C6YtUG51.js.map → p-BJGbLthH.js.map} +1 -1
- package/dist/viewer/{p-O1_Yvjd6.js → p-BT9d9jRt.js} +2 -2
- package/dist/viewer/{p-O1_Yvjd6.js.map → p-BT9d9jRt.js.map} +1 -1
- package/dist/viewer/{p-VEJB73Ei.js → p-Bdf4AcJ2.js} +2 -2
- package/dist/viewer/{p-VEJB73Ei.js.map → p-Bdf4AcJ2.js.map} +1 -1
- package/dist/viewer/{p-C-huOg09.js → p-Br21pGVj.js} +2 -2
- package/dist/viewer/{p-C-huOg09.js.map → p-Br21pGVj.js.map} +1 -1
- package/dist/viewer/{p-Ce1j43tF.js → p-Bw_ryWU0.js} +2 -2
- package/dist/viewer/{p-Ce1j43tF.js.map → p-Bw_ryWU0.js.map} +1 -1
- package/dist/viewer/{p-CelQDFR0.js → p-C12jtCFb.js} +2 -2
- package/dist/viewer/{p-CelQDFR0.js.map → p-C12jtCFb.js.map} +1 -1
- package/dist/viewer/{p-B-J4CqZy.js → p-C4_1Jc7H.js} +2 -2
- package/dist/viewer/{p-B-J4CqZy.js.map → p-C4_1Jc7H.js.map} +1 -1
- package/dist/viewer/p-CEDqc5sS.js +5 -0
- package/dist/viewer/{p-BDy3SLKk.js.map → p-CEDqc5sS.js.map} +1 -1
- package/dist/viewer/p-Cc3XhAoA.js +5 -0
- package/dist/viewer/p-Cc3XhAoA.js.map +1 -0
- package/dist/viewer/{p-EG7pMA2M.js → p-CeZe0Qql.js} +2 -2
- package/dist/viewer/{p-EG7pMA2M.js.map → p-CeZe0Qql.js.map} +1 -1
- package/dist/viewer/p-CioaIHsi.js.map +1 -1
- package/dist/viewer/{p-EUeCUp3y.js → p-CxBXErQ8.js} +2 -2
- package/dist/viewer/{p-EUeCUp3y.js.map → p-CxBXErQ8.js.map} +1 -1
- package/dist/viewer/{p-CIBBr-p1.js → p-D0aTA_2m.js} +2 -2
- package/dist/viewer/{p-CIBBr-p1.js.map → p-D0aTA_2m.js.map} +1 -1
- package/dist/viewer/{p-UQXG8bCI.js → p-DBfvBC5O.js} +2 -2
- package/dist/viewer/p-DBfvBC5O.js.map +1 -0
- package/dist/{components/p-QhlhRt6X.js → viewer/p-DIbJ8Ijj.js} +2 -2
- package/dist/viewer/p-DIbJ8Ijj.js.map +1 -0
- package/dist/viewer/{p-Cju1inFh.js → p-DYDhLlLS.js} +2 -2
- package/dist/viewer/p-DYDhLlLS.js.map +1 -0
- package/dist/viewer/{p-CxzyM08j.js → p-DyL2wWm6.js} +2 -2
- package/dist/viewer/{p-CxzyM08j.js.map → p-DyL2wWm6.js.map} +1 -1
- package/dist/viewer/{p-avWSFTeP.js → p-JvS9LLoO.js} +2 -2
- package/dist/viewer/{p-avWSFTeP.js.map → p-JvS9LLoO.js.map} +1 -1
- package/dist/viewer/{p-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
- package/dist/viewer/{p-mpsCUvSn.js.map → p-_qi2VkC2.js.map} +1 -1
- package/dist/viewer/{p-9312a936.entry.js → p-a94b626c.entry.js} +2 -2
- package/dist/viewer/p-b5cc83a4.entry.js.map +1 -1
- package/dist/viewer/{p-fc7d9b2b.entry.js → p-c531ca97.entry.js} +2 -2
- package/dist/viewer/{p-fc7d9b2b.entry.js.map → p-c531ca97.entry.js.map} +1 -1
- package/dist/viewer/p-c9dee5c4.entry.js +5 -0
- package/dist/viewer/p-c9dee5c4.entry.js.map +1 -0
- package/dist/viewer/p-ce711ae0.entry.js +5 -0
- package/dist/viewer/p-ce711ae0.entry.js.map +1 -0
- package/dist/viewer/{p-82ed4346.entry.js → p-ced98004.entry.js} +2 -2
- package/dist/viewer/p-d357d235.entry.js.map +1 -1
- package/dist/viewer/p-dcb6ddfe.entry.js +5 -0
- package/dist/viewer/p-dcb6ddfe.entry.js.map +1 -0
- package/dist/viewer/p-e98db875.entry.js.map +1 -1
- package/dist/viewer/{p-c2454523.entry.js → p-ea45c3e9.entry.js} +2 -2
- package/dist/viewer/p-ebd9dd99.entry.js +5 -0
- package/dist/viewer/p-ebd9dd99.entry.js.map +1 -0
- package/dist/viewer/{p-a893a299.entry.js → p-ecd594f2.entry.js} +2 -2
- package/dist/viewer/{p-03a531d9.entry.js → p-ef9437ca.entry.js} +2 -2
- package/dist/viewer/p-fec5a15d.entry.js +5 -0
- package/dist/viewer/p-fec5a15d.entry.js.map +1 -0
- package/dist/viewer/p-ipyYHvea.js.map +1 -1
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +10 -10
- package/readme.md +14 -8
- package/dist/cjs/bundle-07I6_WqC.js.map +0 -1
- package/dist/cjs/multiElementInteractionHandler-Bqpg2wVT.js.map +0 -1
- package/dist/cjs/queries-GhYmoomu.js.map +0 -1
- package/dist/cjs/streamAttributes-CJOD7AxG.js.map +0 -1
- package/dist/cjs/utils-BsXO-wLi.js.map +0 -1
- package/dist/components/p-B4sO9HdX.js +0 -5
- package/dist/components/p-B4sO9HdX.js.map +0 -1
- package/dist/components/p-C--Voxln.js +0 -5
- package/dist/components/p-C--Voxln.js.map +0 -1
- package/dist/components/p-CZZALKHT.js +0 -5
- package/dist/components/p-CZZALKHT.js.map +0 -1
- package/dist/components/p-Cn0vKqIN.js +0 -5
- package/dist/components/p-Cn0vKqIN.js.map +0 -1
- package/dist/components/p-DH341c7b.js +0 -5
- package/dist/components/p-DH341c7b.js.map +0 -1
- package/dist/components/p-DjrtwKcK.js +0 -5
- package/dist/components/p-DjrtwKcK.js.map +0 -1
- package/dist/components/p-Dmc49hX3.js +0 -5
- package/dist/components/p-Dmc49hX3.js.map +0 -1
- package/dist/components/p-QhlhRt6X.js.map +0 -1
- package/dist/components/p-Y8W_BXUk.js +0 -5
- package/dist/components/p-Y8W_BXUk.js.map +0 -1
- package/dist/components/p-garvKln8.js.map +0 -1
- package/dist/components/p-taOlygmc.js.map +0 -1
- package/dist/esm/bundle-CZZALKHT.js.map +0 -1
- package/dist/esm/multiElementInteractionHandler-C45E8VzE.js.map +0 -1
- package/dist/esm/queries-DWjy-LsV.js.map +0 -1
- package/dist/esm/streamAttributes-CTs61PCl.js.map +0 -1
- package/dist/esm/utils-DJ5FvINs.js.map +0 -1
- package/dist/viewer/p-02384d83.entry.js +0 -5
- package/dist/viewer/p-02384d83.entry.js.map +0 -1
- package/dist/viewer/p-12a673f0.entry.js.map +0 -1
- package/dist/viewer/p-49578ec9.entry.js +0 -5
- package/dist/viewer/p-49578ec9.entry.js.map +0 -1
- package/dist/viewer/p-4c223366.entry.js +0 -5
- package/dist/viewer/p-4c223366.entry.js.map +0 -1
- package/dist/viewer/p-7m7Vr5V7.js.map +0 -1
- package/dist/viewer/p-8774425b.entry.js +0 -5
- package/dist/viewer/p-8774425b.entry.js.map +0 -1
- package/dist/viewer/p-9c02567d.entry.js +0 -5
- package/dist/viewer/p-9c02567d.entry.js.map +0 -1
- package/dist/viewer/p-BDy3SLKk.js +0 -5
- package/dist/viewer/p-CZZALKHT.js +0 -5
- package/dist/viewer/p-CZZALKHT.js.map +0 -1
- package/dist/viewer/p-Cju1inFh.js.map +0 -1
- package/dist/viewer/p-Cr2EnhS-.js +0 -5
- package/dist/viewer/p-Cr2EnhS-.js.map +0 -1
- package/dist/viewer/p-UQXG8bCI.js.map +0 -1
- package/dist/viewer/p-c2c3579f.entry.js +0 -5
- package/dist/viewer/p-d5542b6a.entry.js +0 -5
- package/dist/viewer/p-d5542b6a.entry.js.map +0 -1
- package/dist/viewer/p-e3981cf8.entry.js.map +0 -1
- /package/dist/components/{p-CZgX-9yo.js.map → p-5bk1mHRt.js.map} +0 -0
- /package/dist/components/{p-DRGCkSEK.js.map → p-B8530k7R.js.map} +0 -0
- /package/dist/components/{p-BKQMbekH.js.map → p-BCuMPvZO.js.map} +0 -0
- /package/dist/components/{p-C02XtMl4.js.map → p-BHyxBmg6.js.map} +0 -0
- /package/dist/components/{p-O1_Yvjd6.js.map → p-BT9d9jRt.js.map} +0 -0
- /package/dist/components/{p-oDn1DcWj.js.map → p-BZDn1Vuv.js.map} +0 -0
- /package/dist/components/{p-VEJB73Ei.js.map → p-Bdf4AcJ2.js.map} +0 -0
- /package/dist/components/{p-CMdP8O-G.js.map → p-Bx42CNGV.js.map} +0 -0
- /package/dist/components/{p-CelQDFR0.js.map → p-C12jtCFb.js.map} +0 -0
- /package/dist/components/{p-Dzs4u_ZY.js.map → p-CABws4i9.js.map} +0 -0
- /package/dist/components/{p-BqeEZXPn.js.map → p-CPROw2BU.js.map} +0 -0
- /package/dist/components/{p-DnVcQAR9.js.map → p-CTi-0-dI.js.map} +0 -0
- /package/dist/components/{p-EG7pMA2M.js.map → p-CeZe0Qql.js.map} +0 -0
- /package/dist/components/{p-Due5EmBt.js.map → p-Clyxptbp.js.map} +0 -0
- /package/dist/components/{p-MnZadXO8.js.map → p-D_h07qsA.js.map} +0 -0
- /package/dist/components/{p-DCTZZ5Rd.js.map → p-DjQ6RXWP.js.map} +0 -0
- /package/dist/components/{p-CxzyM08j.js.map → p-DyL2wWm6.js.map} +0 -0
- /package/dist/components/{p-avWSFTeP.js.map → p-JvS9LLoO.js.map} +0 -0
- /package/dist/components/{p-CfTvpqud.js.map → p-KidjtXKE.js.map} +0 -0
- /package/dist/components/{p-BC777sCK.js.map → p-UJR-ixsy.js.map} +0 -0
- /package/dist/components/{p-mpsCUvSn.js.map → p-_qi2VkC2.js.map} +0 -0
- /package/dist/components/{p-CNprIkKd.js.map → p-rDr0x5Z7.js.map} +0 -0
- /package/dist/viewer/{p-7b4eec65.entry.js.map → p-293d8f3f.entry.js.map} +0 -0
- /package/dist/viewer/{p-510fd2e1.entry.js.map → p-2d2fa147.entry.js.map} +0 -0
- /package/dist/viewer/{p-a108a305.entry.js.map → p-2faddbf8.entry.js.map} +0 -0
- /package/dist/viewer/{p-aa0359e0.entry.js.map → p-3c5dd716.entry.js.map} +0 -0
- /package/dist/viewer/{p-fe434552.entry.js.map → p-45cc095e.entry.js.map} +0 -0
- /package/dist/viewer/{p-71c03352.entry.js.map → p-53f6cc59.entry.js.map} +0 -0
- /package/dist/viewer/{p-56e39cff.entry.js.map → p-83683307.entry.js.map} +0 -0
- /package/dist/viewer/{p-91fca24b.entry.js.map → p-93311f46.entry.js.map} +0 -0
- /package/dist/viewer/{p-9312a936.entry.js.map → p-a94b626c.entry.js.map} +0 -0
- /package/dist/viewer/{p-82ed4346.entry.js.map → p-ced98004.entry.js.map} +0 -0
- /package/dist/viewer/{p-c2454523.entry.js.map → p-ea45c3e9.entry.js.map} +0 -0
- /package/dist/viewer/{p-a893a299.entry.js.map → p-ecd594f2.entry.js.map} +0 -0
- /package/dist/viewer/{p-03a531d9.entry.js.map → p-ef9437ca.entry.js.map} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{h as t,r as e,c as i,H as s,a as n}from"./p-CCVkga9Q.js";import{v as r,a,p as o,l as h}from"./p-CZZALKHT.js";import{m as l}from"./p-DxMDDbmh.js";import{a as c,g as d}from"./p-CIBBr-p1.js";import"./p-C-huOg09.js";import"./p-BNuMPeJ8.js";import"./p-ux1ckSDN.js";import"./p-5kcpg4MZ.js";import{o as u,D as m}from"./p-Cr2EnhS-.js";import{M as v}from"./p-BY3lpCm6.js";import{M as p}from"./p-CxzyM08j.js";import{m as w}from"./p-mpsCUvSn.js";import"./p-BAhfr1Nx.js";import{V as f}from"./p-EG7pMA2M.js";import{E as g,m as b}from"./p-CDM7zNn0.js";import{g as y}from"./p-BDy3SLKk.js";import{c as C}from"./p-Dw4-tG-V.js";import"./p-CG9AChtV.js";const P=16;const E=10;function M(t){return t.getBoundingClientRect()}class x{constructor(t,e,i,s){this.stencil=t;this.depthBuffer=e;this.viewport=i;this.camera=s}hitTest(t){const e=this.viewport.transformPointToFrame(t,this.depthBuffer);if(this.stencil!=null){const i=this.viewport.transformPointToFrame(t,this.stencil);return this.stencil.hitTest(i)||this.depthBuffer.hitTest(e)}else{return this.depthBuffer.hitTest(e)}}snapToNearestPixel(t,e){if(this.stencil!=null){const i=this.viewport.transformPointToFrame(t,this.stencil);const s=this.stencil.snapToNearestPixel(i,e);return this.viewport.transformPointToViewport(s,this.stencil)}else{return t}}transformPointToWorld(t,{ignoreHitTest:e=false}={}){const i=this.pickDepthBuffer(t);if(i!=null){return this.viewport.transformPointToWorldSpace(t,i)}else if(e){return this.viewport.transformPointToWorldSpace(t,this.depthBuffer)}}pickDepthBuffer(t){if(this.stencil!=null){const e=this.viewport.transformPointToFrame(t,this.stencil);if(this.stencil.hitTest(e)){return this.stencil.depthBuffer}}const e=this.viewport.transformPointToFrame(t,this.depthBuffer);return this.depthBuffer.hitTest(e)?this.depthBuffer:undefined}}class D{constructor(t){this.model=t}newMeasurement(t,e){const i=e.hitTester().transformPointToWorld(t);return i!=null?new j(t,i,this.model):undefined}editMeasurement(t){const e=this.model.getMeasurement();if(e==null){throw new Error("Cannot edit measurement. Measurement is empty.")}return t==="start"?new I(e,this.model):new S(e,this.model)}clearIndicator(){this.model.setIndicator(undefined)}moveIndicator(t,e){const i=e.hitTester().transformPointToWorld(t);this.model.setIndicator(i);return i!=null}}class k{constructor(){this.measurementChanged=new g;this.indicatorChanged=new g}static empty(){return new k}getMeasurement(){return this.measurement}setMeasurement(t){if(this.measurement!==t){this.measurement=t;this.measurementChanged.emit(t)}}setMeasurementFromValues(t,e,i){if(t!=null&&e!=null){const s=i?B(t,e):T(t,e);this.setMeasurement(s)}else{this.setMeasurement(undefined)}}onMeasurementChanged(t){return this.measurementChanged.on(t)}getIndicator(){return this.indicator}setIndicator(t){if(this.indicator!==t){this.indicator=t;this.indicatorChanged.emit(t)}}onIndicatorChanged(t){return this.indicatorChanged.on(t)}}class j{constructor(t,e,i){this.pt=t;this.world=e;this.model=i;this.hitWorldValid=true;this.preventUpdate=false}fetchStartIfMissing(t){if(this.pendingStart==null){this.pendingStart=this.fetchStart(t)}}async fetchStart(t){const e=await t.raycaster();const i=await L(e,this.pt);if(i==null){const e=t.hitTester().transformPointToWorld(this.pt);this.hitWorld=e;this.hitWorldValid=false}else{this.hitWorld=i;this.hitWorldValid=true}}update(t,e){var i;if(!this.preventUpdate){this.fetchStartIfMissing(e);const s=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});const n=e.hitTester().hitTest(t);const r=(i=this.hitWorld)!==null&&i!==void 0?i:this.world;if(s==null){throw new Error("Cannot update new measurement interaction. End point is empty.")}else if(!this.hitWorldValid||!n){this.model.setIndicator(s);this.setMeasurement(T(r,s))}else{this.model.setIndicator(s);this.setMeasurement(B(r,s))}}}async finish(t,e){var i;this.preventUpdate=true;this.fetchStartIfMissing(e);await this.pendingStart;this.model.setIndicator(undefined);const s=await e.raycaster();const n=await L(s,t);const r=(i=this.hitWorld)!==null&&i!==void 0?i:this.world;this.preventUpdate=false;if(n==null){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});if(i==null){throw new Error("Cannot complete new measurement interaction. End point is empty.")}return this.setMeasurement(T(r,i))}else if(!this.hitWorldValid){return this.setMeasurement(T(r,n))}else{return this.setMeasurement(B(r,n))}}setMeasurement(t){this.model.setMeasurement(t);return t}}class A{constructor(t,e){this.measurement=t;this.model=e}update(t,e){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});const s=e.hitTester().hitTest(t);if(i==null){throw new Error("Cannot update new measurement interaction. End point is empty.")}else if(!s){this.model.setIndicator(i);this.setMeasurement(this.getInvalidMeasurement(i))}else{this.model.setIndicator(i);this.setMeasurement(this.getValidMeasurement(i))}}async finish(t,e){const i=await e.raycaster();const s=await L(i,t);this.model.setIndicator(undefined);if(s==null){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});if(i==null){throw new Error("Cannot complete edit measurement interaction. End point is empty.")}return this.setMeasurement(this.getInvalidMeasurement(i))}else{return this.setMeasurement(this.getValidMeasurement(s))}}setMeasurement(t){this.model.setMeasurement(t);return t}}class I extends A{constructor(t,e){super(t,e)}getInvalidMeasurement(t){return T(t,this.measurement.end)}getValidMeasurement(t){return B(t,this.measurement.end)}}class S extends A{constructor(t,e){super(t,e)}getInvalidMeasurement(t){return T(this.measurement.start,t)}getValidMeasurement(t){return B(this.measurement.start,t)}}async function L(t,e){var i;const s=await t.hitItems(e);const[n]=(i=s===null||s===void 0?void 0:s.hits)!==null&&i!==void 0?i:[];if((n===null||n===void 0?void 0:n.hitPoint)!=null){const t=u(n.hitPoint);if(b.isInvalid(t)){throw new Error(`Invalid hit response [${t.errors.join(",")}]`)}return t}else return undefined}function B(t,e){return{start:t,end:e,distance:r.distance(t,e),valid:true}}function T(t,e){return{start:t,end:e,valid:false}}const V=({startPt:e,endPt:i,centerPt:s,indicatorPt:n,distance:r,anchorLabelOffset:h,lineCapLength:l,linePointerEvents:d,hideStartAnchor:u,hideEndAnchor:m,onStartAnchorPointerDown:v,onEndAnchorPointerDown:p})=>{const w=e!=null&&i!=null?a.fromPoints(e,i):undefined;const f=w!=null&&e!=null&&h!=null?o.add(e,o.polar(-h,w)):undefined;const g=w!=null&&i!=null&&h!=null?o.add(i,o.polar(h,w)):undefined;return t("div",null,e!=null&&i!=null&&t("vertex-viewer-measurement-line",{class:C("line",{"hide-start-line-cap":u,"hide-end-line-cap":m}),start:e,end:i,capLength:l,pointerEvents:d}),!u&&e!=null&&t("div",{id:"start-anchor",class:"anchor anchor-start",style:{transform:c(e)},onPointerDown:v},t("slot",{name:"start-anchor"},t("div",{class:"anchor-placeholder"}))),!u&&f&&t("div",{class:"anchor-label anchor-label-start",style:{transform:c(f)}},t("slot",{name:"start-label"})),!m&&i!=null&&t("div",{id:"end-anchor",class:"anchor anchor-end",style:{transform:c(i)},onPointerDown:p},t("slot",{name:"end-anchor"},t("div",{class:"anchor-placeholder"}))),!m&&g&&t("div",{class:"anchor-label anchor-label-end",style:{transform:c(g)}},t("slot",{name:"end-label"})),s!=null&&t("div",{id:"label",class:"distance-label",style:{transform:c(s)}},r),n!=null&&t("div",{class:"indicator",style:{transform:c(n)}},t("slot",{name:"indicator"},t("div",{class:"indicator-placeholder"}))))};const H=()=>`:host{--viewer-measurement-distance-accent-color:var(--neutral-900);--viewer-measurement-distance-contrast-color:var(--white);--viewer-measurement-distance-invalid-accent-color:var(--red-600);--viewer-measurement-distance-invalid-contrast-color:var(--white);--viewer-measurement-distance-line-stroke-width:1.25px;--viewer-measurement-distance-line-fill-width:2px;--viewer-measurement-distance-distance-border:1px solid var(--viewer-measurement-distance-accent-color);--viewer-measurement-distance-distance-border-radius:0.25rem;--viewer-measurement-distance-distance-padding:0.375rem 0.5rem;color:var(--viewer-measurement-distance-accent-color);font-size:0.75rem;position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none}:host([invalid]:not([invalid='false'])){--viewer-measurement-distance-accent-color:var( --viewer-measurement-distance-invalid-accent-color ) !important;--viewer-measurement-distance-contrast-color:var( --viewer-measurement-distance-invalid-contrast-color ) !important}.line{--viewer-measurement-line-stroke:var( --viewer-measurement-distance-contrast-color );--viewer-measurement-line-stroke-opacity:0.75;--viewer-measurement-line-stroke-width:var( --viewer-measurement-distance-line-stroke-width );--viewer-measurement-line-fill:var( --viewer-measurement-distance-accent-color );--viewer-measurement-line-fill-width:var( --viewer-measurement-distance-line-fill-width );position:absolute;width:100%;height:100%}.anchor{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;pointer-events:auto}:host([interacting-anchor='start']) .anchor-start,:host([interacting-anchor='start']) .anchor-label-start{visibility:hidden}.hide-start-line-cap,:host([interacting-anchor='start']) .line{--viewer-measurement-line-start-cap-visibility:hidden}:host([interacting-anchor='end']) .anchor-end,:host([interacting-anchor='end']) .anchor-label-end{visibility:hidden}.hide-end-line-cap,:host([interacting-anchor='end']) .line{--viewer-measurement-line-end-cap-visibility:hidden}.anchor-label{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;pointer-events:auto}:host(:not([mode=''])){cursor:inherit}:host(:not([mode=''])) .anchor{cursor:move}:host([mode='']) .anchor{visibility:hidden}.anchor-placeholder{background:var(--viewer-measurement-distance-contrast-color);width:12px;height:12px;border-radius:50%;box-sizing:border-box}:host(:not([mode=''])) .anchor-placeholder{border:2px solid var(--viewer-measurement-distance-accent-color);background:var(--viewer-measurement-distance-contrast-color)}:host([mode='']) .distance-label{color:var(--viewer-measurement-distance-contrast-color);background:var(--viewer-measurement-distance-accent-color)}.distance-label{position:absolute;background:var(--viewer-measurement-distance-contrast-color);border:var(--viewer-measurement-distance-distance-border);border-radius:var(--viewer-measurement-distance-distance-border-radius);padding:var(--viewer-measurement-distance-distance-padding);pointer-events:auto}.indicator{position:absolute}.indicator-placeholder{background:var(--viewer-measurement-distance-accent-color);border:1px solid var(--viewer-measurement-distance-contrast-color);width:6px;height:6px;border-radius:50%;box-sizing:border-box}`;const O=3;const z=class{constructor(t){e(this,t);this.editBegin=i(this,"editBegin");this.editEnd=i(this,"editEnd");this.showAxisReferenceLines=false;this.snapDistance=P;this.units="millimeters";this.fractionalDigits=2;this.anchorLabelOffset=20;this.lineCapLength=E;this.mode="";this.interactingAnchor="none";this.invalid=false;this.measurementModel=new v;this.viewport=new f(0,0);this.interactionCount=0;this.invalidateStateCounter=0;this.stateMap={};this.measurementUnits=new m(this.units);this.model=k.empty();this.controller=new D(this.model);this.overlays=new p;this.isUserInteractingWithModel=false;this.handleFrameDrawn=()=>{this.invalidateState()};this.clearIndicator=()=>{this.controller.clearIndicator()};this.updateStartAnchor=async t=>{await this.getStencilBuffer();if(this.interactionCount===0){const e=d(t,this.elementBounds);const i=this.snapPoint(e,t);await this.updateIndicator(i)}};this.newMeasurement=t=>{if(this.interactionCount===0&&t.button===0){const e=t=>{const e=()=>{window.removeEventListener("pointerup",i);window.removeEventListener("pointermove",s)};const i=async()=>{e();t()};const s=t=>{if(t.buttons>0){e()}};window.addEventListener("pointermove",s);window.addEventListener("pointerup",i)};const i=t=>{let e=o.create(0,0);const i=i=>{const s=o.distance(e,d(i,this.elementBounds));if(s>=O){t()}};const s=()=>{window.removeEventListener("pointermove",i);window.removeEventListener("pointerup",n)};const n=()=>s();const r=t=>{e=d(t,this.elementBounds);window.addEventListener("pointermove",i);window.addEventListener("pointerup",n)};window.addEventListener("pointerdown",r);return{dispose:()=>window.removeEventListener("pointerdown",r)}};const s=()=>{const t=i((()=>{var t;this.isUserInteractingWithModel=true;(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose()}));const e=()=>{window.removeEventListener("pointermove",s);window.removeEventListener("pointerup",n);t.dispose()};const s=this.createInteractionMoveHandler();const n=async t=>{var i;if(t.button===0){if(this.isUserInteractingWithModel){this.isUserInteractingWithModel=false}else{const s=this.getHitProvider();if(s!=null){const n=d(t,this.elementBounds);const r=this.snapPoint(n,t);await((i=this.interaction)===null||i===void 0?void 0:i.finish(r,s));e();this.updateMeasurementPropsFromModel();this.endEditing()}}}};this.beginEditing("replace","end");this.newInteractionHandler={dispose:e};window.addEventListener("pointermove",s);window.addEventListener("pointerup",n)};const n=this.getHitProvider();if(n!=null){const i=d(t,this.elementBounds);const r=this.snapPoint(i,t);this.interaction=this.controller.newMeasurement(r,n);if(this.interaction!=null){e(s)}}}}}async computeElementMetrics(){var t,e,i;const s=(t=this.hostEl.shadowRoot)===null||t===void 0?void 0:t.getElementById("start-anchor");const n=(e=this.hostEl.shadowRoot)===null||e===void 0?void 0:e.getElementById("end-anchor");const r=(i=this.hostEl.shadowRoot)===null||i===void 0?void 0:i.getElementById("label");if(s!=null&&n!=null&&r!=null){return{startAnchor:s.getBoundingClientRect(),endAnchor:n.getBoundingClientRect(),label:r.getBoundingClientRect()}}else{return undefined}}connectedCallback(){this.setDepthBuffers()}disconnectedCallback(){var t,e;(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose();(e=this.newInteractionHandler)===null||e===void 0?void 0:e.dispose();this.resetDepthBuffers()}async componentWillLoad(){this.updatePropsFromJson();this.model.setMeasurementFromValues(this.start,this.end,!this.invalid);await this.getStencilBuffer();this.updateViewport();this.setDepthBuffers();await this.handleViewerChanged(this.viewer);await this.handleModeChanged();await this.computePropsAndState();this.model.onIndicatorChanged((t=>{this.indicatorPt=t}))}componentDidLoad(){const t=new ResizeObserver((()=>this.updateViewport()));t.observe(this.hostEl)}async componentWillUpdate(){await this.computePropsAndState()}render(){return t(s,{key:"58113224139c37a54bf9329ed27e6a8983d5cccd"},this.showAxisReferenceLines&&t("vertex-viewer-measurement-overlays",{key:"d2166c4a965761f472f5b3323844d82980baa29f",measurementOverlays:this.overlays,viewer:this.viewer}),this.renderMeasurement())}renderMeasurement(){const e=this.computeElementPositions();const{startPt:i,endPt:s,labelPt:n,indicatorPt:r,hideStart:a,hideEnd:o}=e;const h=this.formatDistance(this.distance);if(this.mode==="edit"||this.mode==="replace"){return t(V,{startPt:i,endPt:s,centerPt:n,indicatorPt:r,distance:h,anchorLabelOffset:this.anchorLabelOffset,lineCapLength:this.lineCapLength,hideStartAnchor:a,hideEndAnchor:o,onStartAnchorPointerDown:this.handleEditAnchor("start"),onEndAnchorPointerDown:this.handleEditAnchor("end")})}else{return t(V,{startPt:i,endPt:s,centerPt:n,indicatorPt:this.indicatorPt,distance:h,hideStartAnchor:a,hideEndAnchor:o,anchorLabelOffset:this.anchorLabelOffset,lineCapLength:this.lineCapLength,linePointerEvents:"painted"})}}async handleViewerChanged(t,e){if(e!=null){e.removeEventListener("frameDrawn",this.handleFrameDrawn);await this.removeInteractionListeners(e)}if(t!=null){t.addEventListener("frameDrawn",this.handleFrameDrawn);await this.addInteractionListeners(t)}}handleUnitsChanged(){this.measurementUnits=new m(this.units)}handleCameraChanged(){this.updateCamera()}async handleModeChanged(){var t;if(this.mode===""){(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose()}if(this.viewer!=null){await this.removeInteractionListeners(this.viewer);await this.addInteractionListeners(this.viewer)}}handleStartChanged(){this.updateInteractionModel()}handleEndChanged(){this.updateInteractionModel()}handleInvalidChanged(){this.updateInteractionModel()}async computePropsAndState(){this.updateCamera();await this.updateDepthBuffer();this.updateMeasurementPropsFromModel();this.updateOverlays()}updateOverlays(){var t;(t=this.overlay)===null||t===void 0?void 0:t.dispose();if(this.showAxisReferenceLines&&this.interactionCount===0&&!this.invalid&&this.start!=null&&this.end!=null){this.overlay=this.overlays.addDistanceVector(this.start,this.end)}}async setCursor(t){var e,i;(e=this.stateMap.hoverCursor)===null||e===void 0?void 0:e.dispose();if(!this.isUserInteractingWithModel){this.stateMap.hoverCursor=await((i=this.viewer)===null||i===void 0?void 0:i.addCursor(t))}}computeElementPositions(){if(this.mode==="replace"){return this.computeReplaceElementPositions()}else{return this.computeEditOrViewElementPositions()}}computeEditOrViewElementPositions(){const t=this.model.getMeasurement();if(this.internalCamera!=null&&t!=null){return this.computeLineElementPositions(h.create(t))}else{return{}}}computeReplaceElementPositions(){if(this.internalCamera!=null){const t=this.model.getMeasurement();const e=t!=null?this.computeLineElementPositions(h.create(t)):{};const i=this.indicatorPt!=null?{indicatorPt:this.viewport.transformWorldToViewport(this.indicatorPt,this.internalCamera.projectionViewMatrix)}:{};return{...e,...i}}else{return{}}}computeLineElementPositions(t){if(this.internalCamera!=null){return y(t,this.interactingAnchor,{viewport:this.viewport,camera:this.internalCamera})}else{return{}}}updateCamera(){var t,e;this.internalCamera=this.camera||((e=(t=this.viewer)===null||t===void 0?void 0:t.frame)===null||e===void 0?void 0:e.scene.camera)}async updateDepthBuffer(){var t,e;this.stateMap.depthBuffer=await((e=(t=this.viewer)===null||t===void 0?void 0:t.frame)===null||e===void 0?void 0:e.depthBuffer())}updateViewport(){const t=M(this.hostEl);this.viewport=new f(t.width,t.height);this.elementBounds=t}updatePropsFromJson(){var t,e;this.start=N((t=this.startJson)!==null&&t!==void 0?t:this.start);this.end=N((e=this.endJson)!==null&&e!==void 0?e:this.end)}updateInteractionModel(){this.model.setMeasurementFromValues(this.start,this.end,!this.invalid)}invalidateState(){this.invalidateStateCounter=this.invalidateStateCounter+1}async addInteractionListeners(t){const e=await t.getInteractionTarget_DEPRECATED();if(this.mode==="replace"){e.addEventListener("pointermove",this.updateStartAnchor);e.addEventListener("pointerdown",this.newMeasurement);e.addEventListener("pointerleave",this.clearIndicator)}}async removeInteractionListeners(t){const e=await t.getInteractionTarget_DEPRECATED();e.removeEventListener("pointermove",this.updateStartAnchor);e.removeEventListener("pointerdown",this.newMeasurement);e.removeEventListener("pointerleave",this.clearIndicator)}handleEditAnchor(t){if(this.mode==="edit"||this.mode==="replace"){const e=this.createInteractionMoveHandler();const i=async t=>{var s;const n=this.getHitProvider();if(n!=null){window.removeEventListener("pointermove",e);window.removeEventListener("pointerup",i);const r=d(t,this.elementBounds);const a=this.snapPoint(r,t);await((s=this.interaction)===null||s===void 0?void 0:s.finish(a,n));this.updateMeasurementPropsFromModel();this.endEditing()}};return async s=>{await this.getStencilBuffer();if(s.button===0){this.beginEditing("edit",t);this.interaction=this.controller.editMeasurement(t);window.addEventListener("pointermove",e);window.addEventListener("pointerup",i)}}}}createInteractionMoveHandler(){return async t=>{var e;const i=this.getHitProvider();if(this.elementBounds!=null&&i!=null){t.preventDefault();await this.getStencilBuffer();const s=d(t,this.elementBounds);const n=this.snapPoint(s,t);(e=this.interaction)===null||e===void 0?void 0:e.update(n,i);this.updateMeasurementPropsFromModel()}}}async getStencilBuffer(){var t;const e=await((t=this.viewer)===null||t===void 0?void 0:t.stencilBuffer.latestAfterInteraction());this.stateMap.stencil=e}snapPoint(t,e){const i=this.getHitProvider();if(i!=null&&!e.shiftKey){const e=Math.max(0,this.snapDistance);return i.hitTester().snapToNearestPixel(t,e)}return t}formatDistance(t){const e=t!=null?this.measurementUnits.convertWorldValueToReal(t):undefined;if(this.labelFormatter!=null){return this.labelFormatter(e)}else{const t=this.measurementUnits.unit.abbreviatedName;return e==null?"---":`~${e.toFixed(this.fractionalDigits)} ${t}`}}beginEditing(t,e){if(this.interactionCount===0){this.interactingAnchor=e;this.editBegin.emit({type:t,anchor:e})}this.interactionCount=this.interactionCount+1}endEditing(){if(this.interactionCount===1){const t=this.model.getMeasurement();this.interactingAnchor="none";this.updateMeasurementModel();if(t!=null){this.editEnd.emit(t)}}this.interactionCount=this.interactionCount-1}updateMeasurementModel(){this.measurementModel.clearOutcome();if(!this.invalid&&this.start!=null&&this.end!=null){this.measurementModel.setOutcome({isApproximate:true,results:[w(this.start,this.end)]})}}getHitProvider(){if(this.hitProvider==null){const t=this.getHitTester();const e=this.viewer;if(e!=null&&t!=null){return{hitTester:()=>t,raycaster:async()=>(await e.scene()).raycaster()}}}else return this.hitProvider}getHitTester(){const{stencil:t,depthBuffer:e}=this.stateMap;if(e!=null){return new x(t,e,this.viewport,this.internalCamera)}}updateMeasurementPropsFromModel(){const t=this.model.getMeasurement();this.start=t===null||t===void 0?void 0:t.start;this.end=t===null||t===void 0?void 0:t.end;this.distance=t===null||t===void 0?void 0:t.distance;this.invalid=t!=null&&!t.valid}async updateIndicator(t){var e;const i=this.getHitProvider();const s=i==null||!this.controller.moveIndicator(t,i);if(s){(e=this.stateMap.hoverCursor)===null||e===void 0?void 0:e.dispose()}else{await this.setCursor(l)}}setDepthBuffers(){if(this.mode!=null&&this.viewer!=null&&this.viewer.depthBuffers==null){this.stateMap.shouldClearDepthBuffers=true;this.viewer.depthBuffers="final"}}resetDepthBuffers(){if(this.stateMap.shouldClearDepthBuffers&&this.viewer!=null){this.viewer.depthBuffers=undefined;this.stateMap.shouldClearDepthBuffers=undefined}}get hostEl(){return n(this)}static get watchers(){return{viewer:[{handleViewerChanged:0}],units:[{handleUnitsChanged:1}],camera:[{handleCameraChanged:0}],mode:[{handleModeChanged:0}],start:[{handleStartChanged:0}],end:[{handleEndChanged:0}],invalid:[{handleInvalidChanged:0}]}}};function N(t){return typeof t==="string"?r.fromJson(t):t}z.style=H();export{z as vertex_viewer_measurement_distance};
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{h as t,r as e,c as i,H as s,a as n}from"./p-CCVkga9Q.js";import{v as r,a,p as o,l as h}from"./p-2UsvOTHJ.js";import{m as l}from"./p-DxMDDbmh.js";import{a as c,g as d}from"./p-D0aTA_2m.js";import"./p-Br21pGVj.js";import"./p-BNuMPeJ8.js";import"./p-ux1ckSDN.js";import"./p-5kcpg4MZ.js";import{o as u,D as m}from"./p-Cc3XhAoA.js";import{M as v}from"./p-BY3lpCm6.js";import{M as p}from"./p-DyL2wWm6.js";import{m as w}from"./p-_qi2VkC2.js";import"./p-BAhfr1Nx.js";import{V as f}from"./p-CeZe0Qql.js";import{E as g,m as b}from"./p-CDM7zNn0.js";import{g as y}from"./p-CEDqc5sS.js";import{c as C}from"./p-Dw4-tG-V.js";import"./p-CG9AChtV.js";const P=16;const E=10;function M(t){return t.getBoundingClientRect()}class x{constructor(t,e,i,s){this.stencil=t;this.depthBuffer=e;this.viewport=i;this.camera=s}hitTest(t){const e=this.viewport.transformPointToFrame(t,this.depthBuffer);if(this.stencil!=null){const i=this.viewport.transformPointToFrame(t,this.stencil);return this.stencil.hitTest(i)||this.depthBuffer.hitTest(e)}else{return this.depthBuffer.hitTest(e)}}snapToNearestPixel(t,e){if(this.stencil!=null){const i=this.viewport.transformPointToFrame(t,this.stencil);const s=this.stencil.snapToNearestPixel(i,e);return this.viewport.transformPointToViewport(s,this.stencil)}else{return t}}transformPointToWorld(t,{ignoreHitTest:e=false}={}){const i=this.pickDepthBuffer(t);if(i!=null){return this.viewport.transformPointToWorldSpace(t,i)}else if(e){return this.viewport.transformPointToWorldSpace(t,this.depthBuffer)}}pickDepthBuffer(t){if(this.stencil!=null){const e=this.viewport.transformPointToFrame(t,this.stencil);if(this.stencil.hitTest(e)){return this.stencil.depthBuffer}}const e=this.viewport.transformPointToFrame(t,this.depthBuffer);return this.depthBuffer.hitTest(e)?this.depthBuffer:undefined}}class D{constructor(t){this.model=t}newMeasurement(t,e){const i=e.hitTester().transformPointToWorld(t);return i!=null?new A(t,i,this.model):undefined}editMeasurement(t){const e=this.model.getMeasurement();if(e==null){throw new Error("Cannot edit measurement. Measurement is empty.")}return t==="start"?new I(e,this.model):new S(e,this.model)}clearIndicator(){this.model.setIndicator(undefined)}moveIndicator(t,e){const i=e.hitTester().transformPointToWorld(t);this.model.setIndicator(i);return i!=null}}class k{constructor(){this.measurementChanged=new g;this.indicatorChanged=new g}static empty(){return new k}getMeasurement(){return this.measurement}setMeasurement(t){if(this.measurement!==t){this.measurement=t;this.measurementChanged.emit(t)}}setMeasurementFromValues(t,e,i){if(t!=null&&e!=null){const s=i?V(t,e):T(t,e);this.setMeasurement(s)}else{this.setMeasurement(undefined)}}onMeasurementChanged(t){return this.measurementChanged.on(t)}getIndicator(){return this.indicator}setIndicator(t){if(this.indicator!==t){this.indicator=t;this.indicatorChanged.emit(t)}}onIndicatorChanged(t){return this.indicatorChanged.on(t)}}class A{constructor(t,e,i){this.pt=t;this.world=e;this.model=i;this.hitWorldValid=true;this.preventUpdate=false}fetchStartIfMissing(t){if(this.pendingStart==null){this.pendingStart=this.fetchStart(t)}}async fetchStart(t){const e=await t.raycaster();const i=await L(e,this.pt);if(i==null){const e=t.hitTester().transformPointToWorld(this.pt);this.hitWorld=e;this.hitWorldValid=false}else{this.hitWorld=i;this.hitWorldValid=true}}update(t,e){var i;if(!this.preventUpdate){this.fetchStartIfMissing(e);const s=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});const n=e.hitTester().hitTest(t);const r=(i=this.hitWorld)!==null&&i!==void 0?i:this.world;if(s==null){throw new Error("Cannot update new measurement interaction. End point is empty.")}else if(!this.hitWorldValid||!n){this.model.setIndicator(s);this.setMeasurement(T(r,s))}else{this.model.setIndicator(s);this.setMeasurement(V(r,s))}}}async finish(t,e){var i;this.preventUpdate=true;this.fetchStartIfMissing(e);await this.pendingStart;this.model.setIndicator(undefined);const s=await e.raycaster();const n=await L(s,t);const r=(i=this.hitWorld)!==null&&i!==void 0?i:this.world;this.preventUpdate=false;if(n==null){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});if(i==null){throw new Error("Cannot complete new measurement interaction. End point is empty.")}return this.setMeasurement(T(r,i))}else if(!this.hitWorldValid){return this.setMeasurement(T(r,n))}else{return this.setMeasurement(V(r,n))}}setMeasurement(t){this.model.setMeasurement(t);return t}}class j{constructor(t,e){this.measurement=t;this.model=e}update(t,e){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});const s=e.hitTester().hitTest(t);if(i==null){throw new Error("Cannot update new measurement interaction. End point is empty.")}else if(!s){this.model.setIndicator(i);this.setMeasurement(this.getInvalidMeasurement(i))}else{this.model.setIndicator(i);this.setMeasurement(this.getValidMeasurement(i))}}async finish(t,e){const i=await e.raycaster();const s=await L(i,t);this.model.setIndicator(undefined);if(s==null){const i=e.hitTester().transformPointToWorld(t,{ignoreHitTest:true});if(i==null){throw new Error("Cannot complete edit measurement interaction. End point is empty.")}return this.setMeasurement(this.getInvalidMeasurement(i))}else{return this.setMeasurement(this.getValidMeasurement(s))}}setMeasurement(t){this.model.setMeasurement(t);return t}}class I extends j{constructor(t,e){super(t,e)}getInvalidMeasurement(t){return T(t,this.measurement.end)}getValidMeasurement(t){return V(t,this.measurement.end)}}class S extends j{constructor(t,e){super(t,e)}getInvalidMeasurement(t){return T(this.measurement.start,t)}getValidMeasurement(t){return V(this.measurement.start,t)}}async function L(t,e){var i;const s=await t.hitItems(e);const[n]=(i=s===null||s===void 0?void 0:s.hits)!==null&&i!==void 0?i:[];if((n===null||n===void 0?void 0:n.hitPoint)!=null){const t=u(n.hitPoint);if(b.isInvalid(t)){throw new Error(`Invalid hit response [${t.errors.join(",")}]`)}return t}else return undefined}function V(t,e){return{start:t,end:e,distance:r.distance(t,e),valid:true}}function T(t,e){return{start:t,end:e,valid:false}}const B=({startPt:e,endPt:i,centerPt:s,indicatorPt:n,distance:r,anchorLabelOffset:h,lineCapLength:l,linePointerEvents:d,hideStartAnchor:u,hideEndAnchor:m,onStartAnchorPointerDown:v,onEndAnchorPointerDown:p})=>{const w=e!=null&&i!=null?a.fromPoints(e,i):undefined;const f=w!=null&&e!=null&&h!=null?o.add(e,o.polar(-h,w)):undefined;const g=w!=null&&i!=null&&h!=null?o.add(i,o.polar(h,w)):undefined;return t("div",null,e!=null&&i!=null&&t("vertex-viewer-measurement-line",{class:C("line",{"hide-start-line-cap":u,"hide-end-line-cap":m}),start:e,end:i,capLength:l,pointerEvents:d}),!u&&e!=null&&t("div",{id:"start-anchor",class:"anchor anchor-start",style:{transform:c(e)},onPointerDown:v},t("slot",{name:"start-anchor"},t("div",{class:"anchor-placeholder"}))),!u&&f&&t("div",{class:"anchor-label anchor-label-start",style:{transform:c(f)}},t("slot",{name:"start-label"})),!m&&i!=null&&t("div",{id:"end-anchor",class:"anchor anchor-end",style:{transform:c(i)},onPointerDown:p},t("slot",{name:"end-anchor"},t("div",{class:"anchor-placeholder"}))),!m&&g&&t("div",{class:"anchor-label anchor-label-end",style:{transform:c(g)}},t("slot",{name:"end-label"})),s!=null&&t("div",{id:"label",class:"distance-label",style:{transform:c(s)}},r),n!=null&&t("div",{class:"indicator",style:{transform:c(n)}},t("slot",{name:"indicator"},t("div",{class:"indicator-placeholder"}))))};const H=()=>`:host{--viewer-measurement-distance-accent-color:var(--neutral-900);--viewer-measurement-distance-contrast-color:var(--white);--viewer-measurement-distance-invalid-accent-color:var(--red-600);--viewer-measurement-distance-invalid-contrast-color:var(--white);--viewer-measurement-distance-line-stroke-width:1.25px;--viewer-measurement-distance-line-fill-width:2px;--viewer-measurement-distance-distance-border:1px solid var(--viewer-measurement-distance-accent-color);--viewer-measurement-distance-distance-border-radius:0.25rem;--viewer-measurement-distance-distance-padding:0.375rem 0.5rem;color:var(--viewer-measurement-distance-accent-color);font-size:0.75rem;position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none}:host([invalid]:not([invalid='false'])){--viewer-measurement-distance-accent-color:var( --viewer-measurement-distance-invalid-accent-color ) !important;--viewer-measurement-distance-contrast-color:var( --viewer-measurement-distance-invalid-contrast-color ) !important}.line{--viewer-measurement-line-stroke:var( --viewer-measurement-distance-contrast-color );--viewer-measurement-line-stroke-opacity:0.75;--viewer-measurement-line-stroke-width:var( --viewer-measurement-distance-line-stroke-width );--viewer-measurement-line-fill:var( --viewer-measurement-distance-accent-color );--viewer-measurement-line-fill-width:var( --viewer-measurement-distance-line-fill-width );position:absolute;width:100%;height:100%}.anchor{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;pointer-events:auto}:host([interacting-anchor='start']) .anchor-start,:host([interacting-anchor='start']) .anchor-label-start{visibility:hidden}.hide-start-line-cap,:host([interacting-anchor='start']) .line{--viewer-measurement-line-start-cap-visibility:hidden}:host([interacting-anchor='end']) .anchor-end,:host([interacting-anchor='end']) .anchor-label-end{visibility:hidden}.hide-end-line-cap,:host([interacting-anchor='end']) .line{--viewer-measurement-line-end-cap-visibility:hidden}.anchor-label{position:absolute;border-radius:50%;transform:translate(-50%, -50%);display:block;pointer-events:auto}:host(:not([mode=''])){cursor:inherit}:host(:not([mode=''])) .anchor{cursor:move}:host([mode='']) .anchor{visibility:hidden}.anchor-placeholder{background:var(--viewer-measurement-distance-contrast-color);width:12px;height:12px;border-radius:50%;box-sizing:border-box}:host(:not([mode=''])) .anchor-placeholder{border:2px solid var(--viewer-measurement-distance-accent-color);background:var(--viewer-measurement-distance-contrast-color)}:host([mode='']) .distance-label{color:var(--viewer-measurement-distance-contrast-color);background:var(--viewer-measurement-distance-accent-color)}.distance-label{position:absolute;background:var(--viewer-measurement-distance-contrast-color);border:var(--viewer-measurement-distance-distance-border);border-radius:var(--viewer-measurement-distance-distance-border-radius);padding:var(--viewer-measurement-distance-distance-padding);pointer-events:auto}.indicator{position:absolute}.indicator-placeholder{background:var(--viewer-measurement-distance-accent-color);border:1px solid var(--viewer-measurement-distance-contrast-color);width:6px;height:6px;border-radius:50%;box-sizing:border-box}`;const O=3;const z=class{constructor(t){e(this,t);this.editBegin=i(this,"editBegin");this.editEnd=i(this,"editEnd");this.showAxisReferenceLines=false;this.snapDistance=P;this.units="millimeters";this.fractionalDigits=2;this.anchorLabelOffset=20;this.lineCapLength=E;this.mode="";this.interactingAnchor="none";this.invalid=false;this.measurementModel=new v;this.viewport=new f(0,0);this.interactionCount=0;this.invalidateStateCounter=0;this.stateMap={};this.measurementUnits=new m(this.units);this.model=k.empty();this.controller=new D(this.model);this.overlays=new p;this.isUserInteractingWithModel=false;this.handleFrameDrawn=()=>{this.invalidateState()};this.clearIndicator=()=>{this.controller.clearIndicator()};this.updateStartAnchor=async t=>{await this.getStencilBuffer();if(this.interactionCount===0){const e=d(t,this.elementBounds);const i=this.snapPoint(e,t);await this.updateIndicator(i)}};this.newMeasurement=t=>{if(this.interactionCount===0&&t.button===0){const e=t=>{const e=()=>{window.removeEventListener("pointerup",i);window.removeEventListener("pointermove",s)};const i=async()=>{e();t()};const s=t=>{if(t.buttons>0){e()}};window.addEventListener("pointermove",s);window.addEventListener("pointerup",i)};const i=t=>{let e=o.create(0,0);const i=i=>{const s=o.distance(e,d(i,this.elementBounds));if(s>=O){t()}};const s=()=>{window.removeEventListener("pointermove",i);window.removeEventListener("pointerup",n)};const n=()=>s();const r=t=>{e=d(t,this.elementBounds);window.addEventListener("pointermove",i);window.addEventListener("pointerup",n)};window.addEventListener("pointerdown",r);return{dispose:()=>window.removeEventListener("pointerdown",r)}};const s=()=>{const t=i((()=>{var t;this.isUserInteractingWithModel=true;(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose()}));const e=()=>{window.removeEventListener("pointermove",s);window.removeEventListener("pointerup",n);t.dispose()};const s=this.createInteractionMoveHandler();const n=async t=>{var i;if(t.button===0){if(this.isUserInteractingWithModel){this.isUserInteractingWithModel=false}else{const s=this.getHitProvider();if(s!=null){const n=d(t,this.elementBounds);const r=this.snapPoint(n,t);await((i=this.interaction)===null||i===void 0?void 0:i.finish(r,s));e();this.updateMeasurementPropsFromModel();this.endEditing()}}}};this.beginEditing("replace","end");this.newInteractionHandler={dispose:e};window.addEventListener("pointermove",s);window.addEventListener("pointerup",n)};const n=this.getHitProvider();if(n!=null){const i=d(t,this.elementBounds);const r=this.snapPoint(i,t);this.interaction=this.controller.newMeasurement(r,n);if(this.interaction!=null){e(s)}}}}}async computeElementMetrics(){var t,e,i;const s=(t=this.hostEl.shadowRoot)===null||t===void 0?void 0:t.getElementById("start-anchor");const n=(e=this.hostEl.shadowRoot)===null||e===void 0?void 0:e.getElementById("end-anchor");const r=(i=this.hostEl.shadowRoot)===null||i===void 0?void 0:i.getElementById("label");if(s!=null&&n!=null&&r!=null){return{startAnchor:s.getBoundingClientRect(),endAnchor:n.getBoundingClientRect(),label:r.getBoundingClientRect()}}else{return undefined}}connectedCallback(){this.setDepthBuffers()}disconnectedCallback(){var t,e;(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose();(e=this.newInteractionHandler)===null||e===void 0?void 0:e.dispose();this.resetDepthBuffers()}async componentWillLoad(){this.updatePropsFromJson();this.model.setMeasurementFromValues(this.start,this.end,!this.invalid);await this.getStencilBuffer();this.updateViewport();this.setDepthBuffers();await this.handleViewerChanged(this.viewer);await this.handleModeChanged();await this.computePropsAndState();this.model.onIndicatorChanged((t=>{this.indicatorPt=t}))}componentDidLoad(){const t=new ResizeObserver((()=>this.updateViewport()));t.observe(this.hostEl)}async componentWillUpdate(){await this.computePropsAndState()}render(){return t(s,{key:"58113224139c37a54bf9329ed27e6a8983d5cccd"},this.showAxisReferenceLines&&t("vertex-viewer-measurement-overlays",{key:"d2166c4a965761f472f5b3323844d82980baa29f",measurementOverlays:this.overlays,viewer:this.viewer}),this.renderMeasurement())}renderMeasurement(){const e=this.computeElementPositions();const{startPt:i,endPt:s,labelPt:n,indicatorPt:r,hideStart:a,hideEnd:o}=e;const h=this.formatDistance(this.distance);if(this.mode==="edit"||this.mode==="replace"){return t(B,{startPt:i,endPt:s,centerPt:n,indicatorPt:r,distance:h,anchorLabelOffset:this.anchorLabelOffset,lineCapLength:this.lineCapLength,hideStartAnchor:a,hideEndAnchor:o,onStartAnchorPointerDown:this.handleEditAnchor("start"),onEndAnchorPointerDown:this.handleEditAnchor("end")})}else{return t(B,{startPt:i,endPt:s,centerPt:n,indicatorPt:this.indicatorPt,distance:h,hideStartAnchor:a,hideEndAnchor:o,anchorLabelOffset:this.anchorLabelOffset,lineCapLength:this.lineCapLength,linePointerEvents:"painted"})}}async handleViewerChanged(t,e){if(e!=null){e.removeEventListener("frameDrawn",this.handleFrameDrawn);await this.removeInteractionListeners(e)}if(t!=null){t.addEventListener("frameDrawn",this.handleFrameDrawn);await this.addInteractionListeners(t)}}handleUnitsChanged(){this.measurementUnits=new m(this.units)}handleCameraChanged(){this.updateCamera()}async handleModeChanged(){var t;if(this.mode===""){(t=this.stateMap.hoverCursor)===null||t===void 0?void 0:t.dispose()}if(this.viewer!=null){await this.removeInteractionListeners(this.viewer);await this.addInteractionListeners(this.viewer)}}handleStartChanged(){this.updateInteractionModel()}handleEndChanged(){this.updateInteractionModel()}handleInvalidChanged(){this.updateInteractionModel()}async computePropsAndState(){this.updateCamera();await this.updateDepthBuffer();this.updateMeasurementPropsFromModel();this.updateOverlays()}updateOverlays(){var t;(t=this.overlay)===null||t===void 0?void 0:t.dispose();if(this.showAxisReferenceLines&&this.interactionCount===0&&!this.invalid&&this.start!=null&&this.end!=null){this.overlay=this.overlays.addDistanceVector(this.start,this.end)}}async setCursor(t){var e,i;(e=this.stateMap.hoverCursor)===null||e===void 0?void 0:e.dispose();if(!this.isUserInteractingWithModel){this.stateMap.hoverCursor=await((i=this.viewer)===null||i===void 0?void 0:i.addCursor(t))}}computeElementPositions(){if(this.mode==="replace"){return this.computeReplaceElementPositions()}else{return this.computeEditOrViewElementPositions()}}computeEditOrViewElementPositions(){const t=this.model.getMeasurement();if(this.internalCamera!=null&&t!=null){return this.computeLineElementPositions(h.create(t))}else{return{}}}computeReplaceElementPositions(){if(this.internalCamera!=null){const t=this.model.getMeasurement();const e=t!=null?this.computeLineElementPositions(h.create(t)):{};const i=this.indicatorPt!=null?{indicatorPt:this.viewport.transformWorldToViewport(this.indicatorPt,this.internalCamera.projectionViewMatrix)}:{};return{...e,...i}}else{return{}}}computeLineElementPositions(t){if(this.internalCamera!=null){return y(t,this.interactingAnchor,{viewport:this.viewport,camera:this.internalCamera})}else{return{}}}updateCamera(){var t,e;this.internalCamera=this.camera||((e=(t=this.viewer)===null||t===void 0?void 0:t.frame)===null||e===void 0?void 0:e.scene.camera)}async updateDepthBuffer(){var t,e;this.stateMap.depthBuffer=await((e=(t=this.viewer)===null||t===void 0?void 0:t.frame)===null||e===void 0?void 0:e.depthBuffer())}updateViewport(){const t=M(this.hostEl);this.viewport=new f(t.width,t.height);this.elementBounds=t}updatePropsFromJson(){var t,e;this.start=N((t=this.startJson)!==null&&t!==void 0?t:this.start);this.end=N((e=this.endJson)!==null&&e!==void 0?e:this.end)}updateInteractionModel(){this.model.setMeasurementFromValues(this.start,this.end,!this.invalid)}invalidateState(){this.invalidateStateCounter=this.invalidateStateCounter+1}async addInteractionListeners(t){const e=await t.getInteractionTarget_DEPRECATED();if(this.mode==="replace"){e.addEventListener("pointermove",this.updateStartAnchor);e.addEventListener("pointerdown",this.newMeasurement);e.addEventListener("pointerleave",this.clearIndicator)}}async removeInteractionListeners(t){const e=await t.getInteractionTarget_DEPRECATED();e.removeEventListener("pointermove",this.updateStartAnchor);e.removeEventListener("pointerdown",this.newMeasurement);e.removeEventListener("pointerleave",this.clearIndicator)}handleEditAnchor(t){if(this.mode==="edit"||this.mode==="replace"){const e=this.createInteractionMoveHandler();const i=async t=>{var s;const n=this.getHitProvider();if(n!=null){window.removeEventListener("pointermove",e);window.removeEventListener("pointerup",i);const r=d(t,this.elementBounds);const a=this.snapPoint(r,t);await((s=this.interaction)===null||s===void 0?void 0:s.finish(a,n));this.updateMeasurementPropsFromModel();this.endEditing()}};return async s=>{await this.getStencilBuffer();if(s.button===0){this.beginEditing("edit",t);this.interaction=this.controller.editMeasurement(t);window.addEventListener("pointermove",e);window.addEventListener("pointerup",i)}}}}createInteractionMoveHandler(){return async t=>{var e;const i=this.getHitProvider();if(this.elementBounds!=null&&i!=null){t.preventDefault();await this.getStencilBuffer();const s=d(t,this.elementBounds);const n=this.snapPoint(s,t);(e=this.interaction)===null||e===void 0?void 0:e.update(n,i);this.updateMeasurementPropsFromModel()}}}async getStencilBuffer(){var t;const e=await((t=this.viewer)===null||t===void 0?void 0:t.stencilBuffer.latestAfterInteraction());this.stateMap.stencil=e}snapPoint(t,e){const i=this.getHitProvider();if(i!=null&&!e.shiftKey){const e=Math.max(0,this.snapDistance);return i.hitTester().snapToNearestPixel(t,e)}return t}formatDistance(t){const e=t!=null?this.measurementUnits.convertWorldValueToReal(t):undefined;if(this.labelFormatter!=null){return this.labelFormatter(e)}else{const t=this.measurementUnits.unit.abbreviatedName;return e==null?"---":`~${e.toFixed(this.fractionalDigits)} ${t}`}}beginEditing(t,e){if(this.interactionCount===0){this.interactingAnchor=e;this.editBegin.emit({type:t,anchor:e})}this.interactionCount=this.interactionCount+1}endEditing(){if(this.interactionCount===1){const t=this.model.getMeasurement();this.interactingAnchor="none";this.updateMeasurementModel();if(t!=null){this.editEnd.emit(t)}}this.interactionCount=this.interactionCount-1}updateMeasurementModel(){this.measurementModel.clearOutcome();if(!this.invalid&&this.start!=null&&this.end!=null){this.measurementModel.setOutcome({isApproximate:true,results:[w(this.start,this.end)]})}}getHitProvider(){if(this.hitProvider==null){const t=this.getHitTester();const e=this.viewer;if(e!=null&&t!=null){return{hitTester:()=>t,raycaster:async()=>(await e.scene()).raycaster()}}}else return this.hitProvider}getHitTester(){const{stencil:t,depthBuffer:e}=this.stateMap;if(e!=null){return new x(t,e,this.viewport,this.internalCamera)}}updateMeasurementPropsFromModel(){const t=this.model.getMeasurement();this.start=t===null||t===void 0?void 0:t.start;this.end=t===null||t===void 0?void 0:t.end;this.distance=t===null||t===void 0?void 0:t.distance;this.invalid=t!=null&&!t.valid}async updateIndicator(t){var e;const i=this.getHitProvider();const s=i==null||!this.controller.moveIndicator(t,i);if(s){(e=this.stateMap.hoverCursor)===null||e===void 0?void 0:e.dispose()}else{await this.setCursor(l)}}setDepthBuffers(){if(this.mode!=null&&this.viewer!=null&&this.viewer.depthBuffers==null){this.stateMap.shouldClearDepthBuffers=true;this.viewer.depthBuffers="final"}}resetDepthBuffers(){if(this.stateMap.shouldClearDepthBuffers&&this.viewer!=null){this.viewer.depthBuffers=undefined;this.stateMap.shouldClearDepthBuffers=undefined}}get hostEl(){return n(this)}static get watchers(){return{viewer:[{handleViewerChanged:0}],units:[{handleUnitsChanged:1}],camera:[{handleCameraChanged:0}],mode:[{handleModeChanged:0}],start:[{handleStartChanged:0}],end:[{handleEndChanged:0}],invalid:[{handleInvalidChanged:0}]}}};function N(t){return typeof t==="string"?r.fromJson(t):t}z.style=H();export{z as vertex_viewer_measurement_distance};
|
|
5
|
+
//# sourceMappingURL=p-ea45c3e9.entry.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
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-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:"dffb9ffaba79c003552a53122a0feda46894fa2e",class:"clear-btn icon",tabIndex:-1,onMouseDown:this.handleClear,disabled:this.disabled,"aria-label":"Clear search"},i("slot",{key:"9185057767cff4df0098ea056f19bd931f6ef4c7",name:"clear-icon"},i("vertex-viewer-icon",{key:"5ec1fe210b9c82b98e609bce9da02d8f2055ec66",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-ebd9dd99.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 aria-label=\"Clear search\"\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":[]}
|