@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
package/dist/cjs/viewer.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"file":"viewer.cjs.js","mappings":"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","names":["doc","NAMESPACE","win","promiseResolve","globalScripts","bootstrapLazy"],"sources":["
|
|
1
|
+
{"file":"viewer.cjs.js","mappings":"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","names":["doc","NAMESPACE","win","promiseResolve","globalScripts","bootstrapLazy"],"sources":["./node_modules/@stencil/core/internal/client/patch-browser.js","@lazy-browser-entrypoint?app-data=conditional"],"sourcesContent":["/*\n Stencil Client Patch Browser v2.16.1 | MIT Licensed | https://stenciljs.com\n */\nimport { BUILD, NAMESPACE } from '@stencil/core/internal/app-data';\nimport { consoleDevInfo, plt, win, doc, promiseResolve, H } from '@stencil/core';\nconst getDynamicImportFunction = (namespace) => `__sc_import_${namespace.replace(/\\s|-/g, '_')}`;\nconst patchBrowser = () => {\n // NOTE!! This fn cannot use async/await!\n if (BUILD.isDev && !BUILD.isTesting) {\n consoleDevInfo('Running in development mode.');\n }\n if (BUILD.cssVarShim) {\n // shim css vars\n plt.$cssShim$ = win.__cssshim;\n }\n if (BUILD.cloneNodeFix) {\n // opted-in to polyfill cloneNode() for slot polyfilled components\n patchCloneNodeFix(H.prototype);\n }\n if (BUILD.profile && !performance.mark) {\n // not all browsers support performance.mark/measure (Safari 10)\n // because the mark/measure APIs are designed to write entries to a buffer in the browser that does not exist,\n // simply stub the implementations out.\n // TODO(STENCIL-323): Remove this patch when support for older browsers is removed (breaking)\n // @ts-ignore\n performance.mark = performance.measure = () => {\n /*noop*/\n };\n performance.getEntriesByName = () => [];\n }\n // @ts-ignore\n const scriptElm = BUILD.scriptDataOpts || BUILD.safari10 || BUILD.dynamicImportShim\n ? Array.from(doc.querySelectorAll('script')).find((s) => new RegExp(`\\/${NAMESPACE}(\\\\.esm)?\\\\.js($|\\\\?|#)`).test(s.src) ||\n s.getAttribute('data-stencil-namespace') === NAMESPACE)\n : null;\n const importMeta = import.meta.url;\n const opts = BUILD.scriptDataOpts ? scriptElm['data-opts'] || {} : {};\n if (BUILD.safari10 && 'onbeforeload' in scriptElm && !history.scrollRestoration /* IS_ESM_BUILD */) {\n // Safari < v11 support: This IF is true if it's Safari below v11.\n // This fn cannot use async/await since Safari didn't support it until v11,\n // however, Safari 10 did support modules. Safari 10 also didn't support \"nomodule\",\n // so both the ESM file and nomodule file would get downloaded. Only Safari\n // has 'onbeforeload' in the script, and \"history.scrollRestoration\" was added\n // to Safari in v11. Return a noop then() so the async/await ESM code doesn't continue.\n // IS_ESM_BUILD is replaced at build time so this check doesn't happen in systemjs builds.\n return {\n then() {\n /* promise noop */\n },\n };\n }\n if (!BUILD.safari10 && importMeta !== '') {\n opts.resourcesUrl = new URL('.', importMeta).href;\n }\n else if (BUILD.dynamicImportShim || BUILD.safari10) {\n opts.resourcesUrl = new URL('.', new URL(scriptElm.getAttribute('data-resources-url') || scriptElm.src, win.location.href)).href;\n if (BUILD.dynamicImportShim) {\n patchDynamicImport(opts.resourcesUrl, scriptElm);\n }\n if (BUILD.dynamicImportShim && !win.customElements) {\n // module support, but no custom elements support (Old Edge)\n // @ts-ignore\n return import(/* webpackChunkName: \"polyfills-dom\" */ './dom.js').then(() => opts);\n }\n }\n return promiseResolve(opts);\n};\nconst patchDynamicImport = (base, orgScriptElm) => {\n const importFunctionName = getDynamicImportFunction(NAMESPACE);\n try {\n // test if this browser supports dynamic imports\n // There is a caching issue in V8, that breaks using import() in Function\n // By generating a random string, we can workaround it\n // Check https://bugs.chromium.org/p/chromium/issues/detail?id=990810 for more info\n win[importFunctionName] = new Function('w', `return import(w);//${Math.random()}`);\n }\n catch (e) {\n // this shim is specifically for browsers that do support \"esm\" imports\n // however, they do NOT support \"dynamic\" imports\n // basically this code is for old Edge, v18 and below\n const moduleMap = new Map();\n win[importFunctionName] = (src) => {\n const url = new URL(src, base).href;\n let mod = moduleMap.get(url);\n if (!mod) {\n const script = doc.createElement('script');\n script.type = 'module';\n script.crossOrigin = orgScriptElm.crossOrigin;\n script.src = URL.createObjectURL(new Blob([`import * as m from '${url}'; window.${importFunctionName}.m = m;`], {\n type: 'application/javascript',\n }));\n mod = new Promise((resolve) => {\n script.onload = () => {\n resolve(win[importFunctionName].m);\n script.remove();\n };\n });\n moduleMap.set(url, mod);\n doc.head.appendChild(script);\n }\n return mod;\n };\n }\n};\nconst patchCloneNodeFix = (HTMLElementPrototype) => {\n const nativeCloneNodeFn = HTMLElementPrototype.cloneNode;\n HTMLElementPrototype.cloneNode = function (deep) {\n if (this.nodeName === 'TEMPLATE') {\n return nativeCloneNodeFn.call(this, deep);\n }\n const clonedNode = nativeCloneNodeFn.call(this, false);\n const srcChildNodes = this.childNodes;\n if (deep) {\n for (let i = 0; i < srcChildNodes.length; i++) {\n // Node.ATTRIBUTE_NODE === 2, and checking because IE11\n if (srcChildNodes[i].nodeType !== 2) {\n clonedNode.appendChild(srcChildNodes[i].cloneNode(true));\n }\n }\n }\n return clonedNode;\n };\n};\nexport { patchBrowser };\n","import { bootstrapLazy } from '@stencil/core';\nimport { patchBrowser } from '@stencil/core/internal/client/patch-browser';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\npatchBrowser().then(options => {\n globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n});\n"],"version":3}
|
|
@@ -827,7 +827,7 @@ export class SceneTree {
|
|
|
827
827
|
"name": "example",
|
|
828
828
|
"text": "```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```"
|
|
829
829
|
}],
|
|
830
|
-
"text": "A callback that is invoked immediately before a row is about to rendered.\nThis callback can return additional data that can be bound to in a\ntemplate."
|
|
830
|
+
"text": "A callback that is invoked immediately before a row is about to be rendered.\nThis callback can return additional data that can be bound to in a\ntemplate."
|
|
831
831
|
}
|
|
832
832
|
},
|
|
833
833
|
"config": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-tree.js","sourceRoot":"","sources":["../../../../../src/components/scene-tree/scene-tree.tsx"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import 'requestidlecallback-polyfill';\n\nimport {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { ElementPool } from '@vertexvis/html-templates';\nimport { Node } from '@vertexvis/scene-tree-protos/scenetree/protos/domain_pb';\nimport { SceneTreeAPIClient } from '@vertexvis/scene-tree-protos/scenetree/protos/scene_tree_api_pb_service';\nimport { Disposable } from '@vertexvis/utils';\n\nimport {\n Config,\n parseAndValidateConfig,\n PartialConfig,\n} from '../../lib/config';\nimport { Environment } from '../../lib/environment';\nimport { isSceneTreeTableCellElement } from '../scene-tree-table-cell/utils';\nimport { SceneTreeError } from './errors';\nimport {\n FilterTreeOptions,\n SceneTreeController,\n SceneTreeState,\n} from './lib/controller';\nimport { getSceneTreeContainsElement } from './lib/dom';\nimport { SceneTreeErrorCode, SceneTreeErrorDetails } from './lib/errors';\nimport { webSocketSubscriptionTransportFactory } from './lib/grpc';\nimport { isLoadedRow, Row } from './lib/row';\nimport {\n deselectItem,\n hideItem,\n isolateItem,\n selectFilterResults,\n selectItem,\n selectRangeInSceneTree,\n showItem,\n} from './lib/viewer-ops';\nimport {\n FilterOptions,\n MetadataKey,\n RowArg,\n RowDataProvider,\n SCENE_ITEM_NAME_METADATA_KEY,\n SceneTreeOperationOptions,\n ScrollToOptions,\n SelectItemOptions,\n} from './types';\n\n/**\n * The minimum amount of time provided by requestIdleCallback to clear purged\n * data. A value too low may cause contention with browser rendering. A value\n * too high will cause too many items to be accumulated.\n */\nconst MIN_CLEAR_UNUSED_DATA_MS = 25;\n\ninterface StateMap {\n idleCallbackId?: number;\n resizeObserver?: ResizeObserver;\n componentLoaded: boolean;\n\n client?: SceneTreeAPIClient;\n jwt?: string;\n\n onStateChangeDisposable?: Disposable;\n subscribeDisposable?: Disposable;\n viewerDisposable?: Disposable;\n viewerSceneReadyDisposable?: Disposable;\n\n elementPool?: ElementPool;\n template?: HTMLTemplateElement;\n\n selectionPath?: string[];\n\n layoutEl?: HTMLVertexSceneTreeTableLayoutElement;\n}\n\ntype OperationHandler = (data: {\n viewer: HTMLVertexViewerElement;\n id: string;\n node: Node.AsObject;\n}) => void | Promise<void>;\n\n/**\n * @slot header - A slot that places content above the rows in the tree. By\n * default, a search toolbar will be placed in this slot. Elements can be\n * stacked by assigning multiple elements to this slot.\n * @slot footer - A slot that places content below the rows in the tree.\n * Elements can be stacked by assigning multiple elements to this slot.\n */\n@Component({\n tag: 'vertex-scene-tree',\n styleUrl: 'scene-tree.css',\n shadow: true,\n})\nexport class SceneTree {\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 @Prop()\n public overScanCount = 25;\n\n /**\n * A CSS selector that points to a `<vertex-viewer>` element. Either this\n * property or `viewer` must be set.\n */\n @Prop()\n public viewerSelector?: string;\n\n /**\n * An instance of a `<vertex-viewer>` element. Either this property or\n * `viewerSelector` must be set.\n */\n @Prop({ reflect: true, mutable: true })\n public viewer?: HTMLVertexViewerElement | null;\n\n /**\n * A callback that is invoked immediately before a row is about to rendered.\n * This callback can return additional data that can be bound to in a\n * template.\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 * An object to configure the scene tree.\n */\n @Prop()\n public config?: PartialConfig | string;\n\n /**\n * Sets the default environment for the viewer. This setting is used for\n * auto-configuring network hosts.\n *\n * Use the `config` property for manually setting hosts.\n */\n @Prop()\n public configEnv: Environment = 'platprod';\n\n @Prop({ mutable: true })\n public controller?: SceneTreeController;\n\n /**\n * A set of options to configure scene tree searching behavior.\n */\n @Prop({ mutable: true })\n public searchOptions: FilterOptions = {};\n\n /**\n * @deprecated Use `searchOptions`\n * Indicates whether the metadata search should use an exact match.\n */\n @Prop({ mutable: true })\n public metadataSearchExactMatch = false;\n\n /**\n * @deprecated Use `searchOptions`\n * A list of the metadata keys that a scene tree search should be performed on.\n */\n @Prop({ mutable: true })\n public metadataSearchKeys: MetadataKey[] = [];\n\n /**\n * A list of part metadata keys that will be made available to each row. This\n * metadata can be used for data binding inside the scene tree's template.\n *\n * **Note:** for the values of these metadata keys to be evaluated for search,\n * they must be provided to the `metadataSearchKeys` specified in the `searchOptions`.\n * Otherwise, the search will only be performed against the item name.\n */\n @Prop()\n public metadataKeys: MetadataKey[] = [];\n\n /**\n * The duration of operations with animations, in milliseconds, when a user performs\n * an action that results in an animation such as isolate. Defaults to 500ms.\n */\n @Prop()\n public operationAnimationDuration = 500;\n\n /**\n * An event that is emitted when this <vertex-scene-tree> encounters a connection\n * error.\n */\n @Event()\n public connectionError!: EventEmitter<SceneTreeErrorDetails>;\n\n /**\n * An event that is emitted when the first row of this <vertex-scene-tree> has\n * been rendered.\n */\n @Event()\n public firstRowRendered!: EventEmitter<void>;\n\n @State()\n private rows: Row[] = [];\n\n @State()\n private totalRows = 0;\n\n @State()\n private showLoader = false;\n\n @State()\n private showEmptyResults = false;\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 componentLoaded: false,\n };\n\n @State()\n private errorDetails: SceneTreeErrorDetails | undefined;\n\n @State()\n private hasPartialFilterResults = false;\n\n @State()\n private refreshingResults = false;\n\n @State()\n private attemptingRetry = false;\n\n @Element()\n private el!: HTMLElement;\n\n private lastSelectedItemId?: string;\n private firstCellRendered = false;\n\n /**\n * Schedules a render of the rows in the scene tree. Useful if any custom\n * data in your scene tree has changed, and you want to update the row's\n * contents.\n *\n * **Note:** This is an asynchronous operation. The update may happen on the\n * next frame.\n */\n @Method()\n public async invalidateRows(): Promise<void> {\n forceUpdate(this.getLayoutElement());\n }\n\n /**\n * Scrolls the tree to the given row index.\n *\n * @param index An index of the row to scroll to.\n * @param options A set of options to configure the scrolling behavior.\n */\n @Method()\n public async scrollToIndex(\n index: number,\n options: ScrollToOptions = {}\n ): Promise<void> {\n const { animate, position = 'middle' } = options;\n const i = Math.max(0, Math.min(index, this.totalRows));\n\n const top = this.getScrollToPosition(i, position);\n\n await this.getLayoutElement().scrollToPosition(top, {\n behavior: animate ? 'smooth' : undefined,\n });\n }\n\n /**\n * Scrolls the tree to an item with the given ID. If the node for the item is\n * not expanded, the tree will expand each of its parent nodes.\n *\n * @param itemId An ID of an item to scroll to.\n * @param options A set of options to configure the scrolling behavior.\n * @returns A promise that resolves when the operation is finished.\n */\n @Method()\n public async scrollToItem(\n itemId: string,\n options: ScrollToOptions = {}\n ): Promise<void> {\n const rowsBeforeExpand = this.totalRows;\n const index = await this.controller?.expandParentNodes(itemId);\n\n if (index != null && rowsBeforeExpand !== this.totalRows) {\n return new Promise((resolve) => {\n const layoutEl = this.getLayoutElement();\n const handleLayoutRendered = async (): Promise<void> => {\n layoutEl.removeEventListener('layoutRendered', handleLayoutRendered);\n await this.scrollToIndex(index, options);\n resolve();\n };\n\n layoutEl.addEventListener('layoutRendered', handleLayoutRendered);\n });\n } else if (index != null) {\n await this.scrollToIndex(index, options);\n }\n }\n\n /**\n * Performs an API call to expand all nodes in the tree.\n */\n @Method()\n public async expandAll(): Promise<void> {\n await this.controller?.expandAll();\n }\n\n /**\n * Performs an API call to collapse all nodes in the tree.\n */\n @Method()\n public async collapseAll(): Promise<void> {\n await this.controller?.collapseAll();\n }\n\n /**\n * Performs an API call that will expand the node associated to the specified\n * row or row index.\n *\n * @param row A row, row index, or node to expand.\n */\n @Method()\n public async expandItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ id, node }) => {\n if (!node.expanded) {\n await this.controller?.expandNode(id);\n }\n });\n }\n\n /**\n * Performs an API call that will collapse the node associated to the\n * specified row or row index.\n *\n * @param row A row, row index, or node to collapse.\n */\n @Method()\n public async collapseItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ id, node }) => {\n if (node.expanded) {\n await this.controller?.collapseNode(id);\n }\n });\n }\n\n /**\n * Performs an API call that will either expand or collapse the node\n * associated to the given row or row index.\n *\n * @param row The row, row index, or node to collapse or expand.\n */\n @Method()\n public async toggleExpandItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ node }) => {\n if (node.expanded) {\n await this.collapseItem(node);\n } else {\n await this.expandItem(node);\n }\n });\n }\n\n /**\n * Performs an API call that will either hide or show the item associated to\n * the given row or row index.\n *\n * @param row The row, row index, or node to toggle visibility.\n */\n @Method()\n public async toggleItemVisibility(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id, node }) => {\n if (node.visible || node.partiallyVisible) {\n await hideItem(viewer, id);\n } else {\n await showItem(viewer, id);\n }\n });\n }\n\n /**\n * Performs an API call that will hide the item associated to the given row\n * or row index.\n *\n * @param row The row, row index, or node to hide.\n */\n @Method()\n public async hideItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id, node }) => {\n if (node.visible) {\n await hideItem(viewer, id);\n }\n });\n }\n\n /**\n * Performs an API call that will show the item associated to the given row\n * or row index.\n *\n * @param row The row, row index, or node to show.\n */\n @Method()\n public async showItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id, node }) => {\n if (!node.visible) {\n await showItem(viewer, id);\n }\n });\n }\n\n /**\n * Performs an API call that will select the item associated to the given row\n * or row index.\n *\n * This method supports a `recurseParent` option that allows for recursively\n * selecting the next unselected parent node. This behavior is considered\n * stateful. Each call to `selectItem` will track the ancestry of the passed\n * in `rowArg`. If calling `selectItem` with a row not belonging to the\n * ancestry of a previous selection, then this method will perform a standard\n * selection.\n *\n * @param row The row, row index or node to select.\n * @param options A set of options to configure selection behavior.\n */\n @Method()\n public async selectItem(\n row: RowArg,\n { recurseParent, ...options }: SelectItemOptions = {}\n ): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id }) => {\n const ancestors = (await this.controller?.fetchNodeAncestors(id)) || [];\n\n // The parent node should be selected if recurseParent is true and either\n // the given node is in the selection path (so was intentionally selected by clicking in the tree)\n // or if the given node is selected, but its immediate parent is not. The second case covers the\n // situation that the given node was selected as part of a previous ancestor selection and the\n // user wishes to clear the selection list and only select the given node.\n const isInPath = this.stateMap.selectionPath?.includes(id);\n\n const nodeForRow = this.getNodeFromRowOrIndex(row);\n const immediateParentNodeIsSelected =\n ancestors.length > 0 ? ancestors[0].selected : true;\n const nodeIsSelectedAndParentIsUnselected =\n nodeForRow.selected && !immediateParentNodeIsSelected;\n\n if (recurseParent && (isInPath || nodeIsSelectedAndParentIsUnselected)) {\n const nextNode = ancestors.find(({ selected }) => !selected);\n if (nextNode != null) {\n await this.selectItem(nextNode, options);\n this.lastSelectedItemId = id;\n } else {\n await selectItem(viewer, id, options);\n this.lastSelectedItemId = id;\n }\n } else if (options.range && this.lastSelectedItemId != null) {\n const currentRowIndex = await this.controller?.expandParentNodes(id);\n const previouslySelectedIndex =\n await this.controller?.expandParentNodes(this.lastSelectedItemId);\n\n if (previouslySelectedIndex && currentRowIndex) {\n const start = Math.min(previouslySelectedIndex, currentRowIndex);\n const end = Math.max(previouslySelectedIndex, currentRowIndex);\n await selectRangeInSceneTree(viewer, start, end, options);\n }\n } else {\n await selectItem(viewer, id, options);\n this.lastSelectedItemId = id;\n }\n\n this.stateMap.selectionPath = [\n ...ancestors.map(({ id }) => id?.hex || ''),\n id,\n ];\n });\n }\n\n /**\n * Performs an API call that will deselect the item associated to the given\n * row or row index.\n *\n * @param row The row, row index, or node to deselect.\n */\n @Method()\n public async deselectItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id, node }) => {\n if (node.selected) {\n this.lastSelectedItemId = undefined;\n await deselectItem(viewer, id);\n }\n });\n }\n\n /**\n * Performs an API call that will show only the item associated to\n * the given row or row index and fit the camera to the item's bounding box.\n *\n * @param row The row, row index, or node to isolate.\n */\n @Method()\n public async isolateItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id }) => {\n await isolateItem(viewer, id, {\n animationDurationMs: this.operationAnimationDuration,\n });\n });\n }\n\n /**\n * Returns a row at the given index. If the row data has not been loaded,\n * returns `undefined`.\n *\n * @param index The index of the row.\n * @returns A row, or `undefined` if the row hasn't been loaded.\n */\n @Method()\n public async getRowAtIndex(index: number): Promise<Row> {\n return this.rows[index];\n }\n\n /**\n * Returns the row with the given id. If there is not a row\n * matching the id, returns `undefined`.\n *\n * @param itemId An ID of an item to return the row for.\n * @returns A row, or `undefined` if a corresponding row doesn't exist\n */\n @Method()\n public async getRowForItemId(itemId: string): Promise<Row | undefined> {\n const index = await this.controller?.expandParentNodes(itemId);\n if (index != null) {\n return this.rows[index];\n } else {\n return undefined;\n }\n }\n\n /**\n * Returns the row data from the given mouse or pointer event. The event must\n * originate from a `vertex-scene-tree-table-cell` contained by this element,\n * otherwise `undefined` is returned.\n *\n * @param event A mouse or pointer event that originated from this component.\n * @returns A row, or `undefined` if the row hasn't been loaded.\n */\n @Method()\n public async getRowForEvent(event: MouseEvent | PointerEvent): Promise<Row> {\n const { clientY, target } = event;\n\n if (\n target != null &&\n this.errorDetails == null &&\n getSceneTreeContainsElement(this.el, target as HTMLElement) &&\n isSceneTreeTableCellElement(target)\n ) {\n return this.getRowAtClientY(clientY);\n } else {\n return undefined;\n }\n }\n\n /**\n * Returns the row data from the given vertical client position.\n *\n * @param clientY The vertical client position.\n * @returns A row or `undefined` if the row hasn't been loaded.\n */\n @Method()\n public getRowAtClientY(clientY: number): Promise<Row> {\n const layoutEl = this.getLayoutElement();\n const top = layoutEl.layoutOffset;\n const index = Math.floor(\n (clientY - top + layoutEl.scrollOffset) / layoutEl.rowHeight\n );\n return this.getRowAtIndex(index);\n }\n\n /**\n * Performs an async request that will filter the displayed items in the tree\n * that match the given term and options.\n *\n * @param term The filter term.\n * @param options The options to apply to the filter.\n * @returns A promise that completes when the request has completed. Note,\n * items are displayed asynchronously. So the displayed items may not reflect\n * the result of this filter when the promise completes.\n */\n @Method()\n public async filterItems(\n term: string,\n options: FilterTreeOptions = {}\n ): Promise<void> {\n const optionsAsFilterOptions: FilterOptions = {\n ...options,\n metadataSearchKeys: options.columns,\n };\n const columnsToSearch = this.getMetadataSearchKeys(optionsAsFilterOptions);\n\n return this.controller?.filter(term, {\n ...options,\n columns: columnsToSearch,\n });\n }\n\n /**\n * Performs an async request that will select the filtered items in the tree\n * that match the given term.\n *\n * @param term The filter term.\n * @returns A promise that completes when the request has completed.\n */\n @Method()\n public async selectFilteredItems(\n term: string,\n options?: SceneTreeOperationOptions\n ): Promise<void> {\n if (this.viewer != null) {\n const metadataSearchKeys =\n this.searchOptions?.metadataSearchKeys ?? this.metadataSearchKeys;\n const definedMetadataKeys =\n metadataSearchKeys.length > 0 ? metadataSearchKeys : this.metadataKeys;\n\n const columnsToSearch =\n definedMetadataKeys.length > 0\n ? definedMetadataKeys\n : ['VERTEX_SCENE_ITEM_NAME'];\n\n const shouldSearchExactMatch =\n this.searchOptions?.exactMatch ?? this.metadataSearchExactMatch;\n const shouldSearchRemoveHiddenItems =\n this.searchOptions?.removeHiddenItems ?? false;\n\n await selectFilterResults(\n this.viewer,\n term,\n columnsToSearch,\n shouldSearchExactMatch,\n shouldSearchRemoveHiddenItems,\n {\n append: false,\n ...options,\n }\n );\n }\n }\n\n /**\n * Fetches the metadata keys that are available to the scene tree. Metadata\n * keys can be assigned to the scene tree using the `metadataKeys` property.\n * The scene tree will fetch this metadata and make these values available\n * for data binding.\n *\n * @returns A promise that resolves with the names of available keys.\n */\n @Method()\n public async fetchMetadataKeys(): Promise<MetadataKey[]> {\n return this.controller?.fetchMetadataKeys() ?? [];\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.stateMap.viewerDisposable?.dispose();\n this.stateMap.viewerSceneReadyDisposable?.dispose();\n this.controller?.cancel();\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.connectToViewer();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n if (this.controller == null) {\n const { sceneTreeHost } = this.getConfig().network;\n const client = new SceneTreeAPIClient(\n sceneTreeHost,\n this.getConfig().flags.grpcUseStreamingWebSocketTransport\n ? {\n transport: webSocketSubscriptionTransportFactory,\n }\n : undefined\n );\n this.controller = new SceneTreeController(client, 100);\n this.controller?.setMetadataKeys(this.metadataKeys);\n }\n\n this.stateMap.onStateChangeDisposable = this.controller.onStateChange.on(\n (state) => this.handleControllerStateChange(state)\n );\n\n this.connectToViewer();\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n this.ensureLayoutDefined();\n this.updateLayoutElement();\n\n const layoutEl = this.getLayoutElement();\n const resizeObserver = new ResizeObserver(() => {\n this.invalidateRows();\n });\n resizeObserver.observe(layoutEl);\n this.stateMap.resizeObserver = resizeObserver;\n\n this.stateMap.componentLoaded = true;\n\n this.controller?.setMetadataKeys(this.metadataKeys);\n\n if (this.viewer == null) {\n this.errorDetails = new SceneTreeErrorDetails(\n 'MISSING_VIEWER',\n SceneTreeErrorCode.MISSING_VIEWER\n );\n }\n }\n\n public componentWillRender(): void {\n // The controller can load data prior to the first render\n // ensure that this renders any time the state changes.\n this.updateLayoutElement();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"header\">\n <slot name=\"header\">\n <vertex-scene-tree-toolbar class=\"search-toolbar\">\n <vertex-scene-tree-search controller={this.controller} />\n </vertex-scene-tree-toolbar>\n </slot>\n </div>\n\n <slot name=\"partial-filter-results-banner\">\n {this.hasPartialFilterResults && (\n <vertex-scene-tree-notification-banner\n message={\n this.refreshingResults\n ? 'Refreshing results...'\n : 'Data loading, refresh for more.'\n }\n actionLabel=\"Refresh\"\n onAction={() => this.controller?.refreshFilter()}\n />\n )}\n </slot>\n\n {this.errorDetails != null && this.renderError(this.errorDetails)}\n\n {this.errorDetails == null && (\n <div class=\"rows-scroll\">\n {this.showLoader && (\n <slot name=\"loading\">\n <vertex-viewer-spinner class=\"loading\" size=\"md\" />\n </slot>\n )}\n <slot />\n {this.showEmptyResults && (\n <slot name=\"empty-results\">\n <div class=\"empty-results\">No Results Found.</div>\n </slot>\n )}\n </div>\n )}\n\n <div class=\"footer\">\n <slot name=\"footer\" />\n </div>\n </Host>\n );\n }\n\n private renderError(details: SceneTreeErrorDetails): h.JSX.IntrinsicElements {\n if (details.code !== SceneTreeErrorCode.SCENE_TREE_DISABLED) {\n return (\n <SceneTreeError details={details}>\n <button\n class=\"button button-secondary\"\n onClick={() => this.retryConnectToViewer()}\n disabled={this.attemptingRetry}\n >\n Retry\n </button>\n </SceneTreeError>\n );\n } else {\n return <SceneTreeError details={details} />;\n }\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer: HTMLVertexViewerElement | undefined,\n oldViewer: HTMLVertexViewerElement | undefined\n ): void {\n // StencilJS will invoke this callback even before the component has been\n // loaded. According to their docs, this shouldn't happen. Return if the\n // component hasn't been loaded.\n // See https://stenciljs.com/docs/reactive-data#watch-decorator\n if (!this.stateMap.componentLoaded) {\n return;\n }\n\n this.connectToViewer();\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChanged(newController: SceneTreeController): void {\n // StencilJS will invoke this callback even before the component has been\n // loaded. According to their docs, this shouldn't happen. Return if the\n // component hasn't been loaded.\n // See https://stenciljs.com/docs/reactive-data#watch-decorator\n if (!this.stateMap.componentLoaded) {\n return;\n }\n\n this.stateMap.onStateChangeDisposable?.dispose();\n\n this.stateMap.onStateChangeDisposable = newController.onStateChange.on(\n (state) => this.handleControllerStateChange(state)\n );\n\n newController.setMetadataKeys(this.metadataKeys);\n }\n\n /**\n * @ignore\n */\n @Watch('metadataKeys')\n protected handleMetadataKeysChanged(): void {\n this.controller?.setMetadataKeys(this.metadataKeys);\n }\n\n private retryConnectToViewer(): void {\n this.attemptingRetry = true;\n this.errorDetails = undefined;\n this.connectToViewer();\n }\n\n private connectToViewer(): void {\n this.stateMap.viewerDisposable?.dispose();\n this.stateMap.viewerSceneReadyDisposable?.dispose();\n\n if (this.viewer == null && this.viewerSelector != null) {\n this.viewer = document.querySelector(this.viewerSelector) as\n | HTMLVertexViewerElement\n | undefined;\n }\n\n if (this.viewer != null) {\n const handleSceneReady = async (): Promise<void> => {\n const layoutEl = this.getLayoutElement();\n\n await layoutEl.attemptComputeCellHeight();\n };\n\n this.viewer.addEventListener('sceneReady', handleSceneReady);\n this.stateMap.viewerDisposable = this.controller?.connectToViewer(\n this.viewer\n );\n this.stateMap.viewerSceneReadyDisposable = {\n dispose: () =>\n this.viewer?.removeEventListener('sceneReady', handleSceneReady),\n };\n } else {\n this.attemptingRetry = false;\n }\n }\n\n private scheduleClearUnusedData(): void {\n if (this.stateMap.idleCallbackId != null) {\n window.cancelIdleCallback(this.stateMap.idleCallbackId);\n }\n\n this.stateMap.idleCallbackId = window.requestIdleCallback((foo) => {\n const remaining = foo.timeRemaining?.();\n\n if (remaining == null || remaining >= MIN_CLEAR_UNUSED_DATA_MS) {\n const layoutEl = this.getLayoutElement();\n const startIndex = layoutEl.viewportStartIndex;\n const endIndex = layoutEl.viewportEndIndex;\n const [start, end] =\n this.controller?.getPageIndexesForRange(startIndex, endIndex) || [];\n\n if (start != null && end != null) {\n this.controller?.invalidatePagesOutsideRange(start, end, 50);\n }\n } else {\n this.scheduleClearUnusedData();\n }\n });\n }\n\n private handleControllerStateChange(state: SceneTreeState): void {\n this.showLoader = !!state.shouldShowLoading;\n this.showEmptyResults = !!state.shouldShowEmptyResults;\n this.rows = state.rows;\n this.totalRows = state.totalRows;\n this.hasPartialFilterResults = !!state.isPartialFilterResponse;\n this.refreshingResults = !!state.isSearching;\n\n if (state.connection.type === 'failure') {\n this.errorDetails = state.connection.details;\n this.connectionError.emit(state.connection.details);\n } else if (state.connection.type === 'disconnected') {\n this.errorDetails = new SceneTreeErrorDetails(\n 'DISCONNECTED',\n SceneTreeErrorCode.DISCONNECTED\n );\n } else {\n this.errorDetails = undefined;\n }\n\n if (\n state.connection.type === 'connected' ||\n state.connection.type === 'failure'\n ) {\n this.attemptingRetry = false;\n }\n }\n\n private getNodeFromRowOrIndex(\n rowOrIndex: number | Row | Node.AsObject\n ): Node.AsObject {\n const row =\n typeof rowOrIndex === 'number' ? this.rows[rowOrIndex] : rowOrIndex;\n\n if (row == null) {\n throw new Error(`Cannot perform scene tree operation. Row not found.`);\n }\n\n return isLoadedRow(row) ? row.node : row;\n }\n\n private async performRowOperation(\n rowOrIndex: number | Row | Node.AsObject,\n op: OperationHandler\n ): Promise<void> {\n const node = this.getNodeFromRowOrIndex(rowOrIndex);\n\n if (node.id == null) {\n throw new Error(`Cannot perform scene tree operation. ID is undefined.`);\n }\n\n if (this.viewer == null) {\n throw new Error(\n `Cannot perform scene tree operation. Cannot get reference to viewer.`\n );\n }\n\n await op({ viewer: this.viewer, id: node.id.hex, node });\n }\n\n @Listen('search')\n protected async handleSearch(event: CustomEvent<string>): Promise<void> {\n const columnsToSearch = this.getMetadataSearchKeys(this.searchOptions);\n\n const shouldSearchExactMatch =\n this.searchOptions?.exactMatch ?? this.metadataSearchExactMatch;\n const shouldSearchRemoveHiddenItems =\n this.searchOptions?.removeHiddenItems ?? false;\n\n try {\n await this.filterItems(event.detail, {\n columns: columnsToSearch,\n exactMatch: shouldSearchExactMatch,\n removeHiddenItems: shouldSearchRemoveHiddenItems,\n });\n } catch (e) {\n console.error('Failed to filter tree with exception: ', e);\n }\n }\n\n @Listen('cellLoaded')\n protected async handleCellLoaded(): Promise<void> {\n if (!this.firstCellRendered && this.rows.length > 0) {\n this.firstCellRendered = true;\n this.firstRowRendered.emit();\n }\n }\n\n private getScrollToPosition(\n index: number,\n position: ScrollToOptions['position']\n ): number {\n const layoutEl = this.getLayoutElement();\n const constrainedIndex = Math.max(0, Math.min(index, this.totalRows - 1));\n const viewportHeight = layoutEl.layoutHeight ?? 0;\n const rowHeight = layoutEl.rowHeight;\n\n if (position === 'start') {\n return constrainedIndex * rowHeight;\n } else if (position === 'middle') {\n const rowCenterY = constrainedIndex * rowHeight + rowHeight / 2;\n return rowCenterY - viewportHeight / 2;\n } else {\n const rowBottomY = constrainedIndex * rowHeight + rowHeight;\n return rowBottomY - viewportHeight;\n }\n }\n\n private getConfig(): Config {\n return parseAndValidateConfig(this.configEnv, this.config);\n }\n\n private ensureLayoutDefined(): void {\n let layout = this.el.querySelector('vertex-scene-tree-table-layout');\n if (layout == null) {\n layout = document.createElement('vertex-scene-tree-table-layout');\n layout.innerHTML = `\n <vertex-scene-tree-table-column>\n <template>\n <vertex-scene-tree-table-cell prop:value=\"{{row.node.name}}\" expand-toggle isolate-button visibility-toggle></vertex-scene-tree-table-cell>\n </template>\n </vertex-scene-tree-table-column>\n `;\n\n this.el.appendChild(layout);\n }\n this.stateMap.layoutEl = layout;\n }\n\n private updateLayoutElement(): void {\n const layout = this.stateMap.layoutEl;\n if (layout != null) {\n layout.rows = this.rows;\n layout.tree = this.el as HTMLVertexSceneTreeElement;\n layout.totalRows = this.totalRows;\n layout.controller = this.controller;\n layout.rowData = this.rowData;\n } else if (!this.stateMap.componentLoaded && this.totalRows > 0) {\n console.debug(\n 'Scene tree has rows, but the component has not yet rendered'\n );\n }\n }\n\n private getLayoutElement(): HTMLVertexSceneTreeTableLayoutElement {\n if (this.stateMap.layoutEl != null) {\n return this.stateMap.layoutEl;\n } else {\n throw new Error('Layout element is undefined');\n }\n }\n\n private getMetadataSearchKeys(options: FilterOptions): string[] | undefined {\n const metadataSearchKeys =\n options?.metadataSearchKeys ?? this.metadataSearchKeys;\n const shouldSearchExactMatch =\n options?.exactMatch ?? this.metadataSearchExactMatch;\n\n if (shouldSearchExactMatch) {\n // If we're performing an exact match search, we want to include the searched\n // metadata keys if provided. In the case that none have been provided, simply\n // fall back the item name.\n const definedMetadataKeys =\n metadataSearchKeys.length > 0\n ? metadataSearchKeys\n : [SCENE_ITEM_NAME_METADATA_KEY];\n\n return definedMetadataKeys;\n } else if (metadataSearchKeys.length > 0) {\n // If we're not performing an exact match search, and a set of metadata keys\n // to search against have been provided, we want to include those in the request.\n return metadataSearchKeys;\n }\n\n // If we're not performing an exact match search, and we have no provided metadata\n // search keys, we can perform a name-only search, and omit the array of keys.\n return undefined;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"scene-tree.js","sourceRoot":"","sources":["../../../../../src/components/scene-tree/scene-tree.tsx"],"names":[],"mappings":";AAAA,OAAO,8BAA8B,CAAC;AAEtC,OAAO,EACL,SAAS,EACT,OAAO,EACP,KAAK,EAEL,WAAW,EACX,CAAC,EACD,IAAI,EACJ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EACL,KAAK,GACN,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAG7G,OAAO,EAEL,sBAAsB,GAEvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAEL,mBAAmB,GAEpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,qCAAqC,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,WAAW,EAAO,MAAM,WAAW,CAAC;AAC7C,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,UAAU,EACV,sBAAsB,EACtB,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAKL,4BAA4B,GAI7B,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,MAAM,wBAAwB,GAAG,EAAE,CAAC;AA6BpC;;;;;;GAMG;AAMH,MAAM,OAAO,SAAS;EALtB;IAME;;;;OAIG;IAEI,kBAAa,GAAG,EAAE,CAAC;IAmD1B;;;;;OAKG;IAEI,cAAS,GAAgB,UAAU,CAAC;IAK3C;;OAEG;IAEI,kBAAa,GAAkB,EAAE,CAAC;IAEzC;;;OAGG;IAEI,6BAAwB,GAAG,KAAK,CAAC;IAExC;;;OAGG;IAEI,uBAAkB,GAAkB,EAAE,CAAC;IAE9C;;;;;;;OAOG;IAEI,iBAAY,GAAkB,EAAE,CAAC;IAExC;;;OAGG;IAEI,+BAA0B,GAAG,GAAG,CAAC;IAiBhC,SAAI,GAAU,EAAE,CAAC;IAGjB,cAAS,GAAG,CAAC,CAAC;IAGd,eAAU,GAAG,KAAK,CAAC;IAGnB,qBAAgB,GAAG,KAAK,CAAC;IAEjC;;;;OAIG;IAEK,aAAQ,GAAa;MAC3B,eAAe,EAAE,KAAK;KACvB,CAAC;IAMM,4BAAuB,GAAG,KAAK,CAAC;IAGhC,sBAAiB,GAAG,KAAK,CAAC;IAG1B,oBAAe,GAAG,KAAK,CAAC;IAMxB,sBAAiB,GAAG,KAAK,CAAC;GAy1BnC;EAv1BC;;;;;;;KAOG;EAEI,KAAK,CAAC,cAAc;IACzB,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;EACvC,CAAC;EAED;;;;;KAKG;EAEI,KAAK,CAAC,aAAa,CACxB,KAAa,EACb,UAA2B,EAAE;IAE7B,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC;IACjD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAEvD,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAElD,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE;MAClD,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KACzC,CAAC,CAAC;EACL,CAAC;EAED;;;;;;;KAOG;EAEI,KAAK,CAAC,YAAY,CACvB,MAAc,EACd,UAA2B,EAAE;;IAE7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA,CAAC;IAE/D,IAAI,KAAK,IAAI,IAAI,IAAI,gBAAgB,KAAK,IAAI,CAAC,SAAS,EAAE;MACxD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,oBAAoB,GAAG,KAAK,IAAmB,EAAE;UACrD,QAAQ,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;UACrE,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;UACzC,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;MACpE,CAAC,CAAC,CAAC;KACJ;SAAM,IAAI,KAAK,IAAI,IAAI,EAAE;MACxB,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KAC1C;EACH,CAAC;EAED;;KAEG;EAEI,KAAK,CAAC,SAAS;;IACpB,MAAM,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,SAAS,EAAE,CAAA,CAAC;EACrC,CAAC;EAED;;KAEG;EAEI,KAAK,CAAC,WAAW;;IACtB,MAAM,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,EAAE,CAAA,CAAC;EACvC,CAAC;EAED;;;;;KAKG;EAEI,KAAK,CAAC,UAAU,CAAC,GAAW;IACjC,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;;MACzD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QAClB,MAAM,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,UAAU,CAAC,EAAE,CAAC,CAAA,CAAC;OACvC;IACH,CAAC,CAAC,CAAC;EACL,CAAC;EAED;;;;;KAKG;EAEI,KAAK,CAAC,YAAY,CAAC,GAAW;IACnC,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;;MACzD,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,MAAM,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,YAAY,CAAC,EAAE,CAAC,CAAA,CAAC;OACzC;IACH,CAAC,CAAC,CAAC;EACL,CAAC;EAED;;;;;KAKG;EAEI,KAAK,CAAC,gBAAgB,CAAC,GAAW;IACvC,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;MACrD,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;OAC/B;WAAM;QACL,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;OAC7B;IACH,CAAC,CAAC,CAAC;EACL,CAAC;EAED;;;;;KAKG;EAEI,KAAK,CAAC,oBAAoB,CAAC,GAAW;IAC3C,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;MACjE,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,gBAAgB,EAAE;QACzC,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;OAC5B;WAAM;QACL,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;OAC5B;IACH,CAAC,CAAC,CAAC;EACL,CAAC;EAED;;;;;KAKG;EAEI,KAAK,CAAC,QAAQ,CAAC,GAAW;IAC/B,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;MACjE,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;OAC5B;IACH,CAAC,CAAC,CAAC;EACL,CAAC;EAED;;;;;KAKG;EAEI,KAAK,CAAC,QAAQ,CAAC,GAAW;IAC/B,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;MACjE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;QACjB,MAAM,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;OAC5B;IACH,CAAC,CAAC,CAAC;EACL,CAAC;EAED;;;;;;;;;;;;;KAaG;EAEI,KAAK,CAAC,UAAU,CACrB,GAAW,EACX,KAAmD,EAAE;QAArD,EAAE,aAAa,OAAsC,EAAjC,OAAO,cAA3B,iBAA6B,CAAF;IAE3B,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE;;MAC3D,MAAM,SAAS,GAAG,CAAC,MAAM,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,kBAAkB,CAAC,EAAE,CAAC,CAAA,CAAC,IAAI,EAAE,CAAC;MAExE,yEAAyE;MACzE,kGAAkG;MAClG,gGAAgG;MAChG,8FAA8F;MAC9F,0EAA0E;MAC1E,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,0CAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;MAE3D,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;MACnD,MAAM,6BAA6B,GACjC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;MACtD,MAAM,mCAAmC,GACvC,UAAU,CAAC,QAAQ,IAAI,CAAC,6BAA6B,CAAC;MAExD,IAAI,aAAa,IAAI,CAAC,QAAQ,IAAI,mCAAmC,CAAC,EAAE;QACtE,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7D,IAAI,QAAQ,IAAI,IAAI,EAAE;UACpB,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;UACzC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;SAC9B;aAAM;UACL,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;UACtC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;SAC9B;OACF;WAAM,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE;QAC3D,MAAM,eAAe,GAAG,MAAM,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,iBAAiB,CAAC,EAAE,CAAC,CAAA,CAAC;QACrE,MAAM,uBAAuB,GAC3B,MAAM,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA,CAAC;QAEpE,IAAI,uBAAuB,IAAI,eAAe,EAAE;UAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,eAAe,CAAC,CAAC;UACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,eAAe,CAAC,CAAC;UAC/D,MAAM,sBAAsB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;SAC3D;OACF;WAAM;QACL,MAAM,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;OAC9B;MAED,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG;QAC5B,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,GAAG,KAAI,EAAE,CAAC;QAC3C,EAAE;OACH,CAAC;IACJ,CAAC,CAAC,CAAC;EACL,CAAC;EAED;;;;;KAKG;EAEI,KAAK,CAAC,YAAY,CAAC,GAAW;IACnC,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;MACjE,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACpC,MAAM,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;OAChC;IACH,CAAC,CAAC,CAAC;EACL,CAAC;EAED;;;;;KAKG;EAEI,KAAK,CAAC,WAAW,CAAC,GAAW;IAClC,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE;MAC3D,MAAM,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE;QAC5B,mBAAmB,EAAE,IAAI,CAAC,0BAA0B;OACrD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;EACL,CAAC;EAED;;;;;;KAMG;EAEI,KAAK,CAAC,aAAa,CAAC,KAAa;IACtC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC1B,CAAC;EAED;;;;;;KAMG;EAEI,KAAK,CAAC,eAAe,CAAC,MAAc;;IACzC,MAAM,KAAK,GAAG,MAAM,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA,CAAC;IAC/D,IAAI,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzB;SAAM;MACL,OAAO,SAAS,CAAC;KAClB;EACH,CAAC;EAED;;;;;;;KAOG;EAEI,KAAK,CAAC,cAAc,CAAC,KAAgC;IAC1D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAElC,IACE,MAAM,IAAI,IAAI;MACd,IAAI,CAAC,YAAY,IAAI,IAAI;MACzB,2BAA2B,CAAC,IAAI,CAAC,EAAE,EAAE,MAAqB,CAAC;MAC3D,2BAA2B,CAAC,MAAM,CAAC,EACnC;MACA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;KACtC;SAAM;MACL,OAAO,SAAS,CAAC;KAClB;EACH,CAAC;EAED;;;;;KAKG;EAEI,eAAe,CAAC,OAAe;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CACtB,CAAC,OAAO,GAAG,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,SAAS,CAC7D,CAAC;IACF,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;EACnC,CAAC;EAED;;;;;;;;;KASG;EAEI,KAAK,CAAC,WAAW,CACtB,IAAY,EACZ,UAA6B,EAAE;;IAE/B,MAAM,sBAAsB,mCACvB,OAAO,KACV,kBAAkB,EAAE,OAAO,CAAC,OAAO,GACpC,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;IAE3E,OAAO,MAAA,IAAI,CAAC,UAAU,0CAAE,MAAM,CAAC,IAAI,kCAC9B,OAAO,KACV,OAAO,EAAE,eAAe,IACxB,CAAC;EACL,CAAC;EAED;;;;;;KAMG;EAEI,KAAK,CAAC,mBAAmB,CAC9B,IAAY,EACZ,OAAmC;;IAEnC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;MACvB,MAAM,kBAAkB,GACtB,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,kBAAkB,mCAAI,IAAI,CAAC,kBAAkB,CAAC;MACpE,MAAM,mBAAmB,GACvB,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;MAEzE,MAAM,eAAe,GACnB,mBAAmB,CAAC,MAAM,GAAG,CAAC;QAC5B,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC;MAEjC,MAAM,sBAAsB,GAC1B,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,UAAU,mCAAI,IAAI,CAAC,wBAAwB,CAAC;MAClE,MAAM,6BAA6B,GACjC,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,iBAAiB,mCAAI,KAAK,CAAC;MAEjD,MAAM,mBAAmB,CACvB,IAAI,CAAC,MAAM,EACX,IAAI,EACJ,eAAe,EACf,sBAAsB,EACtB,6BAA6B,kBAE3B,MAAM,EAAE,KAAK,IACV,OAAO,EAEb,CAAC;KACH;EACH,CAAC;EAED;;;;;;;KAOG;EAEI,KAAK,CAAC,iBAAiB;;IAC5B,OAAO,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,iBAAiB,EAAE,mCAAI,EAAE,CAAC;EACpD,CAAC;EAED;;KAEG;EACO,oBAAoB;;IAC5B,MAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,0CAAE,OAAO,EAAE,CAAC;IAC1C,MAAA,IAAI,CAAC,QAAQ,CAAC,0BAA0B,0CAAE,OAAO,EAAE,CAAC;IACpD,MAAA,IAAI,CAAC,UAAU,0CAAE,MAAM,EAAE,CAAC;EAC5B,CAAC;EAED;;KAEG;EACO,iBAAiB;IACzB,IAAI,CAAC,eAAe,EAAE,CAAC;EACzB,CAAC;EAED;;KAEG;EACO,iBAAiB;;IACzB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;MAC3B,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC;MACnD,MAAM,MAAM,GAAG,IAAI,kBAAkB,CACnC,aAAa,EACb,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,kCAAkC;QACvD,CAAC,CAAC;UACE,SAAS,EAAE,qCAAqC;SACjD;QACH,CAAC,CAAC,SAAS,CACd,CAAC;MACF,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;MACvD,MAAA,IAAI,CAAC,UAAU,0CAAE,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACrD;IAED,IAAI,CAAC,QAAQ,CAAC,uBAAuB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CACtE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CACnD,CAAC;IAEF,IAAI,CAAC,eAAe,EAAE,CAAC;EACzB,CAAC;EAED;;KAEG;EACO,KAAK,CAAC,gBAAgB;;IAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;MAC7C,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;IAE9C,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC;IAErC,MAAA,IAAI,CAAC,UAAU,0CAAE,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAEpD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;MACvB,IAAI,CAAC,YAAY,GAAG,IAAI,qBAAqB,CAC3C,gBAAgB,EAChB,kBAAkB,CAAC,cAAc,CAClC,CAAC;KACH;EACH,CAAC;EAEM,mBAAmB;IACxB,yDAAyD;IACzD,uDAAuD;IACvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;EAC7B,CAAC;EAED;;KAEG;EACO,MAAM;IACd,OAAO,CACL,EAAC,IAAI;MACH,WAAK,KAAK,EAAC,QAAQ;QACjB,YAAM,IAAI,EAAC,QAAQ;UACjB,iCAA2B,KAAK,EAAC,gBAAgB;YAC/C,gCAA0B,UAAU,EAAE,IAAI,CAAC,UAAU,GAAI,CAC/B,CACvB,CACH;MAEN,YAAM,IAAI,EAAC,+BAA+B,IACvC,IAAI,CAAC,uBAAuB,IAAI,CAC/B,6CACE,OAAO,EACL,IAAI,CAAC,iBAAiB;UACpB,CAAC,CAAC,uBAAuB;UACzB,CAAC,CAAC,iCAAiC,EAEvC,WAAW,EAAC,SAAS,EACrB,QAAQ,EAAE,GAAG,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,aAAa,EAAE,CAAA,EAAA,GAChD,CACH,CACI;MAEN,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;MAEhE,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,CAC5B,WAAK,KAAK,EAAC,aAAa;QACrB,IAAI,CAAC,UAAU,IAAI,CAClB,YAAM,IAAI,EAAC,SAAS;UAClB,6BAAuB,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,GAAG,CAC9C,CACR;QACD,eAAQ;QACP,IAAI,CAAC,gBAAgB,IAAI,CACxB,YAAM,IAAI,EAAC,eAAe;UACxB,WAAK,KAAK,EAAC,eAAe,wBAAwB,CAC7C,CACR,CACG,CACP;MAED,WAAK,KAAK,EAAC,QAAQ;QACjB,YAAM,IAAI,EAAC,QAAQ,GAAG,CAClB,CACD,CACR,CAAC;EACJ,CAAC;EAEO,WAAW,CAAC,OAA8B;IAChD,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,CAAC,mBAAmB,EAAE;MAC3D,OAAO,CACL,EAAC,cAAc,IAAC,OAAO,EAAE,OAAO;QAC9B,cACE,KAAK,EAAC,yBAAyB,EAC/B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAC1C,QAAQ,EAAE,IAAI,CAAC,eAAe,YAGvB,CACM,CAClB,CAAC;KACH;SAAM;MACL,OAAO,EAAC,cAAc,IAAC,OAAO,EAAE,OAAO,GAAI,CAAC;KAC7C;EACH,CAAC;EAED;;KAEG;EAEO,mBAAmB,CAC3B,SAA8C,EAC9C,SAA8C;IAE9C,yEAAyE;IACzE,wEAAwE;IACxE,gCAAgC;IAChC,+DAA+D;IAC/D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;MAClC,OAAO;KACR;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;EACzB,CAAC;EAED;;KAEG;EAEO,uBAAuB,CAAC,aAAkC;;IAClE,yEAAyE;IACzE,wEAAwE;IACxE,gCAAgC;IAChC,+DAA+D;IAC/D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;MAClC,OAAO;KACR;IAED,MAAA,IAAI,CAAC,QAAQ,CAAC,uBAAuB,0CAAE,OAAO,EAAE,CAAC;IAEjD,IAAI,CAAC,QAAQ,CAAC,uBAAuB,GAAG,aAAa,CAAC,aAAa,CAAC,EAAE,CACpE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CACnD,CAAC;IAEF,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;EACnD,CAAC;EAED;;KAEG;EAEO,yBAAyB;;IACjC,MAAA,IAAI,CAAC,UAAU,0CAAE,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;EACtD,CAAC;EAEO,oBAAoB;IAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,eAAe,EAAE,CAAC;EACzB,CAAC;EAEO,eAAe;;IACrB,MAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,0CAAE,OAAO,EAAE,CAAC;IAC1C,MAAA,IAAI,CAAC,QAAQ,CAAC,0BAA0B,0CAAE,OAAO,EAAE,CAAC;IAEpD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;MACtD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAE3C,CAAC;KACf;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;MACvB,MAAM,gBAAgB,GAAG,KAAK,IAAmB,EAAE;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEzC,MAAM,QAAQ,CAAC,wBAAwB,EAAE,CAAC;MAC5C,CAAC,CAAC;MAEF,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;MAC7D,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,eAAe,CAC/D,IAAI,CAAC,MAAM,CACZ,CAAC;MACF,IAAI,CAAC,QAAQ,CAAC,0BAA0B,GAAG;QACzC,OAAO,EAAE,GAAG,EAAE,WACZ,OAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,mBAAmB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAA,EAAA;OACnE,CAAC;KACH;SAAM;MACL,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;KAC9B;EACH,CAAC;EAEO,uBAAuB;IAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI,EAAE;MACxC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;KACzD;IAED,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,EAAE;;MAChE,MAAM,SAAS,GAAG,MAAA,GAAG,CAAC,aAAa,+CAAjB,GAAG,CAAkB,CAAC;MAExC,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,wBAAwB,EAAE;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,kBAAkB,CAAC;QAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAC3C,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAChB,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAI,EAAE,CAAC;QAEtE,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE;UAChC,MAAA,IAAI,CAAC,UAAU,0CAAE,2BAA2B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;SAC9D;OACF;WAAM;QACL,IAAI,CAAC,uBAAuB,EAAE,CAAC;OAChC;IACH,CAAC,CAAC,CAAC;EACL,CAAC;EAEO,2BAA2B,CAAC,KAAqB;IACvD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;IAC5C,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;IACvD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IACjC,IAAI,CAAC,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;IAC/D,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IAE7C,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;MACvC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;MAC7C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KACrD;SAAM,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE;MACnD,IAAI,CAAC,YAAY,GAAG,IAAI,qBAAqB,CAC3C,cAAc,EACd,kBAAkB,CAAC,YAAY,CAChC,CAAC;KACH;SAAM;MACL,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;KAC/B;IAED,IACE,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,WAAW;MACrC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,EACnC;MACA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;KAC9B;EACH,CAAC;EAEO,qBAAqB,CAC3B,UAAwC;IAExC,MAAM,GAAG,GACP,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAEtE,IAAI,GAAG,IAAI,IAAI,EAAE;MACf,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;KACxE;IAED,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;EAC3C,CAAC;EAEO,KAAK,CAAC,mBAAmB,CAC/B,UAAwC,EACxC,EAAoB;IAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAEpD,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;MACnB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;KAC1E;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;MACvB,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;KACH;IAED,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;EAC3D,CAAC;EAGS,KAAK,CAAC,YAAY,CAAC,KAA0B;;IACrD,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAEvE,MAAM,sBAAsB,GAC1B,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,UAAU,mCAAI,IAAI,CAAC,wBAAwB,CAAC;IAClE,MAAM,6BAA6B,GACjC,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,iBAAiB,mCAAI,KAAK,CAAC;IAEjD,IAAI;MACF,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE;QACnC,OAAO,EAAE,eAAe;QACxB,UAAU,EAAE,sBAAsB;QAClC,iBAAiB,EAAE,6BAA6B;OACjD,CAAC,CAAC;KACJ;IAAC,OAAO,CAAC,EAAE;MACV,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,CAAC,CAAC,CAAC;KAC5D;EACH,CAAC;EAGS,KAAK,CAAC,gBAAgB;IAC9B,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;MACnD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;MAC9B,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;KAC9B;EACH,CAAC;EAEO,mBAAmB,CACzB,KAAa,EACb,QAAqC;;IAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,cAAc,GAAG,MAAA,QAAQ,CAAC,YAAY,mCAAI,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IAErC,IAAI,QAAQ,KAAK,OAAO,EAAE;MACxB,OAAO,gBAAgB,GAAG,SAAS,CAAC;KACrC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE;MAChC,MAAM,UAAU,GAAG,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;MAChE,OAAO,UAAU,GAAG,cAAc,GAAG,CAAC,CAAC;KACxC;SAAM;MACL,MAAM,UAAU,GAAG,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;MAC5D,OAAO,UAAU,GAAG,cAAc,CAAC;KACpC;EACH,CAAC;EAEO,SAAS;IACf,OAAO,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;EAC7D,CAAC;EAEO,mBAAmB;IACzB,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,gCAAgC,CAAC,CAAC;IACrE,IAAI,MAAM,IAAI,IAAI,EAAE;MAClB,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,gCAAgC,CAAC,CAAC;MAClE,MAAM,CAAC,SAAS,GAAG;;;;;;OAMlB,CAAC;MAEF,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KAC7B;IACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC;EAClC,CAAC;EAEO,mBAAmB;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACtC,IAAI,MAAM,IAAI,IAAI,EAAE;MAClB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;MACxB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,EAAgC,CAAC;MACpD,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;MAClC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;MACpC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;KAC/B;SAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;MAC/D,OAAO,CAAC,KAAK,CACX,6DAA6D,CAC9D,CAAC;KACH;EACH,CAAC;EAEO,gBAAgB;IACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,EAAE;MAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAC/B;SAAM;MACL,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;KAChD;EACH,CAAC;EAEO,qBAAqB,CAAC,OAAsB;;IAClD,MAAM,kBAAkB,GACtB,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,kBAAkB,mCAAI,IAAI,CAAC,kBAAkB,CAAC;IACzD,MAAM,sBAAsB,GAC1B,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,mCAAI,IAAI,CAAC,wBAAwB,CAAC;IAEvD,IAAI,sBAAsB,EAAE;MAC1B,6EAA6E;MAC7E,8EAA8E;MAC9E,2BAA2B;MAC3B,MAAM,mBAAmB,GACvB,kBAAkB,CAAC,MAAM,GAAG,CAAC;QAC3B,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC;MAErC,OAAO,mBAAmB,CAAC;KAC5B;SAAM,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;MACxC,4EAA4E;MAC5E,iFAAiF;MACjF,OAAO,kBAAkB,CAAC;KAC3B;IAED,kFAAkF;IAClF,8EAA8E;IAC9E,OAAO,SAAS,CAAC;EACnB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import 'requestidlecallback-polyfill';\n\nimport {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { ElementPool } from '@vertexvis/html-templates';\nimport { Node } from '@vertexvis/scene-tree-protos/scenetree/protos/domain_pb';\nimport { SceneTreeAPIClient } from '@vertexvis/scene-tree-protos/scenetree/protos/scene_tree_api_pb_service';\nimport { Disposable } from '@vertexvis/utils';\n\nimport {\n Config,\n parseAndValidateConfig,\n PartialConfig,\n} from '../../lib/config';\nimport { Environment } from '../../lib/environment';\nimport { isSceneTreeTableCellElement } from '../scene-tree-table-cell/utils';\nimport { SceneTreeError } from './errors';\nimport {\n FilterTreeOptions,\n SceneTreeController,\n SceneTreeState,\n} from './lib/controller';\nimport { getSceneTreeContainsElement } from './lib/dom';\nimport { SceneTreeErrorCode, SceneTreeErrorDetails } from './lib/errors';\nimport { webSocketSubscriptionTransportFactory } from './lib/grpc';\nimport { isLoadedRow, Row } from './lib/row';\nimport {\n deselectItem,\n hideItem,\n isolateItem,\n selectFilterResults,\n selectItem,\n selectRangeInSceneTree,\n showItem,\n} from './lib/viewer-ops';\nimport {\n FilterOptions,\n MetadataKey,\n RowArg,\n RowDataProvider,\n SCENE_ITEM_NAME_METADATA_KEY,\n SceneTreeOperationOptions,\n ScrollToOptions,\n SelectItemOptions,\n} from './types';\n\n/**\n * The minimum amount of time provided by requestIdleCallback to clear purged\n * data. A value too low may cause contention with browser rendering. A value\n * too high will cause too many items to be accumulated.\n */\nconst MIN_CLEAR_UNUSED_DATA_MS = 25;\n\ninterface StateMap {\n idleCallbackId?: number;\n resizeObserver?: ResizeObserver;\n componentLoaded: boolean;\n\n client?: SceneTreeAPIClient;\n jwt?: string;\n\n onStateChangeDisposable?: Disposable;\n subscribeDisposable?: Disposable;\n viewerDisposable?: Disposable;\n viewerSceneReadyDisposable?: Disposable;\n\n elementPool?: ElementPool;\n template?: HTMLTemplateElement;\n\n selectionPath?: string[];\n\n layoutEl?: HTMLVertexSceneTreeTableLayoutElement;\n}\n\ntype OperationHandler = (data: {\n viewer: HTMLVertexViewerElement;\n id: string;\n node: Node.AsObject;\n}) => void | Promise<void>;\n\n/**\n * @slot header - A slot that places content above the rows in the tree. By\n * default, a search toolbar will be placed in this slot. Elements can be\n * stacked by assigning multiple elements to this slot.\n * @slot footer - A slot that places content below the rows in the tree.\n * Elements can be stacked by assigning multiple elements to this slot.\n */\n@Component({\n tag: 'vertex-scene-tree',\n styleUrl: 'scene-tree.css',\n shadow: true,\n})\nexport class SceneTree {\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 @Prop()\n public overScanCount = 25;\n\n /**\n * A CSS selector that points to a `<vertex-viewer>` element. Either this\n * property or `viewer` must be set.\n */\n @Prop()\n public viewerSelector?: string;\n\n /**\n * An instance of a `<vertex-viewer>` element. Either this property or\n * `viewerSelector` must be set.\n */\n @Prop({ reflect: true, mutable: true })\n public viewer?: HTMLVertexViewerElement | null;\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 * @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 * An object to configure the scene tree.\n */\n @Prop()\n public config?: PartialConfig | string;\n\n /**\n * Sets the default environment for the viewer. This setting is used for\n * auto-configuring network hosts.\n *\n * Use the `config` property for manually setting hosts.\n */\n @Prop()\n public configEnv: Environment = 'platprod';\n\n @Prop({ mutable: true })\n public controller?: SceneTreeController;\n\n /**\n * A set of options to configure scene tree searching behavior.\n */\n @Prop({ mutable: true })\n public searchOptions: FilterOptions = {};\n\n /**\n * @deprecated Use `searchOptions`\n * Indicates whether the metadata search should use an exact match.\n */\n @Prop({ mutable: true })\n public metadataSearchExactMatch = false;\n\n /**\n * @deprecated Use `searchOptions`\n * A list of the metadata keys that a scene tree search should be performed on.\n */\n @Prop({ mutable: true })\n public metadataSearchKeys: MetadataKey[] = [];\n\n /**\n * A list of part metadata keys that will be made available to each row. This\n * metadata can be used for data binding inside the scene tree's template.\n *\n * **Note:** for the values of these metadata keys to be evaluated for search,\n * they must be provided to the `metadataSearchKeys` specified in the `searchOptions`.\n * Otherwise, the search will only be performed against the item name.\n */\n @Prop()\n public metadataKeys: MetadataKey[] = [];\n\n /**\n * The duration of operations with animations, in milliseconds, when a user performs\n * an action that results in an animation such as isolate. Defaults to 500ms.\n */\n @Prop()\n public operationAnimationDuration = 500;\n\n /**\n * An event that is emitted when this <vertex-scene-tree> encounters a connection\n * error.\n */\n @Event()\n public connectionError!: EventEmitter<SceneTreeErrorDetails>;\n\n /**\n * An event that is emitted when the first row of this <vertex-scene-tree> has\n * been rendered.\n */\n @Event()\n public firstRowRendered!: EventEmitter<void>;\n\n @State()\n private rows: Row[] = [];\n\n @State()\n private totalRows = 0;\n\n @State()\n private showLoader = false;\n\n @State()\n private showEmptyResults = false;\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 componentLoaded: false,\n };\n\n @State()\n private errorDetails: SceneTreeErrorDetails | undefined;\n\n @State()\n private hasPartialFilterResults = false;\n\n @State()\n private refreshingResults = false;\n\n @State()\n private attemptingRetry = false;\n\n @Element()\n private el!: HTMLElement;\n\n private lastSelectedItemId?: string;\n private firstCellRendered = false;\n\n /**\n * Schedules a render of the rows in the scene tree. Useful if any custom\n * data in your scene tree has changed, and you want to update the row's\n * contents.\n *\n * **Note:** This is an asynchronous operation. The update may happen on the\n * next frame.\n */\n @Method()\n public async invalidateRows(): Promise<void> {\n forceUpdate(this.getLayoutElement());\n }\n\n /**\n * Scrolls the tree to the given row index.\n *\n * @param index An index of the row to scroll to.\n * @param options A set of options to configure the scrolling behavior.\n */\n @Method()\n public async scrollToIndex(\n index: number,\n options: ScrollToOptions = {}\n ): Promise<void> {\n const { animate, position = 'middle' } = options;\n const i = Math.max(0, Math.min(index, this.totalRows));\n\n const top = this.getScrollToPosition(i, position);\n\n await this.getLayoutElement().scrollToPosition(top, {\n behavior: animate ? 'smooth' : undefined,\n });\n }\n\n /**\n * Scrolls the tree to an item with the given ID. If the node for the item is\n * not expanded, the tree will expand each of its parent nodes.\n *\n * @param itemId An ID of an item to scroll to.\n * @param options A set of options to configure the scrolling behavior.\n * @returns A promise that resolves when the operation is finished.\n */\n @Method()\n public async scrollToItem(\n itemId: string,\n options: ScrollToOptions = {}\n ): Promise<void> {\n const rowsBeforeExpand = this.totalRows;\n const index = await this.controller?.expandParentNodes(itemId);\n\n if (index != null && rowsBeforeExpand !== this.totalRows) {\n return new Promise((resolve) => {\n const layoutEl = this.getLayoutElement();\n const handleLayoutRendered = async (): Promise<void> => {\n layoutEl.removeEventListener('layoutRendered', handleLayoutRendered);\n await this.scrollToIndex(index, options);\n resolve();\n };\n\n layoutEl.addEventListener('layoutRendered', handleLayoutRendered);\n });\n } else if (index != null) {\n await this.scrollToIndex(index, options);\n }\n }\n\n /**\n * Performs an API call to expand all nodes in the tree.\n */\n @Method()\n public async expandAll(): Promise<void> {\n await this.controller?.expandAll();\n }\n\n /**\n * Performs an API call to collapse all nodes in the tree.\n */\n @Method()\n public async collapseAll(): Promise<void> {\n await this.controller?.collapseAll();\n }\n\n /**\n * Performs an API call that will expand the node associated to the specified\n * row or row index.\n *\n * @param row A row, row index, or node to expand.\n */\n @Method()\n public async expandItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ id, node }) => {\n if (!node.expanded) {\n await this.controller?.expandNode(id);\n }\n });\n }\n\n /**\n * Performs an API call that will collapse the node associated to the\n * specified row or row index.\n *\n * @param row A row, row index, or node to collapse.\n */\n @Method()\n public async collapseItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ id, node }) => {\n if (node.expanded) {\n await this.controller?.collapseNode(id);\n }\n });\n }\n\n /**\n * Performs an API call that will either expand or collapse the node\n * associated to the given row or row index.\n *\n * @param row The row, row index, or node to collapse or expand.\n */\n @Method()\n public async toggleExpandItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ node }) => {\n if (node.expanded) {\n await this.collapseItem(node);\n } else {\n await this.expandItem(node);\n }\n });\n }\n\n /**\n * Performs an API call that will either hide or show the item associated to\n * the given row or row index.\n *\n * @param row The row, row index, or node to toggle visibility.\n */\n @Method()\n public async toggleItemVisibility(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id, node }) => {\n if (node.visible || node.partiallyVisible) {\n await hideItem(viewer, id);\n } else {\n await showItem(viewer, id);\n }\n });\n }\n\n /**\n * Performs an API call that will hide the item associated to the given row\n * or row index.\n *\n * @param row The row, row index, or node to hide.\n */\n @Method()\n public async hideItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id, node }) => {\n if (node.visible) {\n await hideItem(viewer, id);\n }\n });\n }\n\n /**\n * Performs an API call that will show the item associated to the given row\n * or row index.\n *\n * @param row The row, row index, or node to show.\n */\n @Method()\n public async showItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id, node }) => {\n if (!node.visible) {\n await showItem(viewer, id);\n }\n });\n }\n\n /**\n * Performs an API call that will select the item associated to the given row\n * or row index.\n *\n * This method supports a `recurseParent` option that allows for recursively\n * selecting the next unselected parent node. This behavior is considered\n * stateful. Each call to `selectItem` will track the ancestry of the passed\n * in `rowArg`. If calling `selectItem` with a row not belonging to the\n * ancestry of a previous selection, then this method will perform a standard\n * selection.\n *\n * @param row The row, row index or node to select.\n * @param options A set of options to configure selection behavior.\n */\n @Method()\n public async selectItem(\n row: RowArg,\n { recurseParent, ...options }: SelectItemOptions = {}\n ): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id }) => {\n const ancestors = (await this.controller?.fetchNodeAncestors(id)) || [];\n\n // The parent node should be selected if recurseParent is true and either\n // the given node is in the selection path (so was intentionally selected by clicking in the tree)\n // or if the given node is selected, but its immediate parent is not. The second case covers the\n // situation that the given node was selected as part of a previous ancestor selection and the\n // user wishes to clear the selection list and only select the given node.\n const isInPath = this.stateMap.selectionPath?.includes(id);\n\n const nodeForRow = this.getNodeFromRowOrIndex(row);\n const immediateParentNodeIsSelected =\n ancestors.length > 0 ? ancestors[0].selected : true;\n const nodeIsSelectedAndParentIsUnselected =\n nodeForRow.selected && !immediateParentNodeIsSelected;\n\n if (recurseParent && (isInPath || nodeIsSelectedAndParentIsUnselected)) {\n const nextNode = ancestors.find(({ selected }) => !selected);\n if (nextNode != null) {\n await this.selectItem(nextNode, options);\n this.lastSelectedItemId = id;\n } else {\n await selectItem(viewer, id, options);\n this.lastSelectedItemId = id;\n }\n } else if (options.range && this.lastSelectedItemId != null) {\n const currentRowIndex = await this.controller?.expandParentNodes(id);\n const previouslySelectedIndex =\n await this.controller?.expandParentNodes(this.lastSelectedItemId);\n\n if (previouslySelectedIndex && currentRowIndex) {\n const start = Math.min(previouslySelectedIndex, currentRowIndex);\n const end = Math.max(previouslySelectedIndex, currentRowIndex);\n await selectRangeInSceneTree(viewer, start, end, options);\n }\n } else {\n await selectItem(viewer, id, options);\n this.lastSelectedItemId = id;\n }\n\n this.stateMap.selectionPath = [\n ...ancestors.map(({ id }) => id?.hex || ''),\n id,\n ];\n });\n }\n\n /**\n * Performs an API call that will deselect the item associated to the given\n * row or row index.\n *\n * @param row The row, row index, or node to deselect.\n */\n @Method()\n public async deselectItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id, node }) => {\n if (node.selected) {\n this.lastSelectedItemId = undefined;\n await deselectItem(viewer, id);\n }\n });\n }\n\n /**\n * Performs an API call that will show only the item associated to\n * the given row or row index and fit the camera to the item's bounding box.\n *\n * @param row The row, row index, or node to isolate.\n */\n @Method()\n public async isolateItem(row: RowArg): Promise<void> {\n await this.performRowOperation(row, async ({ viewer, id }) => {\n await isolateItem(viewer, id, {\n animationDurationMs: this.operationAnimationDuration,\n });\n });\n }\n\n /**\n * Returns a row at the given index. If the row data has not been loaded,\n * returns `undefined`.\n *\n * @param index The index of the row.\n * @returns A row, or `undefined` if the row hasn't been loaded.\n */\n @Method()\n public async getRowAtIndex(index: number): Promise<Row> {\n return this.rows[index];\n }\n\n /**\n * Returns the row with the given id. If there is not a row\n * matching the id, returns `undefined`.\n *\n * @param itemId An ID of an item to return the row for.\n * @returns A row, or `undefined` if a corresponding row doesn't exist\n */\n @Method()\n public async getRowForItemId(itemId: string): Promise<Row | undefined> {\n const index = await this.controller?.expandParentNodes(itemId);\n if (index != null) {\n return this.rows[index];\n } else {\n return undefined;\n }\n }\n\n /**\n * Returns the row data from the given mouse or pointer event. The event must\n * originate from a `vertex-scene-tree-table-cell` contained by this element,\n * otherwise `undefined` is returned.\n *\n * @param event A mouse or pointer event that originated from this component.\n * @returns A row, or `undefined` if the row hasn't been loaded.\n */\n @Method()\n public async getRowForEvent(event: MouseEvent | PointerEvent): Promise<Row> {\n const { clientY, target } = event;\n\n if (\n target != null &&\n this.errorDetails == null &&\n getSceneTreeContainsElement(this.el, target as HTMLElement) &&\n isSceneTreeTableCellElement(target)\n ) {\n return this.getRowAtClientY(clientY);\n } else {\n return undefined;\n }\n }\n\n /**\n * Returns the row data from the given vertical client position.\n *\n * @param clientY The vertical client position.\n * @returns A row or `undefined` if the row hasn't been loaded.\n */\n @Method()\n public getRowAtClientY(clientY: number): Promise<Row> {\n const layoutEl = this.getLayoutElement();\n const top = layoutEl.layoutOffset;\n const index = Math.floor(\n (clientY - top + layoutEl.scrollOffset) / layoutEl.rowHeight\n );\n return this.getRowAtIndex(index);\n }\n\n /**\n * Performs an async request that will filter the displayed items in the tree\n * that match the given term and options.\n *\n * @param term The filter term.\n * @param options The options to apply to the filter.\n * @returns A promise that completes when the request has completed. Note,\n * items are displayed asynchronously. So the displayed items may not reflect\n * the result of this filter when the promise completes.\n */\n @Method()\n public async filterItems(\n term: string,\n options: FilterTreeOptions = {}\n ): Promise<void> {\n const optionsAsFilterOptions: FilterOptions = {\n ...options,\n metadataSearchKeys: options.columns,\n };\n const columnsToSearch = this.getMetadataSearchKeys(optionsAsFilterOptions);\n\n return this.controller?.filter(term, {\n ...options,\n columns: columnsToSearch,\n });\n }\n\n /**\n * Performs an async request that will select the filtered items in the tree\n * that match the given term.\n *\n * @param term The filter term.\n * @returns A promise that completes when the request has completed.\n */\n @Method()\n public async selectFilteredItems(\n term: string,\n options?: SceneTreeOperationOptions\n ): Promise<void> {\n if (this.viewer != null) {\n const metadataSearchKeys =\n this.searchOptions?.metadataSearchKeys ?? this.metadataSearchKeys;\n const definedMetadataKeys =\n metadataSearchKeys.length > 0 ? metadataSearchKeys : this.metadataKeys;\n\n const columnsToSearch =\n definedMetadataKeys.length > 0\n ? definedMetadataKeys\n : ['VERTEX_SCENE_ITEM_NAME'];\n\n const shouldSearchExactMatch =\n this.searchOptions?.exactMatch ?? this.metadataSearchExactMatch;\n const shouldSearchRemoveHiddenItems =\n this.searchOptions?.removeHiddenItems ?? false;\n\n await selectFilterResults(\n this.viewer,\n term,\n columnsToSearch,\n shouldSearchExactMatch,\n shouldSearchRemoveHiddenItems,\n {\n append: false,\n ...options,\n }\n );\n }\n }\n\n /**\n * Fetches the metadata keys that are available to the scene tree. Metadata\n * keys can be assigned to the scene tree using the `metadataKeys` property.\n * The scene tree will fetch this metadata and make these values available\n * for data binding.\n *\n * @returns A promise that resolves with the names of available keys.\n */\n @Method()\n public async fetchMetadataKeys(): Promise<MetadataKey[]> {\n return this.controller?.fetchMetadataKeys() ?? [];\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.stateMap.viewerDisposable?.dispose();\n this.stateMap.viewerSceneReadyDisposable?.dispose();\n this.controller?.cancel();\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.connectToViewer();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n if (this.controller == null) {\n const { sceneTreeHost } = this.getConfig().network;\n const client = new SceneTreeAPIClient(\n sceneTreeHost,\n this.getConfig().flags.grpcUseStreamingWebSocketTransport\n ? {\n transport: webSocketSubscriptionTransportFactory,\n }\n : undefined\n );\n this.controller = new SceneTreeController(client, 100);\n this.controller?.setMetadataKeys(this.metadataKeys);\n }\n\n this.stateMap.onStateChangeDisposable = this.controller.onStateChange.on(\n (state) => this.handleControllerStateChange(state)\n );\n\n this.connectToViewer();\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n this.ensureLayoutDefined();\n this.updateLayoutElement();\n\n const layoutEl = this.getLayoutElement();\n const resizeObserver = new ResizeObserver(() => {\n this.invalidateRows();\n });\n resizeObserver.observe(layoutEl);\n this.stateMap.resizeObserver = resizeObserver;\n\n this.stateMap.componentLoaded = true;\n\n this.controller?.setMetadataKeys(this.metadataKeys);\n\n if (this.viewer == null) {\n this.errorDetails = new SceneTreeErrorDetails(\n 'MISSING_VIEWER',\n SceneTreeErrorCode.MISSING_VIEWER\n );\n }\n }\n\n public componentWillRender(): void {\n // The controller can load data prior to the first render\n // ensure that this renders any time the state changes.\n this.updateLayoutElement();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"header\">\n <slot name=\"header\">\n <vertex-scene-tree-toolbar class=\"search-toolbar\">\n <vertex-scene-tree-search controller={this.controller} />\n </vertex-scene-tree-toolbar>\n </slot>\n </div>\n\n <slot name=\"partial-filter-results-banner\">\n {this.hasPartialFilterResults && (\n <vertex-scene-tree-notification-banner\n message={\n this.refreshingResults\n ? 'Refreshing results...'\n : 'Data loading, refresh for more.'\n }\n actionLabel=\"Refresh\"\n onAction={() => this.controller?.refreshFilter()}\n />\n )}\n </slot>\n\n {this.errorDetails != null && this.renderError(this.errorDetails)}\n\n {this.errorDetails == null && (\n <div class=\"rows-scroll\">\n {this.showLoader && (\n <slot name=\"loading\">\n <vertex-viewer-spinner class=\"loading\" size=\"md\" />\n </slot>\n )}\n <slot />\n {this.showEmptyResults && (\n <slot name=\"empty-results\">\n <div class=\"empty-results\">No Results Found.</div>\n </slot>\n )}\n </div>\n )}\n\n <div class=\"footer\">\n <slot name=\"footer\" />\n </div>\n </Host>\n );\n }\n\n private renderError(details: SceneTreeErrorDetails): h.JSX.IntrinsicElements {\n if (details.code !== SceneTreeErrorCode.SCENE_TREE_DISABLED) {\n return (\n <SceneTreeError details={details}>\n <button\n class=\"button button-secondary\"\n onClick={() => this.retryConnectToViewer()}\n disabled={this.attemptingRetry}\n >\n Retry\n </button>\n </SceneTreeError>\n );\n } else {\n return <SceneTreeError details={details} />;\n }\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer: HTMLVertexViewerElement | undefined,\n oldViewer: HTMLVertexViewerElement | undefined\n ): void {\n // StencilJS will invoke this callback even before the component has been\n // loaded. According to their docs, this shouldn't happen. Return if the\n // component hasn't been loaded.\n // See https://stenciljs.com/docs/reactive-data#watch-decorator\n if (!this.stateMap.componentLoaded) {\n return;\n }\n\n this.connectToViewer();\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChanged(newController: SceneTreeController): void {\n // StencilJS will invoke this callback even before the component has been\n // loaded. According to their docs, this shouldn't happen. Return if the\n // component hasn't been loaded.\n // See https://stenciljs.com/docs/reactive-data#watch-decorator\n if (!this.stateMap.componentLoaded) {\n return;\n }\n\n this.stateMap.onStateChangeDisposable?.dispose();\n\n this.stateMap.onStateChangeDisposable = newController.onStateChange.on(\n (state) => this.handleControllerStateChange(state)\n );\n\n newController.setMetadataKeys(this.metadataKeys);\n }\n\n /**\n * @ignore\n */\n @Watch('metadataKeys')\n protected handleMetadataKeysChanged(): void {\n this.controller?.setMetadataKeys(this.metadataKeys);\n }\n\n private retryConnectToViewer(): void {\n this.attemptingRetry = true;\n this.errorDetails = undefined;\n this.connectToViewer();\n }\n\n private connectToViewer(): void {\n this.stateMap.viewerDisposable?.dispose();\n this.stateMap.viewerSceneReadyDisposable?.dispose();\n\n if (this.viewer == null && this.viewerSelector != null) {\n this.viewer = document.querySelector(this.viewerSelector) as\n | HTMLVertexViewerElement\n | undefined;\n }\n\n if (this.viewer != null) {\n const handleSceneReady = async (): Promise<void> => {\n const layoutEl = this.getLayoutElement();\n\n await layoutEl.attemptComputeCellHeight();\n };\n\n this.viewer.addEventListener('sceneReady', handleSceneReady);\n this.stateMap.viewerDisposable = this.controller?.connectToViewer(\n this.viewer\n );\n this.stateMap.viewerSceneReadyDisposable = {\n dispose: () =>\n this.viewer?.removeEventListener('sceneReady', handleSceneReady),\n };\n } else {\n this.attemptingRetry = false;\n }\n }\n\n private scheduleClearUnusedData(): void {\n if (this.stateMap.idleCallbackId != null) {\n window.cancelIdleCallback(this.stateMap.idleCallbackId);\n }\n\n this.stateMap.idleCallbackId = window.requestIdleCallback((foo) => {\n const remaining = foo.timeRemaining?.();\n\n if (remaining == null || remaining >= MIN_CLEAR_UNUSED_DATA_MS) {\n const layoutEl = this.getLayoutElement();\n const startIndex = layoutEl.viewportStartIndex;\n const endIndex = layoutEl.viewportEndIndex;\n const [start, end] =\n this.controller?.getPageIndexesForRange(startIndex, endIndex) || [];\n\n if (start != null && end != null) {\n this.controller?.invalidatePagesOutsideRange(start, end, 50);\n }\n } else {\n this.scheduleClearUnusedData();\n }\n });\n }\n\n private handleControllerStateChange(state: SceneTreeState): void {\n this.showLoader = !!state.shouldShowLoading;\n this.showEmptyResults = !!state.shouldShowEmptyResults;\n this.rows = state.rows;\n this.totalRows = state.totalRows;\n this.hasPartialFilterResults = !!state.isPartialFilterResponse;\n this.refreshingResults = !!state.isSearching;\n\n if (state.connection.type === 'failure') {\n this.errorDetails = state.connection.details;\n this.connectionError.emit(state.connection.details);\n } else if (state.connection.type === 'disconnected') {\n this.errorDetails = new SceneTreeErrorDetails(\n 'DISCONNECTED',\n SceneTreeErrorCode.DISCONNECTED\n );\n } else {\n this.errorDetails = undefined;\n }\n\n if (\n state.connection.type === 'connected' ||\n state.connection.type === 'failure'\n ) {\n this.attemptingRetry = false;\n }\n }\n\n private getNodeFromRowOrIndex(\n rowOrIndex: number | Row | Node.AsObject\n ): Node.AsObject {\n const row =\n typeof rowOrIndex === 'number' ? this.rows[rowOrIndex] : rowOrIndex;\n\n if (row == null) {\n throw new Error(`Cannot perform scene tree operation. Row not found.`);\n }\n\n return isLoadedRow(row) ? row.node : row;\n }\n\n private async performRowOperation(\n rowOrIndex: number | Row | Node.AsObject,\n op: OperationHandler\n ): Promise<void> {\n const node = this.getNodeFromRowOrIndex(rowOrIndex);\n\n if (node.id == null) {\n throw new Error(`Cannot perform scene tree operation. ID is undefined.`);\n }\n\n if (this.viewer == null) {\n throw new Error(\n `Cannot perform scene tree operation. Cannot get reference to viewer.`\n );\n }\n\n await op({ viewer: this.viewer, id: node.id.hex, node });\n }\n\n @Listen('search')\n protected async handleSearch(event: CustomEvent<string>): Promise<void> {\n const columnsToSearch = this.getMetadataSearchKeys(this.searchOptions);\n\n const shouldSearchExactMatch =\n this.searchOptions?.exactMatch ?? this.metadataSearchExactMatch;\n const shouldSearchRemoveHiddenItems =\n this.searchOptions?.removeHiddenItems ?? false;\n\n try {\n await this.filterItems(event.detail, {\n columns: columnsToSearch,\n exactMatch: shouldSearchExactMatch,\n removeHiddenItems: shouldSearchRemoveHiddenItems,\n });\n } catch (e) {\n console.error('Failed to filter tree with exception: ', e);\n }\n }\n\n @Listen('cellLoaded')\n protected async handleCellLoaded(): Promise<void> {\n if (!this.firstCellRendered && this.rows.length > 0) {\n this.firstCellRendered = true;\n this.firstRowRendered.emit();\n }\n }\n\n private getScrollToPosition(\n index: number,\n position: ScrollToOptions['position']\n ): number {\n const layoutEl = this.getLayoutElement();\n const constrainedIndex = Math.max(0, Math.min(index, this.totalRows - 1));\n const viewportHeight = layoutEl.layoutHeight ?? 0;\n const rowHeight = layoutEl.rowHeight;\n\n if (position === 'start') {\n return constrainedIndex * rowHeight;\n } else if (position === 'middle') {\n const rowCenterY = constrainedIndex * rowHeight + rowHeight / 2;\n return rowCenterY - viewportHeight / 2;\n } else {\n const rowBottomY = constrainedIndex * rowHeight + rowHeight;\n return rowBottomY - viewportHeight;\n }\n }\n\n private getConfig(): Config {\n return parseAndValidateConfig(this.configEnv, this.config);\n }\n\n private ensureLayoutDefined(): void {\n let layout = this.el.querySelector('vertex-scene-tree-table-layout');\n if (layout == null) {\n layout = document.createElement('vertex-scene-tree-table-layout');\n layout.innerHTML = `\n <vertex-scene-tree-table-column>\n <template>\n <vertex-scene-tree-table-cell prop:value=\"{{row.node.name}}\" expand-toggle isolate-button visibility-toggle></vertex-scene-tree-table-cell>\n </template>\n </vertex-scene-tree-table-column>\n `;\n\n this.el.appendChild(layout);\n }\n this.stateMap.layoutEl = layout;\n }\n\n private updateLayoutElement(): void {\n const layout = this.stateMap.layoutEl;\n if (layout != null) {\n layout.rows = this.rows;\n layout.tree = this.el as HTMLVertexSceneTreeElement;\n layout.totalRows = this.totalRows;\n layout.controller = this.controller;\n layout.rowData = this.rowData;\n } else if (!this.stateMap.componentLoaded && this.totalRows > 0) {\n console.debug(\n 'Scene tree has rows, but the component has not yet rendered'\n );\n }\n }\n\n private getLayoutElement(): HTMLVertexSceneTreeTableLayoutElement {\n if (this.stateMap.layoutEl != null) {\n return this.stateMap.layoutEl;\n } else {\n throw new Error('Layout element is undefined');\n }\n }\n\n private getMetadataSearchKeys(options: FilterOptions): string[] | undefined {\n const metadataSearchKeys =\n options?.metadataSearchKeys ?? this.metadataSearchKeys;\n const shouldSearchExactMatch =\n options?.exactMatch ?? this.metadataSearchExactMatch;\n\n if (shouldSearchExactMatch) {\n // If we're performing an exact match search, we want to include the searched\n // metadata keys if provided. In the case that none have been provided, simply\n // fall back the item name.\n const definedMetadataKeys =\n metadataSearchKeys.length > 0\n ? metadataSearchKeys\n : [SCENE_ITEM_NAME_METADATA_KEY];\n\n return definedMetadataKeys;\n } else if (metadataSearchKeys.length > 0) {\n // If we're not performing an exact match search, and a set of metadata keys\n // to search against have been provided, we want to include those in the request.\n return metadataSearchKeys;\n }\n\n // If we're not performing an exact match search, and we have no provided metadata\n // search keys, we can perform a name-only search, and omit the array of keys.\n return undefined;\n }\n}\n"]}
|
|
@@ -129,6 +129,11 @@ export class SceneTreeSearch {
|
|
|
129
129
|
var _a, _b;
|
|
130
130
|
(_a = this.onStateChangeDisposable) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
131
131
|
this.onStateChangeDisposable = (_b = this.controller) === null || _b === void 0 ? void 0 : _b.onStateChange.on((state) => {
|
|
132
|
+
// If a search was previously being performed, but has now finished,
|
|
133
|
+
// emit the event that the search has completed.
|
|
134
|
+
if (this.isSearching && !state.isSearching) {
|
|
135
|
+
this.searchCompleted.emit(this.value);
|
|
136
|
+
}
|
|
132
137
|
this.isSearching = state.isSearching;
|
|
133
138
|
});
|
|
134
139
|
}
|
|
@@ -249,7 +254,22 @@ export class SceneTreeSearch {
|
|
|
249
254
|
"composed": true,
|
|
250
255
|
"docs": {
|
|
251
256
|
"tags": [],
|
|
252
|
-
"text": "An event that is emitted when a user has
|
|
257
|
+
"text": "An event that is emitted when a user has changed or cleared the search\nterm. The event may be delayed according to the current `debounce` value."
|
|
258
|
+
},
|
|
259
|
+
"complexType": {
|
|
260
|
+
"original": "string",
|
|
261
|
+
"resolved": "string",
|
|
262
|
+
"references": {}
|
|
263
|
+
}
|
|
264
|
+
}, {
|
|
265
|
+
"method": "searchCompleted",
|
|
266
|
+
"name": "searchCompleted",
|
|
267
|
+
"bubbles": true,
|
|
268
|
+
"cancelable": true,
|
|
269
|
+
"composed": true,
|
|
270
|
+
"docs": {
|
|
271
|
+
"tags": [],
|
|
272
|
+
"text": "An event that is emitted when a search has completed."
|
|
253
273
|
},
|
|
254
274
|
"complexType": {
|
|
255
275
|
"original": "string",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-tree-search.js","sourceRoot":"","sources":["../../../../../src/components/scene-tree-search/scene-tree-search.tsx"],"names":[],"mappings":"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","sourcesContent":["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 inputted 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 @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 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"]}
|
|
1
|
+
{"version":3,"file":"scene-tree-search.js","sourceRoot":"","sources":["../../../../../src/components/scene-tree-search/scene-tree-search.tsx"],"names":[],"mappings":"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","sourcesContent":["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"]}
|
|
@@ -12,7 +12,7 @@ import { CanvasController } from '../../lib/canvases';
|
|
|
12
12
|
import { parseAndValidateConfig, } from '../../lib/config';
|
|
13
13
|
import { CursorManager } from '../../lib/cursors';
|
|
14
14
|
import { cssCursor } from '../../lib/dom';
|
|
15
|
-
import { ComponentInitializationError, InteractionHandlerError, ViewerInitializationError, } from '../../lib/errors';
|
|
15
|
+
import { ComponentInitializationError, InteractionHandlerError, MissingJWTError, ViewerInitializationError, } from '../../lib/errors';
|
|
16
16
|
import { InteractionApiOrthographic, InteractionApiPerspective, } from '../../lib/interactions';
|
|
17
17
|
import { FlyToPartKeyInteraction } from '../../lib/interactions/flyToPartKeyInteraction';
|
|
18
18
|
import { FlyToPositionKeyInteraction } from '../../lib/interactions/flyToPositionKeyInteraction';
|
|
@@ -92,6 +92,14 @@ export class Viewer {
|
|
|
92
92
|
* @internal
|
|
93
93
|
*/
|
|
94
94
|
this.experimentalRenderingOptions = '';
|
|
95
|
+
/**
|
|
96
|
+
* Specifies options related to presentation of cross-sections.
|
|
97
|
+
* Defaults to showing the cross-section with an end cap that matches the part color.
|
|
98
|
+
*/
|
|
99
|
+
this.crossSectioning = {
|
|
100
|
+
endCapEnabled: true,
|
|
101
|
+
endCapColor: undefined,
|
|
102
|
+
};
|
|
95
103
|
/**
|
|
96
104
|
* An optional value that will debounce frame updates when resizing
|
|
97
105
|
* this viewer element.
|
|
@@ -457,10 +465,12 @@ export class Viewer {
|
|
|
457
465
|
dimensions: this.dimensions,
|
|
458
466
|
frameBgColor: this.getBackgroundColor(),
|
|
459
467
|
});
|
|
460
|
-
await ((_a = this.stream) === null || _a === void 0 ? void 0 : _a.load(urn, this.clientId, this.getDeviceId(), this.getResolvedConfig(), options === null || options === void 0 ? void 0 : options.cameraType));
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
(
|
|
468
|
+
const state = await ((_a = this.stream) === null || _a === void 0 ? void 0 : _a.load(urn, this.clientId, this.getDeviceId(), this.getResolvedConfig(), options === null || options === void 0 ? void 0 : options.cameraType));
|
|
469
|
+
if (state.type === 'connected') {
|
|
470
|
+
this.sceneReady.emit();
|
|
471
|
+
if (EXPERIMENTAL_annotationPollingIntervalInMs !== undefined) {
|
|
472
|
+
(_b = this.annotations) === null || _b === void 0 ? void 0 : _b.connect(EXPERIMENTAL_annotationPollingIntervalInMs);
|
|
473
|
+
}
|
|
464
474
|
}
|
|
465
475
|
}
|
|
466
476
|
else {
|
|
@@ -517,10 +527,9 @@ export class Viewer {
|
|
|
517
527
|
}
|
|
518
528
|
emitConnectionChange(status) {
|
|
519
529
|
if (status.status === 'connected') {
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
// }
|
|
530
|
+
if (status.jwt.length === 0) {
|
|
531
|
+
throw new MissingJWTError('JWT is empty');
|
|
532
|
+
}
|
|
524
533
|
}
|
|
525
534
|
this.connectionChange.emit(status);
|
|
526
535
|
}
|
|
@@ -946,7 +955,7 @@ export class Viewer {
|
|
|
946
955
|
}
|
|
947
956
|
handleAnnotationSetsChange(numberOfAnnotationSets) {
|
|
948
957
|
if (numberOfAnnotationSets > 0 &&
|
|
949
|
-
this.
|
|
958
|
+
this.getDepthBufferStreamAttributesValue() == null) {
|
|
950
959
|
// Annotation sets are present in the viewer, but depth buffers are not being requested.
|
|
951
960
|
// The annotation sets require the depth buffers to render, so turn on depth buffers.
|
|
952
961
|
this.stateMap.depthBuffersOverrideForAnnotations = true;
|
|
@@ -1444,8 +1453,9 @@ export class Viewer {
|
|
|
1444
1453
|
"optional": true,
|
|
1445
1454
|
"docs": {
|
|
1446
1455
|
"tags": [],
|
|
1447
|
-
"text": "Specifies
|
|
1448
|
-
}
|
|
1456
|
+
"text": "Specifies options related to presentation of cross-sections.\nDefaults to showing the cross-section with an end cap that matches the part color."
|
|
1457
|
+
},
|
|
1458
|
+
"defaultValue": "{\n endCapEnabled: true,\n endCapColor: undefined,\n }"
|
|
1449
1459
|
},
|
|
1450
1460
|
"featureMaps": {
|
|
1451
1461
|
"type": "string",
|
|
@@ -1464,7 +1474,7 @@ export class Viewer {
|
|
|
1464
1474
|
"optional": true,
|
|
1465
1475
|
"docs": {
|
|
1466
1476
|
"tags": [],
|
|
1467
|
-
"text": "Specifies when a feature map is returned from rendering. Feature maps\ninclude information about the surfaces, edges and cross
|
|
1477
|
+
"text": "Specifies when a feature map is returned from rendering. Feature maps\ninclude information about the surfaces, edges and cross-sections that are\nin a frame.\n\nPossible values are:\n\n * `undefined`: A feature map is never requested.\n * `final`: A feature map is only requested on the final frame.\n * `all`: A feature map is requested for every frame.\n\nFeature maps can increase the amount of data that's sent to a client and\ncan impact rendering performance. Values of `undefined` or `final` should\nbe used when needing the highest rendering performance."
|
|
1468
1478
|
},
|
|
1469
1479
|
"attribute": "feature-maps",
|
|
1470
1480
|
"reflect": false
|