1 |
- {"ast":null,"code":"import { Observable } from \"../Misc/observable.js\";\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector.js\";\nimport { Mesh } from \"../Meshes/mesh.js\";\nimport { CreateBox } from \"../Meshes/Builders/boxBuilder.js\";\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder.js\";\nimport { StandardMaterial } from \"../Materials/standardMaterial.js\";\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior.js\";\nimport { Gizmo } from \"./gizmo.js\";\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer.js\";\nimport { Color3 } from \"../Maths/math.color.js\";\nimport { Epsilon } from \"../Maths/math.constants.js\";\n/**\n * Single axis scale gizmo\n */\nexport class AxisScaleGizmo extends Gizmo {\n /** Default material used to render when gizmo is not disabled or hovered */\n get coloredMaterial() {\n return this._coloredMaterial;\n }\n /** Material used to render when gizmo is hovered with mouse*/\n get hoverMaterial() {\n return this._hoverMaterial;\n }\n /** Material used to render when gizmo is disabled. typically grey.*/\n get disableMaterial() {\n return this._disableMaterial;\n }\n /**\n * Creates an AxisScaleGizmo\n * @param dragAxis The axis which the gizmo will be able to scale on\n * @param color The color of the gizmo\n * @param gizmoLayer The utility layer the gizmo will be added to\n * @param parent\n * @param thickness display gizmo axis thickness\n * @param hoverColor The color of the gizmo when hovering over and dragging\n * @param disableColor The Color of the gizmo when its disabled\n */\n constructor(dragAxis, color = Color3.Gray(), gizmoLayer = UtilityLayerRenderer.DefaultUtilityLayer, parent = null, thickness = 1, hoverColor = Color3.Yellow(), disableColor = Color3.Gray()) {\n var _parent$uniformScaleG, _parent$uniformScaleG2, _this$_parent;\n super(gizmoLayer);\n this._pointerObserver = null;\n /**\n * Scale distance in babylon units that the gizmo will snap to when dragged (Default: 0)\n */\n this.snapDistance = 0;\n /**\n * Event that fires each time the gizmo snaps to a new location.\n * * snapDistance is the change in distance\n */\n this.onSnapObservable = new Observable();\n /**\n * If the scaling operation should be done on all axis (default: false)\n */\n this.uniformScaling = false;\n /**\n * Custom sensitivity value for the drag strength\n */\n this.sensitivity = 1;\n /**\n * The magnitude of the drag strength (scaling factor)\n */\n this.dragScale = 1;\n /**\n * Incremental snap scaling (default is false). When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,...\n */\n this.incrementalSnap = false;\n this._isEnabled = true;\n this._parent = null;\n this._dragging = false;\n this._tmpVector = new Vector3(0, 0, 0);\n this._incrementalStartupValue = Vector3.Zero();\n this._parent = parent;\n // Create Material\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\n this._coloredMaterial.diffuseColor = color;\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\n this._hoverMaterial.diffuseColor = hoverColor;\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\n this._disableMaterial.diffuseColor = disableColor;\n this._disableMaterial.alpha = 0.4;\n // Build mesh + Collider\n this._gizmoMesh = new Mesh(\"axis\", gizmoLayer.utilityLayerScene);\n const {\n arrowMesh,\n arrowTail\n } = this._createGizmoMesh(this._gizmoMesh, thickness);\n const collider = this._createGizmoMesh(this._gizmoMesh, thickness + 4, true);\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragAxis));\n this._rootMesh.addChild(this._gizmoMesh, Gizmo.PreserveScaling);\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\n // Closure of initial prop values for resetting\n const nodePosition = arrowMesh.position.clone();\n const linePosition = arrowTail.position.clone();\n const lineScale = arrowTail.scaling.clone();\n const increaseGizmoMesh = dragDistance => {\n const dragStrength = dragDistance * (3 / this._rootMesh.scaling.length()) * 6;\n arrowMesh.position.z += dragStrength / 3.5;\n arrowTail.scaling.y += dragStrength;\n this.dragScale = arrowTail.scaling.y;\n arrowTail.position.z = arrowMesh.position.z / 2;\n };\n const resetGizmoMesh = () => {\n arrowMesh.position.set(nodePosition.x, nodePosition.y, nodePosition.z);\n arrowTail.position.set(linePosition.x, linePosition.y, linePosition.z);\n arrowTail.scaling.set(lineScale.x, lineScale.y, lineScale.z);\n this.dragScale = arrowTail.scaling.y;\n this._dragging = false;\n };\n // Add drag behavior to handle events when the gizmo is dragged\n this.dragBehavior = new PointerDragBehavior({\n dragAxis: dragAxis\n });\n this.dragBehavior.moveAttached = false;\n this.dragBehavior.updateDragPlane = false;\n this._rootMesh.addBehavior(this.dragBehavior);\n let currentSnapDragDistance = 0;\n let currentSnapDragDistanceIncremental = 0;\n const tmpSnapEvent = {\n snapDistance: 0\n };\n this.dragBehavior.onDragObservable.add(event => {\n if (this.attachedNode) {\n // Drag strength is modified by the scale of the gizmo (eg. for small objects like boombox the strength will be increased to match the behavior of larger objects)\n const dragStrength = this.sensitivity * event.dragDistance * (this.scaleRatio * 3 / this._rootMesh.scaling.length());\n const tmpVector = this._tmpVector;\n // Snapping logic\n let snapped = false;\n let dragSteps = 0;\n if (this.uniformScaling) {\n tmpVector.setAll(0.57735); // 1 / sqrt(3)\n } else {\n tmpVector.copyFrom(dragAxis);\n }\n if (this.snapDistance == 0) {\n tmpVector.scaleToRef(dragStrength, tmpVector);\n } else {\n currentSnapDragDistance += dragStrength;\n currentSnapDragDistanceIncremental += dragStrength;\n const currentSnap = this.incrementalSnap ? currentSnapDragDistanceIncremental : currentSnapDragDistance;\n if (Math.abs(currentSnap) > this.snapDistance) {\n dragSteps = Math.floor(Math.abs(currentSnap) / this.snapDistance);\n if (currentSnap < 0) {\n dragSteps *= -1;\n }\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\n tmpVector.scaleToRef(this.snapDistance * dragSteps, tmpVector);\n snapped = true;\n } else {\n tmpVector.scaleInPlace(0);\n }\n }\n tmpVector.addInPlaceFromFloats(1, 1, 1);\n // can't use Math.sign here because Math.sign(0) is 0 and it needs to be positive\n tmpVector.x = Math.abs(tmpVector.x) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.x < 0 ? -1 : 1) : tmpVector.x;\n tmpVector.y = Math.abs(tmpVector.y) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.y < 0 ? -1 : 1) : tmpVector.y;\n tmpVector.z = Math.abs(tmpVector.z) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.z < 0 ? -1 : 1) : tmpVector.z;\n const transformNode = this.attachedNode._isMesh ? this.attachedNode : undefined;\n if (Math.abs(this.snapDistance) > 0 && this.incrementalSnap) {\n // get current scaling\n this.attachedNode.getWorldMatrix().decompose(undefined, TmpVectors.Quaternion[0], TmpVectors.Vector3[2], Gizmo.PreserveScaling ? transformNode : undefined);\n // apply incrementaly, without taking care of current scaling value\n tmpVector.addInPlace(this._incrementalStartupValue);\n tmpVector.addInPlaceFromFloats(-1, -1, -1);\n // keep same sign or stretching close to 0 will change orientation at each drag and scaling will oscilate around 0\n tmpVector.x = Math.abs(tmpVector.x) * (this._incrementalStartupValue.x > 0 ? 1 : -1);\n tmpVector.y = Math.abs(tmpVector.y) * (this._incrementalStartupValue.y > 0 ? 1 : -1);\n tmpVector.z = Math.abs(tmpVector.z) * (this._incrementalStartupValue.z > 0 ? 1 : -1);\n Matrix.ComposeToRef(tmpVector, TmpVectors.Quaternion[0], TmpVectors.Vector3[2], TmpVectors.Matrix[1]);\n } else {\n Matrix.ScalingToRef(tmpVector.x, tmpVector.y, tmpVector.z, TmpVectors.Matrix[2]);\n TmpVectors.Matrix[2].multiplyToRef(this.attachedNode.getWorldMatrix(), TmpVectors.Matrix[1]);\n }\n // check scaling are not out of bounds. If not, copy resulting temp matrix to node world matrix\n TmpVectors.Matrix[1].decompose(TmpVectors.Vector3[1], undefined, undefined, Gizmo.PreserveScaling ? transformNode : undefined);\n const maxScale = 100000;\n if (Math.abs(TmpVectors.Vector3[1].x) < maxScale && Math.abs(TmpVectors.Vector3[1].y) < maxScale && Math.abs(TmpVectors.Vector3[1].z) < maxScale) {\n this.attachedNode.getWorldMatrix().copyFrom(TmpVectors.Matrix[1]);\n }\n // notify observers\n if (snapped) {\n tmpSnapEvent.snapDistance = this.snapDistance * dragSteps;\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\n }\n this._matrixChanged();\n }\n });\n // On Drag Listener: to move gizmo mesh with user action\n this.dragBehavior.onDragStartObservable.add(() => {\n var _this$attachedNode;\n this._dragging = true;\n const transformNode = this.attachedNode._isMesh ? this.attachedNode : undefined;\n (_this$attachedNode = this.attachedNode) === null || _this$attachedNode === void 0 || _this$attachedNode.getWorldMatrix().decompose(this._incrementalStartupValue, undefined, undefined, Gizmo.PreserveScaling ? transformNode : undefined);\n currentSnapDragDistance = 0;\n currentSnapDragDistanceIncremental = 0;\n });\n this.dragBehavior.onDragObservable.add(e => increaseGizmoMesh(e.dragDistance));\n this.dragBehavior.onDragEndObservable.add(resetGizmoMesh);\n // Listeners for Universal Scalar\n parent === null || parent === void 0 || (_parent$uniformScaleG = parent.uniformScaleGizmo) === null || _parent$uniformScaleG === void 0 || (_parent$uniformScaleG = _parent$uniformScaleG.dragBehavior) === null || _parent$uniformScaleG === void 0 || (_parent$uniformScaleG = _parent$uniformScaleG.onDragObservable) === null || _parent$uniformScaleG === void 0 || _parent$uniformScaleG.add(e => increaseGizmoMesh(e.delta.y));\n parent === null || parent === void 0 || (_parent$uniformScaleG2 = parent.uniformScaleGizmo) === null || _parent$uniformScaleG2 === void 0 || (_parent$uniformScaleG2 = _parent$uniformScaleG2.dragBehavior) === null || _parent$uniformScaleG2 === void 0 || (_parent$uniformScaleG2 = _parent$uniformScaleG2.onDragEndObservable) === null || _parent$uniformScaleG2 === void 0 || _parent$uniformScaleG2.add(resetGizmoMesh);\n const cache = {\n gizmoMeshes: [arrowMesh, arrowTail],\n colliderMeshes: [collider.arrowMesh, collider.arrowTail],\n material: this._coloredMaterial,\n hoverMaterial: this._hoverMaterial,\n disableMaterial: this._disableMaterial,\n active: false,\n dragBehavior: this.dragBehavior\n };\n (_this$_parent = this._parent) === null || _this$_parent === void 0 || _this$_parent.addToAxisCache(this._gizmoMesh, cache);\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add(pointerInfo => {\n var _this$_parent2, _pointerInfo$pickInfo, _this$_parent3, _pointerInfo$pickInfo2;\n if (this._customMeshSet) {\n return;\n }\n // axis mesh cache\n let meshCache = (_this$_parent2 = this._parent) === null || _this$_parent2 === void 0 ? void 0 : _this$_parent2.getAxisCache(this._gizmoMesh);\n this._isHovered = !!meshCache && !!(meshCache.colliderMeshes.indexOf(pointerInfo === null || pointerInfo === void 0 || (_pointerInfo$pickInfo = pointerInfo.pickInfo) === null || _pointerInfo$pickInfo === void 0 ? void 0 : _pointerInfo$pickInfo.pickedMesh) != -1);\n // uniform mesh cache\n meshCache = (_this$_parent3 = this._parent) === null || _this$_parent3 === void 0 ? void 0 : _this$_parent3.getAxisCache(this._rootMesh);\n this._isHovered || (this._isHovered = !!meshCache && !!(meshCache.colliderMeshes.indexOf(pointerInfo === null || pointerInfo === void 0 || (_pointerInfo$pickInfo2 = pointerInfo.pickInfo) === null || _pointerInfo$pickInfo2 === void 0 ? void 0 : _pointerInfo$pickInfo2.pickedMesh) != -1));\n if (!this._parent) {\n const material = this.dragBehavior.enabled ? this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial : this._disableMaterial;\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\n }\n });\n this.dragBehavior.onEnabledObservable.add(newState => {\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? this._coloredMaterial : this._disableMaterial);\n });\n const light = gizmoLayer._getSharedGizmoLight();\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes());\n }\n /**\n * @internal\n * Create Geometry for Gizmo\n * @param parentMesh\n * @param thickness\n * @param isCollider\n * @returns the gizmo mesh\n */\n _createGizmoMesh(parentMesh, thickness, isCollider = false) {\n const arrowMesh = CreateBox(\"yPosMesh\", {\n size: 0.4 * (1 + (thickness - 1) / 4)\n }, this.gizmoLayer.utilityLayerScene);\n const arrowTail = CreateCylinder(\"cylinder\", {\n diameterTop: 0.005 * thickness,\n height: 0.275,\n diameterBottom: 0.005 * thickness,\n tessellation: 96\n }, this.gizmoLayer.utilityLayerScene);\n // Position arrow pointing in its drag axis\n arrowMesh.scaling.scaleInPlace(0.1);\n arrowMesh.material = this._coloredMaterial;\n arrowMesh.rotation.x = Math.PI / 2;\n arrowMesh.position.z += 0.3;\n arrowTail.material = this._coloredMaterial;\n arrowTail.position.z += 0.275 / 2;\n arrowTail.rotation.x = Math.PI / 2;\n if (isCollider) {\n arrowMesh.visibility = 0;\n arrowTail.visibility = 0;\n }\n parentMesh.addChild(arrowMesh);\n parentMesh.addChild(arrowTail);\n return {\n arrowMesh,\n arrowTail\n };\n }\n _attachedNodeChanged(value) {\n if (this.dragBehavior) {\n this.dragBehavior.enabled = value ? true : false;\n }\n }\n /**\n * If the gizmo is enabled\n */\n set isEnabled(value) {\n this._isEnabled = value;\n if (!value) {\n this.attachedMesh = null;\n this.attachedNode = null;\n } else {\n if (this._parent) {\n this.attachedMesh = this._parent.attachedMesh;\n this.attachedNode = this._parent.attachedNode;\n }\n }\n }\n get isEnabled() {\n return this._isEnabled;\n }\n /**\n * Disposes of the gizmo\n */\n dispose() {\n this.onSnapObservable.clear();\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\n this.dragBehavior.detach();\n if (this._gizmoMesh) {\n this._gizmoMesh.dispose();\n }\n [this._coloredMaterial, this._hoverMaterial, this._disableMaterial].forEach(matl => {\n if (matl) {\n matl.dispose();\n }\n });\n super.dispose();\n }\n /**\n * Disposes and replaces the current meshes in the gizmo with the specified mesh\n * @param mesh The mesh to replace the default mesh of the gizmo\n * @param useGizmoMaterial If the gizmo's default material should be used (default: false)\n */\n setCustomMesh(mesh, useGizmoMaterial = false) {\n super.setCustomMesh(mesh);\n if (useGizmoMaterial) {\n this._rootMesh.getChildMeshes().forEach(m => {\n m.material = this._coloredMaterial;\n if (m.color) {\n m.color = this._coloredMaterial.diffuseColor;\n }\n });\n this._customMeshSet = false;\n }\n }\n}\n/**\n * The minimal absolute scale per component. can be positive or negative but never smaller.\n */\nAxisScaleGizmo.MinimumAbsoluteScale = Epsilon;","map":{"version":3,"names":["Observable","Vector3","Matrix","TmpVectors","Mesh","CreateBox","CreateCylinder","StandardMaterial","PointerDragBehavior","Gizmo","UtilityLayerRenderer","Color3","Epsilon","AxisScaleGizmo","coloredMaterial","_coloredMaterial","hoverMaterial","_hoverMaterial","disableMaterial","_disableMaterial","constructor","dragAxis","color","Gray","gizmoLayer","DefaultUtilityLayer","parent","thickness","hoverColor","Yellow","disableColor","_parent$uniformScaleG","_parent$uniformScaleG2","_this$_parent","_pointerObserver","snapDistance","onSnapObservable","uniformScaling","sensitivity","dragScale","incrementalSnap","_isEnabled","_parent","_dragging","_tmpVector","_incrementalStartupValue","Zero","utilityLayerScene","diffuseColor","specularColor","subtract","alpha","_gizmoMesh","arrowMesh","arrowTail","_createGizmoMesh","collider","lookAt","_rootMesh","position","add","addChild","PreserveScaling","scaling","scaleInPlace","nodePosition","clone","linePosition","lineScale","increaseGizmoMesh","dragDistance","dragStrength","length","z","y","resetGizmoMesh","set","x","dragBehavior","moveAttached","updateDragPlane","addBehavior","currentSnapDragDistance","currentSnapDragDistanceIncremental","tmpSnapEvent","onDragObservable","event","attachedNode","scaleRatio","tmpVector","snapped","dragSteps","setAll","copyFrom","scaleToRef","currentSnap","Math","abs","floor","addInPlaceFromFloats","MinimumAbsoluteScale","transformNode","_isMesh","undefined","getWorldMatrix","decompose","Quaternion","addInPlace","ComposeToRef","ScalingToRef","multiplyToRef","maxScale","notifyObservers","_matrixChanged","onDragStartObservable","_this$attachedNode","e","onDragEndObservable","uniformScaleGizmo","delta","cache","gizmoMeshes","colliderMeshes","material","active","addToAxisCache","onPointerObservable","pointerInfo","_this$_parent2","_pointerInfo$pickInfo","_this$_parent3","_pointerInfo$pickInfo2","_customMeshSet","meshCache","getAxisCache","_isHovered","indexOf","pickInfo","pickedMesh","enabled","_setGizmoMeshMaterial","onEnabledObservable","newState","light","_getSharedGizmoLight","includedOnlyMeshes","concat","getChildMeshes","parentMesh","isCollider","size","diameterTop","height","diameterBottom","tessellation","rotation","PI","visibility","_attachedNodeChanged","value","isEnabled","attachedMesh","dispose","clear","remove","detach","forEach","matl","setCustomMesh","mesh","useGizmoMaterial","m"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Gizmos/axisScaleGizmo.js"],"sourcesContent":["import { Observable } from \"../Misc/observable.js\";\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector.js\";\nimport { Mesh } from \"../Meshes/mesh.js\";\nimport { CreateBox } from \"../Meshes/Builders/boxBuilder.js\";\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder.js\";\nimport { StandardMaterial } from \"../Materials/standardMaterial.js\";\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior.js\";\nimport { Gizmo } from \"./gizmo.js\";\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer.js\";\nimport { Color3 } from \"../Maths/math.color.js\";\nimport { Epsilon } from \"../Maths/math.constants.js\";\n/**\n * Single axis scale gizmo\n */\nexport class AxisScaleGizmo extends Gizmo {\n /** Default material used to render when gizmo is not disabled or hovered */\n get coloredMaterial() {\n return this._coloredMaterial;\n }\n /** Material used to render when gizmo is hovered with mouse*/\n get hoverMaterial() {\n return this._hoverMaterial;\n }\n /** Material used to render when gizmo is disabled. typically grey.*/\n get disableMaterial() {\n return this._disableMaterial;\n }\n /**\n * Creates an AxisScaleGizmo\n * @param dragAxis The axis which the gizmo will be able to scale on\n * @param color The color of the gizmo\n * @param gizmoLayer The utility layer the gizmo will be added to\n * @param parent\n * @param thickness display gizmo axis thickness\n * @param hoverColor The color of the gizmo when hovering over and dragging\n * @param disableColor The Color of the gizmo when its disabled\n */\n constructor(dragAxis, color = Color3.Gray(), gizmoLayer = UtilityLayerRenderer.DefaultUtilityLayer, parent = null, thickness = 1, hoverColor = Color3.Yellow(), disableColor = Color3.Gray()) {\n super(gizmoLayer);\n this._pointerObserver = null;\n /**\n * Scale distance in babylon units that the gizmo will snap to when dragged (Default: 0)\n */\n this.snapDistance = 0;\n /**\n * Event that fires each time the gizmo snaps to a new location.\n * * snapDistance is the change in distance\n */\n this.onSnapObservable = new Observable();\n /**\n * If the scaling operation should be done on all axis (default: false)\n */\n this.uniformScaling = false;\n /**\n * Custom sensitivity value for the drag strength\n */\n this.sensitivity = 1;\n /**\n * The magnitude of the drag strength (scaling factor)\n */\n this.dragScale = 1;\n /**\n * Incremental snap scaling (default is false). When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,...\n */\n this.incrementalSnap = false;\n this._isEnabled = true;\n this._parent = null;\n this._dragging = false;\n this._tmpVector = new Vector3(0, 0, 0);\n this._incrementalStartupValue = Vector3.Zero();\n this._parent = parent;\n // Create Material\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\n this._coloredMaterial.diffuseColor = color;\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\n this._hoverMaterial.diffuseColor = hoverColor;\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\n this._disableMaterial.diffuseColor = disableColor;\n this._disableMaterial.alpha = 0.4;\n // Build mesh + Collider\n this._gizmoMesh = new Mesh(\"axis\", gizmoLayer.utilityLayerScene);\n const { arrowMesh, arrowTail } = this._createGizmoMesh(this._gizmoMesh, thickness);\n const collider = this._createGizmoMesh(this._gizmoMesh, thickness + 4, true);\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragAxis));\n this._rootMesh.addChild(this._gizmoMesh, Gizmo.PreserveScaling);\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\n // Closure of initial prop values for resetting\n const nodePosition = arrowMesh.position.clone();\n const linePosition = arrowTail.position.clone();\n const lineScale = arrowTail.scaling.clone();\n const increaseGizmoMesh = (dragDistance) => {\n const dragStrength = dragDistance * (3 / this._rootMesh.scaling.length()) * 6;\n arrowMesh.position.z += dragStrength / 3.5;\n arrowTail.scaling.y += dragStrength;\n this.dragScale = arrowTail.scaling.y;\n arrowTail.position.z = arrowMesh.position.z / 2;\n };\n const resetGizmoMesh = () => {\n arrowMesh.position.set(nodePosition.x, nodePosition.y, nodePosition.z);\n arrowTail.position.set(linePosition.x, linePosition.y, linePosition.z);\n arrowTail.scaling.set(lineScale.x, lineScale.y, lineScale.z);\n this.dragScale = arrowTail.scaling.y;\n this._dragging = false;\n };\n // Add drag behavior to handle events when the gizmo is dragged\n this.dragBehavior = new PointerDragBehavior({ dragAxis: dragAxis });\n this.dragBehavior.moveAttached = false;\n this.dragBehavior.updateDragPlane = false;\n this._rootMesh.addBehavior(this.dragBehavior);\n let currentSnapDragDistance = 0;\n let currentSnapDragDistanceIncremental = 0;\n const tmpSnapEvent = { snapDistance: 0 };\n this.dragBehavior.onDragObservable.add((event) => {\n if (this.attachedNode) {\n // Drag strength is modified by the scale of the gizmo (eg. for small objects like boombox the strength will be increased to match the behavior of larger objects)\n const dragStrength = this.sensitivity * event.dragDistance * ((this.scaleRatio * 3) / this._rootMesh.scaling.length());\n const tmpVector = this._tmpVector;\n // Snapping logic\n let snapped = false;\n let dragSteps = 0;\n if (this.uniformScaling) {\n tmpVector.setAll(0.57735); // 1 / sqrt(3)\n }\n else {\n tmpVector.copyFrom(dragAxis);\n }\n if (this.snapDistance == 0) {\n tmpVector.scaleToRef(dragStrength, tmpVector);\n }\n else {\n currentSnapDragDistance += dragStrength;\n currentSnapDragDistanceIncremental += dragStrength;\n const currentSnap = this.incrementalSnap ? currentSnapDragDistanceIncremental : currentSnapDragDistance;\n if (Math.abs(currentSnap) > this.snapDistance) {\n dragSteps = Math.floor(Math.abs(currentSnap) / this.snapDistance);\n if (currentSnap < 0) {\n dragSteps *= -1;\n }\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\n tmpVector.scaleToRef(this.snapDistance * dragSteps, tmpVector);\n snapped = true;\n }\n else {\n tmpVector.scaleInPlace(0);\n }\n }\n tmpVector.addInPlaceFromFloats(1, 1, 1);\n // can't use Math.sign here because Math.sign(0) is 0 and it needs to be positive\n tmpVector.x = Math.abs(tmpVector.x) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.x < 0 ? -1 : 1) : tmpVector.x;\n tmpVector.y = Math.abs(tmpVector.y) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.y < 0 ? -1 : 1) : tmpVector.y;\n tmpVector.z = Math.abs(tmpVector.z) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.z < 0 ? -1 : 1) : tmpVector.z;\n const transformNode = this.attachedNode._isMesh ? this.attachedNode : undefined;\n if (Math.abs(this.snapDistance) > 0 && this.incrementalSnap) {\n // get current scaling\n this.attachedNode.getWorldMatrix().decompose(undefined, TmpVectors.Quaternion[0], TmpVectors.Vector3[2], Gizmo.PreserveScaling ? transformNode : undefined);\n // apply incrementaly, without taking care of current scaling value\n tmpVector.addInPlace(this._incrementalStartupValue);\n tmpVector.addInPlaceFromFloats(-1, -1, -1);\n // keep same sign or stretching close to 0 will change orientation at each drag and scaling will oscilate around 0\n tmpVector.x = Math.abs(tmpVector.x) * (this._incrementalStartupValue.x > 0 ? 1 : -1);\n tmpVector.y = Math.abs(tmpVector.y) * (this._incrementalStartupValue.y > 0 ? 1 : -1);\n tmpVector.z = Math.abs(tmpVector.z) * (this._incrementalStartupValue.z > 0 ? 1 : -1);\n Matrix.ComposeToRef(tmpVector, TmpVectors.Quaternion[0], TmpVectors.Vector3[2], TmpVectors.Matrix[1]);\n }\n else {\n Matrix.ScalingToRef(tmpVector.x, tmpVector.y, tmpVector.z, TmpVectors.Matrix[2]);\n TmpVectors.Matrix[2].multiplyToRef(this.attachedNode.getWorldMatrix(), TmpVectors.Matrix[1]);\n }\n // check scaling are not out of bounds. If not, copy resulting temp matrix to node world matrix\n TmpVectors.Matrix[1].decompose(TmpVectors.Vector3[1], undefined, undefined, Gizmo.PreserveScaling ? transformNode : undefined);\n const maxScale = 100000;\n if (Math.abs(TmpVectors.Vector3[1].x) < maxScale && Math.abs(TmpVectors.Vector3[1].y) < maxScale && Math.abs(TmpVectors.Vector3[1].z) < maxScale) {\n this.attachedNode.getWorldMatrix().copyFrom(TmpVectors.Matrix[1]);\n }\n // notify observers\n if (snapped) {\n tmpSnapEvent.snapDistance = this.snapDistance * dragSteps;\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\n }\n this._matrixChanged();\n }\n });\n // On Drag Listener: to move gizmo mesh with user action\n this.dragBehavior.onDragStartObservable.add(() => {\n this._dragging = true;\n const transformNode = this.attachedNode._isMesh ? this.attachedNode : undefined;\n this.attachedNode?.getWorldMatrix().decompose(this._incrementalStartupValue, undefined, undefined, Gizmo.PreserveScaling ? transformNode : undefined);\n currentSnapDragDistance = 0;\n currentSnapDragDistanceIncremental = 0;\n });\n this.dragBehavior.onDragObservable.add((e) => increaseGizmoMesh(e.dragDistance));\n this.dragBehavior.onDragEndObservable.add(resetGizmoMesh);\n // Listeners for Universal Scalar\n parent?.uniformScaleGizmo?.dragBehavior?.onDragObservable?.add((e) => increaseGizmoMesh(e.delta.y));\n parent?.uniformScaleGizmo?.dragBehavior?.onDragEndObservable?.add(resetGizmoMesh);\n const cache = {\n gizmoMeshes: [arrowMesh, arrowTail],\n colliderMeshes: [collider.arrowMesh, collider.arrowTail],\n material: this._coloredMaterial,\n hoverMaterial: this._hoverMaterial,\n disableMaterial: this._disableMaterial,\n active: false,\n dragBehavior: this.dragBehavior,\n };\n this._parent?.addToAxisCache(this._gizmoMesh, cache);\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\n if (this._customMeshSet) {\n return;\n }\n // axis mesh cache\n let meshCache = this._parent?.getAxisCache(this._gizmoMesh);\n this._isHovered = !!meshCache && !!(meshCache.colliderMeshes.indexOf(pointerInfo?.pickInfo?.pickedMesh) != -1);\n // uniform mesh cache\n meshCache = this._parent?.getAxisCache(this._rootMesh);\n this._isHovered || (this._isHovered = !!meshCache && !!(meshCache.colliderMeshes.indexOf(pointerInfo?.pickInfo?.pickedMesh) != -1));\n if (!this._parent) {\n const material = this.dragBehavior.enabled ? (this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial) : this._disableMaterial;\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\n }\n });\n this.dragBehavior.onEnabledObservable.add((newState) => {\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? this._coloredMaterial : this._disableMaterial);\n });\n const light = gizmoLayer._getSharedGizmoLight();\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes());\n }\n /**\n * @internal\n * Create Geometry for Gizmo\n * @param parentMesh\n * @param thickness\n * @param isCollider\n * @returns the gizmo mesh\n */\n _createGizmoMesh(parentMesh, thickness, isCollider = false) {\n const arrowMesh = CreateBox(\"yPosMesh\", { size: 0.4 * (1 + (thickness - 1) / 4) }, this.gizmoLayer.utilityLayerScene);\n const arrowTail = CreateCylinder(\"cylinder\", { diameterTop: 0.005 * thickness, height: 0.275, diameterBottom: 0.005 * thickness, tessellation: 96 }, this.gizmoLayer.utilityLayerScene);\n // Position arrow pointing in its drag axis\n arrowMesh.scaling.scaleInPlace(0.1);\n arrowMesh.material = this._coloredMaterial;\n arrowMesh.rotation.x = Math.PI / 2;\n arrowMesh.position.z += 0.3;\n arrowTail.material = this._coloredMaterial;\n arrowTail.position.z += 0.275 / 2;\n arrowTail.rotation.x = Math.PI / 2;\n if (isCollider) {\n arrowMesh.visibility = 0;\n arrowTail.visibility = 0;\n }\n parentMesh.addChild(arrowMesh);\n parentMesh.addChild(arrowTail);\n return { arrowMesh, arrowTail };\n }\n _attachedNodeChanged(value) {\n if (this.dragBehavior) {\n this.dragBehavior.enabled = value ? true : false;\n }\n }\n /**\n * If the gizmo is enabled\n */\n set isEnabled(value) {\n this._isEnabled = value;\n if (!value) {\n this.attachedMesh = null;\n this.attachedNode = null;\n }\n else {\n if (this._parent) {\n this.attachedMesh = this._parent.attachedMesh;\n this.attachedNode = this._parent.attachedNode;\n }\n }\n }\n get isEnabled() {\n return this._isEnabled;\n }\n /**\n * Disposes of the gizmo\n */\n dispose() {\n this.onSnapObservable.clear();\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\n this.dragBehavior.detach();\n if (this._gizmoMesh) {\n this._gizmoMesh.dispose();\n }\n [this._coloredMaterial, this._hoverMaterial, this._disableMaterial].forEach((matl) => {\n if (matl) {\n matl.dispose();\n }\n });\n super.dispose();\n }\n /**\n * Disposes and replaces the current meshes in the gizmo with the specified mesh\n * @param mesh The mesh to replace the default mesh of the gizmo\n * @param useGizmoMaterial If the gizmo's default material should be used (default: false)\n */\n setCustomMesh(mesh, useGizmoMaterial = false) {\n super.setCustomMesh(mesh);\n if (useGizmoMaterial) {\n this._rootMesh.getChildMeshes().forEach((m) => {\n m.material = this._coloredMaterial;\n if (m.color) {\n m.color = this._coloredMaterial.diffuseColor;\n }\n });\n this._customMeshSet = false;\n }\n }\n}\n/**\n * The minimal absolute scale per component. can be positive or negative but never smaller.\n */\nAxisScaleGizmo.MinimumAbsoluteScale = Epsilon;\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,uBAAuB;AAClD,SAASC,OAAO,EAAEC,MAAM,EAAEC,UAAU,QAAQ,yBAAyB;AACrE,SAASC,IAAI,QAAQ,mBAAmB;AACxC,SAASC,SAAS,QAAQ,kCAAkC;AAC5D,SAASC,cAAc,QAAQ,uCAAuC;AACtE,SAASC,gBAAgB,QAAQ,kCAAkC;AACnE,SAASC,mBAAmB,QAAQ,4CAA4C;AAChF,SAASC,KAAK,QAAQ,YAAY;AAClC,SAASC,oBAAoB,QAAQ,sCAAsC;AAC3E,SAASC,MAAM,QAAQ,wBAAwB;AAC/C,SAASC,OAAO,QAAQ,4BAA4B;AACpD;AACA;AACA;AACA,OAAO,MAAMC,cAAc,SAASJ,KAAK,CAAC;EACtC;EACA,IAAIK,eAAeA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACC,gBAAgB;EAChC;EACA;EACA,IAAIC,aAAaA,CAAA,EAAG;IAChB,OAAO,IAAI,CAACC,cAAc;EAC9B;EACA;EACA,IAAIC,eAAeA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACC,gBAAgB;EAChC;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACIC,WAAWA,CAACC,QAAQ,EAAEC,KAAK,GAAGX,MAAM,CAACY,IAAI,CAAC,CAAC,EAAEC,UAAU,GAAGd,oBAAoB,CAACe,mBAAmB,EAAEC,MAAM,GAAG,IAAI,EAAEC,SAAS,GAAG,CAAC,EAAEC,UAAU,GAAGjB,MAAM,CAACkB,MAAM,CAAC,CAAC,EAAEC,YAAY,GAAGnB,MAAM,CAACY,IAAI,CAAC,CAAC,EAAE;IAAA,IAAAQ,qBAAA,EAAAC,sBAAA,EAAAC,aAAA;IAC1L,KAAK,CAACT,UAAU,CAAC;IACjB,IAAI,CAACU,gBAAgB,GAAG,IAAI;IAC5B;AACR;AACA;IACQ,IAAI,CAACC,YAAY,GAAG,CAAC;IACrB;AACR;AACA;AACA;IACQ,IAAI,CAACC,gBAAgB,GAAG,IAAIpC,UAAU,CAAC,CAAC;IACxC;AACR;AACA;IACQ,IAAI,CAACqC,cAAc,GAAG,KAAK;IAC3B;AACR;AACA;IACQ,IAAI,CAACC,WAAW,GAAG,CAAC;IACpB;AACR;AACA;IACQ,IAAI,CAACC,SAAS,GAAG,CAAC;IAClB;AACR;AACA;IACQ,IAAI,CAACC,eAAe,GAAG,KAAK;IAC5B,IAAI,CAACC,UAAU,GAAG,IAAI;IACtB,IAAI,CAACC,OAAO,GAAG,IAAI;IACnB,IAAI,CAACC,SAAS,GAAG,KAAK;IACtB,IAAI,CAACC,UAAU,GAAG,IAAI3C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC4C,wBAAwB,GAAG5C,OAAO,CAAC6C,IAAI,CAAC,CAAC;IAC9C,IAAI,CAACJ,OAAO,GAAGhB,MAAM;IACrB;IACA,IAAI,CAACX,gBAAgB,GAAG,IAAIR,gBAAgB,CAAC,EAAE,EAAEiB,UAAU,CAACuB,iBAAiB,CAAC;IAC9E,IAAI,CAAChC,gBAAgB,CAACiC,YAAY,GAAG1B,KAAK;IAC1C,IAAI,CAACP,gBAAgB,CAACkC,aAAa,GAAG3B,KAAK,CAAC4B,QAAQ,CAAC,IAAIvC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC/E,IAAI,CAACM,cAAc,GAAG,IAAIV,gBAAgB,CAAC,EAAE,EAAEiB,UAAU,CAACuB,iBAAiB,CAAC;IAC5E,IAAI,CAAC9B,cAAc,CAAC+B,YAAY,GAAGpB,UAAU;IAC7C,IAAI,CAACT,gBAAgB,GAAG,IAAIZ,gBAAgB,CAAC,EAAE,EAAEiB,UAAU,CAACuB,iBAAiB,CAAC;IAC9E,IAAI,CAAC5B,gBAAgB,CAAC6B,YAAY,GAAGlB,YAAY;IACjD,IAAI,CAACX,gBAAgB,CAACgC,KAAK,GAAG,GAAG;IACjC;IACA,IAAI,CAACC,UAAU,GAAG,IAAIhD,IAAI,CAAC,MAAM,EAAEoB,UAAU,CAACuB,iBAAiB,CAAC;IAChE,MAAM;MAAEM,SAAS;MAAEC;IAAU,CAAC,GAAG,IAAI,CAACC,gBAAgB,CAAC,IAAI,CAACH,UAAU,EAAEzB,SAAS,CAAC;IAClF,MAAM6B,QAAQ,GAAG,IAAI,CAACD,gBAAgB,CAAC,IAAI,CAACH,UAAU,EAAEzB,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC;IAC5E,IAAI,CAACyB,UAAU,CAACK,MAAM,CAAC,IAAI,CAACC,SAAS,CAACC,QAAQ,CAACC,GAAG,CAACvC,QAAQ,CAAC,CAAC;IAC7D,IAAI,CAACqC,SAAS,CAACG,QAAQ,CAAC,IAAI,CAACT,UAAU,EAAE3C,KAAK,CAACqD,eAAe,CAAC;IAC/D,IAAI,CAACV,UAAU,CAACW,OAAO,CAACC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3C;IACA,MAAMC,YAAY,GAAGZ,SAAS,CAACM,QAAQ,CAACO,KAAK,CAAC,CAAC;IAC/C,MAAMC,YAAY,GAAGb,SAAS,CAACK,QAAQ,CAACO,KAAK,CAAC,CAAC;IAC/C,MAAME,SAAS,GAAGd,SAAS,CAACS,OAAO,CAACG,KAAK,CAAC,CAAC;IAC3C,MAAMG,iBAAiB,GAAIC,YAAY,IAAK;MACxC,MAAMC,YAAY,GAAGD,YAAY,IAAI,CAAC,GAAG,IAAI,CAACZ,SAAS,CAACK,OAAO,CAACS,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;MAC7EnB,SAAS,CAACM,QAAQ,CAACc,CAAC,IAAIF,YAAY,GAAG,GAAG;MAC1CjB,SAAS,CAACS,OAAO,CAACW,CAAC,IAAIH,YAAY;MACnC,IAAI,CAAChC,SAAS,GAAGe,SAAS,CAACS,OAAO,CAACW,CAAC;MACpCpB,SAAS,CAACK,QAAQ,CAACc,CAAC,GAAGpB,SAAS,CAACM,QAAQ,CAACc,CAAC,GAAG,CAAC;IACnD,CAAC;IACD,MAAME,cAAc,GAAGA,CAAA,KAAM;MACzBtB,SAAS,CAACM,QAAQ,CAACiB,GAAG,CAACX,YAAY,CAACY,CAAC,EAAEZ,YAAY,CAACS,CAAC,EAAET,YAAY,CAACQ,CAAC,CAAC;MACtEnB,SAAS,CAACK,QAAQ,CAACiB,GAAG,CAACT,YAAY,CAACU,CAAC,EAAEV,YAAY,CAACO,CAAC,EAAEP,YAAY,CAACM,CAAC,CAAC;MACtEnB,SAAS,CAACS,OAAO,CAACa,GAAG,CAACR,SAAS,CAACS,CAAC,EAAET,SAAS,CAACM,CAAC,EAAEN,SAAS,CAACK,CAAC,CAAC;MAC5D,IAAI,CAAClC,SAAS,GAAGe,SAAS,CAACS,OAAO,CAACW,CAAC;MACpC,IAAI,CAAC/B,SAAS,GAAG,KAAK;IAC1B,CAAC;IACD;IACA,IAAI,CAACmC,YAAY,GAAG,IAAItE,mBAAmB,CAAC;MAAEa,QAAQ,EAAEA;IAAS,CAAC,CAAC;IACnE,IAAI,CAACyD,YAAY,CAACC,YAAY,GAAG,KAAK;IACtC,IAAI,CAACD,YAAY,CAACE,eAAe,GAAG,KAAK;IACzC,IAAI,CAACtB,SAAS,CAACuB,WAAW,CAAC,IAAI,CAACH,YAAY,CAAC;IAC7C,IAAII,uBAAuB,GAAG,CAAC;IAC/B,IAAIC,kCAAkC,GAAG,CAAC;IAC1C,MAAMC,YAAY,GAAG;MAAEjD,YAAY,EAAE;IAAE,CAAC;IACxC,IAAI,CAAC2C,YAAY,CAACO,gBAAgB,CAACzB,GAAG,CAAE0B,KAAK,IAAK;MAC9C,IAAI,IAAI,CAACC,YAAY,EAAE;QACnB;QACA,MAAMhB,YAAY,GAAG,IAAI,CAACjC,WAAW,GAAGgD,KAAK,CAAChB,YAAY,IAAK,IAAI,CAACkB,UAAU,GAAG,CAAC,GAAI,IAAI,CAAC9B,SAAS,CAACK,OAAO,CAACS,MAAM,CAAC,CAAC,CAAC;QACtH,MAAMiB,SAAS,GAAG,IAAI,CAAC7C,UAAU;QACjC;QACA,IAAI8C,OAAO,GAAG,KAAK;QACnB,IAAIC,SAAS,GAAG,CAAC;QACjB,IAAI,IAAI,CAACtD,cAAc,EAAE;UACrBoD,SAAS,CAACG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/B,CAAC,MACI;UACDH,SAAS,CAACI,QAAQ,CAACxE,QAAQ,CAAC;QAChC;QACA,IAAI,IAAI,CAACc,YAAY,IAAI,CAAC,EAAE;UACxBsD,SAAS,CAACK,UAAU,CAACvB,YAAY,EAAEkB,SAAS,CAAC;QACjD,CAAC,MACI;UACDP,uBAAuB,IAAIX,YAAY;UACvCY,kCAAkC,IAAIZ,YAAY;UAClD,MAAMwB,WAAW,GAAG,IAAI,CAACvD,eAAe,GAAG2C,kCAAkC,GAAGD,uBAAuB;UACvG,IAAIc,IAAI,CAACC,GAAG,CAACF,WAAW,CAAC,GAAG,IAAI,CAAC5D,YAAY,EAAE;YAC3CwD,SAAS,GAAGK,IAAI,CAACE,KAAK,CAACF,IAAI,CAACC,GAAG,CAACF,WAAW,CAAC,GAAG,IAAI,CAAC5D,YAAY,CAAC;YACjE,IAAI4D,WAAW,GAAG,CAAC,EAAE;cACjBJ,SAAS,IAAI,CAAC,CAAC;YACnB;YACAT,uBAAuB,GAAGA,uBAAuB,GAAG,IAAI,CAAC/C,YAAY;YACrEsD,SAAS,CAACK,UAAU,CAAC,IAAI,CAAC3D,YAAY,GAAGwD,SAAS,EAAEF,SAAS,CAAC;YAC9DC,OAAO,GAAG,IAAI;UAClB,CAAC,MACI;YACDD,SAAS,CAACzB,YAAY,CAAC,CAAC,CAAC;UAC7B;QACJ;QACAyB,SAAS,CAACU,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvC;QACAV,SAAS,CAACZ,CAAC,GAAGmB,IAAI,CAACC,GAAG,CAACR,SAAS,CAACZ,CAAC,CAAC,GAAGhE,cAAc,CAACuF,oBAAoB,GAAGvF,cAAc,CAACuF,oBAAoB,IAAIX,SAAS,CAACZ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGY,SAAS,CAACZ,CAAC;QAC1JY,SAAS,CAACf,CAAC,GAAGsB,IAAI,CAACC,GAAG,CAACR,SAAS,CAACf,CAAC,CAAC,GAAG7D,cAAc,CAACuF,oBAAoB,GAAGvF,cAAc,CAACuF,oBAAoB,IAAIX,SAAS,CAACf,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGe,SAAS,CAACf,CAAC;QAC1Je,SAAS,CAAChB,CAAC,GAAGuB,IAAI,CAACC,GAAG,CAACR,SAAS,CAAChB,CAAC,CAAC,GAAG5D,cAAc,CAACuF,oBAAoB,GAAGvF,cAAc,CAACuF,oBAAoB,IAAIX,SAAS,CAAChB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAGgB,SAAS,CAAChB,CAAC;QAC1J,MAAM4B,aAAa,GAAG,IAAI,CAACd,YAAY,CAACe,OAAO,GAAG,IAAI,CAACf,YAAY,GAAGgB,SAAS;QAC/E,IAAIP,IAAI,CAACC,GAAG,CAAC,IAAI,CAAC9D,YAAY,CAAC,GAAG,CAAC,IAAI,IAAI,CAACK,eAAe,EAAE;UACzD;UACA,IAAI,CAAC+C,YAAY,CAACiB,cAAc,CAAC,CAAC,CAACC,SAAS,CAACF,SAAS,EAAEpG,UAAU,CAACuG,UAAU,CAAC,CAAC,CAAC,EAAEvG,UAAU,CAACF,OAAO,CAAC,CAAC,CAAC,EAAEQ,KAAK,CAACqD,eAAe,GAAGuC,aAAa,GAAGE,SAAS,CAAC;UAC3J;UACAd,SAAS,CAACkB,UAAU,CAAC,IAAI,CAAC9D,wBAAwB,CAAC;UACnD4C,SAAS,CAACU,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;UAC1C;UACAV,SAAS,CAACZ,CAAC,GAAGmB,IAAI,CAACC,GAAG,CAACR,SAAS,CAACZ,CAAC,CAAC,IAAI,IAAI,CAAChC,wBAAwB,CAACgC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;UACpFY,SAAS,CAACf,CAAC,GAAGsB,IAAI,CAACC,GAAG,CAACR,SAAS,CAACf,CAAC,CAAC,IAAI,IAAI,CAAC7B,wBAAwB,CAAC6B,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;UACpFe,SAAS,CAAChB,CAAC,GAAGuB,IAAI,CAACC,GAAG,CAACR,SAAS,CAAChB,CAAC,CAAC,IAAI,IAAI,CAAC5B,wBAAwB,CAAC4B,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;UACpFvE,MAAM,CAAC0G,YAAY,CAACnB,SAAS,EAAEtF,UAAU,CAACuG,UAAU,CAAC,CAAC,CAAC,EAAEvG,UAAU,CAACF,OAAO,CAAC,CAAC,CAAC,EAAEE,UAAU,CAACD,MAAM,CAAC,CAAC,CAAC,CAAC;QACzG,CAAC,MACI;UACDA,MAAM,CAAC2G,YAAY,CAACpB,SAAS,CAACZ,CAAC,EAAEY,SAAS,CAACf,CAAC,EAAEe,SAAS,CAAChB,CAAC,EAAEtE,UAAU,CAACD,MAAM,CAAC,CAAC,CAAC,CAAC;UAChFC,UAAU,CAACD,MAAM,CAAC,CAAC,CAAC,CAAC4G,aAAa,CAAC,IAAI,CAACvB,YAAY,CAACiB,cAAc,CAAC,CAAC,EAAErG,UAAU,CAACD,MAAM,CAAC,CAAC,CAAC,CAAC;QAChG;QACA;QACAC,UAAU,CAACD,MAAM,CAAC,CAAC,CAAC,CAACuG,SAAS,CAACtG,UAAU,CAACF,OAAO,CAAC,CAAC,CAAC,EAAEsG,SAAS,EAAEA,SAAS,EAAE9F,KAAK,CAACqD,eAAe,GAAGuC,aAAa,GAAGE,SAAS,CAAC;QAC9H,MAAMQ,QAAQ,GAAG,MAAM;QACvB,IAAIf,IAAI,CAACC,GAAG,CAAC9F,UAAU,CAACF,OAAO,CAAC,CAAC,CAAC,CAAC4E,CAAC,CAAC,GAAGkC,QAAQ,IAAIf,IAAI,CAACC,GAAG,CAAC9F,UAAU,CAACF,OAAO,CAAC,CAAC,CAAC,CAACyE,CAAC,CAAC,GAAGqC,QAAQ,IAAIf,IAAI,CAACC,GAAG,CAAC9F,UAAU,CAACF,OAAO,CAAC,CAAC,CAAC,CAACwE,CAAC,CAAC,GAAGsC,QAAQ,EAAE;UAC9I,IAAI,CAACxB,YAAY,CAACiB,cAAc,CAAC,CAAC,CAACX,QAAQ,CAAC1F,UAAU,CAACD,MAAM,CAAC,CAAC,CAAC,CAAC;QACrE;QACA;QACA,IAAIwF,OAAO,EAAE;UACTN,YAAY,CAACjD,YAAY,GAAG,IAAI,CAACA,YAAY,GAAGwD,SAAS;UACzD,IAAI,CAACvD,gBAAgB,CAAC4E,eAAe,CAAC5B,YAAY,CAAC;QACvD;QACA,IAAI,CAAC6B,cAAc,CAAC,CAAC;MACzB;IACJ,CAAC,CAAC;IACF;IACA,IAAI,CAACnC,YAAY,CAACoC,qBAAqB,CAACtD,GAAG,CAAC,MAAM;MAAA,IAAAuD,kBAAA;MAC9C,IAAI,CAACxE,SAAS,GAAG,IAAI;MACrB,MAAM0D,aAAa,GAAG,IAAI,CAACd,YAAY,CAACe,OAAO,GAAG,IAAI,CAACf,YAAY,GAAGgB,SAAS;MAC/E,CAAAY,kBAAA,OAAI,CAAC5B,YAAY,cAAA4B,kBAAA,eAAjBA,kBAAA,CAAmBX,cAAc,CAAC,CAAC,CAACC,SAAS,CAAC,IAAI,CAAC5D,wBAAwB,EAAE0D,SAAS,EAAEA,SAAS,EAAE9F,KAAK,CAACqD,eAAe,GAAGuC,aAAa,GAAGE,SAAS,CAAC;MACrJrB,uBAAuB,GAAG,CAAC;MAC3BC,kCAAkC,GAAG,CAAC;IAC1C,CAAC,CAAC;IACF,IAAI,CAACL,YAAY,CAACO,gBAAgB,CAACzB,GAAG,CAAEwD,CAAC,IAAK/C,iBAAiB,CAAC+C,CAAC,CAAC9C,YAAY,CAAC,CAAC;IAChF,IAAI,CAACQ,YAAY,CAACuC,mBAAmB,CAACzD,GAAG,CAACe,cAAc,CAAC;IACzD;IACAjD,MAAM,aAANA,MAAM,gBAAAK,qBAAA,GAANL,MAAM,CAAE4F,iBAAiB,cAAAvF,qBAAA,gBAAAA,qBAAA,GAAzBA,qBAAA,CAA2B+C,YAAY,cAAA/C,qBAAA,gBAAAA,qBAAA,GAAvCA,qBAAA,CAAyCsD,gBAAgB,cAAAtD,qBAAA,eAAzDA,qBAAA,CAA2D6B,GAAG,CAAEwD,CAAC,IAAK/C,iBAAiB,CAAC+C,CAAC,CAACG,KAAK,CAAC7C,CAAC,CAAC,CAAC;IACnGhD,MAAM,aAANA,MAAM,gBAAAM,sBAAA,GAANN,MAAM,CAAE4F,iBAAiB,cAAAtF,sBAAA,gBAAAA,sBAAA,GAAzBA,sBAAA,CAA2B8C,YAAY,cAAA9C,sBAAA,gBAAAA,sBAAA,GAAvCA,sBAAA,CAAyCqF,mBAAmB,cAAArF,sBAAA,eAA5DA,sBAAA,CAA8D4B,GAAG,CAACe,cAAc,CAAC;IACjF,MAAM6C,KAAK,GAAG;MACVC,WAAW,EAAE,CAACpE,SAAS,EAAEC,SAAS,CAAC;MACnCoE,cAAc,EAAE,CAAClE,QAAQ,CAACH,SAAS,EAAEG,QAAQ,CAACF,SAAS,CAAC;MACxDqE,QAAQ,EAAE,IAAI,CAAC5G,gBAAgB;MAC/BC,aAAa,EAAE,IAAI,CAACC,cAAc;MAClCC,eAAe,EAAE,IAAI,CAACC,gBAAgB;MACtCyG,MAAM,EAAE,KAAK;MACb9C,YAAY,EAAE,IAAI,CAACA;IACvB,CAAC;IACD,CAAA7C,aAAA,OAAI,CAACS,OAAO,cAAAT,aAAA,eAAZA,aAAA,CAAc4F,cAAc,CAAC,IAAI,CAACzE,UAAU,EAAEoE,KAAK,CAAC;IACpD,IAAI,CAACtF,gBAAgB,GAAGV,UAAU,CAACuB,iBAAiB,CAAC+E,mBAAmB,CAAClE,GAAG,CAAEmE,WAAW,IAAK;MAAA,IAAAC,cAAA,EAAAC,qBAAA,EAAAC,cAAA,EAAAC,sBAAA;MAC1F,IAAI,IAAI,CAACC,cAAc,EAAE;QACrB;MACJ;MACA;MACA,IAAIC,SAAS,IAAAL,cAAA,GAAG,IAAI,CAACtF,OAAO,cAAAsF,cAAA,uBAAZA,cAAA,CAAcM,YAAY,CAAC,IAAI,CAAClF,UAAU,CAAC;MAC3D,IAAI,CAACmF,UAAU,GAAG,CAAC,CAACF,SAAS,IAAI,CAAC,EAAEA,SAAS,CAACX,cAAc,CAACc,OAAO,CAACT,WAAW,aAAXA,WAAW,gBAAAE,qBAAA,GAAXF,WAAW,CAAEU,QAAQ,cAAAR,qBAAA,uBAArBA,qBAAA,CAAuBS,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;MAC9G;MACAL,SAAS,IAAAH,cAAA,GAAG,IAAI,CAACxF,OAAO,cAAAwF,cAAA,uBAAZA,cAAA,CAAcI,YAAY,CAAC,IAAI,CAAC5E,SAAS,CAAC;MACtD,IAAI,CAAC6E,UAAU,KAAK,IAAI,CAACA,UAAU,GAAG,CAAC,CAACF,SAAS,IAAI,CAAC,EAAEA,SAAS,CAACX,cAAc,CAACc,OAAO,CAACT,WAAW,aAAXA,WAAW,gBAAAI,sBAAA,GAAXJ,WAAW,CAAEU,QAAQ,cAAAN,sBAAA,uBAArBA,sBAAA,CAAuBO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;MACnI,IAAI,CAAC,IAAI,CAAChG,OAAO,EAAE;QACf,MAAMiF,QAAQ,GAAG,IAAI,CAAC7C,YAAY,CAAC6D,OAAO,GAAI,IAAI,CAACJ,UAAU,IAAI,IAAI,CAAC5F,SAAS,GAAG,IAAI,CAAC1B,cAAc,GAAG,IAAI,CAACF,gBAAgB,GAAI,IAAI,CAACI,gBAAgB;QACtJ,IAAI,CAACyH,qBAAqB,CAACpB,KAAK,CAACC,WAAW,EAAEE,QAAQ,CAAC;MAC3D;IACJ,CAAC,CAAC;IACF,IAAI,CAAC7C,YAAY,CAAC+D,mBAAmB,CAACjF,GAAG,CAAEkF,QAAQ,IAAK;MACpD,IAAI,CAACF,qBAAqB,CAACpB,KAAK,CAACC,WAAW,EAAEqB,QAAQ,GAAG,IAAI,CAAC/H,gBAAgB,GAAG,IAAI,CAACI,gBAAgB,CAAC;IAC3G,CAAC,CAAC;IACF,MAAM4H,KAAK,GAAGvH,UAAU,CAACwH,oBAAoB,CAAC,CAAC;IAC/CD,KAAK,CAACE,kBAAkB,GAAGF,KAAK,CAACE,kBAAkB,CAACC,MAAM,CAAC,IAAI,CAACxF,SAAS,CAACyF,cAAc,CAAC,CAAC,CAAC;EAC/F;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;EACI5F,gBAAgBA,CAAC6F,UAAU,EAAEzH,SAAS,EAAE0H,UAAU,GAAG,KAAK,EAAE;IACxD,MAAMhG,SAAS,GAAGhD,SAAS,CAAC,UAAU,EAAE;MAAEiJ,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC3H,SAAS,GAAG,CAAC,IAAI,CAAC;IAAE,CAAC,EAAE,IAAI,CAACH,UAAU,CAACuB,iBAAiB,CAAC;IACrH,MAAMO,SAAS,GAAGhD,cAAc,CAAC,UAAU,EAAE;MAAEiJ,WAAW,EAAE,KAAK,GAAG5H,SAAS;MAAE6H,MAAM,EAAE,KAAK;MAAEC,cAAc,EAAE,KAAK,GAAG9H,SAAS;MAAE+H,YAAY,EAAE;IAAG,CAAC,EAAE,IAAI,CAAClI,UAAU,CAACuB,iBAAiB,CAAC;IACvL;IACAM,SAAS,CAACU,OAAO,CAACC,YAAY,CAAC,GAAG,CAAC;IACnCX,SAAS,CAACsE,QAAQ,GAAG,IAAI,CAAC5G,gBAAgB;IAC1CsC,SAAS,CAACsG,QAAQ,CAAC9E,CAAC,GAAGmB,IAAI,CAAC4D,EAAE,GAAG,CAAC;IAClCvG,SAAS,CAACM,QAAQ,CAACc,CAAC,IAAI,GAAG;IAC3BnB,SAAS,CAACqE,QAAQ,GAAG,IAAI,CAAC5G,gBAAgB;IAC1CuC,SAAS,CAACK,QAAQ,CAACc,CAAC,IAAI,KAAK,GAAG,CAAC;IACjCnB,SAAS,CAACqG,QAAQ,CAAC9E,CAAC,GAAGmB,IAAI,CAAC4D,EAAE,GAAG,CAAC;IAClC,IAAIP,UAAU,EAAE;MACZhG,SAAS,CAACwG,UAAU,GAAG,CAAC;MACxBvG,SAAS,CAACuG,UAAU,GAAG,CAAC;IAC5B;IACAT,UAAU,CAACvF,QAAQ,CAACR,SAAS,CAAC;IAC9B+F,UAAU,CAACvF,QAAQ,CAACP,SAAS,CAAC;IAC9B,OAAO;MAAED,SAAS;MAAEC;IAAU,CAAC;EACnC;EACAwG,oBAAoBA,CAACC,KAAK,EAAE;IACxB,IAAI,IAAI,CAACjF,YAAY,EAAE;MACnB,IAAI,CAACA,YAAY,CAAC6D,OAAO,GAAGoB,KAAK,GAAG,IAAI,GAAG,KAAK;IACpD;EACJ;EACA;AACJ;AACA;EACI,IAAIC,SAASA,CAACD,KAAK,EAAE;IACjB,IAAI,CAACtH,UAAU,GAAGsH,KAAK;IACvB,IAAI,CAACA,KAAK,EAAE;MACR,IAAI,CAACE,YAAY,GAAG,IAAI;MACxB,IAAI,CAAC1E,YAAY,GAAG,IAAI;IAC5B,CAAC,MACI;MACD,IAAI,IAAI,CAAC7C,OAAO,EAAE;QACd,IAAI,CAACuH,YAAY,GAAG,IAAI,CAACvH,OAAO,CAACuH,YAAY;QAC7C,IAAI,CAAC1E,YAAY,GAAG,IAAI,CAAC7C,OAAO,CAAC6C,YAAY;MACjD;IACJ;EACJ;EACA,IAAIyE,SAASA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACvH,UAAU;EAC1B;EACA;AACJ;AACA;EACIyH,OAAOA,CAAA,EAAG;IACN,IAAI,CAAC9H,gBAAgB,CAAC+H,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC3I,UAAU,CAACuB,iBAAiB,CAAC+E,mBAAmB,CAACsC,MAAM,CAAC,IAAI,CAAClI,gBAAgB,CAAC;IACnF,IAAI,CAAC4C,YAAY,CAACuF,MAAM,CAAC,CAAC;IAC1B,IAAI,IAAI,CAACjH,UAAU,EAAE;MACjB,IAAI,CAACA,UAAU,CAAC8G,OAAO,CAAC,CAAC;IAC7B;IACA,CAAC,IAAI,CAACnJ,gBAAgB,EAAE,IAAI,CAACE,cAAc,EAAE,IAAI,CAACE,gBAAgB,CAAC,CAACmJ,OAAO,CAAEC,IAAI,IAAK;MAClF,IAAIA,IAAI,EAAE;QACNA,IAAI,CAACL,OAAO,CAAC,CAAC;MAClB;IACJ,CAAC,CAAC;IACF,KAAK,CAACA,OAAO,CAAC,CAAC;EACnB;EACA;AACJ;AACA;AACA;AACA;EACIM,aAAaA,CAACC,IAAI,EAAEC,gBAAgB,GAAG,KAAK,EAAE;IAC1C,KAAK,CAACF,aAAa,CAACC,IAAI,CAAC;IACzB,IAAIC,gBAAgB,EAAE;MAClB,IAAI,CAAChH,SAAS,CAACyF,cAAc,CAAC,CAAC,CAACmB,OAAO,CAAEK,CAAC,IAAK;QAC3CA,CAAC,CAAChD,QAAQ,GAAG,IAAI,CAAC5G,gBAAgB;QAClC,IAAI4J,CAAC,CAACrJ,KAAK,EAAE;UACTqJ,CAAC,CAACrJ,KAAK,GAAG,IAAI,CAACP,gBAAgB,CAACiC,YAAY;QAChD;MACJ,CAAC,CAAC;MACF,IAAI,CAACoF,cAAc,GAAG,KAAK;IAC/B;EACJ;AACJ;AACA;AACA;AACA;AACAvH,cAAc,CAACuF,oBAAoB,GAAGxF,OAAO","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|