@vertexvis/viewer-toolkit-react 0.0.1

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.
Files changed (134) hide show
  1. package/dist/bundle.cjs.js +2525 -0
  2. package/dist/bundle.cjs.js.map +1 -0
  3. package/dist/bundle.esm.js +2479 -0
  4. package/dist/bundle.esm.js.map +1 -0
  5. package/dist/components/box-selection/__tests__/box-selection-button.spec.d.ts +1 -0
  6. package/dist/components/box-selection/__tests__/box-selection-tool.spec.d.ts +1 -0
  7. package/dist/components/box-selection/box-selection-button.d.ts +1 -0
  8. package/dist/components/box-selection/box-selection-tool.d.ts +1 -0
  9. package/dist/components/common/__tests__/slider.spec.d.ts +1 -0
  10. package/dist/components/common/popup-button.d.ts +14 -0
  11. package/dist/components/common/slider.d.ts +10 -0
  12. package/dist/components/context-menu/__tests__/scene-tree-context-menu.spec.d.ts +1 -0
  13. package/dist/components/context-menu/__tests__/viewer-context-menu.spec.d.ts +1 -0
  14. package/dist/components/context-menu/context-menu.d.ts +13 -0
  15. package/dist/components/context-menu/default-scene-tree-context-menu.d.ts +1 -0
  16. package/dist/components/context-menu/default-viewer-context-menu.d.ts +1 -0
  17. package/dist/components/context-menu/menu-items/fit-selected-menu-item.d.ts +1 -0
  18. package/dist/components/context-menu/menu-items/fly-to-menu-item.d.ts +1 -0
  19. package/dist/components/context-menu/menu-items/hide-all-menu-item.d.ts +1 -0
  20. package/dist/components/context-menu/menu-items/hide-part-menu-item.d.ts +1 -0
  21. package/dist/components/context-menu/menu-items/hide-selected-menu-item.d.ts +1 -0
  22. package/dist/components/context-menu/menu-items/show-all-menu-item.d.ts +1 -0
  23. package/dist/components/context-menu/menu-items/show-only-menu-item.d.ts +1 -0
  24. package/dist/components/context-menu/menu-items/show-only-selected-menu-item.d.ts +1 -0
  25. package/dist/components/context-menu/scene-tree-context-menu.d.ts +5 -0
  26. package/dist/components/context-menu/viewer-context-menu.d.ts +5 -0
  27. package/dist/components/scene-tree/__tests__/vertex-scene-tree-table-layout.spec.d.ts +1 -0
  28. package/dist/components/scene-tree/__tests__/vertex-scene-tree.spec.d.ts +1 -0
  29. package/dist/components/scene-tree/vertex-scene-tree-table-layout.d.ts +3 -0
  30. package/dist/components/scene-tree/vertex-scene-tree.d.ts +14 -0
  31. package/dist/components/toolbar/__tests__/toolbar.spec.d.ts +1 -0
  32. package/dist/components/toolbar/cross-section/__tests__/cross-section-alignment-popover-menu.spec.d.ts +1 -0
  33. package/dist/components/toolbar/cross-section/__tests__/cross-section-axis-popover-menu.spec.d.ts +1 -0
  34. package/dist/components/toolbar/cross-section/__tests__/cross-section-offset-stepper.spec.d.ts +1 -0
  35. package/dist/components/toolbar/cross-section/__tests__/cross-section.spec.d.ts +1 -0
  36. package/dist/components/toolbar/cross-section/cross-section-alignment-popover-menu.d.ts +1 -0
  37. package/dist/components/toolbar/cross-section/cross-section-axis-popover-menu.d.ts +1 -0
  38. package/dist/components/toolbar/cross-section/cross-section-offset-stepper.d.ts +9 -0
  39. package/dist/components/toolbar/cross-section/cross-section-popup-menu.d.ts +6 -0
  40. package/dist/components/toolbar/cross-section/cross-section.d.ts +8 -0
  41. package/dist/components/toolbar/default-toolbar.d.ts +1 -0
  42. package/dist/components/toolbar/fit-all.d.ts +1 -0
  43. package/dist/components/toolbar/pan.d.ts +1 -0
  44. package/dist/components/toolbar/rotate.d.ts +1 -0
  45. package/dist/components/toolbar/toolbar-divider.d.ts +1 -0
  46. package/dist/components/toolbar/toolbar.d.ts +5 -0
  47. package/dist/components/toolbar/zoom.d.ts +1 -0
  48. package/dist/components/viewer/__tests__/vertex-viewer-view-cube.spec.d.ts +1 -0
  49. package/dist/components/viewer/__tests__/vertex-viewer.spec.d.ts +1 -0
  50. package/dist/components/viewer/vertex-viewer-view-cube.d.ts +7 -0
  51. package/dist/components/viewer/vertex-viewer.d.ts +9 -0
  52. package/dist/events-listener.d.ts +7 -0
  53. package/dist/index.css +7 -0
  54. package/dist/index.d.ts +28 -0
  55. package/dist/root.d.ts +9 -0
  56. package/dist/state/box-selection/actions.d.ts +7 -0
  57. package/dist/state/box-selection/box-selection.d.ts +3 -0
  58. package/dist/state/box-selection/index.d.ts +2 -0
  59. package/dist/state/config/config.d.ts +2 -0
  60. package/dist/state/config/index.d.ts +1 -0
  61. package/dist/state/context-menu/actions.d.ts +13 -0
  62. package/dist/state/context-menu/backdrop.d.ts +2 -0
  63. package/dist/state/context-menu/context-menu.d.ts +13 -0
  64. package/dist/state/context-menu/index.d.ts +3 -0
  65. package/dist/state/cross-section/__tests__/actions.spec.d.ts +1 -0
  66. package/dist/state/cross-section/actions.d.ts +24 -0
  67. package/dist/state/cross-section/cross-section.d.ts +30 -0
  68. package/dist/state/cross-section/index.d.ts +2 -0
  69. package/dist/state/hits/__tests__/hits.spec.d.ts +1 -0
  70. package/dist/state/hits/actions.d.ts +6 -0
  71. package/dist/state/hits/event-state.d.ts +9 -0
  72. package/dist/state/hits/hits.d.ts +17 -0
  73. package/dist/state/hits/index.d.ts +3 -0
  74. package/dist/state/keybinding/__tests__/long-press.spec.d.ts +1 -0
  75. package/dist/state/keybinding/index.d.ts +3 -0
  76. package/dist/state/keybinding/keybinding.d.ts +151 -0
  77. package/dist/state/keybinding/long-press.d.ts +7 -0
  78. package/dist/state/keybinding/targets.d.ts +2 -0
  79. package/dist/state/performance/index.d.ts +1 -0
  80. package/dist/state/performance/types.d.ts +37 -0
  81. package/dist/state/scene-tree/columns/columns.d.ts +16 -0
  82. package/dist/state/scene-tree/columns/index.d.ts +1 -0
  83. package/dist/state/scene-tree/core/__tests__/actions.spec.d.ts +1 -0
  84. package/dist/state/scene-tree/core/actions.d.ts +9 -0
  85. package/dist/state/scene-tree/core/core.d.ts +5 -0
  86. package/dist/state/scene-tree/core/index.d.ts +2 -0
  87. package/dist/state/scene-tree/index.d.ts +1 -0
  88. package/dist/state/scene-tree/types.d.ts +14 -0
  89. package/dist/state/selection/__tests__/actions.spec.d.ts +1 -0
  90. package/dist/state/selection/actions.d.ts +25 -0
  91. package/dist/state/selection/event-state.d.ts +8 -0
  92. package/dist/state/selection/index.d.ts +3 -0
  93. package/dist/state/selection/selection.d.ts +16 -0
  94. package/dist/state/viewer/camera/actions.d.ts +7 -0
  95. package/dist/state/viewer/camera/index.d.ts +1 -0
  96. package/dist/state/viewer/core/core.d.ts +5 -0
  97. package/dist/state/viewer/core/index.d.ts +1 -0
  98. package/dist/state/viewer/frame/actions.d.ts +5 -0
  99. package/dist/state/viewer/index.d.ts +3 -0
  100. package/dist/state/viewer/scene/actions.d.ts +14 -0
  101. package/dist/state/viewer/scene/index.d.ts +2 -0
  102. package/dist/state/viewer/scene/item-operations.d.ts +11 -0
  103. package/dist/state/viewer/scene/scene.d.ts +6 -0
  104. package/dist/testing/__setup__/mocks.d.ts +4 -0
  105. package/dist/testing/additional-hooks-wrapper.d.ts +19 -0
  106. package/dist/testing/react.d.ts +13 -0
  107. package/dist/testing/recoil-observer.d.ts +6 -0
  108. package/dist/testing/recoil-state.d.ts +5 -0
  109. package/dist/testing/recoil-wrapper.d.ts +21 -0
  110. package/dist/testing/viewer.d.ts +72 -0
  111. package/dist/util/camera/__tests__/camera.spec.d.ts +1 -0
  112. package/dist/util/camera/camera.d.ts +3 -0
  113. package/dist/util/cross-section/__tests__/interaction-handler.spec.d.ts +1 -0
  114. package/dist/util/cross-section/__tests__/section-plane.spec.d.ts +1 -0
  115. package/dist/util/cross-section/interaction-handler.d.ts +10 -0
  116. package/dist/util/cross-section/section-plane.d.ts +61 -0
  117. package/dist/util/dom/elements.d.ts +1 -0
  118. package/dist/util/geometry/__tests__/bounding-box.spec.d.ts +1 -0
  119. package/dist/util/geometry/__tests__/vector3.spec.d.ts +1 -0
  120. package/dist/util/geometry/bounding-box.d.ts +4 -0
  121. package/dist/util/geometry/vector3.d.ts +2 -0
  122. package/dist/util/logging/__tests__/logger.spec.d.ts +1 -0
  123. package/dist/util/logging/logger.d.ts +8 -0
  124. package/dist/util/measurement/units.d.ts +57 -0
  125. package/dist/util/recoil/__tests__/actions.spec.d.ts +1 -0
  126. package/dist/util/recoil/actions.d.ts +86 -0
  127. package/dist/util/recoil/reducer.d.ts +9 -0
  128. package/dist/util/recoil/synchronized-prop.d.ts +2 -0
  129. package/dist/util/refs/callback-ref.d.ts +10 -0
  130. package/dist/util/refs/recoil-ref.d.ts +6 -0
  131. package/dist/util/scene-tree/customization.d.ts +3 -0
  132. package/dist/util/sdk-mapping/__tests__/config.spec.d.ts +1 -0
  133. package/dist/util/sdk-mapping/config.d.ts +2 -0
  134. package/package.json +80 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.cjs.js","sources":["../src/util/recoil/reducer.ts","../src/state/keybinding/targets.ts","../src/state/keybinding/keybinding.ts","../src/state/keybinding/long-press.ts","../src/state/context-menu/context-menu.ts","../src/util/logging/logger.ts","../src/util/recoil/actions.ts","../src/state/viewer/core/core.ts","../src/state/viewer/scene/scene.ts","../src/state/viewer/scene/actions.ts","../src/state/viewer/camera/actions.ts","../src/util/cross-section/interaction-handler.ts","../src/util/cross-section/section-plane.ts","../src/util/geometry/bounding-box.ts","../src/state/cross-section/cross-section.ts","../src/state/hits/hits.ts","../src/util/camera/camera.ts","../src/util/geometry/vector3.ts","../src/state/cross-section/actions.ts","../src/state/hits/actions.ts","../src/state/hits/event-state.ts","../src/state/context-menu/actions.ts","../src/state/context-menu/backdrop.ts","../src/components/context-menu/context-menu.tsx","../src/state/performance/types.ts","../src/state/selection/selection.ts","../src/state/selection/actions.ts","../src/state/selection/event-state.ts","../src/state/scene-tree/core/core.ts","../src/state/scene-tree/core/actions.ts","../src/state/viewer/scene/item-operations.ts","../src/components/context-menu/menu-items/hide-selected-menu-item.tsx","../src/components/context-menu/menu-items/hide-all-menu-item.tsx","../src/components/context-menu/menu-items/show-only-menu-item.tsx","../src/components/context-menu/menu-items/show-only-selected-menu-item.tsx","../src/components/context-menu/menu-items/show-all-menu-item.tsx","../src/components/context-menu/menu-items/fit-selected-menu-item.tsx","../src/components/context-menu/menu-items/fly-to-menu-item.tsx","../src/components/context-menu/default-scene-tree-context-menu.tsx","../src/components/context-menu/scene-tree-context-menu.tsx","../src/components/context-menu/menu-items/hide-part-menu-item.tsx","../src/components/context-menu/default-viewer-context-menu.tsx","../src/components/context-menu/viewer-context-menu.tsx","../src/state/config/config.ts","../src/util/dom/elements.ts","../src/util/refs/recoil-ref.ts","../src/state/scene-tree/types.ts","../src/util/scene-tree/customization.ts","../src/state/scene-tree/columns/columns.ts","../src/components/scene-tree/vertex-scene-tree-table-layout.tsx","../src/components/scene-tree/vertex-scene-tree.tsx","../src/util/recoil/synchronized-prop.ts","../src/components/common/popup-button.tsx","../src/components/common/slider.tsx","../src/components/toolbar/toolbar-divider.tsx","../src/components/toolbar/cross-section/cross-section-alignment-popover-menu.tsx","../src/components/toolbar/cross-section/cross-section-axis-popover-menu.tsx","../src/util/measurement/units.ts","../src/components/toolbar/cross-section/cross-section-offset-stepper.tsx","../src/components/toolbar/cross-section/cross-section-popup-menu.tsx","../src/components/toolbar/cross-section/cross-section.tsx","../src/components/toolbar/fit-all.tsx","../src/components/toolbar/pan.tsx","../src/components/toolbar/rotate.tsx","../src/state/box-selection/box-selection.ts","../src/state/box-selection/actions.ts","../src/components/box-selection/box-selection-button.tsx","../src/components/toolbar/zoom.tsx","../src/components/toolbar/default-toolbar.tsx","../src/components/toolbar/toolbar.tsx","../src/state/viewer/frame/actions.ts","../src/util/refs/callback-ref.ts","../src/components/box-selection/box-selection-tool.tsx","../src/components/viewer/vertex-viewer-view-cube.tsx","../src/components/viewer/vertex-viewer.tsx","../src/util/sdk-mapping/config.ts","../src/events-listener.tsx","../src/root.tsx"],"sourcesContent":["import { RecoilState, useRecoilCallback, useRecoilValue } from 'recoil';\n\nexport interface UseRecoilReducerProps<S, A> {\n reducer: (state: S, action: A) => S;\n atom: RecoilState<S>;\n}\n\nexport type UseRecoilReducer<S, A> = [state: S, dispatch: (action: A) => void];\n\nexport type UseRecoilReducerDispatch<A> = (action: A) => void;\n\n// DEPRECATED - avoid if possible\nexport const useRecoilReducer = <S, A>({\n reducer,\n atom,\n}: UseRecoilReducerProps<S, A>): UseRecoilReducer<S, A> => {\n const state = useRecoilValue(atom);\n const dispatch = useRecoilReducerDispatch({\n reducer,\n atom,\n });\n\n return [state, dispatch];\n};\n\n// DEPRECATED - avoid if possible\nexport const useRecoilReducerDispatch = <S, A>({\n reducer,\n atom,\n}: UseRecoilReducerProps<S, A>): UseRecoilReducerDispatch<A> => {\n const dispatch = useRecoilCallback(\n ({ set }) =>\n async (action: A): Promise<void> => {\n set(atom, (previousValue) => reducer(previousValue, action));\n },\n []\n );\n\n return dispatch;\n};","export type EventTargetPredicate = (target?: EventTarget | null) => boolean;\n\nexport const isInputElement = (target?: EventTarget | null): boolean => {\n const isAutoResizeTextarea =\n target instanceof HTMLElement &&\n target.tagName === 'VERTEX-AUTO-RESIZE-TEXTAREA';\n const isTextField =\n target instanceof HTMLElement && target.tagName === 'VERTEX-TEXTFIELD';\n const isContentEditable =\n target instanceof HTMLElement && target.contentEditable === 'true';\n const isSceneTreeSearch =\n target instanceof HTMLElement &&\n target.tagName === 'VERTEX-SCENE-TREE-SEARCH';\n const isInput =\n target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement;\n\n const isVertexViewerPinTool =\n target instanceof HTMLElement &&\n target.tagName === 'VERTEX-VIEWER-PIN-TOOL';\n const isVertexViewerTransformWidget =\n target instanceof HTMLElement &&\n target.tagName === 'VERTEX-VIEWER-TRANSFORM-WIDGET';\n\n return (\n isAutoResizeTextarea ||\n isTextField ||\n isContentEditable ||\n isSceneTreeSearch ||\n isInput ||\n isVertexViewerPinTool ||\n isVertexViewerTransformWidget\n );\n};","import { UUID } from '@vertexvis/utils';\nimport React from 'react';\nimport { atom, useRecoilValue } from 'recoil';\nimport { UseRecoilReducer, useRecoilReducer } from \"@util/recoil/reducer\";\nimport { EventTargetPredicate, isInputElement } from \"@state/keybinding/targets\";\n\nexport interface StackKeyBinding {\n /**\n * The ID of this stack based key binding.\n * This ID will be used to match existing actions\n * on the stack prior to pushing, so it's expected\n * to be unique to the action. E.g. \"CancelMeasurement\"\n * versus a UUID.\n */\n id: string;\n /**\n * The key binding that will execute the provided\n * function.\n *\n * Supports using a \"+\" to combine keys, and \"||\"\n * to indicate multiple options.\n *\n * @example\n * \"Shift+ArrowLeft\" -> shift and left arrow pressed\n * \"Shift||ArrowLeft\" -> shift or left arrow pressed\n */\n keyBind: string;\n /**\n * The function to invoke when the `keyBind` matches.\n */\n fn: VoidFunction;\n /**\n * A predicate that indicates whether to re-add this\n * key binding when the dependency list changes.\n * Always re-adds if not specified.\n */\n addPredicate?: () => boolean;\n /**\n * A predicate that indicates whether to cancel this\n * key binding when the dependency list changes.\n * Never cancels if not specified.\n */\n cancelPredicate?: () => boolean;\n}\n\nexport interface ApplyKeyBinding {\n /**\n * The key binding that will execute the provided\n * function.\n *\n * Supports using a \"+\" to combine keys, and \"||\"\n * to indicate multiple options.\n *\n * @example\n * \"Shift+ArrowLeft\" -> shift and left arrow pressed\n * \"Shift||ArrowLeft\" -> shift or left arrow pressed\n *\n * Can be set to undefined to disable the binding.\n */\n keyBind?: string;\n /**\n * Whether this key binding should repeat\n */\n repeat?: boolean;\n /**\n * The function to invoke when the `keyBind` matches.\n * This function should be memoized to avoid infinite rerenders.\n */\n fn: VoidFunction;\n /**\n * An optional function that is invoked when the `keyBind` no longer\n * matches.\n * This function should be memoized to avoid infinite rerenders.\n */\n off?: VoidFunction;\n}\n\ninterface StateApplyKeyBinding extends ApplyKeyBinding {\n id: string;\n active: boolean;\n}\n\nexport interface KeyBindingState {\n applyBindings: StateApplyKeyBinding[];\n bindings: Record<string, StackKeyBinding[]>;\n pressed: Record<string, boolean>;\n lastPressed?: string;\n}\n\nexport const keyBindings = atom<KeyBindingState>({\n key: 'keyBindings',\n default: {\n applyBindings: [],\n bindings: {},\n pressed: {},\n },\n});\n\nexport type KeyBindingAction =\n | {\n type: 'push-key-binding';\n binding: StackKeyBinding;\n}\n | {\n type: 'remove-key-binding';\n binding: StackKeyBinding;\n}\n | {\n type: 'add-apply-key-binding';\n binding: StateApplyKeyBinding;\n}\n | {\n type: 'remove-apply-key-binding';\n id: string;\n}\n | {\n type: 'set-key-pressed';\n key: string;\n pressed: boolean;\n};\n\nexport function reducer(\n state: KeyBindingState,\n action: KeyBindingAction\n): KeyBindingState {\n switch (action.type) {\n case 'push-key-binding':\n const toAdd = state.bindings[action.binding.keyBind]?.find(\n (b) => b.id === action.binding.id\n );\n\n return toAdd != null\n ? state\n : {\n ...state,\n bindings: {\n ...state.bindings,\n [action.binding.keyBind]: [\n ...(state.bindings[action.binding.keyBind] ?? []),\n action.binding,\n ],\n },\n };\n case 'remove-key-binding':\n const toRemove = state.bindings[action.binding.keyBind]?.find(\n (b) => b.id === action.binding.id\n );\n\n return toRemove == null\n ? state\n : {\n ...state,\n bindings: {\n ...state.bindings,\n [action.binding.keyBind]: (\n state.bindings[action.binding.keyBind] ?? []\n ).filter((b) => b.id !== action.binding.id),\n },\n };\n case 'add-apply-key-binding':\n return {\n ...state,\n applyBindings: [...state.applyBindings, action.binding],\n };\n case 'remove-apply-key-binding':\n return {\n ...state,\n applyBindings: state.applyBindings.filter(\n (binding) => binding.id !== action.id\n ),\n };\n case 'set-key-pressed':\n return {\n ...state,\n applyBindings: state.applyBindings.map((binding) => ({\n ...binding,\n active:\n binding.keyBind != null &&\n allPressed(binding.keyBind, state.pressed),\n })),\n pressed: {\n ...state.pressed,\n [action.key]: action.pressed,\n },\n lastPressed: action.pressed ? action.key : undefined,\n };\n }\n}\n\nconst useKeyBindingState = (): UseRecoilReducer<\n KeyBindingState,\n KeyBindingAction\n> => {\n return useRecoilReducer({\n reducer,\n atom: keyBindings,\n });\n};\n\n/**\n * A readonly view of the current key state.\n */\nexport const useKeyBindingReadonlyState = (): KeyBindingState => {\n return useRecoilValue(keyBindings);\n};\n\nfunction pressedValue(\n keyBind: string,\n pressed: Record<string, boolean>\n): boolean {\n return keyBind.includes('!')\n ? !pressed[keyBind.replace('!', '')] &&\n !pressed[keyBind.replace('!', '').toLowerCase()]\n : pressed[keyBind] || pressed[keyBind.toLowerCase()];\n}\n\nfunction isPressed(keyBind: string, pressed: Record<string, boolean>): boolean {\n const keys = keyBind.split('||');\n\n return keys.length > 1\n ? keys.some((key) => pressedValue(key, pressed))\n : pressedValue(keys[0], pressed);\n}\n\nfunction allPressed(\n keyBind: string,\n pressed: Record<string, boolean>\n): boolean {\n const keys = keyBind.split('+');\n\n return keys.every((key) => isPressed(key, pressed));\n}\n\nfunction matchingSingleFnBindings(\n applyBindings: StateApplyKeyBinding[],\n pressed: Record<string, boolean>,\n lastPressed?: string\n): VoidFunction[] {\n return applyBindings\n .filter((binding) => !binding.repeat)\n .filter(\n (binding) =>\n binding.keyBind != null &&\n lastPressed != null &&\n binding.keyBind?.includes(lastPressed) &&\n allPressed(binding.keyBind, pressed)\n )\n .map((binding) => binding.fn);\n}\n\nfunction matchingOffBindings(\n applyBindings: StateApplyKeyBinding[],\n pressed: Record<string, boolean>,\n lastPressed?: string\n): VoidFunction[] {\n return applyBindings\n .filter(\n (binding) =>\n binding.off &&\n binding.active &&\n binding.keyBind != null &&\n lastPressed == null &&\n !allPressed(binding.keyBind, pressed)\n )\n .map((binding) => binding.off) as VoidFunction[];\n}\n\n/**\n * Depends on `useKeyBindings`.\n *\n * Adds a global key binding. Any key binding\n * added this way will listen to global state for pressed\n * keys, and executed whenever the key state matches the\n * provided `keyBind`.\n *\n * @param binding - The `ApplyKeyBinding` to add.\n */\nexport const useApplyKeyBinding = (binding: ApplyKeyBinding): void => {\n const [state, dispatch] = useKeyBindingState();\n\n React.useEffect(() => {\n const id = UUID.create();\n\n dispatch({\n type: 'add-apply-key-binding',\n binding: {\n ...binding,\n id,\n active:\n binding.keyBind != null && allPressed(binding.keyBind, state.pressed),\n },\n });\n\n return () => {\n dispatch({\n type: 'remove-apply-key-binding',\n id,\n });\n };\n }, [binding.fn, binding.off, binding.keyBind, binding.repeat]);\n};\n\n/**\n * Depends on `useKeyBindings`.\n *\n * Adds a stack-based key binding. Any key binding\n * added this way will be added to an existing (or new)\n * stack for the specified `keyBind`.\n *\n * Provided `binding`s will be added and cancelled based\n * on the specified `addPredicate` and `cancelPredicate`\n * respectively. These predicates are evaluated any time\n * that the `deps` array changes.\n *\n * @param binding - The `StackKeyBinding` to add.\n * @param deps (optional) - The React dependency list.\n */\nexport const useStackKeyBinding = (\n binding: StackKeyBinding,\n deps: React.DependencyList = []\n): void => {\n const [, dispatch] = useKeyBindingState();\n\n React.useEffect(() => {\n const addPredicatePassing =\n binding.addPredicate == null || binding.addPredicate();\n const cancelPredicatePassing =\n binding.cancelPredicate != null && binding.cancelPredicate();\n if (addPredicatePassing) {\n dispatch({\n type: 'push-key-binding',\n binding,\n });\n }\n\n if (cancelPredicatePassing) {\n dispatch({\n type: 'remove-key-binding',\n binding,\n });\n }\n }, deps);\n};\n\nexport interface UseKeyBindingsProps {\n /**\n * The interval at which to repeat apply keyBinds that have been\n * created with `repeat` set to `true`.\n */\n keydownRepeatInterval?: number;\n\n /**\n * A predicate that indicates whether a keydown should be ignored\n * based on the event target. Defaults to any `input` like elements.\n */\n keydownIgnorePredicate?: EventTargetPredicate;\n}\n\n/**\n * Enables key binding usage.\n *\n * This hook must appear in the tree for `useStackKeyBinding`\n * or `useApplyKeyBinding` to work.\n */\nexport const useKeyBindings = ({\n keydownRepeatInterval = 25,\n keydownIgnorePredicate = isInputElement,\n }: UseKeyBindingsProps = {}): void => {\n const [state, dispatch] = useKeyBindingState();\n\n const applyStackKeyBindings = React.useCallback(\n (key: string) => {\n Object.keys(state.bindings)\n .filter(\n (k) =>\n k.includes(key) && allPressed(k, { ...state.pressed, [key]: true })\n )\n .forEach((k) => {\n const bindings = state.bindings[k];\n const poppedBinding =\n bindings.length > 0 ? bindings[bindings.length - 1] : undefined;\n\n if (poppedBinding != null) {\n poppedBinding.fn();\n\n dispatch({\n type: 'remove-key-binding',\n binding: poppedBinding,\n });\n }\n });\n },\n [state]\n );\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (!event.repeat && !keydownIgnorePredicate(event.target)) {\n dispatch({\n type: 'set-key-pressed',\n key: event.key,\n pressed: true,\n });\n\n applyStackKeyBindings(event.key);\n\n // If the key is associated with a keybinding, then prevent default behavior\n const currentPressed = {\n ...state.pressed,\n [event.key]: true,\n };\n\n const activeMatchesSingleFnBindings = matchingSingleFnBindings(\n state.applyBindings,\n currentPressed,\n event.key\n );\n const activeMatchesOffBindings = matchingOffBindings(\n state.applyBindings,\n currentPressed,\n event.key\n );\n\n if (\n activeMatchesSingleFnBindings.length > 0 ||\n activeMatchesOffBindings.length > 0\n ) {\n event.preventDefault();\n }\n }\n };\n const handleKeyUp = (event: KeyboardEvent): void => {\n dispatch({\n type: 'set-key-pressed',\n key: event.key,\n pressed: false,\n });\n };\n\n window.addEventListener('keydown', handleKeyDown);\n window.addEventListener('keyup', handleKeyUp);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n window.removeEventListener('keyup', handleKeyUp);\n };\n }, [applyStackKeyBindings, state.applyBindings, state.pressed]);\n\n React.useEffect(() => {\n const activeMatchesSingleFnBindings = matchingSingleFnBindings(\n state.applyBindings,\n state.pressed,\n state.lastPressed\n );\n const activeMatchesOffBindings = matchingOffBindings(\n state.applyBindings,\n state.pressed,\n state.lastPressed\n );\n\n activeMatchesSingleFnBindings.forEach((fn) => fn());\n activeMatchesOffBindings.forEach((fn) => fn());\n }, [state.pressed, state.lastPressed]);\n\n React.useEffect(() => {\n const matchingRepeatBindings = state.applyBindings\n .filter(\n (binding) =>\n binding.repeat &&\n binding.keyBind != null &&\n allPressed(binding.keyBind, state.pressed)\n )\n .map((binding) => binding.fn);\n\n if (matchingRepeatBindings.length > 0) {\n const interval = setInterval(() => {\n matchingRepeatBindings.forEach((fn) => fn());\n }, keydownRepeatInterval);\n\n return () => {\n clearInterval(interval);\n };\n } else {\n return () => {\n return undefined;\n };\n }\n }, [state.applyBindings, state.lastPressed]);\n};","import { Point } from '@vertexvis/geometry';\nimport * as React from 'react';\n\nexport interface UseLongPressProps {\n target?: HTMLElement | Window;\n callback?: (event: TouchEvent) => void;\n delay?: number;\n onMovement?: () => void;\n}\n\nexport function useLongPress({\n target,\n callback,\n delay = 500,\n onMovement,\n }: UseLongPressProps): void {\n const [longPressTimeout, setLongPressTimeout] =\n React.useState<NodeJS.Timeout>();\n const [touchStartPosition, setTouchStartPosition] =\n React.useState<Point.Point>();\n\n React.useEffect(() => {\n const handleTouchStart = (e: Event): void => {\n const event = e as TouchEvent;\n\n if (event.touches != null && event.touches.length === 1) {\n if (longPressTimeout != null) {\n clearTimeout(longPressTimeout);\n }\n\n setTouchStartPosition(\n Point.create(event.touches[0].clientX, event.touches[0].clientY)\n );\n\n setLongPressTimeout(setTimeout(() => callback?.(event), delay));\n }\n };\n\n const handleTouchMove = (e: Event): void => {\n const event = e as TouchEvent;\n\n if (\n event.touches != null &&\n event.touches.length > 0 &&\n longPressTimeout != null &&\n touchStartPosition != null &&\n Point.distance(\n touchStartPosition,\n Point.create(event.touches[0].clientX, event.touches[0].clientY)\n ) >= 2\n ) {\n clearTimeout(longPressTimeout);\n onMovement?.();\n }\n };\n\n const handleTouchEnd = (): void => {\n if (longPressTimeout != null) {\n clearTimeout(longPressTimeout);\n }\n };\n\n target?.addEventListener('touchstart', handleTouchStart);\n target?.addEventListener('touchmove', handleTouchMove);\n target?.addEventListener('touchend', handleTouchEnd);\n\n return () => {\n target?.removeEventListener('touchstart', handleTouchStart);\n target?.removeEventListener('touchmove', handleTouchMove);\n target?.removeEventListener('touchend', handleTouchEnd);\n };\n }, [target, longPressTimeout, touchStartPosition]);\n}","import { Point } from '@vertexvis/geometry';\nimport { Row } from '@vertexvis/viewer/dist/types/components/scene-tree/lib/row';\nimport { atom, selector } from 'recoil';\nimport { Hit } from \"@state/hits\";\n\nexport type ContextMenuType =\n | 'scene-tree'\n | 'viewer'\n | 'color-swatch';\n\nexport type ContextMenuItem = Row | Hit | HTMLElement;\n\nexport type ContextMenuAction = (\n item: ContextMenuItem\n) => void | Promise<void> | boolean | Promise<boolean>;\n\nexport function contextMenuItemIsRow(item?: ContextMenuItem): item is Row {\n return item != null && (item as Row)?.node?.id != null;\n}\n\nexport const contextMenuActive = atom<ContextMenuType>({\n key: 'contextMenuActive',\n default: undefined,\n});\n\nexport const contextMenuPosition = atom<Point.Point | undefined>({\n key: 'contextMenuPosition',\n default: undefined,\n});\n\nexport const contextMenuTarget = atom<HTMLElement | undefined>({\n key: 'contextMenuTarget',\n default: undefined,\n});\n\nexport const contextMenuItem = atom<ContextMenuItem | undefined>({\n key: 'contextMenuItem',\n default: undefined,\n});\n\nexport const contextMenuActions = atom<ContextMenuAction[]>({\n key: 'contextMenuActions',\n default: [],\n});\n\nexport const contextMenuActivePosition = selector<Point.Point | undefined>({\n key: 'contextMenuActivePosition',\n get: ({ get }) =>\n get(contextMenuActive) != null ? get(contextMenuPosition) : undefined,\n});","import Pino from 'pino';\n\n// Create a new logger instance\nconst pinoLogger = Pino({\n formatters: {\n level(level) {\n return { level };\n },\n },\n});\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ninterface Logger {\n error: (message: string, err?: any) => void;\n warn: (message: string, err?: any) => void;\n info: (message: string, obj?: any) => void;\n debug: (message: string, obj?: any) => void;\n}\n\nexport const logger: Logger = {\n error: (message: string, error?: any): void => {\n if (error != null) {\n pinoLogger.error(error, message);\n } else {\n pinoLogger.error(message);\n }\n },\n info: (message: string, obj?: any): void => {\n if (obj != null) {\n pinoLogger.info(obj, message);\n } else {\n pinoLogger.info(message);\n }\n },\n warn: (message: string, err?: any): void => {\n if (err != null) {\n pinoLogger.warn(err, message);\n } else {\n pinoLogger.warn(message);\n }\n },\n debug: (message: string, obj?: any): void => {\n if (obj != null) {\n pinoLogger.debug(obj, message);\n } else {\n pinoLogger.debug(message);\n }\n },\n};\n\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { logger } from '@util/logging/logger';\nimport {\n CallbackInterface,\n RecoilValue,\n Snapshot,\n useRecoilCallback,\n} from 'recoil';\n\nexport interface TryGetPromiseResult<T> {\n value?: T;\n error?: Error;\n}\n\n/**\n * A Recoil Snapshot with an additional `tryGetPromise` method that wraps the\n * `getPromise` method in a try/catch and returns an object with either the\n * value of the Recoil atom or selector, or the error encountered.\n */\nexport interface SnapshotWithErrorHandling extends Snapshot {\n /**\n * Attempts to retrieve the value of this Recoil atom or selector, and returns\n * the value if one is present. If the value received is `undefined`, the provided\n * `error` or a generic error will be thrown.\n *\n * @param value - the Recoil atom or selector with a potentially undefined value\n * @param error - an optional custom Error to throw if no value is present\n * @throws the provided `error` or a generic Error if no value is present\n * @returns the value of the Recoil atom or selector\n */\n getPromiseRequired: <T>(\n value: RecoilValue<T | undefined>,\n error?: Error\n ) => Promise<T>;\n\n /**\n * Attempts to retrieve the value of this Recoil atom or selector, and returns\n * a `TryGetPromiseResult` with the value or the error encountered when attempting\n * to retrieve the value.\n *\n * @param value - the Recoil atom or selector\n * @returns a `TryGetPromiseResult` wrapper containing the value or error\n */\n tryGetPromise: <T>(value: RecoilValue<T>) => Promise<TryGetPromiseResult<T>>;\n}\n\nexport interface CallbackInterfaceWithErrorHandling extends CallbackInterface {\n snapshot: SnapshotWithErrorHandling;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nclass DefaultRecoilDeps {}\n\nexport const DefaultRecoilCallbackDepsBehavior = new DefaultRecoilDeps();\n\n/**\n * Returns a Recoil callback that can be used for action hooks.\n *\n * This uses `useRecoilCallback` but the deps implementation differs from\n * Recoil. If no deps are provided, then it will always return the same function\n * vs returning a new function.\n *\n * If you want to use the original Recoil callback behavior, pass\n * `DefaultRecoilCallbackDepsBehavior`.\n *\n * @param fn The callback.\n * @param deps The deps to memoize over. Defaults to `[]`.\n * @returns A callback function\n * @see https://recoiljs.org/docs/api-reference/core/useRecoilCallback\n */\nexport function useActionCallback<Args extends ReadonlyArray<unknown>, Return>(\n fn: (cb: CallbackInterfaceWithErrorHandling) => (...args: Args) => Return,\n deps: ReadonlyArray<unknown> | DefaultRecoilDeps = []\n): (...args: Args) => Return {\n const d = deps instanceof DefaultRecoilDeps ? undefined : deps;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useRecoilCallback(\n (cbInterface) =>\n fn({\n ...cbInterface,\n snapshot: Object.defineProperties(cbInterface.snapshot, {\n getPromiseRequired: {\n configurable: true,\n value: createGetPromiseRequiredWrapper(cbInterface.snapshot),\n },\n tryGetPromise: {\n configurable: true,\n value: createTryGetPromiseWrapper(cbInterface.snapshot),\n },\n }) as SnapshotWithErrorHandling,\n }),\n d\n );\n}\n\n/**\n * Returns a callback that can be used with `useActionCallback` or `useRecoilCallback`,\n * and automatically handles retention of the `snapshot` object for use with asynchronous\n * selectors.\n *\n * This function expects a callback that would ordinarily be passed to `useActionCallback`\n * or `useRecoilCallback`, but that returns an asynchronous action where the `snapshot` is\n * used.\n *\n * @example\n *\n * const asyncSelector = selector({\n * key: 'asyncSelector',\n * get: async ({ get }) => {\n * return await fetch('/api/item');\n * }\n * })\n *\n * useActionCallback(\n * retainSnapshot(\n * ({ snapshot }) => async () => {\n * const asyncValue = await snapshot.getPromise(asyncSelector);\n * }\n * )\n * )\n *\n * @param fn The callback.\n * @returns The callback wrapped with a retain/release of the underlying snapshot.\n */\nexport function retainSnapshot<Args extends ReadonlyArray<unknown>, Return>(\n fn: (\n cb: CallbackInterfaceWithErrorHandling\n ) => (...args: Args) => Promise<Return>\n): (\n cb: CallbackInterfaceWithErrorHandling\n) => (...args: Args) => Promise<Return> {\n return ({ snapshot, ...cb }) =>\n async (...args: Args) => {\n const release = snapshot.retain();\n\n try {\n const returnValue = await fn({ ...cb, snapshot })(...args);\n return returnValue;\n } finally {\n release();\n }\n };\n}\n\nexport function createGetPromiseRequiredWrapper(\n snapshot: Snapshot\n): <T>(recoilValue: RecoilValue<T | undefined>, error?: Error) => Promise<T> {\n return async (recoilValue, error) => {\n const value = await snapshot.getPromise(recoilValue);\n\n if (value == null) {\n throw (\n error ??\n new Error(`No value present for required value ${recoilValue.key}`)\n );\n }\n return value;\n };\n}\n\nfunction createTryGetPromiseWrapper(\n snapshot: Snapshot\n): <T>(value: RecoilValue<T>) => Promise<TryGetPromiseResult<T>> {\n return async (value) => {\n try {\n return { value: await snapshot.getPromise(value) };\n } catch (e) {\n logger.debug(\n `Error encountered retrieving Recoil value. [key={${value.key}}]`,\n e\n );\n return {\n error: e as Error,\n };\n }\n };\n}\n","import {\n BaseInteractionHandler,\n InteractionType,\n} from '@vertexvis/viewer/dist/types/lib/interactions/baseInteractionHandler';\nimport { atom } from 'recoil';\n\nexport const viewerElement = atom<HTMLVertexViewerElement | null | undefined>({\n key: 'viewerToolkitViewerElement',\n default: undefined,\n dangerouslyAllowMutability: true,\n});\n\nexport const viewerInitialSceneReady = atom<boolean>({\n key: 'viewerInitialSceneReady',\n default: false,\n});\n\nexport const viewerBaseInteractionHandlerProvider = atom<\n Promise<BaseInteractionHandler | undefined>\n>({\n key: 'viewerBaseInteractionHandlerProvider',\n default: Promise.resolve(undefined),\n dangerouslyAllowMutability: true,\n});\n\nexport const viewerPrimaryInteractionType = atom<InteractionType>({\n key: 'viewerPrimaryInteractionType',\n default: 'rotate',\n});\n","import { BoundingBox } from '@vertexvis/geometry';\nimport type { Scene } from '@vertexvis/viewer';\nimport type { FrameScene } from '@vertexvis/viewer/dist/types/lib/types';\nimport { atom, selector } from 'recoil';\n\nimport { viewerElement } from '../core';\n\nexport const viewerSceneProvider = selector<() => Promise<Scene | undefined>>({\n key: 'viewerScene',\n get:\n ({ get }) =>\n async () =>\n get(viewerElement)?.scene(),\n dangerouslyAllowMutability: true,\n});\n\nexport const viewerFrameScene = atom<FrameScene | undefined>({\n key: 'viewerFrameScene',\n default: undefined,\n dangerouslyAllowMutability: true,\n});\n\nexport const viewerSceneVisibleBoundingBox = selector<\n BoundingBox.BoundingBox | undefined\n>({\n key: 'viewerSceneVisibleBoundingBox',\n get: ({ get }) => get(viewerFrameScene)?.boundingBox,\n});\n","import { SceneAlterationPerformanceType } from '@state/performance';\nimport { useActionCallback } from '@util/recoil/actions';\nimport { UUID } from '@vertexvis/utils';\nimport type { SceneItemOperationsBuilder } from '@vertexvis/viewer/dist/types/lib/scenes/index';\nimport type { SceneItemQueryExecutor } from '@vertexvis/viewer/dist/types/lib/scenes/queries';\nimport React from 'react';\n\nimport { viewerSceneProvider } from './scene';\n\nexport type ViewerSceneTransform = (\n op: SceneItemQueryExecutor\n) => SceneItemOperationsBuilder;\n\nexport type ViewerSceneItemsTransform = (\n ...ids: UUID.UUID[]\n) => (op: SceneItemQueryExecutor) => SceneItemOperationsBuilder;\n\nexport interface UseViewerSceneActions {\n executeWithCorrelationId: (\n alterationType: SceneAlterationPerformanceType,\n correlationId: UUID.UUID,\n ...transforms: ViewerSceneTransform[]\n ) => Promise<void>;\n execute: (\n alterationType: SceneAlterationPerformanceType,\n ...transforms: ViewerSceneTransform[]\n ) => Promise<void>;\n selectItemsTransform: ViewerSceneItemsTransform;\n deselectItemsTransform: ViewerSceneItemsTransform;\n clearSelectionTransform: ViewerSceneTransform;\n}\n\nexport function useViewerSceneActions(): UseViewerSceneActions {\n const executeWithCorrelationId = useActionCallback(\n ({ snapshot }) =>\n async (\n alterationType: SceneAlterationPerformanceType,\n correlationId: UUID.UUID,\n ...transforms: ViewerSceneTransform[]\n ) => {\n const sceneProvider = await snapshot.getPromise(viewerSceneProvider);\n const scene = await sceneProvider();\n\n if (transforms.length > 0) {\n // TODO: track performance\n\n await scene\n ?.items((op) => transforms.map((t) => t(op)))\n .execute({\n suppliedCorrelationId: correlationId,\n });\n }\n }\n );\n\n const selectItemsTransform = React.useCallback(\n (...ids: UUID.UUID[]) =>\n (op: SceneItemQueryExecutor) =>\n op.where((q) => q.withItemIds(ids)).select(),\n []\n );\n const deselectItemsTransform = React.useCallback(\n (...ids: UUID.UUID[]) =>\n (op: SceneItemQueryExecutor) =>\n op.where((q) => q.withItemIds(ids)).deselect(),\n []\n );\n const clearSelectionTransform = React.useCallback(\n (op: SceneItemQueryExecutor) => op.where((q) => q.all()).deselect(),\n []\n );\n\n return {\n executeWithCorrelationId,\n execute: useActionCallback(() => async (alterationType, ...transforms) => {\n const correlationId = UUID.create();\n\n await executeWithCorrelationId(\n alterationType,\n correlationId,\n ...transforms\n );\n }),\n\n selectItemsTransform,\n deselectItemsTransform,\n clearSelectionTransform,\n };\n}\n","import { useActionCallback } from '@util/recoil/actions';\nimport { BoundingBox } from '@vertexvis/geometry';\n\nimport { viewerSceneProvider } from '../scene';\n\nexport const DEFAULT_CAMERA_ANIMATION_DURATION = 500;\n\nexport interface UseViewerCameraActions {\n flyToById(id: string, animationMs?: number): Promise<void>;\n flyToByBoundingBox(\n boundingBox: BoundingBox.BoundingBox,\n animationMs?: number\n ): Promise<void>;\n}\n\nexport function useViewerCameraActions(): UseViewerCameraActions {\n return {\n flyToById: useActionCallback(({ snapshot }) => async (id, animationMs) => {\n const sceneProvider = await snapshot.getPromise(viewerSceneProvider);\n const scene = await sceneProvider();\n\n await scene\n ?.camera()\n .flyTo({\n itemId: id,\n })\n .render({\n animation: {\n milliseconds: animationMs ?? DEFAULT_CAMERA_ANIMATION_DURATION,\n },\n });\n }),\n flyToByBoundingBox: useActionCallback(\n ({ snapshot }) =>\n async (boundingBox, animationMs) => {\n const sceneProvider = await snapshot.getPromise(viewerSceneProvider);\n const scene = await sceneProvider();\n\n await scene\n ?.camera()\n .flyTo({\n boundingBox,\n })\n .render({\n animation: {\n milliseconds: animationMs ?? DEFAULT_CAMERA_ANIMATION_DURATION,\n },\n });\n }\n ),\n };\n}\n","import type { InteractionHandler } from '@vertexvis/viewer';\nimport type { InteractionApi } from '@vertexvis/viewer/dist/types/lib/interactions/interactionApi';\n\nexport class CrossSectionInteractionHandler implements InteractionHandler {\n private api?: InteractionApi;\n private interactionStarted = false;\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.api = api;\n }\n\n public dispose(): void {\n this.endInteraction();\n }\n\n public async beginInteraction(): Promise<void> {\n if (!this.interactionStarted) {\n await this.api?.beginInteraction();\n this.interactionStarted = true;\n }\n }\n\n public async endInteraction(): Promise<void> {\n await this.api?.endInteraction();\n this.interactionStarted = false;\n }\n}\n","import { Hit } from '@state/hits';\nimport { BoundingBox, Vector3 } from '@vertexvis/geometry';\nimport type { Camera } from '@vertexvis/viewer/dist/types/lib/scenes';\n\nexport interface OffsetRange {\n min: number;\n max: number;\n}\n\nexport interface CrossSectionPlane {\n normal: Vector3.Vector3;\n offset: number;\n}\n\nexport type CrossSectionPlaneAxes =\n | CustomCrossSectionPlaneAxes\n | DefaultCrossSectionPlaneAxes;\n\ninterface CustomCrossSectionPlaneAxes {\n x: Vector3.Vector3;\n y?: Vector3.Vector3;\n z?: Vector3.Vector3;\n}\n\ninterface DefaultCrossSectionPlaneAxes {\n x: Vector3.Vector3;\n y: Vector3.Vector3;\n z: Vector3.Vector3;\n}\n\nexport type Axis = 'x' | 'y' | 'z';\n\nexport type CrossSectionAlignment = 'global' | 'surface' | 'part';\n\nexport const create = (\n normal: Vector3.Vector3,\n offset = 0\n): CrossSectionPlane => ({\n normal,\n offset,\n});\n\nexport const isEqual = (\n plane: CrossSectionPlane,\n other: CrossSectionPlane\n): boolean => {\n return (\n Vector3.isEqual(plane.normal, other.normal) && plane.offset === other.offset\n );\n};\n\nexport const forAxis = (axis: Axis, offset: number): CrossSectionPlane => {\n switch (axis) {\n case 'x':\n return x(offset);\n case 'y':\n return y(offset);\n case 'z':\n return z(offset);\n }\n};\n\nexport const x = (offset: number): CrossSectionPlane =>\n create(Vector3.left(), -offset);\n\nexport const y = (offset: number): CrossSectionPlane =>\n create(Vector3.down(), -offset);\n\nexport const z = (offset: number): CrossSectionPlane =>\n create(Vector3.forward(), -offset);\n\nexport const getAxis = (\n axis: Axis,\n axes: CrossSectionPlaneAxes\n): Vector3.Vector3 => {\n switch (axis) {\n case 'x':\n return xAxis(axes);\n case 'y':\n return yAxis(axes);\n case 'z':\n return zAxis(axes);\n }\n};\n\nexport const defaultAxes: DefaultCrossSectionPlaneAxes = {\n x: Vector3.left(),\n y: Vector3.down(),\n z: Vector3.forward(),\n};\n\nexport const xAxis = (axes: CrossSectionPlaneAxes): Vector3.Vector3 => axes.x;\n\nexport const yAxis = (axes: CrossSectionPlaneAxes): Vector3.Vector3 =>\n axes.y || Vector3.create(axes.x.z, axes.x.x, axes.x.y);\n\nexport const zAxis = (axes: CrossSectionPlaneAxes): Vector3.Vector3 =>\n axes.z || Vector3.create(axes.x.y, axes.x.z, axes.x.x);\n\n/**\n * Returns the active axis of a plane based on the normal values\n */\nexport const axis = (\n plane: CrossSectionPlane,\n xAxis: Vector3.Vector3,\n yAxis: Vector3.Vector3,\n zAxis: Vector3.Vector3\n): Axis | undefined =>\n plane &&\n plane.normal &&\n ((\n [\n ['x', xAxis],\n ['y', yAxis],\n ['z', zAxis],\n ] as Array<[string, Vector3.Vector3]>\n )\n .filter((a) => Vector3.magnitude(Vector3.cross(plane.normal, a[1])) === 0)\n .map((a) => a[0])\n .pop() as Axis);\n\nexport const isNegativeNormal = (\n plane: CrossSectionPlane\n): boolean | undefined =>\n Vector3.dot(Vector3.create(-1, -1, -1), plane.normal) > 0;\n\n/**\n * Returns an updated section plane where the normal of the section plane is\n * faced towards the given vector. The effect is the internal of the cross\n * section is visible from the given vector.\n */\nexport const towardsVector = (\n vector: Vector3.Vector3,\n plane: CrossSectionPlane\n): CrossSectionPlane => {\n const dot = Vector3.dot(vector, plane.normal);\n if (dot < 0) {\n return invert(plane);\n } else {\n return plane;\n }\n};\n\n/**\n * Returns an updated section plane where the normal of the section plane is\n * faced towards given camera's view vector. The effect is the user sees the\n * internal of the cross section.\n */\nexport const towardsCamera = (\n camera: Camera,\n plane: CrossSectionPlane\n): CrossSectionPlane => {\n return towardsVector(camera.viewVector, plane);\n};\n\n/**\n * Reverses the direction of the section plane's normal to point in the opposite\n * direction.\n */\nexport const invert = (plane: CrossSectionPlane): CrossSectionPlane => {\n return {\n ...plane,\n normal: Vector3.multiply(plane.normal, Vector3.create(-1, -1, -1)),\n offset: -plane.offset,\n };\n};\n\nexport const fromHit = (hit: Hit, camera: Camera): CrossSectionPlane => {\n const sectionNormal = Vector3.normalize(hit.normal);\n const sectionOffset = Vector3.dot(sectionNormal, hit.position);\n\n return towardsCamera(camera, create(sectionNormal, sectionOffset));\n};\n\nexport const toAxis = (\n axis: Axis,\n axes: CrossSectionPlaneAxes,\n camera: Camera,\n boundingBox?: BoundingBox.BoundingBox,\n position?: Vector3.Vector3\n): CrossSectionPlane => {\n const fitAllCamera = camera.viewAll();\n\n const sectionAxis = getAxis(axis, axes);\n const plane =\n boundingBox != null && sectionAxis != null\n ? create(\n sectionAxis,\n Vector3.dot(sectionAxis, position || BoundingBox.center(boundingBox))\n )\n : forAxis(axis, fitAllCamera.lookAt[axis]);\n return towardsCamera(camera, plane);\n};\n\nexport function axesFromPlane(plane: CrossSectionPlane): CrossSectionPlaneAxes {\n const matchesDefaultX =\n Vector3.magnitude(Vector3.cross(defaultAxes.x, plane.normal)) === 0;\n const matchesDefaultY =\n Vector3.magnitude(Vector3.cross(defaultAxes.y, plane.normal)) === 0;\n const matchesDefaultZ =\n Vector3.magnitude(Vector3.cross(defaultAxes.z, plane.normal)) === 0;\n\n const hasCustomAxes =\n !matchesDefaultX && !matchesDefaultY && !matchesDefaultZ;\n\n if (hasCustomAxes) {\n return {\n x: plane.normal,\n };\n } else {\n return {\n x: !matchesDefaultY && !matchesDefaultZ ? plane.normal : defaultAxes.x,\n y: matchesDefaultY ? plane.normal : defaultAxes.y,\n z: matchesDefaultZ ? plane.normal : defaultAxes.z,\n };\n }\n}\n","import { BoundingBox, Vector3 } from '@vertexvis/geometry';\n\nexport function corners(box: BoundingBox.BoundingBox): Vector3.Vector3[] {\n return [\n // xMin, yMin, zMin\n Vector3.create(box.min.x, box.min.y, box.min.z),\n // xMin, yMin, zMax\n Vector3.create(box.min.x, box.min.y, box.max.z),\n // xMin, yMax, zMin\n Vector3.create(box.min.x, box.max.y, box.min.z),\n // xMin, yMax, zMax\n Vector3.create(box.min.x, box.max.y, box.max.z),\n\n // xMax, yMax, zMax\n Vector3.create(box.max.x, box.max.y, box.max.z),\n // xMax, yMax, zMin\n Vector3.create(box.max.x, box.max.y, box.min.z),\n // xMax, yMin, zMax\n Vector3.create(box.max.x, box.min.y, box.max.z),\n // xMax, yMin, zMin\n Vector3.create(box.max.x, box.min.y, box.min.z),\n ];\n}\n\nexport function minLength(box: BoundingBox.BoundingBox): number {\n return Math.min(\n Math.abs(box.min.x) + Math.abs(box.max.x),\n Math.abs(box.min.y) + Math.abs(box.max.y),\n Math.abs(box.min.z) + Math.abs(box.max.z)\n );\n}\n\nexport function equals(\n box1: BoundingBox.BoundingBox,\n box2: BoundingBox.BoundingBox\n): boolean {\n return (\n box1.min.x === box2.min.x &&\n box1.min.y === box2.min.y &&\n box1.min.z === box2.min.z &&\n box1.max.x === box2.max.x &&\n box1.max.y === box2.max.y &&\n box1.max.z === box2.max.z\n );\n}\n","import { viewerSceneVisibleBoundingBox } from '@state/viewer';\nimport { CrossSectionInteractionHandler } from '@util/cross-section/interaction-handler';\nimport * as CrossSectionPlane from '@util/cross-section/section-plane';\nimport { corners } from '@util/geometry/bounding-box';\nimport { BoundingBox, Vector3 } from '@vertexvis/geometry';\nimport React from 'react';\nimport { atom, selector, useRecoilValue } from 'recoil';\n\nexport interface CrossSectionAlignment {\n mode: CrossSectionPlane.CrossSectionAlignment;\n hitPending: boolean;\n}\n\nexport interface CrossSectionSliderOffsets {\n default: number;\n min: number;\n max: number;\n}\n\nexport const DEFAULT_SLIDER_RANGE: CrossSectionSliderOffsets = {\n default: 5,\n min: 0,\n max: 10,\n};\n\nexport const crossSectioningEnabled = atom<boolean>({\n key: 'crossSectioningEnabled',\n default: false,\n});\n\nexport const crossSectioningHighlightColor = atom<string | undefined>({\n key: 'crossSectioningHighlightColor',\n default: undefined,\n});\n\nexport const crossSectioningBorderWidth = atom<number | undefined>({\n key: 'crossSectioningBorderWidth',\n default: undefined,\n});\n\nexport const crossSectioningPlanes = atom<\n CrossSectionPlane.CrossSectionPlane[]\n>({\n key: 'crossSectioningPlanes',\n default: [],\n});\n\nexport const crossSectioningAlignment = atom<CrossSectionAlignment>({\n key: 'crossSectioningAlignment',\n default: {\n mode: 'global',\n hitPending: false,\n },\n});\n\nexport const crossSectioningTargetBoundingBox = selector<\n BoundingBox.BoundingBox | undefined\n>({\n key: 'crossSectioningTargetBoundingBox',\n get: async ({ get }) => {\n const visibleBounds = get(viewerSceneVisibleBoundingBox);\n\n return visibleBounds;\n },\n});\n\nexport const crossSectioningIsInteractive = atom<boolean>({\n key: 'crossSectioningIsInteractive',\n default: false,\n});\n\nexport const crossSectioningActiveAxis = atom<CrossSectionPlane.Axis>({\n key: 'crossSectioningActiveAxis',\n default: 'x',\n});\n\nexport const crossSectioningAvailableAxes =\n atom<CrossSectionPlane.CrossSectionPlaneAxes>({\n key: 'crossSectioningAvailableAxes',\n default: CrossSectionPlane.defaultAxes,\n });\n\nexport const crossSectioningOffsetScalar = selector<number>({\n key: 'crossSectioningOffsetScalar',\n get: ({ get }) => {\n const planes = get(crossSectioningPlanes);\n\n if (planes.length > 0) {\n return CrossSectionPlane.isNegativeNormal(planes[0]) ? -1 : 1;\n }\n return 1;\n },\n});\n\nexport const crossSectioningSliderRange = selector<CrossSectionSliderOffsets>({\n key: 'crossSectioningSliderRange',\n get: ({ get }) => {\n const planes = get(crossSectioningPlanes);\n const bounds = get(crossSectioningTargetBoundingBox);\n const boundsCorners = bounds != null ? corners(bounds) : [];\n\n if (planes.length > 0) {\n const projectedCorners = boundsCorners.map((c) =>\n Vector3.dot(\n c,\n CrossSectionPlane.isNegativeNormal(planes[0])\n ? Vector3.multiply(planes[0].normal, Vector3.create(-1, -1, -1))\n : planes[0].normal\n )\n );\n\n return {\n default: planes[0].offset,\n min: Math.min(...projectedCorners) - 2,\n max: Math.max(...projectedCorners) + 2,\n };\n }\n\n return DEFAULT_SLIDER_RANGE;\n },\n});\n\nexport const crossSectioningPlaneDisplayOffset = selector<number>({\n key: 'crossSectioningPlaneDisplayOffset',\n get: ({ get }) => {\n const planes = get(crossSectioningPlanes);\n const offsetScalar = get(crossSectioningOffsetScalar);\n const sliderRange = get(crossSectioningSliderRange);\n\n if (planes.length > 0) {\n return planes[0].offset * offsetScalar;\n } else {\n return sliderRange.default;\n }\n },\n});\n\nexport const crossSectioningAdditionalToolsOpen = atom<boolean>({\n key: 'crossSectioningAdditionalToolsOpen',\n default: false,\n});\n\nexport const crossSectioningAlignmentToolsOpen = atom<boolean>({\n key: 'crossSectioningAlignmentToolsOpen',\n default: false,\n});\n\nexport const crossSectioningAxisToolsOpen = atom<boolean>({\n key: 'crossSectioningAxisToolsOpen',\n default: false,\n});\n\nexport const crossSectioningInteractionHandler =\n atom<CrossSectionInteractionHandler>({\n key: 'crossSectioningInteractionHandler',\n default: new CrossSectionInteractionHandler(),\n dangerouslyAllowMutability: true,\n });\n\nexport function useCrossSectioning(\n viewerElement?: HTMLVertexViewerElement | null,\n initialized?: boolean\n): void {\n const interactionHandler = useRecoilValue(crossSectioningInteractionHandler);\n\n React.useEffect(() => {\n if (initialized) {\n viewerElement?.registerInteractionHandler(interactionHandler);\n }\n }, [viewerElement, initialized, interactionHandler]);\n}\n","import { Vector3 } from '@vertexvis/geometry';\nimport type { TapEventDetails } from '@vertexvis/viewer';\nimport { atom, selector } from 'recoil';\n\nimport { viewerSceneProvider } from '../viewer';\n\nexport interface Hit {\n id: string;\n normal: Vector3.Vector3;\n position: Vector3.Vector3;\n meta: boolean;\n shiftKey?: boolean;\n metadata?: unknown[]; // TODO: Include metadata types\n ancestors: string[];\n}\n\nexport const hitResultsTapDetails = atom<TapEventDetails | undefined>({\n key: 'hitResultsTapDetails',\n default: undefined,\n});\n\nexport const hitResultsLongPressDetails = atom<TapEventDetails | undefined>({\n key: 'hitResultsLongPressDetails',\n default: undefined,\n});\n\nexport const previousHitResult = atom<Hit | undefined>({\n key: 'previousHitResult',\n default: undefined,\n});\n\nexport const currentHitResult = atom<Hit | undefined>({\n key: 'currentHitResult',\n default: undefined,\n});\n\nexport const hitResult = selector<Hit | undefined>({\n key: 'hitResult',\n get: async ({ get }) => {\n const tapDetails = get(hitResultsTapDetails);\n const longPressDetails = get(hitResultsLongPressDetails);\n const details = tapDetails ?? longPressDetails;\n const sceneProvider = get(viewerSceneProvider);\n\n const scene = await sceneProvider();\n const viewId = scene?.sceneViewId;\n const raycaster = scene?.raycaster();\n\n if (details != null && raycaster != null && viewId != null) {\n const res = await raycaster.hitItems(details.position);\n const sdkHit = (res?.hits || [])[0];\n if (sdkHit != null) {\n return {\n id: sdkHit.itemId?.hex as string,\n normal: Vector3.create(\n sdkHit?.hitNormal?.x || 0,\n sdkHit?.hitNormal?.y || 0,\n sdkHit?.hitNormal?.z || 0\n ),\n position: Vector3.create(\n sdkHit?.hitPoint?.x || 0,\n sdkHit?.hitPoint?.y || 0,\n sdkHit?.hitPoint?.z || 0\n ),\n meta: details.metaKey || details.ctrlKey || false,\n metadata: [], // TODO: Include metadata types\n ancestors:\n sdkHit?.ancestors\n ?.filter((a) => a.itemId?.hex != null)\n .map((a) => a.itemId?.hex as string) || [],\n };\n }\n }\n\n return undefined;\n },\n});\n\n\n// Whether to skip the next `tap` event's behavior. This is typically the\n// case when the `pointerdown` is associated to some other action.\n// E.g. a context menu without a backdrop being dismissed.\nexport const hitResultsSkipNextTap = atom<boolean>({\n key: 'hitResultsSkipNextTap',\n default: false,\n});","import { BoundingBox, Vector3 } from '@vertexvis/geometry';\nimport { Camera } from '@vertexvis/viewer';\n\nexport const alignToNormal = (\n camera: Camera,\n normal: Vector3.Vector3,\n boundingBox: BoundingBox.BoundingBox\n): Camera => {\n if (camera.toFrameCamera().isPerspective()) {\n // when cos theta of the camera up vector and plane normal approaches |1|\n // we will have unexpected results and need to find a better value for\n // the new up vector.\n // using negative value of cos0 in calculation for that up vector\n // prevents flipping the model around the up vector\n const cos0 = Vector3.dot(Vector3.normalize(camera.up), normal);\n\n const up =\n Math.abs(cos0) > 0.98\n ? Vector3.normalize(Vector3.scale(-cos0, camera.viewVector))\n : camera.up;\n const position = Vector3.add(\n Vector3.scale(\n Vector3.distance(camera.position, camera.lookAt),\n Vector3.multiply(normal, Vector3.create(-1, -1, -1))\n ),\n camera.lookAt\n );\n\n return camera.update({\n up,\n position,\n });\n } else {\n const angle = Vector3.angleTo(Vector3.normalize(camera.viewVector), normal);\n const rotationPoint =\n boundingBox != null ? BoundingBox.center(boundingBox) : camera.lookAt;\n const rotationAxis = Vector3.normalize(\n Vector3.cross(Vector3.normalize(camera.viewVector), normal)\n );\n\n return camera.rotateAroundAxisAtPoint(angle, rotationPoint, rotationAxis);\n }\n};\n","import { Angle, Vector3 } from '@vertexvis/geometry';\n\nexport function isParallelTo(a: Vector3.Vector3, b: Vector3.Vector3): boolean {\n const angle = Angle.toDegrees(Vector3.angleTo(a, b));\n\n return angle === 0 || angle === 180;\n}\n","import {\n crossSectioningActiveAxis,\n crossSectioningAdditionalToolsOpen,\n crossSectioningAlignment,\n crossSectioningAlignmentToolsOpen,\n crossSectioningAvailableAxes,\n crossSectioningAxisToolsOpen,\n crossSectioningBorderWidth,\n crossSectioningEnabled,\n crossSectioningHighlightColor,\n crossSectioningInteractionHandler,\n crossSectioningIsInteractive,\n crossSectioningOffsetScalar,\n crossSectioningPlanes,\n crossSectioningSliderRange,\n crossSectioningTargetBoundingBox,\n} from '@state/cross-section/cross-section';\nimport { Hit, hitResult } from '@state/hits/hits';\nimport { viewerElement, viewerSceneProvider } from '@state/viewer';\nimport { alignToNormal } from '@util/camera/camera';\nimport * as CrossSectionPlane from '@util/cross-section/section-plane';\nimport { isParallelTo } from '@util/geometry/vector3';\nimport { retainSnapshot, useActionCallback } from '@util/recoil/actions';\nimport { Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\n\nexport const DEFAULT_ALIGN_TO_PLANE_ANIMATION_DURATION_MS = 500;\n\ninterface UseCrossSectioningActions {\n enable(keepSnapshotSelection?: boolean): Promise<void>;\n disable(keepSnapshotSelection?: boolean): Promise<void>;\n\n openAdditionalTools(): void;\n closeAdditionalTools(): void;\n openAlignmentTools(): void;\n closeAlignmentTools(): void;\n openAxisTools(): void;\n closeAxisTools(): void;\n\n beginInteraction(): Promise<void>;\n endInteraction(): Promise<void>;\n updatePlanes(offset: number): Promise<void>;\n flipPlanes(): Promise<void>;\n alignViewToPlane(): Promise<void>;\n updateAxis(axis: CrossSectionPlane.Axis): Promise<void>;\n updateAlignment(\n alignment: CrossSectionPlane.CrossSectionAlignment,\n item?: Hit\n ): Promise<void>;\n\n sectionCurrentHit(): void;\n cancelCurrentHit(): void;\n}\n\nexport function useCrossSectioningActions(): UseCrossSectioningActions {\n const applyCrossSection = useActionCallback(({ snapshot }) => async () => {\n const borderWidth = await snapshot.getPromise(crossSectioningBorderWidth);\n const highlightColor = await snapshot.getPromise(\n crossSectioningHighlightColor\n );\n\n const planes = await snapshot.getPromise(crossSectioningPlanes);\n const sceneProvider = await snapshot.getPromise(viewerSceneProvider);\n const scene = await sceneProvider();\n\n await scene?.crossSectioning().update({\n sectionPlanes: planes,\n highlightColor: highlightColor\n ? Color.fromHexString(highlightColor)\n : undefined,\n lineWidth: borderWidth,\n });\n });\n\n const applyCrossSectionGlobalDefault = useActionCallback(\n ({ set, reset, snapshot }) =>\n async () => {\n const sceneProvider = await snapshot.getPromise(viewerSceneProvider);\n const scene = await sceneProvider();\n\n if (scene != null) {\n const fitAllCamera = scene.camera().viewAll();\n\n reset(crossSectioningAvailableAxes);\n set(crossSectioningPlanes, [\n CrossSectionPlane.towardsCamera(\n scene.camera(),\n CrossSectionPlane.x(fitAllCamera.lookAt.x)\n ),\n ]);\n\n applyCrossSection();\n }\n }\n );\n\n const applyCrossSectionFromSceneHitItem = useActionCallback(\n retainSnapshot(({ snapshot, set }) => async () => {\n const item = await snapshot.tryGetPromise(hitResult).then((r) => r.value);\n const sceneProvider = await snapshot.getPromise(viewerSceneProvider);\n const scene = await sceneProvider();\n\n if (item != null && scene != null) {\n const plane = CrossSectionPlane.fromHit(item, scene.camera());\n\n set(crossSectioningPlanes, plane != null ? [plane] : []);\n set(\n crossSectioningAvailableAxes,\n plane != null ? { x: plane.normal } : CrossSectionPlane.defaultAxes\n );\n\n applyCrossSection();\n }\n })\n );\n\n const enable = useActionCallback(({ set, snapshot }) => async () => {\n const planes = await snapshot.getPromise(crossSectioningPlanes);\n const isEnabled = await snapshot.getPromise(crossSectioningEnabled);\n\n if (!isEnabled) {\n set(crossSectioningEnabled, true);\n\n if (planes.length === 0) {\n await applyCrossSectionGlobalDefault();\n }\n }\n });\n\n const disable = useActionCallback(({ reset, snapshot }) => async () => {\n const isEnabled = await snapshot.getPromise(crossSectioningEnabled);\n\n if (isEnabled) {\n reset(crossSectioningEnabled);\n reset(crossSectioningAdditionalToolsOpen);\n reset(crossSectioningAlignmentToolsOpen);\n reset(crossSectioningAxisToolsOpen);\n reset(crossSectioningPlanes);\n reset(crossSectioningAlignment);\n reset(crossSectioningActiveAxis);\n\n await applyCrossSection();\n }\n });\n\n return {\n enable,\n disable,\n\n openAdditionalTools: useActionCallback(({ set, snapshot }) => async () => {\n const isEnabled = await snapshot.getPromise(crossSectioningEnabled);\n if (!isEnabled) {\n enable();\n }\n set(crossSectioningAdditionalToolsOpen, true);\n }),\n closeAdditionalTools: useActionCallback(({ reset }) => async () => {\n reset(crossSectioningAdditionalToolsOpen);\n }),\n openAlignmentTools: useActionCallback(({ set, reset }) => async () => {\n reset(crossSectioningAxisToolsOpen);\n set(crossSectioningAlignmentToolsOpen, true);\n }),\n closeAlignmentTools: useActionCallback(({ reset }) => async () => {\n reset(crossSectioningAlignmentToolsOpen);\n }),\n openAxisTools: useActionCallback(({ set, reset }) => async () => {\n reset(crossSectioningAlignmentToolsOpen);\n set(crossSectioningAxisToolsOpen, true);\n }),\n closeAxisTools: useActionCallback(({ reset }) => async () => {\n reset(crossSectioningAxisToolsOpen);\n }),\n\n beginInteraction: useActionCallback(({ set, snapshot }) => async () => {\n const interactionHandler = await snapshot.getPromise(\n crossSectioningInteractionHandler\n );\n\n set(crossSectioningIsInteractive, true);\n await interactionHandler.beginInteraction();\n }),\n endInteraction: useActionCallback(({ reset, snapshot }) => async () => {\n const interactionHandler = await snapshot.getPromise(\n crossSectioningInteractionHandler\n );\n\n reset(crossSectioningIsInteractive);\n await interactionHandler.endInteraction();\n }),\n updatePlanes: useActionCallback(\n retainSnapshot(({ set, snapshot }) => async (offset) => {\n const existingPlanes = await snapshot.getPromise(crossSectioningPlanes);\n\n if (existingPlanes.length > 0) {\n const offsetScalar = await snapshot.getPromise(\n crossSectioningOffsetScalar\n );\n const range = await snapshot.getPromise(crossSectioningSliderRange);\n\n const minimum = offsetScalar < 0 ? range.max * -1 : range.min;\n const maximum = offsetScalar < 0 ? range.min * -1 : range.max;\n\n const updated = existingPlanes.map((plane) => ({\n ...plane,\n offset: Math.min(Math.max(offset * offsetScalar, minimum), maximum),\n }));\n\n set(crossSectioningPlanes, updated);\n\n applyCrossSection();\n }\n })\n ),\n flipPlanes: useActionCallback(({ set, snapshot }) => async () => {\n const existingPlanes = await snapshot.getPromise(crossSectioningPlanes);\n\n set(\n crossSectioningPlanes,\n existingPlanes.map((plane) => CrossSectionPlane.invert(plane))\n );\n\n applyCrossSection();\n }),\n alignViewToPlane: useActionCallback(({ snapshot }) => async () => {\n const existingPlanes = await snapshot.getPromise(crossSectioningPlanes);\n const el = await snapshot.getPromise(viewerElement);\n const scene = await el?.scene();\n\n if (existingPlanes.length > 0 && scene != null) {\n await alignToNormal(\n scene.camera(),\n existingPlanes[0].normal,\n scene.boundingBox()\n ).render({\n animation: {\n milliseconds: DEFAULT_ALIGN_TO_PLANE_ANIMATION_DURATION_MS,\n },\n });\n }\n }),\n updateAxis: useActionCallback(\n retainSnapshot(({ set, reset, snapshot }) => async (axis) => {\n const existingPlanes = await snapshot.getPromise(crossSectioningPlanes);\n const availableAxes = await snapshot.getPromise(\n crossSectioningAvailableAxes\n );\n const targetBounds = await snapshot.getPromise(\n crossSectioningTargetBoundingBox\n );\n const alignment = await snapshot.getPromise(crossSectioningAlignment);\n const el = await snapshot.getPromise(viewerElement);\n const scene = await el?.scene();\n\n const chosenAxis = availableAxes[axis];\n const angleIsParallelOrNaN =\n chosenAxis != null &&\n existingPlanes.length > 0 &&\n isParallelTo(existingPlanes[0].normal, chosenAxis) &&\n !isNaN(Vector3.angleTo(existingPlanes[0].normal, chosenAxis));\n\n if (scene != null && !angleIsParallelOrNaN) {\n const currentHitResult = await snapshot\n .tryGetPromise(hitResult)\n .then((r) => r.value);\n\n set(crossSectioningActiveAxis, axis);\n set(crossSectioningPlanes, [\n CrossSectionPlane.toAxis(\n axis,\n availableAxes,\n scene.camera(),\n targetBounds,\n alignment.mode !== 'global'\n ? currentHitResult?.position\n : undefined\n ),\n ]);\n }\n\n reset(crossSectioningAxisToolsOpen);\n\n applyCrossSection();\n })\n ),\n updateAlignment: useActionCallback(\n ({ set, reset }) =>\n async (alignment, hit) => {\n reset(crossSectioningAlignmentToolsOpen);\n set(crossSectioningAlignment, {\n mode: alignment,\n hitPending: alignment !== 'global' && hit == null,\n });\n\n if (alignment === 'global') {\n reset(crossSectioningActiveAxis);\n reset(crossSectioningAvailableAxes);\n\n applyCrossSectionGlobalDefault();\n } else if (alignment === 'surface' && hit != null) {\n await enable();\n\n applyCrossSectionFromSceneHitItem();\n }\n }\n ),\n\n cancelCurrentHit: useActionCallback(({ set, snapshot }) => async () => {\n const alignment = await snapshot.getPromise(crossSectioningAlignment);\n\n if (alignment.hitPending) {\n set(crossSectioningAlignment, { ...alignment, hitPending: false });\n }\n }),\n sectionCurrentHit: useActionCallback(({ set, snapshot }) => async () => {\n const alignment = await snapshot.getPromise(crossSectioningAlignment);\n\n if (alignment.hitPending) {\n set(crossSectioningAlignment, {\n ...alignment,\n hitPending: false,\n });\n\n if (alignment.mode === 'surface') {\n applyCrossSectionFromSceneHitItem();\n }\n }\n }),\n };\n}\n","import {\n crossSectioningAlignment,\n useCrossSectioningActions,\n} from '@state/cross-section';\nimport { retainSnapshot, useActionCallback } from '@util/recoil/actions';\nimport type { TapEventDetails } from '@vertexvis/viewer';\n\nimport { contextMenuItem } from \"@state/context-menu\";\nimport {\n currentHitResult,\n hitResult,\n hitResultsLongPressDetails,\n hitResultsTapDetails,\n previousHitResult,\n} from './hits';\n\nexport interface UseHitActions {\n tap: (\n event: CustomEvent<TapEventDetails>,\n ...standardTapActions: VoidFunction[]\n ) => Promise<void>;\n longPress: (event: CustomEvent<TapEventDetails>) => Promise<void>;\n}\n\nexport const useHitActions = (): UseHitActions => {\n const crossSectioningActions = useCrossSectioningActions();\n\n const clearMeasurement = useActionCallback(\n retainSnapshot(({ snapshot }) => async () => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const currentHitResult = await snapshot\n .tryGetPromise(hitResult)\n .then((r) => r.value);\n\n // TODO: clear measurement\n })\n );\n\n const updateTransformWidgetPosition = useActionCallback(\n retainSnapshot(({ snapshot }) => async () => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const currentHitResult = await snapshot\n .tryGetPromise(hitResult)\n .then((r) => r.value);\n\n // TODO: update widget position\n })\n );\n\n const setContextMenuItem = useActionCallback(\n retainSnapshot(({ set, snapshot }) => async () => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const currentHitResult = await snapshot\n .tryGetPromise(hitResult)\n .then((r) => r.value);\n\n set(contextMenuItem, currentHitResult);\n })\n );\n\n const setCurrentHitResult = useActionCallback(\n retainSnapshot(({ snapshot, set }) => async () => {\n set(\n currentHitResult,\n await snapshot.tryGetPromise(hitResult).then((r) => r.value)\n );\n })\n );\n\n return {\n tap: useActionCallback(\n retainSnapshot(\n ({ snapshot, set }) =>\n async ({ detail }, ...standardTapActions) => {\n const currentWidgetPosition = undefined;\n\n const currentCrossSectioningAlignment = await snapshot.getPromise(\n crossSectioningAlignment\n );\n\n const isStandardTap = detail?.buttons !== 2 && !detail?.altKey;\n const isModifierTap =\n detail.altKey ||\n detail.ctrlKey ||\n detail.metaKey ||\n detail.shiftKey;\n const isValidSelectionTap =\n isStandardTap && !currentCrossSectioningAlignment.hitPending;\n\n const currentHitResult = await snapshot\n .tryGetPromise(hitResult)\n .then((r) => r.value);\n\n set(previousHitResult, currentHitResult);\n set(hitResultsTapDetails, detail);\n\n clearMeasurement();\n if (isValidSelectionTap) {\n standardTapActions.forEach((action) => action());\n\n if (!isModifierTap || currentWidgetPosition == null) {\n updateTransformWidgetPosition();\n }\n }\n setContextMenuItem();\n crossSectioningActions.sectionCurrentHit();\n\n setCurrentHitResult();\n }\n )\n ),\n longPress: useActionCallback(\n retainSnapshot(({ snapshot, set, reset }) => async (event) => {\n reset(hitResultsTapDetails);\n set(hitResultsLongPressDetails, event.detail);\n await snapshot.tryGetPromise(hitResult);\n setContextMenuItem();\n setCurrentHitResult();\n })\n ),\n };\n};\n","import type { TapEventDetails } from '@vertexvis/viewer';\nimport { selector } from 'recoil';\n\nimport {\n currentHitResult,\n Hit,\n hitResultsLongPressDetails,\n hitResultsTapDetails,\n previousHitResult,\n} from './hits';\n\nexport interface HitState {\n tapDetails?: TapEventDetails;\n longPressDetails?: TapEventDetails;\n previousHitResult?: Hit;\n currentHitResult?: Hit;\n}\n\nexport const hitState = selector<HitState>({\n key: 'viewerToolkitHitState',\n get: ({ get }) => {\n const tapDetails = get(hitResultsTapDetails);\n const longPressDetails = get(hitResultsLongPressDetails);\n const previous = get(previousHitResult);\n const current = get(currentHitResult);\n\n const state = {\n tapDetails,\n longPressDetails,\n previousHitResult: previous,\n currentHitResult: current,\n };\n\n return state;\n },\n});\n","import { Point } from '@vertexvis/geometry';\nimport {\n contextMenuActions, contextMenuActive,\n contextMenuPosition, contextMenuTarget,\n ContextMenuType\n} from \"@state/context-menu/context-menu\";\nimport { useActionCallback } from \"@util/recoil/actions\";\nimport { hitResultsSkipNextTap } from \"@state/hits\";\n\ntype ContextMenuEventPredicate = (\n event: MouseEvent | TouchEvent | Event\n) => boolean;\n\nexport interface UseContextMenuActions {\n pointerDown(event: PointerEvent, pointOverride?: Point.Point): void;\n pointerUp(\n event: PointerEvent,\n type: ContextMenuType,\n predicate?: ContextMenuEventPredicate,\n onOpen?: (event: PointerEvent, point: Point.Point) => void,\n pointOverride?: Point.Point,\n ): void;\n contextMenu(event: Event, predicate?: ContextMenuEventPredicate): void;\n longPress(\n event: TouchEvent,\n type: ContextMenuType,\n predicate?: ContextMenuEventPredicate,\n onOpen?: (event: TouchEvent, point: Point.Point) => void\n ): void;\n\n clearActiveContextMenu(dismissedFromWindowPointerEvent?: boolean): void;\n clearDismissedState(): void;\n}\n\nexport function useContextMenuActions(): UseContextMenuActions {\n return {\n pointerDown: useActionCallback(({ set }) => async (event, pointOverride) => {\n if (event.button === 2) {\n const xCoordinate = pointOverride?.x ?? event.clientX;\n const yCoordinate = pointOverride?.y ?? event?.clientY;\n\n set(contextMenuPosition, Point.create(xCoordinate, yCoordinate));\n set(contextMenuTarget, event.target as HTMLElement);\n }\n }),\n pointerUp: useActionCallback(\n ({ snapshot, set }) =>\n async (event, type, predicate, onOpen, pointOverride) => {\n const downPosition = await snapshot.getPromise(contextMenuPosition);\n const active = await snapshot.getPromise(contextMenuActive);\n\n if (downPosition != null && active == null) {\n const xCoordinate = pointOverride?.x ?? event.clientX;\n const yCoordinate = pointOverride?.y ?? event?.clientY;\n\n const point = Point.create(xCoordinate, yCoordinate);\n const pointDistance =\n downPosition != null ? Point.distance(downPosition, point) : 0;\n const predicateResult = predicate == null || predicate(event);\n\n if (pointDistance < 2 && predicateResult) {\n onOpen?.(event, downPosition ?? point);\n set(contextMenuActive, type);\n }\n }\n }\n ),\n contextMenu: useActionCallback(() => (event, predicate) => {\n if (predicate == null || predicate(event)) {\n event.preventDefault();\n }\n }),\n longPress: useActionCallback(\n ({ set }) =>\n (event, type, predicate, onOpen) => {\n if (predicate == null || predicate(event)) {\n const point = Point.create(\n event.touches[0].clientX,\n event.touches[0].clientY\n );\n set(contextMenuPosition, point);\n set(contextMenuTarget, event.target as HTMLElement);\n set(contextMenuActive, type);\n onOpen?.(event, point);\n }\n }\n ),\n clearActiveContextMenu: useActionCallback(\n ({ reset, set }) =>\n (dismissedFromWindowPointerEvent) => {\n set(hitResultsSkipNextTap, !!dismissedFromWindowPointerEvent);\n reset(contextMenuActive);\n reset(contextMenuActions);\n reset(contextMenuPosition);\n }\n ),\n clearDismissedState: useActionCallback(\n ({ reset }) =>\n () =>\n reset(hitResultsSkipNextTap)\n ),\n };\n}","export function targetWithinMenu(event: PointerEvent): boolean {\n return (\n event.target instanceof Element && isChildOf('vertex-menu', event.target)\n );\n}\n\nexport function targetShouldSkipNextHit(event: PointerEvent): boolean {\n return (\n event.target instanceof Element && isChildOf('vertex-viewer', event.target)\n );\n}\n\nfunction isChildOf(elementType: string, target: Element): boolean {\n return target.closest(elementType) != null;\n}","import React from 'react';\nimport type { PopoverPlacement } from '@vertexvis/ui';\nimport { VertexMenu } from '@vertexvis/ui-react';\nimport { useStackKeyBinding, useLongPress } from \"@state/keybinding\";\nimport { useRecoilValue } from \"recoil\";\nimport { targetShouldSkipNextHit, targetWithinMenu, useContextMenuActions,\n contextMenuActive, contextMenuActivePosition, ContextMenuType } from \"@state/context-menu\";\nimport { Point } from \"@vertexvis/geometry\";\n\nexport interface Props {\n targetElement?: HTMLElement | null;\n menuType: ContextMenuType;\n disableBackdrop?: boolean;\n\n openPredicate?: (e: MouseEvent | TouchEvent | Event) => boolean;\n\n onOpen?: (event: PointerEvent | TouchEvent, position: Point.Point) => void;\n onClose?: VoidFunction;\n\n children: React.ReactNode;\n}\n\nexport const VertexContextMenu = ({\n targetElement,\n menuType,\n disableBackdrop,\n openPredicate,\n onOpen,\n onClose,\n children,\n}: Props): JSX.Element => {\n const contextMenuActions = useContextMenuActions();\n const activeContextMenu = useRecoilValue(contextMenuActive);\n const activePosition = useRecoilValue(contextMenuActivePosition);\n\n const fallbackPlacements = React.useMemo<PopoverPlacement[]>(\n () => ['bottom-end', 'top-start', 'top-end', 'right', 'left'],\n []\n );\n\n useStackKeyBinding(\n {\n id: 'ContextMenu',\n keyBind: 'Escape',\n fn: contextMenuActions.clearActiveContextMenu,\n addPredicate: () =>\n activeContextMenu != null && activeContextMenu === menuType,\n cancelPredicate: () => activeContextMenu == null,\n },\n [activeContextMenu]\n );\n\n const target = React.useMemo(() => {\n if (targetElement != null) {\n return targetElement;\n } else if (openPredicate != null) {\n return window;\n }\n return undefined;\n }, [targetElement, openPredicate]);\n\n useLongPress({\n target,\n callback: (e) =>\n contextMenuActions.longPress(e, menuType, openPredicate, onOpen),\n onMovement: () => contextMenuActions.clearActiveContextMenu(),\n });\n\n React.useEffect(() => {\n const handleWindowPointerDown = (event: PointerEvent): void => {\n const withinMenu = targetWithinMenu(event);\n\n if (\n !withinMenu &&\n event.buttons !== 2 &&\n activeContextMenu === menuType\n ) {\n const skipNextHit = targetShouldSkipNextHit(event);\n\n contextMenuActions.clearActiveContextMenu(skipNextHit);\n }\n };\n\n if (disableBackdrop) {\n window.addEventListener(\n 'pointerdown',\n handleWindowPointerDown as EventListener\n );\n\n return () => {\n window.removeEventListener(\n 'pointerdown',\n handleWindowPointerDown as EventListener\n );\n };\n }\n\n return undefined;\n }, [disableBackdrop, menuType, activeContextMenu]);\n\n React.useEffect(() => {\n const handlePointerDown = (event: Event): void => {\n const pointerEvent = event as PointerEvent;\n const targetElement = target as HTMLElement;\n const boundingBox = targetElement != null ? targetElement.getBoundingClientRect() : undefined;\n\n const xCoordinate = pointerEvent.clientX - (boundingBox?.x ?? 0);\n const yCoordinate = pointerEvent.clientY - (boundingBox?.y ?? 0);\n\n contextMenuActions.pointerDown(pointerEvent, Point.create(xCoordinate, yCoordinate));\n };\n const handlePointerUp = (event: Event): void => {\n const pointerEvent = event as PointerEvent;\n const targetElement = target as HTMLElement;\n const boundingBox = targetElement != null ? targetElement.getBoundingClientRect() : undefined;\n\n const xCoordinate = pointerEvent.clientX - (boundingBox?.x ?? 0);\n const yCoordinate = pointerEvent.clientY - (boundingBox?.y ?? 0);\n\n contextMenuActions.pointerUp(\n event as PointerEvent,\n menuType,\n openPredicate,\n onOpen,\n Point.create(xCoordinate, yCoordinate)\n );\n };\n const handleContextMenu = (event: Event): void =>\n contextMenuActions.contextMenu(event, openPredicate);\n\n target?.addEventListener('pointerdown', handlePointerDown);\n target?.addEventListener('pointerup', handlePointerUp);\n target?.addEventListener('contextmenu', handleContextMenu);\n\n return () => {\n target?.removeEventListener('pointerdown', handlePointerDown);\n target?.removeEventListener('pointerup', handlePointerUp);\n target?.removeEventListener('contextmenu', handleContextMenu);\n };\n }, [targetElement, menuType, openPredicate]);\n\n return (\n <VertexMenu\n data-testid={`${menuType}-context-menu`}\n open={activeContextMenu === menuType}\n position={activePosition}\n fallbackPlacements={fallbackPlacements}\n backdrop={!disableBackdrop}\n onMenuClosed={() => {\n contextMenuActions.clearActiveContextMenu();\n onClose?.();\n }}\n >\n <div className=\"pt-1\">{children}</div>\n </VertexMenu>\n );\n};","export interface Measure {\n name: string;\n duration: number;\n startTime: number;\n}\n\nexport const SCENE_ALTERATION_PERFORMANCE = 'Scene Alteration Performance';\n\nexport enum SceneAlterationPerformanceType {\n HIDE_ITEM = 'Hide Item',\n SHOW_ONLY_SELECTED = 'Show Only Selected',\n HIDE_SELECTED = 'Hide Selected',\n SHOW_ONLY_ITEM = 'Show Only Item',\n SHOW_ALL = 'Show All',\n HIDE_ALL = 'Hide All',\n SELECT_FILTERED_ITEMS = 'Select Filtered Items',\n INVERT_SELECTION = 'Invert Selection',\n CLEAR_ALL_TRANSFORMS = 'Clear All Transforms',\n CLEAR_SELECTED_TRANSFORMS = 'Clear Selected Transforms',\n CLEAR_SELECTION = 'Clear Selection',\n DESELECTING_ITEMS = 'Deselecting Items',\n SELECTING_ITEMS = 'Selecting Items',\n SELECTING_ONLY_ITEM = 'Selecting Only Item',\n SELECTING_ANCESTOR = 'Selecting Ancestor',\n APPLY_MATERIAL_OVERRIDE_TO_ALL = 'Apply Material Override To All',\n APPLY_MATERIAL_OVERRIDE_TO_SELECTION = 'Apply Material Override To Selection',\n CLEAR_ALL_MATERIAL_OVERRIDES = 'Clear All Material Overrides',\n CLEAR_SELECTED_MATERIAL_OVERRIDES = 'Clear Selected Material Overrides',\n\n // Phantom operations\n SET_PHANTOM_ALL = 'Set Phantom All',\n SET_PHANTOM_SELECTED_ITEMS = 'Set Phantom Selected Items',\n CLEAR_PHANTOM_ALL = 'Clear Phantom All',\n CLEAR_PHANTOM_SELECTED_ITEMS = 'Clear Phantom Selected Items',\n SET_PHANTOM_NON_SELECTED_ITEMS = 'Set Phantom Non Selected Items',\n RESTORE_PHANTOM_OVERRIDES = 'Restore Phantom Overrides',\n\n // End item operations\n SET_ITEM_AS_END_ITEM = 'Set Item as End Item',\n UNSET_ITEM_AS_END_ITEM = 'Unset Item as End Item',\n\n // PMI annotation operations\n SHOW_ANNOTATION = 'Show Annotation',\n HIDE_ANNOTATION = 'Hide Annotation',\n}\n","import { UUID } from '@vertexvis/utils';\nimport type { SceneViewSummary } from '@vertexvis/viewer/dist/types/lib/types';\nimport { atom, atomFamily, selector } from 'recoil';\n\nexport interface SelectionItem {\n id: UUID.UUID;\n metadata?: unknown[]; // TODO: Include metadata types\n ancestors?: string[];\n}\n\nexport const selectionSelectedItems = atomFamily<\n SelectionItem | undefined,\n UUID.UUID\n>({\n key: 'selectionSelectedItems',\n default: undefined,\n});\n\nexport const selectionSelectedItemIds = atom<UUID.UUID[]>({\n key: 'selectionSelectedItemIds',\n default: [],\n});\n\nexport const selectionLastSelected = atom<SelectionItem | undefined>({\n key: 'selectionLastSelected',\n default: undefined,\n});\n\nexport const selectionLastSelectionFromViewer = atom<boolean>({\n key: 'selectionLastSelectionFromViewer',\n default: false,\n});\n\nexport const selectionLastSelectWasMultiSelect = atom<boolean>({\n key: 'selectionLastSelectWasMultiSelect',\n default: false,\n});\n\nexport const selectionHighestSelectedAncestor = selector<UUID.UUID | undefined>(\n {\n key: 'selectionHighestSelectedAncestor',\n get: ({ get }) => {\n const lastSelected = get(selectionLastSelected);\n const selectedIds = get(selectionSelectedItemIds);\n\n return (\n lastSelected?.ancestors?.find((ancestorId) =>\n selectedIds.includes(ancestorId)\n ) ?? lastSelected?.id\n );\n },\n }\n);\n\nexport const selectionPreviousVisibleSummary = atom<\n SceneViewSummary.ItemSetSummary | undefined\n>({\n key: 'selectionPreviousVisibleSummary',\n default: undefined,\n});\n\nexport const selectionVisibleSummary = atom<\n SceneViewSummary.ItemSetSummary | undefined\n>({\n key: 'selectionVisibleSummary',\n default: undefined,\n});\n\nexport const selectionVisibleCount = selector<number>({\n key: 'selectionVisibleCount',\n get: ({ get }) => get(selectionVisibleSummary)?.count ?? 0,\n});\n","import { hitResult, hitResultsTapDetails } from '@state/hits';\nimport { SceneAlterationPerformanceType } from '@state/performance';\nimport { useViewerSceneActions } from '@state/viewer';\nimport { retainSnapshot, useActionCallback } from '@util/recoil/actions';\nimport { UUID } from '@vertexvis/utils';\n\nimport {\n SelectionItem,\n selectionLastSelected,\n selectionLastSelectionFromViewer,\n selectionLastSelectWasMultiSelect,\n selectionSelectedItemIds,\n selectionSelectedItems,\n} from './selection';\n\nexport interface SelectOptions {\n clear?: boolean;\n}\n\nexport interface ClearAndSelectOptions {\n ignoreAncestorSelection?: boolean;\n}\n\nexport interface SyncSelectionOptions {\n selected: boolean;\n multiSelect?: boolean;\n}\n\nexport interface UseSelectionActions {\n select: (\n item: SelectionItem,\n options?: SelectOptions\n ) => void | Promise<void>;\n toggleSelection: (item: SelectionItem) => void | Promise<void>;\n clearAndSelect: (\n item: SelectionItem,\n options?: ClearAndSelectOptions\n ) => void | Promise<void>;\n\n selectCurrentHit: VoidFunction;\n syncSelection: (\n item: SelectionItem,\n options: SyncSelectionOptions\n ) => void | Promise<void>;\n\n deselect: (id: UUID.UUID) => void | Promise<void>;\n clearSelection: () => Promise<void>;\n resetSelectionState: () => Promise<void>;\n toggleLastSelectWasMultiSelect: (\n multiSelection: boolean\n ) => void | Promise<void>;\n selectForModelViewsPanel: (item?: SelectionItem) => void;\n}\n\nexport function useSelectionActions(): UseSelectionActions {\n const viewerActions = useViewerSceneActions();\n\n const clearSelectedIds = useActionCallback(\n ({ snapshot, reset }) =>\n async () => {\n const selectedIds = await snapshot.getPromise(selectionSelectedItemIds);\n selectedIds.forEach((id) => reset(selectionSelectedItems(id)));\n }\n );\n\n const select = useActionCallback(\n ({ snapshot, reset, set }) =>\n async (item: SelectionItem, options?: SelectOptions) => {\n const existing = await snapshot.getPromise(\n selectionSelectedItems(item.id)\n );\n const selectedIds = await snapshot.getPromise(selectionSelectedItemIds);\n const nextAncestorId = [...(item.ancestors ?? [])]\n ?.reverse()\n .find((id) => !selectedIds.includes(id));\n\n if (existing != null && nextAncestorId != null) {\n // If already selected and has a parent, select the parent\n set(selectionSelectedItems(nextAncestorId), { id: nextAncestorId });\n set(selectionSelectedItemIds, (previous) => [\n ...previous,\n nextAncestorId,\n ]);\n viewerActions.execute(\n SceneAlterationPerformanceType.SELECTING_ANCESTOR,\n viewerActions.selectItemsTransform(nextAncestorId)\n );\n } else if (options?.clear) {\n // Select only the current item since options.clear is true\n set(selectionSelectedItems(item.id), item);\n set(selectionSelectedItemIds, [item.id]);\n\n viewerActions.execute(\n SceneAlterationPerformanceType.SELECTING_ONLY_ITEM,\n viewerActions.clearSelectionTransform,\n viewerActions.selectItemsTransform(item.id)\n );\n } else {\n // Add item to current selection without clearing previous selection\n set(selectionSelectedItems(item.id), item);\n set(selectionSelectedItemIds, (previous) => [...previous, item.id]);\n\n viewerActions.execute(\n SceneAlterationPerformanceType.SELECTING_ITEMS,\n viewerActions.selectItemsTransform(item.id)\n );\n }\n selectForModelViewsPanel(item);\n set(selectionLastSelected, item);\n set(selectionLastSelectionFromViewer, true);\n reset(selectionLastSelectWasMultiSelect);\n }\n );\n\n const deselect = useActionCallback(\n ({ reset, set }) =>\n async (deselectingId: UUID.UUID) => {\n reset(selectionSelectedItems(deselectingId));\n reset(selectionLastSelectWasMultiSelect);\n set(selectionSelectedItemIds, (previous) =>\n previous.filter((id) => id !== deselectingId)\n );\n viewerActions.execute(\n SceneAlterationPerformanceType.DESELECTING_ITEMS,\n viewerActions.deselectItemsTransform(deselectingId)\n );\n }\n );\n\n const toggleSelection = useActionCallback(\n ({ snapshot }) =>\n async (item: SelectionItem) => {\n const existing = await snapshot.getPromise(\n selectionSelectedItems(item.id)\n );\n\n if (existing != null) {\n await deselect(existing.id);\n } else {\n await select(item);\n }\n }\n );\n\n const clearAndSelect = useActionCallback(\n ({ snapshot, reset, set }) =>\n async (item: SelectionItem, options: ClearAndSelectOptions = {}) => {\n const existing = await snapshot.getPromise(\n selectionSelectedItems(item.id)\n );\n const selectedIds = await snapshot.getPromise(selectionSelectedItemIds);\n selectedIds\n .filter((id) => id !== item.id && !item.ancestors?.includes(id))\n .forEach((id) => reset(selectionSelectedItems(id)));\n\n reset(selectionLastSelectWasMultiSelect);\n if (!existing) {\n reset(selectionSelectedItemIds);\n } else if (options.ignoreAncestorSelection) {\n reset(selectionSelectedItemIds);\n reset(selectionSelectedItems(existing.id));\n } else {\n const selectedItemAndAncestors = selectedIds.filter(\n (id) => id === item.id || item.ancestors?.includes(id)\n );\n set(selectionSelectedItemIds, selectedItemAndAncestors);\n }\n\n // TODO: clear PMI + transform manipulator orientation\n\n await select(item, { clear: true });\n }\n );\n\n const resetSelectionState = useActionCallback(({ reset }) => async () => {\n await clearSelectedIds();\n reset(selectionSelectedItemIds);\n reset(selectionLastSelected);\n reset(selectionLastSelectionFromViewer);\n reset(selectionLastSelectWasMultiSelect);\n\n // TODO: clear transform manipulator state\n });\n\n const clearSelection = useActionCallback(() => async () => {\n await resetSelectionState();\n\n viewerActions.execute(\n SceneAlterationPerformanceType.CLEAR_SELECTION,\n viewerActions.clearSelectionTransform\n );\n });\n\n const toggleLastSelectWasMultiSelect = useActionCallback(\n ({ set }) =>\n async (multiSelection: boolean) => {\n set(selectionLastSelectWasMultiSelect, multiSelection);\n }\n );\n\n const selectForModelViewsPanel = useActionCallback(\n ({ reset, set }) =>\n (item?: SelectionItem) => {\n // TODO: clear loaded PMI\n }\n );\n\n return {\n select,\n toggleSelection,\n clearAndSelect,\n selectCurrentHit: useActionCallback(\n retainSnapshot(({ snapshot }) => async () => {\n const currentHitResult = await snapshot\n .tryGetPromise(hitResult)\n .then((r) => r.value);\n const currentTapDetails =\n await snapshot.getPromise(hitResultsTapDetails);\n const appendModifierPressed =\n currentTapDetails?.metaKey ||\n currentTapDetails?.ctrlKey ||\n currentTapDetails?.shiftKey;\n\n if (currentHitResult != null && !appendModifierPressed) {\n clearAndSelect(currentHitResult);\n } else if (currentHitResult != null && appendModifierPressed) {\n toggleSelection(currentHitResult);\n } else {\n clearSelection();\n }\n })\n ),\n syncSelection: useActionCallback(\n ({ set, reset }) =>\n async (item, options) => {\n if (options.selected) {\n await clearSelectedIds();\n\n set(selectionSelectedItems(item.id), item);\n\n if (options.multiSelect) {\n set(selectionSelectedItemIds, (previous) => [\n ...previous.filter((id) => id !== item.id),\n item.id,\n ]);\n } else {\n set(selectionSelectedItemIds, [item.id]);\n }\n\n selectForModelViewsPanel(item);\n set(selectionLastSelected, item);\n set(selectionLastSelectionFromViewer, false);\n set(selectionLastSelectWasMultiSelect, !!options.multiSelect);\n } else {\n reset(selectionSelectedItems(item.id));\n reset(selectionLastSelectWasMultiSelect);\n set(selectionSelectedItemIds, (previous) =>\n previous.filter((id) => id !== item.id)\n );\n }\n }\n ),\n deselect,\n clearSelection,\n resetSelectionState,\n toggleLastSelectWasMultiSelect,\n selectForModelViewsPanel,\n };\n}\n","import { UUID } from '@vertexvis/utils';\nimport { selector } from 'recoil';\n\nimport {\n selectionHighestSelectedAncestor,\n SelectionItem,\n selectionLastSelected,\n selectionSelectedItemIds,\n} from './selection';\n\nexport interface SelectionState {\n selectedItemIds: UUID.UUID[];\n lastSelected?: SelectionItem;\n highestSelectedAncestorId?: UUID.UUID;\n}\n\nexport const selectionState = selector<SelectionState>({\n key: 'viewerToolkitSelectionState',\n get: ({ get }) => {\n const selectedItemIds = get(selectionSelectedItemIds);\n const lastSelected = get(selectionLastSelected);\n const highestSelectedAncestorId = get(selectionHighestSelectedAncestor);\n\n const state = {\n selectedItemIds,\n lastSelected,\n highestSelectedAncestorId,\n };\n\n return state;\n },\n});\n","import type { SceneTreeController } from '@vertexvis/viewer';\nimport { atom, selector } from 'recoil';\n\nexport const sceneTreeLoaderVisible = atom<boolean>({\n key: 'sceneTreeLoaderVisible',\n default: false,\n});\n\nexport const sceneTreeElement = atom<\n HTMLVertexSceneTreeElement | null | undefined\n>({\n key: 'sceneTreeElement',\n default: undefined,\n});\n\nexport const sceneTreeWidth = atom<number | undefined>({\n key: 'sceneTreeWidth',\n default: undefined,\n});\n\nexport const sceneTreeController = selector<SceneTreeController | undefined>({\n key: 'sceneTreeController',\n get: ({ get }) => get(sceneTreeElement)?.controller,\n dangerouslyAllowMutability: true,\n});\n","import { selectionLastSelected, useSelectionActions } from '@state/selection';\nimport { useViewerCameraActions } from '@state/viewer/camera/actions';\nimport { useActionCallback } from '@util/recoil/actions';\nimport { Node } from '@vertexvis/scene-tree-protos/scenetree/protos/domain_pb';\nimport type { SceneTreeOperationHandler } from '@vertexvis/viewer/dist/types/components/scene-tree/lib/handlers';\n\nimport { sceneTreeElement } from './core';\nimport {contextMenuItem} from \"@state/context-menu\";\n\nexport interface UseSceneTreeActions {\n toggleSelection: SceneTreeOperationHandler;\n toggleExpansion: SceneTreeOperationHandler;\n toggleVisibility: SceneTreeOperationHandler;\n\n flyToRow: (rowClientY: number) => Promise<void>;\n setContextMenuItem: (rowClientY: number) => Promise<void>;\n}\n\nexport function useSceneTreeActions(): UseSceneTreeActions {\n const selectionActions = useSelectionActions();\n const viewerCameraActions = useViewerCameraActions();\n\n return {\n toggleSelection: useActionCallback(\n ({ snapshot }) =>\n async (\n event: PointerEvent,\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement\n ) => {\n if (event.defaultPrevented || event.button !== 0) {\n return;\n }\n\n if (!event.altKey) {\n if ((event.ctrlKey || event.metaKey) && node.selected) {\n tree.deselectItem(node);\n } else if (node.selected) {\n tree.selectItem(node, {\n recurseParent: true,\n });\n } else if (!node.selected) {\n tree.selectItem(node, {\n append: event.ctrlKey || event.metaKey,\n range: event.shiftKey,\n });\n }\n }\n\n if (node.id != null) {\n const lastSelected = await snapshot.getPromise(\n selectionLastSelected\n );\n\n selectionActions.syncSelection(\n {\n id: node.id?.hex,\n ancestors: lastSelected?.ancestors ?? [],\n },\n {\n selected:\n event.metaKey || event.ctrlKey ? !node.selected : true,\n multiSelect: event.shiftKey || event.metaKey || event.ctrlKey,\n }\n );\n\n // TODO: transform widget interaction\n }\n }\n ),\n toggleExpansion: useActionCallback(\n () =>\n (\n event: PointerEvent,\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement\n ) => {\n tree.toggleExpandItem(node);\n }\n ),\n toggleVisibility: useActionCallback(\n () =>\n (\n event: PointerEvent,\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement\n ) => {\n tree.toggleItemVisibility(node);\n }\n ),\n flyToRow: useActionCallback(({ snapshot }) => async (rowClientY) => {\n const element = await snapshot.getPromise(sceneTreeElement);\n\n const row = await element?.getRowAtClientY(rowClientY);\n\n if (row?.node.id?.hex != null) {\n await viewerCameraActions.flyToById(row.node.id.hex);\n }\n }),\n setContextMenuItem: useActionCallback(({ set, snapshot }) => async (rowClientY) => {\n const element = await snapshot.getPromise(sceneTreeElement);\n\n const row = await element?.getRowAtClientY(rowClientY);\n\n set(contextMenuItem, row);\n }),\n };\n}\n","import {\n SceneItemOperationsBuilder,\n TerminalItemOperationBuilder,\n} from '@vertexvis/viewer/dist/types/lib/scenes';\nimport React from 'react';\nimport { useApplyKeyBinding } from \"@state/keybinding\";\n\nexport interface SceneItemOperationsProps {\n viewerElement: HTMLVertexViewerElement | null;\n}\n\nexport interface SceneItemOperations {\n sceneItemsOperation: (\n f: (builder: SceneItemOperationsBuilder) => TerminalItemOperationBuilder,\n ids?: string[]\n ) => Promise<void>;\n showOnlySelected: () => Promise<void>;\n showOnlyItem: (id: string) => Promise<void>;\n hideSelected: () => Promise<void>;\n}\n\nexport function useSceneItemsOperations({ viewerElement }: SceneItemOperationsProps): SceneItemOperations {\n const sceneItemsOperation = React.useCallback(\n async (\n f: (builder: SceneItemOperationsBuilder) => TerminalItemOperationBuilder,\n ids?: string[]\n ): Promise<void> => {\n const scene = await viewerElement?.scene();\n if (ids == null) {\n await scene\n ?.items((op) => f(op.where((q) => q.all())))\n .execute();\n } else if (ids.length > 0) {\n await scene\n ?.items((op) => f(op.where((q) => q.withItemIds(ids))))\n .execute();\n }\n },\n [viewerElement]\n );\n\n useApplyKeyBinding({\n fn: React.useCallback(async () => {\n const animation = { milliseconds: 500 };\n const scene = await viewerElement?.scene();\n await scene?.camera().viewAll().render({ animation });\n }, [viewerElement]),\n keyBind: 'f',\n });\n\n const showOnlySelected = React.useCallback(async (): Promise<void> => {\n const scene = await viewerElement?.scene();\n scene\n ?.items((op) => [\n op.where((q) => q.all()).hide(),\n op.where((q) => q.withSelected()).show(),\n ])\n .execute();\n }, [viewerElement]);\n\n const hideSelected = React.useCallback(async (): Promise<void> => {\n const scene = await viewerElement?.scene();\n scene\n ?.items((op) => [op.where((q) => q.withSelected()).hide()])\n .execute();\n }, [viewerElement]);\n\n const showOnlyItem = React.useCallback(\n async (id: string): Promise<void> => {\n const scene = await viewerElement?.scene();\n scene\n ?.items((op) => [\n op.where((q) => q.all()).hide(),\n op.where((q) => q.withItemIds([id])).show(),\n ])\n .execute();\n },\n [viewerElement]\n );\n\n return {\n sceneItemsOperation,\n showOnlySelected,\n hideSelected,\n showOnlyItem,\n };\n}","import React from 'react';\nimport { VertexIcon, VertexMenuItem } from \"@vertexvis/ui-react\";\nimport { useRecoilValue } from \"recoil\";\nimport { useSceneItemsOperations } from \"@state/viewer/scene/item-operations\";\nimport { viewerElement } from \"@state/viewer\";\nimport { selectionSelectedItemIds } from \"@state/selection\";\n\nexport const VertexHideSelectedMenuItem = (): JSX.Element => {\n const viewerHTMLElement = useRecoilValue(viewerElement);\n const selectedItems = useRecoilValue(selectionSelectedItemIds);\n\n const sceneItemOperations = useSceneItemsOperations({ viewerElement: viewerHTMLElement ?? null });\n\n return (\n <VertexMenuItem\n data-testid=\"hide-selected-menu-option\"\n onClick={() => sceneItemOperations.hideSelected()}\n disabled={selectedItems.length === 0}\n >\n <VertexIcon slot=\"icon\" name=\"visibility-hidden\" size=\"sm\"/>\n <div className=\"pl-2\">Hide Selected</div>\n </VertexMenuItem>\n );\n};","import React from 'react';\nimport { VertexIcon, VertexMenuItem } from \"@vertexvis/ui-react\";\nimport { useRecoilValue } from \"recoil\";\nimport { useSceneItemsOperations } from \"@state/viewer/scene/item-operations\";\nimport { viewerElement } from \"@state/viewer\";\n\nexport const VertexHideAllMenuItem = (): JSX.Element => {\n const viewerHTMLElement = useRecoilValue(viewerElement);\n\n const sceneItemOperations = useSceneItemsOperations({ viewerElement: viewerHTMLElement ?? null });\n\n return (\n <VertexMenuItem\n data-testid=\"hide-all-menu-option\"\n onClick={() => {\n sceneItemOperations.sceneItemsOperation(\n (builder) => builder.hide()\n );\n }}\n >\n <VertexIcon slot=\"icon\" name=\"visibility-hidden\" size=\"sm\" />\n <div className=\"pl-2\">Hide All Parts</div>\n </VertexMenuItem>\n );\n};","import React from 'react';\nimport { VertexIcon, VertexMenuItem } from \"@vertexvis/ui-react\";\nimport { useRecoilValue } from \"recoil\";\nimport { contextMenuItem, contextMenuItemIsRow } from \"@state/context-menu\";\nimport { useSceneItemsOperations } from \"@state/viewer/scene/item-operations\";\nimport { viewerElement } from \"@state/viewer\";\n\nexport const VertexShowOnlyMenuItem = (): JSX.Element => {\n const viewerHTMLElement = useRecoilValue(viewerElement);\n const currentItem = useRecoilValue(contextMenuItem);\n\n const sceneItemOperations = useSceneItemsOperations({ viewerElement: viewerHTMLElement ?? null });\n\n return (\n <VertexMenuItem\n data-testid=\"show-only-menu-option\"\n onClick={() => {\n const isRow = contextMenuItemIsRow(currentItem);\n\n const itemId = isRow\n ? currentItem?.node.id?.hex\n : currentItem?.id;\n\n if (itemId != null) {\n sceneItemOperations.showOnlyItem(itemId);\n }\n }}\n disabled={currentItem == null}\n >\n <VertexIcon slot=\"icon\" name=\"visibility-visible\" size=\"sm\" />\n <div className=\"pl-2\">Show Only Part</div>\n </VertexMenuItem>\n );\n};","import React from 'react';\nimport { VertexIcon, VertexMenuItem } from \"@vertexvis/ui-react\";\nimport { useRecoilValue } from \"recoil\";\nimport { useSceneItemsOperations } from \"@state/viewer/scene/item-operations\";\nimport { viewerElement } from \"@state/viewer\";\nimport { selectionSelectedItemIds } from \"@state/selection\";\n\nexport const VertexShowOnlySelectedMenuItem = (): JSX.Element => {\n const viewerHTMLElement = useRecoilValue(viewerElement);\n const selectedItems = useRecoilValue(selectionSelectedItemIds);\n\n const sceneItemOperations = useSceneItemsOperations({ viewerElement: viewerHTMLElement ?? null });\n\n return (\n <VertexMenuItem\n data-testid=\"show-only-selected-menu-option\"\n onClick={() => sceneItemOperations.showOnlySelected()}\n disabled={selectedItems.length === 0}\n >\n <VertexIcon slot=\"icon\" name=\"visibility-visible\" size=\"sm\" />\n <div className=\"pl-2\">Show Only Selected</div>\n </VertexMenuItem>\n );\n};","import React from 'react';\nimport { VertexIcon, VertexMenuItem } from \"@vertexvis/ui-react\";\nimport { useRecoilValue } from \"recoil\";\nimport { useSceneItemsOperations } from \"@state/viewer/scene/item-operations\";\nimport { viewerElement } from \"@state/viewer\";\n\nexport const VertexShowAllMenuItem = (): JSX.Element => {\n const viewerHTMLElement = useRecoilValue(viewerElement);\n\n const sceneItemOperations = useSceneItemsOperations({ viewerElement: viewerHTMLElement ?? null });\n\n return (\n <VertexMenuItem\n data-testid=\"show-all-menu-option\"\n onClick={() => {\n sceneItemOperations.sceneItemsOperation(\n (builder) => builder.show()\n );\n }}\n >\n <VertexIcon slot=\"icon\" name=\"visibility-visible\" size=\"sm\" />\n <div className=\"pl-2\">Show All Parts</div>\n </VertexMenuItem>\n );\n};","import React from 'react';\nimport { VertexIcon, VertexMenuItem } from \"@vertexvis/ui-react\";\nimport { useRecoilValue } from \"recoil\";\nimport { useViewerCameraActions } from \"@state/viewer\";\nimport {selectionSelectedItemIds, selectionVisibleSummary} from \"@state/selection\";\n\nexport const VertexFitSelectedMenuItem = (): JSX.Element => {\n const selectedItems = useRecoilValue(selectionSelectedItemIds);\n const selectedSummary = useRecoilValue(selectionVisibleSummary);\n\n const cameraActions = useViewerCameraActions();\n\n return (\n <VertexMenuItem\n data-testid=\"fit-selected-menu-option\"\n onClick={() => {\n if (selectedSummary?.boundingBox != null) {\n cameraActions.flyToByBoundingBox(\n selectedSummary.boundingBox\n );\n }\n }}\n disabled={selectedItems.length === 0}\n >\n <VertexIcon slot=\"icon\" name=\"fit-selected\" size=\"sm\" />\n <div className=\"pl-2\">Fit Selected</div>\n </VertexMenuItem>\n );\n};","import React from 'react';\nimport { VertexIcon, VertexMenuItem } from \"@vertexvis/ui-react\";\nimport { useRecoilValue } from \"recoil\";\nimport { useViewerCameraActions } from \"@state/viewer\";\nimport { contextMenuItem, contextMenuItemIsRow } from \"@state/context-menu\";\n\nexport const VertexFlyToMenuItem = (): JSX.Element => {\n const cameraActions = useViewerCameraActions();\n\n const currentItem = useRecoilValue(contextMenuItem);\n\n return (\n <VertexMenuItem\n data-testid=\"fly-to-part-menu-option\"\n onClick={() => {\n const isRow = contextMenuItemIsRow(currentItem);\n\n const itemId = isRow\n ? currentItem?.node.id?.hex\n : currentItem?.id;\n\n if (itemId != null) {\n cameraActions.flyToById(itemId);\n }\n }}\n disabled={currentItem == null}\n >\n <VertexIcon slot=\"icon\" name=\"paper-airplane\" size=\"sm\" />\n <div className=\"pl-2\">Fly To</div>\n </VertexMenuItem>\n );\n};","import React from 'react';\n\nimport { VertexHideSelectedMenuItem } from \"./menu-items/hide-selected-menu-item\";\nimport { VertexHideAllMenuItem } from \"./menu-items/hide-all-menu-item\";\nimport { VertexShowOnlyMenuItem } from \"./menu-items/show-only-menu-item\";\nimport { VertexShowOnlySelectedMenuItem } from \"./menu-items/show-only-selected-menu-item\";\nimport { VertexShowAllMenuItem } from \"./menu-items/show-all-menu-item\";\nimport { VertexFitSelectedMenuItem } from \"./menu-items/fit-selected-menu-item\";\nimport { VertexMenuDivider } from \"@vertexvis/ui-react\";\nimport { VertexFlyToMenuItem } from \"./menu-items/fly-to-menu-item\";\n\nexport const DefaultSceneTreeContextMenu = (): JSX.Element => {\n return (\n <div className=\"w-56\">\n <VertexHideSelectedMenuItem />\n <VertexHideAllMenuItem />\n <VertexShowOnlyMenuItem />\n <VertexShowOnlySelectedMenuItem />\n <VertexShowAllMenuItem />\n\n <VertexMenuDivider className=\"md:contents hidden short:hidden\" />\n\n <VertexFitSelectedMenuItem />\n <VertexFlyToMenuItem />\n </div>\n );\n}","import React from 'react';\n\nimport { VertexContextMenu } from \"./context-menu\";\nimport { useRecoilValue } from \"recoil\";\nimport { sceneTreeElement, useSceneTreeActions } from \"@state/scene-tree/core\";\nimport { DefaultSceneTreeContextMenu } from \"./default-scene-tree-context-menu\";\n\nexport interface Props {\n readonly children?: React.ReactNode;\n}\n\nexport const VertexSceneTreeContextMenu = ({children}: Props): JSX.Element => {\n const sceneTreeActions = useSceneTreeActions();\n\n const sceneTreeHTMLElement = useRecoilValue(sceneTreeElement);\n\n const hasDefinedChildren = children != null && children !== false;\n\n return (\n <VertexContextMenu\n menuType=\"scene-tree\"\n targetElement={sceneTreeHTMLElement}\n onOpen={async (event, _pt) => {\n const pointerEvent = event as PointerEvent;\n await sceneTreeActions.setContextMenuItem(pointerEvent.clientY);\n }}\n disableBackdrop\n >\n { hasDefinedChildren\n ? (children)\n : (<DefaultSceneTreeContextMenu />)\n }\n </VertexContextMenu>\n );\n}","import React from 'react';\nimport { VertexIcon, VertexMenuItem } from \"@vertexvis/ui-react\";\nimport { useRecoilValue } from \"recoil\";\nimport {contextMenuItem, contextMenuItemIsRow} from \"@state/context-menu\";\nimport { useSceneItemsOperations } from \"@state/viewer/scene/item-operations\";\nimport { viewerElement } from \"@state/viewer\";\n\nexport const VertexHidePartMenuItem = (): JSX.Element => {\n const viewerHTMLElement = useRecoilValue(viewerElement);\n const currentItem = useRecoilValue(contextMenuItem);\n\n const sceneItemOperations = useSceneItemsOperations({ viewerElement: viewerHTMLElement ?? null });\n\n return (\n <VertexMenuItem\n data-testid=\"hide-menu-option\"\n onClick={() => {\n const isRow = contextMenuItemIsRow(currentItem);\n\n const itemId = isRow\n ? currentItem?.node.id?.hex\n : currentItem.id;\n\n if (itemId != null) {\n sceneItemOperations.sceneItemsOperation(\n (builder) => builder.hide(),\n [itemId]\n );\n }\n }}\n disabled={currentItem == null}\n >\n <VertexIcon slot=\"icon\" name=\"visibility-hidden\" size=\"sm\" />\n <div className=\"pl-2\">Hide Part</div>\n </VertexMenuItem>\n );\n};","import React from 'react';\n\nimport { VertexHidePartMenuItem } from \"./menu-items/hide-part-menu-item\";\nimport { VertexHideSelectedMenuItem } from \"./menu-items/hide-selected-menu-item\";\nimport { VertexHideAllMenuItem } from \"./menu-items/hide-all-menu-item\";\nimport { VertexShowOnlyMenuItem } from \"./menu-items/show-only-menu-item\";\nimport { VertexShowOnlySelectedMenuItem } from \"./menu-items/show-only-selected-menu-item\";\nimport { VertexShowAllMenuItem } from \"./menu-items/show-all-menu-item\";\nimport { VertexFitSelectedMenuItem } from \"./menu-items/fit-selected-menu-item\";\nimport { VertexMenuDivider } from \"@vertexvis/ui-react\";\nimport { VertexFlyToMenuItem } from \"./menu-items/fly-to-menu-item\";\n\nexport const DefaultViewerContextMenu = (): JSX.Element => {\n return (\n <div className=\"w-56\">\n <VertexHidePartMenuItem />\n <VertexHideSelectedMenuItem />\n <VertexHideAllMenuItem />\n <VertexShowOnlyMenuItem />\n <VertexShowOnlySelectedMenuItem />\n <VertexShowAllMenuItem />\n\n <VertexMenuDivider className=\"md:contents hidden short:hidden\" />\n\n <VertexFitSelectedMenuItem />\n <VertexFlyToMenuItem />\n </div>\n );\n}","import React from 'react';\n\nimport { VertexContextMenu } from \"./context-menu\";\nimport { useRecoilValue } from \"recoil\";\nimport { viewerElement } from \"@state/viewer\";\nimport { DefaultViewerContextMenu } from \"./default-viewer-context-menu\";\n\nexport interface Props {\n readonly children?: React.ReactNode;\n}\n\nexport const VertexViewerContextMenu = ({children}: Props): JSX.Element => {\n const viewerHTMLElement = useRecoilValue(viewerElement);\n\n const hasDefinedChildren = children != null && children !== false;\n\n return (\n <VertexContextMenu\n menuType=\"viewer\"\n targetElement={viewerHTMLElement}\n disableBackdrop\n >\n { hasDefinedChildren\n ? (children)\n : (<DefaultViewerContextMenu />)\n }\n </VertexContextMenu>\n );\n}","import { type Config } from '@vertexvis/viewer';\nimport { atom } from 'recoil';\n\nexport const sdkConfig = atom<Config | undefined>({\n key: 'viewerToolkitSdkConfig',\n default: undefined,\n});\n","export const targetIsElement = <T extends HTMLElement = HTMLElement>(\n target: EventTarget,\n tagName: string\n): target is T => {\n return target instanceof Element && target.tagName === tagName;\n};\n","import React from 'react';\nimport { RecoilState, useRecoilCallback } from 'recoil';\n\nexport interface UseRecoilRefProps<T> {\n state: RecoilState<T | null | undefined>;\n}\n\nexport function useRecoilRef<T>({\n state,\n}: UseRecoilRefProps<T>): React.RefCallback<T> {\n const callback = useRecoilCallback(\n ({ set }) =>\n (node: T | null) => {\n set(state, node);\n },\n []\n );\n\n return callback;\n}\n","export enum AssemblyFontFace {\n 'ROBOTO' = 'ROBOTO',\n 'ROBOTO_MONO' = 'ROBOTO_MONO',\n}\n\nexport interface AssemblyFont {\n fontFace: AssemblyFontFace;\n color: string;\n}\n\nexport interface AssemblyBackgroundColors {\n defaultColor: string;\n depthColors: Record<number, string>;\n hovered: string;\n selected: string;\n}\n","import {\n AssemblyBackgroundColors,\n AssemblyFont,\n AssemblyFontFace,\n} from '@state/scene-tree/types';\n\nexport function styleFromOptionalFont(\n font?: Partial<AssemblyFont>\n): Record<string, string | undefined> {\n return font != null\n ? {\n '--scene-tree-default-font-family': styleFromFontFace(font.fontFace),\n '--scene-tree-default-font-color': font.color,\n }\n : {};\n}\n\nexport function styleFromOptionalBackgroundColors(\n backgroundColors?: Partial<AssemblyBackgroundColors>\n): Record<string, string | undefined> {\n const depthColors = backgroundColors?.depthColors;\n const depthColorStyles =\n depthColors != null\n ? Object.keys(depthColors).reduce(\n (res, key) => ({\n ...res,\n [`--scene-tree-row-background-color-depth-${key}`]:\n depthColors[parseInt(key)],\n }),\n {}\n )\n : {};\n\n return backgroundColors != null\n ? {\n ...depthColorStyles,\n '--scene-tree-hovered-row-background-color': backgroundColors.hovered,\n '--scene-tree-selected-row-background-color': backgroundColors.selected,\n '--scene-tree-row-background-color': backgroundColors.defaultColor,\n }\n : {};\n}\n\nfunction styleFromFontFace(fontFace?: AssemblyFontFace): string {\n switch (fontFace) {\n case AssemblyFontFace.ROBOTO_MONO:\n return 'var(--vertex-ui-font-family-monospace)';\n default:\n return 'var(--vertex-ui-font-family)';\n }\n}\n","import { selector } from 'recoil';\n\nimport { sceneTreeWidth } from '../core';\n\nexport const DEFAULT_NAME_COLUMN: DefaultColumn = {\n binding: '{{row.node.name}}',\n label: 'Name',\n metadataKeyName: 'VERTEX_SCENE_ITEM_NAME',\n};\n\ninterface ActiveColumn {\n initialWidth?: number;\n minWidth?: number;\n label: string;\n binding: string;\n}\n\ninterface DefaultColumn extends ActiveColumn {\n metadataKeyName: string;\n}\n\nexport interface UseSceneTreeColumnsProps {\n sceneTreeElement: HTMLVertexSceneTreeElement | null;\n}\n\nexport const sceneTreeColumnsActiveColumns = selector<\n Record<string, ActiveColumn>\n>({\n key: 'sceneTreeColumnsActiveColumns',\n get: ({ get }) => {\n const labels = []; // TODO: map to configured column list\n const treeWidth = get(sceneTreeWidth);\n\n if (treeWidth != null && treeWidth > 0) {\n const nameWidth = (1 / (labels.length + 1)) * treeWidth;\n const availableWidth = (treeWidth - nameWidth) / labels.length;\n\n return {\n Name: {\n ...DEFAULT_NAME_COLUMN,\n initialWidth: nameWidth,\n minWidth: availableWidth,\n },\n };\n }\n return { Name: DEFAULT_NAME_COLUMN };\n },\n});\n\nexport const sceneTreeColumnsActiveColumnNames = selector<string[]>({\n key: 'sceneTreeColumnsActiveColumnNames',\n get: ({ get }) => Object.keys(get(sceneTreeColumnsActiveColumns)),\n});\n","import {\n sceneTreeColumnsActiveColumnNames,\n sceneTreeColumnsActiveColumns,\n} from '@state/scene-tree/columns';\nimport {\n VertexSceneTreeTableColumn as SdkVertexSceneTreeTableColumn,\n VertexSceneTreeTableLayout as SdkVertexSceneTreeTableLayout,\n} from '@vertexvis/viewer-react';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { useRecoilValue } from 'recoil';\n\nexport const VertexSceneTreeTableLayout = (\n sdkProps: React.ComponentProps<typeof SdkVertexSceneTreeTableLayout>\n): JSX.Element => {\n const activeColumns = useRecoilValue(sceneTreeColumnsActiveColumns);\n const activeColumnNames = useRecoilValue(sceneTreeColumnsActiveColumnNames);\n const columnWidths: number[] = []; // TODO: map to configured column sizes\n\n return (\n <SdkVertexSceneTreeTableLayout\n data-testid=\"scene-tree-table-layout\"\n {...sdkProps}\n >\n {activeColumnNames.map((k, i) => {\n const column = activeColumns[k];\n const initialWidth = columnWidths[i] ?? column.initialWidth;\n\n return (\n <SdkVertexSceneTreeTableColumn\n key={column.label}\n data-testid={`scene-tree-table-column-${i}`}\n initialWidth={initialWidth}\n minWidth={column.minWidth}\n >\n <template\n slot=\"header\"\n dangerouslySetInnerHTML={{\n __html: `\n <div class=\"text-sm text-neutral-800 my-2\">\n <div class=\"${classNames('truncate', {\n 'pl-2': i === 0,\n 'pr-2': i === activeColumnNames.length - 1,\n })}\">\n ${column.label}\n </div>\n </div>\n `,\n }}\n ></template>\n <template\n dangerouslySetInnerHTML={{\n __html: `\n <vertex-scene-tree-table-cell\n prop:value=\"${column.binding}\"\n prop:selection-handler=\"{{row.data.handleSelection}}\"\n prop:expansion-handler=\"{{row.data.handleExpansion}}\"\n prop:visibility-handler=\"{{row.data.handleVisibility}}\"\n ${i === 0 ? 'expand-toggle' : ''}\n ${\n i === activeColumnNames.length - 1\n ? 'isolate-button visibility-toggle'\n : ''\n }>\n <div class=\"flex items-center gap-2\">\n <vertex-tooltip \n class=\"truncate\" \n prop:content=\"${\n column.binding != null ? column.binding : '--'\n }\" \n placement=\"${\n i !== activeColumnNames.length - 1\n ? 'right'\n : 'top'\n }\">\n <div class=\"flex items-center w-full\">\n <div class=\"truncate\">${column.binding}</div>\n </div>\n </vertex-tooltip>\n </div>\n \n\n <div slot=\"placeholder\" class=\"flex items-center w-full truncate\">\n <div> -- </div>\n </div>\n </vertex-scene-tree-table-cell>\n `,\n }}\n ></template>\n </SdkVertexSceneTreeTableColumn>\n );\n })}\n </SdkVertexSceneTreeTableLayout>\n );\n};\n","import { sdkConfig } from '@state/config';\nimport { useSceneTreeActions } from '@state/scene-tree/core/actions';\nimport { sceneTreeElement } from '@state/scene-tree/core/core';\nimport {\n AssemblyBackgroundColors,\n AssemblyFont,\n} from '@state/scene-tree/types';\nimport { useSelectionActions } from '@state/selection';\nimport { viewerElement } from '@state/viewer';\nimport { targetIsElement } from '@util/dom/elements';\nimport { logger } from '@util/logging/logger';\nimport { useRecoilRef } from '@util/refs/recoil-ref';\nimport {\n styleFromOptionalBackgroundColors,\n styleFromOptionalFont,\n} from '@util/scene-tree/customization';\nimport type { SceneTreeOperationHandler } from '@vertexvis/viewer/dist/types/components/scene-tree/lib/handlers';\nimport { VertexSceneTree as SdkVertexSceneTree } from '@vertexvis/viewer-react';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { VertexSceneTreeTableLayout } from './vertex-scene-tree-table-layout';\n\nexport interface Props {\n readonly id?: string;\n\n readonly font?: Partial<AssemblyFont>;\n readonly backgroundColors?: Partial<AssemblyBackgroundColors>;\n\n readonly onToggleSelection?: SceneTreeOperationHandler;\n readonly onToggleExpansion?: SceneTreeOperationHandler;\n readonly onToggleVisibility?: SceneTreeOperationHandler;\n\n readonly children?: React.ReactNode;\n}\n\nexport const VertexSceneTree = ({\n id,\n font,\n backgroundColors,\n children,\n style,\n onPointerDown,\n onClick,\n onToggleSelection,\n onToggleExpansion,\n onToggleVisibility,\n className,\n rowData,\n ...sdkProps\n}: Props & React.ComponentProps<typeof SdkVertexSceneTree>): JSX.Element => {\n const config = useRecoilValue(sdkConfig);\n\n const selectionActions = useSelectionActions();\n const sceneTreeActions = useSceneTreeActions();\n\n const viewer = useRecoilValue(viewerElement);\n\n const callbackRef = useRecoilRef<HTMLVertexSceneTreeElement>({\n state: sceneTreeElement,\n });\n\n const wrappedExpansionHandler: SceneTreeOperationHandler = (\n event,\n node,\n tree\n ) => {\n sceneTreeActions.toggleExpansion(event, node, tree);\n onToggleExpansion?.(event, node, tree);\n };\n const wrappedSelectionHandler: SceneTreeOperationHandler = (\n event,\n node,\n tree\n ) => {\n sceneTreeActions.toggleSelection(event, node, tree);\n onToggleSelection?.(event, node, tree);\n };\n const wrappedVisibilityHandler: SceneTreeOperationHandler = (\n event,\n node,\n tree\n ) => {\n sceneTreeActions.toggleVisibility(event, node, tree);\n onToggleVisibility?.(event, node, tree);\n };\n\n const handleClick = (\n event: React.MouseEvent<HTMLVertexSceneTreeElement>\n ): void => {\n if (event.altKey) {\n sceneTreeActions.flyToRow(event.clientY);\n }\n\n onClick?.(event);\n };\n\n const handlePointerDown = (\n event: React.PointerEvent<HTMLVertexSceneTreeElement>\n ): void => {\n if (targetIsElement(event.target, 'VERTEX-SCENE-TREE-TABLE-COLUMN')) {\n selectionActions.clearSelection();\n }\n\n onPointerDown?.(event);\n };\n\n return (\n <SdkVertexSceneTree\n id={id ?? 'vertex-scene-tree'}\n data-testid=\"vertex-scene-tree\"\n config={config}\n ref={callbackRef}\n className={classNames('shrink-0', className)}\n style={{\n ...styleFromOptionalFont(font),\n ...styleFromOptionalBackgroundColors(backgroundColors),\n ...style,\n }}\n onConnectionError={(e) => {\n logger.error('Scene Tree Connection Error: ', e.detail);\n }}\n viewer={viewer}\n onPointerDown={handlePointerDown}\n onClick={handleClick}\n rowData={(row) => {\n const providedRowData = rowData?.(row) ?? {};\n\n return {\n handleExpansion: wrappedExpansionHandler,\n handleSelection: wrappedSelectionHandler,\n handleVisibility: wrappedVisibilityHandler,\n ...providedRowData,\n };\n }}\n {...sdkProps}\n >\n <VertexSceneTreeTableLayout />\n\n {children}\n </SdkVertexSceneTree>\n );\n};\n","import React from 'react';\nimport { RecoilState, useSetRecoilState } from 'recoil';\n\nexport const useSynchronizedProp = <T>(\n state: RecoilState<T>,\n value: T\n): void => {\n const setState = useSetRecoilState(state);\n\n React.useEffect(() => {\n setState(value);\n }, [setState, value]);\n};\n","import { VertexPopover, VertexTooltip } from '@vertexvis/ui-react';\nimport classNames from 'classnames';\nimport React from 'react';\n\nexport interface Props {\n children: React.ReactElement[];\n}\n\nconst VertexPopupButton = ({\n open,\n children,\n ...uiProps\n}: Props & React.ComponentProps<typeof VertexPopover>): JSX.Element => {\n const anchor = children.find((c) => c.type === Anchor);\n const others = children.filter((c) => c.type !== Anchor);\n\n if (anchor == null) {\n return <></>;\n }\n\n return (\n <VertexPopover\n className=\"flex\"\n placement=\"top\"\n backdrop={false}\n open={open}\n {...uiProps}\n >\n {anchor}\n\n <div\n className={classNames('flex mb-1.5', {\n hidden: !open,\n })}\n data-testid=\"align-plane-popover-menu\"\n >\n {others}\n </div>\n </VertexPopover>\n );\n};\n\ninterface AnchorProps {\n tooltipContent?: string;\n\n children: React.ReactNode;\n}\n\nconst Anchor = ({ tooltipContent, children }: AnchorProps): JSX.Element => {\n return (\n <div slot=\"anchor\">\n <VertexTooltip className=\"cursor-pointer\" content={tooltipContent}>\n {children}\n </VertexTooltip>\n </div>\n );\n};\n\nVertexPopupButton.Anchor = Anchor;\n\nexport { VertexPopupButton };\n","import type {\n SliderChangeEventDetails,\n VertexSliderCustomEvent,\n} from '@vertexvis/ui';\nimport { VertexSlider as UiVertexSlider } from '@vertexvis/ui-react';\nimport React from 'react';\n\nexport interface Props {\n value?: number;\n defaultValue?: number;\n\n onChange?: (value: number) => void;\n}\n\ntype ComponentProps = Omit<\n React.ComponentProps<typeof UiVertexSlider>,\n 'onChange'\n>;\n\nexport const VertexSlider = ({\n value,\n defaultValue,\n onChange,\n onValueChange,\n onValueInput,\n ...uiProps\n}: Props & ComponentProps): JSX.Element => {\n const [displayedValue, setDisplayedValue] = React.useState<\n number | undefined\n >(defaultValue);\n\n return (\n <UiVertexSlider\n className=\"w-52 mx-2 items-center\"\n value={value ?? displayedValue}\n onValueChange={(e: VertexSliderCustomEvent<SliderChangeEventDetails>) => {\n setDisplayedValue(e.detail.value);\n onChange?.(e.detail.value);\n onValueChange?.(e);\n }}\n onValueInput={(e: VertexSliderCustomEvent<SliderChangeEventDetails>) => {\n setDisplayedValue(e.detail.value);\n onChange?.(e.detail.value);\n onValueInput?.(e);\n }}\n {...uiProps}\n />\n );\n};\n","import React from 'react';\n\nexport function VertexViewerToolbarDivider(): JSX.Element {\n return (\n <div\n data-testid=\"toolbar-divider\"\n className=\"h-6 w-px bg-neutral-300 mx-1 items-center mt-1\"\n />\n );\n}\n","import { useCrossSectioningActions } from '@state/cross-section/actions';\nimport {\n crossSectioningAlignment,\n crossSectioningAlignmentToolsOpen,\n} from '@state/cross-section/cross-section';\nimport { useStackKeyBinding } from '@state/keybinding';\nimport { IconName, IconNames } from '@vertexvis/ui/dist/types/types/icon';\nimport { VertexIcon } from '@vertexvis/ui-react';\nimport { VertexIconButton } from '@vertexvis/ui-react';\nimport { VertexViewerToolbarGroup } from '@vertexvis/viewer-react';\nimport React from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { VertexPopupButton } from '../../common/popup-button';\n\nexport function VertexViewerCrossSectionAlignmentPopoverMenu(): JSX.Element {\n const crossSectioningActions = useCrossSectioningActions();\n\n const open = useRecoilValue(crossSectioningAlignmentToolsOpen);\n const alignment = useRecoilValue(crossSectioningAlignment);\n\n const getBaseIcon = (): IconName => {\n return `align-to-${alignment?.mode}` as IconNames;\n };\n\n useStackKeyBinding(\n {\n id: 'CrossSectionAlignment',\n keyBind: 'Escape',\n fn: crossSectioningActions.cancelCurrentHit,\n addPredicate: () => alignment?.hitPending ?? false,\n cancelPredicate: () => !alignment?.hitPending,\n },\n [alignment?.hitPending]\n );\n\n return (\n <VertexPopupButton\n data-testid=\"section-alignment-popover\"\n placement=\"top\"\n backdrop={false}\n open={open}\n onDismissed={crossSectioningActions.closeAlignmentTools}\n >\n <VertexPopupButton.Anchor tooltipContent=\"Section Alignment\">\n <VertexIconButton\n data-testid=\"section-alignment-icon-button\"\n iconName={getBaseIcon()}\n iconColor=\"secondary\"\n onClick={\n open\n ? crossSectioningActions.closeAlignmentTools\n : crossSectioningActions.openAlignmentTools\n }\n >\n <VertexIcon\n data-testid=\"section-alignment-icon-chevron\"\n name=\"chevron-up\"\n size=\"sm\"\n ></VertexIcon>\n </VertexIconButton>\n </VertexPopupButton.Anchor>\n\n <VertexViewerToolbarGroup\n direction=\"vertical\"\n className=\"flex justify-evenly items-center py-1 my-1 ring-1 ring-neutral-200 rounded bg-neutral-100 opacity-95\"\n >\n <VertexIconButton\n iconColor=\"secondary\"\n onClick={() => crossSectioningActions.updateAlignment('global')}\n className=\"w-full text-neutral-800 hover:bg-neutral-300 rounded cursor-pointer mx-0.5 py-1 px-2\"\n data-testid=\"section-alignment-align-global\"\n iconName=\"align-to-global\"\n variant=\"plain\"\n >\n <div className=\"text-base ml-2\">Align to Global</div>\n </VertexIconButton>\n\n <VertexIconButton\n iconColor=\"secondary\"\n onClick={() => crossSectioningActions.updateAlignment('surface')}\n className=\"w-full text-neutral-800 hover:bg-neutral-300 rounded cursor-pointer mx-0.5 py-1 px-2\"\n data-testid=\"section-alignment-align-surface\"\n iconName=\"align-to-surface\"\n variant=\"plain\"\n >\n <div className=\"text-base ml-2\">Align to Surface</div>\n </VertexIconButton>\n\n {/* TODO: Add \"Align to Part\" flow */}\n </VertexViewerToolbarGroup>\n </VertexPopupButton>\n );\n}\n","import { useCrossSectioningActions } from '@state/cross-section/actions';\nimport {\n crossSectioningAvailableAxes,\n crossSectioningAxisToolsOpen,\n crossSectioningPlanes,\n} from '@state/cross-section/cross-section';\nimport * as CrossSectionPlane from '@util/cross-section/section-plane';\nimport { IconName } from '@vertexvis/ui/dist/types/types/icon';\nimport { VertexIcon, VertexIconButton } from '@vertexvis/ui-react';\nimport { VertexViewerToolbarGroup } from '@vertexvis/viewer-react';\nimport React from 'react';\nimport { useRecoilValue, useRecoilValueLoadable } from 'recoil';\n\nimport { VertexPopupButton } from '../../common/popup-button';\n\nexport function VertexViewerCrossSectionAxisPopoverMenu(): JSX.Element {\n const crossSectioningActions = useCrossSectioningActions();\n\n const open = useRecoilValue(crossSectioningAxisToolsOpen);\n const planes = useRecoilValue(crossSectioningPlanes);\n const availableAxes = useRecoilValueLoadable(crossSectioningAvailableAxes);\n\n const baseIcon = React.useMemo(() => {\n const axis =\n planes.length > 0 && availableAxes.state === 'hasValue'\n ? CrossSectionPlane.axis(\n planes[0],\n CrossSectionPlane.xAxis(availableAxes.contents),\n CrossSectionPlane.yAxis(availableAxes.contents),\n CrossSectionPlane.zAxis(availableAxes.contents)\n )\n : 'x';\n\n return axis != null ? (`axis-${axis}` as IconName) : 'axis-x';\n }, [availableAxes.state, availableAxes.contents, planes]);\n\n return (\n <VertexPopupButton\n data-testid=\"align-plane-popover\"\n placement=\"top\"\n backdrop={false}\n open={open}\n onDismissed={crossSectioningActions.closeAxisTools}\n >\n <VertexPopupButton.Anchor tooltipContent=\"Align Plane\">\n <VertexIconButton\n onClick={\n open\n ? crossSectioningActions.closeAxisTools\n : crossSectioningActions.openAxisTools\n }\n iconName={baseIcon}\n data-testid=\"align-plane-icon\"\n iconColor=\"secondary\"\n >\n <VertexIcon\n data-testid=\"align-plane-icon-chevron\"\n name=\"chevron-up\"\n size=\"sm\"\n ></VertexIcon>\n </VertexIconButton>\n </VertexPopupButton.Anchor>\n\n <VertexViewerToolbarGroup\n direction=\"vertical\"\n className=\"flex justify-evenly items-center py-1 my-1 ring-1 ring-neutral-200 rounded bg-neutral-100 opacity-95\"\n >\n <VertexIconButton\n data-testid=\"align-plane-x-axis-button\"\n className=\"w-full text-neutral-800 hover:bg-neutral-300 rounded cursor-pointer mx-0.5 py-1 px-2\"\n onClick={() => crossSectioningActions.updateAxis('x')}\n variant=\"plain\"\n iconColor=\"secondary\"\n iconName=\"axis-x\"\n >\n <div className=\"text-base ml-2\">X-axis Plane</div>\n </VertexIconButton>\n <VertexIconButton\n className=\"w-full text-neutral-800 hover:bg-neutral-300 rounded cursor-pointer mx-0.5 py-1 px-2\"\n variant=\"plain\"\n iconColor=\"secondary\"\n iconName=\"axis-y\"\n data-testid=\"align-plane-y-axis-button\"\n onClick={() => crossSectioningActions.updateAxis('y')}\n >\n <div className=\"text-base ml-2\">Y-axis Plane</div>\n </VertexIconButton>\n <VertexIconButton\n data-testid=\"align-plane-z-axis-button\"\n className=\"w-full text-neutral-800 hover:bg-neutral-300 rounded cursor-pointer mx-0.5 py-1 px-2\"\n onClick={() => crossSectioningActions.updateAxis('z')}\n variant=\"plain\"\n iconColor=\"secondary\"\n iconName=\"axis-z\"\n >\n <div className=\"text-base ml-2\">Z-axis Plane</div>\n </VertexIconButton>\n </VertexViewerToolbarGroup>\n </VertexPopupButton>\n );\n}\n","import type { DistanceUnitType as SdkDistanceUnitType } from '@vertexvis/viewer/dist/types/lib/types';\n\n/**\n * Types of distance units\n */\nenum DistanceUnit {\n mm = 'millimeters',\n cm = 'centimeters',\n m = 'meters',\n in = 'inches',\n ft = 'feet',\n}\n\n/**\n * Conversion factors (based on mm)\n */\nenum DistanceUnitConversion {\n mm = 1,\n cm = 1 / 10,\n m = 1 / 1000,\n in = 1 / 25.4,\n ft = 1 / 304.8,\n}\n\n/**\n * This is equivalent to:\n * type DistanceUnitType = 'mm' | 'cm' | 'm' | 'in' | 'ft';\n */\nexport type DistanceUnitType = keyof typeof DistanceUnit;\n\nexport type NumberFormatter = (value: number) => string;\n\n/**\n * Converts a value from non-system units (in) to base system units (mm) using supplied conversion factor.\n *\n * @param value Value to convert.\n * @param fromUnit Unit converting from (to base system units)\n */\nexport const convertFrom = (\n value: number,\n fromUnit: DistanceUnitType\n): number => {\n const conversionFactor = DistanceUnitConversion[fromUnit];\n return value / conversionFactor;\n};\n\n/**\n * Converts a value from base system units (mm) to another unit based on supplied conversion factor.\n *\n * @param value Value to convert.\n * @param toUnit Unit to convert to (from base system units)\n */\nexport const convertTo = (value: number, toUnit: DistanceUnitType): number => {\n const conversionFactor = DistanceUnitConversion[toUnit];\n return value * conversionFactor;\n};\n\n/**\n * Formats a numeric value as a string with supplied unit and decimal places.\n *\n * @param value\n * @param unit\n * @param decimalPlaces\n */\nexport const formatWithUnit = (\n value: number,\n unit: string,\n decimalPlaces: number\n): string => {\n return `${value.toFixed(decimalPlaces)} ${unit}`;\n};\n\n/**\n * Formats a (millimeter based) numeric distance value\n * for display, as converted to specificied units.\n *\n * @param value\n * @param unit\n * @param decimalPlaces\n */\nexport const formatDistance = (\n value: number,\n unit: DistanceUnitType,\n decimalPlaces: number\n): string => {\n return formatWithUnit(convertTo(value, unit), unit, decimalPlaces);\n};\n\n/**\n * Returns a distance formatter function for a given pair of unit and decimal place params.\n *\n * @param unit\n * @param decimalPlaces\n */\nexport const createDistanceFormatter = (\n unit: DistanceUnitType,\n decimalPlaces: number\n): NumberFormatter => {\n return (value: number) => formatDistance(value, unit, decimalPlaces);\n};\n\nexport function toUnitType(s: DistanceUnitType): SdkDistanceUnitType {\n switch (s) {\n case 'cm':\n return 'centimeters';\n case 'm':\n return 'meters';\n case 'in':\n return 'inches';\n case 'ft':\n return 'feet';\n case 'mm':\n default:\n return 'millimeters';\n }\n}\n","import {\n convertFrom,\n convertTo,\n createDistanceFormatter,\n DistanceUnitType,\n} from '@util/measurement/units';\nimport { InputChangeEventDetail } from '@vertexvis/ui/dist/types';\nimport { VertexTextfield, VertexTooltip } from '@vertexvis/ui-react';\nimport { VertexIcon } from '@vertexvis/ui-react';\nimport React from 'react';\n\ninterface Props {\n offset: number;\n measurementUnit: DistanceUnitType;\n decimalPlaces: number;\n\n onOffsetChange: (offset: number) => void;\n}\n\nexport function VertexViewerCrossSectionOffsetStepper({\n offset,\n measurementUnit,\n decimalPlaces,\n onOffsetChange,\n}: Props): JSX.Element {\n const [value, setValue] = React.useState(convertTo(offset, measurementUnit));\n\n React.useEffect(() => {\n setValue(convertTo(offset, measurementUnit));\n }, [measurementUnit, offset]);\n\n const formatter = createDistanceFormatter(measurementUnit, decimalPlaces);\n\n const handleIncrementalUpdate = (increment: number): void => {\n const updated = convertFrom(value + increment, measurementUnit);\n\n onOffsetChange(updated);\n };\n\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>): void => {\n event.preventDefault();\n onOffsetChange(convertFrom(value, measurementUnit));\n };\n\n const handleBlur = (): void => {\n onOffsetChange(convertFrom(value, measurementUnit));\n };\n\n return (\n <VertexTooltip content=\"Plane Offset\">\n <form data-testid=\"cross-section-stepper-form\" onSubmit={handleSubmit}>\n <VertexTextfield\n data-testid=\"cross-section-stepper-input\"\n className=\"viewer-toolbar-input w-32 border-none ring-0 bg-white\"\n type=\"text\"\n value={formatter(parseFloat(offset.toFixed(3)))}\n onInputInput={(event: CustomEvent<InputChangeEventDetail>) => {\n setValue(\n event.detail.value != null\n ? parseFloat(event.detail.value)\n : offset\n );\n }}\n onBlur={handleBlur}\n >\n <div\n data-testid=\"cross-section-stepper-decrement\"\n className=\"py-1 cursor-pointer\"\n slot=\"left\"\n onClick={() => handleIncrementalUpdate(-1)}\n >\n <VertexIcon name=\"chevron-left\" size=\"sm\" />\n </div>\n <div\n data-testid=\"cross-section-stepper-increment\"\n className=\"py-1 cursor-pointer\"\n slot=\"right\"\n onClick={() => handleIncrementalUpdate(1)}\n >\n <VertexIcon name=\"chevron-right\" size=\"sm\" />\n </div>\n </VertexTextfield>\n </form>\n </VertexTooltip>\n );\n}\n","import { useCrossSectioningActions } from '@state/cross-section/actions';\nimport {\n crossSectioningAdditionalToolsOpen,\n crossSectioningPlaneDisplayOffset,\n crossSectioningSliderRange,\n DEFAULT_SLIDER_RANGE,\n} from '@state/cross-section/cross-section';\nimport { DistanceUnitType } from '@util/measurement/units';\nimport { VertexIconButton } from '@vertexvis/ui-react';\nimport { VertexIcon, VertexTooltip } from '@vertexvis/ui-react';\nimport { VertexViewerToolbarGroup } from '@vertexvis/viewer-react';\nimport React from 'react';\nimport { useRecoilValue, useRecoilValueLoadable } from 'recoil';\n\nimport { VertexPopupButton } from '../../common/popup-button';\nimport { VertexSlider } from '../../common/slider';\nimport { VertexViewerToolbarDivider } from '../toolbar-divider';\nimport { VertexViewerCrossSectionAlignmentPopoverMenu } from './cross-section-alignment-popover-menu';\nimport { VertexViewerCrossSectionAxisPopoverMenu } from './cross-section-axis-popover-menu';\nimport { VertexViewerCrossSectionOffsetStepper } from './cross-section-offset-stepper';\n\nconst INTERACTIVITY_TIMEOUT_DEBOUNCE_THRESHOLD = 400;\n\nexport interface Props {\n decimalPlaces: number;\n measurementUnit: DistanceUnitType;\n}\n\nexport function VertexViewerCrossSectionPopupMenu({\n decimalPlaces,\n measurementUnit,\n}: Props): JSX.Element {\n const crossSectioningActions = useCrossSectioningActions();\n\n const open = useRecoilValue(crossSectioningAdditionalToolsOpen);\n const sliderRange = useRecoilValueLoadable(crossSectioningSliderRange);\n const displayOffset = useRecoilValueLoadable(\n crossSectioningPlaneDisplayOffset\n );\n\n const interactiveTimeout = React.useRef<number>();\n\n const displayedRange = React.useMemo(\n () =>\n sliderRange.state === 'hasValue'\n ? sliderRange.contents\n : DEFAULT_SLIDER_RANGE,\n [sliderRange.state, sliderRange.contents]\n );\n const displayedOffset = React.useMemo(\n () => (displayOffset.state === 'hasValue' ? displayOffset.contents : 0),\n [displayOffset.state, displayOffset.contents]\n );\n\n const handleCrossSectionValueChange = (value: number): void => {\n clearTimeout(interactiveTimeout.current);\n interactiveTimeout.current = window.setTimeout(() => {\n crossSectioningActions.endInteraction();\n }, INTERACTIVITY_TIMEOUT_DEBOUNCE_THRESHOLD);\n\n crossSectioningActions.beginInteraction();\n\n crossSectioningActions.updatePlanes(value);\n };\n\n return (\n <VertexPopupButton\n data-testid=\"cross-section-popover\"\n placement=\"top\"\n backdrop={false}\n open={open}\n onDismissed={crossSectioningActions.closeAdditionalTools}\n >\n <VertexPopupButton.Anchor tooltipContent=\"Section Tools\">\n <div className=\"-ml-px py-1.5\">\n <VertexIcon\n data-testid=\"cross-section-popover-icon\"\n name=\"chevron-up\"\n size=\"sm\"\n onClick={\n open\n ? crossSectioningActions.closeAdditionalTools\n : crossSectioningActions.openAdditionalTools\n }\n ></VertexIcon>\n </div>\n </VertexPopupButton.Anchor>\n\n <VertexViewerToolbarGroup className=\"relative bottom-3 flex justify-evenly items-center p-1 ring-1 ring-neutral-200 rounded bg-neutral-100 opacity-95\">\n <VertexViewerCrossSectionAlignmentPopoverMenu />\n <VertexTooltip className=\"w-auto\" content=\"Reverse\">\n <VertexIconButton\n iconName=\"flip\"\n data-testid=\"viewer-toolbar-flip-button\"\n onClick={crossSectioningActions.flipPlanes}\n iconColor=\"secondary\"\n />\n </VertexTooltip>\n <VertexTooltip className=\"w-auto\" content=\"Align View to Plane\">\n <VertexIconButton\n data-testid=\"viewer-toolbar-align-view-to-plane-button\"\n iconName=\"align-view-to-plane\"\n onClick={crossSectioningActions.alignViewToPlane}\n iconColor=\"secondary\"\n />\n </VertexTooltip>\n <VertexViewerToolbarDivider />\n <VertexViewerCrossSectionAxisPopoverMenu />\n <VertexSlider\n value={displayedOffset}\n defaultValue={displayedRange.default}\n disabled={sliderRange.state !== 'hasValue'}\n min={displayedRange.min}\n max={displayedRange.max}\n step={0.01}\n onChange={handleCrossSectionValueChange}\n />\n <div className=\"px-4\">\n <VertexViewerCrossSectionOffsetStepper\n decimalPlaces={decimalPlaces}\n measurementUnit={measurementUnit}\n offset={\n displayOffset.state === 'hasValue' ? displayOffset.contents : 0\n }\n onOffsetChange={handleCrossSectionValueChange}\n />\n </div>\n </VertexViewerToolbarGroup>\n </VertexPopupButton>\n );\n}\n","import { useCrossSectioningActions } from '@state/cross-section/actions';\nimport {\n crossSectioningBorderWidth,\n crossSectioningEnabled,\n crossSectioningHighlightColor,\n} from '@state/cross-section/cross-section';\nimport { DistanceUnitType } from '@util/measurement/units';\nimport { useSynchronizedProp } from '@util/recoil/synchronized-prop';\nimport { VertexIconButton, VertexTooltip } from '@vertexvis/ui-react';\nimport React from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { VertexViewerCrossSectionPopupMenu } from './cross-section-popup-menu';\n\nexport interface Props {\n readonly decimalPlaces?: number;\n readonly measurementUnit?: DistanceUnitType;\n readonly sectionLineWidth?: number;\n readonly sectionColor?: string;\n}\n\nexport const VertexViewerCrossSectionButton = ({\n decimalPlaces,\n measurementUnit,\n sectionLineWidth,\n sectionColor,\n}: Props): JSX.Element => {\n const crossSectioningActions = useCrossSectioningActions();\n\n const isEnabled = useRecoilValue(crossSectioningEnabled);\n\n useSynchronizedProp(crossSectioningBorderWidth, sectionLineWidth);\n useSynchronizedProp(crossSectioningHighlightColor, sectionColor);\n\n return (\n <>\n <VertexTooltip content={isEnabled ? 'Hide Section' : 'Show Section'}>\n <VertexIconButton\n data-testid=\"viewer-toolbar-cross-section-button\"\n iconName=\"cross-section\"\n iconColor={isEnabled ? 'primary' : 'secondary'}\n onClick={() =>\n isEnabled\n ? crossSectioningActions.disable()\n : crossSectioningActions.enable()\n }\n />\n </VertexTooltip>\n <VertexViewerCrossSectionPopupMenu\n decimalPlaces={decimalPlaces ?? 2}\n measurementUnit={measurementUnit ?? 'mm'}\n />\n </>\n );\n};\n","import { viewerElement } from '@state/viewer';\nimport { VertexIconButton, VertexTooltip } from '@vertexvis/ui-react';\nimport React from 'react';\nimport { useRecoilValue } from 'recoil';\n\nexport const VertexFitAllButton = (): JSX.Element => {\n const viewerHTMLElement = useRecoilValue(viewerElement);\n\n return (\n <VertexTooltip content=\"Fit All\">\n <VertexIconButton\n iconName=\"fit-all\"\n iconColor=\"secondary\"\n data-testid=\"viewer-toolbar-fit-all-button\"\n onClick={async () => {\n const scene = await viewerHTMLElement?.scene();\n await scene\n ?.camera()\n .viewAll()\n .render({ animation: { milliseconds: 500 } });\n }}\n />\n </VertexTooltip>\n );\n};\n","import {\n viewerBaseInteractionHandlerProvider,\n viewerElement,\n viewerInitialSceneReady,\n viewerPrimaryInteractionType,\n} from '@state/viewer';\nimport { VertexIconButton, VertexTooltip } from '@vertexvis/ui-react';\nimport React from 'react';\nimport { useRecoilState, useRecoilValue } from 'recoil';\n\nexport const VertexPanButton = (): JSX.Element => {\n const viewerHTMLElement = useRecoilValue(viewerElement);\n const sceneReady = useRecoilValue(viewerInitialSceneReady);\n\n const [activeTool, setActiveTool] = useRecoilState(\n viewerPrimaryInteractionType\n );\n\n const [interactionHandler, setInteractionHandler] = useRecoilState(\n viewerBaseInteractionHandlerProvider\n );\n\n React.useEffect(() => {\n if (viewerHTMLElement != null && sceneReady) {\n setInteractionHandler(viewerHTMLElement.getBaseInteractionHandler());\n }\n }, [viewerHTMLElement, sceneReady, setInteractionHandler]);\n\n return (\n <VertexTooltip content=\"Pan\">\n <VertexIconButton\n iconName=\"pan\"\n iconColor={activeTool === 'pan' ? 'primary' : 'secondary'}\n data-testid=\"viewer-toolbar-pan-button\"\n onClick={async () => {\n setActiveTool('pan');\n if (interactionHandler != null) {\n const handler = await interactionHandler;\n handler?.setPrimaryInteractionType('pan');\n }\n }}\n />\n </VertexTooltip>\n );\n};\n","import {\n viewerBaseInteractionHandlerProvider,\n viewerElement,\n viewerInitialSceneReady,\n viewerPrimaryInteractionType,\n} from '@state/viewer';\nimport { VertexIconButton, VertexTooltip } from '@vertexvis/ui-react';\nimport React from 'react';\nimport { useRecoilState, useRecoilValue } from 'recoil';\n\nexport const VertexRotateButton = (): JSX.Element => {\n const viewerHTMLElement = useRecoilValue(viewerElement);\n const sceneReady = useRecoilValue(viewerInitialSceneReady);\n\n const [activeTool, setActiveTool] = useRecoilState(\n viewerPrimaryInteractionType\n );\n\n const [interactionHandler, setInteractionHandler] = useRecoilState(\n viewerBaseInteractionHandlerProvider\n );\n\n React.useEffect(() => {\n if (viewerHTMLElement != null && sceneReady) {\n setInteractionHandler(viewerHTMLElement.getBaseInteractionHandler());\n }\n }, [viewerHTMLElement, sceneReady, setInteractionHandler]);\n\n return (\n <VertexTooltip content=\"Rotate\">\n <VertexIconButton\n iconName=\"rotate\"\n iconColor={activeTool === 'rotate' ? 'primary' : 'secondary'}\n data-testid=\"viewer-toolbar-rotate-button\"\n onClick={async () => {\n setActiveTool('rotate');\n if (interactionHandler != null) {\n const handler = await interactionHandler;\n handler?.setPrimaryInteractionType('rotate');\n }\n }}\n />\n </VertexTooltip>\n );\n};\n","import type { VolumeIntersectionQueryType } from '@vertexvis/viewer';\nimport { atom } from 'recoil';\n\nexport const boxSelectionEnabled = atom<boolean>({\n key: 'boxSelectionEnabled',\n default: false,\n});\n\nexport const boxSelectionOperationType = atom<VolumeIntersectionQueryType>({\n key: 'boxSelectionOperationType',\n default: 'clearAndSelect',\n});","import type { VolumeIntersectionQueryType } from '@vertexvis/viewer';\n\nimport {\n boxSelectionEnabled,\n boxSelectionOperationType,\n} from './box-selection';\nimport { useActionCallback } from '@util/recoil/actions';\n\nexport interface UseBoxSelectionActions {\n enable(): void;\n disable(): void;\n\n setOperationType(operationType: VolumeIntersectionQueryType): void;\n}\n\nexport const useBoxSelectionActions = (): UseBoxSelectionActions => {\n return {\n enable: useActionCallback(({ set }) => () => {\n set(boxSelectionEnabled, true);\n }),\n disable: useActionCallback(({ reset }) => async () => {\n reset(boxSelectionEnabled);\n reset(boxSelectionOperationType);\n }),\n setOperationType: useActionCallback(({ set }) => (operationType) => {\n set(boxSelectionOperationType, operationType);\n }),\n };\n};","import React from 'react';\nimport { VertexIconButton, VertexTooltip } from \"@vertexvis/ui-react\";\nimport { useRecoilValue } from \"recoil\";\nimport { boxSelectionEnabled } from \"@state/box-selection/box-selection\";\nimport { useBoxSelectionActions } from \"@state/box-selection/actions\";\nimport { useStackKeyBinding } from \"@state/keybinding/keybinding\";\n\nexport const VertexBoxSelectionButton = (): JSX.Element => {\n const boxSelectionActions = useBoxSelectionActions();\n\n const enabled = useRecoilValue(boxSelectionEnabled);\n\n useStackKeyBinding(\n {\n id: 'ExitBoxSelection',\n keyBind: 'Escape',\n fn: boxSelectionActions.disable,\n addPredicate: () => enabled,\n cancelPredicate: () => !enabled,\n },\n [enabled]\n );\n\n return (\n <VertexTooltip content=\"Box Selection\">\n <VertexIconButton\n iconName=\"box-cursor\"\n iconColor={enabled ? 'primary' : 'secondary'}\n data-testid=\"viewer-toolbar-enable-box-selection-button\"\n onClick={\n enabled ? boxSelectionActions.disable : boxSelectionActions.enable\n }\n />\n </VertexTooltip>\n );\n};","import {\n viewerBaseInteractionHandlerProvider,\n viewerElement,\n viewerInitialSceneReady,\n viewerPrimaryInteractionType,\n} from '@state/viewer';\nimport { VertexIconButton, VertexTooltip } from '@vertexvis/ui-react';\nimport React from 'react';\nimport { useRecoilState, useRecoilValue } from 'recoil';\n\nexport const VertexZoomButton = (): JSX.Element => {\n const viewerHTMLElement = useRecoilValue(viewerElement);\n const sceneReady = useRecoilValue(viewerInitialSceneReady);\n\n const [activeTool, setActiveTool] = useRecoilState(\n viewerPrimaryInteractionType\n );\n\n const [interactionHandler, setInteractionHandler] = useRecoilState(\n viewerBaseInteractionHandlerProvider\n );\n\n React.useEffect(() => {\n if (viewerHTMLElement != null && sceneReady) {\n setInteractionHandler(viewerHTMLElement.getBaseInteractionHandler());\n }\n }, [viewerHTMLElement, sceneReady, setInteractionHandler]);\n\n return (\n <VertexTooltip content=\"Zoom\">\n <VertexIconButton\n iconName=\"zoom\"\n iconColor={activeTool === 'zoom' ? 'primary' : 'secondary'}\n data-testid=\"viewer-toolbar-zoom-button\"\n onClick={async () => {\n setActiveTool('zoom');\n if (interactionHandler != null) {\n const handler = await interactionHandler;\n handler?.setPrimaryInteractionType('zoom');\n }\n }}\n />\n </VertexTooltip>\n );\n};\n","import {\n VertexViewerToolbar,\n VertexViewerToolbarGroup,\n} from '@vertexvis/viewer-react';\nimport React from 'react';\n\nimport { VertexBoxSelectionButton } from '../box-selection/box-selection-button';\nimport { VertexViewerCrossSectionButton } from './cross-section/cross-section';\nimport { VertexFitAllButton } from './fit-all';\nimport { VertexPanButton } from './pan';\nimport { VertexRotateButton } from './rotate';\nimport { VertexViewerToolbarDivider } from './toolbar-divider';\nimport { VertexZoomButton } from './zoom';\n\nexport const DefaultToolbar = (): JSX.Element => {\n return (\n <VertexViewerToolbar placement={'bottom-center'}>\n <VertexViewerToolbarGroup className=\"p-1 border border-neutral-200 rounded bg-neutral-100 opacity-95\">\n <VertexRotateButton />\n <VertexPanButton />\n <VertexZoomButton />\n <VertexFitAllButton />\n <VertexViewerToolbarDivider />\n <VertexBoxSelectionButton />\n <VertexViewerToolbarDivider />\n <VertexViewerCrossSectionButton />\n </VertexViewerToolbarGroup>\n </VertexViewerToolbar>\n );\n};\n","import {\n VertexViewerToolbar,\n VertexViewerToolbarGroup,\n} from '@vertexvis/viewer-react';\nimport React from 'react';\n\nimport { DefaultToolbar } from './default-toolbar';\n\nexport interface Props {\n readonly children?: React.ReactNode;\n}\n\nexport const VertexToolbar = ({ children }: Props): JSX.Element => {\n const hasDefinedChildren = children != null && children !== false;\n\n return (\n <VertexViewerToolbar placement={'bottom-center'}>\n {hasDefinedChildren ? (\n <VertexViewerToolbarGroup className=\"p-1 border border-neutral-200 rounded bg-neutral-100 opacity-95\">\n {children}\n </VertexViewerToolbarGroup>\n ) : (\n <DefaultToolbar />\n )}\n </VertexViewerToolbar>\n );\n};\n","import {\n selectionPreviousVisibleSummary,\n selectionVisibleSummary,\n} from '@state/selection';\nimport { useActionCallback } from '@util/recoil/actions';\nimport { Frame } from '@vertexvis/viewer/dist/types/lib/types';\n\nimport { viewerFrameScene } from '../scene';\n\nexport interface UseViewerFrameActions {\n frameDrawn(event: CustomEvent<Frame>): Promise<void>;\n}\n\nexport function useViewerFrameActions(): UseViewerFrameActions {\n return {\n frameDrawn: useActionCallback(\n ({ set, reset, snapshot }) =>\n async (event) => {\n const currentSummary = await snapshot.getPromise(\n selectionVisibleSummary\n );\n\n set(viewerFrameScene, event.detail.scene);\n set(\n selectionVisibleSummary,\n event.detail.scene.sceneViewSummary.selectedVisibleSummary\n );\n set(selectionPreviousVisibleSummary, currentSummary);\n }\n ),\n };\n}\n","import React from 'react';\n\nexport interface UseCallbackRefProps<T> {\n initial?: T | null;\n}\n\ninterface UseCallbackRef<T> {\n element: T | null;\n callback: React.RefCallback<T>;\n}\n\nexport function useCallbackRef<T>(\n props?: UseCallbackRefProps<T>\n): UseCallbackRef<T> {\n const [element, setElement] = React.useState<T | null>(\n props?.initial ?? null\n );\n const callback = React.useCallback((node: T | null) => setElement(node), []);\n\n return {\n element,\n callback,\n };\n}","import { VertexViewerBoxQueryTool } from '@vertexvis/viewer-react';\nimport * as React from 'react';\nimport { useRecoilValue } from 'recoil';\n\nimport { boxSelectionOperationType } from \"@state/box-selection/box-selection\";\nimport { useCallbackRef } from \"@util/refs/callback-ref\";\nimport { useApplyKeyBinding } from \"@state/keybinding/keybinding\";\nimport { useBoxSelectionActions } from \"@state/box-selection/actions\";\n\nexport const BoxSelectionTool = (): JSX.Element => {\n const { callback } =\n useCallbackRef<HTMLVertexViewerBoxQueryToolElement>();\n\n const boxSelectionActions = useBoxSelectionActions();\n\n const operationType = useRecoilValue(boxSelectionOperationType);\n\n useApplyKeyBinding({\n keyBind: 'Shift',\n fn: React.useCallback(\n () => boxSelectionActions.setOperationType('select'),\n []\n ),\n off: React.useCallback(\n () => boxSelectionActions.setOperationType('clearAndSelect'),\n []\n ),\n });\n\n return (\n <VertexViewerBoxQueryTool\n ref={callback}\n data-testid=\"viewer-box-query-tool\"\n operationType={operationType}\n />\n );\n};","import type { ViewerToolbarPlacement } from '@vertexvis/viewer';\nimport {\n VertexViewerToolbar,\n VertexViewerViewCube as SdkVertexViewerViewCube,\n} from '@vertexvis/viewer-react';\nimport React from 'react';\n\nexport interface Props {\n placement?: ViewerToolbarPlacement;\n}\n\nexport const VertexViewerViewCube = ({\n placement,\n ...sdkProps\n}: Props &\n React.ComponentProps<typeof SdkVertexViewerViewCube>): JSX.Element => {\n return (\n <VertexViewerToolbar\n data-testid=\"view-cube-toolbar\"\n placement={placement ?? 'top-right'}\n >\n <SdkVertexViewerViewCube className=\"m-7\" {...sdkProps} />\n </VertexViewerToolbar>\n );\n};\n","import { boxSelectionEnabled } from '@state/box-selection/box-selection';\nimport { sdkConfig } from '@state/config';\nimport { crossSectioningAlignment } from '@state/cross-section';\nimport { useHitActions } from '@state/hits';\nimport { useKeyBindings } from '@state/keybinding/keybinding';\nimport { useSelectionActions } from '@state/selection/actions';\nimport { viewerElement, viewerInitialSceneReady } from '@state/viewer';\nimport { useViewerFrameActions } from '@state/viewer/frame/actions';\nimport { useRecoilRef } from '@util/refs/recoil-ref';\nimport { VertexViewer as SdkVertexViewer } from '@vertexvis/viewer-react';\nimport classNames from 'classnames';\nimport React from 'react';\nimport { useRecoilState, useRecoilValue } from 'recoil';\n\nimport { BoxSelectionTool } from '../box-selection/box-selection-tool';\nimport { VertexToolbar } from '../toolbar/toolbar';\nimport { VertexViewerViewCube } from './vertex-viewer-view-cube';\n\nexport interface Props {\n readonly id?: string;\n\n // Hit-based action configuration\n readonly disableSelection?: boolean;\n\n readonly viewerRefCallback?: React.RefCallback<HTMLVertexViewerElement | null>;\n\n readonly children?: React.ReactNode;\n}\n\nexport const VertexViewer = ({\n id,\n disableSelection,\n onTap,\n onLongpress,\n onFrameDrawn,\n viewerRefCallback,\n children,\n ...sdkProps\n}: Props & React.ComponentProps<typeof SdkVertexViewer>): JSX.Element => {\n const config = useRecoilValue(sdkConfig);\n\n const callbackRef = useRecoilRef({\n state: viewerElement,\n });\n\n const currentCrossSectionAlignment = useRecoilValue(crossSectioningAlignment);\n const [sceneReady, setSceneReady] = useRecoilState(viewerInitialSceneReady);\n const isBoxSelectionEnabled = useRecoilValue(boxSelectionEnabled);\n\n const viewerFrameActions = useViewerFrameActions();\n const hitActions = useHitActions();\n const selectionActions = useSelectionActions();\n\n const hasDefinedChildren = children != null && children !== false;\n\n useKeyBindings();\n\n return (\n <SdkVertexViewer\n id={id ?? 'vertex-viewer'}\n data-testid=\"vertex-viewer\"\n ref={viewerRefCallback ?? callbackRef}\n className={classNames('flex w-full h-full', {\n 'cursor-crosshair': currentCrossSectionAlignment.hitPending,\n })}\n config={config}\n onTap={(e) => {\n const actions = [\n ...(disableSelection ? [] : [selectionActions.selectCurrentHit]),\n ];\n\n hitActions.tap(e, ...actions);\n\n onTap?.(e);\n }}\n onLongpress={(e) => {\n hitActions.longPress(e);\n\n onLongpress?.(e);\n }}\n onFrameDrawn={(e) => {\n viewerFrameActions.frameDrawn(e);\n\n onFrameDrawn?.(e);\n }}\n {...sdkProps}\n onSceneReady={() => {\n if (!sceneReady) {\n setSceneReady(true);\n }\n }}\n >\n {isBoxSelectionEnabled && <BoxSelectionTool />}\n\n {hasDefinedChildren ? (\n children\n ) : (\n <>\n <VertexViewerViewCube />\n <VertexToolbar />\n </>\n )}\n </SdkVertexViewer>\n );\n};\n","import { PartialConfig } from '@vertexvis/viewer/dist/types/lib/config';\n\nexport function toSdkConfig(\n config: PartialConfig['network'] | PartialConfig\n): PartialConfig {\n if (isOnlyNetworkConfig(config)) {\n return { network: config } as PartialConfig;\n }\n return config;\n}\n\nfunction isOnlyNetworkConfig(\n config: PartialConfig['network'] | PartialConfig\n): config is PartialConfig['network'] {\n const asNetworkConfig = config as PartialConfig['network'];\n\n if (asNetworkConfig.renderingHost != null) {\n return true;\n }\n return false;\n}\n","import { HitState, hitState as hitStateAtom } from '@state/hits/event-state';\nimport {\n SelectionState,\n selectionState as selectionStateAtom,\n} from '@state/selection';\nimport React from 'react';\nimport { useRecoilValue } from 'recoil';\n\nexport interface Props {\n onHitStateChange?: (state: HitState) => void | Promise<void>;\n onSelectionStateChange?: (state: SelectionState) => void | Promise<void>;\n}\n\nexport const VertexViewerToolkitEventListener = ({\n onHitStateChange,\n onSelectionStateChange,\n}: Props): JSX.Element => {\n const hitState = useRecoilValue(hitStateAtom);\n const selectionState = useRecoilValue(selectionStateAtom);\n\n React.useEffect(() => {\n onHitStateChange?.(hitState);\n }, [hitState, onHitStateChange]);\n\n React.useEffect(() => {\n onSelectionStateChange?.(selectionState);\n }, [selectionState, onSelectionStateChange]);\n\n return <></>;\n};\n","import { sdkConfig } from '@state/config';\nimport { toSdkConfig } from '@util/sdk-mapping/config';\nimport type { PartialConfig } from '@vertexvis/viewer/dist/types/lib/config';\nimport { defineCustomElements } from '@vertexvis/viewer/loader';\nimport React from 'react';\nimport { RecoilRoot, useSetRecoilState } from 'recoil';\n\nimport {\n Props as EventWrapperProps,\n VertexViewerToolkitEventListener,\n} from './events-listener';\n\nexport interface Props extends EventWrapperProps {\n override?: boolean;\n config?: PartialConfig['network'] | PartialConfig;\n\n children: React.ReactElement | React.ReactElement[];\n}\n\nexport const VertexViewerToolkitRoot = ({\n override,\n children,\n config,\n ...eventWrapperProps\n}: Props): JSX.Element => {\n React.useEffect(() => {\n defineCustomElements();\n }, []);\n\n return (\n <RecoilRoot override={override}>\n <>\n <VertexViewerToolkitEventListener {...eventWrapperProps} />\n <VertexViewerToolkitRootConfig config={config}>\n {children}\n </VertexViewerToolkitRootConfig>\n </>\n </RecoilRoot>\n );\n};\n\ninterface ConfigProps {\n config?: PartialConfig['network'] | PartialConfig;\n\n children: React.ReactElement | React.ReactElement[];\n}\n\nconst VertexViewerToolkitRootConfig = ({\n config,\n children,\n}: ConfigProps): JSX.Element => {\n const setSdkConfig = useSetRecoilState(sdkConfig);\n\n React.useEffect(() => {\n const parsedConfig = config != null ? toSdkConfig(config) : undefined;\n\n setSdkConfig(parsedConfig);\n }, [config, setSdkConfig]);\n\n return <>{children}</>;\n};\n"],"names":["useRecoilValue","useRecoilCallback","atom","UUID","React","Point","selector","Vector3","BoundingBox","CrossSectionPlane.defaultAxes","CrossSectionPlane.isNegativeNormal","Angle","Color","CrossSectionPlane.towardsCamera","CrossSectionPlane.x","CrossSectionPlane.fromHit","CrossSectionPlane.invert","CrossSectionPlane.toAxis","_jsx","VertexMenu","atomFamily","_jsxs","VertexMenuItem","VertexIcon","VertexMenuDivider","SdkVertexSceneTreeTableLayout","SdkVertexSceneTreeTableColumn","SdkVertexSceneTree","useSetRecoilState","VertexPopover","VertexTooltip","UiVertexSlider","VertexIconButton","VertexViewerToolbarGroup","useRecoilValueLoadable","axis","CrossSectionPlane.axis","CrossSectionPlane.xAxis","CrossSectionPlane.yAxis","CrossSectionPlane.zAxis","VertexTextfield","_Fragment","useRecoilState","VertexViewerToolbar","VertexViewerBoxQueryTool","SdkVertexViewerViewCube","SdkVertexViewer","hitState","hitStateAtom","selectionState","selectionStateAtom","defineCustomElements","RecoilRoot"],"mappings":"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"}