@arcgis/core 4.32.0-next.20241219 → 4.32.0-next.20241220

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/assets/esri/core/workers/RemoteClient.js +1 -1
  2. package/assets/esri/core/workers/chunks/{0da2aaca3f0b4fe910e3.js → 015285436ca965f94e17.js} +1 -1
  3. package/assets/esri/core/workers/chunks/2c084c0c324e3af56424.js +1 -0
  4. package/assets/esri/core/workers/chunks/5a0eb9dfe668cf290462.js +1 -0
  5. package/assets/esri/core/workers/chunks/69efc716991a407c3d23.js +1 -0
  6. package/assets/esri/core/workers/chunks/{fb43c44a7d6b61f31e75.js → 94432e04de01ee7adc0e.js} +1 -1
  7. package/assets/esri/core/workers/chunks/95af4dee29eb196b8ada.js +1 -0
  8. package/assets/esri/core/workers/chunks/{80ac74da0b0e45e74beb.js → 9a498f2c007f4d78d4dd.js} +1 -1
  9. package/assets/esri/core/workers/chunks/{eddab4dc706e75c6637f.js → bff74200a0df0950cf08.js} +1 -1
  10. package/assets/esri/core/workers/chunks/{8f2ffb6944c9028d3bea.js → c08cb75c3eef6c45f604.js} +1 -1
  11. package/assets/esri/core/workers/chunks/dce55e7f76adecc055c3.js +1 -0
  12. package/assets/esri/core/workers/chunks/f2cdb7be3fd65f65c30b.js +1 -0
  13. package/assets/esri/themes/base/widgets/_FeatureTable.scss +3 -3
  14. package/assets/esri/themes/dark/main.css +1 -1
  15. package/assets/esri/themes/light/main.css +1 -1
  16. package/assets/esri/themes/light/view.css +1 -1
  17. package/chunks/OperatorProject.js +1 -1
  18. package/chunks/QuadraticBezier.js +1 -1
  19. package/geometry/operators/affineTransformOperator.js +1 -1
  20. package/geometry/operators/alphaShapeOperator.js +1 -1
  21. package/geometry/operators/areaOperator.js +1 -1
  22. package/geometry/operators/autoCompleteOperator.js +1 -1
  23. package/geometry/operators/boundaryOperator.js +1 -1
  24. package/geometry/operators/bufferOperator.js +1 -1
  25. package/geometry/operators/centroidOperator.js +1 -1
  26. package/geometry/operators/clipOperator.js +1 -1
  27. package/geometry/operators/containsOperator.js +1 -1
  28. package/geometry/operators/convexHullOperator.js +1 -1
  29. package/geometry/operators/crossesOperator.js +1 -1
  30. package/geometry/operators/cutOperator.js +1 -1
  31. package/geometry/operators/densifyOperator.js +1 -1
  32. package/geometry/operators/differenceOperator.js +1 -1
  33. package/geometry/operators/disjointOperator.js +1 -1
  34. package/geometry/operators/distanceOperator.js +1 -1
  35. package/geometry/operators/equalsOperator.js +1 -1
  36. package/geometry/operators/extendOperator.js +1 -1
  37. package/geometry/operators/generalizeOperator.js +1 -1
  38. package/geometry/operators/geodesicBufferOperator.js +1 -1
  39. package/geometry/operators/geodesicProximityOperator.js +1 -1
  40. package/geometry/operators/geodeticAreaOperator.js +1 -1
  41. package/geometry/operators/geodeticDensifyOperator.js +1 -1
  42. package/geometry/operators/geodeticDistanceOperator.js +1 -1
  43. package/geometry/operators/geodeticLengthOperator.js +1 -1
  44. package/geometry/operators/graphicBufferOperator.js +1 -1
  45. package/geometry/operators/integrateOperator.js +1 -1
  46. package/geometry/operators/intersectionOperator.js +1 -1
  47. package/geometry/operators/intersectsOperator.js +1 -1
  48. package/geometry/operators/isNearOperator.js +1 -1
  49. package/geometry/operators/labelPointOperator.js +1 -1
  50. package/geometry/operators/lengthOperator.js +1 -1
  51. package/geometry/operators/linesToPolygonsOperator.js +1 -1
  52. package/geometry/operators/locateBetweenOperator.js +1 -1
  53. package/geometry/operators/minimumBoundingCircleOperator.js +1 -1
  54. package/geometry/operators/multiPartToSinglePartOperator.js +1 -1
  55. package/geometry/operators/offsetOperator.js +1 -1
  56. package/geometry/operators/overlapsOperator.js +1 -1
  57. package/geometry/operators/polygonOverlayOperator.js +1 -1
  58. package/geometry/operators/polygonSlicerOperator.js +1 -1
  59. package/geometry/operators/projectOperator.js +1 -1
  60. package/geometry/operators/proximityOperator.js +1 -1
  61. package/geometry/operators/relateOperator.js +1 -1
  62. package/geometry/operators/reshapeOperator.js +1 -1
  63. package/geometry/operators/simplifyOperator.js +1 -1
  64. package/geometry/operators/singlePartToMultiPartOperator.js +1 -1
  65. package/geometry/operators/symmetricDifferenceOperator.js +1 -1
  66. package/geometry/operators/touchesOperator.js +1 -1
  67. package/geometry/operators/unionOperator.js +1 -1
  68. package/geometry/operators/withinOperator.js +1 -1
  69. package/interfaces.d.ts +53 -4
  70. package/layers/graphics/OptimizedFeature.js +1 -1
  71. package/layers/graphics/sources/geojson/geojson.js +1 -1
  72. package/layers/support/Sublayer.js +1 -1
  73. package/layers/support/domainUtils.js +1 -1
  74. package/layers/support/fieldUtils.js +1 -1
  75. package/package.json +1 -1
  76. package/rest/query/operations/pbfOptimizedFeatureSet.js +1 -1
  77. package/support/revision.js +1 -1
  78. package/views/2d/engine/webgl/mesh/factories/ResourceProxy.js +1 -1
  79. package/views/2d/input/MapViewInputManager.js +1 -1
  80. package/views/2d/input/handlers/KeyRotate.js +1 -1
  81. package/views/2d/layers/FeatureLayerView2D.js +1 -1
  82. package/views/2d/layers/features/FeatureContainer.js +1 -1
  83. package/views/2d/layers/features/FeaturePipelineWorker.js +1 -1
  84. package/views/2d/layers/features/Processor.js +1 -1
  85. package/views/2d/layers/features/processor/AProcessorStrategy.js +1 -1
  86. package/views/2d/layers/features/processor/BinningStrategy.js +1 -1
  87. package/views/2d/layers/features/processor/ClusterStrategy.js +1 -1
  88. package/views/2d/layers/features/processor/FeatureUpdateStrategy.js +1 -1
  89. package/views/2d/layers/features/sources/FeatureSource.js +1 -1
  90. package/views/2d/layers/features/sources/strategies/ALoadStrategy.js +1 -1
  91. package/views/2d/layers/features/sources/strategies/chunks/ASourceChunk.js +1 -1
  92. package/views/2d/layers/features/sources/strategies/chunks/Overrides.js +5 -0
  93. package/views/2d/layers/features/sources/strategies/chunks/SourceChunkStore.js +1 -1
  94. package/views/2d/layers/features/support/FeatureSetReader.js +1 -1
  95. package/views/2d/layers/features/support/FeatureSetReaderJSON.js +1 -1
  96. package/views/2d/layers/support/DebouncedFeatureOverride.js +5 -0
  97. package/views/2d/layers/support/FeatureCommandQueue.js +1 -1
  98. package/views/3d/input/SceneInputManager.js +1 -1
  99. package/views/3d/input/handlers/KeyboardNavigation.js +1 -1
  100. package/views/3d/webgl-engine/collections/Component/Material/ComponentMaterial.js +1 -1
  101. package/views/3d/webgl-engine/core/renderPasses/RenderPassManager.js +1 -1
  102. package/views/layers/FeatureLayerView.js +1 -1
  103. package/widgets/FeatureTable/FieldColumn.js +1 -1
  104. package/widgets/Features/FeaturesViewModel.js +1 -1
  105. package/widgets/Features.js +1 -1
  106. package/widgets/OrientedImageryViewer/OrientedImageryViewerViewModel.js +1 -1
  107. package/widgets/OrientedImageryViewer/adapters/sketch/DigitizationAdapter.js +1 -1
  108. package/widgets/OrientedImageryViewer/components/ImageOverlays.js +1 -1
  109. package/widgets/OrientedImageryViewer/digitizationUtils.js +1 -1
  110. package/widgets/OrientedImageryViewer.js +1 -1
  111. package/widgets/Popup.js +1 -1
  112. package/widgets/ShadowCast.js +1 -1
  113. package/widgets/support/forms/formUtils.js +1 -1
  114. package/assets/esri/core/workers/chunks/3ef5002b21b1a5b97e11.js +0 -1
  115. package/assets/esri/core/workers/chunks/5786b190ad3e2d933245.js +0 -1
  116. package/assets/esri/core/workers/chunks/84d26c6c805f5855ffd3.js +0 -1
  117. package/assets/esri/core/workers/chunks/8f2f2d497b875e2b4139.js +0 -1
  118. package/assets/esri/core/workers/chunks/a4c8b773283ea8f0e256.js +0 -1
  119. package/assets/esri/core/workers/chunks/fce1158755f959730602.js +0 -1
  120. package/views/2d/layers/features/sources/strategies/chunks/OverrideChunk.js +0 -5
  121. package/views/3d/input/handlers/SingleKey.js +0 -5
  122. package/views/3d/input/handlers/SingleKeyResetHeading.js +0 -5
  123. package/views/3d/input/handlers/SingleKeyResetTilt.js +0 -5
@@ -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 t from"../core/Collection.js";import i from"../core/Logger.js";import{ignoreAbortErrors as o}from"../core/promiseUtils.js";import{watch as s,when as n}from"../core/reactiveUtils.js";import{waitAnimationFrame as r}from"../core/scheduling.js";import{throttle as l}from"../core/throttle.js";import{property as a}from"../core/accessorSupport/decorators/property.js";import"../core/has.js";import"../core/RandomLCG.js";import{subclass as d}from"../core/accessorSupport/decorators/subclass.js";import{getPointFromGeometry as c}from"../geometry/support/geometryUtils.js";import{substituteActionImage as u,getActionStyles as h}from"../support/actions/actionUtils.js";import p from"./Feature.js";import m from"./Spinner.js";import v from"./Widget.js";import{css as g}from"./Feature/resources.js";import{FeatureContentMixin as w}from"./Feature/support/FeatureContentMixin.js";import{css as _}from"./Features/css.js";import f from"./Features/FeaturesDrillIn.js";import M from"./Features/FeaturesViewModel.js";import F from"./Features/FeaturesVisibleElements.js";import{ActionsCollection as b}from"./Popup/actions.js";import{zoomToLocation as y}from"./Popup/actionUtils.js";import{loadCalciteComponents as I}from"./support/componentsUtils.js";import{globalCss as C}from"./support/globalCss.js";import{Heading as A}from"./support/Heading.js";import{setFocus as x}from"./support/widgetUtils.js";import{messageBundle as N}from"./support/decorators/messageBundle.js";import{vmEvent as T}from"./support/decorators/vmEvent.js";import{tsx as O}from"./support/jsxFactory.js";import{substitute as k}from"../intl/substitute.js";import{formatNumber as E}from"../intl/number.js";const j="selected-index",L=0,W="features-spinner";function S(e){return e?.declaredClass.startsWith("esri.layers.")??!1}let B=class extends(w(v)){constructor(e,i){super(e,i),this._featureMenuIntersectionObserverCallback=([e])=>{e?.isIntersecting&&null!=this.viewModel.featurePage&&this.viewModel.featurePage++},this._featureMenuIntersectionObserver=new IntersectionObserver(this._featureMenuIntersectionObserverCallback,{root:window.document}),this._featureMenuIntersectionObserverNode=null,this._spinner=null,this._feature=null,this._focusAbortController=null,this._drillInFlowItems=new t,this._drillInWidget=new f({flowItems:this._drillInFlowItems}),this._rootFlowItemNode=null,this._featureMenuViewportNode=null,this._actionBarMenuNode=null,this.collapsed=!1,this.featureNavigationTop=!1,this.headerActions=new b,this.headingLevel=2,this.messages=null,this.messagesCommon=null,this.responsiveActionsEnabled=!1,this.viewModel=new M,this.visibleElements=new F,this._renderAction=(e,t)=>{const i=this._getActionTitle(e),{type:o,active:s,uid:n,disabled:r,indicator:l}=e;return e.visible?O("calcite-action",{active:"toggle"===o&&e.value,appearance:"solid",bind:this,"data-action-id":e.id,"data-action-uid":n,disabled:r,icon:this._getActionIcon(e),indicator:l,key:`action-${t}`,loading:s,onclick:this._triggerAction,scale:"s",text:i,textEnabled:!this._hideActionText,title:this._hideActionText?i:void 0},this._getFallbackIcon(e)):null},this._openFeatureMenu=()=>{this.featureMenuOpen=!0,this._focusFlowItemNode("menu-flow-item")},this._previousFeature=()=>{this.viewModel.selectedFeatureIndex--},this._nextFeature=()=>{this.viewModel.selectedFeatureIndex++},this._handleFeatureMenuBack=()=>{this.featureMenuOpen&&(this._focusFlowItemNode("root-flow-item"),this.featureMenuOpen=!1)},this._displaySpinnerThrottled=l((()=>this._displaySpinner()),L),this._addSelectedFeatureIndexHandle(),this.addHandles([this._displaySpinnerThrottled,s((()=>this.viewModel?.active),(()=>this._toggleScreenLocationEnabled())),s((()=>this.viewModel?.active),(e=>this._drillInWidget.closed=!e)),s((()=>this.visibleElements?.closeButton),(e=>this._drillInWidget.closable=e)),s((()=>this.visibleElements?.spinner),(e=>this._spinnerEnabledChange(e))),s((()=>this.viewModel?.view),((e,t)=>this._viewChange(e,t))),s((()=>this.viewModel?.view?.ready),((e,t)=>this._viewReadyChange(e??!1,t??!1))),s((()=>[this.viewModel?.waitingForResult,this.viewModel?.location]),(()=>{this._hideSpinner(),this._displaySpinnerThrottled()})),s((()=>this.viewModel?.screenLocation),(()=>this._closeOpenActionMenu())),s((()=>this.selectedFeatureWidget),(()=>this._destroyDrillInFlowItemWidgets())),s((()=>{const e=this.selectedFeatureWidget?.viewModel;return[e?.title,e?.state]}),(()=>this._setTitleFromFeatureWidget())),s((()=>{const e=this.selectedFeatureWidget?.viewModel;return[e?.content,e?.state]}),(()=>this._setContentFromFeatureWidget())),s((()=>this.viewModel?.featureViewModels),(()=>this._featureMenuViewportScrollTop())),this._drillInWidget.on("close",(()=>this.close())),this._drillInWidget.on("exit",(()=>this._destroyDrillInFlowItemWidgets())),this._drillInWidget.on("open-feature",(({feature:e})=>this._openRelatedFeature(e))),this._drillInWidget.on("zoom-to-feature",(({featureWidget:e})=>y(this.viewModel,e)))])}loadDependencies(){return I({action:()=>import("@esri/calcite-components/dist/components/calcite-action"),"action-bar":()=>import("@esri/calcite-components/dist/components/calcite-action-bar"),"action-group":()=>import("@esri/calcite-components/dist/components/calcite-action-group"),button:()=>import("@esri/calcite-components/dist/components/calcite-button"),flow:()=>import("@esri/calcite-components/dist/components/calcite-flow"),"flow-item":()=>import("@esri/calcite-components/dist/components/calcite-flow-item"),list:()=>import("@esri/calcite-components/dist/components/calcite-list"),"list-item":()=>import("@esri/calcite-components/dist/components/calcite-list-item"),"list-item-group":()=>import("@esri/calcite-components/dist/components/calcite-list-item-group"),loader:()=>import("@esri/calcite-components/dist/components/calcite-loader")})}destroy(){this._destroyDrillInFlowItemWidgets(),this._destroySelectedFeatureWidget(),this._destroySpinner(),this._unobserveFeatureMenuObserver(),this._featureMenuIntersectionObserver?.disconnect(),this._drillInWidget?.destroy(),this._focusAbortController?.abort()}get _hideActionText(){if(!this.responsiveActionsEnabled)return!1;const e=this.view?.widthBreakpoint;return"xsmall"===e||"small"===e||"medium"===e}get _featureNavigationVisible(){return this.viewModel.active&&this.viewModel.featureCount>1&&this.visibleElements.featureNavigation}get _isCollapsed(){return this._collapseEnabled&&this.collapsed}get _collapseEnabled(){return this.visibleElements.collapseButton&&!!this.title&&!!this.content}get active(){return this.viewModel.active}get content(){return this.viewModel.content}set content(e){this.viewModel.content=e}get icon(){return null}get featureMenuOpen(){return this.viewModel.featureMenuOpen}set featureMenuOpen(e){this.viewModel.featureMenuOpen=e}get featureMenuTitle(){return this.viewModel.featureMenuTitle}set featureMenuTitle(e){this.viewModel.featureMenuTitle=e}get features(){return this.viewModel.features}set features(e){this.viewModel.features=e}get goToOverride(){return this.viewModel.goToOverride}set goToOverride(e){this.viewModel.goToOverride=e}get location(){return this.viewModel.location}set location(e){this.viewModel.location=e}get label(){return this.messages?.widgetLabel??""}set label(e){this._overrideIfSome("label",e)}get map(){return this.viewModel.map}set map(e){this.viewModel.map=e}get promises(){return this.viewModel.promises}set promises(e){this.viewModel.promises=e}get selectedFeature(){return this.viewModel.selectedFeature}get selectedDrillInFeature(){const e=Array.from(this._drillInFlowItems).at(-1);if(!e)return null;const{flowType:t}=e;return"feature-association"===t||"feature-relationship"===t?e.graphic??null:null}get selectedFeatureIndex(){return this.viewModel.selectedFeatureIndex}set selectedFeatureIndex(e){this.viewModel.selectedFeatureIndex=e}get selectedFeatureWidget(){const{_feature:e,headingLevel:t,_drillInFlowItems:i,timeZone:o,spatialReference:s,map:n}=this,{selectedFeatureViewModel:r}=this.viewModel,l={title:!1};return r?(e?(e.viewModel=r,e.visibleElements=l):this._feature=new p({flowItems:i,headingLevel:t+1,timeZone:o,spatialReference:s,map:n,viewModel:r,visibleElements:l}),this._feature):null}get spatialReference(){return this.viewModel.spatialReference}set spatialReference(e){this.viewModel.spatialReference=e}get title(){return this.viewModel.title}set title(e){this.viewModel.title=e}get timeZone(){return this.viewModel.timeZone}set timeZone(e){this.viewModel.timeZone=e}get updateLocationEnabled(){return this.viewModel.updateLocationEnabled}set updateLocationEnabled(e){this.viewModel.updateLocationEnabled=e}get view(){return this.viewModel.view}set view(e){this.viewModel.view=e}get visible(){return this.viewModel.visible}set visible(e){this.viewModel.visible=e}blur(){const{active:e}=this.viewModel;e?this._rootFlowItemNode?.blur():i.getLogger(this).warn("Features can only be blurred when currently active.")}clear(){return this.viewModel.clear()}close(){this.viewModel.visible=!1}fetchFeatures(e,t){return this.viewModel.fetchFeatures(e,t)}focus(){const{active:e}=this.viewModel;e?this._focusFlowItemNode(this.featureMenuOpen?"menu-flow-item":"root-flow-item"):i.getLogger(this).warn("Features can only be focused when currently active.")}next(){return this.viewModel.next()}open(e){this.removeHandles(j);const t={collapsed:e?.collapsed??!1};this.set(t),this.viewModel.open(e),this.addHandles(n((()=>!this.viewModel.waitingForResult),(()=>this._addSelectedFeatureIndexHandle()),{once:!0}))}previous(){return this.viewModel.previous()}triggerAction(e){return this.viewModel.triggerAction(e)}render(){return O("div",{bind:this,class:this.classes(_.base,C.widget,C.panel),onkeydown:this._onMainKeydown},this._renderHeader(),this._renderContentContainer())}_renderFeatureNavigation(){return[this._renderPagination(),this._renderFeatureMenuButton()]}_renderHeader(){return!this.featureMenuOpen&&this.featureNavigationTop&&this._featureNavigationVisible?O("div",{class:_.header,key:"header-actions"},this._renderFeatureNavigation()):null}_renderFooter(){return this.featureMenuOpen||this.featureNavigationTop||!this._featureNavigationVisible?null:O("div",{class:_.footer,key:"footer-actions",slot:"footer"},this._renderFeatureNavigation())}_renderFeatureMenuButton(){const{messages:e,viewModel:t}=this,{featureCount:i,selectedFeatureIndex:o,pendingPromisesCount:s}=t;return O("calcite-action",{appearance:"solid",bind:this,icon:"list",key:"feature-menu-button",label:e.selectFeature,loading:s>0,onclick:this._openFeatureMenu,scale:"s",text:k(e.pageText,{index:E(o+1),total:E(i)}),textEnabled:!0,title:e.selectFeature})}_renderPagination(){const{previous:e,next:t}=this.messagesCommon.pagination;return O("calcite-action-bar",{class:_.paginationActionBar,expandDisabled:!0,key:"pagination-action-bar",layout:"horizontal",overflowActionsDisabled:!0,scale:"s"},O("calcite-action-group",{scale:"s"},O("calcite-action",{appearance:"solid",class:_.paginationPrevious,icon:"chevron-left",iconFlipRtl:!0,label:e,onclick:this._previousFeature,scale:"s",text:e,title:e}),O("calcite-action",{appearance:"solid",icon:"chevron-right",iconFlipRtl:!0,label:t,onclick:this._nextFeature,scale:"s",text:t,title:t})))}_renderFeatureMenuItem(e){const{selectedFeatureViewModel:t,featureViewModels:i}=this.viewModel,o=e===t,s=i.indexOf(e);return O("calcite-list-item",{bind:this,"data-feature-index":s,key:`feature-menu-item-${e.uid}`,onblur:this._removeActiveFeature,onfocus:this._setActiveFeature,onmouseleave:this._removeActiveFeature,onmouseover:this._setActiveFeature,selected:o,onCalciteListItemSelect:this._selectFeature},O("span",{innerHTML:e.title||this.messagesCommon.untitled,slot:"content"}))}_groupResultsByLayer(){const{featureViewModels:e}=this.viewModel,t=new Map;return e.forEach((e=>{const i=e?.graphic;if(!i)return;const{layer:o,sourceLayer:s}=i,n=(S(o)?o:null)||(S(s)?s:null),r=t.get(n)??[];t.set(n,[...r,e])})),t}_renderFeatureMenu(){const{messages:e,viewModel:t}=this,i=this._groupResultsByLayer();return t.featureViewModels.length?O("calcite-list",{displayMode:"flat",label:e?.featuresList,selectionAppearance:"icon",selectionMode:"single"},Array.from(i.keys(),(e=>{const t=i.get(e)?.map((e=>this._renderFeatureMenuItem(e))),o=e?e.title??this.messagesCommon.untitled:null;return this.visibleElements.featureListLayerTitle&&null!==o?O("calcite-list-item-group",{heading:o,key:e?.uid||"map-graphics"},t):t}))):null}_renderHeaderAction(e,t){const i=e.title||"";return e.visible?O("calcite-action",{active:"toggle"===e.type&&e.value,appearance:"solid",bind:this,"data-action-id":e.id,"data-action-uid":e.uid,disabled:e.disabled,icon:e.icon??void 0,indicator:e.indicator,key:`header-action-${t}`,loading:e.active,onclick:this._triggerHeaderAction,slot:"header-actions-end",text:i,title:i}):null}_renderHeaderActions(){return this.headerActions.map(((e,t)=>this._renderHeaderAction(e,t))).toArray()}_renderContentFeature(){const{headingLevel:e,visibleElements:t,_isCollapsed:i,_collapseEnabled:o,_drillInFlowItems:s,featureNavigationTop:n,featureMenuOpen:r}=this,{title:l,active:a}=this.viewModel,d=t.heading&&l?l:"";return O("calcite-flow-item",{afterCreate:this._storeRootFlowItemNode,bind:this,class:this.classes({[_.contentFeature]:!0,[_.flowItemCollapsed]:i}),closable:t.closeButton,closed:!a,collapsed:i,collapseDirection:n?"down":"up",collapsible:o,headingLevel:e,key:"root-flow-item",selected:!r&&0===s.length,onCalciteFlowItemClose:this.close,onCalciteFlowItemToggle:this._handleCollapseToggle},d?O(A,{class:this.classes(_.featuresHeading,C.heading),innerHTML:d,key:"header-content",level:this.headingLevel,slot:"header-content"}):null,this._renderHeaderActions(),this._renderActionBar(),i?null:O("div",{class:this.classes(_.container,_.contentContainer)},this._renderContent()),this._renderFooter())}_renderFeatureMenuContainer(){const{viewModel:e,featureMenuOpen:t,featureMenuTitle:i,messages:o,messagesCommon:s}=this,{active:n,featureViewModels:r,pendingPromisesCount:l}=e,a=i??o.selectFeature;return t?O("calcite-flow-item",{afterCreate:this._storeFeatureMenuFlowItemNode,bind:this,closable:!1,closed:!n,description:k(o.total,{total:r.length}),heading:a,key:"feature-menu",loading:e.waitingForContents,selected:t,onCalciteFlowItemBack:e=>{e.preventDefault(),this._handleFeatureMenuBack()}},l>0?O("calcite-loader",{class:_.loader,inline:!0,key:"feature-menu-loader",label:s.loading,slot:"header-actions-end"}):null,O("div",{class:_.container},this._renderFeatureMenu()),O("div",{afterCreate:this._featureMenuIntersectionObserverCreated,bind:this,class:_.featureMenuObserver}),O("calcite-button",{appearance:"transparent",onclick:this._handleFeatureMenuBack,slot:"footer-actions",width:"full"},s.back)):null}_renderContentContainer(){const e=[this._renderContentFeature(),this._renderFeatureMenuContainer(),this._drillInWidget.render()];return this.visibleElements.flow?O("calcite-flow",{key:"content-container"},e):e}_getFallbackIcon(e){const{className:t,icon:i}=e;if(i)return null;const o=u({action:e,feature:this.selectedFeature}),s={[_.icon]:!!t,[_.actionImage]:!!o};return t&&(s[t]=!0),o||t?O("span",{"aria-hidden":"true",class:this.classes(_.icon,s),key:"icon",styles:h(o)}):null}_renderActionBar(){return!this._isCollapsed&&this.visibleElements.actionBar&&this.viewModel.allActions?.length?O("calcite-action-bar",{expandDisabled:!0,expanded:!this._hideActionText,key:"header-action-bar",scale:"s",slot:"action-bar"},O("calcite-action-group",{afterCreate:e=>this._actionBarMenuNode=e,overlayPositioning:"fixed",scale:"s"},this._renderActions())):null}_renderActions(){return this.viewModel.allActions.toArray().map(this._renderAction)}_renderContent(){const e=this.viewModel?.content;return e?"string"==typeof e?O("div",{class:g.contentNode,innerHTML:e,key:e}):this.renderNodeContent(e):null}_handleCollapseToggle(){this.collapsed=!this.collapsed}async _openRelatedFeature(e){await e.viewModel.updateGeometry();const t=e.graphic,i=t?.geometry;if(null==i||null==t)return;this._destroyDrillInFlowItemWidgets(),await this.viewModel.zoomTo({target:i});const o=c(i);this.open({features:[t],location:null!=o?o:void 0})}async _focusFlowItemNode(e){this._focusAbortController?.abort(),this._focusAbortController=new AbortController;const t=this._focusAbortController.signal;await o(r(t));const i="menu-flow-item"===e?this._featureMenuViewportNode:this._rootFlowItemNode;x(i)}_storeRootFlowItemNode(e){this._rootFlowItemNode=e}_storeFeatureMenuFlowItemNode(e){this._featureMenuViewportNode=e}_setActiveFeature(e){const{viewModel:t}=this,i=e.currentTarget["data-feature-index"];t.activeFeature=t.features?.[i]||null}_removeActiveFeature(){this.viewModel.activeFeature=null}_selectFeature(e){const t=e.currentTarget["data-feature-index"];isNaN(t)||(this.viewModel.selectedFeatureIndex=t),this._handleFeatureMenuBack()}_unobserveFeatureMenuObserver(){this._featureMenuIntersectionObserverNode&&this._featureMenuIntersectionObserver.unobserve(this._featureMenuIntersectionObserverNode)}_featureMenuIntersectionObserverCreated(e){this._unobserveFeatureMenuObserver(),this._featureMenuIntersectionObserver.observe(e),this._featureMenuIntersectionObserverNode=e}_getActionIcon(e){return e.icon?e.icon:e.image||e.className?void 0:"question"}_getActionTitle(e){const{messages:t,selectedFeature:i,messagesCommon:o}=this,{id:s}=e,n=i?.attributes,r=e.title??"",l="zoom-to-feature"===s?k(r,{messages:t}):"remove-selected-feature"===s?k(r,{messages:o}):"zoom-to-clustered-features"===s||"browse-clustered-features"===s?k(r,{messages:t}):e.title;return l&&n?k(l,n):l??""}_onMainKeydown(e){const{key:t}=e;"ArrowLeft"===t&&(e.stopPropagation(),this._handleFeatureMenuBack(),this.previous()),"ArrowRight"===t&&(e.stopPropagation(),this._handleFeatureMenuBack(),this.next())}_featureMenuViewportScrollTop(){this._featureMenuViewportNode&&this._featureMenuViewportNode.scrollContentTo({top:0})}_setContentFromFeatureWidget(){const{selectedFeatureWidget:e}=this;e&&(this.viewModel.content=e)}_setTitleFromFeatureWidget(){const{selectedFeatureWidget:e,messagesCommon:t}=this,i=e?.viewModel;e&&(this.viewModel.title="error"===i?.state?t?.errorMessage:i?.title||"")}_addSelectedFeatureIndexHandle(){const e=s((()=>this.viewModel?.selectedFeatureIndex),((e,t)=>this._selectedFeatureIndexUpdated(e,t)));this.addHandles(e,j)}_selectedFeatureIndexUpdated(e,t){const{featureCount:i}=this.viewModel;i&&e!==t&&-1!==e&&(this._destroyDrillInFlowItemWidgets(),this._rootFlowItemNode&&this._rootFlowItemNode.scrollContentTo({top:0}))}_triggerHeaderAction(e){const t=e.currentTarget;if(t.disabled)return;const i=t.dataset.actionUid,o=this.headerActions.find((({uid:e})=>e===i));o&&!o.disabled&&("toggle"===o?.type&&(o.value=!o.value),this.emit("trigger-header-action",{action:o}))}_triggerAction(e){const t=e.currentTarget;if(t.disabled)return;const i=t.dataset.actionUid,{allActions:o}=this.viewModel,s=o.findIndex((e=>e.uid===i)),n=o.at(s);n&&"toggle"===n.type&&(n.value=!n.value),this.viewModel.triggerAction(s)}_createSpinner(e){e&&(this._spinner=new m({view:e}),e.ui.add(this._spinner,{key:W,position:"manual",internal:!0}))}_wireUpView(e){this._destroySpinner(),e&&this.visibleElements?.spinner&&this._createSpinner(e)}_hideSpinner(){const{_spinner:e}=this;e&&(e.location=null,e.hide())}_viewReadyChange(e,t){e?this._wireUpView(this.viewModel?.view):t&&this.viewModel.clear()}_viewChange(e,t){e&&t&&this.viewModel.clear()}_destroySelectedFeatureWidget(){const{_feature:e}=this;e&&(e.viewModel=null,!e.destroyed&&e.destroy()),this._feature=null}_closeOpenActionMenu(){const{_actionBarMenuNode:e}=this;e&&(e.menuOpen=!1)}_destroyDrillInFlowItemWidgets(){this._drillInFlowItems.drain((e=>{"showAllEnabled"in e.viewModel&&(e.viewModel.showAllEnabled=!1),e.viewModel=null,e.destroy()}))}_toggleScreenLocationEnabled(){const{viewModel:e}=this;e&&(e.screenLocationEnabled=e.active)}_displaySpinner(){const{_spinner:e}=this;if(!e)return;const{location:t,waitingForResult:i}=this.viewModel;i&&t?e.show({location:t}):e.hide()}_destroySpinner(){const{_spinner:e,view:t}=this;e&&(t?.ui?.remove(e,W),e.destroy(),this._spinner=null)}_spinnerEnabledChange(e){this._destroySpinner(),e&&this._createSpinner(this.viewModel?.view)}};e([a()],B.prototype,"_drillInFlowItems",void 0),e([a()],B.prototype,"_hideActionText",null),e([a()],B.prototype,"_featureNavigationVisible",null),e([a()],B.prototype,"_isCollapsed",null),e([a()],B.prototype,"_collapseEnabled",null),e([a({readOnly:!0})],B.prototype,"active",null),e([a()],B.prototype,"collapsed",void 0),e([a()],B.prototype,"content",null),e([a()],B.prototype,"icon",null),e([a()],B.prototype,"featureMenuOpen",null),e([a()],B.prototype,"featureMenuTitle",null),e([a()],B.prototype,"featureNavigationTop",void 0),e([a()],B.prototype,"features",null),e([a()],B.prototype,"goToOverride",null),e([a({type:b})],B.prototype,"headerActions",void 0),e([a()],B.prototype,"headingLevel",void 0),e([a()],B.prototype,"location",null),e([a()],B.prototype,"label",null),e([a()],B.prototype,"map",null),e([a(),N("esri/widgets/Features/t9n/Features")],B.prototype,"messages",void 0),e([a(),N("esri/t9n/common")],B.prototype,"messagesCommon",void 0),e([a()],B.prototype,"promises",null),e([a()],B.prototype,"responsiveActionsEnabled",void 0),e([a({readOnly:!0})],B.prototype,"selectedFeature",null),e([a({readOnly:!0})],B.prototype,"selectedDrillInFeature",null),e([a()],B.prototype,"selectedFeatureIndex",null),e([a({readOnly:!0})],B.prototype,"selectedFeatureWidget",null),e([a()],B.prototype,"spatialReference",null),e([a()],B.prototype,"title",null),e([a()],B.prototype,"timeZone",null),e([a()],B.prototype,"updateLocationEnabled",null),e([a()],B.prototype,"view",null),e([a({type:M}),T(["triggerAction","trigger-action"])],B.prototype,"viewModel",void 0),e([a({type:F,nonNullable:!0})],B.prototype,"visibleElements",void 0),e([a()],B.prototype,"visible",null),B=e([d("esri.widgets.Features")],B);const R=B;export{R as default};
5
+ import{_ as e}from"../chunks/tslib.es6.js";import"../intl.js";import t from"../core/Collection.js";import i from"../core/Logger.js";import{ignoreAbortErrors as o}from"../core/promiseUtils.js";import{watch as s,when as n}from"../core/reactiveUtils.js";import{waitAnimationFrame as r}from"../core/scheduling.js";import{throttle as l}from"../core/throttle.js";import{property as a}from"../core/accessorSupport/decorators/property.js";import"../core/has.js";import"../core/RandomLCG.js";import{subclass as d}from"../core/accessorSupport/decorators/subclass.js";import{getPointFromGeometry as c}from"../geometry/support/geometryUtils.js";import{substituteActionImage as u,getActionStyles as h}from"../support/actions/actionUtils.js";import p from"./Feature.js";import m from"./Spinner.js";import v from"./Widget.js";import{css as g}from"./Feature/resources.js";import{FeatureContentMixin as w}from"./Feature/support/FeatureContentMixin.js";import{css as _}from"./Features/css.js";import f from"./Features/FeaturesDrillIn.js";import M from"./Features/FeaturesViewModel.js";import F from"./Features/FeaturesVisibleElements.js";import{ActionsCollection as b}from"./Popup/actions.js";import{zoomToLocation as y}from"./Popup/actionUtils.js";import{loadCalciteComponents as I}from"./support/componentsUtils.js";import{globalCss as C}from"./support/globalCss.js";import{Heading as A}from"./support/Heading.js";import{setFocus as x}from"./support/widgetUtils.js";import{messageBundle as N}from"./support/decorators/messageBundle.js";import{vmEvent as T}from"./support/decorators/vmEvent.js";import{tsx as O}from"./support/jsxFactory.js";import{substitute as k}from"../intl/substitute.js";import{formatNumber as E}from"../intl/number.js";const j="selected-index",L=0,W="features-spinner";function S(e){return e?.declaredClass.startsWith("esri.layers.")??!1}let B=class extends(w(v)){constructor(e,i){super(e,i),this._featureMenuIntersectionObserverCallback=([e])=>{e?.isIntersecting&&null!=this.viewModel.featurePage&&this.viewModel.featurePage++},this._featureMenuIntersectionObserver=new IntersectionObserver(this._featureMenuIntersectionObserverCallback,{root:window.document}),this._featureMenuIntersectionObserverNode=null,this._spinner=null,this._feature=null,this._focusAbortController=null,this._drillInFlowItems=new t,this._drillInWidget=new f({flowItems:this._drillInFlowItems}),this._rootFlowItemNode=null,this._featureMenuViewportNode=null,this._actionBarMenuNode=null,this.collapsed=!1,this.featureNavigationTop=!1,this.headerActions=new b,this.headingLevel=2,this.messages=null,this.messagesCommon=null,this.responsiveActionsEnabled=!1,this.viewModel=new M,this.visibleElements=new F,this._renderAction=(e,t)=>{const i=this._getActionTitle(e),{type:o,active:s,uid:n,disabled:r,indicator:l}=e;return e.visible?O("calcite-action",{active:"toggle"===o&&e.value,appearance:"solid",bind:this,"data-action-id":e.id,"data-action-uid":n,disabled:r,icon:this._getActionIcon(e),indicator:l,key:`action-${t}`,loading:s,onclick:this._triggerAction,scale:"s",text:i,textEnabled:!this._hideActionText,title:this._hideActionText?i:void 0},this._getFallbackIcon(e)):null},this._openFeatureMenu=()=>{this.featureMenuOpen=!0,this._focusFlowItemNode("menu-flow-item")},this._previousFeature=()=>{this.viewModel.selectedFeatureIndex--},this._nextFeature=()=>{this.viewModel.selectedFeatureIndex++},this._handleFeatureMenuBack=()=>{this.featureMenuOpen&&(this._focusFlowItemNode("root-flow-item"),this.featureMenuOpen=!1)},this._displaySpinnerThrottled=l((()=>this._displaySpinner()),L),this._addSelectedFeatureIndexHandle(),this.addHandles([this._displaySpinnerThrottled,s((()=>this.viewModel?.active),(()=>this._toggleScreenLocationEnabled())),s((()=>this.viewModel?.active),(e=>this._drillInWidget.closed=!e)),s((()=>this.visibleElements?.closeButton),(e=>this._drillInWidget.closable=e)),s((()=>this.visibleElements?.spinner),(e=>this._spinnerEnabledChange(e))),s((()=>this.viewModel?.view),((e,t)=>this._viewChange(e,t))),s((()=>this.viewModel?.view?.ready),((e,t)=>this._viewReadyChange(e??!1,t??!1))),s((()=>[this.viewModel?.waitingForResult,this.viewModel?.location]),(()=>{this._hideSpinner(),this._displaySpinnerThrottled()})),s((()=>this.viewModel?.screenLocation),(()=>this._closeOpenActionMenu())),s((()=>this.selectedFeatureWidget),(()=>this._destroyDrillInFlowItemWidgets())),s((()=>{const e=this.selectedFeatureWidget?.viewModel;return[e?.title,e?.state]}),(()=>this._setTitleFromFeatureWidget())),s((()=>{const e=this.selectedFeatureWidget?.viewModel;return[e?.content,e?.state]}),(()=>this._setContentFromFeatureWidget())),s((()=>this.viewModel?.featureViewModels),(()=>this._featureMenuViewportScrollTop())),this._drillInWidget.on("close",(()=>this.close())),this._drillInWidget.on("exit",(()=>this._destroyDrillInFlowItemWidgets())),this._drillInWidget.on("open-feature",(({feature:e})=>this._openRelatedFeature(e))),this._drillInWidget.on("zoom-to-feature",(({featureWidget:e})=>y(this.viewModel,e)))])}loadDependencies(){return I({action:()=>import("@esri/calcite-components/dist/components/calcite-action"),"action-bar":()=>import("@esri/calcite-components/dist/components/calcite-action-bar"),"action-group":()=>import("@esri/calcite-components/dist/components/calcite-action-group"),button:()=>import("@esri/calcite-components/dist/components/calcite-button"),flow:()=>import("@esri/calcite-components/dist/components/calcite-flow"),"flow-item":()=>import("@esri/calcite-components/dist/components/calcite-flow-item"),list:()=>import("@esri/calcite-components/dist/components/calcite-list"),"list-item":()=>import("@esri/calcite-components/dist/components/calcite-list-item"),"list-item-group":()=>import("@esri/calcite-components/dist/components/calcite-list-item-group"),loader:()=>import("@esri/calcite-components/dist/components/calcite-loader")})}destroy(){this._destroyDrillInFlowItemWidgets(),this._destroySelectedFeatureWidget(),this._destroySpinner(),this._unobserveFeatureMenuObserver(),this._featureMenuIntersectionObserver?.disconnect(),this._drillInWidget?.destroy(),this._focusAbortController?.abort()}get _hideActionText(){if(!this.responsiveActionsEnabled)return!1;const e=this.view?.widthBreakpoint;return"xsmall"===e||"small"===e||"medium"===e}get _featureNavigationVisible(){return this.viewModel.active&&this.viewModel.featureCount>1&&this.visibleElements.featureNavigation}get _isCollapsed(){return this._collapseEnabled&&this.collapsed}get _collapseEnabled(){return this.visibleElements.collapseButton&&!!this.title&&!!this.content}get active(){return this.viewModel.active}get content(){return this.viewModel.content}set content(e){this.viewModel.content=e}get icon(){return null}get featureMenuOpen(){return this.viewModel.featureMenuOpen}set featureMenuOpen(e){this.viewModel.featureMenuOpen=e}get featureMenuTitle(){return this.viewModel.featureMenuTitle}set featureMenuTitle(e){this.viewModel.featureMenuTitle=e}get features(){return this.viewModel.features}set features(e){this.viewModel.features=e}get goToOverride(){return this.viewModel.goToOverride}set goToOverride(e){this.viewModel.goToOverride=e}get location(){return this.viewModel.location}set location(e){this.viewModel.location=e}get label(){return this.messages?.widgetLabel??""}set label(e){this._overrideIfSome("label",e)}get map(){return this.viewModel.map}set map(e){this.viewModel.map=e}get promises(){return this.viewModel.promises}set promises(e){this.viewModel.promises=e}get selectedFeature(){return this.viewModel.selectedFeature}get selectedDrillInFeature(){const e=Array.from(this._drillInFlowItems).at(-1);if(!e)return null;const{flowType:t}=e;return"feature-association"===t||"feature-relationship"===t?e.graphic??null:null}get selectedFeatureIndex(){return this.viewModel.selectedFeatureIndex}set selectedFeatureIndex(e){this.viewModel.selectedFeatureIndex=e}get selectedFeatureWidget(){const{_feature:e,headingLevel:t,_drillInFlowItems:i,timeZone:o,spatialReference:s,map:n}=this,{selectedFeatureViewModel:r}=this.viewModel,l={title:!1};return r?(e?(e.viewModel=r,e.visibleElements=l):this._feature=new p({flowItems:i,headingLevel:t+1,timeZone:o,spatialReference:s,map:n,viewModel:r,visibleElements:l}),this._feature):null}get spatialReference(){return this.viewModel.spatialReference}set spatialReference(e){this.viewModel.spatialReference=e}get title(){return this.viewModel.title}set title(e){this.viewModel.title=e}get timeZone(){return this.viewModel.timeZone}set timeZone(e){this.viewModel.timeZone=e}get updateLocationEnabled(){return this.viewModel.updateLocationEnabled}set updateLocationEnabled(e){this.viewModel.updateLocationEnabled=e}get view(){return this.viewModel.view}set view(e){this.viewModel.view=e}get visible(){return this.viewModel.visible}set visible(e){this.viewModel.visible=e}blur(){const{active:e}=this.viewModel;e?this._rootFlowItemNode?.blur():i.getLogger(this).warn("Features can only be blurred when currently active.")}clear(){return this.viewModel.clear()}close(){this.viewModel.visible=!1}fetchFeatures(e,t){return this.viewModel.fetchFeatures(e,t)}focus(){const{active:e}=this.viewModel;e?this._focusFlowItemNode(this.featureMenuOpen?"menu-flow-item":"root-flow-item"):i.getLogger(this).warn("Features can only be focused when currently active.")}next(){return this.viewModel.next()}open(e){this.removeHandles(j);const t={collapsed:e?.collapsed??!1};this.set(t),this.viewModel.open(e),this.addHandles(n((()=>!this.viewModel.waitingForResult),(()=>this._addSelectedFeatureIndexHandle()),{once:!0}))}previous(){return this.viewModel.previous()}triggerAction(e){return this.viewModel.triggerAction(e)}render(){return O("div",{bind:this,class:this.classes(_.base,C.widget,C.panel),onkeydown:this._onMainKeydown},this._renderHeader(),this._renderContentContainer())}_renderFeatureNavigation(){return[this._renderPagination(),this._renderFeatureMenuButton()]}_renderHeader(){return!this.featureMenuOpen&&this.featureNavigationTop&&this._featureNavigationVisible?O("div",{class:_.header,key:"header-actions"},this._renderFeatureNavigation()):null}_renderFooter(){return this.featureMenuOpen||this.featureNavigationTop||!this._featureNavigationVisible?null:O("div",{class:_.footer,key:"footer-actions",slot:"footer"},this._renderFeatureNavigation())}_renderFeatureMenuButton(){const{messages:e,viewModel:t}=this,{featureCount:i,selectedFeatureIndex:o,pendingPromisesCount:s}=t;return O("calcite-action",{appearance:"solid",bind:this,icon:"list",key:"feature-menu-button",label:e.selectFeature,loading:s>0,onclick:this._openFeatureMenu,scale:"s",text:k(e.pageText,{index:E(o+1),total:E(i)}),textEnabled:!0,title:e.selectFeature})}_renderPagination(){const{previous:e,next:t}=this.messagesCommon.pagination;return O("calcite-action-bar",{class:_.paginationActionBar,expandDisabled:!0,key:"pagination-action-bar",layout:"horizontal",overflowActionsDisabled:!0,scale:"s"},O("calcite-action-group",{scale:"s"},O("calcite-action",{appearance:"solid",class:_.paginationPrevious,icon:"chevron-left",iconFlipRtl:!0,label:e,onclick:this._previousFeature,scale:"s",text:e,title:e}),O("calcite-action",{appearance:"solid",icon:"chevron-right",iconFlipRtl:!0,label:t,onclick:this._nextFeature,scale:"s",text:t,title:t})))}_renderFeatureMenuItem(e){const{selectedFeatureViewModel:t,featureViewModels:i}=this.viewModel,o=e===t,s=i.indexOf(e);return O("calcite-list-item",{bind:this,"data-feature-index":s,key:`feature-menu-item-${e.uid}`,onblur:this._removeActiveFeature,onfocus:this._setActiveFeature,onmouseleave:this._removeActiveFeature,onmouseover:this._setActiveFeature,selected:o,onCalciteListItemSelect:this._selectFeature},O("span",{innerHTML:e.title||this.messagesCommon.untitled,slot:"content"}))}_groupResultsByLayer(){const{featureViewModels:e}=this.viewModel,t=new Map;return e.forEach((e=>{const i=e?.graphic;if(!i)return;const{layer:o,sourceLayer:s}=i,n=(S(o)?o:null)||(S(s)?s:null),r=t.get(n)??[];t.set(n,[...r,e])})),t}_renderFeatureMenu(){const{messages:e,viewModel:t}=this,i=this._groupResultsByLayer();return t.featureViewModels.length?O("calcite-list",{displayMode:"flat",label:e?.featuresList,selectionAppearance:"icon",selectionMode:"single"},Array.from(i.keys(),(e=>{const t=i.get(e)?.map((e=>this._renderFeatureMenuItem(e))),o=e?e.title??this.messagesCommon.untitled:null;return this.visibleElements.featureListLayerTitle&&null!==o?O("calcite-list-item-group",{heading:o,key:e?.uid||"map-graphics"},t):t}))):null}_renderHeaderAction(e,t){const i=e.title||"";return e.visible?O("calcite-action",{active:"toggle"===e.type&&e.value,appearance:"solid",bind:this,"data-action-id":e.id,"data-action-uid":e.uid,disabled:e.disabled,icon:e.icon??void 0,indicator:e.indicator,key:`header-action-${t}`,loading:e.active,onclick:this._triggerHeaderAction,slot:"header-actions-end",text:i,title:i}):null}_renderHeaderActions(){return this.headerActions.map(((e,t)=>this._renderHeaderAction(e,t))).toArray()}_renderContentFeature(){const{headingLevel:e,visibleElements:t,_isCollapsed:i,_collapseEnabled:o,_drillInFlowItems:s,featureNavigationTop:n,featureMenuOpen:r}=this,{title:l,active:a}=this.viewModel,d=t.heading&&l?l:"";return O("calcite-flow-item",{afterCreate:this._storeRootFlowItemNode,bind:this,class:this.classes({[_.contentFeature]:!0,[_.flowItemCollapsed]:i}),closable:t.closeButton,closed:!a,collapsed:i,collapseDirection:n?"down":"up",collapsible:o,headingLevel:e,key:"root-flow-item",selected:!r&&0===s.length,onCalciteFlowItemClose:this.close,onCalciteFlowItemToggle:this._handleCollapseToggle},d?O(A,{class:this.classes(_.featuresHeading,C.heading),innerHTML:d,key:"header-content",level:this.headingLevel,slot:"header-content"}):null,this._renderHeaderActions(),this._renderActionBar(),i?null:O("div",{class:this.classes(_.container,_.contentContainer)},this._renderContent()),this._renderFooter())}_renderFeatureMenuContainer(){const{viewModel:e,featureMenuOpen:t,featureMenuTitle:i,messages:o,messagesCommon:s}=this,{active:n,featureViewModels:r,pendingPromisesCount:l}=e,a=i??o.selectFeature;return t?O("calcite-flow-item",{afterCreate:this._storeFeatureMenuFlowItemNode,bind:this,closable:!1,closed:!n,description:k(o.total,{total:r.length}),heading:a,key:"feature-menu",loading:e.waitingForContents,selected:t,onCalciteFlowItemBack:e=>{e.preventDefault(),this._handleFeatureMenuBack()}},l>0?O("calcite-loader",{class:_.loader,inline:!0,key:"feature-menu-loader",label:s.loading,slot:"header-actions-end"}):null,O("div",{class:_.container},this._renderFeatureMenu()),O("div",{afterCreate:this._featureMenuIntersectionObserverCreated,bind:this,class:_.featureMenuObserver}),O("calcite-button",{appearance:"transparent",onclick:this._handleFeatureMenuBack,slot:"footer-actions",width:"full"},s.back)):null}_renderContentContainer(){const e=[this._renderContentFeature(),this._renderFeatureMenuContainer(),this._drillInWidget.render()];return this.visibleElements.flow?O("calcite-flow",{key:"content-container"},e):e}_getFallbackIcon(e){const{className:t,icon:i}=e;if(i)return null;const o=u({action:e,feature:this.selectedFeature}),s={[_.icon]:!!t,[_.actionImage]:!!o};return t&&(s[t]=!0),o||t?O("span",{"aria-hidden":"true",class:this.classes(_.icon,s),key:"icon",styles:h(o)}):null}_renderActionBar(){return!this._isCollapsed&&this.visibleElements.actionBar&&this.viewModel.allActions?.length?O("calcite-action-bar",{expandDisabled:!0,expanded:!this._hideActionText,key:"header-action-bar",scale:"s",slot:"action-bar"},O("calcite-action-group",{afterCreate:e=>this._actionBarMenuNode=e,overlayPositioning:"fixed",scale:"s"},this._renderActions())):null}_renderActions(){return this.viewModel.allActions.toArray().map(this._renderAction)}_renderContent(){const e=this.viewModel?.content;return e?"string"==typeof e?O("div",{class:g.contentNode,innerHTML:e,key:e}):this.renderNodeContent(e):null}_handleCollapseToggle(){this.collapsed=!this.collapsed}async _openRelatedFeature(e){await e.viewModel.updateGeometry();const t=e.graphic,i=t?.geometry;if(null==i||null==t)return;this._destroyDrillInFlowItemWidgets(),await this.viewModel.zoomTo({target:i});const o=c(i);this.open({features:[t],location:null!=o?o:void 0})}async _focusFlowItemNode(e){this._focusAbortController?.abort(),this._focusAbortController=new AbortController;const t=this._focusAbortController.signal;await o(r(t));const i="menu-flow-item"===e?this._featureMenuViewportNode:this._rootFlowItemNode;x(i)}_storeRootFlowItemNode(e){this._rootFlowItemNode=e}_storeFeatureMenuFlowItemNode(e){this._featureMenuViewportNode=e}_setActiveFeature(e){const{viewModel:t}=this,i=e.currentTarget["data-feature-index"];t.activeFeature=t.features?.[i]||null}_removeActiveFeature(){this.viewModel.activeFeature=null}_selectFeature(e){const t=e.currentTarget["data-feature-index"];isNaN(t)||(this.viewModel.selectedFeatureIndex=t),this._handleFeatureMenuBack()}_unobserveFeatureMenuObserver(){this._featureMenuIntersectionObserverNode&&this._featureMenuIntersectionObserver.unobserve(this._featureMenuIntersectionObserverNode)}_featureMenuIntersectionObserverCreated(e){this._unobserveFeatureMenuObserver(),this._featureMenuIntersectionObserver.observe(e),this._featureMenuIntersectionObserverNode=e}_getActionIcon(e){return e.icon?e.icon:e.image||e.className?void 0:"question"}_getActionTitle(e){const{messages:t,selectedFeature:i,messagesCommon:o}=this,{id:s}=e,n=i?.attributes,r=e.title??"",l="zoom-to-feature"===s?k(r,{messages:t}):"remove-selected-feature"===s?k(r,{messages:o}):"zoom-to-clustered-features"===s||"browse-clustered-features"===s?k(r,{messages:t}):e.title;return l&&n?k(l,n):l??""}_onMainKeydown(e){const{key:t}=e;"ArrowLeft"===t&&(e.stopPropagation(),this._handleFeatureMenuBack(),this.previous()),"ArrowRight"===t&&(e.stopPropagation(),this._handleFeatureMenuBack(),this.next())}_featureMenuViewportScrollTop(){this._featureMenuViewportNode&&this._featureMenuViewportNode.scrollContentTo({top:0})}_setContentFromFeatureWidget(){const{selectedFeatureWidget:e}=this;e&&(this.viewModel.content=e)}_setTitleFromFeatureWidget(){const{selectedFeatureWidget:e,messagesCommon:t}=this,i=e?.viewModel;e&&(this.viewModel.title="error"===i?.state?t?.errorMessage:i?.title||"")}_addSelectedFeatureIndexHandle(){const e=s((()=>this.viewModel?.selectedFeatureIndex),((e,t)=>this._selectedFeatureIndexUpdated(e,t)));this.addHandles(e,j)}_selectedFeatureIndexUpdated(e,t){const{featureCount:i}=this.viewModel;i&&e!==t&&-1!==e&&(this._destroyDrillInFlowItemWidgets(),this._rootFlowItemNode&&this._rootFlowItemNode.scrollContentTo({top:0}))}_triggerHeaderAction(e){const t=e.currentTarget;if(t.disabled)return;const i=t.dataset.actionUid,o=this.headerActions.find((({uid:e})=>e===i));o&&!o.disabled&&("toggle"===o?.type&&(o.value=!o.value),this.emit("trigger-header-action",{action:o}))}_triggerAction(e){const t=e.currentTarget;if(t.disabled)return;const i=t.dataset.actionUid,{allActions:o}=this.viewModel,s=o.findIndex((e=>e.uid===i)),n=o.at(s);n&&"toggle"===n.type&&(n.value=!n.value),this.viewModel.triggerAction(s)}_createSpinner(e){e&&(this._spinner=new m({view:e}),e.ui.add(this._spinner,{key:W,position:"manual",internal:!0}))}_wireUpView(e){this._destroySpinner(),e&&this.visibleElements?.spinner&&this._createSpinner(e)}_hideSpinner(){const{_spinner:e}=this;e&&(e.location=null,e.hide())}_viewReadyChange(e,t){e?this._wireUpView(this.viewModel?.view):t&&this.viewModel.clear()}_viewChange(e,t){e&&t&&this.viewModel.clear()}_destroySelectedFeatureWidget(){const{_feature:e}=this;e&&(e.viewModel=null,!e.destroyed&&e.destroy()),this._feature=null}_closeOpenActionMenu(){const{_actionBarMenuNode:e}=this;e&&(e.menuOpen=!1)}_destroyDrillInFlowItemWidgets(){this._drillInFlowItems.drain((e=>{"showAllEnabled"in e.viewModel&&(e.viewModel.showAllEnabled=!1),e.viewModel=null,e.destroy()}))}_toggleScreenLocationEnabled(){const{viewModel:e}=this;e&&(e.screenLocationEnabled=e.active)}_displaySpinner(){const{_spinner:e}=this;if(!e)return;const{location:t,waitingForResult:i}=this.viewModel;i&&t?e.show({location:t}):e.hide()}_destroySpinner(){const{_spinner:e}=this;e&&(e.view?.ui?.remove(e,W),e.destroy(),this._spinner=null)}_spinnerEnabledChange(e){this._destroySpinner(),e&&this._createSpinner(this.viewModel?.view)}};e([a()],B.prototype,"_drillInFlowItems",void 0),e([a()],B.prototype,"_hideActionText",null),e([a()],B.prototype,"_featureNavigationVisible",null),e([a()],B.prototype,"_isCollapsed",null),e([a()],B.prototype,"_collapseEnabled",null),e([a({readOnly:!0})],B.prototype,"active",null),e([a()],B.prototype,"collapsed",void 0),e([a()],B.prototype,"content",null),e([a()],B.prototype,"icon",null),e([a()],B.prototype,"featureMenuOpen",null),e([a()],B.prototype,"featureMenuTitle",null),e([a()],B.prototype,"featureNavigationTop",void 0),e([a()],B.prototype,"features",null),e([a()],B.prototype,"goToOverride",null),e([a({type:b})],B.prototype,"headerActions",void 0),e([a()],B.prototype,"headingLevel",void 0),e([a()],B.prototype,"location",null),e([a()],B.prototype,"label",null),e([a()],B.prototype,"map",null),e([a(),N("esri/widgets/Features/t9n/Features")],B.prototype,"messages",void 0),e([a(),N("esri/t9n/common")],B.prototype,"messagesCommon",void 0),e([a()],B.prototype,"promises",null),e([a()],B.prototype,"responsiveActionsEnabled",void 0),e([a({readOnly:!0})],B.prototype,"selectedFeature",null),e([a({readOnly:!0})],B.prototype,"selectedDrillInFeature",null),e([a()],B.prototype,"selectedFeatureIndex",null),e([a({readOnly:!0})],B.prototype,"selectedFeatureWidget",null),e([a()],B.prototype,"spatialReference",null),e([a()],B.prototype,"title",null),e([a()],B.prototype,"timeZone",null),e([a()],B.prototype,"updateLocationEnabled",null),e([a()],B.prototype,"view",null),e([a({type:M}),T(["triggerAction","trigger-action"])],B.prototype,"viewModel",void 0),e([a({type:F,nonNullable:!0})],B.prototype,"visibleElements",void 0),e([a()],B.prototype,"visible",null),B=e([d("esri.widgets.Features")],B);const R=B;export{R 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"../../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 j}from"../../geometry/support/webMercatorUtils.js";import O from"../../layers/GraphicsLayer.js";import{searchImages as L}from"../../layers/orientedImagery/queries.js";import{calculateSuitabilities as B}from"../../layers/orientedImagery/core/bestImageUtils.js";import{createCoveragePolygon as G,computePolygonForInspection as H,resizePolygon as x,checkIfPolygonContainsSelectedPoint as E}from"../../layers/orientedImagery/core/coverageUtils.js";import{isConstantElevation as z,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 K,isElevationSampler as Q,pointToArray as Z,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 je from"../../geometry/Multipoint.js";import Oe from"../../geometry/Polyline.js";import Le from"../../geometry/Polygon.js";const Be={click:"view-click",imageClick:"image-click",interactionHandles:"interaction-handles",footprintHandles:"footprint-handles",sketchHandles:"sketch-handles"},Ge=new Set(["JPG","JPEG"]),He=/\.(\w+)$/,xe=e=>"FA"===e,Ee=()=>new n("orientedimageryviewer:sketch-not-initialized","Sketch property is not initialized, call loadSketch first");let ze=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 O({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("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(Be.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),Be.click)},this._createImageClickHandle=()=>{this.removeHandles(Be.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,Be.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?j(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(He)?.[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(Ge.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(Be.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)}),Be.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)}),Be.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,z(o.elevationSource)&&(o.elevationSource.constantElevation/=l);const{polygon:c,frustum:h}=G(o);if(n=c.clone(),o.isInspection&&(n=H(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,K((n.z??0)-s,{elevationSample:i,elevationSource:a,extent:this.footprintExtent})))).then((t=>("elevationSample"in t&&Q(t.elevationSample)&&(e.elevationSample=t.elevationSample),{...o,cameraLocation:n,updateElevationProps:t})))}handleDigitizeDelete(){}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?j(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 O,view:this.activeViewer?.imageRenderer})}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}=G(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}=G(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(Z))))));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(Z))))));return new t({attributes:a,layer:e,symbol:l,geometry:new Oe({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(Z)));return new t({attributes:a,layer:e,symbol:l,geometry:new je({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 K(c??(l.z??0)-h,{elevationSample:s,elevationSource:n,extent:this.footprintExtent});let d;if("elevationSample"in u&&Q(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 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 K((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=B({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 K(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()],ze.prototype,"activeLayer",null),e([C({readOnly:!0})],ze.prototype,"activeViewer",null),e([C()],ze.prototype,"additionalFeatures",void 0),e([C({type:s.ofType(t)})],ze.prototype,"additionalCameraLocations",void 0),e([C({type:s.ofType(t)})],ze.prototype,"additionalFootprints",void 0),e([C()],ze.prototype,"areaMeasurementResult",void 0),e([C()],ze.prototype,"bestFeatureAngle",void 0),e([C()],ze.prototype,"bestFeatureCurrentFootprint",void 0),e([C({type:t})],ze.prototype,"bestFeatureFootprint",void 0),e([C({type:Number})],ze.prototype,"brightness",null),e([C({type:Number})],ze.prototype,"contrast",null),e([C()],ze.prototype,"conversionProps",void 0),e([C()],ze.prototype,"coverageFrustums",void 0),e([C()],ze.prototype,"coveragePolygons",void 0),e([C()],ze.prototype,"currentBestFeature",void 0),e([C()],ze.prototype,"currentBestFeatureLocation",void 0),e([C()],ze.prototype,"currentCoverageVisible",void 0),e([C({json:{write:!1}})],ze.prototype,"determineWorkflowForFeature",void 0),e([C()],ze.prototype,"disabled",void 0),e([C()],ze.prototype,"displayMessage",void 0),e([C()],ze.prototype,"displayNewMeasurementButton",void 0),e([C()],ze.prototype,"displayNewAreaMeasurementButton",void 0),e([C()],ze.prototype,"distanceMeasurementResult",void 0),e([C()],ze.prototype,"digitizationLayer",void 0),e([C({readOnly:!0})],ze.prototype,"featureCount",null),e([C()],ze.prototype,"features",void 0),e([C({readOnly:!0})],ze.prototype,"imageGalleryEnabled",null),e([C({readOnly:!0})],ze.prototype,"imageLoaded",null),e([C({readOnly:!0})],ze.prototype,"invalidCameraHeading",null),e([C()],ze.prototype,"imagePointsInView",null),e([C()],ze.prototype,"isAdditionalCoverageVisible",void 0),e([C()],ze.prototype,"isAdditionalPointSourcesVisible",void 0),e([C()],ze.prototype,"layer",void 0),e([C()],ze.prototype,"layerView",null),e([C({readOnly:!0})],ze.prototype,"layerFloorFilterClause",null),e([C({type:Number})],ze.prototype,"localPort",void 0),e([C()],ze.prototype,"mapImageConversionToolState",void 0),e([C({readOnly:!0,value:"none"})],ze.prototype,"mode",null),e([C()],ze.prototype,"navigatorCurrentBestFeature",void 0),e([C({type:s.ofType(t)})],ze.prototype,"overlayedCameraLocations",void 0),e([C()],ze.prototype,"overlayedMapFeatures",void 0),e([C()],ze.prototype,"pointSources",void 0),e([C({readOnly:!0})],ze.prototype,"popupEnabled",null),e([C()],ze.prototype,"previousFeatureAngle",void 0),e([C()],ze.prototype,"referencePoint",null),e([C({readOnly:!0})],ze.prototype,"sectorData",null),e([C()],ze.prototype,"selectedPoint",void 0),e([C({type:Number})],ze.prototype,"sharpness",null),e([C()],ze.prototype,"shouldShowSelectedImage",void 0),e([C()],ze.prototype,"sketch",void 0),e([C()],ze.prototype,"sketchAdapter",void 0),e([C({readOnly:!0})],ze.prototype,"sketchGraphicsLayer",null),e([C({readOnly:!0})],ze.prototype,"state",null),e([C({readOnly:!0})],ze.prototype,"thumbnails",null),e([C()],ze.prototype,"updateFootprint",void 0),e([C()],ze.prototype,"updateFootprintPanorama",void 0),e([C({value:null})],ze.prototype,"view",null),e([C()],ze.prototype,"_adapter",void 0),e([C()],ze.prototype,"_highlightedFeatureHandle",void 0),e([C()],ze.prototype,"_imageViewer",void 0),e([C()],ze.prototype,"_initialCurrentCoverageUpdate",void 0),e([C()],ze.prototype,"_overlays",void 0),e([C({readOnly:!0})],ze.prototype,"_overlaysView",null),e([C()],ze.prototype,"_panoramicViewer",void 0),e([C()],ze.prototype,"_referencePointOnGround",void 0),e([C()],ze.prototype,"_referencePointOnImage",void 0),e([C()],ze.prototype,"_sectorData",void 0),e([C({readOnly:!0})],ze.prototype,"_updatingHandles",void 0),e([C()],ze.prototype,"footprintExtent",void 0),ze=e([k("esri.widgets.OrientedImageryViewer.OrientedImageryViewerViewModel")],ze);const Te=ze;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)}))])}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};
@@ -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 s from"../../../../core/Accessor.js";import t from"../../../../core/Collection.js";import{property as a}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/has.js";import"../../../../core/Logger.js";import"../../../../core/RandomLCG.js";import{subclass as i}from"../../../../core/accessorSupport/decorators/subclass.js";import{SketchHandlerMixin as r}from"../../mixins/SketchHandlerMixin.js";let o=class extends(r(s)){constructor(e){super(e),this.pendingGraphics=new t,this.savedGraphics=new t,this.type="digitization"}handleCreate(e){const{state:s,graphic:t}=e;"complete"===s&&t&&this.pendingGraphics.add(t)}handleDelete(e){const{graphics:s}=e,{digitizationLayer:t}=this.viewModel,a=s.filter((e=>this.savedGraphics.includes(e))),i=s.filter((e=>this.pendingGraphics.includes(e)));this.savedGraphics.removeMany(a),this.pendingGraphics.removeMany(i),t&&t.applyEdits({deleteFeatures:a})}handleDestroy(){this.savedGraphics.destroy(),this.pendingGraphics.destroy()}handleDuplicate(e){const{graphics:s}=e;this.pendingGraphics.addMany(s)}handleUpdate(e){const{aborted:s,graphics:t,state:a,toolEventInfo:i}=e;if(i){const{type:e}=i;switch(e){case"move-start":case"reshape-start":case"rotate-start":case"scale-start":case"move":case"reshape":case"rotate":case"scale":case"selection-change":break;case"move-stop":case"reshape-stop":case"rotate-stop":case"scale-stop":if("complete"===a&&!s){const{digitizationLayer:e}=this.viewModel;e&&e.applyEdits({updateFeatures:t})}break;case"vertex-add":case"vertex-remove":case"vertex-update":if("complete"===a&&!s){const{digitizationLayer:e}=this.viewModel;e&&e.applyEdits({updateFeatures:t})}}}}save(){const{digitizationLayer:e}=this.viewModel,s=this.pendingGraphics.toArray();e&&e.applyEdits({addFeatures:s}),this.savedGraphics.addMany(s),this.pendingGraphics.removeAll()}};e([a()],o.prototype,"pendingGraphics",void 0),e([a()],o.prototype,"savedGraphics",void 0),e([a()],o.prototype,"type",void 0),o=e([i("esri.widgets.OrientedImageryViewer.adapters.sketch.DigitizationAdapter")],o);const c=o;export{c as default};
5
+ import{_ as e}from"../../../../chunks/tslib.es6.js";import t from"../../../../core/Accessor.js";import i from"../../../../core/Collection.js";import s from"../../../../core/ReactiveMap.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 o}from"../../../../core/accessorSupport/decorators/subclass.js";import{checkImageGeometryField as a}from"../../digitizationUtils.js";import{SketchHandlerMixin as d}from"../../mixins/SketchHandlerMixin.js";let n=class extends(d(t)){constructor(e){super(e),this.savedGraphics=new i,this.type="digitization",this.pendingGraphics=new s}handleCreate(e){const{state:t,graphic:s,tool:r}=e,{digitizationLayer:o}=this.viewModel,{pendingGraphics:d}=this,n=o?.fields.find((({name:e,alias:t,type:i})=>a(e,t,i)));if("complete"===t&&n&&o){if(s?.geometry){s.sourceLayer=o,s.attributes=s.attributes??{[n.name]:btoa(JSON.stringify(s.geometry.toJSON()))},d.has(o.id)||d.set(o.id,new i);d.get(o.id).add(s)}this.viewModel.sketch?.create(r)}}handleDelete(e){const{digitizationLayer:t}=this.viewModel;if(!t)return;const{graphics:i}=e;this.pendingGraphics.get(t.id)?.removeMany(i),this.savedGraphics.removeMany(i),this.viewModel.deleteDigitizedFeatures(i.map((({attributes:e,layer:t})=>{const i=t?.objectIdField;return i?e[i]:null})).filter(Boolean))}handleDestroy(){this.savedGraphics.destroy(),this.pendingGraphics=null}handleDuplicate(e){const{graphics:t}=e,{digitizationLayer:i}=this.viewModel;i&&this.pendingGraphics.get(i.id)?.addMany(t)}handleUpdate(e){const{toolEventInfo:t,graphics:i}=e,s=i.filter((({sourceLayer:e})=>e===this.viewModel.digitizationLayer));s.length===i.length?t&&this.viewModel.sketch?.undo():this.viewModel.sketch?.update(s)}async save(){const{digitizationLayer:e}=this.viewModel;if(!e)return;const t=this.pendingGraphics.get(e.id),i=t?.toArray()??[],{addFeatureResults:s}=await this.viewModel.saveDigitizedFeatures(i),r=s.reduce(((e,{objectId:t,globalId:s,error:r},o)=>{const a=i[o],{attributes:d}=a;return r?e.error.push(a):(t&&(d[t]=t),s&&(d[s]=s),e.success.push(a)),e}),{success:[],error:[]});this.savedGraphics.addMany(r.success),t?.removeAll(),t?.addMany(r.error)}};e([r()],n.prototype,"savedGraphics",void 0),e([r()],n.prototype,"type",void 0),e([r()],n.prototype,"pendingGraphics",void 0),n=e([o("esri.widgets.OrientedImageryViewer.adapters.sketch.DigitizationAdapter")],n);const c=n;export{c 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 l}from"../css.js";import c 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 m}from"../../support/jsxFactory.js";let h=class extends(t.IdentifiableMixin(r)){constructor(){super(...arguments),this.closed=!1,this.layerList=new c({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((()=>[this.layerList,this.listItemCreatedFunction]),(([e,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")})}get view(){return this.viewModel?.view??null}_onCalcitePanelClose(e){e.stopPropagation(),this.closed=!0}_renderCameraLocationsSwitch(e){return m("calcite-list-item",{bind:this,label:this.messages?.overlayCameraLocations,onclick:this._toggleShowCameraLocations},m("calcite-switch",{bind:this,checked:e,class:l.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:l.overlaysSwitch,onchange:this._toggleShowMapFeatures,scale:"s",slot:"actions-end"}))}_renderList(e){return e?m("div",{class:l.imageOverlaysLayerList},this.layerList.render()):null}_renderPanel(){const{closed:e,messages:t,showCameraLocations:s,showMapFeatures:i}=this;return m("calcite-panel",{bind:this,closable:!0,closed:e,heading:t?.imageOverlays,onCalcitePanelClose:this._onCalcitePanelClose},m("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,[l.imageOverlaysNoResult]:t,[l.imageOverlaysIncreasedHeight]:s,[l.imageOverlays]:!t&&!s};return m("div",{class:this.classes(i)},this._renderPanel())}};e([o()],h.prototype,"closed",void 0),e([o()],h.prototype,"layerList",void 0),e([o()],h.prototype,"listItemCreatedFunction",void 0),e([o()],h.prototype,"messages",void 0),e([o()],h.prototype,"showCameraLocations",void 0),e([o()],h.prototype,"showMapFeatures",void 0),e([o()],h.prototype,"view",null),e([o()],h.prototype,"viewModel",void 0),h=e([a("esri.widgets.OrientedImageryViewer.components.ImageOverlays")],h);const d=h;export{d as default};
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};
@@ -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{or as e}from"../../layers/orientedImagery/transformations/utils.js";import{isEditableLayer as r}from"../../layers/support/editableLayers.js";const t="oiobjectid",o="imagegeometry";function n(e,r){return s(t,e,r)}function i(e,r,t){return s(o,e,r)&&"blob"===t}function s(r,t,o){return e(t.toLowerCase()===r,o?.toLowerCase()===r)}function a(e){return r(e)&&2===e.fields.filter((({name:e,type:r,alias:t})=>i(e,t,r)||n(e,t))).length}export{a as isValidDigitizationLayer};
5
+ import{or as e}from"../../layers/orientedImagery/transformations/utils.js";import{isEditableLayer as t}from"../../layers/support/editableLayers.js";const o="oiobjectid",r="imagegeometry";function n(e,t){return s(o,e,t)}function i(e,t,o){return s(r,e,t)&&"blob"===o}function s(t,o,r){return e(o.toLowerCase()===t,r?.toLowerCase()===t)}function a(e){return"point"===e||"polygon"===e||"polyline"===e}function l(e){return t(e)&&a(e.geometryType)&&2===e.fields.filter((({name:e,type:t,alias:o})=>i(e,o,t)||n(e,o))).length}export{i as checkImageGeometryField,n as checkOiObjectIdField,l as isValidDigitizationLayer};
@@ -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 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,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 b from"../support/actions/ActionButton.js";import _ 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 F,root as V}from"./OrientedImageryViewer/css.js";import{isValidDigitizationLayer as x}from"./OrientedImageryViewer/digitizationUtils.js";import k from"./OrientedImageryViewer/OrientedImageryViewerViewModel.js";import L from"./OrientedImageryViewer/OrientedImageryViewerVisibleElements.js";import P from"./OrientedImageryViewer/components/ImageOverlays.js";import{loadCalciteComponents as S}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 G}from"./support/decorators/vmEvent.js";import{tsx as H}from"./support/jsxFactory.js";import{substitute as B}from"../intl/substitute.js";const U={overlayMapFeatures:"overlay-map-features",overlayed:"overlayed",overlaysActionHandles:"overlays-action-handles"};let R=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 k,this.messagesCommon=null,this.pixelMeasurementUnit="meters",this.pixelAreaMeasurementUnit="square-meters",this.visibleElements=new L,this._navigationToolExpanded=!1,this._navigationTool=null,this._imageOverlays=new P,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)})),`${U.overlayed}-${e.id}`)},this._createHandlesForOverlayMapFeatures=()=>{this.viewModel.removeAllOverlayMapFeatures();const{selectedItems:e}=this._imageOverlays.layerList;e.forEach(this._handleOverlayLayerSelect)},this._createOverlaysActionHandles=()=>d((()=>this.onOverlayAction),(()=>{this.removeHandles(U.overlaysActionHandles),this.addHandles(this._imageOverlays.layerList.on("trigger-action",this.onOverlayAction),U.overlaysActionHandles)})),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(`${U.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._onOverlayAction=({action:e,item:t})=>{switch(e.id){case"digitize":e.active=!e.active,e.active?this.viewModel.startDigitization(t):this.viewModel.stopDigitization(t);break;case"reveal":e.active=!e.active,e.active?this.viewModel.revealImageGeometry(t):this.viewModel.hideImageGeometry(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)}),h),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),g),d((()=>this.messages),(()=>this._imageOverlays.messages=this.messages),g),d((()=>this.listItemCreatedFunction),(()=>this._imageOverlays.listItemCreatedFunction=this.listItemCreatedFunction)),d((()=>[this.currentBestFeature,this._imageOverlays.showCameraLocations,this.viewModel.state]),(([e,t,i])=>{"image-loaded"===i&&this.viewModel.overlayCameraLocations(t)}),g),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)}),h),this._createOverlaysActionHandles()])}loadDependencies(){return S({"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 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")??(async e=>{const{item:t}=e,{layer:a}=t;if(await(a?.load()),!a||!x(a))return;const s=new i;s.add(new b({title:this.messages.addOrUpdateDigitizationFeatures,id:"digitize",icon:"add-and-update-features"})),t.actionsSections=new i([s])})}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: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 w.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=y(0,0,e),o=y(d.width,0,e),n=y(d.width,d.height,e),l=y(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])=>H("calcite-tooltip",{key:e,referenceElement:t},H("span",null,e))))}_renderBody(){return H("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 H("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?H("calcite-panel",{bind:this,class:A.imageEnhancementWrapper,closable:!0,closed:!e,heading:this.messages.imageEnhancement,key:this.messages.imageEnhancement,onCalcitePanelClose:this._toggleImageEnhancementToolState},H("div",{class:A.imageEnhancementTools},H("div",{class:A.imageEnhancementToolContainer},H("calcite-label",null,this.messages.brightness,H("calcite-slider",{bind:this,labelTicks:!0,max:10,min:-10,ticks:5,value:t,onCalciteSliderInput:this._handleBrightnessChange}))),H("div",{class:A.imageEnhancementToolContainer},H("calcite-label",null,this.messages.contrast,H("calcite-slider",{bind:this,labelTicks:!0,max:10,min:-10,ticks:5,value:i,onCalciteSliderInput:this._handleContrastChange}))),H("div",{class:A.imageEnhancementToolContainer},H("calcite-label",null,this.messages.sharpness,H("calcite-slider",{bind:this,labelTicks:!0,max:1,min:0,step:.1,ticks:.5,value:a,onCalciteSliderInput:this._handleSharpnessChange})))),H("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)?H("calcite-panel",{bind:this,class:A.carousel,closable:!0,closed:!t,disabled:s,heading:this.messages.imageGallery,key:this.messages.imageGallery,onCalcitePanelClose:this._toggleImageGallery},H("div",{class:A.carouselContainer},this._renderThumbnails(a))):null}_renderImageOverlaysAction(){const{viewModel:{state:e},imageOverlaysOpened:t,invalidCameraHeading:i}=this;return H("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)),H("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?[H("calcite-notice",{class:A.alert,closable:!0,icon:"exclamation-mark-triangle-f",iconFlipRtl:!0,kind:"warning",open:!0,scale:"s"},H("div",{afterCreate:e=>this._storeWarningTitleElement(e),slot:"title"},e))]:null}_renderWarningTooltip(e){const{_warningTitleElement:t}=this;if(e?.length&&t)return H("calcite-tooltip",{closeOnClick:!0,referenceElement:t},e)}_renderMapImageConversionTool(){const{mapImageConversionToolState:e,viewModel:{state:t},invalidCameraHeading:i}=this;return H("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 o,r,n,l,c;if(i){const{x:e,y:t,direction:a}=i,[s,d,h,g]=C[a];o=`M ${e} ${t} L ${s} ${d} A ${f[2]} ${f[2]} 0 0 1 ${h} ${g} Z`,r=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})=>H("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?H("div",{bind:this,class:u,key:this.messages.navigationTool},H("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"},H("defs",null,H("linearGradient",{gradientUnits:"userSpaceOnUse",id:`${this.id}-coverage-fill`,x1:r,x2:n,y1:l,y2:c},H("stop",{class:A.navigationPathOffset0,offset:0}),H("stop",{class:A.navigationPathOffset1,offset:1}))),H("g",null,H("circle",{class:this.classes(A.sector,A.outerSector),cx:f[3],cy:f[3],onclick:this._scaleNavigationTool,r:f[3]}),H("circle",{class:A.sector,cx:f[3],cy:f[3],r:f[2]}),H("circle",{class:A.sector,cx:f[3],cy:f[3],r:f[1]}),H("circle",{class:A.sector,cx:f[3],cy:f[3],r:f[0]}),H("path",{class:A.pointer,d:"M 56.5 6.06217782649107 L 60 0 L 63.5 6.06217782649107 Z",key:`${A.pointer}-west`}),H("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`}),H("path",{class:A.pointer,d:"M 56.5 113.93782217350893 L 60 120 L 63.5 113.93782217350893 Z",key:`${A.pointer}-east`}),H("path",{class:A.pointer,d:"M 6.06217782649107 56.5 L 0 60 L 6.06217782649107 63.5 Z",key:`${A.pointer}-south`}),H("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)=>H("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}))),H("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&&o?H("path",{class:A.selectedFeaturePath,d:o,fill:`url(#${this.id}-coverage-fill)`,key:A.selectedFeaturePath}):null))):null}_renderNavigationToolAction(){const{state:e}=this.viewModel;return H("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 H("calcite-action-bar",{expandDisabled:!0,layout:"horizontal",slot:"action-bar"},H("calcite-action-group",null,H("calcite-action",{active:e,afterCreate:this._storeActionElement,bind:this,class:A.currentCoverage,disabled:s,icon:"trapezoid-area",onclick:this._toggleCurrentCoverage,text:this.messages.currentFootprint}),H("calcite-action",{active:t,afterCreate:this._storeActionElement,bind:this,class:A.addCoverage,disabled:s,icon:"trapezoid-area",onclick:this._toggleAdditionalCoverage,text:this.messages.additionalFootprints}),H("calcite-action",{active:i,afterCreate:this._storeActionElement,bind:this,class:A.addExpPoints,disabled:s,icon:"circle-area",onclick:this._toggleAdditionalCameraLocations,text:this.messages.additionalCameraLocations})),H("calcite-action-group",null,this.visibleElements.mapImageConversionTool?this._renderMapImageConversionTool():null,this.visibleElements.navigationTool?this._renderNavigationToolAction():null,this.visibleElements.imageEnhancement?this._renderImageEnhancementAction():null),H("calcite-action-group",null,H("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,o=`${s?B(e[a],s):e[a]}`;return H("span",{class:A.messageBox},i?`${o} ${i}`:o)}_renderPopupAction(){return H("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?H("div",{class:A.carouselContent},e.items.map((({url:e,objectId:i,rotation:a},s)=>H("div",{class:`${A.carouselItemWrapper}${t.attributes.objectId===i?"--selected":""}`,key:`${A.carouselItemWrapper}-${s}`},H("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 H("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 H("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 H("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(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 H("div",{class:this.classes(j.widget,V)},H("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()],R.prototype,"activeLayer",null),e([p()],R.prototype,"currentBestFeature",null),e([p()],R.prototype,"currentCoverageVisible",null),e([p()],R.prototype,"disabled",null),e([p()],R.prototype,"features",null),e([p()],R.prototype,"imagePointsInView",null),e([p()],R.prototype,"galleryOpened",void 0),e([p()],R.prototype,"icon",null),e([p()],R.prototype,"imageEnhancementToolActive",void 0),e([p({readOnly:!0})],R.prototype,"imageGalleryEnabled",null),e([p()],R.prototype,"imageOverlaysOpened",void 0),e([p({readOnly:!0})],R.prototype,"invalidCameraHeading",null),e([p()],R.prototype,"isAdditionalCoverageVisible",null),e([p()],R.prototype,"isAdditionalPointSourcesVisible",null),e([p()],R.prototype,"mapImageConversionToolState",null),e([p()],R.prototype,"layer",null),e([p()],R.prototype,"listItemCreatedFunction",null),e([p()],R.prototype,"navigationToolActive",void 0),e([p()],R.prototype,"onOverlayAction",void 0),e([p({type:k})],R.prototype,"viewModel",void 0),e([p(),$("esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer")],R.prototype,"messages",void 0),e([p(),$("esri/core/t9n/Units")],R.prototype,"measurementUnitMessages",void 0),e([p(),$("esri/t9n/common")],R.prototype,"messagesCommon",void 0),e([p()],R.prototype,"pixelMeasurementUnit",void 0),e([p()],R.prototype,"pixelAreaMeasurementUnit",void 0),e([p({readOnly:!0})],R.prototype,"popupEnabled",null),e([p()],R.prototype,"referencePoint",null),e([G(["create","delete","redo","undo","update"]),p({readOnly:!0})],R.prototype,"sketchViewModel",null),e([p()],R.prototype,"view",null),e([p({type:L,nonNullable:!0})],R.prototype,"visibleElements",void 0),e([p()],R.prototype,"determineWorkflowForFeature",null),e([p()],R.prototype,"updateFootprint",null),e([p()],R.prototype,"_navigationToolExpanded",void 0),e([p()],R.prototype,"_navigationTool",void 0),e([p()],R.prototype,"_imageOverlays",void 0),e([p()],R.prototype,"_warningTitleElement",void 0),R=e([u("esri.widgets.OrientedImageryViewer")],R);const W=R;export{W 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 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};