@vertexvis/viewer 0.21.0-testing.0 → 0.21.0-testing.2

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 (28) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +36 -38
  3. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
  4. package/dist/cjs/viewer.cjs.js +1 -1
  5. package/dist/collection/components/viewer-transform-widget/util.js +4 -4
  6. package/dist/collection/components/viewer-transform-widget/util.js.map +1 -1
  7. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js +15 -13
  8. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
  9. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.css +4 -8
  10. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +34 -20
  11. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
  12. package/dist/components/vertex-viewer-transform-widget.js +37 -38
  13. package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
  14. package/dist/esm/loader.js +1 -1
  15. package/dist/esm/loader.mjs +1 -1
  16. package/dist/esm/vertex-viewer-transform-widget.entry.js +36 -38
  17. package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
  18. package/dist/esm/viewer.js +1 -1
  19. package/dist/types/components/viewer-transform-widget/util.d.ts +4 -3
  20. package/dist/types/components/viewer-transform-widget/viewer-transform-widget.d.ts +7 -3
  21. package/dist/types/components.d.ts +8 -0
  22. package/dist/viewer/p-24b66b64.entry.js +5 -0
  23. package/dist/viewer/p-24b66b64.entry.js.map +1 -0
  24. package/dist/viewer/viewer.esm.js +1 -1
  25. package/dist/viewer/viewer.esm.js.map +1 -1
  26. package/package.json +7 -7
  27. package/dist/viewer/p-ff7e05fe.entry.js +0 -5
  28. package/dist/viewer/p-ff7e05fe.entry.js.map +0 -1
@@ -72,7 +72,7 @@ const patchDynamicImport = (base, orgScriptElm) => {
72
72
 
73
73
  patchBrowser().then(options => {
74
74
  globalScripts();
75
- return bootstrapLazy(JSON.parse("[[\"vertex-viewer-pin-tool\",[[1,\"vertex-viewer-pin-tool\",{\"pinController\":[1040],\"pinModel\":[16],\"viewer\":[16],\"tool\":[1025],\"mode\":[1025],\"primaryColor\":[1025,\"primary-color\"],\"accentColor\":[1025,\"accent-color\"],\"pins\":[32],\"selectedPinId\":[32],\"elementBounds\":[32],\"projectionViewMatrix\":[32]}]]],[\"vertex-scene-tree\",[[1,\"vertex-scene-tree\",{\"overScanCount\":[2,\"over-scan-count\"],\"viewerSelector\":[1,\"viewer-selector\"],\"viewer\":[1040],\"rowData\":[16],\"config\":[1],\"configEnv\":[1,\"config-env\"],\"controller\":[1040],\"metadataSearchExactMatch\":[1028,\"metadata-search-exact-match\"],\"metadataSearchKeys\":[1040],\"metadataKeys\":[16],\"rows\":[32],\"totalRows\":[32],\"showLoader\":[32],\"showEmptyResults\":[32],\"stateMap\":[32],\"errorDetails\":[32],\"attemptingRetry\":[32],\"invalidateRows\":[64],\"scrollToIndex\":[64],\"scrollToItem\":[64],\"expandAll\":[64],\"collapseAll\":[64],\"expandItem\":[64],\"collapseItem\":[64],\"toggleExpandItem\":[64],\"toggleItemVisibility\":[64],\"hideItem\":[64],\"showItem\":[64],\"selectItem\":[64],\"deselectItem\":[64],\"getRowAtIndex\":[64],\"getRowForEvent\":[64],\"getRowAtClientY\":[64],\"filterItems\":[64],\"selectFilteredItems\":[64],\"fetchMetadataKeys\":[64]},[[0,\"search\",\"handleSearch\"],[0,\"cellLoaded\",\"handleCellLoaded\"]]]]],[\"vertex-viewer-default-toolbar\",[[1,\"vertex-viewer-default-toolbar\",{\"viewer\":[16],\"placement\":[1],\"direction\":[1],\"animationsDisabled\":[4,\"animations-disabled\"],\"animationMs\":[2,\"animation-ms\"]}]]],[\"vertex-viewer-markup\",[[1,\"vertex-viewer-markup\",{\"arrowTemplateId\":[1,\"arrow-template-id\"],\"circleTemplateId\":[1,\"circle-template-id\"],\"freeformTemplateId\":[1,\"freeform-template-id\"],\"tool\":[1],\"disabled\":[4],\"viewer\":[16],\"selectedMarkupId\":[1025,\"selected-markup-id\"],\"selectNew\":[4,\"select-new\"],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"toSelectMarkupId\":[32],\"pointerDownPosition\":[32],\"addMarkup\":[64],\"removeMarkup\":[64],\"getMarkupElements\":[64],\"getMarkupElement\":[64]},[[0,\"markupEnd\",\"handleMarkupEnd\"],[0,\"interactionEnd\",\"handleMarkupUpdated\"],[1,\"pointerdown\",\"handleMarkupPointerDown\"]]]]],[\"vertex-viewer-markup-tool\",[[1,\"vertex-viewer-markup-tool\",{\"arrowTemplateId\":[1,\"arrow-template-id\"],\"circleTemplateId\":[1,\"circle-template-id\"],\"freeformTemplateId\":[1,\"freeform-template-id\"],\"tool\":[1],\"disabled\":[4],\"viewer\":[16],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"stateMap\":[32],\"reset\":[64]}]]],[\"vertex-viewer-view-cube\",[[1,\"vertex-viewer-view-cube\",{\"xPositiveLabel\":[1,\"x-positive-label\"],\"xNegativeLabel\":[1,\"x-negative-label\"],\"yPositiveLabel\":[1,\"y-positive-label\"],\"yNegativeLabel\":[1,\"y-negative-label\"],\"zPositiveLabel\":[1,\"z-positive-label\"],\"zNegativeLabel\":[1,\"z-negative-label\"],\"standardViewsOff\":[4,\"standard-views-off\"],\"animationDuration\":[2,\"animation-duration\"],\"triadOff\":[4,\"triad-off\"],\"worldOrientation\":[1040],\"camera\":[1040],\"viewer\":[16],\"boxLength\":[32],\"triadPosition\":[32]}]]],[\"vertex-viewer-measurement-distance\",[[1,\"vertex-viewer-measurement-distance\",{\"start\":[1040],\"startJson\":[1,\"start-json\"],\"end\":[1040],\"endJson\":[1,\"end-json\"],\"distance\":[1026],\"showAxisReferenceLines\":[4,\"show-axis-reference-lines\"],\"snapDistance\":[2,\"snap-distance\"],\"units\":[1],\"fractionalDigits\":[2,\"fractional-digits\"],\"labelFormatter\":[16],\"anchorLabelOffset\":[2,\"anchor-label-offset\"],\"lineCapLength\":[2,\"line-cap-length\"],\"mode\":[513],\"interactingAnchor\":[1537,\"interacting-anchor\"],\"invalid\":[1540],\"camera\":[16],\"hitProvider\":[16],\"indicatorPt\":[1040],\"viewer\":[16],\"measurementModel\":[16],\"viewport\":[32],\"elementBounds\":[32],\"interactionCount\":[32],\"internalCamera\":[32],\"invalidateStateCounter\":[32],\"stateMap\":[32],\"measurementUnits\":[32],\"computeElementMetrics\":[64]}]]],[\"vertex-viewer-measurement-precise\",[[1,\"vertex-viewer-measurement-precise\",{\"measurementModel\":[16],\"measurementOverlays\":[16],\"measurementController\":[1040],\"measurableEntityTypes\":[16],\"viewer\":[16],\"configEnv\":[1,\"config-env\"],\"config\":[1]}]]],[\"vertex-viewer-box-query-tool\",[[1,\"vertex-viewer-box-query-tool\",{\"viewer\":[16],\"controller\":[1040],\"model\":[1040],\"operationType\":[1,\"operation-type\"],\"mode\":[1],\"details\":[32]}]]],[\"vertex-viewer-walk-mode-tool\",[[1,\"vertex-viewer-walk-mode-tool\",{\"viewer\":[16],\"controller\":[1040],\"model\":[1040],\"teleportMode\":[1,\"teleport-mode\"],\"enabled\":[4]}]]],[\"vertex-scene-tree-table-cell\",[[1,\"vertex-scene-tree-table-cell\",{\"node\":[16],\"tree\":[16],\"value\":[1],\"placeholder\":[1],\"hovered\":[1028],\"isScrolling\":[4,\"is-scrolling\"],\"expandToggle\":[4,\"expand-toggle\"],\"visibilityToggle\":[4,\"visibility-toggle\"],\"selectionHandler\":[16],\"visibilityHandler\":[16],\"expansionHandler\":[16],\"hoverController\":[16]}]]],[\"vertex-scene-tree-table-column\",[[1,\"vertex-scene-tree-table-column\",{\"initialWidth\":[2,\"initial-width\"],\"minWidth\":[2,\"min-width\"],\"maxWidth\":[2,\"max-width\"]}]]],[\"vertex-scene-tree-table-header\",[[1,\"vertex-scene-tree-table-header\"]]],[\"vertex-scene-tree-table-resize-divider\",[[1,\"vertex-scene-tree-table-resize-divider\",{\"dragging\":[32]}]]],[\"vertex-scene-tree-toolbar-group\",[[1,\"vertex-scene-tree-toolbar-group\"]]],[\"vertex-viewer\",[[1,\"vertex-viewer\",{\"src\":[1],\"clientId\":[1,\"client-id\"],\"deviceId\":[1025,\"device-id\"],\"config\":[1],\"configEnv\":[1,\"config-env\"],\"resolvedConfig\":[1040],\"cameraControls\":[4,\"camera-controls\"],\"cameraType\":[1537,\"camera-type\"],\"keyboardControls\":[4,\"keyboard-controls\"],\"rotateAroundTapPoint\":[4,\"rotate-around-tap-point\"],\"token\":[1025],\"depthBuffers\":[1,\"depth-buffers\"],\"phantom\":[16],\"noDefaultLights\":[4,\"no-default-lights\"],\"enableTemporalRefinement\":[4,\"enable-temporal-refinement\"],\"experimentalRenderingOptions\":[1,\"experimental-rendering-options\"],\"featureLines\":[16],\"selectionHighlighting\":[16],\"featureHighlighting\":[16],\"featureMaps\":[1,\"feature-maps\"],\"resizeDebounce\":[2,\"resize-debounce\"],\"frame\":[1040],\"stream\":[1040],\"stencilBuffer\":[1040],\"viewport\":[1040],\"dimensions\":[32],\"hostDimensions\":[32],\"errorMessage\":[32],\"cursor\":[32],\"stateMap\":[32],\"dispatchFrameDrawn\":[64],\"registerInteractionHandler\":[64],\"registerTapKeyInteraction\":[64],\"getInteractionTarget_DEPRECATED\":[64],\"addCursor\":[64],\"getInteractionHandlers\":[64],\"getKeyInteractions\":[64],\"getBaseInteractionHandler\":[64],\"getJwt\":[64],\"load\":[64],\"unload\":[64],\"scene\":[64],\"isSceneReady\":[64]},[[0,\"tap\",\"handleTapEvent\"]]]]],[\"vertex-viewer-hit-result-indicator\",[[1,\"vertex-viewer-hit-result-indicator\",{\"viewer\":[16],\"position\":[1040],\"normal\":[1040]}]]],[\"vertex-viewer-measurement-details\",[[1,\"vertex-viewer-measurement-details\",{\"measurementModel\":[16],\"measurementOverlays\":[16],\"measurementOutcome\":[1040],\"distanceUnits\":[1,\"distance-units\"],\"angleUnits\":[1,\"angle-units\"],\"fractionalDigits\":[2,\"fractional-digits\"],\"distanceFormatter\":[16],\"angleFormatter\":[16],\"areaFormatter\":[16],\"resultTypes\":[16],\"overlay\":[32],\"distanceMeasurementUnits\":[32],\"angleMeasurementUnits\":[32],\"areaMeasurementUnits\":[32]}]]],[\"vertex-viewer-transform-widget\",[[1,\"vertex-viewer-transform-widget\",{\"viewer\":[16],\"position\":[1040],\"rotation\":[1040],\"controller\":[1040],\"xRotationDisabled\":[1028,\"x-rotation-disabled\"],\"yRotationDisabled\":[1028,\"y-rotation-disabled\"],\"zRotationDisabled\":[1028,\"z-rotation-disabled\"],\"xTranslationDisabled\":[1028,\"x-translation-disabled\"],\"yTranslationDisabled\":[1028,\"y-translation-disabled\"],\"zTranslationDisabled\":[1028,\"z-translation-disabled\"],\"distanceUnit\":[1,\"distance-unit\"],\"angleUnit\":[1,\"angle-unit\"],\"decimalPlaces\":[2,\"decimal-places\"],\"hovered\":[1040],\"inputPosition\":[32],\"inputValue\":[32]}]]],[\"vertex-viewer-icon\",[[1,\"vertex-viewer-icon\",{\"name\":[1],\"size\":[1]}]]],[\"vertex-viewer-pin-group\",[[0,\"vertex-viewer-pin-group\",{\"pin\":[16],\"matrix\":[1040],\"projectionViewMatrix\":[16],\"elementBounds\":[1040],\"pinModel\":[16],\"pinController\":[16],\"selected\":[4],\"invalidateStateCounter\":[32]}]]],[\"vertex-viewer-dom-group\",[[1,\"vertex-viewer-dom-group\",{\"position\":[1040],\"positionJson\":[1,\"position\"],\"rotation\":[1040],\"rotationJson\":[1,\"rotation\"],\"quaternion\":[1040],\"quaternionJson\":[1,\"quaternion\"],\"scale\":[1040],\"scaleJson\":[1,\"scale\"],\"matrix\":[1040]}]]],[\"vertex-viewer-teleport-tool\",[[1,\"vertex-viewer-teleport-tool\",{\"viewer\":[16],\"mode\":[1025],\"animationsDisabled\":[4,\"animations-disabled\"],\"animationMs\":[2,\"animation-ms\"],\"controller\":[1040],\"model\":[1040]}]]],[\"vertex-viewer-spinner\",[[1,\"vertex-viewer-spinner\",{\"size\":[1]}]]],[\"vertex-scene-tree-search_3\",[[1,\"vertex-scene-tree-search\",{\"debounce\":[2],\"disabled\":[4],\"placeholder\":[1],\"controller\":[16],\"value\":[1025],\"focused\":[32],\"isSearching\":[32],\"setFocus\":[64],\"clear\":[64]}],[1,\"vertex-scene-tree-table-layout\",{\"tree\":[16],\"controller\":[16],\"rows\":[16],\"totalRows\":[2,\"total-rows\"],\"rowHeight\":[1026,\"row-height\"],\"overScanCount\":[2,\"over-scan-count\"],\"rowData\":[16],\"layoutOffset\":[1026,\"layout-offset\"],\"scrollOffset\":[1026,\"scroll-offset\"],\"layoutHeight\":[1026,\"layout-height\"],\"layoutWidth\":[1026,\"layout-width\"],\"viewportStartIndex\":[1026,\"viewport-start-index\"],\"viewportEndIndex\":[1026,\"viewport-end-index\"],\"columnGridLayout\":[32],\"columnGridFixedLayout\":[32],\"isComputingCellHeight\":[32],\"lastDividerPointerPosition\":[32],\"resizingColumnIndex\":[32],\"isScrolling\":[32],\"scrollTimer\":[32],\"stateMap\":[32],\"scrollToPosition\":[64]}],[1,\"vertex-scene-tree-toolbar\"]]],[\"vertex-viewer-layer\",[[1,\"vertex-viewer-layer\",{\"stretchOff\":[516,\"stretch-off\"]}]]],[\"vertex-viewer-button_3\",[[1,\"vertex-viewer-toolbar\",{\"placement\":[1],\"direction\":[1]}],[1,\"vertex-viewer-button\"],[1,\"vertex-viewer-toolbar-group\",{\"direction\":[1]}]]],[\"vertex-viewer-pin-label_2\",[[0,\"vertex-viewer-pin-label\",{\"pin\":[16],\"elementBounds\":[16],\"value\":[1025],\"pinController\":[16],\"focused\":[32],\"computedScreenPosition\":[32],\"textareaRows\":[32],\"contentElBounds\":[32],\"setFocus\":[64]}],[0,\"vertex-viewer-pin-label-line\",{\"pinPoint\":[16],\"labelPoint\":[16],\"pin\":[16]}]]],[\"vertex-viewer-measurement-line_2\",[[1,\"vertex-viewer-measurement-overlays\",{\"measurementOverlays\":[16],\"camera\":[1040],\"viewer\":[16],\"overlays\":[32]}],[1,\"vertex-viewer-measurement-line\",{\"start\":[16],\"end\":[16],\"capLength\":[2,\"cap-length\"],\"pointerEvents\":[1,\"pointer-events\"]}]]],[\"vertex-viewer-dom-element_2\",[[1,\"vertex-viewer-dom-renderer\",{\"drawMode\":[1,\"draw-mode\"],\"viewer\":[16],\"camera\":[1040],\"depthBuffer\":[1040],\"viewport\":[32],\"invalidateFrameCounter\":[32]},[[0,\"propertyChange\",\"handlePropertyChange\"]]],[1,\"vertex-viewer-dom-element\",{\"position\":[1040],\"positionJson\":[1,\"position\"],\"rotation\":[1040],\"rotationJson\":[1,\"rotation\"],\"quaternion\":[1040],\"quaternionJson\":[1,\"quaternion\"],\"scale\":[1040],\"scaleJson\":[1,\"scale\"],\"matrix\":[1040],\"occlusionOff\":[4,\"occlusion-off\"],\"occluded\":[516],\"billboardOff\":[4,\"billboard-off\"],\"interactionsOff\":[516,\"interactions-off\"]}]]],[\"vertex-viewer-markup-arrow_3\",[[1,\"vertex-viewer-markup-arrow\",{\"start\":[1040],\"startJson\":[1,\"start\"],\"end\":[1040],\"endJson\":[1,\"end\"],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"dispose\":[64]}],[1,\"vertex-viewer-markup-circle\",{\"bounds\":[1040],\"boundsJson\":[1,\"bounds\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"dispose\":[64]}],[1,\"vertex-viewer-markup-freeform\",{\"points\":[1040],\"pointsJson\":[1,\"points\"],\"bounds\":[1040],\"boundsJson\":[1,\"bounds\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"screenPoints\":[32],\"dispose\":[64]}]]]]"), options);
75
+ return bootstrapLazy(JSON.parse("[[\"vertex-viewer-pin-tool\",[[1,\"vertex-viewer-pin-tool\",{\"pinController\":[1040],\"pinModel\":[16],\"viewer\":[16],\"tool\":[1025],\"mode\":[1025],\"primaryColor\":[1025,\"primary-color\"],\"accentColor\":[1025,\"accent-color\"],\"pins\":[32],\"selectedPinId\":[32],\"elementBounds\":[32],\"projectionViewMatrix\":[32]}]]],[\"vertex-scene-tree\",[[1,\"vertex-scene-tree\",{\"overScanCount\":[2,\"over-scan-count\"],\"viewerSelector\":[1,\"viewer-selector\"],\"viewer\":[1040],\"rowData\":[16],\"config\":[1],\"configEnv\":[1,\"config-env\"],\"controller\":[1040],\"metadataSearchExactMatch\":[1028,\"metadata-search-exact-match\"],\"metadataSearchKeys\":[1040],\"metadataKeys\":[16],\"rows\":[32],\"totalRows\":[32],\"showLoader\":[32],\"showEmptyResults\":[32],\"stateMap\":[32],\"errorDetails\":[32],\"attemptingRetry\":[32],\"invalidateRows\":[64],\"scrollToIndex\":[64],\"scrollToItem\":[64],\"expandAll\":[64],\"collapseAll\":[64],\"expandItem\":[64],\"collapseItem\":[64],\"toggleExpandItem\":[64],\"toggleItemVisibility\":[64],\"hideItem\":[64],\"showItem\":[64],\"selectItem\":[64],\"deselectItem\":[64],\"getRowAtIndex\":[64],\"getRowForEvent\":[64],\"getRowAtClientY\":[64],\"filterItems\":[64],\"selectFilteredItems\":[64],\"fetchMetadataKeys\":[64]},[[0,\"search\",\"handleSearch\"],[0,\"cellLoaded\",\"handleCellLoaded\"]]]]],[\"vertex-viewer-default-toolbar\",[[1,\"vertex-viewer-default-toolbar\",{\"viewer\":[16],\"placement\":[1],\"direction\":[1],\"animationsDisabled\":[4,\"animations-disabled\"],\"animationMs\":[2,\"animation-ms\"]}]]],[\"vertex-viewer-markup\",[[1,\"vertex-viewer-markup\",{\"arrowTemplateId\":[1,\"arrow-template-id\"],\"circleTemplateId\":[1,\"circle-template-id\"],\"freeformTemplateId\":[1,\"freeform-template-id\"],\"tool\":[1],\"disabled\":[4],\"viewer\":[16],\"selectedMarkupId\":[1025,\"selected-markup-id\"],\"selectNew\":[4,\"select-new\"],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"toSelectMarkupId\":[32],\"pointerDownPosition\":[32],\"addMarkup\":[64],\"removeMarkup\":[64],\"getMarkupElements\":[64],\"getMarkupElement\":[64]},[[0,\"markupEnd\",\"handleMarkupEnd\"],[0,\"interactionEnd\",\"handleMarkupUpdated\"],[1,\"pointerdown\",\"handleMarkupPointerDown\"]]]]],[\"vertex-viewer-markup-tool\",[[1,\"vertex-viewer-markup-tool\",{\"arrowTemplateId\":[1,\"arrow-template-id\"],\"circleTemplateId\":[1,\"circle-template-id\"],\"freeformTemplateId\":[1,\"freeform-template-id\"],\"tool\":[1],\"disabled\":[4],\"viewer\":[16],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"stateMap\":[32],\"reset\":[64]}]]],[\"vertex-viewer-view-cube\",[[1,\"vertex-viewer-view-cube\",{\"xPositiveLabel\":[1,\"x-positive-label\"],\"xNegativeLabel\":[1,\"x-negative-label\"],\"yPositiveLabel\":[1,\"y-positive-label\"],\"yNegativeLabel\":[1,\"y-negative-label\"],\"zPositiveLabel\":[1,\"z-positive-label\"],\"zNegativeLabel\":[1,\"z-negative-label\"],\"standardViewsOff\":[4,\"standard-views-off\"],\"animationDuration\":[2,\"animation-duration\"],\"triadOff\":[4,\"triad-off\"],\"worldOrientation\":[1040],\"camera\":[1040],\"viewer\":[16],\"boxLength\":[32],\"triadPosition\":[32]}]]],[\"vertex-viewer-measurement-distance\",[[1,\"vertex-viewer-measurement-distance\",{\"start\":[1040],\"startJson\":[1,\"start-json\"],\"end\":[1040],\"endJson\":[1,\"end-json\"],\"distance\":[1026],\"showAxisReferenceLines\":[4,\"show-axis-reference-lines\"],\"snapDistance\":[2,\"snap-distance\"],\"units\":[1],\"fractionalDigits\":[2,\"fractional-digits\"],\"labelFormatter\":[16],\"anchorLabelOffset\":[2,\"anchor-label-offset\"],\"lineCapLength\":[2,\"line-cap-length\"],\"mode\":[513],\"interactingAnchor\":[1537,\"interacting-anchor\"],\"invalid\":[1540],\"camera\":[16],\"hitProvider\":[16],\"indicatorPt\":[1040],\"viewer\":[16],\"measurementModel\":[16],\"viewport\":[32],\"elementBounds\":[32],\"interactionCount\":[32],\"internalCamera\":[32],\"invalidateStateCounter\":[32],\"stateMap\":[32],\"measurementUnits\":[32],\"computeElementMetrics\":[64]}]]],[\"vertex-viewer-measurement-precise\",[[1,\"vertex-viewer-measurement-precise\",{\"measurementModel\":[16],\"measurementOverlays\":[16],\"measurementController\":[1040],\"measurableEntityTypes\":[16],\"viewer\":[16],\"configEnv\":[1,\"config-env\"],\"config\":[1]}]]],[\"vertex-viewer-box-query-tool\",[[1,\"vertex-viewer-box-query-tool\",{\"viewer\":[16],\"controller\":[1040],\"model\":[1040],\"operationType\":[1,\"operation-type\"],\"mode\":[1],\"details\":[32]}]]],[\"vertex-viewer-walk-mode-tool\",[[1,\"vertex-viewer-walk-mode-tool\",{\"viewer\":[16],\"controller\":[1040],\"model\":[1040],\"teleportMode\":[1,\"teleport-mode\"],\"enabled\":[4]}]]],[\"vertex-scene-tree-table-cell\",[[1,\"vertex-scene-tree-table-cell\",{\"node\":[16],\"tree\":[16],\"value\":[1],\"placeholder\":[1],\"hovered\":[1028],\"isScrolling\":[4,\"is-scrolling\"],\"expandToggle\":[4,\"expand-toggle\"],\"visibilityToggle\":[4,\"visibility-toggle\"],\"selectionHandler\":[16],\"visibilityHandler\":[16],\"expansionHandler\":[16],\"hoverController\":[16]}]]],[\"vertex-scene-tree-table-column\",[[1,\"vertex-scene-tree-table-column\",{\"initialWidth\":[2,\"initial-width\"],\"minWidth\":[2,\"min-width\"],\"maxWidth\":[2,\"max-width\"]}]]],[\"vertex-scene-tree-table-header\",[[1,\"vertex-scene-tree-table-header\"]]],[\"vertex-scene-tree-table-resize-divider\",[[1,\"vertex-scene-tree-table-resize-divider\",{\"dragging\":[32]}]]],[\"vertex-scene-tree-toolbar-group\",[[1,\"vertex-scene-tree-toolbar-group\"]]],[\"vertex-viewer\",[[1,\"vertex-viewer\",{\"src\":[1],\"clientId\":[1,\"client-id\"],\"deviceId\":[1025,\"device-id\"],\"config\":[1],\"configEnv\":[1,\"config-env\"],\"resolvedConfig\":[1040],\"cameraControls\":[4,\"camera-controls\"],\"cameraType\":[1537,\"camera-type\"],\"keyboardControls\":[4,\"keyboard-controls\"],\"rotateAroundTapPoint\":[4,\"rotate-around-tap-point\"],\"token\":[1025],\"depthBuffers\":[1,\"depth-buffers\"],\"phantom\":[16],\"noDefaultLights\":[4,\"no-default-lights\"],\"enableTemporalRefinement\":[4,\"enable-temporal-refinement\"],\"experimentalRenderingOptions\":[1,\"experimental-rendering-options\"],\"featureLines\":[16],\"selectionHighlighting\":[16],\"featureHighlighting\":[16],\"featureMaps\":[1,\"feature-maps\"],\"resizeDebounce\":[2,\"resize-debounce\"],\"frame\":[1040],\"stream\":[1040],\"stencilBuffer\":[1040],\"viewport\":[1040],\"dimensions\":[32],\"hostDimensions\":[32],\"errorMessage\":[32],\"cursor\":[32],\"stateMap\":[32],\"dispatchFrameDrawn\":[64],\"registerInteractionHandler\":[64],\"registerTapKeyInteraction\":[64],\"getInteractionTarget_DEPRECATED\":[64],\"addCursor\":[64],\"getInteractionHandlers\":[64],\"getKeyInteractions\":[64],\"getBaseInteractionHandler\":[64],\"getJwt\":[64],\"load\":[64],\"unload\":[64],\"scene\":[64],\"isSceneReady\":[64]},[[0,\"tap\",\"handleTapEvent\"]]]]],[\"vertex-viewer-hit-result-indicator\",[[1,\"vertex-viewer-hit-result-indicator\",{\"viewer\":[16],\"position\":[1040],\"normal\":[1040]}]]],[\"vertex-viewer-measurement-details\",[[1,\"vertex-viewer-measurement-details\",{\"measurementModel\":[16],\"measurementOverlays\":[16],\"measurementOutcome\":[1040],\"distanceUnits\":[1,\"distance-units\"],\"angleUnits\":[1,\"angle-units\"],\"fractionalDigits\":[2,\"fractional-digits\"],\"distanceFormatter\":[16],\"angleFormatter\":[16],\"areaFormatter\":[16],\"resultTypes\":[16],\"overlay\":[32],\"distanceMeasurementUnits\":[32],\"angleMeasurementUnits\":[32],\"areaMeasurementUnits\":[32]}]]],[\"vertex-viewer-transform-widget\",[[1,\"vertex-viewer-transform-widget\",{\"viewer\":[16],\"position\":[1040],\"rotation\":[1040],\"controller\":[1040],\"xRotationDisabled\":[1028,\"x-rotation-disabled\"],\"yRotationDisabled\":[1028,\"y-rotation-disabled\"],\"zRotationDisabled\":[1028,\"z-rotation-disabled\"],\"xTranslationDisabled\":[1028,\"x-translation-disabled\"],\"yTranslationDisabled\":[1028,\"y-translation-disabled\"],\"zTranslationDisabled\":[1028,\"z-translation-disabled\"],\"showInputs\":[4,\"show-inputs\"],\"distanceUnit\":[1,\"distance-unit\"],\"angleUnit\":[1,\"angle-unit\"],\"decimalPlaces\":[2,\"decimal-places\"],\"hovered\":[1040],\"inputPosition\":[32],\"inputValue\":[32]}]]],[\"vertex-viewer-icon\",[[1,\"vertex-viewer-icon\",{\"name\":[1],\"size\":[1]}]]],[\"vertex-viewer-pin-group\",[[0,\"vertex-viewer-pin-group\",{\"pin\":[16],\"matrix\":[1040],\"projectionViewMatrix\":[16],\"elementBounds\":[1040],\"pinModel\":[16],\"pinController\":[16],\"selected\":[4],\"invalidateStateCounter\":[32]}]]],[\"vertex-viewer-dom-group\",[[1,\"vertex-viewer-dom-group\",{\"position\":[1040],\"positionJson\":[1,\"position\"],\"rotation\":[1040],\"rotationJson\":[1,\"rotation\"],\"quaternion\":[1040],\"quaternionJson\":[1,\"quaternion\"],\"scale\":[1040],\"scaleJson\":[1,\"scale\"],\"matrix\":[1040]}]]],[\"vertex-viewer-teleport-tool\",[[1,\"vertex-viewer-teleport-tool\",{\"viewer\":[16],\"mode\":[1025],\"animationsDisabled\":[4,\"animations-disabled\"],\"animationMs\":[2,\"animation-ms\"],\"controller\":[1040],\"model\":[1040]}]]],[\"vertex-viewer-spinner\",[[1,\"vertex-viewer-spinner\",{\"size\":[1]}]]],[\"vertex-scene-tree-search_3\",[[1,\"vertex-scene-tree-search\",{\"debounce\":[2],\"disabled\":[4],\"placeholder\":[1],\"controller\":[16],\"value\":[1025],\"focused\":[32],\"isSearching\":[32],\"setFocus\":[64],\"clear\":[64]}],[1,\"vertex-scene-tree-table-layout\",{\"tree\":[16],\"controller\":[16],\"rows\":[16],\"totalRows\":[2,\"total-rows\"],\"rowHeight\":[1026,\"row-height\"],\"overScanCount\":[2,\"over-scan-count\"],\"rowData\":[16],\"layoutOffset\":[1026,\"layout-offset\"],\"scrollOffset\":[1026,\"scroll-offset\"],\"layoutHeight\":[1026,\"layout-height\"],\"layoutWidth\":[1026,\"layout-width\"],\"viewportStartIndex\":[1026,\"viewport-start-index\"],\"viewportEndIndex\":[1026,\"viewport-end-index\"],\"columnGridLayout\":[32],\"columnGridFixedLayout\":[32],\"isComputingCellHeight\":[32],\"lastDividerPointerPosition\":[32],\"resizingColumnIndex\":[32],\"isScrolling\":[32],\"scrollTimer\":[32],\"stateMap\":[32],\"scrollToPosition\":[64]}],[1,\"vertex-scene-tree-toolbar\"]]],[\"vertex-viewer-layer\",[[1,\"vertex-viewer-layer\",{\"stretchOff\":[516,\"stretch-off\"]}]]],[\"vertex-viewer-button_3\",[[1,\"vertex-viewer-toolbar\",{\"placement\":[1],\"direction\":[1]}],[1,\"vertex-viewer-button\"],[1,\"vertex-viewer-toolbar-group\",{\"direction\":[1]}]]],[\"vertex-viewer-pin-label_2\",[[0,\"vertex-viewer-pin-label\",{\"pin\":[16],\"elementBounds\":[16],\"value\":[1025],\"pinController\":[16],\"focused\":[32],\"computedScreenPosition\":[32],\"textareaRows\":[32],\"contentElBounds\":[32],\"setFocus\":[64]}],[0,\"vertex-viewer-pin-label-line\",{\"pinPoint\":[16],\"labelPoint\":[16],\"pin\":[16]}]]],[\"vertex-viewer-measurement-line_2\",[[1,\"vertex-viewer-measurement-overlays\",{\"measurementOverlays\":[16],\"camera\":[1040],\"viewer\":[16],\"overlays\":[32]}],[1,\"vertex-viewer-measurement-line\",{\"start\":[16],\"end\":[16],\"capLength\":[2,\"cap-length\"],\"pointerEvents\":[1,\"pointer-events\"]}]]],[\"vertex-viewer-dom-element_2\",[[1,\"vertex-viewer-dom-renderer\",{\"drawMode\":[1,\"draw-mode\"],\"viewer\":[16],\"camera\":[1040],\"depthBuffer\":[1040],\"viewport\":[32],\"invalidateFrameCounter\":[32]},[[0,\"propertyChange\",\"handlePropertyChange\"]]],[1,\"vertex-viewer-dom-element\",{\"position\":[1040],\"positionJson\":[1,\"position\"],\"rotation\":[1040],\"rotationJson\":[1,\"rotation\"],\"quaternion\":[1040],\"quaternionJson\":[1,\"quaternion\"],\"scale\":[1040],\"scaleJson\":[1,\"scale\"],\"matrix\":[1040],\"occlusionOff\":[4,\"occlusion-off\"],\"occluded\":[516],\"billboardOff\":[4,\"billboard-off\"],\"interactionsOff\":[516,\"interactions-off\"]}]]],[\"vertex-viewer-markup-arrow_3\",[[1,\"vertex-viewer-markup-arrow\",{\"start\":[1040],\"startJson\":[1,\"start\"],\"end\":[1040],\"endJson\":[1,\"end\"],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"dispose\":[64]}],[1,\"vertex-viewer-markup-circle\",{\"bounds\":[1040],\"boundsJson\":[1,\"bounds\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"dispose\":[64]}],[1,\"vertex-viewer-markup-freeform\",{\"points\":[1040],\"pointsJson\":[1,\"points\"],\"bounds\":[1040],\"boundsJson\":[1,\"bounds\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"screenPoints\":[32],\"dispose\":[64]}]]]]"), options);
76
76
  });
77
77
 
78
78
  //# sourceMappingURL=viewer.js.map
@@ -1,8 +1,9 @@
1
1
  import { Matrix4, Point, Rectangle, Vector3 } from '@vertexvis/geometry';
2
2
  import { AngleUnitType, DistanceUnitType, Frame, Viewport } from '../../lib/types';
3
- export interface PointAndPosition {
3
+ import { TransformWidgetInputPlacement } from './viewer-transform-widget-components';
4
+ export interface PointAndPlacement {
4
5
  point: Point.Point;
5
- position: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
6
+ placement: TransformWidgetInputPlacement;
6
7
  }
7
8
  export declare function convertPointToCanvas(point: Point.Point, bounds?: DOMRect): Point.Point | undefined;
8
9
  export declare function convertCanvasPointToWorld(point?: Point.Point, frame?: Frame, viewport?: Viewport, transform?: Matrix4.Matrix4): Vector3.Vector3 | undefined;
@@ -19,4 +20,4 @@ export declare function computeTranslation(current: Matrix4.Matrix4, axis: Vecto
19
20
  * @returns
20
21
  */
21
22
  export declare function computeRotation(current: Matrix4.Matrix4, delta: Matrix4.Matrix4): Matrix4.Matrix4;
22
- export declare function computeInputPosition(viewport: Viewport, bounds: Rectangle.Rectangle, shapePoints: Point.Point[]): PointAndPosition;
23
+ export declare function computeInputPosition(viewport: Viewport, bounds: Rectangle.Rectangle, shapePoints: Point.Point[]): PointAndPlacement;
@@ -3,7 +3,7 @@ import { Euler, Matrix4, Vector3 } from '@vertexvis/geometry';
3
3
  import { TransformController } from '../../lib/transforms/controller';
4
4
  import { Drawable } from '../../lib/transforms/drawable';
5
5
  import { AngleUnitType, DistanceUnitType } from '../../lib/types';
6
- import { PointAndPosition } from './util';
6
+ import { PointAndPlacement } from './util';
7
7
  export declare class ViewerTransformWidget {
8
8
  /**
9
9
  * An event that is emitted when the position of the widget changes.
@@ -64,6 +64,11 @@ export declare class ViewerTransformWidget {
64
64
  * Determines whether or not the z-translation is disabled on the widget
65
65
  */
66
66
  zTranslationDisabled: boolean;
67
+ /**
68
+ * Whether to show inputs beside the widget handles when they are interacted with.
69
+ * Defaults to `true`.
70
+ */
71
+ showInputs: boolean;
67
72
  /**
68
73
  * The unit to show for translation inputs. Defaults to `millimeters`.
69
74
  *
@@ -87,7 +92,7 @@ export declare class ViewerTransformWidget {
87
92
  * Visible for testing.
88
93
  */
89
94
  hovered?: Drawable;
90
- protected inputPosition?: PointAndPosition;
95
+ protected inputPosition?: PointAndPlacement;
91
96
  protected inputValue?: number;
92
97
  private hostEl;
93
98
  private startingTransform?;
@@ -148,7 +153,6 @@ export declare class ViewerTransformWidget {
148
153
  private handleSettingDisabledAxis;
149
154
  private setupTransformWidget;
150
155
  private updateCanvasBounds;
151
- private get currentRotation();
152
156
  private updateInputValue;
153
157
  private transformCurrent;
154
158
  private updateInputPosition;
@@ -1180,6 +1180,10 @@ export namespace Components {
1180
1180
  * The starting angle for the transform widget. This rotation will be updated as the rotations occur.
1181
1181
  */
1182
1182
  "rotation"?: Euler.Euler;
1183
+ /**
1184
+ * Whether to show inputs beside the widget handles when they are interacted with. Defaults to `true`.
1185
+ */
1186
+ "showInputs": boolean;
1183
1187
  /**
1184
1188
  * The viewer to connect to transforms. If nested within a <vertex-viewer>, this property will be populated automatically.
1185
1189
  */
@@ -2712,6 +2716,10 @@ declare namespace LocalJSX {
2712
2716
  * The starting angle for the transform widget. This rotation will be updated as the rotations occur.
2713
2717
  */
2714
2718
  "rotation"?: Euler.Euler;
2719
+ /**
2720
+ * Whether to show inputs beside the widget handles when they are interacted with. Defaults to `true`.
2721
+ */
2722
+ "showInputs"?: boolean;
2715
2723
  /**
2716
2724
  * The viewer to connect to transforms. If nested within a <vertex-viewer>, this property will be populated automatically.
2717
2725
  */
@@ -0,0 +1,5 @@
1
+ /*!
2
+ * Copyright (c) 2024 Vertex Software LLC. All rights reserved.
3
+ */
4
+ import{h as t,r as i,c as s,H as n,g as h}from"./p-e4ea1075.js";import{p as o,v as l,r as e,f as r,m as a,q as d,t as u,e as v,d as c,c as f,b as w}from"./p-64241313.js";import{c as p}from"./p-5206da6c.js";import{w as g,r as m}from"./p-de6e0a52.js";import{T as x}from"./p-dc03a747.js";import{D as b,A as y}from"./p-b1d6db57.js";import"./p-d312d59a.js";import{E as z}from"./p-fbf81eb8.js";import{d as C,T as D,R,e as T,r as j,s as O,x as P,A,b as N,y as $,z as E,f as S,g as U}from"./p-ad8fd026.js";import"./p-88c19f38.js";import"./p-ff3586b7.js";import"./p-97c819bc.js";function F(t,i){return i!=null?o.create(t.x-i.left,t.y-i.top):undefined}function J(t,i,s,n){const h=n!=null?l.fromMatrixPosition(n):undefined;if(t!=null&&i!=null&&s!=null&&h!=null){if(i.scene.camera.isOrthographic()){const n=s.transformPointToOrthographicRay(t,i.image,i.scene.camera);const o=e.at(e.create({origin:h,direction:i.scene.camera.direction}),l.magnitude(i.scene.camera.viewVector)*2);return e.intersectPlane(n,r.fromNormalAndCoplanarPoint(i.scene.camera.direction,o))}else{const n=s.transformPointToRay(t,i.image,i.scene.camera);return e.intersectPlane(n,r.fromNormalAndCoplanarPoint(i.scene.camera.direction,h))}}return undefined}function _(t,i,s,n="millimeters",h="degrees"){const o=new b(n);const e=new y(h);const r=()=>e.convertFrom(i-s);const u=()=>o.convertRealValueToWorld(i-s);switch(t){case"x-translate":return a.makeTranslation(l.create(u(),0,0));case"y-translate":return a.makeTranslation(l.create(0,u(),0));case"z-translate":return a.makeTranslation(l.create(0,0,u()));case"x-rotate":return a.makeRotation(d.fromAxisAngle(l.left(),r()));case"y-rotate":return a.makeRotation(d.fromAxisAngle(l.down(),r()));case"z-rotate":return a.makeRotation(d.fromAxisAngle(l.forward(),r()))}return a.makeIdentity()}function H(t,i,s,n="millimeters",h="degrees"){const o=new b(n);const e=new y(h);const r=()=>a.makeRotation(d.fromMatrixRotation(i));const v=()=>a.multiply(i,a.invert(s));const c=()=>l.transformMatrix(l.fromMatrixPosition(v()),a.invert(r()));const f=()=>u.create(l.transformMatrix(u.fromRotationMatrix(a.invert(v())),a.invert(r())));switch(t){case"x-translate":return o.convertWorldValueToReal(c().x);case"y-translate":return o.convertWorldValueToReal(c().y);case"z-translate":return o.convertWorldValueToReal(c().z);case"x-rotate":return e.convertTo(f().x);case"y-rotate":return e.convertTo(f().y);case"z-rotate":return e.convertTo(f().z)}return 0}function M(t,i,s,n,h,o){const e=l.subtract(s,i);switch(o){case"x-translate":{return a.multiply(t,L(t,l.right(),e))}case"y-translate":return a.multiply(t,L(t,l.up(),e));case"z-translate":return a.multiply(t,L(t,l.back(),e));case"x-rotate":return a.multiply(V(t,a.makeRotation(d.fromAxisAngle(I(t,n,l.right()),h))),t);case"y-rotate":return a.multiply(V(t,a.makeRotation(d.fromAxisAngle(I(t,n,l.up()),h))),t);case"z-rotate":return a.multiply(V(t,a.makeRotation(d.fromAxisAngle(I(t,n,l.forward()),h))),t);default:return t}}function I(t,i,s){const n=a.makeRotation(d.fromMatrixRotation(t));const h=l.transformMatrix(s,n);const o=l.transformMatrix(l.negate(s),n);return l.dot(i,h)>l.dot(i,o)?h:o}function L(t,i,s){const n=a.makeRotation(d.fromMatrixRotation(t));const h=l.transformMatrix(i,n);const o=l.multiply(h,s);return a.makeTranslation(l.scale(o.x+o.y+o.z,i))}function V(t,i){return a.multiply(a.multiply(a.makeTranslation(l.fromMatrixPosition(t)),i),a.makeTranslation(l.negate(l.fromMatrixPosition(t))))}function X(t,i,s){const n=v.pad(i,5);const h=s.map((i=>t.transformNdcPointToViewport(i)));const l=v.topLeft(n);const e=o.add(l,o.create(n.width,0));const r=v.bottomRight(n);const a=o.subtract(r,o.create(n.width,0));const d=o.scale(h.reduce(((t,i)=>o.add(t,i)),o.create()),1/h.length,1/h.length);const u=[e,a,r].reduce(((t,i)=>o.distance(d,i)<o.distance(d,t)?i:t),l);switch(u){case l:return{point:u,placement:"top-left"};case e:return{point:u,placement:"top-right"};case a:return{point:u,placement:"bottom-left"};default:return{point:u,placement:"bottom-right"}}}const Y=({ref:i,bounds:s,viewport:n,point:h,placement:o,distance:l,angle:e,decimalPlaces:r,distanceUnit:a,angleUnit:d,onChange:u,onIncrement:v,onDecrement:f})=>{var w;const p=new y(d);const g=new b(a);const m=(w=l!==null&&l!==void 0?l:e)!==null&&w!==void 0?w:0;const x=`${parseFloat(m.toFixed(r))} ${l!=null?g.unit.abbreviatedName:p.unit.abbreviatedName}`;const z=k(n,s!==null&&s!==void 0?s:c.create(0,0),h,o);const C=t=>{if(t.target!=null){const i=parseFloat(t.target.value);if(!isNaN(i)){u===null||u===void 0?void 0:u(parseFloat(t.target.value))}}};const D=t=>{if(t.key==="ArrowUp"){v===null||v===void 0?void 0:v()}else if(t.key==="ArrowDown"){f===null||f===void 0?void 0:f()}};return t("div",{class:"widget-input wrapper",style:Object.assign({},z),onKeyDown:D},t("input",{ref:i,class:"widget-input",type:"text",value:x,onChange:C}))};function Z(t,i){return Math.min(t,Math.max(0,i))}function k(t,i,s,n,h=5){const{width:o,height:l}=t.dimensions;const e=i.width+h;const r=i.height+h;function a(t){return`${t}px`}switch(n){case"top-left":return{right:a(Z(o-e,o-s.x)),bottom:a(Z(l-r,l-s.y))};case"top-right":return{left:a(Z(o-e,s.x)),bottom:a(Z(l-r,l-s.y))};case"bottom-left":return{right:a(Z(o-e,o-s.x)),top:a(Z(l-r,s.y))};case"bottom-right":default:return{left:a(Z(o-e,s.x)),top:a(Z(l-r,s.y))}}}function q(t,i,s=3){return G(t,i,l.back(),l.up(),s)}function B(t,i,s=3){return G(t,i,l.right(),l.back(),s)}function K(t,i,s=3){return G(t,i,l.right(),l.up(),s)}function G(t,i,s,n,h){const o=l.transformMatrix(l.add(s,n),a.makeRotation(d.fromMatrixRotation(t)));const r=l.transformMatrix(s,a.makeRotation(d.fromMatrixRotation(t)));const u=l.transformMatrix(n,a.makeRotation(d.fromMatrixRotation(t)));const v=l.fromMatrixPosition(t);const c=l.add(v,l.scale(h*10,o));const w=e.create({origin:c,direction:r});const p=e.create({origin:c,direction:u});const g=l.cross(r,u);const m=l.rotateAboutAxis(f.toRadians(45),e.at(p,-h),g,c);const x=l.rotateAboutAxis(f.toRadians(45),e.at(w,h),g,c);const b=l.rotateAboutAxis(f.toRadians(45),e.at(p,h),g,c);const y=l.rotateAboutAxis(f.toRadians(45),e.at(w,-h),g,c);return new C(l.dot(r,i.direction)!==-1&&l.dot(u,i.direction)!==-1,m,y,x,b,l.transformMatrix(m,i.projectionViewMatrix),l.transformMatrix(y,i.projectionViewMatrix),l.transformMatrix(x,i.projectionViewMatrix),l.transformMatrix(b,i.projectionViewMatrix))}function Q(t,i,s,n){if(t instanceof D){return W(t,i,s,n)}return false}function W(t,i,s,n){return tt([t.points.worldLeft,t.points.worldRight,t.points.worldTip],i,s,n)||tt([t.points.worldLeft,t.points.worldRight,t.points.worldBase],i,s,n)}function tt(t,i,s,n){var h;if(t.length===3){const o=i.scene.camera.isOrthographic()?s.transformPointToOrthographicRay(n,i.image,i.scene.camera):s.transformPointToRay(n,i.image,i.scene.camera);const e=l.subtract(t[1],t[0]);const r=l.subtract(t[2],t[0]);const a=w.epsilon((h=w.fromVectors([o.direction,o.origin,e,r]))!==null&&h!==void 0?h:w.create(e,r));const d=l.cross(o.direction,r);const u=l.dot(e,d);if(!(Math.abs(u)>=a)){return false}const v=l.subtract(o.origin,t[0]);const c=l.dot(v,d)/u;if(c<0||c>1){return false}const f=l.cross(v,e);const p=l.dot(o.direction,f)/u;if(p<0||c+p>1){return false}const g=l.dot(r,f)/u;return!isNaN(g)&&(g>0||i.scene.camera.isOrthographic())}return false}class it extends R{constructor(t,i={},s={}){var n,h,o,l,e,r;super(t);this.disabledAxis={xTranslation:false,yTranslation:false,zTranslation:false,xRotation:false,yRotation:false,zRotation:false};this.axisLines=[];this.rotationLines=[];this.translationMeshes=[];this.rotationMeshes=[];this.hoveredChanged=new z;this.xArrowFillColor=i.xArrow;this.yArrowFillColor=i.yArrow;this.zArrowFillColor=i.zArrow;this.hoveredArrowFillColor=i.hovered;this.outlineColor=i.outline;this.disabledAxis.xTranslation=(n=s.xTranslation)!==null&&n!==void 0?n:false;this.disabledAxis.yTranslation=(h=s.yTranslation)!==null&&h!==void 0?h:false;this.disabledAxis.zTranslation=(o=s.zTranslation)!==null&&o!==void 0?o:false;this.disabledAxis.xRotation=(l=s.xRotation)!==null&&l!==void 0?l:false;this.disabledAxis.yRotation=(e=s.yRotation)!==null&&e!==void 0?e:false;this.disabledAxis.zRotation=(r=s.zRotation)!==null&&r!==void 0?r:false}dispose(){var t;(t=this.reglFrameDisposable)===null||t===void 0?void 0:t.cancel()}getDrawableElements(){return this.drawableElements}getFullBounds(){return this.fullBounds}boundsContainsPoint(t){return this.interactiveBounds!=null&&this.frame!=null&&v.containsPoints(this.interactiveBounds,t)}updateDisabledAxis(t){this.disabledAxis=Object.assign(Object.assign({},this.disabledAxis),t);this.updateDisabledOnDrawables()}updateCursor(t){this.cursor=t;if(t!=null&&this.frame!=null){this.updateHovered()}else{this.clearHovered()}}updateTransform(t){var i;this.transform=t;if(t!=null&&this.frame!=null){this.updateAndDraw()}else{this.clear();(i=this.reglFrameDisposable)===null||i===void 0?void 0:i.cancel();this.reglFrameDisposable=undefined}}updateColors(t={}){var i,s,n,h,o,l,e,r,a,d,u,v;this.xArrowFillColor=(i=t.xArrow)!==null&&i!==void 0?i:this.xArrowFillColor;this.yArrowFillColor=(s=t.yArrow)!==null&&s!==void 0?s:this.yArrowFillColor;this.zArrowFillColor=(n=t.zArrow)!==null&&n!==void 0?n:this.zArrowFillColor;this.hoveredArrowFillColor=(h=t.hovered)!==null&&h!==void 0?h:this.hoveredArrowFillColor;this.outlineColor=(o=t.outline)!==null&&o!==void 0?o:this.outlineColor;(l=this.xArrow)===null||l===void 0?void 0:l.updateFillColor(this.getXTranslationColor(),true);(e=this.yArrow)===null||e===void 0?void 0:e.updateFillColor(this.getYTranslationColor(),true);(r=this.zArrow)===null||r===void 0?void 0:r.updateFillColor(this.getZTranslationColor(),true);(a=this.xRotation)===null||a===void 0?void 0:a.updateFillColor(this.getXRotationColor(),true);(d=this.yRotation)===null||d===void 0?void 0:d.updateFillColor(this.getYRotationColor(),true);(u=this.zRotation)===null||u===void 0?void 0:u.updateFillColor(this.getZRotationColor(),true);(v=this.hoveredElement)===null||v===void 0?void 0:v.updateFillColor(this.hoveredArrowFillColor)}onHoveredChanged(t){return this.hoveredChanged.on(t)}updateDisabledOnDrawables(){var t,i,s,n,h,o,l,e,r,a,d,u;(t=this.xRotation)===null||t===void 0?void 0:t.setDisabled(this.disabledAxis.xRotation);(i=this.xyRotationLine)===null||i===void 0?void 0:i.setDisabled(this.disabledAxis.xRotation);(s=this.xzRotationLine)===null||s===void 0?void 0:s.setDisabled(this.disabledAxis.xRotation);(n=this.yRotation)===null||n===void 0?void 0:n.setDisabled(this.disabledAxis.yRotation);(h=this.yzRotationLine)===null||h===void 0?void 0:h.setDisabled(this.disabledAxis.yRotation);(o=this.yxRotationLine)===null||o===void 0?void 0:o.setDisabled(this.disabledAxis.yRotation);(l=this.zRotation)===null||l===void 0?void 0:l.setDisabled(this.disabledAxis.zRotation);(e=this.zxRotationLine)===null||e===void 0?void 0:e.setDisabled(this.disabledAxis.zRotation);(r=this.zyRotationLine)===null||r===void 0?void 0:r.setDisabled(this.disabledAxis.zRotation);(a=this.xArrow)===null||a===void 0?void 0:a.setDisabled(this.disabledAxis.xTranslation);(d=this.yArrow)===null||d===void 0?void 0:d.setDisabled(this.disabledAxis.yTranslation);(u=this.zArrow)===null||u===void 0?void 0:u.setDisabled(this.disabledAxis.zTranslation);this.updateColors()}updateHovered(){var t;const i=this.hoveredElement;const s=this.frame;if(s!=null){this.hoveredElement=[...this.translationMeshes,...this.rotationMeshes].filter((t=>t.points.valid&&!t.isDisabled())).find((t=>this.cursor!=null?Q(t,s,this.viewport,this.cursor):false));if(this.hoveredElement!==i){this.hoveredChanged.emit(this.hoveredElement);(t=this.hoveredElement)===null||t===void 0?void 0:t.updateFillColor(this.hoveredArrowFillColor);i===null||i===void 0?void 0:i.updateFillColor(i===null||i===void 0?void 0:i.initialFillColor)}}}clearHovered(){const t=this.hoveredElement;this.hoveredElement=undefined;if(this.hoveredElement!==t){this.hoveredChanged.emit(this.hoveredElement);t.updateFillColor(t.initialFillColor)}}hasData(){return this.transform!=null}createOrUpdateElements(){if(this.transform!=null&&this.frame!=null){if(this.xArrow==null||this.yArrow==null||this.zArrow==null){this.createElements(this.transform,this.frame)}else{this.updateElements(this.transform,this.frame)}this.interactiveBounds=T(this.viewport,...this.rotationMeshes,...this.translationMeshes);this.fullBounds=T(this.viewport,...this.rotationMeshes,...this.translationMeshes,...this.axisLines)}}createElements(t,i){this.reglCommand=j({canvas:this.canvasElement,extensions:"angle_instanced_arrays"});const{createShape:s}=O(this.reglCommand);const n=this.computeTriangleSize(l.fromMatrixPosition(t),i);this.xArrow=new D(s,"x-translate",P(t,i.scene.camera,n),this.outlineColor,this.getXTranslationColor());this.xRotation=new D(s,"x-rotate",q(t,i.scene.camera,n),this.outlineColor,this.getXRotationColor());this.xAxis=new A(s,"x-axis",N(t,i.scene.camera,this.xArrow),this.outlineColor,this.getXTranslationColor());this.yArrow=new D(s,"y-translate",$(t,i.scene.camera,n),this.outlineColor,this.getYTranslationColor());this.yRotation=new D(s,"y-rotate",B(t,i.scene.camera,n),this.outlineColor,this.getYRotationColor());this.yAxis=new A(s,"y-axis",N(t,i.scene.camera,this.yArrow),this.outlineColor,this.getYTranslationColor());this.zArrow=new D(s,"z-translate",E(t,i.scene.camera,n),this.outlineColor,this.getZTranslationColor());this.zAxis=new A(s,"z-axis",N(t,i.scene.camera,this.zArrow),this.outlineColor,this.getZTranslationColor());this.zRotation=new D(s,"z-rotate",K(t,i.scene.camera,n),this.outlineColor,this.getZRotationColor());this.createRotationLines(s,t,i);this.axisLines=[this.xAxis,this.yAxis,this.zAxis];this.translationMeshes=[this.xArrow,this.yArrow,this.zArrow];this.rotationMeshes=[this.xRotation,this.yRotation,this.zRotation];this.updateDisabledOnDrawables();this.availableElements=[...this.axisLines,...this.rotationLines,...this.translationMeshes,...this.rotationMeshes]}getXRotationColor(){return this.xArrowFillColor}getYRotationColor(){return this.yArrowFillColor}getZRotationColor(){return this.zArrowFillColor}getXTranslationColor(){return this.xArrowFillColor}getYTranslationColor(){return this.yArrowFillColor}getZTranslationColor(){return this.zArrowFillColor}createRotationLines(t,i,s){var n,h,o,e,r,a;const d=this.computeTriangleSize(l.fromMatrixPosition(i),s);const u=S(s.scene.camera,this.xRotation,(n=this.yArrow)===null||n===void 0?void 0:n.points.worldTip,d);const v=S(s.scene.camera,this.xRotation,(h=this.zArrow)===null||h===void 0?void 0:h.points.worldTip,d);const c=S(s.scene.camera,this.yRotation,(o=this.xArrow)===null||o===void 0?void 0:o.points.worldTip,d);const f=S(s.scene.camera,this.yRotation,(e=this.zArrow)===null||e===void 0?void 0:e.points.worldTip,d);const w=S(s.scene.camera,this.zRotation,(r=this.xArrow)===null||r===void 0?void 0:r.points.worldTip,d);const p=S(s.scene.camera,this.zRotation,(a=this.yArrow)===null||a===void 0?void 0:a.points.worldTip,d);if(u!=null){this.xyRotationLine=new U(t,"xy-rotation-line",u,this.outlineColor)}if(v!=null){this.xzRotationLine=new U(t,"xz-rotation-line",v,this.outlineColor)}if(c!=null){this.yxRotationLine=new U(t,"yx-rotation-line",c,this.outlineColor)}if(f!=null){this.yzRotationLine=new U(t,"yz-rotation-line",f,this.outlineColor)}if(w!=null){this.zxRotationLine=new U(t,"zx-rotation-line",w,this.outlineColor)}if(p!=null){this.zyRotationLine=new U(t,"zy-rotation-line",p,this.outlineColor)}this.rotationLines=[this.xyRotationLine,this.xzRotationLine,this.yxRotationLine,this.yzRotationLine,this.zxRotationLine,this.zyRotationLine].filter((t=>t!=null))}updateElements(t,i){var s,n,h,o,e,r,a,d,u,v,c,f,w,p,g,m,x,b;const y=this.computeTriangleSize(l.fromMatrixPosition(t),i);if(this.xArrow!=null){this.xArrow.updatePoints(P(t,i.scene.camera,y));(s=this.xAxis)===null||s===void 0?void 0:s.updatePoints(N(t,i.scene.camera,this.xArrow))}(n=this.xRotation)===null||n===void 0?void 0:n.updatePoints(q(t,i.scene.camera,y));if(this.yArrow!=null){this.yArrow.updatePoints($(t,i.scene.camera,y));(h=this.yAxis)===null||h===void 0?void 0:h.updatePoints(N(t,i.scene.camera,this.yArrow))}(o=this.yRotation)===null||o===void 0?void 0:o.updatePoints(B(t,i.scene.camera,y));if(this.zArrow!=null){this.zArrow.updatePoints(E(t,i.scene.camera,y));(e=this.zAxis)===null||e===void 0?void 0:e.updatePoints(N(t,i.scene.camera,this.zArrow))}(r=this.zRotation)===null||r===void 0?void 0:r.updatePoints(K(t,i.scene.camera,y));(a=this.xyRotationLine)===null||a===void 0?void 0:a.updatePoints(S(i.scene.camera,this.xRotation,(d=this.yArrow)===null||d===void 0?void 0:d.points.worldTip,y));(u=this.xzRotationLine)===null||u===void 0?void 0:u.updatePoints(S(i.scene.camera,this.xRotation,(v=this.zArrow)===null||v===void 0?void 0:v.points.worldTip,y));(c=this.yxRotationLine)===null||c===void 0?void 0:c.updatePoints(S(i.scene.camera,this.yRotation,(f=this.xArrow)===null||f===void 0?void 0:f.points.worldTip,y));(w=this.yzRotationLine)===null||w===void 0?void 0:w.updatePoints(S(i.scene.camera,this.yRotation,(p=this.zArrow)===null||p===void 0?void 0:p.points.worldTip,y));(g=this.zxRotationLine)===null||g===void 0?void 0:g.updatePoints(S(i.scene.camera,this.zRotation,(m=this.xArrow)===null||m===void 0?void 0:m.points.worldTip,y));(x=this.zyRotationLine)===null||x===void 0?void 0:x.updatePoints(S(i.scene.camera,this.zRotation,(b=this.yArrow)===null||b===void 0?void 0:b.points.worldTip,y))}}const st=":host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;--viewer-transform-widget-x-axis-arrow-color:var(--x-axis-color);--viewer-transform-widget-y-axis-arrow-color:var(--y-axis-color);--viewer-transform-widget-z-axis-arrow-color:var(--z-axis-color);--viewer-transform-widget-hovered-arrow-color:#ffff00;--viewer-transform-widget-input-width:7em}.widget{position:absolute;top:0;left:0}.widget.hovered{pointer-events:auto}.widget-input.wrapper{position:absolute;pointer-events:auto;display:flex;border:1px solid #cccccc;width:var(--viewer-transform-widget-input-width)}input.widget-input{box-sizing:border-box;text-align:center;border:none;width:100%;outline:none}input.widget-input:focus{outline:none}";const nt=class{constructor(t){i(this,t);this.positionChanged=s(this,"positionChanged",7);this.rotationChanged=s(this,"rotationChanged",7);this.interactionEnded=s(this,"interactionEnded",7);this.interactionStarted=s(this,"interactionStarted",7);this.xRotationDisabled=false;this.yRotationDisabled=false;this.zRotationDisabled=false;this.xTranslationDisabled=false;this.yTranslationDisabled=false;this.zTranslationDisabled=false;this.showInputs=true;this.distanceUnit="millimeters";this.angleUnit="degrees";this.decimalPlaces=1;this.xArrowColor="#ea3324";this.yArrowColor="#4faf32";this.zArrowColor="#0000ff";this.hoveredColor="#ffff00";this.lastAngle=0;this.handleHoveredDrawableChanged=t=>{this.hovered=t};this.handleViewerFrameDrawn=()=>{this.updatePropsFromViewer()};this.handleViewerDimensionsChange=()=>{g((()=>{if(this.viewer!=null&&this.canvasRef!=null){this.canvasRef.width=this.viewer.viewport.width;this.canvasRef.height=this.viewer.viewport.height;this.updateCanvasBounds(this.canvasRef)}}))};this.handleResize=()=>{if(this.canvasRef!=null){this.updateCanvasBounds(this.canvasRef)}};this.handleInputResize=()=>{if(this.inputRef!=null){const t=this.inputRef;m((()=>{this.inputBounds=t.getBoundingClientRect()}))}};this.handleStyleChange=()=>{m((()=>{const t=window.getComputedStyle(this.hostEl);this.xArrowColor=t.getPropertyValue("--viewer-transform-widget-x-axis-arrow-color").trim();this.yArrowColor=t.getPropertyValue("--viewer-transform-widget-y-axis-arrow-color").trim();this.zArrowColor=t.getPropertyValue("--viewer-transform-widget-z-axis-arrow-color").trim();this.hoveredColor=t.getPropertyValue("--viewer-transform-widget-hovered-arrow-color").trim();this.getTransformWidget().updateColors({xArrow:this.xArrowColor,yArrow:this.yArrowColor,zArrow:this.zArrowColor,hovered:this.hoveredColor})}))};this.handlePointerMove=t=>{if(this.dragging==null){const i=F(o.create(t.clientX,t.clientY),this.getCanvasBounds());const s=this.getTransformWidget();if(i!=null&&s.boundsContainsPoint(i)){s.updateCursor(i)}else{s.updateCursor(undefined);this.hovered=undefined}}};this.handleBeginDrag=async t=>{var i,s,n;const h=this.getCanvasBounds();if(this.hovered!=null&&h!=null&&this.viewer!=null&&this.position!=null&&this.viewer.frame!=null){this.dragging=this.hovered;if(this.dragging.identifier!==((i=this.lastDragged)===null||i===void 0?void 0:i.identifier)){this.dragStartTransform=this.currentTransform}this.lastDragged=undefined;const l=F(o.create(t.clientX,t.clientY),h);const e=this.viewer.viewport.transformWorldToViewport(this.position,this.viewer.frame.scene.camera.projectionViewMatrix);this.lastAngle=l!=null?f.fromPoints(e,l):0;this.lastWorldPosition=J(l,(s=this.viewer)===null||s===void 0?void 0:s.frame,(n=this.viewer)===null||n===void 0?void 0:n.viewport,this.currentTransform);this.interactionStarted.emit();window.removeEventListener("pointermove",this.handlePointerMove);window.addEventListener("pointermove",this.handleDrag);window.addEventListener("pointerup",this.handleEndTransform)}};this.handleDrag=async t=>{var i,s,n;t.preventDefault();const h=this.getCanvasBounds();if(this.dragging!=null&&this.lastWorldPosition!=null&&h!=null&&this.viewer!=null&&this.viewer.frame!=null&&this.position!=null){await((i=this.controller)===null||i===void 0?void 0:i.beginTransform());const l=F(o.create(t.clientX,t.clientY),h);const e=this.viewer.viewport.transformWorldToViewport(this.position,this.viewer.frame.scene.camera.projectionViewMatrix);const r=J(l,(s=this.viewer)===null||s===void 0?void 0:s.frame,(n=this.viewer)===null||n===void 0?void 0:n.viewport,this.currentTransform);if(r!=null&&l!=null&&e!=null){const t=f.fromPoints(e,l);this.transform(this.lastWorldPosition,r,t-this.lastAngle);this.updateInputPosition();this.updateInputValue();this.lastWorldPosition=r;this.lastAngle=t}}};this.handleEndTransform=async t=>{var i,s;const n=F(o.create(t.clientX,t.clientY),this.getCanvasBounds());const h=this.getTransformWidget();this.lastDragged=this.dragging;this.dragging=undefined;this.lastWorldPosition=undefined;this.position=this.currentTransform!=null?l.fromMatrixPosition(this.currentTransform):this.position;this.lastAngle=0;this.updateInputPosition();this.updateInputValue();h.updateCursor(n);h.updateTransform(this.currentTransform);h.updateDisabledAxis({xRotation:true,yRotation:true,zRotation:true,xTranslation:true,yTranslation:true,zTranslation:true});window.removeEventListener("pointermove",this.handleDrag);window.removeEventListener("pointerup",this.handleEndTransform);try{const t=(i=this.controller)===null||i===void 0?void 0:i.getCurrentDelta();await((s=this.controller)===null||s===void 0?void 0:s.endTransform());this.interactionEnded.emit(t)}catch(t){console.error("Failed to end transform interaction",t)}window.addEventListener("pointermove",this.handlePointerMove);this.getTransformWidget().updateDisabledAxis({xRotation:this.xRotationDisabled,yRotation:this.yRotationDisabled,zRotation:this.zRotationDisabled,xTranslation:this.xTranslationDisabled,yTranslation:this.yTranslationDisabled,zTranslation:this.zTranslationDisabled})};this.handleInputIncrement=()=>{if(this.inputValue!=null&&this.lastInputValue!=null){this.inputValue=this.lastInputValue+1;this.handleInputChange(this.inputValue)}};this.handleInputDecrement=()=>{if(this.inputValue!=null&&this.lastInputValue!=null){this.inputValue=this.lastInputValue-1;this.handleInputChange(this.inputValue)}};this.handleInputChange=async t=>{var i,s,n;if(this.lastDragged!=null&&this.currentTransform!=null&&this.startingTransform!=null&&this.lastInputValue!=null){this.transformCurrent(_(this.lastDragged.identifier,t,this.lastInputValue,this.distanceUnit,this.angleUnit));this.lastInputValue=t;await((i=this.controller)===null||i===void 0?void 0:i.beginTransform());this.getTransformWidget().updateTransform(this.currentTransform);await((s=this.controller)===null||s===void 0?void 0:s.updateTransform(a.multiply(this.currentTransform,a.invert(this.startingTransform))));this.updateInputPosition();await((n=this.controller)===null||n===void 0?void 0:n.endTransformDebounced((()=>{this.position=this.currentTransform!=null?l.fromMatrixPosition(this.currentTransform):this.position})))}};this.updatePropsFromViewer=()=>{const{frame:t}=this.viewer||{};if(t!=null){const i=this.getTransformWidget();i.updateFrame(t,this.dragging==null);this.updateInputPosition()}};this.setupTransformWidget=t=>{var i,s;console.debug(`Initializing transform widget. [initial-position=${JSON.stringify(this.position)}, has-initial-frame=${((i=this.viewer)===null||i===void 0?void 0:i.frame)!=null}]`);this.widget=new it(t,{xArrow:this.xArrowColor,yArrow:this.yArrowColor,zArrow:this.zArrowColor,hovered:this.hoveredColor});if(this.rotation!=null){this.currentTransform=this.getTransformForNewRotation(this.rotation);this.startingTransform=this.currentTransform;this.widget.updateTransform(this.currentTransform)}if(this.position!=null){this.currentTransform=this.getTransformForNewPosition(this.position);this.startingTransform=this.currentTransform;this.widget.updateTransform(this.currentTransform)}if(((s=this.viewer)===null||s===void 0?void 0:s.frame)!=null){this.widget.updateFrame(this.viewer.frame,true)}this.handleSettingDisabledAxis();this.hoveredChangeDisposable=this.widget.onHoveredChanged(this.handleHoveredDrawableChanged);return this.widget};this.updateCanvasBounds=t=>{m((()=>{this.canvasBounds=t.getBoundingClientRect();this.getTransformWidget().updateDimensions(t)}))};this.updateInputValue=()=>{var t;const i=(t=this.dragging)!==null&&t!==void 0?t:this.lastDragged;if(i!=null&&this.currentTransform!=null&&this.dragStartTransform!=null){this.lastInputValue=this.inputValue;this.inputValue=H(i.identifier,this.currentTransform,this.dragStartTransform,this.distanceUnit,this.angleUnit)}};this.transformCurrent=t=>{this.currentTransform=this.currentTransform!=null?a.multiply(this.currentTransform,t):t};this.updateInputPosition=()=>{var t,i;const s=(t=this.dragging)!==null&&t!==void 0?t:this.lastDragged;if(this.showInputs&&((i=this.viewer)===null||i===void 0?void 0:i.frame)!=null&&this.position!=null&&s!=null){const t=this.getTransformWidget();const i=t.getFullBounds();this.inputPosition=i!=null?X(this.viewer.viewport,i,s.points.toArray()):undefined}};this.getDisplayedAngle=()=>{var t,i,s;const n=(i=(t=this.dragging)===null||t===void 0?void 0:t.identifier)!==null&&i!==void 0?i:(s=this.lastDragged)===null||s===void 0?void 0:s.identifier;if(n===null||n===void 0?void 0:n.includes("rotate")){return this.inputValue}};this.getDisplayedDistance=()=>{var t,i,s;const n=(i=(t=this.dragging)===null||t===void 0?void 0:t.identifier)!==null&&i!==void 0?i:(s=this.lastDragged)===null||s===void 0?void 0:s.identifier;if(n===null||n===void 0?void 0:n.includes("translate")){return this.inputValue}};this.getTransformForNewPosition=t=>{if(t!=null){const i=this.currentTransform!=null?this.currentTransform:a.makeIdentity();const s=a.makeRotation(d.fromMatrixRotation(i));const n=a.makeTranslation(t);return a.multiply(n,s)}};this.getTransformForNewRotation=t=>{const i=this.currentTransform!=null?this.currentTransform:a.makeIdentity();const s=a.invert(a.makeRotation(d.fromMatrixRotation(i)));const n=a.makeRotation(d.fromEuler(t));const h=a.multiply(i,s);return a.multiply(h,n)};this.getCanvasBounds=()=>{if(this.canvasBounds!=null){return this.canvasBounds}else if(this.canvasRef!=null){this.updateCanvasBounds(this.canvasRef);return this.canvasBounds}};this.getTransformWidget=()=>{if(this.widget==null&&this.canvasRef!=null){return this.setupTransformWidget(this.canvasRef)}else if(this.widget!=null){return this.widget}else{throw new Error("Transform widget was not initialized. The canvas element may not have been initialized.")}}}componentDidLoad(){window.addEventListener("pointermove",this.handlePointerMove);this.canvasResizeObserver=new ResizeObserver(this.handleResize);this.inputResizeObserver=new ResizeObserver(this.handleInputResize);this.hostStyleObserver=new MutationObserver(this.handleStyleChange);if(this.canvasRef!=null){this.canvasResizeObserver.observe(this.canvasRef);this.setupTransformWidget(this.canvasRef)}this.hostStyleObserver.observe(this.hostEl,{attributes:true,attributeFilter:["style"]});this.handleViewerChanged(this.viewer,undefined);this.handleStyleChange()}disconnectedCallback(){var t,i,s,n,h;window.removeEventListener("pointermove",this.handlePointerMove);(t=this.canvasResizeObserver)===null||t===void 0?void 0:t.disconnect();(i=this.inputResizeObserver)===null||i===void 0?void 0:i.disconnect();(s=this.hostStyleObserver)===null||s===void 0?void 0:s.disconnect();(n=this.hoveredChangeDisposable)===null||n===void 0?void 0:n.dispose();(h=this.widget)===null||h===void 0?void 0:h.dispose()}handleViewerChanged(t,i){var s;i===null||i===void 0?void 0:i.removeEventListener("frameDrawn",this.handleViewerFrameDrawn);i===null||i===void 0?void 0:i.removeEventListener("dimensionschange",this.handleViewerDimensionsChange);t===null||t===void 0?void 0:t.addEventListener("frameDrawn",this.handleViewerFrameDrawn);t===null||t===void 0?void 0:t.addEventListener("dimensionschange",this.handleViewerDimensionsChange);if((t===null||t===void 0?void 0:t.stream)!=null){(s=this.controller)===null||s===void 0?void 0:s.dispose();this.controller=new x(t.stream)}}handleDisabledPropertyChanged(){var t;(t=this.widget)===null||t===void 0?void 0:t.updateDisabledAxis({xRotation:this.xRotationDisabled,yRotation:this.yRotationDisabled,zRotation:this.zRotationDisabled,xTranslation:this.xTranslationDisabled,yTranslation:this.yTranslationDisabled,zTranslation:this.zTranslationDisabled})}handleRotationChanged(t,i){var s;const n=t!==null&&t!==void 0?t:u.create();this.currentTransform=this.getTransformForNewRotation(n);this.startingTransform=this.currentTransform;if(t==null&&this.currentTransform!=null&&a.isIdentity(this.currentTransform)){this.currentTransform=undefined;this.startingTransform=this.currentTransform}(s=this.widget)===null||s===void 0?void 0:s.updateTransform(this.currentTransform);console.debug(`Updating widget rotation [previous=${JSON.stringify(i)}, current=${JSON.stringify(t)}]`);this.rotationChanged.emit(t)}handlePositionChanged(t,i){var s,n;this.currentTransform=this.getTransformForNewPosition(t);this.startingTransform=this.currentTransform;console.debug(`Updating widget position [previous=${JSON.stringify(i)}, current=${JSON.stringify(t)}]`);(s=this.widget)===null||s===void 0?void 0:s.updateTransform(this.currentTransform);if(t==null){this.lastDragged=undefined;this.inputPosition=undefined;(n=this.controller)===null||n===void 0?void 0:n.clearTransform()}this.positionChanged.emit(t)}render(){var i,s,h;return t(n,null,t("canvas",{ref:t=>{this.canvasRef=t},class:p("widget",{hovered:this.hovered!=null}),width:(i=this.viewer)===null||i===void 0?void 0:i.viewport.width,height:(s=this.viewer)===null||s===void 0?void 0:s.viewport.height,onPointerDown:this.handleBeginDrag}),this.showInputs&&this.inputPosition&&((h=this.viewer)===null||h===void 0?void 0:h.viewport)&&t(Y,{ref:t=>{var i,s;if(t!=null){(i=this.inputResizeObserver)===null||i===void 0?void 0:i.observe(t)}else if(this.inputRef!=null){(s=this.inputResizeObserver)===null||s===void 0?void 0:s.unobserve(this.inputRef)}this.inputRef=t},bounds:this.inputBounds,viewport:this.viewer.viewport,point:this.inputPosition.point,placement:this.inputPosition.placement,angle:this.getDisplayedAngle(),distance:this.getDisplayedDistance(),decimalPlaces:this.decimalPlaces,distanceUnit:this.distanceUnit,angleUnit:this.angleUnit,onChange:this.handleInputChange,onIncrement:this.handleInputIncrement,onDecrement:this.handleInputDecrement}))}transform(t,i,s){var n,h;if(this.position!=null&&this.startingTransform!=null&&this.currentTransform!=null&&this.dragging!=null&&this.viewer!=null&&this.viewer.frame!=null){this.currentTransform=M(this.currentTransform,t,i,(n=this.viewer)===null||n===void 0?void 0:n.frame.scene.camera.viewVector,s,this.dragging.identifier);this.getTransformWidget().updateTransform(this.currentTransform);(h=this.controller)===null||h===void 0?void 0:h.updateTransform(a.multiply(this.currentTransform,a.invert(this.startingTransform)))}}handleSettingDisabledAxis(){if(this.widget){this.widget.updateDisabledAxis({xRotation:this.xRotationDisabled,yRotation:this.yRotationDisabled,zRotation:this.zRotationDisabled,xTranslation:this.xTranslationDisabled,yTranslation:this.yTranslationDisabled,zTranslation:this.zTranslationDisabled})}else{console.warn("Cannot set disabled values - no widget defined")}}get hostEl(){return h(this)}static get watchers(){return{viewer:["handleViewerChanged"],xTranslationDisabled:["handleDisabledPropertyChanged"],yTranslationDisabled:["handleDisabledPropertyChanged"],zTranslationDisabled:["handleDisabledPropertyChanged"],xRotationDisabled:["handleDisabledPropertyChanged"],yRotationDisabled:["handleDisabledPropertyChanged"],zRotationDisabled:["handleDisabledPropertyChanged"],rotation:["handleRotationChanged"],position:["handlePositionChanged"]}}};nt.style=st;export{nt as vertex_viewer_transform_widget};
5
+ //# sourceMappingURL=p-24b66b64.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["src/components/viewer-transform-widget/util.ts","src/components/viewer-transform-widget/viewer-transform-widget-components.tsx","src/lib/transforms/axis-rotation.ts","src/lib/transforms/hits.ts","src/components/viewer-transform-widget/widget.ts","src/components/viewer-transform-widget/viewer-transform-widget.css?tag=vertex-viewer-transform-widget&encapsulation=shadow","src/components/viewer-transform-widget/viewer-transform-widget.tsx"],"names":["convertPointToCanvas","point","bounds","Point","create","x","left","y","top","undefined","convertCanvasPointToWorld","frame","viewport","transform","position","Vector3","fromMatrixPosition","scene","camera","isOrthographic","ray","transformPointToOrthographicRay","image","offsetPoint","Ray","at","origin","direction","magnitude","viewVector","intersectPlane","Plane","fromNormalAndCoplanarPoint","transformPointToRay","computeInputTransform","identifier","value","lastValue","distanceUnit","angleUnit","units","DistanceUnits","angles","AngleUnits","rotation","convertFrom","convertRealValueToWorld","Matrix4","makeTranslation","makeRotation","Quaternion","fromAxisAngle","down","forward","makeIdentity","computeInputDisplayValue","current","start","fromMatrixRotation","transformDiff","multiply","invert","relativeTranslationDiff","transformMatrix","relativeRotationDiff","Euler","fromRotationMatrix","convertWorldValueToReal","z","convertTo","computeUpdatedTransform","previous","next","angle","delta","subtract","computeTranslation","right","up","back","computeRotation","computeRotationAxis","axis","rotatedAxis","rotatedNegatedAxis","negate","dot","rotatedDelta","scale","computeInputPosition","shapePoints","paddedBounds","Rectangle","pad","canvasPoints","map","sp","transformNdcPointToViewport","topLeft","topRight","add","width","bottomRight","bottomLeft","center","reduce","sum","pt","length","closestPoint","closest","distance","placement","TransformWidgetInput","ref","decimalPlaces","onChange","onIncrement","onDecrement","definedValue","_a","displayValue","parseFloat","toFixed","unit","abbreviatedName","inputPlacement","constrainInputToViewport","Dimensions","handleChange","event","target","parsed","isNaN","handleKeyDown","key","h","class","style","Object","assign","onKeyDown","type","constrainTo","dimension","Math","min","max","inputDimensions","padding","height","dimensions","paddedWidth","paddedHeight","toCssLength","bottom","xAxisRotationPositions","widgetTransform","triangleSize","computeRotationNdcValues","yAxisRotationPositions","zAxisRotationPositions","xDirection","yDirection","transformedDirection","transformedX","transformedY","basePosition","xRay","yRay","rotationAxis","cross","base","rotateAboutAxis","Angle","toRadians","TriangleMeshPoints","projectionViewMatrix","testDrawable","drawable","TriangleMesh","testTriangleMesh","mesh","testTriangle","points","worldLeft","worldRight","worldTip","worldBase","edge1","edge2","epsilon","BoundingBox","fromVectors","p","det","abs","t","u","q","v","r","TransformWidget","ReglComponent","[object Object]","canvasElement","colors","initialDisabledAxes","super","this","disabledAxis","xTranslation","yTranslation","zTranslation","xRotation","yRotation","zRotation","axisLines","rotationLines","translationMeshes","rotationMeshes","hoveredChanged","EventDispatcher","xArrowFillColor","xArrow","yArrowFillColor","yArrow","zArrowFillColor","zArrow","hoveredArrowFillColor","hovered","outlineColor","outline","_b","_c","_d","_e","_f","reglFrameDisposable","cancel","drawableElements","fullBounds","interactiveBounds","containsPoints","updateDisabledOnDrawables","cursor","updateHovered","clearHovered","updateAndDraw","clear","updateFillColor","getXTranslationColor","_g","getYTranslationColor","_h","getZTranslationColor","_j","getXRotationColor","_k","getYRotationColor","_l","getZRotationColor","_m","hoveredElement","listener","on","setDisabled","xyRotationLine","xzRotationLine","yzRotationLine","yxRotationLine","zxRotationLine","zyRotationLine","updateColors","previousHovered","currentFrame","filter","el","valid","isDisabled","find","m","emit","initialFillColor","createElements","updateElements","computeDrawable2dBounds","reglCommand","regl","canvas","extensions","createShape","shapeBuilder","computeTriangleSize","xAxisArrowPositions","xAxis","AxisLine","axisPositions","yAxisArrowPositions","yAxis","zAxisArrowPositions","zAxis","createRotationLines","availableElements","xyRotationLinePoints","rotationAxisPositions","xzRotationLinePoints","yxRotationLinePoints","yzRotationLinePoints","zxRotationLinePoints","zyRotationLinePoints","RotationLine","l","updatePoints","_o","_p","_q","_r","_s","_t","viewerTransformWidgetCss","ViewerTransformWidget","hostRef","xRotationDisabled","yRotationDisabled","zRotationDisabled","xTranslationDisabled","yTranslationDisabled","zTranslationDisabled","showInputs","xArrowColor","yArrowColor","zArrowColor","hoveredColor","lastAngle","handleHoveredDrawableChanged","handleViewerFrameDrawn","updatePropsFromViewer","handleViewerDimensionsChange","writeDOM","viewer","canvasRef","updateCanvasBounds","handleResize","handleInputResize","inputRef","inputElement","readDOM","inputBounds","getBoundingClientRect","handleStyleChange","hostStyles","window","getComputedStyle","hostEl","getPropertyValue","trim","getTransformWidget","handlePointerMove","dragging","canvasPoint","clientX","clientY","getCanvasBounds","widget","boundsContainsPoint","updateCursor","handleBeginDrag","async","canvasBounds","lastDragged","dragStartTransform","currentTransform","currentCanvas","widgetCenter","transformWorldToViewport","fromPoints","lastWorldPosition","interactionStarted","removeEventListener","addEventListener","handleDrag","handleEndTransform","preventDefault","controller","beginTransform","currentWorld","updateInputPosition","updateInputValue","updateTransform","updateDisabledAxis","getCurrentDelta","endTransform","interactionEnded","e","console","error","handleInputIncrement","inputValue","lastInputValue","handleInputChange","handleInputDecrement","startingTransform","transformCurrent","endTransformDebounced","updateFrame","setupTransformWidget","debug","JSON","stringify","getTransformForNewRotation","getTransformForNewPosition","handleSettingDisabledAxis","hoveredChangeDisposable","onHoveredChanged","updateDimensions","widgetBounds","getFullBounds","inputPosition","toArray","getDisplayedAngle","draggingIdentifier","includes","getDisplayedDistance","newPosition","c","currentRotation","newRotationEuler","oldRotation","newRotation","fromEuler","oldTranslation","Error","canvasResizeObserver","ResizeObserver","inputResizeObserver","hostStyleObserver","MutationObserver","observe","attributes","attributeFilter","handleViewerChanged","disconnect","dispose","newViewer","oldViewer","stream","TransformController","rotationToApply","isIdentity","rotationChanged","oldPosition","clearTransform","positionChanged","Host","classNames","onPointerDown","unobserve","warn"],"mappings":"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","sourcesContent":["import {\n Euler,\n Matrix4,\n Plane,\n Point,\n Quaternion,\n Ray,\n Rectangle,\n Vector3,\n} from '@vertexvis/geometry';\n\nimport {\n AngleUnits,\n AngleUnitType,\n DistanceUnits,\n DistanceUnitType,\n Frame,\n Viewport,\n} from '../../lib/types';\nimport { TransformWidgetInputPlacement } from './viewer-transform-widget-components';\n\nexport interface PointAndPlacement {\n point: Point.Point;\n placement: TransformWidgetInputPlacement;\n}\n\nexport function convertPointToCanvas(\n point: Point.Point,\n bounds?: DOMRect\n): Point.Point | undefined {\n return bounds != null\n ? Point.create(point.x - bounds.left, point.y - bounds.top)\n : undefined;\n}\n\nexport function convertCanvasPointToWorld(\n point?: Point.Point,\n frame?: Frame,\n viewport?: Viewport,\n transform?: Matrix4.Matrix4\n): Vector3.Vector3 | undefined {\n const position =\n transform != null ? Vector3.fromMatrixPosition(transform) : undefined;\n\n if (point != null && frame != null && viewport != null && position != null) {\n if (frame.scene.camera.isOrthographic()) {\n const ray = viewport.transformPointToOrthographicRay(\n point,\n frame.image,\n frame.scene.camera\n );\n // Offset the point to past the bounding sphere of the model to\n // adjust the position plane location.\n const offsetPoint = Ray.at(\n Ray.create({\n origin: position,\n direction: frame.scene.camera.direction,\n }),\n Vector3.magnitude(frame.scene.camera.viewVector) * 2\n );\n\n return Ray.intersectPlane(\n ray,\n Plane.fromNormalAndCoplanarPoint(\n frame.scene.camera.direction,\n offsetPoint\n )\n );\n } else {\n const ray = viewport.transformPointToRay(\n point,\n frame.image,\n frame.scene.camera\n );\n\n return Ray.intersectPlane(\n ray,\n Plane.fromNormalAndCoplanarPoint(frame.scene.camera.direction, position)\n );\n }\n }\n return undefined;\n}\n\nexport function computeInputTransform(\n identifier: string,\n value: number,\n lastValue: number,\n distanceUnit: DistanceUnitType = 'millimeters',\n angleUnit: AngleUnitType = 'degrees'\n): Matrix4.Matrix4 {\n const units = new DistanceUnits(distanceUnit);\n const angles = new AngleUnits(angleUnit);\n\n const rotation = (): number => angles.convertFrom(value - lastValue);\n const position = (): number =>\n units.convertRealValueToWorld(value - lastValue);\n\n switch (identifier) {\n case 'x-translate':\n return Matrix4.makeTranslation(Vector3.create(position(), 0, 0));\n case 'y-translate':\n return Matrix4.makeTranslation(Vector3.create(0, position(), 0));\n case 'z-translate':\n return Matrix4.makeTranslation(Vector3.create(0, 0, position()));\n case 'x-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.left(), rotation())\n );\n case 'y-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.down(), rotation())\n );\n case 'z-rotate':\n return Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.forward(), rotation())\n );\n }\n return Matrix4.makeIdentity();\n}\n\nexport function computeInputDisplayValue(\n identifier: string,\n current: Matrix4.Matrix4,\n start: Matrix4.Matrix4,\n distanceUnit: DistanceUnitType = 'millimeters',\n angleUnit: AngleUnitType = 'degrees'\n): number {\n const units = new DistanceUnits(distanceUnit);\n const angles = new AngleUnits(angleUnit);\n\n const rotation = (): Matrix4.Matrix4 =>\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(current));\n const transformDiff = (): Matrix4.Matrix4 =>\n Matrix4.multiply(current, Matrix4.invert(start));\n const relativeTranslationDiff = (): Vector3.Vector3 =>\n Vector3.transformMatrix(\n Vector3.fromMatrixPosition(transformDiff()),\n Matrix4.invert(rotation())\n );\n const relativeRotationDiff = (): Euler.Euler =>\n Euler.create(\n Vector3.transformMatrix(\n Euler.fromRotationMatrix(Matrix4.invert(transformDiff())),\n Matrix4.invert(rotation())\n )\n );\n\n switch (identifier) {\n case 'x-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().x);\n case 'y-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().y);\n case 'z-translate':\n return units.convertWorldValueToReal(relativeTranslationDiff().z);\n case 'x-rotate':\n return angles.convertTo(relativeRotationDiff().x);\n case 'y-rotate':\n return angles.convertTo(relativeRotationDiff().y);\n case 'z-rotate':\n return angles.convertTo(relativeRotationDiff().z);\n }\n return 0;\n}\n\nexport function computeUpdatedTransform(\n current: Matrix4.Matrix4,\n previous: Vector3.Vector3,\n next: Vector3.Vector3,\n viewVector: Vector3.Vector3,\n angle: number,\n identifier: string\n): Matrix4.Matrix4 {\n const delta = Vector3.subtract(next, previous);\n\n switch (identifier) {\n case 'x-translate': {\n return Matrix4.multiply(\n current,\n computeTranslation(current, Vector3.right(), delta)\n );\n }\n case 'y-translate':\n return Matrix4.multiply(\n current,\n computeTranslation(current, Vector3.up(), delta)\n );\n case 'z-translate':\n return Matrix4.multiply(\n current,\n computeTranslation(current, Vector3.back(), delta)\n );\n case 'x-rotate':\n return Matrix4.multiply(\n computeRotation(\n current,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(\n computeRotationAxis(current, viewVector, Vector3.right()),\n angle\n )\n )\n ),\n current\n );\n case 'y-rotate':\n return Matrix4.multiply(\n computeRotation(\n current,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(\n computeRotationAxis(current, viewVector, Vector3.up()),\n angle\n )\n )\n ),\n current\n );\n case 'z-rotate':\n return Matrix4.multiply(\n computeRotation(\n current,\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(\n computeRotationAxis(current, viewVector, Vector3.forward()),\n angle\n )\n )\n ),\n current\n );\n default:\n return current;\n }\n}\n\nexport function computeRotationAxis(\n current: Matrix4.Matrix4,\n viewVector: Vector3.Vector3,\n axis: Vector3.Vector3\n): Vector3.Vector3 {\n const rotation = Matrix4.makeRotation(Quaternion.fromMatrixRotation(current));\n const rotatedAxis = Vector3.transformMatrix(axis, rotation);\n const rotatedNegatedAxis = Vector3.transformMatrix(\n Vector3.negate(axis),\n rotation\n );\n\n return Vector3.dot(viewVector, rotatedAxis) >\n Vector3.dot(viewVector, rotatedNegatedAxis)\n ? rotatedAxis\n : rotatedNegatedAxis;\n}\n\nexport function computeTranslation(\n current: Matrix4.Matrix4,\n axis: Vector3.Vector3,\n delta: Vector3.Vector3\n): Matrix4.Matrix4 {\n const rotation = Matrix4.makeRotation(Quaternion.fromMatrixRotation(current));\n const rotatedAxis = Vector3.transformMatrix(axis, rotation);\n const rotatedDelta = Vector3.multiply(rotatedAxis, delta);\n\n return Matrix4.makeTranslation(\n Vector3.scale(rotatedDelta.x + rotatedDelta.y + rotatedDelta.z, axis)\n );\n}\n\n/**\n * Computes a rotation Matrix4 by applying the rotation at the given position,\n * then translating it back to convert it to a world delta.\n * @param rotation\n * @param current\n * @returns\n */\nexport function computeRotation(\n current: Matrix4.Matrix4,\n delta: Matrix4.Matrix4\n): Matrix4.Matrix4 {\n return Matrix4.multiply(\n Matrix4.multiply(\n Matrix4.makeTranslation(Vector3.fromMatrixPosition(current)),\n delta\n ),\n Matrix4.makeTranslation(Vector3.negate(Vector3.fromMatrixPosition(current)))\n );\n}\n\nexport function computeInputPosition(\n viewport: Viewport,\n bounds: Rectangle.Rectangle,\n shapePoints: Point.Point[]\n): PointAndPlacement {\n const paddedBounds = Rectangle.pad(bounds, 5);\n const canvasPoints = shapePoints.map((sp) =>\n viewport.transformNdcPointToViewport(sp)\n );\n\n const topLeft = Rectangle.topLeft(paddedBounds);\n const topRight = Point.add(topLeft, Point.create(paddedBounds.width, 0));\n const bottomRight = Rectangle.bottomRight(paddedBounds);\n const bottomLeft = Point.subtract(\n bottomRight,\n Point.create(paddedBounds.width, 0)\n );\n\n const center = Point.scale(\n canvasPoints.reduce((sum, pt) => Point.add(sum, pt), Point.create()),\n 1 / canvasPoints.length,\n 1 / canvasPoints.length\n );\n\n const closestPoint = [topRight, bottomLeft, bottomRight].reduce(\n (closest, pt) =>\n Point.distance(center, pt) < Point.distance(center, closest)\n ? pt\n : closest,\n topLeft\n );\n\n switch (closestPoint) {\n case topLeft:\n return { point: closestPoint, placement: 'top-left' };\n case topRight:\n return { point: closestPoint, placement: 'top-right' };\n case bottomLeft:\n return { point: closestPoint, placement: 'bottom-left' };\n default:\n return { point: closestPoint, placement: 'bottom-right' };\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { FunctionalComponent, h } from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\n\nimport {\n AngleUnits,\n AngleUnitType,\n DistanceUnits,\n DistanceUnitType,\n Viewport,\n} from '../../lib/types';\n\nexport type TransformWidgetInputPlacement =\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right';\n\nexport interface TransformWidgetInputProps {\n ref: (el?: HTMLInputElement) => void;\n bounds?: DOMRect;\n\n viewport: Viewport;\n point: Point.Point;\n placement: TransformWidgetInputPlacement;\n\n distance?: number;\n angle?: number;\n decimalPlaces: number;\n distanceUnit: DistanceUnitType;\n angleUnit: AngleUnitType;\n\n onChange?: (value: number) => void | Promise<void>;\n onIncrement?: VoidFunction;\n onDecrement?: VoidFunction;\n}\n\nexport const TransformWidgetInput: FunctionalComponent<\n TransformWidgetInputProps\n> = ({\n ref,\n bounds,\n viewport,\n point,\n placement,\n distance,\n angle,\n decimalPlaces,\n distanceUnit,\n angleUnit,\n onChange,\n onIncrement,\n onDecrement,\n}) => {\n const angles = new AngleUnits(angleUnit);\n const units = new DistanceUnits(distanceUnit);\n const definedValue = distance ?? angle ?? 0;\n const displayValue = `${parseFloat(definedValue.toFixed(decimalPlaces))} ${\n distance != null ? units.unit.abbreviatedName : angles.unit.abbreviatedName\n }`;\n const inputPlacement = constrainInputToViewport(\n viewport,\n bounds ?? Dimensions.create(0, 0),\n point,\n placement\n );\n\n const handleChange = (event: Event): void => {\n if (event.target != null) {\n const parsed = parseFloat((event.target as HTMLInputElement).value);\n\n if (!isNaN(parsed)) {\n onChange?.(parseFloat((event.target as HTMLInputElement).value));\n }\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'ArrowUp') {\n onIncrement?.();\n } else if (event.key === 'ArrowDown') {\n onDecrement?.();\n }\n };\n\n return (\n <div\n class=\"widget-input wrapper\"\n style={{ ...inputPlacement }}\n onKeyDown={handleKeyDown}\n >\n <input\n ref={ref}\n class=\"widget-input\"\n type=\"text\"\n value={displayValue}\n onChange={handleChange}\n ></input>\n </div>\n );\n};\n\nfunction constrainTo(dimension: number, length: number): number {\n return Math.min(dimension, Math.max(0, length));\n}\n\ninterface InputPlacement {\n left?: string;\n right?: string;\n top?: string;\n bottom?: string;\n}\n\nfunction constrainInputToViewport(\n viewport: Viewport,\n inputDimensions: Dimensions.Dimensions,\n point: Point.Point,\n placement: TransformWidgetInputPlacement,\n padding = 5\n): InputPlacement {\n const { width, height } = viewport.dimensions;\n const paddedWidth = inputDimensions.width + padding;\n const paddedHeight = inputDimensions.height + padding;\n\n function toCssLength(length: number): string {\n return `${length}px`;\n }\n\n switch (placement) {\n case 'top-left':\n return {\n right: toCssLength(constrainTo(width - paddedWidth, width - point.x)),\n bottom: toCssLength(\n constrainTo(height - paddedHeight, height - point.y)\n ),\n };\n case 'top-right':\n return {\n left: toCssLength(constrainTo(width - paddedWidth, point.x)),\n bottom: toCssLength(\n constrainTo(height - paddedHeight, height - point.y)\n ),\n };\n case 'bottom-left':\n return {\n right: toCssLength(constrainTo(width - paddedWidth, width - point.x)),\n top: toCssLength(constrainTo(height - paddedHeight, point.y)),\n };\n case 'bottom-right':\n default:\n return {\n left: toCssLength(constrainTo(width - paddedWidth, point.x)),\n top: toCssLength(constrainTo(height - paddedHeight, point.y)),\n };\n }\n}\n","import { Angle, Matrix4, Quaternion, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { FrameCameraBase } from '../types';\nimport { TriangleMeshPoints } from './mesh';\n\nexport function xAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.back(),\n Vector3.up(),\n triangleSize\n );\n}\n\nexport function yAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.back(),\n triangleSize\n );\n}\n\nexport function zAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.up(),\n triangleSize\n );\n}\n\nfunction computeRotationNdcValues(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n xDirection: Vector3.Vector3,\n yDirection: Vector3.Vector3,\n triangleSize: number\n): TriangleMeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n Vector3.add(xDirection, yDirection),\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const transformedX = Vector3.transformMatrix(\n xDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const transformedY = Vector3.transformMatrix(\n yDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const basePosition = Vector3.fromMatrixPosition(widgetTransform);\n const position = Vector3.add(\n basePosition,\n Vector3.scale(triangleSize * 10, transformedDirection)\n );\n\n const xRay = Ray.create({\n origin: position,\n direction: transformedX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: transformedY,\n });\n const rotationAxis = Vector3.cross(transformedX, transformedY);\n\n const base = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, -triangleSize),\n rotationAxis,\n position\n );\n const right = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, triangleSize),\n rotationAxis,\n position\n );\n const up = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, triangleSize),\n rotationAxis,\n position\n );\n const left = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, -triangleSize),\n rotationAxis,\n position\n );\n\n return new TriangleMeshPoints(\n Vector3.dot(transformedX, camera.direction) !== -1 &&\n Vector3.dot(transformedY, camera.direction) !== -1,\n base,\n left,\n right,\n up,\n Vector3.transformMatrix(base, camera.projectionViewMatrix),\n Vector3.transformMatrix(left, camera.projectionViewMatrix),\n Vector3.transformMatrix(right, camera.projectionViewMatrix),\n Vector3.transformMatrix(up, camera.projectionViewMatrix)\n );\n}\n","import { BoundingBox, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Frame, Viewport } from '../../lib/types';\nimport { Drawable } from './drawable';\nimport { TriangleMesh } from './mesh';\n\nexport function testDrawable(\n drawable: Drawable,\n frame: Frame,\n viewport: Viewport,\n point: Point.Point\n): boolean {\n if (drawable instanceof TriangleMesh) {\n return testTriangleMesh(drawable, frame, viewport, point);\n }\n return false;\n}\n\nexport function testTriangleMesh(\n mesh: TriangleMesh,\n frame: Frame,\n viewport: Viewport,\n point: Point.Point\n): boolean {\n return (\n testTriangle(\n [mesh.points.worldLeft, mesh.points.worldRight, mesh.points.worldTip],\n frame,\n viewport,\n point\n ) ||\n testTriangle(\n [mesh.points.worldLeft, mesh.points.worldRight, mesh.points.worldBase],\n frame,\n viewport,\n point\n )\n );\n}\n\n/**\n * Adapted from https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm.\n */\nexport function testTriangle(\n points: Vector3.Vector3[],\n frame: Frame,\n viewport: Viewport,\n point: Point.Point\n): boolean {\n if (points.length === 3) {\n const ray = frame.scene.camera.isOrthographic()\n ? viewport.transformPointToOrthographicRay(\n point,\n frame.image,\n frame.scene.camera\n )\n : viewport.transformPointToRay(point, frame.image, frame.scene.camera);\n\n const edge1 = Vector3.subtract(points[1], points[0]);\n const edge2 = Vector3.subtract(points[2], points[0]);\n\n const epsilon = BoundingBox.epsilon(\n BoundingBox.fromVectors([ray.direction, ray.origin, edge1, edge2]) ??\n BoundingBox.create(edge1, edge2)\n );\n\n const p = Vector3.cross(ray.direction, edge2);\n const det = Vector3.dot(edge1, p);\n\n // This check causes a `det` of NaN or 0 to return false\n // without needing to perform the subsequent calculations.\n if (!(Math.abs(det) >= epsilon)) {\n return false;\n }\n\n const t = Vector3.subtract(ray.origin, points[0]);\n const u = Vector3.dot(t, p) / det;\n\n if (u < 0 || u > 1) {\n return false;\n }\n\n const q = Vector3.cross(t, edge1);\n const v = Vector3.dot(ray.direction, q) / det;\n\n if (v < 0 || u + v > 1) {\n return false;\n }\n\n const r = Vector3.dot(edge2, q) / det;\n\n // Ignore the case where the computed hit position is negative\n // if in orthographic to correctly return hit results when close\n // to the camera.\n // TODO: revisit with https://vertexvis.atlassian.net/browse/PLAT-1549\n return !isNaN(r) && (r > 0 || frame.scene.camera.isOrthographic());\n }\n return false;\n}\n","import { Matrix4 } from '@vertexvis/geometry';\nimport { Point, Rectangle, Vector3 } from '@vertexvis/geometry';\nimport { Color, Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\nimport regl from 'regl';\nimport shapeBuilder from 'regl-shape';\n\nimport {\n axisPositions,\n rotationAxisPositions,\n} from '../../lib/transforms/axis-lines';\nimport {\n xAxisRotationPositions,\n yAxisRotationPositions,\n zAxisRotationPositions,\n} from '../../lib/transforms/axis-rotation';\nimport {\n xAxisArrowPositions,\n yAxisArrowPositions,\n zAxisArrowPositions,\n} from '../../lib/transforms/axis-translation';\nimport {\n computeDrawable2dBounds,\n Drawable,\n} from '../../lib/transforms/drawable';\nimport { testDrawable } from '../../lib/transforms/hits';\nimport { AxisLine, RotationLine } from '../../lib/transforms/line';\nimport { TriangleMesh } from '../../lib/transforms/mesh';\nimport { CreateShape } from '../../lib/transforms/shape';\nimport { Frame } from '../../lib/types';\nimport { ReglComponent } from '../../lib/webgl/regl-component';\n\nexport interface DrawableElementColors {\n xArrow?: Color.Color | string;\n yArrow?: Color.Color | string;\n zArrow?: Color.Color | string;\n hovered?: Color.Color | string;\n outline?: Color.Color | string;\n}\n\nexport interface DisabledAxis {\n xRotation: boolean;\n yRotation: boolean;\n zRotation: boolean;\n xTranslation: boolean;\n yTranslation: boolean;\n zTranslation: boolean;\n}\n\nexport class TransformWidget extends ReglComponent {\n private cursor?: Point.Point;\n\n private xAxis?: AxisLine;\n private yAxis?: AxisLine;\n private zAxis?: AxisLine;\n private xArrow?: TriangleMesh;\n private yArrow?: TriangleMesh;\n private zArrow?: TriangleMesh;\n private xRotation?: TriangleMesh;\n private xyRotationLine?: RotationLine;\n private xzRotationLine?: RotationLine;\n private yRotation?: TriangleMesh;\n private yxRotationLine?: RotationLine;\n private yzRotationLine?: RotationLine;\n private zRotation?: TriangleMesh;\n private zxRotationLine?: RotationLine;\n private zyRotationLine?: RotationLine;\n\n private disabledAxis: DisabledAxis = {\n xTranslation: false,\n yTranslation: false,\n zTranslation: false,\n xRotation: false,\n yRotation: false,\n zRotation: false,\n };\n\n private axisLines: AxisLine[] = [];\n private rotationLines: RotationLine[] = [];\n private translationMeshes: TriangleMesh[] = [];\n private rotationMeshes: TriangleMesh[] = [];\n private hoveredElement?: Drawable;\n\n private transform?: Matrix4.Matrix4;\n private interactiveBounds?: Rectangle.Rectangle;\n private fullBounds?: Rectangle.Rectangle;\n\n private hoveredChanged = new EventDispatcher<Drawable | undefined>();\n\n private xArrowFillColor?: Color.Color | string;\n private yArrowFillColor?: Color.Color | string;\n private zArrowFillColor?: Color.Color | string;\n\n private hoveredArrowFillColor?: Color.Color | string;\n private outlineColor?: Color.Color | string;\n\n public constructor(\n canvasElement: HTMLCanvasElement,\n colors: DrawableElementColors = {},\n initialDisabledAxes: Partial<DisabledAxis> = {}\n ) {\n super(canvasElement);\n\n this.xArrowFillColor = colors.xArrow;\n this.yArrowFillColor = colors.yArrow;\n this.zArrowFillColor = colors.zArrow;\n this.hoveredArrowFillColor = colors.hovered;\n this.outlineColor = colors.outline;\n\n this.disabledAxis.xTranslation = initialDisabledAxes.xTranslation ?? false;\n this.disabledAxis.yTranslation = initialDisabledAxes.yTranslation ?? false;\n this.disabledAxis.zTranslation = initialDisabledAxes.zTranslation ?? false;\n this.disabledAxis.xRotation = initialDisabledAxes.xRotation ?? false;\n this.disabledAxis.yRotation = initialDisabledAxes.yRotation ?? false;\n this.disabledAxis.zRotation = initialDisabledAxes.zRotation ?? false;\n }\n\n public dispose(): void {\n this.reglFrameDisposable?.cancel();\n }\n\n /**\n * @internal - visible for testing\n */\n public getDrawableElements(): Drawable[] {\n return this.drawableElements;\n }\n\n public getFullBounds(): Rectangle.Rectangle | undefined {\n return this.fullBounds;\n }\n\n public boundsContainsPoint(point: Point.Point): boolean {\n return (\n this.interactiveBounds != null &&\n this.frame != null &&\n Rectangle.containsPoints(this.interactiveBounds, point)\n );\n }\n\n public updateDisabledAxis(axis: Partial<DisabledAxis>): void {\n this.disabledAxis = {\n ...this.disabledAxis,\n ...axis,\n };\n this.updateDisabledOnDrawables();\n }\n\n public updateCursor(cursor?: Point.Point): void {\n this.cursor = cursor;\n\n if (cursor != null && this.frame != null) {\n this.updateHovered();\n } else {\n this.clearHovered();\n }\n }\n\n public updateTransform(transform?: Matrix4.Matrix4): void {\n this.transform = transform;\n\n if (transform != null && this.frame != null) {\n this.updateAndDraw();\n } else {\n this.clear();\n this.reglFrameDisposable?.cancel();\n this.reglFrameDisposable = undefined;\n }\n }\n\n public updateColors(colors: DrawableElementColors = {}): void {\n this.xArrowFillColor = colors.xArrow ?? this.xArrowFillColor;\n this.yArrowFillColor = colors.yArrow ?? this.yArrowFillColor;\n this.zArrowFillColor = colors.zArrow ?? this.zArrowFillColor;\n this.hoveredArrowFillColor = colors.hovered ?? this.hoveredArrowFillColor;\n this.outlineColor = colors.outline ?? this.outlineColor;\n\n this.xArrow?.updateFillColor(this.getXTranslationColor(), true);\n this.yArrow?.updateFillColor(this.getYTranslationColor(), true);\n this.zArrow?.updateFillColor(this.getZTranslationColor(), true);\n this.xRotation?.updateFillColor(this.getXRotationColor(), true);\n this.yRotation?.updateFillColor(this.getYRotationColor(), true);\n this.zRotation?.updateFillColor(this.getZRotationColor(), true);\n this.hoveredElement?.updateFillColor(this.hoveredArrowFillColor);\n }\n\n public onHoveredChanged(\n listener: Listener<Drawable | undefined>\n ): Disposable {\n return this.hoveredChanged.on(listener);\n }\n\n private updateDisabledOnDrawables(): void {\n this.xRotation?.setDisabled(this.disabledAxis.xRotation);\n this.xyRotationLine?.setDisabled(this.disabledAxis.xRotation);\n this.xzRotationLine?.setDisabled(this.disabledAxis.xRotation);\n\n this.yRotation?.setDisabled(this.disabledAxis.yRotation);\n this.yzRotationLine?.setDisabled(this.disabledAxis.yRotation);\n this.yxRotationLine?.setDisabled(this.disabledAxis.yRotation);\n\n this.zRotation?.setDisabled(this.disabledAxis.zRotation);\n this.zxRotationLine?.setDisabled(this.disabledAxis.zRotation);\n this.zyRotationLine?.setDisabled(this.disabledAxis.zRotation);\n\n this.xArrow?.setDisabled(this.disabledAxis.xTranslation);\n this.yArrow?.setDisabled(this.disabledAxis.yTranslation);\n this.zArrow?.setDisabled(this.disabledAxis.zTranslation);\n\n this.updateColors();\n }\n\n private updateHovered(): void {\n const previousHovered = this.hoveredElement;\n const currentFrame = this.frame;\n\n if (currentFrame != null) {\n this.hoveredElement = [...this.translationMeshes, ...this.rotationMeshes]\n .filter((el) => el.points.valid && !el.isDisabled())\n .find((m) =>\n this.cursor != null\n ? testDrawable(m, currentFrame, this.viewport, this.cursor)\n : false\n );\n\n if (this.hoveredElement !== previousHovered) {\n this.hoveredChanged.emit(this.hoveredElement);\n this.hoveredElement?.updateFillColor(this.hoveredArrowFillColor);\n previousHovered?.updateFillColor(previousHovered?.initialFillColor);\n }\n }\n }\n\n private clearHovered(): void {\n const previousHovered = this.hoveredElement;\n this.hoveredElement = undefined;\n\n if (this.hoveredElement !== previousHovered) {\n this.hoveredChanged.emit(this.hoveredElement);\n previousHovered.updateFillColor(previousHovered.initialFillColor);\n }\n }\n\n protected hasData(): boolean {\n return this.transform != null;\n }\n\n protected createOrUpdateElements(): void {\n if (this.transform != null && this.frame != null) {\n if (this.xArrow == null || this.yArrow == null || this.zArrow == null) {\n this.createElements(this.transform, this.frame);\n } else {\n this.updateElements(this.transform, this.frame);\n }\n\n this.interactiveBounds = computeDrawable2dBounds(\n this.viewport,\n ...this.rotationMeshes,\n ...this.translationMeshes\n );\n this.fullBounds = computeDrawable2dBounds(\n this.viewport,\n ...this.rotationMeshes,\n ...this.translationMeshes,\n ...this.axisLines\n );\n }\n }\n\n private createElements(transform: Matrix4.Matrix4, frame: Frame): void {\n this.reglCommand = regl({\n canvas: this.canvasElement,\n extensions: 'angle_instanced_arrays',\n });\n const { createShape } = shapeBuilder(this.reglCommand);\n\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame\n );\n\n this.xArrow = new TriangleMesh(\n createShape,\n 'x-translate',\n xAxisArrowPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getXTranslationColor()\n );\n\n this.xRotation = new TriangleMesh(\n createShape,\n 'x-rotate',\n xAxisRotationPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getXRotationColor()\n );\n this.xAxis = new AxisLine(\n createShape,\n 'x-axis',\n axisPositions(transform, frame.scene.camera, this.xArrow),\n this.outlineColor,\n this.getXTranslationColor()\n );\n this.yArrow = new TriangleMesh(\n createShape,\n 'y-translate',\n yAxisArrowPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getYTranslationColor()\n );\n\n this.yRotation = new TriangleMesh(\n createShape,\n 'y-rotate',\n yAxisRotationPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getYRotationColor()\n );\n this.yAxis = new AxisLine(\n createShape,\n 'y-axis',\n axisPositions(transform, frame.scene.camera, this.yArrow),\n this.outlineColor,\n this.getYTranslationColor()\n );\n this.zArrow = new TriangleMesh(\n createShape,\n 'z-translate',\n zAxisArrowPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getZTranslationColor()\n );\n this.zAxis = new AxisLine(\n createShape,\n 'z-axis',\n axisPositions(transform, frame.scene.camera, this.zArrow),\n this.outlineColor,\n this.getZTranslationColor()\n );\n this.zRotation = new TriangleMesh(\n createShape,\n 'z-rotate',\n zAxisRotationPositions(transform, frame.scene.camera, triangleSize),\n this.outlineColor,\n this.getZRotationColor()\n );\n\n this.createRotationLines(createShape, transform, frame);\n\n this.axisLines = [this.xAxis, this.yAxis, this.zAxis];\n this.translationMeshes = [this.xArrow, this.yArrow, this.zArrow];\n this.rotationMeshes = [this.xRotation, this.yRotation, this.zRotation];\n this.updateDisabledOnDrawables();\n\n this.availableElements = [\n ...this.axisLines,\n ...this.rotationLines,\n ...this.translationMeshes,\n ...this.rotationMeshes,\n ];\n }\n\n private getXRotationColor(): Color.Color | string | undefined {\n return this.xArrowFillColor;\n }\n\n private getYRotationColor(): Color.Color | string | undefined {\n return this.yArrowFillColor;\n }\n\n private getZRotationColor(): Color.Color | string | undefined {\n return this.zArrowFillColor;\n }\n\n private getXTranslationColor(): Color.Color | string | undefined {\n return this.xArrowFillColor;\n }\n\n private getYTranslationColor(): Color.Color | string | undefined {\n return this.yArrowFillColor;\n }\n\n private getZTranslationColor(): Color.Color | string | undefined {\n return this.zArrowFillColor;\n }\n\n private createRotationLines(\n createShape: CreateShape,\n transform: Matrix4.Matrix4,\n frame: Frame\n ): void {\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame\n );\n\n const xyRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n );\n const xzRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n );\n const yxRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n );\n const yzRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n );\n const zxRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n );\n const zyRotationLinePoints = rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n );\n\n if (xyRotationLinePoints != null) {\n this.xyRotationLine = new RotationLine(\n createShape,\n 'xy-rotation-line',\n xyRotationLinePoints,\n this.outlineColor\n );\n }\n if (xzRotationLinePoints != null) {\n this.xzRotationLine = new RotationLine(\n createShape,\n 'xz-rotation-line',\n xzRotationLinePoints,\n this.outlineColor\n );\n }\n if (yxRotationLinePoints != null) {\n this.yxRotationLine = new RotationLine(\n createShape,\n 'yx-rotation-line',\n yxRotationLinePoints,\n this.outlineColor\n );\n }\n if (yzRotationLinePoints != null) {\n this.yzRotationLine = new RotationLine(\n createShape,\n 'yz-rotation-line',\n yzRotationLinePoints,\n this.outlineColor\n );\n }\n if (zxRotationLinePoints != null) {\n this.zxRotationLine = new RotationLine(\n createShape,\n 'zx-rotation-line',\n zxRotationLinePoints,\n this.outlineColor\n );\n }\n if (zyRotationLinePoints != null) {\n this.zyRotationLine = new RotationLine(\n createShape,\n 'zy-rotation-line',\n zyRotationLinePoints,\n this.outlineColor\n );\n }\n\n this.rotationLines = [\n this.xyRotationLine,\n this.xzRotationLine,\n this.yxRotationLine,\n this.yzRotationLine,\n this.zxRotationLine,\n this.zyRotationLine,\n ].filter((l) => l != null) as RotationLine[];\n }\n\n private updateElements(transform: Matrix4.Matrix4, frame: Frame): void {\n const triangleSize = this.computeTriangleSize(\n Vector3.fromMatrixPosition(transform),\n frame\n );\n\n if (this.xArrow != null) {\n this.xArrow.updatePoints(\n xAxisArrowPositions(transform, frame.scene.camera, triangleSize)\n );\n this.xAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.xArrow)\n );\n }\n this.xRotation?.updatePoints(\n xAxisRotationPositions(transform, frame.scene.camera, triangleSize)\n );\n\n if (this.yArrow != null) {\n this.yArrow.updatePoints(\n yAxisArrowPositions(transform, frame.scene.camera, triangleSize)\n );\n this.yAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.yArrow)\n );\n }\n this.yRotation?.updatePoints(\n yAxisRotationPositions(transform, frame.scene.camera, triangleSize)\n );\n\n if (this.zArrow != null) {\n this.zArrow.updatePoints(\n zAxisArrowPositions(transform, frame.scene.camera, triangleSize)\n );\n this.zAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.zArrow)\n );\n }\n this.zRotation?.updatePoints(\n zAxisRotationPositions(transform, frame.scene.camera, triangleSize)\n );\n\n this.xyRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n )\n );\n this.xzRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.xRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n )\n );\n this.yxRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n )\n );\n this.yzRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.yRotation,\n this.zArrow?.points.worldTip,\n triangleSize\n )\n );\n this.zxRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.xArrow?.points.worldTip,\n triangleSize\n )\n );\n this.zyRotationLine?.updatePoints(\n rotationAxisPositions(\n frame.scene.camera,\n this.zRotation,\n this.yArrow?.points.worldTip,\n triangleSize\n )\n );\n }\n}\n",":host {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n pointer-events: none;\n /**\n * @prop --viewer-transform-widget-x-axis-arrow-color: A CSS color for the arrow\n * at the end of the X axis on this widget. Defaults to `#ea3324`.\n */\n --viewer-transform-widget-x-axis-arrow-color: var(--x-axis-color);\n\n /**\n * @prop --viewer-transform-widget-y-axis-arrow-color: A CSS color for the arrow\n * at the end of the Y axis on this widget. Defaults to `#4faf32`.\n */\n --viewer-transform-widget-y-axis-arrow-color: var(--y-axis-color);\n\n /**\n * @prop --viewer-transform-widget-z-axis-arrow-color: A CSS color for the arrow\n * at the end of the Z axis on this widget. Defaults to `#0000ff`.\n */\n --viewer-transform-widget-z-axis-arrow-color: var(--z-axis-color);\n\n\n /**\n * @prop --viewer-transform-widget-hovered-arrow-color: A CSS color for the arrow\n * when it is hovered. Defaults to `#ffff00`.\n */\n --viewer-transform-widget-hovered-arrow-color: #ffff00;\n\n /**\n * @prop --viewer-transform-widget-input-width: A CSS length for the width of the\n * input displayed near the handles. Defaults to `7em`.\n */\n --viewer-transform-widget-input-width: 7em;\n}\n\n.widget {\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.widget.hovered {\n pointer-events: auto;\n}\n\n.widget-input.wrapper {\n position: absolute;\n pointer-events: auto;\n display: flex;\n border: 1px solid #cccccc;\n width: var(--viewer-transform-widget-input-width);\n}\n\ninput.widget-input {\n box-sizing: border-box;\n text-align: center;\n border: none;\n width: 100%;\n outline: none;\n}\n\ninput.widget-input:focus {\n outline: none;\n}","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport {\n Angle,\n Euler,\n Matrix4,\n Point,\n Quaternion,\n Vector3,\n} from '@vertexvis/geometry';\nimport { Color, Disposable } from '@vertexvis/utils';\nimport classNames from 'classnames';\n\nimport { readDOM, writeDOM } from '../../lib/stencil';\nimport { TransformController } from '../../lib/transforms/controller';\nimport { Drawable } from '../../lib/transforms/drawable';\nimport { AngleUnitType, DistanceUnitType } from '../../lib/types';\nimport {\n computeInputDisplayValue,\n computeInputPosition,\n computeInputTransform,\n computeUpdatedTransform,\n convertCanvasPointToWorld,\n convertPointToCanvas,\n PointAndPlacement,\n} from './util';\nimport { TransformWidgetInput } from './viewer-transform-widget-components';\nimport { TransformWidget } from './widget';\n\n@Component({\n tag: 'vertex-viewer-transform-widget',\n styleUrl: 'viewer-transform-widget.css',\n shadow: true,\n})\nexport class ViewerTransformWidget {\n /**\n * An event that is emitted when the position of the widget changes.\n */\n @Event({ bubbles: true })\n public positionChanged!: EventEmitter<Vector3.Vector3 | undefined>;\n\n /**\n * An event that is emitted when the rotation of the widget changes.\n */\n @Event({ bubbles: true })\n public rotationChanged!: EventEmitter<Euler.Euler | undefined>;\n\n /**\n * An event that is emitted when the interaction has ended\n */\n @Event({ bubbles: true })\n public interactionEnded!: EventEmitter<Matrix4.Matrix4 | undefined>;\n\n /**\n * An event that is emitted an interaction with the widget has started\n */\n @Event({ bubbles: true })\n public interactionStarted!: EventEmitter<void>;\n\n /**\n * The viewer to connect to transforms. If nested within a <vertex-viewer>,\n * this property will be populated automatically.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The starting position of this transform widget. This position will be updated\n * as transforms occur. Setting this value to `undefined` will remove the widget.\n */\n @Prop({ mutable: true })\n public position?: Vector3.Vector3;\n\n /**\n * The starting angle for the transform widget. This rotation will be updated\n * as the rotations occur.\n */\n @Prop({ mutable: true })\n public rotation?: Euler.Euler;\n\n /**\n * The controller that is responsible for performing transforms.\n */\n @Prop({ mutable: true })\n public controller?: TransformController;\n\n /**\n * Determines whether or not the x-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public xRotationDisabled = false;\n\n /**\n * Determines whether or not the y-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public yRotationDisabled = false;\n\n /**\n * Determines whether or not the z-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public zRotationDisabled = false;\n\n /**\n * Determines whether or not the x-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public xTranslationDisabled = false;\n\n /**\n * Determines whether or not the y-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public yTranslationDisabled = false;\n\n /**\n * Determines whether or not the z-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public zTranslationDisabled = false;\n\n /**\n * Whether to show inputs beside the widget handles when they are interacted with.\n * Defaults to `true`.\n */\n @Prop()\n public showInputs = true;\n\n /**\n * The unit to show for translation inputs. Defaults to `millimeters`.\n *\n * @see DistanceUnitType\n */\n @Prop()\n public distanceUnit: DistanceUnitType = 'millimeters';\n\n /**\n * The unit to show for rotation inputs. Defaults to `degrees`.\n *\n * @see AngleUnitType\n */\n @Prop()\n public angleUnit: AngleUnitType = 'degrees';\n\n /**\n * The number of decimal places to show in the input. Defaults to `1`.\n */\n @Prop()\n public decimalPlaces = 1;\n\n /**\n * @internal\n * @ignore\n *\n * Visible for testing.\n */\n @Prop({ mutable: true })\n public hovered?: Drawable;\n\n @State()\n protected inputPosition?: PointAndPlacement;\n\n @State()\n protected inputValue?: number;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private startingTransform?: Matrix4.Matrix4;\n private currentTransform?: Matrix4.Matrix4;\n private dragStartTransform?: Matrix4.Matrix4;\n\n private xArrowColor: Color.Color | string = '#ea3324';\n private yArrowColor: Color.Color | string = '#4faf32';\n private zArrowColor: Color.Color | string = '#0000ff';\n private hoveredColor: Color.Color | string = '#ffff00';\n\n private widget?: TransformWidget;\n private lastDragged?: Drawable;\n private dragging?: Drawable;\n private lastAngle = 0;\n private lastWorldPosition?: Vector3.Vector3;\n private lastInputValue?: number;\n\n private canvasBounds?: DOMRect;\n private inputBounds?: DOMRect;\n private canvasResizeObserver?: ResizeObserver;\n private inputResizeObserver?: ResizeObserver;\n private hostStyleObserver?: MutationObserver;\n private canvasRef?: HTMLCanvasElement;\n private inputRef?: HTMLInputElement;\n\n private hoveredChangeDisposable?: Disposable;\n\n protected componentDidLoad(): void {\n window.addEventListener('pointermove', this.handlePointerMove);\n\n this.canvasResizeObserver = new ResizeObserver(this.handleResize);\n this.inputResizeObserver = new ResizeObserver(this.handleInputResize);\n this.hostStyleObserver = new MutationObserver(this.handleStyleChange);\n\n if (this.canvasRef != null) {\n this.canvasResizeObserver.observe(this.canvasRef);\n\n this.setupTransformWidget(this.canvasRef);\n }\n\n this.hostStyleObserver.observe(this.hostEl, {\n attributes: true,\n attributeFilter: ['style'],\n });\n\n this.handleViewerChanged(this.viewer, undefined);\n this.handleStyleChange();\n }\n\n protected disconnectedCallback(): void {\n window.removeEventListener('pointermove', this.handlePointerMove);\n\n this.canvasResizeObserver?.disconnect();\n this.inputResizeObserver?.disconnect();\n this.hostStyleObserver?.disconnect();\n\n this.hoveredChangeDisposable?.dispose();\n this.widget?.dispose();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement\n ): void {\n oldViewer?.removeEventListener('frameDrawn', this.handleViewerFrameDrawn);\n oldViewer?.removeEventListener(\n 'dimensionschange',\n this.handleViewerDimensionsChange\n );\n newViewer?.addEventListener('frameDrawn', this.handleViewerFrameDrawn);\n newViewer?.addEventListener(\n 'dimensionschange',\n this.handleViewerDimensionsChange\n );\n\n if (newViewer?.stream != null) {\n this.controller?.dispose();\n this.controller = new TransformController(newViewer.stream);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('xTranslationDisabled')\n @Watch('yTranslationDisabled')\n @Watch('zTranslationDisabled')\n @Watch('xRotationDisabled')\n @Watch('yRotationDisabled')\n @Watch('zRotationDisabled')\n protected handleDisabledPropertyChanged(): void {\n this.widget?.updateDisabledAxis({\n xRotation: this.xRotationDisabled,\n yRotation: this.yRotationDisabled,\n zRotation: this.zRotationDisabled,\n\n xTranslation: this.xTranslationDisabled,\n yTranslation: this.yTranslationDisabled,\n zTranslation: this.zTranslationDisabled,\n });\n }\n\n /**\n * @ignore\n */\n @Watch('rotation')\n protected handleRotationChanged(\n newRotation?: Euler.Euler,\n oldRotation?: Euler.Euler\n ): void {\n const rotationToApply = newRotation ?? Euler.create();\n\n this.currentTransform = this.getTransformForNewRotation(rotationToApply);\n this.startingTransform = this.currentTransform;\n\n // If the removal of the previous rotation above results in an identity matrix,\n // clear the transformation on the widget to prevent it from appearing at the origin.\n if (\n newRotation == null &&\n this.currentTransform != null &&\n Matrix4.isIdentity(this.currentTransform)\n ) {\n this.currentTransform = undefined;\n this.startingTransform = this.currentTransform;\n }\n\n this.widget?.updateTransform(this.currentTransform);\n\n console.debug(\n `Updating widget rotation [previous=${JSON.stringify(\n oldRotation\n )}, current=${JSON.stringify(newRotation)}]`\n );\n\n this.rotationChanged.emit(newRotation);\n }\n\n /**\n * @ignore\n */\n @Watch('position')\n protected handlePositionChanged(\n newPosition?: Vector3.Vector3,\n oldPosition?: Vector3.Vector3\n ): void {\n this.currentTransform = this.getTransformForNewPosition(newPosition);\n this.startingTransform = this.currentTransform;\n\n console.debug(\n `Updating widget position [previous=${JSON.stringify(\n oldPosition\n )}, current=${JSON.stringify(newPosition)}]`\n );\n this.widget?.updateTransform(this.currentTransform);\n\n if (newPosition == null) {\n this.lastDragged = undefined;\n this.inputPosition = undefined;\n this.controller?.clearTransform();\n }\n\n this.positionChanged.emit(newPosition);\n }\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <canvas\n ref={(el) => {\n this.canvasRef = el;\n }}\n class={classNames('widget', {\n hovered: this.hovered != null,\n })}\n width={this.viewer?.viewport.width}\n height={this.viewer?.viewport.height}\n onPointerDown={this.handleBeginDrag}\n />\n\n {this.showInputs && this.inputPosition && this.viewer?.viewport && (\n <TransformWidgetInput\n ref={(el) => {\n if (el != null) {\n this.inputResizeObserver?.observe(el);\n } else if (this.inputRef != null) {\n this.inputResizeObserver?.unobserve(this.inputRef);\n }\n this.inputRef = el;\n }}\n bounds={this.inputBounds}\n viewport={this.viewer.viewport}\n point={this.inputPosition.point}\n placement={this.inputPosition.placement}\n angle={this.getDisplayedAngle()}\n distance={this.getDisplayedDistance()}\n decimalPlaces={this.decimalPlaces}\n distanceUnit={this.distanceUnit}\n angleUnit={this.angleUnit}\n onChange={this.handleInputChange}\n onIncrement={this.handleInputIncrement}\n onDecrement={this.handleInputDecrement}\n />\n )}\n </Host>\n );\n }\n\n private handleHoveredDrawableChanged = (drawable?: Drawable): void => {\n this.hovered = drawable;\n };\n\n private handleViewerFrameDrawn = (): void => {\n this.updatePropsFromViewer();\n };\n\n private handleViewerDimensionsChange = (): void => {\n writeDOM(() => {\n if (this.viewer != null && this.canvasRef != null) {\n this.canvasRef.width = this.viewer.viewport.width;\n this.canvasRef.height = this.viewer.viewport.height;\n\n this.updateCanvasBounds(this.canvasRef);\n }\n });\n };\n\n private handleResize = (): void => {\n if (this.canvasRef != null) {\n this.updateCanvasBounds(this.canvasRef);\n }\n };\n\n private handleInputResize = (): void => {\n if (this.inputRef != null) {\n const inputElement = this.inputRef;\n\n readDOM(() => {\n this.inputBounds = inputElement.getBoundingClientRect();\n });\n }\n };\n\n private handleStyleChange = (): void => {\n readDOM(() => {\n const hostStyles = window.getComputedStyle(this.hostEl);\n\n this.xArrowColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-x-axis-arrow-color')\n .trim();\n this.yArrowColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-y-axis-arrow-color')\n .trim();\n this.zArrowColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-z-axis-arrow-color')\n .trim();\n this.hoveredColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-hovered-arrow-color')\n .trim();\n\n this.getTransformWidget().updateColors({\n xArrow: this.xArrowColor,\n yArrow: this.yArrowColor,\n zArrow: this.zArrowColor,\n hovered: this.hoveredColor,\n });\n });\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (this.dragging == null) {\n const canvasPoint = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n this.getCanvasBounds()\n );\n const widget = this.getTransformWidget();\n\n if (canvasPoint != null && widget.boundsContainsPoint(canvasPoint)) {\n widget.updateCursor(canvasPoint);\n } else {\n widget.updateCursor(undefined);\n this.hovered = undefined;\n }\n }\n };\n\n private handleBeginDrag = async (event: PointerEvent): Promise<void> => {\n const canvasBounds = this.getCanvasBounds();\n\n if (\n this.hovered != null &&\n canvasBounds != null &&\n this.viewer != null &&\n this.position != null &&\n this.viewer.frame != null\n ) {\n this.dragging = this.hovered;\n\n if (this.dragging.identifier !== this.lastDragged?.identifier) {\n this.dragStartTransform = this.currentTransform;\n }\n this.lastDragged = undefined;\n\n const currentCanvas = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n canvasBounds\n );\n const widgetCenter = this.viewer.viewport.transformWorldToViewport(\n this.position,\n this.viewer.frame.scene.camera.projectionViewMatrix\n );\n\n this.lastAngle =\n currentCanvas != null\n ? Angle.fromPoints(widgetCenter, currentCanvas)\n : 0;\n\n this.lastWorldPosition = convertCanvasPointToWorld(\n currentCanvas,\n this.viewer?.frame,\n this.viewer?.viewport,\n this.currentTransform\n );\n\n this.interactionStarted.emit();\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointermove', this.handleDrag);\n window.addEventListener('pointerup', this.handleEndTransform);\n }\n };\n\n private handleDrag = async (event: PointerEvent): Promise<void> => {\n // Prevent selection of text and interaction with view cube while dragging the widget\n event.preventDefault();\n\n const canvasBounds = this.getCanvasBounds();\n\n if (\n this.dragging != null &&\n this.lastWorldPosition != null &&\n canvasBounds != null &&\n this.viewer != null &&\n this.viewer.frame != null &&\n this.position != null\n ) {\n // Begin the transform on the first `pointermove` event as opposed to the\n // `pointerdown` to prevent accidental no-op transforms (identity matrix).\n await this.controller?.beginTransform();\n\n const currentCanvas = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n canvasBounds\n );\n const widgetCenter = this.viewer.viewport.transformWorldToViewport(\n this.position,\n this.viewer.frame.scene.camera.projectionViewMatrix\n );\n\n const currentWorld = convertCanvasPointToWorld(\n currentCanvas,\n this.viewer?.frame,\n this.viewer?.viewport,\n this.currentTransform\n );\n\n if (\n currentWorld != null &&\n currentCanvas != null &&\n widgetCenter != null\n ) {\n const angle = Angle.fromPoints(widgetCenter, currentCanvas);\n\n this.transform(\n this.lastWorldPosition,\n currentWorld,\n angle - this.lastAngle\n );\n\n this.updateInputPosition();\n this.updateInputValue();\n\n this.lastWorldPosition = currentWorld;\n this.lastAngle = angle;\n }\n }\n };\n\n private handleEndTransform = async (event: PointerEvent): Promise<void> => {\n const canvasPoint = convertPointToCanvas(\n Point.create(event.clientX, event.clientY),\n this.getCanvasBounds()\n );\n const widget = this.getTransformWidget();\n this.lastDragged = this.dragging;\n\n this.dragging = undefined;\n this.lastWorldPosition = undefined;\n this.position =\n this.currentTransform != null\n ? Vector3.fromMatrixPosition(this.currentTransform)\n : this.position;\n this.lastAngle = 0;\n\n this.updateInputPosition();\n this.updateInputValue();\n\n widget.updateCursor(canvasPoint);\n widget.updateTransform(this.currentTransform);\n\n widget.updateDisabledAxis({\n xRotation: true,\n yRotation: true,\n zRotation: true,\n xTranslation: true,\n yTranslation: true,\n zTranslation: true,\n });\n\n window.removeEventListener('pointermove', this.handleDrag);\n window.removeEventListener('pointerup', this.handleEndTransform);\n\n try {\n const delta = this.controller?.getCurrentDelta();\n\n await this.controller?.endTransform();\n\n this.interactionEnded.emit(delta);\n } catch (e) {\n console.error('Failed to end transform interaction', e);\n }\n\n window.addEventListener('pointermove', this.handlePointerMove);\n\n this.getTransformWidget().updateDisabledAxis({\n xRotation: this.xRotationDisabled,\n yRotation: this.yRotationDisabled,\n zRotation: this.zRotationDisabled,\n\n xTranslation: this.xTranslationDisabled,\n yTranslation: this.yTranslationDisabled,\n zTranslation: this.zTranslationDisabled,\n });\n };\n\n private handleInputIncrement = (): void => {\n if (this.inputValue != null && this.lastInputValue != null) {\n this.inputValue = this.lastInputValue + 1;\n this.handleInputChange(this.inputValue);\n }\n };\n\n private handleInputDecrement = (): void => {\n if (this.inputValue != null && this.lastInputValue != null) {\n this.inputValue = this.lastInputValue - 1;\n this.handleInputChange(this.inputValue);\n }\n };\n\n private handleInputChange = async (value: number): Promise<void> => {\n if (\n this.lastDragged != null &&\n this.currentTransform != null &&\n this.startingTransform != null &&\n this.lastInputValue != null\n ) {\n this.transformCurrent(\n computeInputTransform(\n this.lastDragged.identifier,\n value,\n this.lastInputValue,\n this.distanceUnit,\n this.angleUnit\n )\n );\n\n this.lastInputValue = value;\n\n await this.controller?.beginTransform();\n this.getTransformWidget().updateTransform(this.currentTransform);\n await this.controller?.updateTransform(\n Matrix4.multiply(\n this.currentTransform,\n Matrix4.invert(this.startingTransform)\n )\n );\n this.updateInputPosition();\n await this.controller?.endTransformDebounced(() => {\n this.position =\n this.currentTransform != null\n ? Vector3.fromMatrixPosition(this.currentTransform)\n : this.position;\n });\n }\n };\n\n private updatePropsFromViewer = (): void => {\n const { frame } = this.viewer || {};\n\n if (frame != null) {\n const widget = this.getTransformWidget();\n\n widget.updateFrame(frame, this.dragging == null);\n this.updateInputPosition();\n }\n };\n\n private transform(\n previous: Vector3.Vector3,\n next: Vector3.Vector3,\n angle: number\n ): void {\n if (\n this.position != null &&\n this.startingTransform != null &&\n this.currentTransform != null &&\n this.dragging != null &&\n this.viewer != null &&\n this.viewer.frame != null\n ) {\n this.currentTransform = computeUpdatedTransform(\n this.currentTransform,\n previous,\n next,\n this.viewer?.frame.scene.camera.viewVector,\n angle,\n this.dragging.identifier\n );\n\n this.getTransformWidget().updateTransform(this.currentTransform);\n this.controller?.updateTransform(\n Matrix4.multiply(\n this.currentTransform,\n Matrix4.invert(this.startingTransform)\n )\n );\n }\n }\n\n private handleSettingDisabledAxis(): void {\n if (this.widget) {\n this.widget.updateDisabledAxis({\n xRotation: this.xRotationDisabled,\n yRotation: this.yRotationDisabled,\n zRotation: this.zRotationDisabled,\n xTranslation: this.xTranslationDisabled,\n yTranslation: this.yTranslationDisabled,\n zTranslation: this.zTranslationDisabled,\n });\n } else {\n console.warn('Cannot set disabled values - no widget defined');\n }\n }\n\n private setupTransformWidget = (\n canvasRef: HTMLCanvasElement\n ): TransformWidget => {\n console.debug(\n `Initializing transform widget. [initial-position=${JSON.stringify(\n this.position\n )}, has-initial-frame=${this.viewer?.frame != null}]`\n );\n\n this.widget = new TransformWidget(canvasRef, {\n xArrow: this.xArrowColor,\n yArrow: this.yArrowColor,\n zArrow: this.zArrowColor,\n hovered: this.hoveredColor,\n });\n\n if (this.rotation != null) {\n this.currentTransform = this.getTransformForNewRotation(this.rotation);\n this.startingTransform = this.currentTransform;\n this.widget.updateTransform(this.currentTransform);\n }\n\n if (this.position != null) {\n this.currentTransform = this.getTransformForNewPosition(this.position);\n this.startingTransform = this.currentTransform;\n this.widget.updateTransform(this.currentTransform);\n }\n if (this.viewer?.frame != null) {\n this.widget.updateFrame(this.viewer.frame, true);\n }\n\n this.handleSettingDisabledAxis();\n\n this.hoveredChangeDisposable = this.widget.onHoveredChanged(\n this.handleHoveredDrawableChanged\n );\n\n return this.widget;\n };\n\n private updateCanvasBounds = (canvasElement: HTMLCanvasElement): void => {\n readDOM(() => {\n this.canvasBounds = canvasElement.getBoundingClientRect();\n\n this.getTransformWidget().updateDimensions(canvasElement);\n });\n };\n\n private updateInputValue = (): void => {\n const dragging = this.dragging ?? this.lastDragged;\n if (\n dragging != null &&\n this.currentTransform != null &&\n this.dragStartTransform != null\n ) {\n this.lastInputValue = this.inputValue;\n\n this.inputValue = computeInputDisplayValue(\n dragging.identifier,\n this.currentTransform,\n this.dragStartTransform,\n this.distanceUnit,\n this.angleUnit\n );\n }\n };\n\n private transformCurrent = (transform: Matrix4.Matrix4): void => {\n this.currentTransform =\n this.currentTransform != null\n ? Matrix4.multiply(this.currentTransform, transform)\n : transform;\n };\n\n private updateInputPosition = (): void => {\n const dragging = this.dragging ?? this.lastDragged;\n if (\n this.showInputs &&\n this.viewer?.frame != null &&\n this.position != null &&\n dragging != null\n ) {\n const widget = this.getTransformWidget();\n const widgetBounds = widget.getFullBounds();\n\n this.inputPosition =\n widgetBounds != null\n ? computeInputPosition(\n this.viewer.viewport,\n widgetBounds,\n dragging.points.toArray()\n )\n : undefined;\n }\n };\n\n private getDisplayedAngle = (): number | undefined => {\n const draggingIdentifier =\n this.dragging?.identifier ?? this.lastDragged?.identifier;\n if (draggingIdentifier?.includes('rotate')) {\n return this.inputValue;\n }\n };\n\n private getDisplayedDistance = (): number | undefined => {\n const draggingIdentifier =\n this.dragging?.identifier ?? this.lastDragged?.identifier;\n if (draggingIdentifier?.includes('translate')) {\n return this.inputValue;\n }\n };\n\n private getTransformForNewPosition = (\n newPosition?: Vector3.Vector3\n ): Matrix4.Matrix4 | undefined => {\n if (newPosition != null) {\n const c =\n this.currentTransform != null\n ? this.currentTransform\n : Matrix4.makeIdentity();\n\n const currentRotation = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(c)\n );\n const position = Matrix4.makeTranslation(newPosition);\n\n return Matrix4.multiply(position, currentRotation);\n }\n };\n\n private getTransformForNewRotation = (\n newRotationEuler: Euler.Euler\n ): Matrix4.Matrix4 | undefined => {\n const c =\n this.currentTransform != null\n ? this.currentTransform\n : Matrix4.makeIdentity();\n\n const oldRotation = Matrix4.invert(\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(c))\n );\n\n const newRotation = Matrix4.makeRotation(\n Quaternion.fromEuler(newRotationEuler)\n );\n const oldTranslation = Matrix4.multiply(c, oldRotation);\n\n return Matrix4.multiply(oldTranslation, newRotation);\n };\n\n private getCanvasBounds = (): DOMRect | undefined => {\n if (this.canvasBounds != null) {\n return this.canvasBounds;\n } else if (this.canvasRef != null) {\n this.updateCanvasBounds(this.canvasRef);\n return this.canvasBounds;\n }\n };\n\n private getTransformWidget = (): TransformWidget => {\n if (this.widget == null && this.canvasRef != null) {\n return this.setupTransformWidget(this.canvasRef);\n } else if (this.widget != null) {\n return this.widget;\n } else {\n throw new Error(\n 'Transform widget was not initialized. The canvas element may not have been initialized.'\n );\n }\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Copyright (c) 2024 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import{d as e,N as t,w as r,p as n,b as a}from"./p-e4ea1075.js";import{g as i}from"./p-446bdb50.js";import"./p-88c19f38.js";const o=e=>`__sc_import_${e.replace(/\s|-/g,"_")}`;const s=()=>{const a=Array.from(e.querySelectorAll("script")).find((e=>new RegExp(`/${t}(\\.esm)?\\.js($|\\?|#)`).test(e.src)||e.getAttribute("data-stencil-namespace")===t));const i="";const o={};if(i!==""){o.resourcesUrl=new URL(".",i).href}else{o.resourcesUrl=new URL(".",new URL(a.getAttribute("data-resources-url")||a.src,r.location.href)).href;{l(o.resourcesUrl,a)}if(!r.customElements){return __sc_import_viewer("./p-093f9bdb.js").then((()=>o))}}return n(o)};const l=(n,a)=>{const i=o(t);try{r[i]=new Function("w",`return import(w);//${Math.random()}`)}catch(t){const o=new Map;r[i]=t=>{const s=new URL(t,n).href;let l=o.get(s);if(!l){const t=e.createElement("script");t.type="module";t.crossOrigin=a.crossOrigin;t.src=URL.createObjectURL(new Blob([`import * as m from '${s}'; window.${i}.m = m;`],{type:"application/javascript"}));l=new Promise((e=>{t.onload=()=>{e(r[i].m);t.remove()}}));o.set(s,l);e.head.appendChild(t)}return l}}};s().then((e=>{i();return a(JSON.parse('[["p-7aee464a",[[1,"vertex-viewer-pin-tool",{"pinController":[1040],"pinModel":[16],"viewer":[16],"tool":[1025],"mode":[1025],"primaryColor":[1025,"primary-color"],"accentColor":[1025,"accent-color"],"pins":[32],"selectedPinId":[32],"elementBounds":[32],"projectionViewMatrix":[32]}]]],["p-07b05774",[[1,"vertex-scene-tree",{"overScanCount":[2,"over-scan-count"],"viewerSelector":[1,"viewer-selector"],"viewer":[1040],"rowData":[16],"config":[1],"configEnv":[1,"config-env"],"controller":[1040],"metadataSearchExactMatch":[1028,"metadata-search-exact-match"],"metadataSearchKeys":[1040],"metadataKeys":[16],"rows":[32],"totalRows":[32],"showLoader":[32],"showEmptyResults":[32],"stateMap":[32],"errorDetails":[32],"attemptingRetry":[32],"invalidateRows":[64],"scrollToIndex":[64],"scrollToItem":[64],"expandAll":[64],"collapseAll":[64],"expandItem":[64],"collapseItem":[64],"toggleExpandItem":[64],"toggleItemVisibility":[64],"hideItem":[64],"showItem":[64],"selectItem":[64],"deselectItem":[64],"getRowAtIndex":[64],"getRowForEvent":[64],"getRowAtClientY":[64],"filterItems":[64],"selectFilteredItems":[64],"fetchMetadataKeys":[64]},[[0,"search","handleSearch"],[0,"cellLoaded","handleCellLoaded"]]]]],["p-0669d984",[[1,"vertex-viewer-default-toolbar",{"viewer":[16],"placement":[1],"direction":[1],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"]}]]],["p-6a9a13f9",[[1,"vertex-viewer-markup",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"selectedMarkupId":[1025,"selected-markup-id"],"selectNew":[4,"select-new"],"startLineAnchorStyle":[1025,"start-line-anchor-style"],"endLineAnchorStyle":[1025,"end-line-anchor-style"],"toSelectMarkupId":[32],"pointerDownPosition":[32],"addMarkup":[64],"removeMarkup":[64],"getMarkupElements":[64],"getMarkupElement":[64]},[[0,"markupEnd","handleMarkupEnd"],[0,"interactionEnd","handleMarkupUpdated"],[1,"pointerdown","handleMarkupPointerDown"]]]]],["p-43c0d1c7",[[1,"vertex-viewer-markup-tool",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"startLineAnchorStyle":[1025,"start-line-anchor-style"],"endLineAnchorStyle":[1025,"end-line-anchor-style"],"stateMap":[32],"reset":[64]}]]],["p-9ff0ff1e",[[1,"vertex-viewer-view-cube",{"xPositiveLabel":[1,"x-positive-label"],"xNegativeLabel":[1,"x-negative-label"],"yPositiveLabel":[1,"y-positive-label"],"yNegativeLabel":[1,"y-negative-label"],"zPositiveLabel":[1,"z-positive-label"],"zNegativeLabel":[1,"z-negative-label"],"standardViewsOff":[4,"standard-views-off"],"animationDuration":[2,"animation-duration"],"triadOff":[4,"triad-off"],"worldOrientation":[1040],"camera":[1040],"viewer":[16],"boxLength":[32],"triadPosition":[32]}]]],["p-f8c3e667",[[1,"vertex-viewer-measurement-distance",{"start":[1040],"startJson":[1,"start-json"],"end":[1040],"endJson":[1,"end-json"],"distance":[1026],"showAxisReferenceLines":[4,"show-axis-reference-lines"],"snapDistance":[2,"snap-distance"],"units":[1],"fractionalDigits":[2,"fractional-digits"],"labelFormatter":[16],"anchorLabelOffset":[2,"anchor-label-offset"],"lineCapLength":[2,"line-cap-length"],"mode":[513],"interactingAnchor":[1537,"interacting-anchor"],"invalid":[1540],"camera":[16],"hitProvider":[16],"indicatorPt":[1040],"viewer":[16],"measurementModel":[16],"viewport":[32],"elementBounds":[32],"interactionCount":[32],"internalCamera":[32],"invalidateStateCounter":[32],"stateMap":[32],"measurementUnits":[32],"computeElementMetrics":[64]}]]],["p-a7f22416",[[1,"vertex-viewer-measurement-precise",{"measurementModel":[16],"measurementOverlays":[16],"measurementController":[1040],"measurableEntityTypes":[16],"viewer":[16],"configEnv":[1,"config-env"],"config":[1]}]]],["p-fdc9b263",[[1,"vertex-viewer-box-query-tool",{"viewer":[16],"controller":[1040],"model":[1040],"operationType":[1,"operation-type"],"mode":[1],"details":[32]}]]],["p-60d3af48",[[1,"vertex-viewer-walk-mode-tool",{"viewer":[16],"controller":[1040],"model":[1040],"teleportMode":[1,"teleport-mode"],"enabled":[4]}]]],["p-162cf7f8",[[1,"vertex-scene-tree-table-cell",{"node":[16],"tree":[16],"value":[1],"placeholder":[1],"hovered":[1028],"isScrolling":[4,"is-scrolling"],"expandToggle":[4,"expand-toggle"],"visibilityToggle":[4,"visibility-toggle"],"selectionHandler":[16],"visibilityHandler":[16],"expansionHandler":[16],"hoverController":[16]}]]],["p-9725f5fc",[[1,"vertex-scene-tree-table-column",{"initialWidth":[2,"initial-width"],"minWidth":[2,"min-width"],"maxWidth":[2,"max-width"]}]]],["p-097909a8",[[1,"vertex-scene-tree-table-header"]]],["p-97aed77f",[[1,"vertex-scene-tree-table-resize-divider",{"dragging":[32]}]]],["p-2e194668",[[1,"vertex-scene-tree-toolbar-group"]]],["p-33627452",[[1,"vertex-viewer",{"src":[1],"clientId":[1,"client-id"],"deviceId":[1025,"device-id"],"config":[1],"configEnv":[1,"config-env"],"resolvedConfig":[1040],"cameraControls":[4,"camera-controls"],"cameraType":[1537,"camera-type"],"keyboardControls":[4,"keyboard-controls"],"rotateAroundTapPoint":[4,"rotate-around-tap-point"],"token":[1025],"depthBuffers":[1,"depth-buffers"],"phantom":[16],"noDefaultLights":[4,"no-default-lights"],"enableTemporalRefinement":[4,"enable-temporal-refinement"],"experimentalRenderingOptions":[1,"experimental-rendering-options"],"featureLines":[16],"selectionHighlighting":[16],"featureHighlighting":[16],"featureMaps":[1,"feature-maps"],"resizeDebounce":[2,"resize-debounce"],"frame":[1040],"stream":[1040],"stencilBuffer":[1040],"viewport":[1040],"dimensions":[32],"hostDimensions":[32],"errorMessage":[32],"cursor":[32],"stateMap":[32],"dispatchFrameDrawn":[64],"registerInteractionHandler":[64],"registerTapKeyInteraction":[64],"getInteractionTarget_DEPRECATED":[64],"addCursor":[64],"getInteractionHandlers":[64],"getKeyInteractions":[64],"getBaseInteractionHandler":[64],"getJwt":[64],"load":[64],"unload":[64],"scene":[64],"isSceneReady":[64]},[[0,"tap","handleTapEvent"]]]]],["p-62592193",[[1,"vertex-viewer-hit-result-indicator",{"viewer":[16],"position":[1040],"normal":[1040]}]]],["p-99f65ccc",[[1,"vertex-viewer-measurement-details",{"measurementModel":[16],"measurementOverlays":[16],"measurementOutcome":[1040],"distanceUnits":[1,"distance-units"],"angleUnits":[1,"angle-units"],"fractionalDigits":[2,"fractional-digits"],"distanceFormatter":[16],"angleFormatter":[16],"areaFormatter":[16],"resultTypes":[16],"overlay":[32],"distanceMeasurementUnits":[32],"angleMeasurementUnits":[32],"areaMeasurementUnits":[32]}]]],["p-ff7e05fe",[[1,"vertex-viewer-transform-widget",{"viewer":[16],"position":[1040],"rotation":[1040],"controller":[1040],"xRotationDisabled":[1028,"x-rotation-disabled"],"yRotationDisabled":[1028,"y-rotation-disabled"],"zRotationDisabled":[1028,"z-rotation-disabled"],"xTranslationDisabled":[1028,"x-translation-disabled"],"yTranslationDisabled":[1028,"y-translation-disabled"],"zTranslationDisabled":[1028,"z-translation-disabled"],"distanceUnit":[1,"distance-unit"],"angleUnit":[1,"angle-unit"],"decimalPlaces":[2,"decimal-places"],"hovered":[1040],"inputPosition":[32],"inputValue":[32]}]]],["p-21c01385",[[1,"vertex-viewer-icon",{"name":[1],"size":[1]}]]],["p-1486ba3d",[[0,"vertex-viewer-pin-group",{"pin":[16],"matrix":[1040],"projectionViewMatrix":[16],"elementBounds":[1040],"pinModel":[16],"pinController":[16],"selected":[4],"invalidateStateCounter":[32]}]]],["p-32012ff4",[[1,"vertex-viewer-dom-group",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040]}]]],["p-dfd5a2f9",[[1,"vertex-viewer-teleport-tool",{"viewer":[16],"mode":[1025],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"],"controller":[1040],"model":[1040]}]]],["p-685355a4",[[1,"vertex-viewer-spinner",{"size":[1]}]]],["p-c1bb34fe",[[1,"vertex-scene-tree-search",{"debounce":[2],"disabled":[4],"placeholder":[1],"controller":[16],"value":[1025],"focused":[32],"isSearching":[32],"setFocus":[64],"clear":[64]}],[1,"vertex-scene-tree-table-layout",{"tree":[16],"controller":[16],"rows":[16],"totalRows":[2,"total-rows"],"rowHeight":[1026,"row-height"],"overScanCount":[2,"over-scan-count"],"rowData":[16],"layoutOffset":[1026,"layout-offset"],"scrollOffset":[1026,"scroll-offset"],"layoutHeight":[1026,"layout-height"],"layoutWidth":[1026,"layout-width"],"viewportStartIndex":[1026,"viewport-start-index"],"viewportEndIndex":[1026,"viewport-end-index"],"columnGridLayout":[32],"columnGridFixedLayout":[32],"isComputingCellHeight":[32],"lastDividerPointerPosition":[32],"resizingColumnIndex":[32],"isScrolling":[32],"scrollTimer":[32],"stateMap":[32],"scrollToPosition":[64]}],[1,"vertex-scene-tree-toolbar"]]],["p-1efa143f",[[1,"vertex-viewer-layer",{"stretchOff":[516,"stretch-off"]}]]],["p-c489590d",[[1,"vertex-viewer-toolbar",{"placement":[1],"direction":[1]}],[1,"vertex-viewer-button"],[1,"vertex-viewer-toolbar-group",{"direction":[1]}]]],["p-4fc41956",[[0,"vertex-viewer-pin-label",{"pin":[16],"elementBounds":[16],"value":[1025],"pinController":[16],"focused":[32],"computedScreenPosition":[32],"textareaRows":[32],"contentElBounds":[32],"setFocus":[64]}],[0,"vertex-viewer-pin-label-line",{"pinPoint":[16],"labelPoint":[16],"pin":[16]}]]],["p-21cc4585",[[1,"vertex-viewer-measurement-overlays",{"measurementOverlays":[16],"camera":[1040],"viewer":[16],"overlays":[32]}],[1,"vertex-viewer-measurement-line",{"start":[16],"end":[16],"capLength":[2,"cap-length"],"pointerEvents":[1,"pointer-events"]}]]],["p-38fd5603",[[1,"vertex-viewer-dom-renderer",{"drawMode":[1,"draw-mode"],"viewer":[16],"camera":[1040],"depthBuffer":[1040],"viewport":[32],"invalidateFrameCounter":[32]},[[0,"propertyChange","handlePropertyChange"]]],[1,"vertex-viewer-dom-element",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040],"occlusionOff":[4,"occlusion-off"],"occluded":[516],"billboardOff":[4,"billboard-off"],"interactionsOff":[516,"interactions-off"]}]]],["p-87219042",[[1,"vertex-viewer-markup-arrow",{"start":[1040],"startJson":[1,"start"],"end":[1040],"endJson":[1,"end"],"startLineAnchorStyle":[1025,"start-line-anchor-style"],"endLineAnchorStyle":[1025,"end-line-anchor-style"],"mode":[513],"viewer":[16],"elementBounds":[32],"dispose":[64]}],[1,"vertex-viewer-markup-circle",{"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"dispose":[64]}],[1,"vertex-viewer-markup-freeform",{"points":[1040],"pointsJson":[1,"points"],"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"screenPoints":[32],"dispose":[64]}]]]]'),e)}));
4
+ import{d as e,N as t,w as r,p as n,b as a}from"./p-e4ea1075.js";import{g as i}from"./p-446bdb50.js";import"./p-88c19f38.js";const o=e=>`__sc_import_${e.replace(/\s|-/g,"_")}`;const s=()=>{const a=Array.from(e.querySelectorAll("script")).find((e=>new RegExp(`/${t}(\\.esm)?\\.js($|\\?|#)`).test(e.src)||e.getAttribute("data-stencil-namespace")===t));const i="";const o={};if(i!==""){o.resourcesUrl=new URL(".",i).href}else{o.resourcesUrl=new URL(".",new URL(a.getAttribute("data-resources-url")||a.src,r.location.href)).href;{l(o.resourcesUrl,a)}if(!r.customElements){return __sc_import_viewer("./p-093f9bdb.js").then((()=>o))}}return n(o)};const l=(n,a)=>{const i=o(t);try{r[i]=new Function("w",`return import(w);//${Math.random()}`)}catch(t){const o=new Map;r[i]=t=>{const s=new URL(t,n).href;let l=o.get(s);if(!l){const t=e.createElement("script");t.type="module";t.crossOrigin=a.crossOrigin;t.src=URL.createObjectURL(new Blob([`import * as m from '${s}'; window.${i}.m = m;`],{type:"application/javascript"}));l=new Promise((e=>{t.onload=()=>{e(r[i].m);t.remove()}}));o.set(s,l);e.head.appendChild(t)}return l}}};s().then((e=>{i();return a(JSON.parse('[["p-7aee464a",[[1,"vertex-viewer-pin-tool",{"pinController":[1040],"pinModel":[16],"viewer":[16],"tool":[1025],"mode":[1025],"primaryColor":[1025,"primary-color"],"accentColor":[1025,"accent-color"],"pins":[32],"selectedPinId":[32],"elementBounds":[32],"projectionViewMatrix":[32]}]]],["p-07b05774",[[1,"vertex-scene-tree",{"overScanCount":[2,"over-scan-count"],"viewerSelector":[1,"viewer-selector"],"viewer":[1040],"rowData":[16],"config":[1],"configEnv":[1,"config-env"],"controller":[1040],"metadataSearchExactMatch":[1028,"metadata-search-exact-match"],"metadataSearchKeys":[1040],"metadataKeys":[16],"rows":[32],"totalRows":[32],"showLoader":[32],"showEmptyResults":[32],"stateMap":[32],"errorDetails":[32],"attemptingRetry":[32],"invalidateRows":[64],"scrollToIndex":[64],"scrollToItem":[64],"expandAll":[64],"collapseAll":[64],"expandItem":[64],"collapseItem":[64],"toggleExpandItem":[64],"toggleItemVisibility":[64],"hideItem":[64],"showItem":[64],"selectItem":[64],"deselectItem":[64],"getRowAtIndex":[64],"getRowForEvent":[64],"getRowAtClientY":[64],"filterItems":[64],"selectFilteredItems":[64],"fetchMetadataKeys":[64]},[[0,"search","handleSearch"],[0,"cellLoaded","handleCellLoaded"]]]]],["p-0669d984",[[1,"vertex-viewer-default-toolbar",{"viewer":[16],"placement":[1],"direction":[1],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"]}]]],["p-6a9a13f9",[[1,"vertex-viewer-markup",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"selectedMarkupId":[1025,"selected-markup-id"],"selectNew":[4,"select-new"],"startLineAnchorStyle":[1025,"start-line-anchor-style"],"endLineAnchorStyle":[1025,"end-line-anchor-style"],"toSelectMarkupId":[32],"pointerDownPosition":[32],"addMarkup":[64],"removeMarkup":[64],"getMarkupElements":[64],"getMarkupElement":[64]},[[0,"markupEnd","handleMarkupEnd"],[0,"interactionEnd","handleMarkupUpdated"],[1,"pointerdown","handleMarkupPointerDown"]]]]],["p-43c0d1c7",[[1,"vertex-viewer-markup-tool",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"startLineAnchorStyle":[1025,"start-line-anchor-style"],"endLineAnchorStyle":[1025,"end-line-anchor-style"],"stateMap":[32],"reset":[64]}]]],["p-9ff0ff1e",[[1,"vertex-viewer-view-cube",{"xPositiveLabel":[1,"x-positive-label"],"xNegativeLabel":[1,"x-negative-label"],"yPositiveLabel":[1,"y-positive-label"],"yNegativeLabel":[1,"y-negative-label"],"zPositiveLabel":[1,"z-positive-label"],"zNegativeLabel":[1,"z-negative-label"],"standardViewsOff":[4,"standard-views-off"],"animationDuration":[2,"animation-duration"],"triadOff":[4,"triad-off"],"worldOrientation":[1040],"camera":[1040],"viewer":[16],"boxLength":[32],"triadPosition":[32]}]]],["p-f8c3e667",[[1,"vertex-viewer-measurement-distance",{"start":[1040],"startJson":[1,"start-json"],"end":[1040],"endJson":[1,"end-json"],"distance":[1026],"showAxisReferenceLines":[4,"show-axis-reference-lines"],"snapDistance":[2,"snap-distance"],"units":[1],"fractionalDigits":[2,"fractional-digits"],"labelFormatter":[16],"anchorLabelOffset":[2,"anchor-label-offset"],"lineCapLength":[2,"line-cap-length"],"mode":[513],"interactingAnchor":[1537,"interacting-anchor"],"invalid":[1540],"camera":[16],"hitProvider":[16],"indicatorPt":[1040],"viewer":[16],"measurementModel":[16],"viewport":[32],"elementBounds":[32],"interactionCount":[32],"internalCamera":[32],"invalidateStateCounter":[32],"stateMap":[32],"measurementUnits":[32],"computeElementMetrics":[64]}]]],["p-a7f22416",[[1,"vertex-viewer-measurement-precise",{"measurementModel":[16],"measurementOverlays":[16],"measurementController":[1040],"measurableEntityTypes":[16],"viewer":[16],"configEnv":[1,"config-env"],"config":[1]}]]],["p-fdc9b263",[[1,"vertex-viewer-box-query-tool",{"viewer":[16],"controller":[1040],"model":[1040],"operationType":[1,"operation-type"],"mode":[1],"details":[32]}]]],["p-60d3af48",[[1,"vertex-viewer-walk-mode-tool",{"viewer":[16],"controller":[1040],"model":[1040],"teleportMode":[1,"teleport-mode"],"enabled":[4]}]]],["p-162cf7f8",[[1,"vertex-scene-tree-table-cell",{"node":[16],"tree":[16],"value":[1],"placeholder":[1],"hovered":[1028],"isScrolling":[4,"is-scrolling"],"expandToggle":[4,"expand-toggle"],"visibilityToggle":[4,"visibility-toggle"],"selectionHandler":[16],"visibilityHandler":[16],"expansionHandler":[16],"hoverController":[16]}]]],["p-9725f5fc",[[1,"vertex-scene-tree-table-column",{"initialWidth":[2,"initial-width"],"minWidth":[2,"min-width"],"maxWidth":[2,"max-width"]}]]],["p-097909a8",[[1,"vertex-scene-tree-table-header"]]],["p-97aed77f",[[1,"vertex-scene-tree-table-resize-divider",{"dragging":[32]}]]],["p-2e194668",[[1,"vertex-scene-tree-toolbar-group"]]],["p-33627452",[[1,"vertex-viewer",{"src":[1],"clientId":[1,"client-id"],"deviceId":[1025,"device-id"],"config":[1],"configEnv":[1,"config-env"],"resolvedConfig":[1040],"cameraControls":[4,"camera-controls"],"cameraType":[1537,"camera-type"],"keyboardControls":[4,"keyboard-controls"],"rotateAroundTapPoint":[4,"rotate-around-tap-point"],"token":[1025],"depthBuffers":[1,"depth-buffers"],"phantom":[16],"noDefaultLights":[4,"no-default-lights"],"enableTemporalRefinement":[4,"enable-temporal-refinement"],"experimentalRenderingOptions":[1,"experimental-rendering-options"],"featureLines":[16],"selectionHighlighting":[16],"featureHighlighting":[16],"featureMaps":[1,"feature-maps"],"resizeDebounce":[2,"resize-debounce"],"frame":[1040],"stream":[1040],"stencilBuffer":[1040],"viewport":[1040],"dimensions":[32],"hostDimensions":[32],"errorMessage":[32],"cursor":[32],"stateMap":[32],"dispatchFrameDrawn":[64],"registerInteractionHandler":[64],"registerTapKeyInteraction":[64],"getInteractionTarget_DEPRECATED":[64],"addCursor":[64],"getInteractionHandlers":[64],"getKeyInteractions":[64],"getBaseInteractionHandler":[64],"getJwt":[64],"load":[64],"unload":[64],"scene":[64],"isSceneReady":[64]},[[0,"tap","handleTapEvent"]]]]],["p-62592193",[[1,"vertex-viewer-hit-result-indicator",{"viewer":[16],"position":[1040],"normal":[1040]}]]],["p-99f65ccc",[[1,"vertex-viewer-measurement-details",{"measurementModel":[16],"measurementOverlays":[16],"measurementOutcome":[1040],"distanceUnits":[1,"distance-units"],"angleUnits":[1,"angle-units"],"fractionalDigits":[2,"fractional-digits"],"distanceFormatter":[16],"angleFormatter":[16],"areaFormatter":[16],"resultTypes":[16],"overlay":[32],"distanceMeasurementUnits":[32],"angleMeasurementUnits":[32],"areaMeasurementUnits":[32]}]]],["p-24b66b64",[[1,"vertex-viewer-transform-widget",{"viewer":[16],"position":[1040],"rotation":[1040],"controller":[1040],"xRotationDisabled":[1028,"x-rotation-disabled"],"yRotationDisabled":[1028,"y-rotation-disabled"],"zRotationDisabled":[1028,"z-rotation-disabled"],"xTranslationDisabled":[1028,"x-translation-disabled"],"yTranslationDisabled":[1028,"y-translation-disabled"],"zTranslationDisabled":[1028,"z-translation-disabled"],"showInputs":[4,"show-inputs"],"distanceUnit":[1,"distance-unit"],"angleUnit":[1,"angle-unit"],"decimalPlaces":[2,"decimal-places"],"hovered":[1040],"inputPosition":[32],"inputValue":[32]}]]],["p-21c01385",[[1,"vertex-viewer-icon",{"name":[1],"size":[1]}]]],["p-1486ba3d",[[0,"vertex-viewer-pin-group",{"pin":[16],"matrix":[1040],"projectionViewMatrix":[16],"elementBounds":[1040],"pinModel":[16],"pinController":[16],"selected":[4],"invalidateStateCounter":[32]}]]],["p-32012ff4",[[1,"vertex-viewer-dom-group",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040]}]]],["p-dfd5a2f9",[[1,"vertex-viewer-teleport-tool",{"viewer":[16],"mode":[1025],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"],"controller":[1040],"model":[1040]}]]],["p-685355a4",[[1,"vertex-viewer-spinner",{"size":[1]}]]],["p-c1bb34fe",[[1,"vertex-scene-tree-search",{"debounce":[2],"disabled":[4],"placeholder":[1],"controller":[16],"value":[1025],"focused":[32],"isSearching":[32],"setFocus":[64],"clear":[64]}],[1,"vertex-scene-tree-table-layout",{"tree":[16],"controller":[16],"rows":[16],"totalRows":[2,"total-rows"],"rowHeight":[1026,"row-height"],"overScanCount":[2,"over-scan-count"],"rowData":[16],"layoutOffset":[1026,"layout-offset"],"scrollOffset":[1026,"scroll-offset"],"layoutHeight":[1026,"layout-height"],"layoutWidth":[1026,"layout-width"],"viewportStartIndex":[1026,"viewport-start-index"],"viewportEndIndex":[1026,"viewport-end-index"],"columnGridLayout":[32],"columnGridFixedLayout":[32],"isComputingCellHeight":[32],"lastDividerPointerPosition":[32],"resizingColumnIndex":[32],"isScrolling":[32],"scrollTimer":[32],"stateMap":[32],"scrollToPosition":[64]}],[1,"vertex-scene-tree-toolbar"]]],["p-1efa143f",[[1,"vertex-viewer-layer",{"stretchOff":[516,"stretch-off"]}]]],["p-c489590d",[[1,"vertex-viewer-toolbar",{"placement":[1],"direction":[1]}],[1,"vertex-viewer-button"],[1,"vertex-viewer-toolbar-group",{"direction":[1]}]]],["p-4fc41956",[[0,"vertex-viewer-pin-label",{"pin":[16],"elementBounds":[16],"value":[1025],"pinController":[16],"focused":[32],"computedScreenPosition":[32],"textareaRows":[32],"contentElBounds":[32],"setFocus":[64]}],[0,"vertex-viewer-pin-label-line",{"pinPoint":[16],"labelPoint":[16],"pin":[16]}]]],["p-21cc4585",[[1,"vertex-viewer-measurement-overlays",{"measurementOverlays":[16],"camera":[1040],"viewer":[16],"overlays":[32]}],[1,"vertex-viewer-measurement-line",{"start":[16],"end":[16],"capLength":[2,"cap-length"],"pointerEvents":[1,"pointer-events"]}]]],["p-38fd5603",[[1,"vertex-viewer-dom-renderer",{"drawMode":[1,"draw-mode"],"viewer":[16],"camera":[1040],"depthBuffer":[1040],"viewport":[32],"invalidateFrameCounter":[32]},[[0,"propertyChange","handlePropertyChange"]]],[1,"vertex-viewer-dom-element",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040],"occlusionOff":[4,"occlusion-off"],"occluded":[516],"billboardOff":[4,"billboard-off"],"interactionsOff":[516,"interactions-off"]}]]],["p-87219042",[[1,"vertex-viewer-markup-arrow",{"start":[1040],"startJson":[1,"start"],"end":[1040],"endJson":[1,"end"],"startLineAnchorStyle":[1025,"start-line-anchor-style"],"endLineAnchorStyle":[1025,"end-line-anchor-style"],"mode":[513],"viewer":[16],"elementBounds":[32],"dispose":[64]}],[1,"vertex-viewer-markup-circle",{"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"dispose":[64]}],[1,"vertex-viewer-markup-freeform",{"points":[1040],"pointsJson":[1,"points"],"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"screenPoints":[32],"dispose":[64]}]]]]'),e)}));
5
5
  //# sourceMappingURL=viewer.esm.js.map