@arcgis/core 4.32.0-next.20241226 → 4.32.0-next.20241228

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.
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.32/esri/copyright.txt for details.
4
4
  */
5
- import{_ as e}from"../../chunks/tslib.es6.js";import"../../geometry.js";import t from"../../Graphic.js";import"../../symbols.js";import{isSome as i,equals as r}from"../../core/arrayUtils.js";import{createTask as a}from"../../core/asyncUtils.js";import s from"../../core/Collection.js";import{deprecatedProperty as o}from"../../core/deprecate.js";import n from"../../core/Error.js";import l from"../../core/Evented.js";import c from"../../core/JSONSupport.js";import{equalsShallow as h}from"../../core/lang.js";import p from"../../core/Logger.js";import{clamp as u}from"../../core/mathUtils.js";import{abortMaybe as d,destroyMaybe as m}from"../../core/maybe.js";import g from"../../core/Promise.js";import{isAbortError as y,throwIfAborted as f,waitTick as v}from"../../core/promiseUtils.js";import w from"../../core/ReactiveMap.js";import{on as b,watch as F,syncAndInitial as _,initial as P}from"../../core/reactiveUtils.js";import{sqlAnd as I}from"../../core/sql.js";import{getMetersPerUnitForSR as S}from"../../core/unitUtils.js";import{property as C}from"../../core/accessorSupport/decorators/property.js";import"../../core/has.js";import{subclass as k}from"../../core/accessorSupport/decorators/subclass.js";import{UpdatingHandles as V}from"../../core/support/UpdatingHandles.js";import{union as A}from"../../geometry/geometryEngineAsync.js";import{projectWithZConversion as M}from"../../geometry/projection.js";import{isClockwise as R}from"../../geometry/support/coordsUtils.js";import{geographicToWebMercator as O}from"../../geometry/support/webMercatorUtils.js";import j from"../../layers/GraphicsLayer.js";import{searchImages as L}from"../../layers/orientedImagery/queries.js";import{calculateSuitabilities as z}from"../../layers/orientedImagery/core/bestImageUtils.js";import{createCoveragePolygon as B,computePolygonForInspection as G,resizePolygon as x,checkIfPolygonContainsSelectedPoint as E}from"../../layers/orientedImagery/core/coverageUtils.js";import{isConstantElevation as H,isElevationSource as T}from"../../layers/orientedImagery/core/ElevationSourceDefinitions.js";import{imageToWorld as D,imageToWorldPanoramic as U}from"../../layers/orientedImagery/transformations/imageToWorld.js";import N from"../../layers/orientedImagery/transformations/updateElevation.js";import{getElevationSampler as W}from"../../layers/orientedImagery/transformations/updateElevationUtils.js";import{getInitialAngle as q,convertPixelToHeadingPitch as $,getImageToWorldProperties as J,getUpdateElevationProps as Z,isElevationSampler as K,pointToArray as Q,getImageToWorldPanoramicProperties as X,getWorldToImageProperties as Y,convertHeadingPitchToSphereVertex as ee,or as te}from"../../layers/orientedImagery/transformations/utils.js";import{worldToImagePanoramic as ie,worldToImage as re}from"../../layers/orientedImagery/transformations/worldToImage.js";import{getFloorFilterClause as ae}from"../../layers/support/floorFilterUtils.js";import se from"../../rest/support/AttachmentQuery.js";import{scale as oe}from"../../views/draw/support/drawUtils.js";import{ViewEventPriorities as ne}from"../../views/input/InputManager.js";import le from"../PanoramicViewer.js";import{invalidCameraHeading as ce,sectorsInOrder as he,sectorsRadii as pe}from"./constants.js";import{crossSymbol as ue,crossSymbol3D as de,measurementPolygonSymbol as me,measurementPolylineSymbol as ge,sourcePointSymbol as ye,diamondSymbol as fe,diamondSymbol3D as ve,activeSourcePointSymbol as we}from"./symbols.js";import{isNoAttachmentError as be,getContentType as Fe,isTifOrMrf as _e,filterOILLayerView as Pe,isSceneView as Ie,isGraphic as Se,calculateSegment as Ce,calculateDirection as ke}from"./utils.js";import Ve from"./components/ImageViewer.js";import Ae from"../../geometry/Point.js";import Me from"../../geometry/SpatialReference.js";import Re from"../../symbols/SimpleLineSymbol.js";import Oe from"../../geometry/Multipoint.js";import je from"../../geometry/Polyline.js";import Le from"../../geometry/Polygon.js";const ze={click:"view-click",imageClick:"image-click",interactionHandles:"interaction-handles",footprintHandles:"footprint-handles",sketchHandles:"sketch-handles"},Be=new Set(["JPG","JPEG"]),Ge=/\.(\w+)$/,xe=e=>"FA"===e,Ee=()=>new n("orientedimageryviewer:sketch-not-initialized","Sketch property is not initialized, call loadSketch first");let He=class extends(l.EventedMixin(g)){constructor(e){super(e),this.additionalFeatures=new s,this.additionalCameraLocations=new s,this.additionalFootprints=new s,this.areaMeasurementResult=0,this.bestFeatureAngle=0,this.bestFeatureCurrentFootprint=null,this.bestFeatureFootprint=null,this.conversionProps=null,this.coverageFrustums=new s,this.coveragePolygons=new s,this.currentBestFeature=null,this.currentBestFeatureLocation=null,this.currentCoverageVisible=!0,this.determineWorkflowForFeature=async(e,t,i)=>{const{currentBestFeature:r,selectedPoint:a,view:s}=this;if(s?.closePopup(),r&&a){this._initialCurrentCoverageUpdate=!0;try{await this._updatePointsAndPolygons(i),await this._loadImage(i)}catch(o){y(o)||(this.loadImageError(o),p.getLogger(this).error("#loadIImage()","error occured while loading image",o))}}},this.disabled=!1,this.displayMessage={key:"onLoadMessage",type:"info"},this.displayNewMeasurementButton=!0,this.displayNewAreaMeasurementButton=!0,this.distanceMeasurementResult=0,this.digitizationLayer=null,this.features=new s,this.isAdditionalCoverageVisible=!1,this.isAdditionalPointSourcesVisible=!1,this.layer=null,this.localPort=null,this.mapImageConversionToolState=!1,this.navigatorCurrentBestFeature=null,this.overlayedCameraLocations=new s,this.overlayedMapFeatures=new w,this.pointSources=new s,this.previousFeatureAngle=0,this.selectedPoint=null,this.shouldShowSelectedImage=!1,this.sketch=null,this.sketchAdapter=null,this.updateFootprint=async(e,t)=>{"image-loaded"===this.state&&await(this._adapter?.updateFootprint(e,t))},this.updateFootprintPanorama=async(e,t)=>{await(this._adapter?.updateFootprintPanorama(e,t))},this._adapter=null,this._highlightedFeatureHandle=null,this._imageViewer=new Ve,this._initialCurrentCoverageUpdate=!0,this._overlays=new j({listMode:"hide",internal:!0,elevationInfo:{mode:"absolute-height"}}),this._panoramicViewer=new le,this._referencePointOnGround=null,this._referencePointOnImage=null,this._sectorData=null,this._updatingHandles=new V,this._clickTask=null,this._crossSymbol=null,this.footprintExtent=null,this._featureChangedTask=null,this._openPopupTask=null,this._suitabilities=null,this._transformController=new AbortController,this._updateFootprintTask=null,this.hideImageGeometry=e=>{},this.highlight=e=>{if(!this._overlaysView)return;this.removeHighlight();const t=this.additionalFootprints.find((({attributes:{imageID:t}})=>t===Number(e)));this._highlightedFeatureHandle=t?this._overlaysView?.highlight(t):null},this.loadDigitizationAdapter=async e=>{const{sketchAdapter:t}=this;if(await this.loadSketch(e),"digitization"===t?.type)return t;const i=import("./adapters/sketch/DigitizationAdapter.js");this._updatingHandles.addPromise(i);const{default:r}=await i;return f(e),this.sketchAdapter=new r({viewModel:this}),this.sketchAdapter},this.loadImageFromSource=async(e,t)=>this._updatingHandles.addPromise(this._loadImageFromSourceInternal(e,t)),this.loadImageViewer=e=>{this._imageViewer.container=e},this.loadPanoramicViewer=e=>{this._panoramicViewer.container=e},this.removeHighlight=()=>this._highlightedFeatureHandle?.remove(),this.revealImageGeometry=e=>{},this.startDigitization=e=>{},this.stopDigitization=e=>{},this.toggleImageAttributes=()=>{d(this._openPopupTask),this._openPopupTask=a((async e=>{const{currentBestFeature:i,popupEnabled:r,layer:a,view:s}=this;if(s?.closePopup(),!(s&&i&&r&&a))return;const{attributes:o,geometry:n}=i,l=new t({geometry:n,attributes:o.toJSON(),layer:a});f(e),await s.openPopup({features:[l],location:o.location.clone()})}))},this._createViewClickHandle=()=>{if(this.removeHandles(ze.click),"disabled"===this.state||null==this.view)return;const e=this.mapImageConversionToolState&&"image-loaded"===this.state?this._mapImageConversionToolViewClickHandler:this._viewClickHandler;this.addHandles(this.view.on("click",e,ne.WIDGET),ze.click)},this._createImageClickHandle=()=>{this.removeHandles(ze.imageClick);const{mapImageConversionToolState:e,mode:t,activeViewer:i,currentBestFeature:r,footprintExtent:s}=this,o=i?.imageSize;if(!(e&&"none"!==t&&o&&s&&r))return;i.clickAction="pixel-location";let n=null;const l=b((()=>i),"pixel-location",(e=>{this.plotReferencePointOnImage(e),n?.abort(),n=a((async i=>{if(!e)return;const a=await this.getMapPoint(e,{feature:r,imageSize:o,mode:t}).then((e=>{const t=this.view?.spatialReference;return te(!t,e.spatialReference.equals(t))?e:M(e,t)}));f(i),this.plotReferencePointOnGround(a)}))}));this.addHandles(l,ze.imageClick)},this._getImageSourceFromAttachment=async(e,t,i)=>{const r=new se({objectIds:[t]}),a=await e.queryAttachments(r,i),s=a[`${t}`]?.[0],o=s?.url;if(!o)throw new n("NoAttachmentError","no attachments found",{[e.objectIdField]:t,layer:e});return{datasetFormat:s.contentType.split("/")[1].toUpperCase(),url:o}},this._loadImage=async e=>{const{currentBestFeature:t,layer:i,mode:r}=this;if(this.clearGraphics(),!i||!t||"none"===r)return;const{attributes:a}=t,{imagePath:s,imageRotation:o,cameraHeading:n,cameraRoll:l,cameraPitch:c,objectId:h,cameraOrientation:u,location:d}=a,m=(l??0)+(o??0),g=d.spatialReference.isWGS84&&4!==u?.type?O(d):new Ae(d);let v=s;if(xe(s))try{v=await this._getImageSourceFromAttachment(i,h,e)}catch(w){if(y(w))return;return be(w)?(p.getLogger(this).error(w),void this.setMessage("noAttachment","error",`${i.objectIdField}: ${h}`)):(p.getLogger(this).error(w,{[i.objectIdField]:h,layer:i}),void this.setMessage("imageLoadError","error",`query-attachments-failed:${i.objectIdField} ${h}`))}try{await this.loadImageFromSource(v,{imageRotation:m,options:e,pitch:c,yaw:n,mode:r,cameraLocation:g}),f(e),await this.transformAndPlotSelectedLocation(e)}catch(w){y(w)||this.loadImageError(w)}},this._loadImageFromSourceInternal=async(e,t)=>{const{mode:i,imageRotation:r,options:a}=t,s="string"==typeof e,o=s?e:e.url,{pathname:n,searchParams:l}=new URL(o);let c=s?n.match(Ge)?.[1]:e.datasetFormat;if(!c){const e=await Fe(o,{...t.options});c=e?.split("/")[1]??"UNKNOWN FORMAT"}switch(i){case"default":this._imageViewer.imageSource={datasetFormat:c.toUpperCase(),url:o.split("?")[0]},this._imageViewer.customParameters=Object.fromEntries(l),this._imageViewer.imageRotation=r??0,await this._imageViewer.loadImage(a);break;case"panoramic":if(Be.has(c.toUpperCase())){const{selectedPoint:e}=this,{pitch:i,yaw:r,cameraLocation:s,viewAngle:n}=t;this._panoramicViewer.imageSource=o;let l=r??0;"number"==typeof n?l=n-l:s&&e&&(l=await q(s,e)-l),this._panoramicViewer.pitch=i??0,this._panoramicViewer.yaw=l,await this._panoramicViewer.loadImage(a)}else this.setMessage("unsupportedPanoramicImageryError","error",void 0,{datasetFormat:c});break}},this._loadViewAdapter=async e=>{const{view:t}=this;if(t)switch(t.type){case"2d":{const{default:t}=await import("./adapters/view/MapViewAdapter.js");f(e),this._adapter=new t(this);break}case"3d":{const{default:t}=await import("./adapters/view/SceneViewAdapter.js");f(e),this._adapter=new t(this);break}}else this._adapter=null},this._mapImageConversionToolViewClickHandler=e=>{e.stopPropagation(),e.preventDefault(),e.mapPoint&&this.plotMapPoint(e.mapPoint)},this._viewClickHandler=e=>{this._clickTask?.abort(),this._clickTask=a((async t=>{const{pointerType:i,button:r,mapPoint:a}=e;if(("mouse"!==i||0===r)&&a)return e.stopPropagation(),e.preventDefault(),this._updatingHandles.addPromise(this.loadBestImage(a,{signal:t}))}))},this.plotSelectedPointOnImage=async(e,i)=>{if(await v(i),!e)return;const r=new Ae({...c.isSerializable(e)?e.toJSON():e});if("default"===this.mode)r.x-=.5,r.y=.5-r.y,r.spatialReference=this._imageViewer.imageRenderer.spatialReference.clone(),this._crossSymbol=new t({geometry:r,symbol:ue}),this._imageViewer.addGraphic(this._crossSymbol,0);else if("panoramic"===this.mode){const{imageSize:i}=this._panoramicViewer;if(!i)return;const[r,a]=i,{heading:s,pitch:o}=$(e,r,a),n=ee(s,o);this._crossSymbol=new t({geometry:new Ae(n,Me.WebMercator),symbol:de}),this._panoramicViewer.addGraphic(this._crossSymbol,0)}},this.handleSectorClick=this.handleSectorClick.bind(this),this.searchBestImage=this.searchBestImage.bind(this),this.transformAndPlotReferencePointOnImage=this.transformAndPlotReferencePointOnImage.bind(this),this.updateSuitabilities=this.updateSuitabilities.bind(this),this.selectBestFeature=this.selectBestFeature.bind(this)}initialize(){this.addHandles([F((()=>this.view),(()=>{this.load()}),_),F((()=>this.view?.map),((e,t)=>{t?.layers.remove(this._overlays),e?.layers.add(this._overlays)}),P),F((()=>this.view?.map?.allLayers?.length),(e=>{e&&this.view?.map?.layers.reorder(this._overlays,e-1)}),P),F((()=>[this.state,this.mapImageConversionToolState,this.view]),(()=>{this._createViewClickHandle(),this._createImageClickHandle()}),_),F((()=>this.bestFeatureAngle),((e,t)=>{this.previousFeatureAngle=t??0}),_),F((()=>this.currentBestFeature),(async(e,t)=>{d(this._featureChangedTask),this._featureChangedTask=a((async i=>this.determineWorkflowForFeature.apply(this,[e,t,{signal:i}]))),await this._featureChangedTask.promise}),{sync:!0}),F((()=>this.mode),(e=>{switch(this.removeHandles(ze.interactionHandles),e){case"default":this.addHandles(F((()=>this._imageViewer.imagePointsInView),(e=>{e&&(d(this._updateFootprintTask),this._updateFootprintTask=a((async t=>{await this.updateFootprint(e,{signal:t})})))}),{..._,equals:(e,t)=>r(e,t,h)}),ze.interactionHandles);break;case"panoramic":this.addHandles(F((()=>{const{currentBestFeature:e,state:t}=this,{imageSize:i,vfov:r,hfov:a,pitch:s,yaw:o}=this._panoramicViewer;return e&&i&&"image-loading"!==t?[r,a,o,s]:null}),(e=>{if(!e||"image-loading"===this.state)return;const[t,i,r,s]=e;d(this._updateFootprintTask),this._updateFootprintTask=a((async e=>{await this.updateFootprintPanorama({verticalFieldOfView:t,horizontalFieldOfView:i,yaw:r,pitch:s},{signal:e})}))}),{..._,equals:(e,t)=>r(e,t,h)}),ze.interactionHandles)}}),_),F((()=>[this.brightness,this.contrast,this.sharpness]),(()=>{const{_imageViewer:e,brightness:t,contrast:i,mode:r,sharpness:a}=this;"default"===r&&(e.brightness=t,e.contrast=i,e.sharpness=a)}),_),F((()=>this.activeViewer?.imageRenderer),(()=>{this.sketch&&(this.sketch.view=this.activeViewer?.imageRenderer)}))])}destroy(){this._updateFootprintTask=d(this._updateFootprintTask),this._clickTask=d(this._clickTask),this.coverageFrustums.destroy(),this.coveragePolygons.destroy(),this.pointSources.destroy(),this.additionalFootprints.destroy(),this.additionalCameraLocations.destroy(),this.bestFeatureFootprint=m(this.bestFeatureFootprint),this.bestFeatureCurrentFootprint=m(this.bestFeatureCurrentFootprint),this._crossSymbol=m(this._crossSymbol),this._referencePointOnGround=m(this._referencePointOnGround),this._referencePointOnImage=m(this._referencePointOnImage),this._overlays&&this.view?.map?.remove(this._overlays),this._overlays.destroy(),this._imageViewer.destroy(),this._panoramicViewer.destroy()}get activeLayer(){return o(p.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer}set activeLayer(e){o(p.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer=e}get activeViewer(){const{_imageViewer:e,_panoramicViewer:t,mode:i}=this;switch(i){case"default":return e;case"panoramic":return t;default:return null}}get brightness(){return this._get("brightness")??0}set brightness(e){this._set("brightness",u(e,-10,10))}get contrast(){return this._get("contrast")??0}set contrast(e){this._set("contrast",u(e,-10,10))}get featureCount(){return this.features?.length??0}get imageGalleryEnabled(){return _e(this.currentBestFeature?.attributes.imagePath.trim())}get imageLoaded(){return o(p.getLogger(this),"imageLoaded",{replacement:'Use OrientedImageryViewer.state === "image-loaded"',version:"4.29",warnOnce:!0}),"image-loaded"===this.state}get invalidCameraHeading(){return this.currentBestFeature?.attributes?.cameraHeading===ce}get imagePointsInView(){const{mode:e,_imageViewer:t}=this;return"default"===e?t.imagePointsInView:null}get layerView(){const{layer:e,view:t}=this;if(e&&t)return t.allLayerViews.find(Pe(e))}get layerFloorFilterClause(){const{layerView:e}=this;return e?ae(e):null}get mode(){const e=this.currentBestFeature?.attributes;if(!e)return"none";const{horizontalFieldOfView:t,isSpherical:i}=e;return 360===t||i?"panoramic":"default"}get popupEnabled(){return!0===this.layer?.popupEnabled}get referencePoint(){return this._referencePointOnGround?.geometry}get sectorData(){const{_sectorData:e}=this;return e?he.map((t=>e[t])):null}get sharpness(){return this._get("sharpness")??0}set sharpness(e){this._set("sharpness",u(e,0,1))}get sketchGraphicsLayer(){return this.sketch?.layer}get state(){const{mode:e,disabled:t}=this;if(t)return"disabled";if(!this.isFulfilled())return"loading";if(this.isRejected())return"error";if(this._updatingHandles.updating)return"image-loading";if("error"===this.displayMessage?.type)return"image-load-error";switch(e){case"default":return this._imageViewer.state;case"panoramic":return this._panoramicViewer.state}return"ready"}get thumbnails(){const{features:e}=this;return e?new s(e.map((({attributes:{imagePath:e,objectId:t,cameraRoll:i,imageRotation:r}})=>{const a=e.trim();return _e(a)?{url:a,objectId:t,rotation:(i??0)+(r??0)}:null})).filter(i)):null}set view(e){this._set("view",e)}get _overlaysView(){return this.view?.layerViews.find((({layer:e})=>e===this._overlays))}digitizeCancel(){return this.sketch?.cancel()}digitizeCanRedo(){return this.sketch?.canRedo()??!1}digitizeCanUndo(){return this.sketch?.canUndo()??!1}digitizeComplete(){return this.sketch?.complete()}digitizeCreate(e,t){const{sketch:i}=this;return i?i.create(e,t):Promise.reject(Ee())}async digitizeDelete(){if(!this.sketch)throw Ee();return this.sketch.delete()}digitizeDuplicate(){if(!this.sketch)throw Ee();return this.sketch.duplicate()}digitizePlace(e,t){if(!this.sketch)throw Ee();return this.sketch.place(e,t)}digitizeRedo(){if(!this.sketch)throw Ee();return this.sketch.redo()}digitizeUndo(){if(!this.sketch)throw Ee();return this.sketch.undo()}digitizeUpdate(e,t){if(!this.sketch)throw Ee();return this.sketch.update(e,t)}filterByFootprints(e,t){const i=[],r=[],a=[];return e.forEach((e=>{const{layer:{coveragePercent:s},attributes:o}=e;let n;const l=S(e.geometry.spatialReference);o.cameraHeight/=l,o.farDistance/=l,o.nearDistance/=l,H(o.elevationSource)&&(o.elevationSource.constantElevation/=l);const{polygon:c,frustum:h}=B(o);if(n=c.clone(),o.isInspection&&(n=G(o)),s&&(n=x(n,s)),E(n,t)){a.push(e);const{geometry:t,objectId:s,cameraHeight:n,cameraHeading:l}=o,p=t.clone();p.z=n,p.imageID=s,this.pointSources.push(p),l!==ce&&(i.push(c),h&&r.push(h))}})),{features:a,polygons:i,frustums:r}}getMeasurementProperties(){const{currentBestFeature:e,activeViewer:t}=this;if(!e||!t?.imageSize)return;const{elevationSample:i,attributes:r}=e,{elevationSource:a,cameraHeight:s}=r,o=J(r,t.imageSize[0],t.imageSize[1]);let n=o.cameraLocation;return(n.spatialReference.isGeographic?M(n,Me.WebMercator):Promise.resolve(n)).then((e=>(n=e,Z((n.z??0)-s,{elevationSample:i,elevationSource:a,extent:this.footprintExtent})))).then((t=>("elevationSample"in t&&K(t.elevationSample)&&(e.elevationSample=t.elevationSample),{...o,cameraLocation:n,updateElevationProps:t})))}async deleteDigitizedFeatures(e){const{digitizationLayer:t}=this;if(!t)throw new n("Digitization layer is not available");return t.queryFeatures({objectIds:e}).then((({features:e})=>t.applyEdits({deleteFeatures:e})))}handleSectorClick(e){if(isNaN(e))return;const t=this._sectorData?.[he[e]];t?.length&&this._updateCurrentBestFeature(t.at(0))}handleFeatureClick(e){const{sector:t,featureIndexInSector:i}=e;if(isNaN(i))return;const r=this._sectorData?.[t];r?.length&&this._updateCurrentBestFeature(r.at(i))}async load(e){return this.addResolvingPromise(this._loadViewAdapter(e).catch((e=>{if(!y(e))throw e}))),this}async loadBestImage(e,t){return this.view?.closePopup(),this.displayMessage=null,this.selectedPoint=e.spatialReference.isGeographic?O(e):e.clone(),this.features.removeAll(),this.currentBestFeature=null,this.additionalFeatures.removeAll(),this.additionalFootprints.removeAll(),this.additionalCameraLocations.removeAll(),this.bestFeatureCurrentFootprint=m(this.bestFeatureCurrentFootprint),this._overlays?.removeAll(),this._fetchFeaturesWithController(e,t)}loadImageError(e){p.getLogger(this).error("oriented-imagery-viewer:load-image",e),this.setMessage("imageLoadError","error",e.message)}async loadSketch(e){if(!this.sketch){const t=import("../Sketch/SketchViewModel.js");this._updatingHandles.addPromise(t);const{default:i}=await t;f(e),this.sketch=new i({layer:new j,view:this.activeViewer?.imageRenderer,updateOnGraphicClick:!1,defaultUpdateOptions:{reshapeOptions:{edgeOperation:"none",shapeOperation:"none",vertexOperation:void 0},enableMoveAllGraphics:!1,enableRotation:!1,enableScaling:!1,multipleSelectionEnabled:!1,toggleToolOnClick:!1,tool:"transform"}})}return this.sketch}async loadSketchAdapter(e){if(!this.sketchAdapter){const t=import("./adapters/sketch/MeasurementAdapter.js");this._updatingHandles.addPromise(t);const{default:i}=await t;if(f(e),this.sketchAdapter=new i({viewModel:this}),!this.sketchAdapter.viewModel.isResolved())return}if(this.sketch&&this.sketchAdapter){const e=this.activeViewer?.imageRenderer.effectiveTheme.accentColor;e&&this.sketch&&(this.sketch.polygonSymbol=me(e),this.sketch.polylineSymbol=ge(e))}return this.sketchAdapter}async overlayCameraLocations(e){const{activeViewer:i,currentBestFeature:r,overlayedCameraLocations:a,layer:s,mode:o,state:n}=this,l=i?.imageSize;if(!l||!r||!s||"none"===o||n.includes("loading"))return;const{polygon:c}=B(r.attributes);if(i.removeManyGraphics(a.toArray()),a.removeAll(),e){const{features:e}=await s.queryFeatures({where:`${s.objectIdField} <> ${r.attributes.objectId}`,geometry:c,returnGeometry:!0,outFields:[s.objectIdField]}),n=await Promise.all(e.map((async e=>{const{attributes:i,geometry:a}=e,s=await this.getPixels(a,{feature:r,imageSize:l,mode:o}),n=ye.clone();return n.outline=new Re({color:[0,0,0],width:1}),new t({attributes:i,symbol:n,geometry:s})})));a.addMany(n),i.addManyGraphics(a.toArray())}}overlayGraphicsOnImage(e,t){this.overlayedMapFeatures.set(e,t),this.activeViewer?.addManyGraphics(t.toArray())}async overlayMapFeatures(e,r=!1){const{activeViewer:a,currentBestFeature:o,mode:n,state:l}=this,c=a?.imageSize;if(!c||!o||"none"===n||l.includes("loading"))return;const{polygon:h}=B(o.attributes),{features:p}=await e.queryFeatures({geometry:h,returnGeometry:!0,outFields:[e.objectIdField]}),u=new s((await Promise.all(p.map((async i=>{const{attributes:a,geometry:s}=i,l=i.symbol?.clone()??e.renderer?.getSymbol(i)?.clone();switch(s?.type){case"point":{const i=await this.getPixels(s,{feature:o,imageSize:c,mode:n});return new t({attributes:a,layer:e,symbol:l,geometry:i,visible:e.visible&&r})}case"polygon":{const{rings:i,spatialReference:h}=s,p=i.map((e=>e.map((([e,t,i])=>new Ae({x:e,y:t,z:i,spatialReference:h}))))),u=await Promise.all(p.map((async e=>this.getPixels(e,{feature:o,imageSize:c,mode:n}).then((e=>e.map(Q))))));return new t({attributes:a,layer:e,symbol:l,geometry:new Le({rings:u,spatialReference:Me.WebMercator}),visible:e.visible&&r})}case"polyline":{const{paths:i,spatialReference:h}=s,p=i.map((e=>e.map((([e,t,i])=>new Ae({x:e,y:t,z:i,spatialReference:h}))))),u=await Promise.all(p.map((async e=>this.getPixels(e,{feature:o,imageSize:c,mode:n}).then((e=>e.map(Q))))));return new t({attributes:a,layer:e,symbol:l,geometry:new je({paths:u,spatialReference:Me.WebMercator}),visible:e.visible&&r})}case"multipoint":{const{points:i,spatialReference:h}=s,p=i.map((([e,t,i])=>new Ae({x:e,y:t,z:i,spatialReference:h}))),u=await this.getPixels(p,{feature:o,imageSize:c,mode:n}).then((e=>e.map(Q)));return new t({attributes:a,layer:e,symbol:l,geometry:new Oe({points:u,spatialReference:Me.WebMercator}),visible:e.visible&&r})}}return null})))).filter(i));this.overlayGraphicsOnImage(`${e.id}`,u)}async getPixels(e,t){const{imageSize:i,mode:r}=t,a=(await this.worldToImage(Array.isArray(e)?e:[e])).map((e=>{if("default"===r)return new Ae({x:e.x-.5,y:.5-e.y,spatialReference:Me.WebMercator});const[t,a]=i,{heading:s,pitch:o}=$(e,t,a),n=ee(s,o);return new Ae(n,Me.WebMercator)}));return Array.isArray(e)?a:a[0]}async getMapPoint(e,t){const{feature:i,mode:r,imageSize:a}=t,{elevationSample:s,attributes:o}=i,{elevationSource:n,location:l,elevation:c,cameraHeight:h}=o;let p=l.clone();p.spatialReference.isGeographic&&(p=await M(p,Me.WebMercator));const u=await Z(c??(l.z??0)-h,{elevationSample:s,elevationSource:n,extent:this.footprintExtent});let d;if("elevationSample"in u&&K(u.elevationSample)&&(i.elevationSample=u.elevationSample),"default"===r){const t=J(o,a[0],a[1]);d=await D(Array.isArray(e)?e:[e],{...t,cameraLocation:p},u)}else{const t=X(o,a[0],a[1]);d=await U(Array.isArray(e)?e:[e],{...t,cameraLocation:p},u)}return Array.isArray(e)?d:d[0]}async plotMapPoint(e){return this.plotReferencePoint(e),this.transformAndPlotReferencePointOnImage({feature:this.currentBestFeature,selectedLocation:e,options:{signal:this._transformController?.signal}})}plotReferencePointOnGround(e){this._referencePointOnGround&&(this._overlays?.remove(this._referencePointOnGround),this._referencePointOnGround.destroy()),null!=e&&(this._referencePointOnGround=new t({geometry:new Ae({...e.toJSON()}),symbol:fe}),this.view?this._overlays?.add(this._referencePointOnGround):this.emit("plot-ground-point",{data:{point:this._referencePointOnGround?.geometry}}))}plotReferencePointOnImage(e){if("image-loaded"===this.state)switch(this.clearReferencePointOnImage(),this.mode){case"default":{const i=c.isSerializable(e)?e.toJSON():e;i.x-=.5,i.y=.5-i.y,this._referencePointOnImage=new t({geometry:new Ae({spatialReference:this._imageViewer.imageRenderer.spatialReference.clone(),...i}),symbol:fe}),this._imageViewer.addGraphic(this._referencePointOnImage,0);break}case"panoramic":{const{imageSize:i}=this._panoramicViewer;if(!i)return;const[r,a]=i,{heading:s,pitch:o}=$(e,r,a),n=ee(s,o);this._referencePointOnImage=new t({geometry:new Ae(n,Me.WebMercator),symbol:ve}),this._panoramicViewer.addGraphic(this._referencePointOnImage,0);break}}}removeAllOverlayMapFeatures(){this.overlayedMapFeatures.forEach((e=>{this._imageViewer.removeManyGraphics(e.toArray())})),this.overlayedMapFeatures.clear()}removeOverlayedGraphicsOnImage(e){const t=this.overlayedMapFeatures.get(e);t?.length&&(this.activeViewer?.removeManyGraphics(t.toArray()),this.overlayedMapFeatures.delete(e))}resetImage(){switch(this.setMessage("onLoadMessage","info"),this.mode){case"default":this._imageViewer.clearImage(),this._imageViewer.clearGraphics();break;case"panoramic":this._panoramicViewer.clearGraphics()}this._clickTask=d(this._clickTask)}async saveDigitizedFeatures(e){const{activeViewer:t,currentBestFeature:r,digitizationLayer:a,mode:s}=this,o=t?.imageSize;if(!o||!r||!s)throw new n("Image size, current best feature and mode are required to save digitized features");if(!a)throw new n("Digitization layer is not available");const l=await Promise.all(e.map((async e=>{const t=e.clone(),{geometry:i}=t;if(i)if(i.type===a.geometryType)switch(i.type){case"point":return t.geometry=await this.getMapPoint({x:i.x+.5,y:.5-i.y},{feature:r,imageSize:o,mode:s}),t;case"polygon":{const e=await Promise.all(i.rings.map((async e=>this.getMapPoint(e.map((([e,t])=>({x:e+.5,y:.5-t}))),{feature:r,imageSize:o,mode:s}))));return t.geometry=new Le({spatialReference:e[0][0].spatialReference,hasZ:!0,rings:e.map((e=>e.map(Q)))}),t}case"polyline":{const e=await Promise.all(i.paths.map((async e=>this.getMapPoint(e.map((([e,t])=>({x:e+.5,y:.5-t}))),{feature:r,imageSize:o,mode:s}))));return t.geometry=new je({spatialReference:e[0][0].spatialReference,hasZ:!0,paths:e.map((e=>e.map(Q)))}),t}case"mesh":case"multipoint":return void p.getLogger(this).warn("saveDigitizedFeatures:unsupported geometry type",{message:"only point, polygon, polyline are supported for digitization",geometryType:i.type,graphic:t})}else p.getLogger(this).warn("saveDigitizedFeatures:geometry type mismatch",{expected:a.geometryType,actual:i.type,graphic:t})}))),c=l.filter(i);return a.applyEdits({addFeatures:c}).then((e=>{const{addFeatureResults:t}=e;let i=0;const r=l.map((e=>{const r=t[i++];return e?r:{error:new n("Error in saving digitized features"),objectId:null,globalId:null}}));return{...e,addFeatureResults:r}}))}async searchBestImage(e,t){try{const i=await L(e,t);i&&await this._processFeatureResponse(i,e.point,{signal:t?.signal})}catch(i){y(i)||(this.setMessage("imageLoadError","error",i.message),p.getLogger(this).error("error occurred while finding best image",i))}}selectBestFeature(e){this.currentBestFeature=this.features?.find((({attributes:t})=>t.objectId===Number(e)))}setAdditionalCameraLocationsVisibility(e){this.additionalCameraLocations.forEach((t=>{t.visible=e}))}setAdditionalCoverageVisibility(e){this.additionalFootprints.forEach((t=>{t.visible=e}))}setCurrentCoverageVisibility(e){this.bestFeatureCurrentFootprint&&(this.bestFeatureCurrentFootprint.visible=e),this.currentBestFeatureLocation&&(this.currentBestFeatureLocation.visible=e)}setMapImageConversionToolState(e){this.mapImageConversionToolState=e}toggleAllOverlayMapFeatures(e){this.overlayedMapFeatures.forEach((t=>{this._toggleVisiblity(t,e)}))}toggleOverlayMapFeatures(e,t){const i=this.overlayedMapFeatures.get(e);i&&this._toggleVisiblity(i,t)}async transformAndPlotReferencePointOnImage(e){const{selectedLocation:t,options:i}=e;let r=!1,a=!1;const s=this.bestFeatureFootprint?.geometry;switch(s?.type){case"polygon":{const e=t.spatialReference.equals(s.spatialReference)?t:await M(t,s.spatialReference);r=s.contains(e);break}case"mesh":{const e=t.spatialReference.equals(s.spatialReference)?t:await M(t,s.spatialReference);a=s.extent.contains(e);break}}if(!r&&!a)return void this.clearReferencePointOnImage();const o=await this.worldToImage(t,i);if(o)return f(i),this.plotReferencePointOnImage(o),{x:o.x,y:o.y};this.clearReferencePointOnImage()}updateSuitabilities(e){e.sort(((e,t)=>e.suitability-t.suitability)),this._suitabilities=e;const t=this._suitabilities.map((({feature:e})=>e));this._initialCurrentCoverageUpdate=!0,this._updateFeatures(t),this._groupFeaturesBySectors()}async _fetchFeatures(e,t){if(!this.view)return;const i=this.layer;if(i){const r={include:i},a=this.view.toScreen(e);if(!a)return;const s=await this.view.hitTest(a,r);return this._processHitTestResults(i,s,t)}}async _fetchFeaturesWithController(e,t){try{await this._fetchFeatures(e,t)}catch(i){if(y(i))return;this.setMessage("imageLoadError","error"),p.getLogger(this).error("error occurred while fetching features",i)}}_groupFeaturesBySectors(){const{_suitabilities:e,additionalFeatures:t,currentBestFeature:i,features:r,invalidCameraHeading:a}=this;if(!e||!t||!i||!r||a)return void(this._sectorData=null);this._sectorData={};for(const c of he)this._sectorData[c]=new s;const o=e.map(((e,t)=>({...e,featureIndex:t})));o.sort(((e,t)=>e.trueSuitability-t.trueSuitability));const n=o.map((({distance:e})=>e)),l=Math.max(...n);o.forEach((e=>{const{distance:t,angle:i,featureIndex:a}=e,s=t/l*pe[2],o=Ce(t,l),n=ke(i);if(!this._sectorData)return;const c=pe[3]+s*Math.sin(i*Math.PI/180),h=pe[3]+s*Math.cos(i*Math.PI/180);let p;const u=r.at(a),d=u===this.currentBestFeature,m=this.currentBestFeature?.attributes.cameraPitch&&this.currentBestFeature?.attributes.cameraPitch<5;if(d&&m)p=-90;else{const e=c-pe[3],t=h-pe[3],i=t/Math.sqrt(e**2+t**2);let r=180*Math.acos(i)/Math.PI;(e<0&&t<0||e<0&&t>0)&&(r*=-1),p=r}const g=""===o?n:`${o}_${n}`;d&&(p===this.bestFeatureAngle?this.previousFeatureAngle=p:this.bestFeatureAngle=p,this.navigatorCurrentBestFeature=m?null:{x:c,y:h,direction:n});const y=this._sectorData[g];y.add({angle:i,featureIndex:a,x:c,y:h,objectID:u.attributes.objectId,sector:g,featureIndexInSector:y.length})}))}async _processFeatureResponse(e,t,i){const{features:r}=e;if(!r?.length)return this.setMessage("noImageError","error"),void(this.currentBestFeature=null);this.coveragePolygons.removeAll(),this.coverageFrustums.removeAll(),this.pointSources.removeAll();const{features:a,polygons:s,frustums:o}=this.filterByFootprints(r,t);if(!a.length)return this.setMessage("noImageError","error"),void(this.currentBestFeature=null);let n;if(this.coveragePolygons.addMany(s),this.coverageFrustums.addMany(o),s[0]){let e=new Le({spatialReference:s[0].spatialReference});for(const i of s)e=await A(e,i);const t=[];for(const{geometry:i}of a)e.contains(i)||t.push([i.x,i.y]);if(t.sort(((e,t)=>+R([e,t]))),e.addRing(t),this.footprintExtent=oe(e.extent,2,2),this.view?.supportsGround)try{n=await this.view.map.ground.createElevationSampler(this.footprintExtent,i)}catch(l){y(l)||p.getLogger(this).error(l)}}if((n||a[0].attributes.elevationSource)&&this.footprintExtent){const e=a[0].attributes.elevationSource;T(e)&&!n&&(n=await W({extent:this.footprintExtent,lod:e.lod,url:e.url,rasterFunction:e.rasterFunction}));const i=await Z((a[0].attributes.location.z??0)-a[0].attributes.cameraHeight,{elevationSample:n,elevationSource:e,extent:this.footprintExtent}),[r,...s]=await N([t,...a.map((e=>e.attributes.geometry.clone()))],i);a[0].elevationSample=n??i.elevationSample,t.elevation=r.z,a.forEach(((e,t)=>{e.attributes.elevation=s[t].z}))}a[0].elevationSample&&a.forEach((e=>{e.elevationSample=a[0].elevationSample})),this._suitabilities=z({features:a,selectedPoint:t,camera:Ie(this.view)?this.view.camera:null,currentImage:this.currentBestFeature}),this.updateSuitabilities(this._suitabilities)}async _processHitTestResults(e,t,i){const{screenPoint:r,results:[a]}=t,s="graphic"===a?.type&&this.shouldShowSelectedImage,o=a?.mapPoint??this.view?.toMap(r);if(!o)return;const{layerFloorFilterClause:n}=this,l=e.spatialReference.equals(o.spatialReference)?o:await M(o,e.spatialReference),c=I("1=1",I(e.definitionExpression,n)),h=l.spatialReference.isGeographic?1:S(l.spatialReference),p={layerInstanceOrURL:e,point:l,queryParams:{where:c,maximumDistance:e.maximumDistance?e.maximumDistance/h:void 0,objectIds:s?[a.graphic.getAttribute(e.objectIdField)]:void 0}};await this.searchBestImage(p,i)}_toggleVisiblity(e,t){e.forEach((e=>{e.visible=t}))}_updateFeatures(e){if(!e.length)return this.currentBestFeature=null,void this.additionalFeatures.removeAll();this.features.removeAll(),this.features.addMany(e),e.length>1?this.additionalFeatures.addMany(e.slice(1)):this.additionalFeatures.removeAll(),this.currentBestFeature=e[0]}async _updatePointsAndPolygons(e){const{pointSources:i,currentBestFeature:r,currentCoverageVisible:a,isAdditionalPointSourcesVisible:s}=this;if(r&&(this.additionalFootprints.removeAll(),this.additionalCameraLocations.removeAll(),this.bestFeatureCurrentFootprint&&(this.bestFeatureCurrentFootprint.destroy(),this.bestFeatureCurrentFootprint=null,this.bestFeatureFootprint=null),!this.invalidCameraHeading)){await(this._adapter?.createFootprints(e)),f(e);for(const e of i)e.imageID===r.attributes.objectId?this.currentBestFeatureLocation=new t({attributes:{imageID:e.imageID},geometry:e,symbol:we,visible:a}):this.additionalCameraLocations.push(new t({attributes:{imageID:e.imageID},geometry:e,symbol:ye,visible:s}))}}_updateCurrentBestFeature(e){if(!e)return;this.currentBestFeature=this.features?.at(e.featureIndex);const t=this.currentBestFeature?.attributes.cameraPitch&&this.currentBestFeature?.attributes.cameraPitch<5;let i;if(t)i=-90;else{const t=e.x-pe[3],r=e.y-pe[3],a=r/Math.sqrt(t**2+r**2);let s=180*Math.acos(a)/Math.PI;(t<0&&r<0||t<0&&r>0)&&(s*=-1),i=s}i===this.bestFeatureAngle?this.previousFeatureAngle=i:this.bestFeatureAngle=i,this.navigatorCurrentBestFeature=t?null:{x:e.x,y:e.y,direction:e.sector.includes("_")?e.sector.split("_")[1]:e.sector}}clearGraphics(){this._imageViewer.clearGraphics(),this._panoramicViewer.clearGraphics()}clearReferencePointOnImage(){this._referencePointOnImage&&(this._imageViewer.removeGraphic(this._referencePointOnImage),this._panoramicViewer.removeGraphic(this._referencePointOnImage),this._referencePointOnImage=m(this._referencePointOnImage))}plotReferencePoint(e){"mapPoint"in e?this.plotReferencePointOnGround(e.mapPoint):this.plotReferencePointOnGround(e)}setMessage(e,t,i,r){this.displayMessage={key:e,type:t,data:i,map:r}}async transformAndPlotSelectedLocation(e){const{currentBestFeature:t,invalidCameraHeading:i,selectedPoint:r,state:a}=this;if(this._crossSymbol&&(this._panoramicViewer.removeGraphic(this._crossSymbol),this._imageViewer.removeGraphic(this._crossSymbol),this._crossSymbol=m(this._crossSymbol)),!r||!t||"image-loaded"!==a||i)return;let s;try{s=await this.worldToImage(r,e),f(e),await this.plotSelectedPointOnImage(s,e)}catch(o){y(o)||p.getLogger(this).error("failed to transform map point to pixel, cross symbol will not be plotted on image",{error:o,selectedPoint:r,feature:t})}}async worldToImage(e,t){const{footprintExtent:i}=this,{imageSize:r}=this.activeViewer;if("none"===this.mode||!this.currentBestFeature||!r||!i)return;const{attributes:{location:a,elevationSource:s,cameraHeading:o,elevation:n,cameraHeight:l},elevationSample:c}=this.currentBestFeature;let h=a.clone();const p=await Z(n??(a.z??0)-l,{elevationSample:c,elevationSource:s});this.currentBestFeature.elevationSample=p.elevationSample;const u=Array.isArray(e)?e:[e];let d,m=await Promise.all(u.map((e=>new Promise((t=>{if(!e.hasZ)return t(N(e,p));t(e)})))));if(a.spatialReference.isGeographic&&(h=await M(h,Me.WebMercator,t)),m=await Promise.all(m.map((async e=>h.spatialReference.equals(e.spatialReference)?e:await M(e,h.spatialReference,t)))),f(t),"panoramic"===this.mode)d=ie(m,{imageHeight:r[1],imageWidth:r[0],cameraHeading:o,cameraLocation:h});else{const e=Y(this.currentBestFeature.attributes,r[0],r[1]);d=re(m,{...e,cameraLocation:h})}return Array.isArray(e)?d:d[0]}updateCurrentCoveragePolygon(e){const{additionalFootprints:i,additionalCameraLocations:r,currentBestFeature:a,currentBestFeatureLocation:s,currentCoverageVisible:o,selectedPoint:n,view:l,_adapter:c}=this,{attributes:{objectId:h},elevationSample:p}=a;if(this._initialCurrentCoverageUpdate){if(this._overlays?.removeAll(),this._initialCurrentCoverageUpdate=!1,this.bestFeatureCurrentFootprint=m(this.bestFeatureCurrentFootprint),e&&!this.invalidCameraHeading&&(e.visible=o,this.bestFeatureCurrentFootprint=e),l){const e=[...i,...r,this.bestFeatureCurrentFootprint,s].filter(Se);l.supportsGround&&p&&c?.updateGroundElevation&&c.updateGroundElevation(e,p),n&&e.push(new t({geometry:n.clone(),symbol:ue.clone(),attributes:{imageID:h}})),this._overlays.graphics.addMany(e)}}else if(l){if(this.invalidCameraHeading)return;this.bestFeatureCurrentFootprint&&(this._overlays?.remove(this.bestFeatureCurrentFootprint),this.bestFeatureCurrentFootprint=m(this.bestFeatureCurrentFootprint));const t=this.bestFeatureCurrentFootprint&&this._overlays?this._overlays.graphics.indexOf(this.bestFeatureCurrentFootprint):-1;e&&(this.bestFeatureCurrentFootprint=e,l?.supportsGround&&p&&c?.updateGroundElevation&&c.updateGroundElevation([e],p),e.visible=this.currentCoverageVisible,this._overlays?.graphics.add(this.bestFeatureCurrentFootprint,t>=0?t:this._overlays.graphics.length-1))}}};e([C()],He.prototype,"activeLayer",null),e([C({readOnly:!0})],He.prototype,"activeViewer",null),e([C()],He.prototype,"additionalFeatures",void 0),e([C({type:s.ofType(t)})],He.prototype,"additionalCameraLocations",void 0),e([C({type:s.ofType(t)})],He.prototype,"additionalFootprints",void 0),e([C()],He.prototype,"areaMeasurementResult",void 0),e([C()],He.prototype,"bestFeatureAngle",void 0),e([C()],He.prototype,"bestFeatureCurrentFootprint",void 0),e([C({type:t})],He.prototype,"bestFeatureFootprint",void 0),e([C({type:Number})],He.prototype,"brightness",null),e([C({type:Number})],He.prototype,"contrast",null),e([C()],He.prototype,"conversionProps",void 0),e([C()],He.prototype,"coverageFrustums",void 0),e([C()],He.prototype,"coveragePolygons",void 0),e([C()],He.prototype,"currentBestFeature",void 0),e([C()],He.prototype,"currentBestFeatureLocation",void 0),e([C()],He.prototype,"currentCoverageVisible",void 0),e([C({json:{write:!1}})],He.prototype,"determineWorkflowForFeature",void 0),e([C()],He.prototype,"disabled",void 0),e([C()],He.prototype,"displayMessage",void 0),e([C()],He.prototype,"displayNewMeasurementButton",void 0),e([C()],He.prototype,"displayNewAreaMeasurementButton",void 0),e([C()],He.prototype,"distanceMeasurementResult",void 0),e([C()],He.prototype,"digitizationLayer",void 0),e([C({readOnly:!0})],He.prototype,"featureCount",null),e([C()],He.prototype,"features",void 0),e([C({readOnly:!0})],He.prototype,"imageGalleryEnabled",null),e([C({readOnly:!0})],He.prototype,"imageLoaded",null),e([C({readOnly:!0})],He.prototype,"invalidCameraHeading",null),e([C()],He.prototype,"imagePointsInView",null),e([C()],He.prototype,"isAdditionalCoverageVisible",void 0),e([C()],He.prototype,"isAdditionalPointSourcesVisible",void 0),e([C()],He.prototype,"layer",void 0),e([C()],He.prototype,"layerView",null),e([C({readOnly:!0})],He.prototype,"layerFloorFilterClause",null),e([C({type:Number})],He.prototype,"localPort",void 0),e([C()],He.prototype,"mapImageConversionToolState",void 0),e([C({readOnly:!0,value:"none"})],He.prototype,"mode",null),e([C()],He.prototype,"navigatorCurrentBestFeature",void 0),e([C({type:s.ofType(t)})],He.prototype,"overlayedCameraLocations",void 0),e([C()],He.prototype,"overlayedMapFeatures",void 0),e([C()],He.prototype,"pointSources",void 0),e([C({readOnly:!0})],He.prototype,"popupEnabled",null),e([C()],He.prototype,"previousFeatureAngle",void 0),e([C()],He.prototype,"referencePoint",null),e([C({readOnly:!0})],He.prototype,"sectorData",null),e([C()],He.prototype,"selectedPoint",void 0),e([C({type:Number})],He.prototype,"sharpness",null),e([C()],He.prototype,"shouldShowSelectedImage",void 0),e([C()],He.prototype,"sketch",void 0),e([C()],He.prototype,"sketchAdapter",void 0),e([C({readOnly:!0})],He.prototype,"sketchGraphicsLayer",null),e([C({readOnly:!0})],He.prototype,"state",null),e([C({readOnly:!0})],He.prototype,"thumbnails",null),e([C()],He.prototype,"updateFootprint",void 0),e([C()],He.prototype,"updateFootprintPanorama",void 0),e([C({value:null})],He.prototype,"view",null),e([C()],He.prototype,"_adapter",void 0),e([C()],He.prototype,"_highlightedFeatureHandle",void 0),e([C()],He.prototype,"_imageViewer",void 0),e([C()],He.prototype,"_initialCurrentCoverageUpdate",void 0),e([C()],He.prototype,"_overlays",void 0),e([C({readOnly:!0})],He.prototype,"_overlaysView",null),e([C()],He.prototype,"_panoramicViewer",void 0),e([C()],He.prototype,"_referencePointOnGround",void 0),e([C()],He.prototype,"_referencePointOnImage",void 0),e([C()],He.prototype,"_sectorData",void 0),e([C({readOnly:!0})],He.prototype,"_updatingHandles",void 0),e([C()],He.prototype,"footprintExtent",void 0),He=e([k("esri.widgets.OrientedImageryViewer.OrientedImageryViewerViewModel")],He);const Te=He;export{Te as default};
5
+ import{_ as e}from"../../chunks/tslib.es6.js";import"../../geometry.js";import t from"../../Graphic.js";import"../../symbols.js";import{isSome as i,equals as r}from"../../core/arrayUtils.js";import{createTask as a}from"../../core/asyncUtils.js";import s from"../../core/Collection.js";import{deprecatedProperty as o}from"../../core/deprecate.js";import n from"../../core/Error.js";import l from"../../core/Evented.js";import c from"../../core/JSONSupport.js";import{equalsShallow as h}from"../../core/lang.js";import p from"../../core/Logger.js";import{clamp as u}from"../../core/mathUtils.js";import{abortMaybe as d,destroyMaybe as m}from"../../core/maybe.js";import g from"../../core/Promise.js";import{isAbortError as y,throwIfAborted as f,waitTick as v}from"../../core/promiseUtils.js";import w from"../../core/ReactiveMap.js";import{on as b,watch as F,syncAndInitial as _,initial as P}from"../../core/reactiveUtils.js";import{sqlAnd as I}from"../../core/sql.js";import{getMetersPerUnitForSR as S}from"../../core/unitUtils.js";import{property as C}from"../../core/accessorSupport/decorators/property.js";import"../../core/has.js";import{subclass as k}from"../../core/accessorSupport/decorators/subclass.js";import{UpdatingHandles as V}from"../../core/support/UpdatingHandles.js";import{union as A}from"../../geometry/geometryEngineAsync.js";import{projectWithZConversion as M}from"../../geometry/projection.js";import{isClockwise as R}from"../../geometry/support/coordsUtils.js";import{geographicToWebMercator as O}from"../../geometry/support/webMercatorUtils.js";import j from"../../layers/GraphicsLayer.js";import{searchImages as L}from"../../layers/orientedImagery/queries.js";import{calculateSuitabilities as z}from"../../layers/orientedImagery/core/bestImageUtils.js";import{createCoveragePolygon as B,computePolygonForInspection as G,resizePolygon as x,checkIfPolygonContainsSelectedPoint as E}from"../../layers/orientedImagery/core/coverageUtils.js";import{isConstantElevation as H,isElevationSource as T}from"../../layers/orientedImagery/core/ElevationSourceDefinitions.js";import{imageToWorld as D,imageToWorldPanoramic as U}from"../../layers/orientedImagery/transformations/imageToWorld.js";import N from"../../layers/orientedImagery/transformations/updateElevation.js";import{getElevationSampler as W}from"../../layers/orientedImagery/transformations/updateElevationUtils.js";import{getInitialAngle as q,convertPixelToHeadingPitch as $,getImageToWorldProperties as J,getUpdateElevationProps as Z,isElevationSampler as K,pointToArray as Q,getImageToWorldPanoramicProperties as X,getWorldToImageProperties as Y,convertHeadingPitchToSphereVertex as ee,or as te}from"../../layers/orientedImagery/transformations/utils.js";import{worldToImagePanoramic as ie,worldToImage as re}from"../../layers/orientedImagery/transformations/worldToImage.js";import{getFloorFilterClause as ae}from"../../layers/support/floorFilterUtils.js";import se from"../../rest/support/AttachmentQuery.js";import{scale as oe}from"../../views/draw/support/drawUtils.js";import{ViewEventPriorities as ne}from"../../views/input/InputManager.js";import le from"../PanoramicViewer.js";import{invalidCameraHeading as ce,sectorsInOrder as he,sectorsRadii as pe}from"./constants.js";import{crossSymbol as ue,crossSymbol3D as de,measurementPolygonSymbol as me,measurementPolylineSymbol as ge,sourcePointSymbol as ye,diamondSymbol as fe,diamondSymbol3D as ve,activeSourcePointSymbol as we}from"./symbols.js";import{isNoAttachmentError as be,getContentType as Fe,isTifOrMrf as _e,filterOILLayerView as Pe,isSceneView as Ie,isGraphic as Se,calculateSegment as Ce,calculateDirection as ke}from"./utils.js";import Ve from"./components/ImageViewer.js";import Ae from"../../geometry/Point.js";import Me from"../../geometry/SpatialReference.js";import Re from"../../symbols/SimpleLineSymbol.js";import Oe from"../../geometry/Multipoint.js";import je from"../../geometry/Polyline.js";import Le from"../../geometry/Polygon.js";const ze={click:"view-click",imageClick:"image-click",interactionHandles:"interaction-handles",footprintHandles:"footprint-handles",sketchHandles:"sketch-handles"},Be=new Set(["JPG","JPEG"]),Ge=/\.(\w+)$/,xe=e=>"FA"===e,Ee=()=>new n("orientedimageryviewer:sketch-not-initialized","Sketch property is not initialized, call loadSketch first");let He=class extends(l.EventedMixin(g)){constructor(e){super(e),this.additionalFeatures=new s,this.additionalCameraLocations=new s,this.additionalFootprints=new s,this.areaMeasurementResult=0,this.bestFeatureAngle=0,this.bestFeatureCurrentFootprint=null,this.bestFeatureFootprint=null,this.conversionProps=null,this.coverageFrustums=new s,this.coveragePolygons=new s,this.currentBestFeature=null,this.currentBestFeatureLocation=null,this.currentCoverageVisible=!0,this.determineWorkflowForFeature=async(e,t,i)=>{const{currentBestFeature:r,selectedPoint:a,view:s}=this;if(s?.closePopup(),r&&a){this._initialCurrentCoverageUpdate=!0;try{await this._updatePointsAndPolygons(i),await this._loadImage(i)}catch(o){y(o)||(this.loadImageError(o),p.getLogger(this).error("#loadIImage()","error occured while loading image",o))}}},this.disabled=!1,this.displayMessage={key:"onLoadMessage",type:"info"},this.displayNewMeasurementButton=!0,this.displayNewAreaMeasurementButton=!0,this.distanceMeasurementResult=0,this.digitizationLayer=null,this.features=new s,this.isAdditionalCoverageVisible=!1,this.isAdditionalPointSourcesVisible=!1,this.layer=null,this.localPort=null,this.mapImageConversionToolState=!1,this.navigatorCurrentBestFeature=null,this.overlayedCameraLocations=new s,this.overlayedMapFeatures=new w,this.pointSources=new s,this.previousFeatureAngle=0,this.selectedPoint=null,this.shouldShowSelectedImage=!1,this.sketch=null,this.sketchAdapter=null,this.updateFootprint=async(e,t)=>{"image-loaded"===this.state&&await(this._adapter?.updateFootprint(e,t))},this.updateFootprintPanorama=async(e,t)=>{await(this._adapter?.updateFootprintPanorama(e,t))},this._adapter=null,this._highlightedFeatureHandle=null,this._imageViewer=new Ve,this._initialCurrentCoverageUpdate=!0,this._overlays=new j({listMode:"hide",internal:!0,elevationInfo:{mode:"absolute-height"}}),this._panoramicViewer=new le,this._referencePointOnGround=null,this._referencePointOnImage=null,this._sectorData=null,this._updatingHandles=new V,this._clickTask=null,this._crossSymbol=null,this.footprintExtent=null,this._featureChangedTask=null,this._openPopupTask=null,this._suitabilities=null,this._transformController=new AbortController,this._updateFootprintTask=null,this.hideImageGeometry=e=>{},this.highlight=e=>{if(!this._overlaysView)return;this.removeHighlight();const t=this.additionalFootprints.find((({attributes:{imageID:t}})=>t===Number(e)));this._highlightedFeatureHandle=t?this._overlaysView?.highlight(t):null},this.loadDigitizationAdapter=async e=>{const{sketchAdapter:t}=this;if(await this.loadSketch(e),"digitization"===t?.type)return t;const i=import("./adapters/sketch/DigitizationAdapter.js");this._updatingHandles.addPromise(i);const{default:r}=await i;return f(e),this.sketchAdapter=new r({viewModel:this}),this.sketchAdapter},this.loadImageFromSource=async(e,t)=>this._updatingHandles.addPromise(this._loadImageFromSourceInternal(e,t)),this.loadImageViewer=e=>{this._imageViewer.container=e},this.loadPanoramicViewer=e=>{this._panoramicViewer.container=e},this.removeHighlight=()=>this._highlightedFeatureHandle?.remove(),this.revealImageGeometry=e=>{},this.startDigitization=e=>{},this.stopDigitization=e=>{},this.toggleImageAttributes=()=>{d(this._openPopupTask),this._openPopupTask=a((async e=>{const{currentBestFeature:i,popupEnabled:r,layer:a,view:s}=this;if(s?.closePopup(),!(s&&i&&r&&a))return;const{attributes:o,geometry:n}=i,l=new t({geometry:n,attributes:o.toJSON(),layer:a});f(e),await s.openPopup({features:[l],location:o.location.clone()})}))},this._createViewClickHandle=()=>{if(this.removeHandles(ze.click),"disabled"===this.state||null==this.view)return;const e=this.mapImageConversionToolState&&"image-loaded"===this.state?this._mapImageConversionToolViewClickHandler:this._viewClickHandler;this.addHandles(this.view.on("click",e,ne.WIDGET),ze.click)},this._createImageClickHandle=()=>{this.removeHandles(ze.imageClick);const{mapImageConversionToolState:e,mode:t,activeViewer:i,currentBestFeature:r,footprintExtent:s}=this,o=i?.imageSize;if(!(e&&"none"!==t&&o&&s&&r))return;i.clickAction="pixel-location";let n=null;const l=b((()=>i),"pixel-location",(e=>{this.plotReferencePointOnImage(e),n?.abort(),n=a((async i=>{if(!e)return;const a=await this.getMapPoint(e,{feature:r,imageSize:o,mode:t}).then((e=>{const t=this.view?.spatialReference;return te(!t,e.spatialReference.equals(t))?e:M(e,t)}));f(i),this.plotReferencePointOnGround(a)}))}));this.addHandles(l,ze.imageClick)},this._getImageSourceFromAttachment=async(e,t,i)=>{const r=new se({objectIds:[t]}),a=await e.queryAttachments(r,i),s=a[`${t}`]?.[0],o=s?.url;if(!o)throw new n("NoAttachmentError","no attachments found",{[e.objectIdField]:t,layer:e});return{datasetFormat:s.contentType.split("/")[1].toUpperCase(),url:o}},this._loadImage=async e=>{const{currentBestFeature:t,layer:i,mode:r}=this;if(this.clearGraphics(),!i||!t||"none"===r)return;const{attributes:a}=t,{imagePath:s,imageRotation:o,cameraHeading:n,cameraRoll:l,cameraPitch:c,objectId:h,cameraOrientation:u,location:d}=a,m=(l??0)+(o??0),g=d.spatialReference.isWGS84&&4!==u?.type?O(d):new Ae(d);let v=s;if(xe(s))try{v=await this._getImageSourceFromAttachment(i,h,e)}catch(w){if(y(w))return;return be(w)?(p.getLogger(this).error(w),void this.setMessage("noAttachment","error",`${i.objectIdField}: ${h}`)):(p.getLogger(this).error(w,{[i.objectIdField]:h,layer:i}),void this.setMessage("imageLoadError","error",`query-attachments-failed:${i.objectIdField} ${h}`))}try{await this.loadImageFromSource(v,{imageRotation:m,options:e,pitch:c,yaw:n,mode:r,cameraLocation:g}),f(e),await this.transformAndPlotSelectedLocation(e)}catch(w){y(w)||this.loadImageError(w)}},this._loadImageFromSourceInternal=async(e,t)=>{const{mode:i,imageRotation:r,options:a}=t,s="string"==typeof e,o=s?e:e.url,{pathname:n,searchParams:l}=new URL(o);let c=s?n.match(Ge)?.[1]:e.datasetFormat;if(!c){const e=await Fe(o,{...t.options});c=e?.split("/")[1]??"UNKNOWN FORMAT"}switch(i){case"default":this._imageViewer.imageSource={datasetFormat:c.toUpperCase(),url:o.split("?")[0]},this._imageViewer.customParameters=Object.fromEntries(l),this._imageViewer.imageRotation=r??0,await this._imageViewer.loadImage(a);break;case"panoramic":if(Be.has(c.toUpperCase())){const{selectedPoint:e}=this,{pitch:i,yaw:r,cameraLocation:s,viewAngle:n}=t;this._panoramicViewer.imageSource=o;let l=r??0;"number"==typeof n?l=n-l:s&&e&&(l=await q(s,e)-l),this._panoramicViewer.pitch=i??0,this._panoramicViewer.yaw=l,await this._panoramicViewer.loadImage(a)}else this.setMessage("unsupportedPanoramicImageryError","error",void 0,{datasetFormat:c});break}},this._loadViewAdapter=async e=>{const{view:t}=this;if(t)switch(t.type){case"2d":{const{default:t}=await import("./adapters/view/MapViewAdapter.js");f(e),this._adapter=new t(this);break}case"3d":{const{default:t}=await import("./adapters/view/SceneViewAdapter.js");f(e),this._adapter=new t(this);break}}else this._adapter=null},this._mapImageConversionToolViewClickHandler=e=>{e.stopPropagation(),e.preventDefault(),e.mapPoint&&this.plotMapPoint(e.mapPoint)},this._viewClickHandler=e=>{this._clickTask?.abort(),this._clickTask=a((async t=>{const{pointerType:i,button:r,mapPoint:a}=e;if(("mouse"!==i||0===r)&&a)return e.stopPropagation(),e.preventDefault(),this._updatingHandles.addPromise(this.loadBestImage(a,{signal:t}))}))},this.plotSelectedPointOnImage=async(e,i)=>{if(await v(i),!e)return;const r=new Ae({...c.isSerializable(e)?e.toJSON():e});if("default"===this.mode)r.x-=.5,r.y=.5-r.y,r.spatialReference=this._imageViewer.imageRenderer.spatialReference.clone(),this._crossSymbol=new t({geometry:r,symbol:ue}),this._imageViewer.addGraphic(this._crossSymbol,0);else if("panoramic"===this.mode){const{imageSize:i}=this._panoramicViewer;if(!i)return;const[r,a]=i,{heading:s,pitch:o}=$(e,r,a),n=ee(s,o);this._crossSymbol=new t({geometry:new Ae(n,Me.WebMercator),symbol:de}),this._panoramicViewer.addGraphic(this._crossSymbol,0)}},this.handleSectorClick=this.handleSectorClick.bind(this),this.searchBestImage=this.searchBestImage.bind(this),this.transformAndPlotReferencePointOnImage=this.transformAndPlotReferencePointOnImage.bind(this),this.updateSuitabilities=this.updateSuitabilities.bind(this),this.selectBestFeature=this.selectBestFeature.bind(this)}initialize(){this.addHandles([F((()=>this.view),(()=>{this.load()}),_),F((()=>this.view?.map),((e,t)=>{t?.layers.remove(this._overlays),e?.layers.add(this._overlays)}),P),F((()=>this.view?.map?.allLayers?.length),(e=>{e&&this.view?.map?.layers.reorder(this._overlays,e-1)}),P),F((()=>[this.state,this.mapImageConversionToolState,this.view]),(()=>{this._createViewClickHandle(),this._createImageClickHandle()}),_),F((()=>this.bestFeatureAngle),((e,t)=>{this.previousFeatureAngle=t??0}),_),F((()=>this.currentBestFeature),(async(e,t)=>{d(this._featureChangedTask),this._featureChangedTask=a((async i=>this.determineWorkflowForFeature.apply(this,[e,t,{signal:i}]))),await this._featureChangedTask.promise}),{sync:!0}),F((()=>this.mode),(e=>{switch(this.removeHandles(ze.interactionHandles),e){case"default":this.addHandles(F((()=>this._imageViewer.imagePointsInView),(e=>{e&&(d(this._updateFootprintTask),this._updateFootprintTask=a((async t=>{await this.updateFootprint(e,{signal:t})})))}),{..._,equals:(e,t)=>r(e,t,h)}),ze.interactionHandles);break;case"panoramic":this.addHandles(F((()=>{const{currentBestFeature:e,state:t}=this,{imageSize:i,vfov:r,hfov:a,pitch:s,yaw:o}=this._panoramicViewer;return e&&i&&"image-loading"!==t?[r,a,o,s]:null}),(e=>{if(!e||"image-loading"===this.state)return;const[t,i,r,s]=e;d(this._updateFootprintTask),this._updateFootprintTask=a((async e=>{await this.updateFootprintPanorama({verticalFieldOfView:t,horizontalFieldOfView:i,yaw:r,pitch:s},{signal:e})}))}),{..._,equals:(e,t)=>r(e,t,h)}),ze.interactionHandles)}}),_),F((()=>[this.brightness,this.contrast,this.sharpness]),(()=>{const{_imageViewer:e,brightness:t,contrast:i,mode:r,sharpness:a}=this;"default"===r&&(e.brightness=t,e.contrast=i,e.sharpness=a)}),_),F((()=>this.activeViewer?.imageRenderer),(()=>{this.sketch&&(this.sketch.view=this.activeViewer?.imageRenderer)}))]),this.when().finally((()=>{this.notifyChange("state")}))}destroy(){this._updateFootprintTask=d(this._updateFootprintTask),this._clickTask=d(this._clickTask),this.coverageFrustums.destroy(),this.coveragePolygons.destroy(),this.pointSources.destroy(),this.additionalFootprints.destroy(),this.additionalCameraLocations.destroy(),this.bestFeatureFootprint=m(this.bestFeatureFootprint),this.bestFeatureCurrentFootprint=m(this.bestFeatureCurrentFootprint),this._crossSymbol=m(this._crossSymbol),this._referencePointOnGround=m(this._referencePointOnGround),this._referencePointOnImage=m(this._referencePointOnImage),this._overlays&&this.view?.map?.remove(this._overlays),this._overlays.destroy(),this._imageViewer.destroy(),this._panoramicViewer.destroy()}get activeLayer(){return o(p.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer}set activeLayer(e){o(p.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer=e}get activeViewer(){const{_imageViewer:e,_panoramicViewer:t,mode:i}=this;switch(i){case"default":return e;case"panoramic":return t;default:return null}}get brightness(){return this._get("brightness")??0}set brightness(e){this._set("brightness",u(e,-10,10))}get contrast(){return this._get("contrast")??0}set contrast(e){this._set("contrast",u(e,-10,10))}get featureCount(){return this.features?.length??0}get imageGalleryEnabled(){return _e(this.currentBestFeature?.attributes.imagePath.trim())}get imageLoaded(){return o(p.getLogger(this),"imageLoaded",{replacement:'Use OrientedImageryViewer.state === "image-loaded"',version:"4.29",warnOnce:!0}),"image-loaded"===this.state}get invalidCameraHeading(){return this.currentBestFeature?.attributes?.cameraHeading===ce}get imagePointsInView(){const{mode:e,_imageViewer:t}=this;return"default"===e?t.imagePointsInView:null}get layerView(){const{layer:e,view:t}=this;if(e&&t)return t.allLayerViews.find(Pe(e))}get layerFloorFilterClause(){const{layerView:e}=this;return e?ae(e):null}get mode(){const e=this.currentBestFeature?.attributes;if(!e)return"none";const{horizontalFieldOfView:t,isSpherical:i}=e;return 360===t||i?"panoramic":"default"}get popupEnabled(){return!0===this.layer?.popupEnabled}get referencePoint(){return this._referencePointOnGround?.geometry}get sectorData(){const{_sectorData:e}=this;return e?he.map((t=>e[t])):null}get sharpness(){return this._get("sharpness")??0}set sharpness(e){this._set("sharpness",u(e,0,1))}get sketchGraphicsLayer(){return this.sketch?.layer}get state(){const{mode:e,disabled:t}=this;if(t)return"disabled";if(!this.isFulfilled())return"loading";if(this.isRejected())return"error";if(this._updatingHandles.updating)return"image-loading";if("error"===this.displayMessage?.type)return"image-load-error";switch(e){case"default":return this._imageViewer.state;case"panoramic":return this._panoramicViewer.state}return"ready"}get thumbnails(){const{features:e}=this;return e?new s(e.map((({attributes:{imagePath:e,objectId:t,cameraRoll:i,imageRotation:r}})=>{const a=e.trim();return _e(a)?{url:a,objectId:t,rotation:(i??0)+(r??0)}:null})).filter(i)):null}set view(e){this._set("view",e)}get _overlaysView(){return this.view?.layerViews.find((({layer:e})=>e===this._overlays))}digitizeCancel(){return this.sketch?.cancel()}digitizeCanRedo(){return this.sketch?.canRedo()??!1}digitizeCanUndo(){return this.sketch?.canUndo()??!1}digitizeComplete(){return this.sketch?.complete()}digitizeCreate(e,t){const{sketch:i}=this;return i?i.create(e,t):Promise.reject(Ee())}async digitizeDelete(){if(!this.sketch)throw Ee();return this.sketch.delete()}digitizeDuplicate(){if(!this.sketch)throw Ee();return this.sketch.duplicate()}digitizePlace(e,t){if(!this.sketch)throw Ee();return this.sketch.place(e,t)}digitizeRedo(){if(!this.sketch)throw Ee();return this.sketch.redo()}digitizeUndo(){if(!this.sketch)throw Ee();return this.sketch.undo()}digitizeUpdate(e,t){if(!this.sketch)throw Ee();return this.sketch.update(e,t)}filterByFootprints(e,t){const i=[],r=[],a=[];return e.forEach((e=>{const{layer:{coveragePercent:s},attributes:o}=e;let n;const l=S(e.geometry.spatialReference);o.cameraHeight/=l,o.farDistance/=l,o.nearDistance/=l,H(o.elevationSource)&&(o.elevationSource.constantElevation/=l);const{polygon:c,frustum:h}=B(o);if(n=c.clone(),o.isInspection&&(n=G(o)),s&&(n=x(n,s)),E(n,t)){a.push(e);const{geometry:t,objectId:s,cameraHeight:n,cameraHeading:l}=o,p=t.clone();p.z=n,p.imageID=s,this.pointSources.push(p),l!==ce&&(i.push(c),h&&r.push(h))}})),{features:a,polygons:i,frustums:r}}getMeasurementProperties(){const{currentBestFeature:e,activeViewer:t}=this;if(!e||!t?.imageSize)return;const{elevationSample:i,attributes:r}=e,{elevationSource:a,cameraHeight:s}=r,o=J(r,t.imageSize[0],t.imageSize[1]);let n=o.cameraLocation;return(n.spatialReference.isGeographic?M(n,Me.WebMercator):Promise.resolve(n)).then((e=>(n=e,Z((n.z??0)-s,{elevationSample:i,elevationSource:a,extent:this.footprintExtent})))).then((t=>("elevationSample"in t&&K(t.elevationSample)&&(e.elevationSample=t.elevationSample),{...o,cameraLocation:n,updateElevationProps:t})))}async deleteDigitizedFeatures(e){const{digitizationLayer:t}=this;if(!t)throw new n("Digitization layer is not available");return t.queryFeatures({objectIds:e}).then((({features:e})=>t.applyEdits({deleteFeatures:e})))}handleSectorClick(e){if(isNaN(e))return;const t=this._sectorData?.[he[e]];t?.length&&this._updateCurrentBestFeature(t.at(0))}handleFeatureClick(e){const{sector:t,featureIndexInSector:i}=e;if(isNaN(i))return;const r=this._sectorData?.[t];r?.length&&this._updateCurrentBestFeature(r.at(i))}async load(e){return this.addResolvingPromise(this._loadViewAdapter(e).catch((e=>{if(!y(e))throw e}))),this}async loadBestImage(e,t){return this.view?.closePopup(),this.displayMessage=null,this.selectedPoint=e.spatialReference.isGeographic?O(e):e.clone(),this.features.removeAll(),this.currentBestFeature=null,this.additionalFeatures.removeAll(),this.additionalFootprints.removeAll(),this.additionalCameraLocations.removeAll(),this.bestFeatureCurrentFootprint=m(this.bestFeatureCurrentFootprint),this._overlays?.removeAll(),this._fetchFeaturesWithController(e,t)}loadImageError(e){p.getLogger(this).error("oriented-imagery-viewer:load-image",e),this.setMessage("imageLoadError","error",e.message)}async loadSketch(e){if(!this.sketch){const t=import("../Sketch/SketchViewModel.js");this._updatingHandles.addPromise(t);const{default:i}=await t;f(e),this.sketch=new i({layer:new j,view:this.activeViewer?.imageRenderer,updateOnGraphicClick:!1,defaultUpdateOptions:{reshapeOptions:{edgeOperation:"none",shapeOperation:"none",vertexOperation:void 0},enableMoveAllGraphics:!1,enableRotation:!1,enableScaling:!1,multipleSelectionEnabled:!1,toggleToolOnClick:!1,tool:"transform"}})}return this.sketch}async loadSketchAdapter(e){if(!this.sketchAdapter){const t=import("./adapters/sketch/MeasurementAdapter.js");this._updatingHandles.addPromise(t);const{default:i}=await t;if(f(e),this.sketchAdapter=new i({viewModel:this}),!this.sketchAdapter.viewModel.isResolved())return}if(this.sketch&&this.sketchAdapter){const e=this.activeViewer?.imageRenderer.effectiveTheme.accentColor;e&&this.sketch&&(this.sketch.polygonSymbol=me(e),this.sketch.polylineSymbol=ge(e))}return this.sketchAdapter}async overlayCameraLocations(e){const{activeViewer:i,currentBestFeature:r,overlayedCameraLocations:a,layer:s,mode:o,state:n}=this,l=i?.imageSize;if(!l||!r||!s||"none"===o||n.includes("loading"))return;const{polygon:c}=B(r.attributes);if(i.removeManyGraphics(a.toArray()),a.removeAll(),e){const{features:e}=await s.queryFeatures({where:`${s.objectIdField} <> ${r.attributes.objectId}`,geometry:c,returnGeometry:!0,outFields:[s.objectIdField]}),n=await Promise.all(e.map((async e=>{const{attributes:i,geometry:a}=e,s=await this.getPixels(a,{feature:r,imageSize:l,mode:o}),n=ye.clone();return n.outline=new Re({color:[0,0,0],width:1}),new t({attributes:i,symbol:n,geometry:s})})));a.addMany(n),i.addManyGraphics(a.toArray())}}overlayGraphicsOnImage(e,t){this.removeOverlayedGraphicsOnImage(e),this.overlayedMapFeatures.set(e,t),this.activeViewer?.addManyGraphics(t.toArray())}async overlayMapFeatures(e,r=!1){const{activeViewer:a,currentBestFeature:o,mode:n,state:l}=this,c=a?.imageSize;if(!c||!o||"none"===n||l.includes("loading"))return;const{polygon:h}=B(o.attributes),{features:p}=await e.queryFeatures({geometry:h,returnGeometry:!0,outFields:[e.objectIdField]}),u=new s((await Promise.all(p.map((async i=>{const{attributes:a,geometry:s}=i,l=i.symbol?.clone()??e.renderer?.getSymbol(i)?.clone();switch(s?.type){case"point":{const i=await this.getPixels(s,{feature:o,imageSize:c,mode:n});return new t({attributes:a,layer:e,symbol:l,geometry:i,visible:e.visible&&r})}case"polygon":{const{rings:i,spatialReference:h}=s,p=i.map((e=>e.map((([e,t,i])=>new Ae({x:e,y:t,z:i,spatialReference:h}))))),u=await Promise.all(p.map((async e=>this.getPixels(e,{feature:o,imageSize:c,mode:n}).then((e=>e.map(Q))))));return new t({attributes:a,layer:e,symbol:l,geometry:new Le({rings:u,spatialReference:Me.WebMercator}),visible:e.visible&&r})}case"polyline":{const{paths:i,spatialReference:h}=s,p=i.map((e=>e.map((([e,t,i])=>new Ae({x:e,y:t,z:i,spatialReference:h}))))),u=await Promise.all(p.map((async e=>this.getPixels(e,{feature:o,imageSize:c,mode:n}).then((e=>e.map(Q))))));return new t({attributes:a,layer:e,symbol:l,geometry:new je({paths:u,spatialReference:Me.WebMercator}),visible:e.visible&&r})}case"multipoint":{const{points:i,spatialReference:h}=s,p=i.map((([e,t,i])=>new Ae({x:e,y:t,z:i,spatialReference:h}))),u=await this.getPixels(p,{feature:o,imageSize:c,mode:n}).then((e=>e.map(Q)));return new t({attributes:a,layer:e,symbol:l,geometry:new Oe({points:u,spatialReference:Me.WebMercator}),visible:e.visible&&r})}}return null})))).filter(i));this.overlayGraphicsOnImage(`${e.id}`,u)}async getPixels(e,t){const{imageSize:i,mode:r}=t,a=(await this.worldToImage(Array.isArray(e)?e:[e])).map((e=>{if("default"===r)return new Ae({x:e.x-.5,y:.5-e.y,spatialReference:Me.WebMercator});const[t,a]=i,{heading:s,pitch:o}=$(e,t,a),n=ee(s,o);return new Ae(n,Me.WebMercator)}));return Array.isArray(e)?a:a[0]}async getMapPoint(e,t){const{feature:i,mode:r,imageSize:a}=t,{elevationSample:s,attributes:o}=i,{elevationSource:n,location:l,elevation:c,cameraHeight:h}=o;let p=l.clone();p.spatialReference.isGeographic&&(p=await M(p,Me.WebMercator));const u=await Z(c??(l.z??0)-h,{elevationSample:s,elevationSource:n,extent:this.footprintExtent});let d;if("elevationSample"in u&&K(u.elevationSample)&&(i.elevationSample=u.elevationSample),"default"===r){const t=J(o,a[0],a[1]);d=await D(Array.isArray(e)?e:[e],{...t,cameraLocation:p},u)}else{const t=X(o,a[0],a[1]);d=await U(Array.isArray(e)?e:[e],{...t,cameraLocation:p},u)}return Array.isArray(e)?d:d[0]}async plotMapPoint(e){return this.plotReferencePoint(e),this.transformAndPlotReferencePointOnImage({feature:this.currentBestFeature,selectedLocation:e,options:{signal:this._transformController?.signal}})}plotReferencePointOnGround(e){this._referencePointOnGround&&(this._overlays?.remove(this._referencePointOnGround),this._referencePointOnGround.destroy()),null!=e&&(this._referencePointOnGround=new t({geometry:new Ae({...e.toJSON()}),symbol:fe}),this.view?this._overlays?.add(this._referencePointOnGround):this.emit("plot-ground-point",{data:{point:this._referencePointOnGround?.geometry}}))}plotReferencePointOnImage(e){if("image-loaded"===this.state)switch(this.clearReferencePointOnImage(),this.mode){case"default":{const i=c.isSerializable(e)?e.toJSON():e;i.x-=.5,i.y=.5-i.y,this._referencePointOnImage=new t({geometry:new Ae({spatialReference:this._imageViewer.imageRenderer.spatialReference.clone(),...i}),symbol:fe}),this._imageViewer.addGraphic(this._referencePointOnImage,0);break}case"panoramic":{const{imageSize:i}=this._panoramicViewer;if(!i)return;const[r,a]=i,{heading:s,pitch:o}=$(e,r,a),n=ee(s,o);this._referencePointOnImage=new t({geometry:new Ae(n,Me.WebMercator),symbol:ve}),this._panoramicViewer.addGraphic(this._referencePointOnImage,0);break}}}removeAllOverlayMapFeatures(){this.overlayedMapFeatures.forEach((e=>{this._imageViewer.removeManyGraphics(e.toArray())})),this.overlayedMapFeatures.clear()}removeOverlayedGraphicsOnImage(e){const t=this.overlayedMapFeatures.get(e);t?.length&&(this.activeViewer?.removeManyGraphics(t.toArray()),this.overlayedMapFeatures.delete(e))}resetImage(){switch(this.setMessage("onLoadMessage","info"),this.mode){case"default":this._imageViewer.clearImage(),this._imageViewer.clearGraphics();break;case"panoramic":this._panoramicViewer.clearGraphics()}this._clickTask=d(this._clickTask)}async saveDigitizedFeatures(e){const{activeViewer:t,currentBestFeature:r,digitizationLayer:a,mode:s}=this,o=t?.imageSize;if(!o||!r||!s)throw new n("Image size, current best feature and mode are required to save digitized features");if(!a)throw new n("Digitization layer is not available");const l=await Promise.all(e.map((async e=>{const t=e.clone(),{geometry:i}=t;if(i)if(i.type===a.geometryType)switch(i.type){case"point":return t.geometry=await this.getMapPoint({x:i.x+.5,y:.5-i.y},{feature:r,imageSize:o,mode:s}),t;case"polygon":{const e=await Promise.all(i.rings.map((async e=>this.getMapPoint(e.map((([e,t])=>({x:e+.5,y:.5-t}))),{feature:r,imageSize:o,mode:s}))));return t.geometry=new Le({spatialReference:e[0][0].spatialReference,hasZ:!0,rings:e.map((e=>e.map(Q)))}),t}case"polyline":{const e=await Promise.all(i.paths.map((async e=>this.getMapPoint(e.map((([e,t])=>({x:e+.5,y:.5-t}))),{feature:r,imageSize:o,mode:s}))));return t.geometry=new je({spatialReference:e[0][0].spatialReference,hasZ:!0,paths:e.map((e=>e.map(Q)))}),t}case"mesh":case"multipoint":return void p.getLogger(this).warn("saveDigitizedFeatures:unsupported geometry type",{message:"only point, polygon, polyline are supported for digitization",geometryType:i.type,graphic:t})}else p.getLogger(this).warn("saveDigitizedFeatures:geometry type mismatch",{expected:a.geometryType,actual:i.type,graphic:t})}))),c=l.filter(i);return a.applyEdits({addFeatures:c}).then((e=>{const{addFeatureResults:t}=e;let i=0;const r=l.map((e=>{const r=t[i++];return e?r:{error:new n("Error in saving digitized features"),objectId:null,globalId:null}}));return{...e,addFeatureResults:r}}))}async searchBestImage(e,t){try{const i=await L(e,t);i&&await this._processFeatureResponse(i,e.point,{signal:t?.signal})}catch(i){y(i)||(this.setMessage("imageLoadError","error",i.message),p.getLogger(this).error("error occurred while finding best image",i))}}selectBestFeature(e){this.currentBestFeature=this.features?.find((({attributes:t})=>t.objectId===Number(e)))}setAdditionalCameraLocationsVisibility(e){this.additionalCameraLocations.forEach((t=>{t.visible=e}))}setAdditionalCoverageVisibility(e){this.additionalFootprints.forEach((t=>{t.visible=e}))}setCurrentCoverageVisibility(e){this.bestFeatureCurrentFootprint&&(this.bestFeatureCurrentFootprint.visible=e),this.currentBestFeatureLocation&&(this.currentBestFeatureLocation.visible=e)}setMapImageConversionToolState(e){this.mapImageConversionToolState=e}toggleAllOverlayMapFeatures(e){this.overlayedMapFeatures.forEach((t=>{this._toggleVisiblity(t,e)}))}toggleOverlayMapFeatures(e,t){const i=this.overlayedMapFeatures.get(e);i&&this._toggleVisiblity(i,t)}async transformAndPlotReferencePointOnImage(e){const{selectedLocation:t,options:i}=e;let r=!1,a=!1;const s=this.bestFeatureFootprint?.geometry;switch(s?.type){case"polygon":{const e=t.spatialReference.equals(s.spatialReference)?t:await M(t,s.spatialReference);r=s.contains(e);break}case"mesh":{const e=t.spatialReference.equals(s.spatialReference)?t:await M(t,s.spatialReference);a=s.extent.contains(e);break}}if(!r&&!a)return void this.clearReferencePointOnImage();const o=await this.worldToImage(t,i);if(o)return f(i),this.plotReferencePointOnImage(o),{x:o.x,y:o.y};this.clearReferencePointOnImage()}updateSuitabilities(e){e.sort(((e,t)=>e.suitability-t.suitability)),this._suitabilities=e;const t=this._suitabilities.map((({feature:e})=>e));this._initialCurrentCoverageUpdate=!0,this._updateFeatures(t),this._groupFeaturesBySectors()}async _fetchFeatures(e,t){if(!this.view)return;const i=this.layer;if(i){const r={include:i},a=this.view.toScreen(e);if(!a)return;const s=await this.view.hitTest(a,r);return this._processHitTestResults(i,s,t)}}async _fetchFeaturesWithController(e,t){try{await this._fetchFeatures(e,t)}catch(i){if(y(i))return;this.setMessage("imageLoadError","error"),p.getLogger(this).error("error occurred while fetching features",i)}}_groupFeaturesBySectors(){const{_suitabilities:e,additionalFeatures:t,currentBestFeature:i,features:r,invalidCameraHeading:a}=this;if(!e||!t||!i||!r||a)return void(this._sectorData=null);this._sectorData={};for(const c of he)this._sectorData[c]=new s;const o=e.map(((e,t)=>({...e,featureIndex:t})));o.sort(((e,t)=>e.trueSuitability-t.trueSuitability));const n=o.map((({distance:e})=>e)),l=Math.max(...n);o.forEach((e=>{const{distance:t,angle:i,featureIndex:a}=e,s=t/l*pe[2],o=Ce(t,l),n=ke(i);if(!this._sectorData)return;const c=pe[3]+s*Math.sin(i*Math.PI/180),h=pe[3]+s*Math.cos(i*Math.PI/180);let p;const u=r.at(a),d=u===this.currentBestFeature,m=this.currentBestFeature?.attributes.cameraPitch&&this.currentBestFeature?.attributes.cameraPitch<5;if(d&&m)p=-90;else{const e=c-pe[3],t=h-pe[3],i=t/Math.sqrt(e**2+t**2);let r=180*Math.acos(i)/Math.PI;(e<0&&t<0||e<0&&t>0)&&(r*=-1),p=r}const g=""===o?n:`${o}_${n}`;d&&(p===this.bestFeatureAngle?this.previousFeatureAngle=p:this.bestFeatureAngle=p,this.navigatorCurrentBestFeature=m?null:{x:c,y:h,direction:n});const y=this._sectorData[g];y.add({angle:i,featureIndex:a,x:c,y:h,objectID:u.attributes.objectId,sector:g,featureIndexInSector:y.length})}))}async _processFeatureResponse(e,t,i){const{features:r}=e;if(!r?.length)return this.setMessage("noImageError","error"),void(this.currentBestFeature=null);this.coveragePolygons.removeAll(),this.coverageFrustums.removeAll(),this.pointSources.removeAll();const{features:a,polygons:s,frustums:o}=this.filterByFootprints(r,t);if(!a.length)return this.setMessage("noImageError","error"),void(this.currentBestFeature=null);let n;if(this.coveragePolygons.addMany(s),this.coverageFrustums.addMany(o),s[0]){let e=new Le({spatialReference:s[0].spatialReference});for(const i of s)e=await A(e,i);const t=[];for(const{geometry:i}of a)e.contains(i)||t.push([i.x,i.y]);if(t.sort(((e,t)=>+R([e,t]))),e.addRing(t),this.footprintExtent=oe(e.extent,2,2),this.view?.supportsGround)try{n=await this.view.map.ground.createElevationSampler(this.footprintExtent,i)}catch(l){y(l)||p.getLogger(this).error(l)}}if((n||a[0].attributes.elevationSource)&&this.footprintExtent){const e=a[0].attributes.elevationSource;T(e)&&!n&&(n=await W({extent:this.footprintExtent,lod:e.lod,url:e.url,rasterFunction:e.rasterFunction}));const i=await Z((a[0].attributes.location.z??0)-a[0].attributes.cameraHeight,{elevationSample:n,elevationSource:e,extent:this.footprintExtent}),[r,...s]=await N([t,...a.map((e=>e.attributes.geometry.clone()))],i);a[0].elevationSample=n??i.elevationSample,t.elevation=r.z,a.forEach(((e,t)=>{e.attributes.elevation=s[t].z}))}a[0].elevationSample&&a.forEach((e=>{e.elevationSample=a[0].elevationSample})),this._suitabilities=z({features:a,selectedPoint:t,camera:Ie(this.view)?this.view.camera:null,currentImage:this.currentBestFeature}),this.updateSuitabilities(this._suitabilities)}async _processHitTestResults(e,t,i){const{screenPoint:r,results:[a]}=t,s="graphic"===a?.type&&this.shouldShowSelectedImage,o=a?.mapPoint??this.view?.toMap(r);if(!o)return;const{layerFloorFilterClause:n}=this,l=e.spatialReference.equals(o.spatialReference)?o:await M(o,e.spatialReference),c=I("1=1",I(e.definitionExpression,n)),h=l.spatialReference.isGeographic?1:S(l.spatialReference),p={layerInstanceOrURL:e,point:l,queryParams:{where:c,maximumDistance:e.maximumDistance?e.maximumDistance/h:void 0,objectIds:s?[a.graphic.getAttribute(e.objectIdField)]:void 0}};await this.searchBestImage(p,i)}_toggleVisiblity(e,t){e.forEach((e=>{e.visible=t}))}_updateFeatures(e){if(!e.length)return this.currentBestFeature=null,void this.additionalFeatures.removeAll();this.features.removeAll(),this.features.addMany(e),e.length>1?this.additionalFeatures.addMany(e.slice(1)):this.additionalFeatures.removeAll(),this.currentBestFeature=e[0]}async _updatePointsAndPolygons(e){const{pointSources:i,currentBestFeature:r,currentCoverageVisible:a,isAdditionalPointSourcesVisible:s}=this;if(r&&(this.additionalFootprints.removeAll(),this.additionalCameraLocations.removeAll(),this.bestFeatureCurrentFootprint&&(this.bestFeatureCurrentFootprint.destroy(),this.bestFeatureCurrentFootprint=null,this.bestFeatureFootprint=null),!this.invalidCameraHeading)){await(this._adapter?.createFootprints(e)),f(e);for(const e of i)e.imageID===r.attributes.objectId?this.currentBestFeatureLocation=new t({attributes:{imageID:e.imageID},geometry:e,symbol:we,visible:a}):this.additionalCameraLocations.push(new t({attributes:{imageID:e.imageID},geometry:e,symbol:ye,visible:s}))}}_updateCurrentBestFeature(e){if(!e)return;this.currentBestFeature=this.features?.at(e.featureIndex);const t=this.currentBestFeature?.attributes.cameraPitch&&this.currentBestFeature?.attributes.cameraPitch<5;let i;if(t)i=-90;else{const t=e.x-pe[3],r=e.y-pe[3],a=r/Math.sqrt(t**2+r**2);let s=180*Math.acos(a)/Math.PI;(t<0&&r<0||t<0&&r>0)&&(s*=-1),i=s}i===this.bestFeatureAngle?this.previousFeatureAngle=i:this.bestFeatureAngle=i,this.navigatorCurrentBestFeature=t?null:{x:e.x,y:e.y,direction:e.sector.includes("_")?e.sector.split("_")[1]:e.sector}}clearGraphics(){this._imageViewer.clearGraphics(),this._panoramicViewer.clearGraphics()}clearReferencePointOnImage(){this._referencePointOnImage&&(this._imageViewer.removeGraphic(this._referencePointOnImage),this._panoramicViewer.removeGraphic(this._referencePointOnImage),this._referencePointOnImage=m(this._referencePointOnImage))}plotReferencePoint(e){"mapPoint"in e?this.plotReferencePointOnGround(e.mapPoint):this.plotReferencePointOnGround(e)}setMessage(e,t,i,r){this.displayMessage={key:e,type:t,data:i,map:r}}async transformAndPlotSelectedLocation(e){const{currentBestFeature:t,invalidCameraHeading:i,selectedPoint:r,state:a}=this;if(this._crossSymbol&&(this._panoramicViewer.removeGraphic(this._crossSymbol),this._imageViewer.removeGraphic(this._crossSymbol),this._crossSymbol=m(this._crossSymbol)),!r||!t||"image-loaded"!==a||i)return;let s;try{s=await this.worldToImage(r,e),f(e),await this.plotSelectedPointOnImage(s,e)}catch(o){y(o)||p.getLogger(this).error("failed to transform map point to pixel, cross symbol will not be plotted on image",{error:o,selectedPoint:r,feature:t})}}async worldToImage(e,t){const{footprintExtent:i}=this,{imageSize:r}=this.activeViewer;if("none"===this.mode||!this.currentBestFeature||!r||!i)return;const{attributes:{location:a,elevationSource:s,cameraHeading:o,elevation:n,cameraHeight:l},elevationSample:c}=this.currentBestFeature;let h=a.clone();const p=await Z(n??(a.z??0)-l,{elevationSample:c,elevationSource:s});this.currentBestFeature.elevationSample=p.elevationSample;const u=Array.isArray(e)?e:[e];let d,m=await Promise.all(u.map((e=>new Promise((t=>{if(!e.hasZ)return t(N(e,p));t(e)})))));if(a.spatialReference.isGeographic&&(h=await M(h,Me.WebMercator,t)),m=await Promise.all(m.map((async e=>h.spatialReference.equals(e.spatialReference)?e:await M(e,h.spatialReference,t)))),f(t),"panoramic"===this.mode)d=ie(m,{imageHeight:r[1],imageWidth:r[0],cameraHeading:o,cameraLocation:h});else{const e=Y(this.currentBestFeature.attributes,r[0],r[1]);d=re(m,{...e,cameraLocation:h})}return Array.isArray(e)?d:d[0]}updateCurrentCoveragePolygon(e){const{additionalFootprints:i,additionalCameraLocations:r,currentBestFeature:a,currentBestFeatureLocation:s,currentCoverageVisible:o,selectedPoint:n,view:l,_adapter:c}=this,{attributes:{objectId:h},elevationSample:p}=a;if(this._initialCurrentCoverageUpdate){if(this._overlays?.removeAll(),this._initialCurrentCoverageUpdate=!1,this.bestFeatureCurrentFootprint=m(this.bestFeatureCurrentFootprint),e&&!this.invalidCameraHeading&&(e.visible=o,this.bestFeatureCurrentFootprint=e),l){const e=[...i,...r,this.bestFeatureCurrentFootprint,s].filter(Se);l.supportsGround&&p&&c?.updateGroundElevation&&c.updateGroundElevation(e,p),n&&e.push(new t({geometry:n.clone(),symbol:ue.clone(),attributes:{imageID:h}})),this._overlays.graphics.addMany(e)}}else if(l){if(this.invalidCameraHeading)return;this.bestFeatureCurrentFootprint&&(this._overlays?.remove(this.bestFeatureCurrentFootprint),this.bestFeatureCurrentFootprint=m(this.bestFeatureCurrentFootprint));const t=this.bestFeatureCurrentFootprint&&this._overlays?this._overlays.graphics.indexOf(this.bestFeatureCurrentFootprint):-1;e&&(this.bestFeatureCurrentFootprint=e,l?.supportsGround&&p&&c?.updateGroundElevation&&c.updateGroundElevation([e],p),e.visible=this.currentCoverageVisible,this._overlays?.graphics.add(this.bestFeatureCurrentFootprint,t>=0?t:this._overlays.graphics.length-1))}}};e([C()],He.prototype,"activeLayer",null),e([C({readOnly:!0})],He.prototype,"activeViewer",null),e([C()],He.prototype,"additionalFeatures",void 0),e([C({type:s.ofType(t)})],He.prototype,"additionalCameraLocations",void 0),e([C({type:s.ofType(t)})],He.prototype,"additionalFootprints",void 0),e([C()],He.prototype,"areaMeasurementResult",void 0),e([C()],He.prototype,"bestFeatureAngle",void 0),e([C()],He.prototype,"bestFeatureCurrentFootprint",void 0),e([C({type:t})],He.prototype,"bestFeatureFootprint",void 0),e([C({type:Number})],He.prototype,"brightness",null),e([C({type:Number})],He.prototype,"contrast",null),e([C()],He.prototype,"conversionProps",void 0),e([C()],He.prototype,"coverageFrustums",void 0),e([C()],He.prototype,"coveragePolygons",void 0),e([C()],He.prototype,"currentBestFeature",void 0),e([C()],He.prototype,"currentBestFeatureLocation",void 0),e([C()],He.prototype,"currentCoverageVisible",void 0),e([C({json:{write:!1}})],He.prototype,"determineWorkflowForFeature",void 0),e([C()],He.prototype,"disabled",void 0),e([C()],He.prototype,"displayMessage",void 0),e([C()],He.prototype,"displayNewMeasurementButton",void 0),e([C()],He.prototype,"displayNewAreaMeasurementButton",void 0),e([C()],He.prototype,"distanceMeasurementResult",void 0),e([C()],He.prototype,"digitizationLayer",void 0),e([C({readOnly:!0})],He.prototype,"featureCount",null),e([C()],He.prototype,"features",void 0),e([C({readOnly:!0})],He.prototype,"imageGalleryEnabled",null),e([C({readOnly:!0})],He.prototype,"imageLoaded",null),e([C({readOnly:!0})],He.prototype,"invalidCameraHeading",null),e([C()],He.prototype,"imagePointsInView",null),e([C()],He.prototype,"isAdditionalCoverageVisible",void 0),e([C()],He.prototype,"isAdditionalPointSourcesVisible",void 0),e([C()],He.prototype,"layer",void 0),e([C()],He.prototype,"layerView",null),e([C({readOnly:!0})],He.prototype,"layerFloorFilterClause",null),e([C({type:Number})],He.prototype,"localPort",void 0),e([C()],He.prototype,"mapImageConversionToolState",void 0),e([C({readOnly:!0,value:"none"})],He.prototype,"mode",null),e([C()],He.prototype,"navigatorCurrentBestFeature",void 0),e([C({type:s.ofType(t)})],He.prototype,"overlayedCameraLocations",void 0),e([C()],He.prototype,"overlayedMapFeatures",void 0),e([C()],He.prototype,"pointSources",void 0),e([C({readOnly:!0})],He.prototype,"popupEnabled",null),e([C()],He.prototype,"previousFeatureAngle",void 0),e([C()],He.prototype,"referencePoint",null),e([C({readOnly:!0})],He.prototype,"sectorData",null),e([C()],He.prototype,"selectedPoint",void 0),e([C({type:Number})],He.prototype,"sharpness",null),e([C()],He.prototype,"shouldShowSelectedImage",void 0),e([C()],He.prototype,"sketch",void 0),e([C()],He.prototype,"sketchAdapter",void 0),e([C({readOnly:!0})],He.prototype,"sketchGraphicsLayer",null),e([C({readOnly:!0})],He.prototype,"state",null),e([C({readOnly:!0})],He.prototype,"thumbnails",null),e([C()],He.prototype,"updateFootprint",void 0),e([C()],He.prototype,"updateFootprintPanorama",void 0),e([C({value:null})],He.prototype,"view",null),e([C()],He.prototype,"_adapter",void 0),e([C()],He.prototype,"_highlightedFeatureHandle",void 0),e([C()],He.prototype,"_imageViewer",void 0),e([C()],He.prototype,"_initialCurrentCoverageUpdate",void 0),e([C()],He.prototype,"_overlays",void 0),e([C({readOnly:!0})],He.prototype,"_overlaysView",null),e([C()],He.prototype,"_panoramicViewer",void 0),e([C()],He.prototype,"_referencePointOnGround",void 0),e([C()],He.prototype,"_referencePointOnImage",void 0),e([C()],He.prototype,"_sectorData",void 0),e([C({readOnly:!0})],He.prototype,"_updatingHandles",void 0),e([C()],He.prototype,"footprintExtent",void 0),He=e([k("esri.widgets.OrientedImageryViewer.OrientedImageryViewerViewModel")],He);const Te=He;export{Te as default};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.32/esri/copyright.txt for details.
4
4
  */
5
- import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Identifiable.js";import{watch as s,syncAndInitial as i}from"../../../core/reactiveUtils.js";import{property as o}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/has.js";import"../../../core/Logger.js";import"../../../core/RandomLCG.js";import{subclass as a}from"../../../core/accessorSupport/decorators/subclass.js";import r from"../../Widget.js";import{css as c}from"../css.js";import l from"./OverlayLayersList.js";import{loadCalciteComponents as n}from"../../support/componentsUtils.js";import{globalCss as p}from"../../support/globalCss.js";import"../../support/widgetUtils.js";import{tsx as h}from"../../support/jsxFactory.js";let m=class extends(t.IdentifiableMixin(r)){constructor(){super(...arguments),this.closed=!1,this.layerList=new l({selectionMode:"multiple"}),this.listItemCreatedFunction=null,this.messages=null,this.showCameraLocations=!1,this.showMapFeatures=!1,this.viewModel=null}initialize(){this.addHandles([s((()=>({view:this.view,layerList:this.layerList})),(({view:e,layerList:t})=>{t.view=e}),i),s((()=>({layerList:this.layerList,listItemCreatedFunction:this.listItemCreatedFunction})),(({layerList:e,listItemCreatedFunction:t})=>{e.listItemCreatedFunction=t}),i)])}loadDependencies(){return n({list:()=>import("@esri/calcite-components/dist/components/calcite-list"),"list-item":()=>import("@esri/calcite-components/dist/components/calcite-list-item"),panel:()=>import("@esri/calcite-components/dist/components/calcite-panel"),switch:()=>import("@esri/calcite-components/dist/components/calcite-switch"),action:()=>import("@esri/calcite-components/dist/components/calcite-action")})}get view(){return this.viewModel?.view??null}_onCalcitePanelClose(e){e.stopPropagation(),this.closed=!0}_renderCameraLocationsSwitch(e){return h("calcite-list-item",{bind:this,label:this.messages?.overlayCameraLocations,onclick:this._toggleShowCameraLocations},h("calcite-switch",{bind:this,checked:e,class:c.overlaysSwitch,onchange:this._toggleShowCameraLocations,scale:"s",slot:"actions-end"}))}_renderOverlayMapFeatures(e){return h("calcite-list-item",{bind:this,label:this.messages?.overlayMapFeatures,onclick:this._toggleShowMapFeatures},h("calcite-switch",{bind:this,checked:e,class:c.overlaysSwitch,onchange:this._toggleShowMapFeatures,scale:"s",slot:"actions-end"}))}_renderList(e){return e?h("div",{class:c.imageOverlaysLayerList},this.layerList.render()):null}_renderPanel(){const{closed:e,messages:t,showCameraLocations:s,showMapFeatures:i}=this;return h("calcite-panel",{bind:this,closable:!0,closed:e,heading:t?.imageOverlays,onCalcitePanelClose:this._onCalcitePanelClose},h("calcite-action",{bind:this,icon:"cursor",label:t.selectFeature,onclick:e=>{const t=e.target;t.active=!t.active,this.emit("select-digitized",t.active)},scale:"s",slot:"header-actions-end",text:t.selectFeature}),h("calcite-action",{bind:this,icon:"save",label:"save",onclick:()=>{this.emit("save")},scale:"s",slot:"header-actions-end",text:"save"}),h("calcite-action",{bind:this,icon:"trash",label:"delete",onclick:()=>{this.emit("delete-digitized")},scale:"s",slot:"header-actions-end",text:t.deleteFeature}),h("calcite-list",{label:t?.imageOverlays},this._renderCameraLocationsSwitch(s),this._renderOverlayMapFeatures(i)),this._renderList(i))}_toggleShowCameraLocations(e){e.stopPropagation(),this.showCameraLocations=!this.showCameraLocations}_toggleShowMapFeatures(e){e.stopPropagation(),this.showMapFeatures=!this.showMapFeatures}render(){const e=this.layerList.operationalItems.items.length,t=this.showMapFeatures&&0===e,s=this.showMapFeatures&&e>0,i={[p.widget]:!0,[c.imageOverlaysNoResult]:t,[c.imageOverlaysIncreasedHeight]:s,[c.imageOverlays]:!t&&!s};return h("div",{class:this.classes(i)},this._renderPanel())}};e([o()],m.prototype,"closed",void 0),e([o()],m.prototype,"layerList",void 0),e([o()],m.prototype,"listItemCreatedFunction",void 0),e([o()],m.prototype,"messages",void 0),e([o()],m.prototype,"showCameraLocations",void 0),e([o()],m.prototype,"showMapFeatures",void 0),e([o()],m.prototype,"view",null),e([o()],m.prototype,"viewModel",void 0),m=e([a("esri.widgets.OrientedImageryViewer.components.ImageOverlays")],m);const d=m;export{d as default};
5
+ import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Collection.js";import s from"../../../core/Identifiable.js";import{watch as o,on as i,syncAndInitial as a}from"../../../core/reactiveUtils.js";import{property as r}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/has.js";import"../../../core/Logger.js";import"../../../core/RandomLCG.js";import{subclass as c}from"../../../core/accessorSupport/decorators/subclass.js";import l from"../../Widget.js";import{css as n}from"../css.js";import d from"./OverlayLayersList.js";import{loadCalciteComponents as h}from"../../support/componentsUtils.js";import{globalCss as p}from"../../support/globalCss.js";import"../../support/widgetUtils.js";import{tsx as m}from"../../support/jsxFactory.js";let y=class extends(s.IdentifiableMixin(l)){constructor(e){super(e),this.closed=!1,this.layerList=new d({selectionMode:"multiple"}),this.messages=null,this.overlayedLayers=new t,this.showCameraLocations=!1,this.showMapFeatures=!1}initialize(){this.addHandles([o((()=>this.layerList.selectedItems),(()=>{this.removeHandles("selected-items"),this.addHandles(i((()=>this.layerList.selectedItems),"change",(({added:e,removed:t})=>{e.forEach((e=>{this.onLayerSelected?.(e)})),t.forEach((e=>{this.onLayerDeselected?.(e)})),this.overlayedLayers.removeAll(),this.overlayedLayers.addMany(this.layerList.selectedItems.map((e=>e.layer)))})),"selected-items")}),a),i((()=>this.layerList),"trigger-action",(e=>{this.onListItemAction?.(e)}))])}loadDependencies(){return h({list:()=>import("@esri/calcite-components/dist/components/calcite-list"),"list-item":()=>import("@esri/calcite-components/dist/components/calcite-list-item"),panel:()=>import("@esri/calcite-components/dist/components/calcite-panel"),switch:()=>import("@esri/calcite-components/dist/components/calcite-switch"),action:()=>import("@esri/calcite-components/dist/components/calcite-action")})}get listItemCreatedFunction(){return this.layerList.listItemCreatedFunction}set listItemCreatedFunction(e){this.layerList.listItemCreatedFunction=t=>{const{item:s}=t,{overlayedLayers:o}=this;o.includes(s.layer)&&this.layerList.selectedItems.add(s),e?.(t)}}get view(){return this.layerList?.view}set view(e){this.layerList.view=e}_onClickSelection(e){const t=e.target;t.active=!t.active,this.onSelectFeatures?.(t.active)}_renderCameraLocationsSwitch(e){return m("calcite-list-item",{bind:this,label:this.messages.overlayCameraLocations,onclick:this._toggleShowCameraLocations},m("calcite-switch",{bind:this,checked:e,class:n.overlaysSwitch,onchange:this._toggleShowCameraLocations,scale:"s",slot:"actions-end"}))}_renderOverlayMapFeatures(e){return m("calcite-list-item",{bind:this,label:this.messages?.overlayMapFeatures,onclick:this._toggleShowMapFeatures},m("calcite-switch",{bind:this,checked:e,class:n.overlaysSwitch,onchange:this._toggleShowMapFeatures,scale:"s",slot:"actions-end"}))}_renderList(e){return e?m("div",{class:n.imageOverlaysLayerList},this.layerList.render()):null}_renderPanel(){const{closed:e,messages:t,showCameraLocations:s,showMapFeatures:o}=this;return m("calcite-panel",{bind:this,closable:!0,closed:e,heading:t.imageOverlays,onCalcitePanelClose:this.onImageOverlaysClosed},m("calcite-action",{bind:this,icon:"cursor",label:t.selectFeature,onclick:this._onClickSelection,scale:"s",slot:"header-actions-end",text:t.selectFeature}),m("calcite-action",{bind:this,icon:"save",label:"save",onclick:this.onSaveFeatures,scale:"s",slot:"header-actions-end",text:"save"}),m("calcite-action",{bind:this,icon:"trash",label:"delete",onclick:this.onDeleteFeatures,scale:"s",slot:"header-actions-end",text:t.deleteFeature}),m("calcite-list",{label:t.imageOverlays},this._renderCameraLocationsSwitch(s),this._renderOverlayMapFeatures(o)),this._renderList(o))}_toggleShowCameraLocations(e){e.stopPropagation(),this.showCameraLocations=!this.showCameraLocations,this.onShowCameraLocationsChanged?.(this.showCameraLocations)}_toggleShowMapFeatures(e){e.stopPropagation(),this.showMapFeatures=!this.showMapFeatures,this.onShowMapFeaturesChanged?.(this.showMapFeatures)}render(){const e=this.layerList.operationalItems.items.length,t=this.showMapFeatures&&0===e,s=this.showMapFeatures&&e>0,o={[p.widget]:!0,[n.imageOverlaysNoResult]:t,[n.imageOverlaysIncreasedHeight]:s,[n.imageOverlays]:!t&&!s};return m("div",{class:this.classes(o)},this._renderPanel())}};e([r()],y.prototype,"closed",void 0),e([r()],y.prototype,"layerList",void 0),e([r()],y.prototype,"listItemCreatedFunction",null),e([r()],y.prototype,"messages",void 0),e([r()],y.prototype,"onImageOverlaysClosed",void 0),e([r()],y.prototype,"onDeleteFeatures",void 0),e([r()],y.prototype,"onLayerDeselected",void 0),e([r()],y.prototype,"onLayerSelected",void 0),e([r()],y.prototype,"onListItemAction",void 0),e([r()],y.prototype,"onSaveFeatures",void 0),e([r()],y.prototype,"onSelectFeatures",void 0),e([r()],y.prototype,"onShowCameraLocationsChanged",void 0),e([r()],y.prototype,"onShowMapFeaturesChanged",void 0),e([r()],y.prototype,"overlayedLayers",void 0),e([r()],y.prototype,"showCameraLocations",void 0),e([r()],y.prototype,"showMapFeatures",void 0),e([r()],y.prototype,"view",null),y=e([c("esri.widgets.OrientedImageryViewer.components.ImageOverlays")],y);const u=y;export{u as default};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.32/esri/copyright.txt for details.
4
4
  */
5
- import{_ as e}from"../chunks/tslib.es6.js";import"../intl.js";import{prefersReducedMotion as t}from"../core/a11yUtils.js";import i from"../core/Collection.js";import{deprecatedProperty as a}from"../core/deprecate.js";import s from"../core/Logger.js";import{deg2rad as r}from"../core/mathUtils.js";import{formatArea as o,formatLength as n}from"../core/quantityFormatUtils.js";import{createArea as l,createLength as c}from"../core/quantityUtils.js";import{watch as d,syncAndInitial as h,initial as g,whenOnce as m,once as v}from"../core/reactiveUtils.js";import{property as p}from"../core/accessorSupport/decorators/property.js";import"../core/has.js";import"../core/RandomLCG.js";import{subclass as u}from"../core/accessorSupport/decorators/subclass.js";import{rotatePixel as y}from"../layers/orientedImagery/transformations/utils.js";import w from"../layers/support/rasterDatasets/RasterFactory.js";import _ from"../support/actions/ActionToggle.js";import b from"./Widget.js";import{getAllArcPath as M}from"./OrientedImageryViewer/arcUtils.js";import{segmentArcs as C,sectorsRadii as f,featureCircleRadius as I,navigationToolDimensionLength as O}from"./OrientedImageryViewer/constants.js";import{css as A,navigation as T,navigationToolRotationFrom as E,navigationToolRotationTo as k,root as V}from"./OrientedImageryViewer/css.js";import{isValidDigitizationLayer as F}from"./OrientedImageryViewer/digitizationUtils.js";import L from"./OrientedImageryViewer/OrientedImageryViewerViewModel.js";import x from"./OrientedImageryViewer/OrientedImageryViewerVisibleElements.js";import S from"./OrientedImageryViewer/components/ImageOverlays.js";import{loadCalciteComponents as P}from"./support/componentsUtils.js";import{globalCss as j}from"./support/globalCss.js";import"./support/widgetUtils.js";import{messageBundle as $}from"./support/decorators/messageBundle.js";import{vmEvent as H}from"./support/decorators/vmEvent.js";import{tsx as G}from"./support/jsxFactory.js";import{substitute as B}from"../intl/substitute.js";const R={overlayMapFeatures:"overlay-map-features",overlayed:"overlayed",overlaysActionHandles:"overlays-action-handles"};let U=class extends b{constructor(e,t){super(e,t),this.galleryOpened=!1,this.imageEnhancementToolActive=!1,this.imageOverlaysOpened=!1,this.navigationToolActive=!1,this.onOverlayAction=e=>{this._onOverlayAction(e)},this.viewModel=new L,this.messagesCommon=null,this.messagesSketch=null,this.pixelMeasurementUnit="meters",this.pixelAreaMeasurementUnit="square-meters",this.visibleElements=new x,this._currentAction=null,this._navigationToolExpanded=!1,this._navigationTool=null,this._imageOverlays=new S,this._warningTitleElement=null,this._actionItems=new Map,this._galleryController=new AbortController,this._galleryObserver=new IntersectionObserver(this._lazyLoadImage.bind(this)),this._createAndAddOverlayLayerVisibilityHandle=e=>{this.addHandles(d((()=>e.visible),(()=>{this.viewModel.toggleOverlayMapFeatures(e.id,e.visible)})),`${R.overlayed}-${e.id}`)},this._createHandlesForOverlayMapFeatures=()=>{this.viewModel.removeAllOverlayMapFeatures();const{selectedItems:e}=this._imageOverlays.layerList;e.forEach(this._handleOverlayLayerSelect)},this._createSketchHandles=()=>[this._imageOverlays.on("save",(()=>{this.viewModel.sketchAdapter?.save()})),this._imageOverlays.on("select-digitized",(e=>{const{sketchViewModel:t}=this;t&&(t.updateOnGraphicClick=e,this.sketchViewModel?.cancel())})),this._imageOverlays.on("delete-digitized",(()=>{this.sketchViewModel?.delete()}))],this._createOverlaysActionHandles=()=>d((()=>this.onOverlayAction),(()=>{this.removeHandles(R.overlaysActionHandles),this.addHandles(this._imageOverlays.layerList.on("trigger-action",this.onOverlayAction),R.overlaysActionHandles)}),h),this._createOverlayLayersListChangeHandle=()=>{this.addHandles(this._imageOverlays.layerList.selectedItems.on("change",(({added:e,removed:t})=>{e.forEach(this._handleOverlayLayerSelect),t.forEach(this._handleOverlayLayerDeselect)})))},this._handleOverlayLayerDeselect=e=>{const t=e.layer;this.viewModel.removeOverlayedGraphicsOnImage(`${t.id}`),this.removeHandles(`${R.overlayed}-${t.id}`)},this._handleOverlayLayerSelect=e=>{const t=e.layer;this.viewModel.overlayMapFeatures(t,this._imageOverlays.showMapFeatures),this._createAndAddOverlayLayerVisibilityHandle(t)},this._highlight=e=>{const t=e.target?.dataset.objectid;t&&this.viewModel.highlight(t)},this._removeHighlight=()=>this.viewModel.removeHighlight(),this._scaleNavigationTool=()=>{this._navigationToolExpanded=!this._navigationToolExpanded},this._toggleImageAttributes=()=>{this.viewModel.toggleImageAttributes()},this._loadImageFromGallery=this._loadImageFromGallery.bind(this),this._registerGalleryItem=this._registerGalleryItem.bind(this),this._unregisterGalleryItem=this._unregisterGalleryItem.bind(this),this._renderViewerContainer=this._renderViewerContainer.bind(this),this.loadImageFromSource=this.loadImageFromSource.bind(this),this.updateSuitabilities=this.updateSuitabilities.bind(this)}initialize(){this._createOverlayLayersListChangeHandle(),this.addHandles([d((()=>[this.viewModel?.bestFeatureAngle,this._navigationTool]),(([e,t])=>{t&&this._updateNavigationTool(t)}),g),d((()=>this.currentCoverageVisible),(e=>this._onCurrentCoverageVisibilityChange(e))),d((()=>this.isAdditionalCoverageVisible),(e=>this._onAdditionalCoverageVisibilityChange(e))),d((()=>this.isAdditionalPointSourcesVisible),(e=>this._onAdditionalCameraLocationsVisibility(e))),d((()=>this.viewModel),(()=>this._imageOverlays.viewModel=this.viewModel),h),d((()=>[this.messages,this.messagesSketch]),(()=>this._imageOverlays.messages={...this.messages,...this.messagesSketch}),h),d((()=>this.listItemCreatedFunction),(()=>this._imageOverlays.listItemCreatedFunction=this.listItemCreatedFunction),h),d((()=>[this.currentBestFeature,this._imageOverlays.showCameraLocations,this.viewModel.state]),(([e,t,i])=>{"image-loaded"===i&&this.viewModel.overlayCameraLocations(t)}),h),d((()=>[this.currentBestFeature,this._imageOverlays.showMapFeatures,this.viewModel.state]),((e,t)=>{t?.[1]!==e[1]&&this.viewModel.toggleAllOverlayMapFeatures(e[1]),e[0]&&e[0]!==t?.[0]&&m((()=>"image-loaded"===this.viewModel.state)).then(this._createHandlesForOverlayMapFeatures)}),g),this._createOverlaysActionHandles(),...this._createSketchHandles()])}loadDependencies(){return P({"action-bar":()=>import("@esri/calcite-components/dist/components/calcite-action-bar"),"action-group":()=>import("@esri/calcite-components/dist/components/calcite-action-group"),action:()=>import("@esri/calcite-components/dist/components/calcite-action"),label:()=>import("@esri/calcite-components/dist/components/calcite-label"),notice:()=>import("@esri/calcite-components/dist/components/calcite-notice"),panel:()=>import("@esri/calcite-components/dist/components/calcite-panel"),slider:()=>import("@esri/calcite-components/dist/components/calcite-slider"),tooltip:()=>import("@esri/calcite-components/dist/components/calcite-tooltip")})}destroy(){this._galleryController.abort(),this._galleryObserver.disconnect()}get activeLayer(){return a(s.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer}set activeLayer(e){a(s.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer=e}get currentBestFeature(){return this.viewModel.currentBestFeature}set currentBestFeature(e){this.viewModel.currentBestFeature=e}get currentCoverageVisible(){return this.viewModel.currentCoverageVisible}set currentCoverageVisible(e){this.viewModel.currentCoverageVisible=e}get digitizationLayer(){return this.viewModel.digitizationLayer}set digitizationLayer(e){this.viewModel.digitizationLayer=e}get disabled(){return this.viewModel.disabled}set disabled(e){this.viewModel.disabled=e}get displayMessage(){return this.viewModel.displayMessage}get features(){return this.viewModel.features}get imagePointsInView(){return this.viewModel.imagePointsInView}get icon(){return"oriented-imagery-widget"}set icon(e){this._overrideIfSome("icon",e)}get imageGalleryEnabled(){return this.viewModel.imageGalleryEnabled}get invalidCameraHeading(){return this.viewModel.invalidCameraHeading}get isAdditionalCoverageVisible(){return this.viewModel.isAdditionalCoverageVisible}set isAdditionalCoverageVisible(e){this.viewModel.isAdditionalCoverageVisible=e}get isAdditionalPointSourcesVisible(){return this.viewModel.isAdditionalPointSourcesVisible}set isAdditionalPointSourcesVisible(e){this.viewModel.isAdditionalPointSourcesVisible=e}get mapImageConversionToolState(){return this.viewModel.mapImageConversionToolState}set mapImageConversionToolState(e){this.viewModel.mapImageConversionToolState=e}get layer(){return this.viewModel.layer}set layer(e){this.viewModel.layer=e}get listItemCreatedFunction(){return this._get("listItemCreatedFunction")??this._overlayLayerListItemCreatedFunction}set listItemCreatedFunction(e){this._set("listItemCreatedFunction",e)}get popupEnabled(){const{popupEnabled:e,state:t}=this.viewModel;return"image-loaded"===t&&e}get referencePoint(){return this.viewModel.referencePoint??null}get sketchViewModel(){return this.viewModel.sketch}get view(){return this.viewModel.view}set view(e){this.viewModel.view=e}set determineWorkflowForFeature(e){this.viewModel.determineWorkflowForFeature=e}get determineWorkflowForFeature(){return this.viewModel.determineWorkflowForFeature}set updateFootprint(e){this.viewModel.updateFootprint=e}get updateFootprint(){return this.viewModel.updateFootprint}async _getThumbnailPixelBlockInternal(e,t){const{level:i,offset:a,size:r}=this._getMaxLevelRasterParameters(e);try{const{pixelBlock:s}=await e.fetchRawPixels(i,a,r,t);return s}catch(o){s.getLogger(this).warn("failed to create canvas with pixel data",o)}return null}_getMaxLevelRasterParameters(e){const{storageInfo:t,width:i,height:a}=e.rasterInfo,{maximumPyramidLevel:s,pyramidScalingFactor:r}=t,o=r??2;return{level:s,offset:{x:0,y:0},size:{width:Math.ceil(i/o**s),height:Math.ceil(a/o**s)}}}async _getThumbnailPixelBlock(e){const{signal:t}=this._galleryController;try{const{origin:i,pathname:a,searchParams:s}=new URL(e),r=await w.open({ioConfig:{customFetchParameters:Object.fromEntries(s),skipMapInfo:!0},url:`${i}${a}`,signal:t});return r?await this._getThumbnailPixelBlockInternal(r,{signal:t}):null}catch(i){s.getLogger(this).error("failed to create thumbnail",i)}return null}_handleBrightnessChange(e){this.viewModel.brightness=e.currentTarget.value??0}_handleContrastChange(e){this.viewModel.contrast=e.currentTarget.value??0}_handleSharpnessChange(e){this.viewModel.sharpness=e.currentTarget.value??0}_lazyLoadImage(e,t){e.forEach((async e=>{if(e.isIntersecting){const i=e.target,a=i.getAttribute("data-src"),o=i.getAttribute("data-rotation"),n=o?parseFloat(o)%360:null;if(!a)return;const l=await this._getThumbnailPixelBlock(a);if(!l)return;i.width=l.width,i.height=l.height;const c=i.getContext("2d");if(!c)return;const d=c.createImageData(i.width,i.height);if(d.data.set(l.getAsRGBA()),"number"==typeof n&&0!==n){const e=r(n),a=document.createElement("canvas"),o=a.getContext("2d");if(o){a.width=d.width,a.height=d.height,o.putImageData(d,0,0);const s=y(0,0,e),r=y(d.width,0,e),n=y(d.width,d.height,e),l=y(0,d.height,e),h=Math.max(s[0],r[0],n[0],l[0])-Math.min(s[0],r[0],n[0],l[0]),g=Math.max(s[1],r[1],n[1],l[1])-Math.min(s[1],r[1],n[1],l[1]),m=Math.min(i.width/h,i.height/g);return c.save(),c.clearRect(0,0,i.width,i.height),c.translate(i.width/2,i.height/2),c.rotate(e),c.scale(m,m),c.drawImage(a,-d.width/2,-d.height/2,d.width,d.height),c.restore(),t.unobserve(i)}s.getLogger(this).warn("oriented-imagery-viewer:image-gallery","failed to apply rotation on thumbnail")}c.putImageData(d,0,0),t.unobserve(i)}}))}_loadImageFromGallery(e){const{target:t}=e;if(!t)return;const i=t.getAttribute("data-objectid");i&&this.viewModel.currentBestFeature?.attributes.objectId!==Number(i)&&this.viewModel.selectBestFeature(i)}_onAdditionalCoverageVisibilityChange(e){this.viewModel.setAdditionalCoverageVisibility(e)}_onAdditionalCameraLocationsVisibility(e){this.viewModel.setAdditionalCameraLocationsVisibility(e)}_onCurrentCoverageVisibilityChange(e){this.viewModel.setCurrentCoverageVisibility(e)}async _onOverlayAction({action:e,item:t}){switch(this._currentAction&&this._currentAction!==e&&(this._currentAction.value=!1,this._currentAction=null),e.id){case"create-features":this._currentAction=e;e.value?(this.digitizationLayer=t.layer,await this.viewModel.loadDigitizationAdapter(),this.viewModel.activeViewer?.imageRenderer.map.add(this.viewModel.sketch.layer,this.viewModel.activeViewer?.imageRenderer.map.allLayers.length-1),this.sketchViewModel?.updateGraphics.removeAll(),this.sketchViewModel?.create(this.digitizationLayer.geometryType)):(this.sketchViewModel?.updateGraphics.removeAll(),this.viewModel.activeViewer?.imageRenderer.map.remove(this.viewModel.sketch.layer),this.digitizationLayer=null);break}}get _overlayLayerListItemCreatedFunction(){return async e=>{const{item:t}=e,a=t.layer;if(await(a?.load()),!a||!F(a))return;const s=new i,r=new i;s.add(new _({icon:"polyline"===a.geometryType?"line":a.geometryType,id:"create-features",title:this.messages.addOrUpdateDigitizationFeatures})),t.actionsSections=new i([s,r])}}_registerGalleryItem(e){this._galleryObserver.observe(e)}_renderActionTooltips(){return[...this._actionItems].map((([e,t])=>G("calcite-tooltip",{key:e,referenceElement:t},G("span",null,e))))}_renderBody(){return G("div",{class:A.body},this._renderViewerContainer(),this.invalidCameraHeading?[this._renderWarning(this.messages.invalidCameraHeadingWarningTitle),this._renderWarningTooltip(this.messages.invalidCameraHeadingWarningDescription)]:[this._renderImageGallery(),this._renderNavigation(),this._renderImageOverlays()],this._renderImageEnhancementTools())}_renderImageEnhancementAction(){const{state:e,mode:t}=this.viewModel;return G("calcite-action",{active:this.imageEnhancementToolActive,afterCreate:this._storeActionElement,bind:this,disabled:"default"!==t||"image-loaded"!==e,icon:"sliders-horizontal",onclick:this._toggleImageEnhancementToolState,text:this.messages.imageEnhancement})}_renderImageEnhancementTools(){const{imageEnhancementToolActive:e,viewModel:{brightness:t,contrast:i,sharpness:a,state:s}}=this;return e&&"image-loaded"===s?G("calcite-panel",{bind:this,class:A.imageEnhancementWrapper,closable:!0,closed:!e,heading:this.messages.imageEnhancement,key:this.messages.imageEnhancement,onCalcitePanelClose:this._toggleImageEnhancementToolState},G("div",{class:A.imageEnhancementTools},G("div",{class:A.imageEnhancementToolContainer},G("calcite-label",null,this.messages.brightness,G("calcite-slider",{bind:this,labelTicks:!0,max:10,min:-10,ticks:5,value:t,onCalciteSliderInput:this._handleBrightnessChange}))),G("div",{class:A.imageEnhancementToolContainer},G("calcite-label",null,this.messages.contrast,G("calcite-slider",{bind:this,labelTicks:!0,max:10,min:-10,ticks:5,value:i,onCalciteSliderInput:this._handleContrastChange}))),G("div",{class:A.imageEnhancementToolContainer},G("calcite-label",null,this.messages.sharpness,G("calcite-slider",{bind:this,labelTicks:!0,max:1,min:0,step:.1,ticks:.5,value:a,onCalciteSliderInput:this._handleSharpnessChange})))),G("calcite-action",{bind:this,icon:"reset",onclick:this._resetImageTools,slot:"header-actions-end",text:this.messagesCommon.reset})):null}_renderImageGallery(){const{container:e,galleryOpened:t,imageGalleryEnabled:i,viewModel:{thumbnails:a},invalidCameraHeading:s}=this;return i&&t&&(e&&a)?G("calcite-panel",{bind:this,class:A.carousel,closable:!0,closed:!t,disabled:s,heading:this.messages.imageGallery,key:this.messages.imageGallery,onCalcitePanelClose:this._toggleImageGallery},G("div",{class:A.carouselContainer},this._renderThumbnails(a))):null}_renderImageOverlaysAction(){const{viewModel:{state:e},imageOverlaysOpened:t,invalidCameraHeading:i}=this;return G("calcite-action",{active:t,afterCreate:this._storeActionElement,bind:this,disabled:"image-loaded"!==e||i,icon:"layers",onclick:this._toggleImageOverlays,text:this.messages.imageOverlays})}_renderImageOverlays(){const{imageOverlaysOpened:e,viewModel:{state:t}}=this;if(e&&"image-loaded"===t)return this._imageOverlays.closed&&(this._imageOverlays.closed=!1),v((()=>this._imageOverlays.closed)).then((()=>this.imageOverlaysOpened=!1)),G("div",{class:A.imageOverlaysContainer,key:this.messages.imageOverlays},this._imageOverlays.render())}_renderWarning(e){const{invalidCameraHeading:t,viewModel:{state:i}}=this;return t&&"image-loaded"===i?[G("calcite-notice",{class:A.alert,closable:!0,icon:"exclamation-mark-triangle-f",iconFlipRtl:!0,kind:"warning",open:!0,scale:"s"},G("div",{afterCreate:e=>this._storeWarningTitleElement(e),slot:"title"},e))]:null}_renderWarningTooltip(e){const{_warningTitleElement:t}=this;if(e?.length&&t)return G("calcite-tooltip",{closeOnClick:!0,referenceElement:t},e)}_renderMapImageConversionTool(){const{mapImageConversionToolState:e,viewModel:{state:t},invalidCameraHeading:i}=this;return G("calcite-action",{active:e,afterCreate:this._storeActionElement,bind:this,disabled:"image-loaded"!==t||i,icon:"image-pin",onclick:this._toggleMapImageConversionToolState,text:this.messages.mapImageConversionTool})}_renderNavigation(){const{viewModel:{sectorData:e,navigatorCurrentBestFeature:i,currentBestFeature:a,state:s}}=this;if(!this.container||!a)return null;let r,o,n,l,c;if(i){const{x:e,y:t,direction:a}=i,[s,d,h,g]=C[a];r=`M ${e} ${t} L ${s} ${d} A ${f[2]} ${f[2]} 0 0 1 ${h} ${g} Z`,o=e,l=t,n=C[a][4],c=C[a][5]}const d=e=>{const t=e.target.dataset?.sector;t&&this.viewModel.handleSectorClick(+t)},h=e=>{const t=e.target.dataset;if(!t)return;const{featureIndexInSector:i,sector:a}=t;i&&a&&this.viewModel.handleFeatureClick({sector:a,featureIndexInSector:+i})},g=e=>{e.removeEventListener("click",h)},m=a.attributes.objectId,v=e?.map((e=>e?.items)).filter(Boolean).flatMap((e=>e?.map((({x:e,y:t,objectID:i,featureIndexInSector:a,sector:s})=>G("circle",{afterRemoved:g,class:this.classes(A.feature,{selected:m===i}),cx:e,cy:t,"data-feature-index-in-sector":a,"data-sector":s,key:`${A.feature}-${i}`,onclick:h,r:I}))))),p=e=>{e.removeEventListener("click",d)},u=this.classes({[A.navigationWrapper]:!0,[A.navigationZoomed]:this._navigationToolExpanded});return this.navigationToolActive&&"image-loaded"===s?G("div",{bind:this,class:u,key:this.messages.navigationTool},G("svg",{afterCreate:e=>this._storeNavigationToolReference(e),class:t()?T:A.rotateWithAnimation,focusable:"false",height:O,role:"img",width:O,xmlns:"http://www.w3.org/2000/svg"},G("defs",null,G("linearGradient",{gradientUnits:"userSpaceOnUse",id:`${this.id}-coverage-fill`,x1:o,x2:n,y1:l,y2:c},G("stop",{class:A.navigationPathOffset0,offset:0}),G("stop",{class:A.navigationPathOffset1,offset:1}))),G("g",null,G("circle",{class:this.classes(A.sector,A.outerSector),cx:f[3],cy:f[3],onclick:this._scaleNavigationTool,r:f[3]}),G("circle",{class:A.sector,cx:f[3],cy:f[3],r:f[2]}),G("circle",{class:A.sector,cx:f[3],cy:f[3],r:f[1]}),G("circle",{class:A.sector,cx:f[3],cy:f[3],r:f[0]}),G("path",{class:A.pointer,d:"M 56.5 6.06217782649107 L 60 0 L 63.5 6.06217782649107 Z",key:`${A.pointer}-west`}),G("path",{class:this.classes(A.pointer,A.north),d:"M 113.93782217350893 56.5 L 120 60 L 113.93782217350893 63.5 Z",key:`${A.pointer}-north`}),G("path",{class:A.pointer,d:"M 56.5 113.93782217350893 L 60 120 L 63.5 113.93782217350893 Z",key:`${A.pointer}-east`}),G("path",{class:A.pointer,d:"M 6.06217782649107 56.5 L 0 60 L 6.06217782649107 63.5 Z",key:`${A.pointer}-south`}),G("path",{class:this.classes(A.sector,A.sectorSeparator),d:"M 23.937554159486076 23.937554159486076 L 96.06244584051393 96.06244584051393 M 23.937554159486076 96.06244584051393 L 96.06244584051393 23.937554159486076",key:A.sectorSeparator}),M([f[2],f[1],f[0]],f[3],f[3]).map(((t,i)=>G("path",{afterRemoved:p,class:this.classes(A.sector,e?.[i]?.length?A.sectorEnabled:A.sectorDisabled),d:t,"data-sector":`${i}`,key:`${A.sector}-${i}`,onclick:d}))),G("path",{class:this.classes(A.sector,A.sectorCross),d:"M 56.4 56.4 L 63.53 63.53 M 63.53 56.4 L 56.4 63.53",key:A.sectorCross}),v,a.attributes.cameraPitch>=5&&r?G("path",{class:A.selectedFeaturePath,d:r,fill:`url(#${this.id}-coverage-fill)`,key:A.selectedFeaturePath}):null))):null}_renderNavigationToolAction(){const{state:e}=this.viewModel;return G("calcite-action",{active:this.navigationToolActive,afterCreate:this._storeActionElement,bind:this,disabled:"image-loaded"!==e||this.invalidCameraHeading,icon:"explore",onclick:this._toggleNavigationTool,text:this.messages.navigationTool})}_renderMenuBarContainer(){const{currentCoverageVisible:e,isAdditionalCoverageVisible:t,isAdditionalPointSourcesVisible:i,imageGalleryEnabled:a,invalidCameraHeading:s}=this;return G("calcite-action-bar",{expandDisabled:!0,layout:"horizontal",slot:"action-bar"},G("calcite-action-group",null,G("calcite-action",{active:e,afterCreate:this._storeActionElement,bind:this,class:A.currentCoverage,disabled:s,icon:"trapezoid-area",onclick:this._toggleCurrentCoverage,text:this.messages.currentFootprint}),G("calcite-action",{active:t,afterCreate:this._storeActionElement,bind:this,class:A.addCoverage,disabled:s,icon:"trapezoid-area",onclick:this._toggleAdditionalCoverage,text:this.messages.additionalFootprints}),G("calcite-action",{active:i,afterCreate:this._storeActionElement,bind:this,class:A.addExpPoints,disabled:s,icon:"circle-area",onclick:this._toggleAdditionalCameraLocations,text:this.messages.additionalCameraLocations})),G("calcite-action-group",null,this.visibleElements.mapImageConversionTool?this._renderMapImageConversionTool():null,this.visibleElements.navigationTool?this._renderNavigationToolAction():null,this.visibleElements.imageEnhancement?this._renderImageEnhancementAction():null),G("calcite-action-group",null,G("calcite-action",{active:this.galleryOpened,afterCreate:this._storeActionElement,bind:this,disabled:!a||s,icon:"images",onclick:this._toggleImageGallery,text:this.messages.imageGallery}),this.visibleElements.imageOverlays?this._renderImageOverlaysAction():null,this.visibleElements.showPopupsAction?this._renderPopupAction():null),this._renderActionTooltips())}_renderMessageBox(){const{messages:e,viewModel:{displayMessage:t}}=this;if(!t)return null;const{data:i,key:a,map:s}=t,r=`${s?B(e[a],s):e[a]}`;return G("span",{class:A.messageBox},i?`${r} ${i}`:r)}_renderPopupAction(){return G("calcite-action",{afterCreate:this._storeActionElement,bind:this,disabled:!this.popupEnabled,icon:"popup",onclick:this._toggleImageAttributes,text:this.messages.showPopups,textEnabled:!0})}_renderThumbnails(e){const{currentBestFeature:t}=this.viewModel;return t?G("div",{class:A.carouselContent},e.items.map((({url:e,objectId:i,rotation:a},s)=>G("div",{class:`${A.carouselItemWrapper}${t.attributes.objectId===i?"--selected":""}`,key:`${A.carouselItemWrapper}-${s}`},G("canvas",{afterCreate:this._registerGalleryItem,afterRemoved:this._unregisterGalleryItem,alt:`thumbnail-${i}`,class:A.carouselItem,"data-objectid":`${i}`,"data-rotation":`${a}`,"data-src":e,onclick:this._loadImageFromGallery,onmouseenter:this._highlight,onmouseleave:this._removeHighlight}))))):null}_renderViewerContainer(){return G("div",{class:A.viewerContainer},this._renderImageViewer(),this._renderPanoramicViewer(),this._renderMessageBox())}_renderImageViewer(){const{displayMessage:e,loadImageViewer:t,mode:i}=this.viewModel,a=null!=e||"default"!==i,s=this.classes({[A.viewer]:!a,[A.viewerHidden]:a});return G("calcite-panel",{afterCreate:t,bind:this,class:s})}_renderPanoramicViewer(){const{displayMessage:e,loadPanoramicViewer:t,mode:i}=this.viewModel,a=null!=e||"panoramic"!==i,s=this.classes({[A.viewer]:!a,[A.viewerHidden]:a});return G("calcite-panel",{afterCreate:t,bind:this,class:s})}_resetImageTools(){this.viewModel.sharpness=this.viewModel.brightness=this.viewModel.contrast=0}_storeActionElement(e){this._actionItems.set(e.text,e)}_storeNavigationToolReference(e){this._navigationTool=e}_storeWarningTitleElement(e){this._warningTitleElement=e}_toggleAdditionalCameraLocations(){this.isAdditionalPointSourcesVisible=!this.isAdditionalPointSourcesVisible}_toggleAdditionalCoverage(){this.isAdditionalCoverageVisible=!this.isAdditionalCoverageVisible}_toggleCurrentCoverage(){this.currentCoverageVisible=!this.currentCoverageVisible}_toggleImageEnhancementToolState(e){e.stopPropagation(),this.imageEnhancementToolActive=!this.imageEnhancementToolActive,this.imageEnhancementToolActive&&(this.galleryOpened&&(this.galleryOpened=!1),this.navigationToolActive&&(this.navigationToolActive=!1),this.imageOverlaysOpened&&(this.imageOverlaysOpened=!1))}_toggleImageOverlays(e){e.stopPropagation(),this.imageOverlaysOpened=!this.imageOverlaysOpened,this.imageOverlaysOpened&&(this.galleryOpened&&(this.galleryOpened=!1),this.navigationToolActive&&(this.navigationToolActive=!1),this.imageEnhancementToolActive&&(this.imageEnhancementToolActive=!1))}_toggleImageGallery(e){e.stopPropagation(),this.galleryOpened=!!this.imageGalleryEnabled&&!this.galleryOpened,this.galleryOpened&&(this.imageEnhancementToolActive&&(this.imageEnhancementToolActive=!1),this.navigationToolActive&&(this.navigationToolActive=!1),this.imageOverlaysOpened&&(this.imageOverlaysOpened=!1))}_toggleNavigationTool(){this.navigationToolActive=!this.navigationToolActive,this.navigationToolActive&&(this.galleryOpened&&(this.galleryOpened=!1),this.imageEnhancementToolActive&&(this.imageEnhancementToolActive=!1),this.imageOverlaysOpened&&(this.imageOverlaysOpened=!1))}_toggleMapImageConversionToolState(){this.mapImageConversionToolState=!this.mapImageConversionToolState}_unregisterGalleryItem(e){this._galleryObserver.unobserve(e)}_updateNavigationTool(e){const{previousFeatureAngle:t,bestFeatureAngle:i}=this.viewModel,a=(i-t+540)%360-180;e.style.setProperty(E,`${t}deg`),e.style.setProperty(k,`${t+a}deg`)}getConvertedAreaMeasurement(){const{viewModel:{areaMeasurementResult:e},measurementUnitMessages:t,pixelAreaMeasurementUnit:i,messages:{startMeasurement:a}}=this;return i&&e?o(t,l(e,"square-meters"),i):a}getConvertedMeasurement(){const{viewModel:{distanceMeasurementResult:e},measurementUnitMessages:t,pixelMeasurementUnit:i,messages:{startMeasurement:a}}=this;return i&&e?n(t,c(e,"meters"),i):a}async loadBestImage(e){return this.viewModel.loadBestImage(e)}loadImageFromSource(e,t){return this.viewModel.loadImageFromSource(e,t)}async plotMapPoint(e){return this.viewModel.plotMapPoint(e)}plotReferencePointOnGround(e){this.viewModel.plotReferencePointOnGround(e)}plotReferencePointOnImage(e){this.viewModel.plotReferencePointOnImage(e)}resetImage(){this.viewModel.resetImage()}render(){const{viewModel:{state:e}}=this;return G("div",{class:this.classes(j.widget,V)},G("calcite-panel",{bind:this,heading:this.visibleElements.title?this.messages.title:void 0,loading:"image-loading"===e},this.visibleElements.coverageMenu?this._renderMenuBarContainer():null,this._renderBody()))}updateSuitabilities(e){this.viewModel.updateSuitabilities(e)}};e([p()],U.prototype,"activeLayer",null),e([p()],U.prototype,"currentBestFeature",null),e([p()],U.prototype,"currentCoverageVisible",null),e([p()],U.prototype,"digitizationLayer",null),e([p()],U.prototype,"disabled",null),e([p()],U.prototype,"features",null),e([p()],U.prototype,"imagePointsInView",null),e([p()],U.prototype,"galleryOpened",void 0),e([p()],U.prototype,"icon",null),e([p()],U.prototype,"imageEnhancementToolActive",void 0),e([p({readOnly:!0})],U.prototype,"imageGalleryEnabled",null),e([p()],U.prototype,"imageOverlaysOpened",void 0),e([p({readOnly:!0})],U.prototype,"invalidCameraHeading",null),e([p()],U.prototype,"isAdditionalCoverageVisible",null),e([p()],U.prototype,"isAdditionalPointSourcesVisible",null),e([p()],U.prototype,"mapImageConversionToolState",null),e([p()],U.prototype,"layer",null),e([p()],U.prototype,"listItemCreatedFunction",null),e([p()],U.prototype,"navigationToolActive",void 0),e([p()],U.prototype,"onOverlayAction",void 0),e([p({type:L})],U.prototype,"viewModel",void 0),e([p(),$("esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer")],U.prototype,"messages",void 0),e([p(),$("esri/core/t9n/Units")],U.prototype,"measurementUnitMessages",void 0),e([p(),$("esri/t9n/common")],U.prototype,"messagesCommon",void 0),e([p(),$("esri/widgets/Sketch/t9n/Sketch")],U.prototype,"messagesSketch",void 0),e([p()],U.prototype,"pixelMeasurementUnit",void 0),e([p()],U.prototype,"pixelAreaMeasurementUnit",void 0),e([p({readOnly:!0})],U.prototype,"popupEnabled",null),e([p()],U.prototype,"referencePoint",null),e([H(["create","delete","redo","undo","update"]),p({readOnly:!0})],U.prototype,"sketchViewModel",null),e([p()],U.prototype,"view",null),e([p({type:x,nonNullable:!0})],U.prototype,"visibleElements",void 0),e([p()],U.prototype,"determineWorkflowForFeature",null),e([p()],U.prototype,"updateFootprint",null),e([p()],U.prototype,"_currentAction",void 0),e([p()],U.prototype,"_navigationToolExpanded",void 0),e([p()],U.prototype,"_navigationTool",void 0),e([p()],U.prototype,"_imageOverlays",void 0),e([p()],U.prototype,"_warningTitleElement",void 0),U=e([u("esri.widgets.OrientedImageryViewer")],U);const z=U;export{z as default};
5
+ import{_ as e}from"../chunks/tslib.es6.js";import"../intl.js";import{prefersReducedMotion as t}from"../core/a11yUtils.js";import i from"../core/Collection.js";import{deprecatedProperty as a}from"../core/deprecate.js";import s from"../core/Logger.js";import{deg2rad as o}from"../core/mathUtils.js";import{formatArea as r,formatLength as n}from"../core/quantityFormatUtils.js";import{createArea as l,createLength as c}from"../core/quantityUtils.js";import{watch as d,initial as h,syncAndInitial as g,whenOnce as m}from"../core/reactiveUtils.js";import{property as p}from"../core/accessorSupport/decorators/property.js";import"../core/has.js";import"../core/RandomLCG.js";import{subclass as v}from"../core/accessorSupport/decorators/subclass.js";import{rotatePixel as u}from"../layers/orientedImagery/transformations/utils.js";import y from"../layers/support/rasterDatasets/RasterFactory.js";import w from"../support/actions/ActionToggle.js";import _ from"./Widget.js";import{getAllArcPath as b}from"./OrientedImageryViewer/arcUtils.js";import{segmentArcs as M,sectorsRadii as C,featureCircleRadius as I,navigationToolDimensionLength as f}from"./OrientedImageryViewer/constants.js";import{css as A,navigation as O,navigationToolRotationFrom as T,navigationToolRotationTo as F,root as E}from"./OrientedImageryViewer/css.js";import{isValidDigitizationLayer as L}from"./OrientedImageryViewer/digitizationUtils.js";import V from"./OrientedImageryViewer/OrientedImageryViewerViewModel.js";import k from"./OrientedImageryViewer/OrientedImageryViewerVisibleElements.js";import S from"./OrientedImageryViewer/components/ImageOverlays.js";import{loadCalciteComponents as x}from"./support/componentsUtils.js";import{globalCss as P}from"./support/globalCss.js";import"./support/widgetUtils.js";import{messageBundle as j}from"./support/decorators/messageBundle.js";import{vmEvent as $}from"./support/decorators/vmEvent.js";import{tsx as G}from"./support/jsxFactory.js";import{substitute as B}from"../intl/substitute.js";const R={overlayMapFeatures:"overlay-map-features",overlayed:"overlayed",overlaysActionHandles:"overlays-action-handles"};let U=class extends _{constructor(e,t){super(e,t),this.galleryOpened=!1,this.imageEnhancementToolActive=!1,this.imageOverlaysOpened=!1,this.navigationToolActive=!1,this.onOverlayAction=e=>{this._onOverlayAction(e)},this.viewModel=new V,this.messagesCommon=null,this.messagesSketch=null,this.pixelMeasurementUnit="meters",this.pixelAreaMeasurementUnit="square-meters",this.showCameraLocations=!1,this.showMapFeatures=!1,this.visibleElements=new k,this._currentAction=null,this._navigationToolExpanded=!1,this._navigationTool=null,this._warningTitleElement=null,this._actionItems=new Map,this._galleryController=new AbortController,this._galleryObserver=new IntersectionObserver(this._lazyLoadImage.bind(this)),this._overlayedLayers=new i,this._handleOverlayLayerDeselect=e=>{const t=e.layer;this.viewModel.removeOverlayedGraphicsOnImage(`${t.id}`),this.removeHandles(`${R.overlayed}-${t.id}`)},this._handleOverlayLayerSelect=e=>{const t=e.layer;this.viewModel.overlayMapFeatures(t,this.showMapFeatures),this.addHandles(d((()=>t.visible),(()=>{this.viewModel.toggleOverlayMapFeatures(t.id,t.visible)})),`${R.overlayed}-${t.id}`)},this._highlight=e=>{const t=e.target?.dataset.objectid;t&&this.viewModel.highlight(t)},this._onDeleteFeatures=()=>{this.sketchViewModel?.delete()},this._onImageOverlayClosed=()=>{this.imageOverlaysOpened=!1},this._onOverlayAction=async({action:e,item:t})=>{switch(this._currentAction&&this._currentAction!==e&&(this._currentAction.value=!1,this._currentAction=null),e.id){case"create-features":this._currentAction=e;e.value?(this.digitizationLayer=t.layer,await this.viewModel.loadDigitizationAdapter(),this.viewModel.activeViewer?.imageRenderer.map.add(this.viewModel.sketch.layer,this.viewModel.activeViewer?.imageRenderer.map.allLayers.length-1),this.sketchViewModel?.updateGraphics.removeAll(),this.sketchViewModel?.create(this.digitizationLayer.geometryType)):(this.sketchViewModel?.updateGraphics.removeAll(),this.viewModel.activeViewer?.imageRenderer.map.remove(this.viewModel.sketch.layer),this.digitizationLayer=null);break}},this._onSaveFeatures=()=>{this.viewModel.sketchAdapter?.save?.()},this._onSelectFeatures=e=>{const{sketchViewModel:t}=this;t&&(t.updateOnGraphicClick=e,this.sketchViewModel?.cancel())},this._onShowCameraLocationsChanged=e=>{this.showCameraLocations=e},this._onShowMapFeaturesChanged=e=>{this.showMapFeatures=e},this._overlayLayerListItemCreatedFunction=async e=>{const{item:t}=e,a=t.layer;if(await(a?.load()),!a||!L(a))return;const s=new i,o=new i;s.add(new w({icon:"polyline"===a.geometryType?"line":a.geometryType,id:"create-features",title:this.messages.addOrUpdateDigitizationFeatures})),t.actionsSections=new i([s,o])},this._removeHighlight=()=>this.viewModel.removeHighlight(),this._scaleNavigationTool=()=>{this._navigationToolExpanded=!this._navigationToolExpanded},this._toggleImageAttributes=()=>{this.viewModel.toggleImageAttributes()},this._loadImageFromGallery=this._loadImageFromGallery.bind(this),this._registerGalleryItem=this._registerGalleryItem.bind(this),this._unregisterGalleryItem=this._unregisterGalleryItem.bind(this),this.loadImageFromSource=this.loadImageFromSource.bind(this),this.updateSuitabilities=this.updateSuitabilities.bind(this)}initialize(){this.addHandles([d((()=>[this.viewModel?.bestFeatureAngle,this._navigationTool]),(([e,t])=>{t&&this._updateNavigationTool(t)}),h),d((()=>this.currentCoverageVisible),(e=>this._onCurrentCoverageVisibilityChange(e))),d((()=>this.isAdditionalCoverageVisible),(e=>this._onAdditionalCoverageVisibilityChange(e))),d((()=>this.isAdditionalPointSourcesVisible),(e=>this._onAdditionalCameraLocationsVisibility(e))),d((()=>({features:this.currentBestFeature,showCameraLocations:this.showCameraLocations,state:this.viewModel.state})),(({showCameraLocations:e,state:t})=>{"image-loaded"===t&&this.viewModel.overlayCameraLocations(e)}),g),d((()=>({feature:this.currentBestFeature,showMapFeatures:this.showMapFeatures,state:this.viewModel.state})),((e,t)=>{e.showMapFeatures!==t?.showMapFeatures&&this.viewModel.toggleAllOverlayMapFeatures(e.showMapFeatures),null!=e.feature&&e.feature!==t?.feature&&m((()=>"image-loaded"===this.viewModel.state)).then((()=>{this.viewModel.removeAllOverlayMapFeatures(),this._overlayedLayers?.forEach((t=>{this.viewModel.overlayMapFeatures(t,e.showMapFeatures)}))}))}),h)])}loadDependencies(){return x({"action-bar":()=>import("@esri/calcite-components/dist/components/calcite-action-bar"),"action-group":()=>import("@esri/calcite-components/dist/components/calcite-action-group"),action:()=>import("@esri/calcite-components/dist/components/calcite-action"),label:()=>import("@esri/calcite-components/dist/components/calcite-label"),notice:()=>import("@esri/calcite-components/dist/components/calcite-notice"),panel:()=>import("@esri/calcite-components/dist/components/calcite-panel"),slider:()=>import("@esri/calcite-components/dist/components/calcite-slider"),tooltip:()=>import("@esri/calcite-components/dist/components/calcite-tooltip")})}destroy(){this._galleryController.abort(),this._galleryObserver.disconnect()}get activeLayer(){return a(s.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer}set activeLayer(e){a(s.getLogger(this),"activeLayer",{replacement:"layer"}),this.layer=e}get currentBestFeature(){return this.viewModel.currentBestFeature}set currentBestFeature(e){this.viewModel.currentBestFeature=e}get currentCoverageVisible(){return this.viewModel.currentCoverageVisible}set currentCoverageVisible(e){this.viewModel.currentCoverageVisible=e}get digitizationLayer(){return this.viewModel.digitizationLayer}set digitizationLayer(e){this.viewModel.digitizationLayer=e}get disabled(){return this.viewModel.disabled}set disabled(e){this.viewModel.disabled=e}get displayMessage(){return this.viewModel.displayMessage}get features(){return this.viewModel.features}get imagePointsInView(){return this.viewModel.imagePointsInView}get icon(){return"oriented-imagery-widget"}set icon(e){this._overrideIfSome("icon",e)}get imageGalleryEnabled(){return this.viewModel.imageGalleryEnabled}get invalidCameraHeading(){return this.viewModel.invalidCameraHeading}get isAdditionalCoverageVisible(){return this.viewModel.isAdditionalCoverageVisible}set isAdditionalCoverageVisible(e){this.viewModel.isAdditionalCoverageVisible=e}get isAdditionalPointSourcesVisible(){return this.viewModel.isAdditionalPointSourcesVisible}set isAdditionalPointSourcesVisible(e){this.viewModel.isAdditionalPointSourcesVisible=e}get mapImageConversionToolState(){return this.viewModel.mapImageConversionToolState}set mapImageConversionToolState(e){this.viewModel.mapImageConversionToolState=e}get layer(){return this.viewModel.layer}set layer(e){this.viewModel.layer=e}get listItemCreatedFunction(){return this._get("listItemCreatedFunction")??this._overlayLayerListItemCreatedFunction}set listItemCreatedFunction(e){this._set("listItemCreatedFunction",e)}get popupEnabled(){const{popupEnabled:e,state:t}=this.viewModel;return"image-loaded"===t&&e}get referencePoint(){return this.viewModel.referencePoint??null}get sketchViewModel(){return this.viewModel.sketch}get view(){return this.viewModel.view}set view(e){this.viewModel.view=e}set determineWorkflowForFeature(e){this.viewModel.determineWorkflowForFeature=e}get determineWorkflowForFeature(){return this.viewModel.determineWorkflowForFeature}set updateFootprint(e){this.viewModel.updateFootprint=e}get updateFootprint(){return this.viewModel.updateFootprint}get _imageOverlayMessages(){return{...this.messages,...this.messagesSketch}}async _getThumbnailPixelBlockInternal(e,t){const{level:i,offset:a,size:o}=this._getMaxLevelRasterParameters(e);try{const{pixelBlock:s}=await e.fetchRawPixels(i,a,o,t);return s}catch(r){s.getLogger(this).warn("failed to create canvas with pixel data",r)}return null}_getMaxLevelRasterParameters(e){const{storageInfo:t,width:i,height:a}=e.rasterInfo,{maximumPyramidLevel:s,pyramidScalingFactor:o}=t,r=o??2;return{level:s,offset:{x:0,y:0},size:{width:Math.ceil(i/r**s),height:Math.ceil(a/r**s)}}}async _getThumbnailPixelBlock(e){const{signal:t}=this._galleryController;try{const{origin:i,pathname:a,searchParams:s}=new URL(e),o=await y.open({ioConfig:{customFetchParameters:Object.fromEntries(s),skipMapInfo:!0},url:`${i}${a}`,signal:t});return o?await this._getThumbnailPixelBlockInternal(o,{signal:t}):null}catch(i){s.getLogger(this).error("failed to create thumbnail",i)}return null}_handleBrightnessChange(e){this.viewModel.brightness=e.currentTarget.value??0}_handleContrastChange(e){this.viewModel.contrast=e.currentTarget.value??0}_handleSharpnessChange(e){this.viewModel.sharpness=e.currentTarget.value??0}_lazyLoadImage(e,t){e.forEach((async e=>{if(e.isIntersecting){const i=e.target,a=i.getAttribute("data-src"),r=i.getAttribute("data-rotation"),n=r?parseFloat(r)%360:null;if(!a)return;const l=await this._getThumbnailPixelBlock(a);if(!l)return;i.width=l.width,i.height=l.height;const c=i.getContext("2d");if(!c)return;const d=c.createImageData(i.width,i.height);if(d.data.set(l.getAsRGBA()),"number"==typeof n&&0!==n){const e=o(n),a=document.createElement("canvas"),r=a.getContext("2d");if(r){a.width=d.width,a.height=d.height,r.putImageData(d,0,0);const s=u(0,0,e),o=u(d.width,0,e),n=u(d.width,d.height,e),l=u(0,d.height,e),h=Math.max(s[0],o[0],n[0],l[0])-Math.min(s[0],o[0],n[0],l[0]),g=Math.max(s[1],o[1],n[1],l[1])-Math.min(s[1],o[1],n[1],l[1]),m=Math.min(i.width/h,i.height/g);return c.save(),c.clearRect(0,0,i.width,i.height),c.translate(i.width/2,i.height/2),c.rotate(e),c.scale(m,m),c.drawImage(a,-d.width/2,-d.height/2,d.width,d.height),c.restore(),t.unobserve(i)}s.getLogger(this).warn("oriented-imagery-viewer:image-gallery","failed to apply rotation on thumbnail")}c.putImageData(d,0,0),t.unobserve(i)}}))}_loadImageFromGallery(e){const{target:t}=e;if(!t)return;const i=t.getAttribute("data-objectid");i&&this.viewModel.currentBestFeature?.attributes.objectId!==Number(i)&&this.viewModel.selectBestFeature(i)}_onAdditionalCoverageVisibilityChange(e){this.viewModel.setAdditionalCoverageVisibility(e)}_onAdditionalCameraLocationsVisibility(e){this.viewModel.setAdditionalCameraLocationsVisibility(e)}_onCurrentCoverageVisibilityChange(e){this.viewModel.setCurrentCoverageVisibility(e)}_registerGalleryItem(e){this._galleryObserver.observe(e)}_renderActionTooltips(){return[...this._actionItems].map((([e,t])=>G("calcite-tooltip",{key:e,referenceElement:t},G("span",null,e))))}_renderBody(){return G("div",{class:A.body},this._renderViewerContainer,this.invalidCameraHeading?[this._renderWarning(this.messages.invalidCameraHeadingWarningTitle),this._renderWarningTooltip(this.messages.invalidCameraHeadingWarningDescription)]:[this._renderImageGallery,this._renderNavigation,this._renderImageOverlays],this._renderImageEnhancementTools)}_renderImageEnhancementAction(){const{state:e,mode:t}=this.viewModel;return G("calcite-action",{active:this.imageEnhancementToolActive,afterCreate:this._storeActionElement,bind:this,disabled:"default"!==t||"image-loaded"!==e,icon:"sliders-horizontal",onclick:this._toggleImageEnhancementToolState,text:this.messages.imageEnhancement})}get _renderImageEnhancementTools(){const{imageEnhancementToolActive:e,viewModel:{brightness:t,contrast:i,sharpness:a,state:s}}=this;return e&&"image-loaded"===s?G("calcite-panel",{bind:this,class:A.imageEnhancementWrapper,closable:!0,closed:!e,heading:this.messages.imageEnhancement,key:this.messages.imageEnhancement,onCalcitePanelClose:this._toggleImageEnhancementToolState},G("div",{class:A.imageEnhancementTools},G("div",{class:A.imageEnhancementToolContainer},G("calcite-label",null,this.messages.brightness,G("calcite-slider",{bind:this,labelTicks:!0,max:10,min:-10,ticks:5,value:t,onCalciteSliderInput:this._handleBrightnessChange}))),G("div",{class:A.imageEnhancementToolContainer},G("calcite-label",null,this.messages.contrast,G("calcite-slider",{bind:this,labelTicks:!0,max:10,min:-10,ticks:5,value:i,onCalciteSliderInput:this._handleContrastChange}))),G("div",{class:A.imageEnhancementToolContainer},G("calcite-label",null,this.messages.sharpness,G("calcite-slider",{bind:this,labelTicks:!0,max:1,min:0,step:.1,ticks:.5,value:a,onCalciteSliderInput:this._handleSharpnessChange})))),G("calcite-action",{bind:this,icon:"reset",onclick:this._resetImageTools,slot:"header-actions-end",text:this.messagesCommon.reset})):null}get _renderImageGallery(){const{container:e,galleryOpened:t,imageGalleryEnabled:i,viewModel:{thumbnails:a},invalidCameraHeading:s}=this;return i&&t&&(e&&a)?G("calcite-panel",{bind:this,class:A.carousel,closable:!0,closed:!t,disabled:s,heading:this.messages.imageGallery,key:this.messages.imageGallery,onCalcitePanelClose:this._toggleImageGallery},G("div",{class:A.carouselContainer},this._renderThumbnails(a))):null}_renderImageOverlaysAction(){const{viewModel:{state:e},imageOverlaysOpened:t,invalidCameraHeading:i}=this;return G("calcite-action",{active:t,afterCreate:this._storeActionElement,bind:this,disabled:"image-loaded"!==e||i,icon:"layers",onclick:this._toggleImageOverlays,text:this.messages.imageOverlays})}get _renderImageOverlays(){const{imageOverlaysOpened:e,viewModel:{state:t}}=this;if(e&&"image-loaded"===t)return G("div",{class:A.imageOverlaysContainer,key:this.messages.imageOverlays},this._renderImageOverlaysComponent)}get _renderImageOverlaysComponent(){return G(S,{closed:!this.imageOverlaysOpened,listItemCreatedFunction:this.listItemCreatedFunction,messages:this._imageOverlayMessages,overlayedLayers:this._overlayedLayers,showCameraLocations:this.showCameraLocations,showMapFeatures:this.showMapFeatures,view:this.view,onDeleteFeatures:this._onDeleteFeatures,onImageOverlaysClosed:this._onImageOverlayClosed,onLayerDeselected:this._handleOverlayLayerDeselect,onLayerSelected:this._handleOverlayLayerSelect,onListItemAction:this._onOverlayAction,onSaveFeatures:this._onSaveFeatures,onSelectFeatures:this._onSelectFeatures,onShowCameraLocationsChanged:this._onShowCameraLocationsChanged,onShowMapFeaturesChanged:this._onShowMapFeaturesChanged})}_renderWarning(e){const{invalidCameraHeading:t,viewModel:{state:i}}=this;return t&&"image-loaded"===i?[G("calcite-notice",{class:A.alert,closable:!0,icon:"exclamation-mark-triangle-f",iconFlipRtl:!0,kind:"warning",open:!0,scale:"s"},G("div",{afterCreate:e=>this._storeWarningTitleElement(e),slot:"title"},e))]:null}_renderWarningTooltip(e){const{_warningTitleElement:t}=this;if(e?.length&&t)return G("calcite-tooltip",{closeOnClick:!0,referenceElement:t},e)}_renderMapImageConversionTool(){const{mapImageConversionToolState:e,viewModel:{state:t},invalidCameraHeading:i}=this;return G("calcite-action",{active:e,afterCreate:this._storeActionElement,bind:this,disabled:"image-loaded"!==t||i,icon:"image-pin",onclick:this._toggleMapImageConversionToolState,text:this.messages.mapImageConversionTool})}get _renderNavigation(){const{viewModel:{sectorData:e,navigatorCurrentBestFeature:i,currentBestFeature:a,state:s}}=this;if(!this.container||!a)return null;let o,r,n,l,c;if(i){const{x:e,y:t,direction:a}=i,[s,d,h,g]=M[a];o=`M ${e} ${t} L ${s} ${d} A ${C[2]} ${C[2]} 0 0 1 ${h} ${g} Z`,r=e,l=t,n=M[a][4],c=M[a][5]}const d=e=>{const t=e.target.dataset?.sector;t&&this.viewModel.handleSectorClick(+t)},h=e=>{const t=e.target.dataset;if(!t)return;const{featureIndexInSector:i,sector:a}=t;i&&a&&this.viewModel.handleFeatureClick({sector:a,featureIndexInSector:+i})},g=e=>{e.removeEventListener("click",h)},m=a.attributes.objectId,p=e?.map((e=>e?.items)).filter(Boolean).flatMap((e=>e?.map((({x:e,y:t,objectID:i,featureIndexInSector:a,sector:s})=>G("circle",{afterRemoved:g,class:this.classes(A.feature,{selected:m===i}),cx:e,cy:t,"data-feature-index-in-sector":a,"data-sector":s,key:`${A.feature}-${i}`,onclick:h,r:I}))))),v=e=>{e.removeEventListener("click",d)},u=this.classes({[A.navigationWrapper]:!0,[A.navigationZoomed]:this._navigationToolExpanded});return this.navigationToolActive&&"image-loaded"===s?G("div",{bind:this,class:u,key:this.messages.navigationTool},G("svg",{afterCreate:e=>this._storeNavigationToolReference(e),class:t()?O:A.rotateWithAnimation,focusable:"false",height:f,role:"img",width:f,xmlns:"http://www.w3.org/2000/svg"},G("defs",null,G("linearGradient",{gradientUnits:"userSpaceOnUse",id:`${this.id}-coverage-fill`,x1:r,x2:n,y1:l,y2:c},G("stop",{class:A.navigationPathOffset0,offset:0}),G("stop",{class:A.navigationPathOffset1,offset:1}))),G("g",null,G("circle",{class:this.classes(A.sector,A.outerSector),cx:C[3],cy:C[3],onclick:this._scaleNavigationTool,r:C[3]}),G("circle",{class:A.sector,cx:C[3],cy:C[3],r:C[2]}),G("circle",{class:A.sector,cx:C[3],cy:C[3],r:C[1]}),G("circle",{class:A.sector,cx:C[3],cy:C[3],r:C[0]}),G("path",{class:A.pointer,d:"M 56.5 6.06217782649107 L 60 0 L 63.5 6.06217782649107 Z",key:`${A.pointer}-west`}),G("path",{class:this.classes(A.pointer,A.north),d:"M 113.93782217350893 56.5 L 120 60 L 113.93782217350893 63.5 Z",key:`${A.pointer}-north`}),G("path",{class:A.pointer,d:"M 56.5 113.93782217350893 L 60 120 L 63.5 113.93782217350893 Z",key:`${A.pointer}-east`}),G("path",{class:A.pointer,d:"M 6.06217782649107 56.5 L 0 60 L 6.06217782649107 63.5 Z",key:`${A.pointer}-south`}),G("path",{class:this.classes(A.sector,A.sectorSeparator),d:"M 23.937554159486076 23.937554159486076 L 96.06244584051393 96.06244584051393 M 23.937554159486076 96.06244584051393 L 96.06244584051393 23.937554159486076",key:A.sectorSeparator}),b([C[2],C[1],C[0]],C[3],C[3]).map(((t,i)=>G("path",{afterRemoved:v,class:this.classes(A.sector,e?.[i]?.length?A.sectorEnabled:A.sectorDisabled),d:t,"data-sector":`${i}`,key:`${A.sector}-${i}`,onclick:d}))),G("path",{class:this.classes(A.sector,A.sectorCross),d:"M 56.4 56.4 L 63.53 63.53 M 63.53 56.4 L 56.4 63.53",key:A.sectorCross}),p,a.attributes.cameraPitch>=5&&o?G("path",{class:A.selectedFeaturePath,d:o,fill:`url(#${this.id}-coverage-fill)`,key:A.selectedFeaturePath}):null))):null}_renderNavigationToolAction(){const{state:e}=this.viewModel;return G("calcite-action",{active:this.navigationToolActive,afterCreate:this._storeActionElement,bind:this,disabled:"image-loaded"!==e||this.invalidCameraHeading,icon:"explore",onclick:this._toggleNavigationTool,text:this.messages.navigationTool})}_renderMenuBarContainer(){const{currentCoverageVisible:e,isAdditionalCoverageVisible:t,isAdditionalPointSourcesVisible:i,imageGalleryEnabled:a,invalidCameraHeading:s}=this;return G("calcite-action-bar",{expandDisabled:!0,layout:"horizontal",slot:"action-bar"},G("calcite-action-group",null,G("calcite-action",{active:e,afterCreate:this._storeActionElement,bind:this,class:A.currentCoverage,disabled:s,icon:"trapezoid-area",onclick:this._toggleCurrentCoverage,text:this.messages.currentFootprint}),G("calcite-action",{active:t,afterCreate:this._storeActionElement,bind:this,class:A.addCoverage,disabled:s,icon:"trapezoid-area",onclick:this._toggleAdditionalCoverage,text:this.messages.additionalFootprints}),G("calcite-action",{active:i,afterCreate:this._storeActionElement,bind:this,class:A.addExpPoints,disabled:s,icon:"circle-area",onclick:this._toggleAdditionalCameraLocations,text:this.messages.additionalCameraLocations})),G("calcite-action-group",null,this.visibleElements.mapImageConversionTool?this._renderMapImageConversionTool():null,this.visibleElements.navigationTool?this._renderNavigationToolAction():null,this.visibleElements.imageEnhancement?this._renderImageEnhancementAction():null),G("calcite-action-group",null,G("calcite-action",{active:this.galleryOpened,afterCreate:this._storeActionElement,bind:this,disabled:!a||s,icon:"images",onclick:this._toggleImageGallery,text:this.messages.imageGallery}),this.visibleElements.imageOverlays?this._renderImageOverlaysAction():null,this.visibleElements.showPopupsAction?this._renderPopupAction():null),this._renderActionTooltips())}get _renderMessageBox(){const{messages:e,viewModel:{displayMessage:t}}=this;if(!t)return null;const{data:i,key:a,map:s}=t,o=`${s?B(e[a],s):e[a]}`;return G("span",{class:A.messageBox},i?`${o} ${i}`:o)}_renderPopupAction(){return G("calcite-action",{afterCreate:this._storeActionElement,bind:this,disabled:!this.popupEnabled,icon:"popup",onclick:this._toggleImageAttributes,text:this.messages.showPopups,textEnabled:!0})}_renderThumbnails(e){const{currentBestFeature:t}=this.viewModel;return t?G("div",{class:A.carouselContent},e.items.map((({url:e,objectId:i,rotation:a},s)=>G("div",{class:`${A.carouselItemWrapper}${t.attributes.objectId===i?"--selected":""}`,key:`${A.carouselItemWrapper}-${s}`},G("canvas",{afterCreate:this._registerGalleryItem,afterRemoved:this._unregisterGalleryItem,alt:`thumbnail-${i}`,class:A.carouselItem,"data-objectid":`${i}`,"data-rotation":`${a}`,"data-src":e,onclick:this._loadImageFromGallery,onmouseenter:this._highlight,onmouseleave:this._removeHighlight}))))):null}get _renderViewerContainer(){return G("div",{class:A.viewerContainer},this._renderImageViewer,this._renderPanoramicViewer,this._renderMessageBox)}get _renderImageViewer(){const{displayMessage:e,loadImageViewer:t,mode:i}=this.viewModel,a=null!=e||"default"!==i,s=this.classes({[A.viewer]:!a,[A.viewerHidden]:a});return G("calcite-panel",{afterCreate:t,bind:this,class:s})}get _renderPanoramicViewer(){const{displayMessage:e,loadPanoramicViewer:t,mode:i}=this.viewModel,a=null!=e||"panoramic"!==i,s=this.classes({[A.viewer]:!a,[A.viewerHidden]:a});return G("calcite-panel",{afterCreate:t,bind:this,class:s})}_resetImageTools(){this.viewModel.sharpness=this.viewModel.brightness=this.viewModel.contrast=0}_storeActionElement(e){this._actionItems.set(e.text,e)}_storeNavigationToolReference(e){this._navigationTool=e}_storeWarningTitleElement(e){this._warningTitleElement=e}_toggleAdditionalCameraLocations(){this.isAdditionalPointSourcesVisible=!this.isAdditionalPointSourcesVisible}_toggleAdditionalCoverage(){this.isAdditionalCoverageVisible=!this.isAdditionalCoverageVisible}_toggleCurrentCoverage(){this.currentCoverageVisible=!this.currentCoverageVisible}_toggleImageEnhancementToolState(e){e.stopPropagation(),this.imageEnhancementToolActive=!this.imageEnhancementToolActive,this.imageEnhancementToolActive&&(this.galleryOpened&&(this.galleryOpened=!1),this.navigationToolActive&&(this.navigationToolActive=!1),this.imageOverlaysOpened&&(this.imageOverlaysOpened=!1))}_toggleImageOverlays(e){e.stopPropagation(),this.imageOverlaysOpened=!this.imageOverlaysOpened,this.imageOverlaysOpened&&(this.galleryOpened&&(this.galleryOpened=!1),this.navigationToolActive&&(this.navigationToolActive=!1),this.imageEnhancementToolActive&&(this.imageEnhancementToolActive=!1))}_toggleImageGallery(e){e.stopPropagation(),this.galleryOpened=!!this.imageGalleryEnabled&&!this.galleryOpened,this.galleryOpened&&(this.imageEnhancementToolActive&&(this.imageEnhancementToolActive=!1),this.navigationToolActive&&(this.navigationToolActive=!1),this.imageOverlaysOpened&&(this.imageOverlaysOpened=!1))}_toggleNavigationTool(){this.navigationToolActive=!this.navigationToolActive,this.navigationToolActive&&(this.galleryOpened&&(this.galleryOpened=!1),this.imageEnhancementToolActive&&(this.imageEnhancementToolActive=!1),this.imageOverlaysOpened&&(this.imageOverlaysOpened=!1))}_toggleMapImageConversionToolState(){this.mapImageConversionToolState=!this.mapImageConversionToolState}_unregisterGalleryItem(e){this._galleryObserver.unobserve(e)}_updateNavigationTool(e){const{previousFeatureAngle:t,bestFeatureAngle:i}=this.viewModel,a=(i-t+540)%360-180;e.style.setProperty(T,`${t}deg`),e.style.setProperty(F,`${t+a}deg`)}getConvertedAreaMeasurement(){const{viewModel:{areaMeasurementResult:e},measurementUnitMessages:t,pixelAreaMeasurementUnit:i,messages:{startMeasurement:a}}=this;return i&&e?r(t,l(e,"square-meters"),i):a}getConvertedMeasurement(){const{viewModel:{distanceMeasurementResult:e},measurementUnitMessages:t,pixelMeasurementUnit:i,messages:{startMeasurement:a}}=this;return i&&e?n(t,c(e,"meters"),i):a}async loadBestImage(e){return this.viewModel.loadBestImage(e)}loadImageFromSource(e,t){return this.viewModel.loadImageFromSource(e,t)}async plotMapPoint(e){return this.viewModel.plotMapPoint(e)}plotReferencePointOnGround(e){this.viewModel.plotReferencePointOnGround(e)}plotReferencePointOnImage(e){this.viewModel.plotReferencePointOnImage(e)}resetImage(){this.viewModel.resetImage()}render(){const{viewModel:{state:e}}=this;return G("div",{class:this.classes(P.widget,E)},G("calcite-panel",{bind:this,heading:this.visibleElements.title?this.messages.title:void 0,loading:"image-loading"===e},this.visibleElements.coverageMenu?this._renderMenuBarContainer():null,this._renderBody()))}updateSuitabilities(e){this.viewModel.updateSuitabilities(e)}};e([p()],U.prototype,"activeLayer",null),e([p()],U.prototype,"currentBestFeature",null),e([p()],U.prototype,"currentCoverageVisible",null),e([p()],U.prototype,"digitizationLayer",null),e([p()],U.prototype,"disabled",null),e([p()],U.prototype,"features",null),e([p()],U.prototype,"imagePointsInView",null),e([p()],U.prototype,"galleryOpened",void 0),e([p()],U.prototype,"icon",null),e([p()],U.prototype,"imageEnhancementToolActive",void 0),e([p({readOnly:!0})],U.prototype,"imageGalleryEnabled",null),e([p()],U.prototype,"imageOverlaysOpened",void 0),e([p({readOnly:!0})],U.prototype,"invalidCameraHeading",null),e([p()],U.prototype,"isAdditionalCoverageVisible",null),e([p()],U.prototype,"isAdditionalPointSourcesVisible",null),e([p()],U.prototype,"mapImageConversionToolState",null),e([p()],U.prototype,"layer",null),e([p()],U.prototype,"listItemCreatedFunction",null),e([p()],U.prototype,"navigationToolActive",void 0),e([p()],U.prototype,"onOverlayAction",void 0),e([p({type:V})],U.prototype,"viewModel",void 0),e([p(),j("esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer")],U.prototype,"messages",void 0),e([p(),j("esri/core/t9n/Units")],U.prototype,"measurementUnitMessages",void 0),e([p(),j("esri/t9n/common")],U.prototype,"messagesCommon",void 0),e([p(),j("esri/widgets/Sketch/t9n/Sketch")],U.prototype,"messagesSketch",void 0),e([p()],U.prototype,"pixelMeasurementUnit",void 0),e([p()],U.prototype,"pixelAreaMeasurementUnit",void 0),e([p({readOnly:!0})],U.prototype,"popupEnabled",null),e([p()],U.prototype,"referencePoint",null),e([p()],U.prototype,"showCameraLocations",void 0),e([p()],U.prototype,"showMapFeatures",void 0),e([$(["create","delete","redo","undo","update"]),p({readOnly:!0})],U.prototype,"sketchViewModel",null),e([p()],U.prototype,"view",null),e([p({type:k,nonNullable:!0})],U.prototype,"visibleElements",void 0),e([p()],U.prototype,"determineWorkflowForFeature",null),e([p()],U.prototype,"updateFootprint",null),e([p()],U.prototype,"_currentAction",void 0),e([p()],U.prototype,"_imageOverlayMessages",null),e([p()],U.prototype,"_navigationToolExpanded",void 0),e([p()],U.prototype,"_navigationTool",void 0),e([p()],U.prototype,"_warningTitleElement",void 0),e([p()],U.prototype,"_renderImageEnhancementTools",null),e([p()],U.prototype,"_renderImageGallery",null),e([p()],U.prototype,"_renderImageOverlays",null),e([p()],U.prototype,"_renderImageOverlaysComponent",null),e([p()],U.prototype,"_renderNavigation",null),e([p()],U.prototype,"_renderMessageBox",null),e([p()],U.prototype,"_renderViewerContainer",null),e([p()],U.prototype,"_renderImageViewer",null),e([p()],U.prototype,"_renderPanoramicViewer",null),U=e([v("esri.widgets.OrientedImageryViewer")],U);const H=U;export{H as default};