@vertexvis/viewer-toolkit-react 0.0.2-canary.3 → 0.0.2-canary.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var tslib = require('tslib');
3
4
  var jsxRuntime = require('react/jsx-runtime');
4
5
  var uiReact = require('@vertexvis/ui-react');
5
6
  var classNames = require('classnames');
@@ -9,6 +10,7 @@ var geometry = require('@vertexvis/geometry');
9
10
  var utils = require('@vertexvis/utils');
10
11
  var React = require('react');
11
12
  var viewerReact = require('@vertexvis/viewer-react');
13
+ var loader$1 = require('@vertexvis/ui/loader');
12
14
  var loader = require('@vertexvis/viewer/loader');
13
15
 
14
16
  function _interopNamespaceDefault(e) {
@@ -31,11 +33,12 @@ function _interopNamespaceDefault(e) {
31
33
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
32
34
 
33
35
  const DEFAULT_VERTICAL_SCALE = 1;
34
- const VertexResizableContent = ({ displayShadow, heading, id, initialScale, position = 'left', children, onResize, }) => {
35
- const isHorizontallyPositioned = position === 'left' || position === 'right';
36
- const isVerticallyPositioned = position === 'top';
36
+ const VertexResizableContent = (_a) => {
37
+ var { className, style, displayShadow, heading, id, initialScale, placement = 'left', children, onResize } = _a, uiProps = tslib.__rest(_a, ["className", "style", "displayShadow", "heading", "id", "initialScale", "placement", "children", "onResize"]);
38
+ const isHorizontallyPositioned = placement === 'left' || placement === 'right';
39
+ const isVerticallyPositioned = placement === 'top';
37
40
  function getHorizontalResizeDirection() {
38
- switch (position) {
41
+ switch (placement) {
39
42
  case 'left':
40
43
  return 'right';
41
44
  case 'right':
@@ -45,23 +48,22 @@ const VertexResizableContent = ({ displayShadow, heading, id, initialScale, posi
45
48
  }
46
49
  }
47
50
  function getVerticalResizeDirection() {
48
- return position === 'top' ? 'top' : 'none';
51
+ return placement === 'top' ? 'top' : 'none';
49
52
  }
50
53
  const initialVerticalScale = initialScale != null ? initialScale : DEFAULT_VERTICAL_SCALE;
51
- return (jsxRuntime.jsx(uiReact.VertexResizable, { id: id, "data-testid": `resizable-content-position-${position}`, className: classNames('pointer-events-auto z-popover md:z-overlay bg-white bg-opacity-95 flex-grow-0 flex-shrink-0', {
52
- ['border-r min-w-75 max-w-half']: position === 'left',
53
- ['sidebar-shadow-right']: position === 'left' && displayShadow,
54
- ['border-l right-0 relative']: position === 'right',
55
- ['sidebar-shadow-left']: position === 'right' && displayShadow,
56
- ['border-t bottom-0 fixed']: position === 'top',
54
+ return (jsxRuntime.jsx(uiReact.VertexResizable, Object.assign({ id: id, "data-testid": `resizable-content-position-${placement}`, className: classNames(className, 'pointer-events-auto z-popover md:z-overlay bg-white bg-opacity-95 flex-grow-0 flex-shrink-0 border-neutral-300', {
55
+ ['border-r min-w-75 max-w-half']: placement === 'left',
56
+ ['sidebar-shadow-right']: placement === 'left' && displayShadow,
57
+ ['border-l right-0 relative']: placement === 'right',
58
+ ['sidebar-shadow-left']: placement === 'right' && displayShadow,
59
+ ['border-t bottom-0 fixed']: placement === 'top',
57
60
  ['min-h-12 sheet']: isVerticallyPositioned,
58
- }), style: {
61
+ }), style: Object.assign({
59
62
  // This corrects an issue on mobile where `100vh` reflects the space
60
63
  // under the address bar and bottom toolbar in CSS.
61
- maxHeight: position === 'top' ? window.innerHeight : undefined,
62
- }, initialHorizontalScale: isHorizontallyPositioned ? initialScale : undefined, initialVerticalScale: isVerticallyPositioned ? initialVerticalScale : undefined, horizontalDirection: getHorizontalResizeDirection(), verticalDirection: getVerticalResizeDirection(), position: position === 'right' || position === 'top' ? 'absolute' : 'relative', onResizeEnd: () => onResize === null || onResize === void 0 ? void 0 : onResize(), children: jsxRuntime.jsxs("div", { className: "flex flex-col h-full w-full", children: [jsxRuntime.jsx("div", { className: "flex justify-center w-full", children: jsxRuntime.jsx("div", { className: "block md:hidden w-20 h-0.5 mt-0.5 bg-neutral-600 rounded" }) }), heading, jsxRuntime.jsx("div", { className: classNames('w-full flex flex-col h-0 flex-grow', {
63
- ['right-0']: position === 'right',
64
- }), children: children })] }) }));
64
+ maxHeight: placement === 'top' ? window.innerHeight : undefined }, style), initialHorizontalScale: isHorizontallyPositioned ? initialScale : undefined, initialVerticalScale: isVerticallyPositioned ? initialVerticalScale : undefined, horizontalDirection: getHorizontalResizeDirection(), verticalDirection: getVerticalResizeDirection(), position: placement === 'right' || placement === 'top' ? 'absolute' : 'relative', onResizeEnd: () => onResize === null || onResize === void 0 ? void 0 : onResize() }, uiProps, { children: jsxRuntime.jsxs("div", { className: "flex flex-col h-full w-full", children: [jsxRuntime.jsx("div", { className: "flex justify-center w-full", children: jsxRuntime.jsx("div", { className: "block md:hidden w-20 h-0.5 mt-0.5 bg-neutral-600 rounded" }) }), heading, jsxRuntime.jsx("div", { className: classNames('w-full flex flex-col h-0 flex-grow', {
65
+ ['right-0']: placement === 'right',
66
+ }), children: children })] }) })));
65
67
  };
66
68
 
67
69
  function contextMenuItemIsRow(item) {
@@ -93,40 +95,6 @@ const contextMenuActivePosition = recoil.selector({
93
95
  get: ({ get }) => get(contextMenuActive) != null ? get(contextMenuPosition) : undefined,
94
96
  });
95
97
 
96
- /******************************************************************************
97
- Copyright (c) Microsoft Corporation.
98
-
99
- Permission to use, copy, modify, and/or distribute this software for any
100
- purpose with or without fee is hereby granted.
101
-
102
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
103
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
104
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
105
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
106
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
107
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
108
- PERFORMANCE OF THIS SOFTWARE.
109
- ***************************************************************************** */
110
- /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
111
-
112
-
113
- function __rest(s, e) {
114
- var t = {};
115
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
116
- t[p] = s[p];
117
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
118
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
119
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
120
- t[p[i]] = s[p[i]];
121
- }
122
- return t;
123
- }
124
-
125
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
126
- var e = new Error(message);
127
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
128
- };
129
-
130
98
  // Create a new logger instance
131
99
  const pinoLogger = Pino({
132
100
  formatters: {
@@ -234,7 +202,7 @@ function useActionCallback(fn, deps = []) {
234
202
  */
235
203
  function retainSnapshot(fn) {
236
204
  return (_a) => {
237
- var { snapshot } = _a, cb = __rest(_a, ["snapshot"]);
205
+ var { snapshot } = _a, cb = tslib.__rest(_a, ["snapshot"]);
238
206
  return async (...args) => {
239
207
  const release = snapshot.retain();
240
208
  try {
@@ -363,9 +331,17 @@ function useViewerCameraActions() {
363
331
  },
364
332
  }));
365
333
  }),
334
+ updateCameraType: useActionCallback(({ set }) => (type) => {
335
+ set(viewerCameraType, type);
336
+ }),
366
337
  };
367
338
  }
368
339
 
340
+ const viewerCameraType = recoil.atom({
341
+ key: 'viewerCameraType',
342
+ default: 'perspective',
343
+ });
344
+
369
345
  class CrossSectionInteractionHandler {
370
346
  constructor() {
371
347
  this.interactionStarted = false;
@@ -1005,22 +981,20 @@ var index$2 = /*#__PURE__*/Object.freeze({
1005
981
 
1006
982
  function useContextMenuActions() {
1007
983
  return {
1008
- pointerDown: useActionCallback(({ set }) => async (event, pointOverride) => {
1009
- var _a, _b;
984
+ pointerDown: useActionCallback(({ set }) => async (event) => {
1010
985
  if (event.button === 2) {
1011
- const xCoordinate = (_a = pointOverride === null || pointOverride === void 0 ? void 0 : pointOverride.x) !== null && _a !== void 0 ? _a : event.clientX;
1012
- const yCoordinate = (_b = pointOverride === null || pointOverride === void 0 ? void 0 : pointOverride.y) !== null && _b !== void 0 ? _b : event === null || event === void 0 ? void 0 : event.clientY;
986
+ const xCoordinate = event.clientX;
987
+ const yCoordinate = event === null || event === void 0 ? void 0 : event.clientY;
1013
988
  set(contextMenuPosition, geometry.Point.create(xCoordinate, yCoordinate));
1014
989
  set(contextMenuTarget, event.target);
1015
990
  }
1016
991
  }),
1017
- pointerUp: useActionCallback(({ snapshot, set }) => async (event, type, predicate, onOpen, pointOverride) => {
1018
- var _a, _b;
992
+ pointerUp: useActionCallback(({ snapshot, set }) => async (event, type, predicate, onOpen) => {
1019
993
  const downPosition = await snapshot.getPromise(contextMenuPosition);
1020
994
  const active = await snapshot.getPromise(contextMenuActive);
1021
995
  if (downPosition != null && active == null) {
1022
- const xCoordinate = (_a = pointOverride === null || pointOverride === void 0 ? void 0 : pointOverride.x) !== null && _a !== void 0 ? _a : event.clientX;
1023
- const yCoordinate = (_b = pointOverride === null || pointOverride === void 0 ? void 0 : pointOverride.y) !== null && _b !== void 0 ? _b : event === null || event === void 0 ? void 0 : event.clientY;
996
+ const xCoordinate = event.clientX;
997
+ const yCoordinate = event === null || event === void 0 ? void 0 : event.clientY;
1024
998
  const point = geometry.Point.create(xCoordinate, yCoordinate);
1025
999
  const pointDistance = downPosition != null ? geometry.Point.distance(downPosition, point) : 0;
1026
1000
  const predicateResult = predicate == null || predicate(event);
@@ -1322,6 +1296,18 @@ const useKeyBindings = ({ keydownRepeatInterval = 25, keydownIgnorePredicate = i
1322
1296
  }, [state.applyBindings, state.lastPressed]);
1323
1297
  };
1324
1298
 
1299
+ function useDefaultKeybindings() {
1300
+ useApplyKeyBinding({
1301
+ fn: useActionCallback(({ snapshot }) => async () => {
1302
+ const sceneProvider = await snapshot.getPromiseRequired(viewerSceneProvider);
1303
+ const animation = { milliseconds: 500 };
1304
+ const scene = await sceneProvider();
1305
+ await (scene === null || scene === void 0 ? void 0 : scene.camera().viewAll().render({ animation }));
1306
+ }),
1307
+ keyBind: 'f',
1308
+ });
1309
+ }
1310
+
1325
1311
  function useLongPress({ target, callback, delay = 500, onMovement, }) {
1326
1312
  const [longPressTimeout, setLongPressTimeout] = React__namespace.useState();
1327
1313
  const [touchStartPosition, setTouchStartPosition] = React__namespace.useState();
@@ -1368,6 +1354,7 @@ const VertexContextMenu = ({ targetElement, menuType, disableBackdrop, openPredi
1368
1354
  const activeContextMenu = recoil.useRecoilValue(contextMenuActive);
1369
1355
  const activePosition = recoil.useRecoilValue(contextMenuActivePosition);
1370
1356
  const fallbackPlacements = React.useMemo(() => ['bottom-end', 'top-start', 'top-end', 'right', 'left'], []);
1357
+ const isOpen = activeContextMenu === menuType;
1371
1358
  useStackKeyBinding({
1372
1359
  id: 'ContextMenu',
1373
1360
  keyBind: 'Escape',
@@ -1409,26 +1396,10 @@ const VertexContextMenu = ({ targetElement, menuType, disableBackdrop, openPredi
1409
1396
  }, [disableBackdrop, menuType, activeContextMenu]);
1410
1397
  React.useEffect(() => {
1411
1398
  const handlePointerDown = (event) => {
1412
- var _a, _b;
1413
- const pointerEvent = event;
1414
- const targetElement = target;
1415
- const boundingBox = targetElement != null
1416
- ? targetElement.getBoundingClientRect()
1417
- : undefined;
1418
- const xCoordinate = pointerEvent.clientX - ((_a = boundingBox === null || boundingBox === void 0 ? void 0 : boundingBox.x) !== null && _a !== void 0 ? _a : 0);
1419
- const yCoordinate = pointerEvent.clientY - ((_b = boundingBox === null || boundingBox === void 0 ? void 0 : boundingBox.y) !== null && _b !== void 0 ? _b : 0);
1420
- contextMenuActions.pointerDown(pointerEvent, geometry.Point.create(xCoordinate, yCoordinate));
1399
+ contextMenuActions.pointerDown(event);
1421
1400
  };
1422
1401
  const handlePointerUp = (event) => {
1423
- var _a, _b;
1424
- const pointerEvent = event;
1425
- const targetElement = target;
1426
- const boundingBox = targetElement != null
1427
- ? targetElement.getBoundingClientRect()
1428
- : undefined;
1429
- const xCoordinate = pointerEvent.clientX - ((_a = boundingBox === null || boundingBox === void 0 ? void 0 : boundingBox.x) !== null && _a !== void 0 ? _a : 0);
1430
- const yCoordinate = pointerEvent.clientY - ((_b = boundingBox === null || boundingBox === void 0 ? void 0 : boundingBox.y) !== null && _b !== void 0 ? _b : 0);
1431
- contextMenuActions.pointerUp(event, menuType, openPredicate, onOpen, geometry.Point.create(xCoordinate, yCoordinate));
1402
+ contextMenuActions.pointerUp(event, menuType, openPredicate, onOpen);
1432
1403
  };
1433
1404
  const handleContextMenu = (event) => contextMenuActions.contextMenu(event, openPredicate);
1434
1405
  target === null || target === void 0 ? void 0 : target.addEventListener('pointerdown', handlePointerDown);
@@ -1440,7 +1411,9 @@ const VertexContextMenu = ({ targetElement, menuType, disableBackdrop, openPredi
1440
1411
  target === null || target === void 0 ? void 0 : target.removeEventListener('contextmenu', handleContextMenu);
1441
1412
  };
1442
1413
  }, [targetElement, menuType, openPredicate]);
1443
- return (jsxRuntime.jsx(uiReact.VertexMenu, { "data-testid": `${menuType}-context-menu`, open: activeContextMenu === menuType, position: activePosition, fallbackPlacements: fallbackPlacements, backdrop: !disableBackdrop, onMenuClosed: () => {
1414
+ return (jsxRuntime.jsx(uiReact.VertexMenu, { className: classNames({
1415
+ hidden: !isOpen,
1416
+ }), "data-testid": `${menuType}-context-menu`, open: isOpen, position: activePosition, fallbackPlacements: fallbackPlacements, backdrop: !disableBackdrop, onMenuClosed: () => {
1444
1417
  contextMenuActions.clearActiveContextMenu();
1445
1418
  onClose === null || onClose === void 0 ? void 0 : onClose();
1446
1419
  }, children: jsxRuntime.jsx("div", { className: "pt-1", children: children }) }));
@@ -1723,66 +1696,63 @@ const VertexFlyToMenuItem = () => {
1723
1696
  }, disabled: currentItem == null, children: [jsxRuntime.jsx(uiReact.VertexIcon, { slot: "icon", name: "paper-airplane", size: "sm" }), jsxRuntime.jsx("div", { className: "pl-2", children: "Fly To" })] }));
1724
1697
  };
1725
1698
 
1726
- function useSceneItemsOperations({ viewerElement, }) {
1699
+ function useSceneItemsOperations() {
1700
+ const viewer = recoil.useRecoilValue(viewerElement);
1727
1701
  const sceneItemsOperation = React.useCallback(async (f, ids) => {
1728
- const scene = await (viewerElement === null || viewerElement === void 0 ? void 0 : viewerElement.scene());
1702
+ const scene = await (viewer === null || viewer === void 0 ? void 0 : viewer.scene());
1729
1703
  if (ids == null) {
1730
1704
  await (scene === null || scene === void 0 ? void 0 : scene.items((op) => f(op.where((q) => q.all()))).execute());
1731
1705
  }
1732
1706
  else if (ids.length > 0) {
1733
1707
  await (scene === null || scene === void 0 ? void 0 : scene.items((op) => f(op.where((q) => q.withItemIds(ids)))).execute());
1734
1708
  }
1735
- }, [viewerElement]);
1736
- useApplyKeyBinding({
1737
- fn: React.useCallback(async () => {
1738
- const animation = { milliseconds: 500 };
1739
- const scene = await (viewerElement === null || viewerElement === void 0 ? void 0 : viewerElement.scene());
1740
- await (scene === null || scene === void 0 ? void 0 : scene.camera().viewAll().render({ animation }));
1741
- }, [viewerElement]),
1742
- keyBind: 'f',
1743
- });
1709
+ }, [viewer]);
1744
1710
  const showOnlySelected = React.useCallback(async () => {
1745
- const scene = await (viewerElement === null || viewerElement === void 0 ? void 0 : viewerElement.scene());
1711
+ const scene = await (viewer === null || viewer === void 0 ? void 0 : viewer.scene());
1746
1712
  scene === null || scene === void 0 ? void 0 : scene.items((op) => [
1747
1713
  op.where((q) => q.all()).hide(),
1748
1714
  op.where((q) => q.withSelected()).show(),
1749
1715
  ]).execute();
1750
- }, [viewerElement]);
1716
+ }, [viewer]);
1751
1717
  const hideSelected = React.useCallback(async () => {
1752
- const scene = await (viewerElement === null || viewerElement === void 0 ? void 0 : viewerElement.scene());
1718
+ const scene = await (viewer === null || viewer === void 0 ? void 0 : viewer.scene());
1753
1719
  scene === null || scene === void 0 ? void 0 : scene.items((op) => [op.where((q) => q.withSelected()).hide()]).execute();
1754
- }, [viewerElement]);
1720
+ }, [viewer]);
1755
1721
  const showOnlyItem = React.useCallback(async (id) => {
1756
- const scene = await (viewerElement === null || viewerElement === void 0 ? void 0 : viewerElement.scene());
1722
+ const scene = await (viewer === null || viewer === void 0 ? void 0 : viewer.scene());
1757
1723
  scene === null || scene === void 0 ? void 0 : scene.items((op) => [
1758
1724
  op.where((q) => q.all()).hide(),
1759
1725
  op.where((q) => q.withItemIds([id])).show(),
1760
1726
  ]).execute();
1761
- }, [viewerElement]);
1727
+ }, [viewer]);
1728
+ const ghostSelected = React.useCallback(async () => {
1729
+ const scene = await (viewer === null || viewer === void 0 ? void 0 : viewer.scene());
1730
+ scene === null || scene === void 0 ? void 0 : scene.items((op) => [op.where((q) => q.withSelected()).setPhantom(true)]).execute();
1731
+ }, [viewer]);
1732
+ const unGhostSelected = React.useCallback(async () => {
1733
+ const scene = await (viewer === null || viewer === void 0 ? void 0 : viewer.scene());
1734
+ scene === null || scene === void 0 ? void 0 : scene.items((op) => [op.where((q) => q.withSelected()).setPhantom(false)]).execute();
1735
+ }, [viewer]);
1762
1736
  return {
1763
1737
  sceneItemsOperation,
1764
1738
  showOnlySelected,
1765
1739
  hideSelected,
1766
1740
  showOnlyItem,
1741
+ ghostSelected,
1742
+ unGhostSelected,
1767
1743
  };
1768
1744
  }
1769
1745
 
1770
1746
  const VertexHideAllMenuItem = () => {
1771
- const viewerHTMLElement = recoil.useRecoilValue(viewerElement);
1772
- const sceneItemOperations = useSceneItemsOperations({
1773
- viewerElement: viewerHTMLElement !== null && viewerHTMLElement !== void 0 ? viewerHTMLElement : null,
1774
- });
1747
+ const sceneItemOperations = useSceneItemsOperations();
1775
1748
  return (jsxRuntime.jsxs(uiReact.VertexMenuItem, { "data-testid": "hide-all-menu-option", onClick: () => {
1776
1749
  sceneItemOperations.sceneItemsOperation((builder) => builder.hide());
1777
1750
  }, children: [jsxRuntime.jsx(uiReact.VertexIcon, { slot: "icon", name: "visibility-hidden", size: "sm" }), jsxRuntime.jsx("div", { className: "pl-2", children: "Hide All Parts" })] }));
1778
1751
  };
1779
1752
 
1780
1753
  const VertexHidePartMenuItem = () => {
1781
- const viewerHTMLElement = recoil.useRecoilValue(viewerElement);
1782
1754
  const currentItem = recoil.useRecoilValue(contextMenuItem);
1783
- const sceneItemOperations = useSceneItemsOperations({
1784
- viewerElement: viewerHTMLElement !== null && viewerHTMLElement !== void 0 ? viewerHTMLElement : null,
1785
- });
1755
+ const sceneItemOperations = useSceneItemsOperations();
1786
1756
  return (jsxRuntime.jsxs(uiReact.VertexMenuItem, { "data-testid": "hide-menu-option", onClick: () => {
1787
1757
  var _a;
1788
1758
  const isRow = contextMenuItemIsRow(currentItem);
@@ -1794,30 +1764,21 @@ const VertexHidePartMenuItem = () => {
1794
1764
  };
1795
1765
 
1796
1766
  const VertexHideSelectedMenuItem = () => {
1797
- const viewerHTMLElement = recoil.useRecoilValue(viewerElement);
1798
1767
  const selectedItems = recoil.useRecoilValue(selectionSelectedItemIds);
1799
- const sceneItemOperations = useSceneItemsOperations({
1800
- viewerElement: viewerHTMLElement !== null && viewerHTMLElement !== void 0 ? viewerHTMLElement : null,
1801
- });
1768
+ const sceneItemOperations = useSceneItemsOperations();
1802
1769
  return (jsxRuntime.jsxs(uiReact.VertexMenuItem, { "data-testid": "hide-selected-menu-option", onClick: () => sceneItemOperations.hideSelected(), disabled: selectedItems.length === 0, children: [jsxRuntime.jsx(uiReact.VertexIcon, { slot: "icon", name: "visibility-hidden", size: "sm" }), jsxRuntime.jsx("div", { className: "pl-2", children: "Hide Selected" })] }));
1803
1770
  };
1804
1771
 
1805
1772
  const VertexShowAllMenuItem = () => {
1806
- const viewerHTMLElement = recoil.useRecoilValue(viewerElement);
1807
- const sceneItemOperations = useSceneItemsOperations({
1808
- viewerElement: viewerHTMLElement !== null && viewerHTMLElement !== void 0 ? viewerHTMLElement : null,
1809
- });
1773
+ const sceneItemOperations = useSceneItemsOperations();
1810
1774
  return (jsxRuntime.jsxs(uiReact.VertexMenuItem, { "data-testid": "show-all-menu-option", onClick: () => {
1811
1775
  sceneItemOperations.sceneItemsOperation((builder) => builder.show());
1812
1776
  }, children: [jsxRuntime.jsx(uiReact.VertexIcon, { slot: "icon", name: "visibility-visible", size: "sm" }), jsxRuntime.jsx("div", { className: "pl-2", children: "Show All Parts" })] }));
1813
1777
  };
1814
1778
 
1815
1779
  const VertexShowOnlyMenuItem = () => {
1816
- const viewerHTMLElement = recoil.useRecoilValue(viewerElement);
1817
1780
  const currentItem = recoil.useRecoilValue(contextMenuItem);
1818
- const sceneItemOperations = useSceneItemsOperations({
1819
- viewerElement: viewerHTMLElement !== null && viewerHTMLElement !== void 0 ? viewerHTMLElement : null,
1820
- });
1781
+ const sceneItemOperations = useSceneItemsOperations();
1821
1782
  return (jsxRuntime.jsxs(uiReact.VertexMenuItem, { "data-testid": "show-only-menu-option", onClick: () => {
1822
1783
  var _a;
1823
1784
  const isRow = contextMenuItemIsRow(currentItem);
@@ -1829,11 +1790,8 @@ const VertexShowOnlyMenuItem = () => {
1829
1790
  };
1830
1791
 
1831
1792
  const VertexShowOnlySelectedMenuItem = () => {
1832
- const viewerHTMLElement = recoil.useRecoilValue(viewerElement);
1833
1793
  const selectedItems = recoil.useRecoilValue(selectionSelectedItemIds);
1834
- const sceneItemOperations = useSceneItemsOperations({
1835
- viewerElement: viewerHTMLElement !== null && viewerHTMLElement !== void 0 ? viewerHTMLElement : null,
1836
- });
1794
+ const sceneItemOperations = useSceneItemsOperations();
1837
1795
  return (jsxRuntime.jsxs(uiReact.VertexMenuItem, { "data-testid": "show-only-selected-menu-option", onClick: () => sceneItemOperations.showOnlySelected(), disabled: selectedItems.length === 0, children: [jsxRuntime.jsx(uiReact.VertexIcon, { slot: "icon", name: "visibility-visible", size: "sm" }), jsxRuntime.jsx("div", { className: "pl-2", children: "Show Only Selected" })] }));
1838
1796
  };
1839
1797
 
@@ -1914,8 +1872,20 @@ function useSceneTreeActions() {
1914
1872
  };
1915
1873
  }
1916
1874
 
1875
+ const VertexGhostSelectedMenuItem = () => {
1876
+ const selectedItems = recoil.useRecoilValue(selectionSelectedItemIds);
1877
+ const sceneItemOperations = useSceneItemsOperations();
1878
+ return (jsxRuntime.jsxs(uiReact.VertexMenuItem, { "data-testid": "ghost-selected-menu-option", onClick: () => sceneItemOperations.ghostSelected(), disabled: selectedItems.length === 0, children: [jsxRuntime.jsx(uiReact.VertexIcon, { slot: "icon", name: "visibility-partial", size: "sm" }), jsxRuntime.jsx("div", { className: "pl-2", children: "Ghost Selected" })] }));
1879
+ };
1880
+
1881
+ const VertexUnghostSelectedMenuItem = () => {
1882
+ const selectedItems = recoil.useRecoilValue(selectionSelectedItemIds);
1883
+ const sceneItemOperations = useSceneItemsOperations();
1884
+ return (jsxRuntime.jsxs(uiReact.VertexMenuItem, { "data-testid": "unghost-selected-menu-option", onClick: () => sceneItemOperations.unGhostSelected(), disabled: selectedItems.length === 0, children: [jsxRuntime.jsx(uiReact.VertexIcon, { slot: "icon", name: "visibility-visible", size: "sm" }), jsxRuntime.jsx("div", { className: "pl-2", children: "Unghost Selected" })] }));
1885
+ };
1886
+
1917
1887
  const DefaultSceneTreeContextMenu = () => {
1918
- return (jsxRuntime.jsxs("div", { className: "w-56", children: [jsxRuntime.jsx(VertexHideSelectedMenuItem, {}), jsxRuntime.jsx(VertexHideAllMenuItem, {}), jsxRuntime.jsx(VertexShowOnlyMenuItem, {}), jsxRuntime.jsx(VertexShowOnlySelectedMenuItem, {}), jsxRuntime.jsx(VertexShowAllMenuItem, {}), jsxRuntime.jsx(uiReact.VertexMenuDivider, { className: "md:contents hidden short:hidden" }), jsxRuntime.jsx(VertexFitSelectedMenuItem, {}), jsxRuntime.jsx(VertexFlyToMenuItem, {})] }));
1888
+ return (jsxRuntime.jsxs("div", { className: "w-56", children: [jsxRuntime.jsx(VertexHideSelectedMenuItem, {}), jsxRuntime.jsx(VertexHideAllMenuItem, {}), jsxRuntime.jsx(VertexShowOnlyMenuItem, {}), jsxRuntime.jsx(VertexShowOnlySelectedMenuItem, {}), jsxRuntime.jsx(VertexShowAllMenuItem, {}), jsxRuntime.jsx(VertexGhostSelectedMenuItem, {}), jsxRuntime.jsx(VertexUnghostSelectedMenuItem, {}), jsxRuntime.jsx(uiReact.VertexMenuDivider, {}), jsxRuntime.jsx(VertexFitSelectedMenuItem, {}), jsxRuntime.jsx(VertexFlyToMenuItem, {})] }));
1919
1889
  };
1920
1890
 
1921
1891
  const VertexSceneTreeContextMenu = ({ children, }) => {
@@ -1929,7 +1899,7 @@ const VertexSceneTreeContextMenu = ({ children, }) => {
1929
1899
  };
1930
1900
 
1931
1901
  const DefaultViewerContextMenu = () => {
1932
- return (jsxRuntime.jsxs("div", { className: "w-56", children: [jsxRuntime.jsx(VertexHidePartMenuItem, {}), jsxRuntime.jsx(VertexHideSelectedMenuItem, {}), jsxRuntime.jsx(VertexHideAllMenuItem, {}), jsxRuntime.jsx(VertexShowOnlyMenuItem, {}), jsxRuntime.jsx(VertexShowOnlySelectedMenuItem, {}), jsxRuntime.jsx(VertexShowAllMenuItem, {}), jsxRuntime.jsx(uiReact.VertexMenuDivider, { className: "md:contents hidden short:hidden" }), jsxRuntime.jsx(VertexFitSelectedMenuItem, {}), jsxRuntime.jsx(VertexFlyToMenuItem, {})] }));
1902
+ return (jsxRuntime.jsxs("div", { className: "w-56", children: [jsxRuntime.jsx(VertexHidePartMenuItem, {}), jsxRuntime.jsx(VertexHideSelectedMenuItem, {}), jsxRuntime.jsx(VertexHideAllMenuItem, {}), jsxRuntime.jsx(VertexShowOnlyMenuItem, {}), jsxRuntime.jsx(VertexShowOnlySelectedMenuItem, {}), jsxRuntime.jsx(VertexShowAllMenuItem, {}), jsxRuntime.jsx(VertexGhostSelectedMenuItem, {}), jsxRuntime.jsx(VertexUnghostSelectedMenuItem, {}), jsxRuntime.jsx(uiReact.VertexMenuDivider, {}), jsxRuntime.jsx(VertexFitSelectedMenuItem, {}), jsxRuntime.jsx(VertexFlyToMenuItem, {})] }));
1933
1903
  };
1934
1904
 
1935
1905
  const VertexViewerContextMenu = ({ children }) => {
@@ -2003,6 +1973,11 @@ function VertexSceneTreeToolbar() {
2003
1973
  return (jsxRuntime.jsx(viewerReact.VertexSceneTreeToolbar, { className: "h-10 border-b border-neutral-300 box-border", children: jsxRuntime.jsxs("div", { className: "flex flex-shrink-0 w-full text-neutral-700 items-center gap mx-2", children: [jsxRuntime.jsx(VertexSceneTreeExpandAll, {}), jsxRuntime.jsx(VertexSceneTreeCollapseAll, {})] }) }));
2004
1974
  }
2005
1975
 
1976
+ const VertexSceneTreeHeader = ({ children }) => {
1977
+ const hasDefinedChildren = children != null && children !== false;
1978
+ return (jsxRuntime.jsx("div", { slot: "header", className: "flex flex-col", children: hasDefinedChildren ? (children) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(viewerReact.VertexSceneTreeSearch, { className: "border-b border-neutral-300" }), jsxRuntime.jsx(VertexSceneTreeToolbar, {})] })) }));
1979
+ };
1980
+
2006
1981
  const DEFAULT_NAME_COLUMN = {
2007
1982
  binding: '{{row.node.name}}',
2008
1983
  label: 'Name',
@@ -2082,7 +2057,7 @@ const VertexSceneTreeTableLayout = (sdkProps) => {
2082
2057
  };
2083
2058
 
2084
2059
  const VertexSceneTree = (_a) => {
2085
- var { id, font, backgroundColors, children, style, onPointerDown, onClick, onToggleSelection, onToggleExpansion, onToggleVisibility, className, rowData } = _a, sdkProps = __rest(_a, ["id", "font", "backgroundColors", "children", "style", "onPointerDown", "onClick", "onToggleSelection", "onToggleExpansion", "onToggleVisibility", "className", "rowData"]);
2060
+ var { id, font, backgroundColors, children, style, onPointerDown, onClick, onToggleSelection, onToggleExpansion, onToggleVisibility, className, rowData } = _a, sdkProps = tslib.__rest(_a, ["id", "font", "backgroundColors", "children", "style", "onPointerDown", "onClick", "onToggleSelection", "onToggleExpansion", "onToggleVisibility", "className", "rowData"]);
2086
2061
  const config = recoil.useRecoilValue(sdkConfig);
2087
2062
  const selectionActions = useSelectionActions();
2088
2063
  const sceneTreeActions = useSceneTreeActions();
@@ -2090,6 +2065,7 @@ const VertexSceneTree = (_a) => {
2090
2065
  const callbackRef = useRecoilRef({
2091
2066
  state: sceneTreeElement,
2092
2067
  });
2068
+ const hasDefinedChildren = children != null && children !== false;
2093
2069
  const wrappedExpansionHandler = (event, node, tree) => {
2094
2070
  sceneTreeActions.toggleExpansion(event, node, tree);
2095
2071
  onToggleExpansion === null || onToggleExpansion === void 0 ? void 0 : onToggleExpansion(event, node, tree);
@@ -2114,13 +2090,13 @@ const VertexSceneTree = (_a) => {
2114
2090
  }
2115
2091
  onPointerDown === null || onPointerDown === void 0 ? void 0 : onPointerDown(event);
2116
2092
  };
2117
- return (jsxRuntime.jsx("div", { className: "flex flex-col w-full h-full", children: jsxRuntime.jsx("div", { className: "flex group h-full", children: jsxRuntime.jsxs(viewerReact.VertexSceneTree, Object.assign({ id: id !== null && id !== void 0 ? id : 'vertex-scene-tree', "data-testid": "vertex-scene-tree", config: config, ref: callbackRef, className: classNames('flex-1', className), style: Object.assign(Object.assign(Object.assign({}, styleFromOptionalFont(font)), styleFromOptionalBackgroundColors(backgroundColors)), style), onConnectionError: (e) => {
2093
+ return (jsxRuntime.jsx("div", { className: classNames('flex flex-col w-full h-full', className), children: jsxRuntime.jsx("div", { className: "flex group h-full", children: jsxRuntime.jsx(viewerReact.VertexSceneTree, Object.assign({ id: id !== null && id !== void 0 ? id : 'vertex-scene-tree', "data-testid": "vertex-scene-tree", config: config, ref: callbackRef, className: "flex-1", style: Object.assign(Object.assign(Object.assign({}, styleFromOptionalFont(font)), styleFromOptionalBackgroundColors(backgroundColors)), style), onConnectionError: (e) => {
2118
2094
  logger.error('Scene Tree Connection Error: ', e.detail);
2119
2095
  }, viewer: viewer, onPointerDown: handlePointerDown, onClick: handleClick, rowData: (row) => {
2120
2096
  var _a;
2121
2097
  const providedRowData = (_a = rowData === null || rowData === void 0 ? void 0 : rowData(row)) !== null && _a !== void 0 ? _a : {};
2122
2098
  return Object.assign({ handleExpansion: wrappedExpansionHandler, handleSelection: wrappedSelectionHandler, handleVisibility: wrappedVisibilityHandler }, providedRowData);
2123
- } }, sdkProps, { children: [jsxRuntime.jsx(VertexSceneTreeToolbar, {}), jsxRuntime.jsx(VertexSceneTreeTableLayout, {}), children] })) }) }));
2099
+ } }, sdkProps, { children: hasDefinedChildren ? (children) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(VertexSceneTreeHeader, {}), jsxRuntime.jsx(VertexSceneTreeTableLayout, {}), jsxRuntime.jsx(VertexSceneTreeContextMenu, {})] })) })) }) }));
2124
2100
  };
2125
2101
 
2126
2102
  const useSynchronizedProp = (state, value) => {
@@ -2131,7 +2107,7 @@ const useSynchronizedProp = (state, value) => {
2131
2107
  };
2132
2108
 
2133
2109
  const VertexPopupButton = (_a) => {
2134
- var { open, children } = _a, uiProps = __rest(_a, ["open", "children"]);
2110
+ var { open, children } = _a, uiProps = tslib.__rest(_a, ["open", "children"]);
2135
2111
  const anchor = children.find((c) => c.type === Anchor);
2136
2112
  const others = children.filter((c) => c.type !== Anchor);
2137
2113
  if (anchor == null) {
@@ -2147,7 +2123,7 @@ const Anchor = ({ tooltipContent, children }) => {
2147
2123
  VertexPopupButton.Anchor = Anchor;
2148
2124
 
2149
2125
  const VertexSlider = (_a) => {
2150
- var { value, defaultValue, onChange, onValueChange, onValueInput } = _a, uiProps = __rest(_a, ["value", "defaultValue", "onChange", "onValueChange", "onValueInput"]);
2126
+ var { value, defaultValue, onChange, onValueChange, onValueInput } = _a, uiProps = tslib.__rest(_a, ["value", "defaultValue", "onChange", "onValueChange", "onValueInput"]);
2151
2127
  const [displayedValue, setDisplayedValue] = React.useState(defaultValue);
2152
2128
  return (jsxRuntime.jsx(uiReact.VertexSlider, Object.assign({ className: "w-52 mx-2 items-center", value: value !== null && value !== void 0 ? value : displayedValue, onValueChange: (e) => {
2153
2129
  setDisplayedValue(e.detail.value);
@@ -2487,8 +2463,33 @@ const BoxSelectionTool = () => {
2487
2463
  return (jsxRuntime.jsx(viewerReact.VertexViewerBoxQueryTool, { ref: callback, "data-testid": "viewer-box-query-tool", operationType: operationType }));
2488
2464
  };
2489
2465
 
2466
+ function VertexViewerCameraTypeMenu({ open, onOpen, onDismiss, onCameraTypeChange, }) {
2467
+ const cameraActions = useViewerCameraActions();
2468
+ const cameraType = recoil.useRecoilValue(viewerCameraType);
2469
+ return (jsxRuntime.jsxs(uiReact.VertexMenu, { "data-testid": "camera-types-popover", className: "flex", placement: "bottom-end", open: open, onMenuClosed: onDismiss, children: [jsxRuntime.jsx("div", { slot: "anchor", children: jsxRuntime.jsx("div", { className: classNames('flex bg-white hover:opacity-100 hover:text-neutral-700 hover:bg-neutral-200 rounded', {
2470
+ 'opacity-70 text-neutral-900': !open,
2471
+ 'opacity-100 text-neutral-700 bg-neutral-200': open,
2472
+ }), children: jsxRuntime.jsx(uiReact.VertexTooltip, { content: "Change View", children: jsxRuntime.jsx(uiReact.VertexIconButton, { "data-testid": "set-camera-mode-option", className: "p-1 cursor-pointer", variant: "plain", onClick: onOpen, iconName: cameraType === 'orthographic'
2473
+ ? 'cube-orthographic'
2474
+ : 'cube-perspective', children: jsxRuntime.jsx(uiReact.VertexIcon, { "data-testid": "change-camera-type-icon-button", name: "chevron-down", size: "sm" }) }) }) }) }), jsxRuntime.jsxs("div", { className: "w-36", children: [jsxRuntime.jsx("div", { className: "pt-1" }), jsxRuntime.jsxs(uiReact.VertexMenuItem, { "data-testid": "set-perspective-view", onClick: () => {
2475
+ cameraActions.updateCameraType('perspective');
2476
+ onCameraTypeChange === null || onCameraTypeChange === void 0 ? void 0 : onCameraTypeChange('perspective');
2477
+ }, children: [jsxRuntime.jsx(uiReact.VertexIcon, { slot: "icon", "data-testid": "set-perspective-view-icon", name: "cube-perspective", size: "sm", className: classNames({
2478
+ 'text-[var(--vertex-ui-blue-700)]': cameraType === 'perspective',
2479
+ }) }), jsxRuntime.jsx("div", { className: classNames('ml-2 items-center', {
2480
+ 'text-[var(--vertex-ui-blue-700)]': cameraType === 'perspective',
2481
+ }), children: "Perspective" })] }), jsxRuntime.jsxs(uiReact.VertexMenuItem, { "data-testid": "set-orthographic-view", onClick: () => {
2482
+ cameraActions.updateCameraType('orthographic');
2483
+ onCameraTypeChange === null || onCameraTypeChange === void 0 ? void 0 : onCameraTypeChange('orthographic');
2484
+ }, children: [jsxRuntime.jsx(uiReact.VertexIcon, { slot: "icon", "data-testid": "set-orthographic-view-icon", name: "cube-orthographic", size: "sm", className: classNames({
2485
+ 'text-[var(--vertex-ui-blue-700)]': cameraType === 'orthographic',
2486
+ }) }), jsxRuntime.jsx("div", { className: classNames('ml-2 items-center', {
2487
+ 'text-[var(--vertex-ui-blue-700)]': cameraType === 'orthographic',
2488
+ }), children: "Orthographic" })] })] })] }));
2489
+ }
2490
+
2490
2491
  const VertexViewerViewCube = (_a) => {
2491
- var { placement, children } = _a, sdkProps = __rest(_a, ["placement", "children"]);
2492
+ var { placement, children } = _a, sdkProps = tslib.__rest(_a, ["placement", "children"]);
2492
2493
  const childrenAsArray = Array.isArray(children)
2493
2494
  ? children
2494
2495
  : [children];
@@ -2496,26 +2497,34 @@ const VertexViewerViewCube = (_a) => {
2496
2497
  .filter((c) => !React.isValidElement(c) || c.type !== viewerReact.VertexViewerViewCube)
2497
2498
  .filter((c) => c != null && c !== false);
2498
2499
  const viewCube = childrenAsArray.find((c) => React.isValidElement(c) && c.type === viewerReact.VertexViewerViewCube);
2499
- return (jsxRuntime.jsxs(viewerReact.VertexViewerToolbar, { direction: "vertical", "data-testid": "view-cube-toolbar", placement: placement !== null && placement !== void 0 ? placement : 'top-right', children: [viewCube !== null && viewCube !== void 0 ? viewCube : jsxRuntime.jsx(viewerReact.VertexViewerViewCube, Object.assign({ className: "m-7" }, sdkProps)), definedChildrenWithoutViewCube.length === 0 ? (jsxRuntime.jsx("div", { className: "flex items-center justify-center mt-3", children: jsxRuntime.jsx(VertexViewerSceneReset, {}) })) : (jsxRuntime.jsx("div", { className: "mt-3", children: definedChildrenWithoutViewCube }))] }));
2500
+ const [cameraMenuOpen, setCameraMenuOpen] = React.useState(false);
2501
+ return (jsxRuntime.jsxs(viewerReact.VertexViewerToolbar, { direction: "vertical", "data-testid": "view-cube-toolbar", placement: placement !== null && placement !== void 0 ? placement : 'top-right', children: [viewCube !== null && viewCube !== void 0 ? viewCube : jsxRuntime.jsx(viewerReact.VertexViewerViewCube, Object.assign({ className: "m-7" }, sdkProps)), definedChildrenWithoutViewCube.length === 0 ? (jsxRuntime.jsxs("div", { className: "flex items-center justify-center mt-3 gap-1", children: [jsxRuntime.jsx(VertexViewerSceneReset, {}), jsxRuntime.jsx(VertexViewerCameraTypeMenu, { open: cameraMenuOpen, onDismiss: () => setCameraMenuOpen(false), onOpen: () => setCameraMenuOpen(true) })] })) : (jsxRuntime.jsx("div", { className: "mt-3", children: definedChildrenWithoutViewCube }))] }));
2500
2502
  };
2501
2503
 
2502
2504
  const VertexViewer = (_a) => {
2503
- var { id, disableSelection, onTap, onLongpress, onFrameDrawn, viewerRefCallback, children } = _a, sdkProps = __rest(_a, ["id", "disableSelection", "onTap", "onLongpress", "onFrameDrawn", "viewerRefCallback", "children"]);
2505
+ var { id, className, disableSelection, onTap, onLongpress, onFrameDrawn, viewerRefCallback, children } = _a, sdkProps = tslib.__rest(_a, ["id", "className", "disableSelection", "onTap", "onLongpress", "onFrameDrawn", "viewerRefCallback", "children"]);
2504
2506
  const config = recoil.useRecoilValue(sdkConfig);
2505
2507
  const callbackRef = useRecoilRef({
2506
2508
  state: viewerElement,
2507
2509
  });
2508
- const currentCrossSectionAlignment = recoil.useRecoilValue(crossSectioningAlignment);
2509
- const [sceneReady, setSceneReady] = recoil.useRecoilState(viewerInitialSceneReady);
2510
- const isBoxSelectionEnabled = recoil.useRecoilValue(boxSelectionEnabled);
2511
- const viewerFrameActions = useViewerFrameActions();
2510
+ const cameraActions = useViewerCameraActions();
2512
2511
  const hitActions = useHitActions();
2513
2512
  const selectionActions = useSelectionActions();
2513
+ const viewerFrameActions = useViewerFrameActions();
2514
+ const [sceneReady, setSceneReady] = recoil.useRecoilState(viewerInitialSceneReady);
2515
+ const cameraType = recoil.useRecoilValue(viewerCameraType);
2516
+ const currentCrossSectionAlignment = recoil.useRecoilValue(crossSectioningAlignment);
2517
+ const isBoxSelectionEnabled = recoil.useRecoilValue(boxSelectionEnabled);
2514
2518
  const hasDefinedChildren = children != null && children !== false;
2515
2519
  useKeyBindings();
2516
- return (jsxRuntime.jsxs(viewerReact.VertexViewer, Object.assign({ id: id !== null && id !== void 0 ? id : 'vertex-viewer', "data-testid": "vertex-viewer", ref: viewerRefCallback !== null && viewerRefCallback !== void 0 ? viewerRefCallback : callbackRef, className: classNames('flex w-full h-full', {
2520
+ useDefaultKeybindings();
2521
+ return (jsxRuntime.jsxs(viewerReact.VertexViewer, Object.assign({ id: id !== null && id !== void 0 ? id : 'vertex-viewer', "data-testid": "vertex-viewer", ref: viewerRefCallback !== null && viewerRefCallback !== void 0 ? viewerRefCallback : callbackRef, className: classNames('flex w-full h-full', className, {
2517
2522
  'cursor-crosshair': currentCrossSectionAlignment.hitPending,
2518
- }), config: config, onTap: (e) => {
2523
+ }), config: config, cameraType: sceneReady ? cameraType : undefined, onCameraTypeChanged: (e) => {
2524
+ if (sceneReady) {
2525
+ cameraActions.updateCameraType(e.detail);
2526
+ }
2527
+ }, onTap: (e) => {
2519
2528
  const actions = [
2520
2529
  ...(disableSelection ? [] : [selectionActions.selectCurrentHit]),
2521
2530
  ];
@@ -2531,7 +2540,7 @@ const VertexViewer = (_a) => {
2531
2540
  if (!sceneReady) {
2532
2541
  setSceneReady(true);
2533
2542
  }
2534
- }, children: [isBoxSelectionEnabled && jsxRuntime.jsx(BoxSelectionTool, {}), hasDefinedChildren ? (children) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(VertexViewerViewCube, {}), jsxRuntime.jsx(VertexToolbar, {})] }))] })));
2543
+ }, children: [isBoxSelectionEnabled && jsxRuntime.jsx(BoxSelectionTool, {}), hasDefinedChildren ? (children) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(VertexViewerViewCube, {}), jsxRuntime.jsx(VertexToolbar, {}), jsxRuntime.jsx(VertexViewerContextMenu, {})] }))] })));
2535
2544
  };
2536
2545
 
2537
2546
  function toSdkConfig(config) {
@@ -2561,9 +2570,10 @@ const VertexViewerToolkitEventListener = ({ onHitStateChange, onSelectionStateCh
2561
2570
  };
2562
2571
 
2563
2572
  const VertexViewerToolkitRoot = (_a) => {
2564
- var { override, children, config } = _a, eventWrapperProps = __rest(_a, ["override", "children", "config"]);
2573
+ var { override, children, config } = _a, eventWrapperProps = tslib.__rest(_a, ["override", "children", "config"]);
2565
2574
  React.useEffect(() => {
2566
2575
  loader.defineCustomElements();
2576
+ loader$1.defineCustomElements();
2567
2577
  }, []);
2568
2578
  return (jsxRuntime.jsx(recoil.RecoilRoot, { override: override, children: jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(VertexViewerToolkitEventListener, Object.assign({}, eventWrapperProps)), jsxRuntime.jsx(VertexViewerToolkitRootConfig, { config: config, children: children })] }) }));
2569
2579
  };
@@ -2597,6 +2607,7 @@ exports.VertexResizableContent = VertexResizableContent;
2597
2607
  exports.VertexRotateButton = VertexRotateButton;
2598
2608
  exports.VertexSceneTree = VertexSceneTree;
2599
2609
  exports.VertexSceneTreeContextMenu = VertexSceneTreeContextMenu;
2610
+ exports.VertexSceneTreeHeader = VertexSceneTreeHeader;
2600
2611
  exports.VertexSceneTreeTableLayout = VertexSceneTreeTableLayout;
2601
2612
  exports.VertexShowAllMenuItem = VertexShowAllMenuItem;
2602
2613
  exports.VertexShowOnlyMenuItem = VertexShowOnlyMenuItem;