// All material copyright Esri, All Rights Reserved, unless otherwise specified. // See https://js.arcgis.com/4.30/esri/copyright.txt for details. //>>built define("exports ../../chunks/tslib.es6 ../../core/Accessor ../../core/Evented ../../core/reactiveUtils ../../core/screenUtils ../../core/accessorSupport/decorators/property ../../core/has ../../core/Logger ../../core/RandomLCG ../../core/accessorSupport/decorators/subclass ../../core/libs/gl-matrix-2/math/vec2 ../../chunks/vec32 ../../core/libs/gl-matrix-2/factories/vec3f64 ../../geometry/projection ../../geometry/projection/projectPointToVector ../../support/elevationInfoUtils ../../symbols/support/defaults ../../symbols/support/ElevationInfo ./support/utils ../support/drapedUtils".split(" "), function(c,f,t,u,m,k,h,G,H,I,v,n,w,x,p,y,z,A,B,C,D){c.GraphicManipulator=class extends t{set graphic(a){this._circleCollisionCache=null;this._originalSymbol=a.symbol;this._set("graphic",a);this.attachSymbolChanged()}get elevationInfo(){var {layer:a}=this.graphic;a=a&&"elevationInfo"in a?a.elevationInfo:null;const d=z.getGraphicEffectiveElevationMode(this.graphic);return new B({mode:d,offset:a?a.offset:0})}set focusedSymbol(a){a!==this._get("focusedSymbol")&&(this._set("focusedSymbol",a),this._updateGraphicSymbol(), this._circleCollisionCache=null)}grabbableForEvent(){return!0}set grabbing(a){a!==this._get("grabbing")&&(this._set("grabbing",a),this._updateGraphicSymbol())}set hovering(a){a!==this._get("hovering")&&(this._set("hovering",a),this._updateGraphicSymbol())}set selected(a){a!==this._get("selected")&&(this._set("selected",a),this._updateGraphicSymbol(),this.events.emit("select-changed",{action:a?"select":"deselect"}))}get _focused(){return this._get("hovering")||this._get("grabbing")}constructor(a){super(a); this.layer=null;this.interactive=!0;this.selectable=!1;this.grabbable=!0;this.dragging=!1;this.cursor=null;this.consumesClicks=!0;this.events=new u.EventEmitter;this._originalSymbol=this._graphicSymbolChangedHandle=this._circleCollisionCache=null}destroy(){this.detachSymbolChanged();this._resetGraphicSymbol();this._set("view",null)}intersectionDistance(a){const d=this.graphic;if(!1===d.visible)return null;const e=d.geometry;if(null==e)return null;var b=this._get("focusedSymbol");b=null!=b?b:d.symbol; return"2d"===this.view.type?this._intersectDistance2D(this.view,a,e,b):this._intersectDistance3D(this.view,a,d)}attach(){this.attachSymbolChanged();null!=this.layer&&this.layer.add(this.graphic)}detach(){this.detachSymbolChanged();this._resetGraphicSymbol();null!=this.layer&&this.layer.remove(this.graphic)}attachSymbolChanged(){this.detachSymbolChanged();this._graphicSymbolChangedHandle=m.watch(()=>this.graphic?.symbol,a=>{null!=a&&a!==this.focusedSymbol&&a!==this._originalSymbol&&(this._originalSymbol= a,this._focused&&null!=this.focusedSymbol&&(this.graphic.symbol=this.focusedSymbol))},m.sync)}detachSymbolChanged(){null!=this._graphicSymbolChangedHandle&&(this._graphicSymbolChangedHandle.remove(),this._graphicSymbolChangedHandle=null)}onElevationChange(){}onViewChange(){}_updateGraphicSymbol(){this.graphic.symbol=this._focused&&null!=this.focusedSymbol?this.focusedSymbol:this._originalSymbol}_resetGraphicSymbol(){this.graphic.symbol=this._originalSymbol}_intersectDistance2D(a,d,e,b){b=b||A.getDefaultSymbol2D(e); if(null==b)return null;var g=this._circleCollisionCache;if("point"===e.type&&"cim"===b.type&&"CIMPointSymbol"===b.data.symbol?.type&&b.data.symbol.symbolLayers){const {offsetX:l,offsetY:E,size:F}=C.getSymbolInfo(b);b=k.screenPointObjectToArray(d,q);g=F/2;a=a.toScreen(e);return n.squaredDistance(b,[a.x+l,a.y+E])