@vertexvis/viewer 1.1.1-testing.3 → 1.1.1-testing.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.template.md +14 -8
- package/dist/cjs/{bundle-07I6_WqC.js → bundle-BCS0nA91.js} +28 -25
- package/dist/cjs/bundle-BCS0nA91.js.map +1 -0
- package/dist/cjs/{config-CepHuwRF.js → config-BY0v6BSK.js} +3 -3
- package/dist/cjs/{config-CepHuwRF.js.map → config-BY0v6BSK.js.map} +1 -1
- package/dist/cjs/{controller-Dklbe0Y6.js → controller-DvE3p6ta.js} +3 -3
- package/dist/cjs/{controller-Dklbe0Y6.js.map → controller-DvE3p6ta.js.map} +1 -1
- package/dist/cjs/{dom-Dlu6-7PF.js → dom-BuQSLPWr.js} +3 -3
- package/dist/cjs/{dom-Dlu6-7PF.js.map → dom-BuQSLPWr.js.map} +1 -1
- package/dist/cjs/{entities-BdWnb6KI.js → entities-CEaa12yP.js} +4 -4
- package/dist/cjs/{entities-BdWnb6KI.js.map → entities-CEaa12yP.js.map} +1 -1
- package/dist/cjs/{geometry_pb-BISQT2vx.js → geometry_pb-EVfAEuPO.js} +3 -3
- package/dist/cjs/{geometry_pb-BISQT2vx.js.map → geometry_pb-EVfAEuPO.js.map} +1 -1
- package/dist/cjs/grpc-D5Apx_zz.js.map +1 -1
- package/dist/cjs/index.cjs.js +13 -13
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{markup-C-qyTwID.js → markup-Du4uVRo4.js} +3 -3
- package/dist/cjs/{markup-C-qyTwID.js.map → markup-Du4uVRo4.js.map} +1 -1
- package/dist/cjs/{model-Dy5FvjIA.js → model-BC6acIWJ.js} +3 -3
- package/dist/cjs/{model-Dy5FvjIA.js.map → model-BC6acIWJ.js.map} +1 -1
- package/dist/cjs/model-Bw4h8wNt.js.map +1 -1
- package/dist/cjs/{model-k5VBFN6C.js → model-DqxeakCS.js} +3 -3
- package/dist/cjs/{model-k5VBFN6C.js.map → model-DqxeakCS.js.map} +1 -1
- package/dist/cjs/{multiElementInteractionHandler-Bqpg2wVT.js → multiElementInteractionHandler-Bdeo6FYp.js} +6 -5
- package/dist/cjs/multiElementInteractionHandler-Bdeo6FYp.js.map +1 -0
- package/dist/cjs/{overlays-BujVkBnG.js → overlays-DASFbMSp.js} +3 -3
- package/dist/cjs/{overlays-BujVkBnG.js.map → overlays-DASFbMSp.js.map} +1 -1
- package/dist/cjs/{queries-GhYmoomu.js → queries-LthBzEHD.js} +5 -5
- package/dist/cjs/queries-LthBzEHD.js.map +1 -0
- package/dist/cjs/{regl-component-CB004H91.js → regl-component-B_JaaVlv.js} +6 -6
- package/dist/cjs/{regl-component-CB004H91.js.map → regl-component-B_JaaVlv.js.map} +1 -1
- package/dist/cjs/{representation_pb-CHCm5o1e.js → representation_pb-B6XR10pQ.js} +3 -3
- package/dist/cjs/{representation_pb-CHCm5o1e.js.map → representation_pb-B6XR10pQ.js.map} +1 -1
- package/dist/cjs/{results-BpfUIwa8.js → results-CU9Ctm2K.js} +3 -3
- package/dist/cjs/{results-BpfUIwa8.js.map → results-CU9Ctm2K.js.map} +1 -1
- package/dist/cjs/{streamAttributes-CJOD7AxG.js → streamAttributes-nCF7u7lv.js} +4 -4
- package/dist/cjs/{streamAttributes-CJOD7AxG.js.map → streamAttributes-nCF7u7lv.js.map} +1 -1
- package/dist/cjs/{util-smaTO4bk.js → util-gX3IGslq.js} +3 -3
- package/dist/cjs/{util-smaTO4bk.js.map → util-gX3IGslq.js.map} +1 -1
- package/dist/cjs/{utils-BsXO-wLi.js → utils-D5TGpFAV.js} +3 -3
- package/dist/cjs/utils-D5TGpFAV.js.map +1 -0
- package/dist/cjs/{utils-DY6afhh8.js → utils-opS9hsaU.js} +3 -3
- package/dist/cjs/{utils-DY6afhh8.js.map → utils-opS9hsaU.js.map} +1 -1
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +2 -2
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-column.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +3 -3
- package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-annotation-callout.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-button_3.cjs.entry.js +6 -1
- package/dist/cjs/vertex-viewer-button_3.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +8 -8
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +7 -7
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +7 -7
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +7 -6
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-spinner.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +6 -6
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +8 -8
- package/dist/cjs/viewer.cjs.js +1 -1
- package/dist/cjs/{viewport-B70DgDZj.js → viewport-BDbB9o9T.js} +3 -3
- package/dist/cjs/{viewport-B70DgDZj.js.map → viewport-BDbB9o9T.js.map} +1 -1
- package/dist/collection/components/scene-tree/scene-tree.css +2 -3
- package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
- package/dist/collection/components/scene-tree-notification-banner/scene-tree-notification-banner.css +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.css +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.css +10 -10
- package/dist/collection/components/scene-tree-table-column/scene-tree-table-column.css +0 -1
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.css +3 -3
- package/dist/collection/components/viewer-annotation-callout/viewer-annotation-callout.css +3 -4
- package/dist/collection/components/viewer-box-query-tool/types.js.map +1 -1
- package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.css +9 -7
- package/dist/collection/components/viewer-button/viewer-button.js +32 -1
- package/dist/collection/components/viewer-button/viewer-button.js.map +1 -1
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.css +2 -2
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.js +1 -1
- package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.js.map +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.css +2 -2
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.css +12 -11
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.css +21 -8
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js +2 -1
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
- package/dist/collection/components/viewer-pin-label-line/viewer-pin-label-line.css +5 -4
- package/dist/collection/components/viewer-spinner/viewer-spinner.css +2 -2
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.css +1 -2
- package/dist/collection/lib/grpc.js.map +1 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js +2 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/scenes/scene.js.map +1 -1
- package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
- package/dist/collection/lib/stream/state.js.map +1 -1
- package/dist/collection/lib/types/loadableResource.js.map +1 -1
- package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
- package/dist/collection/lib/walk-mode/model.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/p-2UsvOTHJ.js +5 -0
- package/dist/components/p-2UsvOTHJ.js.map +1 -0
- package/dist/components/{p-garvKln8.js → p-BAuOB8M-.js} +2 -2
- package/dist/components/p-BAuOB8M-.js.map +1 -0
- package/dist/components/p-BFEV_v80.js +5 -0
- package/dist/components/p-BFEV_v80.js.map +1 -0
- package/dist/components/{p-C02XtMl4.js → p-BHyxBmg6.js} +2 -2
- package/dist/components/{p-CfTvpqud.js → p-BNRm88jS.js} +2 -2
- package/dist/components/{p-O1_Yvjd6.js → p-BT9d9jRt.js} +2 -2
- package/dist/components/{p-oDn1DcWj.js → p-BZDn1Vuv.js} +2 -2
- package/dist/components/{p-VEJB73Ei.js → p-Bdf4AcJ2.js} +2 -2
- package/dist/components/{p-CelQDFR0.js → p-C12jtCFb.js} +2 -2
- package/dist/components/{p-Dzs4u_ZY.js → p-CABws4i9.js} +2 -2
- package/dist/components/p-CIuxJYJL.js.map +1 -1
- package/dist/components/{p-CZgX-9yo.js → p-COznr3CH.js} +2 -2
- package/dist/components/{p-BqeEZXPn.js → p-CPROw2BU.js} +2 -2
- package/dist/components/{p-BKQMbekH.js → p-CWcvgy8e.js} +2 -2
- package/dist/components/{p-CMdP8O-G.js → p-Ca253f0h.js} +2 -2
- package/dist/components/{p-EG7pMA2M.js → p-CeZe0Qql.js} +2 -2
- package/dist/components/p-CioaIHsi.js.map +1 -1
- package/dist/components/{p-DH341c7b.js → p-Cku0WCYo.js} +2 -2
- package/dist/components/p-Cku0WCYo.js.map +1 -0
- package/dist/components/{p-Due5EmBt.js → p-Clyxptbp.js} +2 -2
- package/dist/components/{p-taOlygmc.js → p-Cs2aiMUK.js} +2 -2
- package/dist/components/p-Cs2aiMUK.js.map +1 -0
- package/dist/components/{p-DjrtwKcK.js → p-CvEK3ZK1.js} +2 -2
- package/dist/components/p-Cxz4L6FA.js +5 -0
- package/dist/components/p-Cxz4L6FA.js.map +1 -0
- package/dist/components/{p-MnZadXO8.js → p-D1Vdomj_.js} +2 -2
- package/dist/components/{p-DRGCkSEK.js → p-D3bzgaCV.js} +2 -2
- package/dist/components/{p-DnVcQAR9.js → p-D3in41xo.js} +2 -2
- package/dist/components/p-DTwJX9HL.js +5 -0
- package/dist/components/p-DTwJX9HL.js.map +1 -0
- package/dist/components/p-DUo-H-nW.js +5 -0
- package/dist/components/p-DUo-H-nW.js.map +1 -0
- package/dist/components/{p-DCTZZ5Rd.js → p-DjQ6RXWP.js} +2 -2
- package/dist/components/p-DxuSiXYg.js.map +1 -1
- package/dist/components/{p-CxzyM08j.js → p-DyL2wWm6.js} +2 -2
- package/dist/components/{p-avWSFTeP.js → p-JvS9LLoO.js} +2 -2
- package/dist/{viewer/p-7m7Vr5V7.js → components/p-Ng27jBsS.js} +2 -2
- package/dist/components/p-Ng27jBsS.js.map +1 -0
- package/dist/components/{p-BC777sCK.js → p-UJR-ixsy.js} +2 -2
- package/dist/components/{p-Ib4vgh2t.js → p-UrT4ZJv3.js} +2 -2
- package/dist/components/{p-Ib4vgh2t.js.map → p-UrT4ZJv3.js.map} +1 -1
- package/dist/components/p-Y8W_BXUk.js.map +1 -1
- package/dist/components/{p-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
- package/dist/components/{p-CNprIkKd.js → p-rDr0x5Z7.js} +2 -2
- package/dist/components/vertex-scene-tree-table-cell.js +1 -1
- package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
- package/dist/components/vertex-scene-tree-table-column.js.map +1 -1
- package/dist/components/vertex-scene-tree-table-layout.js +1 -1
- package/dist/components/vertex-scene-tree.js +1 -1
- package/dist/components/vertex-scene-tree.js.map +1 -1
- package/dist/components/vertex-viewer-annotation-callout.js.map +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js.map +1 -1
- package/dist/components/vertex-viewer-button.js +1 -1
- package/dist/components/vertex-viewer-default-toolbar.js +1 -1
- package/dist/components/vertex-viewer-default-toolbar.js.map +1 -1
- package/dist/components/vertex-viewer-dom-element.js +1 -1
- package/dist/components/vertex-viewer-dom-group.js +1 -1
- package/dist/components/vertex-viewer-dom-renderer.js +1 -1
- package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
- package/dist/components/vertex-viewer-markup-arrow.js +1 -1
- package/dist/components/vertex-viewer-markup-circle.js +1 -1
- package/dist/components/vertex-viewer-markup-freeform.js +1 -1
- package/dist/components/vertex-viewer-markup-tool.js +1 -1
- package/dist/components/vertex-viewer-markup-tool.js.map +1 -1
- package/dist/components/vertex-viewer-markup.js +1 -1
- package/dist/components/vertex-viewer-markup.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-details.js +1 -1
- package/dist/components/vertex-viewer-measurement-distance.js +1 -1
- package/dist/components/vertex-viewer-measurement-line.js +1 -1
- package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
- package/dist/components/vertex-viewer-measurement-precise.js +1 -1
- package/dist/components/vertex-viewer-pin-group.js +1 -1
- package/dist/components/vertex-viewer-pin-label-line.js +1 -1
- package/dist/components/vertex-viewer-pin-label.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +1 -1
- package/dist/components/vertex-viewer-teleport-tool.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
- package/dist/components/vertex-viewer-view-cube.js +1 -1
- package/dist/components/vertex-viewer-walk-mode-tool.js +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/esm/{bundle-CZZALKHT.js → bundle-2UsvOTHJ.js} +28 -25
- package/dist/esm/bundle-2UsvOTHJ.js.map +1 -0
- package/dist/esm/{config-CyaUTJEG.js → config-ss9ha12b.js} +3 -3
- package/dist/esm/{config-CyaUTJEG.js.map → config-ss9ha12b.js.map} +1 -1
- package/dist/esm/{controller-ByBd8r3O.js → controller-BPECXXfj.js} +3 -3
- package/dist/esm/{controller-ByBd8r3O.js.map → controller-BPECXXfj.js.map} +1 -1
- package/dist/esm/{dom-Bbf2HAst.js → dom-DaP9SiyY.js} +3 -3
- package/dist/esm/{dom-Bbf2HAst.js.map → dom-DaP9SiyY.js.map} +1 -1
- package/dist/esm/{entities-DriL3zBC.js → entities-DEFAhYdV.js} +4 -4
- package/dist/esm/{entities-DriL3zBC.js.map → entities-DEFAhYdV.js.map} +1 -1
- package/dist/esm/{geometry_pb-BEB8SExe.js → geometry_pb-D7fM1PYG.js} +3 -3
- package/dist/esm/{geometry_pb-BEB8SExe.js.map → geometry_pb-D7fM1PYG.js.map} +1 -1
- package/dist/esm/grpc-hWL8wFvk.js.map +1 -1
- package/dist/esm/index.js +13 -13
- package/dist/esm/index.mjs +13 -13
- package/dist/esm/loader.js +1 -1
- package/dist/esm/loader.mjs +1 -1
- package/dist/esm/{markup-y96-uR-l.js → markup-B58g75Hr.js} +3 -3
- package/dist/esm/{markup-y96-uR-l.js.map → markup-B58g75Hr.js.map} +1 -1
- package/dist/esm/{model-BJQo0DxL.js → model-B5KuXEsl.js} +3 -3
- package/dist/esm/{model-BJQo0DxL.js.map → model-B5KuXEsl.js.map} +1 -1
- package/dist/esm/model-BHVr1tU0.js.map +1 -1
- package/dist/esm/{model-CTdG73h9.js → model-Dc6T63-k.js} +3 -3
- package/dist/esm/{model-CTdG73h9.js.map → model-Dc6T63-k.js.map} +1 -1
- package/dist/esm/{multiElementInteractionHandler-C45E8VzE.js → multiElementInteractionHandler-3tE3OPpw.js} +6 -5
- package/dist/esm/multiElementInteractionHandler-3tE3OPpw.js.map +1 -0
- package/dist/esm/{overlays-DmcRtaSn.js → overlays-BwIqsqLW.js} +3 -3
- package/dist/esm/{overlays-DmcRtaSn.js.map → overlays-BwIqsqLW.js.map} +1 -1
- package/dist/esm/{queries-DWjy-LsV.js → queries-BcmE5Zbq.js} +5 -5
- package/dist/esm/queries-BcmE5Zbq.js.map +1 -0
- package/dist/esm/{regl-component-zzdsBise.js → regl-component-gIonUTBJ.js} +6 -6
- package/dist/esm/{regl-component-zzdsBise.js.map → regl-component-gIonUTBJ.js.map} +1 -1
- package/dist/esm/{representation_pb-CQdJxiGO.js → representation_pb-Bf023NuN.js} +3 -3
- package/dist/esm/{representation_pb-CQdJxiGO.js.map → representation_pb-Bf023NuN.js.map} +1 -1
- package/dist/esm/{results-ClIgKssN.js → results-De9arm7M.js} +3 -3
- package/dist/esm/{results-ClIgKssN.js.map → results-De9arm7M.js.map} +1 -1
- package/dist/esm/{streamAttributes-CTs61PCl.js → streamAttributes-Bj2xDHfI.js} +3 -3
- package/dist/esm/{streamAttributes-CTs61PCl.js.map → streamAttributes-Bj2xDHfI.js.map} +1 -1
- package/dist/esm/{util-DUjEw5Kh.js → util-CMPFqnEv.js} +3 -3
- package/dist/esm/{util-DUjEw5Kh.js.map → util-CMPFqnEv.js.map} +1 -1
- package/dist/esm/{utils-DOjHP1wA.js → utils-B1mSYmAK.js} +3 -3
- package/dist/esm/{utils-DOjHP1wA.js.map → utils-B1mSYmAK.js.map} +1 -1
- package/dist/esm/{utils-DJ5FvINs.js → utils-c-mcLgsj.js} +3 -3
- package/dist/esm/utils-c-mcLgsj.js.map +1 -0
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +2 -2
- package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-column.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +3 -3
- package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-annotation-callout.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-box-query-tool.entry.js +4 -4
- package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-button_3.entry.js +6 -1
- package/dist/esm/vertex-viewer-button_3.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-default-toolbar.entry.js +2 -2
- package/dist/esm/vertex-viewer-default-toolbar.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +5 -5
- package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +5 -5
- package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +3 -3
- package/dist/esm/vertex-viewer-markup-tool.entry.js +4 -4
- package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup.entry.js +3 -3
- package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-details.entry.js +3 -3
- package/dist/esm/vertex-viewer-measurement-distance.entry.js +8 -8
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +5 -5
- package/dist/esm/vertex-viewer-measurement-precise.entry.js +7 -7
- package/dist/esm/vertex-viewer-pin-group.entry.js +7 -7
- package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-label_2.entry.js +7 -6
- package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-tool.entry.js +3 -3
- package/dist/esm/vertex-viewer-spinner.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-teleport-tool.entry.js +2 -2
- package/dist/esm/vertex-viewer-transform-widget.entry.js +6 -6
- package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-view-cube.entry.js +2 -2
- package/dist/esm/vertex-viewer-walk-mode-tool.entry.js +1 -1
- package/dist/esm/vertex-viewer.entry.js +8 -8
- package/dist/esm/viewer.js +1 -1
- package/dist/esm/{viewport-D90kzsD7.js → viewport-CHtidaFL.js} +3 -3
- package/dist/esm/{viewport-D90kzsD7.js.map → viewport-CHtidaFL.js.map} +1 -1
- package/dist/types/components/viewer-button/viewer-button.d.ts +5 -0
- package/dist/types/components.d.ts +14 -1
- package/dist/types/lib/walk-mode/model.d.ts +10 -10
- package/dist/types/regl-shape.d.ts +1 -5
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/{p-12a673f0.entry.js → p-00540193.entry.js} +2 -2
- package/dist/viewer/p-00540193.entry.js.map +1 -0
- package/dist/viewer/{p-78f422af.entry.js → p-287e0670.entry.js} +2 -2
- package/dist/viewer/{p-78f422af.entry.js.map → p-287e0670.entry.js.map} +1 -1
- package/dist/viewer/p-2UsvOTHJ.js +5 -0
- package/dist/viewer/p-2UsvOTHJ.js.map +1 -0
- package/dist/viewer/{p-510fd2e1.entry.js → p-2d2fa147.entry.js} +2 -2
- package/dist/viewer/{p-fe434552.entry.js → p-30a5748d.entry.js} +2 -2
- package/dist/viewer/p-32a51a21.entry.js +5 -0
- package/dist/viewer/p-32a51a21.entry.js.map +1 -0
- package/dist/viewer/{p-aa0359e0.entry.js → p-3c5dd716.entry.js} +2 -2
- package/dist/viewer/{p-9312a936.entry.js → p-48020de1.entry.js} +2 -2
- package/dist/viewer/{p-d5542b6a.entry.js → p-4dd67d16.entry.js} +2 -2
- package/dist/viewer/p-4dd67d16.entry.js.map +1 -0
- package/dist/viewer/p-504e77a7.entry.js +5 -0
- package/dist/viewer/{p-c2c3579f.entry.js.map → p-504e77a7.entry.js.map} +1 -1
- package/dist/viewer/{p-71c03352.entry.js → p-53f6cc59.entry.js} +2 -2
- package/dist/viewer/{p-7b4eec65.entry.js → p-5cfb3047.entry.js} +2 -2
- package/dist/viewer/{p-e3981cf8.entry.js → p-7cb9c9bb.entry.js} +2 -2
- package/dist/viewer/p-7cb9c9bb.entry.js.map +1 -0
- package/dist/viewer/{p-56e39cff.entry.js → p-83683307.entry.js} +2 -2
- package/dist/viewer/{p-a108a305.entry.js → p-9a39315d.entry.js} +2 -2
- package/dist/viewer/{p-O1_Yvjd6.js → p-BT9d9jRt.js} +2 -2
- package/dist/viewer/{p-O1_Yvjd6.js.map → p-BT9d9jRt.js.map} +1 -1
- package/dist/viewer/{p-VEJB73Ei.js → p-Bdf4AcJ2.js} +2 -2
- package/dist/viewer/{p-VEJB73Ei.js.map → p-Bdf4AcJ2.js.map} +1 -1
- package/dist/viewer/{p-Cr2EnhS-.js → p-BhKTTmpL.js} +2 -2
- package/dist/viewer/{p-Cr2EnhS-.js.map → p-BhKTTmpL.js.map} +1 -1
- package/dist/viewer/{p-CelQDFR0.js → p-C12jtCFb.js} +2 -2
- package/dist/viewer/{p-CelQDFR0.js.map → p-C12jtCFb.js.map} +1 -1
- package/dist/viewer/p-CEDqc5sS.js +5 -0
- package/dist/viewer/{p-BDy3SLKk.js.map → p-CEDqc5sS.js.map} +1 -1
- package/dist/viewer/{p-C6YtUG51.js → p-CS8PfgcI.js} +2 -2
- package/dist/viewer/{p-C6YtUG51.js.map → p-CS8PfgcI.js.map} +1 -1
- package/dist/viewer/{p-EG7pMA2M.js → p-CeZe0Qql.js} +2 -2
- package/dist/viewer/{p-EG7pMA2M.js.map → p-CeZe0Qql.js.map} +1 -1
- package/dist/viewer/p-CioaIHsi.js.map +1 -1
- package/dist/viewer/{p-EUeCUp3y.js → p-CxBXErQ8.js} +2 -2
- package/dist/viewer/{p-EUeCUp3y.js.map → p-CxBXErQ8.js.map} +1 -1
- package/dist/viewer/{p-BIR7Lfxx.js → p-CyiY_hsD.js} +2 -2
- package/dist/viewer/{p-BIR7Lfxx.js.map → p-CyiY_hsD.js.map} +1 -1
- package/dist/viewer/{p-CIBBr-p1.js → p-D0aTA_2m.js} +2 -2
- package/dist/viewer/{p-CIBBr-p1.js.map → p-D0aTA_2m.js.map} +1 -1
- package/dist/viewer/{p-C-huOg09.js → p-D2IEHEGM.js} +2 -2
- package/dist/viewer/{p-C-huOg09.js.map → p-D2IEHEGM.js.map} +1 -1
- package/dist/viewer/{p-UQXG8bCI.js → p-DBfvBC5O.js} +2 -2
- package/dist/viewer/p-DBfvBC5O.js.map +1 -0
- package/dist/viewer/{p-B-J4CqZy.js → p-DHK23fw4.js} +2 -2
- package/dist/viewer/{p-B-J4CqZy.js.map → p-DHK23fw4.js.map} +1 -1
- package/dist/{components/p-QhlhRt6X.js → viewer/p-DIbJ8Ijj.js} +2 -2
- package/dist/viewer/p-DIbJ8Ijj.js.map +1 -0
- package/dist/viewer/{p-CxzyM08j.js → p-DyL2wWm6.js} +2 -2
- package/dist/viewer/{p-CxzyM08j.js.map → p-DyL2wWm6.js.map} +1 -1
- package/dist/viewer/{p-avWSFTeP.js → p-JvS9LLoO.js} +2 -2
- package/dist/viewer/{p-avWSFTeP.js.map → p-JvS9LLoO.js.map} +1 -1
- package/dist/viewer/p-_LpaX1ga.js +5 -0
- package/dist/viewer/p-_LpaX1ga.js.map +1 -0
- package/dist/viewer/{p-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
- package/dist/viewer/{p-mpsCUvSn.js.map → p-_qi2VkC2.js.map} +1 -1
- package/dist/viewer/p-b5cc83a4.entry.js.map +1 -1
- package/dist/viewer/{p-82ed4346.entry.js → p-b79c295a.entry.js} +2 -2
- package/dist/viewer/{p-fc7d9b2b.entry.js → p-c531ca97.entry.js} +2 -2
- package/dist/viewer/{p-fc7d9b2b.entry.js.map → p-c531ca97.entry.js.map} +1 -1
- package/dist/viewer/p-c9dee5c4.entry.js +5 -0
- package/dist/viewer/p-c9dee5c4.entry.js.map +1 -0
- package/dist/viewer/{p-c2454523.entry.js → p-cc835213.entry.js} +2 -2
- package/dist/viewer/p-ce711ae0.entry.js +5 -0
- package/dist/viewer/p-ce711ae0.entry.js.map +1 -0
- package/dist/viewer/p-d357d235.entry.js.map +1 -1
- package/dist/viewer/{p-91fca24b.entry.js → p-d5a57757.entry.js} +2 -2
- package/dist/viewer/p-e4913b06.entry.js +5 -0
- package/dist/viewer/p-e4913b06.entry.js.map +1 -0
- package/dist/viewer/p-e98db875.entry.js.map +1 -1
- package/dist/viewer/{p-a893a299.entry.js → p-edc2f914.entry.js} +2 -2
- package/dist/viewer/{p-03a531d9.entry.js → p-ef9437ca.entry.js} +2 -2
- package/dist/viewer/{p-49578ec9.entry.js → p-fd3a5837.entry.js} +2 -2
- package/dist/viewer/p-fd3a5837.entry.js.map +1 -0
- package/dist/viewer/p-ipyYHvea.js.map +1 -1
- package/dist/viewer/{p-Ce1j43tF.js → p-kMZA0v7I.js} +2 -2
- package/dist/viewer/{p-Ce1j43tF.js.map → p-kMZA0v7I.js.map} +1 -1
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +8 -8
- package/readme.md +14 -8
- package/dist/cjs/bundle-07I6_WqC.js.map +0 -1
- package/dist/cjs/multiElementInteractionHandler-Bqpg2wVT.js.map +0 -1
- package/dist/cjs/queries-GhYmoomu.js.map +0 -1
- package/dist/cjs/utils-BsXO-wLi.js.map +0 -1
- package/dist/components/p-B4sO9HdX.js +0 -5
- package/dist/components/p-B4sO9HdX.js.map +0 -1
- package/dist/components/p-C--Voxln.js +0 -5
- package/dist/components/p-C--Voxln.js.map +0 -1
- package/dist/components/p-CZZALKHT.js +0 -5
- package/dist/components/p-CZZALKHT.js.map +0 -1
- package/dist/components/p-Cn0vKqIN.js +0 -5
- package/dist/components/p-Cn0vKqIN.js.map +0 -1
- package/dist/components/p-DH341c7b.js.map +0 -1
- package/dist/components/p-Dmc49hX3.js +0 -5
- package/dist/components/p-Dmc49hX3.js.map +0 -1
- package/dist/components/p-QhlhRt6X.js.map +0 -1
- package/dist/components/p-garvKln8.js.map +0 -1
- package/dist/components/p-taOlygmc.js.map +0 -1
- package/dist/esm/bundle-CZZALKHT.js.map +0 -1
- package/dist/esm/multiElementInteractionHandler-C45E8VzE.js.map +0 -1
- package/dist/esm/queries-DWjy-LsV.js.map +0 -1
- package/dist/esm/utils-DJ5FvINs.js.map +0 -1
- package/dist/viewer/p-02384d83.entry.js +0 -5
- package/dist/viewer/p-02384d83.entry.js.map +0 -1
- package/dist/viewer/p-12a673f0.entry.js.map +0 -1
- package/dist/viewer/p-49578ec9.entry.js.map +0 -1
- package/dist/viewer/p-4c223366.entry.js +0 -5
- package/dist/viewer/p-4c223366.entry.js.map +0 -1
- package/dist/viewer/p-7m7Vr5V7.js.map +0 -1
- package/dist/viewer/p-8774425b.entry.js +0 -5
- package/dist/viewer/p-8774425b.entry.js.map +0 -1
- package/dist/viewer/p-9c02567d.entry.js +0 -5
- package/dist/viewer/p-9c02567d.entry.js.map +0 -1
- package/dist/viewer/p-BDy3SLKk.js +0 -5
- package/dist/viewer/p-CZZALKHT.js +0 -5
- package/dist/viewer/p-CZZALKHT.js.map +0 -1
- package/dist/viewer/p-Cju1inFh.js +0 -5
- package/dist/viewer/p-Cju1inFh.js.map +0 -1
- package/dist/viewer/p-UQXG8bCI.js.map +0 -1
- package/dist/viewer/p-c2c3579f.entry.js +0 -5
- package/dist/viewer/p-d5542b6a.entry.js.map +0 -1
- package/dist/viewer/p-e3981cf8.entry.js.map +0 -1
- /package/dist/components/{p-C02XtMl4.js.map → p-BHyxBmg6.js.map} +0 -0
- /package/dist/components/{p-CfTvpqud.js.map → p-BNRm88jS.js.map} +0 -0
- /package/dist/components/{p-O1_Yvjd6.js.map → p-BT9d9jRt.js.map} +0 -0
- /package/dist/components/{p-oDn1DcWj.js.map → p-BZDn1Vuv.js.map} +0 -0
- /package/dist/components/{p-VEJB73Ei.js.map → p-Bdf4AcJ2.js.map} +0 -0
- /package/dist/components/{p-CelQDFR0.js.map → p-C12jtCFb.js.map} +0 -0
- /package/dist/components/{p-Dzs4u_ZY.js.map → p-CABws4i9.js.map} +0 -0
- /package/dist/components/{p-CZgX-9yo.js.map → p-COznr3CH.js.map} +0 -0
- /package/dist/components/{p-BqeEZXPn.js.map → p-CPROw2BU.js.map} +0 -0
- /package/dist/components/{p-BKQMbekH.js.map → p-CWcvgy8e.js.map} +0 -0
- /package/dist/components/{p-CMdP8O-G.js.map → p-Ca253f0h.js.map} +0 -0
- /package/dist/components/{p-EG7pMA2M.js.map → p-CeZe0Qql.js.map} +0 -0
- /package/dist/components/{p-Due5EmBt.js.map → p-Clyxptbp.js.map} +0 -0
- /package/dist/components/{p-DjrtwKcK.js.map → p-CvEK3ZK1.js.map} +0 -0
- /package/dist/components/{p-MnZadXO8.js.map → p-D1Vdomj_.js.map} +0 -0
- /package/dist/components/{p-DRGCkSEK.js.map → p-D3bzgaCV.js.map} +0 -0
- /package/dist/components/{p-DnVcQAR9.js.map → p-D3in41xo.js.map} +0 -0
- /package/dist/components/{p-DCTZZ5Rd.js.map → p-DjQ6RXWP.js.map} +0 -0
- /package/dist/components/{p-CxzyM08j.js.map → p-DyL2wWm6.js.map} +0 -0
- /package/dist/components/{p-avWSFTeP.js.map → p-JvS9LLoO.js.map} +0 -0
- /package/dist/components/{p-BC777sCK.js.map → p-UJR-ixsy.js.map} +0 -0
- /package/dist/components/{p-mpsCUvSn.js.map → p-_qi2VkC2.js.map} +0 -0
- /package/dist/components/{p-CNprIkKd.js.map → p-rDr0x5Z7.js.map} +0 -0
- /package/dist/viewer/{p-510fd2e1.entry.js.map → p-2d2fa147.entry.js.map} +0 -0
- /package/dist/viewer/{p-fe434552.entry.js.map → p-30a5748d.entry.js.map} +0 -0
- /package/dist/viewer/{p-aa0359e0.entry.js.map → p-3c5dd716.entry.js.map} +0 -0
- /package/dist/viewer/{p-9312a936.entry.js.map → p-48020de1.entry.js.map} +0 -0
- /package/dist/viewer/{p-71c03352.entry.js.map → p-53f6cc59.entry.js.map} +0 -0
- /package/dist/viewer/{p-7b4eec65.entry.js.map → p-5cfb3047.entry.js.map} +0 -0
- /package/dist/viewer/{p-56e39cff.entry.js.map → p-83683307.entry.js.map} +0 -0
- /package/dist/viewer/{p-a108a305.entry.js.map → p-9a39315d.entry.js.map} +0 -0
- /package/dist/viewer/{p-82ed4346.entry.js.map → p-b79c295a.entry.js.map} +0 -0
- /package/dist/viewer/{p-c2454523.entry.js.map → p-cc835213.entry.js.map} +0 -0
- /package/dist/viewer/{p-91fca24b.entry.js.map → p-d5a57757.entry.js.map} +0 -0
- /package/dist/viewer/{p-a893a299.entry.js.map → p-edc2f914.entry.js.map} +0 -0
- /package/dist/viewer/{p-03a531d9.entry.js.map → p-ef9437ca.entry.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["getSceneTreeViewportHeight","el","clientHeight","getSceneTreeContainsElement","other","contains","lowerCase","str","toLowerCase","DEFAULT_SPLIT_REGEXP","DEFAULT_STRIP_REGEXP","noCase","input","options","_a","splitRegexp","_b","stripRegexp","_c","transform","_d","delimiter","result","replace","start","end","length","charAt","slice","split","map","join","re","value","RegExp","reduce","pascalCaseTransform","index","firstChar","lowerChars","substr","toUpperCase","pascalCase","__assign","camelCaseTransform","camelCase","bindingRegEx","CollectionBinding","constructor","bindings","this","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","dispose","listener","getBindableValue","addEventListener","removeEventListener","generateBindings","nodeType","Node","ELEMENT_NODE","bindableAttributes","getBindableAttributes","name","startsWith","push","propName","TEXT_NODE","test","i","childNodes","element","Array","from","attributes","filter","exec","undefined","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","onStateChange","EventDispatcher","setHovered","id","emit","stateChanged","on","restartTimeout","fn","existingTimeout","delay","window","clearTimeout","setTimeout","sceneTreeTableLayoutCss","SceneTreeTableLayout","__stencil_proxyCustomElement","HTMLElement","registerHost","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","Promise","resolve","computeHeaderHeight","headerHeight","headerElement","setProperty","computeColumnGridLayout","res","bindHeaderData","headerInstances","createHeaderInstance","paddingRight","slot","gridColumnStart","gridColumnEnd","headerDividerInstances","_","createDividerInstance","right","pointerEvents","rebindHeaderData","removeDividerDragListeners","addDividerDragListeners","createDividerPointerDownHandler","event","preventDefault","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","target","scrollTop","computeAndUpdateViewportRows","componentWillLoad","createPools","initializeColumnLayout","headerResizeObserver","ResizeObserver","resizeObserver","clearLayoutHeight","clearLayoutWidth","componentDidLoad","passive","observe","initializeMeasuredLayout","componentWillRender","componentDidRender","layoutRendered","componentDidUpdate","disconnectedCallback","disconnect","handleViewportRowsPropsChanged","scrollToPosition","attemptComputeCellHeight","render","h","Host","key","class","ref","gridTemplateColumns","display","onSlotchange","ensureDividerTemplateDefined","recreateColumnPools","computeViewportRows","viewportHeight","getLayoutHeight","canComputeIndices","viewportCount","ceil","startIndex","max","endIndex","min","getViewportRows","controller","isConnected","updateActiveRowRange","columnElementPools","WeakMap","column","Error","querySelector","defaultDividerTemplate","document","innerHTML","headerDividerListeners","d","listeners","populateRowData","rowData","call","layoutHeight","computedWidth"],"sources":["src/components/scene-tree/lib/dom.ts","../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"],"sourcesContent":["export function getSceneTreeViewportHeight(el: HTMLElement): number {\n return el.clientHeight;\n}\n\nexport function getSceneTreeOffsetTop(el: HTMLElement): number {\n return el.offsetTop;\n}\n\nexport function getSceneTreeContainsElement(\n el: Element,\n other: Element,\n): boolean {\n return el.contains(other);\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"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["create","x","y","distance","a","b","delta","subtract","Math","sqrt","add","scaleProportional","pt","scale","magnitude","normalizeVector","magnitudeOfPoint","normalDirectionVector","ptA","ptB","orthogonalVector","unitVectorBetweenPoints","abs","vectorXValue","pow","vectorYValue","fromJson","json","obj","JSON","parse","Array","isArray","createArrowheadPoints","start","end","arrowSideLength","arrowHeadTheta","arrowOrthogonalVector","Point.orthogonalVector","normalizedDirection","Point.normalDirectionVector","arrowLeft","Point.subtract","Point.add","Point.scaleProportional","cos","sin","arrowRight","leftPoint","rightPoint","createLineAnchorStylePoints","triangleArrowAngle","lineArrowAngle","Point.distance","arrowHeadHeight","max","min","hashHeight","radius","triangleArrowRelativeHeight","triangleArrowBasePosition","triangleArrowTheta","Angle","toRadians","triangleArrowSideLength","triangleArrow","lineArrowTheta","lineArrowSideLength","lineArrow","hashLineTheta","hashLine","tip","base","arrowTriangle","arrowLine","hash","arrowheadPointsToPolygonPoints","points","scaledRight","scalePointProportional","scaledLeft","scaledBase","map","join","arrowheadPointsToPathPoints","arrowheadPointsToHashPoints","x1","y1","x2","y2","arrowheadPointsToCirclePoints","cx","cy","r","isVertexViewerArrowMarkup","el","HTMLElement","nodeName","parsePoint","value","Point.fromJson","basePoint","scaledPoint","isVertexViewerCircleMarkup","parseBounds","Rectangle","parsePoints","values","Point","stringify","isVertexViewerFreeformMarkup","getBoundingBox2dAnchorPosition","rect","position","width","height","center","translatePointToScreen","canvasDimensions","contentDimensions","centeringBehavior","canvasToContentScaleFactor","effectiveScalar","contentScaleFactor","getScaleFactor","contentRelativePoint","Dimensions","scaledContentWidth","scaledContentHeight","centerOffsetX","centerOffsetY","translateDimensionsToScreen","dimensions","contentRelativeDimensions","translateRectToScreen","fromPointAndDimensions","translatePointToRelative","offset","pointWithoutOffset","getWindowDevicePixelRatio","centeredContentPoint","contentCenterRelativePoint","translatePointsToBounds","original","bounds","createRectangle","initialPoint","currentPoint","maintainAspectRatio","fromPoints","fitBoundsSize","isPortrait","currentIsLeftOfInitial","currentIsAboveInitial","fitBoundsX","fitBoundsY","transformRectangle","current","anchor","left","top","w","h","right","bottom","topLeft","bottomLeft","topRight","bottomRight","isVertexViewerMarkupElement","isValidPointData","every","Number","isNaN","isValidStartEvent","event","target","mode","RelativeAnchor","id","transform","rotation","name","point","onPointerDown","children","class","style","onTouchStart","preventDefault","SvgShadow","effectiveScale","xOffset","yOffset","filterUnits","in","stdDeviation","dx","dy","result","in2","operator","MarkupInteractionHandler","constructor","scalingOptions","this","handlePointerDown","handleInteractionAttempt","handlePointerMove","handleInteractionMove","handlePointerUp","window","removeEventListener","handleInteractionEnd","resizeObserver","ResizeObserver","entry","elementBounds","computeBoundingRect","initialize","element","observe","addEventListener","dispose","disconnect","_a","undefined","updateScalingOptions","getScalingOptions","acceptInteraction"],"sources":["../geometry/src/point.ts","src/components/viewer-markup-arrow/utils.ts","src/components/viewer-markup-circle/utils.ts","src/components/viewer-markup-freeform/utils.ts","src/components/viewer-markup/markup-utils.ts","src/components/viewer-markup/viewer-markup-components.tsx","src/lib/markup/interactions.ts"],"sourcesContent":["import * as Angle from './angle';\nimport { lerp as lerpNumber } from './math';\n\n/**\n * A `Point` represents a cartesian coordinate with a horizontal and vertical\n * position or length.\n */\nexport interface Point {\n x: number;\n y: number;\n}\n\n/**\n * Returns a new `Point` with the given horizontal and vertical position.\n */\nexport function create(x = 0, y = 0): Point {\n return { x, y };\n}\n\n/**\n * Converts a polar coordinate (length and angle) into a Cartesian coordinate.\n */\nexport function polar(length: number, radians: Angle.Angle): Point {\n const x = Math.cos(radians) * length;\n const y = Math.sin(radians) * length;\n return create(x, y);\n}\n\n/**\n * Returns the distance between two points.\n */\nexport function distance(a: Point, b: Point): number {\n const delta = subtract(a, b);\n return Math.sqrt(delta.x * delta.x + delta.y * delta.y);\n}\n\n/**\n * Returns a new `Point` where `b` is subtracted from `a`.\n */\nexport function subtract(a: Point, b: Point): Point {\n return { x: a.x - b.x, y: a.y - b.y };\n}\n\n/**\n * Returns a new `Point` where `b` is added to `a`.\n */\nexport function add(a: Point, b: Point): Point {\n return { x: a.x + b.x, y: a.y + b.y };\n}\n\n/**\n * Returns `true` if the `x` and `y` positions of `a` and `b` are equal.\n */\nexport function isEqual(a: Point, b: Point): boolean {\n return a.x === b.x && a.y === b.y;\n}\n\n/**\n * Performs a linear interpolation between `a` and `b` and returns the result.\n * The value of `t` is clamped between `[0, 1]`.\n *\n * @param a The start value.\n * @param b The end value.\n * @param t A value between 0 and 1.\n * @returns A point between `a` and `b`.\n */\nexport function lerp(a: Point, b: Point, t: number): Point {\n return {\n x: lerpNumber(a.x, b.x, t),\n y: lerpNumber(a.y, b.y, t),\n };\n}\n\n/**\n * Returns a new `Point` where `x` and `y` are inverted.\n */\nexport function negate(pt: Point): Point {\n return create(-pt.x, -pt.y);\n}\n\n/**\n * Returns a new `Point` where `x` and `y` are multiplied by the given scale\n * factors.\n */\nexport function scale(pt: Point, scaleX: number, scaleY: number): Point {\n return {\n x: pt.x * scaleX,\n y: pt.y * scaleY,\n };\n}\n\n/**\n * Returns a new `Point` where `x` and `y` are multiplied by the given scale\n * factor.\n */\nexport function scaleProportional(pt: Point, scale: number): Point {\n return {\n x: pt.x * scale,\n y: pt.y * scale,\n };\n}\n\n/**\n * Returns the magnitude of a point.\n */\nexport function magnitude(pt: Point): number {\n return Math.sqrt(pt.x * pt.x + pt.y * pt.y);\n}\n\n/**\n * Transforms a vector into the corresponding normal (unit) vector.\n */\nexport function normalizeVector(pt: Point): Point {\n const magnitudeOfPoint = magnitude(pt);\n if (magnitudeOfPoint === 0) {\n return create(0, 0);\n } else {\n return scaleProportional(pt, 1 / magnitudeOfPoint);\n }\n}\n\n/**\n * Returns a new normal (unit) vector pointing between the two given points.\n */\nexport function normalDirectionVector(ptA: Point, ptB: Point): Point {\n return normalizeVector(subtract(ptB, ptA));\n}\n\n/**\n * Returns a vector orthogonal to the vector between the two given points.\n */\nexport function orthogonalVector(ptA: Point, ptB: Point): Point {\n const unitVectorBetweenPoints = normalDirectionVector(ptA, ptB);\n\n // Handle vectors that are parallel to the x or y axis\n if (unitVectorBetweenPoints.x === 0 || unitVectorBetweenPoints.y === 0) {\n return create(-1 * unitVectorBetweenPoints.y, unitVectorBetweenPoints.x);\n }\n\n if (\n Math.abs(unitVectorBetweenPoints.x) > Math.abs(unitVectorBetweenPoints.y)\n ) {\n const vectorXValue = 1 - Math.pow(unitVectorBetweenPoints.x, 2);\n const vectorYValue =\n -1 * unitVectorBetweenPoints.x * unitVectorBetweenPoints.y;\n return normalizeVector(create(vectorXValue, vectorYValue));\n } else {\n const vectorXValue =\n -1 * unitVectorBetweenPoints.x * unitVectorBetweenPoints.y;\n const vectorYValue = 1 - Math.pow(unitVectorBetweenPoints.y, 2);\n return normalizeVector(create(vectorXValue, vectorYValue));\n }\n}\n\n/**\n * Parses a JSON string representation of a Point and returns an object.\n *\n * @param json A JSON string, either in the form `[x,y]` or `{\"x\": 0, \"y\": 0}`\n * @returns A parsed Point.\n */\nexport function fromJson(json: string): Point {\n const obj = JSON.parse(json);\n if (Array.isArray(obj)) {\n const [x, y] = obj;\n return create(x, y);\n } else {\n const { x, y } = obj;\n return create(x, y);\n }\n}\n","import { Angle } from '@vertexvis/geometry';\n\nimport * as Point from '../../../../geometry/src/point';\n\nexport type LineAnchorStyle =\n | 'arrow-triangle'\n | 'arrow-line'\n | 'dot'\n | 'hash'\n | 'none';\n\nexport interface LineAnchorStylePoints {\n tip: Point.Point;\n base: Point.Point;\n arrowTriangle: ArrowheadPoints;\n arrowLine: ArrowheadPoints;\n hash: ArrowheadPoints;\n radius: number;\n}\n\nexport interface ArrowheadPoints {\n leftPoint: Point.Point;\n rightPoint: Point.Point;\n}\n\nexport interface LinePoints {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\nexport interface CirclePoints {\n cx: number;\n cy: number;\n r: number;\n}\n\nexport function createArrowheadPoints(\n start: Point.Point,\n end: Point.Point,\n arrowSideLength: number,\n arrowHeadTheta: number,\n): ArrowheadPoints {\n const arrowOrthogonalVector = Point.orthogonalVector(start, end);\n const normalizedDirection = Point.normalDirectionVector(start, end);\n\n const arrowLeft = Point.subtract(\n end,\n Point.add(\n Point.scaleProportional(\n normalizedDirection,\n arrowSideLength * Math.cos(arrowHeadTheta),\n ),\n Point.scaleProportional(\n arrowOrthogonalVector,\n arrowSideLength * Math.sin(arrowHeadTheta),\n ),\n ),\n );\n const arrowRight = Point.subtract(\n end,\n Point.subtract(\n Point.scaleProportional(\n normalizedDirection,\n arrowSideLength * Math.cos(arrowHeadTheta),\n ),\n Point.scaleProportional(\n arrowOrthogonalVector,\n arrowSideLength * Math.sin(arrowHeadTheta),\n ),\n ),\n );\n\n return {\n leftPoint: arrowLeft,\n rightPoint: arrowRight,\n };\n}\n\nexport function createLineAnchorStylePoints(\n start: Point.Point,\n end: Point.Point,\n triangleArrowAngle = 65,\n lineArrowAngle = 85,\n): LineAnchorStylePoints {\n // Adjust the size of the end style to the distance between the start and end points\n const distance = Point.distance(start, end);\n const arrowHeadHeight = Math.max(4, Math.min(16, distance * 0.25));\n const hashHeight = Math.max(4, Math.min(12, distance * 0.16));\n const radius = Math.min(5, distance * 0.1);\n\n // Triangle arrow position\n const triangleArrowRelativeHeight = arrowHeadHeight / distance;\n const triangleArrowBasePosition = Point.add(\n Point.scaleProportional(end, 1 - triangleArrowRelativeHeight),\n Point.scaleProportional(start, triangleArrowRelativeHeight),\n );\n const triangleArrowTheta = Angle.toRadians(triangleArrowAngle / 2);\n const triangleArrowSideLength =\n arrowHeadHeight / Math.cos(triangleArrowTheta);\n const triangleArrow = createArrowheadPoints(\n start,\n end,\n triangleArrowSideLength,\n triangleArrowTheta,\n );\n\n // Line arrow position\n const lineArrowTheta = Angle.toRadians(lineArrowAngle / 2);\n const lineArrowSideLength = arrowHeadHeight / Math.cos(lineArrowTheta);\n const lineArrow = createArrowheadPoints(\n start,\n end,\n lineArrowSideLength,\n lineArrowTheta,\n );\n\n // Hash position\n // Setting the arrowHeadAngle to 90 degrees results in a\n // straight hash mark perpendicular to the direction of the line\n const hashLineTheta = Angle.toRadians(90);\n const hashLine = createArrowheadPoints(start, end, hashHeight, hashLineTheta);\n\n return {\n tip: end,\n base: triangleArrowBasePosition,\n arrowTriangle: triangleArrow,\n arrowLine: lineArrow,\n hash: hashLine,\n radius: radius,\n };\n}\n\nexport function arrowheadPointsToPolygonPoints(\n points: LineAnchorStylePoints,\n scale = 1,\n): string {\n const scaledRight = scalePointProportional(\n points.tip,\n points.arrowTriangle.rightPoint,\n scale,\n );\n const scaledLeft = scalePointProportional(\n points.tip,\n points.arrowTriangle.leftPoint,\n scale,\n );\n const scaledBase = scalePointProportional(points.tip, points.base, scale);\n\n return [points.tip, scaledRight, scaledBase, scaledLeft]\n .map((pt) => `${pt.x},${pt.y}`)\n .join(' ');\n}\n\nexport function arrowheadPointsToPathPoints(\n points: LineAnchorStylePoints,\n scale = 1,\n): string {\n const scaledRight = scalePointProportional(\n points.tip,\n points.arrowLine.rightPoint,\n scale,\n );\n const scaledLeft = scalePointProportional(\n points.tip,\n points.arrowLine.leftPoint,\n scale,\n );\n\n return `M${scaledRight.x} ${scaledRight.y} L${points.tip.x} ${points.tip.y} L${scaledLeft.x} ${scaledLeft.y} L${points.tip.x} ${points.tip.y} Z`;\n}\n\nexport function arrowheadPointsToHashPoints(\n points: LineAnchorStylePoints,\n scale = 1,\n): LinePoints {\n const scaledRight = scalePointProportional(\n points.tip,\n points.hash.rightPoint,\n scale,\n );\n const scaledLeft = scalePointProportional(\n points.tip,\n points.hash.leftPoint,\n scale,\n );\n\n return {\n x1: scaledRight.x,\n y1: scaledRight.y,\n x2: scaledLeft.x,\n y2: scaledLeft.y,\n };\n}\n\nexport function arrowheadPointsToCirclePoints(\n points: LineAnchorStylePoints,\n scale = 1,\n): CirclePoints {\n return {\n cx: points.tip.x,\n cy: points.tip.y,\n r: points.radius * scale,\n };\n}\n\nexport function isVertexViewerArrowMarkup(\n el: unknown,\n): el is HTMLVertexViewerMarkupArrowElement {\n return (\n el instanceof HTMLElement && el.nodeName === 'VERTEX-VIEWER-MARKUP-ARROW'\n );\n}\n\nexport function parsePoint(\n value: string | Point.Point | undefined,\n): Point.Point | undefined {\n return typeof value === 'string' ? Point.fromJson(value) : value;\n}\n\nexport function scalePointProportional(\n basePoint: Point.Point,\n scaledPoint: Point.Point,\n scale: number,\n): Point.Point {\n return Point.add(\n basePoint,\n Point.scaleProportional(Point.subtract(scaledPoint, basePoint), scale),\n );\n}\n","import { Rectangle } from '@vertexvis/geometry';\n\nexport function isVertexViewerCircleMarkup(\n el: unknown,\n): el is HTMLVertexViewerMarkupCircleElement {\n return (\n el instanceof HTMLElement && el.nodeName === 'VERTEX-VIEWER-MARKUP-CIRCLE'\n );\n}\n\nexport function parseBounds(\n value: string | Rectangle.Rectangle | undefined,\n): Rectangle.Rectangle | undefined {\n return typeof value === 'string' ? Rectangle.fromJson(value) : value;\n}\n","import { Point } from '@vertexvis/geometry';\n\nexport function parsePoints(\n value: string | Point.Point[] | undefined,\n): Point.Point[] | undefined {\n return typeof value === 'string'\n ? JSON.parse(value).map((values: number[]) =>\n Point.fromJson(JSON.stringify(values)),\n )\n : value;\n}\n\nexport function isVertexViewerFreeformMarkup(\n el: unknown,\n): el is HTMLVertexViewerMarkupFreeformElement {\n return (\n el instanceof HTMLElement && el.nodeName === 'VERTEX-VIEWER-MARKUP-FREEFORM'\n );\n}\n","import { Dimensions, Point, Rectangle } from '@vertexvis/geometry';\n\nimport { getWindowDevicePixelRatio } from '../../lib/dom';\nimport { MarkupCenteringBehavior } from '../../lib/types';\nimport { isVertexViewerArrowMarkup } from '../viewer-markup-arrow/utils';\nimport { isVertexViewerCircleMarkup } from '../viewer-markup-circle/utils';\nimport { isVertexViewerFreeformMarkup } from '../viewer-markup-freeform/utils';\n\nexport type BoundingBox2dAnchorPosition =\n | 'left'\n | 'right'\n | 'top'\n | 'bottom'\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n | 'center';\n\nexport function getBoundingBox2dAnchorPosition(\n rect: Rectangle.Rectangle,\n position: BoundingBox2dAnchorPosition,\n): Point.Point {\n switch (position) {\n case 'top-left':\n return Point.create(rect.x, rect.y);\n case 'top':\n return Point.create(rect.x + rect.width / 2, rect.y);\n case 'top-right':\n return Point.create(rect.x + rect.width, rect.y);\n case 'right':\n return Point.create(rect.x + rect.width, rect.y + rect.height / 2);\n case 'bottom-right':\n return Point.create(rect.x + rect.width, rect.y + rect.height);\n case 'bottom':\n return Point.create(rect.x + rect.width / 2, rect.y + rect.height);\n case 'bottom-left':\n return Point.create(rect.x, rect.y + rect.height);\n case 'left':\n return Point.create(rect.x, rect.y + rect.height / 2);\n case 'center':\n return Rectangle.center(rect);\n }\n}\n\nexport function translatePointToScreen(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n contentDimensions: Dimensions.Dimensions = canvasDimensions,\n centeringBehavior: MarkupCenteringBehavior = 'none',\n scale = 1,\n): Point.Point {\n const canvasToContentScaleFactor = Math.min(\n canvasDimensions.width / contentDimensions.width,\n canvasDimensions.height / contentDimensions.height,\n );\n const effectiveScalar = canvasToContentScaleFactor * scale;\n const contentScaleFactor = getScaleFactor(contentDimensions);\n const contentRelativePoint = Point.add(\n Point.scale(pt, contentScaleFactor, contentScaleFactor),\n Dimensions.center(contentDimensions),\n );\n\n // Include an offset for width and height to account for cases where the\n // content dimensions are smaller than the canvas dimensions.\n const scaledContentWidth = contentDimensions.width * effectiveScalar;\n const scaledContentHeight = contentDimensions.height * effectiveScalar;\n const centerOffsetX =\n centeringBehavior === 'both' || centeringBehavior === 'x-only'\n ? Math.max(0, (canvasDimensions.width - scaledContentWidth) / 2)\n : 0;\n const centerOffsetY =\n centeringBehavior === 'both' || centeringBehavior === 'y-only'\n ? Math.max(0, (canvasDimensions.height - scaledContentHeight) / 2)\n : 0;\n\n return Point.create(\n contentRelativePoint.x * effectiveScalar + centerOffsetX,\n contentRelativePoint.y * effectiveScalar + centerOffsetY,\n );\n}\n\nexport function translatePointToBounds(\n pt: Point.Point,\n rect: Rectangle.Rectangle,\n canvasDimensions: Dimensions.Dimensions,\n): Point.Point {\n const rectToScreen = translateRectToScreen(rect, canvasDimensions);\n return Point.add(pt, rectToScreen);\n}\n\nexport function translateDimensionsToScreen(\n dimensions: Dimensions.Dimensions,\n canvasDimensions: Dimensions.Dimensions,\n contentDimensions: Dimensions.Dimensions = canvasDimensions,\n scale = 1,\n): Dimensions.Dimensions {\n const canvasToContentScaleFactor = Math.min(\n canvasDimensions.width / contentDimensions.width,\n canvasDimensions.height / contentDimensions.height,\n );\n const effectiveScalar = canvasToContentScaleFactor * scale;\n const contentScaleFactor = getScaleFactor(contentDimensions);\n const contentRelativeDimensions = Dimensions.scale(\n contentScaleFactor,\n contentScaleFactor,\n dimensions,\n );\n\n return Dimensions.scale(\n effectiveScalar,\n effectiveScalar,\n contentRelativeDimensions,\n );\n}\n\n/**\n * Translates a rectangle in relative units, to a rectangle in screen units.\n *\n * Shape coordinates are persisted in relative units, so they can be presented\n * at any size.\n */\nexport function translateRectToScreen(\n rect: Rectangle.Rectangle,\n canvasDimensions: Dimensions.Dimensions,\n contentDimensions?: Dimensions.Dimensions,\n centeringBehavior: MarkupCenteringBehavior = 'none',\n scale = 1,\n): Rectangle.Rectangle {\n const position = translatePointToScreen(\n rect,\n canvasDimensions,\n contentDimensions,\n centeringBehavior,\n scale,\n );\n const dimensions = translateDimensionsToScreen(\n rect,\n canvasDimensions,\n contentDimensions,\n scale,\n );\n return Rectangle.fromPointAndDimensions(position, dimensions);\n}\n\n/**\n * Translates a point in screen units, to a point in relative units.\n */\nexport function translatePointToRelative(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n contentDimensions: Dimensions.Dimensions = canvasDimensions,\n centeringBehavior: MarkupCenteringBehavior = 'none',\n scale = 1,\n offset: Point.Point = Point.create(0, 0),\n): Point.Point {\n const canvasToContentScaleFactor = Math.min(\n canvasDimensions.width / contentDimensions.width,\n canvasDimensions.height / contentDimensions.height,\n );\n const effectiveScalar = canvasToContentScaleFactor * scale;\n\n // Include an offset for width and height to account for cases where the\n // content dimensions are smaller than the canvas dimensions.\n const scaledContentWidth = contentDimensions.width * effectiveScalar;\n const scaledContentHeight = contentDimensions.height * effectiveScalar;\n const centerOffsetX =\n centeringBehavior === 'both' || centeringBehavior === 'x-only'\n ? Math.max(0, (canvasDimensions.width - scaledContentWidth) / 2)\n : 0;\n const centerOffsetY =\n centeringBehavior === 'both' || centeringBehavior === 'y-only'\n ? Math.max(0, (canvasDimensions.height - scaledContentHeight) / 2)\n : 0;\n\n const pointWithoutOffset = Point.subtract(\n pt,\n Point.scale(\n offset,\n 1 / getWindowDevicePixelRatio(),\n 1 / getWindowDevicePixelRatio(),\n ),\n );\n const centeredContentPoint = Point.create(\n (pointWithoutOffset.x - centerOffsetX) / effectiveScalar,\n (pointWithoutOffset.y - centerOffsetY) / effectiveScalar,\n );\n const contentScaleFactor = getScaleFactor(contentDimensions);\n const contentCenterRelativePoint = Point.subtract(\n centeredContentPoint,\n Dimensions.center(contentDimensions),\n );\n\n return Point.scale(\n contentCenterRelativePoint,\n 1 / contentScaleFactor,\n 1 / contentScaleFactor,\n );\n}\n\n/**\n * Translates a set of points in relative `original` units to\n * points in relative `bounds` units.\n */\nexport function translatePointsToBounds(\n points: Point.Point[],\n original: Rectangle.Rectangle,\n bounds: Rectangle.Rectangle,\n): Point.Point[] {\n return points.map((pt) =>\n Point.add(\n Point.scale(\n Point.subtract(pt, original),\n bounds.width / (original.width || 1),\n bounds.height / (original.height || 1),\n ),\n bounds,\n ),\n );\n}\n\nexport function createRectangle(\n initialPoint: Point.Point,\n currentPoint: Point.Point,\n maintainAspectRatio: boolean,\n): Rectangle.Rectangle {\n const bounds = Rectangle.fromPoints(initialPoint, currentPoint);\n if (maintainAspectRatio) {\n const fitBoundsSize = Math.max(bounds.width, bounds.height);\n const isPortrait = bounds.height > bounds.width;\n const currentIsLeftOfInitial = currentPoint.x <= initialPoint.x;\n const currentIsAboveInitial = currentPoint.y <= initialPoint.y;\n const fitBoundsX = currentIsLeftOfInitial\n ? isPortrait\n ? initialPoint.x - fitBoundsSize\n : currentPoint.x\n : initialPoint.x;\n const fitBoundsY = currentIsAboveInitial\n ? isPortrait\n ? currentPoint.y\n : initialPoint.y - fitBoundsSize\n : initialPoint.y;\n return Rectangle.create(\n fitBoundsX,\n fitBoundsY,\n fitBoundsSize,\n fitBoundsSize,\n );\n } else {\n return bounds;\n }\n}\n\nexport function transformRectangle(\n bounds: Rectangle.Rectangle,\n start: Point.Point,\n current: Point.Point,\n anchor: BoundingBox2dAnchorPosition,\n maintainAspectRatio?: boolean,\n): Rectangle.Rectangle {\n const delta = Point.subtract(current, start);\n const { x: left, y: top, width: w, height: h } = bounds;\n const right = left + w;\n const bottom = top + h;\n const topLeft = Point.create(left, top);\n const bottomLeft = Point.create(left, bottom);\n const topRight = Point.create(right, top);\n const bottomRight = Point.create(right, bottom);\n switch (anchor) {\n case 'top-left':\n return createRectangle(bottomRight, current, !!maintainAspectRatio);\n case 'top':\n return createRectangle(\n bottomRight,\n Point.create(left, current.y),\n !!maintainAspectRatio,\n );\n case 'top-right':\n return createRectangle(bottomLeft, current, !!maintainAspectRatio);\n case 'right':\n return createRectangle(\n bottomLeft,\n Point.create(current.x, top),\n !!maintainAspectRatio,\n );\n case 'bottom-right':\n return createRectangle(topLeft, current, !!maintainAspectRatio);\n case 'bottom':\n return createRectangle(\n topLeft,\n Point.create(right, current.y),\n !!maintainAspectRatio,\n );\n case 'bottom-left':\n return createRectangle(topRight, current, !!maintainAspectRatio);\n case 'left':\n return createRectangle(\n bottomRight,\n Point.create(current.x, top),\n !!maintainAspectRatio,\n );\n case 'center':\n return Rectangle.create(\n bounds.x + delta.x,\n bounds.y + delta.y,\n bounds.width,\n bounds.height,\n );\n }\n}\n\nexport function isVertexViewerMarkupElement(\n el: HTMLElement,\n): el is\n | HTMLVertexViewerMarkupArrowElement\n | HTMLVertexViewerMarkupCircleElement\n | HTMLVertexViewerMarkupFreeformElement {\n return (\n isVertexViewerArrowMarkup(el) ||\n isVertexViewerCircleMarkup(el) ||\n isVertexViewerFreeformMarkup(el)\n );\n}\n\nexport function isValidPointData(...points: Point.Point[]): boolean {\n return points.every((pt) => !Number.isNaN(pt.x) && !Number.isNaN(pt.y));\n}\n\nexport function isValidStartEvent(event: PointerEvent): boolean {\n const el = event.target as HTMLElement;\n\n return isVertexViewerMarkupElement(el) && el.mode !== 'edit';\n}\n\nfunction getScaleFactor(dimensions: Dimensions.Dimensions): number {\n // We intentionally use the content's height when scaling to maintain a consistent coordinate\n // space for markup. This is to ensure the markup will be displayed in the same position\n // on the canvas regardless of the aspect ratio at the time the markup was created.\n // See https://github.com/Vertexvis/vertex-web-sdk/pull/429 for more details.\n return dimensions.height;\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\n\nexport interface RelativeAnchorProps {\n id?: string;\n transform?: string;\n rotation?: number;\n name: string;\n point: Point.Point;\n onPointerDown?: (event: PointerEvent) => void;\n}\n\nexport const RelativeAnchor: FunctionalComponent<RelativeAnchorProps> = (\n { id, transform, rotation, name, point, onPointerDown },\n children,\n) => {\n return (\n <div\n id={id}\n class=\"bounds-anchor-position\"\n style={{\n top: `${point.y}px`,\n left: `${point.x}px`,\n }}\n onTouchStart={(event) => event.preventDefault()}\n onPointerDown={onPointerDown}\n >\n <div style={{ transform }}>\n <div\n class=\"bounds-anchor\"\n style={{\n transform: `rotateZ(${rotation ?? 0}deg)`,\n }}\n >\n <slot name={name}>{children}</slot>\n </div>\n </div>\n </div>\n );\n};\n\nexport interface SvgShadowProps {\n id: string;\n scale?: number;\n}\n\nexport const SvgShadow: FunctionalComponent<SvgShadowProps> = ({\n id,\n scale,\n}) => {\n // Scale default values for a `<filter>` element by the provided scale.\n // This prevents the filter area from being too small when scale is greater than 1,\n // and uses the default values for a scale less than 1 to prevent the same issue.\n // See https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/filter\n // for more details on the default values used here.\n const effectiveScale = scale ?? 1;\n const xOffset = Math.max(10, 10 * effectiveScale);\n const yOffset = Math.max(10, 10 * effectiveScale);\n const width = Math.max(120, 110 * effectiveScale + xOffset);\n const height = Math.max(120, 110 * effectiveScale + yOffset);\n\n return (\n <filter\n id={id}\n filterUnits=\"userSpaceOnUse\"\n x={`${-xOffset}%`}\n y={`${-yOffset}%`}\n width={`${width}%`}\n height={`${height}%`}\n >\n <feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"2\" />\n <feOffset dx=\"0\" dy=\"1\" result=\"offsetblur\" />\n <feFlood flood-color=\"#000000\" flood-opacity=\"0.25\" />\n <feComposite in2=\"offsetblur\" operator=\"in\" />\n <feMerge>\n <feMergeNode />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n );\n};\n","import { Dimensions, Point } from '@vertexvis/geometry';\nimport { BasicInteractionHandler } from '@vertexvis/utils';\n\nimport { MarkupCenteringBehavior } from '../types';\n\nexport interface MarkupInteractionHandlerScalingOptions {\n scale?: number;\n offset?: Point.Point;\n originatingViewport?: Dimensions.Dimensions;\n centeringBehavior?: MarkupCenteringBehavior;\n}\n\nexport abstract class MarkupInteractionHandler implements BasicInteractionHandler {\n protected element?: HTMLElement;\n protected elementBounds?: DOMRect;\n protected scalingOptions: MarkupInteractionHandlerScalingOptions;\n\n private resizeObserver: ResizeObserver;\n\n public constructor(scalingOptions?: MarkupInteractionHandlerScalingOptions) {\n this.resizeObserver = new ResizeObserver(([entry]) => {\n this.elementBounds = this.computeBoundingRect();\n });\n\n this.scalingOptions = scalingOptions ?? {};\n }\n\n public initialize(element: HTMLElement): void {\n this.element = element;\n\n this.elementBounds = this.computeBoundingRect();\n this.resizeObserver.observe(this.element);\n\n this.element.addEventListener('pointerdown', this.handlePointerDown);\n }\n\n public dispose(): void {\n this.resizeObserver.disconnect();\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n\n this.element = undefined;\n }\n\n public updateScalingOptions(\n scalingOptions: MarkupInteractionHandlerScalingOptions,\n ): void {\n this.scalingOptions = {\n ...this.scalingOptions,\n ...scalingOptions,\n };\n }\n\n public getScalingOptions(): MarkupInteractionHandlerScalingOptions {\n return this.scalingOptions;\n }\n\n protected acceptInteraction(): void {\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n private handlePointerDown = (event: PointerEvent): void => {\n this.handleInteractionAttempt(event);\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n this.handleInteractionMove(event);\n };\n\n private handlePointerUp = (event: PointerEvent): void => {\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.removeEventListener('pointerup', this.handlePointerUp);\n\n this.handleInteractionEnd(event);\n };\n\n protected abstract computeBoundingRect(): DOMRect;\n\n protected abstract handleInteractionAttempt(event: PointerEvent): void;\n\n protected abstract handleInteractionMove(event: PointerEvent): void;\n\n protected abstract handleInteractionEnd(event: PointerEvent): void;\n}\n"],"mappings":"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","ignoreList":[]}
|