@vertexvis/viewer 1.1.1-testing.4 → 1.1.1-testing.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/dist/cjs/{config-BY0v6BSK.js → config-OELTgslY.js} +3 -3
  2. package/dist/cjs/{config-BY0v6BSK.js.map → config-OELTgslY.js.map} +1 -1
  3. package/dist/cjs/{entities-CEaa12yP.js → entities-rj-TEPKc.js} +4 -4
  4. package/dist/cjs/{entities-CEaa12yP.js.map → entities-rj-TEPKc.js.map} +1 -1
  5. package/dist/cjs/{geometry_pb-EVfAEuPO.js → geometry_pb-asn2mNvW.js} +3 -3
  6. package/dist/cjs/{geometry_pb-EVfAEuPO.js.map → geometry_pb-asn2mNvW.js.map} +1 -1
  7. package/dist/cjs/index.cjs.js +5 -5
  8. package/dist/cjs/{queries-LthBzEHD.js → queries-e19TP_oF.js} +4 -4
  9. package/dist/cjs/{queries-LthBzEHD.js.map → queries-e19TP_oF.js.map} +1 -1
  10. package/dist/cjs/{regl-component-B_JaaVlv.js → regl-component-DjVaO3t3.js} +3 -3
  11. package/dist/cjs/{regl-component-B_JaaVlv.js.map → regl-component-DjVaO3t3.js.map} +1 -1
  12. package/dist/cjs/{representation_pb-B6XR10pQ.js → representation_pb-BVBPrHLf.js} +3 -3
  13. package/dist/cjs/{representation_pb-B6XR10pQ.js.map → representation_pb-BVBPrHLf.js.map} +1 -1
  14. package/dist/cjs/{streamAttributes-nCF7u7lv.js → streamAttributes-M3UUIO3l.js} +117 -94
  15. package/dist/cjs/streamAttributes-M3UUIO3l.js.map +1 -0
  16. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +1 -1
  17. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
  18. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +2 -2
  19. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
  20. package/dist/cjs/vertex-scene-tree.cjs.entry.js +2 -2
  21. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
  22. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +2 -2
  23. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +2 -2
  24. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +2 -2
  25. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +2 -2
  26. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +4 -4
  27. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +3 -3
  28. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +2 -2
  29. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
  30. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +3 -3
  31. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
  32. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +1 -1
  33. package/dist/cjs/vertex-viewer.cjs.entry.js +4 -4
  34. package/dist/collection/components/scene-tree-search/scene-tree-search.js +1 -1
  35. package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
  36. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
  37. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
  38. package/dist/collection/components/viewer-pin-label/viewer-pin-label.js +2 -2
  39. package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
  40. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js +1 -1
  41. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
  42. package/dist/collection/workers/png-decoder-pool.js +4 -3
  43. package/dist/collection/workers/png-decoder-pool.js.map +1 -1
  44. package/dist/components/index.js +1 -1
  45. package/dist/components/{p-COznr3CH.js → p-5bk1mHRt.js} +2 -2
  46. package/dist/components/{p-D3bzgaCV.js → p-B8530k7R.js} +2 -2
  47. package/dist/components/{p-CWcvgy8e.js → p-BCuMPvZO.js} +2 -2
  48. package/dist/components/{p-DTwJX9HL.js → p-BgzjmANj.js} +2 -2
  49. package/dist/components/{p-DTwJX9HL.js.map → p-BgzjmANj.js.map} +1 -1
  50. package/dist/components/p-BjvjKoy7.js +5 -0
  51. package/dist/components/p-BjvjKoy7.js.map +1 -0
  52. package/dist/components/{p-Cxz4L6FA.js → p-Bwtyddca.js} +2 -2
  53. package/dist/components/{p-Ca253f0h.js → p-Bx42CNGV.js} +2 -2
  54. package/dist/components/p-C86HMDzi.js +5 -0
  55. package/dist/components/{p-Y8W_BXUk.js.map → p-C86HMDzi.js.map} +1 -1
  56. package/dist/components/p-CSVgoQU8.js +5 -0
  57. package/dist/components/{p-Cku0WCYo.js.map → p-CSVgoQU8.js.map} +1 -1
  58. package/dist/components/{p-D3in41xo.js → p-CTi-0-dI.js} +2 -2
  59. package/dist/components/{p-D1Vdomj_.js → p-D_h07qsA.js} +2 -2
  60. package/dist/components/{p-BNRm88jS.js → p-KidjtXKE.js} +2 -2
  61. package/dist/components/vertex-scene-tree-search.js +1 -1
  62. package/dist/components/vertex-scene-tree-table-cell.js +1 -1
  63. package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
  64. package/dist/components/vertex-scene-tree.js +1 -1
  65. package/dist/components/vertex-viewer-dom-renderer.js +1 -1
  66. package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
  67. package/dist/components/vertex-viewer-measurement-details.js +1 -1
  68. package/dist/components/vertex-viewer-measurement-distance.js +1 -1
  69. package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
  70. package/dist/components/vertex-viewer-measurement-precise.js +1 -1
  71. package/dist/components/vertex-viewer-pin-group.js +1 -1
  72. package/dist/components/vertex-viewer-pin-label.js +1 -1
  73. package/dist/components/vertex-viewer-pin-tool.js +1 -1
  74. package/dist/components/vertex-viewer-transform-widget.js +1 -1
  75. package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
  76. package/dist/components/vertex-viewer-view-cube.js +1 -1
  77. package/dist/components/vertex-viewer.js +1 -1
  78. package/dist/esm/{config-ss9ha12b.js → config-Cqrcty7U.js} +3 -3
  79. package/dist/esm/{config-ss9ha12b.js.map → config-Cqrcty7U.js.map} +1 -1
  80. package/dist/esm/{entities-DEFAhYdV.js → entities-CawBZH7i.js} +4 -4
  81. package/dist/esm/{entities-DEFAhYdV.js.map → entities-CawBZH7i.js.map} +1 -1
  82. package/dist/esm/{geometry_pb-D7fM1PYG.js → geometry_pb-COdZQiRi.js} +3 -3
  83. package/dist/esm/{geometry_pb-D7fM1PYG.js.map → geometry_pb-COdZQiRi.js.map} +1 -1
  84. package/dist/esm/index.js +5 -5
  85. package/dist/esm/index.mjs +5 -5
  86. package/dist/esm/{queries-BcmE5Zbq.js → queries-B4XotYyr.js} +4 -4
  87. package/dist/esm/{queries-BcmE5Zbq.js.map → queries-B4XotYyr.js.map} +1 -1
  88. package/dist/esm/{regl-component-gIonUTBJ.js → regl-component-B1_h3_s8.js} +3 -3
  89. package/dist/esm/{regl-component-gIonUTBJ.js.map → regl-component-B1_h3_s8.js.map} +1 -1
  90. package/dist/esm/{representation_pb-Bf023NuN.js → representation_pb-C4MJfZMo.js} +3 -3
  91. package/dist/esm/{representation_pb-Bf023NuN.js.map → representation_pb-C4MJfZMo.js.map} +1 -1
  92. package/dist/esm/{streamAttributes-Bj2xDHfI.js → streamAttributes-BW9JzMeG.js} +116 -93
  93. package/dist/esm/streamAttributes-BW9JzMeG.js.map +1 -0
  94. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +1 -1
  95. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
  96. package/dist/esm/vertex-scene-tree-table-cell.entry.js +2 -2
  97. package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
  98. package/dist/esm/vertex-scene-tree.entry.js +2 -2
  99. package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
  100. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +2 -2
  101. package/dist/esm/vertex-viewer-measurement-details.entry.js +2 -2
  102. package/dist/esm/vertex-viewer-measurement-distance.entry.js +2 -2
  103. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +2 -2
  104. package/dist/esm/vertex-viewer-measurement-precise.entry.js +4 -4
  105. package/dist/esm/vertex-viewer-pin-group.entry.js +3 -3
  106. package/dist/esm/vertex-viewer-pin-label_2.entry.js +2 -2
  107. package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
  108. package/dist/esm/vertex-viewer-transform-widget.entry.js +3 -3
  109. package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
  110. package/dist/esm/vertex-viewer-view-cube.entry.js +1 -1
  111. package/dist/esm/vertex-viewer.entry.js +4 -4
  112. package/dist/types/workers/png-decoder-pool.d.ts +0 -1
  113. package/dist/viewer/index.esm.js +1 -1
  114. package/dist/viewer/{p-00540193.entry.js → p-1506f9a2.entry.js} +2 -2
  115. package/dist/viewer/{p-5cfb3047.entry.js → p-293d8f3f.entry.js} +2 -2
  116. package/dist/viewer/{p-9a39315d.entry.js → p-2faddbf8.entry.js} +2 -2
  117. package/dist/viewer/{p-7cb9c9bb.entry.js → p-36349a80.entry.js} +2 -2
  118. package/dist/viewer/p-36349a80.entry.js.map +1 -0
  119. package/dist/viewer/p-44395076.entry.js +5 -0
  120. package/dist/viewer/{p-e4913b06.entry.js.map → p-44395076.entry.js.map} +1 -1
  121. package/dist/viewer/{p-30a5748d.entry.js → p-45cc095e.entry.js} +2 -2
  122. package/dist/viewer/{p-d5a57757.entry.js → p-93311f46.entry.js} +2 -2
  123. package/dist/viewer/{p-CyiY_hsD.js → p-BEOO-Ypv.js} +2 -2
  124. package/dist/viewer/{p-CyiY_hsD.js.map → p-BEOO-Ypv.js.map} +1 -1
  125. package/dist/viewer/{p-CS8PfgcI.js → p-BJGbLthH.js} +2 -2
  126. package/dist/viewer/{p-CS8PfgcI.js.map → p-BJGbLthH.js.map} +1 -1
  127. package/dist/viewer/{p-D2IEHEGM.js → p-Br21pGVj.js} +2 -2
  128. package/dist/viewer/{p-D2IEHEGM.js.map → p-Br21pGVj.js.map} +1 -1
  129. package/dist/viewer/{p-kMZA0v7I.js → p-Bw_ryWU0.js} +2 -2
  130. package/dist/viewer/{p-kMZA0v7I.js.map → p-Bw_ryWU0.js.map} +1 -1
  131. package/dist/viewer/{p-DHK23fw4.js → p-C4_1Jc7H.js} +2 -2
  132. package/dist/viewer/{p-DHK23fw4.js.map → p-C4_1Jc7H.js.map} +1 -1
  133. package/dist/viewer/p-Cc3XhAoA.js +5 -0
  134. package/dist/viewer/p-Cc3XhAoA.js.map +1 -0
  135. package/dist/viewer/p-DYDhLlLS.js +5 -0
  136. package/dist/viewer/{p-_LpaX1ga.js.map → p-DYDhLlLS.js.map} +1 -1
  137. package/dist/viewer/{p-48020de1.entry.js → p-a94b626c.entry.js} +2 -2
  138. package/dist/viewer/{p-b79c295a.entry.js → p-ced98004.entry.js} +2 -2
  139. package/dist/viewer/{p-32a51a21.entry.js → p-dcb6ddfe.entry.js} +2 -2
  140. package/dist/viewer/p-dcb6ddfe.entry.js.map +1 -0
  141. package/dist/viewer/{p-cc835213.entry.js → p-ea45c3e9.entry.js} +2 -2
  142. package/dist/viewer/p-ebd9dd99.entry.js +5 -0
  143. package/dist/viewer/p-ebd9dd99.entry.js.map +1 -0
  144. package/dist/viewer/{p-edc2f914.entry.js → p-ecd594f2.entry.js} +2 -2
  145. package/dist/viewer/p-fec5a15d.entry.js +5 -0
  146. package/dist/viewer/p-fec5a15d.entry.js.map +1 -0
  147. package/dist/viewer/viewer.esm.js +1 -1
  148. package/package.json +9 -9
  149. package/dist/cjs/streamAttributes-nCF7u7lv.js.map +0 -1
  150. package/dist/components/p-Cku0WCYo.js +0 -5
  151. package/dist/components/p-CvEK3ZK1.js +0 -5
  152. package/dist/components/p-CvEK3ZK1.js.map +0 -1
  153. package/dist/components/p-Y8W_BXUk.js +0 -5
  154. package/dist/esm/streamAttributes-Bj2xDHfI.js.map +0 -1
  155. package/dist/viewer/p-32a51a21.entry.js.map +0 -1
  156. package/dist/viewer/p-4dd67d16.entry.js +0 -5
  157. package/dist/viewer/p-4dd67d16.entry.js.map +0 -1
  158. package/dist/viewer/p-7cb9c9bb.entry.js.map +0 -1
  159. package/dist/viewer/p-BhKTTmpL.js +0 -5
  160. package/dist/viewer/p-BhKTTmpL.js.map +0 -1
  161. package/dist/viewer/p-_LpaX1ga.js +0 -5
  162. package/dist/viewer/p-e4913b06.entry.js +0 -5
  163. package/dist/viewer/p-fd3a5837.entry.js +0 -5
  164. package/dist/viewer/p-fd3a5837.entry.js.map +0 -1
  165. /package/dist/components/{p-COznr3CH.js.map → p-5bk1mHRt.js.map} +0 -0
  166. /package/dist/components/{p-D3bzgaCV.js.map → p-B8530k7R.js.map} +0 -0
  167. /package/dist/components/{p-CWcvgy8e.js.map → p-BCuMPvZO.js.map} +0 -0
  168. /package/dist/components/{p-Cxz4L6FA.js.map → p-Bwtyddca.js.map} +0 -0
  169. /package/dist/components/{p-Ca253f0h.js.map → p-Bx42CNGV.js.map} +0 -0
  170. /package/dist/components/{p-D3in41xo.js.map → p-CTi-0-dI.js.map} +0 -0
  171. /package/dist/components/{p-D1Vdomj_.js.map → p-D_h07qsA.js.map} +0 -0
  172. /package/dist/components/{p-BNRm88jS.js.map → p-KidjtXKE.js.map} +0 -0
  173. /package/dist/viewer/{p-00540193.entry.js.map → p-1506f9a2.entry.js.map} +0 -0
  174. /package/dist/viewer/{p-5cfb3047.entry.js.map → p-293d8f3f.entry.js.map} +0 -0
  175. /package/dist/viewer/{p-9a39315d.entry.js.map → p-2faddbf8.entry.js.map} +0 -0
  176. /package/dist/viewer/{p-30a5748d.entry.js.map → p-45cc095e.entry.js.map} +0 -0
  177. /package/dist/viewer/{p-d5a57757.entry.js.map → p-93311f46.entry.js.map} +0 -0
  178. /package/dist/viewer/{p-48020de1.entry.js.map → p-a94b626c.entry.js.map} +0 -0
  179. /package/dist/viewer/{p-b79c295a.entry.js.map → p-ced98004.entry.js.map} +0 -0
  180. /package/dist/viewer/{p-cc835213.entry.js.map → p-ea45c3e9.entry.js.map} +0 -0
  181. /package/dist/viewer/{p-edc2f914.entry.js.map → p-ecd594f2.entry.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["focusInputElement","element","window","document","activeElement","focus","setSelectionRange","value","length","convertPointToCanvas","point","bounds","Point","create","x","left","y","top","undefined","convertCanvasPointToWorld","frame","viewport","transform","position","Vector3","fromMatrixPosition","ray","transformPointToRay","image","scene","camera","isOrthographic","offsetPoint","Ray","at","origin","direction","magnitude","viewVector","intersectPlane","Plane","fromNormalAndCoplanarPoint","computeInputDeltaTransform","current","identifier","lastValue","distanceUnit","angleUnit","Matrix4","multiply","computeInputGlobalTransform","units","DistanceUnits","angles","AngleUnits","rotation","convertFrom","convertRealValueToWorld","makeTranslation","transpose","makeRotation","Quaternion","fromAxisAngle","down","forward","makeIdentity","eulerOrderForIdentifier","computeInputDisplayValue","start","fromMatrixRotation","transformDiff","invert","relativeTranslationDiff","multiplyByTransformMatrixColumnMajor","relativeRotationDiff","Euler","fromRotationMatrix","convertWorldValueToReal","z","convertTo","Angle","normalizeRadians","computeHandleDeltaTransform","previous","next","angle","computeHandleGlobalTransform","subtract","currentTransformationMatrix","translationVectorWorld","performTranslationConstrainedToAxis","right","up","back","performTranslationConstrainedToPlane","performRotationAroundAxis","localRotationAxis","rotationAngle","worldRotationAxis","computeRotationAxis","worldRotationQuaternion","worldRotationMatrix","changeOfBasisToWorld","multiplyByTransformMatrixRowMajor","worldNegatedRotationAxis","negate","dot","constrainToLocalAxis","constrainToLocalAxisUnitVector","normalize","constrainToWorldAxis","translationVectorProjectedToWorldAxis","project","translationMatrix","localNormalVectorToPlane","localNormalVectorToPlaneUnitVector","worldNormalVectorToPlane","currentPosition","worldPlaneToConstrainTranslationTo","translationVectorProjectedToWorldPlane","projectPoint","constrainedTranslationVector","add","scale","constant","normal","computeInputPosition","shapePoints","Error","paddedBounds","Rectangle","pad","canvasPoints","map","sp","transformNdcPointToViewport","topLeft","topRight","width","bottomRight","bottomLeft","center","reduce","sum","pt","closestPoint","closest","distance","placement","calculateNewRotationAngle","event","rotationSnapKey","angleOfRotation","lastAngle","existingAngle","rotationSnapDegrees","rotationSnapKeyIsHeld","altKey","ctrlKey","metaKey","shiftKey","Number","isInteger","angleChangeRelativeToLastAngle","angleChangeRelativeToLastAngleDegrees","toDegrees","angleChangeRounded","Math","round","existingAngleRounded","neededAdjustmentDueToExistingAngle","adjustedAngle","angleChangeRoundedRadians","toRadians","TransformWidgetInputWrapper","ref","displayUnit","children","inputPlacement","constrainInputToViewport","Dimensions","h","class","style","height","unit","abbreviatedName","TransformWidgetInput","disabled","onChange","onIncrement","onDecrement","onBlur","onUndo","handleChange","target","parsed","parseFloat","isNaN","handleKeyDown","commandOrControlModifier","key","preventDefault","type","onKeyDown","constrainTo","dimension","min","max","inputDimensions","padding","dimensions","paddedWidth","paddedHeight","toCssLength","bottom","xAxisRotationPositions","widgetTransform","triangleSize","rotationSizeScalar","translationSizeScalar","computeRotationNdcValues","yAxisRotationPositions","zAxisRotationPositions","xDirection","yDirection","transformedDirection","transformedX","transformedY","relativePositionScalar","basePosition","xRay","yRay","rotationAxis","cross","base","rotateAboutAxis","TriangleMeshPoints","projectionViewMatrix","testDrawable","drawable","TriangleMesh","testTriangleMesh","mesh","testTriangle","points","worldLeft","worldRight","worldTip","worldBase","edge1","edge2","epsilon","BoundingBox","_a","fromVectors","p","det","abs","t","u","q","v","r","TransformWidget","ReglComponent","constructor","canvasElement","customization","initialDisabledAxes","super","this","disabledAxis","xTranslation","yTranslation","zTranslation","xyTranslation","xzTranslation","yzTranslation","xRotation","yRotation","zRotation","axisLines","rotationLines","translationMeshes","rotationMeshes","hoveredChanged","EventDispatcher","xArrowFillColor","colors","xArrow","yArrowFillColor","_b","yArrow","zArrowFillColor","_c","zArrow","hoveredArrowFillColor","_d","hovered","outlineColor","_e","outline","_f","_g","_h","_j","_k","_l","_m","_o","_p","dispose","reglFrameDisposable","cancel","getDrawableElements","drawableElements","getFullBounds","fullBounds","boundsContainsPoint","interactiveBounds","containsPoints","updateDisabledAxis","axis","updateDisabledOnDrawables","updateCursor","cursor","updateHovered","clearHovered","updateTransform","updateAndDraw","clear","updateColors","twoAxesSquareFillColor","twoAxesSquare","updateFillColor","getXTranslationColor","getYTranslationColor","getZTranslationColor","getXRotationColor","getYRotationColor","getZRotationColor","getTwoAxesTranslationColor","_q","_r","hoveredElement","updateScalars","scalars","updateElements","onHoveredChanged","listener","on","setDisabled","xyRotationLine","xzRotationLine","yzRotationLine","yxRotationLine","zxRotationLine","zyRotationLine","previousHovered","currentFrame","filter","el","valid","isDisabled","find","m","emit","clearFillColorOfPreviouslyHovered","initialFillColor","hasData","createOrUpdateElements","createElements","computeDrawable2dBounds","reglCommand","regl","canvas","extensions","createShape","shapeBuilder","computeTriangleSize","xAxisArrowPositions","xAxis","AxisLine","axisPositions","yAxisArrowPositions","yAxis","zAxisArrowPositions","zAxis","xyAxisTranslationPositions","xzAxisTranslationPositions","yzAxisTranslationPositions","createRotationLines","availableElements","xyRotationLinePoints","rotationAxisPositions","xzRotationLinePoints","yxRotationLinePoints","yzRotationLinePoints","zxRotationLinePoints","zyRotationLinePoints","RotationLine","l","updatePoints","_s","_t","_u","_v","_w","_x","_y","_z","_0","_1","_2","_3","_4","_5","viewerTransformWidgetCss","ViewerTransformWidget","hostRef","xRotationDisabled","yRotationDisabled","zRotationDisabled","xTranslationDisabled","yTranslationDisabled","zTranslationDisabled","xyTranslationDisabled","xzTranslationDisabled","yzTranslationDisabled","showInputs","decimalPlaces","translationHandleScalar","rotationHandleScalar","interactionThrottle","EXPERIMENTAL_undoKeybindings","inputValue","isEndingTransform","inputShouldFocus","xArrowColor","yArrowColor","zArrowColor","twoAxesSquareColor","hoveredColor","handleHoveredDrawableChanged","handleViewerFrameDrawn","updatePropsFromViewer","handleViewerDimensionsChange","writeDOM","viewer","canvasRef","updateCanvasBounds","handleResize","handleInputResize","inputWrapperRef","wrapperElement","readDOM","inputBounds","getBoundingClientRect","handleStyleChange","hostStyles","getComputedStyle","hostEl","getPropertyValue","trim","getTransformWidget","handlePointerMove","dragging","canvasPoint","clientX","clientY","getCanvasBounds","widget","handleBeginDrag","async","canvasBounds","lastDragged","dragStartTransform","currentTransform","updateInputPosition","updateInputValue","currentCanvas","widgetCenter","transformWorldToViewport","fromPoints","lastWorldPosition","interactionStarted","removeEventListener","addEventListener","handleDragWithTimer","handleEndTransform","lastMouseEvent","interactionTimer","setTimeout","handleDrag","controller","beginTransform","currentWorld","angleToUse","getDisplayedAngle","beginEndTransform","delta","getCurrentDelta","endTransform","interactionEnded","e","console","error","completeEndTransform","handleInputStep","step","lastInputValue","isModifyingAngleUnits","updateTransformFromInput","handleInputChange","stopPropagation","EXPERIMENTAL_undo","startingTransform","endTransformDebounced","updateFrame","setupTransformWidget","debug","JSON","stringify","effectiveArrowScalar","getTranslationScalar","effectiveSquareScalar","getRotationScalar","getTransformForNewRotation","getTransformForNewPosition","handleSettingDisabledAxis","hoveredChangeDisposable","updateDimensions","isDraggingTwoAxesTranslation","inputRef","definedValue","getDisplayedDistance","displayValue","toFixed","widgetBounds","inputPosition","toArray","draggingIdentifier","includes","warn","getDisplayedUnits","newPosition","c","currentRotation","newRotationEuler","oldRotation","newRotation","fromEuler","oldTranslation","componentDidLoad","canvasResizeObserver","ResizeObserver","inputResizeObserver","hostStyleObserver","MutationObserver","observe","attributes","attributeFilter","handleViewerChanged","disconnectedCallback","disconnect","componentDidRender","undoDelta","EXPERIMENTAL_undoTransform","newViewer","oldViewer","stream","TransformController","handleDisabledPropertyChanged","handleTransformHandleScalarChanged","handleRotationChanged","rotationToApply","isIdentity","rotationChanged","handlePositionChanged","oldPosition","clearTransform","positionChanged","handleInputFormattingChanged","render","Host","classNames","tabindex","onPointerDown","unobserve"],"sources":["src/components/viewer-transform-widget/dom.ts","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"],"sourcesContent":["export function focusInputElement(element: HTMLInputElement): void {\n if (window.document.activeElement !== element) {\n element.focus();\n element.setSelectionRange(element.value.length, element.value.length);\n }\n}\n","import {\n Angle,\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 { ModifierKey } from '../../lib/types/keys';\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 const ray = viewport.transformPointToRay(\n point,\n frame.image,\n frame.scene.camera,\n );\n\n if (frame.scene.camera.isOrthographic()) {\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 return Ray.intersectPlane(\n ray,\n Plane.fromNormalAndCoplanarPoint(\n frame.scene.camera.direction,\n position,\n ),\n );\n }\n }\n return undefined;\n}\n\nexport function computeInputDeltaTransform(\n current: Matrix4.Matrix4,\n identifier: string,\n value: number,\n lastValue: number,\n distanceUnit: DistanceUnitType,\n angleUnit: AngleUnitType,\n): Matrix4.Matrix4 {\n return Matrix4.multiply(\n computeInputGlobalTransform(\n identifier,\n value,\n lastValue,\n distanceUnit,\n angleUnit,\n ),\n current,\n );\n}\n\nfunction computeInputGlobalTransform(\n identifier: string,\n value: number,\n lastValue: number,\n distanceUnit: DistanceUnitType,\n angleUnit: AngleUnitType,\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.transpose(\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.left(), rotation()),\n ),\n );\n case 'y-rotate':\n return Matrix4.transpose(\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.down(), rotation()),\n ),\n );\n case 'z-rotate':\n return Matrix4.transpose(\n Matrix4.makeRotation(\n Quaternion.fromAxisAngle(Vector3.forward(), rotation()),\n ),\n );\n default:\n return Matrix4.makeIdentity();\n }\n}\n\nexport function eulerOrderForIdentifier(identifier: string): Euler.EulerOrder {\n switch (identifier) {\n case 'x-rotate':\n return 'xyz';\n case 'y-rotate':\n return 'yzx';\n case 'z-rotate':\n return 'zxy';\n default:\n return 'xyz';\n }\n}\n\nexport function computeInputDisplayValue(\n identifier: string,\n current: Matrix4.Matrix4,\n start: Matrix4.Matrix4,\n distanceUnit: DistanceUnitType,\n angleUnit: AngleUnitType,\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\n const transformDiff = (): Matrix4.Matrix4 =>\n Matrix4.multiply(Matrix4.invert(start), current);\n\n const relativeTranslationDiff = (): Vector3.Vector3 =>\n Vector3.multiplyByTransformMatrixColumnMajor(\n Vector3.fromMatrixPosition(transformDiff()),\n rotation(),\n );\n\n const relativeRotationDiff = (): Euler.Euler =>\n Euler.fromRotationMatrix(\n Matrix4.multiply(start, rotation()),\n eulerOrderForIdentifier(identifier),\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(Angle.normalizeRadians(relativeRotationDiff().x));\n case 'y-rotate':\n return angles.convertTo(Angle.normalizeRadians(relativeRotationDiff().y));\n case 'z-rotate':\n return angles.convertTo(Angle.normalizeRadians(relativeRotationDiff().z));\n default:\n return 0;\n }\n}\n\nexport function computeHandleDeltaTransform(\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 return computeHandleGlobalTransform(\n current,\n Vector3.subtract(next, previous),\n viewVector,\n angle,\n identifier,\n );\n}\n\nfunction computeHandleGlobalTransform(\n currentTransformationMatrix: Matrix4.Matrix4,\n translationVectorWorld: Vector3.Vector3,\n viewVector: Vector3.Vector3,\n angle: number,\n identifier: string,\n): Matrix4.Matrix4 {\n switch (identifier) {\n case 'x-translate':\n return performTranslationConstrainedToAxis(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.right(),\n );\n case 'y-translate':\n return performTranslationConstrainedToAxis(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.up(),\n );\n case 'z-translate':\n return performTranslationConstrainedToAxis(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.back(),\n );\n case 'xy-translate':\n return performTranslationConstrainedToPlane(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.create(0, 0, 1),\n );\n case 'xz-translate':\n return performTranslationConstrainedToPlane(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.create(0, 1, 0),\n );\n case 'yz-translate':\n return performTranslationConstrainedToPlane(\n currentTransformationMatrix,\n translationVectorWorld,\n Vector3.create(1, 0, 0),\n );\n case 'x-rotate':\n return performRotationAroundAxis(\n currentTransformationMatrix,\n viewVector,\n Vector3.right(),\n angle,\n );\n case 'y-rotate':\n return performRotationAroundAxis(\n currentTransformationMatrix,\n viewVector,\n Vector3.up(),\n angle,\n );\n case 'z-rotate':\n return performRotationAroundAxis(\n currentTransformationMatrix,\n viewVector,\n Vector3.forward(),\n angle,\n );\n default:\n return currentTransformationMatrix;\n }\n}\n\nexport function performRotationAroundAxis(\n currentTransformationMatrix: Matrix4.Matrix4,\n viewVector: Vector3.Vector3,\n localRotationAxis: Vector3.Vector3,\n rotationAngle: number,\n): Matrix4.Matrix4 {\n // Determine the rotation axis in world coordinates\n const worldRotationAxis = computeRotationAxis(\n currentTransformationMatrix,\n viewVector,\n localRotationAxis,\n );\n\n // Determine the rotation matrix in world coordinates\n const worldRotationQuaternion = Quaternion.fromAxisAngle(\n worldRotationAxis,\n rotationAngle,\n );\n const worldRotationMatrix = Matrix4.transpose(\n Matrix4.makeRotation(worldRotationQuaternion),\n );\n\n return Matrix4.multiply(worldRotationMatrix, currentTransformationMatrix);\n}\n\nexport function computeRotationAxis(\n currentTransformationMatrix: Matrix4.Matrix4,\n viewVector: Vector3.Vector3,\n localRotationAxis: Vector3.Vector3,\n): Vector3.Vector3 {\n const changeOfBasisToWorld = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(currentTransformationMatrix),\n );\n const worldRotationAxis = Vector3.multiplyByTransformMatrixRowMajor(\n localRotationAxis,\n changeOfBasisToWorld,\n );\n const worldNegatedRotationAxis = Vector3.multiplyByTransformMatrixRowMajor(\n Vector3.negate(localRotationAxis),\n changeOfBasisToWorld,\n );\n\n return Vector3.dot(viewVector, worldRotationAxis) >\n Vector3.dot(viewVector, worldNegatedRotationAxis)\n ? localRotationAxis\n : Vector3.negate(localRotationAxis);\n}\n\nexport function performTranslationConstrainedToAxis(\n currentTransformationMatrix: Matrix4.Matrix4,\n translationVectorWorld: Vector3.Vector3,\n constrainToLocalAxis: Vector3.Vector3,\n): Matrix4.Matrix4 {\n // Ensure that constrainToLocalAxis is a unit vector\n const constrainToLocalAxisUnitVector =\n Vector3.normalize(constrainToLocalAxis);\n\n // Convert the axis to constrain the translation to from local to world\n const changeOfBasisToWorld = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(currentTransformationMatrix),\n );\n const constrainToWorldAxis = Vector3.multiplyByTransformMatrixRowMajor(\n constrainToLocalAxisUnitVector,\n changeOfBasisToWorld,\n );\n\n // Project the translation vector onto the desired axis for translation\n const translationVectorProjectedToWorldAxis = Vector3.project(\n translationVectorWorld,\n constrainToWorldAxis,\n );\n\n // Use the projected vector to determine the translation matrix\n const translationMatrix = Matrix4.makeTranslation(\n translationVectorProjectedToWorldAxis,\n );\n\n // Multiply the translation matrix with the current transformation matrix to\n // determine the new transformation matrix\n return Matrix4.multiply(currentTransformationMatrix, translationMatrix);\n}\n\nexport function performTranslationConstrainedToPlane(\n currentTransformationMatrix: Matrix4.Matrix4,\n translationVectorWorld: Vector3.Vector3,\n localNormalVectorToPlane: Vector3.Vector3,\n): Matrix4.Matrix4 {\n // Ensure that localNormalVectorToPlane is a unit vector\n const localNormalVectorToPlaneUnitVector = Vector3.normalize(\n localNormalVectorToPlane,\n );\n\n // Convert the normal vector from local to world\n const changeOfBasisToWorld = Matrix4.makeRotation(\n Quaternion.fromMatrixRotation(currentTransformationMatrix),\n );\n const worldNormalVectorToPlane = Vector3.multiplyByTransformMatrixRowMajor(\n localNormalVectorToPlaneUnitVector,\n changeOfBasisToWorld,\n );\n\n // Use the worldNormalVectorToPlane and the current position of the widget to define the plane to translate on\n const currentPosition = Vector3.fromMatrixPosition(\n currentTransformationMatrix,\n );\n const worldPlaneToConstrainTranslationTo = Plane.fromNormalAndCoplanarPoint(\n worldNormalVectorToPlane,\n currentPosition,\n );\n\n // Project the translation vector onto the desired plane for translation\n const translationVectorProjectedToWorldPlane = Plane.projectPoint(\n worldPlaneToConstrainTranslationTo,\n translationVectorWorld,\n );\n\n // Account for the plane offset to calculate the position change (the vector to translate by)\n const constrainedTranslationVector = Vector3.add(\n translationVectorProjectedToWorldPlane,\n Vector3.scale(\n worldPlaneToConstrainTranslationTo.constant,\n worldPlaneToConstrainTranslationTo.normal,\n ),\n );\n\n // Use the projected vector to perform the translation and determine the new transformation matrix\n const translationMatrix = Matrix4.makeTranslation(\n constrainedTranslationVector,\n );\n return Matrix4.multiply(currentTransformationMatrix, translationMatrix);\n}\n\nexport function computeInputPosition(\n viewport: Viewport,\n bounds: Rectangle.Rectangle,\n shapePoints: Point.Point[],\n): PointAndPlacement {\n if (shapePoints.length === 0) {\n throw new Error(\n 'Unable to compute input position. At least one shape point must be provided.',\n );\n }\n\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\nexport function calculateNewRotationAngle(\n event: PointerEvent,\n rotationSnapKey: ModifierKey,\n angleOfRotation: number, // In radians\n lastAngle: number, // In radians\n existingAngle?: number, // In degrees\n rotationSnapDegrees?: number, // In degrees\n): number {\n const rotationSnapKeyIsHeld =\n (rotationSnapKey === 'alt' && event.altKey) ||\n (rotationSnapKey === 'ctrl' && event.ctrlKey) ||\n (rotationSnapKey === 'meta' && event.metaKey) ||\n (rotationSnapKey === 'shift' && event.shiftKey);\n\n // Check if the widget should snap to a certain angle\n if (\n rotationSnapKeyIsHeld &&\n rotationSnapDegrees != null &&\n rotationSnapDegrees > 0 &&\n Number.isInteger(rotationSnapDegrees)\n ) {\n const angleChangeRelativeToLastAngle = angleOfRotation - lastAngle;\n const angleChangeRelativeToLastAngleDegrees = Angle.toDegrees(\n angleChangeRelativeToLastAngle,\n );\n\n // This method rounds the angle change to the nearest multiple of this.rotationSnapDegrees\n const angleChangeRounded =\n Math.round(angleChangeRelativeToLastAngleDegrees / rotationSnapDegrees) *\n rotationSnapDegrees;\n\n // Check if there is already an existing rotation angle\n if (existingAngle != null) {\n // If there is an existing angle displayed in the widget, it might not be a multiple of the\n // desired number, so the difference needs to be accounted for\n const existingAngleRounded =\n Math.round(existingAngle / rotationSnapDegrees) * rotationSnapDegrees;\n const neededAdjustmentDueToExistingAngle =\n existingAngle - existingAngleRounded;\n\n // Adjust the rounded angle change to account for the existing angle, then\n // covert the rounded value to radians and return\n const adjustedAngle =\n angleChangeRounded - neededAdjustmentDueToExistingAngle;\n const angleChangeRoundedRadians = Angle.toRadians(adjustedAngle);\n return angleChangeRoundedRadians + lastAngle;\n } else {\n // There isn't an existing angle to account for, so convert the rounded value to radians and return\n const angleChangeRoundedRadians = Angle.toRadians(angleChangeRounded);\n return angleChangeRoundedRadians + lastAngle;\n }\n } else {\n // Angle should not be snapped, so return the original angle\n return angleOfRotation;\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 { AngleUnits, DistanceUnits, Viewport } from '../../lib/types';\n\nexport type TransformWidgetInputPlacement =\n 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\nexport interface TransformWidgetInputWrapperProps {\n ref: (el?: HTMLDivElement) => void;\n bounds?: DOMRect;\n\n viewport: Viewport;\n point: Point.Point;\n placement: TransformWidgetInputPlacement;\n\n displayUnit: DistanceUnits | AngleUnits;\n}\n\nexport const TransformWidgetInputWrapper: FunctionalComponent<\n TransformWidgetInputWrapperProps\n> = ({ ref, bounds, viewport, point, placement, displayUnit }, children) => {\n const inputPlacement = constrainInputToViewport(\n viewport,\n bounds ?? Dimensions.create(0, 0),\n point,\n placement,\n );\n\n return (\n <div\n ref={ref}\n class=\"widget-input wrapper\"\n style={{\n ...inputPlacement,\n height: bounds?.height != null ? `${bounds.height}px` : undefined,\n }}\n >\n {children}\n <div class=\"widget-input units\">{displayUnit.unit.abbreviatedName}</div>\n </div>\n );\n};\n\nexport interface TransformWidgetInputProps {\n ref: (el?: HTMLInputElement) => void;\n\n identifier?: string;\n disabled?: boolean;\n\n onChange?: (value: number) => void | Promise<void>;\n onIncrement?: VoidFunction;\n onDecrement?: VoidFunction;\n onBlur?: VoidFunction;\n onUndo?: VoidFunction;\n}\n\nexport const TransformWidgetInput: FunctionalComponent<\n TransformWidgetInputProps\n> = ({\n ref,\n identifier,\n disabled,\n onChange,\n onIncrement,\n onDecrement,\n onBlur,\n onUndo,\n}) => {\n const handleChange = (event: Event): void => {\n if (event.target != null) {\n const parsed = Number.parseFloat(\n (event.target as HTMLInputElement).value,\n );\n\n if (!Number.isNaN(parsed)) {\n onChange?.(Number.parseFloat((event.target as HTMLInputElement).value));\n }\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n const commandOrControlModifier = event.ctrlKey || event.metaKey;\n\n if (event.key === 'ArrowUp') {\n onIncrement?.();\n } else if (event.key === 'ArrowDown') {\n onDecrement?.();\n } else if (event.key === 'z' && commandOrControlModifier && onUndo) {\n event.preventDefault();\n\n onUndo();\n }\n };\n\n return (\n <input\n ref={ref}\n disabled={disabled}\n class={`widget-input ${identifier}`}\n type=\"text\"\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={onBlur}\n aria-label=\"Transform widget input\"\n />\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 rotationSizeScalar = 1,\n translationSizeScalar = 1,\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.back(),\n Vector3.up(),\n triangleSize,\n rotationSizeScalar,\n translationSizeScalar,\n );\n}\n\nexport function yAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1,\n translationSizeScalar = 1,\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.back(),\n triangleSize,\n rotationSizeScalar,\n translationSizeScalar,\n );\n}\n\nexport function zAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1,\n translationSizeScalar = 1,\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.up(),\n triangleSize,\n rotationSizeScalar,\n translationSizeScalar,\n );\n}\n\nfunction computeRotationNdcValues(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n xDirection: Vector3.Vector3,\n yDirection: Vector3.Vector3,\n triangleSize: number,\n rotationSizeScalar = 1,\n translationSizeScalar = 1,\n): TriangleMeshPoints {\n const transformedDirection = Vector3.multiplyByTransformMatrixRowMajor(\n Vector3.add(xDirection, yDirection),\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform)),\n );\n const transformedX = Vector3.multiplyByTransformMatrixRowMajor(\n xDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform)),\n );\n const transformedY = Vector3.multiplyByTransformMatrixRowMajor(\n yDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform)),\n );\n // Position the rotation handle relative to the translation scale to\n // ensure that the rotation axis lines are angled inward.\n // This is a loose line of best fit based on the base scale of\n // `1` corresponding to a scalar of `10` and some experimentation.\n const relativePositionScalar = 10 * translationSizeScalar ** 0.25;\n\n const basePosition = Vector3.fromMatrixPosition(widgetTransform);\n const position = Vector3.add(\n basePosition,\n Vector3.scale(triangleSize * relativePositionScalar, 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 * rotationSizeScalar)),\n rotationAxis,\n position,\n );\n const right = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, triangleSize * rotationSizeScalar),\n rotationAxis,\n position,\n );\n const up = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, triangleSize * rotationSizeScalar),\n rotationAxis,\n position,\n );\n const left = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, -(triangleSize * rotationSizeScalar)),\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.multiplyByTransformMatrixColumnMajor(\n base,\n camera.projectionViewMatrix,\n ),\n Vector3.multiplyByTransformMatrixColumnMajor(\n left,\n camera.projectionViewMatrix,\n ),\n Vector3.multiplyByTransformMatrixColumnMajor(\n right,\n camera.projectionViewMatrix,\n ),\n Vector3.multiplyByTransformMatrixColumnMajor(\n up,\n camera.projectionViewMatrix,\n ),\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 = viewport.transformPointToRay(\n point,\n frame.image,\n frame.scene.camera,\n );\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 !Number.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 xyAxisTranslationPositions,\n xzAxisTranslationPositions,\n yAxisArrowPositions,\n yzAxisTranslationPositions,\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 twoAxesSquare?: Color.Color | string;\n hovered?: Color.Color | string;\n outline?: Color.Color | string;\n}\n\nexport interface DrawableElementSizeScalars {\n xRotation?: number;\n yRotation?: number;\n zRotation?: number;\n xTranslation?: number;\n yTranslation?: number;\n zTranslation?: number;\n xyTranslation?: number;\n xzTranslation?: number;\n yzTranslation?: number;\n}\n\nexport interface DisabledAxis {\n xRotation: boolean;\n yRotation: boolean;\n zRotation: boolean;\n xTranslation: boolean;\n yTranslation: boolean;\n zTranslation: boolean;\n xyTranslation: boolean;\n xzTranslation: boolean;\n yzTranslation: boolean;\n}\n\nexport interface TransformWidgetCustomization {\n colors?: DrawableElementColors;\n scalars?: DrawableElementSizeScalars;\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\n private xArrow?: TriangleMesh;\n private yArrow?: TriangleMesh;\n private zArrow?: TriangleMesh;\n\n private xRotation?: TriangleMesh;\n private xyRotationLine?: RotationLine;\n private xzRotationLine?: RotationLine;\n\n private yRotation?: TriangleMesh;\n private yxRotationLine?: RotationLine;\n private yzRotationLine?: RotationLine;\n\n private zRotation?: TriangleMesh;\n private zxRotationLine?: RotationLine;\n private zyRotationLine?: RotationLine;\n\n private xyTranslation?: TriangleMesh;\n private xzTranslation?: TriangleMesh;\n private yzTranslation?: TriangleMesh;\n\n private disabledAxis: DisabledAxis = {\n xTranslation: false,\n yTranslation: false,\n zTranslation: false,\n xyTranslation: false,\n xzTranslation: false,\n yzTranslation: 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 twoAxesSquareFillColor?: Color.Color | string;\n\n private hoveredArrowFillColor?: Color.Color | string;\n private outlineColor?: Color.Color | string;\n\n public constructor(\n canvasElement: HTMLCanvasElement,\n private customization: TransformWidgetCustomization = {},\n initialDisabledAxes: Partial<DisabledAxis> = {},\n ) {\n super(canvasElement);\n\n this.xArrowFillColor = customization.colors?.xArrow;\n this.yArrowFillColor = customization.colors?.yArrow;\n this.zArrowFillColor = customization.colors?.zArrow;\n this.hoveredArrowFillColor = customization.colors?.hovered;\n this.outlineColor = customization.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.xyTranslation =\n initialDisabledAxes.xyTranslation ?? false;\n this.disabledAxis.xzTranslation =\n initialDisabledAxes.xzTranslation ?? false;\n this.disabledAxis.yzTranslation =\n initialDisabledAxes.yzTranslation ?? 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 /**\n * @param transform A transformation matrix in row-major form.\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.twoAxesSquareFillColor =\n colors.twoAxesSquare ?? this.twoAxesSquareFillColor;\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.xyTranslation?.updateFillColor(\n this.getTwoAxesTranslationColor(),\n true,\n );\n this.xzTranslation?.updateFillColor(\n this.getTwoAxesTranslationColor(),\n true,\n );\n this.yzTranslation?.updateFillColor(\n this.getTwoAxesTranslationColor(),\n true,\n );\n\n this.hoveredElement?.updateFillColor(this.hoveredArrowFillColor);\n }\n\n public updateScalars(scalars: DrawableElementSizeScalars): void {\n this.customization = {\n ...this.customization,\n scalars,\n };\n\n if (this.transform != null && this.frame != null) {\n this.updateElements(this.transform, this.frame);\n }\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.xyTranslation?.setDisabled(this.disabledAxis.xyTranslation);\n this.xzTranslation?.setDisabled(this.disabledAxis.xzTranslation);\n this.yzTranslation?.setDisabled(this.disabledAxis.yzTranslation);\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 this.clearFillColorOfPreviouslyHovered(previousHovered);\n\n // Set the corresponding arrows to the hover fill color\n // when a 2-axes translation square is hovered over\n if (this.hoveredElement?.identifier === 'xy-translate') {\n this.xArrow?.updateFillColor(this.hoveredArrowFillColor);\n this.yArrow?.updateFillColor(this.hoveredArrowFillColor);\n } else if (this.hoveredElement?.identifier === 'xz-translate') {\n this.xArrow?.updateFillColor(this.hoveredArrowFillColor);\n this.zArrow?.updateFillColor(this.hoveredArrowFillColor);\n } else if (this.hoveredElement?.identifier === 'yz-translate') {\n this.yArrow?.updateFillColor(this.hoveredArrowFillColor);\n this.zArrow?.updateFillColor(this.hoveredArrowFillColor);\n }\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 this.clearFillColorOfPreviouslyHovered(previousHovered);\n }\n }\n\n private clearFillColorOfPreviouslyHovered(previousHovered?: Drawable): void {\n previousHovered?.updateFillColor(previousHovered?.initialFillColor);\n\n // Also clear the hover fill color from the corresponding arrows\n // when a 2-axes translation square is no longer hovered over\n if (previousHovered?.identifier === 'xy-translate') {\n this.xArrow?.updateFillColor(this.xArrow?.initialFillColor);\n this.yArrow?.updateFillColor(this.yArrow?.initialFillColor);\n } else if (previousHovered?.identifier === 'xz-translate') {\n this.xArrow?.updateFillColor(this.xArrow?.initialFillColor);\n this.zArrow?.updateFillColor(this.zArrow?.initialFillColor);\n } else if (previousHovered?.identifier === 'yz-translate') {\n this.yArrow?.updateFillColor(this.yArrow?.initialFillColor);\n this.zArrow?.updateFillColor(this.zArrow?.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(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.xTranslation,\n ),\n this.outlineColor,\n this.getXTranslationColor(),\n );\n this.xRotation = new TriangleMesh(\n createShape,\n 'x-rotate',\n xAxisRotationPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.xRotation,\n this.customization.scalars?.xTranslation,\n ),\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\n this.yArrow = new TriangleMesh(\n createShape,\n 'y-translate',\n yAxisArrowPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.yTranslation,\n ),\n this.outlineColor,\n this.getYTranslationColor(),\n );\n this.yRotation = new TriangleMesh(\n createShape,\n 'y-rotate',\n yAxisRotationPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.yRotation,\n this.customization.scalars?.yTranslation,\n ),\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\n this.zArrow = new TriangleMesh(\n createShape,\n 'z-translate',\n zAxisArrowPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.zTranslation,\n ),\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(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.zRotation,\n this.customization.scalars?.zTranslation,\n ),\n this.outlineColor,\n this.getZRotationColor(),\n );\n\n this.xyTranslation = new TriangleMesh(\n createShape,\n 'xy-translate',\n xyAxisTranslationPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.xyTranslation,\n ),\n this.outlineColor,\n this.getTwoAxesTranslationColor(),\n );\n this.xzTranslation = new TriangleMesh(\n createShape,\n 'xz-translate',\n xzAxisTranslationPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.xzTranslation,\n ),\n this.outlineColor,\n this.getTwoAxesTranslationColor(),\n );\n this.yzTranslation = new TriangleMesh(\n createShape,\n 'yz-translate',\n yzAxisTranslationPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.yzTranslation,\n ),\n this.outlineColor,\n this.getTwoAxesTranslationColor(),\n );\n\n this.createRotationLines(createShape, transform, frame);\n\n this.axisLines = [this.xAxis, this.yAxis, this.zAxis];\n this.translationMeshes = [\n this.xArrow,\n this.yArrow,\n this.zArrow,\n this.xyTranslation,\n this.xzTranslation,\n this.yzTranslation,\n ];\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 getTwoAxesTranslationColor(): Color.Color | string | undefined {\n return this.twoAxesSquareFillColor;\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(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.xTranslation,\n ),\n );\n this.xAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.xArrow),\n );\n }\n this.xRotation?.updatePoints(\n xAxisRotationPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.xRotation,\n this.customization.scalars?.xTranslation,\n ),\n );\n\n if (this.yArrow != null) {\n this.yArrow.updatePoints(\n yAxisArrowPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.yTranslation,\n ),\n );\n this.yAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.yArrow),\n );\n }\n this.yRotation?.updatePoints(\n yAxisRotationPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.yRotation,\n this.customization.scalars?.yTranslation,\n ),\n );\n\n if (this.zArrow != null) {\n this.zArrow.updatePoints(\n zAxisArrowPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.zTranslation,\n ),\n );\n this.zAxis?.updatePoints(\n axisPositions(transform, frame.scene.camera, this.zArrow),\n );\n }\n this.zRotation?.updatePoints(\n zAxisRotationPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.zRotation,\n this.customization.scalars?.zTranslation,\n ),\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 if (this.xyTranslation != null) {\n this.xyTranslation.updatePoints(\n xyAxisTranslationPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.xyTranslation,\n ),\n );\n }\n if (this.xzTranslation != null) {\n this.xzTranslation.updatePoints(\n xzAxisTranslationPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.xzTranslation,\n ),\n );\n }\n if (this.yzTranslation != null) {\n this.yzTranslation.updatePoints(\n yzAxisTranslationPositions(\n transform,\n frame.scene.camera,\n triangleSize,\n this.customization.scalars?.yzTranslation,\n ),\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 * @prop --viewer-transform-widget-two-axes-square-color: A CSS color for the squares\n * to translate by two axes at a time. Defaults to `#e0e0e0`.\n */\n --viewer-transform-widget-two-axes-square-color: var(--two-axes-color);\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 `8em`.\n */\n --viewer-transform-widget-input-width: 8em;\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 align-items: center;\n border: 1px solid #444444;\n border-radius: 4px;\n width: var(--viewer-transform-widget-input-width);\n text-align: center;\n background-color: white;\n box-sizing: border-box;\n}\n\n.widget-input.units {\n position: relative;\n width: 25%;\n height: 100%;\n padding: 0 0.25rem;\n font-size: 0.8125rem;\n color: #444444;\n}\n\ninput.widget-input {\n position: relative;\n text-align: center;\n box-sizing: border-box;\n width: 75%;\n height: 100%;\n outline: none;\n border-width: 0 1px 0 0;\n border-color: #444444;\n border-radius: 2px 0 0 2px;\n font-size: 0.875rem;\n color: #444444;\n}\n\ninput.widget-input.x-translate,\ninput.widget-input.x-rotate {\n border-left: 5px solid var(--viewer-transform-widget-x-axis-arrow-color);\n}\n\ninput.widget-input.y-translate,\ninput.widget-input.y-rotate {\n border-left: 5px solid var(--viewer-transform-widget-y-axis-arrow-color);\n}\n\ninput.widget-input.z-translate,\ninput.widget-input.z-rotate {\n border-left: 5px solid var(--viewer-transform-widget-z-axis-arrow-color);\n}\n\ninput.widget-input:disabled {\n color: #888888;\n}\n\ninput.widget-input:focus {\n outline: none;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport {\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';\nimport { Drawable } from '../../lib/transforms/drawable';\nimport {\n AngleUnits,\n AngleUnitType,\n DistanceUnits,\n DistanceUnitType,\n} from '../../lib/types';\nimport { ModifierKey } from '../../lib/types/keys';\nimport { focusInputElement } from './dom';\nimport {\n calculateNewRotationAngle,\n computeHandleDeltaTransform,\n computeInputDeltaTransform,\n computeInputDisplayValue,\n computeInputPosition,\n convertCanvasPointToWorld,\n convertPointToCanvas,\n PointAndPlacement,\n} from './util';\nimport {\n TransformWidgetInput,\n TransformWidgetInputWrapper,\n} 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 the x-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public xRotationDisabled = false;\n\n /**\n * Determines whether the y-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public yRotationDisabled = false;\n\n /**\n * Determines whether the z-rotation is disabled on the widget\n */\n @Prop({ mutable: true })\n public zRotationDisabled = false;\n\n /**\n * Determines whether the x-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public xTranslationDisabled = false;\n\n /**\n * Determines whether the y-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public yTranslationDisabled = false;\n\n /**\n * Determines whether the z-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public zTranslationDisabled = false;\n\n /**\n * Determines whether the xy-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public xyTranslationDisabled = false;\n\n /**\n * Determines whether the xz-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public xzTranslationDisabled = false;\n\n /**\n * Determines whether the yz-translation is disabled on the widget\n */\n @Prop({ mutable: true })\n public yzTranslationDisabled = 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 * When defined, the widget will snap to the degree of the nearest multiple of\n * the given number when the user is rotating with the widget and holding the\n * key defined by rotationSnapKey. Defaults to undefined.\n */\n @Prop()\n public rotationSnapDegrees?: number;\n\n /**\n * When rotationSnapDegrees is defined, the widget will snap to the degree of the\n * nearest multiple of the given number when the user is rotating with the widget\n * and holding the key defined here. Defaults to the shift key.\n */\n @Prop()\n public rotationSnapKey: ModifierKey = 'shift';\n\n /**\n * Scalar to increase the size of the translation handles of this widget.\n * Values above zero and below three will result in the best visual representation\n * of the handles, and values above three may produce unexpected results.\n *\n * Defaults to `1`.\n */\n @Prop()\n public translationHandleScalar = 1;\n\n /**\n * Scalar to increase the size of the rotation handles of this widget.\n * Values above zero and below three will result in the best visual representation\n * of the handles, and values above three may produce unexpected results.\n *\n * Defaults to `1`.\n */\n @Prop()\n public rotationHandleScalar = 1;\n\n /**\n * Specifies the frequency, in milliseconds, to update the transform while interacting with the widget.\n *\n * This delay is used to group events happening in quick succession and results in smoother\n * widget movement.\n */\n @Prop()\n public interactionThrottle = 75;\n\n /**\n * **EXPERIMENTAL.**\n *\n * Enables Command+Z and Control+Z keybindings to perform an undo of\n * the previous delta transformation.\n *\n * @see `EXPERIMENTAL_undo`\n */\n @Prop()\n public EXPERIMENTAL_undoKeybindings = false;\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 = 0;\n\n @State()\n protected isEndingTransform = false;\n\n @State()\n protected inputShouldFocus = false;\n\n @Element()\n private hostEl!: HTMLElement;\n\n // Transformation matrices in row-major form\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 twoAxesSquareColor: Color.Color | string = '#e0e0e0';\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 inputWrapperRef?: HTMLDivElement;\n private inputRef?: HTMLInputElement;\n\n private hoveredChangeDisposable?: Disposable;\n\n private interactionTimer?: number;\n private lastMouseEvent?: PointerEvent;\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 protected componentDidRender(): void {\n if (this.inputShouldFocus && this.inputRef != null) {\n focusInputElement(this.inputRef);\n this.inputShouldFocus = false;\n }\n }\n\n /**\n * **EXPERIMENTAL.**\n *\n * Performs an undo of the most recent set of transform manipulations,\n * categorized by the last pause in interactivity (pointerup on a handle,\n * Enter press on an input, keyup on an input).\n *\n * Note that this *does not* work repeatedly. I.e. only one undo can be\n * performed, and once another set of transform manipulations is performed,\n * the history is lost.\n */\n @Method()\n public async EXPERIMENTAL_undo(): Promise<void> {\n const undoDelta = await this.controller?.EXPERIMENTAL_undoTransform();\n\n if (this.currentTransform != null && undoDelta != null) {\n this.currentTransform = Matrix4.multiply(\n this.currentTransform,\n undoDelta,\n );\n\n this.widget?.updateTransform(this.currentTransform);\n\n this.updateInputPosition();\n this.updateInputValue();\n this.lastInputValue = this.inputValue;\n\n this.position = Vector3.fromMatrixPosition(this.currentTransform);\n this.rotation = Euler.fromRotationMatrix(this.currentTransform);\n }\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('xyTranslationDisabled')\n @Watch('xzTranslationDisabled')\n @Watch('yzTranslationDisabled')\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 xyTranslation: this.xyTranslationDisabled,\n xzTranslation: this.xzTranslationDisabled,\n yzTranslation: this.yzTranslationDisabled,\n });\n }\n\n /**\n * @ignore\n */\n @Watch('translationHandleScalar')\n @Watch('rotationHandleScalar')\n protected handleTransformHandleScalarChanged(): void {\n const effectiveArrowScalar = this.getTranslationScalar();\n const effectiveSquareScalar = this.getRotationScalar();\n\n this.widget?.updateScalars({\n xTranslation: effectiveArrowScalar,\n yTranslation: effectiveArrowScalar,\n zTranslation: effectiveArrowScalar,\n xyTranslation: effectiveSquareScalar,\n xzTranslation: effectiveSquareScalar,\n yzTranslation: effectiveSquareScalar,\n xRotation: effectiveSquareScalar,\n yRotation: effectiveSquareScalar,\n zRotation: effectiveSquareScalar,\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 /**\n * @ignore\n */\n @Watch('distanceUnit')\n @Watch('angleUnit')\n @Watch('decimalPlaces')\n protected handleInputFormattingChanged(): void {\n this.updateInputValue();\n this.lastInputValue = this.inputValue;\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 tabindex=\"0\"\n width={this.viewer?.viewport.width}\n height={this.viewer?.viewport.height}\n onPointerDown={this.handleBeginDrag}\n onKeyDown={this.handleKeyDown}\n />\n\n {this.showInputs && this.inputPosition && this.viewer?.viewport && (\n <TransformWidgetInputWrapper\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.inputWrapperRef = el;\n }}\n bounds={this.inputBounds}\n viewport={this.viewer.viewport}\n point={this.inputPosition.point}\n placement={this.inputPosition.placement}\n displayUnit={this.getDisplayedUnits()}\n >\n <TransformWidgetInput\n ref={(el) => {\n this.inputRef = el;\n }}\n identifier={\n this.dragging?.identifier ?? this.lastDragged?.identifier\n }\n disabled={this.isEndingTransform}\n onChange={this.handleInputChange}\n onIncrement={() => this.handleInputStep(1)}\n onDecrement={() => this.handleInputStep(-1)}\n onBlur={() => {\n this.inputShouldFocus = false;\n }}\n onUndo={\n this.EXPERIMENTAL_undoKeybindings\n ? () => this.EXPERIMENTAL_undo()\n : undefined\n }\n />\n </TransformWidgetInputWrapper>\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.inputWrapperRef != null) {\n const wrapperElement = this.inputWrapperRef;\n\n readDOM(() => {\n this.inputBounds = wrapperElement.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.twoAxesSquareColor = hostStyles\n .getPropertyValue('--viewer-transform-widget-two-axes-square-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 twoAxesSquare: this.twoAxesSquareColor,\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.inputValue = 0;\n this.dragStartTransform = this.currentTransform;\n this.updateInputPosition();\n this.updateInputValue();\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.handleDragWithTimer);\n window.addEventListener('pointerup', this.handleEndTransform);\n }\n };\n\n private handleDragWithTimer = async (event: PointerEvent): Promise<void> => {\n if (event != null) {\n // Prevent selection of text and interaction with view cube while dragging the widget\n event.preventDefault();\n\n this.lastMouseEvent = event;\n }\n\n if (this.interactionTimer == null) {\n this.interactionTimer = window.setTimeout(async () => {\n this.interactionTimer = undefined;\n await this.handleDrag();\n this.lastMouseEvent = undefined;\n }, this.interactionThrottle);\n }\n };\n\n private handleDrag = async (): Promise<void> => {\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 this.lastMouseEvent != 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(this.lastMouseEvent.clientX, this.lastMouseEvent.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 const angleToUse = calculateNewRotationAngle(\n this.lastMouseEvent,\n this.rotationSnapKey,\n angle,\n this.lastAngle,\n this.getDisplayedAngle(),\n this.rotationSnapDegrees,\n );\n\n this.transform(\n this.lastWorldPosition,\n currentWorld,\n angleToUse - this.lastAngle,\n );\n\n this.updateInputPosition();\n this.updateInputValue();\n\n this.lastWorldPosition = currentWorld;\n this.lastAngle = angleToUse;\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.lastAngle = 0;\n\n this.updateInputPosition();\n this.updateInputValue();\n\n widget.updateCursor(canvasPoint);\n widget.updateTransform(this.currentTransform);\n\n this.beginEndTransform();\n\n window.removeEventListener('pointermove', this.handleDragWithTimer);\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.completeEndTransform();\n };\n\n private handleInputStep = async (step: number): Promise<void> => {\n if (this.inputValue != null && this.lastInputValue != null) {\n // If modifying angle units, we want to adjust the step to always\n // perform the equivalent of a 1-degree rotation.\n if (this.isModifyingAngleUnits()) {\n const angles = new AngleUnits(this.angleUnit);\n const previous = angles.convertFrom(this.lastInputValue);\n const next = Angle.normalizeRadians(previous + Angle.toRadians(step));\n\n this.inputValue = angles.convertTo(next);\n } else {\n this.inputValue = this.lastInputValue + step;\n }\n await this.updateTransformFromInput(this.inputValue);\n }\n };\n\n private handleInputChange = async (value: number): Promise<void> => {\n await this.updateTransformFromInput(value);\n };\n\n private handleKeyDown = async (event: KeyboardEvent): Promise<void> => {\n const commandOrControlModifier = event.ctrlKey || event.metaKey;\n\n if (\n event.key === 'z' &&\n commandOrControlModifier &&\n this.EXPERIMENTAL_undoKeybindings\n ) {\n event.stopPropagation();\n await this.EXPERIMENTAL_undo();\n }\n };\n\n private updateTransformFromInput = 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.currentTransform = computeInputDeltaTransform(\n this.currentTransform,\n this.lastDragged.identifier,\n value,\n this.lastInputValue,\n this.distanceUnit,\n this.angleUnit,\n );\n\n this.updateInputValue();\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 Matrix4.invert(this.startingTransform),\n this.currentTransform,\n ),\n );\n this.updateInputPosition();\n await this.controller?.endTransformDebounced(\n this.beginEndTransform,\n this.completeEndTransform,\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 = computeHandleDeltaTransform(\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 Matrix4.invert(this.startingTransform),\n this.currentTransform,\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 xyTranslation: this.xyTranslationDisabled,\n xzTranslation: this.xzTranslationDisabled,\n yzTranslation: this.yzTranslationDisabled,\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 const effectiveArrowScalar = this.getTranslationScalar();\n const effectiveSquareScalar = this.getRotationScalar();\n\n this.widget = new TransformWidget(canvasRef, {\n colors: {\n xArrow: this.xArrowColor,\n yArrow: this.yArrowColor,\n zArrow: this.zArrowColor,\n twoAxesSquare: this.twoAxesSquareColor,\n hovered: this.hoveredColor,\n },\n scalars: {\n xTranslation: effectiveArrowScalar,\n yTranslation: effectiveArrowScalar,\n zTranslation: effectiveArrowScalar,\n xyTranslation: effectiveSquareScalar,\n xzTranslation: effectiveSquareScalar,\n yzTranslation: effectiveSquareScalar,\n xRotation: effectiveSquareScalar,\n yRotation: effectiveSquareScalar,\n zRotation: effectiveSquareScalar,\n },\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 const isDraggingTwoAxesTranslation =\n dragging?.identifier === 'xy-translate' ||\n dragging?.identifier === 'xz-translate' ||\n dragging?.identifier === 'yz-translate';\n\n if (\n dragging != null &&\n this.currentTransform != null &&\n this.dragStartTransform != null &&\n !isDraggingTwoAxesTranslation\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 if (this.inputRef != null) {\n const definedValue =\n this.getDisplayedDistance() ?? this.getDisplayedAngle() ?? 0;\n const displayValue = `${Number.parseFloat(\n definedValue.toFixed(this.decimalPlaces),\n )}`;\n\n this.inputRef.value = displayValue;\n }\n }\n };\n\n private updateInputPosition = (): void => {\n const dragging = this.dragging ?? this.lastDragged;\n\n const isDraggingTwoAxesTranslation =\n dragging?.identifier === 'xy-translate' ||\n dragging?.identifier === 'xz-translate' ||\n dragging?.identifier === 'yz-translate';\n\n if (\n this.showInputs &&\n this.viewer?.frame != null &&\n this.position != null &&\n dragging != null &&\n !isDraggingTwoAxesTranslation\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 } else if (isDraggingTwoAxesTranslation) {\n this.inputPosition = undefined;\n }\n };\n\n private beginEndTransform = (): void => {\n const widget = this.getTransformWidget();\n\n widget.updateDisabledAxis({\n xRotation: true,\n yRotation: true,\n zRotation: true,\n xTranslation: true,\n yTranslation: true,\n zTranslation: true,\n xyTranslation: true,\n xzTranslation: true,\n yzTranslation: true,\n });\n\n this.isEndingTransform = true;\n };\n\n private completeEndTransform = (): void => {\n const widget = this.getTransformWidget();\n\n 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 xyTranslation: this.xyTranslationDisabled,\n xzTranslation: this.xzTranslationDisabled,\n yzTranslation: this.yzTranslationDisabled,\n });\n\n this.isEndingTransform = false;\n this.inputShouldFocus = true;\n\n if (this.currentTransform != null) {\n this.position = Vector3.fromMatrixPosition(this.currentTransform);\n this.rotation = Euler.fromRotationMatrix(this.currentTransform);\n }\n };\n\n private isModifyingAngleUnits = (): boolean => {\n const draggingIdentifier =\n this.dragging?.identifier ?? this.lastDragged?.identifier;\n\n return !!draggingIdentifier?.includes('rotate');\n };\n\n private getTranslationScalar = (): number => {\n if (this.translationHandleScalar > 0) {\n return this.translationHandleScalar;\n }\n console.warn(\n 'Invalid value provided for translation-handle-scalar. Expected a positive value greater than zero.',\n );\n return 1;\n };\n\n private getRotationScalar = (): number => {\n if (this.rotationHandleScalar > 0) {\n return this.rotationHandleScalar;\n }\n console.warn(\n 'Invalid value provided for rotation-handle-scalar. Expected a positive value greater than zero.',\n );\n return 1;\n };\n\n private getDisplayedUnits = (): AngleUnits | DistanceUnits => {\n if (this.isModifyingAngleUnits()) {\n return new AngleUnits(this.angleUnit);\n }\n return new DistanceUnits(this.distanceUnit);\n };\n\n private getDisplayedAngle = (): number | undefined => {\n if (this.isModifyingAngleUnits()) {\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.transpose(\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(c)),\n );\n const position = Matrix4.makeTranslation(newPosition);\n\n return Matrix4.multiply(currentRotation, position);\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.makeRotation(Quaternion.fromMatrixRotation(c));\n\n const newRotation = Matrix4.makeRotation(\n Quaternion.fromEuler(newRotationEuler),\n );\n\n const oldTranslation = Matrix4.multiply(oldRotation, c);\n\n return Matrix4.multiply(Matrix4.transpose(newRotation), oldTranslation);\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"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import{p as e,g as n,b as a}from"./p-CCVkga9Q.js";export{s as setNonce}from"./p-CCVkga9Q.js";var t=()=>{const n=import.meta.url;const a={};if(n!==""){a.resourcesUrl=new URL(".",n).href}return e(a)};t().then((async e=>{await n();return a(JSON.parse('[["p-00540193",[[257,"vertex-scene-tree",{"overScanCount":[2,"over-scan-count"],"viewerSelector":[1,"viewer-selector"],"viewer":[1040],"rowData":[16],"config":[1],"configEnv":[1,"config-env"],"controller":[1040],"searchOptions":[1040],"metadataSearchExactMatch":[1028,"metadata-search-exact-match"],"metadataSearchKeys":[1040],"metadataKeys":[16],"operationAnimationDuration":[2,"operation-animation-duration"],"rows":[32],"totalRows":[32],"showLoader":[32],"showEmptyResults":[32],"stateMap":[32],"errorDetails":[32],"hasPartialFilterResults":[32],"refreshingResults":[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],"isolateItem":[64],"getRowAtIndex":[64],"getRowForItemId":[64],"getRowForEvent":[64],"getRowAtClientY":[64],"filterItems":[64],"selectFilteredItems":[64],"fetchMetadataKeys":[64]},[[0,"search","handleSearch"],[0,"cellLoaded","handleCellLoaded"]],{"viewer":[{"handleViewerChanged":0}],"controller":[{"handleControllerChanged":0}],"metadataKeys":[{"handleMetadataKeysChanged":0}]}]]],["p-53f6cc59",[[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]},null,{"mode":[{"watchModeChange":0}],"tool":[{"watchTypeChange":0}],"accentColor":[{"watchAccentColorChange":0}],"primaryColor":[{"watchPrimaryColorChange":0}],"pins":[{"watchPinsChange":0}],"viewer":[{"handleViewerChanged":0}]}]]],["p-504e77a7",[[1,"vertex-viewer-default-toolbar",{"viewer":[16],"placement":[1],"direction":[1],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"]}]]],["p-287e0670",[[257,"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"],"originatingViewport":[16],"centeringBehavior":[1,"centering-behavior"],"offset":[16],"scale":[2],"toSelectMarkupId":[32],"pointerDownPosition":[32],"addMarkup":[64],"removeMarkup":[64],"getMarkupElements":[64],"getMarkupElement":[64]},[[0,"markupEnd","handleMarkupEnd"],[0,"interactionEnd","handleMarkupUpdated"],[1,"pointerdown","handleMarkupPointerDown"]],{"selectedMarkupId":[{"handleSelectedMarkupIdChanged":0}],"arrowTemplateId":[{"handlePropertyChanged":0}],"circleTemplateId":[{"handlePropertyChanged":0}],"freeformTemplateId":[{"handlePropertyChanged":0}],"tool":[{"handlePropertyChanged":0}],"viewer":[{"handleViewerChanged":0}],"originatingViewport":[{"handleViewerChanged":0}],"centeringBehavior":[{"handleViewerChanged":0}],"offset":[{"handleViewerChanged":0}],"scale":[{"handleViewerChanged":0}],"disabled":[{"handleDisabledChanged":0}],"startLineAnchorStyle":[{"handleStartLineAnchorStyleChanged":0}],"endLineAnchorStyle":[{"handleEndLineAnchorStyleChanged":0}]}]]],["p-c531ca97",[[257,"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"],"originatingViewport":[16],"centeringBehavior":[1,"centering-behavior"],"offset":[16],"scale":[2],"stateMap":[32],"reset":[64]},null,{"viewer":[{"handleViewerChanged":0}],"arrowTemplateId":[{"handlePropertyChanged":0}],"circleTemplateId":[{"handlePropertyChanged":0}],"disabled":[{"handlePropertyChanged":0}],"endLineAnchorStyle":[{"handlePropertyChanged":0}],"freeformTemplateId":[{"handlePropertyChanged":0}],"startLineAnchorStyle":[{"handlePropertyChanged":0}],"tool":[{"handlePropertyChanged":0}],"scale":[{"handleScalingConfigurationChanged":0}],"offset":[{"handleScalingConfigurationChanged":0}],"originatingViewport":[{"handleScalingConfigurationChanged":0}],"centeringBehavior":[{"handleScalingConfigurationChanged":0}]}]]],["p-48020de1",[[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"],"viewAll":[4,"view-all"],"animationDuration":[2,"animation-duration"],"triadOff":[4,"triad-off"],"worldOrientation":[1040],"camera":[1040],"viewer":[16],"boxLength":[32],"triadPosition":[32]},null,{"viewer":[{"handleViewerChanged":0}]}]]],["p-cc835213",[[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]},null,{"viewer":[{"handleViewerChanged":0}],"units":[{"handleUnitsChanged":1}],"camera":[{"handleCameraChanged":0}],"mode":[{"handleModeChanged":0}],"start":[{"handleStartChanged":0}],"end":[{"handleEndChanged":0}],"invalid":[{"handleInvalidChanged":0}]}]]],["p-d5a57757",[[1,"vertex-viewer-measurement-precise",{"measurementModel":[16],"measurementOverlays":[16],"measurementController":[1040],"measurableEntityTypes":[16],"viewer":[16],"configEnv":[1,"config-env"],"config":[1]},null,{"measurableEntityTypes":[{"handleMeasurableEntityTypesChanged":0}],"measurementController":[{"handleMeasurementControllerChanged":0}],"measurementModel":[{"handleMeasurementModelChanged":1}],"viewer":[{"handleViewerChanged":0}]}]]],["p-7cb9c9bb",[[257,"vertex-scene-tree-table-cell",{"node":[16],"tree":[16],"value":[1],"placeholder":[1],"alwaysShowIcons":[4,"always-show-icons"],"hovered":[1028],"isScrolling":[4,"is-scrolling"],"expandToggle":[4,"expand-toggle"],"endItemIndicator":[4,"end-item-indicator"],"visibilityToggle":[4,"visibility-toggle"],"isolateButton":[4,"isolate-button"],"selectionHandler":[16],"visibilityHandler":[16],"expansionHandler":[16],"isolateHandler":[16],"hoverController":[16]}]]],["p-b5cc83a4",[[1,"vertex-viewer-annotation-callout",{"data":[16],"iconSize":[1,"icon-size"]}]]],["p-c9dee5c4",[[257,"vertex-viewer-box-query-tool",{"viewer":[16],"controller":[1040],"model":[1040],"operationType":[1,"operation-type"],"mode":[1],"details":[32]},null,{"viewer":[{"handleViewerChanged":0}],"operationType":[{"handleDefaultOperationChange":0}],"mode":[{"handleModeChange":0}],"controller":[{"handleControllerChange":0}]}]]],["p-3c5dd716",[[257,"vertex-viewer-walk-mode-tool",{"viewer":[16],"controller":[1040],"model":[1040],"teleportMode":[1,"teleport-mode"],"enabled":[4]},null,{"enabled":[{"handleEnabledChanged":0}],"viewer":[{"handleViewerChanged":0}],"teleportMode":[{"handleTeleportModeChanged":0}],"controller":[{"handleControllerChanged":0}],"model":[{"handleModelChanged":0}]}]]],["p-d357d235",[[257,"vertex-scene-tree-table-column",{"initialWidth":[2,"initial-width"],"minWidth":[2,"min-width"],"maxWidth":[2,"max-width"]}]]],["p-15683a45",[[257,"vertex-scene-tree-table-header"]]],["p-dad8f3cf",[[257,"vertex-scene-tree-table-resize-divider",{"hovering":[32],"dragging":[32]}]]],["p-cf2ea8e9",[[257,"vertex-scene-tree-toolbar-group"]]],["p-edc2f914",[[257,"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],"sceneComparison":[16],"crossSectioning":[16],"featureMaps":[1,"feature-maps"],"resizeDebounce":[2,"resize-debounce"],"frame":[1040],"stream":[1040],"stencilBuffer":[1040],"viewport":[1040],"annotations":[1040],"modelViews":[1040],"pmi":[1040],"sceneItems":[1040],"canvases":[1040],"experimentalSkipVisibilityCheck":[4,"experimental-skip-visibility-check"],"dimensions":[32],"hostDimensions":[32],"errorMessage":[32],"cursor":[32],"stateMap":[32],"dispatchFrameDrawn":[64],"registerInteractionHandler":[64],"registerBasicInteractionHandler":[64],"registerTapKeyInteraction":[64],"getInteractionTarget_DEPRECATED":[64],"addCursor":[64],"getInteractionHandlers":[64],"getKeyInteractions":[64],"getBaseInteractionHandler":[64],"getJwt":[64],"load":[64],"unload":[64],"reload":[64],"scene":[64],"isSceneReady":[64]},[[0,"tap","handleTapEvent"]],{"src":[{"handleSrcChanged":0}],"cameraControls":[{"handleCameraControlsChanged":0}],"keyboardControls":[{"handleKeyboardControlsChanged":0}],"rotateAroundTapPoint":[{"handleRotateAboutTapPointChanged":0}],"cameraType":[{"handleCameraTypeChanged":0}],"crossSectioning":[{"handleStreamAttributesChanged":0}],"depthBuffers":[{"handleStreamAttributesChanged":0}],"experimentalRenderingOptions":[{"handleStreamAttributesChanged":0}],"featureHighlighting":[{"handleStreamAttributesChanged":0}],"featureLines":[{"handleStreamAttributesChanged":0}],"featureMaps":[{"handleStreamAttributesChanged":0}],"noDefaultLights":[{"handleStreamAttributesChanged":0}],"phantom":[{"handleStreamAttributesChanged":0}],"sceneComparison":[{"handleStreamAttributesChanged":0}],"selectionHighlighting":[{"handleStreamAttributesChanged":0}],"enableTemporalRefinement":[{"handleEnableTemporalRefinementChanged":0}],"config":[{"handleConfigChanged":0}],"configEnv":[{"handleConfigEnvChanged":0}]}]]],["p-9a39315d",[[1,"vertex-viewer-hit-result-indicator",{"viewer":[16],"position":[1040],"normal":[1040]},null,{"viewer":[{"handleViewerChanged":0}],"position":[{"handlePositionChanged":0}],"normal":[{"handleNormalChanged":0}]}]]],["p-30a5748d",[[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]},null,{"distanceUnits":[{"handleDistanceUnitsChanged":1}],"angleUnits":[{"handleAngleUnitsChanged":1}],"measurementModel":[{"handleMeasurementModelChanged":1}],"resultTypes":[{"handleResultTypesChanged":0}]}]]],["p-4dd67d16",[[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"],"xyTranslationDisabled":[1028,"xy-translation-disabled"],"xzTranslationDisabled":[1028,"xz-translation-disabled"],"yzTranslationDisabled":[1028,"yz-translation-disabled"],"showInputs":[4,"show-inputs"],"distanceUnit":[1,"distance-unit"],"angleUnit":[1,"angle-unit"],"decimalPlaces":[2,"decimal-places"],"rotationSnapDegrees":[2,"rotation-snap-degrees"],"rotationSnapKey":[1,"rotation-snap-key"],"translationHandleScalar":[2,"translation-handle-scalar"],"rotationHandleScalar":[2,"rotation-handle-scalar"],"interactionThrottle":[2,"interaction-throttle"],"EXPERIMENTAL_undoKeybindings":[4,"e-x-p-e-r-i-m-e-n-t-a-l_undo-keybindings"],"hovered":[1040],"inputPosition":[32],"inputValue":[32],"isEndingTransform":[32],"inputShouldFocus":[32],"EXPERIMENTAL_undo":[64]},null,{"viewer":[{"handleViewerChanged":0}],"xTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"yTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"zTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"xyTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"xzTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"yzTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"xRotationDisabled":[{"handleDisabledPropertyChanged":0}],"yRotationDisabled":[{"handleDisabledPropertyChanged":0}],"zRotationDisabled":[{"handleDisabledPropertyChanged":0}],"translationHandleScalar":[{"handleTransformHandleScalarChanged":0}],"rotationHandleScalar":[{"handleTransformHandleScalarChanged":0}],"rotation":[{"handleRotationChanged":0}],"position":[{"handlePositionChanged":0}],"distanceUnit":[{"handleInputFormattingChanged":0}],"angleUnit":[{"handleInputFormattingChanged":0}],"decimalPlaces":[{"handleInputFormattingChanged":0}]}]]],["p-e4913b06",[[0,"vertex-viewer-pin-group",{"pin":[16],"matrix":[1040],"projectionViewMatrix":[16],"elementBounds":[1040],"pinModel":[16],"pinController":[1040],"selected":[4],"occluded":[1540],"detached":[1540],"invalidateStateCounter":[32]},[[0,"occlusionStateChanged","handleOcclusionStateChanged"],[0,"detachedStateChanged","handleDetachedStateChanged"]]]]],["p-2d2fa147",[[262,"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]},null,{"position":[{"handlePositionChange":0}],"positionJson":[{"handlePositionJsonChanged":0}],"rotation":[{"handleRotationChanged":0}],"rotationJson":[{"handleRotationJsonChanged":0}],"quaternion":[{"handleQuaternionChange":0}],"quaternionJson":[{"handleQuaternionJsonChanged":0}],"scale":[{"handleScaleChange":0}],"scaleJson":[{"handleScaleJsonChanged":0}],"matrix":[{"handleMatrixChanged":0}]}]]],["p-ef9437ca",[[1,"vertex-viewer-teleport-tool",{"viewer":[16],"mode":[1025],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"],"controller":[1040],"model":[1040]},null,{"mode":[{"handleModeChange":0}],"viewer":[{"handleViewerChanged":0}],"animationMs":[{"handleAnimationMsChanged":0}],"animationsDisabled":[{"handleAnimationsDisabledChanged":0}],"controller":[{"handleControllerChanged":0}],"model":[{"handleModelChanged":0}]}]]],["p-e98db875",[[1,"vertex-viewer-spinner",{"size":[1]}]]],["p-b6dfbeec",[[257,"vertex-viewer-layer",{"stretchOff":[516,"stretch-off"]}]]],["p-ce711ae0",[[257,"vertex-viewer-toolbar",{"placement":[1],"direction":[1]}],[257,"vertex-viewer-button",{"ariaLabel":[1,"aria-label"]}],[257,"vertex-viewer-toolbar-group",{"direction":[1]}]]],["p-fd3a5837",[[257,"vertex-scene-tree-search",{"debounce":[2],"disabled":[4],"placeholder":[1],"controller":[16],"value":[1025],"focused":[32],"isSearching":[32],"setFocus":[64],"clear":[64]},null,{"controller":[{"controllerChanged":0}]}],[1,"vertex-scene-tree-notification-banner",{"message":[1],"actionLabel":[1,"action-label"]}],[257,"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],"attemptComputeCellHeight":[64]},null,{"rows":[{"handleViewportRowsPropsChanged":0}],"totalRows":[{"handleViewportRowsPropsChanged":0}],"rowHeight":[{"handleViewportRowsPropsChanged":0}]}],[257,"vertex-scene-tree-toolbar"]]],["p-32a51a21",[[0,"vertex-viewer-pin-label",{"pin":[16],"elementBounds":[16],"value":[1025],"pinController":[1040],"focused":[32],"computedScreenPosition":[32],"textareaRows":[32],"contentElBounds":[32],"setFocus":[64],"submit":[64]},null,{"focused":[{"watchFocusChange":0}],"pin":[{"watchPinChange":0}],"elementBounds":[{"watchElementBoundsChange":0}]}],[0,"vertex-viewer-pin-label-line",{"pinPoint":[16],"labelPoint":[16],"pin":[16]}]]],["p-b79c295a",[[1,"vertex-viewer-measurement-overlays",{"measurementOverlays":[16],"camera":[1040],"viewer":[16],"overlays":[32]},null,{"measurementOverlays":[{"handleMeasurementOverlaysChanged":0}],"viewer":[{"handleViewerChanged":0}]}],[1,"vertex-viewer-measurement-line",{"start":[16],"end":[16],"capLength":[2,"cap-length"],"pointerEvents":[1,"pointer-events"]}]]],["p-5cfb3047",[[262,"vertex-viewer-dom-renderer",{"drawMode":[1,"draw-mode"],"propagateEventsToViewer":[4,"propagate-events-to-viewer"],"viewer":[16],"camera":[1040],"depthBuffer":[1040],"viewport":[32],"invalidateFrameCounter":[32],"interactionDisposables":[32]},[[0,"propertyChange","handlePropertyChange"]],{"viewer":[{"handleViewerChange":0}]}],[257,"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],"detachedOff":[4,"detached-off"],"detached":[516],"billboardOff":[4,"billboard-off"],"interactionsOff":[516,"interactions-off"]},null,{"position":[{"handleMatrixPropertyChange":1}],"quaternion":[{"handleMatrixPropertyChange":1}],"scale":[{"handleMatrixPropertyChange":1}],"positionJson":[{"handlePositionJsonChanged":1}],"rotation":[{"handleRotationChanged":1}],"rotationJson":[{"handleRotationJsonChanged":1}],"quaternionJson":[{"handleQuaternionJsonChanged":1}],"scaleJson":[{"handleScaleJsonChanged":1}],"matrix":[{"handleMatrixChanged":0}],"occluded":[{"handleOcclusionStateChanged":0}],"detached":[{"handleDetachedStateChanged":0}]}]]],["p-83683307",[[1,"vertex-viewer-markup-arrow",{"start":[1040],"startJson":[1,"start"],"end":[1040],"endJson":[1,"end"],"originatingViewport":[16],"centeringBehavior":[1,"centering-behavior"],"offset":[16],"scale":[2],"startLineAnchorStyle":[1025,"start-line-anchor-style"],"endLineAnchorStyle":[1025,"end-line-anchor-style"],"mode":[513],"viewer":[16],"elementBounds":[32],"dispose":[64]},null,{"viewer":[{"handleViewerChanged":0}],"start":[{"handleStartJsonChange":0}],"end":[{"handleEndJsonChange":0}],"mode":[{"handleModeChange":0}],"offset":[{"handleScalingConfigurationChange":0}],"originatingViewport":[{"handleScalingConfigurationChange":0}],"centeringBehavior":[{"handleScalingConfigurationChange":0}],"scale":[{"handleScalingConfigurationChange":0},{"handleScaleChange":0}]}],[1,"vertex-viewer-markup-circle",{"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"originatingViewport":[16],"centeringBehavior":[1,"centering-behavior"],"offset":[16],"scale":[2],"elementBounds":[32],"dispose":[64]},null,{"viewer":[{"handleViewerChanged":0}],"bounds":[{"handleBoundsJsonChange":0}],"mode":[{"handleModeChange":0}],"offset":[{"handleScalingConfigurationChange":0}],"originatingViewport":[{"handleScalingConfigurationChange":0}],"centeringBehavior":[{"handleScalingConfigurationChange":0}],"scale":[{"handleScalingConfigurationChange":0},{"handleScaleChange":0}]}],[1,"vertex-viewer-markup-freeform",{"points":[1040],"pointsJson":[1,"points"],"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"originatingViewport":[16],"centeringBehavior":[1,"centering-behavior"],"offset":[16],"scale":[2],"elementBounds":[32],"screenPoints":[32],"dispose":[64]},null,{"viewer":[{"handleViewerChanged":0}],"originatingViewport":[{"recomputePointsFromProps":0},{"handleScalingConfigurationChange":0}],"offset":[{"recomputePointsFromProps":0},{"handleScalingConfigurationChange":0}],"scale":[{"recomputePointsFromProps":0},{"handleScalingConfigurationChange":0},{"handleScaleChange":0}],"bounds":[{"recomputePointsFromProps":0}],"points":[{"recomputePointsFromProps":0}],"centeringBehavior":[{"handleScalingConfigurationChange":0}],"mode":[{"handleModeChange":0}]}]]],["p-a9282481",[[1,"vertex-viewer-icon",{"name":[1],"size":[1]}]]]]'),e)}));
4
+ import{p as e,g as n,b as a}from"./p-CCVkga9Q.js";export{s as setNonce}from"./p-CCVkga9Q.js";var t=()=>{const n=import.meta.url;const a={};if(n!==""){a.resourcesUrl=new URL(".",n).href}return e(a)};t().then((async e=>{await n();return a(JSON.parse('[["p-1506f9a2",[[257,"vertex-scene-tree",{"overScanCount":[2,"over-scan-count"],"viewerSelector":[1,"viewer-selector"],"viewer":[1040],"rowData":[16],"config":[1],"configEnv":[1,"config-env"],"controller":[1040],"searchOptions":[1040],"metadataSearchExactMatch":[1028,"metadata-search-exact-match"],"metadataSearchKeys":[1040],"metadataKeys":[16],"operationAnimationDuration":[2,"operation-animation-duration"],"rows":[32],"totalRows":[32],"showLoader":[32],"showEmptyResults":[32],"stateMap":[32],"errorDetails":[32],"hasPartialFilterResults":[32],"refreshingResults":[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],"isolateItem":[64],"getRowAtIndex":[64],"getRowForItemId":[64],"getRowForEvent":[64],"getRowAtClientY":[64],"filterItems":[64],"selectFilteredItems":[64],"fetchMetadataKeys":[64]},[[0,"search","handleSearch"],[0,"cellLoaded","handleCellLoaded"]],{"viewer":[{"handleViewerChanged":0}],"controller":[{"handleControllerChanged":0}],"metadataKeys":[{"handleMetadataKeysChanged":0}]}]]],["p-53f6cc59",[[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]},null,{"mode":[{"watchModeChange":0}],"tool":[{"watchTypeChange":0}],"accentColor":[{"watchAccentColorChange":0}],"primaryColor":[{"watchPrimaryColorChange":0}],"pins":[{"watchPinsChange":0}],"viewer":[{"handleViewerChanged":0}]}]]],["p-504e77a7",[[1,"vertex-viewer-default-toolbar",{"viewer":[16],"placement":[1],"direction":[1],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"]}]]],["p-287e0670",[[257,"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"],"originatingViewport":[16],"centeringBehavior":[1,"centering-behavior"],"offset":[16],"scale":[2],"toSelectMarkupId":[32],"pointerDownPosition":[32],"addMarkup":[64],"removeMarkup":[64],"getMarkupElements":[64],"getMarkupElement":[64]},[[0,"markupEnd","handleMarkupEnd"],[0,"interactionEnd","handleMarkupUpdated"],[1,"pointerdown","handleMarkupPointerDown"]],{"selectedMarkupId":[{"handleSelectedMarkupIdChanged":0}],"arrowTemplateId":[{"handlePropertyChanged":0}],"circleTemplateId":[{"handlePropertyChanged":0}],"freeformTemplateId":[{"handlePropertyChanged":0}],"tool":[{"handlePropertyChanged":0}],"viewer":[{"handleViewerChanged":0}],"originatingViewport":[{"handleViewerChanged":0}],"centeringBehavior":[{"handleViewerChanged":0}],"offset":[{"handleViewerChanged":0}],"scale":[{"handleViewerChanged":0}],"disabled":[{"handleDisabledChanged":0}],"startLineAnchorStyle":[{"handleStartLineAnchorStyleChanged":0}],"endLineAnchorStyle":[{"handleEndLineAnchorStyleChanged":0}]}]]],["p-c531ca97",[[257,"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"],"originatingViewport":[16],"centeringBehavior":[1,"centering-behavior"],"offset":[16],"scale":[2],"stateMap":[32],"reset":[64]},null,{"viewer":[{"handleViewerChanged":0}],"arrowTemplateId":[{"handlePropertyChanged":0}],"circleTemplateId":[{"handlePropertyChanged":0}],"disabled":[{"handlePropertyChanged":0}],"endLineAnchorStyle":[{"handlePropertyChanged":0}],"freeformTemplateId":[{"handlePropertyChanged":0}],"startLineAnchorStyle":[{"handlePropertyChanged":0}],"tool":[{"handlePropertyChanged":0}],"scale":[{"handleScalingConfigurationChanged":0}],"offset":[{"handleScalingConfigurationChanged":0}],"originatingViewport":[{"handleScalingConfigurationChanged":0}],"centeringBehavior":[{"handleScalingConfigurationChanged":0}]}]]],["p-a94b626c",[[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"],"viewAll":[4,"view-all"],"animationDuration":[2,"animation-duration"],"triadOff":[4,"triad-off"],"worldOrientation":[1040],"camera":[1040],"viewer":[16],"boxLength":[32],"triadPosition":[32]},null,{"viewer":[{"handleViewerChanged":0}]}]]],["p-ea45c3e9",[[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]},null,{"viewer":[{"handleViewerChanged":0}],"units":[{"handleUnitsChanged":1}],"camera":[{"handleCameraChanged":0}],"mode":[{"handleModeChanged":0}],"start":[{"handleStartChanged":0}],"end":[{"handleEndChanged":0}],"invalid":[{"handleInvalidChanged":0}]}]]],["p-93311f46",[[1,"vertex-viewer-measurement-precise",{"measurementModel":[16],"measurementOverlays":[16],"measurementController":[1040],"measurableEntityTypes":[16],"viewer":[16],"configEnv":[1,"config-env"],"config":[1]},null,{"measurableEntityTypes":[{"handleMeasurableEntityTypesChanged":0}],"measurementController":[{"handleMeasurementControllerChanged":0}],"measurementModel":[{"handleMeasurementModelChanged":1}],"viewer":[{"handleViewerChanged":0}]}]]],["p-36349a80",[[257,"vertex-scene-tree-table-cell",{"node":[16],"tree":[16],"value":[1],"placeholder":[1],"alwaysShowIcons":[4,"always-show-icons"],"hovered":[1028],"isScrolling":[4,"is-scrolling"],"expandToggle":[4,"expand-toggle"],"endItemIndicator":[4,"end-item-indicator"],"visibilityToggle":[4,"visibility-toggle"],"isolateButton":[4,"isolate-button"],"selectionHandler":[16],"visibilityHandler":[16],"expansionHandler":[16],"isolateHandler":[16],"hoverController":[16]}]]],["p-b5cc83a4",[[1,"vertex-viewer-annotation-callout",{"data":[16],"iconSize":[1,"icon-size"]}]]],["p-c9dee5c4",[[257,"vertex-viewer-box-query-tool",{"viewer":[16],"controller":[1040],"model":[1040],"operationType":[1,"operation-type"],"mode":[1],"details":[32]},null,{"viewer":[{"handleViewerChanged":0}],"operationType":[{"handleDefaultOperationChange":0}],"mode":[{"handleModeChange":0}],"controller":[{"handleControllerChange":0}]}]]],["p-3c5dd716",[[257,"vertex-viewer-walk-mode-tool",{"viewer":[16],"controller":[1040],"model":[1040],"teleportMode":[1,"teleport-mode"],"enabled":[4]},null,{"enabled":[{"handleEnabledChanged":0}],"viewer":[{"handleViewerChanged":0}],"teleportMode":[{"handleTeleportModeChanged":0}],"controller":[{"handleControllerChanged":0}],"model":[{"handleModelChanged":0}]}]]],["p-d357d235",[[257,"vertex-scene-tree-table-column",{"initialWidth":[2,"initial-width"],"minWidth":[2,"min-width"],"maxWidth":[2,"max-width"]}]]],["p-15683a45",[[257,"vertex-scene-tree-table-header"]]],["p-dad8f3cf",[[257,"vertex-scene-tree-table-resize-divider",{"hovering":[32],"dragging":[32]}]]],["p-cf2ea8e9",[[257,"vertex-scene-tree-toolbar-group"]]],["p-ecd594f2",[[257,"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],"sceneComparison":[16],"crossSectioning":[16],"featureMaps":[1,"feature-maps"],"resizeDebounce":[2,"resize-debounce"],"frame":[1040],"stream":[1040],"stencilBuffer":[1040],"viewport":[1040],"annotations":[1040],"modelViews":[1040],"pmi":[1040],"sceneItems":[1040],"canvases":[1040],"experimentalSkipVisibilityCheck":[4,"experimental-skip-visibility-check"],"dimensions":[32],"hostDimensions":[32],"errorMessage":[32],"cursor":[32],"stateMap":[32],"dispatchFrameDrawn":[64],"registerInteractionHandler":[64],"registerBasicInteractionHandler":[64],"registerTapKeyInteraction":[64],"getInteractionTarget_DEPRECATED":[64],"addCursor":[64],"getInteractionHandlers":[64],"getKeyInteractions":[64],"getBaseInteractionHandler":[64],"getJwt":[64],"load":[64],"unload":[64],"reload":[64],"scene":[64],"isSceneReady":[64]},[[0,"tap","handleTapEvent"]],{"src":[{"handleSrcChanged":0}],"cameraControls":[{"handleCameraControlsChanged":0}],"keyboardControls":[{"handleKeyboardControlsChanged":0}],"rotateAroundTapPoint":[{"handleRotateAboutTapPointChanged":0}],"cameraType":[{"handleCameraTypeChanged":0}],"crossSectioning":[{"handleStreamAttributesChanged":0}],"depthBuffers":[{"handleStreamAttributesChanged":0}],"experimentalRenderingOptions":[{"handleStreamAttributesChanged":0}],"featureHighlighting":[{"handleStreamAttributesChanged":0}],"featureLines":[{"handleStreamAttributesChanged":0}],"featureMaps":[{"handleStreamAttributesChanged":0}],"noDefaultLights":[{"handleStreamAttributesChanged":0}],"phantom":[{"handleStreamAttributesChanged":0}],"sceneComparison":[{"handleStreamAttributesChanged":0}],"selectionHighlighting":[{"handleStreamAttributesChanged":0}],"enableTemporalRefinement":[{"handleEnableTemporalRefinementChanged":0}],"config":[{"handleConfigChanged":0}],"configEnv":[{"handleConfigEnvChanged":0}]}]]],["p-2faddbf8",[[1,"vertex-viewer-hit-result-indicator",{"viewer":[16],"position":[1040],"normal":[1040]},null,{"viewer":[{"handleViewerChanged":0}],"position":[{"handlePositionChanged":0}],"normal":[{"handleNormalChanged":0}]}]]],["p-45cc095e",[[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]},null,{"distanceUnits":[{"handleDistanceUnitsChanged":1}],"angleUnits":[{"handleAngleUnitsChanged":1}],"measurementModel":[{"handleMeasurementModelChanged":1}],"resultTypes":[{"handleResultTypesChanged":0}]}]]],["p-fec5a15d",[[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"],"xyTranslationDisabled":[1028,"xy-translation-disabled"],"xzTranslationDisabled":[1028,"xz-translation-disabled"],"yzTranslationDisabled":[1028,"yz-translation-disabled"],"showInputs":[4,"show-inputs"],"distanceUnit":[1,"distance-unit"],"angleUnit":[1,"angle-unit"],"decimalPlaces":[2,"decimal-places"],"rotationSnapDegrees":[2,"rotation-snap-degrees"],"rotationSnapKey":[1,"rotation-snap-key"],"translationHandleScalar":[2,"translation-handle-scalar"],"rotationHandleScalar":[2,"rotation-handle-scalar"],"interactionThrottle":[2,"interaction-throttle"],"EXPERIMENTAL_undoKeybindings":[4,"e-x-p-e-r-i-m-e-n-t-a-l_undo-keybindings"],"hovered":[1040],"inputPosition":[32],"inputValue":[32],"isEndingTransform":[32],"inputShouldFocus":[32],"EXPERIMENTAL_undo":[64]},null,{"viewer":[{"handleViewerChanged":0}],"xTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"yTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"zTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"xyTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"xzTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"yzTranslationDisabled":[{"handleDisabledPropertyChanged":0}],"xRotationDisabled":[{"handleDisabledPropertyChanged":0}],"yRotationDisabled":[{"handleDisabledPropertyChanged":0}],"zRotationDisabled":[{"handleDisabledPropertyChanged":0}],"translationHandleScalar":[{"handleTransformHandleScalarChanged":0}],"rotationHandleScalar":[{"handleTransformHandleScalarChanged":0}],"rotation":[{"handleRotationChanged":0}],"position":[{"handlePositionChanged":0}],"distanceUnit":[{"handleInputFormattingChanged":0}],"angleUnit":[{"handleInputFormattingChanged":0}],"decimalPlaces":[{"handleInputFormattingChanged":0}]}]]],["p-44395076",[[0,"vertex-viewer-pin-group",{"pin":[16],"matrix":[1040],"projectionViewMatrix":[16],"elementBounds":[1040],"pinModel":[16],"pinController":[1040],"selected":[4],"occluded":[1540],"detached":[1540],"invalidateStateCounter":[32]},[[0,"occlusionStateChanged","handleOcclusionStateChanged"],[0,"detachedStateChanged","handleDetachedStateChanged"]]]]],["p-2d2fa147",[[262,"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]},null,{"position":[{"handlePositionChange":0}],"positionJson":[{"handlePositionJsonChanged":0}],"rotation":[{"handleRotationChanged":0}],"rotationJson":[{"handleRotationJsonChanged":0}],"quaternion":[{"handleQuaternionChange":0}],"quaternionJson":[{"handleQuaternionJsonChanged":0}],"scale":[{"handleScaleChange":0}],"scaleJson":[{"handleScaleJsonChanged":0}],"matrix":[{"handleMatrixChanged":0}]}]]],["p-ef9437ca",[[1,"vertex-viewer-teleport-tool",{"viewer":[16],"mode":[1025],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"],"controller":[1040],"model":[1040]},null,{"mode":[{"handleModeChange":0}],"viewer":[{"handleViewerChanged":0}],"animationMs":[{"handleAnimationMsChanged":0}],"animationsDisabled":[{"handleAnimationsDisabledChanged":0}],"controller":[{"handleControllerChanged":0}],"model":[{"handleModelChanged":0}]}]]],["p-e98db875",[[1,"vertex-viewer-spinner",{"size":[1]}]]],["p-b6dfbeec",[[257,"vertex-viewer-layer",{"stretchOff":[516,"stretch-off"]}]]],["p-ce711ae0",[[257,"vertex-viewer-toolbar",{"placement":[1],"direction":[1]}],[257,"vertex-viewer-button",{"ariaLabel":[1,"aria-label"]}],[257,"vertex-viewer-toolbar-group",{"direction":[1]}]]],["p-ebd9dd99",[[257,"vertex-scene-tree-search",{"debounce":[2],"disabled":[4],"placeholder":[1],"controller":[16],"value":[1025],"focused":[32],"isSearching":[32],"setFocus":[64],"clear":[64]},null,{"controller":[{"controllerChanged":0}]}],[1,"vertex-scene-tree-notification-banner",{"message":[1],"actionLabel":[1,"action-label"]}],[257,"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],"attemptComputeCellHeight":[64]},null,{"rows":[{"handleViewportRowsPropsChanged":0}],"totalRows":[{"handleViewportRowsPropsChanged":0}],"rowHeight":[{"handleViewportRowsPropsChanged":0}]}],[257,"vertex-scene-tree-toolbar"]]],["p-dcb6ddfe",[[0,"vertex-viewer-pin-label",{"pin":[16],"elementBounds":[16],"value":[1025],"pinController":[1040],"focused":[32],"computedScreenPosition":[32],"textareaRows":[32],"contentElBounds":[32],"setFocus":[64],"submit":[64]},null,{"focused":[{"watchFocusChange":0}],"pin":[{"watchPinChange":0}],"elementBounds":[{"watchElementBoundsChange":0}]}],[0,"vertex-viewer-pin-label-line",{"pinPoint":[16],"labelPoint":[16],"pin":[16]}]]],["p-ced98004",[[1,"vertex-viewer-measurement-overlays",{"measurementOverlays":[16],"camera":[1040],"viewer":[16],"overlays":[32]},null,{"measurementOverlays":[{"handleMeasurementOverlaysChanged":0}],"viewer":[{"handleViewerChanged":0}]}],[1,"vertex-viewer-measurement-line",{"start":[16],"end":[16],"capLength":[2,"cap-length"],"pointerEvents":[1,"pointer-events"]}]]],["p-293d8f3f",[[262,"vertex-viewer-dom-renderer",{"drawMode":[1,"draw-mode"],"propagateEventsToViewer":[4,"propagate-events-to-viewer"],"viewer":[16],"camera":[1040],"depthBuffer":[1040],"viewport":[32],"invalidateFrameCounter":[32],"interactionDisposables":[32]},[[0,"propertyChange","handlePropertyChange"]],{"viewer":[{"handleViewerChange":0}]}],[257,"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],"detachedOff":[4,"detached-off"],"detached":[516],"billboardOff":[4,"billboard-off"],"interactionsOff":[516,"interactions-off"]},null,{"position":[{"handleMatrixPropertyChange":1}],"quaternion":[{"handleMatrixPropertyChange":1}],"scale":[{"handleMatrixPropertyChange":1}],"positionJson":[{"handlePositionJsonChanged":1}],"rotation":[{"handleRotationChanged":1}],"rotationJson":[{"handleRotationJsonChanged":1}],"quaternionJson":[{"handleQuaternionJsonChanged":1}],"scaleJson":[{"handleScaleJsonChanged":1}],"matrix":[{"handleMatrixChanged":0}],"occluded":[{"handleOcclusionStateChanged":0}],"detached":[{"handleDetachedStateChanged":0}]}]]],["p-83683307",[[1,"vertex-viewer-markup-arrow",{"start":[1040],"startJson":[1,"start"],"end":[1040],"endJson":[1,"end"],"originatingViewport":[16],"centeringBehavior":[1,"centering-behavior"],"offset":[16],"scale":[2],"startLineAnchorStyle":[1025,"start-line-anchor-style"],"endLineAnchorStyle":[1025,"end-line-anchor-style"],"mode":[513],"viewer":[16],"elementBounds":[32],"dispose":[64]},null,{"viewer":[{"handleViewerChanged":0}],"start":[{"handleStartJsonChange":0}],"end":[{"handleEndJsonChange":0}],"mode":[{"handleModeChange":0}],"offset":[{"handleScalingConfigurationChange":0}],"originatingViewport":[{"handleScalingConfigurationChange":0}],"centeringBehavior":[{"handleScalingConfigurationChange":0}],"scale":[{"handleScalingConfigurationChange":0},{"handleScaleChange":0}]}],[1,"vertex-viewer-markup-circle",{"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"originatingViewport":[16],"centeringBehavior":[1,"centering-behavior"],"offset":[16],"scale":[2],"elementBounds":[32],"dispose":[64]},null,{"viewer":[{"handleViewerChanged":0}],"bounds":[{"handleBoundsJsonChange":0}],"mode":[{"handleModeChange":0}],"offset":[{"handleScalingConfigurationChange":0}],"originatingViewport":[{"handleScalingConfigurationChange":0}],"centeringBehavior":[{"handleScalingConfigurationChange":0}],"scale":[{"handleScalingConfigurationChange":0},{"handleScaleChange":0}]}],[1,"vertex-viewer-markup-freeform",{"points":[1040],"pointsJson":[1,"points"],"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"originatingViewport":[16],"centeringBehavior":[1,"centering-behavior"],"offset":[16],"scale":[2],"elementBounds":[32],"screenPoints":[32],"dispose":[64]},null,{"viewer":[{"handleViewerChanged":0}],"originatingViewport":[{"recomputePointsFromProps":0},{"handleScalingConfigurationChange":0}],"offset":[{"recomputePointsFromProps":0},{"handleScalingConfigurationChange":0}],"scale":[{"recomputePointsFromProps":0},{"handleScalingConfigurationChange":0},{"handleScaleChange":0}],"bounds":[{"recomputePointsFromProps":0}],"points":[{"recomputePointsFromProps":0}],"centeringBehavior":[{"handleScalingConfigurationChange":0}],"mode":[{"handleModeChange":0}]}]]],["p-a9282481",[[1,"vertex-viewer-icon",{"name":[1],"size":[1]}]]]]'),e)}));
5
5
  //# sourceMappingURL=viewer.esm.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertexvis/viewer",
3
- "version": "1.1.1-testing.4",
3
+ "version": "1.1.1-testing.5",
4
4
  "description": "The Vertex SDK for viewing models.",
5
5
  "license": "MIT",
6
6
  "author": "Vertex Developers <support@vertex3d.com> (https://developer.vertex3d.com)",
@@ -76,12 +76,12 @@
76
76
  "@improbable-eng/grpc-web": "^0.15.0",
77
77
  "@stencil/core": "^4.43.5",
78
78
  "@vertexvis/frame-streaming-protos": "^0.18.8",
79
- "@vertexvis/geometry": "1.1.1-testing.4",
80
- "@vertexvis/html-templates": "1.1.1-testing.4",
79
+ "@vertexvis/geometry": "1.1.1-testing.5",
80
+ "@vertexvis/html-templates": "1.1.1-testing.5",
81
81
  "@vertexvis/scene-tree-protos": "^0.1.34",
82
82
  "@vertexvis/scene-view-protos": "^0.8.5",
83
- "@vertexvis/stream-api": "1.1.1-testing.4",
84
- "@vertexvis/utils": "1.1.1-testing.4",
83
+ "@vertexvis/stream-api": "1.1.1-testing.5",
84
+ "@vertexvis/utils": "1.1.1-testing.5",
85
85
  "camel-case": "^4.1.2",
86
86
  "classnames": "^2.5.1",
87
87
  "date-fns": "^2.30.0",
@@ -95,7 +95,7 @@
95
95
  "regl": "^2.1.1",
96
96
  "regl-shape": "^1.1.0",
97
97
  "resize-observer": "^1.0.4",
98
- "threadsx": "^2.1.0",
98
+ "threadsx": "2.2.0",
99
99
  "tslib": "^2.8.1"
100
100
  },
101
101
  "devDependencies": {
@@ -110,7 +110,7 @@
110
110
  "@types/jsonwebtoken": "^8.5.9",
111
111
  "@vertexvis/eslint-config-vertexvis-typescript": "^0.6.2",
112
112
  "@vertexvis/typescript-config-vertexvis": "1.3.2",
113
- "@vertexwebsdk/build": "1.1.1-testing.4",
113
+ "@vertexwebsdk/build": "1.1.1-testing.5",
114
114
  "abortcontroller-polyfill": "^1.7.8",
115
115
  "chance": "^1.1.13",
116
116
  "eslint": "^9.39.5",
@@ -118,11 +118,11 @@
118
118
  "jest": "^29.7.0",
119
119
  "jest-cli": "^29.7.0",
120
120
  "jsonwebtoken": "^9.0.3",
121
- "rollup": "^4.62.4",
121
+ "rollup": "^4.63.3",
122
122
  "ts-jest": "^29.4.12",
123
123
  "ts-toolbelt": "^9.6.0",
124
124
  "typedoc": "^0.28.20",
125
125
  "typescript": "^5.9.3"
126
126
  },
127
- "gitHead": "8961c2d4b48c1b08c26426a43148d2de095abcd3"
127
+ "gitHead": "d9f44f0074ec057f06e4e0e1d73acec64775331d"
128
128
  }