@vertexvis/viewer 0.24.4-canary.8 → 0.24.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 +6 -0
- package/dist/cjs/{controller-f032798e.js → controller-4996f10d.js} +2 -2
- package/dist/cjs/{controller-f032798e.js.map → controller-4996f10d.js.map} +1 -1
- package/dist/cjs/{cursors-2dfb0ef3.js → cursors-17ad74ac.js} +2 -2
- package/dist/cjs/{cursors-2dfb0ef3.js.map → cursors-17ad74ac.js.map} +1 -1
- package/dist/cjs/dom-fc408b4c.js.map +1 -1
- package/dist/cjs/{errors-04aa7cf2.js → errors-78196ad4.js} +9 -1
- package/dist/cjs/errors-78196ad4.js.map +1 -0
- package/dist/cjs/{index-5fa5a527.js → index-0abd8b0b.js} +2 -2
- package/dist/cjs/index-0abd8b0b.js.map +1 -0
- package/dist/cjs/index.cjs.js +4 -4
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js.map +1 -1
- package/dist/cjs/{queries-68cd2664.js → queries-4580caa5.js} +9 -3
- package/dist/cjs/queries-4580caa5.js.map +1 -0
- package/dist/cjs/{shadow-css-8962c4a9.js → shadow-css-37297ac8.js} +1 -1
- package/dist/cjs/shadow-css-37297ac8.js.map +1 -0
- package/dist/cjs/{stencil-a3f4e15b.js → stencil-40ef9119.js} +2 -2
- package/dist/cjs/{stencil-a3f4e15b.js.map → stencil-40ef9119.js.map} +1 -1
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +8 -2
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-table-column.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-table-header.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-table-resize-divider.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-toolbar-group.cjs.entry.js +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 +1 -1
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-button_3.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-icon.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-layer.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-spinner.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +31 -15
- package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
- package/dist/cjs/viewer.cjs.js +1 -1
- package/dist/cjs/viewer.cjs.js.map +1 -1
- package/dist/collection/components/scene-tree/scene-tree.js +1 -1
- package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.js +21 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
- package/dist/collection/components/viewer/viewer.js +23 -13
- package/dist/collection/components/viewer/viewer.js.map +1 -1
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.css +5 -0
- package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js +3 -3
- package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js.map +1 -1
- package/dist/collection/lib/cursors.js +1 -1
- package/dist/collection/lib/cursors.js.map +1 -1
- package/dist/collection/lib/model-views/controller.js +7 -1
- package/dist/collection/lib/model-views/controller.js.map +1 -1
- package/dist/collection/lib/stream/stream.js +6 -5
- package/dist/collection/lib/stream/stream.js.map +1 -1
- package/dist/collection/testing/viewer.js +2 -2
- package/dist/collection/testing/viewer.js.map +1 -1
- package/dist/components/cursors.js +1 -1
- package/dist/components/cursors.js.map +1 -1
- package/dist/components/errors.js +8 -1
- package/dist/components/errors.js.map +1 -1
- package/dist/components/queries.js +7 -1
- package/dist/components/queries.js.map +1 -1
- package/dist/components/scene-tree-search.js +6 -0
- package/dist/components/scene-tree-search.js.map +1 -1
- package/dist/components/vertex-scene-tree.js.map +1 -1
- package/dist/components/vertex-viewer-walk-mode-tool.js +3 -3
- package/dist/components/vertex-viewer-walk-mode-tool.js.map +1 -1
- package/dist/components/vertex-viewer.js +27 -11
- package/dist/components/vertex-viewer.js.map +1 -1
- package/dist/components/viewer-pin-group.js +1 -1
- package/dist/components/viewer-pin-group.js.map +1 -1
- package/dist/esm/{controller-00b61632.js → controller-8cfb590e.js} +2 -2
- package/dist/esm/{controller-00b61632.js.map → controller-8cfb590e.js.map} +1 -1
- package/dist/esm/{cursors-9e349d61.js → cursors-3806bc04.js} +2 -2
- package/dist/esm/{cursors-9e349d61.js.map → cursors-3806bc04.js.map} +1 -1
- package/dist/esm/dom-dba69343.js.map +1 -1
- package/dist/esm/{errors-0cbe2f60.js → errors-3fccf79a.js} +9 -2
- package/dist/{cjs/errors-04aa7cf2.js.map → esm/errors-3fccf79a.js.map} +1 -1
- package/dist/esm/{index-f3e96c9e.js → index-c12dc0cd.js} +2 -2
- package/dist/esm/index-c12dc0cd.js.map +1 -0
- package/dist/esm/index.js +4 -4
- package/dist/esm/index.mjs +4 -4
- package/dist/esm/loader.js +1 -1
- package/dist/esm/loader.js.map +1 -1
- package/dist/esm/loader.mjs +1 -1
- package/dist/esm/{queries-794dddcf.js → queries-948a88f9.js} +9 -3
- package/dist/esm/queries-948a88f9.js.map +1 -0
- package/dist/esm/{shadow-css-9363884b.js → shadow-css-d5069bdf.js} +1 -1
- package/dist/esm/shadow-css-d5069bdf.js.map +1 -0
- package/dist/esm/{stencil-9d9f090f.js → stencil-38b2fc28.js} +2 -2
- package/dist/esm/{stencil-9d9f090f.js.map → stencil-38b2fc28.js.map} +1 -1
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +8 -2
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-table-column.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-table-header.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-table-resize-divider.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-toolbar-group.entry.js +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 +1 -1
- package/dist/esm/vertex-viewer-box-query-tool.entry.js +2 -2
- package/dist/esm/vertex-viewer-button_3.entry.js +1 -1
- package/dist/esm/vertex-viewer-default-toolbar.entry.js +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
- package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +2 -2
- package/dist/esm/vertex-viewer-icon.entry.js +1 -1
- package/dist/esm/vertex-viewer-layer.entry.js +1 -1
- package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +1 -1
- package/dist/esm/vertex-viewer-markup-tool.entry.js +1 -1
- package/dist/esm/vertex-viewer-markup.entry.js +1 -1
- package/dist/esm/vertex-viewer-measurement-details.entry.js +1 -1
- package/dist/esm/vertex-viewer-measurement-distance.entry.js +2 -2
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +1 -1
- package/dist/esm/vertex-viewer-measurement-precise.entry.js +2 -2
- package/dist/esm/vertex-viewer-pin-group.entry.js +5 -5
- package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-label_2.entry.js +2 -2
- package/dist/esm/vertex-viewer-pin-tool.entry.js +2 -2
- package/dist/esm/vertex-viewer-spinner.entry.js +1 -1
- package/dist/esm/vertex-viewer-teleport-tool.entry.js +1 -1
- package/dist/esm/vertex-viewer-transform-widget.entry.js +2 -2
- package/dist/esm/vertex-viewer-view-cube.entry.js +2 -2
- package/dist/esm/vertex-viewer-walk-mode-tool.entry.js +4 -4
- package/dist/esm/vertex-viewer-walk-mode-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer.entry.js +31 -15
- package/dist/esm/vertex-viewer.entry.js.map +1 -1
- package/dist/esm/viewer.js +1 -1
- package/dist/esm/viewer.js.map +1 -1
- package/dist/types/components/scene-tree/scene-tree.d.ts +1 -1
- package/dist/types/components/scene-tree-search/scene-tree-search.d.ts +5 -1
- package/dist/types/components/viewer/viewer.d.ts +3 -2
- package/dist/types/components.d.ts +11 -7
- package/dist/types/lib/stream/stream.d.ts +1 -1
- package/dist/types/testing/viewer.d.ts +2 -2
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/{p-0e0973f0.entry.js → p-03efd0d6.entry.js} +2 -2
- package/dist/viewer/{p-7f0eeb06.entry.js → p-0988832f.entry.js} +2 -2
- package/dist/viewer/{p-78a1be4e.entry.js → p-0aa04328.entry.js} +2 -2
- package/dist/viewer/p-18ce3f3b.entry.js +5 -0
- package/dist/viewer/{p-93960b4f.entry.js.map → p-18ce3f3b.entry.js.map} +1 -1
- package/dist/viewer/{p-2ecdcd5d.entry.js → p-23f0bb30.entry.js} +2 -2
- package/dist/viewer/{p-06b8bca7.entry.js → p-296311d3.entry.js} +2 -2
- package/dist/viewer/{p-2172230d.entry.js → p-2fd66679.entry.js} +2 -2
- package/dist/viewer/{p-5540add8.entry.js → p-362f3e12.entry.js} +2 -2
- package/dist/viewer/{p-110f66c6.js → p-388f809e.js} +2 -2
- package/dist/viewer/p-388f809e.js.map +1 -0
- package/dist/viewer/{p-48b63c5f.entry.js → p-45044ff2.entry.js} +2 -2
- package/dist/viewer/{p-9fc2e56e.entry.js → p-45b5b5ed.entry.js} +2 -2
- package/dist/viewer/{p-f79933ae.entry.js → p-4bd1ea70.entry.js} +2 -2
- package/dist/viewer/{p-842cc51b.entry.js → p-4bf16450.entry.js} +2 -2
- package/dist/viewer/{p-a057d7f2.entry.js → p-56fa8168.entry.js} +2 -2
- package/dist/viewer/{p-8c367e87.entry.js → p-59f204e7.entry.js} +2 -2
- package/dist/viewer/p-59f204e7.entry.js.map +1 -0
- package/dist/viewer/{p-33033b58.entry.js → p-6cf6eb8a.entry.js} +2 -2
- package/dist/viewer/p-715255e1.entry.js +5 -0
- package/dist/viewer/p-715255e1.entry.js.map +1 -0
- package/dist/viewer/{p-5f9352c0.entry.js → p-75f5ae33.entry.js} +2 -2
- package/dist/viewer/{p-7eea3fb3.entry.js → p-7a87ae97.entry.js} +2 -2
- package/dist/viewer/{p-b974c985.entry.js → p-86e1ee86.entry.js} +2 -2
- package/dist/viewer/p-86e1ee86.entry.js.map +1 -0
- package/dist/viewer/p-89d93218.entry.js +5 -0
- package/dist/viewer/p-89d93218.entry.js.map +1 -0
- package/dist/viewer/{p-07325d65.entry.js → p-8c53ed63.entry.js} +2 -2
- package/dist/viewer/p-991f7bac.js.map +1 -1
- package/dist/viewer/{p-983db3dd.entry.js → p-a009c6d9.entry.js} +2 -2
- package/dist/viewer/{p-dcb64250.entry.js → p-a3bc0b79.entry.js} +2 -2
- package/dist/viewer/{p-29318a17.entry.js → p-aece4279.entry.js} +2 -2
- package/dist/viewer/{p-be257155.js → p-b8c0f6ff.js} +1 -1
- package/dist/viewer/p-b8c0f6ff.js.map +1 -0
- package/dist/viewer/{p-2507658c.js → p-ba120f65.js} +2 -2
- package/dist/viewer/p-ba120f65.js.map +1 -0
- package/dist/viewer/p-bab8266e.js +5 -0
- package/dist/viewer/p-bab8266e.js.map +1 -0
- package/dist/viewer/{p-05562c21.entry.js → p-bcddbdb2.entry.js} +2 -2
- package/dist/viewer/{p-40e8a5ea.entry.js → p-c3b071a3.entry.js} +2 -2
- package/dist/viewer/{p-fbfa1e82.entry.js → p-cd3f0870.entry.js} +2 -2
- package/dist/viewer/{p-d2677c13.entry.js → p-d9e75269.entry.js} +2 -2
- package/dist/viewer/p-e1eaedd8.js +5 -0
- package/dist/viewer/{p-a27a9775.entry.js → p-e70e2c04.entry.js} +2 -2
- package/dist/viewer/{p-ffa8a2dd.entry.js → p-ebea8f56.entry.js} +2 -2
- package/dist/viewer/{p-342dac8b.js → p-eda9f5d4.js} +2 -2
- package/dist/viewer/{p-342dac8b.js.map → p-eda9f5d4.js.map} +1 -1
- package/dist/viewer/{p-9d54d593.entry.js → p-f292e8ae.entry.js} +2 -2
- package/dist/viewer/{p-6f1b22f0.js → p-f8951894.js} +2 -2
- package/dist/viewer/{p-d024c250.entry.js → p-f8a9c4d2.entry.js} +2 -2
- package/dist/viewer/viewer.esm.js +1 -1
- package/dist/viewer/viewer.esm.js.map +1 -1
- package/package.json +7 -7
- package/readme.md +10 -4
- package/dist/cjs/index-5fa5a527.js.map +0 -1
- package/dist/cjs/queries-68cd2664.js.map +0 -1
- package/dist/cjs/shadow-css-8962c4a9.js.map +0 -1
- package/dist/esm/errors-0cbe2f60.js.map +0 -1
- package/dist/esm/index-f3e96c9e.js.map +0 -1
- package/dist/esm/queries-794dddcf.js.map +0 -1
- package/dist/esm/shadow-css-9363884b.js.map +0 -1
- package/dist/viewer/p-04bf6b89.js +0 -5
- package/dist/viewer/p-110f66c6.js.map +0 -1
- package/dist/viewer/p-2507658c.js.map +0 -1
- package/dist/viewer/p-2ce9b8f7.entry.js +0 -5
- package/dist/viewer/p-2ce9b8f7.entry.js.map +0 -1
- package/dist/viewer/p-629a5ae7.entry.js +0 -5
- package/dist/viewer/p-629a5ae7.entry.js.map +0 -1
- package/dist/viewer/p-8c367e87.entry.js.map +0 -1
- package/dist/viewer/p-93960b4f.entry.js +0 -5
- package/dist/viewer/p-b974c985.entry.js.map +0 -1
- package/dist/viewer/p-be257155.js.map +0 -1
- package/dist/viewer/p-d9093da4.js +0 -5
- package/dist/viewer/p-d9093da4.js.map +0 -1
- /package/dist/viewer/{p-0e0973f0.entry.js.map → p-03efd0d6.entry.js.map} +0 -0
- /package/dist/viewer/{p-7f0eeb06.entry.js.map → p-0988832f.entry.js.map} +0 -0
- /package/dist/viewer/{p-78a1be4e.entry.js.map → p-0aa04328.entry.js.map} +0 -0
- /package/dist/viewer/{p-2ecdcd5d.entry.js.map → p-23f0bb30.entry.js.map} +0 -0
- /package/dist/viewer/{p-06b8bca7.entry.js.map → p-296311d3.entry.js.map} +0 -0
- /package/dist/viewer/{p-2172230d.entry.js.map → p-2fd66679.entry.js.map} +0 -0
- /package/dist/viewer/{p-5540add8.entry.js.map → p-362f3e12.entry.js.map} +0 -0
- /package/dist/viewer/{p-48b63c5f.entry.js.map → p-45044ff2.entry.js.map} +0 -0
- /package/dist/viewer/{p-9fc2e56e.entry.js.map → p-45b5b5ed.entry.js.map} +0 -0
- /package/dist/viewer/{p-f79933ae.entry.js.map → p-4bd1ea70.entry.js.map} +0 -0
- /package/dist/viewer/{p-842cc51b.entry.js.map → p-4bf16450.entry.js.map} +0 -0
- /package/dist/viewer/{p-a057d7f2.entry.js.map → p-56fa8168.entry.js.map} +0 -0
- /package/dist/viewer/{p-33033b58.entry.js.map → p-6cf6eb8a.entry.js.map} +0 -0
- /package/dist/viewer/{p-5f9352c0.entry.js.map → p-75f5ae33.entry.js.map} +0 -0
- /package/dist/viewer/{p-7eea3fb3.entry.js.map → p-7a87ae97.entry.js.map} +0 -0
- /package/dist/viewer/{p-07325d65.entry.js.map → p-8c53ed63.entry.js.map} +0 -0
- /package/dist/viewer/{p-983db3dd.entry.js.map → p-a009c6d9.entry.js.map} +0 -0
- /package/dist/viewer/{p-dcb64250.entry.js.map → p-a3bc0b79.entry.js.map} +0 -0
- /package/dist/viewer/{p-29318a17.entry.js.map → p-aece4279.entry.js.map} +0 -0
- /package/dist/viewer/{p-05562c21.entry.js.map → p-bcddbdb2.entry.js.map} +0 -0
- /package/dist/viewer/{p-40e8a5ea.entry.js.map → p-c3b071a3.entry.js.map} +0 -0
- /package/dist/viewer/{p-fbfa1e82.entry.js.map → p-cd3f0870.entry.js.map} +0 -0
- /package/dist/viewer/{p-d2677c13.entry.js.map → p-d9e75269.entry.js.map} +0 -0
- /package/dist/viewer/{p-04bf6b89.js.map → p-e1eaedd8.js.map} +0 -0
- /package/dist/viewer/{p-a27a9775.entry.js.map → p-e70e2c04.entry.js.map} +0 -0
- /package/dist/viewer/{p-ffa8a2dd.entry.js.map → p-ebea8f56.entry.js.map} +0 -0
- /package/dist/viewer/{p-9d54d593.entry.js.map → p-f292e8ae.entry.js.map} +0 -0
- /package/dist/viewer/{p-6f1b22f0.js.map → p-f8951894.js.map} +0 -0
- /package/dist/viewer/{p-d024c250.entry.js.map → p-f8a9c4d2.entry.js.map} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{h as e,F as t,r as i,H as o}from"./p-110f66c6.js";import{v as r,q as a,e as n}from"./p-9d26f24e.js";import{r as c}from"./p-04bf6b89.js";import{O as s,f as d,S as l}from"./p-e656bd4c.js";import"./p-0d971ad6.js";import{c as h}from"./p-92793987.js";import"./p-3060996e.js";import"./p-6b00f7cd.js";import"./p-e5cc48b6.js";const f={front:{direction:r.back(),quaternion:a.create()},back:{direction:r.forward(),quaternion:a.fromAxisAngle(r.up(),Math.PI)},left:{direction:r.left(),quaternion:a.fromAxisAngle(r.down(),Math.PI/2)},right:{direction:r.right(),quaternion:a.fromAxisAngle(r.up(),Math.PI/2)},top:{direction:r.up(),quaternion:a.fromAxisAngle(r.right(),-Math.PI/2)},bottom:{direction:r.down(),quaternion:a.fromAxisAngle(r.left(),-Math.PI/2)}};const b=({label:i,length:o,rotationAxis:c})=>{const s={width:`${o+5}px`};const d=a.fromAxisAngle(c,Math.PI/2);const l=r.scale(o+15,r.right());return e(t,null,e("vertex-viewer-dom-group",{quaternion:d},e("vertex-viewer-dom-element",{style:s,billboardOff:true,interactionsOff:true},e("div",{class:`triad-axis triad-axis-${i.toLowerCase()}`})),e("vertex-viewer-dom-element",{rotation:n.create({x:Math.PI/2,y:0,z:0}),style:s,billboardOff:true,interactionsOff:true},e("div",{class:`triad-axis triad-axis-${i.toLowerCase()}`})),e("vertex-viewer-dom-element",{position:l,interactionsOff:true},e("div",{class:`triad-label triad-label-${i.toLowerCase()}`},i))))};const g=({label:t,length:i,side:o,disabled:a,onPointerDown:n})=>{const{direction:c,quaternion:s}=f[o];const d=r.scale(i/2-.1,c);return e("vertex-viewer-dom-element",{class:h("cube-side",{disabled:a}),position:d,quaternion:s,style:{width:`${i}px`,height:`${i}px`},onPointerDown:n,billboardOff:true},e("div",{class:`cube-side-face cube-side-face-${t.toLowerCase()}`},t))};const v=({length:t,face1Side:i,face1Corner:o,face2Side:a,face2Corner:n,face3Side:c,face3Corner:s,disabled:d,onPointerDown:l})=>{const{direction:b,quaternion:g}=f[i];const{direction:v,quaternion:u}=f[a];const{direction:w,quaternion:p}=f[c];const m=r.scale(t/2,b);const x=r.scale(t/2,v);const S=r.scale(t/2,w);const y={width:`${t}px`,height:`${t}px`};return e("vertex-viewer-dom-group",{class:h("cube-corner",{disabled:d}),onPointerDown:l},e("vertex-viewer-dom-element",{position:m,quaternion:g,style:y,billboardOff:true},e("div",{class:`cube-corner-face ${o}`})),e("vertex-viewer-dom-element",{position:x,quaternion:u,style:y,billboardOff:true},e("div",{class:`cube-corner-face ${n}`})),e("vertex-viewer-dom-element",{position:S,quaternion:p,style:y,billboardOff:true},e("div",{class:`cube-corner-face ${s}`})))};const u=({length:t,face1Side:i,face2Side:o,face1Edge:a,face2Edge:n,disabled:c,onPointerDown:s})=>{const{direction:d,quaternion:l}=f[i];const{direction:b,quaternion:g}=f[o];const v=r.scale(t/2,d);const u=r.scale(t/2,b);const w={width:`${t}px`,height:`${t}px`};return e("vertex-viewer-dom-group",{class:h("cube-edge",{disabled:c}),onPointerDown:s},e("vertex-viewer-dom-element",{position:v,quaternion:l,style:w,billboardOff:true},e("div",{class:`cube-edge-face ${a}`})),e("vertex-viewer-dom-element",{position:u,quaternion:g,style:w,billboardOff:true},e("div",{class:`cube-edge-face ${n}`})))};const w=({length:t})=>{const{direction:i,quaternion:o}=f.top;const a=r.scale(-t/2,i);return e("vertex-viewer-dom-element",{class:"cube-shadow",position:a,quaternion:o,style:{width:`${t}px`,height:`${t}px`},billboardOff:true,interactionsOff:true},e("div",{class:"cube-shadow-face"}))};const p=":host{--viewer-view-cube-side-background:var(--white);--viewer-view-cube-side-background-hover:var(--blue-500);--viewer-view-cube-side-background-hover-opacity:0.25;--viewer-view-cube-side-border:1.5px solid var(--neutral-500);--viewer-view-cube-edge-length:12px;--viewer-view-cube-opacity:0.8;--viewer-view-cube-triad-x-axis-color:var(--x-axis-color);--viewer-view-cube-triad-y-axis-color:var(--y-axis-color);--viewer-view-cube-triad-z-axis-color:var(--z-axis-color);color:var(--neutral-700);width:80px;height:80px;margin:20px;position:relative;display:flex;align-items:center;justify-content:center;user-select:none}.renderer{position:unset;width:100%;height:100%;overflow:visible !important}.reference-point{width:5px;height:5px;border-radius:50%;background-color:black}.triad{pointer-events:none}.triad-axis{width:100%;height:1.5px;outline:1px solid transparent;transform:translateX(50%)}.triad-axis-x{background-color:#ea3324}.triad-axis-y{background-color:#4faf32}.triad-axis-z{background-color:#0000ff}.triad-label{font-family:Arial, Helvetica, sans-serif;font-size:0.6875rem}.triad-label-x{color:var(--viewer-view-cube-triad-x-axis-color)}.triad-label-y{color:var(--viewer-view-cube-triad-y-axis-color)}.triad-label-z{color:var(--viewer-view-cube-triad-z-axis-color)}.cube{pointer-events:initial}.cube:hover .cube-side-face{opacity:1}.cube-side{backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-side-face{box-sizing:border-box;font-size:0.875rem;text-transform:uppercase;width:100%;height:100%;background-color:var(--viewer-view-cube-side-background);border:var(--viewer-view-cube-side-border);display:flex;align-items:center;justify-content:center;outline:1px solid transparent;opacity:var(--viewer-view-cube-opacity);transition:opacity 0.2s ease-in-out}.cube-side-face::before{content:'';position:absolute;left:calc(var(--viewer-view-cube-edge-length) - 4px);right:calc(var(--viewer-view-cube-edge-length) - 4px);top:calc(var(--viewer-view-cube-edge-length) - 4px);bottom:calc(var(--viewer-view-cube-edge-length) - 4px)}.cube-corner,.cube-edge{position:relative}.cube-corner-face,.cube-edge-face{position:absolute;backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-edge-face.top{top:0;left:var(--viewer-view-cube-edge-length);right:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-edge-face.bottom{bottom:0;left:var(--viewer-view-cube-edge-length);right:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-edge-face.left{left:0;top:var(--viewer-view-cube-edge-length);bottom:var(--viewer-view-cube-edge-length);width:var(--viewer-view-cube-edge-length)}.cube-edge-face.right{right:0;top:var(--viewer-view-cube-edge-length);bottom:var(--viewer-view-cube-edge-length);width:var(--viewer-view-cube-edge-length)}.cube-corner-face{width:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-corner-face.top-left{top:0;left:0}.cube-corner-face.top-right{top:0;right:0}.cube-corner-face.bottom-right{bottom:0;right:0}.cube-corner-face.bottom-left{bottom:0;left:0}.cube-shadow{backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-shadow-face{position:absolute;left:4px;right:4px;top:4px;bottom:4px;background-color:black;opacity:0.12;filter:blur(4px)}.cube-side-face,.cube-corner-face,.cube-edge-face{pointer-events:initial}.cube-corner .cube-corner-face,.cube-edge .cube-edge-face,.cube-side .cube-side-face::before{background:var(--viewer-view-cube-side-background-hover);opacity:0}.cube-corner:hover .cube-corner-face,.cube-edge:hover .cube-edge-face,.cube-side:hover .cube-side-face::before{opacity:var(--viewer-view-cube-side-background-hover-opacity)}.cube-corner.disabled,.cube-edge.disabled,.cube-side.disabled{pointer-events:none}";const m=class{constructor(e){i(this,e);this.boxLength=80;this.triadPosition=r.origin();this.xPositiveLabel="Right";this.xNegativeLabel="Left";this.yPositiveLabel="Top";this.yNegativeLabel="Bottom";this.zPositiveLabel="Front";this.zNegativeLabel="Back";this.standardViewsOff=false;this.viewAll=true;this.animationDuration=500;this.triadOff=false;this.worldOrientation=s.DEFAULT;this.updateMatrices=()=>{var e;if(((e=this.viewer)===null||e===void 0?void 0:e.frame)!=null){const{camera:e}=this.viewer.frame.scene;const t=this.boxLength/2;this.triadPosition=r.create(-t-5,-t-5,-t-5);const i=3.125;const o=this.boxLength*i;const a=21.5;this.camera=new d(r.scale(o,r.negate(e.direction)),r.origin(),e.up,.1,100,1,a);this.worldOrientation=this.viewer.frame.scene.worldOrientation}}}handleViewerChanged(e,t){t===null||t===void 0?void 0:t.removeEventListener("frameDrawn",this.updateMatrices);e===null||e===void 0?void 0:e.addEventListener("frameDrawn",this.updateMatrices);this.updateMatrices()}handleStandardView(e){if(this.standardViewsOff){return async()=>undefined}else{return async()=>{if(this.viewer!=null){const t=await this.viewer.scene();const i=this.animationDuration>0?{animation:{milliseconds:this.animationDuration}}:{};const o=e.transformMatrix(this.worldOrientation.matrix);const a=t.boundingBox();if(!this.viewAll){t.camera().standardViewFixedLookAt(o).render(i)}else if((a===null||a===void 0?void 0:a.max)!=null&&r.isEqual(a.max,r.origin())&&r.isEqual(a.min,r.origin())){t.camera().standardView(o).render(i)}else{t.camera().standardView(o).viewAll().render(i)}}}}}componentWillLoad(){this.handleViewerChanged(this.viewer)}componentDidLoad(){if(this.rendererEl!=null){const e=new ResizeObserver((()=>this.handleRendererResized()));e.observe(this.rendererEl);this.handleRendererResized()}}handleRendererResized(){c((()=>{if(this.rendererEl!=null){const e=this.rendererEl.getBoundingClientRect();this.boxLength=Math.min(e.width,e.height)}}))}render(){return e(o,null,e("vertex-viewer-dom-renderer",{ref:e=>this.rendererEl=e,class:"renderer",camera:this.camera},!this.triadOff&&e("vertex-viewer-dom-group",{class:"triad",position:this.triadPosition},e(b,{label:"X",length:this.boxLength,rotationAxis:r.origin()}),e(b,{label:"Y",length:this.boxLength,rotationAxis:r.back()}),e(b,{label:"Z",length:this.boxLength,rotationAxis:r.down()})),e("vertex-viewer-dom-group",{class:"cube",matrix:this.worldOrientation.matrix},e(w,{length:this.boxLength+10}),e(g,{label:this.zPositiveLabel,length:this.boxLength,side:"front",onPointerDown:this.handleStandardView(l.FRONT),disabled:this.standardViewsOff}),e(g,{label:this.zNegativeLabel,length:this.boxLength,side:"back",onPointerDown:this.handleStandardView(l.BACK),disabled:this.standardViewsOff}),e(g,{label:this.xNegativeLabel,length:this.boxLength,side:"left",onPointerDown:this.handleStandardView(l.LEFT),disabled:this.standardViewsOff}),e(g,{label:this.xPositiveLabel,length:this.boxLength,side:"right",onPointerDown:this.handleStandardView(l.RIGHT),disabled:this.standardViewsOff}),e(g,{label:this.yPositiveLabel,length:this.boxLength,side:"top",onPointerDown:this.handleStandardView(l.TOP),disabled:this.standardViewsOff}),e(g,{label:this.yNegativeLabel,length:this.boxLength,side:"bottom",onPointerDown:this.handleStandardView(l.BOTTOM),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"top",face1Edge:"bottom",face2Side:"front",face2Edge:"top",onPointerDown:this.handleStandardView(l.TOP_FRONT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"front",face1Edge:"right",face2Side:"right",face2Edge:"left",onPointerDown:this.handleStandardView(l.FRONT_LEFT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"bottom",face1Edge:"top",face2Side:"front",face2Edge:"bottom",onPointerDown:this.handleStandardView(l.BOTTOM_FRONT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"front",face1Edge:"left",face2Side:"left",face2Edge:"right",onPointerDown:this.handleStandardView(l.FRONT_RIGHT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"top",face1Edge:"right",face2Side:"right",face2Edge:"top",onPointerDown:this.handleStandardView(l.TOP_LEFT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"back",face1Edge:"left",face2Side:"right",face2Edge:"right",onPointerDown:this.handleStandardView(l.BACK_LEFT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"bottom",face1Edge:"right",face2Side:"right",face2Edge:"bottom",onPointerDown:this.handleStandardView(l.BOTTOM_LEFT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"top",face1Edge:"top",face2Side:"back",face2Edge:"top",onPointerDown:this.handleStandardView(l.TOP_BACK),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"back",face1Edge:"right",face2Side:"left",face2Edge:"left",onPointerDown:this.handleStandardView(l.BACK_RIGHT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"bottom",face1Edge:"bottom",face2Side:"back",face2Edge:"bottom",onPointerDown:this.handleStandardView(l.BOTTOM_BACK),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"top",face1Edge:"left",face2Side:"left",face2Edge:"top",onPointerDown:this.handleStandardView(l.TOP_RIGHT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"bottom",face1Edge:"left",face2Side:"left",face2Edge:"bottom",onPointerDown:this.handleStandardView(l.BOTTOM_RIGHT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"top",face1Corner:"bottom-left",face2Side:"front",face2Corner:"top-left",face3Side:"left",face3Corner:"top-right",onPointerDown:this.handleStandardView(l.TOP_FRONT_RIGHT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"top",face1Corner:"bottom-right",face2Side:"front",face2Corner:"top-right",face3Side:"right",face3Corner:"top-left",onPointerDown:this.handleStandardView(l.TOP_FRONT_LEFT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"bottom",face1Corner:"top-right",face2Side:"front",face2Corner:"bottom-right",face3Side:"right",face3Corner:"bottom-left",onPointerDown:this.handleStandardView(l.BOTTOM_FRONT_LEFT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"bottom",face1Corner:"top-left",face2Side:"front",face2Corner:"bottom-left",face3Side:"left",face3Corner:"bottom-right",onPointerDown:this.handleStandardView(l.BOTTOM_FRONT_RIGHT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"top",face1Corner:"top-right",face2Side:"back",face2Corner:"top-left",face3Side:"right",face3Corner:"top-right",onPointerDown:this.handleStandardView(l.TOP_BACK_LEFT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"top",face1Corner:"top-left",face2Side:"back",face2Corner:"top-right",face3Side:"left",face3Corner:"top-left",onPointerDown:this.handleStandardView(l.TOP_BACK_RIGHT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"bottom",face1Corner:"bottom-left",face2Side:"back",face2Corner:"bottom-right",face3Side:"left",face3Corner:"bottom-left",onPointerDown:this.handleStandardView(l.BOTTOM_BACK_RIGHT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"bottom",face1Corner:"bottom-right",face2Side:"back",face2Corner:"bottom-left",face3Side:"right",face3Corner:"bottom-right",onPointerDown:this.handleStandardView(l.BOTTOM_BACK_LEFT),disabled:this.standardViewsOff}))))}static get watchers(){return{viewer:["handleViewerChanged"]}}};m.style=p;export{m as vertex_viewer_view_cube};
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{h as e,F as t,r as i,H as o}from"./p-388f809e.js";import{v as r,q as a,e as n}from"./p-9d26f24e.js";import{r as c}from"./p-e1eaedd8.js";import{O as s,f as d,S as l}from"./p-e656bd4c.js";import"./p-0d971ad6.js";import{c as h}from"./p-92793987.js";import"./p-3060996e.js";import"./p-6b00f7cd.js";import"./p-e5cc48b6.js";const f={front:{direction:r.back(),quaternion:a.create()},back:{direction:r.forward(),quaternion:a.fromAxisAngle(r.up(),Math.PI)},left:{direction:r.left(),quaternion:a.fromAxisAngle(r.down(),Math.PI/2)},right:{direction:r.right(),quaternion:a.fromAxisAngle(r.up(),Math.PI/2)},top:{direction:r.up(),quaternion:a.fromAxisAngle(r.right(),-Math.PI/2)},bottom:{direction:r.down(),quaternion:a.fromAxisAngle(r.left(),-Math.PI/2)}};const b=({label:i,length:o,rotationAxis:c})=>{const s={width:`${o+5}px`};const d=a.fromAxisAngle(c,Math.PI/2);const l=r.scale(o+15,r.right());return e(t,null,e("vertex-viewer-dom-group",{quaternion:d},e("vertex-viewer-dom-element",{style:s,billboardOff:true,interactionsOff:true},e("div",{class:`triad-axis triad-axis-${i.toLowerCase()}`})),e("vertex-viewer-dom-element",{rotation:n.create({x:Math.PI/2,y:0,z:0}),style:s,billboardOff:true,interactionsOff:true},e("div",{class:`triad-axis triad-axis-${i.toLowerCase()}`})),e("vertex-viewer-dom-element",{position:l,interactionsOff:true},e("div",{class:`triad-label triad-label-${i.toLowerCase()}`},i))))};const g=({label:t,length:i,side:o,disabled:a,onPointerDown:n})=>{const{direction:c,quaternion:s}=f[o];const d=r.scale(i/2-.1,c);return e("vertex-viewer-dom-element",{class:h("cube-side",{disabled:a}),position:d,quaternion:s,style:{width:`${i}px`,height:`${i}px`},onPointerDown:n,billboardOff:true},e("div",{class:`cube-side-face cube-side-face-${t.toLowerCase()}`},t))};const v=({length:t,face1Side:i,face1Corner:o,face2Side:a,face2Corner:n,face3Side:c,face3Corner:s,disabled:d,onPointerDown:l})=>{const{direction:b,quaternion:g}=f[i];const{direction:v,quaternion:u}=f[a];const{direction:w,quaternion:p}=f[c];const m=r.scale(t/2,b);const x=r.scale(t/2,v);const S=r.scale(t/2,w);const y={width:`${t}px`,height:`${t}px`};return e("vertex-viewer-dom-group",{class:h("cube-corner",{disabled:d}),onPointerDown:l},e("vertex-viewer-dom-element",{position:m,quaternion:g,style:y,billboardOff:true},e("div",{class:`cube-corner-face ${o}`})),e("vertex-viewer-dom-element",{position:x,quaternion:u,style:y,billboardOff:true},e("div",{class:`cube-corner-face ${n}`})),e("vertex-viewer-dom-element",{position:S,quaternion:p,style:y,billboardOff:true},e("div",{class:`cube-corner-face ${s}`})))};const u=({length:t,face1Side:i,face2Side:o,face1Edge:a,face2Edge:n,disabled:c,onPointerDown:s})=>{const{direction:d,quaternion:l}=f[i];const{direction:b,quaternion:g}=f[o];const v=r.scale(t/2,d);const u=r.scale(t/2,b);const w={width:`${t}px`,height:`${t}px`};return e("vertex-viewer-dom-group",{class:h("cube-edge",{disabled:c}),onPointerDown:s},e("vertex-viewer-dom-element",{position:v,quaternion:l,style:w,billboardOff:true},e("div",{class:`cube-edge-face ${a}`})),e("vertex-viewer-dom-element",{position:u,quaternion:g,style:w,billboardOff:true},e("div",{class:`cube-edge-face ${n}`})))};const w=({length:t})=>{const{direction:i,quaternion:o}=f.top;const a=r.scale(-t/2,i);return e("vertex-viewer-dom-element",{class:"cube-shadow",position:a,quaternion:o,style:{width:`${t}px`,height:`${t}px`},billboardOff:true,interactionsOff:true},e("div",{class:"cube-shadow-face"}))};const p=":host{--viewer-view-cube-side-background:var(--white);--viewer-view-cube-side-background-hover:var(--blue-500);--viewer-view-cube-side-background-hover-opacity:0.25;--viewer-view-cube-side-border:1.5px solid var(--neutral-500);--viewer-view-cube-edge-length:12px;--viewer-view-cube-opacity:0.8;--viewer-view-cube-triad-x-axis-color:var(--x-axis-color);--viewer-view-cube-triad-y-axis-color:var(--y-axis-color);--viewer-view-cube-triad-z-axis-color:var(--z-axis-color);color:var(--neutral-700);width:80px;height:80px;margin:20px;position:relative;display:flex;align-items:center;justify-content:center;user-select:none}.renderer{position:unset;width:100%;height:100%;overflow:visible !important}.reference-point{width:5px;height:5px;border-radius:50%;background-color:black}.triad{pointer-events:none}.triad-axis{width:100%;height:1.5px;outline:1px solid transparent;transform:translateX(50%)}.triad-axis-x{background-color:#ea3324}.triad-axis-y{background-color:#4faf32}.triad-axis-z{background-color:#0000ff}.triad-label{font-family:Arial, Helvetica, sans-serif;font-size:0.6875rem}.triad-label-x{color:var(--viewer-view-cube-triad-x-axis-color)}.triad-label-y{color:var(--viewer-view-cube-triad-y-axis-color)}.triad-label-z{color:var(--viewer-view-cube-triad-z-axis-color)}.cube{pointer-events:initial}.cube:hover .cube-side-face{opacity:1}.cube-side{backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-side-face{box-sizing:border-box;font-size:0.875rem;text-transform:uppercase;width:100%;height:100%;background-color:var(--viewer-view-cube-side-background);border:var(--viewer-view-cube-side-border);display:flex;align-items:center;justify-content:center;outline:1px solid transparent;opacity:var(--viewer-view-cube-opacity);transition:opacity 0.2s ease-in-out}.cube-side-face::before{content:'';position:absolute;left:calc(var(--viewer-view-cube-edge-length) - 4px);right:calc(var(--viewer-view-cube-edge-length) - 4px);top:calc(var(--viewer-view-cube-edge-length) - 4px);bottom:calc(var(--viewer-view-cube-edge-length) - 4px)}.cube-corner,.cube-edge{position:relative}.cube-corner-face,.cube-edge-face{position:absolute;backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-edge-face.top{top:0;left:var(--viewer-view-cube-edge-length);right:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-edge-face.bottom{bottom:0;left:var(--viewer-view-cube-edge-length);right:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-edge-face.left{left:0;top:var(--viewer-view-cube-edge-length);bottom:var(--viewer-view-cube-edge-length);width:var(--viewer-view-cube-edge-length)}.cube-edge-face.right{right:0;top:var(--viewer-view-cube-edge-length);bottom:var(--viewer-view-cube-edge-length);width:var(--viewer-view-cube-edge-length)}.cube-corner-face{width:var(--viewer-view-cube-edge-length);height:var(--viewer-view-cube-edge-length)}.cube-corner-face.top-left{top:0;left:0}.cube-corner-face.top-right{top:0;right:0}.cube-corner-face.bottom-right{bottom:0;right:0}.cube-corner-face.bottom-left{bottom:0;left:0}.cube-shadow{backface-visibility:hidden;-webkit-backface-visibility:hidden}.cube-shadow-face{position:absolute;left:4px;right:4px;top:4px;bottom:4px;background-color:black;opacity:0.12;filter:blur(4px)}.cube-side-face,.cube-corner-face,.cube-edge-face{pointer-events:initial}.cube-corner .cube-corner-face,.cube-edge .cube-edge-face,.cube-side .cube-side-face::before{background:var(--viewer-view-cube-side-background-hover);opacity:0}.cube-corner:hover .cube-corner-face,.cube-edge:hover .cube-edge-face,.cube-side:hover .cube-side-face::before{opacity:var(--viewer-view-cube-side-background-hover-opacity)}.cube-corner.disabled,.cube-edge.disabled,.cube-side.disabled{pointer-events:none}";const m=class{constructor(e){i(this,e);this.boxLength=80;this.triadPosition=r.origin();this.xPositiveLabel="Right";this.xNegativeLabel="Left";this.yPositiveLabel="Top";this.yNegativeLabel="Bottom";this.zPositiveLabel="Front";this.zNegativeLabel="Back";this.standardViewsOff=false;this.viewAll=true;this.animationDuration=500;this.triadOff=false;this.worldOrientation=s.DEFAULT;this.updateMatrices=()=>{var e;if(((e=this.viewer)===null||e===void 0?void 0:e.frame)!=null){const{camera:e}=this.viewer.frame.scene;const t=this.boxLength/2;this.triadPosition=r.create(-t-5,-t-5,-t-5);const i=3.125;const o=this.boxLength*i;const a=21.5;this.camera=new d(r.scale(o,r.negate(e.direction)),r.origin(),e.up,.1,100,1,a);this.worldOrientation=this.viewer.frame.scene.worldOrientation}}}handleViewerChanged(e,t){t===null||t===void 0?void 0:t.removeEventListener("frameDrawn",this.updateMatrices);e===null||e===void 0?void 0:e.addEventListener("frameDrawn",this.updateMatrices);this.updateMatrices()}handleStandardView(e){if(this.standardViewsOff){return async()=>undefined}else{return async()=>{if(this.viewer!=null){const t=await this.viewer.scene();const i=this.animationDuration>0?{animation:{milliseconds:this.animationDuration}}:{};const o=e.transformMatrix(this.worldOrientation.matrix);const a=t.boundingBox();if(!this.viewAll){t.camera().standardViewFixedLookAt(o).render(i)}else if((a===null||a===void 0?void 0:a.max)!=null&&r.isEqual(a.max,r.origin())&&r.isEqual(a.min,r.origin())){t.camera().standardView(o).render(i)}else{t.camera().standardView(o).viewAll().render(i)}}}}}componentWillLoad(){this.handleViewerChanged(this.viewer)}componentDidLoad(){if(this.rendererEl!=null){const e=new ResizeObserver((()=>this.handleRendererResized()));e.observe(this.rendererEl);this.handleRendererResized()}}handleRendererResized(){c((()=>{if(this.rendererEl!=null){const e=this.rendererEl.getBoundingClientRect();this.boxLength=Math.min(e.width,e.height)}}))}render(){return e(o,null,e("vertex-viewer-dom-renderer",{ref:e=>this.rendererEl=e,class:"renderer",camera:this.camera},!this.triadOff&&e("vertex-viewer-dom-group",{class:"triad",position:this.triadPosition},e(b,{label:"X",length:this.boxLength,rotationAxis:r.origin()}),e(b,{label:"Y",length:this.boxLength,rotationAxis:r.back()}),e(b,{label:"Z",length:this.boxLength,rotationAxis:r.down()})),e("vertex-viewer-dom-group",{class:"cube",matrix:this.worldOrientation.matrix},e(w,{length:this.boxLength+10}),e(g,{label:this.zPositiveLabel,length:this.boxLength,side:"front",onPointerDown:this.handleStandardView(l.FRONT),disabled:this.standardViewsOff}),e(g,{label:this.zNegativeLabel,length:this.boxLength,side:"back",onPointerDown:this.handleStandardView(l.BACK),disabled:this.standardViewsOff}),e(g,{label:this.xNegativeLabel,length:this.boxLength,side:"left",onPointerDown:this.handleStandardView(l.LEFT),disabled:this.standardViewsOff}),e(g,{label:this.xPositiveLabel,length:this.boxLength,side:"right",onPointerDown:this.handleStandardView(l.RIGHT),disabled:this.standardViewsOff}),e(g,{label:this.yPositiveLabel,length:this.boxLength,side:"top",onPointerDown:this.handleStandardView(l.TOP),disabled:this.standardViewsOff}),e(g,{label:this.yNegativeLabel,length:this.boxLength,side:"bottom",onPointerDown:this.handleStandardView(l.BOTTOM),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"top",face1Edge:"bottom",face2Side:"front",face2Edge:"top",onPointerDown:this.handleStandardView(l.TOP_FRONT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"front",face1Edge:"right",face2Side:"right",face2Edge:"left",onPointerDown:this.handleStandardView(l.FRONT_LEFT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"bottom",face1Edge:"top",face2Side:"front",face2Edge:"bottom",onPointerDown:this.handleStandardView(l.BOTTOM_FRONT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"front",face1Edge:"left",face2Side:"left",face2Edge:"right",onPointerDown:this.handleStandardView(l.FRONT_RIGHT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"top",face1Edge:"right",face2Side:"right",face2Edge:"top",onPointerDown:this.handleStandardView(l.TOP_LEFT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"back",face1Edge:"left",face2Side:"right",face2Edge:"right",onPointerDown:this.handleStandardView(l.BACK_LEFT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"bottom",face1Edge:"right",face2Side:"right",face2Edge:"bottom",onPointerDown:this.handleStandardView(l.BOTTOM_LEFT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"top",face1Edge:"top",face2Side:"back",face2Edge:"top",onPointerDown:this.handleStandardView(l.TOP_BACK),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"back",face1Edge:"right",face2Side:"left",face2Edge:"left",onPointerDown:this.handleStandardView(l.BACK_RIGHT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"bottom",face1Edge:"bottom",face2Side:"back",face2Edge:"bottom",onPointerDown:this.handleStandardView(l.BOTTOM_BACK),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"top",face1Edge:"left",face2Side:"left",face2Edge:"top",onPointerDown:this.handleStandardView(l.TOP_RIGHT),disabled:this.standardViewsOff}),e(u,{length:this.boxLength,face1Side:"bottom",face1Edge:"left",face2Side:"left",face2Edge:"bottom",onPointerDown:this.handleStandardView(l.BOTTOM_RIGHT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"top",face1Corner:"bottom-left",face2Side:"front",face2Corner:"top-left",face3Side:"left",face3Corner:"top-right",onPointerDown:this.handleStandardView(l.TOP_FRONT_RIGHT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"top",face1Corner:"bottom-right",face2Side:"front",face2Corner:"top-right",face3Side:"right",face3Corner:"top-left",onPointerDown:this.handleStandardView(l.TOP_FRONT_LEFT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"bottom",face1Corner:"top-right",face2Side:"front",face2Corner:"bottom-right",face3Side:"right",face3Corner:"bottom-left",onPointerDown:this.handleStandardView(l.BOTTOM_FRONT_LEFT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"bottom",face1Corner:"top-left",face2Side:"front",face2Corner:"bottom-left",face3Side:"left",face3Corner:"bottom-right",onPointerDown:this.handleStandardView(l.BOTTOM_FRONT_RIGHT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"top",face1Corner:"top-right",face2Side:"back",face2Corner:"top-left",face3Side:"right",face3Corner:"top-right",onPointerDown:this.handleStandardView(l.TOP_BACK_LEFT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"top",face1Corner:"top-left",face2Side:"back",face2Corner:"top-right",face3Side:"left",face3Corner:"top-left",onPointerDown:this.handleStandardView(l.TOP_BACK_RIGHT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"bottom",face1Corner:"bottom-left",face2Side:"back",face2Corner:"bottom-right",face3Side:"left",face3Corner:"bottom-left",onPointerDown:this.handleStandardView(l.BOTTOM_BACK_RIGHT),disabled:this.standardViewsOff}),e(v,{length:this.boxLength,face1Side:"bottom",face1Corner:"bottom-right",face2Side:"back",face2Corner:"bottom-left",face3Side:"right",face3Corner:"bottom-right",onPointerDown:this.handleStandardView(l.BOTTOM_BACK_LEFT),disabled:this.standardViewsOff}))))}static get watchers(){return{viewer:["handleViewerChanged"]}}};m.style=p;export{m as vertex_viewer_view_cube};
|
|
5
|
+
//# sourceMappingURL=p-56fa8168.entry.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{r as t,c as i,h as s,H as h,g as e}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{r as t,c as i,h as s,H as h,g as e}from"./p-388f809e.js";import{V as o,W as n,a as l}from"./p-bcc20d66.js";import{v as d}from"./p-9d26f24e.js";import"./p-6b00f7cd.js";function a(t){return t instanceof Element}class r{constructor(t){this.model=t;this.pressed={};this.handleKeyUp=async t=>{const i=t.key.toLocaleLowerCase();this.pressed=Object.keys(this.pressed).filter((t=>t!==i)).reduce(((t,i)=>Object.assign(Object.assign({},t),{[i]:true})),{});if(Object.keys(this.pressed).length===0&&this.interval!=null){this.endInteraction()}};this.endInteraction=async()=>{var t;this.clearInterval();await((t=this.api)===null||t===void 0?void 0:t.endInteraction())};this.handleKeyDown=this.handleKeyDown.bind(this);this.handleKeyUp=this.handleKeyUp.bind(this);this.handleEnabledChange=this.handleEnabledChange.bind(this);this.restartInteraction=this.restartInteraction.bind(this);this.updateCamera=this.updateCamera.bind(this);this.handlers={[o.MOVE_DOWN]:this.moveDown.bind(this),[o.MOVE_UP]:this.moveUp.bind(this),[o.PIVOT_DOWN]:this.pivotDown.bind(this),[o.PIVOT_LEFT]:this.pivotLeft.bind(this),[o.PIVOT_RIGHT]:this.pivotRight.bind(this),[o.PIVOT_UP]:this.pivotUp.bind(this),[o.WALK_BACKWARD]:this.walkBackward.bind(this),[o.WALK_FORWARD]:this.walkForward.bind(this),[o.WALK_LEFT]:this.walkLeft.bind(this),[o.WALK_RIGHT]:this.walkRight.bind(this)};this.enabledChangeDisposable=this.model.onEnabledChange(this.handleEnabledChange);this.keyBindingsChangeDisposable=this.model.onKeyBindingsChange(this.restartInteraction);this.configurationChangeDisposable=this.model.onConfigurationChange(this.restartInteraction)}dispose(){var t,i,s;this.disable();(t=this.enabledChangeDisposable)===null||t===void 0?void 0:t.dispose();(i=this.keyBindingsChangeDisposable)===null||i===void 0?void 0:i.dispose();(s=this.configurationChangeDisposable)===null||s===void 0?void 0:s.dispose();window.removeEventListener("keydown",this.handleKeyDown);window.removeEventListener("keyup",this.handleKeyUp)}initialize(t,i){this.api=i;this.handleEnabledChange(this.model.getEnabled())}enable(){this.disable();window.addEventListener("keydown",this.handleKeyDown);window.addEventListener("keyup",this.handleKeyUp)}disable(){window.removeEventListener("keydown",this.handleKeyDown);window.removeEventListener("keyup",this.handleKeyUp)}handleKeyDown(t){const i=t.key.toLowerCase();const s=a(t.target)&&this.model.isElementExcluded(t.target);if(!t.repeat&&!s){this.pressed=Object.assign(Object.assign({},this.pressed),{[i]:true});this.tryBeginInteraction()}}handleEnabledChange(t){if(t){this.enable()}else{this.disable()}}restartInteraction(){this.clearInterval();this.tryBeginInteraction()}tryBeginInteraction(){if(Object.keys(this.pressed).length>0&&this.someOperationMatches()){this.beginInteraction()}}beginInteraction(){var t,i;if(!((t=this.api)===null||t===void 0?void 0:t.isInteracting())){(i=this.api)===null||i===void 0?void 0:i.beginInteraction()}if(this.interval==null){this.interval=setInterval(this.updateCamera,this.model.getKeyboardRepeatInterval())}}clearInterval(){if(this.interval!=null){clearInterval(this.interval);this.interval=undefined}}updateCamera(){Object.keys(this.handlers).forEach((t=>{const i=t;if(this.model.operationMatches(i,this.pressed)){this.handlers[i]()}}))}someOperationMatches(){return Object.keys(this.handlers).some((t=>this.model.operationMatches(t,this.pressed)))}pivotLeft(){var t;(t=this.api)===null||t===void 0?void 0:t.pivotCamera(0,this.model.getKeyboardPivotDegrees())}pivotRight(){var t;(t=this.api)===null||t===void 0?void 0:t.pivotCamera(0,-this.model.getKeyboardPivotDegrees())}pivotUp(){var t;(t=this.api)===null||t===void 0?void 0:t.pivotCamera(-this.model.getKeyboardPivotDegrees(),0)}pivotDown(){var t;(t=this.api)===null||t===void 0?void 0:t.pivotCamera(this.model.getKeyboardPivotDegrees(),0)}walkForward(){var t;(t=this.api)===null||t===void 0?void 0:t.walk(d.scale(this.relativeWalkSpeed(),d.forward()))}walkBackward(){var t;(t=this.api)===null||t===void 0?void 0:t.walk(d.scale(this.relativeWalkSpeed(),d.back()))}walkLeft(){var t;(t=this.api)===null||t===void 0?void 0:t.walk(d.scale(this.relativeWalkSpeed(),d.left()))}walkRight(){var t;(t=this.api)===null||t===void 0?void 0:t.walk(d.scale(this.relativeWalkSpeed(),d.right()))}moveUp(){var t;(t=this.api)===null||t===void 0?void 0:t.walk(d.scale(this.relativeWalkSpeed(),d.down()))}moveDown(){var t;(t=this.api)===null||t===void 0?void 0:t.walk(d.scale(this.relativeWalkSpeed(),d.up()))}relativeWalkSpeed(){return this.model.getKeyboardWalkSpeed()/500}}const v=":host{position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none}";const c=class{constructor(s){t(this,s);this.controllerChanged=i(this,"controllerChanged",7);this.model=new n;this.enabled=true;this.stateMap={}}componentWillLoad(){this.setupController();this.setupInteractionHandler()}async componentDidLoad(){await this.ensureTeleportToolConfigured();this.updateTeleportTool();await this.setPivotInteractionMode()}connectedCallback(){this.setupInteractionHandler();this.setPivotInteractionMode()}disconnectedCallback(){this.clearInteractionHandler();this.resetInteractionMode()}handleEnabledChanged(){var t;(t=this.controller)===null||t===void 0?void 0:t.setEnabled(this.enabled);this.toggleInteractionMode()}handleViewerChanged(){this.clearInteractionHandler();this.setupInteractionHandler();this.updateTeleportTool();this.toggleInteractionMode()}handleTeleportModeChanged(){this.updateTeleportTool()}handleControllerChanged(){this.updateTeleportTool();this.controllerChanged.emit(this.controller)}handleModelChanged(){this.setupController();this.clearInteractionHandler();this.setupInteractionHandler()}render(){return s(h,null,s("slot",{name:"teleport-tool",onSlotchange:async()=>{await this.ensureTeleportToolConfigured();this.updateTeleportTool()}}))}setupController(){if(this.controller==null){this.controller=new l(this.model);this.controllerChanged.emit(this.controller)}else{this.controller.updateModel(this.model)}}clearInteractionHandler(){var t,i;(t=this.interactionHandlerDisposable)===null||t===void 0?void 0:t.dispose();this.interactionHandlerDisposable=undefined;(i=this.interactionHandler)===null||i===void 0?void 0:i.dispose();this.interactionHandler=undefined}async setupInteractionHandler(){var t;if(this.interactionHandler==null){this.interactionHandler=new r(this.model);this.interactionHandlerDisposable=await((t=this.viewer)===null||t===void 0?void 0:t.registerInteractionHandler(this.interactionHandler))}}async ensureTeleportToolConfigured(){var t,i,s;if(this.hostEl!=null){const h=(i=(t=this.hostEl)===null||t===void 0?void 0:t.querySelector('vertex-viewer-teleport-tool[slot="teleport-tool"]'))!==null&&i!==void 0?i:undefined;const e=(h===null||h===void 0?void 0:h.tagName)==="VERTEX-VIEWER-TELEPORT-TOOL"?h:undefined;if(e!=null){this.stateMap.teleportTool=e}else{this.stateMap.teleportTool=document.createElement("vertex-viewer-teleport-tool");this.stateMap.teleportTool.slot="teleport-tool";(s=this.hostEl)===null||s===void 0?void 0:s.appendChild(this.stateMap.teleportTool)}}}updateTeleportTool(){if(this.stateMap.teleportTool!=null){this.stateMap.teleportTool.viewer=this.viewer;this.stateMap.teleportTool.controller=this.controller;this.stateMap.teleportTool.model=this.model;this.stateMap.teleportTool.mode=this.teleportMode}}toggleInteractionMode(){if(this.enabled){this.setPivotInteractionMode()}else{this.resetInteractionMode()}}async setPivotInteractionMode(){var t;const i=await((t=this.viewer)===null||t===void 0?void 0:t.getBaseInteractionHandler());if(this.enabled&&i!=null){const t=i.getPrimaryInteractionType();this.stateMap.previousPrimaryInteractionType=t==="pivot"?this.stateMap.previousPrimaryInteractionType:t;i.setPrimaryInteractionType("pivot")}}async resetInteractionMode(){var t;const i=await((t=this.viewer)===null||t===void 0?void 0:t.getBaseInteractionHandler());if(i!=null&&i.getPrimaryInteractionType()==="pivot"&&this.stateMap.previousPrimaryInteractionType!=null){i.setPrimaryInteractionType(this.stateMap.previousPrimaryInteractionType);this.stateMap.previousPrimaryInteractionType=undefined}}get hostEl(){return e(this)}static get watchers(){return{enabled:["handleEnabledChanged"],viewer:["handleViewerChanged"],teleportMode:["handleTeleportModeChanged"],controller:["handleControllerChanged"],model:["handleModelChanged"]}}};c.style=v;export{c as vertex_viewer_walk_mode_tool};
|
|
5
|
+
//# sourceMappingURL=p-59f204e7.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["src/lib/walk-mode/dom.ts","src/lib/walk-mode/interactions.ts","src/components/viewer-walk-mode-tool/viewer-walk-mode-tool.css?tag=vertex-viewer-walk-mode-tool&encapsulation=shadow","src/components/viewer-walk-mode-tool/viewer-walk-mode-tool.tsx"],"names":["targetIsElement","target","Element","WalkInteractionHandler","[object Object]","model","this","pressed","handleKeyUp","async","event","key","toLocaleLowerCase","Object","keys","filter","k","reduce","assign","length","interval","endInteraction","clearInterval","_a","api","handleKeyDown","bind","handleEnabledChange","restartInteraction","updateCamera","handlers","ViewerWalkModeOperation","MOVE_DOWN","moveDown","MOVE_UP","moveUp","PIVOT_DOWN","pivotDown","PIVOT_LEFT","pivotLeft","PIVOT_RIGHT","pivotRight","PIVOT_UP","pivotUp","WALK_BACKWARD","walkBackward","WALK_FORWARD","walkForward","WALK_LEFT","walkLeft","WALK_RIGHT","walkRight","enabledChangeDisposable","onEnabledChange","keyBindingsChangeDisposable","onKeyBindingsChange","configurationChangeDisposable","onConfigurationChange","disable","dispose","_b","_c","window","removeEventListener","_","getEnabled","addEventListener","toLowerCase","exclude","isElementExcluded","repeat","tryBeginInteraction","enabled","enable","someOperationMatches","beginInteraction","isInteracting","setInterval","getKeyboardRepeatInterval","undefined","forEach","op","operationMatches","some","pivotCamera","getKeyboardPivotDegrees","walk","Vector3","scale","relativeWalkSpeed","forward","back","left","right","down","up","getKeyboardWalkSpeed","viewerWalkModeToolCss","ViewerWalkModeTool","hostRef","WalkModeModel","stateMap","setupController","setupInteractionHandler","ensureTeleportToolConfigured","updateTeleportTool","setPivotInteractionMode","clearInteractionHandler","resetInteractionMode","controller","setEnabled","toggleInteractionMode","controllerChanged","emit","h","Host","name","onSlotchange","WalkModeController","updateModel","interactionHandlerDisposable","interactionHandler","viewer","registerInteractionHandler","hostEl","slotted","querySelector","slottedTeleportTool","tagName","teleportTool","document","createElement","slot","appendChild","mode","teleportMode","baseInteractionHandler","getBaseInteractionHandler","interactionType","getPrimaryInteractionType","previousPrimaryInteractionType","setPrimaryInteractionType"],"mappings":"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","sourcesContent":["export function targetIsElement(target: EventTarget | null): target is Element {\n return target instanceof Element;\n}\n","import { Vector3 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { InteractionApiPerspective, InteractionHandler } from '../interactions';\nimport { targetIsElement } from './dom';\nimport { ViewerWalkModeOperation, WalkModeModel } from './model';\n\nexport class WalkInteractionHandler implements InteractionHandler {\n private api?: InteractionApiPerspective;\n\n private interval?: NodeJS.Timer;\n private pressed: Record<string, boolean> = {};\n private handlers: Record<ViewerWalkModeOperation, VoidFunction>;\n\n private enabledChangeDisposable?: Disposable;\n private keyBindingsChangeDisposable?: Disposable;\n private configurationChangeDisposable?: Disposable;\n\n public constructor(private model: WalkModeModel) {\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleKeyUp = this.handleKeyUp.bind(this);\n this.handleEnabledChange = this.handleEnabledChange.bind(this);\n this.restartInteraction = this.restartInteraction.bind(this);\n this.updateCamera = this.updateCamera.bind(this);\n\n this.handlers = {\n [ViewerWalkModeOperation.MOVE_DOWN]: this.moveDown.bind(this),\n [ViewerWalkModeOperation.MOVE_UP]: this.moveUp.bind(this),\n [ViewerWalkModeOperation.PIVOT_DOWN]: this.pivotDown.bind(this),\n [ViewerWalkModeOperation.PIVOT_LEFT]: this.pivotLeft.bind(this),\n [ViewerWalkModeOperation.PIVOT_RIGHT]: this.pivotRight.bind(this),\n [ViewerWalkModeOperation.PIVOT_UP]: this.pivotUp.bind(this),\n [ViewerWalkModeOperation.WALK_BACKWARD]: this.walkBackward.bind(this),\n [ViewerWalkModeOperation.WALK_FORWARD]: this.walkForward.bind(this),\n [ViewerWalkModeOperation.WALK_LEFT]: this.walkLeft.bind(this),\n [ViewerWalkModeOperation.WALK_RIGHT]: this.walkRight.bind(this),\n };\n\n this.enabledChangeDisposable = this.model.onEnabledChange(\n this.handleEnabledChange\n );\n this.keyBindingsChangeDisposable = this.model.onKeyBindingsChange(\n this.restartInteraction\n );\n this.configurationChangeDisposable = this.model.onConfigurationChange(\n this.restartInteraction\n );\n }\n\n public dispose(): void {\n this.disable();\n this.enabledChangeDisposable?.dispose();\n this.keyBindingsChangeDisposable?.dispose();\n this.configurationChangeDisposable?.dispose();\n\n window.removeEventListener('keydown', this.handleKeyDown);\n window.removeEventListener('keyup', this.handleKeyUp);\n }\n\n public initialize(_: HTMLElement, api: InteractionApiPerspective): void {\n this.api = api;\n\n this.handleEnabledChange(this.model.getEnabled());\n }\n\n public enable(): void {\n this.disable();\n\n window.addEventListener('keydown', this.handleKeyDown);\n window.addEventListener('keyup', this.handleKeyUp);\n }\n\n public disable(): void {\n window.removeEventListener('keydown', this.handleKeyDown);\n window.removeEventListener('keyup', this.handleKeyUp);\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n const key = event.key.toLowerCase();\n\n const exclude =\n targetIsElement(event.target) &&\n this.model.isElementExcluded(event.target);\n\n if (!event.repeat && !exclude) {\n this.pressed = { ...this.pressed, [key]: true };\n\n this.tryBeginInteraction();\n }\n }\n\n private handleKeyUp = async (event: KeyboardEvent): Promise<void> => {\n const key = event.key.toLocaleLowerCase();\n\n this.pressed = Object.keys(this.pressed)\n .filter((k) => k !== key)\n .reduce((pressed, k) => ({ ...pressed, [k]: true }), {});\n\n if (Object.keys(this.pressed).length === 0 && this.interval != null) {\n this.endInteraction();\n }\n };\n\n private handleEnabledChange(enabled: boolean): void {\n if (enabled) {\n this.enable();\n } else {\n this.disable();\n }\n }\n\n private restartInteraction(): void {\n this.clearInterval();\n this.tryBeginInteraction();\n }\n\n private tryBeginInteraction(): void {\n if (Object.keys(this.pressed).length > 0 && this.someOperationMatches()) {\n this.beginInteraction();\n }\n }\n\n private beginInteraction(): void {\n if (!this.api?.isInteracting()) {\n this.api?.beginInteraction();\n }\n\n if (this.interval == null) {\n this.interval = setInterval(\n this.updateCamera,\n this.model.getKeyboardRepeatInterval()\n );\n }\n }\n\n private endInteraction = async (): Promise<void> => {\n this.clearInterval();\n await this.api?.endInteraction();\n };\n\n private clearInterval(): void {\n if (this.interval != null) {\n clearInterval(this.interval);\n this.interval = undefined;\n }\n }\n\n private updateCamera(): void {\n Object.keys(this.handlers).forEach((key) => {\n const op = key as ViewerWalkModeOperation;\n\n if (this.model.operationMatches(op, this.pressed)) {\n this.handlers[op]();\n }\n });\n }\n\n private someOperationMatches(): boolean {\n return Object.keys(this.handlers).some((op) =>\n this.model.operationMatches(op as ViewerWalkModeOperation, this.pressed)\n );\n }\n\n private pivotLeft(): void {\n this.api?.pivotCamera(0, this.model.getKeyboardPivotDegrees());\n }\n\n private pivotRight(): void {\n this.api?.pivotCamera(0, -this.model.getKeyboardPivotDegrees());\n }\n\n private pivotUp(): void {\n this.api?.pivotCamera(-this.model.getKeyboardPivotDegrees(), 0);\n }\n\n private pivotDown(): void {\n this.api?.pivotCamera(this.model.getKeyboardPivotDegrees(), 0);\n }\n\n private walkForward(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.forward()));\n }\n\n private walkBackward(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.back()));\n }\n\n private walkLeft(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.left()));\n }\n\n private walkRight(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.right()));\n }\n\n private moveUp(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.down()));\n }\n\n private moveDown(): void {\n this.api?.walk(Vector3.scale(this.relativeWalkSpeed(), Vector3.up()));\n }\n\n private relativeWalkSpeed(): number {\n return this.model.getKeyboardWalkSpeed() / 500;\n }\n}\n",":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n pointer-events: none;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n Prop,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { InteractionType } from '../../lib/interactions/baseInteractionHandler';\nimport { WalkModeController } from '../../lib/walk-mode/controller';\nimport { WalkInteractionHandler } from '../../lib/walk-mode/interactions';\nimport { ViewerTeleportMode, WalkModeModel } from '../../lib/walk-mode/model';\n\ninterface StateMap {\n teleportTool?: HTMLVertexViewerTeleportToolElement;\n previousPrimaryInteractionType?: InteractionType;\n}\n\n/**\n * The `<vertex-viewer-walk-mode-tool>` allows for additional interactions\n * intended for walking through a model instead of orbiting a model.\n */\n@Component({\n tag: 'vertex-viewer-walk-mode-tool',\n styleUrl: 'viewer-walk-mode-tool.css',\n shadow: true,\n})\nexport class ViewerWalkModeTool {\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The `WalkModeController` responsible for controlling `KeyBinding`s and excluded\n * elements, as well as updating the `WalkModeModel` with various configuration\n * settings.\n */\n @Prop({ mutable: true })\n public controller?: WalkModeController;\n\n /**\n * The `WalkModeModel` responsible for tracking configuration and emitting\n * events for interaction handlers to respond to.\n */\n @Prop({ mutable: true })\n public model: WalkModeModel = new WalkModeModel();\n\n /**\n * The type of teleportation to perform when clicking. This value is passed through\n * to a `<vertex-viewer-teleport-tool>`'s mode attribute.\n *\n * `teleport` - the camera's `position` is moved to the location of the hit result\n * constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `teleport-and-align` - the camera's `position`, `lookAt`, and `up` vectors are updated\n * to align to the plane represented by the hit result's position and normal.\n *\n * `teleport-toward` - the camera's `position` is moved a fixed distance toward the location of the\n * hit result constrained by the plane represented by the camera's current `position` and `up`\n * vectors.\n *\n * `undefined` - no teleportation will occur when clicking.\n *\n * Defaults to `undefined`.\n */\n @Prop()\n public teleportMode?: ViewerTeleportMode;\n\n /**\n * Determines whether the interaction handlers for this tool should respond to events.\n * When set to `true`, the default viewer interaction mode will be overridden to use the\n * `pivot` camera interaction type, keyboard controls for movement will be added, and\n * setting the `teleportMode` will enable the tool.\n *\n * Defaults to `true`.\n */\n @Prop()\n public enabled = true;\n\n /**\n * Event emitted when the `WalkModeController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<WalkModeController>;\n\n @Element()\n private hostEl?: HTMLElement;\n\n private interactionHandlerDisposable?: Disposable;\n private interactionHandler?: WalkInteractionHandler;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n await this.ensureTeleportToolConfigured();\n this.updateTeleportTool();\n await this.setPivotInteractionMode();\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setPivotInteractionMode();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.resetInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('enabled')\n protected handleEnabledChanged(): void {\n this.controller?.setEnabled(this.enabled);\n this.toggleInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n this.updateTeleportTool();\n this.toggleInteractionMode();\n }\n\n /**\n * @ignore\n */\n @Watch('teleportMode')\n protected handleTeleportModeChanged(): void {\n this.updateTeleportTool();\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChanged(): void {\n this.updateTeleportTool();\n this.controllerChanged.emit(this.controller);\n }\n\n /**\n * @ignore\n */\n @Watch('model')\n protected handleModelChanged(): void {\n this.setupController();\n this.clearInteractionHandler();\n this.setupInteractionHandler();\n }\n\n protected render(): JSX.Element {\n return (\n <Host>\n <slot\n name=\"teleport-tool\"\n onSlotchange={async () => {\n await this.ensureTeleportToolConfigured();\n this.updateTeleportTool();\n }}\n ></slot>\n </Host>\n );\n }\n\n private setupController(): void {\n if (this.controller == null) {\n this.controller = new WalkModeController(this.model);\n this.controllerChanged.emit(this.controller);\n } else {\n this.controller.updateModel(this.model);\n }\n }\n\n private clearInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandlerDisposable = undefined;\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private async setupInteractionHandler(): Promise<void> {\n if (this.interactionHandler == null) {\n this.interactionHandler = new WalkInteractionHandler(this.model);\n\n this.interactionHandlerDisposable =\n await this.viewer?.registerInteractionHandler(this.interactionHandler);\n }\n }\n\n private async ensureTeleportToolConfigured(): Promise<void> {\n if (this.hostEl != null) {\n const slotted: Element | undefined =\n this.hostEl?.querySelector(\n 'vertex-viewer-teleport-tool[slot=\"teleport-tool\"]'\n ) ?? undefined;\n const slottedTeleportTool =\n slotted?.tagName === 'VERTEX-VIEWER-TELEPORT-TOOL'\n ? (slotted as HTMLVertexViewerTeleportToolElement)\n : undefined;\n\n if (slottedTeleportTool != null) {\n this.stateMap.teleportTool = slottedTeleportTool;\n } else {\n this.stateMap.teleportTool = document.createElement(\n 'vertex-viewer-teleport-tool'\n );\n this.stateMap.teleportTool.slot = 'teleport-tool';\n\n this.hostEl?.appendChild(this.stateMap.teleportTool);\n }\n }\n }\n\n private updateTeleportTool(): void {\n if (this.stateMap.teleportTool != null) {\n this.stateMap.teleportTool.viewer = this.viewer;\n this.stateMap.teleportTool.controller = this.controller;\n this.stateMap.teleportTool.model = this.model;\n this.stateMap.teleportTool.mode = this.teleportMode;\n }\n }\n\n private toggleInteractionMode(): void {\n if (this.enabled) {\n this.setPivotInteractionMode();\n } else {\n this.resetInteractionMode();\n }\n }\n\n private async setPivotInteractionMode(): Promise<void> {\n const baseInteractionHandler =\n await this.viewer?.getBaseInteractionHandler();\n\n if (this.enabled && baseInteractionHandler != null) {\n const interactionType =\n baseInteractionHandler.getPrimaryInteractionType();\n this.stateMap.previousPrimaryInteractionType =\n interactionType === 'pivot'\n ? this.stateMap.previousPrimaryInteractionType\n : interactionType;\n baseInteractionHandler.setPrimaryInteractionType('pivot');\n }\n }\n\n private async resetInteractionMode(): Promise<void> {\n const baseInteractionHandler =\n await this.viewer?.getBaseInteractionHandler();\n\n if (\n baseInteractionHandler != null &&\n baseInteractionHandler.getPrimaryInteractionType() === 'pivot' &&\n this.stateMap.previousPrimaryInteractionType != null\n ) {\n baseInteractionHandler.setPrimaryInteractionType(\n this.stateMap.previousPrimaryInteractionType\n );\n this.stateMap.previousPrimaryInteractionType = undefined;\n }\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{r as i,h as t,H as s,g as n}from"./p-
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{r as i,h as t,H as s,g as n}from"./p-388f809e.js";import{v as h,m as o,q as e,r as l,c as r}from"./p-9d26f24e.js";import{w as a,r as d}from"./p-e1eaedd8.js";import{M as c,R as u,r as v,s as p,T as f,c as m,a as w,A as g,b as N}from"./p-945101b6.js";import"./p-e5cc48b6.js";import"./p-6b00f7cd.js";import"./p-a4a34f15.js";import"./p-e656bd4c.js";import"./p-3060996e.js";import"./p-0d971ad6.js";import"./p-148e5f47.js";function j(i,t){return i.getPropertyValue(t).trim().replace(/["']*/g,"")}function b(i,t,s,n){const a=h.transformMatrix(s,o.makeRotation(e.fromMatrixRotation(i)));const d=h.fromMatrixPosition(i);const u=Math.abs(h.dot(a,h.up()))===1?h.left():h.normalize(h.cross(a,h.up()));const v=h.normalize(h.cross(u,a));const p=l.create({origin:d,direction:u});const f=l.create({origin:d,direction:v});const m=h.rotateAboutAxis(r.toRadians(45),l.at(p,-n),a,d);const w=h.rotateAboutAxis(r.toRadians(45),l.at(f,-n),a,d);const g=h.rotateAboutAxis(r.toRadians(45),l.at(f,n),a,d);const N=h.rotateAboutAxis(r.toRadians(45),l.at(p,n),a,d);const j=[m,w,N,g];return new c(!isNaN(u.x),[m,w,N,g],j.map((i=>h.transformMatrix(i,t.projectionViewMatrix))),(i=>h.distance(d,i)))}function O(i,t,s,n){const a=h.transformMatrix(s,o.makeRotation(e.fromMatrixRotation(i)));const d=h.fromMatrixPosition(i);const u=h.normalize(h.cross(a,h.normalize(t.viewVector)));const v=h.normalize(h.cross(a,u));const p=l.create({origin:d,direction:u});const f=l.create({origin:d,direction:v});const m=l.at(p,-n);const w=l.at(f,-n);const g=l.at(f,n);const N=l.at(p,n);const j=h.rotateAboutAxis(r.toRadians(45),m,a,d);const b=h.rotateAboutAxis(r.toRadians(45),w,a,d);const O=h.rotateAboutAxis(r.toRadians(45),g,a,d);const C=h.rotateAboutAxis(r.toRadians(45),N,a,d);const y=[m,j,w,b,N,C,g,O];return new c(!isNaN(u.x),y,y.map((i=>h.transformMatrix(i,t.projectionViewMatrix))),(i=>h.distance(d,i)))}const C=.4;const y=5;const S=.75;class $ extends u{constructor(i,t={},s={}){super(i);this.arrowFillColor=t.arrow;this.planeFillColor=t.plane;this.outlineColor=t.outline;this.planeOpacity=s.plane}updateTransformAndNormal(i,t){var s;this.transform=i;this.normal=t;if(i!=null&&t!=null&&this.frame!=null){this.updateAndDraw()}else{this.clear();(s=this.reglFrameDisposable)===null||s===void 0?void 0:s.cancel();this.reglFrameDisposable=undefined}}updateColors(i){var t,s,n,h,o,e,l,r,a;this.arrowFillColor=(t=i.arrow)!==null&&t!==void 0?t:this.arrowFillColor;this.planeFillColor=(s=i.plane)!==null&&s!==void 0?s:this.planeFillColor;this.outlineColor=(n=i.outline)!==null&&n!==void 0?n:this.outlineColor;(h=this.arrow)===null||h===void 0?void 0:h.updateFillColor(this.arrowFillColor);(o=this.plane)===null||o===void 0?void 0:o.updateFillColor(this.planeFillColor);(e=this.arrow)===null||e===void 0?void 0:e.updateOutlineColor(this.outlineColor);(l=this.plane)===null||l===void 0?void 0:l.updateOutlineColor(this.outlineColor);(r=this.point)===null||r===void 0?void 0:r.updateOutlineColor(this.outlineColor);(a=this.axis)===null||a===void 0?void 0:a.updateOutlineColor(this.outlineColor)}updateOpacities(i){this.planeOpacity=i.plane}hasData(){return this.transform!=null&&this.normal!=null}createOrUpdateElements(){if(this.transform!=null&&this.normal!=null&&this.frame!=null){if(this.arrow==null){this.createElements(this.transform,this.normal,this.frame)}else{this.updateElements(this.transform,this.normal,this.frame)}}}createElements(i,t,s){this.reglCommand=v({canvas:this.canvasElement,extensions:"angle_instanced_arrays"});const{createShape:n}=p(this.reglCommand);const o=this.computeTriangleSize(h.fromMatrixPosition(i),s);this.arrow=new f(n,"hit-normal-arrow",m(i,s.scene.camera,t,o),this.outlineColor,this.arrowFillColor);this.plane=new w(n,"hit-plane",b(i,s.scene.camera,t,o*y),this.outlineColor,this.planeFillColor,{opacity:this.getPlaneOpacity(),depth:.5});this.point=new w(n,"hit-position",O(i,s.scene.camera,t,o*C),this.outlineColor,this.outlineColor,{join:"round",depth:1});this.axis=new g(n,"hit-normal-axis",N(i,s.scene.camera,this.arrow),this.outlineColor,this.arrowFillColor);this.availableElements=[this.arrow,this.point,this.plane,this.axis]}updateElements(i,t,s){var n;const o=this.computeTriangleSize(h.fromMatrixPosition(i),s);if(this.arrow!=null){this.arrow.updatePoints(m(i,s.scene.camera,t,o));(n=this.axis)===null||n===void 0?void 0:n.updatePoints(N(i,s.scene.camera,this.arrow))}if(this.plane!=null){this.plane.updatePoints(b(i,s.scene.camera,t,o*y))}if(this.point!=null){this.point.updatePoints(O(i,s.scene.camera,t,o*C))}}getPlaneOpacity(){if(this.planeOpacity!=null){return typeof this.planeOpacity==="string"?parseFloat(this.planeOpacity):this.planeOpacity}return S}}const J=":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;--viewer-hit-result-indicator-arrow-color:#0099cc;--viewer-hit-result-indicator-plane-color:#0099cc;--viewer-hit-result-indicator-outline-color:#000000;--viewer-hit-result-indicator-plane-opacity:0.75}.indicator{position:absolute;top:0;left:0}";const _=class{constructor(t){i(this,t);this.arrowColor="#0099cc";this.planeColor="#0099cc";this.outlineColor="#000000";this.planeOpacity=S;this.handleViewerFrameDrawn=()=>{this.updatePropsFromViewer()};this.handleViewerDimensionsChange=()=>{a((()=>{if(this.viewer!=null&&this.canvasRef!=null){this.canvasRef.width=this.viewer.viewport.width;this.canvasRef.height=this.viewer.viewport.height;this.updateAndRedrawIndicator()}}))};this.handleResize=()=>{if(this.canvasRef!=null){this.updateAndRedrawIndicator()}};this.updatePropsFromViewer=()=>{const{frame:i}=this.viewer||{};if(i!=null){const t=this.getIndicator();t.updateFrame(i)}};this.setupIndicator=i=>{var t,s;console.debug(`Initializing hit indicator. [initial-position=${JSON.stringify(this.position)}, initial-normal=${JSON.stringify(this.normal)} has-initial-frame=${((t=this.viewer)===null||t===void 0?void 0:t.frame)!=null}]`);this.indicator=new $(i,{arrow:this.arrowColor,plane:this.planeColor},{plane:this.planeOpacity});this.transform=this.createTransform();this.indicator.updateTransformAndNormal(this.transform,this.normal);if(((s=this.viewer)===null||s===void 0?void 0:s.frame)!=null){this.indicator.updateFrame(this.viewer.frame)}return this.indicator};this.updateAndRedrawIndicator=()=>{d((()=>{this.getIndicator().updateAndDraw()}))};this.createTransform=()=>{if(this.position!=null){return o.makeTranslation(this.position)}};this.getIndicator=()=>{if(this.indicator==null&&this.canvasRef!=null){return this.setupIndicator(this.canvasRef)}else if(this.indicator!=null){return this.indicator}else{throw new Error("Hit indicator was not initialized. The canvas element may not have been initialized.")}}}componentDidLoad(){this.handleViewerChanged(this.viewer,undefined);this.canvasResizeObserver=new ResizeObserver(this.handleResize);if(this.canvasRef!=null){this.canvasResizeObserver.observe(this.canvasRef);this.setupIndicator(this.canvasRef)}d((()=>{var i,t;const s=window.getComputedStyle(this.hostEl);this.arrowColor=j(s,"--viewer-hit-result-indicator-arrow-color");this.planeColor=j(s,"--viewer-hit-result-indicator-plane-color");this.outlineColor=j(s,"--viewer-hit-result-indicator-outline-color");this.planeOpacity=s.getPropertyValue("--viewer-hit-result-indicator-plane-opacity").trim();(i=this.indicator)===null||i===void 0?void 0:i.updateColors({arrow:this.arrowColor,plane:this.planeColor,outline:this.outlineColor});(t=this.indicator)===null||t===void 0?void 0:t.updateOpacities({plane:this.planeOpacity})}))}disconnectedCallback(){var i,t;(i=this.canvasResizeObserver)===null||i===void 0?void 0:i.disconnect();(t=this.indicator)===null||t===void 0?void 0:t.dispose()}handleViewerChanged(i,t){t===null||t===void 0?void 0:t.removeEventListener("frameDrawn",this.handleViewerFrameDrawn);t===null||t===void 0?void 0:t.removeEventListener("dimensionschange",this.handleViewerDimensionsChange);i===null||i===void 0?void 0:i.addEventListener("frameDrawn",this.handleViewerFrameDrawn);i===null||i===void 0?void 0:i.addEventListener("dimensionschange",this.handleViewerDimensionsChange)}handlePositionChanged(i,t){var s;this.transform=this.createTransform();console.debug(`Updating indicator position [previous=${JSON.stringify(t)}, current=${JSON.stringify(i)}]`);(s=this.indicator)===null||s===void 0?void 0:s.updateTransformAndNormal(this.transform,this.normal)}handleNormalChanged(i,t){var s;console.debug(`Updating indicator normal [previous=${JSON.stringify(t)}, current=${JSON.stringify(i)}]`);if(i){(s=this.indicator)===null||s===void 0?void 0:s.updateTransformAndNormal(this.transform,this.normal)}}render(){var i,n;return t(s,null,t("canvas",{ref:i=>{this.canvasRef=i},class:"indicator",width:(i=this.viewer)===null||i===void 0?void 0:i.viewport.width,height:(n=this.viewer)===null||n===void 0?void 0:n.viewport.height}))}get hostEl(){return n(this)}static get watchers(){return{viewer:["handleViewerChanged"],position:["handlePositionChanged"],normal:["handleNormalChanged"]}}};_.style=J;export{_ as vertex_viewer_hit_result_indicator};
|
|
5
|
+
//# sourceMappingURL=p-6cf6eb8a.entry.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import{r as t,c as i,h as s,H as e,g as n}from"./p-388f809e.js";import{c as o}from"./p-92793987.js";import{d as r,r as h}from"./p-e1eaedd8.js";import{n as l,p as a}from"./p-9d26f24e.js";import{a as c}from"./p-490d9553.js";import{i as d}from"./p-e4f95584.js";import{E as u}from"./p-6b00f7cd.js";import"./p-e5cc48b6.js";const v=".notification-banner{background-color:var(--blue-200);padding-top:0px;padding-bottom:0px;padding-right:16px;padding-left:8px;display:flex;justify-content:space-between;font-size:0.875rem;line-height:0.5;color:var(--neutral-600)}.notification-banner-info{display:flex;align-items:center;gap:8px}.notification-banner-info .icon{color:var(--blue-600)}.notification-banner-actions{display:flex;align-items:center}.notification-banner-button{background:none;border:none;padding:0;margin:0;cursor:pointer;color:var(--blue-600);font-size:0.875rem;display:flex;align-items:center}.notification-banner-button:hover{color:var(--blue-800)}";const f=class{constructor(s){t(this,s);this.action=i(this,"action",7)}render(){return s(e,null,s("div",{class:"notification-banner"},s("div",{class:"notification-banner-info"},s("vertex-viewer-icon",{class:"icon",name:"info",size:"sm"}),s("p",null,this.message)),this.actionLabel!=null&&s("div",{class:"notification-banner-actions"},s("button",{class:"notification-banner-button",onClick:()=>this.action.emit()},this.actionLabel))))}};f.style=v;const p="button{border:none;background:transparent;cursor:pointer;margin:0;padding:0}:host{--scene-tree-search-search-icon-offset:8px;--scene-tree-search-clear-button-offset:8px;--scene-tree-search-input-padding:0.5rem 32px;--scene-tree-search-input-border:none;--scene-tree-search-input-border-radius:0.25rem;--scene-tree-search-input-background:none;--scene-tree-search-focused-input-background:var(--neutral-200);--scene-tree-search-focused-input-outline:none;display:block;width:100%;font-size:0.875rem}.root{width:100%;position:relative}.input{background:var(--scene-tree-search-input-background);border:var(--scene-tree-search-input-border);border-radius:var(--scene-tree-search-input-border-radius);box-sizing:border-box;font-size:inherit;padding:var(--scene-tree-search-input-padding);outline:none;width:100%}.input.background{background:var(--scene-tree-search-focused-input-background);outline:var(--scene-tree-search-focused-input-outline)}.overlay{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;pointer-events:none}.overlay-clear{display:none;right:var(--scene-tree-search-clear-button-offset)}.overlay-clear.show{display:flex}.icon{color:var(--neutral-700)}.icon-search{position:absolute;left:var(--scene-tree-search-search-icon-offset);pointer-events:none}.clear-btn{display:flex;align-items:center;justify-content:center;pointer-events:initial;cursor:pointer}.clear-btn:hover{color:var(--neutral-800)}.clear-btn:disabled{pointer-events:none;opacity:0.5}";const m=class{constructor(s){t(this,s);this.search=i(this,"search",7);this.searchCompleted=i(this,"searchCompleted",7);this.disabled=false;this.placeholder=undefined;this.value="";this.focused=false;this.isSearching=false;this.handleTextInput=t=>{const i=t.target;this.value=i.value;if(this.debounce!=null||this.value===""){this.emitCurrentValue()}};this.handleTextFocus=()=>{this.focused=true};this.handleTextBlur=()=>{var t;this.focused=false;(t=this.searchDisposable)===null||t===void 0?void 0:t.dispose();if(this.value!==this.lastEmittedValue){this.emitCurrentValue()}};this.handleKeyPress=t=>{var i;if(t.key==="Enter"){(i=this.searchDisposable)===null||i===void 0?void 0:i.dispose();this.emitCurrentValue()}};this.handleClear=t=>{var i;t.preventDefault();this.value="";(i=this.searchDisposable)===null||i===void 0?void 0:i.dispose();this.emitCurrentValue();this.setFocus()}}async setFocus(){var t,i;if(typeof((t=this.inputEl)===null||t===void 0?void 0:t.focus)==="function"){(i=this.inputEl)===null||i===void 0?void 0:i.focus()}}controllerChanged(t){this.setupController()}componentDidLoad(){this.handleDebounceChanged();this.setupController()}disconnectedCallback(){var t;(t=this.onStateChangeDisposable)===null||t===void 0?void 0:t.dispose()}clear(){var t;this.value="";(t=this.searchDisposable)===null||t===void 0?void 0:t.dispose();this.emitCurrentValue()}render(){return s(e,null,s("div",{class:"root"},s("div",{class:"overlay icon icon-search"},s("slot",{name:"search-icon"},this.isSearching?s("vertex-viewer-spinner",{slot:"search-icon",size:"xs"}):s("vertex-viewer-icon",{name:"search",size:"sm"}))),s("input",{class:o("input",{background:this.focused||this.value.length>0}),type:"text",ref:t=>this.inputEl=t,placeholder:this.placeholder,disabled:this.disabled,value:this.value,onInput:this.handleTextInput,onFocus:this.handleTextFocus,onBlur:this.handleTextBlur,onKeyPress:this.handleKeyPress}),s("div",{class:o("overlay overlay-clear",{show:this.value.length>0})},s("button",{class:"clear-btn icon",tabIndex:-1,onMouseDown:this.handleClear,disabled:this.disabled},s("slot",{name:"clear-icon"},s("vertex-viewer-icon",{name:"close-circle",size:"sm"}))))))}handleDebounceChanged(){var t,i;(t=this.searchDisposable)===null||t===void 0?void 0:t.dispose();const s=r(this.search,(i=this.debounce)!==null&&i!==void 0?i:0);this.search=s;this.searchDisposable=s}setupController(){var t,i;(t=this.onStateChangeDisposable)===null||t===void 0?void 0:t.dispose();this.onStateChangeDisposable=(i=this.controller)===null||i===void 0?void 0:i.onStateChange.on((t=>{if(this.isSearching&&!t.isSearching){this.searchCompleted.emit(this.value)}this.isSearching=t.isSearching}))}emitCurrentValue(){this.lastEmittedValue=this.value;this.search.emit(this.value)}static get watchers(){return{controller:["controllerChanged"]}}};m.style=p;function b(t){return t.toLowerCase()}var g=[/([a-z0-9])([A-Z])/g,/([A-Z])([A-Z][a-z])/g];var w=/[^A-Z0-9]+/gi;function y(t,i){if(i===void 0){i={}}var s=i.splitRegexp,e=s===void 0?g:s,n=i.stripRegexp,o=n===void 0?w:n,r=i.transform,h=r===void 0?b:r,l=i.delimiter,a=l===void 0?" ":l;var c=x(x(t,e,"$1\0$2"),o,"\0");var d=0;var u=c.length;while(c.charAt(d)==="\0")d++;while(c.charAt(u-1)==="\0")u--;return c.slice(d,u).split("\0").map(h).join(a)}function x(t,i,s){if(i instanceof RegExp)return t.replace(i,s);return i.reduce((function(t,i){return t.replace(i,s)}),t)}function C(t,i){var s=t.charAt(0);var e=t.substr(1).toLowerCase();if(i>0&&s>="0"&&s<="9"){return"_"+s+e}return""+s.toUpperCase()+e}function z(t,i){if(i===void 0){i={}}return y(t,l({delimiter:"",transform:C},i))}function $(t,i){if(i===0)return t.toLowerCase();return C(t,i)}function R(t,i){if(i===void 0){i={}}return z(t,l({transform:$},i))}const k=/{{(.+)}}/;class D{constructor(t){this.bindings=t}bind(t){this.bindings.forEach((i=>i.bind(t)))}}class _{constructor(t,i){this.node=t;this.expr=i}}class j extends _{constructor(t,i){super(t,i)}bind(t){const i=V(t,this.expr);if(i!==this.node.textContent){this.node.textContent=i}}}class E extends _{constructor(t,i,s){super(t,i);this.attr=s}bind(t){const i=V(t,this.expr);const s=this.node.getAttribute(this.attr);if(s!==i){this.node.setAttribute(this.attr,i)}}}class M extends _{constructor(t,i,s){super(t,i);this.prop=s}bind(t){const i=A(t,this.expr);const s=this.node[this.prop];if(s!==i){this.node[this.prop]=i}}}class L extends _{constructor(t,i,s){super(t,i);this.eventName=s}bind(t){var i;const s=P(this.expr);if(s!=null){(i=this.disposable)===null||i===void 0?void 0:i.dispose();const e=W(t,s,true);this.node.addEventListener(this.eventName,e);this.disposable={dispose:()=>{this.node.removeEventListener(this.eventName,e)}}}}}function T(t){const i=[];if(t.nodeType===Node.ELEMENT_NODE){const s=t;const e=H(s);e.forEach((t=>{if(t.name.startsWith("event:")){const e=R(t.name.replace("event:",""));i.push(new L(s,t.value,e))}else if(t.name.startsWith("attr:")){i.push(new E(s,t.value,t.name.replace("attr:","")))}else if(t.name.startsWith("prop:")){const e=R(t.name.replace("prop:",""));i.push(new M(s,t.value,e))}}))}else if(t.nodeType===Node.TEXT_NODE&&t.textContent!=null&&k.test(t.textContent)){i.push(new j(t,t.textContent))}for(let s=0;s<t.childNodes.length;s++){i.push(...T(t.childNodes[s]))}return i}function H(t){return Array.from(t.attributes).filter((t=>k.test(t.value)))}function P(t){const i=k.exec(t);return i!=null?i[1]:undefined}function V(t,i){const s=P(i);if(s!=null){const e=W(t,s,true);return i.replace(`{{${s}}}`,e===null||e===void 0?void 0:e.toString())}else{return i}}function A(t,i){const s=P(i);if(s!=null){const i=W(t,s,true);return i}else{return i}}function W(t,i,s=false){const[e,...n]=i.split(".");if(s&&n.length===0){return t}else if(s&&n.length>0){return W(t,n.join("."),false)}else{const i=t[e];if(n.length>0){return W(i,n.join("."),false)}else{return i}}}class I{constructor(t,i){this.container=t;this.elementFactory=i;this.instanceMap=new Map;this.elements=[]}swapHeadToTail(t){const i=this.elements.splice(0,t);this.elements.splice(this.elements.length,0,...i);return this.elements.concat()}swapTailToHead(t){const i=this.elements.splice(-t,t);this.elements.splice(0,0,...i);return this.elements.concat()}updateElements(t){const i=t-this.elements.length;if(i>0){for(let t=0;t<i;t++){this.createElement()}}else{for(let t=0;t<-i;t++){this.deleteElement()}}return this.elements.concat()}updateData(t){this.elements.forEach(((i,s)=>{const e=this.instanceMap.get(i);const n=t(s);e===null||e===void 0?void 0:e.bindings.bind(n)}))}updateElementFactory(t){this.elementFactory=t;this.updateElements(0)}iterateElements(t){this.elements.forEach(((i,s)=>{const e=this.instanceMap.get(i);t(i,e.bindings,s)}))}createElement(){const t=this.elementFactory();this.elements.push(t.element);this.instanceMap.set(t.element,t);this.container.append(t.element);return t}deleteElement(){const t=this.elements.pop();if(t!=null){this.instanceMap.delete(t);t.remove()}}}function O(t){const i=t.content.cloneNode(true);const s=i.firstElementChild;const e=new D(T(i));return{element:s,bindings:e}}function N(t){var i;return(i=t.getBoundingClientRect().top)!==null&&i!==void 0?i:0}function Z(t){return t.clientWidth}function F(t,i,s){t.scrollTo(Object.assign({top:i},s))}class U{constructor(){this.onStateChange=new u}setHovered(t){this.onStateChange.emit(t)}stateChanged(t){return this.onStateChange.on(t)}}function B(t,i,s=200){window.clearTimeout(i);return window.setTimeout(t,s)}const K=":host{position:relative;display:flex;flex-direction:column;width:100%;height:100%;overflow:hidden;font-size:0.825rem;--scene-tree-table-row-padding:2px 0px;--scene-tree-table-column-gap:0.5rem;--scene-tree-table-column-resize-cursor:col-resize}.header{position:relative;display:grid;width:100%;border-bottom:var(--scene-tree-toolbar-separator)}.table{position:relative;display:grid;width:100%;height:100%;overflow:auto}.resize-overlay{position:absolute;top:0;cursor:var(--scene-tree-table-column-resize-cursor);z-index:1000;width:100%;height:100%}.divider-overlay{position:absolute;top:0;display:grid;pointer-events:none;z-index:2000;width:100%;height:100%}";const S=class{constructor(s){t(this,s);this.layoutRendered=i(this,"layoutRendered",7);this.columnsResized=i(this,"columnsResized",7);this.rows=[];this.totalRows=0;this.rowHeight=24;this.overScanCount=25;this.layoutOffset=0;this.scrollOffset=0;this.viewportStartIndex=0;this.viewportEndIndex=0;this.columnGridLayout="1fr";this.columnGridFixedLayout="";this.isComputingCellHeight=true;this.isScrolling=false;this.stateMap={viewportRows:[],columnWidths:[],columnWidthPercentages:[]};this.lastStartIndex=0;this.columnElements=[];this.cellHoverController=new U;this.layoutColumns=()=>{const t=this.viewportEndIndex-this.viewportStartIndex+1;const i=this.viewportStartIndex-this.lastStartIndex;this.lastStartIndex=this.viewportStartIndex;this.iterateColumns(((s,e,n)=>{e.updateElements(t);if(i>0){e.swapHeadToTail(i)}else{e.swapTailToHead(-i)}s.style.minHeight=`${this.rowHeight*this.totalRows}px`;const o=n===0?t=>`calc(${t} * 0.5rem)`:()=>`0`;e.iterateElements(((t,i,s)=>{const e=this.stateMap.viewportRows[s];if(d(e)){this.updateCell(e,t,i,s,o)}}))}))};this.updateCell=(t,i,s,e,n)=>{i.style.position="absolute";i.style.top=`${(this.viewportStartIndex+e)*this.rowHeight}px`;i.style.boxSizing="border-box";i.style.height=`${this.rowHeight}px`;i.style.width="100%";i.style.paddingLeft=n(t.node.depth);i.tree=this.tree;i.node=t.node;i.hoverController=this.cellHoverController;i.isScrolling=this.isScrolling;s.bind(t)};this.updateLayoutPosition=()=>{h((()=>{if(this.tableElement!=null){this.layoutOffset=N(this.tableElement)}}))};this.recomputeColumnWidths=()=>{const t=this.getLayoutWidth();if(t!=null&&this.stateMap.columnWidths.length===this.stateMap.columnWidthPercentages.length){this.stateMap.columnWidths=this.stateMap.columnWidthPercentages.map((i=>i*t));this.columnsResized.emit(this.stateMap.columnWidths)}};this.recomputeColumnPercentages=()=>{const t=this.getLayoutWidth();if(t!=null&&this.stateMap.columnWidths.length===this.stateMap.columnWidthPercentages.length){this.stateMap.columnWidthPercentages=this.stateMap.columnWidths.map((i=>i/t))}};this.computeInitialColumnWidths=()=>{this.stateMap.columnWidths=this.columnElements.map((t=>{var i;return(i=t.initialWidth)!==null&&i!==void 0?i:100}));const t=this.getLayoutWidth();if(t!=null){const i=this.stateMap.columnWidths.reduce(((t,i)=>t+i),0);const s=this.stateMap.columnWidths.map((s=>s*(t/i)));this.stateMap.columnWidthPercentages=s.map((i=>i/t));this.stateMap.columnWidths=s}};this.updateColumnElements=()=>{this.columnElements=Array.from(this.hostEl.querySelectorAll("vertex-scene-tree-table-column"))};this.computeCellHeight=async()=>{var t;if(this.isComputingCellHeight&&this.columnElements.length>0){const i={index:0,node:{id:{hex:""},name:"Dummy row",expanded:false,selected:false,visible:false,partiallyVisible:false,isLeaf:false,depth:0,columnsList:[],filterHit:false,phantom:false,endItem:false},metadata:{},data:{}};const{bindings:s,element:e}=this.createColumnCellInstance(this.columnElements[0]);s.bind(i);e.style.visibility="hidden";(t=this.columnElements[0])===null||t===void 0?void 0:t.appendChild(e);if(typeof e.componentOnReady==="function"){await e.componentOnReady()}let n=e.clientHeight;if(n===0){n=await new Promise((t=>{setTimeout((()=>t(e.getBoundingClientRect().height)),5)}))}this.rowHeight=n!==null&&n!==void 0?n:this.rowHeight;e.remove();this.isComputingCellHeight=this.rowHeight===0}};this.computeHeaderHeight=()=>{var t;if(this.stateMap.headerHeight==null){this.stateMap.headerHeight=(t=this.headerElement)===null||t===void 0?void 0:t.getBoundingClientRect().height;this.hostEl.style.setProperty("--header-height",`${this.stateMap.headerHeight}px`)}};this.computeColumnGridLayout=()=>{if(this.stateMap.columnWidths.length===0){this.stateMap.columnWidths=this.columnElements.map((t=>{var i;return(i=t.initialWidth)!==null&&i!==void 0?i:100}))}const t=this.getLayoutWidth();if(t!=null){if(this.stateMap.columnWidthPercentages.length===0){this.stateMap.columnWidthPercentages=this.columnElements.map((i=>{var s;return((s=i.initialWidth)!==null&&s!==void 0?s:100)/t}))}}this.columnGridLayout=`${this.stateMap.columnWidths.slice(0,-1).reduce(((t,i)=>`${t} ${i}px`),"")} 1fr`;this.columnGridFixedLayout=`${this.stateMap.columnWidths.reduce(((t,i)=>`${t} ${i}px`),"")}`};this.bindHeaderData=()=>{if(this.stateMap.headerInstances==null){this.stateMap.headerInstances=this.columnElements.map(((t,i)=>{var s;const e=this.createHeaderInstance(t);if(e!=null){e.element.style.paddingRight=i===this.columnElements.length-1?`0`:`var(--scene-tree-table-column-gap)`;e.element.slot="header";e.element.style.gridColumnStart=`${i+1}`;e.element.style.gridColumnEnd=`${i+2}`;(s=this.hostEl)===null||s===void 0?void 0:s.appendChild(e.element)}return e})).filter((t=>t!=null))}if(this.stateMap.headerDividerInstances==null){this.stateMap.headerDividerInstances=this.columnElements.slice(0,-1).map(((t,i)=>{var s;const e=this.createDividerInstance();e.element.slot="divider";e.element.style.position="absolute";e.element.style.right="0";e.element.style.pointerEvents="auto";e.element.style.gridColumnStart=`${i+1}`;e.element.style.gridColumnEnd=`${i+2}`;(s=this.hostEl)===null||s===void 0?void 0:s.appendChild(e.element);return e}))}};this.rebindHeaderData=()=>{var t,i;this.removeDividerDragListeners();(t=this.stateMap.headerInstances)===null||t===void 0?void 0:t.forEach((t=>t.element.remove()));(i=this.stateMap.headerDividerInstances)===null||i===void 0?void 0:i.forEach((t=>t.element.remove()));this.stateMap.headerInstances=undefined;this.stateMap.headerDividerInstances=undefined;this.bindHeaderData();this.addDividerDragListeners()};this.createDividerPointerDownHandler=t=>i=>{var s,e;i.preventDefault();i.stopPropagation();this.lastDividerPointerPosition=a.create(Math.floor(i.clientX),Math.floor(i.clientY));this.resizingColumnIndex=t;(e=(s=this.stateMap.headerDividerInstances)===null||s===void 0?void 0:s[t])===null||e===void 0?void 0:e.element.classList.add("dragging");window.addEventListener("pointermove",this.handleDividerPointerMove);window.addEventListener("pointerup",this.handleDividerPointerUp)};this.handleDividerPointerMove=t=>{const i=a.create(Math.floor(t.clientX),Math.floor(t.clientY));if(this.lastDividerPointerPosition!=null&&this.resizingColumnIndex!=null){const t=this.resizingColumnIndex;const s=a.subtract(this.lastDividerPointerPosition,i);if(Math.abs(s.x)>=1&&this.isValidResize(s,t)){this.stateMap.columnWidths=this.stateMap.columnWidths.map(((i,e)=>e===t?i-s.x:i));if(t+1<this.stateMap.columnWidths.length){this.stateMap.columnWidths=this.stateMap.columnWidths.map(((i,e)=>e===t+1?i+s.x:i))}this.lastDividerPointerPosition=i;this.computeColumnGridLayout()}}};this.handleDividerPointerUp=()=>{var t,i;if(this.resizingColumnIndex!=null){(i=(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t[this.resizingColumnIndex])===null||i===void 0?void 0:i.element.classList.remove("dragging")}this.lastDividerPointerPosition=undefined;this.resizingColumnIndex=undefined;this.recomputeColumnPercentages();this.recomputeColumnWidths();window.removeEventListener("pointermove",this.handleDividerPointerMove);window.removeEventListener("pointerup",this.handleDividerPointerUp)};this.isValidResize=(t,i)=>{var s,e,n,o;const r=this.columnElements[i];const h=this.columnElements[i+1];const l=this.stateMap.columnWidths[i];const a=this.stateMap.columnWidths[i+1];const c=(s=r.minWidth)!==null&&s!==void 0?s:0;const d=(e=r.maxWidth)!==null&&e!==void 0?e:Number.MAX_SAFE_INTEGER;const u=(n=h.minWidth)!==null&&n!==void 0?n:0;const v=(o=h.maxWidth)!==null&&o!==void 0?o:Number.MAX_SAFE_INTEGER;const f=l-t.x>c&&l-t.x<d;const p=h!=null?a+t.x>u&&a+t.x<v:true;return f&&p};this.handleScrollChanged=async t=>{this.isScrolling=true;this.scrollTimer=B((()=>{this.isScrolling=false}),this.scrollTimer);this.scrollOffset=t.target.scrollTop;await this.computeAndUpdateViewportRows()}}componentWillLoad(){this.updateColumnElements();this.createPools();this.headerResizeObserver=new ResizeObserver((()=>{this.stateMap.headerHeight=undefined;this.computeHeaderHeight();this.updateLayoutPosition()}));this.resizeObserver=new ResizeObserver((()=>{this.updateLayoutPosition();this.clearLayoutHeight();this.clearLayoutWidth();this.recomputeColumnWidths();this.computeColumnGridLayout()}))}async componentDidLoad(){var t,i,s;this.computeInitialColumnWidths();this.computeColumnGridLayout();this.ensureDividerTemplateDefined();this.computeCellHeight();this.computeHeaderHeight();this.rebindHeaderData();(t=this.tableElement)===null||t===void 0?void 0:t.addEventListener("scroll",this.handleScrollChanged,{passive:true});if(this.headerElement!=null){(i=this.headerResizeObserver)===null||i===void 0?void 0:i.observe(this.headerElement)}(s=this.resizeObserver)===null||s===void 0?void 0:s.observe(this.hostEl)}async componentWillRender(){await this.computeAndUpdateViewportRows()}componentDidRender(){this.layoutColumns();this.layoutRendered.emit()}async componentDidUpdate(){if(this.isComputingCellHeight){await this.computeCellHeight()}}disconnectedCallback(){var t,i,s;(t=this.tableElement)===null||t===void 0?void 0:t.removeEventListener("scroll",this.handleScrollChanged);this.removeDividerDragListeners();(i=this.headerResizeObserver)===null||i===void 0?void 0:i.disconnect();(s=this.resizeObserver)===null||s===void 0?void 0:s.disconnect();this.stateMap.columnWidths=[];this.stateMap.columnWidthPercentages=[]}async handleViewportRowsPropsChanged(){await this.computeAndUpdateViewportRows()}async scrollToPosition(t,i){if(this.tableElement!=null){F(this.tableElement,t,i)}}async attemptComputeCellHeight(){this.computeCellHeight()}render(){return s(e,null,s("div",{class:"header",ref:t=>this.headerElement=t,style:{gridTemplateColumns:this.columnGridFixedLayout,display:this.columnElements.length<=1?"none":"grid"}},s("slot",{name:"header"})),s("div",{class:"table",ref:t=>this.tableElement=t,style:{gridTemplateColumns:this.columnGridLayout}},s("slot",{onSlotchange:()=>{this.ensureDividerTemplateDefined();this.updateColumnElements();this.recreateColumnPools();this.computeInitialColumnWidths();this.rebindHeaderData();this.computeColumnGridLayout()}})),s("div",{class:"divider-overlay",style:{gridTemplateColumns:this.columnGridFixedLayout}},s("slot",{name:"divider"})),this.resizingColumnIndex!=null&&s("div",{class:"resize-overlay"}))}computeViewportRows(){const t=this.getLayoutHeight();const i=t!=null&&t>0&&!this.isComputingCellHeight;if(i){const i=Math.ceil(t/this.rowHeight);const s=Math.floor(this.scrollOffset/this.rowHeight);const e=s+i;const n=Math.max(0,s-this.overScanCount);const o=Math.min(this.totalRows-1,e+this.overScanCount);const r=this.getViewportRows(n,o);this.viewportStartIndex=n;this.viewportEndIndex=o;this.stateMap.viewportRows=r}}async computeAndUpdateViewportRows(){var t;this.computeViewportRows();if(((t=this.controller)===null||t===void 0?void 0:t.isConnected)&&this.totalRows>0){await this.controller.updateActiveRowRange(this.viewportStartIndex,this.viewportEndIndex)}}createPools(){if(this.stateMap.columnElementPools==null){this.stateMap.columnElementPools=this.columnElements.reduce(((t,i)=>t.set(i,new I(i,(()=>this.createColumnCellInstance(i))))),new WeakMap)}}recreateColumnPools(){this.columnElements.forEach((t=>{var i,s,e;if(((i=this.stateMap.columnElementPools)===null||i===void 0?void 0:i.get(t))==null){(s=this.stateMap.columnElementPools)===null||s===void 0?void 0:s.set(t,new I(t,(()=>this.createColumnCellInstance(t))))}else{(e=this.stateMap.columnElementPools.get(t))===null||e===void 0?void 0:e.updateElementFactory((()=>this.createColumnCellInstance(t)))}}))}iterateColumns(t){this.columnElements.forEach(((i,s)=>{var e;const n=(e=this.stateMap.columnElementPools)===null||e===void 0?void 0:e.get(i);if(n!=null){t(i,n,s)}else{throw new Error("Cannot find pool for column")}}))}ensureDividerTemplateDefined(){const t=this.hostEl.querySelector('template[slot="divider"]');if(t==null){const t=document.createElement("template");t.slot="divider";t.innerHTML=`\n <vertex-scene-tree-table-resize-divider slot="divider">\n </vertex-scene-tree-table-resize-divider>\n `;this.hostEl.appendChild(t)}}createHeaderInstance(t){const i=t.querySelector('template[slot="header"]');if(i!=null){return O(i)}}createDividerInstance(){const t=this.hostEl.querySelector('template[slot="divider"]');if(t!=null){return O(t)}else{throw new Error("Table is missing divider template element")}}createColumnCellInstance(t){const i=t.querySelector('template:not([slot="header"])');if(i!=null){return O(i)}else{throw new Error("Column is missing cell template element")}}addDividerDragListeners(){var t;this.stateMap.headerDividerListeners=(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t.map(((t,i)=>{const s=this.createDividerPointerDownHandler(i);t.element.addEventListener("pointerdown",s);return s}))}removeDividerDragListeners(){var t;if(this.stateMap.headerDividerListeners!=null){const i=this.stateMap.headerDividerListeners;(t=this.stateMap.headerDividerInstances)===null||t===void 0?void 0:t.forEach(((t,s)=>{const e=i[s];if(e!=null){t.element.removeEventListener("pointerdown",e)}}));this.stateMap.headerDividerListeners=undefined}}getViewportRows(t,i){const s=this.rows.slice(t,i+1);return s.map((t=>t!=null?this.populateRowData(t):t))}populateRowData(t){var i;if(this.rowData!=null&&t!=null){const s=((i=this.rowData)===null||i===void 0?void 0:i.call(this,t))||{};return Object.assign(Object.assign({},t),{data:s})}else{return t}}getLayoutHeight(){if(this.layoutHeight==null&&this.tableElement!=null){this.layoutHeight=c(this.tableElement)}return this.layoutHeight}getLayoutWidth(){if(this.layoutWidth==null){const t=Z(this.hostEl);if(t>0){this.layoutWidth=t}}return this.layoutWidth}clearLayoutHeight(){this.layoutHeight=undefined}clearLayoutWidth(){this.layoutWidth=undefined}get hostEl(){return n(this)}static get watchers(){return{rows:["handleViewportRowsPropsChanged"],totalRows:["handleViewportRowsPropsChanged"],rowHeight:["handleViewportRowsPropsChanged"]}}};S.style=K;const q=":host{--scene-tree-toolbar-content-gap:8px;display:flex;padding:0.5rem}.content{display:flex;align-items:center}.content-primary{width:100%}::slotted(:not(:first-child)){margin-left:var(--scene-tree-toolbar-content-gap)}";const G=class{constructor(i){t(this,i)}render(){return s(e,null,s("div",{class:"content"},s("slot",{name:"before"})),s("div",{class:"content content-primary"},s("slot",null)),s("div",{class:"content"},s("slot",{name:"after"})))}};G.style=q;export{f as vertex_scene_tree_notification_banner,m as vertex_scene_tree_search,S as vertex_scene_tree_table_layout,G as vertex_scene_tree_toolbar};
|
|
5
|
+
//# sourceMappingURL=p-715255e1.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["src/components/scene-tree-notification-banner/scene-tree-notification-banner.css?tag=vertex-scene-tree-notification-banner&encapsulation=shadow","src/components/scene-tree-notification-banner/scene-tree-notification-banner.tsx","src/components/scene-tree-search/scene-tree-search.css?tag=vertex-scene-tree-search&encapsulation=shadow","src/components/scene-tree-search/scene-tree-search.tsx","../html-templates/dist/bundle.esm.js","src/components/scene-tree-table-layout/lib/dom.ts","src/components/scene-tree-table-layout/lib/hover-controller.ts","src/components/scene-tree-table-layout/lib/window.ts","src/components/scene-tree-table-layout/scene-tree-table-layout.css?tag=vertex-scene-tree-table-layout&encapsulation=shadow","src/components/scene-tree-table-layout/scene-tree-table-layout.tsx","src/components/scene-tree-toolbar/scene-tree-toolbar.css?tag=vertex-scene-tree-toolbar&encapsulation=shadow","src/components/scene-tree-toolbar/scene-tree-toolbar.tsx"],"names":["sceneTreeNotificationBannerCss","SceneTreeNotificationBanner","[object Object]","h","Host","class","name","size","this","message","actionLabel","onClick","action","emit","sceneTreeSearchCss","SceneTreeSearch","hostRef","disabled","placeholder","undefined","value","focused","isSearching","handleTextInput","event","input","target","debounce","emitCurrentValue","handleTextFocus","handleTextBlur","_a","searchDisposable","dispose","lastEmittedValue","handleKeyPress","key","handleClear","preventDefault","setFocus","inputEl","focus","_b","controller","setupController","handleDebounceChanged","onStateChangeDisposable","slot","classNames","background","length","type","ref","onInput","onFocus","onBlur","onKeyPress","show","tabIndex","onMouseDown","emitter","debounceEvent","search","onStateChange","on","state","searchCompleted","lowerCase","str","toLowerCase","DEFAULT_SPLIT_REGEXP","DEFAULT_STRIP_REGEXP","noCase","options","splitRegexp","stripRegexp","_c","transform","_d","delimiter","result","replace","start","end","charAt","slice","split","map","join","re","RegExp","reduce","pascalCaseTransform","index","firstChar","lowerChars","substr","toUpperCase","pascalCase","__assign","camelCaseTransform","camelCase","bindingRegEx","CollectionBinding","bindings","data","forEach","binding","bind","NodeBinding","node","expr","TextNodeBinding","super","newContent","replaceBindingString","textContent","AttributeBinding","attr","newValue","oldValue","getAttribute","setAttribute","PropertyBinding","prop","replaceBinding","EventHandlerBinding","eventName","path","extractBindingPath","disposable","listener","getBindableValue","addEventListener","removeEventListener","generateBindings","nodeType","Node","ELEMENT_NODE","el","bindableAttributes","getBindableAttributes","startsWith","push","propName","TEXT_NODE","test","i","childNodes","element","Array","from","attributes","filter","exec","toString","isHead","head","tail","ElementPool","container","elementFactory","instanceMap","Map","elements","count","sliced","splice","concat","diff","createElement","deleteElement","f","instance","get","updateElements","set","append","pop","delete","remove","generateInstanceFromTemplate","template","fragment","content","cloneNode","firstElementChild","getSceneTreeTableOffsetTop","getBoundingClientRect","top","getSceneTreeTableViewportWidth","clientWidth","scrollToTop","scrollTo","Object","assign","SceneTreeCellHoverController","EventDispatcher","id","restartTimeout","fn","existingTimeout","delay","window","clearTimeout","setTimeout","sceneTreeTableLayoutCss","SceneTreeTableLayout","rows","totalRows","rowHeight","overScanCount","layoutOffset","scrollOffset","viewportStartIndex","viewportEndIndex","columnGridLayout","columnGridFixedLayout","isComputingCellHeight","isScrolling","stateMap","viewportRows","columnWidths","columnWidthPercentages","lastStartIndex","columnElements","cellHoverController","layoutColumns","visibleRowCount","iterateColumns","col","pool","colIndex","swapHeadToTail","swapTailToHead","style","minHeight","cellPaddingLeft","depth","iterateElements","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","phantom","endItem","metadata","createColumnCellInstance","visibility","appendChild","componentOnReady","clientHeight","Promise","resolve","computeHeaderHeight","headerHeight","headerElement","setProperty","computeColumnGridLayout","res","bindHeaderData","headerInstances","createHeaderInstance","paddingRight","gridColumnStart","gridColumnEnd","headerDividerInstances","_","createDividerInstance","right","pointerEvents","rebindHeaderData","removeDividerDragListeners","addDividerDragListeners","createDividerPointerDownHandler","stopPropagation","lastDividerPointerPosition","Point","create","Math","floor","clientX","clientY","resizingColumnIndex","classList","add","handleDividerPointerMove","handleDividerPointerUp","current","resizingIndex","subtract","abs","x","isValidResize","currentColumn","nextColumn","currentWidth","nextWidth","currentMinWidth","minWidth","currentMaxWidth","maxWidth","Number","MAX_SAFE_INTEGER","nextMinWidth","nextMaxWidth","currentIsValid","nextIsValid","handleScrollChanged","scrollTimer","scrollTop","computeAndUpdateViewportRows","createPools","headerResizeObserver","ResizeObserver","resizeObserver","clearLayoutHeight","clearLayoutWidth","ensureDividerTemplateDefined","passive","observe","layoutRendered","disconnect","gridTemplateColumns","display","onSlotchange","recreateColumnPools","viewportHeight","getLayoutHeight","canComputeIndices","viewportCount","ceil","startIndex","max","endIndex","min","getViewportRows","computeViewportRows","isConnected","updateActiveRowRange","columnElementPools","WeakMap","updateElementFactory","column","Error","querySelector","defaultDividerTemplate","document","innerHTML","headerDividerListeners","d","listeners","populateRowData","rowData","call","layoutHeight","getSceneTreeViewportHeight","computedWidth","sceneTreeToolbarCss","SceneTreeToolbar"],"mappings":"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","sourcesContent":[".notification-banner {\n background-color: var(--blue-200);\n padding-top: 0px;\n padding-bottom: 0px;\n padding-right: 16px;\n padding-left: 8px;\n display: flex;\n justify-content: space-between;\n font-size: 0.875rem;\n line-height: 0.5;\n color: var(--neutral-600);\n}\n\n.notification-banner-info {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.notification-banner-info .icon {\n color: var(--blue-600);\n}\n\n.notification-banner-actions {\n display: flex;\n align-items: center;\n}\n\n.notification-banner-button {\n background: none;\n border: none;\n padding: 0;\n margin: 0;\n cursor: pointer;\n color: var(--blue-600);\n font-size: 0.875rem;\n display: flex;\n align-items: center;\n}\n\n.notification-banner-button:hover {\n color: var(--blue-800);\n}","import { Component, Event, EventEmitter, h, Host, Prop } from '@stencil/core';\n\n/**\n * A notification banner that displays a message and an action button.\n */\n@Component({\n tag: 'vertex-scene-tree-notification-banner',\n styleUrl: 'scene-tree-notification-banner.css',\n shadow: true,\n})\nexport class SceneTreeNotificationBanner {\n /**\n * The message to display in the banner.\n */\n @Prop()\n public message?: string;\n\n /**\n * The label of the action button.\n */\n @Prop()\n public actionLabel?: string;\n\n /**\n * An event that is emitted when the action button is clicked.\n */\n @Event()\n public action!: EventEmitter<void>;\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"notification-banner\">\n <div class=\"notification-banner-info\">\n <vertex-viewer-icon class=\"icon\" name=\"info\" size=\"sm\" />\n <p>{this.message}</p>\n </div>\n {this.actionLabel != null && (\n <div class=\"notification-banner-actions\">\n <button\n class=\"notification-banner-button\"\n onClick={() => this.action.emit()}\n >\n {this.actionLabel}\n </button>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","@import url('../../css/button-reset.css');\n\n:host {\n /**\n * @prop --scene-tree-search-search-icon-offset: A CSS length that specifies\n * the horizontal offset of the search icon\n */\n --scene-tree-search-search-icon-offset: 8px;\n\n /**\n * @prop --scene-tree-search-clear-button-offset: A CSS length that specifies\n * the horizontal offset of the clear button.\n */\n --scene-tree-search-clear-button-offset: 8px;\n\n /**\n * @prop --scene-tree-search-input-padding: A CSS padding value that specifies\n * horizontal and vertical lengths of the internal text input.\n */\n --scene-tree-search-input-padding: 0.5rem 32px;\n\n /**\n * @prop --scene-tree-search-input-border: A CSS border value that specifies\n * the border of the internal text input.\n */\n --scene-tree-search-input-border: none;\n\n /**\n * @prop --scene-tree-search-input-border-radius: A CSS length that specifies\n * the radius of the internal text input.\n */\n --scene-tree-search-input-border-radius: 0.25rem;\n\n /**\n * @prop --scene-tree-search-input-background: A CSS background that specifies\n * the background color or image of the internal text input.\n */\n --scene-tree-search-input-background: none;\n\n /**\n * @prop --scene-tree-search-focused-input-background: A CSS background value\n * that specifies the background of the internal text input when focused.\n */\n --scene-tree-search-focused-input-background: var(--neutral-200);\n\n /**\n * @prop --scene-tree-search-focused-input-outline: A CSS outline value that\n * specifies the outline of the internal text input when focused.\n */\n --scene-tree-search-focused-input-outline: none;\n\n display: block;\n width: 100%;\n font-size: 0.875rem;\n}\n\n.root {\n width: 100%;\n position: relative;\n}\n\n.input {\n background: var(--scene-tree-search-input-background);\n border: var(--scene-tree-search-input-border);\n border-radius: var(--scene-tree-search-input-border-radius);\n box-sizing: border-box;\n font-size: inherit;\n padding: var(--scene-tree-search-input-padding);\n outline: none;\n width: 100%;\n}\n\n.input.background {\n background: var(--scene-tree-search-focused-input-background);\n outline: var(--scene-tree-search-focused-input-outline);\n}\n\n.overlay {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n}\n\n.overlay-clear {\n display: none;\n right: var(--scene-tree-search-clear-button-offset);\n}\n\n.overlay-clear.show {\n display: flex;\n}\n\n.icon {\n color: var(--neutral-700);\n}\n\n.icon-search {\n position: absolute;\n left: var(--scene-tree-search-search-icon-offset);\n pointer-events: none;\n}\n\n.clear-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: initial;\n cursor: pointer;\n}\n.clear-btn:hover {\n color: var(--neutral-800);\n}\n.clear-btn:disabled {\n pointer-events: none;\n opacity: 0.5;\n}","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\nimport classNames from 'classnames';\n\nimport { debounceEvent } from '../../lib/stencil';\nimport { SceneTreeController } from '../scene-tree/lib/controller';\n\n/**\n * @slot search-icon - A slot that replaces the component's default search icon.\n * @slot clear-icon - A slot that replaces the component's default clear icon.\n */\n@Component({\n tag: 'vertex-scene-tree-search',\n styleUrl: 'scene-tree-search.css',\n shadow: true,\n})\nexport class SceneTreeSearch {\n /**\n * Specifies the delay, in milliseconds, to emit `search` events after user\n * input.\n *\n * If this value is specified, searches will automatically occur after a\n * keystroke has occurred and the debounce threshold has elapsed.\n *\n * Defaults to `undefined`, and searches only occur on an `Enter` press\n * or a `blur` event.\n */\n @Prop()\n public debounce?: number;\n\n /**\n * If `true`, disables user interaction of the component.\n */\n @Prop()\n public disabled = false;\n\n /**\n * Placeholder text if `value` is empty.\n */\n @Prop()\n public placeholder?: string = undefined;\n\n /**\n * The scene tree controller\n */\n @Prop()\n public controller?: SceneTreeController;\n\n /**\n * The current text value of the component. Value is updated on user\n * interaction.\n */\n @Prop({ mutable: true })\n public value = '';\n\n /**\n * An event that is emitted when a user has changed or cleared the search\n * term. The event may be delayed according to the current `debounce` value.\n */\n @Event({ bubbles: true })\n public search!: EventEmitter<string>;\n\n /**\n * An event that is emitted when a search has completed.\n */\n @Event({ bubbles: true })\n public searchCompleted!: EventEmitter<string>;\n\n @State()\n private focused = false;\n\n @State()\n private isSearching = false;\n\n private lastEmittedValue?: string;\n private inputEl?: HTMLInputElement;\n private onStateChangeDisposable?: Disposable;\n private searchDisposable?: Disposable;\n\n /**\n * Gives focus to the component's internal text input.\n */\n @Method()\n public async setFocus(): Promise<void> {\n // HTMLInputElement.focus() doesn't exist in tests.\n if (typeof this.inputEl?.focus === 'function') {\n this.inputEl?.focus();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n public controllerChanged(controller: SceneTreeController): void {\n this.setupController();\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n this.handleDebounceChanged();\n\n this.setupController();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.onStateChangeDisposable?.dispose();\n }\n\n /**\n * Clears the current search term and clears any debounced filters.\n */\n @Method()\n public clear(): void {\n this.value = '';\n this.searchDisposable?.dispose();\n this.emitCurrentValue();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"root\">\n <div class=\"overlay icon icon-search\">\n <slot name=\"search-icon\">\n {this.isSearching ? (\n <vertex-viewer-spinner slot=\"search-icon\" size=\"xs\" />\n ) : (\n <vertex-viewer-icon name=\"search\" size=\"sm\" />\n )}\n </slot>\n </div>\n\n <input\n class={classNames('input', {\n background: this.focused || this.value.length > 0,\n })}\n type=\"text\"\n ref={(ref) => (this.inputEl = ref)}\n placeholder={this.placeholder}\n disabled={this.disabled}\n value={this.value}\n onInput={this.handleTextInput}\n onFocus={this.handleTextFocus}\n onBlur={this.handleTextBlur}\n onKeyPress={this.handleKeyPress}\n />\n\n <div\n class={classNames('overlay overlay-clear', {\n show: this.value.length > 0,\n })}\n >\n <button\n class=\"clear-btn icon\"\n tabIndex={-1}\n onMouseDown={this.handleClear}\n disabled={this.disabled}\n >\n <slot name=\"clear-icon\">\n <vertex-viewer-icon name=\"close-circle\" size=\"sm\" />\n </slot>\n </button>\n </div>\n </div>\n </Host>\n );\n }\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n\n if (this.debounce != null || this.value === '') {\n this.emitCurrentValue();\n }\n };\n\n private handleTextFocus = (): void => {\n this.focused = true;\n };\n\n private handleTextBlur = (): void => {\n this.focused = false;\n\n this.searchDisposable?.dispose();\n\n if (this.value !== this.lastEmittedValue) {\n this.emitCurrentValue();\n }\n };\n\n private handleKeyPress = (event: KeyboardEvent): void => {\n if (event.key === 'Enter') {\n this.searchDisposable?.dispose();\n this.emitCurrentValue();\n }\n };\n\n private handleClear = (event: MouseEvent): void => {\n event.preventDefault();\n\n this.value = '';\n this.searchDisposable?.dispose();\n this.emitCurrentValue();\n this.setFocus();\n };\n\n private handleDebounceChanged(): void {\n this.searchDisposable?.dispose();\n\n const emitter = debounceEvent(this.search, this.debounce ?? 0);\n\n // Track this emitter in two separate variables to maintain the `EventEmitter` typing for\n // `this.search`. This allows for correct generation of `CustomEvent` types.\n this.search = emitter;\n this.searchDisposable = emitter;\n }\n\n private setupController(): void {\n this.onStateChangeDisposable?.dispose();\n\n this.onStateChangeDisposable = this.controller?.onStateChange.on(\n (state) => {\n // If a search was previously being performed, but has now finished,\n // emit the event that the search has completed.\n if (this.isSearching && !state.isSearching) {\n this.searchCompleted.emit(this.value);\n }\n\n this.isSearching = state.isSearching;\n }\n );\n }\n\n private emitCurrentValue(): void {\n this.lastEmittedValue = this.value;\n this.search.emit(this.value);\n }\n}\n","import { __assign } from 'tslib';\n\n/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\n/**\n * Lower case as a function.\n */\nfunction lowerCase(str) {\n return str.toLowerCase();\n}\n\n// Support camel case (\"camelCase\" -> \"camel Case\" and \"CAMELCase\" -> \"CAMEL Case\").\nvar DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];\n// Remove all non-word characters.\nvar DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n/**\n * Normalize the string into something other libraries can manipulate easier.\n */\nfunction noCase(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? \" \" : _d;\n var result = replace(replace(input, splitRegexp, \"$1\\0$2\"), stripRegexp, \"\\0\");\n var start = 0;\n var end = result.length;\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\")\n start++;\n while (result.charAt(end - 1) === \"\\0\")\n end--;\n // Transform each token independently.\n return result.slice(start, end).split(\"\\0\").map(transform).join(delimiter);\n}\n/**\n * Replace `re` in the input string with the replacement value.\n */\nfunction replace(input, re, value) {\n if (re instanceof RegExp)\n return input.replace(re, value);\n return re.reduce(function (input, re) { return input.replace(re, value); }, input);\n}\n\nfunction pascalCaseTransform(input, index) {\n var firstChar = input.charAt(0);\n var lowerChars = input.substr(1).toLowerCase();\n if (index > 0 && firstChar >= \"0\" && firstChar <= \"9\") {\n return \"_\" + firstChar + lowerChars;\n }\n return \"\" + firstChar.toUpperCase() + lowerChars;\n}\nfunction pascalCase(input, options) {\n if (options === void 0) { options = {}; }\n return noCase(input, __assign({ delimiter: \"\", transform: pascalCaseTransform }, options));\n}\n\nfunction camelCaseTransform(input, index) {\n if (index === 0)\n return input.toLowerCase();\n return pascalCaseTransform(input, index);\n}\nfunction camelCase(input, options) {\n if (options === void 0) { options = {}; }\n return pascalCase(input, __assign({ transform: camelCaseTransform }, options));\n}\n\nconst bindingRegEx = /{{(.+)}}/;\r\nclass CollectionBinding {\r\n constructor(bindings) {\r\n this.bindings = bindings;\r\n }\r\n bind(data) {\r\n this.bindings.forEach((binding) => binding.bind(data));\r\n }\r\n}\r\nclass NodeBinding {\r\n constructor(node, expr) {\r\n this.node = node;\r\n this.expr = expr;\r\n }\r\n}\r\nclass TextNodeBinding extends NodeBinding {\r\n constructor(node, expr) {\r\n super(node, expr);\r\n }\r\n bind(data) {\r\n const newContent = replaceBindingString(data, this.expr);\r\n if (newContent !== this.node.textContent) {\r\n this.node.textContent = newContent;\r\n }\r\n }\r\n}\r\nclass AttributeBinding extends NodeBinding {\r\n constructor(node, expr, attr) {\r\n super(node, expr);\r\n this.attr = attr;\r\n }\r\n bind(data) {\r\n const newValue = replaceBindingString(data, this.expr);\r\n const oldValue = this.node.getAttribute(this.attr);\r\n if (oldValue !== newValue) {\r\n this.node.setAttribute(this.attr, newValue);\r\n }\r\n }\r\n}\r\nclass PropertyBinding extends NodeBinding {\r\n constructor(node, expr, prop) {\r\n super(node, expr);\r\n this.prop = prop;\r\n }\r\n bind(data) {\r\n const newValue = replaceBinding(data, this.expr);\r\n /* eslint-disable @typescript-eslint/no-explicit-any */\r\n const oldValue = this.node[this.prop];\r\n if (oldValue !== newValue) {\r\n this.node[this.prop] = newValue;\r\n }\r\n /* eslint-enable @typescript-eslint/no-explicit-any */\r\n }\r\n}\r\nclass EventHandlerBinding extends NodeBinding {\r\n constructor(node, expr, eventName) {\r\n super(node, expr);\r\n this.eventName = eventName;\r\n }\r\n bind(data) {\r\n var _a;\r\n const path = extractBindingPath(this.expr);\r\n if (path != null) {\r\n (_a = this.disposable) === null || _a === void 0 ? void 0 : _a.dispose();\r\n const listener = getBindableValue(data, path, true);\r\n this.node.addEventListener(this.eventName, listener);\r\n this.disposable = {\r\n dispose: () => {\r\n this.node.removeEventListener(this.eventName, listener);\r\n },\r\n };\r\n }\r\n }\r\n}\r\nfunction generateBindings(node) {\r\n const bindings = [];\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const el = node;\r\n const bindableAttributes = getBindableAttributes(el);\r\n bindableAttributes.forEach((attr) => {\r\n if (attr.name.startsWith('event:')) {\r\n const eventName = camelCase(attr.name.replace('event:', ''));\r\n bindings.push(new EventHandlerBinding(el, attr.value, eventName));\r\n }\r\n else if (attr.name.startsWith('attr:')) {\r\n bindings.push(new AttributeBinding(el, attr.value, attr.name.replace('attr:', '')));\r\n }\r\n else if (attr.name.startsWith('prop:')) {\r\n const propName = camelCase(attr.name.replace('prop:', ''));\r\n bindings.push(new PropertyBinding(el, attr.value, propName));\r\n }\r\n });\r\n }\r\n else if (node.nodeType === Node.TEXT_NODE &&\r\n node.textContent != null &&\r\n bindingRegEx.test(node.textContent)) {\r\n bindings.push(new TextNodeBinding(node, node.textContent));\r\n }\r\n for (let i = 0; i < node.childNodes.length; i++) {\r\n bindings.push(...generateBindings(node.childNodes[i]));\r\n }\r\n return bindings;\r\n}\r\nfunction getBindableAttributes(element) {\r\n return Array.from(element.attributes).filter((attr) => bindingRegEx.test(attr.value));\r\n}\r\nfunction extractBindingPath(expr) {\r\n const result = bindingRegEx.exec(expr);\r\n return result != null ? result[1] : undefined;\r\n}\r\nfunction replaceBindingString(data, expr) {\r\n const path = extractBindingPath(expr);\r\n if (path != null) {\r\n const value = getBindableValue(data, path, true);\r\n return expr.replace(`{{${path}}}`, value === null || value === void 0 ? void 0 : value.toString());\r\n }\r\n else {\r\n return expr;\r\n }\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction replaceBinding(data, expr) {\r\n const path = extractBindingPath(expr);\r\n if (path != null) {\r\n const value = getBindableValue(data, path, true);\r\n return value;\r\n }\r\n else {\r\n return expr;\r\n }\r\n}\r\nfunction getBindableValue(data, path, isHead = false\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n) {\r\n const [head, ...tail] = path.split('.');\r\n if (isHead && tail.length === 0) {\r\n return data;\r\n }\r\n else if (isHead && tail.length > 0) {\r\n return getBindableValue(data, tail.join('.'), false);\r\n }\r\n else {\r\n const value = data[head];\r\n if (tail.length > 0) {\r\n return getBindableValue(value, tail.join('.'), false);\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n}\n\nclass ElementPool {\r\n constructor(container, elementFactory) {\r\n this.container = container;\r\n this.elementFactory = elementFactory;\r\n this.instanceMap = new Map();\r\n this.elements = [];\r\n }\r\n swapHeadToTail(count) {\r\n const sliced = this.elements.splice(0, count);\r\n this.elements.splice(this.elements.length, 0, ...sliced);\r\n return this.elements.concat();\r\n }\r\n swapTailToHead(count) {\r\n const sliced = this.elements.splice(-count, count);\r\n this.elements.splice(0, 0, ...sliced);\r\n return this.elements.concat();\r\n }\r\n updateElements(count) {\r\n const diff = count - this.elements.length;\r\n if (diff > 0) {\r\n for (let i = 0; i < diff; i++) {\r\n this.createElement();\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < -diff; i++) {\r\n this.deleteElement();\r\n }\r\n }\r\n return this.elements.concat();\r\n }\r\n updateData(f) {\r\n this.elements.forEach((el, i) => {\r\n const instance = this.instanceMap.get(el);\r\n const data = f(i);\r\n instance === null || instance === void 0 ? void 0 : instance.bindings.bind(data);\r\n });\r\n }\r\n updateElementFactory(elementFactory) {\r\n this.elementFactory = elementFactory;\r\n this.updateElements(0);\r\n }\r\n iterateElements(f) {\r\n this.elements.forEach((el, i) => {\r\n const instance = this.instanceMap.get(el);\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n f(el, instance.bindings, i);\r\n });\r\n }\r\n createElement() {\r\n const instance = this.elementFactory();\r\n this.elements.push(instance.element);\r\n this.instanceMap.set(instance.element, instance);\r\n this.container.append(instance.element);\r\n return instance;\r\n }\r\n deleteElement() {\r\n const element = this.elements.pop();\r\n if (element != null) {\r\n this.instanceMap.delete(element);\r\n element.remove();\r\n }\r\n }\r\n}\n\nfunction append(container, element, data) {\r\n const bindings = new CollectionBinding(generateBindings(element));\r\n bindings.bind(data);\r\n container.appendChild(element);\r\n const created = container.lastElementChild;\r\n if (created != null) {\r\n return { element: created, bindings };\r\n }\r\n else {\r\n throw new Error('Failed to append element');\r\n }\r\n}\r\nfunction generateInstanceFromTemplate(template) {\r\n const fragment = template.content.cloneNode(true);\r\n const element = fragment.firstElementChild;\r\n const bindings = new CollectionBinding(generateBindings(fragment));\r\n return { element, bindings };\r\n}\n\nexport { AttributeBinding, CollectionBinding, ElementPool, EventHandlerBinding, NodeBinding, PropertyBinding, TextNodeBinding, append, generateBindings, generateInstanceFromTemplate };\n//# sourceMappingURL=bundle.esm.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\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.computeInitialColumnWidths();\n this.computeColumnGridLayout();\n this.ensureDividerTemplateDefined();\n this.computeCellHeight();\n this.computeHeaderHeight();\n this.rebindHeaderData();\n\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\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 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 = `${\n (this.viewportStartIndex + rowIndex) * this.rowHeight\n }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 phantom: false,\n endItem: false,\n },\n metadata: {},\n data: {},\n };\n const { bindings, element } = this.createColumnCellInstance(\n this.columnElements[0]\n );\n bindings.bind(dummyData);\n element.style.visibility = 'hidden';\n\n this.columnElements[0]?.appendChild(element);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n if (typeof (element as any).componentOnReady === 'function') {\n await (element as any).componentOnReady();\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n let height = element.clientHeight;\n if (height === 0) {\n height = await new Promise((resolve) => {\n setTimeout(() => resolve(element.getBoundingClientRect().height), 5);\n });\n }\n\n this.rowHeight = height ?? this.rowHeight;\n element.remove();\n this.isComputingCellHeight = this.rowHeight === 0;\n }\n };\n\n private computeHeaderHeight = (): void => {\n if (this.stateMap.headerHeight == null) {\n this.stateMap.headerHeight =\n this.headerElement?.getBoundingClientRect().height;\n this.hostEl.style.setProperty(\n '--header-height',\n `${this.stateMap.headerHeight}px`\n );\n }\n };\n\n private computeColumnGridLayout = (): void => {\n if (this.stateMap.columnWidths.length === 0) {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100\n );\n }\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n if (this.stateMap.columnWidthPercentages.length === 0) {\n this.stateMap.columnWidthPercentages = this.columnElements.map(\n (c) => (c.initialWidth ?? 100) / layoutWidth\n );\n }\n }\n\n /**\n * This layout uses `1fr` instead of the final column width to\n * allow the final column to shrink when a scrollbar appears.\n *\n * This flex behavior is not desired for the header and divider\n * elements since they are not scrollable, and `columnGridFixedLayout`\n * should be used instead.\n */\n this.columnGridLayout = `${this.stateMap.columnWidths\n .slice(0, -1)\n .reduce((res, w) => `${res} ${w}px`, '')} 1fr`;\n\n this.columnGridFixedLayout = `${this.stateMap.columnWidths.reduce(\n (res, w) => `${res} ${w}px`,\n ''\n )}`;\n };\n\n private bindHeaderData = (): void => {\n if (this.stateMap.headerInstances == null) {\n this.stateMap.headerInstances = this.columnElements\n .map((c, i) => {\n const instance = this.createHeaderInstance(c);\n\n if (instance != null) {\n instance.element.style.paddingRight =\n i === this.columnElements.length - 1\n ? `0`\n : `var(--scene-tree-table-column-gap)`;\n instance.element.slot = 'header';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n }\n\n return instance;\n })\n .filter((i) => i != null) as Array<InstancedTemplate<HTMLElement>>;\n }\n\n if (this.stateMap.headerDividerInstances == null) {\n this.stateMap.headerDividerInstances = this.columnElements\n .slice(0, -1)\n .map((_, i) => {\n const instance = this.createDividerInstance();\n\n instance.element.slot = 'divider';\n instance.element.style.position = 'absolute';\n instance.element.style.right = '0';\n instance.element.style.pointerEvents = 'auto';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n\n return instance;\n });\n }\n };\n\n private rebindHeaderData = (): void => {\n this.removeDividerDragListeners();\n\n this.stateMap.headerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerDividerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerInstances = undefined;\n this.stateMap.headerDividerInstances = undefined;\n\n this.bindHeaderData();\n this.addDividerDragListeners();\n };\n\n private addDividerDragListeners(): void {\n this.stateMap.headerDividerListeners =\n this.stateMap.headerDividerInstances?.map((d, i) => {\n const listener = this.createDividerPointerDownHandler(i);\n\n d.element.addEventListener('pointerdown', listener);\n\n return listener;\n });\n }\n\n private removeDividerDragListeners(): void {\n if (this.stateMap.headerDividerListeners != null) {\n const listeners = this.stateMap.headerDividerListeners;\n\n this.stateMap.headerDividerInstances?.forEach((d, i) => {\n const listener = listeners[i];\n if (listener != null) {\n d.element.removeEventListener('pointerdown', listener);\n }\n });\n this.stateMap.headerDividerListeners = undefined;\n }\n }\n\n private createDividerPointerDownHandler = (\n index: number\n ): ((event: PointerEvent) => void) => {\n return (event: PointerEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n\n this.lastDividerPointerPosition = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n this.resizingColumnIndex = index;\n this.stateMap.headerDividerInstances?.[index]?.element.classList.add(\n 'dragging'\n );\n\n window.addEventListener('pointermove', this.handleDividerPointerMove);\n window.addEventListener('pointerup', this.handleDividerPointerUp);\n };\n };\n\n private handleDividerPointerMove = (event: PointerEvent): void => {\n const current = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n\n if (\n this.lastDividerPointerPosition != null &&\n this.resizingColumnIndex != null\n ) {\n const resizingIndex = this.resizingColumnIndex;\n const diff = Point.subtract(this.lastDividerPointerPosition, current);\n\n if (Math.abs(diff.x) >= 1 && this.isValidResize(diff, resizingIndex)) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex ? w - diff.x : w\n );\n\n if (resizingIndex + 1 < this.stateMap.columnWidths.length) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex + 1 ? w + diff.x : w\n );\n }\n\n this.lastDividerPointerPosition = current;\n this.computeColumnGridLayout();\n }\n }\n };\n\n private handleDividerPointerUp = (): void => {\n if (this.resizingColumnIndex != null) {\n this.stateMap.headerDividerInstances?.[\n this.resizingColumnIndex\n ]?.element.classList.remove('dragging');\n }\n this.lastDividerPointerPosition = undefined;\n this.resizingColumnIndex = undefined;\n\n this.recomputeColumnPercentages();\n this.recomputeColumnWidths();\n\n window.removeEventListener('pointermove', this.handleDividerPointerMove);\n window.removeEventListener('pointerup', this.handleDividerPointerUp);\n };\n\n private isValidResize = (diff: Point.Point, index: number): boolean => {\n const currentColumn = this.columnElements[index];\n const nextColumn = this.columnElements[index + 1];\n const currentWidth = this.stateMap.columnWidths[index];\n const nextWidth = this.stateMap.columnWidths[index + 1];\n const currentMinWidth = currentColumn.minWidth ?? 0;\n const currentMaxWidth = currentColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n const nextMinWidth = nextColumn.minWidth ?? 0;\n const nextMaxWidth = nextColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n\n const currentIsValid =\n currentWidth - diff.x > currentMinWidth &&\n currentWidth - diff.x < currentMaxWidth;\n const nextIsValid =\n nextColumn != null\n ? nextWidth + diff.x > nextMinWidth && nextWidth + diff.x < nextMaxWidth\n : true;\n\n return currentIsValid && nextIsValid;\n };\n\n private handleScrollChanged = async (event: Event): Promise<void> => {\n this.isScrolling = true;\n\n this.scrollTimer = restartTimeout(() => {\n this.isScrolling = false;\n }, this.scrollTimer);\n\n this.scrollOffset = (event.target as HTMLElement).scrollTop;\n await this.computeAndUpdateViewportRows();\n };\n\n private getViewportRows(startIndex: number, endIndex: number): Row[] {\n const rows = this.rows.slice(startIndex, endIndex + 1);\n return rows.map((row) => (row != null ? this.populateRowData(row) : row));\n }\n\n private populateRowData(row: Row): Row {\n if (this.rowData != null && row != null) {\n const data = this.rowData?.(row) || {};\n return { ...row, data };\n } else {\n return row;\n }\n }\n\n private getLayoutHeight(): number | undefined {\n if (this.layoutHeight == null && this.tableElement != null) {\n this.layoutHeight = getSceneTreeViewportHeight(this.tableElement);\n }\n return this.layoutHeight;\n }\n\n private getLayoutWidth(): number | undefined {\n if (this.layoutWidth == null) {\n const computedWidth = getSceneTreeTableViewportWidth(this.hostEl);\n if (computedWidth > 0) {\n this.layoutWidth = computedWidth;\n }\n }\n return this.layoutWidth;\n }\n\n private clearLayoutHeight(): void {\n this.layoutHeight = undefined;\n }\n\n private clearLayoutWidth(): void {\n this.layoutWidth = undefined;\n }\n}\n",":host {\n /**\n * @prop --scene-tree-toolbar-content-gap: A CSS length that specifies the\n * horizontal gap between slots.\n */\n --scene-tree-toolbar-content-gap: 8px;\n\n display: flex;\n padding: 0.5rem;\n}\n\n.content {\n display: flex;\n align-items: center;\n}\n\n.content-primary {\n width: 100%;\n}\n\n::slotted(:not(:first-child)) {\n margin-left: var(--scene-tree-toolbar-content-gap);\n}\n","import { Component, h, Host } from '@stencil/core';\n\n/**\n * @slot The primary content that will be placed in the center of the toolbar\n * and stretch to container's available width.\n * @slot before - Content that is placed before the primary content.\n * @slot after - Content that is placed after the primary content.\n */\n@Component({\n tag: 'vertex-scene-tree-toolbar',\n styleUrl: 'scene-tree-toolbar.css',\n shadow: true,\n})\nexport class SceneTreeToolbar {\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"content\">\n <slot name=\"before\" />\n </div>\n <div class=\"content content-primary\">\n <slot />\n </div>\n <div class=\"content\">\n <slot name=\"after\" />\n </div>\n </Host>\n );\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{r as i,h as t,H as s,g as n}from"./p-110f66c6.js";import{t as e,P as o,a as l}from"./p-4637d762.js";import{p as h}from"./p-9d26f24e.js";import{a as d}from"./p-6b00f7cd.js";import{l as r,p as a}from"./p-342dac8b.js";import{g as u}from"./p-95f6305a.js";import{E as v}from"./p-510dccbe.js";import{E as c}from"./p-0d971ad6.js";import{g as p}from"./p-86f529e1.js";class f{constructor(i,t,s){this.rectObserver=new v;this.droppableSurfaces=[c.PRECISE_SURFACE,c.IMPRECISE_SURFACE,c.GENERIC_GEOMETRY];this.handlePointerMove=async i=>{const t=await this.isDroppableSurface(i);const s=this.controller.getDraggable();if(s!=null&&t){this.handleDrag(s,i)}if(this.controller.getDraggable()==null&&this.controller.getToolMode()==="edit"&&t){this.addCursor(this.getCursorType())}else{this.clearCursor()}};this.handleDrag=async(i,t)=>{const s=u(t,this.elementRect);const n=await this.getWorldPositionForPoint(s);if(n!=null){this.controller.updateDraggable(Object.assign(Object.assign({},i),{lastPoint:s}),n)}};this.handlePointerDown=async i=>{const t=t=>{const n=h.distance(h.create(i.clientX,t.clientY),h.create(t.clientX,t.clientY));if(n<=2&&i.buttons!==2){if(this.controller.getToolMode()==="edit"){const t=u(i,this.elementRect);this.handlePlacePin(t)}}s()};const s=()=>{window.removeEventListener("pointerup",t)};window.addEventListener("pointerup",t);return{dispose:s}};this.handlePointerUp=async()=>{const i=this.controller.getDraggable();const t=i===null||i===void 0?void 0:i.lastPoint;this.controller.setDraggable(undefined);if(t!=null&&i!=null){this.ifInitialized((async({api:s})=>{var n,e,o,l,h,d;const[r]=await s.hitItems(t);if((r===null||r===void 0?void 0:r.hitPoint)!=null&&((n=r===null||r===void 0?void 0:r.hitPoint)===null||n===void 0?void 0:n.x)!=null&&((e=r===null||r===void 0?void 0:r.hitPoint)===null||e===void 0?void 0:e.y)!=null&&((o=r===null||r===void 0?void 0:r.hitPoint)===null||o===void 0?void 0:o.z)!=null){this.controller.updateDraggable(Object.assign(Object.assign({},i),{lastPoint:t}),{x:(l=r===null||r===void 0?void 0:r.hitPoint)===null||l===void 0?void 0:l.x,y:r===null||r===void 0?void 0:r.hitPoint.y,z:r===null||r===void 0?void 0:r.hitPoint.z},(d=(h=r===null||r===void 0?void 0:r.partId)===null||h===void 0?void 0:h.hex)!==null&&d!==void 0?d:undefined)}}))}};this.controller=i;this.xOffset=t;this.yOffset=s}get elementRect(){return this.rectObserver.rect}initialize(i,t){this.element=i;this.api=t;this.rectObserver.observe(i);i.addEventListener("pointermove",this.handlePointerMove);i.addEventListener("pointerdown",this.handlePointerDown);window.addEventListener("pointerup",this.handlePointerUp)}dispose(){var i,t;this.rectObserver.disconnect();this.clearCursor();(i=this.element)===null||i===void 0?void 0:i.removeEventListener("pointermove",this.handlePointerMove);(t=this.element)===null||t===void 0?void 0:t.removeEventListener("pointerdown",this.handlePointerDown);window.removeEventListener("pointerup",this.handlePointerUp);this.element=undefined;this.api=undefined}async getWorldPositionForPoint(i){return this.ifInitialized((async({api:t})=>{const s=await t.getWorldPointFromViewport(i);return s}))}async handlePlacePin(i,t){this.ifInitialized((async({api:s})=>{var n,o,l,h,r,a;const[u]=await s.hitItems(i);if((u===null||u===void 0?void 0:u.hitPoint)!=null&&this.elementRect!=null){if((u===null||u===void 0?void 0:u.hitPoint)!=null&&(u===null||u===void 0?void 0:u.hitPoint.x)!=null&&(u===null||u===void 0?void 0:u.hitPoint.y)!=null&&(u===null||u===void 0?void 0:u.hitPoint.z)!=null){const s=t!=null?t.id:d.create();const v=this.controller.getStyleAttributes()!=null?{style:this.controller.getStyleAttributes()}:undefined;switch(this.controller.getToolType()){case"pin-icon":this.controller.setPin({type:"icon",id:s,worldPosition:{x:(n=u===null||u===void 0?void 0:u.hitPoint)===null||n===void 0?void 0:n.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(l=(o=u===null||u===void 0?void 0:u.itemId)===null||o===void 0?void 0:o.hex)!==null&&l!==void 0?l:undefined,attributes:v});break;case"pin-text":const d=t==null;const c=e(i,this.elementRect,d,this.xOffset,this.yOffset);this.controller.setPin({type:"text",id:s,worldPosition:{x:(h=u===null||u===void 0?void 0:u.hitPoint)===null||h===void 0?void 0:h.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(a=(r=u===null||u===void 0?void 0:u.itemId)===null||r===void 0?void 0:r.hex)!==null&&a!==void 0?a:undefined,label:{point:c},attributes:v});this.controller.setSelectedPinId(s);break}}}else{this.controller.setSelectedPinId()}}))}getCursorType(){switch(this.controller.getToolType()){case"pin-icon":return a;case"pin-text":return r}}addCursor(i){this.clearCursor();this.cursor=this.ifInitialized((({api:t})=>t.addCursor(i)))}async isDroppableSurface(i){var t;const s=u(i,this.elementRect);const n=await((t=this.api)===null||t===void 0?void 0:t.getEntityTypeAtPoint(s));return n!=null&&this.droppableSurfaces.includes(n)}ifInitialized(i){if(this.element!=null&&this.api!=null){return i({element:this.element,api:this.api})}else{throw new Error("Pins interaction handler not initialized.")}}clearCursor(){var i;(i=this.cursor)===null||i===void 0?void 0:i.dispose();this.cursor=undefined}}const w=":host{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none;--viewer-pin-tool-initial-label-offset-x:20;--viewer-pin-tool-initial-label-offset-y:20}";const m=class{constructor(t){i(this,t);this.pinModel=new o;this.tool="pin-icon";this.mode="view";this.pins=[];this.stateMap={};this.handleSetProjectionMatrix=()=>{var i,t;this.projectionViewMatrix=(t=(i=this.viewer)===null||i===void 0?void 0:i.frame)===null||t===void 0?void 0:t.scene.camera.projectionViewMatrix}}watchModeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolMode(this.mode);this.setupInteractionHandler();if(this.mode==="edit"){this.setFeatureMaps();this.setCameraAndKeyboardControls()}else{this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}}watchTypeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolType(this.tool);this.setupInteractionHandler()}watchAccentColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setAccentColor(this.accentColor);this.setupInteractionHandler()}watchPrimaryColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setPrimaryColor(this.primaryColor);this.setupInteractionHandler()}watchPinsChange(){if(this.pins.length>0){this.setDepthBuffers();this.setFeatureMaps()}else{this.resetDepthBuffers();this.resetFeatureMaps()}}connectedCallback(){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls()}componentWillLoad(){this.updateViewport();this.setupController();this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();this.pinModel.onEntitiesChanged((i=>{this.pins=i}));this.pinModel.onSelectionChange((i=>{this.selectedPinId=i}));this.handleViewerChanged(this.viewer,undefined)}componentDidLoad(){this.resizeObserver=new ResizeObserver((()=>this.updateViewport()));this.resizeObserver.observe(this.hostEl)}disconnectedCallback(){this.clearInteractionHandler();this.clearModelListeners();this.resetDepthBuffers();this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}handleViewerChanged(i,t){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();if(t!=null){t.removeEventListener("frameDrawn",this.handleSetProjectionMatrix)}if(i!=null){i.addEventListener("frameDrawn",this.handleSetProjectionMatrix)}this.handleSetProjectionMatrix()}render(){return t(s,null,t("vertex-viewer-dom-renderer",{viewer:this.viewer,drawMode:"2d"},this.pins.map((i=>t("vertex-viewer-pin-group",{id:`pin-group-${i.id}`,"data-is-dom-group-element":true,pin:i,elementBounds:this.elementBounds,pinModel:this.pinModel,pinController:this.pinController,projectionViewMatrix:this.projectionViewMatrix,selected:this.selectedPinId===i.id})))))}setupController(){const i=this.accentColor||this.primaryColor?{accentColor:this.accentColor,primaryColor:this.primaryColor}:undefined;this.pinController=new l(this.pinModel,this.mode,this.tool,i)}clearInteractionHandler(){var i;(i=this.registeredInteractionHandler)===null||i===void 0?void 0:i.then((i=>i.dispose()));this.registeredInteractionHandler=undefined}setupInteractionHandler(){var i;const t=window.getComputedStyle(this.hostEl);const s=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-x").trim();const n=Number.isFinite(Number.parseInt(s))?Number.parseInt(s):20;const e=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-y").trim();const o=Number.isFinite(Number.parseInt(e))?Number.parseInt(e):20;this.clearInteractionHandler();if(this.pinController!=null){this.registeredInteractionHandler=(i=this.viewer)===null||i===void 0?void 0:i.registerInteractionHandler(new f(this.pinController,n,o))}}clearModelListeners(){var i,t,s;(i=this.onEntitiesChangedHandler)===null||i===void 0?void 0:i.dispose();this.onEntitiesChangedHandler=undefined;(t=this.onEntityAddedHandler)===null||t===void 0?void 0:t.dispose();this.onEntityAddedHandler=undefined;(s=this.resizeObserver)===null||s===void 0?void 0:s.disconnect()}updateViewport(){this.elementBounds=p(this.hostEl)}setDepthBuffers(){if(this.pins.length>0&&this.viewer!=null&&this.viewer.depthBuffers==null){this.stateMap.shouldClearDepthBuffers=true;this.viewer.depthBuffers="final"}}resetDepthBuffers(){if(this.stateMap.shouldClearDepthBuffers&&this.viewer!=null){this.viewer.depthBuffers=undefined;this.stateMap.shouldClearDepthBuffers=undefined}}setFeatureMaps(){if((this.pins.length>0||this.mode==="edit")&&this.viewer!=null&&this.viewer.featureMaps==null){this.stateMap.shouldClearFeatureMaps=true;this.viewer.featureMaps="final"}}resetFeatureMaps(){if(this.stateMap.shouldClearFeatureMaps&&this.viewer!=null){this.viewer.featureMaps=undefined;this.stateMap.shouldClearFeatureMaps=undefined}}setCameraAndKeyboardControls(){if(this.mode==="edit"&&this.viewer!=null){if(this.viewer.cameraControls){this.stateMap.shouldClearCameraControls=true;this.viewer.cameraControls=false}if(this.viewer.keyboardControls){this.stateMap.shouldClearKeyboardControls=true;this.viewer.keyboardControls=false}}}resetCameraAndKeyboardControls(){if(this.viewer!=null){if(this.stateMap.shouldClearCameraControls){this.viewer.cameraControls=true;this.stateMap.shouldClearCameraControls=undefined}if(this.stateMap.shouldClearKeyboardControls){this.viewer.keyboardControls=true;this.stateMap.shouldClearKeyboardControls=undefined}}}get hostEl(){return n(this)}static get watchers(){return{mode:["watchModeChange"],tool:["watchTypeChange"],accentColor:["watchAccentColorChange"],primaryColor:["watchPrimaryColorChange"],pins:["watchPinsChange"],viewer:["handleViewerChanged"]}}};m.style=w;export{m as vertex_viewer_pin_tool};
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{r as i,h as t,H as s,g as n}from"./p-388f809e.js";import{t as e,P as o,a as l}from"./p-4637d762.js";import{p as h}from"./p-9d26f24e.js";import{a as d}from"./p-6b00f7cd.js";import{l as r,p as a}from"./p-eda9f5d4.js";import{g as u}from"./p-95f6305a.js";import{E as v}from"./p-510dccbe.js";import{E as c}from"./p-0d971ad6.js";import{g as p}from"./p-86f529e1.js";class f{constructor(i,t,s){this.rectObserver=new v;this.droppableSurfaces=[c.PRECISE_SURFACE,c.IMPRECISE_SURFACE,c.GENERIC_GEOMETRY];this.handlePointerMove=async i=>{const t=await this.isDroppableSurface(i);const s=this.controller.getDraggable();if(s!=null&&t){this.handleDrag(s,i)}if(this.controller.getDraggable()==null&&this.controller.getToolMode()==="edit"&&t){this.addCursor(this.getCursorType())}else{this.clearCursor()}};this.handleDrag=async(i,t)=>{const s=u(t,this.elementRect);const n=await this.getWorldPositionForPoint(s);if(n!=null){this.controller.updateDraggable(Object.assign(Object.assign({},i),{lastPoint:s}),n)}};this.handlePointerDown=async i=>{const t=t=>{const n=h.distance(h.create(i.clientX,t.clientY),h.create(t.clientX,t.clientY));if(n<=2&&i.buttons!==2){if(this.controller.getToolMode()==="edit"){const t=u(i,this.elementRect);this.handlePlacePin(t)}}s()};const s=()=>{window.removeEventListener("pointerup",t)};window.addEventListener("pointerup",t);return{dispose:s}};this.handlePointerUp=async()=>{const i=this.controller.getDraggable();const t=i===null||i===void 0?void 0:i.lastPoint;this.controller.setDraggable(undefined);if(t!=null&&i!=null){this.ifInitialized((async({api:s})=>{var n,e,o,l,h,d;const[r]=await s.hitItems(t);if((r===null||r===void 0?void 0:r.hitPoint)!=null&&((n=r===null||r===void 0?void 0:r.hitPoint)===null||n===void 0?void 0:n.x)!=null&&((e=r===null||r===void 0?void 0:r.hitPoint)===null||e===void 0?void 0:e.y)!=null&&((o=r===null||r===void 0?void 0:r.hitPoint)===null||o===void 0?void 0:o.z)!=null){this.controller.updateDraggable(Object.assign(Object.assign({},i),{lastPoint:t}),{x:(l=r===null||r===void 0?void 0:r.hitPoint)===null||l===void 0?void 0:l.x,y:r===null||r===void 0?void 0:r.hitPoint.y,z:r===null||r===void 0?void 0:r.hitPoint.z},(d=(h=r===null||r===void 0?void 0:r.partId)===null||h===void 0?void 0:h.hex)!==null&&d!==void 0?d:undefined)}}))}};this.controller=i;this.xOffset=t;this.yOffset=s}get elementRect(){return this.rectObserver.rect}initialize(i,t){this.element=i;this.api=t;this.rectObserver.observe(i);i.addEventListener("pointermove",this.handlePointerMove);i.addEventListener("pointerdown",this.handlePointerDown);window.addEventListener("pointerup",this.handlePointerUp)}dispose(){var i,t;this.rectObserver.disconnect();this.clearCursor();(i=this.element)===null||i===void 0?void 0:i.removeEventListener("pointermove",this.handlePointerMove);(t=this.element)===null||t===void 0?void 0:t.removeEventListener("pointerdown",this.handlePointerDown);window.removeEventListener("pointerup",this.handlePointerUp);this.element=undefined;this.api=undefined}async getWorldPositionForPoint(i){return this.ifInitialized((async({api:t})=>{const s=await t.getWorldPointFromViewport(i);return s}))}async handlePlacePin(i,t){this.ifInitialized((async({api:s})=>{var n,o,l,h,r,a;const[u]=await s.hitItems(i);if((u===null||u===void 0?void 0:u.hitPoint)!=null&&this.elementRect!=null){if((u===null||u===void 0?void 0:u.hitPoint)!=null&&(u===null||u===void 0?void 0:u.hitPoint.x)!=null&&(u===null||u===void 0?void 0:u.hitPoint.y)!=null&&(u===null||u===void 0?void 0:u.hitPoint.z)!=null){const s=t!=null?t.id:d.create();const v=this.controller.getStyleAttributes()!=null?{style:this.controller.getStyleAttributes()}:undefined;switch(this.controller.getToolType()){case"pin-icon":this.controller.setPin({type:"icon",id:s,worldPosition:{x:(n=u===null||u===void 0?void 0:u.hitPoint)===null||n===void 0?void 0:n.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(l=(o=u===null||u===void 0?void 0:u.itemId)===null||o===void 0?void 0:o.hex)!==null&&l!==void 0?l:undefined,attributes:v});break;case"pin-text":const d=t==null;const c=e(i,this.elementRect,d,this.xOffset,this.yOffset);this.controller.setPin({type:"text",id:s,worldPosition:{x:(h=u===null||u===void 0?void 0:u.hitPoint)===null||h===void 0?void 0:h.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(a=(r=u===null||u===void 0?void 0:u.itemId)===null||r===void 0?void 0:r.hex)!==null&&a!==void 0?a:undefined,label:{point:c},attributes:v});this.controller.setSelectedPinId(s);break}}}else{this.controller.setSelectedPinId()}}))}getCursorType(){switch(this.controller.getToolType()){case"pin-icon":return a;case"pin-text":return r}}addCursor(i){this.clearCursor();this.cursor=this.ifInitialized((({api:t})=>t.addCursor(i)))}async isDroppableSurface(i){var t;const s=u(i,this.elementRect);const n=await((t=this.api)===null||t===void 0?void 0:t.getEntityTypeAtPoint(s));return n!=null&&this.droppableSurfaces.includes(n)}ifInitialized(i){if(this.element!=null&&this.api!=null){return i({element:this.element,api:this.api})}else{throw new Error("Pins interaction handler not initialized.")}}clearCursor(){var i;(i=this.cursor)===null||i===void 0?void 0:i.dispose();this.cursor=undefined}}const w=":host{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none;--viewer-pin-tool-initial-label-offset-x:20;--viewer-pin-tool-initial-label-offset-y:20}";const m=class{constructor(t){i(this,t);this.pinModel=new o;this.tool="pin-icon";this.mode="view";this.pins=[];this.stateMap={};this.handleSetProjectionMatrix=()=>{var i,t;this.projectionViewMatrix=(t=(i=this.viewer)===null||i===void 0?void 0:i.frame)===null||t===void 0?void 0:t.scene.camera.projectionViewMatrix}}watchModeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolMode(this.mode);this.setupInteractionHandler();if(this.mode==="edit"){this.setFeatureMaps();this.setCameraAndKeyboardControls()}else{this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}}watchTypeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolType(this.tool);this.setupInteractionHandler()}watchAccentColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setAccentColor(this.accentColor);this.setupInteractionHandler()}watchPrimaryColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setPrimaryColor(this.primaryColor);this.setupInteractionHandler()}watchPinsChange(){if(this.pins.length>0){this.setDepthBuffers();this.setFeatureMaps()}else{this.resetDepthBuffers();this.resetFeatureMaps()}}connectedCallback(){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls()}componentWillLoad(){this.updateViewport();this.setupController();this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();this.pinModel.onEntitiesChanged((i=>{this.pins=i}));this.pinModel.onSelectionChange((i=>{this.selectedPinId=i}));this.handleViewerChanged(this.viewer,undefined)}componentDidLoad(){this.resizeObserver=new ResizeObserver((()=>this.updateViewport()));this.resizeObserver.observe(this.hostEl)}disconnectedCallback(){this.clearInteractionHandler();this.clearModelListeners();this.resetDepthBuffers();this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}handleViewerChanged(i,t){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();if(t!=null){t.removeEventListener("frameDrawn",this.handleSetProjectionMatrix)}if(i!=null){i.addEventListener("frameDrawn",this.handleSetProjectionMatrix)}this.handleSetProjectionMatrix()}render(){return t(s,null,t("vertex-viewer-dom-renderer",{viewer:this.viewer,drawMode:"2d"},this.pins.map((i=>t("vertex-viewer-pin-group",{id:`pin-group-${i.id}`,"data-is-dom-group-element":true,pin:i,elementBounds:this.elementBounds,pinModel:this.pinModel,pinController:this.pinController,projectionViewMatrix:this.projectionViewMatrix,selected:this.selectedPinId===i.id})))))}setupController(){const i=this.accentColor||this.primaryColor?{accentColor:this.accentColor,primaryColor:this.primaryColor}:undefined;this.pinController=new l(this.pinModel,this.mode,this.tool,i)}clearInteractionHandler(){var i;(i=this.registeredInteractionHandler)===null||i===void 0?void 0:i.then((i=>i.dispose()));this.registeredInteractionHandler=undefined}setupInteractionHandler(){var i;const t=window.getComputedStyle(this.hostEl);const s=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-x").trim();const n=Number.isFinite(Number.parseInt(s))?Number.parseInt(s):20;const e=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-y").trim();const o=Number.isFinite(Number.parseInt(e))?Number.parseInt(e):20;this.clearInteractionHandler();if(this.pinController!=null){this.registeredInteractionHandler=(i=this.viewer)===null||i===void 0?void 0:i.registerInteractionHandler(new f(this.pinController,n,o))}}clearModelListeners(){var i,t,s;(i=this.onEntitiesChangedHandler)===null||i===void 0?void 0:i.dispose();this.onEntitiesChangedHandler=undefined;(t=this.onEntityAddedHandler)===null||t===void 0?void 0:t.dispose();this.onEntityAddedHandler=undefined;(s=this.resizeObserver)===null||s===void 0?void 0:s.disconnect()}updateViewport(){this.elementBounds=p(this.hostEl)}setDepthBuffers(){if(this.pins.length>0&&this.viewer!=null&&this.viewer.depthBuffers==null){this.stateMap.shouldClearDepthBuffers=true;this.viewer.depthBuffers="final"}}resetDepthBuffers(){if(this.stateMap.shouldClearDepthBuffers&&this.viewer!=null){this.viewer.depthBuffers=undefined;this.stateMap.shouldClearDepthBuffers=undefined}}setFeatureMaps(){if((this.pins.length>0||this.mode==="edit")&&this.viewer!=null&&this.viewer.featureMaps==null){this.stateMap.shouldClearFeatureMaps=true;this.viewer.featureMaps="final"}}resetFeatureMaps(){if(this.stateMap.shouldClearFeatureMaps&&this.viewer!=null){this.viewer.featureMaps=undefined;this.stateMap.shouldClearFeatureMaps=undefined}}setCameraAndKeyboardControls(){if(this.mode==="edit"&&this.viewer!=null){if(this.viewer.cameraControls){this.stateMap.shouldClearCameraControls=true;this.viewer.cameraControls=false}if(this.viewer.keyboardControls){this.stateMap.shouldClearKeyboardControls=true;this.viewer.keyboardControls=false}}}resetCameraAndKeyboardControls(){if(this.viewer!=null){if(this.stateMap.shouldClearCameraControls){this.viewer.cameraControls=true;this.stateMap.shouldClearCameraControls=undefined}if(this.stateMap.shouldClearKeyboardControls){this.viewer.keyboardControls=true;this.stateMap.shouldClearKeyboardControls=undefined}}}get hostEl(){return n(this)}static get watchers(){return{mode:["watchModeChange"],tool:["watchTypeChange"],accentColor:["watchAccentColorChange"],primaryColor:["watchPrimaryColorChange"],pins:["watchPinsChange"],viewer:["handleViewerChanged"]}}};m.style=w;export{m as vertex_viewer_pin_tool};
|
|
5
|
+
//# sourceMappingURL=p-75f5ae33.entry.js.map
|