@arcgis/core 6.0.0-next.16 → 6.0.0-next.17

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 (133) hide show
  1. package/assets/esri/core/workers/RemoteClient.js +1 -1
  2. package/assets/esri/core/workers/chunks/164c8eeefa8232b2b191.js +2 -0
  3. package/assets/esri/core/workers/chunks/1967b9c96045a5802d08.js +1 -0
  4. package/assets/esri/core/workers/chunks/{261fea092ee7d27608a0.js → 20a2124cbe43e5527c40.js} +1 -1
  5. package/assets/esri/core/workers/chunks/2853606099602f73d379.js +1 -0
  6. package/assets/esri/core/workers/chunks/2981e904ab62f3ed80d0.js +2 -0
  7. package/assets/esri/core/workers/chunks/32cc59e126df8c96a0cf.js +2 -0
  8. package/assets/esri/core/workers/chunks/{36cbd614454581aaf334.js → 34e0a8a3a2beea50f4f5.js} +1 -1
  9. package/assets/esri/core/workers/chunks/{3baa4a9c52f41bfd6abb.js → 3e30b96a8c75bd5b9ae2.js} +1 -1
  10. package/assets/esri/core/workers/chunks/{c79934cd6883307203f8.js → 42753cf4965a94bc91ca.js} +1 -1
  11. package/assets/esri/core/workers/chunks/{b564ec4e03478f5659db.js → 4c240ca50f70bf30813f.js} +1 -1
  12. package/assets/esri/core/workers/chunks/{70d3055f15d8b0cf4074.js → 532e9cda8ac3601d8892.js} +1 -1
  13. package/assets/esri/core/workers/chunks/{953ba13299e7aa92c1a0.js → 564565246dae080f5e6c.js} +1 -1
  14. package/assets/esri/core/workers/chunks/{2145a512d269d64036b0.js → 58c3ae6030def2ed5f31.js} +1 -1
  15. package/assets/esri/core/workers/chunks/5a19a9c3e01d3d415188.js +1 -0
  16. package/assets/esri/core/workers/chunks/5a830bc35adbedd33783.js +1 -0
  17. package/assets/esri/core/workers/chunks/{9f06ec95bdf0d0b52b41.js → 5b91e2dffdc84c006539.js} +1 -1
  18. package/assets/esri/core/workers/chunks/{5acb422fe3cf693d9d4f.js → 603fdbbe9534c614928f.js} +1 -1
  19. package/assets/esri/core/workers/chunks/{c5a9e77977e867a75ff2.js → 60f92eb03c6e17ab4747.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{67ebc5a3d46b254b725c.js → 612345f17f5eeb99ea8f.js} +1 -1
  21. package/assets/esri/core/workers/chunks/{1b077c92345ffb5916c2.js → 65c98f3449044fa4fd79.js} +1 -1
  22. package/assets/esri/core/workers/chunks/{2bd4ee083ca4ad221f8b.js → 65cb5e39c467a35621ca.js} +1 -1
  23. package/assets/esri/core/workers/chunks/67a35155b8b4d36f171e.js +1 -0
  24. package/assets/esri/core/workers/chunks/{f9c5aa0bbf23e780fecc.js → 6ad309154fe84210d23c.js} +1 -1
  25. package/assets/esri/core/workers/chunks/784d6c6949284ed6e10b.js +1 -0
  26. package/assets/esri/core/workers/chunks/{e2190361247f35b02b32.js → 7b5cd150a4d0139850be.js} +1 -1
  27. package/assets/esri/core/workers/chunks/{9b051745d24d1f43480b.js → 7d2cbc767c336d15e4d5.js} +1 -1
  28. package/assets/esri/core/workers/chunks/{590e6c70206122e4cc3c.js → 844eedda8f749972f707.js} +2 -2
  29. package/assets/esri/core/workers/chunks/9503eedfdda55fc5adab.js +1 -0
  30. package/assets/esri/core/workers/chunks/999c23da883eb11cb29e.js +1 -0
  31. package/assets/esri/core/workers/chunks/9b6929faf649e81265fb.js +1 -0
  32. package/assets/esri/core/workers/chunks/a35c69a4751d28c39907.js +1 -0
  33. package/assets/esri/core/workers/chunks/{ec8b7476eac4718eb0ac.js → a504a5e06cb89a620799.js} +1 -1
  34. package/assets/esri/core/workers/chunks/a596779eaeec7310671d.js +1 -0
  35. package/assets/esri/core/workers/chunks/{d5d0fe8e198ff5a902ee.js → a5c8f9f5be4ef5063b42.js} +1 -1
  36. package/assets/esri/core/workers/chunks/{a7bd5ba4d7d97411fd33.js → ab1660f5f8a5268c2fac.js} +1 -1
  37. package/assets/esri/core/workers/chunks/{4bbe1f28f5f16a6bef05.js → ae0563d573baf91e01f7.js} +1 -1
  38. package/assets/esri/core/workers/chunks/b686cd74975da09b9c91.js +2 -0
  39. package/assets/esri/core/workers/chunks/{aa36c3a9bbaa086e3757.js → b8fd7c3b36981261378b.js} +1 -1
  40. package/assets/esri/core/workers/chunks/bd046399e05e759e0bc2.js +1 -0
  41. package/assets/esri/core/workers/chunks/bd46a04a9ee4ea9e6ef1.js +2 -0
  42. package/assets/esri/core/workers/chunks/bfb39590c548188f5052.js +1 -0
  43. package/assets/esri/core/workers/chunks/{bf35927979fc5e7e0478.js → dd0310184fe4832755a8.js} +1 -1
  44. package/assets/esri/core/workers/chunks/dfa5f1311806473e473f.js +1 -0
  45. package/assets/esri/core/workers/chunks/{634523cc7757da9020e4.js → fb70ab267a08e24b710f.js} +1 -1
  46. package/assets/esri/core/workers/chunks/fc139f251dc0523074e7.js +1 -0
  47. package/assets/esri/themes/base/widgets/_Weather.scss +1 -0
  48. package/assets/esri/themes/dark/main.css +1 -1
  49. package/assets/esri/themes/light/main.css +1 -1
  50. package/assets/esri/themes/light/view.css +1 -1
  51. package/chunks/lerc-wasm.js +1 -1
  52. package/config.js +1 -1
  53. package/core/sql/WhereGrammar.js +2 -2
  54. package/editing/sharedTemplates/executor/builders/equallySpaced.js +1 -1
  55. package/kernel.js +1 -1
  56. package/layers/ElevationLayer.js +1 -1
  57. package/layers/GeoJSONLayer.d.ts +1 -1
  58. package/layers/effects/parser.js +3 -3
  59. package/layers/raster/datasets/ImageServerRaster.js +1 -1
  60. package/layers/raster/formats/ElevationCodec.js +2 -0
  61. package/layers/raster/formats/Lerc.js +1 -1
  62. package/layers/support/LercWorker.js +1 -1
  63. package/layers/support/TileInfo.d.ts +1 -1
  64. package/layers/support/TileInfo.js +1 -1
  65. package/layers/support/layerOriginUtils.js +1 -1
  66. package/package.json +4 -4
  67. package/popup/FeaturesModel.js +1 -1
  68. package/smartMapping/support/adapters/FeatureLayerAdapter.js +1 -1
  69. package/smartMapping/support/adapters/FeatureLayerBinningAdapter.js +1 -1
  70. package/smartMapping/support/adapters/InMemoryLayerAdapter.js +1 -1
  71. package/smartMapping/support/adapters/OGCFeatureLayerAdapter.js +1 -1
  72. package/smartMapping/support/adapters/SceneLayerAdapter.js +1 -1
  73. package/smartMapping/support/adapters/support/utils.js +1 -1
  74. package/time/TimeExtent.d.ts +1 -1
  75. package/views/3d/analysis/Dimension/LengthDimensionSubTool.js +1 -1
  76. package/views/3d/analysis/LineOfSight/LineOfSightTool.js +1 -1
  77. package/views/3d/analysis/Viewshed/ViewshedTool.js +1 -1
  78. package/views/3d/analysis/VolumeMeasurement/VolumeMeasurementTool.js +1 -1
  79. package/views/3d/interactive/measurementTools/areaMeasurement3D/AreaMeasurement3DTool.js +1 -1
  80. package/views/3d/interactive/measurementTools/directLineMeasurement3D/DirectLineMeasurement3DTool.js +1 -1
  81. package/views/3d/layers/IntegratedMesh3DTilesLayerView3D.js +1 -1
  82. package/views/3d/layers/support/MediaLayerInteraction.js +1 -1
  83. package/views/3d/state/utils/navigationUtils.js +1 -1
  84. package/views/3d/webgl-engine/materials/renderers/MergedRenderer.js +1 -1
  85. package/views/View.js +1 -1
  86. package/views/analysis/ElevationProfile/ElevationProfileTool.js +1 -1
  87. package/views/interactive/snapping/SnappingManagerPool.js +1 -1
  88. package/views/interactive/snapping/allLayerSnapping.js +1 -1
  89. package/widgets/AreaMeasurement2D/AreaMeasurement2DViewModel.d.ts +2 -1
  90. package/widgets/BasemapToggle/BasemapToggleViewModel.d.ts +2 -0
  91. package/widgets/DistanceMeasurement2D/DistanceMeasurement2DViewModel.d.ts +2 -1
  92. package/widgets/ElevationProfile/components/Statistics.js +1 -1
  93. package/widgets/Expand/ExpandViewModel.d.ts +2 -0
  94. package/widgets/FeatureTable/support/FeatureStore.js +1 -1
  95. package/widgets/Fullscreen/FullscreenViewModel.d.ts +3 -1
  96. package/widgets/Home/HomeViewModel.d.ts +2 -0
  97. package/widgets/OrientedImageryViewer.js +1 -1
  98. package/widgets/Sketch/SketchViewModel.js +1 -1
  99. package/widgets/Swipe/SwipeViewModel.d.ts +2 -0
  100. package/widgets/Swipe/types.d.ts +9 -2
  101. package/widgets/TimeSlider/TimeSliderViewModel.d.ts +9 -5
  102. package/widgets/TimeSlider/types.d.ts +7 -0
  103. package/widgets/TimeSlider.d.ts +2 -3
  104. package/widgets/TimeSlider.js +1 -1
  105. package/widgets/Track/TrackViewModel.d.ts +4 -0
  106. package/widgets/Track/types.d.ts +1 -0
  107. package/widgets/support/Selector3D/selectorUtils.js +1 -1
  108. package/assets/esri/core/workers/chunks/0050916e462e3c9e0627.js +0 -1
  109. package/assets/esri/core/workers/chunks/23c43f09c4a4749516e1.js +0 -1
  110. package/assets/esri/core/workers/chunks/34cbaf844730ac2d92c2.js +0 -2
  111. package/assets/esri/core/workers/chunks/3c301a689c7853c9fa67.js +0 -2
  112. package/assets/esri/core/workers/chunks/3f946c13ad97fbed867b.js +0 -1
  113. package/assets/esri/core/workers/chunks/604f0f4150fb79ee54c8.js +0 -1
  114. package/assets/esri/core/workers/chunks/6299be5e7e26bf3c6859.js +0 -1
  115. package/assets/esri/core/workers/chunks/6a8dd8b18b0b825b0c1b.js +0 -1
  116. package/assets/esri/core/workers/chunks/745a153d0cd34faa124e.js +0 -1
  117. package/assets/esri/core/workers/chunks/7572c2bc5062e66f6330.js +0 -1
  118. package/assets/esri/core/workers/chunks/76ab353d80d786777161.js +0 -2
  119. package/assets/esri/core/workers/chunks/7b5f3c79e0605c32b267.js +0 -1
  120. package/assets/esri/core/workers/chunks/8483c50ed8f280fd74bb.js +0 -1
  121. package/assets/esri/core/workers/chunks/8cb716f110d164030309.js +0 -1
  122. package/assets/esri/core/workers/chunks/91dd65cf877c8f2e01a7.js +0 -1
  123. package/assets/esri/core/workers/chunks/b49df4ebd4be1181b0f9.js +0 -2
  124. package/assets/esri/core/workers/chunks/b557824bc1fa163d72a3.js +0 -2
  125. package/assets/esri/core/workers/chunks/d311ff96a5a2791d8cfc.js +0 -1
  126. package/assets/esri/core/workers/chunks/f9ff27cfcf0538ac5e26.js +0 -1
  127. package/assets/esri/core/workers/chunks/fc44227c1756f65b95df.js +0 -1
  128. /package/assets/esri/core/workers/chunks/{b557824bc1fa163d72a3.js.LICENSE.txt → 164c8eeefa8232b2b191.js.LICENSE.txt} +0 -0
  129. /package/assets/esri/core/workers/chunks/{b49df4ebd4be1181b0f9.js.LICENSE.txt → 2981e904ab62f3ed80d0.js.LICENSE.txt} +0 -0
  130. /package/assets/esri/core/workers/chunks/{34cbaf844730ac2d92c2.js.LICENSE.txt → 32cc59e126df8c96a0cf.js.LICENSE.txt} +0 -0
  131. /package/assets/esri/core/workers/chunks/{590e6c70206122e4cc3c.js.LICENSE.txt → 844eedda8f749972f707.js.LICENSE.txt} +0 -0
  132. /package/assets/esri/core/workers/chunks/{3c301a689c7853c9fa67.js.LICENSE.txt → b686cd74975da09b9c91.js.LICENSE.txt} +0 -0
  133. /package/assets/esri/core/workers/chunks/{76ab353d80d786777161.js.LICENSE.txt → bd46a04a9ee4ea9e6ef1.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../core/Error.js";import{EventedAccessor as n}from"../core/Evented.js";import r from"../core/Logger.js";import{abortMaybe as i}from"../core/maybe.js";import{debounce as a,logOnError as o,isAbortError as s}from"../core/promiseUtils.js";import{watch as c,when as l}from"../core/reactiveUtils.js";import{throttle as u}from"../core/throttle.js";import{property as d,subclass as f}from"../core/accessorSupport/decorators.js";import p from"../geometry/Point.js";import{project as m}from"../geometry/projectionUtils.js";import h from"../geometry/SpatialReference.js";import{geographicToWebMercator as g}from"../geometry/support/webMercatorUtils.js";import{getGraphicLayer as _}from"../graphic/graphicOriginUtils.js";import{fallbackObjectIDAttribute as v}from"../layers/LayerConstants.js";import{ActionsCollection as y,createDefaultActions as b}from"./actions.js";import{getSelectedTarget as x}from"./actionUtils.js";import S from"./FeatureModel.js";import C from"./support/FeatureAbilities.js";import{getDisplayedSymbol as w}from"../symbols/support/symbolUtils.js";import{system as T}from"../time/constants.js";import{highlightsSupported as E}from"../views/support/layerViewUtils.js";import{GoTo as D}from"../widgets/support/GoTo.js";const O=Symbol(`feature-stream-flush`);let k=null;function A(e,t){switch(e){case`building-scene`:case`map-image`:case`tile`:case`imagery`:return!0;case`imagery-tile`:return t===`2d`;default:return!1}}let j=class extends D(n){constructor(e){super(e),this._centerAtLocationController=null,this._locationUpdateController=null,this._highlightPromises={"highlight-active-feature":null,"highlight-selected-feature":null},this._defaultFeatureAbilities=new C,this._activeFeatureStream=null,this._featureStreamHasYielded=!1,this.actions=new y,this.activeFeature=null,this.aggregatedFeaturesEnabled=!1,this.defaultPopupTemplateEnabled=!1,this.diagnostics=null,this.featuresPerPage=20,this.featureMenuOpen=!1,this.featureItemAbilities=null,this.featureModels=[],this.heading=null,this.highlightEnabled=!0,this.includeDefaultActions=!0,this.open=!1,this.updateLocationEnabled=!1,this.view=null,this.zoomFactor=4,this._debouncedLocationUpdate=a(async()=>{this._cancelLocationUpdate();let e=new AbortController,{signal:t}=e;this._locationUpdateController=e,await this._locationUpdate({signal:t}).catch(()=>{}).finally(()=>{this._locationUpdateController===e&&(this._locationUpdateController=null)})})}initialize(){this.addHandles([c(()=>this.view?.scale,()=>{this.open&&o(this._debouncedLocationUpdate(),r.getLogger(this))}),c(()=>[this.highlightEnabled,this.selectedFeature,this.open,this.view],()=>this._highlightSelectedFeature()),c(()=>[this.highlightEnabled,this.activeFeature,this.open,this.view],()=>this._highlightActiveFeature()),c(()=>this.location,e=>this._locationChange(e)),c(()=>this.selectedFeature,e=>this._selectedFeatureChange(e)),c(()=>[this.featurePage,this.selectedFeatureIndex,this.featuresPerPage,this.featureMenuOpen,this.open,this.initialDisplayMode,this.featureItemAbilities?.attachmentsContent,this.featureItemAbilities?.chartAnimation,this.featureItemAbilities?.customContent,this.featureItemAbilities?.expressionContent,this.featureItemAbilities?.fieldsContent,this.featureItemAbilities?.mediaContent,this.featureItemAbilities?.relationshipContent,this.featureItemAbilities?.textContent,this.featureItemAbilities?.utilityNetworkAssociationsContent,this.actions,this.defaultPopupTemplateEnabled,this.includeDefaultActions,this.features,this.map,this.spatialReference,this.timeZone],(e,t)=>this._updateFeatureModels(t?.[1]??-1),{initial:!0}),l(()=>!this.open,()=>this.aggregatedFeaturesEnabled=!1)])}destroy(){this._cancelLocationUpdate(),this._cancelCenterAtLocation(),this._cancelFeatureStream(),this._destroyFeatureModels(),this.aggregatedFeaturesEnabled=!1,this.view=null,this.map=null,this.spatialReference=null,this.timeZone=null}get defaultActions(){let e=this._get(`defaultActions`)||new y;return e.removeAll(),e.addMany(this.selectedFeatureItem?.defaultActions.toArray()??b()),e}get active(){return this.open&&!this.waitingForResult}set content(e){this.featureStream=null,this._set(`diagnostics`,null),this.features=[],this._set(`content`,e)}get effectiveHeading(){return this.selectedFeatureItem?.heading??this.heading}get featureCount(){return this.features.length}get featurePage(){return this._get(`featurePage`)}set featurePage(e){e==null?this.featureCount||this._set(`featurePage`,null):!Number.isInteger(e)||e<1||e>Math.ceil(this.featureCount/this.featuresPerPage)||e!==1&&e!==(this.featurePage??0)+1||this._set(`featurePage`,e)}set features(e){if(this._get(`features`)===e)return;let t=e||[];this._set(`features`,t),this._activeFeatureStream&&t.length&&this.featurePage!=null||(this.featurePage=t.length?1:null),this._syncSelectedFeatureIndex(t)}get featureStream(){return this._get(`featureStream`)||null}set featureStream(e){this._setFeatureStream(e)}_setFeatureStream(e,t,n){this._set(`diagnostics`,n??null),this._get(`featureStream`)!==e&&(this._set(`featureStream`,e),this._cancelFeatureStream(),e&&(this._featureStreamHasYielded=!1,this._set(`pendingLocation`,t??null),this._activeFeatureStream=e,this._consumeFeatureStream(e,t).catch(()=>{})))}get initialDisplayMode(){return this._initialDisplayMode??(this.view?.focusRegionVisible?`list`:`feature`)}set initialDisplayMode(e){this._initialDisplayMode=e,this._syncSelectedFeatureIndex(this.features)}set location(e){let t=e?.spatialReference?.isWGS84&&this.spatialReference?.isWebMercator?g(e):e;this._set(`location`,t)}get map(){return this.view?.map??null}set map(e){this._override(`map`,e)}get pendingLocation(){return this._get(`pendingLocation`)??null}get streamingFeatures(){return this._activeFeatureStream!=null}get selectedFeature(){return this.selectedFeatureIndex===-1?null:this.features[this.selectedFeatureIndex]??null}get selectedFeatureIndex(){let e=this._get(`selectedFeatureIndex`);return typeof e==`number`?e:-1}set selectedFeatureIndex(e){let{featureCount:t}=this;(isNaN(e)||e<0||!t)&&(e=-1),this.activeFeature=null,this._set(`selectedFeatureIndex`,e)}get selectedFeatureItem(){return this.featureModels[this.selectedFeatureIndex]||null}get spatialReference(){return this.view?.spatialReference??null}set spatialReference(e){this._override(`spatialReference`,e)}get state(){return this.view?this.view.ready?`ready`:`disabled`:this.map?`ready`:`disabled`}get timeZone(){return this.view?.timeZone??T}set timeZone(e){this._overrideIfSome(`timeZone`,e)}get waitingForContents(){return this.featureModels.some(e=>e.waitingForContent)}get waitingForResult(){return this.streamingFeatures&&!this._featureStreamHasYielded}zoomTo(e){return this.callGoTo(e)}clear(){this._cancelFeatureStream(),this._set(`diagnostics`,null),this.set({featureStream:null,features:[],content:null,heading:null,location:null,activeFeature:null})}openFeatureStream(e){this._setFeatureStream(e.featureStream,e.location??null,e.diagnostics),this.open=!0}async fetchFeatures(e,n){let{view:r}=this;if(!r||!e)throw new t(`fetch-features:invalid-screenpoint-or-view`,`Cannot fetch features without a screen point/screen area and view.`,{screenPoint:e,view:r});let i={},a=r.fetchPopupFeatures(e,{diagnostics:i,pointerType:n?.event?.pointerType,defaultPopupTemplateEnabled:this.defaultPopupTemplateEnabled,signal:n?.signal});this._setFeatureStream(a,void 0,i)}next(){this.selectedFeatureIndex=this._getRoundRobinIndex(this.selectedFeatureIndex+1,this.featureCount)}previous(){this.selectedFeatureIndex=this._getRoundRobinIndex(this.selectedFeatureIndex-1,this.featureCount)}_syncSelectedFeatureIndex(e){let{selectedFeatureIndex:t}=this,n=this._activeFeatureStream!=null&&e.length>0;this.initialDisplayMode===`list`?n||(this.selectedFeatureIndex=-1):n&&t===-1?this.selectedFeatureIndex=0:n&&t!==-1||(this.selectedFeatureIndex=e.length?0:-1)}_centerAtLocation(){let{view:e}=this,n=x(this);this._cancelCenterAtLocation();let i=new AbortController,{signal:a}=i;return this._centerAtLocationController=i,!n||!e?Promise.reject(new t(`center-at-location:invalid-target-or-view`,`Cannot center at a location without a target and view.`,{target:n,view:e})):this.callGoTo({target:{target:n,scale:e.scale},options:{signal:a}}).catch(e=>{s(e)||r.getLogger(this).error(e)})}_getRoundRobinIndex(e,t){return(e+t)%t}_locationChange(e){let{selectedFeature:t,updateLocationEnabled:n,view:r}=this;r&&!this._locationUpdateController&&n&&e&&(!t||t.geometry)&&this._centerAtLocation()}async _selectedFeatureChange(e){let{location:t,updateLocationEnabled:n,view:r}=this;if(this.aggregatedFeaturesEnabled=!1,!e||!r)return;let i=_(e)?.type;if((i===`map-image`||i===`imagery`||i===`imagery-tile`)&&(e.symbol=await w(e)),(n||!t)&&e.geometry){if(e.geometry.type===`point`){this.location=e.geometry;return}let{labelPointExecute:t}=await import(`../geometry/operators/labelPointOperator.js`);this.location=t(e.geometry)}else if(n&&!e.geometry){await this._centerAtLocation();let e=r.center?.clone();e&&(this.location=e)}}_waitingForResultChange(){!this.featureCount&&this.featureStream&&(this.open=!1)}_destroyFeatureModels(){this.featureModels.forEach(e=>e&&!e.destroyed&&e.destroy()),this._set(`featureModels`,[])}_reconcileFeatureModels(e,t){let n=[],r=new Map;if(this.featureModels.forEach((t,i)=>{let a=t?.graphic;if(!a||t.destroyed)t.destroy();else if(e[i]===a)n[i]=t;else{let e=r.get(a);e?e.push(t):r.set(a,[t])}}),!r.size)return n;for(let e of r.values())e.reverse();for(let t=0;t<e.length&&r.size;t++){if(n[t])continue;let i=e[t],a=r.get(i);a&&(n[t]=a.pop(),a.length||r.delete(i))}let i=this.selectedFeatureIndex,a=e[i],o=this.featureModels[t],s=null;for(let e of r.values())for(let t of e)t===o?s=t:t.destroy();return s&&(a&&!n[i]?(s.graphic=a,n[i]=s):s.destroy()),n}_updateFeatureModels(e){let{selectedFeature:t,features:n}=this;if(!n.length){this._destroyFeatureModels();return}let r={abilities:this.featureItemAbilities??this._defaultFeatureAbilities,actions:this.actions,defaultPopupTemplateEnabled:this.defaultPopupTemplateEnabled,includeDefaultActions:this.includeDefaultActions,spatialReference:this.spatialReference,location:this.location,map:this.map,view:this.view,timeZone:this.timeZone},i=this._reconcileFeatureModels(n,e);i.forEach(e=>e.set(r));let a=e=>{let t=n[e];t&&!i[e]&&(i[e]=new S({...r,graphic:t}))};if(t&&a(this.selectedFeatureIndex),(this.featurePage??0)>1||this.open&&(this.featureMenuOpen||this.initialDisplayMode===`list`)){let e=Math.min((this.featurePage??0)*this.featuresPerPage,n.length);for(let t=0;t<e;t++)a(t)}this._set(`featureModels`,i)}_cancelCenterAtLocation(){this._centerAtLocationController=i(this._centerAtLocationController)}_cancelFeatureStream(){this.removeHandles(O);let e=this._activeFeatureStream;this._activeFeatureStream=null,this._set(`pendingLocation`,null),this._get(`featureStream`)===e&&this._set(`featureStream`,null),e?.return&&e.return(void 0).catch(()=>{})}async _locationUpdate(e){let{spatialReference:t}=this,n=this.selectedFeature,i=n?.geometry?.type,a=this.location;if(i&&i!==`mesh`&&t&&a&&n){if(i===`point`){let{labelPointExecute:t}=await import(`../geometry/operators/labelPointOperator.js`);if(e?.signal?.aborted||this.selectedFeature!==n||!n.geometry)return;this.location=t(n.geometry)}else try{let r=n.geometry,i=this._getHighlightLayer(n),o=n.getObjectId();if(!i||!this.view)return;if(o!=null){let n=this.view?.allLayerViews.find(e=>e.layer.uid===i.uid);if(!n||!(`queryFeatures`in n))return;let a=n.createQuery();a.outSpatialReference=t,a.objectIds=[o],a.returnGeometry=!0;let{features:s}=await n.queryFeatures(a,e);if(e?.signal?.aborted)return;r=s[0]?.geometry}if(!r||r.type===`mesh`)return;r=m(r,t),k??=await Promise.all([import(`../geometry/operators/intersectsOperator.js`),import(`../geometry/operators/proximityOperator.js`)]);let[{intersectsExecute:s},{proximityGetNearestCoordinate:c}]=k;if(!s(r,a)){let e=c(r,a).coordinate??a;this.selectedFeature===n&&(this.location=e)}}catch(e){s(e)||r.getLogger(this).error(e)}}}_cancelLocationUpdate(){this._locationUpdateController=i(this._locationUpdateController)}async _getLayerView(e,t){return await e.when(),e.whenLayerView(t)}_getHighlightLayer(e){let t=_(e),{layer:n}=e;return t&&`layer`in t&&t.layer?t.layer:t?.type===`map-notes`||t?.type===`sketch`||t?.type===`subtype-group`?t:n??t}_getHighlightLayerView(e,t){return t.type===`subtype-sublayer`&&t.parent&&this._mapIncludesLayer(t.parent)?this._getLayerView(e,t.parent):t&&this._mapIncludesLayer(t)?this._getLayerView(e,t):null}_getHighlightTarget(e,t,n){if(A(t.type,n))return e;let r=e.getObjectId();if(r!=null)return r;let i=t.type===`imagery`?void 0:`objectIdField`in t?t.objectIdField||v:null,a=e.attributes;return a&&i&&a[i]||e}_mapIncludesLayer(e){return!!this.map?.allLayers?.includes(e)}async _highlightFeature(e,t){this.removeHandles(e);let n=this[t];if(!n)return;let{highlightEnabled:r,view:i,open:a}=this;if(!i||!r||!a)return;let o=this._getHighlightLayer(n);if(!o)return;let s=this._getHighlightLayerView(i,o);if(!s)return;this._highlightPromises[e]=s;let c=await s;if(!c||!E(c)||this._highlightPromises[e]!==s||!this[t]||!this.highlightEnabled)return;let l=c.highlight(this._getHighlightTarget(n,o,i.type));this.addHandles(l,e)}async _highlightActiveFeature(){return this._highlightFeature(`highlight-active-feature`,`activeFeature`)}async _highlightSelectedFeature(){return this._highlightFeature(`highlight-selected-feature`,`selectedFeature`)}async _consumeFeatureStream(e,t){if(e!==this._activeFeatureStream)return;let n=[],r=u(()=>{let t=n;n=[],e===this._activeFeatureStream&&t.length&&this._addFeatures(t)},16);this.addHandles({remove:()=>{r.remove(),n=[]}},O);try{for await(let i of e){if(e!==this._activeFeatureStream)return;let a=!this._featureStreamHasYielded;a&&(this.features=[]),t!==void 0&&(this.location=t,t=void 0),this._set(`pendingLocation`,null),a?(this._addFeatures([i]),e===this._activeFeatureStream&&(this._featureStreamHasYielded=!0)):(n.push(i),r())}}finally{this._activeFeatureStream===e&&r.forceUpdate(),this._activeFeatureStream===e&&(this.removeHandles(O),this._featureStreamHasYielded||(this.features=[]),this._activeFeatureStream=null,this._set(`pendingLocation`,null),this._waitingForResultChange())}}_addFeatures(e){let{features:t}=this,n=new Set(t),r=e.filter(e=>!n.has(e)&&(n.add(e),!0));r.length&&(this.features=t.concat(r))}};e([d()],j.prototype,`_initialDisplayMode`,void 0),e([d()],j.prototype,`_activeFeatureStream`,void 0),e([d()],j.prototype,`_featureStreamHasYielded`,void 0),e([d({type:y})],j.prototype,`actions`,void 0),e([d({type:y,readOnly:!0})],j.prototype,`defaultActions`,null),e([d({readOnly:!0})],j.prototype,`active`,null),e([d()],j.prototype,`activeFeature`,void 0),e([d()],j.prototype,`aggregatedFeaturesEnabled`,void 0),e([d({value:null})],j.prototype,`content`,null),e([d({type:Boolean})],j.prototype,`defaultPopupTemplateEnabled`,void 0),e([d({readOnly:!0})],j.prototype,`diagnostics`,void 0),e([d({readOnly:!0})],j.prototype,`effectiveHeading`,null),e([d({readOnly:!0})],j.prototype,`featureCount`,null),e([d({value:null})],j.prototype,`featurePage`,null),e([d({value:[]})],j.prototype,`features`,null),e([d()],j.prototype,`featureStream`,null),e([d()],j.prototype,`featuresPerPage`,void 0),e([d()],j.prototype,`featureMenuOpen`,void 0),e([d({type:C})],j.prototype,`featureItemAbilities`,void 0),e([d({readOnly:!0})],j.prototype,`featureModels`,void 0),e([d()],j.prototype,`heading`,void 0),e([d()],j.prototype,`highlightEnabled`,void 0),e([d()],j.prototype,`includeDefaultActions`,void 0),e([d()],j.prototype,`initialDisplayMode`,null),e([d({type:p})],j.prototype,`location`,null),e([d()],j.prototype,`map`,null),e([d()],j.prototype,`open`,void 0),e([d({readOnly:!0})],j.prototype,`pendingLocation`,null),e([d({readOnly:!0})],j.prototype,`streamingFeatures`,null),e([d({value:null,readOnly:!0})],j.prototype,`selectedFeature`,null),e([d({value:-1})],j.prototype,`selectedFeatureIndex`,null),e([d({readOnly:!0})],j.prototype,`selectedFeatureItem`,null),e([d({type:h})],j.prototype,`spatialReference`,null),e([d({readOnly:!0})],j.prototype,`state`,null),e([d()],j.prototype,`timeZone`,null),e([d()],j.prototype,`updateLocationEnabled`,void 0),e([d()],j.prototype,`view`,void 0),e([d({readOnly:!0})],j.prototype,`waitingForContents`,null),e([d({readOnly:!0})],j.prototype,`waitingForResult`,null),e([d()],j.prototype,`zoomFactor`,void 0),j=e([f(`esri.popup.FeaturesModel`)],j);const M=j;export{M as default};
2
+ import{__decorate as e}from"tslib";import t from"../core/Error.js";import{EventedAccessor as n}from"../core/Evented.js";import r from"../core/Logger.js";import{abortMaybe as i}from"../core/maybe.js";import{debounce as a,logOnError as o,isAbortError as s}from"../core/promiseUtils.js";import{watch as c,when as l}from"../core/reactiveUtils.js";import{throttle as u}from"../core/throttle.js";import{property as d,subclass as f}from"../core/accessorSupport/decorators.js";import p from"../geometry/Point.js";import{project as m}from"../geometry/projectionUtils.js";import h from"../geometry/SpatialReference.js";import{geographicToWebMercator as g}from"../geometry/support/webMercatorUtils.js";import{getGraphicLayer as _}from"../graphic/graphicOriginUtils.js";import{fallbackObjectIDAttribute as v}from"../layers/LayerConstants.js";import{ActionsCollection as y,createDefaultActions as b}from"./actions.js";import{getSelectedTarget as x}from"./actionUtils.js";import S from"./FeatureModel.js";import C from"./support/FeatureAbilities.js";import{getDisplayedSymbol as w}from"../symbols/support/symbolUtils.js";import{system as T}from"../time/constants.js";import{highlightsSupported as E}from"../views/support/layerViewUtils.js";import{GoTo as D}from"../widgets/support/GoTo.js";const O=Symbol(`feature-stream-flush`);let k=null;function A(e,t){switch(e){case`building-scene`:case`map-image`:case`tile`:case`imagery`:return!0;case`imagery-tile`:return t===`2d`;default:return!1}}let j=class extends D(n){constructor(e){super(e),this._centerAtLocationController=null,this._locationUpdateController=null,this._highlightPromises={"highlight-active-feature":null,"highlight-selected-feature":null},this._defaultFeatureAbilities=new C,this._activeFeatureStream=null,this._featureStreamHasYielded=!1,this.actions=new y,this.activeFeature=null,this.aggregatedFeaturesEnabled=!1,this.defaultPopupTemplateEnabled=!1,this.diagnostics=null,this.featuresPerPage=20,this.featureMenuOpen=!1,this.featureItemAbilities=null,this.featureModels=[],this.heading=null,this.highlightEnabled=!0,this.includeDefaultActions=!0,this.open=!1,this.updateLocationEnabled=!1,this.view=null,this.zoomFactor=4,this._debouncedLocationUpdate=a(async()=>{this._cancelLocationUpdate();let e=new AbortController,{signal:t}=e;this._locationUpdateController=e,await this._locationUpdate({signal:t}).catch(()=>{}).finally(()=>{this._locationUpdateController===e&&(this._locationUpdateController=null)})})}initialize(){this.addHandles([c(()=>this.view?.scale,()=>{this.open&&o(this._debouncedLocationUpdate(),r.getLogger(this))}),c(()=>[this.highlightEnabled,this.selectedFeature,this.open,this.view],()=>this._highlightSelectedFeature()),c(()=>[this.highlightEnabled,this.activeFeature,this.open,this.view],()=>this._highlightActiveFeature()),c(()=>this.location,e=>this._locationChange(e)),c(()=>!!this.view?.focusRegionVisible,()=>{this._initialDisplayMode===void 0&&this._syncSelectedFeatureIndex(this.features)}),c(()=>this.selectedFeature,e=>this._selectedFeatureChange(e)),c(()=>[this.featurePage,this.selectedFeatureIndex,this.featuresPerPage,this.featureMenuOpen,this.open,this.initialDisplayMode,this.featureItemAbilities?.attachmentsContent,this.featureItemAbilities?.chartAnimation,this.featureItemAbilities?.customContent,this.featureItemAbilities?.expressionContent,this.featureItemAbilities?.fieldsContent,this.featureItemAbilities?.mediaContent,this.featureItemAbilities?.relationshipContent,this.featureItemAbilities?.textContent,this.featureItemAbilities?.utilityNetworkAssociationsContent,this.actions,this.defaultPopupTemplateEnabled,this.includeDefaultActions,this.features,this.map,this.spatialReference,this.timeZone],(e,t)=>this._updateFeatureModels(t?.[1]??-1),{initial:!0}),l(()=>!this.open,()=>this.aggregatedFeaturesEnabled=!1)])}destroy(){this._cancelLocationUpdate(),this._cancelCenterAtLocation(),this._cancelFeatureStream(),this._destroyFeatureModels(),this.aggregatedFeaturesEnabled=!1,this.view=null,this.map=null,this.spatialReference=null,this.timeZone=null}get defaultActions(){let e=this._get(`defaultActions`)||new y;return e.removeAll(),e.addMany(this.selectedFeatureItem?.defaultActions.toArray()??b()),e}get active(){return this.open&&!this.waitingForResult}set content(e){this.featureStream=null,this._set(`diagnostics`,null),this.features=[],this._set(`content`,e)}get effectiveHeading(){return this.selectedFeatureItem?.heading??this.heading}get featureCount(){return this.features.length}get featurePage(){return this._get(`featurePage`)}set featurePage(e){e==null?this.featureCount||this._set(`featurePage`,null):!Number.isInteger(e)||e<1||e>Math.ceil(this.featureCount/this.featuresPerPage)||e!==1&&e!==(this.featurePage??0)+1||this._set(`featurePage`,e)}set features(e){if(this._get(`features`)===e)return;let t=e||[];this._set(`features`,t),this._activeFeatureStream&&t.length&&this.featurePage!=null||(this.featurePage=t.length?1:null),this._syncSelectedFeatureIndex(t)}get featureStream(){return this._get(`featureStream`)||null}set featureStream(e){this._setFeatureStream(e)}_setFeatureStream(e,t,n){this._set(`diagnostics`,n??null),this._get(`featureStream`)!==e&&(this._set(`featureStream`,e),this._cancelFeatureStream(),e&&(this._featureStreamHasYielded=!1,this._set(`pendingLocation`,t??null),this._activeFeatureStream=e,this._consumeFeatureStream(e,t).catch(()=>{})))}get initialDisplayMode(){return this._initialDisplayMode??(this.view?.focusRegionVisible?`list`:`feature`)}set initialDisplayMode(e){this._initialDisplayMode=e,this._syncSelectedFeatureIndex(this.features)}set location(e){let t=e?.spatialReference?.isWGS84&&this.spatialReference?.isWebMercator?g(e):e;this._set(`location`,t)}get map(){return this.view?.map??null}set map(e){this._override(`map`,e)}get pendingLocation(){return this._get(`pendingLocation`)??null}get streamingFeatures(){return this._activeFeatureStream!=null}get selectedFeature(){return this.selectedFeatureIndex===-1?null:this.features[this.selectedFeatureIndex]??null}get selectedFeatureIndex(){let e=this._get(`selectedFeatureIndex`);return typeof e==`number`?e:-1}set selectedFeatureIndex(e){let{featureCount:t}=this;(isNaN(e)||e<0||!t)&&(e=-1),this.activeFeature=null,this._set(`selectedFeatureIndex`,e)}get selectedFeatureItem(){return this.featureModels[this.selectedFeatureIndex]||null}get spatialReference(){return this.view?.spatialReference??null}set spatialReference(e){this._override(`spatialReference`,e)}get state(){return this.view?this.view.ready?`ready`:`disabled`:this.map?`ready`:`disabled`}get timeZone(){return this.view?.timeZone??T}set timeZone(e){this._overrideIfSome(`timeZone`,e)}get waitingForContents(){return this.featureModels.some(e=>e.waitingForContent)}get waitingForResult(){return this.streamingFeatures&&!this._featureStreamHasYielded}zoomTo(e){return this.callGoTo(e)}clear(){this._cancelFeatureStream(),this._set(`diagnostics`,null),this.set({featureStream:null,features:[],content:null,heading:null,location:null,activeFeature:null})}openFeatureStream(e){this._setFeatureStream(e.featureStream,e.location??null,e.diagnostics),this.open=!0}async fetchFeatures(e,n){let{view:r}=this;if(!r||!e)throw new t(`fetch-features:invalid-screenpoint-or-view`,`Cannot fetch features without a screen point/screen area and view.`,{screenPoint:e,view:r});let i={},a=r.fetchPopupFeatures(e,{diagnostics:i,pointerType:n?.event?.pointerType,defaultPopupTemplateEnabled:this.defaultPopupTemplateEnabled,signal:n?.signal});this._setFeatureStream(a,void 0,i)}next(){this.selectedFeatureIndex=this._getRoundRobinIndex(this.selectedFeatureIndex+1,this.featureCount)}previous(){this.selectedFeatureIndex=this._getRoundRobinIndex(this.selectedFeatureIndex-1,this.featureCount)}_syncSelectedFeatureIndex(e){let{selectedFeatureIndex:t}=this,n=this._activeFeatureStream!=null&&e.length>0;this.initialDisplayMode===`list`?n||(this.selectedFeatureIndex=-1):n&&t===-1?this.selectedFeatureIndex=0:n&&t!==-1||(this.selectedFeatureIndex=e.length?0:-1)}_centerAtLocation(){let{view:e}=this,n=x(this);this._cancelCenterAtLocation();let i=new AbortController,{signal:a}=i;return this._centerAtLocationController=i,!n||!e?Promise.reject(new t(`center-at-location:invalid-target-or-view`,`Cannot center at a location without a target and view.`,{target:n,view:e})):this.callGoTo({target:{target:n,scale:e.scale},options:{signal:a}}).catch(e=>{s(e)||r.getLogger(this).error(e)})}_getRoundRobinIndex(e,t){return(e+t)%t}_locationChange(e){let{selectedFeature:t,updateLocationEnabled:n,view:r}=this;r&&!this._locationUpdateController&&n&&e&&(!t||t.geometry)&&this._centerAtLocation()}async _selectedFeatureChange(e){let{location:t,updateLocationEnabled:n,view:r}=this;if(this.aggregatedFeaturesEnabled=!1,!e||!r)return;let i=_(e)?.type;if((i===`map-image`||i===`imagery`||i===`imagery-tile`)&&(e.symbol=await w(e)),(n||!t)&&e.geometry){if(e.geometry.type===`point`){this.location=e.geometry;return}let{labelPointExecute:t}=await import(`../geometry/operators/labelPointOperator.js`);this.location=t(e.geometry)}else if(n&&!e.geometry){await this._centerAtLocation();let e=r.center?.clone();e&&(this.location=e)}}_waitingForResultChange(){!this.featureCount&&this.featureStream&&(this.open=!1)}_destroyFeatureModels(){this.featureModels.forEach(e=>e&&!e.destroyed&&e.destroy()),this._set(`featureModels`,[])}_reconcileFeatureModels(e,t){let n=[],r=new Map;if(this.featureModels.forEach((t,i)=>{let a=t?.graphic;if(!a||t.destroyed)t.destroy();else if(e[i]===a)n[i]=t;else{let e=r.get(a);e?e.push(t):r.set(a,[t])}}),!r.size)return n;for(let e of r.values())e.reverse();for(let t=0;t<e.length&&r.size;t++){if(n[t])continue;let i=e[t],a=r.get(i);a&&(n[t]=a.pop(),a.length||r.delete(i))}let i=this.selectedFeatureIndex,a=e[i],o=this.featureModels[t],s=null;for(let e of r.values())for(let t of e)t===o?s=t:t.destroy();return s&&(a&&!n[i]?(s.graphic=a,n[i]=s):s.destroy()),n}_updateFeatureModels(e){let{selectedFeature:t,features:n}=this;if(!n.length){this._destroyFeatureModels();return}let r={abilities:this.featureItemAbilities??this._defaultFeatureAbilities,actions:this.actions,defaultPopupTemplateEnabled:this.defaultPopupTemplateEnabled,includeDefaultActions:this.includeDefaultActions,spatialReference:this.spatialReference,location:this.location,map:this.map,view:this.view,timeZone:this.timeZone},i=this._reconcileFeatureModels(n,e);i.forEach(e=>e.set(r));let a=e=>{let t=n[e];t&&!i[e]&&(i[e]=new S({...r,graphic:t}))};if(t&&a(this.selectedFeatureIndex),(this.featurePage??0)>1||this.open&&(this.featureMenuOpen||this.initialDisplayMode===`list`)){let e=Math.min((this.featurePage??0)*this.featuresPerPage,n.length);for(let t=0;t<e;t++)a(t)}this._set(`featureModels`,i)}_cancelCenterAtLocation(){this._centerAtLocationController=i(this._centerAtLocationController)}_cancelFeatureStream(){this.removeHandles(O);let e=this._activeFeatureStream;this._activeFeatureStream=null,this._set(`pendingLocation`,null),this._get(`featureStream`)===e&&this._set(`featureStream`,null),e?.return&&e.return(void 0).catch(()=>{})}async _locationUpdate(e){let{spatialReference:t}=this,n=this.selectedFeature,i=n?.geometry?.type,a=this.location;if(i&&i!==`mesh`&&t&&a&&n){if(i===`point`){let{labelPointExecute:t}=await import(`../geometry/operators/labelPointOperator.js`);if(e?.signal?.aborted||this.selectedFeature!==n||!n.geometry)return;this.location=t(n.geometry)}else try{let r=n.geometry,i=this._getHighlightLayer(n),o=n.getObjectId();if(!i||!this.view)return;if(o!=null){let n=this.view?.allLayerViews.find(e=>e.layer.uid===i.uid);if(!n||!(`queryFeatures`in n))return;let a=n.createQuery();a.outSpatialReference=t,a.objectIds=[o],a.returnGeometry=!0;let{features:s}=await n.queryFeatures(a,e);if(e?.signal?.aborted)return;r=s[0]?.geometry}if(!r||r.type===`mesh`)return;r=m(r,t),k??=await Promise.all([import(`../geometry/operators/intersectsOperator.js`),import(`../geometry/operators/proximityOperator.js`)]);let[{intersectsExecute:s},{proximityGetNearestCoordinate:c}]=k;if(!s(r,a)){let e=c(r,a).coordinate??a;this.selectedFeature===n&&(this.location=e)}}catch(e){s(e)||r.getLogger(this).error(e)}}}_cancelLocationUpdate(){this._locationUpdateController=i(this._locationUpdateController)}async _getLayerView(e,t){return await e.when(),e.whenLayerView(t)}_getHighlightLayer(e){let t=_(e),{layer:n}=e;return t&&`layer`in t&&t.layer?t.layer:t?.type===`map-notes`||t?.type===`sketch`||t?.type===`subtype-group`?t:n??t}_getHighlightLayerView(e,t){return t.type===`subtype-sublayer`&&t.parent&&this._mapIncludesLayer(t.parent)?this._getLayerView(e,t.parent):t&&this._mapIncludesLayer(t)?this._getLayerView(e,t):null}_getHighlightTarget(e,t,n){if(A(t.type,n))return e;let r=e.getObjectId();if(r!=null)return r;let i=t.type===`imagery`?void 0:`objectIdField`in t?t.objectIdField||v:null,a=e.attributes;return a&&i&&a[i]||e}_mapIncludesLayer(e){return!!this.map?.allLayers?.includes(e)}async _highlightFeature(e,t){this.removeHandles(e);let n=this[t];if(!n)return;let{highlightEnabled:r,view:i,open:a}=this;if(!i||!r||!a)return;let o=this._getHighlightLayer(n);if(!o)return;let s=this._getHighlightLayerView(i,o);if(!s)return;this._highlightPromises[e]=s;let c=await s;if(!c||!E(c)||this._highlightPromises[e]!==s||!this[t]||!this.highlightEnabled)return;let l=c.highlight(this._getHighlightTarget(n,o,i.type));this.addHandles(l,e)}async _highlightActiveFeature(){return this._highlightFeature(`highlight-active-feature`,`activeFeature`)}async _highlightSelectedFeature(){return this._highlightFeature(`highlight-selected-feature`,`selectedFeature`)}async _consumeFeatureStream(e,t){if(e!==this._activeFeatureStream)return;let n=[],r=u(()=>{let t=n;n=[],e===this._activeFeatureStream&&t.length&&this._addFeatures(t)},16);this.addHandles({remove:()=>{r.remove(),n=[]}},O);try{for await(let i of e){if(e!==this._activeFeatureStream)return;let a=!this._featureStreamHasYielded;a&&(this.features=[]),t!==void 0&&(this.location=t,t=void 0),this._set(`pendingLocation`,null),a?(this._addFeatures([i]),e===this._activeFeatureStream&&(this._featureStreamHasYielded=!0)):(n.push(i),r())}}finally{this._activeFeatureStream===e&&r.forceUpdate(),this._activeFeatureStream===e&&(this.removeHandles(O),this._featureStreamHasYielded||(this.features=[]),this._activeFeatureStream=null,this._set(`pendingLocation`,null),this._waitingForResultChange())}}_addFeatures(e){let{features:t}=this,n=new Set(t),r=e.filter(e=>!n.has(e)&&(n.add(e),!0));r.length&&(this.features=t.concat(r))}};e([d()],j.prototype,`_initialDisplayMode`,void 0),e([d()],j.prototype,`_activeFeatureStream`,void 0),e([d()],j.prototype,`_featureStreamHasYielded`,void 0),e([d({type:y})],j.prototype,`actions`,void 0),e([d({type:y,readOnly:!0})],j.prototype,`defaultActions`,null),e([d({readOnly:!0})],j.prototype,`active`,null),e([d()],j.prototype,`activeFeature`,void 0),e([d()],j.prototype,`aggregatedFeaturesEnabled`,void 0),e([d({value:null})],j.prototype,`content`,null),e([d({type:Boolean})],j.prototype,`defaultPopupTemplateEnabled`,void 0),e([d({readOnly:!0})],j.prototype,`diagnostics`,void 0),e([d({readOnly:!0})],j.prototype,`effectiveHeading`,null),e([d({readOnly:!0})],j.prototype,`featureCount`,null),e([d({value:null})],j.prototype,`featurePage`,null),e([d({value:[]})],j.prototype,`features`,null),e([d()],j.prototype,`featureStream`,null),e([d()],j.prototype,`featuresPerPage`,void 0),e([d()],j.prototype,`featureMenuOpen`,void 0),e([d({type:C})],j.prototype,`featureItemAbilities`,void 0),e([d({readOnly:!0})],j.prototype,`featureModels`,void 0),e([d()],j.prototype,`heading`,void 0),e([d()],j.prototype,`highlightEnabled`,void 0),e([d()],j.prototype,`includeDefaultActions`,void 0),e([d()],j.prototype,`initialDisplayMode`,null),e([d({type:p})],j.prototype,`location`,null),e([d()],j.prototype,`map`,null),e([d()],j.prototype,`open`,void 0),e([d({readOnly:!0})],j.prototype,`pendingLocation`,null),e([d({readOnly:!0})],j.prototype,`streamingFeatures`,null),e([d({value:null,readOnly:!0})],j.prototype,`selectedFeature`,null),e([d({value:-1})],j.prototype,`selectedFeatureIndex`,null),e([d({readOnly:!0})],j.prototype,`selectedFeatureItem`,null),e([d({type:h})],j.prototype,`spatialReference`,null),e([d({readOnly:!0})],j.prototype,`state`,null),e([d()],j.prototype,`timeZone`,null),e([d()],j.prototype,`updateLocationEnabled`,void 0),e([d()],j.prototype,`view`,void 0),e([d({readOnly:!0})],j.prototype,`waitingForContents`,null),e([d({readOnly:!0})],j.prototype,`waitingForResult`,null),e([d()],j.prototype,`zoomFactor`,void 0),j=e([f(`esri.popup.FeaturesModel`)],j);const M=j;export{M as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../Graphic.js";import{pickRandom as n}from"../../../core/arrayUtils.js";import r from"../../../core/Error.js";import{throwIfAborted as i}from"../../../core/promiseUtils.js";import{property as a,subclass as o}from"../../../core/accessorSupport/decorators.js";import{isHostedAgolService as s}from"../../../layers/support/arcgisLayerUrl.js";import{isTimeOnlyField as c,isNumericField as l}from"../../../layers/support/fieldUtils.js";import{generateRenderer as u}from"../../../rest/generateRenderer.js";import d from"../../../rest/support/GenerateRendererParameters.js";import f from"../../../rest/support/PivotQuery.js";import p from"../../../rest/support/StatisticDefinition.js";import m from"../../../rest/support/UniqueValueDefinition.js";import h from"../../../rest/support/UnPivotDefinition.js";import{getArcadeForPredominantCategory as g,getSQLForPredominantCategoryName as _}from"../../statistics/support/predominanceUtils.js";import{mergeWhereClauses as v,getRangeExpr as y,getSQLFilterForNormalization as b}from"../../statistics/support/utils.js";import{WorkerClient as x}from"../../statistics/support/WorkerClient.js";import{isAnyDateField as S,isIntegerField as C,castIntegerFieldToFloat as w,fieldDelimiter as T}from"../utils.js";import E from"./InMemoryLayerAdapter.js";import{getQueryParamsForExpr as ee,getDataRange as D,getAttributeBinsQuery as O,processQueryAttributeBinsResult as k,binParamsFromGenRend as A}from"./support/histogramUtils.js";import{ensureFeaturesJSON as j,getSummaryStatsQuery as M,getSummaryStatisticsFromFeatureSet as N,getSummaryStatsQueryForFields as P,getSummaryStatsPivotQuery as F,getUVQuery as I,getUniqueValuesFromFeatureSet as L,defaultNumBins as R,updateQueryWithFeatureFilter as z,getHistogramFromFeatureSet as B,getFieldExpr as V,getDomainsForFields as H,getBins as U,getPredominantCategoriesFromUVInfos as W,getMissingFields as G}from"./support/utils.js";import{processSummaryStatisticsResult as K,createUVResult as q,getEqualIntervalBins as J,createClassBreaksDefinition as Y,resolveCBResult as X}from"../../../statistics/utils.js";import{getScaleToResolutionFactor as te}from"../../../views/2d/viewpointUtils.js";const Z=2e4;let Q=class extends E{constructor(){super(...arguments),this.adapterName=`feature-layer-adapter`}_isStatsSupportedOnService(){let e=this.layer;if(!e.capabilities?.query?.supportsStatistics||this.geometryType===`multipatch`&&!s(e.url)&&e.version<10.5)throw new r(`${this.adapterName}:not-supported`,`Layer does not support statistics query`);return Promise.resolve()}_fetchFeaturesFromService(e,t){return this.layer.queryFeatures(e,{signal:t}).then(e=>e.features)}_fetchFeaturesJSONFromService(e,t){return this._fetchFeaturesFromService(e,t).then(j)}_summaryStatsFromGenRend(e){let t=e.normalizationType,n=e.normalizationField;return this.classBreaks({field:e.field,numClasses:5,classificationMethod:`standard-deviation`,standardDeviationInterval:.25,normalizationType:t,normalizationField:t===`field`?n:void 0,minValue:e.minValue,maxValue:e.maxValue,filter:e.filter,signal:e.signal}).then(t=>{let n,r,i;if(t.classBreakInfos?.some(e=>(e.hasAvg&&(n=e),!!n)),n){let e=n.maxValue-n.minValue;r=n.minValue+e/2,i=e*4}let a={min:t.minValue,max:t.maxValue,avg:r,stddev:i};return K(a,e.outStatisticTypes)})}async _summaryStatsFromServiceQuery(e,t){await this._isStatsSupportedOnService(),e.normalizationType===`percent-of-total`&&(e.normalizationTotal=await this._getNormalizationTotal(e.field,e.normalizationType,e.filter));let n=S(t)||c(t),r=(`capabilities`in this.layer?this.layer.capabilities:null)?.query?.supportsPercentileStatistics??!1,i=M(this,e,t,r),a=await this.layer.queryFeatures(i,{signal:e.signal}),o=N(a,n);return K(o,e.outStatisticTypes)}async _summaryStatsForFieldsBasic(e){let{outStatisticTypes:t,fields:n}=e,r=[];for(let t=0;t<n.length;t+=50){let i=n.slice(t,t+50),a=P(this,e,i);r.push(this.layer.queryFeatures(a,{signal:e.signal}))}let i=(await Promise.all(r)).flatMap(e=>e.features).map(e=>e.attributes).reduce((e,t)=>Object.assign(e,t),{}),a={};for(let e in i){let t=e.match(/^(\w+)_value_/);if(i[e]!=null&&t)switch(t[1]){case`min`:a.min=a.min==null?i[e]:Math.min(a.min,i[e]);break;case`max`:a.max=a.max==null?i[e]:Math.max(a.max,i[e]);break;case`sum`:a.sum=(a.sum||0)+i[e];break;case`count`:a.count=(a.count||0)+i[e]}}return K(a,t)}async _summaryStatsForFieldsAdvanced(e,t){let{outStatisticTypes:n,fields:r}=e,i=n?.exclude?.includes(`variance`)||n?.include&&!n.include.includes(`variance`),a=n?.exclude?.includes(`stddev`)||n?.include&&!n.include.includes(`stddev`);if(t.sum==null||!t.count||i&&a)return t;t.avg=t.sum/t.count;let o=[];for(let n=0;n<r.length;n+=50){let i=r.slice(n,n+50),a=P(this,e,i);a.outStatistics=[];for(let e of i){let n=`sumOfSquares_${e}`,r=`(power(${C(this.layer,e)?w(e):e} - ${t.avg}, 2))`,i=new p({statisticType:`sum`,onStatisticField:r,outStatisticFieldName:n});a.outStatistics.push(i)}o.push(this.layer.queryFeatures(a,{signal:e.signal}))}return t.variance=(await Promise.all(o)).reduce((e,t)=>e+Object.values(t.features[0].attributes).reduce((e,t)=>e+t,0),0)/(t.count-1),t.stddev=Math.sqrt(t.variance),K(t,n)}async _summaryStatsForFields(e){let t=await this._summaryStatsForFieldsBasic(e);return this._summaryStatsForFieldsAdvanced(e,t)}async _summaryStatsUsingQueryPivot(e){await this._isStatsSupportedOnService();let t=(`capabilities`in this.layer?this.layer.capabilities:null)?.query?.supportsPercentileStatistics??!1,n=F(this,e,t),r=await this.layer.queryPivot(n,{signal:e.signal}),i=N(r,!1);return K(i,e.outStatisticTypes)}_uvFromGenRenderer(e,t){let n=e.field??void 0,r=new m({attributeField:n}),i=new d({classificationDefinition:r});return this.generateRenderer(i,e.signal).then(e=>{let t={},r=this.getField(n);return e.uniqueValues.forEach(e=>{let n=e.value;(n==null||n===``||typeof n==`string`&&(n.trim()===``||n.toLowerCase()===`<null>`))&&(n=null),t[n]==null?t[n]={count:e.count,data:l(r)&&n?Number(n):n}:t[n].count=t[n].count+e.count}),{count:t}}).then(n=>q(n,[t],e.returnAllCodedValues))}async _uvFromServiceQuery(e,t){return this._isStatsSupportedOnService().then(()=>this.layer.queryFeatures(I(this,e),{signal:e.signal})).then(t=>L(t,{layer:this,field:e.field,field2:e.field2,field3:e.field3,fieldDelimiter:T,view:e.view,signal:e.signal})).then(n=>q(n,t,e.returnAllCodedValues,T))}_getNormalizationTotal(e,t,n,r){return e&&t===`percent-of-total`?this.summaryStatistics({field:e,outStatisticTypes:{include:[`sum`]},filter:n,signal:r}).then(e=>e.sum):Promise.resolve(null)}_histogramForExpr(e){return this._getNormalizationTotal(e.field,e.normalizationType,e.filter,e.signal).then(t=>{let n=ee(e,this,t);return D(n,this,e.minValue,e.maxValue).then(r=>{let i=r.min,a=r.max;if(i==null||a==null)return{bins:[],minValue:i,maxValue:a,normalizationTotal:t};let o=e.numBins||R,s=J(i,a,o),c=$(n.sqlExpression,s,e.minValue!=null&&e.maxValue!=null),l=new p({statisticType:`count`,outStatisticFieldName:`countOFExpr`,onStatisticField:`1`}),u=this.layer.createQuery();return u.where=v(u.where,n.sqlWhere),u.sqlFormat=`standard`,u.outStatistics=[l],u.groupByFieldsForStatistics=[c],u.orderByFields=[c],z(u,e.filter),this._isStatsSupportedOnService().then(()=>this.layer.queryFeatures(u,{signal:n.signal})).then(e=>B(e,i,a,o,t))})})}async _histogramForFields(e){let{min:t,max:n}=await D({fields:e.fields,sqlWhere:e.sqlWhere,filter:e.filter,signal:e.signal},this,e.minValue,e.maxValue);if(t==null||n==null)return{bins:[],minValue:t,maxValue:n};let r=`newField`,i=e.numBins||R,a=$(r,J(t,n,i),e.minValue!=null&&e.maxValue!=null),o=new p({statisticType:`count`,outStatisticFieldName:`countOFExpr`,onStatisticField:r}),s=new f,{where:c,timeExtent:l}=this.createQuery();return s.where=v(c,e.sqlWhere),s.outPivots=[new h({sourceFields:e.fields,valueFieldName:r})],s.outStatistics=[o],s.groupByFieldsForStatistics=[a],s.orderByFields=[a],s.timeExtent=l,z(s,e.filter),this._isStatsSupportedOnService().then(()=>this.layer.queryPivot(s,{signal:e.signal})).then(e=>B(e,t,n,i))}async _histogramFromQueryAttributeBins(e){let{field:t,normalizationType:n,filter:r,signal:i}=e,a=await this._getNormalizationTotal(t,n,r,i),{query:o,min:s,max:c}=await O(e,this,a,this.createQuery());if(!o)return{bins:[],minValue:s,maxValue:c,normalizationTotal:a};let l=await this.layer.queryAttributeBins(o,{signal:i});return k(l,t?this.getField(t):null,{minValue:s,maxValue:c,normalizationTotal:a})}_classBreaksFromGenRend(e){let{field:t,normalizationType:n,normalizationField:r,normalizationTotal:i,signal:a}=e,o=b({field:t,normalizationType:n,normalizationField:r}),s=V({field:t,normalizationType:n,normalizationField:r,normalizationTotal:i,layer:this}),c=y(s,e.minValue,e.maxValue),l=Y({field:t,normalizationType:n,normalizationField:r,classificationMethod:e.classificationMethod,standardDeviationInterval:e.standardDeviationInterval,breakCount:e.numClasses||5}),u=new d({classificationDefinition:l});return u.where=v(o,c),this.generateRenderer(u,a).then(t=>X(t,e.classificationMethod))}async summaryStatistics(e){let{field:t,fields:n,normalizationType:a,valueExpression:o,sqlExpression:s,view:l,features:u,useFeaturesInView:d}=e,f=t?this.getField(t):null,p=S(f)||c(f),m=o&&!(s&&this.supportsSQLExpression),h=this._hasLocalSource||u||d,g=l?.type===`3d`;if(n?.length){let t={...e,fields:n};if(!this.layer.capabilities?.operations?.supportsQueryPivot)return await this._summaryStatsForFields(t);try{return await this._summaryStatsUsingQueryPivot(t)}catch{return await this._summaryStatsForFields(t)}}if(h||m)return m||u||d||g||this._hasLocalSource&&!this.layer.capabilities.query.supportsStatistics?this._summaryStatsFromMemory(e,f):this._summaryStatsFromClientQuery(e,f);if(!this.supportsSQLExpression&&(p||s||a===`natural-log`||a===`square-root`))throw new r(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);return(a&&!this.supportsSQLExpression?this._summaryStatsFromGenRend(e):this._summaryStatsFromServiceQuery(e,f)).catch(()=>(i(e.signal),this._summaryStatsFromMemory(e,f)))}async uniqueValues(e){let{valueExpression:t,sqlExpression:n,features:r,useFeaturesInView:a,signal:o}=e,s=t&&!(n&&this.supportsSQLExpression),c=this._hasLocalSource||r||a||s,l=e.view?.type===`3d`,u=await H(e,this);return c?s||r||a||l||this._hasLocalSource&&!this.layer.capabilities.query.supportsStatistics?this._uvFromMemory(e,u):this._uvFromClientQuery(e,u):this._uvFromServiceQuery(e,u).catch(t=>(i(o),e.field&&!e.field2&&!e.field3&&!e.filter?this._uvFromGenRenderer(e,u[0]):t)).catch(()=>(i(o),l?this._uvFromMemory(e,u):this._uvFromClientQuery(e,u)))}async histogram(e){let{field:t,normalizationType:n,normalizationField:a,classificationMethod:o,view:s,filter:l,signal:u}=e,d=t?this.getField(t):null,f=S(d)||c(d),p=e.valueExpression||e.sqlExpression,m=e.valueExpression&&!(e.sqlExpression&&this.supportsSQLExpression),h=this._hasLocalSource||e.features||e.useFeaturesInView||m,g=this.supportsSQLExpression,_=!o||o===`equal-interval`,v=e.minValue,b=e.maxValue,x=v!=null&&b!=null,C=e.numBins||R;if(e.fields?.length){if(!g)throw new r(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);if(!this.layer.capabilities?.operations?.supportsQueryPivot)throw new r(`${this.adapterName}:not-supported`,`Layer does not support pivot queries`);return this._histogramForFields(e)}if(this.layer.capabilities?.operations?.supportsQueryBins&&e.useQueryAttributeBins&&!m){if(h)return this._histogramFromQueryAttributeBinsFromMemory(e);try{return await this._histogramFromQueryAttributeBins(e)}catch{return i(u),this._histogramFromQueryAttributeBinsFromMemory(e)}}if(e.returnAggregateIds)throw new r(`${this.adapterName}:not-supported`,`returnAggregateIds option is only supported with queryAttributeBins`);if(h)return this._histogramFromMemory(e);if((p||g)&&_){if(!g&&(p||n===`natural-log`||n===`square-root`))throw new r(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);if(this.layer.capabilities.query.supportsOrderBy)return this._histogramForExpr(e)}if(f&&_)throw new r(`${this.adapterName}:not-supported`,`Normalization and date field are not allowed when layer does not support standardized SQL expression for queries`);return n||!_?A(e,this).then(i=>{if(!x)return U(this,i,t,C,s,l,u);if(v>i.max||b<i.min)throw new r(`${this.adapterName}:insufficient-data`,`Range defined by 'minValue' and 'maxValue' does not intersect available data range of the field`);if(_)return U(this,{min:v,max:b,sqlExpr:i.sqlExpr,excludeZerosExpr:i.excludeZerosExpr},t,C,s,l,u);{let r={field:t,normalizationType:n,normalizationField:a,normalizationTotal:i.normTotal,layer:this},o=V(r),c=y(o,v,b);return A(e,this,c).then(e=>U(this,e,t,C,s,l,u))}}):this._histogramForField(e)}async classBreaks(e){let t=e.analyzeData!==!1,n=this._hasLocalSource||e.features||e.useFeaturesInView||e.valueExpression||e.filter;return t&&n?this._classBreaksFromMemory(e):(t?this._classBreaksFromGenRend(e):this._classBreaksFromInterpolation(e)).catch(()=>(i(e.signal),this._classBreaksFromMemory(e)))}async queryFeatureCount(e){if(this._hasLocalSource)throw new r(`${this.adapterName}:not-supported`,`Layer does not support count query`);let t=this.layer,n=t.createQuery();return n.where=v(n.where,e.whereClause),z(n,e.filter),t.queryFeatureCount(n,{signal:e.signal})}async generateRenderer(e,t){let n=this.layer;if(this._hasLocalSource||n.version<10.1)throw new r(`${this.adapterName}:not-supported`,`Layer does not support generateRenderer operation (requires ArcGIS Server version 10.1+)`);let i=n.createQuery();return e.where=v(e.where,i.where),u(n.parsedUrl?.path??``,{source:n.dynamicDataSource??void 0,gdbVersion:n.gdbVersion??void 0},e,{signal:t})}async predominantCategories(e){if(!this._hasLocalSource&&!this.supportsSQLExpression)throw new r(`${this.adapterName}:not-supported`,`Layer does not support advanced SQL expressions and standardized queries`);let{fields:t,view:n,signal:i,filter:a}=e,o=g(t),s=_(t),c=n&&this._hasLocalSource?await this._uvFromMemory({valueExpression:o,view:n,signal:i,filter:a}):await this._uvFromServiceQuery({sqlExpression:s.expression,valueExpression:o,signal:i,filter:a});return W(c.uniqueValueInfos,t)}async getSampleFeatures(e,r){let{view:a,requiredFields:o,returnGeometry:s,sqlWhere:c,filter:l,signal:u}=e,d=e.sampleSize;if(d==null||d===0)return[];let f=this.layer.createQuery(),p=r===`json`;f.outSpatialReference=a?.spatialReference,f.returnGeometry=!!s,f.outFields=o,f.where=v(f.where,c),z(f,l);let m=[],h=!1;if(a)try{let i=await a.whenLayerView(this.layer);if(h=!G(this,o,i).length,h){if(d>=1&&!e.filter&&`getSampleFeatures`in i){await this._waitForLayerViewUpdate(i);let e=await i.getSampleFeatures({minFeatureCount:d,sampleSize:d});if(e!=null)return p?e:e.map(e=>t.fromJSON(e))}if(m=await this._fetchFeaturesFromMemory(i,f,u,r),m.length>=d&&d>0)return n(m,d,1)}}catch{i(u)}try{if(this._hasLocalSource)return h?m:p?await this._fetchFeaturesJSONFromService(f,u):await this._fetchFeaturesFromService(f,u);let t=await this.queryFeatureCount({view:a,filter:l,signal:u}),r=this.layer.capabilities.query.maxRecordCount,i=d===-1?t:d;if(i=r&&i>r?r:i,t<=m.length||m.length>=r)return m;if(f.maxAllowableOffset=e.resolution||(a?a.extent.width/a.width/a.scale:te(this.layer.spatialReference))*4e5,t<=i)return p?await this._fetchFeaturesJSONFromService(f,u):await this._fetchFeaturesFromService(f,u);if(t<=Z){let e=this.layer.createQuery();z(e,l);let t=await this.layer.queryObjectIds();return f.objectIds=n(t,i,1),p?await this._fetchFeaturesJSONFromService(f,u):await this._fetchFeaturesFromService(f,u)}return this.layer.capabilities?.query?.supportsPagination&&(f.num=Math.min(i,Z)),p?await this._fetchFeaturesJSONFromService(f,u):await this._fetchFeaturesFromService(f,u)}catch{return i(u),m}}load(e){let t=this.layer.load(e).then(async t=>{this.geometryType=t.geometryType,this.objectIdField=t.objectIdField,this.supportsSQLExpression=t.capabilities?.query?.supportsSqlExpression,this._hasLocalSource=t.type!==`parquet`&&!t.url&&!!t.source,this.hasQueryEngine=this._hasLocalSource,this.minScale=t.minScale,this.maxScale=t.maxScale,this.fullExtent=t.fullExtent,this.workerClient=x.getInstance(),await this.workerClient.open(e.signal)});return this.addResolvingPromise(t),Promise.resolve(this)}};e([a({readOnly:!0})],Q.prototype,`adapterName`,void 0),e([a({constructOnly:!0})],Q.prototype,`layer`,void 0),Q=e([o(`esri.smartMapping.support.adapters.FeatureLayerAdapter`)],Q);function $(e,t,n){let r=[],i=t.length;return t.forEach((t,a)=>{let[o,s]=t,c=null;c=a===0&&!n?`${e} < ${s}`:a===i-1&&!n?`${e} >= ${o}`:v(`${e} >= ${o}`,`${e} ${a===i-1?` <= `:` < `} ${s}`),r.push(`WHEN (`+c+`) THEN `+(a+1))}),[`CASE`,r.join(` `),`ELSE 0`,`END`].join(` `)}export{Q as default};
2
+ import{__decorate as e}from"tslib";import t from"../../../Graphic.js";import{pickRandom as n}from"../../../core/arrayUtils.js";import r from"../../../core/Error.js";import{throwIfAborted as i}from"../../../core/promiseUtils.js";import{property as a,subclass as o}from"../../../core/accessorSupport/decorators.js";import{isHostedAgolService as s}from"../../../layers/support/arcgisLayerUrl.js";import{isTimeOnlyField as c,isNumericField as l}from"../../../layers/support/fieldUtils.js";import{generateRenderer as u}from"../../../rest/generateRenderer.js";import d from"../../../rest/support/GenerateRendererParameters.js";import f from"../../../rest/support/PivotQuery.js";import p from"../../../rest/support/StatisticDefinition.js";import m from"../../../rest/support/UniqueValueDefinition.js";import h from"../../../rest/support/UnPivotDefinition.js";import{getArcadeForPredominantCategory as g,getSQLForPredominantCategoryName as _}from"../../statistics/support/predominanceUtils.js";import{mergeWhereClauses as v,getRangeExpr as y,getSQLFilterForNormalization as b}from"../../statistics/support/utils.js";import{WorkerClient as x}from"../../statistics/support/WorkerClient.js";import{isAnyDateField as S,isIntegerField as C,castIntegerFieldToFloat as w,fieldDelimiter as T}from"../utils.js";import E from"./InMemoryLayerAdapter.js";import{getQueryParamsForExpr as ee,getDataRange as D,getAttributeBinsQuery as O,processQueryAttributeBinsResult as k,binParamsFromGenRend as A}from"./support/histogramUtils.js";import{ensureFeaturesJSON as j,getSummaryStatsQuery as M,getSummaryStatisticsFromFeatureSet as N,getSummaryStatsQueryForFields as P,getSummaryStatsPivotQuery as F,getUVQuery as I,getUniqueValuesFromFeatureSet as L,defaultNumBins as R,updateQueryWithFeatureFilter as z,getHistogramFromFeatureSet as B,getFieldExpr as V,getDomainsForFields as H,getBins as U,getPredominantCategoriesFromUVInfos as W,getMissingFields as G}from"./support/utils.js";import{processSummaryStatisticsResult as K,createUVResult as q,getEqualIntervalBins as J,createClassBreaksDefinition as Y,resolveCBResult as X}from"../../../statistics/utils.js";import{getScaleToResolutionFactor as te}from"../../../views/2d/viewpointUtils.js";const Z=2e4;let Q=class extends E{constructor(){super(...arguments),this.adapterName=`feature-layer-adapter`}_isStatsSupportedOnService(){let e=this.layer;if(!e.capabilities?.query?.supportsStatistics||this.geometryType===`multipatch`&&!s(e.url)&&e.version<10.5)throw new r(`${this.adapterName}:not-supported`,`Layer does not support statistics query`);return Promise.resolve()}_fetchFeaturesFromService(e,t){return this.layer.queryFeatures(e,{signal:t}).then(e=>e.features)}_fetchFeaturesJSONFromService(e,t){return this._fetchFeaturesFromService(e,t).then(j)}_summaryStatsFromGenRend(e){let t=e.normalizationType,n=e.normalizationField;return this.classBreaks({field:e.field,numClasses:5,classificationMethod:`standard-deviation`,standardDeviationInterval:.25,normalizationType:t,normalizationField:t===`field`?n:void 0,minValue:e.minValue,maxValue:e.maxValue,filter:e.filter,signal:e.signal}).then(t=>{let n,r,i;if(t.classBreakInfos?.some(e=>(e.hasAvg&&(n=e),!!n)),n){let e=n.maxValue-n.minValue;r=n.minValue+e/2,i=e*4}let a={min:t.minValue,max:t.maxValue,avg:r,stddev:i};return K(a,e.outStatisticTypes)})}async _summaryStatsFromServiceQuery(e,t){await this._isStatsSupportedOnService(),e.normalizationType===`percent-of-total`&&(e.normalizationTotal=await this._getNormalizationTotal(e.field,e.normalizationType,e.filter));let n=S(t)||c(t),r=(`capabilities`in this.layer?this.layer.capabilities:null)?.query?.supportsPercentileStatistics??!1,i=M(this,e,t,r),a=await this.layer.queryFeatures(i,{signal:e.signal}),o=N(a,n);return K(o,e.outStatisticTypes)}async _summaryStatsForFieldsBasic(e){let{outStatisticTypes:t,fields:n}=e,r=[];for(let t=0;t<n.length;t+=50){let i=n.slice(t,t+50),a=P(this,e,i);r.push(this.layer.queryFeatures(a,{signal:e.signal}))}let i=(await Promise.all(r)).flatMap(e=>e.features).map(e=>e.attributes).reduce((e,t)=>Object.assign(e,t),{}),a={};for(let e in i){let t=e.match(/^(\w+)_value_/);if(i[e]!=null&&t)switch(t[1]){case`min`:a.min=a.min==null?i[e]:Math.min(a.min,i[e]);break;case`max`:a.max=a.max==null?i[e]:Math.max(a.max,i[e]);break;case`sum`:a.sum=(a.sum||0)+i[e];break;case`count`:a.count=(a.count||0)+i[e]}}return K(a,t)}async _summaryStatsForFieldsAdvanced(e,t){let{outStatisticTypes:n,fields:r}=e,i=n?.exclude?.includes(`variance`)||n?.include&&!n.include.includes(`variance`),a=n?.exclude?.includes(`stddev`)||n?.include&&!n.include.includes(`stddev`);if(t.sum==null||!t.count||i&&a)return t;t.avg=t.sum/t.count;let o=[];for(let n=0;n<r.length;n+=50){let i=r.slice(n,n+50),a=P(this,e,i);a.outStatistics=[];for(let e of i){let n=`sumOfSquares_${e}`,r=`(power(${C(this.layer,e)?w(e):e} - ${t.avg}, 2))`,i=new p({statisticType:`sum`,onStatisticField:r,outStatisticFieldName:n});a.outStatistics.push(i)}o.push(this.layer.queryFeatures(a,{signal:e.signal}))}return t.variance=(await Promise.all(o)).reduce((e,t)=>e+Object.values(t.features[0].attributes).reduce((e,t)=>e+t,0),0)/(t.count-1),t.stddev=Math.sqrt(t.variance),K(t,n)}async _summaryStatsForFields(e){let t=await this._summaryStatsForFieldsBasic(e);return this._summaryStatsForFieldsAdvanced(e,t)}async _summaryStatsUsingQueryPivot(e){await this._isStatsSupportedOnService();let t=(`capabilities`in this.layer?this.layer.capabilities:null)?.query?.supportsPercentileStatistics??!1,n=F(this,e,t),r=await this.layer.queryPivot(n,{signal:e.signal}),i=N(r,!1);return K(i,e.outStatisticTypes)}_uvFromGenRenderer(e,t){let n=e.field??void 0,r=new m({attributeField:n}),i=new d({classificationDefinition:r});return this.generateRenderer(i,e.signal).then(e=>{let t={},r=this.getField(n);return e.uniqueValues.forEach(e=>{let n=e.value;(n==null||n===``||typeof n==`string`&&(n.trim()===``||n.toLowerCase()===`<null>`))&&(n=null),t[n]==null?t[n]={count:e.count,data:l(r)&&n?Number(n):n}:t[n].count=t[n].count+e.count}),{count:t}}).then(n=>q(n,[t],e.returnAllCodedValues))}async _uvFromServiceQuery(e,t){return this._isStatsSupportedOnService().then(()=>this.layer.queryFeatures(I(this,e),{signal:e.signal})).then(t=>L(t,{layer:this,field:e.field,field2:e.field2,field3:e.field3,fieldDelimiter:T,filter:e.filter,view:e.view,signal:e.signal})).then(n=>q(n,t,e.returnAllCodedValues,T))}_getNormalizationTotal(e,t,n,r){return e&&t===`percent-of-total`?this.summaryStatistics({field:e,outStatisticTypes:{include:[`sum`]},filter:n,signal:r}).then(e=>e.sum):Promise.resolve(null)}_histogramForExpr(e){return this._getNormalizationTotal(e.field,e.normalizationType,e.filter,e.signal).then(t=>{let n=ee(e,this,t);return D(n,this,e.minValue,e.maxValue).then(r=>{let i=r.min,a=r.max;if(i==null||a==null)return{bins:[],minValue:i,maxValue:a,normalizationTotal:t};let o=e.numBins||R,s=J(i,a,o),c=$(n.sqlExpression,s,e.minValue!=null&&e.maxValue!=null),l=new p({statisticType:`count`,outStatisticFieldName:`countOFExpr`,onStatisticField:`1`}),u=this.layer.createQuery();return u.where=v(u.where,n.sqlWhere),u.sqlFormat=`standard`,u.outStatistics=[l],u.groupByFieldsForStatistics=[c],u.orderByFields=[c],z(u,e.filter),this._isStatsSupportedOnService().then(()=>this.layer.queryFeatures(u,{signal:n.signal})).then(e=>B(e,i,a,o,t))})})}async _histogramForFields(e){let{min:t,max:n}=await D({fields:e.fields,sqlWhere:e.sqlWhere,filter:e.filter,signal:e.signal},this,e.minValue,e.maxValue);if(t==null||n==null)return{bins:[],minValue:t,maxValue:n};let r=`newField`,i=e.numBins||R,a=$(r,J(t,n,i),e.minValue!=null&&e.maxValue!=null),o=new p({statisticType:`count`,outStatisticFieldName:`countOFExpr`,onStatisticField:r}),s=new f,{where:c,timeExtent:l}=this.createQuery();return s.where=v(c,e.sqlWhere),s.outPivots=[new h({sourceFields:e.fields,valueFieldName:r})],s.outStatistics=[o],s.groupByFieldsForStatistics=[a],s.orderByFields=[a],s.timeExtent=l,z(s,e.filter),this._isStatsSupportedOnService().then(()=>this.layer.queryPivot(s,{signal:e.signal})).then(e=>B(e,t,n,i))}async _histogramFromQueryAttributeBins(e){let{field:t,normalizationType:n,filter:r,signal:i}=e,a=await this._getNormalizationTotal(t,n,r,i),{query:o,min:s,max:c}=await O(e,this,a,this.createQuery());if(!o)return{bins:[],minValue:s,maxValue:c,normalizationTotal:a};let l=await this.layer.queryAttributeBins(o,{signal:i});return k(l,t?this.getField(t):null,{minValue:s,maxValue:c,normalizationTotal:a})}_classBreaksFromGenRend(e){let{field:t,normalizationType:n,normalizationField:r,normalizationTotal:i,signal:a}=e,o=b({field:t,normalizationType:n,normalizationField:r}),s=V({field:t,normalizationType:n,normalizationField:r,normalizationTotal:i,layer:this}),c=y(s,e.minValue,e.maxValue),l=Y({field:t,normalizationType:n,normalizationField:r,classificationMethod:e.classificationMethod,standardDeviationInterval:e.standardDeviationInterval,breakCount:e.numClasses||5}),u=new d({classificationDefinition:l});return u.where=v(o,c),this.generateRenderer(u,a).then(t=>X(t,e.classificationMethod))}async summaryStatistics(e){let{field:t,fields:n,normalizationType:a,valueExpression:o,sqlExpression:s,view:l,features:u,useFeaturesInView:d}=e,f=t?this.getField(t):null,p=S(f)||c(f),m=o&&!(s&&this.supportsSQLExpression),h=this._hasLocalSource||u||d,g=l?.type===`3d`;if(n?.length){let t={...e,fields:n};if(!this.layer.capabilities?.operations?.supportsQueryPivot)return await this._summaryStatsForFields(t);try{return await this._summaryStatsUsingQueryPivot(t)}catch{return await this._summaryStatsForFields(t)}}if(h||m)return m||u||d||g||this._hasLocalSource&&!this.layer.capabilities.query.supportsStatistics?this._summaryStatsFromMemory(e,f):this._summaryStatsFromClientQuery(e,f);if(!this.supportsSQLExpression&&(p||s||a===`natural-log`||a===`square-root`))throw new r(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);return(a&&!this.supportsSQLExpression?this._summaryStatsFromGenRend(e):this._summaryStatsFromServiceQuery(e,f)).catch(()=>(i(e.signal),this._summaryStatsFromMemory(e,f)))}async uniqueValues(e){let{valueExpression:t,sqlExpression:n,features:r,useFeaturesInView:a,signal:o}=e,s=t&&!(n&&this.supportsSQLExpression),c=this._hasLocalSource||r||a||s,l=e.view?.type===`3d`,u=await H(e,this);return c?s||r||a||l||this._hasLocalSource&&!this.layer.capabilities.query.supportsStatistics?this._uvFromMemory(e,u):this._uvFromClientQuery(e,u):this._uvFromServiceQuery(e,u).catch(t=>(i(o),e.field&&!e.field2&&!e.field3&&!e.filter?this._uvFromGenRenderer(e,u[0]):t)).catch(()=>(i(o),l?this._uvFromMemory(e,u):this._uvFromClientQuery(e,u)))}async histogram(e){let{field:t,normalizationType:n,normalizationField:a,classificationMethod:o,view:s,filter:l,signal:u}=e,d=t?this.getField(t):null,f=S(d)||c(d),p=e.valueExpression||e.sqlExpression,m=e.valueExpression&&!(e.sqlExpression&&this.supportsSQLExpression),h=this._hasLocalSource||e.features||e.useFeaturesInView||m,g=this.supportsSQLExpression,_=!o||o===`equal-interval`,v=e.minValue,b=e.maxValue,x=v!=null&&b!=null,C=e.numBins||R;if(e.fields?.length){if(!g)throw new r(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);if(!this.layer.capabilities?.operations?.supportsQueryPivot)throw new r(`${this.adapterName}:not-supported`,`Layer does not support pivot queries`);return this._histogramForFields(e)}if(this.layer.capabilities?.operations?.supportsQueryBins&&e.useQueryAttributeBins&&!m){if(h)return this._histogramFromQueryAttributeBinsFromMemory(e);try{return await this._histogramFromQueryAttributeBins(e)}catch{return i(u),this._histogramFromQueryAttributeBinsFromMemory(e)}}if(e.returnAggregateIds)throw new r(`${this.adapterName}:not-supported`,`returnAggregateIds option is only supported with queryAttributeBins`);if(h)return this._histogramFromMemory(e);if((p||g)&&_){if(!g&&(p||n===`natural-log`||n===`square-root`))throw new r(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);if(this.layer.capabilities.query.supportsOrderBy)return this._histogramForExpr(e)}if(f&&_)throw new r(`${this.adapterName}:not-supported`,`Normalization and date field are not allowed when layer does not support standardized SQL expression for queries`);return n||!_?A(e,this).then(i=>{if(!x)return U(this,i,t,C,s,l,u);if(v>i.max||b<i.min)throw new r(`${this.adapterName}:insufficient-data`,`Range defined by 'minValue' and 'maxValue' does not intersect available data range of the field`);if(_)return U(this,{min:v,max:b,sqlExpr:i.sqlExpr,excludeZerosExpr:i.excludeZerosExpr},t,C,s,l,u);{let r={field:t,normalizationType:n,normalizationField:a,normalizationTotal:i.normTotal,layer:this},o=V(r),c=y(o,v,b);return A(e,this,c).then(e=>U(this,e,t,C,s,l,u))}}):this._histogramForField(e)}async classBreaks(e){let t=e.analyzeData!==!1,n=this._hasLocalSource||e.features||e.useFeaturesInView||e.valueExpression||e.filter;return t&&n?this._classBreaksFromMemory(e):(t?this._classBreaksFromGenRend(e):this._classBreaksFromInterpolation(e)).catch(()=>(i(e.signal),this._classBreaksFromMemory(e)))}async queryFeatureCount(e){if(this._hasLocalSource)throw new r(`${this.adapterName}:not-supported`,`Layer does not support count query`);let t=this.layer,n=t.createQuery();return n.where=v(n.where,e.whereClause),z(n,e.filter),t.queryFeatureCount(n,{signal:e.signal})}async generateRenderer(e,t){let n=this.layer;if(this._hasLocalSource||n.version<10.1)throw new r(`${this.adapterName}:not-supported`,`Layer does not support generateRenderer operation (requires ArcGIS Server version 10.1+)`);let i=n.createQuery();return e.where=v(e.where,i.where),u(n.parsedUrl?.path??``,{source:n.dynamicDataSource??void 0,gdbVersion:n.gdbVersion??void 0},e,{signal:t})}async predominantCategories(e){if(!this._hasLocalSource&&!this.supportsSQLExpression)throw new r(`${this.adapterName}:not-supported`,`Layer does not support advanced SQL expressions and standardized queries`);let{fields:t,view:n,signal:i,filter:a}=e,o=g(t),s=_(t),c=n&&this._hasLocalSource?await this._uvFromMemory({valueExpression:o,view:n,signal:i,filter:a}):await this._uvFromServiceQuery({sqlExpression:s.expression,valueExpression:o,signal:i,filter:a});return W(c.uniqueValueInfos,t)}async getSampleFeatures(e,r){let{view:a,requiredFields:o,returnGeometry:s,sqlWhere:c,filter:l,signal:u}=e,d=e.sampleSize;if(d==null||d===0)return[];let f=this.layer.createQuery(),p=r===`json`;f.outSpatialReference=a?.spatialReference,f.returnGeometry=!!s,f.outFields=o,f.where=v(f.where,c),z(f,l);let m=[],h=!1;if(a)try{let i=await a.whenLayerView(this.layer);if(h=!G(this,o,i).length,h){if(d>=1&&!e.filter&&`getSampleFeatures`in i){await this._waitForLayerViewUpdate(i);let e=await i.getSampleFeatures({minFeatureCount:d,sampleSize:d});if(e!=null)return p?e:e.map(e=>t.fromJSON(e))}if(m=await this._fetchFeaturesFromMemory(i,f,u,r),m.length>=d&&d>0)return n(m,d,1)}}catch{i(u)}try{if(this._hasLocalSource)return h?m:p?await this._fetchFeaturesJSONFromService(f,u):await this._fetchFeaturesFromService(f,u);let t=await this.queryFeatureCount({view:a,filter:l,signal:u}),r=this.layer.capabilities.query.maxRecordCount,i=d===-1?t:d;if(i=r&&i>r?r:i,t<=m.length||m.length>=r)return m;if(f.maxAllowableOffset=e.resolution||(a?a.extent.width/a.width/a.scale:te(this.layer.spatialReference))*4e5,t<=i)return p?await this._fetchFeaturesJSONFromService(f,u):await this._fetchFeaturesFromService(f,u);if(t<=Z){let e=this.layer.createQuery();z(e,l);let t=await this.layer.queryObjectIds();return f.objectIds=n(t,i,1),p?await this._fetchFeaturesJSONFromService(f,u):await this._fetchFeaturesFromService(f,u)}return this.layer.capabilities?.query?.supportsPagination&&(f.num=Math.min(i,Z)),p?await this._fetchFeaturesJSONFromService(f,u):await this._fetchFeaturesFromService(f,u)}catch{return i(u),m}}load(e){let t=this.layer.load(e).then(async t=>{this.geometryType=t.geometryType,this.objectIdField=t.objectIdField,this.supportsSQLExpression=t.capabilities?.query?.supportsSqlExpression,this._hasLocalSource=t.type!==`parquet`&&!t.url&&!!t.source,this.hasQueryEngine=this._hasLocalSource,this.minScale=t.minScale,this.maxScale=t.maxScale,this.fullExtent=t.fullExtent,this.workerClient=x.getInstance(),await this.workerClient.open(e.signal)});return this.addResolvingPromise(t),Promise.resolve(this)}};e([a({readOnly:!0})],Q.prototype,`adapterName`,void 0),e([a({constructOnly:!0})],Q.prototype,`layer`,void 0),Q=e([o(`esri.smartMapping.support.adapters.FeatureLayerAdapter`)],Q);function $(e,t,n){let r=[],i=t.length;return t.forEach((t,a)=>{let[o,s]=t,c=null;c=a===0&&!n?`${e} < ${s}`:a===i-1&&!n?`${e} >= ${o}`:v(`${e} >= ${o}`,`${e} ${a===i-1?` <= `:` < `} ${s}`),r.push(`WHEN (`+c+`) THEN `+(a+1))}),[`CASE`,r.join(` `),`ELSE 0`,`END`].join(` `)}export{Q as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{pickRandom as t}from"../../../core/arrayUtils.js";import n from"../../../core/Error.js";import{assertIsSome as r}from"../../../core/maybe.js";import{throwIfAborted as i}from"../../../core/promiseUtils.js";import{property as a,subclass as o}from"../../../core/accessorSupport/decorators.js";import{kebabDict as s}from"../../../layers/support/fieldType.js";import{isTimeOnlyField as c}from"../../../layers/support/fieldUtils.js";import{getArcadeForPredominantCategory as l}from"../../statistics/support/predominanceUtils.js";import{summaryStatistics as u,uniqueValues as d,histogram as f,classBreaks as p}from"../../statistics/support/statsWorker.js";import{mergeWhereClauses as m}from"../../statistics/support/utils.js";import{WorkerClient as h}from"../../statistics/support/WorkerClient.js";import{getFieldsList as g,fieldDelimiter as _,isAnyDateField as v}from"../utils.js";import y from"./FeatureLayerAdapter.js";import{getMissingFieldsForBinning as b,updateQueryWithFeatureFilter as x,getFeatureReductionFields as S,getViewInfoParams as C,getDomainsForFields as w,getPredominantCategoriesFromUVInfos as T}from"./support/utils.js";let E=class extends y{constructor(){super(...arguments),this.adapterName=`feature-layer-binning-adapter`}async _getNormalizationTotalFromMemory(e,t,r){let{featuresJSON:i,graphics:a,layerView:o,query:s}=t,c={include:[`sum`]},l=(!i&&!a&&o&&`queryAggregateSummaryStatistics`in o?await o.queryAggregateSummaryStatistics(s,{field:e,outStatisticTypes:c},{signal:r}):i?await this.workerClient.summaryStatistics({field:e},i):await u({attribute:{field:e,outStatisticTypes:c},features:a})).sum;if(l==null)throw new n(`${this.adapterName}:invalid`,`invalid normalizationTotal`);return l}async _processStatsFromMemoryParams(e){let{features:t,filter:i}=e;if(t?.length)return this._getFilteredFeatures(t,i);let{view:a,field:o,field2:s,field3:c,normalizationField:l,valueExpression:u,returnGeometry:d,layerViewFunc:f,signal:p}=e,m=null,h=null,_=null,v=null,y=null;if(a)try{if(m=await a.whenLayerView(this.layer),r(m),h=f!=null&&f in m&&typeof m[f]==`function`,h){await this._waitForLayerViewUpdate(m);let e=await g({field:o,field2:s,field3:c,normalizationField:l,valueExpression:u});b(this,e).length?h=!1:(_=`createAggregateQuery`in m?m.createAggregateQuery():null,_?(_.outFields=e,_.returnGeometry=!1,x(_,i)):h=!1),m.suspended&&(h=!1)}}catch{h=!1}if(!h&&(y=S(this.layer).map(e=>e.toJSON()),v=await this._fetchFeaturesForStats({field:o,field2:s,field3:c,valueExpression:u,normalizationField:l,returnGeometry:d,filter:i,view:a,signal:p},`json`),!v?.length))throw new n(`${this.adapterName}:insufficient-data`,`No features are available to calculate statistics`);return{layerView:m,query:_,featuresJSON:v,fieldInfos:y}}async _summaryStatsFromMemory(e,t){let{view:n,field:r,valueExpression:i,normalizationType:a,signal:o}=e,c={field:r,valueExpression:i,normalizationType:a,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,outStatisticTypes:e.outStatisticTypes},{featuresJSON:l,graphics:d,layerView:f,query:p,fieldInfos:m}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryAggregateSummaryStatistics`});return i&&n&&(l||d)&&(c.fieldType=t?.type?s.toJSON(t.type):null,c.viewInfoParams=C(n),c.timeZone=n.timeZone,c.fieldInfos=m),a===`percent-of-total`&&e.normalizationTotal==null&&(c.normalizationTotal=await this._getNormalizationTotalFromMemory(r,{featuresJSON:l,graphics:d,layerView:f,query:p},o)),!l&&!d&&f&&`queryAggregateSummaryStatistics`in f?f.queryAggregateSummaryStatistics(p,c,{signal:o}):l?this.workerClient.summaryStatistics(c,l):u({attribute:c,features:d})}async _uvFromMemory(e,t){let{view:n,field:r,valueExpression:i,returnAllCodedValues:a,signal:o}=e,{featuresJSON:s,graphics:c,layerView:l,query:u,fieldInfos:f}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryAggregateUniqueValues`}),p={field:r,field2:e.field2,field3:e.field3,fieldDelimiter:_,valueExpression:i,domains:t,returnAllCodedValues:a};return i&&n&&(s||c)&&(p.viewInfoParams=C(n),p.timeZone=n.timeZone,p.fieldInfos=f),!s&&!c&&l&&`queryAggregateUniqueValues`in l?l.queryAggregateUniqueValues(u,p,{signal:o}):s?this.workerClient.uniqueValues(p,s):d({attribute:p,features:c})}async _histogramFromMemory(e){let{view:t,field:n,valueExpression:r,signal:i}=e,{featuresJSON:a,graphics:o,layerView:s,query:c,fieldInfos:l}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryAggregateHistogram`}),u={field:n,valueExpression:r,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numBins:e.numBins};return r&&t&&(a||o)&&(u.viewInfoParams=C(t),u.timeZone=t.timeZone,u.fieldInfos=l),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(u.normalizationTotal=await this._getNormalizationTotalFromMemory(n,{featuresJSON:a,graphics:o,layerView:s,query:c},i)),!a&&!o&&s&&`queryAggregateHistogram`in s?s.queryAggregateHistogram(c,u,{signal:i}):a?this.workerClient.histogram(u,a):f({attribute:u,features:o})}async _classBreaksFromMemory(e){let{view:t,field:n,valueExpression:r,signal:i}=e,{featuresJSON:a,graphics:o,layerView:s,query:c,fieldInfos:l}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryAggregateClassBreaks`}),u={field:n,valueExpression:r,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numClasses:e.numClasses};return r&&t&&(a||o)&&(u.viewInfoParams=C(t),u.timeZone=t.timeZone,u.fieldInfos=l),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(u.normalizationTotal=await this._getNormalizationTotalFromMemory(n,{featuresJSON:a,graphics:o,layerView:s,query:c},i)),!a&&!o&&s&&`queryAggregateClassBreaks`in s?s.queryAggregateClassBreaks(c,u,{signal:i}):a?this.workerClient.classBreaks(u,a):p({attribute:u,features:o})}getField(e=``){return S(this.layer)?.find(t=>t.name.toLowerCase()===e?.toLowerCase())}getFieldUsageInfo(e){return this.getField(e)?{supportsLabelingInfo:!0,supportsRenderer:!0,supportsPopupTemplate:!0,supportsLayerQuery:!1,supportsStatistics:!0}:null}getFieldDomain(e,t){return null}async summaryStatistics(e){let{field:t}=e,r=t?this.getField(t):null,i=v(r)||c(r),a=e.sqlExpression&&!e.valueExpression&&!t;if(i||a)throw new n(`${this.adapterName}:not-supported`,`Date field and sqlExpression are not supported`);return this._summaryStatsFromMemory(e,r)}async uniqueValues(e){let t=await w(e,this);return this._uvFromMemory(e,t)}async histogram(e){let{field:t}=e,r=t?this.getField(t):null,i=v(r)||c(r),a=e.sqlExpression&&!e.valueExpression&&!t;if(i||a)throw new n(`${this.adapterName}:not-supported`,`Date field and sqlExpression are not supported`);return this._histogramFromMemory(e)}async classBreaks(e){return(e.analyzeData===!1?this._classBreaksFromInterpolation(e):this._classBreaksFromMemory(e)).catch(()=>(i(e.signal),this._classBreaksFromMemory(e)))}async queryFeatureCount(e){let t=await e.view?.whenLayerView(this.layer);if(!t||!(`queryAggregateCount`in t)||!t.queryAggregateCount)throw new n(`${this.adapterName}:not-supported`,`LayerView is not supported.`);await this._waitForLayerViewUpdate(t);let r=t.createAggregateQuery();return r.where=m(r.where,e.whereClause),x(r,e.filter),t.queryAggregateCount(r,{signal:e.signal})}generateRenderer(e,t){throw new n(`${this.adapterName}:not-supported`,`'generateRenderer' is not supported.`)}heatmapStatistics(e){throw new n(`${this.adapterName}:not-supported`,`'heatmapStatistics' is not supported.`)}async predominantCategories(e){let{fields:t,view:n,signal:r}=e,i=l(t),a=await this._uvFromMemory({valueExpression:i,view:n,signal:r});return T(a.uniqueValueInfos,t)}async getSampleFeatures(e,r){let{view:i,sampleSize:a,requiredFields:o,returnGeometry:s,filter:c,signal:l}=e;if(!i)throw new n(`${this.adapterName}:not-supported`,`'view' is required to get sample features for binning.`);if(i.type===`3d`)throw new n(`${this.adapterName}:not-supported`,`3d 'view' is not supported to get sample features for binning.`);let u=await i.whenLayerView(this.layer);if(!(`queryAggregateJSON`in u)||!u.queryAggregateJSON||!(`queryAggregates`in u)||!u.queryAggregates)throw new n(`${this.adapterName}:not-supported`,`LayerView is not supported.`);try{await this._waitForLayerViewUpdate(u)}catch{}if(b(this,o).length)throw new n(`${this.adapterName}:insufficient-data`,`Layer does not have required fields`);let d=r===`json`,f=u.createAggregateQuery();f.outSpatialReference=i?.spatialReference,f.returnGeometry=!!s,f.outFields=o,x(f,c);let{features:p}=d?await u.queryAggregateJSON(f,{signal:l}):await u.queryAggregates(f,{signal:l});return p.length&&a!=null&&a>0&&a<=p.length?t(p,a,1):p}load(e){let t=this.layer.load(e).then(async t=>{let r=`featureReduction`in t?t.featureReduction:null;if(r?.type!==`binning`&&r?.type!==`cluster`)throw new n(`${this.adapterName}:invalid-parameters`,`Feature reduction type ${r?.type} is not supported`);this.geometryType=r?.type===`cluster`?`point`:`polygon`,this.objectIdField=null,this.supportsSQLExpression=!1,this._hasLocalSource=!1,this.hasQueryEngine=!0,this.minScale=t.minScale,this.maxScale=t.maxScale,this.fullExtent=t.fullExtent,this.workerClient=h.getInstance(),await this.workerClient.open(e.signal)});return this.addResolvingPromise(t),Promise.resolve(this)}};e([a({readOnly:!0})],E.prototype,`adapterName`,void 0),E=e([o(`esri.smartMapping.support.adapters.FeatureLayerBinningAdapter`)],E);const D=E;export{D as default};
2
+ import{__decorate as e}from"tslib";import{pickRandom as t}from"../../../core/arrayUtils.js";import n from"../../../core/Error.js";import{assertIsSome as r}from"../../../core/maybe.js";import{throwIfAborted as i}from"../../../core/promiseUtils.js";import{property as a,subclass as o}from"../../../core/accessorSupport/decorators.js";import{kebabDict as s}from"../../../layers/support/fieldType.js";import{isTimeOnlyField as c}from"../../../layers/support/fieldUtils.js";import{getArcadeForPredominantCategory as l}from"../../statistics/support/predominanceUtils.js";import{summaryStatistics as u,uniqueValues as d,histogram as f,classBreaks as p}from"../../statistics/support/statsWorker.js";import{mergeWhereClauses as m}from"../../statistics/support/utils.js";import{WorkerClient as h}from"../../statistics/support/WorkerClient.js";import{getFieldsList as g,fieldDelimiter as _,isAnyDateField as v}from"../utils.js";import y from"./FeatureLayerAdapter.js";import{getMissingFieldsForBinning as b,updateQueryWithFeatureFilter as x,getFeatureReductionFields as S,getViewInfoParams as C,getDomainsForFields as w,getPredominantCategoriesFromUVInfos as T}from"./support/utils.js";let E=class extends y{constructor(){super(...arguments),this.adapterName=`feature-layer-binning-adapter`}async _getNormalizationTotalFromMemory(e,t,r){let{featuresJSON:i,graphics:a,layerView:o,query:s}=t,c={include:[`sum`]},l=(!i&&!a&&o&&`queryAggregateSummaryStatistics`in o?await o.queryAggregateSummaryStatistics(s,{field:e,outStatisticTypes:c},{signal:r}):i?await this.workerClient.summaryStatistics({field:e},i):await u({attribute:{field:e,outStatisticTypes:c},features:a})).sum;if(l==null)throw new n(`${this.adapterName}:invalid`,`invalid normalizationTotal`);return l}async _processStatsFromMemoryParams(e){let{features:t,filter:i}=e;if(t?.length)return this._getFilteredFeatures(t,i);let{view:a,field:o,field2:s,field3:c,normalizationField:l,valueExpression:u,returnGeometry:d,layerViewFunc:f,signal:p}=e,m=null,h=null,_=null,v=null,y=null;if(a)try{if(m=await a.whenLayerView(this.layer),r(m),h=f!=null&&f in m&&typeof m[f]==`function`,h){await this._waitForLayerViewUpdate(m);let e=await g({field:o,field2:s,field3:c,normalizationField:l,valueExpression:u});b(this,e).length?h=!1:(_=`createAggregateQuery`in m?m.createAggregateQuery():null,_?(_.outFields=e,_.returnGeometry=!1,x(_,i)):h=!1),m.suspended&&(h=!1)}}catch{h=!1}if(!h&&(y=S(this.layer).map(e=>e.toJSON()),v=await this._fetchFeaturesForStats({field:o,field2:s,field3:c,valueExpression:u,normalizationField:l,returnGeometry:d,filter:i,view:a,signal:p},`json`),!v?.length))throw new n(`${this.adapterName}:insufficient-data`,`No features are available to calculate statistics`);return{layerView:m,query:_,featuresJSON:v,fieldInfos:y}}async _summaryStatsFromMemory(e,t){let{view:n,field:r,valueExpression:i,normalizationType:a,signal:o}=e,c={field:r,valueExpression:i,normalizationType:a,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,outStatisticTypes:e.outStatisticTypes},{featuresJSON:l,graphics:d,layerView:f,query:p,fieldInfos:m}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryAggregateSummaryStatistics`});return i&&n&&(l||d)&&(c.fieldType=t?.type?s.toJSON(t.type):null,c.viewInfoParams=C(n),c.timeZone=n.timeZone,c.fieldInfos=m),a===`percent-of-total`&&e.normalizationTotal==null&&(c.normalizationTotal=await this._getNormalizationTotalFromMemory(r,{featuresJSON:l,graphics:d,layerView:f,query:p},o)),!l&&!d&&f&&`queryAggregateSummaryStatistics`in f?f.queryAggregateSummaryStatistics(p,c,{signal:o}):l?this.workerClient.summaryStatistics(c,l):u({attribute:c,features:d})}async _uvFromMemory(e,t){let{view:n,field:r,valueExpression:i,returnAllCodedValues:a,signal:o}=e,{featuresJSON:s,graphics:c,layerView:l,query:u,fieldInfos:f}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryAggregateUniqueValues`}),p={field:r,field2:e.field2,field3:e.field3,fieldDelimiter:_,valueExpression:i,domains:t,returnAllCodedValues:a};return i&&n&&(s||c)&&(p.viewInfoParams=C(n),p.timeZone=n.timeZone,p.fieldInfos=f),!s&&!c&&l&&`queryAggregateUniqueValues`in l?l.queryAggregateUniqueValues(u,p,{signal:o}):s?this.workerClient.uniqueValues(p,s):d({attribute:p,features:c})}async _histogramFromMemory(e){let{view:t,field:n,valueExpression:r,signal:i}=e,{featuresJSON:a,graphics:o,layerView:s,query:c,fieldInfos:l}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryAggregateHistogram`}),u={field:n,valueExpression:r,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numBins:e.numBins};return r&&t&&(a||o)&&(u.viewInfoParams=C(t),u.timeZone=t.timeZone,u.fieldInfos=l),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(u.normalizationTotal=await this._getNormalizationTotalFromMemory(n,{featuresJSON:a,graphics:o,layerView:s,query:c},i)),!a&&!o&&s&&`queryAggregateHistogram`in s?s.queryAggregateHistogram(c,u,{signal:i}):a?this.workerClient.histogram(u,a):f({attribute:u,features:o})}async _classBreaksFromMemory(e){let{view:t,field:n,valueExpression:r,signal:i}=e,{featuresJSON:a,graphics:o,layerView:s,query:c,fieldInfos:l}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryAggregateClassBreaks`}),u={field:n,valueExpression:r,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numClasses:e.numClasses};return r&&t&&(a||o)&&(u.viewInfoParams=C(t),u.timeZone=t.timeZone,u.fieldInfos=l),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(u.normalizationTotal=await this._getNormalizationTotalFromMemory(n,{featuresJSON:a,graphics:o,layerView:s,query:c},i)),!a&&!o&&s&&`queryAggregateClassBreaks`in s?s.queryAggregateClassBreaks(c,u,{signal:i}):a?this.workerClient.classBreaks(u,a):p({attribute:u,features:o})}getField(e=``){return S(this.layer)?.find(t=>t.name.toLowerCase()===e?.toLowerCase())}getFieldUsageInfo(e){return this.getField(e)?{supportsLabelingInfo:!0,supportsRenderer:!0,supportsPopupTemplate:!0,supportsLayerQuery:!1,supportsStatistics:!0}:null}getFieldDomain(e,t){return null}async summaryStatistics(e){let{field:t}=e,r=t?this.getField(t):null,i=v(r)||c(r),a=e.sqlExpression&&!e.valueExpression&&!t;if(i||a)throw new n(`${this.adapterName}:not-supported`,`Date field and sqlExpression are not supported`);return this._summaryStatsFromMemory(e,r)}async uniqueValues(e){let t=await w(e,this);return this._uvFromMemory(e,t)}async histogram(e){let{field:t}=e,r=t?this.getField(t):null,i=v(r)||c(r),a=e.sqlExpression&&!e.valueExpression&&!t;if(i||a)throw new n(`${this.adapterName}:not-supported`,`Date field and sqlExpression are not supported`);return this._histogramFromMemory(e)}async classBreaks(e){return(e.analyzeData===!1?this._classBreaksFromInterpolation(e):this._classBreaksFromMemory(e)).catch(()=>(i(e.signal),this._classBreaksFromMemory(e)))}async queryFeatureCount(e){let t=await e.view?.whenLayerView(this.layer);if(!t||!(`queryAggregateCount`in t)||!t.queryAggregateCount)throw new n(`${this.adapterName}:not-supported`,`LayerView is not supported.`);await this._waitForLayerViewUpdate(t);let r=t.createAggregateQuery();return r.where=m(r.where,e.whereClause),x(r,e.filter),t.queryAggregateCount(r,{signal:e.signal})}generateRenderer(e,t){throw new n(`${this.adapterName}:not-supported`,`'generateRenderer' is not supported.`)}heatmapStatistics(e){throw new n(`${this.adapterName}:not-supported`,`'heatmapStatistics' is not supported.`)}async predominantCategories(e){let{fields:t,view:n,signal:r}=e,i=l(t),a=await this._uvFromMemory({valueExpression:i,view:n,signal:r});return T(a.uniqueValueInfos,t)}async getSampleFeatures(e,r){let{view:i,sampleSize:a,requiredFields:o,returnGeometry:s,filter:c,signal:l}=e;if(!i)throw new n(`${this.adapterName}:not-supported`,`'view' is required to get sample features for binning.`);if(i.type===`3d`)throw new n(`${this.adapterName}:not-supported`,`3d 'view' is not supported to get sample features for binning.`);let u=await i.whenLayerView(this.layer);if(!(`queryAggregateJSON`in u)||!u.queryAggregateJSON||!(`queryAggregates`in u)||!u.queryAggregates)throw new n(`${this.adapterName}:not-supported`,`LayerView is not supported.`);try{await this._waitForLayerViewUpdate(u)}catch{}if(b(this,o).length)throw new n(`${this.adapterName}:insufficient-data`,`Layer does not have required fields`);let d=r===`json`,f=u.createAggregateQuery();f.outSpatialReference=i?.spatialReference,f.returnGeometry=!!s,f.outFields=o,x(f,c);let{features:p}=d?await u.queryAggregateJSON(f,{signal:l}):await u.queryAggregates(f,{signal:l});return p.length&&a!=null&&a>0&&a<=p.length?t(p,a,1):p}load(e){let t=this.layer.load(e).then(async t=>{let r=`featureReduction`in t?t.featureReduction:null;if(r?.type!==`binning`&&r?.type!==`cluster`)throw new n(`${this.adapterName}:invalid-parameters`,`Feature reduction type ${r?.type} is not supported`);this.geometryType=r?.type===`cluster`?`point`:`polygon`,this.objectIdField=null,this.supportsSQLExpression=!1,this._hasLocalSource=!1,this.hasQueryEngine=!0,this.minScale=t.minScale,this.maxScale=t.maxScale,this.fullExtent=t.fullExtent,this.workerClient=h.getInstance(),await this.workerClient.open(e.signal)});return this.addResolvingPromise(t),Promise.resolve(this)}};e([a({readOnly:!0})],E.prototype,`adapterName`,void 0),E=e([o(`esri.smartMapping.support.adapters.FeatureLayerBinningAdapter`)],E);export{E as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{pickRandom as t}from"../../../core/arrayUtils.js";import n from"../../../core/Error.js";import r from"../../../core/Logger.js";import{assertIsSome as i}from"../../../core/maybe.js";import{timeout as a,throwIfAborted as o}from"../../../core/promiseUtils.js";import{whenOnce as s}from"../../../core/reactiveUtils.js";import{property as c,subclass as l}from"../../../core/accessorSupport/decorators.js";import{toQuantizationTransform as u}from"../../../geometry/support/quantizationUtils.js";import{kebabDict as d}from"../../../layers/support/fieldType.js";import{isTimeOnlyField as f}from"../../../layers/support/fieldUtils.js";import p from"../../../rest/support/QuantizationParameters.js";import{getArcadeForPredominantCategory as m}from"../../statistics/support/predominanceUtils.js";import{summaryStatistics as h,uniqueValues as g,histogram as _,classBreaks as v,heatmapStatistics as y}from"../../statistics/support/statsWorker.js";import{mergeWhereClauses as b}from"../../statistics/support/utils.js";import{WorkerClient as x}from"../../statistics/support/WorkerClient.js";import{getFieldsList as S,isAnyDateField as C,getFieldsFromWhereClauses as w,fieldDelimiter as T}from"../utils.js";import E from"./LayerAdapter.js";import{getHistogramAttributeDefinition as D,getAttributeBinsQuery as O,processQueryAttributeBinsResult as k}from"./support/histogramUtils.js";import{ensureFeaturesJSON as A,getSummaryStatsQuery as j,getSummaryStatisticsFromFeatureSet as M,getViewInfoParams as N,getMissingFields as P,updateQueryWithFeatureFilter as F,getUVQuery as I,getUniqueValuesFromFeatureSet as L,getBins as R,getDomainsForFields as z,getPredominantCategoriesFromUVInfos as B}from"./support/utils.js";import{processSummaryStatisticsResult as V,createUVResult as H,resolveCBResult as U}from"../../../statistics/utils.js";import{loadArcade as W}from"../../../support/loadArcade.js";let G,K=class extends E{constructor(){super(...arguments),this._hasLocalSource=!1,this.adapterName=`in-memory-layer-adapter`}destroy(){this.workerClient?.destroy()}async _waitForLayerViewUpdate(e){if(!e)throw new n(`${this.adapterName}:insufficient-data`,`layerView is required to fetch the features`);let t=new AbortController,i=s(()=>!e.updating,t.signal);await a(i,5e3,t).catch(e=>{throw r.getLogger(this).warn(`LayerView is taking too long to update. Aborting fetch from layerView.`),e})}async _fetchFeatureSetFromMemory(e,t,r){let i=this.layer;if(this._hasLocalSource&&`queryFeatures`in i)return i.queryFeatures(e);if(!t)throw new n(`${this.adapterName}:insufficient-data`,`view is required to fetch the features from layerView`);let a=await t.whenLayerView(this.layer);return await this._waitForLayerViewUpdate(a),a.queryFeatures(e,{signal:r})}async _fetchFeaturesFromMemory(e,t,r,i){let a=this.layer,o=i===`json`;if(this._hasLocalSource&&`queryFeatures`in a){let e=await a.queryFeatures(t);return o?A(e.features):e.features}if(await this._waitForLayerViewUpdate(e),o&&`queryFeaturesJSON`in e&&e.queryFeaturesJSON){let{features:n}=await e.queryFeaturesJSON(t,{signal:r});return n}if(!(`queryFeatures`in e))throw new n(`${this.adapterName}:not-supported`,`'queryFeatures' is not supported on the layerView`);let s=await e.queryFeatures(t,{signal:r});return o?A(s.features):s.features}_fetchFeaturesForStats(e,t){return S({field:e.field,field2:e.field2,field3:e.field3,normalizationField:e.normalizationField,valueExpression:e.valueExpression,fields:e.fields}).then(n=>this.getSampleFeatures({sampleSize:-1,view:e.view,returnGeometry:e.returnGeometry,filter:e.filter,requiredFields:n,sqlWhere:e.sqlWhere,signal:e.signal},t))}async _summaryStatsFromClientQuery(e,t){let{view:n,signal:r}=e,i=j(this,e,t),a=await this._fetchFeatureSetFromMemory(i,n,r),o=M(a,C(t)||f(t));return V(o,e.outStatisticTypes)}async _getNormalizationTotalFromMemory(e,t,r){let{featuresJSON:i,graphics:a,layerView:o,query:s}=t,c={include:[`sum`]},l=(!i&&!a&&o&&`querySummaryStatistics`in o?await o.querySummaryStatistics(s,{field:e},{signal:r}):i?await this.workerClient.summaryStatistics({field:e,outStatisticTypes:c},i):await h({attribute:{field:e,outStatisticTypes:c},features:a??[]})).sum;if(l==null)throw new n(`${this.adapterName}:invalid`,`invalid normalizationTotal`);return l}async _summaryStatsFromMemory(e,t){let{view:n,field:r,valueExpression:i,normalizationType:a,signal:o}=e,s={field:r,valueExpression:i,normalizationType:a,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,outStatisticTypes:e.outStatisticTypes},{featuresJSON:c,graphics:l,layerView:u,query:f,fieldInfos:p}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`querySummaryStatistics`});return i&&n&&(c||l)&&(s.fieldType=t?.type?d.toJSON(t.type):null,s.viewInfoParams=N(n),s.timeZone=n.timeZone,s.fieldInfos=p),a===`percent-of-total`&&e.normalizationTotal==null&&(s.normalizationTotal=await this._getNormalizationTotalFromMemory(r,{featuresJSON:c,graphics:l,layerView:u,query:f},o)),!c&&!l&&u&&`querySummaryStatistics`in u?u.querySummaryStatistics(f,s,{signal:o}):c?this.workerClient.summaryStatistics(s,c):h({attribute:s,features:l})}async _getFilteredFeatures(e,t){let n=e,r=t?.geometry;if(t?.spatialRelationship===`intersects`&&r){let{intersectionExecute:t}=await import(`../../../geometry/operators/intersectionOperator.js`);n=e.filter(({geometry:e})=>!!(e&&t(e,r)))}return e.length&&`declaredClass`in e[0]&&e[0].declaredClass===`esri.Graphic`?{graphics:n}:{featuresJSON:n}}async _processStatsFromMemoryParams(e){let{features:t,filter:n}=e;if(t?.length)return this._getFilteredFeatures(t,n);let{view:r,field:i,field2:a,field3:o,normalizationField:s,valueExpression:c,sqlExpression:l,sqlWhere:u,layerViewFunc:d,signal:f}=e,p=e.returnGeometry;if(p==null&&c){if(!G){let{arcadeUtils:e}=await W();G=e}let e=G.hasGeometryOperations(c);e&&await G.enableGeometryOperations(),p=e}let m=null,h=null,g=null,_=null,v=null;if(r)try{let e=this.layer.type===`subtype-sublayer`?this.layer.parent:this.layer;m=await r.whenLayerView(e),h=d!=null&&m!=null&&d in m&&typeof m[d]==`function`}catch{h=!1}if(h)try{await this._waitForLayerViewUpdate(m);let e=await S({field:i,field2:a,field3:o,normalizationField:s,valueExpression:c,fields:await w([l,u],this.layer.fieldsIndex)});P(this,e,m).length?h=!1:(g=this.layer.createQuery(),g.outFields=e,g.returnGeometry=!1,g.where=b(g.where,u),F(g,n)),m.suspended&&(h=!1)}catch{h=!1}return h||(_=await this._fetchFeaturesForStats({field:i,field2:a,field3:o,fields:await w([l,u],this.layer.fieldsIndex),valueExpression:c,normalizationField:s,returnGeometry:p,filter:n,sqlWhere:u,view:r,signal:f},`json`),v=(await S({valueExpression:c})).map(e=>this.getField(e)?.toJSON()).filter(Boolean)),{layerView:m,query:g,featuresJSON:_,fieldInfos:v}}async _uvFromClientQuery(e,t){let{view:n,signal:r}=e,i=I(this,e),a=await this._fetchFeatureSetFromMemory(i,n,r),o=await L(a,{layer:this,field:e.field,field2:e.field2,field3:e.field3,fieldDelimiter:T,view:e.view,signal:e.signal});return H(o,t,e.returnAllCodedValues,T)}async _uvFromMemory(e,t){let{view:n,field:r,valueExpression:i,returnAllCodedValues:a,signal:o}=e,{featuresJSON:s,graphics:c,layerView:l,query:u,fieldInfos:d}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryUniqueValues`}),f={field:r,field2:e.field2,field3:e.field3,fieldDelimiter:T,valueExpression:i,domains:t,returnAllCodedValues:a};return i&&n&&(s||c)&&(f.viewInfoParams=N(n),f.timeZone=n.timeZone,f.fieldInfos=d),!s&&!c&&l&&`queryUniqueValues`in l?l.queryUniqueValues(u,f,{signal:o}):s?this.workerClient.uniqueValues(f,s):g({attribute:f,features:c})}_histogramForField(e){let t=null;return t=e.minValue!=null&&e.maxValue!=null?Promise.resolve({min:e.minValue,max:e.maxValue}):this.summaryStatistics({...e,outStatisticTypes:{include:[`min`,`max`,`count`]}}).then(e=>{if(!e.count)throw new n(`${this.adapterName}:insufficient-data`,`Either the layer has no features or none of the features have data for the field`);return{min:e.min,max:e.max}}),t.then(t=>R(this,{min:t.min,max:t.max},e.field,e.numBins??void 0,e.view,e.filter,e.signal))}async _histogramFromQueryAttributeBinsFromMemory(e){let{field:t,normalizationType:n,signal:r}=e,i=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryAttributeBins`}),{featuresJSON:a,graphics:o,layerView:s,query:c}=i,l=n===`percent-of-total`?e.normalizationTotal??await this._getNormalizationTotalFromMemory(t,i,r):void 0;if(!s||!(`queryAttributeBins`in s)||a||o){let t=D(e,i,l);return a?this.workerClient.histogram(t,a):_({attribute:t,features:o})}let{query:u,min:d,max:f}=await O(e,this,l,c);if(!u)return{bins:[],minValue:d,maxValue:f,normalizationTotal:l};let p=await s.queryAttributeBins(u,{signal:r});return k(p,t?this.getField(t):null,{minValue:d,maxValue:f,normalizationTotal:l})}async _histogramFromMemory(e){let{field:t,signal:n}=e,r=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryHistogram`}),{featuresJSON:i,graphics:a,layerView:o,query:s}=r,c=e.normalizationType===`percent-of-total`?e.normalizationTotal??await this._getNormalizationTotalFromMemory(t,r,n):void 0,l=D(e,r,c);return!i&&!a&&o&&`queryHistogram`in o?o.queryHistogram(s,l,{signal:n}):i?this.workerClient.histogram(l,i):_({attribute:l,features:a})}_classBreaksFromInterpolation(e){let{minValue:t,maxValue:n}=e,r=e.numClasses||5,i=[],a=(n-t)/r;for(let e=0;e<r;e++){let n=t+e*a;i.push({minValue:n,maxValue:n+a})}i[r-1].maxValue=n;let o={classBreaks:i,normalizationTotal:e.normalizationTotal},s=U(o,e.classificationMethod);return Promise.resolve(s)}async _classBreaksFromMemory(e){let{view:t,field:n,valueExpression:r,signal:i}=e,{featuresJSON:a,graphics:o,layerView:s,query:c,fieldInfos:l}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryClassBreaks`}),u={field:n,valueExpression:r,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numClasses:e.numClasses};return r&&t&&(a||o)&&(u.viewInfoParams=N(t),u.timeZone=t.timeZone,u.fieldInfos=l),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(u.normalizationTotal=await this._getNormalizationTotalFromMemory(n,{featuresJSON:a,graphics:o,layerView:s,query:c},i)),!a&&!o&&s&&`queryClassBreaks`in s?s.queryClassBreaks(c,u,{signal:i}):a?this.workerClient.classBreaks(u,a):v({attribute:u,features:o})}async _heatmapStatsFromMemory(e){let{view:t,field:n,radius:r,signal:a}=e;i(t,`InMemoryLayerAdapter: must have a view`);try{let n=await t.whenLayerView(this.layer);if(`queryHeatmapStatistics`in n&&!n.updating&&!e.filter)return await n.queryHeatmapStatistics({field:e.field,radius:e.radius})}catch{o(a)}let{featuresJSON:s,graphics:c}=await this._processStatsFromMemoryParams({...e,returnGeometry:!0}),l=new p({extent:t.extent,tolerance:t.type===`2d`?t.state.resolution:t.pixelSizeAt?.(t.center)}),d={field:n,radius:r,transform:u(l),spatialReference:t.spatialReference?.toJSON(),size:t.size};return!s?.length&&!c?.length?{min:null,max:null}:s?this.workerClient.heatmapStatistics(d,s):y({attribute:d,features:c})}getField(e=``){return this.layer.getField(e)}getFieldUsageInfo(e){return this.getField(e)?{supportsLabelingInfo:!0,supportsRenderer:!0,supportsPopupTemplate:!0,supportsLayerQuery:!0,supportsStatistics:!0}:null}getFieldDomain(e,t){return this.layer.getFieldDomain(e,t)}createQuery(){return this.layer.createQuery()}async summaryStatistics(e){let{field:t,valueExpression:r,sqlExpression:i,features:a,view:o}=e,s=t?this.getField(t):null,c=!!r,l=o?.type===`3d`;if(!r&&i&&!this.supportsSQLExpression)throw new n(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);return c||a||l?this._summaryStatsFromMemory(e,s):this._summaryStatsFromClientQuery(e,s)}async uniqueValues(e){let{valueExpression:t,sqlExpression:r,features:i,view:a}=e,o=await z(e,this),s=!!t,c=a?.type===`3d`;if(!t&&r&&!this.supportsSQLExpression)throw new n(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);return s||i||c?this._uvFromMemory(e,o):this._uvFromClientQuery(e,o)}async histogram(e){let{features:t,valueExpression:r,normalizationType:i,sqlExpression:a}=e,o=t||!!r;if(!r&&a&&!this.supportsSQLExpression)throw new n(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);return o||i?this._histogramFromMemory(e):this._histogramForField(e)}async classBreaks(e){return e.analyzeData===!1?this._classBreaksFromInterpolation(e):this._classBreaksFromMemory(e)}async queryFeatureCount(e){let{whereClause:t,view:r,signal:i}=e;if(!r)throw new n(`${this.adapterName}:insufficient-data`,`view is required to fetch the features from layerView`);let a=this.layer.createQuery();a.where=b(a.where,t);let o=await r.whenLayerView(this.layer);return await s(()=>!o.updating,i),o.queryFeatureCount(a,{signal:i})}async generateRenderer(e,t){throw new n(`${this.adapterName}:not-supported`,`Layer does not support generateRenderer operation`)}async predominantCategories(e){let{fields:t,view:n,signal:r,filter:i}=e,a=m(t),o=await this._uvFromMemory({valueExpression:a,view:n,signal:r,filter:i});return B(o.uniqueValueInfos,t)}async heatmapStatistics(e){return this._heatmapStatsFromMemory(e)}async getSampleFeatures(e,r){let{view:i,sampleSize:a,requiredFields:o,returnGeometry:s,sqlWhere:c,filter:l,signal:u}=e,d=this.layer.createQuery();if(d.outSpatialReference=i?.spatialReference,d.returnGeometry=!!s,d.outFields=o,d.where=b(d.where,c),F(d,l),!i)throw new n(`${this.adapterName}:not-supported`,`view is required to get sample features for Layer`);let f=await i.whenLayerView(this.layer);if(P(this,o,f).length)throw new n(`${this.adapterName}:not-supported`,`Required fields need to be passed in the outFields for Layer`);let p=await this._fetchFeaturesFromMemory(f,d,u,r),m=a!=null&&a>0&&a<=p.length?a:p.length;return t(p,m,1)}load(e){let t=this.layer.load(e).then(async t=>{this.geometryType=t.geometryType,this.objectIdField=t.objectIdField,this.supportsSQLExpression=t.type===`stream`||!!t.capabilities?.query?.supportsSqlExpression,this.minScale=t.minScale,this.maxScale=t.maxScale,this.fullExtent=`fullExtent`in t?t.fullExtent:t.parent?.fullExtent,this._hasLocalSource=!1,this.hasQueryEngine=!0,this.workerClient=x.getInstance(),await this.workerClient.open(e.signal)});return this.addResolvingPromise(t),Promise.resolve(this)}};e([c({readOnly:!0})],K.prototype,`adapterName`,void 0),e([c({constructOnly:!0})],K.prototype,`layer`,void 0),K=e([l(`esri.smartMapping.support.adapters.InMemoryLayerAdapter`)],K);export{K as default};
2
+ import{__decorate as e}from"tslib";import{pickRandom as t}from"../../../core/arrayUtils.js";import n from"../../../core/Error.js";import r from"../../../core/Logger.js";import{assertIsSome as i}from"../../../core/maybe.js";import{timeout as a,throwIfAborted as o}from"../../../core/promiseUtils.js";import{whenOnce as s}from"../../../core/reactiveUtils.js";import{property as c,subclass as l}from"../../../core/accessorSupport/decorators.js";import{toQuantizationTransform as u}from"../../../geometry/support/quantizationUtils.js";import{kebabDict as d}from"../../../layers/support/fieldType.js";import{isTimeOnlyField as f}from"../../../layers/support/fieldUtils.js";import p from"../../../rest/support/QuantizationParameters.js";import{getArcadeForPredominantCategory as m}from"../../statistics/support/predominanceUtils.js";import{summaryStatistics as h,uniqueValues as g,histogram as _,classBreaks as v,heatmapStatistics as y}from"../../statistics/support/statsWorker.js";import{mergeWhereClauses as b}from"../../statistics/support/utils.js";import{WorkerClient as x}from"../../statistics/support/WorkerClient.js";import{getFieldsList as S,isAnyDateField as C,getFieldsFromWhereClauses as w,fieldDelimiter as T}from"../utils.js";import E from"./LayerAdapter.js";import{getHistogramAttributeDefinition as D,getAttributeBinsQuery as O,processQueryAttributeBinsResult as k}from"./support/histogramUtils.js";import{ensureFeaturesJSON as A,getSummaryStatsQuery as j,getSummaryStatisticsFromFeatureSet as M,getViewInfoParams as N,getMissingFields as P,updateQueryWithFeatureFilter as F,getUVQuery as I,getUniqueValuesFromFeatureSet as L,getBins as R,getDomainsForFields as z,getPredominantCategoriesFromUVInfos as B}from"./support/utils.js";import{processSummaryStatisticsResult as V,createUVResult as H,resolveCBResult as U}from"../../../statistics/utils.js";import{loadArcade as W}from"../../../support/loadArcade.js";let G,K=class extends E{constructor(){super(...arguments),this._hasLocalSource=!1,this.adapterName=`in-memory-layer-adapter`}destroy(){this.workerClient?.destroy()}async _waitForLayerViewUpdate(e){if(!e)throw new n(`${this.adapterName}:insufficient-data`,`layerView is required to fetch the features`);let t=new AbortController,i=s(()=>!e.updating,t.signal);await a(i,5e3,t).catch(e=>{throw r.getLogger(this).warn(`LayerView is taking too long to update. Aborting fetch from layerView.`),e})}async _fetchFeatureSetFromMemory(e,t,r){let i=this.layer;if(this._hasLocalSource&&`queryFeatures`in i)return i.queryFeatures(e);if(!t)throw new n(`${this.adapterName}:insufficient-data`,`view is required to fetch the features from layerView`);let a=await t.whenLayerView(this.layer);return await this._waitForLayerViewUpdate(a),a.queryFeatures(e,{signal:r})}async _fetchFeaturesFromMemory(e,t,r,i){let a=this.layer,o=i===`json`;if(this._hasLocalSource&&`queryFeatures`in a){let e=await a.queryFeatures(t);return o?A(e.features):e.features}if(await this._waitForLayerViewUpdate(e),o&&`queryFeaturesJSON`in e&&e.queryFeaturesJSON){let{features:n}=await e.queryFeaturesJSON(t,{signal:r});return n}if(!(`queryFeatures`in e))throw new n(`${this.adapterName}:not-supported`,`'queryFeatures' is not supported on the layerView`);let s=await e.queryFeatures(t,{signal:r});return o?A(s.features):s.features}_fetchFeaturesForStats(e,t){return S({field:e.field,field2:e.field2,field3:e.field3,normalizationField:e.normalizationField,valueExpression:e.valueExpression,fields:e.fields}).then(n=>this.getSampleFeatures({sampleSize:-1,view:e.view,returnGeometry:e.returnGeometry,filter:e.filter,requiredFields:n,sqlWhere:e.sqlWhere,signal:e.signal},t))}async _summaryStatsFromClientQuery(e,t){let{view:n,signal:r}=e,i=j(this,e,t),a=await this._fetchFeatureSetFromMemory(i,n,r),o=M(a,C(t)||f(t));return V(o,e.outStatisticTypes)}async _getNormalizationTotalFromMemory(e,t,r){let{featuresJSON:i,graphics:a,layerView:o,query:s}=t,c={include:[`sum`]},l=(!i&&!a&&o&&`querySummaryStatistics`in o?await o.querySummaryStatistics(s,{field:e},{signal:r}):i?await this.workerClient.summaryStatistics({field:e,outStatisticTypes:c},i):await h({attribute:{field:e,outStatisticTypes:c},features:a??[]})).sum;if(l==null)throw new n(`${this.adapterName}:invalid`,`invalid normalizationTotal`);return l}async _summaryStatsFromMemory(e,t){let{view:n,field:r,valueExpression:i,normalizationType:a,signal:o}=e,s={field:r,valueExpression:i,normalizationType:a,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,outStatisticTypes:e.outStatisticTypes},{featuresJSON:c,graphics:l,layerView:u,query:f,fieldInfos:p}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`querySummaryStatistics`});return i&&n&&(c||l)&&(s.fieldType=t?.type?d.toJSON(t.type):null,s.viewInfoParams=N(n),s.timeZone=n.timeZone,s.fieldInfos=p),a===`percent-of-total`&&e.normalizationTotal==null&&(s.normalizationTotal=await this._getNormalizationTotalFromMemory(r,{featuresJSON:c,graphics:l,layerView:u,query:f},o)),!c&&!l&&u&&`querySummaryStatistics`in u?u.querySummaryStatistics(f,s,{signal:o}):c?this.workerClient.summaryStatistics(s,c):h({attribute:s,features:l})}async _getFilteredFeatures(e,t){let n=e,r=t?.geometry;if(t?.spatialRelationship===`intersects`&&r){let{intersectionExecute:t}=await import(`../../../geometry/operators/intersectionOperator.js`);n=e.filter(({geometry:e})=>!!(e&&t(e,r)))}return e.length&&`declaredClass`in e[0]&&e[0].declaredClass===`esri.Graphic`?{graphics:n}:{featuresJSON:n}}async _processStatsFromMemoryParams(e){let{features:t,filter:n}=e;if(t?.length)return this._getFilteredFeatures(t,n);let{view:r,field:i,field2:a,field3:o,normalizationField:s,valueExpression:c,sqlExpression:l,sqlWhere:u,layerViewFunc:d,signal:f}=e,p=e.returnGeometry;if(p==null&&c){if(!G){let{arcadeUtils:e}=await W();G=e}let e=G.hasGeometryOperations(c);e&&await G.enableGeometryOperations(),p=e}let m=null,h=null,g=null,_=null,v=null;if(r)try{let e=this.layer.type===`subtype-sublayer`?this.layer.parent:this.layer;m=await r.whenLayerView(e),h=d!=null&&m!=null&&d in m&&typeof m[d]==`function`}catch{h=!1}if(h)try{await this._waitForLayerViewUpdate(m);let e=await S({field:i,field2:a,field3:o,normalizationField:s,valueExpression:c,fields:await w([l,u],this.layer.fieldsIndex)});P(this,e,m).length?h=!1:(g=this.layer.createQuery(),g.outFields=e,g.returnGeometry=!1,g.where=b(g.where,u),F(g,n)),m.suspended&&(h=!1)}catch{h=!1}return h||(_=await this._fetchFeaturesForStats({field:i,field2:a,field3:o,fields:await w([l,u],this.layer.fieldsIndex),valueExpression:c,normalizationField:s,returnGeometry:p,filter:n,sqlWhere:u,view:r,signal:f},`json`),v=(await S({valueExpression:c})).map(e=>this.getField(e)?.toJSON()).filter(Boolean)),{layerView:m,query:g,featuresJSON:_,fieldInfos:v}}async _uvFromClientQuery(e,t){let{view:n,signal:r}=e,i=I(this,e),a=await this._fetchFeatureSetFromMemory(i,n,r),o=await L(a,{layer:this,field:e.field,field2:e.field2,field3:e.field3,fieldDelimiter:T,filter:e.filter,view:e.view,signal:e.signal});return H(o,t,e.returnAllCodedValues,T)}async _uvFromMemory(e,t){let{view:n,field:r,valueExpression:i,returnAllCodedValues:a,signal:o}=e,{featuresJSON:s,graphics:c,layerView:l,query:u,fieldInfos:d}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryUniqueValues`}),f={field:r,field2:e.field2,field3:e.field3,fieldDelimiter:T,valueExpression:i,domains:t,returnAllCodedValues:a};return i&&n&&(s||c)&&(f.viewInfoParams=N(n),f.timeZone=n.timeZone,f.fieldInfos=d),!s&&!c&&l&&`queryUniqueValues`in l?l.queryUniqueValues(u,f,{signal:o}):s?this.workerClient.uniqueValues(f,s):g({attribute:f,features:c})}_histogramForField(e){let t=null;return t=e.minValue!=null&&e.maxValue!=null?Promise.resolve({min:e.minValue,max:e.maxValue}):this.summaryStatistics({...e,outStatisticTypes:{include:[`min`,`max`,`count`]}}).then(e=>{if(!e.count)throw new n(`${this.adapterName}:insufficient-data`,`Either the layer has no features or none of the features have data for the field`);return{min:e.min,max:e.max}}),t.then(t=>R(this,{min:t.min,max:t.max},e.field,e.numBins??void 0,e.view,e.filter,e.signal))}async _histogramFromQueryAttributeBinsFromMemory(e){let{field:t,normalizationType:n,signal:r}=e,i=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryAttributeBins`}),{featuresJSON:a,graphics:o,layerView:s,query:c}=i,l=n===`percent-of-total`?e.normalizationTotal??await this._getNormalizationTotalFromMemory(t,i,r):void 0;if(!s||!(`queryAttributeBins`in s)||a||o){let t=D(e,i,l);return a?this.workerClient.histogram(t,a):_({attribute:t,features:o})}let{query:u,min:d,max:f}=await O(e,this,l,c);if(!u)return{bins:[],minValue:d,maxValue:f,normalizationTotal:l};let p=await s.queryAttributeBins(u,{signal:r});return k(p,t?this.getField(t):null,{minValue:d,maxValue:f,normalizationTotal:l})}async _histogramFromMemory(e){let{field:t,signal:n}=e,r=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryHistogram`}),{featuresJSON:i,graphics:a,layerView:o,query:s}=r,c=e.normalizationType===`percent-of-total`?e.normalizationTotal??await this._getNormalizationTotalFromMemory(t,r,n):void 0,l=D(e,r,c);return!i&&!a&&o&&`queryHistogram`in o?o.queryHistogram(s,l,{signal:n}):i?this.workerClient.histogram(l,i):_({attribute:l,features:a})}_classBreaksFromInterpolation(e){let{minValue:t,maxValue:n}=e,r=e.numClasses||5,i=[],a=(n-t)/r;for(let e=0;e<r;e++){let n=t+e*a;i.push({minValue:n,maxValue:n+a})}i[r-1].maxValue=n;let o={classBreaks:i,normalizationTotal:e.normalizationTotal},s=U(o,e.classificationMethod);return Promise.resolve(s)}async _classBreaksFromMemory(e){let{view:t,field:n,valueExpression:r,signal:i}=e,{featuresJSON:a,graphics:o,layerView:s,query:c,fieldInfos:l}=await this._processStatsFromMemoryParams({...e,layerViewFunc:`queryClassBreaks`}),u={field:n,valueExpression:r,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numClasses:e.numClasses};return r&&t&&(a||o)&&(u.viewInfoParams=N(t),u.timeZone=t.timeZone,u.fieldInfos=l),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(u.normalizationTotal=await this._getNormalizationTotalFromMemory(n,{featuresJSON:a,graphics:o,layerView:s,query:c},i)),!a&&!o&&s&&`queryClassBreaks`in s?s.queryClassBreaks(c,u,{signal:i}):a?this.workerClient.classBreaks(u,a):v({attribute:u,features:o})}async _heatmapStatsFromMemory(e){let{view:t,field:n,radius:r,signal:a}=e;i(t,`InMemoryLayerAdapter: must have a view`);try{let n=await t.whenLayerView(this.layer);if(`queryHeatmapStatistics`in n&&!n.updating&&!e.filter)return await n.queryHeatmapStatistics({field:e.field,radius:e.radius})}catch{o(a)}let{featuresJSON:s,graphics:c}=await this._processStatsFromMemoryParams({...e,returnGeometry:!0}),l=new p({extent:t.extent,tolerance:t.type===`2d`?t.state.resolution:t.pixelSizeAt?.(t.center)}),d={field:n,radius:r,transform:u(l),spatialReference:t.spatialReference?.toJSON(),size:t.size};return!s?.length&&!c?.length?{min:null,max:null}:s?this.workerClient.heatmapStatistics(d,s):y({attribute:d,features:c})}getField(e=``){return this.layer.getField(e)}getFieldUsageInfo(e){return this.getField(e)?{supportsLabelingInfo:!0,supportsRenderer:!0,supportsPopupTemplate:!0,supportsLayerQuery:!0,supportsStatistics:!0}:null}getFieldDomain(e,t){return this.layer.getFieldDomain(e,t)}createQuery(){return this.layer.createQuery()}async summaryStatistics(e){let{field:t,valueExpression:r,sqlExpression:i,features:a,view:o}=e,s=t?this.getField(t):null,c=!!r,l=o?.type===`3d`;if(!r&&i&&!this.supportsSQLExpression)throw new n(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);return c||a||l?this._summaryStatsFromMemory(e,s):this._summaryStatsFromClientQuery(e,s)}async uniqueValues(e){let{valueExpression:t,sqlExpression:r,features:i,view:a}=e,o=await z(e,this),s=!!t,c=a?.type===`3d`;if(!t&&r&&!this.supportsSQLExpression)throw new n(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);return s||i||c?this._uvFromMemory(e,o):this._uvFromClientQuery(e,o)}async histogram(e){let{features:t,valueExpression:r,normalizationType:i,sqlExpression:a}=e,o=t||!!r;if(!r&&a&&!this.supportsSQLExpression)throw new n(`${this.adapterName}:not-supported`,`Layer does not support standardized SQL expression for queries`);return o||i?this._histogramFromMemory(e):this._histogramForField(e)}async classBreaks(e){return e.analyzeData===!1?this._classBreaksFromInterpolation(e):this._classBreaksFromMemory(e)}async queryFeatureCount(e){let{whereClause:t,view:r,signal:i}=e;if(!r)throw new n(`${this.adapterName}:insufficient-data`,`view is required to fetch the features from layerView`);let a=this.layer.createQuery();a.where=b(a.where,t),F(a,e.filter);let o=await r.whenLayerView(this.layer);return await s(()=>!o.updating,i),o.queryFeatureCount(a,{signal:i})}async generateRenderer(e,t){throw new n(`${this.adapterName}:not-supported`,`Layer does not support generateRenderer operation`)}async predominantCategories(e){let{fields:t,view:n,signal:r,filter:i}=e,a=m(t),o=await this._uvFromMemory({valueExpression:a,view:n,signal:r,filter:i});return B(o.uniqueValueInfos,t)}async heatmapStatistics(e){return this._heatmapStatsFromMemory(e)}async getSampleFeatures(e,r){let{view:i,sampleSize:a,requiredFields:o,returnGeometry:s,sqlWhere:c,filter:l,signal:u}=e,d=this.layer.createQuery();if(d.outSpatialReference=i?.spatialReference,d.returnGeometry=!!s,d.outFields=o,d.where=b(d.where,c),F(d,l),!i)throw new n(`${this.adapterName}:not-supported`,`view is required to get sample features for Layer`);let f=await i.whenLayerView(this.layer);if(P(this,o,f).length)throw new n(`${this.adapterName}:not-supported`,`Required fields need to be passed in the outFields for Layer`);let p=await this._fetchFeaturesFromMemory(f,d,u,r),m=a!=null&&a>0&&a<=p.length?a:p.length;return t(p,m,1)}load(e){let t=this.layer.load(e).then(async t=>{this.geometryType=t.geometryType,this.objectIdField=t.objectIdField,this.supportsSQLExpression=t.type===`stream`||!!t.capabilities?.query?.supportsSqlExpression,this.minScale=t.minScale,this.maxScale=t.maxScale,this.fullExtent=`fullExtent`in t?t.fullExtent:t.parent?.fullExtent,this._hasLocalSource=!1,this.hasQueryEngine=!0,this.workerClient=x.getInstance(),await this.workerClient.open(e.signal)});return this.addResolvingPromise(t),Promise.resolve(this)}};e([c({readOnly:!0})],K.prototype,`adapterName`,void 0),e([c({constructOnly:!0})],K.prototype,`layer`,void 0),K=e([l(`esri.smartMapping.support.adapters.InMemoryLayerAdapter`)],K);export{K as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{pickRandom as t}from"../../../core/arrayUtils.js";import n from"../../../core/Error.js";import{whenOnce as r}from"../../../core/reactiveUtils.js";import{property as i,subclass as a}from"../../../core/accessorSupport/decorators.js";import{isTimeOnlyField as o}from"../../../layers/support/fieldUtils.js";import{getArcadeForPredominantCategory as s}from"../../statistics/support/predominanceUtils.js";import{mergeWhereClauses as c}from"../../statistics/support/utils.js";import{WorkerClient as l}from"../../statistics/support/WorkerClient.js";import{isAnyDateField as u,fieldDelimiter as d}from"../utils.js";import f from"./FeatureLayerAdapter.js";import{getSummaryStatsQuery as p,getSummaryStatisticsFromFeatureSet as m,getUVQuery as h,getUniqueValuesFromFeatureSet as g,getDomainsForFields as _,getPredominantCategoriesFromUVInfos as v,getMissingFields as y}from"./support/utils.js";import{processSummaryStatisticsResult as b,createUVResult as x}from"../../../statistics/utils.js";let S=class extends f{constructor(e){super(e),this.adapterName=`ogc-feature-layer-adapter`}async _waitForLayerViewUpdate(e){if(!e)throw new n(`ogc-feature-layer-adapter:insufficient-data`,`layerView is required to fetch the features`);await r(()=>!e.updating)}async _summaryStatsFromClientQuery(e,t){let{signal:i,view:a}=e;if(!a)throw new n(`ogc-feature-layer-adapter:insufficient-data`,`view is required to fetch the features from layerView`);let s=p(this,e,t),c=await a.whenLayerView(this.layer);await r(()=>!c.updating,i);let l=await c.queryFeatures(s,{signal:i}),d=m(l,u(t)||o(t));return b(d,e.outStatisticTypes)}async _uvFromClientQuery(e,t){let{signal:i,view:a}=e;if(!a)throw new n(`ogc-feature-layer-adapter:insufficient-data`,`view is required to fetch the features from layerView`);let o=h(this,e),s=await a.whenLayerView(this.layer);await r(()=>!s.updating,i);let c=await s.queryFeatures(o,{signal:i}),l=await g(c,{layer:this,field:e.field,field2:e.field2,field3:e.field3,fieldDelimiter:d,view:e.view,signal:e.signal});return x(l,t,e.returnAllCodedValues,d)}summaryStatistics(e){let{field:t,valueExpression:r,sqlExpression:i,features:a,view:o}=e,s=t?this.getField(t):null,c=!!r,l=o?.type===`3d`;if(!r&&i&&!this.supportsSQLExpression)throw new n(`ogc-feature-layer-adapter:not-supported`,`Layer does not support standardized SQL expression for queries`);return c||a||l?this._summaryStatsFromMemory(e,s):this._summaryStatsFromClientQuery(e,s)}async uniqueValues(e){let{valueExpression:t,sqlExpression:r,features:i,view:a}=e,o=await _(e,this),s=!!t,c=a?.type===`3d`;if(!t&&r&&!this.supportsSQLExpression)throw new n(`ogc-feature-layer-adapter:not-supported`,`Layer does not support standardized SQL expression for queries`);return s||i||c?this._uvFromMemory(e,o):this._uvFromClientQuery(e,o)}histogram(e){let{features:t,valueExpression:r,normalizationType:i,sqlExpression:a}=e,o=t||!!r;if(!r&&a&&!this.supportsSQLExpression)throw new n(`ogc-feature-layer-adapter:not-supported`,`Layer does not support standardized SQL expression for queries`);return o||i?this._histogramFromMemory(e):this._histogramForField(e)}classBreaks(e){return e.analyzeData===!1?this._classBreaksFromInterpolation(e):this._classBreaksFromMemory(e)}async queryFeatureCount(e){let{whereClause:t,view:i,signal:a}=e;if(!i)throw new n(`ogc-feature-layer-adapter:insufficient-data`,`view is required to fetch the features from layerView`);let o=this.layer.createQuery();o.where=c(o.where,t);let s=await i.whenLayerView(this.layer);return await r(()=>!s.updating,a),s.queryFeatureCount(o,{signal:a})}generateRenderer(e,t){throw new n(`ogc-feature-layer-adapter:not-supported`,`OGCFeatureLayer does not support generateRenderer operation`)}async predominantCategories(e){let{fields:t,view:n,signal:r}=e,i=s(t),a=await this._uvFromMemory({valueExpression:i,view:n,signal:r});return v(a.uniqueValueInfos,t)}async getSampleFeatures(e,r){let{view:i,sampleSize:a,requiredFields:o,returnGeometry:s,signal:c}=e,l=this.layer.createQuery();if(l.outSpatialReference=i?.spatialReference,l.returnGeometry=!!s,l.outFields=o,!i)throw new n(`ogc-feature-layer-adapter:not-supported`,`view is required to get sample features for OGCFeatureLayer`);let u=await i.whenLayerView(this.layer);if(y(this,o,u).length)throw new n(`ogc-feature-layer-adapter:not-supported`,`Required fields need to be passed in the outFields for OGCFeatureLayer`);let d=await this._fetchFeaturesFromMemory(u,l,c,r),f=a!=null&&a>0&&a<=d.length?a:d.length;return t(d,f,1)}load(e){let t=this.layer.load(e).then(async t=>{this.geometryType=t.geometryType,this.objectIdField=t.objectIdField,this.supportsSQLExpression=t.capabilities?.query?.supportsSqlExpression,this.minScale=t.minScale,this.maxScale=t.maxScale,this.fullExtent=t.fullExtent,this.workerClient=l.getInstance(),await this.workerClient.open(e.signal)});return this.addResolvingPromise(t),Promise.resolve(this)}};e([i({readOnly:!0})],S.prototype,`adapterName`,void 0),S=e([a(`esri.smartMapping.support.adapters.OGCFeatureLayerAdapter`)],S);const C=S;export{C as default};
2
+ import{__decorate as e}from"tslib";import{pickRandom as t}from"../../../core/arrayUtils.js";import n from"../../../core/Error.js";import{whenOnce as r}from"../../../core/reactiveUtils.js";import{property as i,subclass as a}from"../../../core/accessorSupport/decorators.js";import{isTimeOnlyField as o}from"../../../layers/support/fieldUtils.js";import{getArcadeForPredominantCategory as s}from"../../statistics/support/predominanceUtils.js";import{mergeWhereClauses as c}from"../../statistics/support/utils.js";import{WorkerClient as l}from"../../statistics/support/WorkerClient.js";import{isAnyDateField as u,fieldDelimiter as d}from"../utils.js";import f from"./FeatureLayerAdapter.js";import{getSummaryStatsQuery as p,getSummaryStatisticsFromFeatureSet as m,getUVQuery as h,getUniqueValuesFromFeatureSet as g,getDomainsForFields as _,updateQueryWithFeatureFilter as v,getPredominantCategoriesFromUVInfos as y,getMissingFields as b}from"./support/utils.js";import{processSummaryStatisticsResult as x,createUVResult as S}from"../../../statistics/utils.js";let C=class extends f{constructor(e){super(e),this.adapterName=`ogc-feature-layer-adapter`}async _waitForLayerViewUpdate(e){if(!e)throw new n(`ogc-feature-layer-adapter:insufficient-data`,`layerView is required to fetch the features`);await r(()=>!e.updating)}async _summaryStatsFromClientQuery(e,t){let{signal:i,view:a}=e;if(!a)throw new n(`ogc-feature-layer-adapter:insufficient-data`,`view is required to fetch the features from layerView`);let s=p(this,e,t),c=await a.whenLayerView(this.layer);await r(()=>!c.updating,i);let l=await c.queryFeatures(s,{signal:i}),d=m(l,u(t)||o(t));return x(d,e.outStatisticTypes)}async _uvFromClientQuery(e,t){let{signal:i,view:a}=e;if(!a)throw new n(`ogc-feature-layer-adapter:insufficient-data`,`view is required to fetch the features from layerView`);let o=h(this,e),s=await a.whenLayerView(this.layer);await r(()=>!s.updating,i);let c=await s.queryFeatures(o,{signal:i}),l=await g(c,{layer:this,field:e.field,field2:e.field2,field3:e.field3,fieldDelimiter:d,filter:e.filter,view:e.view,signal:e.signal});return S(l,t,e.returnAllCodedValues,d)}summaryStatistics(e){let{field:t,valueExpression:r,sqlExpression:i,features:a,view:o}=e,s=t?this.getField(t):null,c=!!r,l=o?.type===`3d`;if(!r&&i&&!this.supportsSQLExpression)throw new n(`ogc-feature-layer-adapter:not-supported`,`Layer does not support standardized SQL expression for queries`);return c||a||l?this._summaryStatsFromMemory(e,s):this._summaryStatsFromClientQuery(e,s)}async uniqueValues(e){let{valueExpression:t,sqlExpression:r,features:i,view:a}=e,o=await _(e,this),s=!!t,c=a?.type===`3d`;if(!t&&r&&!this.supportsSQLExpression)throw new n(`ogc-feature-layer-adapter:not-supported`,`Layer does not support standardized SQL expression for queries`);return s||i||c?this._uvFromMemory(e,o):this._uvFromClientQuery(e,o)}histogram(e){let{features:t,valueExpression:r,normalizationType:i,sqlExpression:a}=e,o=t||!!r;if(!r&&a&&!this.supportsSQLExpression)throw new n(`ogc-feature-layer-adapter:not-supported`,`Layer does not support standardized SQL expression for queries`);return o||i?this._histogramFromMemory(e):this._histogramForField(e)}classBreaks(e){return e.analyzeData===!1?this._classBreaksFromInterpolation(e):this._classBreaksFromMemory(e)}async queryFeatureCount(e){let{whereClause:t,view:i,signal:a}=e;if(!i)throw new n(`ogc-feature-layer-adapter:insufficient-data`,`view is required to fetch the features from layerView`);let o=this.layer.createQuery();o.where=c(o.where,t),v(o,e.filter);let s=await i.whenLayerView(this.layer);return await r(()=>!s.updating,a),s.queryFeatureCount(o,{signal:a})}generateRenderer(e,t){throw new n(`ogc-feature-layer-adapter:not-supported`,`OGCFeatureLayer does not support generateRenderer operation`)}async predominantCategories(e){let{fields:t,view:n,signal:r}=e,i=s(t),a=await this._uvFromMemory({valueExpression:i,view:n,signal:r});return y(a.uniqueValueInfos,t)}async getSampleFeatures(e,r){let{view:i,sampleSize:a,requiredFields:o,returnGeometry:s,signal:c}=e,l=this.layer.createQuery();if(l.outSpatialReference=i?.spatialReference,l.returnGeometry=!!s,l.outFields=o,!i)throw new n(`ogc-feature-layer-adapter:not-supported`,`view is required to get sample features for OGCFeatureLayer`);let u=await i.whenLayerView(this.layer);if(b(this,o,u).length)throw new n(`ogc-feature-layer-adapter:not-supported`,`Required fields need to be passed in the outFields for OGCFeatureLayer`);let d=await this._fetchFeaturesFromMemory(u,l,c,r),f=a!=null&&a>0&&a<=d.length?a:d.length;return t(d,f,1)}load(e){let t=this.layer.load(e).then(async t=>{this.geometryType=t.geometryType,this.objectIdField=t.objectIdField,this.supportsSQLExpression=t.capabilities?.query?.supportsSqlExpression,this.minScale=t.minScale,this.maxScale=t.maxScale,this.fullExtent=t.fullExtent,this.workerClient=l.getInstance(),await this.workerClient.open(e.signal)});return this.addResolvingPromise(t),Promise.resolve(this)}};e([i({readOnly:!0})],C.prototype,`adapterName`,void 0),C=e([a(`esri.smartMapping.support.adapters.OGCFeatureLayerAdapter`)],C);const w=C;export{w as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../Graphic.js";import{pickRandom as n}from"../../../core/arrayUtils.js";import r from"../../../core/Error.js";import{timeout as i,throwIfAborted as a}from"../../../core/promiseUtils.js";import{whenOnce as o}from"../../../core/reactiveUtils.js";import{property as s,subclass as c}from"../../../core/accessorSupport/decorators.js";import{kebabDict as l}from"../../../layers/support/fieldType.js";import{isNumericField as u}from"../../../layers/support/fieldUtils.js";import d from"../../../rest/support/FeatureSet.js";import{summaryStatistics as f,uniqueValues as p,classBreaks as m,histogram as h}from"../../statistics/support/statsWorker.js";import{WorkerClient as g}from"../../statistics/support/WorkerClient.js";import{getFieldsList as _,isAnyDateField as v,fieldDelimiter as y}from"../utils.js";import b from"./FeatureLayerAdapter.js";import x from"./LayerAdapter.js";import{getMissingFields as S,ensureFeaturesJSON as C,getViewInfoParams as w,getUniqueValuesFromFeatureSet as T,getHistogramFromFeatureSet as E,getDomainsForFields as D}from"./support/utils.js";import{createUVResult as O}from"../../../statistics/utils.js";let k=class extends x{constructor(e){super(e),this._featureLayerAdapter=null,this.workerClient=null,this.adapterName=`scene-layer-adapter`}destroy(){this.workerClient?.destroy()}_hasCachedStatistics(e){return this.layer.hasCachedStatistics(e)}_updateQuery(e,t=[],n=[]){if(!e||!n.length)return e;let r=this.layer.objectIdField,i=e.clone(),a=t.filter(e=>{let t=this.layer.getField(e);return!n.includes(t.name)});return i.outFields=a.some(e=>this.layer.getField(e).name===r)?a:[...a,r],i}async _fetchFeaturesFromMemory(e,t,n){if(!e)throw new r(`scene-layer-adapter:insufficient-data`,`view is required to fetch the features from layerView`);let s=await e.whenLayerView(this.layer),c=new AbortController,l=c.signal,u=o(()=>!s.updating,l);await i(u,5e3,c);let d=S(this,n,s);a(l);let f=this._updateQuery(t,n??[],d),p=await s.queryFeatures(f,{signal:l});a(l);let m=p.features;return d.length?s.whenGraphicAttributes(m,d):m}async _fetchFeaturesJSONFromMemory(e,t,n){return this._fetchFeaturesFromMemory(e,t,n).then(C)}_fetchFeaturesForStats(e,t){return _({field:e.field,normalizationField:e.normalizationField,valueExpression:e.valueExpression}).then(n=>this.getSampleFeatures({sampleSize:-1,view:e.view,returnGeometry:e.returnGeometry,requiredFields:n,signal:e.signal},t))}async _processStatsFromMemoryParams(e){let t=e.features;if(t?.length)return t.length&&`declaredClass`in t[0]&&t[0].declaredClass===`esri.Graphic`?{graphics:t}:{featuresJSON:t};let{view:n,field:i,normalizationField:a,valueExpression:o,signal:s}=e,c=await this._fetchFeaturesForStats({field:i,valueExpression:o,normalizationField:a,view:n,signal:s},null);if(!c?.length)throw new r(`scene-layer-adapter:insufficient-data`,`No features are available to calculate statistics`);return{graphics:c}}_getCachedStatistics(e,t){let n=this.layer;return e.valueExpression||e.sqlExpression||e.sqlWhere||e.minValue||e.maxValue?Promise.reject(new r(`scene-layer-adapter:not-supported`,`This Layer does not support calculating statistics when 'valueExpression', 'sqlExpression', 'sqlWhere', 'minValue' or 'maxValue' is specified`)):n.queryCachedStatistics(t?.name,{signal:e.signal}).then(e=>{let t=e.stats,{min:n,max:r,totalValuesCount:i}=t,{avg:a,stddev:o,sum:s,variance:c,count:l}=t;return(n!==0||r!==0)&&(a=a===0?null:a,s=s===0?null:s,o=o===0?null:o,c=c===0?null:c,l=l===0?null:l),l??(s!=null&&a!=null?l=Math.round(s/a):i!=null&&(l=i)),{avg:a,count:l,max:r,min:n,stddev:o,sum:s,variance:c}})}async _getNormalizationTotal(e,t,n){let i={include:[`sum`]},a=(t?await this.workerClient.summaryStatistics({field:e,outStatisticTypes:i},t):await f({attribute:{field:e,outStatisticTypes:i},features:n})).sum;if(a==null)throw new r(`scene-layer-adapter:invalid`,`invalid normalizationTotal`);return a}async _getSummaryStatisticsFromMemory(e,t){let{view:n,field:r,normalizationField:i,valueExpression:a}=e,{featuresJSON:o,graphics:s}=await this._processStatsFromMemoryParams(e),c={field:r,valueExpression:a,normalizationType:e.normalizationType,normalizationField:i,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,outStatisticTypes:e.outStatisticTypes};return e.valueExpression&&n&&o&&(c.fieldType=t?.type?l.toJSON(t.type):null,c.viewInfoParams=w(n),c.timeZone=n.timeZone),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(c.normalizationTotal=await this._getNormalizationTotal(r,o,s)),o?this.workerClient.summaryStatistics(c,o):f({attribute:c,features:s})}_getCachedStatisticsForUniqueValues(e,n){let i=this.layer,a=n?.name,o=n&&e.field?this.getFieldDomain(e.field):null;return e.valueExpression||e.sqlExpression||e.sqlWhere?Promise.reject(new r(`scene-layer-adapter:not-supported`,`This Layer does not support calculating statistics when 'valueExpression', 'sqlExpression' or 'sqlWhere' is specified`)):i.queryCachedStatistics(a,{signal:e.signal}).then(r=>{let o=r.stats;if(!o.mostFrequentValues)throw Error();let s=r.labels?.labels,c={},l=[],f=`countOF`+a;o.mostFrequentValues.forEach(e=>{let r=new t({attributes:{}});r.attributes[a]=n&&n.name!==i.objectIdField&&(u(n)||v(n))?Number(e.value):e.value,r.attributes[f]=e.count,l.push(r)}),s&&s.forEach(e=>{c[e.value]=e.label});let p=new d({features:l});return T(p,{layer:this,field:e.field,labels:c,view:e.view,signal:e.signal})}).then(t=>O(t,[o],e.returnAllCodedValues))}async _getUniqueValuesFromMemory(e,t){let{view:n,field:r,field2:i,field3:a,valueExpression:o,returnAllCodedValues:s}=e,c={field:r,field2:i,field3:a,fieldDelimiter:y,valueExpression:o,domains:t,returnAllCodedValues:s},{featuresJSON:l,graphics:u}=await this._processStatsFromMemoryParams(e);return e.valueExpression&&n&&l&&(c.viewInfoParams=w(n),c.timeZone=n.timeZone),l?this.workerClient.uniqueValues(c,l):p({attribute:c,features:u})}_getCachedStatisticsForHistogram(e,t){let n=this.layer;return e.valueExpression||e.sqlExpression||e.sqlWhere||e.normalizationType?Promise.reject(new r(`scene-layer-adapter:not-supported`,`This Layer does not support calculating statistics when 'valueExpression' or 'sqlExpression' or 'sqlWhere' or 'normalizationType' is specified`)):n.queryCachedStatistics(t&&t.name,{signal:e.signal}).then(t=>{let n=t.stats,{minValue:r,maxValue:i}=e,a=r??n.min,o=i??n.max,s=e.numBins||10,c=A(n.histogram,a,o,s);return E(c,a,o,s)})}async _getClassBreaksFromMemory(e){let{view:t,field:n,normalizationField:r,valueExpression:i}=e,{featuresJSON:a,graphics:o}=await this._processStatsFromMemoryParams(e),s={field:n,valueExpression:i,normalizationType:e.normalizationType,normalizationField:r,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numClasses:e.numClasses};return e.valueExpression&&t&&a&&(s.viewInfoParams=w(t),s.timeZone=t.timeZone),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(s.normalizationTotal=await this._getNormalizationTotal(n,a,o)),a?this.workerClient.classBreaks(s,a):m({attribute:s,features:o})}async _getHistogramFromMemory(e){let{view:t,field:n}=e,{featuresJSON:r,graphics:i}=await this._processStatsFromMemoryParams(e),a={field:n,valueExpression:e.valueExpression,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numBins:e.numBins};return e.valueExpression&&t&&r&&(a.viewInfoParams=w(t),a.timeZone=t.timeZone),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(a.normalizationTotal=await this._getNormalizationTotal(n,r,i)),r?this.workerClient.histogram(a,r):h({attribute:a,features:i})}getField(e){return this.layer.getField(e??``)}getFieldUsageInfo(e){let t=this.getField(e);if(!t)return null;let n=this.layer.getFieldUsageInfo(t.name);return{supportsLabelingInfo:n.supportsLabelingInfo,supportsPopupTemplate:n.supportsPopupTemplate,supportsRenderer:n.supportsRenderer,supportsLayerQuery:n.supportsLayerQuery,supportsStatistics:!0}}getFieldDomain(e,t){return this._featureLayerAdapter?this._featureLayerAdapter.getFieldDomain(e,t):null}createQuery(){return this.layer.createQuery()}summaryStatistics(e){let t=this.getField(e.field);if(this._featureLayerAdapter)return this._featureLayerAdapter.summaryStatistics(e);if(e.filter)throw new r(`scene-layer-adapter:not-supported`,`filter is not supported`);return this._hasCachedStatistics(t?.name)?this._getCachedStatistics(e,t).catch(()=>(a(e.signal),this._getSummaryStatisticsFromMemory(e,t))):this._getSummaryStatisticsFromMemory(e,t)}async uniqueValues(e){if(this._featureLayerAdapter)return this._featureLayerAdapter.uniqueValues(e);if(e.filter)throw new r(`scene-layer-adapter:not-supported`,`filter is not supported`);let t=await D(e,this),{field:n,field2:i}=e,o=n&&i,s=this.getField(n);return!o&&s&&this._hasCachedStatistics(s.name)?this._getCachedStatisticsForUniqueValues(e,s).catch(()=>(a(e.signal),this._getUniqueValuesFromMemory(e,t))):this._getUniqueValuesFromMemory(e,t)}histogram(e){let t=this.getField(e.field);if(this._featureLayerAdapter)return this._featureLayerAdapter.histogram(e);if(e.filter)throw new r(`scene-layer-adapter:not-supported`,`filter is not supported`);return t&&this._hasCachedStatistics(t.name)?this._getCachedStatisticsForHistogram(e,t).catch(()=>(a(e.signal),this._getHistogramFromMemory(e))):this._getHistogramFromMemory(e)}classBreaks(e){let t=this.getField(e.field);if(this._featureLayerAdapter)return this._featureLayerAdapter.classBreaks(e);if(e.filter)throw new r(`scene-layer-adapter:not-supported`,`filter is not supported`);return this._hasCachedStatistics(t?.name)?Promise.reject(new r(`scene-layer-adapter:not-supported`,`Cached stats not supported`)):this._getClassBreaksFromMemory(e)}queryFeatureCount(e){return this._featureLayerAdapter?this._featureLayerAdapter.queryFeatureCount(e):Promise.reject(new r(`scene-layer-adapter:not-supported`,`SceneLayer without associated FeatureLayer does not support count query`))}generateRenderer(e,t){return this._featureLayerAdapter?this._featureLayerAdapter.generateRenderer(e,t):Promise.reject(new r(`scene-layer-adapter:not-supported`,`SceneLayer without associated FeatureLayer does not support generateRenderer operation`))}heatmapStatistics(e){return this._featureLayerAdapter?this._featureLayerAdapter.heatmapStatistics(e):Promise.reject(new r(`scene-layer-adapter:not-supported`,`SceneLayer without associated FeatureLayer does not support heatmapStatistics operation`))}async predominantCategories(e){if(this._featureLayerAdapter)return this._featureLayerAdapter.predominantCategories(e);throw new r(`scene-layer-adapter:not-supported`,`SceneLayer without associated FeatureLayer does not support predominantCategories`)}async getSampleFeatures(e,t){if(e.filter)throw new r(`scene-layer-adapter:not-supported`,`filter is not supported`);let{view:i,sampleSize:o,requiredFields:s,returnGeometry:c,signal:l}=e,u=t===`json`,d=this.createQuery();d.outFields=s,d.returnGeometry=!!c,d.where=null,d.num=o;let f=[];try{if(f=u?await this._fetchFeaturesJSONFromMemory(i,d,s):await this._fetchFeaturesFromMemory(i,d,s),f.length&&o!=null&&o>0&&o<=f.length)return n(f,o,1)}catch{a(l)}let p=null;if(this._featureLayerAdapter){let n={...e};delete n.view,p=await this._featureLayerAdapter.getSampleFeatures(n,t)}return p?.length?p:n(f,f.length,1)}load(e){let t=this.layer.load(e).then(async t=>{this.workerClient=g.getInstance(),await this.workerClient.open(e.signal);let n=t.associatedLayer;if(this.geometryType=t.geometryType,n!=null)return this._featureLayerAdapter=new b({layer:n}),this._featureLayerAdapter.load(e).then(()=>{this.objectIdField=this._featureLayerAdapter.objectIdField,this.supportsSQLExpression=this._featureLayerAdapter.supportsSQLExpression,this.minScale=this._featureLayerAdapter.minScale,this.maxScale=this._featureLayerAdapter.maxScale,this.fullExtent=this._featureLayerAdapter.fullExtent});this.objectIdField=t.objectIdField,this.supportsSQLExpression=!1,this.hasQueryEngine=!1,this.fullExtent=t.fullExtent});return this.addResolvingPromise(t),Promise.resolve(this)}};e([s({readOnly:!0})],k.prototype,`adapterName`,void 0),e([s({constructOnly:!0})],k.prototype,`layer`,void 0),k=e([c(`esri.smartMapping.support.adapters.SceneLayerAdapter`)],k);function A(e,n=e.minimum,r=e.maximum,i){let a=[];for(let e=0;e<i;e++)a[e]=0;let o=e.counts.length,s=e.minimum,c=e.maximum;for(let t=0;t<o;t++){let l=(t+.5)/o,u=((1-l)*s+l*c-n)/(r-n)*i;u>=0&&u<=i&&(a[u===i?i-1:Math.floor(u)]+=e.counts[t])}let l=[];return a.forEach((e,n)=>{let r=new t({attributes:{}});r.attributes.EXPR_1=n+1,r.attributes.countOFExpr=e,l.push(r)}),new d({features:l})}export{k as default};
2
+ import{__decorate as e}from"tslib";import t from"../../../Graphic.js";import{pickRandom as n}from"../../../core/arrayUtils.js";import r from"../../../core/Error.js";import{timeout as i,throwIfAborted as a}from"../../../core/promiseUtils.js";import{whenOnce as o}from"../../../core/reactiveUtils.js";import{property as s,subclass as c}from"../../../core/accessorSupport/decorators.js";import{kebabDict as l}from"../../../layers/support/fieldType.js";import{isNumericField as u}from"../../../layers/support/fieldUtils.js";import d from"../../../rest/support/FeatureSet.js";import{summaryStatistics as f,uniqueValues as p,classBreaks as m,histogram as h}from"../../statistics/support/statsWorker.js";import{WorkerClient as g}from"../../statistics/support/WorkerClient.js";import{getFieldsList as _,isAnyDateField as v,fieldDelimiter as y}from"../utils.js";import b from"./FeatureLayerAdapter.js";import x from"./LayerAdapter.js";import{getMissingFields as S,ensureFeaturesJSON as C,getViewInfoParams as w,getUniqueValuesFromFeatureSet as T,getHistogramFromFeatureSet as E,getDomainsForFields as D}from"./support/utils.js";import{createUVResult as O}from"../../../statistics/utils.js";let k=class extends x{constructor(e){super(e),this._featureLayerAdapter=null,this.workerClient=null,this.adapterName=`scene-layer-adapter`}destroy(){this.workerClient?.destroy()}_hasCachedStatistics(e){return this.layer.hasCachedStatistics(e)}_updateQuery(e,t=[],n=[]){if(!e||!n.length)return e;let r=this.layer.objectIdField,i=e.clone(),a=t.filter(e=>{let t=this.layer.getField(e);return!n.includes(t.name)});return i.outFields=a.some(e=>this.layer.getField(e).name===r)?a:[...a,r],i}async _fetchFeaturesFromMemory(e,t,n){if(!e)throw new r(`scene-layer-adapter:insufficient-data`,`view is required to fetch the features from layerView`);let s=await e.whenLayerView(this.layer),c=new AbortController,l=c.signal,u=o(()=>!s.updating,l);await i(u,5e3,c);let d=S(this,n,s);a(l);let f=this._updateQuery(t,n??[],d),p=await s.queryFeatures(f,{signal:l});a(l);let m=p.features;return d.length?s.whenGraphicAttributes(m,d):m}async _fetchFeaturesJSONFromMemory(e,t,n){return this._fetchFeaturesFromMemory(e,t,n).then(C)}_fetchFeaturesForStats(e,t){return _({field:e.field,normalizationField:e.normalizationField,valueExpression:e.valueExpression}).then(n=>this.getSampleFeatures({sampleSize:-1,view:e.view,returnGeometry:e.returnGeometry,requiredFields:n,signal:e.signal},t))}async _processStatsFromMemoryParams(e){let t=e.features;if(t?.length)return t.length&&`declaredClass`in t[0]&&t[0].declaredClass===`esri.Graphic`?{graphics:t}:{featuresJSON:t};let{view:n,field:i,normalizationField:a,valueExpression:o,signal:s}=e,c=await this._fetchFeaturesForStats({field:i,valueExpression:o,normalizationField:a,view:n,signal:s},null);if(!c?.length)throw new r(`scene-layer-adapter:insufficient-data`,`No features are available to calculate statistics`);return{graphics:c}}_getCachedStatistics(e,t){let n=this.layer;return e.valueExpression||e.sqlExpression||e.sqlWhere||e.minValue||e.maxValue?Promise.reject(new r(`scene-layer-adapter:not-supported`,`This Layer does not support calculating statistics when 'valueExpression', 'sqlExpression', 'sqlWhere', 'minValue' or 'maxValue' is specified`)):n.queryCachedStatistics(t?.name,{signal:e.signal}).then(e=>{let t=e.stats,{min:n,max:r,totalValuesCount:i}=t,{avg:a,stddev:o,sum:s,variance:c,count:l}=t;return(n!==0||r!==0)&&(a=a===0?null:a,s=s===0?null:s,o=o===0?null:o,c=c===0?null:c,l=l===0?null:l),l??(s!=null&&a!=null?l=Math.round(s/a):i!=null&&(l=i)),{avg:a,count:l,max:r,min:n,stddev:o,sum:s,variance:c}})}async _getNormalizationTotal(e,t,n){let i={include:[`sum`]},a=(t?await this.workerClient.summaryStatistics({field:e,outStatisticTypes:i},t):await f({attribute:{field:e,outStatisticTypes:i},features:n})).sum;if(a==null)throw new r(`scene-layer-adapter:invalid`,`invalid normalizationTotal`);return a}async _getSummaryStatisticsFromMemory(e,t){let{view:n,field:r,normalizationField:i,valueExpression:a}=e,{featuresJSON:o,graphics:s}=await this._processStatsFromMemoryParams(e),c={field:r,valueExpression:a,normalizationType:e.normalizationType,normalizationField:i,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,outStatisticTypes:e.outStatisticTypes};return e.valueExpression&&n&&o&&(c.fieldType=t?.type?l.toJSON(t.type):null,c.viewInfoParams=w(n),c.timeZone=n.timeZone),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(c.normalizationTotal=await this._getNormalizationTotal(r,o,s)),o?this.workerClient.summaryStatistics(c,o):f({attribute:c,features:s})}_getCachedStatisticsForUniqueValues(e,n){let i=this.layer,a=n?.name,o=n&&e.field?this.getFieldDomain(e.field):null;return e.valueExpression||e.sqlExpression||e.sqlWhere?Promise.reject(new r(`scene-layer-adapter:not-supported`,`This Layer does not support calculating statistics when 'valueExpression', 'sqlExpression' or 'sqlWhere' is specified`)):i.queryCachedStatistics(a,{signal:e.signal}).then(r=>{let o=r.stats;if(!o.mostFrequentValues)throw Error();let s=r.labels?.labels,c={},l=[],f=`countOF`+a;o.mostFrequentValues.forEach(e=>{let r=new t({attributes:{}});r.attributes[a]=n&&n.name!==i.objectIdField&&(u(n)||v(n))?Number(e.value):e.value,r.attributes[f]=e.count,l.push(r)}),s&&s.forEach(e=>{c[e.value]=e.label});let p=new d({features:l});return T(p,{layer:this,field:e.field,labels:c,filter:e.filter,view:e.view,signal:e.signal})}).then(t=>O(t,[o],e.returnAllCodedValues))}async _getUniqueValuesFromMemory(e,t){let{view:n,field:r,field2:i,field3:a,valueExpression:o,returnAllCodedValues:s}=e,c={field:r,field2:i,field3:a,fieldDelimiter:y,valueExpression:o,domains:t,returnAllCodedValues:s},{featuresJSON:l,graphics:u}=await this._processStatsFromMemoryParams(e);return e.valueExpression&&n&&l&&(c.viewInfoParams=w(n),c.timeZone=n.timeZone),l?this.workerClient.uniqueValues(c,l):p({attribute:c,features:u})}_getCachedStatisticsForHistogram(e,t){let n=this.layer;return e.valueExpression||e.sqlExpression||e.sqlWhere||e.normalizationType?Promise.reject(new r(`scene-layer-adapter:not-supported`,`This Layer does not support calculating statistics when 'valueExpression' or 'sqlExpression' or 'sqlWhere' or 'normalizationType' is specified`)):n.queryCachedStatistics(t&&t.name,{signal:e.signal}).then(t=>{let n=t.stats,{minValue:r,maxValue:i}=e,a=r??n.min,o=i??n.max,s=e.numBins||10,c=A(n.histogram,a,o,s);return E(c,a,o,s)})}async _getClassBreaksFromMemory(e){let{view:t,field:n,normalizationField:r,valueExpression:i}=e,{featuresJSON:a,graphics:o}=await this._processStatsFromMemoryParams(e),s={field:n,valueExpression:i,normalizationType:e.normalizationType,normalizationField:r,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numClasses:e.numClasses};return e.valueExpression&&t&&a&&(s.viewInfoParams=w(t),s.timeZone=t.timeZone),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(s.normalizationTotal=await this._getNormalizationTotal(n,a,o)),a?this.workerClient.classBreaks(s,a):m({attribute:s,features:o})}async _getHistogramFromMemory(e){let{view:t,field:n}=e,{featuresJSON:r,graphics:i}=await this._processStatsFromMemoryParams(e),a={field:n,valueExpression:e.valueExpression,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,minValue:e.minValue,maxValue:e.maxValue,standardDeviationInterval:e.standardDeviationInterval,classificationMethod:e.classificationMethod,numBins:e.numBins};return e.valueExpression&&t&&r&&(a.viewInfoParams=w(t),a.timeZone=t.timeZone),e.normalizationType===`percent-of-total`&&e.normalizationTotal==null&&(a.normalizationTotal=await this._getNormalizationTotal(n,r,i)),r?this.workerClient.histogram(a,r):h({attribute:a,features:i})}getField(e){return this.layer.getField(e??``)}getFieldUsageInfo(e){let t=this.getField(e);if(!t)return null;let n=this.layer.getFieldUsageInfo(t.name);return{supportsLabelingInfo:n.supportsLabelingInfo,supportsPopupTemplate:n.supportsPopupTemplate,supportsRenderer:n.supportsRenderer,supportsLayerQuery:n.supportsLayerQuery,supportsStatistics:!0}}getFieldDomain(e,t){return this._featureLayerAdapter?this._featureLayerAdapter.getFieldDomain(e,t):null}createQuery(){return this.layer.createQuery()}summaryStatistics(e){let t=this.getField(e.field);if(this._featureLayerAdapter)return this._featureLayerAdapter.summaryStatistics(e);if(e.filter)throw new r(`scene-layer-adapter:not-supported`,`filter is not supported`);return this._hasCachedStatistics(t?.name)?this._getCachedStatistics(e,t).catch(()=>(a(e.signal),this._getSummaryStatisticsFromMemory(e,t))):this._getSummaryStatisticsFromMemory(e,t)}async uniqueValues(e){if(this._featureLayerAdapter)return this._featureLayerAdapter.uniqueValues(e);if(e.filter)throw new r(`scene-layer-adapter:not-supported`,`filter is not supported`);let t=await D(e,this),{field:n,field2:i}=e,o=n&&i,s=this.getField(n);return!o&&s&&this._hasCachedStatistics(s.name)?this._getCachedStatisticsForUniqueValues(e,s).catch(()=>(a(e.signal),this._getUniqueValuesFromMemory(e,t))):this._getUniqueValuesFromMemory(e,t)}histogram(e){let t=this.getField(e.field);if(this._featureLayerAdapter)return this._featureLayerAdapter.histogram(e);if(e.filter)throw new r(`scene-layer-adapter:not-supported`,`filter is not supported`);return t&&this._hasCachedStatistics(t.name)?this._getCachedStatisticsForHistogram(e,t).catch(()=>(a(e.signal),this._getHistogramFromMemory(e))):this._getHistogramFromMemory(e)}classBreaks(e){let t=this.getField(e.field);if(this._featureLayerAdapter)return this._featureLayerAdapter.classBreaks(e);if(e.filter)throw new r(`scene-layer-adapter:not-supported`,`filter is not supported`);return this._hasCachedStatistics(t?.name)?Promise.reject(new r(`scene-layer-adapter:not-supported`,`Cached stats not supported`)):this._getClassBreaksFromMemory(e)}queryFeatureCount(e){return this._featureLayerAdapter?this._featureLayerAdapter.queryFeatureCount(e):Promise.reject(new r(`scene-layer-adapter:not-supported`,`SceneLayer without associated FeatureLayer does not support count query`))}generateRenderer(e,t){return this._featureLayerAdapter?this._featureLayerAdapter.generateRenderer(e,t):Promise.reject(new r(`scene-layer-adapter:not-supported`,`SceneLayer without associated FeatureLayer does not support generateRenderer operation`))}heatmapStatistics(e){return this._featureLayerAdapter?this._featureLayerAdapter.heatmapStatistics(e):Promise.reject(new r(`scene-layer-adapter:not-supported`,`SceneLayer without associated FeatureLayer does not support heatmapStatistics operation`))}async predominantCategories(e){if(this._featureLayerAdapter)return this._featureLayerAdapter.predominantCategories(e);throw new r(`scene-layer-adapter:not-supported`,`SceneLayer without associated FeatureLayer does not support predominantCategories`)}async getSampleFeatures(e,t){if(e.filter)throw new r(`scene-layer-adapter:not-supported`,`filter is not supported`);let{view:i,sampleSize:o,requiredFields:s,returnGeometry:c,signal:l}=e,u=t===`json`,d=this.createQuery();d.outFields=s,d.returnGeometry=!!c,d.where=null,d.num=o;let f=[];try{if(f=u?await this._fetchFeaturesJSONFromMemory(i,d,s):await this._fetchFeaturesFromMemory(i,d,s),f.length&&o!=null&&o>0&&o<=f.length)return n(f,o,1)}catch{a(l)}let p=null;if(this._featureLayerAdapter){let n={...e};delete n.view,p=await this._featureLayerAdapter.getSampleFeatures(n,t)}return p?.length?p:n(f,f.length,1)}load(e){let t=this.layer.load(e).then(async t=>{this.workerClient=g.getInstance(),await this.workerClient.open(e.signal);let n=t.associatedLayer;if(this.geometryType=t.geometryType,n!=null)return this._featureLayerAdapter=new b({layer:n}),this._featureLayerAdapter.load(e).then(()=>{this.objectIdField=this._featureLayerAdapter.objectIdField,this.supportsSQLExpression=this._featureLayerAdapter.supportsSQLExpression,this.minScale=this._featureLayerAdapter.minScale,this.maxScale=this._featureLayerAdapter.maxScale,this.fullExtent=this._featureLayerAdapter.fullExtent});this.objectIdField=t.objectIdField,this.supportsSQLExpression=!1,this.hasQueryEngine=!1,this.fullExtent=t.fullExtent});return this.addResolvingPromise(t),Promise.resolve(this)}};e([s({readOnly:!0})],k.prototype,`adapterName`,void 0),e([s({constructOnly:!0})],k.prototype,`layer`,void 0),k=e([c(`esri.smartMapping.support.adapters.SceneLayerAdapter`)],k);function A(e,n=e.minimum,r=e.maximum,i){let a=[];for(let e=0;e<i;e++)a[e]=0;let o=e.counts.length,s=e.minimum,c=e.maximum;for(let t=0;t<o;t++){let l=(t+.5)/o,u=((1-l)*s+l*c-n)/(r-n)*i;u>=0&&u<=i&&(a[u===i?i-1:Math.floor(u)]+=e.counts[t])}let l=[];return a.forEach((e,n)=>{let r=new t({attributes:{}});r.attributes.EXPR_1=n+1,r.attributes.countOFExpr=e,l.push(r)}),new d({features:l})}export{k as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{isSome as e}from"../../../../core/arrayUtils.js";import{throwIfAborted as t}from"../../../../core/promiseUtils.js";import n from"../../../../layers/support/CodedValue.js";import r from"../../../../layers/support/CodedValueDomain.js";import i from"../../../../layers/support/Field.js";import{isStringField as a,isTimeOnlyField as o,getAggregateFieldType as s}from"../../../../layers/support/fieldUtils.js";import c from"../../../../rest/support/PivotQuery.js";import l from"../../../../rest/support/StatisticDefinition.js";import u from"../../../../rest/support/UnPivotDefinition.js";import{noDominantCategoryField as d}from"../../../statistics/support/predominanceUtils.js";import{getSQLFilterForNormalization as f,mergeWhereClauses as p,getRangeExpr as m}from"../../../statistics/support/utils.js";import{isIntegerField as h,isAnyDateField as g,getDateDiffSQL as _,castIntegerFieldToFloat as v}from"../../utils.js";import{isNullCountSupported as y,statisticTypes as b,getEqualIntervalBins as x,processNullValue as S}from"../../../../statistics/utils.js";const C=/_value$/i,w=Math.LOG10E,T={SECOND:1e3,MINUTE:6e4,HOUR:36e5},E=10;function D(e){return e.map(e=>e.toJSON())}function O(e,t){let n=[],r=e.layer,i=`featureReduction`in r?r.featureReduction:null,a=i?.type===`binning`,o=i!=null&&`fields`in i?i.fields?.map(e=>e.name?.toLowerCase()).filter(Boolean):[];if(!a||!t)return n;for(let e of t)o.includes(e.toLowerCase())||n.push(e);return n}function k(e,t,n){let r=[];if(t)for(let i of t){let t=e.getField(i);t&&n&&`availableFields`in n&&!n.availableFields?.includes(t.name)&&r.push(t.name)}return r}function A(e,t){let n=e&&e.features;if(n?.length===0)return{avg:null,count:0,max:null,median:null,min:null,nullcount:0,stddev:null,sum:null,variance:null};let r=n?.[0]?.attributes,i={};for(let e in r)i[e.replace(C,``).toLowerCase()]=r[e];return i.totalcount!=null&&i.totalcount>=i.count&&(i.nullcount=i.totalcount-i.count),delete i.totalcount,i.min===i.max&&i.min!=null&&i.stddev==null&&(i.stddev=i.variance=0),t&&([`min`,`max`,`avg`,`stddev`,`sum`,`variance`].forEach(e=>{i[e]!=null&&(i[e]=Math.ceil(i[e]))}),i.min===i.max&&i.min!=null&&(i.avg=i.min,i.stddev=i.variance=0)),i}function j(e){let t=[],n=e.classBreaks,r=n[0].minValue,i=n[n.length-1].maxValue;return n.forEach(e=>{t.push([e.minValue,e.maxValue])}),{min:r,max:i,intervals:t,sqlExpr:M({field:e.field,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,layer:e.layer}),excludeZerosExpr:e.where,normTotal:e.normalizationTotal}}function M(e){let{field:t,normalizationType:n,normalizationField:r,normalizationTotal:i,layer:a}=e,o=h(a,t),s=t;return n===`percent-of-total`?s=`((${o?v(t):t} / ${i}) * 100)`:n===`log`?s=`(log(${t}) * ${w})`:n===`field`?s=`(${o?v(t):t} / ${r})`:n===`natural-log`?s=`(log(${o?v(t):t}))`:n===`square-root`&&(s=`(power(${o?v(t):t}, 0.5))`),s}function N(e,t){let n;if(t=t.toLowerCase(),e){for(let r in e)if(r.toLowerCase()!==t){n=e[r];break}}return n}function P(e,t){let n;if(t=t.toLowerCase(),e){for(let r in e)if(r.toLowerCase()===t){n=e[r];break}}return n}function F(e,t,n,r,i){let a={},o=`countOFExpr`;e&&e.features&&e.features.forEach(e=>{let t=e.attributes,n=N(t,o),r=P(t,o);n!=null&&r!=null&&n!==0&&(a[n]=r)});let s=[];return x(t,n,r).forEach((e,t)=>{let n=(t+1).toString();s.push({minValue:e[0],maxValue:e[1],count:a.hasOwnProperty(n)?a[n]:0})}),{bins:s,minValue:t,maxValue:n,normalizationTotal:i}}async function I(e,n){let r=e&&e.features,{field:i,field2:a,field3:o,fieldDelimiter:s,layer:c,view:l,signal:u,labels:d}=n,f=`countOF${i&&a?`Expr`:i||`Expr`}`,p={},m=!1;for(let e of r){let t=e.attributes,n=P(t,f),r=i?P(t,i):N(t,f),c=a?P(t,a):null,l=o?P(t,o):null;r===null&&n===0&&(m=!0),(r==null||typeof r==`string`&&r.trim()===``)&&(r=null),a&&(c==null||typeof c==`string`&&c.trim()===``)&&(c=null),o&&(l==null||typeof l==`string`&&l.trim()===``)&&(l=null);let u=r;a&&(u=`${S(u)}${s}${S(c)}`,o&&(u=`${u}${s}${S(l)}`)),p[u]==null?p[u]={count:n,data:u}:p[u].count=p[u].count+n}if(i&&m){let e=i+` is NULL`;try{let t=await c.queryFeatureCount({whereClause:e,view:l,signal:u});return p.null.count=p.null.count+t,L(p,d)}catch{return t(u),L(p,d)}}return L(p,d)}function L(e,t){if(t)for(let n in e)e[n].label=t[n];return{count:e}}async function R(e,t,i){let a=e?i.getField(e):null,o=a?i.getFieldDomain(a.name):null;if(o)return o;let{uniqueValueInfos:s}=await i.uniqueValues({field:e,sqlWhere:t.sqlWhere,features:t.features,useFeaturesInView:t.useFeaturesInView,view:t.view,signal:t.signal}),c=s.map(e=>new n({code:e.value}));return new r({codedValues:c})}async function z(e,t){if(!e.returnAllCodedValues)return[];let{field:n,field2:r,field3:i}=e;if(n&&!r){let e=n?t.getField(n):null,r=e?t.getFieldDomain(e.name):null;return r?[r]:[]}let a=[];return n&&(a.push(R(n,e,t)),r&&(a.push(R(r,e,t)),i&&a.push(R(i,e,t)))),Promise.all(a)}function B(e,t){return _(e,new Date(0),t,`milliseconds`).sqlExpression}function V(e,t){return`EXTRACT(${t} FROM ${e}) * ${T[t]}`}function H(e){return e?v([`HOUR`,`MINUTE`,`SECOND`].map(t=>`(${V(e,t)})`).join(` + `)):null}function U(e){return{viewingMode:e.type===`2d`?`map`:e.viewingMode,scale:e.scale,spatialReference:e.spatialReference?.toJSON()}}function W(e,t){let n=new Set(e.map(e=>e.value)),r=t.filter(e=>!n.has(e));for(let t of r)e.push({value:t,count:0});e.sort((e,n)=>t.indexOf(e.value)-t.indexOf(n.value));for(let t of e)t.value===d&&(t.value=null);return{predominantCategoryInfos:e}}function G(t){let n=`featureReduction`in t?t.featureReduction:null;return((n!=null&&`fields`in n?n.fields:null)??[]).map(e=>{let n=s(e,t.fieldsIndex);return n?new i({type:n,name:e.name,alias:e.alias}):null}).filter(e)}function K(e,t){return g(t)?B(e,t?.name):o(t)?H(t?.name):null}function q(e,t,n){let r=null;for(let i of n){let n=i?e.getField(i):null,a=Y(e,{...t,field:i,outStatisticTypes:{include:[`min`,`max`,`sum`,`count`]}},n,!0,!0);r?r.outStatistics=r.outStatistics.concat(a.outStatistics):r=a}return r.where=e.createQuery()?.where,r}function J(e,t,n,r){return t.map(t=>{let i=new l,a=null,o=null,s=`${t}_value${r?`_${r}`:``}`;if(t===`variance`)a=`var`,o=n;else if(t===`nullcount`){let t=e.objectIdField;a=`count`,o=t&&e.getField(t)?t:`1`,s=`totalcount_value`}else t===`median`?(a=`percentile-continuous`,o=n,i.statisticParameters={value:.5}):(a=t,o=n);return i.statisticType=a,i.onStatisticField=o,i.outStatisticFieldName=s,i})}function Y(e,t,n,r=!0,i=!1){let{field:o,normalizationType:s,normalizationField:c,normalizationTotal:l,minValue:u,maxValue:d,filter:h}=t,g=e.supportsSQLExpression?K(e,n)||t.sqlExpression:null,_=M({field:o,normalizationType:s,normalizationField:c,normalizationTotal:l,layer:e}),v=g||_,x=v?m(v,u,d):null,S=f({field:o,normalizationField:c,normalizationType:s}),C=p(t.sqlWhere,S),w=p(C,x),T=y({normalizationField:c,normalizationType:s,sqlExpression:g,supportsSQLExpression:e.supportsSQLExpression,minValue:u,maxValue:d}),E=a(e.getField(o??void 0)),{include:D,exclude:O}=t.outStatisticTypes||{},k=b.filter(e=>(!D||D.includes(e))&&(!O||!O.includes(e))&&(e===`nullcount`?T:!E||e===`count`)&&(e!==`median`||r)),A=e.createQuery();return A.where=p(A.where,w),A.sqlFormat=g?`standard`:null,A.outStatistics=J(e,k,v,i?o:void 0),Z(A,h),A}function X(e,t,n=!0){let{fields:r,filter:i}=t,{include:a,exclude:o}=t.outStatisticTypes||{},s=b.filter(e=>(!a||a.includes(e))&&(!o||!o.includes(e))&&(e!==`median`||n)),l=new c;l.where=p(e.createQuery()?.where,t.sqlWhere)??void 0;let d=`new_value`;return l.outPivots=[new u({sourceFields:r,valueFieldName:d})],l.outStatistics=J(e,s,d),Z(l,i),l}function Z(e,t){t&&(e.geometry=t.geometry,e.spatialRelationship=t.spatialRelationship,e.timeExtent=e.timeExtent?.intersection(t.timeExtent)??t.timeExtent,e.distance=t.distance,e.units=t.units)}function Q(e,t){let{field:n,field2:r,field3:i,sqlExpression:a}=t,o=!!(n&&r),s=e.createQuery();return s.where=p(s.where,t.sqlWhere),s.sqlFormat=a?`standard`:null,s.outStatistics=[$(o?null:n,o?`1`:a)].filter(Boolean),s.groupByFieldsForStatistics=[n||a,r,i].filter(Boolean),Z(s,t.filter),s}function $(e,t){let n=`countOF`+(e||`Expr`),r=new l;return r.statisticType=`count`,r.onStatisticField=t?`1`:e,r.outStatisticFieldName=n,r}function ee(e,t,n,r=10,i,a,o){let{min:s,max:c,normTotal:l,excludeZerosExpr:u}=t,d=t.intervals||x(s,c,r);return te(e,d,t.sqlExpr||n,u,i,a,o).then(e=>({bins:e.map((e,t)=>({minValue:d[t][0],maxValue:d[t][1],count:e.status===`fulfilled`?e.value:0})),minValue:s,maxValue:c,normalizationTotal:l}))}function te(e,t,n,r,i,a,o){let s=[],c=t.length;for(let e=0;e<c;e++){let i=p(r,p(n+` >= `+t[e][0],t[e][1]===null?``:n+(e===c-1?` <= `:` < `)+t[e][1]));s.push(i)}return Promise.allSettled(s.map(t=>e.queryFeatureCount({whereClause:t,view:i,filter:a,signal:o})))}export{E as defaultNumBins,D as ensureFeaturesJSON,j as generateBinParams,ee as getBins,z as getDomainsForFields,G as getFeatureReductionFields,M as getFieldExpr,F as getHistogramFromFeatureSet,k as getMissingFields,O as getMissingFieldsForBinning,W as getPredominantCategoriesFromUVInfos,K as getSQLExpressionForDateOrTimeField,A as getSummaryStatisticsFromFeatureSet,X as getSummaryStatsPivotQuery,Y as getSummaryStatsQuery,q as getSummaryStatsQueryForFields,Q as getUVQuery,I as getUniqueValuesFromFeatureSet,U as getViewInfoParams,H as msForTimeOnlyFieldSQL,B as msSinceUnixEpochSQL,Z as updateQueryWithFeatureFilter};
2
+ import{isSome as e}from"../../../../core/arrayUtils.js";import{throwIfAborted as t}from"../../../../core/promiseUtils.js";import n from"../../../../layers/support/CodedValue.js";import r from"../../../../layers/support/CodedValueDomain.js";import i from"../../../../layers/support/Field.js";import{getAggregateFieldType as a,isStringField as o,isTimeOnlyField as s}from"../../../../layers/support/fieldUtils.js";import c from"../../../../rest/support/PivotQuery.js";import l from"../../../../rest/support/StatisticDefinition.js";import u from"../../../../rest/support/UnPivotDefinition.js";import{noDominantCategoryField as d}from"../../../statistics/support/predominanceUtils.js";import{getRangeExpr as f,getSQLFilterForNormalization as p,mergeWhereClauses as m}from"../../../statistics/support/utils.js";import{isIntegerField as h,isAnyDateField as g,getDateDiffSQL as _,castIntegerFieldToFloat as v}from"../../utils.js";import{isNullCountSupported as y,statisticTypes as b,getEqualIntervalBins as x,processNullValue as S}from"../../../../statistics/utils.js";const C=/_value$/i,w=Math.LOG10E,T={SECOND:1e3,MINUTE:6e4,HOUR:36e5},E=10;function D(e){return e.map(e=>e.toJSON())}function O(e,t){let n=[],r=e.layer,i=`featureReduction`in r?r.featureReduction:null,a=i?.type===`binning`,o=i!=null&&`fields`in i?i.fields?.map(e=>e.name?.toLowerCase()).filter(Boolean):[];if(!a||!t)return n;for(let e of t)o.includes(e.toLowerCase())||n.push(e);return n}function k(e,t,n){let r=[];if(t)for(let i of t){let t=e.getField(i);t&&n&&`availableFields`in n&&!n.availableFields?.includes(t.name)&&r.push(t.name)}return r}function A(e,t){let n=e&&e.features;if(n?.length===0)return{avg:null,count:0,max:null,median:null,min:null,nullcount:0,stddev:null,sum:null,variance:null};let r=n?.[0]?.attributes,i={};for(let e in r)i[e.replace(C,``).toLowerCase()]=r[e];return i.totalcount!=null&&i.totalcount>=i.count&&(i.nullcount=i.totalcount-i.count),delete i.totalcount,i.min===i.max&&i.min!=null&&i.stddev==null&&(i.stddev=i.variance=0),t&&([`min`,`max`,`avg`,`stddev`,`sum`,`variance`].forEach(e=>{i[e]!=null&&(i[e]=Math.ceil(i[e]))}),i.min===i.max&&i.min!=null&&(i.avg=i.min,i.stddev=i.variance=0)),i}function j(e){let t=[],n=e.classBreaks,r=n[0].minValue,i=n[n.length-1].maxValue;return n.forEach(e=>{t.push([e.minValue,e.maxValue])}),{min:r,max:i,intervals:t,sqlExpr:M({field:e.field,normalizationType:e.normalizationType,normalizationField:e.normalizationField,normalizationTotal:e.normalizationTotal,layer:e.layer}),excludeZerosExpr:e.where,normTotal:e.normalizationTotal}}function M(e){let{field:t,normalizationType:n,normalizationField:r,normalizationTotal:i,layer:a}=e,o=h(a,t),s=t;return n===`percent-of-total`?s=`((${o?v(t):t} / ${i}) * 100)`:n===`log`?s=`(log(${t}) * ${w})`:n===`field`?s=`(${o?v(t):t} / ${r})`:n===`natural-log`?s=`(log(${o?v(t):t}))`:n===`square-root`&&(s=`(power(${o?v(t):t}, 0.5))`),s}function N(e,t){let n;if(t=t.toLowerCase(),e){for(let r in e)if(r.toLowerCase()!==t){n=e[r];break}}return n}function P(e,t){let n;if(t=t.toLowerCase(),e){for(let r in e)if(r.toLowerCase()===t){n=e[r];break}}return n}function F(e,t,n,r,i){let a={},o=`countOFExpr`;e&&e.features&&e.features.forEach(e=>{let t=e.attributes,n=N(t,o),r=P(t,o);n!=null&&r!=null&&n!==0&&(a[n]=r)});let s=[];return x(t,n,r).forEach((e,t)=>{let n=(t+1).toString();s.push({minValue:e[0],maxValue:e[1],count:a.hasOwnProperty(n)?a[n]:0})}),{bins:s,minValue:t,maxValue:n,normalizationTotal:i}}async function I(e,n){let r=e&&e.features,{field:i,field2:a,field3:o,fieldDelimiter:s,filter:c,layer:l,view:u,signal:d,labels:f}=n,p=`countOF${i&&a?`Expr`:i||`Expr`}`,m={},h=!1;for(let e of r){let t=e.attributes,n=P(t,p),r=i?P(t,i):N(t,p),c=a?P(t,a):null,l=o?P(t,o):null;r===null&&n===0&&(h=!0),(r==null||typeof r==`string`&&r.trim()===``)&&(r=null),a&&(c==null||typeof c==`string`&&c.trim()===``)&&(c=null),o&&(l==null||typeof l==`string`&&l.trim()===``)&&(l=null);let u=r;a&&(u=`${S(u)}${s}${S(c)}`,o&&(u=`${u}${s}${S(l)}`)),m[u]==null?m[u]={count:n,data:u}:m[u].count=m[u].count+n}if(i&&h){let e=i+` is NULL`;try{let t=await l.queryFeatureCount({whereClause:e,filter:c,view:u,signal:d});return m.null.count=m.null.count+t,L(m,f)}catch{return t(d),L(m,f)}}return L(m,f)}function L(e,t){if(t)for(let n in e)e[n].label=t[n];return{count:e}}async function R(e,t,i){let a=e?i.getField(e):null,o=a?i.getFieldDomain(a.name):null;if(o)return o;let{uniqueValueInfos:s}=await i.uniqueValues({field:e,sqlWhere:t.sqlWhere,features:t.features,useFeaturesInView:t.useFeaturesInView,view:t.view,signal:t.signal}),c=s.map(e=>new n({code:e.value}));return new r({codedValues:c})}async function z(e,t){if(!e.returnAllCodedValues)return[];let{field:n,field2:r,field3:i}=e;if(n&&!r){let e=n?t.getField(n):null,r=e?t.getFieldDomain(e.name):null;return r?[r]:[]}let a=[];return n&&(a.push(R(n,e,t)),r&&(a.push(R(r,e,t)),i&&a.push(R(i,e,t)))),Promise.all(a)}function B(e,t){return _(e,new Date(0),t,`milliseconds`).sqlExpression}function V(e,t){return`EXTRACT(${t} FROM ${e}) * ${T[t]}`}function H(e){return e?v([`HOUR`,`MINUTE`,`SECOND`].map(t=>`(${V(e,t)})`).join(` + `)):null}function U(e){return{viewingMode:e.type===`2d`?`map`:e.viewingMode,scale:e.scale,spatialReference:e.spatialReference?.toJSON()}}function W(e,t){let n=new Set(e.map(e=>e.value)),r=t.filter(e=>!n.has(e));for(let t of r)e.push({value:t,count:0});e.sort((e,n)=>t.indexOf(e.value)-t.indexOf(n.value));for(let t of e)t.value===d&&(t.value=null);return{predominantCategoryInfos:e}}function G(t){let n=`featureReduction`in t?t.featureReduction:null;return((n!=null&&`fields`in n?n.fields:null)??[]).map(e=>{let n=a(e,t.fieldsIndex);return n?new i({type:n,name:e.name,alias:e.alias}):null}).filter(e)}function K(e,t){return g(t)?B(e,t?.name):s(t)?H(t?.name):null}function q(e,t,n){let r=null;for(let i of n){let n=i?e.getField(i):null,a=Y(e,{...t,field:i,outStatisticTypes:{include:[`min`,`max`,`sum`,`count`]}},n,!0,!0);r?r.outStatistics=r.outStatistics.concat(a.outStatistics):r=a}return r.where=e.createQuery()?.where,r}function J(e,t,n,r){return t.map(t=>{let i=new l,a=null,o=null,s=`${t}_value${r?`_${r}`:``}`;if(t===`variance`)a=`var`,o=n;else if(t===`nullcount`){let t=e.objectIdField;a=`count`,o=t&&e.getField(t)?t:`1`,s=`totalcount_value`}else t===`median`?(a=`percentile-continuous`,o=n,i.statisticParameters={value:.5}):(a=t,o=n);return i.statisticType=a,i.onStatisticField=o,i.outStatisticFieldName=s,i})}function Y(e,t,n,r=!0,i=!1){let{field:a,normalizationType:s,normalizationField:c,normalizationTotal:l,minValue:u,maxValue:d,filter:h}=t,g=e.supportsSQLExpression?K(e,n)||t.sqlExpression:null,_=M({field:a,normalizationType:s,normalizationField:c,normalizationTotal:l,layer:e}),v=g||_,x=v?f(v,u,d):null,S=p({field:a,normalizationField:c,normalizationType:s}),C=m(t.sqlWhere,S),w=m(C,x),T=y({normalizationField:c,normalizationType:s,sqlExpression:g,supportsSQLExpression:e.supportsSQLExpression,minValue:u,maxValue:d}),E=o(e.getField(a??void 0)),{include:D,exclude:O}=t.outStatisticTypes||{},k=b.filter(e=>(!D||D.includes(e))&&(!O||!O.includes(e))&&(e===`nullcount`?T:!E||e===`count`)&&(e!==`median`||r)),A=e.createQuery();return A.where=m(A.where,w),A.sqlFormat=g?`standard`:null,A.outStatistics=J(e,k,v,i?a:void 0),Z(A,h),A}function X(e,t,n=!0){let{fields:r,filter:i}=t,{include:a,exclude:o}=t.outStatisticTypes||{},s=b.filter(e=>(!a||a.includes(e))&&(!o||!o.includes(e))&&(e!==`median`||n)),l=new c;l.where=m(e.createQuery()?.where,t.sqlWhere)??void 0;let d=`new_value`;return l.outPivots=[new u({sourceFields:r,valueFieldName:d})],l.outStatistics=J(e,s,d),Z(l,i),l}function Z(e,t){t&&(e.geometry=t.geometry,e.spatialRelationship=t.spatialRelationship,e.timeExtent=e.timeExtent?.intersection(t.timeExtent)??t.timeExtent,e.distance=t.distance,e.units=t.units)}function Q(e,t){let{field:n,field2:r,field3:i,sqlExpression:a}=t,o=!!(n&&r),s=e.createQuery();return s.where=m(s.where,t.sqlWhere),s.sqlFormat=a?`standard`:null,s.outStatistics=[$(o?null:n,o?`1`:a)].filter(Boolean),s.groupByFieldsForStatistics=[n||a,r,i].filter(Boolean),Z(s,t.filter),s}function $(e,t){let n=`countOF`+(e||`Expr`),r=new l;return r.statisticType=`count`,r.onStatisticField=t?`1`:e,r.outStatisticFieldName=n,r}function ee(e,t,n,r=10,i,a,o){let{min:s,max:c,normTotal:l,excludeZerosExpr:u}=t,d=t.intervals||x(s,c,r);return te(e,d,t.sqlExpr||n,u,i,a,o).then(e=>({bins:e.map((e,t)=>({minValue:d[t][0],maxValue:d[t][1],count:e.status===`fulfilled`?e.value:0})),minValue:s,maxValue:c,normalizationTotal:l}))}function te(e,t,n,r,i,a,o){let s=[],c=t.length;for(let e=0;e<c;e++){let i=m(r,m(n+` >= `+t[e][0],t[e][1]===null?``:n+(e===c-1?` <= `:` < `)+t[e][1]));s.push(i)}return Promise.allSettled(s.map(t=>e.queryFeatureCount({whereClause:t,view:i,filter:a,signal:o})))}export{E as defaultNumBins,D as ensureFeaturesJSON,j as generateBinParams,ee as getBins,z as getDomainsForFields,G as getFeatureReductionFields,M as getFieldExpr,F as getHistogramFromFeatureSet,k as getMissingFields,O as getMissingFieldsForBinning,W as getPredominantCategoriesFromUVInfos,K as getSQLExpressionForDateOrTimeField,A as getSummaryStatisticsFromFeatureSet,X as getSummaryStatsPivotQuery,Y as getSummaryStatsQuery,q as getSummaryStatsQueryForFields,Q as getUVQuery,I as getUniqueValuesFromFeatureSet,U as getViewInfoParams,H as msForTimeOnlyFieldSQL,B as msSinceUnixEpochSQL,Z as updateQueryWithFeatureFilter};
@@ -87,7 +87,7 @@ export default class TimeExtent extends JSONSupport {
87
87
  * @param unit - The time unit to align the start and end dates.
88
88
  * @param timeZone - The time zone in which progressing will occur. The default is "system".
89
89
  * @returns A new expanded TimeExtent.
90
- * @see [Sample - Time Slider component](https://developers.arcgis.com/javascript/latest/sample-code/timeslider/)
90
+ * @see [Sample - Time Bar component](https://developers.arcgis.com/javascript/latest/sample-code/time-bar/)
91
91
  * @example
92
92
  * // Expand a time extent to a decade.
93
93
  * const extent = new TimeExtent({
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../../analysis/LengthDimension.js";import n from"../../../../core/Accessor.js";import r from"../../../../core/Handles.js";import{destroyHandle as i,handlesGroup as a}from"../../../../core/handleUtils.js";import"../../../../core/has.js";import{equals as o}from"../../../../core/lang.js";import{mapCollection as s}from"../../../../core/mapCollectionUtils.js";import{releaseMaybe as c,destroyMaybe as l}from"../../../../core/maybe.js";import{memoize as u}from"../../../../core/memoize.js";import{ignoreAbortErrors as d}from"../../../../core/promiseUtils.js";import{initial as f,watch as p,sync as m,syncAndInitial as h,when as g}from"../../../../core/reactiveUtils.js";import{property as _,subclass as v}from"../../../../core/accessorSupport/decorators.js";import{create as y}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{UpdatingHandles as b}from"../../../../core/support/UpdatingHandles.js";import x from"../../../../geometry/Point.js";import{clonePoint as S}from"../../../../layers/graphics/hydratedFeatures.js";import{reapplyConstraint as C,applyConstraint as ee,computeConstraint as te,constraintDependencies as ne}from"./lengthDimensionConstraintUtils.js";import{LengthDimensionManipulators as re,LengthDimensionPointManipulator as w,pointManipulatorHandles as T,createOffsetManipulator as E,offsetManipulatorHandles as D,LineOfSightOrientationManipulator as O,headingManipulatorHandles as k,rotationManipulatorHandles as A,createMeasureTypeManipulator as j,measureTypeManipulatorHandles as M,updateOffsetManipulatorTransform as N,updateHeadingManipulatorTransform as P,updateRotationManipulatorTransform as F,updateMeasureTypeManipulatorTransform as I,unfocusedOffsetWidth as L,focusedOffsetWidth as R}from"./lengthDimensionManipulatorUtils.js";import{isValidComputation as z,arePointsVerticallyAligned as B,computationToGeometryDependencies as V,computeGeometryFromDimension as H}from"./lengthDimensionUtils.js";import{disabledPointColor as U,pointRadius as ie,getTransparentAccentColor as W,getContrastColor as G,initialOffsetPx as K}from"./settings.js";import{getRotateHeadingTexture as q}from"../images/Factory.js";import{SnappingVisualizer3D as J}from"../../interactive/SnappingVisualizer3D.js";import{LineVisualElement as Y}from"../../interactive/visualElements/LineVisualElement.js";import{VerticesVisualElement as ae}from"../../interactive/visualElements/VerticesVisualElement.js";import{Parameters as oe,ImageMaterial as se}from"../../webgl-engine/materials/ImageMaterial.js";import{createStipplePatternSimple as X}from"../../webgl-engine/materials/lineStippleUtils.js";import{RibbonLineMaterial as ce}from"../../webgl-engine/materials/RibbonLineMaterial.js";import{createCoordinateHelper as Z}from"../../../interactive/coordinateHelper.js";import{EditGeometry as le}from"../../../interactive/editGeometry/EditGeometry.js";import{EditGeometryOperations as ue}from"../../../interactive/editGeometry/EditGeometryOperations.js";import{SnappingContext as de}from"../../../interactive/snapping/SnappingContext.js";import{createSnapDragEventPipelineStep as fe}from"../../../interactive/snapping/SnappingDragPipelineStep.js";import{acquire as pe}from"../../../interactive/snapping/SnappingManagerPool.js";import{SnappingOperation as me}from"../../../interactive/snapping/SnappingOperation.js";import{setupSnappingToggleHandles as he}from"../../../interactive/snapping/snappingUtils.js";let Q=class extends n{constructor(e){super(e),this._stagedDimension=null,this._snappingManagerResult=null,this._computationManipulators=new Map,this._computationHandles=new r,this._updatingHandles=new b,this._getSnappingContext=u(e=>new de({elevationInfo:{mode:`absolute-height`,offset:0},pointer:e,editGeometryOperations:new ue(new le(`point`,Z(!0,!1,this.view.spatialReference)),this.view.state.viewingMode),visualizer:new J}));let{view:t}=e;this._unfocusedOffsetManipulatorMaterial=this._createOffsetManipulatorMaterial(t),this._focusedOffsetManipulatorMaterial=this._createOffsetManipulatorMaterial(t),this._thinOffsetManipulatorMaterial=this._createOffsetManipulatorMaterial(t),this._thinOffsetManipulatorMaterial.setParameters({stipplePattern:X(2)}),this._constraintSnappingIndicator=new Y({view:t,attached:!0,width:1,renderOccluded:4,stipplePattern:X(5),isDecoration:!0});let n=U.toUnitRGBA();this._stagedStartIndicator=new ae({view:t,attached:!1,elevationInfo:{mode:`absolute-height`,offset:0},spatialReference:e.view.renderCoordsHelper.spatialReference,color:n,size:ie*2,outlineSize:0,renderOccluded:4,isDecoration:!0})}initialize(){let{view:e}=this;this._snappingOperation=new me({view:e});let t=W(e.effectiveTheme),n=G(e.effectiveTheme),r=!e.stage?.renderView.renderingContext.driverTest.svgPremultipliesAlpha.result;this._textureHandle=q(e.stage.textures,{accentColor:t,contrastColor:n,preMultiplyAlpha:r});let a=new oe(this._textureHandle.managedTexture,!1);a.renderOccluded=16,a.isDecoration=!0,this._orientationManipulatorMaterial=new se(a);let o=s(()=>this.analysisViewData.computations,({computation:e})=>this._createManipulators(e));this.addHandles([this._updatingHandles.add(()=>({accentColor:W(e.effectiveTheme),contrastColor:G(e.effectiveTheme)}),({accentColor:t,contrastColor:n})=>{let i=this._textureHandle;this._textureHandle=q(e.stage.textures,{accentColor:t,contrastColor:n,preMultiplyAlpha:r}),this._orientationManipulatorMaterial.setParameters({managedTexture:this._textureHandle.managedTexture}),i?.release();let a=t.toUnitRGBA();this._unfocusedOffsetManipulatorMaterial.setParameters({color:a}),this._focusedOffsetManipulatorMaterial.setParameters({color:a}),this._thinOffsetManipulatorMaterial.setParameters({color:a}),this._constraintSnappingIndicator.color=a},f),i(o),p(()=>({stagedPoint:this._snappingOperation.stagedPoint,stagedComputation:this._stagedComputation}),({stagedPoint:e,stagedComputation:t})=>{if(t==null||e==null)return;let n=S(e,new x);this._applyPointUpdate(t,{endPoint:n})},m),p(()=>({stagedDimension:this._stagedDimension,selectedComputation:this.analysisViewData.selectedComputation,firstGrabbedManipulator:this.firstGrabbedManipulator}),(e,t)=>{let{stagedDimension:n,selectedComputation:r,firstGrabbedManipulator:i}=e;if(n!==t?.stagedDimension||i!==t?.firstGrabbedManipulator)for(let[t,n]of this._computationManipulators)this._updateManipulators(t,n,e);else for(let n of[r,t?.selectedComputation])if(n!=null){let t=this._computationManipulators.get(n);t!=null&&this._updateManipulators(n,t,e)}},h),this._updatingHandles.add(()=>this.analysis.style.lineSize,e=>this._updateManipulatorStyle(e),f),this._updatingHandles.add(()=>this.view.state.camera,()=>{this._stagedComputation!=null&&this._updateStagedDimensionOffset(this._stagedComputation)}),this._updatingHandles.add(()=>{let e=this._stagedComputation;if(!e)return null;let t=e.elevationAlignedStartPoint,n=y();return t!=null&&this.view.renderCoordsHelper.toRenderCoords(t,n)?n:null},e=>{e==null?this._stagedStartIndicator.attached=!1:(this._stagedStartIndicator.vertices=[e],this._stagedStartIndicator.attached=!0)})]),this.addHandles(this._constraintHandles),this.addHandles(this._snappingIndicatorHandles),he(this,()=>{let e=this._activeComputation,t=this._stagedComputation;if(e==null||t!=null){let e=this.view.inputManager.latestPointerInfo?.type??`mouse`,t=this._getSnappingContext(e);this._updatingHandles.consumePromise(d(this._snappingOperation.snapAgainNearPreviousMapPoint(this._ensureSnappingManager(),t)))}if(e!=null){let{start:t,end:n}=this._computationManipulators.get(e);if(t.grabbing||n.grabbing){let n=t.grabbing?`start`:`end`,r=this._computeConstraint(e);C(e,n,{constraint:r,view:this.view})}}})}destroy(){this._textureHandle=c(this._textureHandle),this._snappingOperation=l(this._snappingOperation),this._computationHandles.destroy(),this._constraintSnappingIndicator.destroy(),this._stagedStartIndicator.destroy()}get updating(){return this._updatingHandles.updating||!!this._snappingManager?.updating}get firstGrabbedManipulator(){return this.parentTool.firstGrabbedManipulator}get hasGrabbedManipulators(){return this.parentTool.hasGrabbedManipulators}get snappingOptions(){return this._snappingManager?.options}get _snappingManager(){return this._snappingManagerResult?.snappingManager}_ensureSnappingManager(){return this._snappingManagerResult||(this._snappingManagerResult=pe(this.view),this.addHandles(this._snappingManagerResult)),this._snappingManagerResult.snappingManager}get _activeComputation(){if(this._stagedComputation!=null)return this._stagedComputation;let{selectedComputation:e}=this.analysisViewData;return this.hasGrabbedManipulators&&e!=null?e:null}get _stagedComputation(){let e=this._stagedDimension,t=this.analysisViewData.computations.at(-1)?.computation;return e==null||t==null||t.dimension!==e?null:t}get _constraintHandles(){return[g(()=>this.analysisViewData.selectedComputation,e=>{e.previousConstraint=this._computeConstraint(e)},{...h,equals:o}),p(()=>{let e=this._activeComputation;if(e==null)return null;let{measureType:t,orientation:n}=e.dimension;return{measureType:t,orientation:n,computation:e}},(e,t)=>{if(e!=null&&t==null){let{measureType:t,orientation:n,computation:r}=e;switch(r.previousConstraint){case 0:r.preConstraintProperties={measureType:`horizontal`,orientation:0};break;case 1:r.preConstraintProperties={measureType:`vertical`,orientation:0};break;case 2:r.preConstraintProperties={measureType:`direct`,orientation:n};break;default:r.preConstraintProperties={measureType:t,orientation:n}}}e==null&&t!=null&&(t.computation.preConstraintProperties=null)},m)]}get _snappingIndicatorHandles(){let e=`snapping-indicator-event-handles`;return[this._updatingHandles.add(()=>({stagedComputation:this._stagedComputation,activeComputation:this._activeComputation}),({stagedComputation:t,activeComputation:n})=>{let r=this._constraintSnappingIndicator;if(this.removeHandles(e),n==null)r.attached=!1;else if(n===t)r.attached=!0;else{let{start:t,end:i}=this._computationManipulators.get(n),a=()=>{r.attached=t.grabbing||i.grabbing};a(),this.addHandles([t.events.on(`grab-changed`,a),i.events.on(`grab-changed`,a)],e)}}),this._updatingHandles.add(()=>{let e=this._activeComputation;return e==null?{}:{geometry:e.geometry,constraint:e.previousConstraint}},({geometry:e,constraint:t})=>{let n=this._constraintSnappingIndicator;e!=null&&t!=null&&t!==2?(n.visible=!0,n.setGeometryFromSegment(e.directSegment)):n.visible=!1})]}removeStaged(){return this._stagedDimension!=null&&(this.analysis.dimensions.remove(this._stagedDimension),this._stagedDimension=null,!0)}onDeactivate(){this.removeStaged(),this._resetSnappingState()}onClick(e){let{_stagedDimension:t}=this;if(t==null){let t=this._onUnstagedClick(e);return this.analysis.dimensions.add(t),null}return this._onStagedClick(e),t}onPointerMove({mapPoint:e,pointerType:t}){if(t===`touch`)return;let n=this._getSnappingContext(t);this._updatingHandles.consumePromise(d(this._snappingOperation.snap({point:e},this._ensureSnappingManager(),n)))}onManipulatorSelectionChanged(){this.analysisViewData.selectedComputation!=null&&(this._computationManipulators.get(this.analysisViewData.selectedComputation).offset.selected||(this.analysisViewData.selectedDimension=null))}_onUnstagedClick({mapPoint:e,pointerType:n}){let r=e;if(n===`mouse`){let t=this._getSnappingContext(n);r=this._ensureSnappingManager().update({point:e,context:t})}let i=new t({startPoint:S(r,new x),endPoint:null,measureType:`horizontal`});return this._stagedDimension=i,this._resetSnappingState(),i}_onStagedClick({mapPoint:e,pointerType:t}){let n=this._stagedComputation;if(n==null)return;let r=e;if(t===`mouse`){let n=this._getSnappingContext(t);r=this._ensureSnappingManager().update({point:e,context:n})}let i=S(r,new x);this._applyPointUpdate(n,{endPoint:i}),this._stagedDimension=null,this._resetSnappingState()}_resetSnappingState(){this._ensureSnappingManager().doneSnapping(),this._snappingOperation.abort(),this._snappingOperation.stagedPoint=null}_createManipulators(e){let t=this._setupPointManipulator(e,{isStart:!0}),n=this._setupPointManipulator(e,{isStart:!1}),r=this._setupOffsetManipulator(e),i=this._setupHeadingManipulator(e),o=this._setupRotationManipulator(e),s=this._setupMeasureTypeManipulator(e,`direct`),c=this._setupMeasureTypeManipulator(e,`horizontal`),l=this._setupMeasureTypeManipulator(e,`vertical`),u=new re({start:t,end:n,offset:r,heading:i,rotation:o,direct:s,horizontal:c,vertical:l});this._setupComputationToManipulatorsSync(e,u),this._computationManipulators.set(e,u),this.manipulators.addMany(u.values());let d=a(u.values().map(e=>e.events.on(`focus-changed`,()=>{u.values().some(e=>e.focused)&&this._resetSnappingState()})));return{manipulators:u,remove:()=>{d.remove(),this._computationHandles.remove(e),this._computationManipulators.delete(e);for(let e of u.values())this.manipulators.remove(e)}}}_setupComputationToManipulatorsSync(e,t){this._computationHandles.add([p(()=>e.geometry,()=>this._updateManipulators(e,t),{...h,equals:o})],e)}_setupPointManipulator(e,t){let{view:n}=this,{dimension:r}=e,i=new w(n,{metadata:r}),a=T(i,{isStart:t.isStart,createSnappingPipelineStep:e=>fe({snappingContext:this._getSnappingContext(e),snappingManager:this._snappingManager,updatingHandles:this._updatingHandles}),dimension:r,onUpdate:t=>this._applyPointUpdate(e,t),view:n});return this._computationHandles.add(a,e),i}_setupOffsetManipulator(e){let{view:t}=this,n=E(t,{lineSizePt:this.analysis.style.lineSize,unfocusedMaterial:this._unfocusedOffsetManipulatorMaterial,focusedMaterial:this._focusedOffsetManipulatorMaterial,metadata:e.dimension}),r=D(n,{computation:e,view:t});return this._computationHandles.add(r,e),n}_setupHeadingManipulator(e){let{view:t}=this,n=new O(t,{lineSizePt:this.analysis.style.lineSize,material:this._orientationManipulatorMaterial,metadata:e.dimension}),r=k(n,{computation:e,view:t});return this._computationHandles.add(r,e),n}_setupRotationManipulator(e){let{view:t}=this,n=new O(t,{lineSizePt:this.analysis.style.lineSize,material:this._orientationManipulatorMaterial,metadata:e.dimension}),r=A(n,{computation:e,view:t});return this._computationHandles.add(r,e),n}_setupMeasureTypeManipulator(e,t){let{view:n}=this,r=j(n,{lineSizePt:this.analysis.style.lineSize,unfocusedMaterial:this._unfocusedOffsetManipulatorMaterial,focusedMaterial:this._focusedOffsetManipulatorMaterial,thinOffsetManipulatorMaterial:this._thinOffsetManipulatorMaterial,metadata:e.dimension}),i=M(r,{computation:e,manipulatorMeasureType:t,view:n});return this._computationHandles.add(i,e),r}_updateManipulators(e,t,n={stagedDimension:this._stagedDimension,selectedComputation:this.analysisViewData.selectedComputation,firstGrabbedManipulator:this.firstGrabbedManipulator}){let{stagedDimension:r,selectedComputation:i,firstGrabbedManipulator:a}=n,{start:o,end:s,offset:c,heading:l,rotation:u}=t,d=i===e,f=z(e),{dimension:p}=e;for(let e of t.values()){let t=f&&r==null&&(a==null||e===a);e===c?(e.available=t,e.selected=d):e.available=t&&d}if(!f)return;this._computeConstraint(e)==null?t.manipulatorForMeasureType(p.measureType).available=!1:t.forEachMeasureTypeManipulator(e=>e.available=!1);for(let e of[l,u])(p.measureType!==`direct`||p.offset===0)&&(e.available=!1);B(e)?u.available=!1:l.available=!1;let{geometry:m}=e;o.renderLocation=m.directSegment.startRenderSpace,s.renderLocation=m.directSegment.endRenderSpace;let{renderCoordsHelper:h}=this.view;N(c,m,h),l.available&&P(l,e,h),u.available&&F(u,e,h),t.forEachMeasureTypeManipulator((t,n)=>{t.available&&I(t,e,n,h)})}_updateManipulatorStyle(e){let t=L(e),n=R(e),r={lineSizePt:e,material:this._orientationManipulatorMaterial};for(let{offset:e,heading:t,rotation:i}of this._computationManipulators.values())e.radius=n/2,t.update(r),i.update(r);this._unfocusedOffsetManipulatorMaterial.setParameters({width:t}),this._focusedOffsetManipulatorMaterial.setParameters({width:n})}_applyPointUpdate(e,t){let{view:n}=this,r=V(e);`startPoint`in t&&(r.elevationAlignedStartPoint=t.startPoint),`endPoint`in t&&(r.elevationAlignedEndPoint=t.endPoint);let i=H(r,n.renderCoordsHelper);if(i==null)return;let a=this._computeConstraint({...r,geometry:i});ee(e,t,{...r,constraint:a,unconstrainedGeometry:i,view:n}),e===this._stagedComputation&&this._updateStagedDimensionOffset(e)}_updateStagedDimensionOffset(e){if(e.geometry==null)return;e.geometry.directSegment.eval(.5,$);let{state:t,renderCoordsHelper:n}=this.view,r=t.camera.computeScreenPixelSizeAt($);e.dimension.offset=K*r*n.unitInMeters}_computeConstraint(e){return te(ne(e,this._ensureSnappingManager().options),this.view)}_createOffsetManipulatorMaterial(e){return new ce({width:1,renderOccluded:4,writeDepth:!1,polygonOffset:3,isDecoration:!0},e.state.isGlobal)}get test(){}};e([_({constructOnly:!0})],Q.prototype,`analysis`,void 0),e([_({constructOnly:!0})],Q.prototype,`analysisViewData`,void 0),e([_({constructOnly:!0})],Q.prototype,`manipulators`,void 0),e([_({constructOnly:!0})],Q.prototype,`parentTool`,void 0),e([_({constructOnly:!0,nonNullable:!0})],Q.prototype,`view`,void 0),e([_({readOnly:!0})],Q.prototype,`updating`,null),e([_()],Q.prototype,`firstGrabbedManipulator`,null),e([_()],Q.prototype,`hasGrabbedManipulators`,null),e([_()],Q.prototype,`snappingOptions`,null),e([_()],Q.prototype,`_stagedDimension`,void 0),e([_()],Q.prototype,`_snappingManager`,null),e([_()],Q.prototype,`_activeComputation`,null),e([_()],Q.prototype,`_stagedComputation`,null),e([_()],Q.prototype,`_snappingManagerResult`,void 0),Q=e([v(`esri.views.3d.analysis.Dimension.LengthDimensionSubTool`)],Q);const $=y();export{Q as LengthDimensionSubTool};
2
+ import{__decorate as e}from"tslib";import t from"../../../../analysis/LengthDimension.js";import n from"../../../../core/Accessor.js";import r from"../../../../core/Handles.js";import{destroyHandle as i,handlesGroup as a}from"../../../../core/handleUtils.js";import"../../../../core/has.js";import{equals as o}from"../../../../core/lang.js";import{mapCollection as s}from"../../../../core/mapCollectionUtils.js";import{releaseMaybe as c,destroyMaybe as l}from"../../../../core/maybe.js";import{memoize as u}from"../../../../core/memoize.js";import{ignoreAbortErrors as d}from"../../../../core/promiseUtils.js";import{initial as f,watch as p,sync as m,syncAndInitial as h,when as g}from"../../../../core/reactiveUtils.js";import{property as _,subclass as v}from"../../../../core/accessorSupport/decorators.js";import{create as y}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{UpdatingHandles as b}from"../../../../core/support/UpdatingHandles.js";import x from"../../../../geometry/Point.js";import{clonePoint as S}from"../../../../layers/graphics/hydratedFeatures.js";import{reapplyConstraint as C,applyConstraint as ee,computeConstraint as te,constraintDependencies as ne}from"./lengthDimensionConstraintUtils.js";import{LengthDimensionManipulators as re,LengthDimensionPointManipulator as w,pointManipulatorHandles as T,createOffsetManipulator as E,offsetManipulatorHandles as D,LineOfSightOrientationManipulator as O,headingManipulatorHandles as k,rotationManipulatorHandles as A,createMeasureTypeManipulator as j,measureTypeManipulatorHandles as M,updateOffsetManipulatorTransform as N,updateHeadingManipulatorTransform as P,updateRotationManipulatorTransform as F,updateMeasureTypeManipulatorTransform as I,unfocusedOffsetWidth as L,focusedOffsetWidth as R}from"./lengthDimensionManipulatorUtils.js";import{isValidComputation as z,arePointsVerticallyAligned as B,computationToGeometryDependencies as V,computeGeometryFromDimension as H}from"./lengthDimensionUtils.js";import{disabledPointColor as U,pointRadius as ie,getTransparentAccentColor as W,getContrastColor as G,initialOffsetPx as K}from"./settings.js";import{getRotateHeadingTexture as q}from"../images/Factory.js";import{SnappingVisualizer3D as J}from"../../interactive/SnappingVisualizer3D.js";import{LineVisualElement as Y}from"../../interactive/visualElements/LineVisualElement.js";import{VerticesVisualElement as ae}from"../../interactive/visualElements/VerticesVisualElement.js";import{Parameters as oe,ImageMaterial as se}from"../../webgl-engine/materials/ImageMaterial.js";import{createStipplePatternSimple as X}from"../../webgl-engine/materials/lineStippleUtils.js";import{RibbonLineMaterial as ce}from"../../webgl-engine/materials/RibbonLineMaterial.js";import{createCoordinateHelper as Z}from"../../../interactive/coordinateHelper.js";import{EditGeometry as le}from"../../../interactive/editGeometry/EditGeometry.js";import{EditGeometryOperations as ue}from"../../../interactive/editGeometry/EditGeometryOperations.js";import{SnappingContext as de}from"../../../interactive/snapping/SnappingContext.js";import{createSnapDragEventPipelineStep as fe}from"../../../interactive/snapping/SnappingDragPipelineStep.js";import{acquireForFeaturePlacement as pe}from"../../../interactive/snapping/SnappingManagerPool.js";import{SnappingOperation as me}from"../../../interactive/snapping/SnappingOperation.js";import{setupSnappingToggleHandles as he}from"../../../interactive/snapping/snappingUtils.js";let Q=class extends n{constructor(e){super(e),this._stagedDimension=null,this._snappingManagerResult=null,this._computationManipulators=new Map,this._computationHandles=new r,this._updatingHandles=new b,this._getSnappingContext=u(e=>new de({elevationInfo:{mode:`absolute-height`,offset:0},pointer:e,editGeometryOperations:new ue(new le(`point`,Z(!0,!1,this.view.spatialReference)),this.view.state.viewingMode),visualizer:new J}));let{view:t}=e;this._unfocusedOffsetManipulatorMaterial=this._createOffsetManipulatorMaterial(t),this._focusedOffsetManipulatorMaterial=this._createOffsetManipulatorMaterial(t),this._thinOffsetManipulatorMaterial=this._createOffsetManipulatorMaterial(t),this._thinOffsetManipulatorMaterial.setParameters({stipplePattern:X(2)}),this._constraintSnappingIndicator=new Y({view:t,attached:!0,width:1,renderOccluded:4,stipplePattern:X(5),isDecoration:!0});let n=U.toUnitRGBA();this._stagedStartIndicator=new ae({view:t,attached:!1,elevationInfo:{mode:`absolute-height`,offset:0},spatialReference:e.view.renderCoordsHelper.spatialReference,color:n,size:ie*2,outlineSize:0,renderOccluded:4,isDecoration:!0})}initialize(){let{view:e}=this;this._snappingOperation=new me({view:e});let t=W(e.effectiveTheme),n=G(e.effectiveTheme),r=!e.stage?.renderView.renderingContext.driverTest.svgPremultipliesAlpha.result;this._textureHandle=q(e.stage.textures,{accentColor:t,contrastColor:n,preMultiplyAlpha:r});let a=new oe(this._textureHandle.managedTexture,!1);a.renderOccluded=16,a.isDecoration=!0,this._orientationManipulatorMaterial=new se(a);let o=s(()=>this.analysisViewData.computations,({computation:e})=>this._createManipulators(e));this.addHandles([this._updatingHandles.add(()=>({accentColor:W(e.effectiveTheme),contrastColor:G(e.effectiveTheme)}),({accentColor:t,contrastColor:n})=>{let i=this._textureHandle;this._textureHandle=q(e.stage.textures,{accentColor:t,contrastColor:n,preMultiplyAlpha:r}),this._orientationManipulatorMaterial.setParameters({managedTexture:this._textureHandle.managedTexture}),i?.release();let a=t.toUnitRGBA();this._unfocusedOffsetManipulatorMaterial.setParameters({color:a}),this._focusedOffsetManipulatorMaterial.setParameters({color:a}),this._thinOffsetManipulatorMaterial.setParameters({color:a}),this._constraintSnappingIndicator.color=a},f),i(o),p(()=>({stagedPoint:this._snappingOperation.stagedPoint,stagedComputation:this._stagedComputation}),({stagedPoint:e,stagedComputation:t})=>{if(t==null||e==null)return;let n=S(e,new x);this._applyPointUpdate(t,{endPoint:n})},m),p(()=>({stagedDimension:this._stagedDimension,selectedComputation:this.analysisViewData.selectedComputation,firstGrabbedManipulator:this.firstGrabbedManipulator}),(e,t)=>{let{stagedDimension:n,selectedComputation:r,firstGrabbedManipulator:i}=e;if(n!==t?.stagedDimension||i!==t?.firstGrabbedManipulator)for(let[t,n]of this._computationManipulators)this._updateManipulators(t,n,e);else for(let n of[r,t?.selectedComputation])if(n!=null){let t=this._computationManipulators.get(n);t!=null&&this._updateManipulators(n,t,e)}},h),this._updatingHandles.add(()=>this.analysis.style.lineSize,e=>this._updateManipulatorStyle(e),f),this._updatingHandles.add(()=>this.view.state.camera,()=>{this._stagedComputation!=null&&this._updateStagedDimensionOffset(this._stagedComputation)}),this._updatingHandles.add(()=>{let e=this._stagedComputation;if(!e)return null;let t=e.elevationAlignedStartPoint,n=y();return t!=null&&this.view.renderCoordsHelper.toRenderCoords(t,n)?n:null},e=>{e==null?this._stagedStartIndicator.attached=!1:(this._stagedStartIndicator.vertices=[e],this._stagedStartIndicator.attached=!0)})]),this.addHandles(this._constraintHandles),this.addHandles(this._snappingIndicatorHandles),he(this,()=>{let e=this._activeComputation,t=this._stagedComputation;if(e==null||t!=null){let e=this.view.inputManager.latestPointerInfo?.type??`mouse`,t=this._getSnappingContext(e);this._updatingHandles.consumePromise(d(this._snappingOperation.snapAgainNearPreviousMapPoint(this._ensureSnappingManager(),t)))}if(e!=null){let{start:t,end:n}=this._computationManipulators.get(e);if(t.grabbing||n.grabbing){let n=t.grabbing?`start`:`end`,r=this._computeConstraint(e);C(e,n,{constraint:r,view:this.view})}}})}destroy(){this._textureHandle=c(this._textureHandle),this._snappingOperation=l(this._snappingOperation),this._computationHandles.destroy(),this._constraintSnappingIndicator.destroy(),this._stagedStartIndicator.destroy()}get updating(){return this._updatingHandles.updating||!!this._snappingManager?.updating}get firstGrabbedManipulator(){return this.parentTool.firstGrabbedManipulator}get hasGrabbedManipulators(){return this.parentTool.hasGrabbedManipulators}get snappingOptions(){return this._snappingManager?.options}get _snappingManager(){return this._snappingManagerResult?.snappingManager}_ensureSnappingManager(){return this._snappingManagerResult||(this._snappingManagerResult=pe(this.view),this.addHandles(this._snappingManagerResult)),this._snappingManagerResult.snappingManager}get _activeComputation(){if(this._stagedComputation!=null)return this._stagedComputation;let{selectedComputation:e}=this.analysisViewData;return this.hasGrabbedManipulators&&e!=null?e:null}get _stagedComputation(){let e=this._stagedDimension,t=this.analysisViewData.computations.at(-1)?.computation;return e==null||t==null||t.dimension!==e?null:t}get _constraintHandles(){return[g(()=>this.analysisViewData.selectedComputation,e=>{e.previousConstraint=this._computeConstraint(e)},{...h,equals:o}),p(()=>{let e=this._activeComputation;if(e==null)return null;let{measureType:t,orientation:n}=e.dimension;return{measureType:t,orientation:n,computation:e}},(e,t)=>{if(e!=null&&t==null){let{measureType:t,orientation:n,computation:r}=e;switch(r.previousConstraint){case 0:r.preConstraintProperties={measureType:`horizontal`,orientation:0};break;case 1:r.preConstraintProperties={measureType:`vertical`,orientation:0};break;case 2:r.preConstraintProperties={measureType:`direct`,orientation:n};break;default:r.preConstraintProperties={measureType:t,orientation:n}}}e==null&&t!=null&&(t.computation.preConstraintProperties=null)},m)]}get _snappingIndicatorHandles(){let e=`snapping-indicator-event-handles`;return[this._updatingHandles.add(()=>({stagedComputation:this._stagedComputation,activeComputation:this._activeComputation}),({stagedComputation:t,activeComputation:n})=>{let r=this._constraintSnappingIndicator;if(this.removeHandles(e),n==null)r.attached=!1;else if(n===t)r.attached=!0;else{let{start:t,end:i}=this._computationManipulators.get(n),a=()=>{r.attached=t.grabbing||i.grabbing};a(),this.addHandles([t.events.on(`grab-changed`,a),i.events.on(`grab-changed`,a)],e)}}),this._updatingHandles.add(()=>{let e=this._activeComputation;return e==null?{}:{geometry:e.geometry,constraint:e.previousConstraint}},({geometry:e,constraint:t})=>{let n=this._constraintSnappingIndicator;e!=null&&t!=null&&t!==2?(n.visible=!0,n.setGeometryFromSegment(e.directSegment)):n.visible=!1})]}removeStaged(){return this._stagedDimension!=null&&(this.analysis.dimensions.remove(this._stagedDimension),this._stagedDimension=null,!0)}onDeactivate(){this.removeStaged(),this._resetSnappingState()}onClick(e){let{_stagedDimension:t}=this;if(t==null){let t=this._onUnstagedClick(e);return this.analysis.dimensions.add(t),null}return this._onStagedClick(e),t}onPointerMove({mapPoint:e,pointerType:t}){if(t===`touch`)return;let n=this._getSnappingContext(t);this._updatingHandles.consumePromise(d(this._snappingOperation.snap({point:e},this._ensureSnappingManager(),n)))}onManipulatorSelectionChanged(){this.analysisViewData.selectedComputation!=null&&(this._computationManipulators.get(this.analysisViewData.selectedComputation).offset.selected||(this.analysisViewData.selectedDimension=null))}_onUnstagedClick({mapPoint:e,pointerType:n}){let r=e;if(n===`mouse`){let t=this._getSnappingContext(n);r=this._ensureSnappingManager().update({point:e,context:t})}let i=new t({startPoint:S(r,new x),endPoint:null,measureType:`horizontal`});return this._stagedDimension=i,this._resetSnappingState(),i}_onStagedClick({mapPoint:e,pointerType:t}){let n=this._stagedComputation;if(n==null)return;let r=e;if(t===`mouse`){let n=this._getSnappingContext(t);r=this._ensureSnappingManager().update({point:e,context:n})}let i=S(r,new x);this._applyPointUpdate(n,{endPoint:i}),this._stagedDimension=null,this._resetSnappingState()}_resetSnappingState(){this._ensureSnappingManager().doneSnapping(),this._snappingOperation.abort(),this._snappingOperation.stagedPoint=null}_createManipulators(e){let t=this._setupPointManipulator(e,{isStart:!0}),n=this._setupPointManipulator(e,{isStart:!1}),r=this._setupOffsetManipulator(e),i=this._setupHeadingManipulator(e),o=this._setupRotationManipulator(e),s=this._setupMeasureTypeManipulator(e,`direct`),c=this._setupMeasureTypeManipulator(e,`horizontal`),l=this._setupMeasureTypeManipulator(e,`vertical`),u=new re({start:t,end:n,offset:r,heading:i,rotation:o,direct:s,horizontal:c,vertical:l});this._setupComputationToManipulatorsSync(e,u),this._computationManipulators.set(e,u),this.manipulators.addMany(u.values());let d=a(u.values().map(e=>e.events.on(`focus-changed`,()=>{u.values().some(e=>e.focused)&&this._resetSnappingState()})));return{manipulators:u,remove:()=>{d.remove(),this._computationHandles.remove(e),this._computationManipulators.delete(e);for(let e of u.values())this.manipulators.remove(e)}}}_setupComputationToManipulatorsSync(e,t){this._computationHandles.add([p(()=>e.geometry,()=>this._updateManipulators(e,t),{...h,equals:o})],e)}_setupPointManipulator(e,t){let{view:n}=this,{dimension:r}=e,i=new w(n,{metadata:r}),a=T(i,{isStart:t.isStart,createSnappingPipelineStep:e=>fe({snappingContext:this._getSnappingContext(e),snappingManager:this._snappingManager,updatingHandles:this._updatingHandles}),dimension:r,onUpdate:t=>this._applyPointUpdate(e,t),view:n});return this._computationHandles.add(a,e),i}_setupOffsetManipulator(e){let{view:t}=this,n=E(t,{lineSizePt:this.analysis.style.lineSize,unfocusedMaterial:this._unfocusedOffsetManipulatorMaterial,focusedMaterial:this._focusedOffsetManipulatorMaterial,metadata:e.dimension}),r=D(n,{computation:e,view:t});return this._computationHandles.add(r,e),n}_setupHeadingManipulator(e){let{view:t}=this,n=new O(t,{lineSizePt:this.analysis.style.lineSize,material:this._orientationManipulatorMaterial,metadata:e.dimension}),r=k(n,{computation:e,view:t});return this._computationHandles.add(r,e),n}_setupRotationManipulator(e){let{view:t}=this,n=new O(t,{lineSizePt:this.analysis.style.lineSize,material:this._orientationManipulatorMaterial,metadata:e.dimension}),r=A(n,{computation:e,view:t});return this._computationHandles.add(r,e),n}_setupMeasureTypeManipulator(e,t){let{view:n}=this,r=j(n,{lineSizePt:this.analysis.style.lineSize,unfocusedMaterial:this._unfocusedOffsetManipulatorMaterial,focusedMaterial:this._focusedOffsetManipulatorMaterial,thinOffsetManipulatorMaterial:this._thinOffsetManipulatorMaterial,metadata:e.dimension}),i=M(r,{computation:e,manipulatorMeasureType:t,view:n});return this._computationHandles.add(i,e),r}_updateManipulators(e,t,n={stagedDimension:this._stagedDimension,selectedComputation:this.analysisViewData.selectedComputation,firstGrabbedManipulator:this.firstGrabbedManipulator}){let{stagedDimension:r,selectedComputation:i,firstGrabbedManipulator:a}=n,{start:o,end:s,offset:c,heading:l,rotation:u}=t,d=i===e,f=z(e),{dimension:p}=e;for(let e of t.values()){let t=f&&r==null&&(a==null||e===a);e===c?(e.available=t,e.selected=d):e.available=t&&d}if(!f)return;this._computeConstraint(e)==null?t.manipulatorForMeasureType(p.measureType).available=!1:t.forEachMeasureTypeManipulator(e=>e.available=!1);for(let e of[l,u])(p.measureType!==`direct`||p.offset===0)&&(e.available=!1);B(e)?u.available=!1:l.available=!1;let{geometry:m}=e;o.renderLocation=m.directSegment.startRenderSpace,s.renderLocation=m.directSegment.endRenderSpace;let{renderCoordsHelper:h}=this.view;N(c,m,h),l.available&&P(l,e,h),u.available&&F(u,e,h),t.forEachMeasureTypeManipulator((t,n)=>{t.available&&I(t,e,n,h)})}_updateManipulatorStyle(e){let t=L(e),n=R(e),r={lineSizePt:e,material:this._orientationManipulatorMaterial};for(let{offset:e,heading:t,rotation:i}of this._computationManipulators.values())e.radius=n/2,t.update(r),i.update(r);this._unfocusedOffsetManipulatorMaterial.setParameters({width:t}),this._focusedOffsetManipulatorMaterial.setParameters({width:n})}_applyPointUpdate(e,t){let{view:n}=this,r=V(e);`startPoint`in t&&(r.elevationAlignedStartPoint=t.startPoint),`endPoint`in t&&(r.elevationAlignedEndPoint=t.endPoint);let i=H(r,n.renderCoordsHelper);if(i==null)return;let a=this._computeConstraint({...r,geometry:i});ee(e,t,{...r,constraint:a,unconstrainedGeometry:i,view:n}),e===this._stagedComputation&&this._updateStagedDimensionOffset(e)}_updateStagedDimensionOffset(e){if(e.geometry==null)return;e.geometry.directSegment.eval(.5,$);let{state:t,renderCoordsHelper:n}=this.view,r=t.camera.computeScreenPixelSizeAt($);e.dimension.offset=K*r*n.unitInMeters}_computeConstraint(e){return te(ne(e,this._ensureSnappingManager().options),this.view)}_createOffsetManipulatorMaterial(e){return new ce({width:1,renderOccluded:4,writeDepth:!1,polygonOffset:3,isDecoration:!0},e.state.isGlobal)}get test(){}};e([_({constructOnly:!0})],Q.prototype,`analysis`,void 0),e([_({constructOnly:!0})],Q.prototype,`analysisViewData`,void 0),e([_({constructOnly:!0})],Q.prototype,`manipulators`,void 0),e([_({constructOnly:!0})],Q.prototype,`parentTool`,void 0),e([_({constructOnly:!0,nonNullable:!0})],Q.prototype,`view`,void 0),e([_({readOnly:!0})],Q.prototype,`updating`,null),e([_()],Q.prototype,`firstGrabbedManipulator`,null),e([_()],Q.prototype,`hasGrabbedManipulators`,null),e([_()],Q.prototype,`snappingOptions`,null),e([_()],Q.prototype,`_stagedDimension`,void 0),e([_()],Q.prototype,`_snappingManager`,null),e([_()],Q.prototype,`_activeComputation`,null),e([_()],Q.prototype,`_stagedComputation`,null),e([_()],Q.prototype,`_snappingManagerResult`,void 0),Q=e([v(`esri.views.3d.analysis.Dimension.LengthDimensionSubTool`)],Q);const $=y();export{Q as LengthDimensionSubTool};