@arcgis/core 4.34.0-next.47 → 4.34.0-next.49

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 (143) hide show
  1. package/analysis/ElevationProfileUnits.js +1 -1
  2. package/analysis/support/elevationProfileLineTypes.js +1 -1
  3. package/assets/esri/core/workers/RemoteClient.js +1 -1
  4. package/assets/esri/core/workers/chunks/{6ce2f86b9b1d2f2b8675.js → 0874b88d5ae7c2b78b3b.js} +1 -1
  5. package/assets/esri/core/workers/chunks/{90a97ffba604c1c35532.js → 0b52c0ca432761076076.js} +65 -65
  6. package/assets/esri/core/workers/chunks/0c129b78e5cfe96795e1.js +1 -0
  7. package/assets/esri/core/workers/chunks/{9f869b331dff505b6b55.js → 1d234c057a6671acc59f.js} +1 -1
  8. package/assets/esri/core/workers/chunks/4cc982c99d84e896d535.js +1 -0
  9. package/assets/esri/core/workers/chunks/4e2b125e6e3945985a54.js +1 -0
  10. package/assets/esri/core/workers/chunks/5a016dcd3192d42d363e.js +1 -0
  11. package/assets/esri/core/workers/chunks/{574ea32d6c257e0d2079.js → 5b0c42bb95d81085061d.js} +1 -1
  12. package/assets/esri/core/workers/chunks/6130bc641aa7c1bcaaa8.js +1 -0
  13. package/assets/esri/core/workers/chunks/72ecf49d03bb24bf0998.js +1 -0
  14. package/assets/esri/core/workers/chunks/781b59ba0cabe78bc122.js +1 -0
  15. package/assets/esri/core/workers/chunks/{28a85997c9003cacdefb.js → 8e3c09c3524654830b14.js} +1 -1
  16. package/assets/esri/core/workers/chunks/ad93a2621f75270f06cb.js +1 -0
  17. package/assets/esri/core/workers/chunks/bd7e303dd64a27ba6846.js +1 -0
  18. package/assets/esri/core/workers/chunks/cb8f2ce22274990b359c.js +1 -0
  19. package/assets/esri/core/workers/chunks/{0b67b16d7e6c030bcfc7.js → d4766c97d97554b3b408.js} +1 -1
  20. package/assets/esri/core/workers/chunks/ddd6597a66ec6b972f9c.js +1 -0
  21. package/chunks/LineSeries.js +1 -1
  22. package/chunks/Theme.js +1 -1
  23. package/chunks/chartUtilsAm5.js +1 -1
  24. package/config.js +1 -1
  25. package/core/lang.js +1 -1
  26. package/core/timeUtils.js +1 -1
  27. package/editing/sharedTemplates/support/sharedTemplateErrors.js +1 -1
  28. package/interfaces.d.ts +44 -10
  29. package/kernel.js +1 -1
  30. package/layers/LinkChartLayer.js +1 -1
  31. package/layers/orientedImagery/transformations/updateElevationUtils.js +1 -1
  32. package/layers/orientedImagery/transformations/utils.js +1 -1
  33. package/layers/save/featureLayerUtils.js +1 -1
  34. package/layers/support/rasterDatasets/pixelReader.js +1 -1
  35. package/libs/linkchartlayout/LinkChartLayout.js +1 -1
  36. package/libs/parquet/parquet.js +1 -1
  37. package/networks/UtilityNetwork.js +1 -1
  38. package/networks/support/UtilityNetworkLookupHelper.js +1 -1
  39. package/networks/support/networkFieldUtils.js +1 -1
  40. package/networks/support/typeUtils.js +1 -1
  41. package/package.json +4 -4
  42. package/rest/networks/support/CircuitLocation.js +5 -0
  43. package/rest/networks/support/CircuitSection.js +5 -0
  44. package/rest/support/Query.js +1 -1
  45. package/rest/support/RelationshipQuery.js +1 -1
  46. package/rest/utils.js +1 -1
  47. package/support/revision.js +1 -1
  48. package/support/webSceneUtils.js +1 -1
  49. package/symbols/cim/utils.js +1 -1
  50. package/views/2d/LabelManager.js +1 -1
  51. package/views/2d/engine/flow/utils.js +1 -1
  52. package/views/2d/engine/imagery/RasterBitmap.js +1 -1
  53. package/views/2d/engine/webgl/DisplayId.js +1 -1
  54. package/views/2d/engine/webgl/animations/instructions.js +1 -1
  55. package/views/2d/engine/webgl/mesh/templates/templateUtils.js +1 -1
  56. package/views/2d/interactive/editingTools.js +1 -1
  57. package/views/2d/layers/FeatureLayerView2D.js +1 -1
  58. package/views/2d/layers/features/FeatureContainer.js +1 -1
  59. package/views/2d/layers/features/RenderState.js +1 -1
  60. package/views/2d/layers/features/processor/TrackStrategy.js +1 -1
  61. package/views/2d/layers/features/sources/strategies/chunks/ParquetSourceChunk.js +1 -1
  62. package/views/2d/layers/features/support/FeatureSetReader.js +1 -1
  63. package/views/2d/layers/features/support/FeatureSetReaderIndirect.js +1 -1
  64. package/views/3d/analysis/ElevationProfile/ElevationProfileLineSceneComputation.js +5 -0
  65. package/views/3d/analysis/ElevationProfileAnalysisView3D.js +1 -1
  66. package/views/3d/analysis/VolumeMeasurement/CutFillVolumeMeasurementComputation.js +1 -1
  67. package/views/3d/analysis/VolumeMeasurement/CutFillVolumeMeasurementController.js +1 -1
  68. package/views/3d/environment/SunLighting.js +1 -1
  69. package/views/3d/layers/FlowSubView3D.js +1 -1
  70. package/views/3d/layers/I3SMeshView3D.js +1 -1
  71. package/views/3d/layers/graphics/Graphics3DSymbolLayerFactory.js +1 -1
  72. package/views/3d/layers/support/MediaLayerInteraction.js +1 -1
  73. package/views/3d/terrain/terrainUtils.js +1 -1
  74. package/views/3d/webgl-engine/core/FBOCacheFormats.js +1 -1
  75. package/views/3d/webgl-engine/core/shaderModules/Matrix4sDrawUniform.js +1 -1
  76. package/views/3d/webgl-engine/core/shaderModules/Matrix4sPassUniform.js +1 -1
  77. package/views/3d/webgl-engine/lib/Program.js +1 -1
  78. package/views/3d/webgl-engine/lib/ShadowMap.js +1 -1
  79. package/views/3d/webgl-engine/materials/DefaultLayouts.js +1 -1
  80. package/views/3d/webgl-engine/shaders/ImageMaterialTechnique.js +1 -1
  81. package/views/analysis/ElevationProfile/ElevationProfileController.js +5 -0
  82. package/views/analysis/ElevationProfile/ElevationProfileLineComputation.js +5 -0
  83. package/views/analysis/ElevationProfile/ElevationProfileLineGroundComputation.js +5 -0
  84. package/views/analysis/ElevationProfile/ElevationProfileLineInputComputation.js +5 -0
  85. package/views/analysis/ElevationProfile/ElevationProfileLineQueryComputation.js +5 -0
  86. package/views/analysis/ElevationProfile/ProfileGenerationError.js +5 -0
  87. package/views/analysis/ElevationProfile/constants.js +5 -0
  88. package/views/analysis/ElevationProfile/elevationQuerySourceUtils.js +5 -0
  89. package/views/analysis/ElevationProfile/geometryUtils.js +5 -0
  90. package/views/analysis/ElevationProfile/profileUtils.js +5 -0
  91. package/views/analysis/ElevationProfile/statisticsUtils.js +5 -0
  92. package/views/analysis/ElevationProfile/traversalUtils.js +5 -0
  93. package/views/analysis/ElevationProfile/unitUtils.js +5 -0
  94. package/views/analysis/ElevationProfileResult.js +1 -1
  95. package/views/support/LayerLayerViewInfo.js +1 -1
  96. package/views/support/highlightOptionsUtils.js +1 -1
  97. package/views/webgl/Program.js +1 -1
  98. package/views/webgl/textureUtils.js +1 -1
  99. package/webscene/SunLighting.js +1 -1
  100. package/widgets/Daylight/DaylightViewModel.js +1 -1
  101. package/widgets/Daylight/support/daylightUtils.js +1 -1
  102. package/widgets/Editor/EditorViewModel.js +1 -1
  103. package/widgets/Editor/support/SketchController.js +1 -1
  104. package/widgets/FeatureForm/FeatureFormViewModel.js +1 -1
  105. package/widgets/FeatureTable/FieldColumn.js +1 -1
  106. package/widgets/FeatureTable/Grid/Column.js +1 -1
  107. package/widgets/FeatureTable.js +1 -1
  108. package/widgets/Features/FeaturesViewModel.js +1 -1
  109. package/widgets/Legend/support/sizeRampUtils.js +1 -1
  110. package/widgets/OrientedImageryViewer/constants.js +1 -1
  111. package/widgets/OrientedImageryViewer/navigation/errors.js +1 -1
  112. package/widgets/OrientedImageryViewer.js +1 -1
  113. package/widgets/ShadowCast/css.js +1 -1
  114. package/widgets/TimeSlider/TimeSliderViewModel.js +1 -1
  115. package/widgets/UtilityNetworkAssociations/UtilityNetworkAssociationsViewModel.js +1 -1
  116. package/widgets/UtilityNetworkTraceAnalysis/UtilityNetworkTraceAnalysisViewModel.js +1 -1
  117. package/widgets/smartMapping/SmartMappingSliderViewModel.js +1 -1
  118. package/widgets/support/GridControls/GridControlsViewModel.js +1 -1
  119. package/widgets/support/SelectionList.js +1 -1
  120. package/arcade/credentials.js +0 -5
  121. package/arcade/featureset/support/Guid.js +0 -5
  122. package/arcade/request.js +0 -5
  123. package/arcade/serviceAreaMetaData.js +0 -5
  124. package/assets/esri/core/workers/chunks/45b450c045d5fadf71b6.js +0 -1
  125. package/assets/esri/core/workers/chunks/4f5e72993a4f5180d703.js +0 -1
  126. package/assets/esri/core/workers/chunks/516b30778cd54d29e362.js +0 -1
  127. package/assets/esri/core/workers/chunks/53e166944a42af027345.js +0 -1
  128. package/assets/esri/core/workers/chunks/576792b5e1e13084adba.js +0 -1
  129. package/assets/esri/core/workers/chunks/5f7dc9657803ae3140a6.js +0 -1
  130. package/assets/esri/core/workers/chunks/8d51b6823ef5d290c670.js +0 -1
  131. package/assets/esri/core/workers/chunks/947085d176bd3a930e6f.js +0 -1
  132. package/assets/esri/core/workers/chunks/b1b6300451cc4ccefd46.js +0 -1
  133. package/assets/esri/core/workers/chunks/d09ded9fb621491e2466.js +0 -1
  134. package/assets/esri/core/workers/chunks/eb61b47df99a54a364c8.js +0 -1
  135. package/rest/versionManagement/support/GetVersionInfosResult.js +0 -5
  136. package/symbols/cim/quantizeTime.js +0 -5
  137. package/undoredo/support/DataEditingContext.js +0 -5
  138. package/views/2d/engine/webgl/shaderGraph/techniques/mesh/WriterRegistry.js +0 -5
  139. package/views/2d/interactive/editingTools/MediaTransformToolsWrapper.js +0 -5
  140. package/views/2d/layers/features/sources/strategies/chunks/FeatureSourceEndChunk.js +0 -5
  141. package/views/3d/webgl-engine/core/shaderLibrary/util/RgbaFloat16Encoding.glsl.js +0 -25
  142. package/webscene/spec-certification/index.js +0 -5
  143. package/widgets/HighlightConfigurator.js +0 -5
package/config.js CHANGED
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
4
4
  */
5
- import"./core/has.js";import{deepMerge as e}from"./core/object.js";const s={apiKey:void 0,apiKeys:{scopes:[]},applicationName:"",applicationUrl:globalThis.location?.href,assetsPath:"",fontsUrl:"https://static.arcgis.com/fonts",geometryServiceUrl:"https://utility.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer",geoRSSServiceUrl:"https://utility.arcgis.com/sharing/rss",kmlServiceUrl:"https://utility.arcgis.com/sharing/kml",userPrivilegesApplied:!0,portalUrl:"https://www.arcgis.com",respectPrefersReducedMotion:!0,routeServiceUrl:"https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World",workers:{loaderConfig:{has:{},paths:{},map:{},packages:[]}},request:{crossOriginNoCorsDomains:null,httpsDomains:["arcgis.com","arcgisonline.com","esrikr.com","premiumservices.blackbridge.com","esripremium.accuweather.com","gbm.digitalglobe.com","firstlook.digitalglobe.com","msi.digitalglobe.com"],interceptors:[],internalInterceptors:[],maxUrlLength:2e3,priority:"high",proxyRules:[],proxyUrl:null,timeout:62e3,trustedServers:[],useIdentity:!0},log:{interceptors:[],level:null}};if(globalThis.esriConfig&&(e(s,globalThis.esriConfig,!0),delete s.has),!s.assetsPath){{const e="4.34.0-next.47";s.assetsPath=`https://cdn.jsdelivr.net/npm/@arcgis/core@${e}/assets`}s.defaultAssetsPath=s.assetsPath}export{s as default};
5
+ import"./core/has.js";import{deepMerge as e}from"./core/object.js";const s={apiKey:void 0,apiKeys:{scopes:[]},applicationName:"",applicationUrl:globalThis.location?.href,assetsPath:"",fontsUrl:"https://static.arcgis.com/fonts",geometryServiceUrl:"https://utility.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer",geoRSSServiceUrl:"https://utility.arcgis.com/sharing/rss",kmlServiceUrl:"https://utility.arcgis.com/sharing/kml",userPrivilegesApplied:!0,portalUrl:"https://www.arcgis.com",respectPrefersReducedMotion:!0,routeServiceUrl:"https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World",workers:{loaderConfig:{has:{},paths:{},map:{},packages:[]}},request:{crossOriginNoCorsDomains:null,httpsDomains:["arcgis.com","arcgisonline.com","esrikr.com","premiumservices.blackbridge.com","esripremium.accuweather.com","gbm.digitalglobe.com","firstlook.digitalglobe.com","msi.digitalglobe.com"],interceptors:[],internalInterceptors:[],maxUrlLength:2e3,priority:"high",proxyRules:[],proxyUrl:null,timeout:62e3,trustedServers:[],useIdentity:!0},log:{interceptors:[],level:null}};if(globalThis.esriConfig&&(e(s,globalThis.esriConfig,!0),delete s.has),!s.assetsPath){{const e="4.34.0-next.49";s.assetsPath=`https://cdn.jsdelivr.net/npm/@arcgis/core@${e}/assets`}s.defaultAssetsPath=s.assetsPath}export{s as default};
package/core/lang.js CHANGED
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
4
4
  */
5
- import{equals as t}from"./arrayUtils.js";import{isInt8Array as n,isUint8Array as e,isUint8ClampedArray as r,isInt16Array as o,isUint16Array as f,isInt32Array as i,isUint32Array as c,isFloat32Array as u,isFloat64Array as s}from"./typedArrayUtil.js";function l(t,n){let e;if(n)for(e in t)t.hasOwnProperty(e)&&(void 0===t[e]?delete t[e]:t[e]instanceof Object&&l(t[e],!0));else for(e in t)t.hasOwnProperty(e)&&void 0===t[e]&&delete t[e];return t}function a(t){if(!t||"object"!=typeof t||"function"==typeof t)return t;const n=O(t);if(null!=n)return n;if(y(t))return t.clone();if(b(t))return t.map(a);if(m(t))throw new Error("Trying to clone an unclonable Accessor instance");const e={};for(const r of Object.getOwnPropertyNames(t))e[r]=a(t[r]);return e}function p(t,n){if(!t||"object"!=typeof t||"function"==typeof t||"HTMLElement"in globalThis&&t instanceof HTMLElement)return t;const e=O(t);if(null!=e)return e;if(b(t)){let e=!0;const r=t.map(t=>{const r=p(t,n);return null!=t&&null==r&&(e=!1),r});return e?r:null}if(y(t))return t.clone(n);if(t instanceof File||t instanceof Blob)return t;if(m(t))return null;const r=new(0,Object.getPrototypeOf(t).constructor);for(const o of Object.getOwnPropertyNames(t)){const n=t[o],e=p(n);if(null!=n&&null==e)return null;r[o]=e}return r}function y(t){return"function"==typeof t.clone}function b(t){return"function"==typeof t.map&&"function"==typeof t.forEach}function m(t){return"function"==typeof t.notifyChange&&"function"==typeof t.watch}function g(t){if("[object Object]"!==Object.prototype.toString.call(t))return!1;const n=Object.getPrototypeOf(t);return null===n||n===Object.prototype}function O(t){if(n(t)||e(t)||r(t)||o(t)||f(t)||i(t)||c(t)||u(t)||s(t))return t.slice();if(t instanceof Date)return new Date(t.getTime());if(t instanceof ArrayBuffer){return t.slice(0,t.byteLength)}if(t instanceof Map){const n=new Map;for(const[e,r]of t)n.set(e,a(r));return n}if(t instanceof Set){const n=new Set;for(const e of t)n.add(a(e));return n}return null}function j(t,n){return t===n||"number"==typeof t&&isNaN(t)&&"number"==typeof n&&isNaN(n)||"function"==typeof t?.getTime&&"function"==typeof n?.getTime&&t.getTime()===n.getTime()||!1}function h(n,e){return n===e||(null==n||"string"==typeof n?n===e:"number"==typeof n?n===e||"number"==typeof e&&isNaN(n)&&isNaN(e):n instanceof Date?e instanceof Date&&n.getTime()===e.getTime():Array.isArray(n)?Array.isArray(e)&&t(n,e):n instanceof Set?e instanceof Set&&T(n,e):n instanceof Map?e instanceof Map&&N(n,e):!!g(n)&&(g(e)&&w(n,e)))}function w(t,n){if(null===t||null===n)return!1;const e=Object.keys(t);if(null===n||Object.keys(n).length!==e.length)return!1;for(const r of e)if(t[r]!==n[r]||!Object.prototype.hasOwnProperty.call(n,r))return!1;return!0}function T(t,n){if(t.size!==n.size)return!1;for(const e of t)if(!n.has(e))return!1;return!0}function N(t,n){if(t.size!==n.size)return!1;for(const[e,r]of t){const t=n.get(e);if(t!==r||void 0===t&&!n.has(e))return!1}return!0}export{a as clone,j as equals,h as equalsShallow,l as fixJson,m as isAccessorLike,y as isClonable,g as isPlainObject,p as tryClone};
5
+ import{equals as t}from"./arrayUtils.js";import{isInt8Array as n,isUint8Array as e,isUint8ClampedArray as r,isInt16Array as o,isUint16Array as f,isInt32Array as i,isUint32Array as c,isFloat32Array as u,isFloat64Array as s}from"./typedArrayUtil.js";function l(t,n){let e;if(n)for(e in t)t.hasOwnProperty(e)&&(void 0===t[e]?delete t[e]:t[e]instanceof Object&&l(t[e],!0));else for(e in t)t.hasOwnProperty(e)&&void 0===t[e]&&delete t[e];return t}function a(t){if(!t||"object"!=typeof t||"function"==typeof t)return t;const n=O(t);if(null!=n)return n;if(y(t))return t.clone();if(b(t))return t.map(a);if(m(t))throw new Error("Trying to clone an unclonable Accessor instance");const e={};for(const r of Object.getOwnPropertyNames(t))e[r]=a(t[r]);return e}function p(t,n){if(!t||"object"!=typeof t||"function"==typeof t||"HTMLElement"in globalThis&&t instanceof HTMLElement)return t;const e=O(t);if(null!=e)return e;if(b(t)){let e=!0;const r=t.map(t=>{const r=p(t,n);return null!=t&&null==r&&(e=!1),r});return e?r:null}if(y(t))return t.clone(n);if(t instanceof File||t instanceof Blob)return t;if(m(t))return null;const r=new(0,Object.getPrototypeOf(t).constructor);for(const o of Object.getOwnPropertyNames(t)){const n=t[o],e=p(n);if(null!=n&&null==e)return null;r[o]=e}return r}function y(t){return"function"==typeof t.clone}function b(t){return"function"==typeof t.map&&"function"==typeof t.forEach}function m(t){return"function"==typeof t.notifyChange&&"function"==typeof t.watch}function g(t){if("[object Object]"!==Object.prototype.toString.call(t))return!1;const n=Object.getPrototypeOf(t);return null===n||n===Object.prototype}function O(t){if(n(t)||e(t)||r(t)||o(t)||f(t)||i(t)||c(t)||u(t)||s(t))return t.slice();if(t instanceof Date)return new Date(t);if(t instanceof ArrayBuffer){return t.slice(0,t.byteLength)}if(t instanceof Map){const n=new Map;for(const[e,r]of t)n.set(e,a(r));return n}if(t instanceof Set){const n=new Set;for(const e of t)n.add(a(e));return n}return null}function j(t,n){return t===n||"number"==typeof t&&isNaN(t)&&"number"==typeof n&&isNaN(n)||"function"==typeof t?.getTime&&"function"==typeof n?.getTime&&t.getTime()===n.getTime()||!1}function h(n,e){return n===e||(null==n||"string"==typeof n?n===e:"number"==typeof n?n===e||"number"==typeof e&&isNaN(n)&&isNaN(e):n instanceof Date?e instanceof Date&&n.getTime()===e.getTime():Array.isArray(n)?Array.isArray(e)&&t(n,e):n instanceof Set?e instanceof Set&&N(n,e):n instanceof Map?e instanceof Map&&T(n,e):!!g(n)&&(g(e)&&w(n,e)))}function w(t,n){if(null===t||null===n)return!1;const e=Object.keys(t);if(null===n||Object.keys(n).length!==e.length)return!1;for(const r of e)if(t[r]!==n[r]||!Object.prototype.hasOwnProperty.call(n,r))return!1;return!0}function N(t,n){if(t.size!==n.size)return!1;for(const e of t)if(!n.has(e))return!1;return!0}function T(t,n){if(t.size!==n.size)return!1;for(const[e,r]of t){const t=n.get(e);if(t!==r||void 0===t&&!n.has(e))return!1}return!0}export{a as clone,j as equals,h as equalsShallow,l as fixJson,m as isAccessorLike,y as isClonable,g as isPlainObject,p as tryClone};
package/core/timeUtils.js CHANGED
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
4
4
  */
5
- import{resolveTimeZone as e}from"../intl/date.js";import{system as t}from"../time/constants.js";import{IANAZone as n,DateTime as s}from"luxon";const r={milliseconds:1,seconds:1e3,minutes:6e4,hours:36e5,days:864e5,weeks:6048e5,months:26784e5,years:31536e6,decades:31536e7,centuries:31536e8};function o(r,o,i,c=t){const u=new n(e(c)),a=s.fromJSDate(r,{zone:u}),l="decades"===i||"centuries"===i?"year":T(i);return"decades"===i&&(o*=10),"centuries"===i&&(o*=100),a.plus({[l]:o}).toJSDate()}function i(e,t,n="milliseconds"){const s=e.getTime(),r=m(t,n,"milliseconds");return new Date(s+r)}function c(r,o,i=t){const c=new n(e(i)),u=s.fromJSDate(r,{zone:c});if("decades"===o||"centuries"===o){const e=u.startOf("year"),{year:t}=e,n=t-t%("decades"===o?10:100);return e.set({year:n}).toJSDate()}const a=T(o);return u.startOf(a).toJSDate()}function u(e,t,n="milliseconds"){const s=new Date(m(t,n,"milliseconds"));return s.setUTCFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),s}function a(e,t="milliseconds"){const n=m(e.getUTCHours(),"hours","milliseconds"),s=m(e.getUTCMinutes(),"minutes","milliseconds"),r=m(e.getUTCSeconds(),"seconds","milliseconds");return m(n+s+r+e.getUTCMilliseconds(),"milliseconds",t)}function l(e,t){const n=new Date(e.getTime());return n.setUTCFullYear(t.getFullYear(),t.getMonth(),t.getDate()),n}function d(e){const t=new Date(0);return t.setHours(0),t.setMinutes(0),t.setSeconds(0),t.setMilliseconds(0),t.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),t}function m(e,t,n){if(0===e)return 0;return e*r[t]/r[n]}function f(e){return e instanceof Date&&!isNaN(e.getTime())}function g(e,t){return e&&t?e.intersection(t):e||t}function T(e){switch(e){case"milliseconds":return"millisecond";case"seconds":return"second";case"minutes":return"minute";case"hours":return"hour";case"days":return"day";case"weeks":return"week";case"months":return"month";case"years":return"year"}}export{m as convertTime,f as isValidDate,u as makeUTCTime,g as mergeTimeExtents,r as millisecondsPerTimeUnit,o as offsetDate,i as offsetDateUTC,l as resetUTCDate,a as timeSinceUTCMidnight,c as truncateDate,d as truncateLocalTime};
5
+ import{resolveTimeZone as e}from"../intl/date.js";import{system as t}from"../time/constants.js";import{IANAZone as n,DateTime as s}from"luxon";const r={milliseconds:1,seconds:1e3,minutes:6e4,hours:36e5,days:864e5,weeks:6048e5,months:26784e5,years:31536e6,decades:31536e7,centuries:31536e8};function o(r,o,i,c=t){const u=new n(e(c)),a=s.fromJSDate(r,{zone:u}),l="decades"===i||"centuries"===i?"year":T(i);return"decades"===i&&(o*=10),"centuries"===i&&(o*=100),a.plus({[l]:o}).toJSDate()}function i(e,t,n="milliseconds"){const s=e.getTime(),r=m(t,n,"milliseconds");return new Date(s+r)}function c(r,o,i=t){const c=new n(e(i)),u=s.fromJSDate(r,{zone:c});if("decades"===o||"centuries"===o){const e=u.startOf("year"),{year:t}=e,n=t-t%("decades"===o?10:100);return e.set({year:n}).toJSDate()}const a=T(o);return u.startOf(a).toJSDate()}function u(e,t,n="milliseconds"){const s=new Date(m(t,n,"milliseconds"));return s.setUTCFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),s}function a(e,t="milliseconds"){const n=m(e.getUTCHours(),"hours","milliseconds"),s=m(e.getUTCMinutes(),"minutes","milliseconds"),r=m(e.getUTCSeconds(),"seconds","milliseconds");return m(n+s+r+e.getUTCMilliseconds(),"milliseconds",t)}function l(e,t){const n=new Date(e);return n.setUTCFullYear(t.getFullYear(),t.getMonth(),t.getDate()),n}function d(e){const t=new Date(0);return t.setHours(0),t.setMinutes(0),t.setSeconds(0),t.setMilliseconds(0),t.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),t}function m(e,t,n){if(0===e)return 0;return e*r[t]/r[n]}function f(e){return e instanceof Date&&!isNaN(e.getTime())}function g(e,t){return e&&t?e.intersection(t):e||t}function T(e){switch(e){case"milliseconds":return"millisecond";case"seconds":return"second";case"minutes":return"minute";case"hours":return"hour";case"days":return"day";case"weeks":return"week";case"months":return"month";case"years":return"year"}}export{m as convertTime,f as isValidDate,u as makeUTCTime,g as mergeTimeExtents,r as millisecondsPerTimeUnit,o as offsetDate,i as offsetDateUTC,l as resetUTCDate,a as timeSinceUTCMidnight,c as truncateDate,d as truncateLocalTime};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
4
4
  */
5
- import e from"../../../core/Error.js";import{difference as t}from"../../../core/SetUtils.js";class r extends e{constructor(e,t){super("shared-template-query-failed",`Request to fetch templates failed. templateIds: ${e.join(",")}`,{error:t}),this.templateIds=e}}class s extends e{constructor(e,r){const s=new Set(r.map(e=>e.templateId)),a=t(new Set(e),s);super("shared-template-some-templates-missing",`The service failed to return templates for the following 'templateId's: ${Array.from(a).join(",")}`)}}class a extends e{constructor(){super("shared-template-required-properties-not-set","Values must be specified for the `definition`, `featureService`, `layer`, and `view` properties of a `SharedTemplate` in order to load it")}}class o extends e{constructor(){super("shared-template-definition-required-properties-not-set","The `featureService`, `makeSharedTemplateFromJSON`, and `view` properties must all be set in order to load a template definition")}}class l extends e{constructor(e){super("shared-template-unsupported-builder",`This template uses an unsupported builder type, '${e}'`),this.builderType=e}}class i extends e{constructor(e,t){super("shared-template-layer-resolver-error",`The 'layerResolver' function failed to provide any layers for template with 'templateId: ${e}'`,{error:t}),this.templateId=e}}class n extends e{constructor(e,t){super("shared-template-utility-network-resolver-error",`The 'utilityNetworkResolver' function threw an error while attempting to find a utility network for template with 'templateId: ${e}'`,{error:t}),this.templateId=e}}class d extends e{constructor(e){super("shared-template-layer-unavailable",`None of the layers with which the template is associated are present in the view. Layer IDs: [${e.join(",")}]`),this.layerIds=e}}class p extends e{constructor(e){super("shared-template-relationship-not-found",`Relationship class '${e}' could not be found.`),this.relationshipCatalogId=e}}class u extends e{constructor(e){super("shared-template-utility-network-unavailable","Template '${templateId}' requires a utility network that is not loaded or could not be found"),this.templateId=e}}class c extends e{constructor(e){super("shared-template-no-drawing-tools-allowed",`No drawing tools available for template '${e}. All supported drawing tools are listed in the template's 'excludedTools' list.`),this.templateId=e}}export{o as SharedTemplateDefinitionRequiredPropsNotSetError,i as SharedTemplateLayerResolverError,d as SharedTemplateLayerUnavailableError,s as SharedTemplateMissingTemplatesError,p as SharedTemplateRelationshipNotFound,r as SharedTemplateRequestError,a as SharedTemplateRequiredPropsNotSetError,l as SharedTemplateUnsupportedBuilderError,c as SharedTemplateUnsupportedDrawingTool,n as SharedTemplateUtilityNetworkResolverError,u as SharedTemplateUtilityNetworkUnavailableError};
5
+ import e from"../../../core/Error.js";import{difference as t}from"../../../core/SetUtils.js";class r extends e{constructor(e,t){super("shared-template-query-failed",`Request to fetch templates failed. templateIds: ${e.join(",")}`,{error:t}),this.templateIds=e}}class s extends e{constructor(e,r){const s=new Set(r.map(e=>e.templateId)),a=t(new Set(e),s);super("shared-template-some-templates-missing",`The service failed to return templates for the following 'templateId's: ${Array.from(a).join(",")}`)}}class a extends e{constructor(){super("shared-template-required-properties-not-set","Values must be specified for the `definition`, `featureService`, `layer`, and `view` properties of a `SharedTemplate` in order to load it")}}class o extends e{constructor(){super("shared-template-definition-required-properties-not-set","The `featureService`, `makeSharedTemplateFromJSON`, and `view` properties must all be set in order to load a template definition")}}class i extends e{constructor(e){super("shared-template-unsupported-builder",`This template uses an unsupported builder type, '${e}'`),this.builderType=e}}class l extends e{constructor(e,t){super("shared-template-layer-resolver-error",`The 'layerResolver' function failed to provide any layers for template with 'templateId: ${e}'`,{error:t}),this.templateId=e}}class n extends e{constructor(e,t){super("shared-template-utility-network-resolver-error",`The 'utilityNetworkResolver' function threw an error while attempting to find a utility network for template with 'templateId: ${e}'`,{error:t}),this.templateId=e}}class p extends e{constructor(e){super("shared-template-layer-unavailable",`None of the layers with which the template is associated are present in the view. Layer IDs: [${e.join(",")}]`),this.layerIds=e}}class d extends e{constructor(e){super("shared-template-relationship-not-found",`Relationship class '${e}' could not be found.`),this.relationshipCatalogId=e}}export{o as SharedTemplateDefinitionRequiredPropsNotSetError,l as SharedTemplateLayerResolverError,p as SharedTemplateLayerUnavailableError,s as SharedTemplateMissingTemplatesError,d as SharedTemplateRelationshipNotFound,r as SharedTemplateRequestError,a as SharedTemplateRequiredPropsNotSetError,i as SharedTemplateUnsupportedBuilderError,n as SharedTemplateUtilityNetworkResolverError};
package/interfaces.d.ts CHANGED
@@ -51238,19 +51238,19 @@ declare namespace __esri {
51238
51238
  /**
51239
51239
  * Returns {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-networks-UtilityNetwork.html#ServiceEdits ServiceEdits} which are used to add an {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-networks-support-Association.html Association} via the `applyEdits` method on the {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-featureService-FeatureService.html FeatureService} class.
51240
51240
  *
51241
- * @param association `Association` used to generate the {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-networks-UtilityNetwork.html#ServiceEdits ServiceEdits} object.
51241
+ * @param associations `Association` used to generate the {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-networks-UtilityNetwork.html#ServiceEdits ServiceEdits} object.
51242
51242
  *
51243
51243
  * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-networks-UtilityNetwork.html#generateAddAssociations Read more...}
51244
51244
  */
51245
- generateAddAssociations(association: Association[]): ServiceEdits;
51245
+ generateAddAssociations(associations: Association[]): ServiceEdits;
51246
51246
  /**
51247
51247
  * Returns {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-networks-UtilityNetwork.html#ServiceEdits ServiceEdits} which are used to delete an {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-networks-support-Association.html Association} via the `applyEdits` method on the {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-featureService-FeatureService.html FeatureService} class.
51248
51248
  *
51249
- * @param association `Association` used to generate the {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-networks-UtilityNetwork.html#ServiceEdits ServiceEdits} object.
51249
+ * @param associations `Association` used to generate the {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-networks-UtilityNetwork.html#ServiceEdits ServiceEdits} object.
51250
51250
  *
51251
51251
  * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-networks-UtilityNetwork.html#generateDeleteAssociations Read more...}
51252
51252
  */
51253
- generateDeleteAssociations(association: Association[]): ServiceEdits;
51253
+ generateDeleteAssociations(associations: Association[]): ServiceEdits;
51254
51254
  /**
51255
51255
  * All devices features have terminal configurations (default single terminal).
51256
51256
  *
@@ -94997,6 +94997,20 @@ declare namespace __esri {
94997
94997
  * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#analysis Read more...}
94998
94998
  */
94999
94999
  readonly analysis: ElevationProfileAnalysis;
95000
+ /**
95001
+ * Points being hovered in the chart, in the view's spatial reference, computed from the `hoveredPosition` property.
95002
+ *
95003
+ * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#hoveredPoints Read more...}
95004
+ */
95005
+ readonly hoveredPoints: (Point | nullish)[];
95006
+ /**
95007
+ * The position, in [0, 1], being hovered in the elevation profile chart.
95008
+ *
95009
+ * @default null
95010
+ *
95011
+ * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#hoveredPosition Read more...}
95012
+ */
95013
+ readonly hoveredPosition: number | nullish;
95000
95014
  /**
95001
95015
  * Enables interactivity for the {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#analysis analysis}.
95002
95016
  *
@@ -95005,18 +95019,36 @@ declare namespace __esri {
95005
95019
  * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#interactive Read more...}
95006
95020
  */
95007
95021
  interactive: boolean;
95022
+ /**
95023
+ * Combined progress (0 to 1) of generating all configured profiles.
95024
+ *
95025
+ * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#progress Read more...}
95026
+ */
95027
+ readonly progress: number;
95008
95028
  /**
95009
95029
  * Result of the elevation profile analysis.
95010
95030
  *
95011
95031
  * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#results Read more...}
95012
95032
  */
95013
95033
  readonly results: ElevationProfileResult[];
95034
+ /**
95035
+ * Combined statistics of all the computed profile lines.
95036
+ *
95037
+ * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#statistics Read more...}
95038
+ */
95039
+ readonly statistics: ElevationProfileStatistics | nullish;
95014
95040
  /**
95015
95041
  * The analysis view type.
95016
95042
  *
95017
95043
  * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#type Read more...}
95018
95044
  */
95019
95045
  readonly type: "elevation-profile-view-3d";
95046
+ /**
95047
+ * Whether the analysis is currently being updated.
95048
+ *
95049
+ * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#updating Read more...}
95050
+ */
95051
+ readonly updating: boolean;
95020
95052
  /**
95021
95053
  * When `true`, the {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-3d-analysis-ElevationProfileAnalysisView3D.html#analysis analysis} is visualized in the view.
95022
95054
  *
@@ -95986,15 +96018,16 @@ declare namespace __esri {
95986
96018
  *
95987
96019
  * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-analysis-ElevationProfileResult.html#samples Read more...}
95988
96020
  */
95989
- samples: any[];
96021
+ samples: ElevationProfileSample[] | nullish;
95990
96022
  /**
95991
- * Provides statistics about the elevation profile, such as minimum and maximum elevation values.
96023
+ * Provides statistics about the elevation profile, including minimum, maximum, and average elevation values,
96024
+ * elevation gain and loss, and slope information.
95992
96025
  *
95993
96026
  * @default null
95994
96027
  *
95995
96028
  * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-analysis-ElevationProfileResult.html#statistics Read more...}
95996
96029
  */
95997
- statistics: any | nullish;
96030
+ statistics: ElevationProfileStatistics | nullish;
95998
96031
  /**
95999
96032
  * Represents the result for a single {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileLine.html profile line} of an
96000
96033
  * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-analysis-ElevationProfileAnalysis.html ElevationProfileAnalysis}.
@@ -96034,13 +96067,14 @@ declare namespace __esri {
96034
96067
  *
96035
96068
  * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-analysis-ElevationProfileResult.html#samples Read more...}
96036
96069
  */
96037
- samples?: any[];
96070
+ samples?: ElevationProfileSample[] | nullish;
96038
96071
  /**
96039
- * Provides statistics about the elevation profile, such as minimum and maximum elevation values.
96072
+ * Provides statistics about the elevation profile, including minimum, maximum, and average elevation values,
96073
+ * elevation gain and loss, and slope information.
96040
96074
  *
96041
96075
  * {@link https://developers.arcgis.com/javascript/latest/api-reference/esri-views-analysis-ElevationProfileResult.html#statistics Read more...}
96042
96076
  */
96043
- statistics?: any | nullish;
96077
+ statistics?: ElevationProfileStatistics | nullish;
96044
96078
  }
96045
96079
 
96046
96080
  /**
package/kernel.js CHANGED
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
4
4
  */
5
- import has from"./core/has.js";import{addQueryParameter as o}from"./core/urlUtils.js";export{buildDate,commitHash as revision}from"./support/revision.js";Symbol.dispose??=Symbol("Symbol.dispose"),Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");const e="4.34";let s,r=e;function i(o){s=o}function t(e){const r=s?.findCredential(e);return r?.token?o(e,"token",r.token):e}r="4.34.0-next.47",has("host-webworker")||globalThis.$arcgis||Object.defineProperty(globalThis,"$arcgis",{configurable:!1,enumerable:!0,writable:!1,value:{}}),has("host-webworker");export{t as addTokenParameter,r as fullVersion,s as id,i as setId,e as version};
5
+ import has from"./core/has.js";import{addQueryParameter as o}from"./core/urlUtils.js";export{buildDate,commitHash as revision}from"./support/revision.js";Symbol.dispose??=Symbol("Symbol.dispose"),Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");const e="4.34";let s,r=e;function i(o){s=o}function t(e){const r=s?.findCredential(e);return r?.token?o(e,"token",r.token):e}r="4.34.0-next.49",has("host-webworker")||globalThis.$arcgis||Object.defineProperty(globalThis,"$arcgis",{configurable:!1,enumerable:!0,writable:!1,value:{}}),has("host-webworker");export{t as addTokenParameter,r as fullVersion,s as id,i as setId,e as version};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
4
4
  */
5
- import{__decorate as e}from"tslib";import{serializationUtilsModuleWrapper as t}from"../applications/KnowledgeStudio/resourceSerializationUtils.js";import a from"../core/Collection.js";import i from"../core/Error.js";import n from"../core/Logger.js";import{getOrCreateMapValue as o}from"../core/MapUtils.js";import{MultiOriginJSONMixin as s}from"../core/MultiOriginJSONSupport.js";import{throwIfAborted as r,isAbortError as l,createAbortError as h}from"../core/promiseUtils.js";import{watch as d,sync as p}from"../core/reactiveUtils.js";import{property as c}from"../core/accessorSupport/decorators/property.js";import"../core/has.js";import"../core/RandomLCG.js";import{subclass as u}from"../core/accessorSupport/decorators/subclass.js";import{idToName as y}from"../core/accessorSupport/PropertyOrigin.js";import g from"../geometry/Extent.js";import m from"../geometry/Point.js";import f from"../geometry/Polyline.js";import w from"./Layer.js";import{convertFromGeometry as L}from"./graphics/featureConversionUtils.js";import{systemOidFieldName as b,systemOriginIdFieldName as M,systemDestinationIdFieldName as k,systemLayoutGeometryFieldName as C,systemAggregationCountFieldName as T}from"./knowledgeGraph/constants.js";import{IdealEdgeLengthTypeOptions as N}from"./knowledgeGraph/IdealEdgeLengthTypeOptions.js";import{KnowledgeGraphLayerDataManager as D}from"./knowledgeGraph/KnowledgeGraphLayerDataManager.js";import x from"./knowledgeGraph/KnowledgeGraphSublayer.js";import{initializeLayersFromClientData as v}from"./knowledgeGraph/layerUtils.js";import I from"./knowledgeGraph/SessionMemoryStorage.js";import{convertLayoutTypeToWebSupportedFormat as E,getRelationshipEndNodeIds as S}from"./knowledgeGraph/supportUtils.js";import{BlendLayer as _}from"./mixins/BlendLayer.js";import{OperationalLayer as A}from"./mixins/OperationalLayer.js";import{ScaleRangeLayer as R}from"./mixins/ScaleRangeLayer.js";import{url as j}from"./support/commonProperties.js";import{LCChronologicalLayout as G,LCSimpleLayout as z,LCSmartTreeLayout as P,LCRadialTreeLayout as O,LCHierarchicalLayout as F,LCCommunityLayout as B,LCForceDirectedLayout as U,load as Q}from"../libs/linkchartlayout/LinkChartLayout.js";import{fetchKnowledgeGraph as W}from"../rest/knowledgeGraphService.js";let $=class extends(A(_(R(s(w))))){constructor(e){if(super(e),this.url=null,this.dataPreloadedInLocalCache=!1,this.initializationLinkChartConfig=null,this.membershipModified=!0,this._currentLinkChartConfig={layoutMode:"organic-standard"},this._graphTypeLookup=new Map,this.dataManager=null,this.knowledgeGraph=null,this.layers=new(a.ofType(x)),this.entityLinkChartDiagramLookup=new Map,this.relationshipLinkChartDiagramLookup=new Map,this.linkChartExtent=new g({xmin:-1e-7,ymin:-1e-7,xmax:1e-7,ymax:1e-7}),this.memberEntityTypes=null,this.memberRelationshipTypes=null,this.operationalLayerType="LinkChartLayer",this.sublayerIdsCache=new Map,this.tables=new(a.ofType(x)),this.type="link-chart",this.chronologicalAuxiliaryGraphics=null,this._originalInclusionList=e?.initializationInclusionModeDefinition,e?.dataPreloadedInLocalCache&&!e?.initializationInclusionModeDefinition)throw new i("knowledge-graph:linkchart-layer-constructor","If creating a link chart composite layer and configured that data is already loaded in the cache, you must specify an inclusion list so the Composite Layer knows what records belong to it");this.addHandles(d(()=>this.layers.concat(this.tables),(e,t)=>this._handleSublayersChange(e,t),p))}normalizeCtorArgs(e){if(!e)return{};const{url:t,title:a,dataPreloadedInLocalCache:i,initializationLinkChartConfig:n}=e;return{url:t,title:a,dataPreloadedInLocalCache:i,initializationLinkChartConfig:n}}_initializeLayerProperties(e){if(!this.title&&this.url){const e=this.url.split("/");this.title=e[e.length-2]}const t=new Set;let a=[],o=[];if(e.inclusionModeDefinition&&(!e.inclusionModeDefinition.namedTypeDefinitions||e.inclusionModeDefinition.namedTypeDefinitions.size<1))throw new i("knowledge-graph:composite-layer-constructor","If an explicit inclusion definition is defined, at least one namedTypeDefinition must also be defined");e.inclusionModeDefinition?.generateAllSublayers?(a=e.knowledgeGraph.dataModel.entityTypes??[],o=e.knowledgeGraph.dataModel.relationshipTypes??[]):e.inclusionModeDefinition?.namedTypeDefinitions&&e.inclusionModeDefinition?.namedTypeDefinitions.size>0?e.inclusionModeDefinition?.namedTypeDefinitions.forEach((i,s)=>{const r=this._graphTypeLookup.get(s);if(!r)return n.getLogger(this).warn(`A named type, ${s}, was in the inclusion list that wasn't in the data model and will be removed`),void e.inclusionModeDefinition?.namedTypeDefinitions.delete(s);"relationship"===r.type?t.has(s)||(t.add(s),o.push(r)):"entity"===r.type?t.has(s)||(t.add(s),a.push(r)):(n.getLogger(this).warn(`A named type, ${s}, was in the inclusion list that wasn't properly modeled and will be removed`),e.inclusionModeDefinition?.namedTypeDefinitions.delete(s))}):(a=e.knowledgeGraph.dataModel.entityTypes??[],o=e.knowledgeGraph.dataModel.relationshipTypes??[]);const s=new D({knowledgeGraph:e.knowledgeGraph,inclusionModeDefinition:e.inclusionModeDefinition});this.knowledgeGraph=e.knowledgeGraph,this.memberEntityTypes=a,this.memberRelationshipTypes=o,this.dataManager=s}load(e){const a=async()=>{const e=[],t=[];this.loadLayerAssumingLocalCache(),this._layersLoadedFromAuthoritativeItem()||await v(this),this.dataManager.inclusionModeDefinition&&(this.dataManager.inclusionModeDefinition.generateAllSublayers=!1),this.dataManager.inclusionModeDefinition?.namedTypeDefinitions.forEach(e=>{e.useAllData=!1}),await this._initializeDiagram(),this.layers.forEach(a=>{t.push(a.refreshCachedQueryEngine()),e.push(new Promise(e=>{a.on("layerview-create",()=>{e(null)})}))}),this.tables.forEach(e=>{t.push(e.refreshCachedQueryEngine())}),await Promise.all(t)};return this.addResolvingPromise(new Promise(i=>{W(this.url).then(async n=>{n.dataModel.entityTypes?.forEach(e=>{e.name&&this._graphTypeLookup.set(e.name,e)}),n.dataModel.relationshipTypes?.forEach(e=>{e.name&&this._graphTypeLookup.set(e.name,e)});const s=this.linkChart?.linkChartProperties;if(6===s?.originIdOf("entitiesUrl")&&(this.membershipModified=!1,this._originalInclusionList=await t.fetchAndConvertSerializedLinkChart({entitiesUrl:s?.entitiesUrl,relationshipsUrl:s?.relationshipsUrl}),this._alignLayersDataModelAndInclusionDefinition(n.dataModel),this.initializationLinkChartConfig={layoutSettings:s?.layoutSettings??void 0,layoutMode:E(s.layoutType)}),this._initializeLayerProperties({knowledgeGraph:n,inclusionModeDefinition:this._originalInclusionList}),this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.size||(this.dataManager.inclusionModeDefinition={generateAllSublayers:!1,namedTypeDefinitions:new Map},this.dataManager.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&this.dataManager.inclusionModeDefinition?.namedTypeDefinitions.set(e.name,{useAllData:!0})}),this.dataManager.knowledgeGraph.dataModel.relationshipTypes?.forEach(e=>{e.name&&this.dataManager.inclusionModeDefinition?.namedTypeDefinitions.set(e.name,{useAllData:!0})})),this.dataPreloadedInLocalCache){const e=I.getInstance();for(const[t,a]of this.dataManager.inclusionModeDefinition?.namedTypeDefinitions??[])for(const i of a.members?.values()??[]){const a=e.readFromStoreById(`${t}__${i.id}`);if(a){o(this.dataManager.sublayerCaches,t,()=>new Map).set(i.id,a)}}await a()}else{const t="geographic-organic-standard"===this.initializationLinkChartConfig?.layoutMode;this.addResolvingPromise(this.dataManager.refreshCacheContent(void 0,!1,t,!0).then(async()=>{r(e),await a()}))}i(null)})})),Promise.resolve(this)}set initializationInclusionModeDefinition(e){"loaded"!==this.loadStatus&&"failed"!==this.loadStatus?this._set("initializationInclusionModeDefinition",e):n.getLogger(this).error("#initializationInclusionModeDefinition","initializationInclusionModeDefinition cannot be changed after the layer is loaded.")}get linkChart(){return this.parent}async addRecords(e,t){let a=[];t?.cascadeAddRelationshipEndNodes&&this.dataManager.knowledgeGraph.dataModel&&(a=await S(e,this.dataManager.knowledgeGraph));const i=e.concat(a).filter(e=>!this.sublayerIdsCache.get(e.typeName)?.has(e.id));i.length>0&&(this.membershipModified=!0),await this._handleNewRecords(i,t)}async createSublayerForNamedType(e){await this.load();const t=this._graphTypeLookup.get(e);if(!t)throw new i("knowledge-graph:missing-type","The specified type does not exist in the knowledge graph.");if(this.dataManager.sublayerCaches.has(e))throw new i("knowledge-graph:duplicate-type","The specified type already exists as a sublayer.");this.dataManager.sublayerCaches.set(e,new Map),o(this.sublayerIdsCache,e,()=>new Set);const a=this._createSublayer(t);return"entity"===t.type?this.dataManager.entityTypeNames.add(e):this.dataManager.relationshipTypeNames.add(e),this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.set(e,{useAllData:!1,members:new Map}),a.geometryType?this.layers.push(a):this.tables.push(a),await v(this,[e]),this._refreshNamedTypes(),a}async removeRecords(e,{cascadeRemoveRelationships:t=!0,recalculateLayout:a=!1,overrideMembershipCheck:i=!1}={cascadeRemoveRelationships:!0,recalculateLayout:!1,overrideMembershipCheck:!1}){let n=[];for(const r of e)(i||!1===this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.get(r.typeName)?.useAllData&&this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.get(r.typeName)?.members?.has(r.id))&&n.push(r);if(t){const e=new Set,t=[];for(const a of n)if(this.dataManager.nodeConnectionsLookup.has(a.id))for(const t of this.dataManager.nodeConnectionsLookup.get(a.id))e.add(t);for(const a of e)if(this.dataManager.memberIdTypeLookup.has(a))for(const e of this.dataManager.memberIdTypeLookup.get(a))this.dataManager.relationshipTypeNames.has(e)&&t.push({id:a,typeName:e});n=n.concat(t)}this.dataManager.removeFromLayer(n);for(const r of n)this.sublayerIdsCache.get(r.typeName)?.delete(r.id),this.dataManager.relationshipTypeNames.has(r.typeName)?this.relationshipLinkChartDiagramLookup.delete(r.id):this.entityLinkChartDiagramLookup.delete(r.id);const o=a?void 0:this.getCurrentNodeLocations();await this._calculateLayoutWithSublayerTimeInfo(this._currentLinkChartConfig.layoutMode,{layoutSettings:this._currentLinkChartConfig.layoutSettings,lockedNodeLocations:o}),n.length>0&&(this.membershipModified=!0);const s=[];return this.layers.forEach(e=>{s.push(e.refreshCachedQueryEngine())}),await Promise.all(s),this._refreshNamedTypes(),n}async expand(e,t){let a=[];try{const i=await this.dataManager.getConnectedRecordIds(e,t?.relationshipTypeNames,t);a=i.filter(e=>!this.sublayerIdsCache.get(e.typeName)?.has(e.id)),await this._handleNewRecords(a,t),i.length>0&&(this.membershipModified=!0),r(t?.signal)}catch(i){throw l(i)&&a.length>0&&await this.removeRecords(a,{overrideMembershipCheck:!0}),i}return{records:a}}loadLayerAssumingLocalCache(){const e=[...this.memberRelationshipTypes,...this.memberEntityTypes];this.layers.length||0===this.originIdOf("tables")?0===this.originIdOf("layers")?this._createSublayers(e,this.layers,e=>!!e.geometryType):this._updateSublayers(e,this.layers):this.layers=new a,this.tables.length||0===this.originIdOf("layers")?0===this.originIdOf("tables")?this._createSublayers(e,this.tables,e=>!e.geometryType):this._updateSublayers(e,this.tables):this.tables=new a,this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.forEach((e,t)=>{const a=o(this.sublayerIdsCache,t,()=>new Set);e.members?.forEach(({id:e,linkChartLocation:i})=>{if(a.add(e),i){const a="coords"in i&&"lengths"in i?i:L(i);this.dataManager.relationshipTypeNames.has(t)?this.relationshipLinkChartDiagramLookup.set(e,a):this.entityLinkChartDiagramLookup.set(e,a)}})})}async calculateLinkChartLayout(e="organic-standard",t){const a=[],s=[],l=[];this.dataManager.sublayerCaches.forEach((e,t)=>{this.dataManager.entityTypeNames.has(t)?e.forEach(e=>{a.push({typeName:t,feature:e})}):this.dataManager.relationshipTypeNames.has(t)&&e.forEach(e=>{s.push({typeName:t,feature:e})})}),this.entityLinkChartDiagramLookup=new Map,this.relationshipLinkChartDiagramLookup=new Map;const d=new Map,p=new Map,c=new Map,u=new Map,y=new Uint8Array(a.length),w=new Float64Array(a.length),N=new Float64Array(a.length),D=new Float64Array(a.length),x=new Float64Array(a.length),v=new Uint32Array(s.length),I=new Uint32Array(s.length),E=new Float64Array(s.length),S=new Float64Array(s.length),_=[],A="organic-standard";let R=!1;const j=new g({xmin:-1e-7,ymin:-1e-7,xmax:1e-7,ymax:1e-7});let W,$="organic-standard",H=0,K=0;const V=G.apply;switch($="geographic-organic-standard"===e?A:e,$){case"organic-standard":W=U.apply;break;case"organic-community":W=B.apply;break;case"hierarchical-bottom-to-top":W=F.apply;break;case"radial-root-centric":W=O.apply;break;case"tree-left-to-right":W=P.apply;break;default:W=z.apply}let q=!1;a.forEach(({typeName:a,feature:i})=>{if("chronological-mono-timeline"!==e&&"chronological-multi-timeline"!==e&&t?.lockedNodeLocations?.has(i.attributes[b])){"geographic-organic-standard"===e&&this.dataManager.geographicLookup.has(a)?y[H]=2:y[H]=0;const n=t.lockedNodeLocations.get(i.attributes[b]);w[H]=n.x,N[H]=n.y}else if("geographic-organic-standard"===e&&this.dataManager.geographicLookup.has(a)){y[H]=2;let e=null;const t=i.attributes[this.dataManager.geographicLookup.get(a).name],n=this.dataManager.geographicLookup.get(a)?.geometryType;switch(n){case"esriGeometryPoint":w[H]=t?.x,N[H]=t?.y;break;case"esriGeometryPolygon":e=t?.centroid,null!=e?.x&&null!=e?.y?(w[H]=e.x,N[H]=e.y):y[H]=1;break;case"esriGeometryPolyline":case"esriGeometryMultipoint":e=t?.extent?.center,null!=e?.x&&null!=e?.y?(w[H]=e.x,N[H]=e.y):y[H]=1;break;default:y[H]=1}(null==w[H]||null==N[H]||Number.isNaN(w[H])||Number.isNaN(N[H]))&&(y[H]=1,w[H]=0,N[H]=0)}else if("chronological-mono-timeline"===e||"chronological-multi-timeline"===e){!q&&t?.lockedNodeLocations?.has(i.attributes[b])&&(q=!0);const e=t?.timeInfoByTypeName?.get(a),n=e?.startField,o=n&&e?.startField?i.attributes[n]:null;D[H]=o?new Date(o).getTime():NaN;const s=e?.endField,r=s&&e?.endField?i.attributes[s]:null;x[H]=r?new Date(r).getTime():NaN,w[H]=0,N[H]=0,y[H]=1}else y[H]=1,w[H]=0,N[H]=0;u.set(i.attributes[b],H),_[H]={feature:i,typeName:a},H++}),q&&n.getLogger(this).warn("Locked node locations are not supported for chronological layout at this time. Requested node locations were ignored");let J=!1;const X=new Map;s.forEach(a=>{const i=a.feature.attributes[M],n=a.feature.attributes[k],o=u.get(i),s=u.get(n),r=t?.timeInfoByTypeName?.get(a.typeName),h=t?.timeInfoByTypeName?r?.startField:null,d=h?a.feature.attributes[h]:null,p=r?.endField,c=p?a.feature.attributes[p]:null;if(void 0!==o&&void 0!==s){let t=i+"-"+n;"chronological-mono-timeline"!==e&&"chronological-multi-timeline"!==e||(t=t+"-"+d+"-"+c);const r=X.get(t),h=r?.has(a.typeName);h||(v[K]=o,I[K]=s,"chronological-mono-timeline"!==e&&"chronological-multi-timeline"!==e||(E[K]=d?new Date(d).getTime():NaN,S[K]=c?new Date(c).getTime():NaN),void 0===r?X.set(t,new Map([[a.typeName,K]])):r.set(a.typeName,K),K++),l.push(a)}else J=!0,this.relationshipLinkChartDiagramLookup.set(i,null)}),J&&n.getLogger(this).warn("A relationship is a member of this layer that has either origin or destination entity nodes that are not members. The diagram geometry will be set to null");const Y=this._validateOrganicLayoutSettings(e,t?.layoutSettings?.organicLayoutSettings),Z=this._convertValidatedOrganicSettingsToCalculationSettings(Y);await Q();let ee=1,te=null;if("chronological-mono-timeline"===e||"chronological-multi-timeline"===e){let a;({status:ee,links:te,graphics:a}=V(()=>t?.signal?.aborted??!1,y,w,N,D,x,v.subarray(0,K),I.subarray(0,K),E.subarray(0,K),S.subarray(0,K),"chronological-multi-timeline"===e,t?.layoutSettings?.chronologicalLayoutSettings)),0===ee&&(this.chronologicalAuxiliaryGraphics=a)}else({status:ee,links:te}=W(()=>t?.signal?.aborted??!1,y,w,N,v.subarray(0,K),I.subarray(0,K),Z.computationBudgetTime,Z.idealEdgeLengthMultiplier,Z.repulsionRadiusMultiplier));if(r(t?.signal),1===ee)throw new i("knowledge-graph:layout-failed","Attempting to arrange the records in the specified layout failed");if(2===ee)throw h();for(let i=0;i<_.length;i++){if(N[i]>84.9999?N[i]=84.9999:N[i]<-84.9999&&(N[i]=-84.9999),w[i]>179.9999?w[i]=179.9999:w[i]<-179.9999&&(w[i]=-179.9999),_[i].feature.attributes[C]=new m(w[i],N[i]),d.has(_[i].typeName)){const e=d.get(_[i].typeName);e?.set(_[i].feature.attributes[b],_[i].feature)}else{const e=new Map;e.set(_[i].feature.attributes[b],_[i].feature),d.set(_[i].typeName,e)}c.set(_[i].feature.attributes[b],_[i].feature);const e=L(_[i].feature.attributes[C]);this.entityLinkChartDiagramLookup.set(_[i].feature.attributes[b],_[i].feature.attributes[C]?e:null);const t=o(this.dataManager.inclusionModeDefinition.namedTypeDefinitions,_[i].typeName,()=>({useAllData:!1,members:new Map}));o(t.members,_[i].feature.attributes[b],()=>({id:_[i].feature.attributes[b],linkChartLocation:void 0})).linkChartLocation=_[i].feature.attributes[C];const{x:a,y:n}=_[i].feature.attributes[C];if(R)j.xmin=Math.min(j.xmin,a),j.xmax=Math.max(j.xmax,a),j.ymin=Math.min(j.ymin,n),j.ymax=Math.max(j.ymax,n);else{const e=1e-7;j.xmin=a-e,j.xmax=a+e,j.ymin=n-e,j.ymax=n+e,R=!0}}if(this.linkChartExtent.xmin=j.xmin,this.linkChartExtent.xmax=j.xmax,this.linkChartExtent.ymin=j.ymin,this.linkChartExtent.ymax=j.ymax,!te)throw new i("knowledge-graph:layout-failed","Attempting to retrieve link geometry from diagram engine failed");const ae=new Map,ie=new Map,ne=new Map,oe=new Set;for(let i=0;i<l.length;i++){const a=[],s=l[i],r=s.feature.attributes[M],h=s.feature.attributes[k];let d=r+"-"+h;if("chronological-mono-timeline"===e||"chronological-multi-timeline"===e){const e=t?.timeInfoByTypeName?.get(s.typeName),a=t?.timeInfoByTypeName?e?.startField:null,i=a?s.feature.attributes[a]:null,n=e?.endField;d+="-"+i+"-"+(n?s.feature.attributes[n]:null)}const y=X.get(d).get(s.typeName),g=0===y?0:te?.vertexEndIndex[y-1];if(!oe.has(y)){if(oe.add(y),2===te.types[y]){const e=[te.vertices[2*g],te.vertices[2*g+1]],t=[te.vertices[2*(g+1)],te.vertices[2*(g+1)+1]],i=[.5*(e[0]+t[0]),.5*(e[1]+t[1])],n=[i[0]-e[0],i[1]-e[1]],o=[i[0]+n[1],i[1]-n[0]],s=[i[0]-n[1],i[1]+n[0]];a.push(e),a.push(o),a.push(t),a.push(s),a.push(e)}else{if(0!==te.types[y]){n.getLogger(this).warn("A relationship generated an unsupported link geometry type. It will not be rendered");continue}for(let e=g;e<te.vertexEndIndex[y];e++)a.push([te.vertices[2*e],te.vertices[2*e+1]])}if("chronological-mono-timeline"!==e&&"chronological-multi-timeline"!==e){const e=_[u.get(r)]?.feature.attributes[C],t=_[u.get(h)]?.feature.attributes[C];a[0][0]===e.x&&a[0][1]===e.y||(a[0]=[e.x,e.y]),a[a.length-1][0]===t.x&&a[a.length-1][1]===t.y||(a[a.length-1]=[t.x,t.y])}for(let e=1;e<a.length-1;e++)a[e][1]>85.5?a[e][1]=85.5:a[e][1]<-85.5&&(a[e][1]=-85.5),a[e][0]>179.9999?a[e][0]=179.9999:a[e][0]<-179.9999&&(a[e][0]=-179.9999);ae.has(d)?ae.get(d).push(a):ae.set(d,[a])}const m=ae.get(d);ie.has(d)||(ie.set(d,new Map),ne.set(d,new Map));const w=ie.get(d),T=ne.get(d);w.has(s.typeName)||(w.set(s.typeName,m.shift()),T.set(s.typeName,0));const N=w.get(s.typeName);T.set(s.typeName,T.get(s.typeName)+1);const D=new f({paths:[N]});if(s.feature.attributes[C]=D,p.has(s.typeName)){const e=p.get(s.typeName);e?.set(s.feature.attributes[b],s.feature)}else{const e=new Map;e.set(s.feature.attributes[b],s.feature),p.set(s.typeName,e)}c.set(s.feature.attributes[b],s.feature);const x=L(s.feature.attributes[C]);this.relationshipLinkChartDiagramLookup.set(s.feature.attributes[b],s.feature.attributes[C]?x:null);const v=o(this.dataManager.inclusionModeDefinition.namedTypeDefinitions,s.typeName,()=>({useAllData:!1,members:new Map}));o(v.members,s.feature.attributes[b],()=>({id:s.feature.attributes[b],linkChartLocation:void 0})).linkChartLocation=x}for(const i of l)i.feature.attributes[T]=ne.get(i.feature.attributes[M]+"-"+i.feature.attributes[k])?.get(i.typeName)??null;return this._currentLinkChartConfig={layoutMode:e,layoutSettings:t?.layoutSettings?.clone()},{nodes:d,links:p,idMap:c}}async applyNewLinkChartLayout(e="organic-standard",t){const a=[];await this._calculateLayoutWithSublayerTimeInfo(e,t),this.layers.forEach(e=>{a.push(e.refreshCachedQueryEngine())}),this.membershipModified=!0,await Promise.all(a),this._refreshNamedTypes()}getCurrentNodeLocations(){const e=new Map;for(const[t,a]of this.dataManager.inclusionModeDefinition?.namedTypeDefinitions.entries()??[])this.dataManager.relationshipTypeNames.has(t)||a?.members?.forEach(t=>{const a=t.linkChartLocation;let i;const n=t.id;a&&(i="x"in a?{x:a.x,y:a.y}:{x:a.coords[0],y:a.coords[1]},e.set(n,new m({x:i.x,y:i.y})))});return e}async refreshLinkChartCache(e){await this.dataManager.refreshCacheContent(e);const t=[];this.layers.forEach(e=>{t.push(e.refreshCachedQueryEngine())}),await Promise.all(t),this._refreshNamedTypes()}async connectBetweenEntities(e,t){if(!e.length)return{records:[]};let a=[];try{let i=[];for(const e of this.dataManager.relationshipTypeNames){const t=this.sublayerIdsCache.get(e);t&&(i=i.concat(Array.from(t.keys())))}a=await this.dataManager.getRelationshipsBetweenNodes(e,i,t),await this._handleNewRecords(a,t),r(t)}catch(i){throw l(i)&&this.removeRecords(a),i}return{records:a}}async connectFromEntities(e,t){if(!e.length)return{records:[]};let a=[];try{let i=[];for(const e of this.dataManager.relationshipTypeNames){const t=this.sublayerIdsCache.get(e);t&&(i=i.concat(Array.from(t.keys())))}let n=[];for(const e of this.dataManager.entityTypeNames){const t=this.sublayerIdsCache.get(e);t&&(n=n.concat(Array.from(t)))}a=await this.dataManager.getRelationshipsFromNodes(e,n,i,t),await this._handleNewRecords(a,t),a.length>0&&(this.membershipModified=!0),r(t)}catch(i){throw l(i)&&this.removeRecords(a),i}return{records:a}}getCurrentLayout(){return this._currentLinkChartConfig.layoutMode}async _calculateLayoutWithSublayerTimeInfo(e="organic-standard",t){const a=new Map;this.layers.forEach(e=>{a.set(e.objectType.name,e.timeInfo)}),await this.calculateLinkChartLayout(e,{timeInfoByTypeName:a,...t}),this.linkChart?.handleChronologicalOverlay()}async _handleNewRecords(e,t){const a=new Set,i=[],n=this.layers.concat(this.tables);for(const r of e){if(!this._graphTypeLookup.has(r.typeName))continue;!1===n.some(e=>e.objectType.name===r.typeName)&&(this.dataManager.sublayerCaches.set(r.typeName,new Map),a.add(r.typeName));o(this.sublayerIdsCache,r.typeName,()=>new Set).add(r.id),i.push(r)}this.dataManager.addToLayer(i);for(const o of a){const e=this._graphTypeLookup.get(o);if(e){const t=this._createSublayer(e);"entity"===e.type?this.dataManager.entityTypeNames.add(o):this.dataManager.relationshipTypeNames.add(o),t.geometryType?this.layers.push(t):this.tables.push(t)}}await v(this,Array.from(a),t),await this.dataManager.refreshCacheContent(e.map(e=>e.id),void 0,void 0,void 0,t);const s={layoutSettings:this._currentLinkChartConfig.layoutSettings,lockedNodeLocations:new Map};for(const[o,r]of this.entityLinkChartDiagramLookup.entries())r&&s.lockedNodeLocations.set(o,new m(r.coords[0],r.coords[1]));await this.applyNewLinkChartLayout(this._currentLinkChartConfig.layoutMode,s)}_createSublayers(e,t,a){e.forEach(e=>{const i=this._createSublayer(e);a(i)&&t.push(i),this._updateSublayerCaches(e)})}_updateSublayers(e,t){t.forEach(t=>{t.parentCompositeLayer=this;const a=e.find(e=>e.type===t.graphType&&e.name===t.graphTypeName);a&&(t.objectType=a,t.read({title:a.name},{origin:"service"}),this._updateSublayerCaches(a))})}_updateSublayerCaches({name:e}){if(!e)return;const t=this.dataManager.sublayerCaches;t.has(e)||t.set(e,new Map)}_layersLoadedFromAuthoritativeItem(){const e=this.originIdOf("layers");return e>=3&&e<7}async _initializeDiagram(){this.initializationLinkChartConfig?this.initializationLinkChartConfig.doNotRecalculateLayout?(this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.forEach((e,t)=>{e?.members?.forEach(e=>{const a=e.linkChartLocation;let i;const n=e.id;if(!a)return;i="x"in a?{x:a.x,y:a.y}:{x:a.coords[0],y:a.coords[1]};const o=L(i);this.dataManager.relationshipTypeNames.has(t)?this.relationshipLinkChartDiagramLookup.set(n,o):this.entityLinkChartDiagramLookup.set(n,o),this.linkChartExtent.xmin>i.x&&(this.linkChartExtent.xmin=i.x),this.linkChartExtent.xmax<i.x&&(this.linkChartExtent.xmax=i.x),this.linkChartExtent.ymin>i.y&&(this.linkChartExtent.ymin=i.y),this.linkChartExtent.ymax<i.y&&(this.linkChartExtent.ymax=i.y)})}),this.memberRelationshipTypes.forEach(e=>{e.name&&this.dataManager.sublayerCaches.get(e.name)?.forEach(e=>{const t=this.relationshipLinkChartDiagramLookup.get(e.attributes[M]),a=this.relationshipLinkChartDiagramLookup.get(e.attributes[k]);if(t&&a){const i=L(new f({paths:[[[t.coords[0],t.coords[1]],[a.coords[0],a.coords[1]]]]}));this.relationshipLinkChartDiagramLookup.set(e.attributes[b],i)}else this.relationshipLinkChartDiagramLookup.set(e.attributes[b],null)})})):await this._calculateLayoutWithSublayerTimeInfo(this.initializationLinkChartConfig.layoutMode,{lockedNodeLocations:this.getCurrentNodeLocations(),...this.initializationLinkChartConfig||{}}):await this._calculateLayoutWithSublayerTimeInfo("organic-standard",{lockedNodeLocations:this.getCurrentNodeLocations()})}_refreshNamedTypes(){for(const e of this.layers)e.emit("refresh",{dataChanged:!0});for(const e of this.tables)e.emit("refresh",{dataChanged:!0})}_validateOrganicLayoutSettings(e,t){const a=e=>"number"==typeof e&&!isNaN(e),i=e=>a(e)&&e>=1,o=e=>a(e)&&e>=1,s=e=>Object.values(N).includes(e),r=e=>a(e)&&e>=0,l={};if(!new Set(["organic-standard","organic-community","geographic-organic-standard","chronological-multi-timeline","chronological-mono-timeline"]).has(e)||!t)return l;const{computationBudgetTime:h,autoRepulsionRadius:d,repulsionRadiusMultiplier:p,absoluteIdealEdgeLength:c,multiplicativeIdealEdgeLength:u,idealEdgeLengthType:y}=t;return o(h)?l.computationBudgetTime=h:h&&n.getLogger(this).warn("Invalid layout computationBudgetTime setting, will revert to default setting"),l.autoRepulsionRadius=d,!d&&i(p)?l.repulsionRadiusMultiplier=p:d||(l.autoRepulsionRadius=!0,n.getLogger(this).warn("Invalid layout repulsionRadiusMultiplier setting, will revert to default setting")),"geographic-organic-standard"===e&&(s(y)?l.idealEdgeLengthType=y:void 0!==y&&n.getLogger(this).warn('Invalid layout idealEdgeLengthType setting, will revert to "multiplier" setting'),"absolute-value"===y&&r(c)?l.absoluteIdealEdgeLength=c:"absolute-value"===y&&void 0!==c?n.getLogger(this).warn("Invalid layout idealEdgeLength setting, will revert to default setting"):"multiplier"===y&&r(u)?l.multiplicativeIdealEdgeLength=u:"multiplier"===y&&void 0!==u&&n.getLogger(this).warn("Invalid layout idealEdgeLength setting, will revert to default setting")),l}_convertValidatedOrganicSettingsToCalculationSettings(e){let t=e.idealEdgeLengthType===N.ABSOLUTE?e.absoluteIdealEdgeLength:e.multiplicativeIdealEdgeLength;return e.idealEdgeLengthType===N.ABSOLUTE&&(void 0===t?t=-1:t*=-1),{computationBudgetTime:e.computationBudgetTime??void 0,repulsionRadiusMultiplier:e.repulsionRadiusMultiplier&&!e.autoRepulsionRadius?e.repulsionRadiusMultiplier:void 0,idealEdgeLengthMultiplier:t}}_createSublayer(e){return new x({objectType:e,parentCompositeLayer:this,graphType:e.type})}_handleSublayersChange(e,t){t&&(t.forEach(e=>{e.parent=null}),this.removeHandles("sublayers-owner")),e&&(e.forEach(e=>{e.parent=this}),this.addHandles([e.on("after-add",({item:e})=>{e.parent=this}),e.on("after-remove",({item:e})=>{e.parent=null})],"sublayers-owner"))}_alignLayersDataModelAndInclusionDefinition(e){const t=new Set((e.entityTypes??[]).map(e=>e.name).concat((e.relationshipTypes??[]).map(e=>e.name))),i=new Set((e.entityTypes??[]).map(e=>e.name)),o=new Set((e.relationshipTypes??[]).map(e=>e.name));if(this.layers){for(const a of this.layers)!a.graphType&&t.has(a.graphTypeName)&&(a.graphType=i.has(a.graphTypeName)?"entity":"relationship");const e=this.layers.filter(e=>t.has(e.graphTypeName)&&("entity"===e.graphType?i.has(e.graphTypeName):o.has(e.graphTypeName)));this.setAtOrigin("layers",e,y(this.originIdOf("layers")))}else this.layers=new a;if(this.layers&&this._originalInclusionList){const e=new Set(this._originalInclusionList.namedTypeDefinitions.keys()),t=this.tables?.map(e=>e.graphTypeName)??[],a=this.layers.map(e=>e.graphTypeName).concat(t);for(const n of a)e.has(n)||this._originalInclusionList.namedTypeDefinitions.set(n,{useAllData:!1,members:new Map});const i=[];for(const o of this._originalInclusionList.namedTypeDefinitions.keys())a.includes(o)||(n.getLogger(this).warn(`A named type, ${o}, was in the serialized feature collection but did not have a sublayer config in the item, so will be removed`),i.push(o));for(const n of i)this._originalInclusionList.namedTypeDefinitions.delete(n)}}};e([c(j)],$.prototype,"url",void 0),e([c()],$.prototype,"dataPreloadedInLocalCache",void 0),e([c()],$.prototype,"initializationLinkChartConfig",void 0),e([c()],$.prototype,"membershipModified",void 0),e([c()],$.prototype,"dataManager",void 0),e([c()],$.prototype,"initializationInclusionModeDefinition",null),e([c()],$.prototype,"knowledgeGraph",void 0),e([c({type:a.ofType(x),json:{write:{ignoreOrigin:!0}}})],$.prototype,"layers",void 0),e([c({readOnly:!0})],$.prototype,"linkChart",null),e([c()],$.prototype,"entityLinkChartDiagramLookup",void 0),e([c()],$.prototype,"relationshipLinkChartDiagramLookup",void 0),e([c()],$.prototype,"linkChartExtent",void 0),e([c()],$.prototype,"memberEntityTypes",void 0),e([c()],$.prototype,"memberRelationshipTypes",void 0),e([c({type:["LinkChartLayer"]})],$.prototype,"operationalLayerType",void 0),e([c()],$.prototype,"sublayerIdsCache",void 0),e([c({type:a.ofType(x),json:{write:{ignoreOrigin:!0}}})],$.prototype,"tables",void 0),e([c({json:{read:!1}})],$.prototype,"type",void 0),e([c({json:{read:!1}})],$.prototype,"chronologicalAuxiliaryGraphics",void 0),$=e([u("esri.layers.LinkChartLayer")],$);const H=$;export{H as default};
5
+ import{__decorate as e}from"tslib";import{serializationUtilsModuleWrapper as t}from"../applications/KnowledgeStudio/resourceSerializationUtils.js";import a from"../core/Collection.js";import i from"../core/Error.js";import n from"../core/Logger.js";import{getOrCreateMapValue as o}from"../core/MapUtils.js";import{MultiOriginJSONMixin as s}from"../core/MultiOriginJSONSupport.js";import{throwIfAborted as r,isAbortError as l,createAbortError as h}from"../core/promiseUtils.js";import{watch as d,sync as p}from"../core/reactiveUtils.js";import{property as c}from"../core/accessorSupport/decorators/property.js";import"../core/has.js";import"../core/RandomLCG.js";import{subclass as u}from"../core/accessorSupport/decorators/subclass.js";import{idToName as y}from"../core/accessorSupport/PropertyOrigin.js";import g from"../geometry/Extent.js";import m from"../geometry/Point.js";import f from"../geometry/Polyline.js";import w from"./Layer.js";import{convertFromGeometry as L}from"./graphics/featureConversionUtils.js";import{systemOidFieldName as b,systemOriginIdFieldName as M,systemDestinationIdFieldName as k,systemLayoutGeometryFieldName as C,systemAggregationCountFieldName as T}from"./knowledgeGraph/constants.js";import{IdealEdgeLengthTypeOptions as N}from"./knowledgeGraph/IdealEdgeLengthTypeOptions.js";import{KnowledgeGraphLayerDataManager as D}from"./knowledgeGraph/KnowledgeGraphLayerDataManager.js";import x from"./knowledgeGraph/KnowledgeGraphSublayer.js";import{initializeLayersFromClientData as v}from"./knowledgeGraph/layerUtils.js";import I from"./knowledgeGraph/SessionMemoryStorage.js";import{convertLayoutTypeToWebSupportedFormat as E,getRelationshipEndNodeIds as S}from"./knowledgeGraph/supportUtils.js";import{BlendLayer as _}from"./mixins/BlendLayer.js";import{OperationalLayer as A}from"./mixins/OperationalLayer.js";import{ScaleRangeLayer as R}from"./mixins/ScaleRangeLayer.js";import{url as j}from"./support/commonProperties.js";import{LCChronologicalLayout as G,LCSimpleLayout as z,LCSmartTreeLayout as P,LCRadialTreeLayout as O,LCHierarchicalLayout as F,LCCommunityLayout as B,LCForceDirectedLayout as U,load as Q}from"../libs/linkchartlayout/LinkChartLayout.js";import{fetchKnowledgeGraph as W}from"../rest/knowledgeGraphService.js";let $=class extends(A(_(R(s(w))))){constructor(e){if(super(e),this.url=null,this.dataPreloadedInLocalCache=!1,this.initializationLinkChartConfig=null,this.membershipModified=!0,this._currentLinkChartConfig={layoutMode:"organic-standard"},this._graphTypeLookup=new Map,this.dataManager=null,this.knowledgeGraph=null,this.layers=new(a.ofType(x)),this.entityLinkChartDiagramLookup=new Map,this.relationshipLinkChartDiagramLookup=new Map,this.linkChartExtent=new g({xmin:-1e-7,ymin:-1e-7,xmax:1e-7,ymax:1e-7}),this.memberEntityTypes=null,this.memberRelationshipTypes=null,this.operationalLayerType="LinkChartLayer",this.sublayerIdsCache=new Map,this.tables=new(a.ofType(x)),this.type="link-chart",this.chronologicalAuxiliaryGraphics=null,this._originalInclusionList=e?.initializationInclusionModeDefinition,e?.dataPreloadedInLocalCache&&!e?.initializationInclusionModeDefinition)throw new i("knowledge-graph:linkchart-layer-constructor","If creating a link chart composite layer and configured that data is already loaded in the cache, you must specify an inclusion list so the Composite Layer knows what records belong to it");this.addHandles(d(()=>this.layers.concat(this.tables),(e,t)=>this._handleSublayersChange(e,t),p))}normalizeCtorArgs(e){if(!e)return{};const{url:t,title:a,dataPreloadedInLocalCache:i,initializationLinkChartConfig:n}=e;return{url:t,title:a,dataPreloadedInLocalCache:i,initializationLinkChartConfig:n}}_initializeLayerProperties(e){if(!this.title&&this.url){const e=this.url.split("/");this.title=e[e.length-2]}const t=new Set;let a=[],o=[];if(e.inclusionModeDefinition&&(!e.inclusionModeDefinition.namedTypeDefinitions||e.inclusionModeDefinition.namedTypeDefinitions.size<1))throw new i("knowledge-graph:composite-layer-constructor","If an explicit inclusion definition is defined, at least one namedTypeDefinition must also be defined");e.inclusionModeDefinition?.generateAllSublayers?(a=e.knowledgeGraph.dataModel.entityTypes??[],o=e.knowledgeGraph.dataModel.relationshipTypes??[]):e.inclusionModeDefinition?.namedTypeDefinitions&&e.inclusionModeDefinition?.namedTypeDefinitions.size>0?e.inclusionModeDefinition?.namedTypeDefinitions.forEach((i,s)=>{const r=this._graphTypeLookup.get(s);if(!r)return n.getLogger(this).warn(`A named type, ${s}, was in the inclusion list that wasn't in the data model and will be removed`),void e.inclusionModeDefinition?.namedTypeDefinitions.delete(s);"relationship"===r.type?t.has(s)||(t.add(s),o.push(r)):"entity"===r.type?t.has(s)||(t.add(s),a.push(r)):(n.getLogger(this).warn(`A named type, ${s}, was in the inclusion list that wasn't properly modeled and will be removed`),e.inclusionModeDefinition?.namedTypeDefinitions.delete(s))}):(a=e.knowledgeGraph.dataModel.entityTypes??[],o=e.knowledgeGraph.dataModel.relationshipTypes??[]);const s=new D({knowledgeGraph:e.knowledgeGraph,inclusionModeDefinition:e.inclusionModeDefinition});this.knowledgeGraph=e.knowledgeGraph,this.memberEntityTypes=a,this.memberRelationshipTypes=o,this.dataManager=s}load(e){const a=async()=>{const e=[],t=[];this.loadLayerAssumingLocalCache(),this._layersLoadedFromAuthoritativeItem()||await v(this),this.dataManager.inclusionModeDefinition&&(this.dataManager.inclusionModeDefinition.generateAllSublayers=!1),this.dataManager.inclusionModeDefinition?.namedTypeDefinitions.forEach(e=>{e.useAllData=!1}),await this._initializeDiagram(),this.layers.forEach(a=>{t.push(a.refreshCachedQueryEngine()),e.push(new Promise(e=>{a.on("layerview-create",()=>{e(null)})}))}),this.tables.forEach(e=>{t.push(e.refreshCachedQueryEngine())}),await Promise.all(t)};return this.addResolvingPromise(new Promise(i=>{W(this.url).then(async n=>{n.dataModel.entityTypes?.forEach(e=>{e.name&&this._graphTypeLookup.set(e.name,e)}),n.dataModel.relationshipTypes?.forEach(e=>{e.name&&this._graphTypeLookup.set(e.name,e)});const s=this.linkChart?.linkChartProperties;if(6===s?.originIdOf("entitiesUrl")&&(this.membershipModified=!1,this._originalInclusionList=await t.fetchAndConvertSerializedLinkChart({entitiesUrl:s?.entitiesUrl,relationshipsUrl:s?.relationshipsUrl}),this._alignLayersDataModelAndInclusionDefinition(n.dataModel),this.initializationLinkChartConfig={layoutSettings:s?.layoutSettings??void 0,layoutMode:E(s.layoutType)}),this._initializeLayerProperties({knowledgeGraph:n,inclusionModeDefinition:this._originalInclusionList}),this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.size||(this.dataManager.inclusionModeDefinition={generateAllSublayers:!1,namedTypeDefinitions:new Map},this.dataManager.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&this.dataManager.inclusionModeDefinition?.namedTypeDefinitions.set(e.name,{useAllData:!0})}),this.dataManager.knowledgeGraph.dataModel.relationshipTypes?.forEach(e=>{e.name&&this.dataManager.inclusionModeDefinition?.namedTypeDefinitions.set(e.name,{useAllData:!0})})),this.dataPreloadedInLocalCache){const e=I.getInstance();for(const[t,a]of this.dataManager.inclusionModeDefinition?.namedTypeDefinitions??[])for(const i of a.members?.values()??[]){const a=e.readFromStoreById(`${t}__${i.id}`);if(a){o(this.dataManager.sublayerCaches,t,()=>new Map).set(i.id,a)}}await a()}else{const t="geographic-organic-standard"===this.initializationLinkChartConfig?.layoutMode;this.addResolvingPromise(this.dataManager.refreshCacheContent(void 0,!1,t,!0).then(async()=>{r(e),await a()}))}i(null)})})),Promise.resolve(this)}set initializationInclusionModeDefinition(e){"loaded"!==this.loadStatus&&"failed"!==this.loadStatus?this._set("initializationInclusionModeDefinition",e):n.getLogger(this).error("#initializationInclusionModeDefinition","initializationInclusionModeDefinition cannot be changed after the layer is loaded.")}get linkChart(){return this.parent}async addRecords(e,t){let a=[];t?.cascadeAddRelationshipEndNodes&&this.dataManager.knowledgeGraph.dataModel&&(a=await S(e,this.dataManager.knowledgeGraph));const i=e.concat(a).filter(e=>!this.sublayerIdsCache.get(e.typeName)?.has(e.id));i.length>0&&(this.membershipModified=!0),await this._handleNewRecords(i,t)}async createSublayerForNamedType(e){await this.load();const t=this._graphTypeLookup.get(e);if(!t)throw new i("knowledge-graph:missing-type","The specified type does not exist in the knowledge graph.");if(this.dataManager.sublayerCaches.has(e))throw new i("knowledge-graph:duplicate-type","The specified type already exists as a sublayer.");this.dataManager.sublayerCaches.set(e,new Map),o(this.sublayerIdsCache,e,()=>new Set);const a=this._createSublayer(t);return"entity"===t.type?this.dataManager.entityTypeNames.add(e):this.dataManager.relationshipTypeNames.add(e),this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.set(e,{useAllData:!1,members:new Map}),a.geometryType?this.layers.push(a):this.tables.push(a),await v(this,[e]),this._refreshNamedTypes(),a}async removeRecords(e,{cascadeRemoveRelationships:t=!0,recalculateLayout:a=!1,overrideMembershipCheck:i=!1}={cascadeRemoveRelationships:!0,recalculateLayout:!1,overrideMembershipCheck:!1}){let n=[];for(const r of e)(i||!1===this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.get(r.typeName)?.useAllData&&this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.get(r.typeName)?.members?.has(r.id))&&n.push(r);if(t){const e=new Set,t=[];for(const a of n)if(this.dataManager.nodeConnectionsLookup.has(a.id))for(const t of this.dataManager.nodeConnectionsLookup.get(a.id))e.add(t);for(const a of e)if(this.dataManager.memberIdTypeLookup.has(a))for(const e of this.dataManager.memberIdTypeLookup.get(a))this.dataManager.relationshipTypeNames.has(e)&&t.push({id:a,typeName:e});n=n.concat(t)}this.dataManager.removeFromLayer(n);for(const r of n)this.sublayerIdsCache.get(r.typeName)?.delete(r.id),this.dataManager.relationshipTypeNames.has(r.typeName)?this.relationshipLinkChartDiagramLookup.delete(r.id):this.entityLinkChartDiagramLookup.delete(r.id);const o=a?void 0:this.getCurrentNodeLocations();await this._calculateLayoutWithSublayerTimeInfo(this._currentLinkChartConfig.layoutMode,{layoutSettings:this._currentLinkChartConfig.layoutSettings,lockedNodeLocations:o}),n.length>0&&(this.membershipModified=!0);const s=[];return this.layers.forEach(e=>{s.push(e.refreshCachedQueryEngine())}),await Promise.all(s),this._refreshNamedTypes(),n}async expand(e,t){let a=[];try{const i=await this.dataManager.getConnectedRecordIds(e,t?.relationshipTypeNames,t);a=i.filter(e=>!this.sublayerIdsCache.get(e.typeName)?.has(e.id)),await this._handleNewRecords(a,t),i.length>0&&(this.membershipModified=!0),r(t?.signal)}catch(i){throw l(i)&&a.length>0&&await this.removeRecords(a,{overrideMembershipCheck:!0}),i}return{records:a}}loadLayerAssumingLocalCache(){const e=[...this.memberRelationshipTypes,...this.memberEntityTypes];this.layers.length||0===this.originIdOf("tables")?0===this.originIdOf("layers")?this._createSublayers(e,this.layers,e=>!!e.geometryType):this._updateSublayers(e,this.layers):this.layers=new a,this.tables.length||0===this.originIdOf("layers")?0===this.originIdOf("tables")?this._createSublayers(e,this.tables,e=>!e.geometryType):this._updateSublayers(e,this.tables):this.tables=new a,this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.forEach((e,t)=>{const a=o(this.sublayerIdsCache,t,()=>new Set);e.members?.forEach(({id:e,linkChartLocation:i})=>{if(a.add(e),i){const a="coords"in i&&"lengths"in i?i:L(i);this.dataManager.relationshipTypeNames.has(t)?this.relationshipLinkChartDiagramLookup.set(e,a):this.entityLinkChartDiagramLookup.set(e,a)}})})}async calculateLinkChartLayout(e="organic-standard",t){const a=[],s=[],l=[];this.dataManager.sublayerCaches.forEach((e,t)=>{this.dataManager.entityTypeNames.has(t)?e.forEach(e=>{a.push({typeName:t,feature:e})}):this.dataManager.relationshipTypeNames.has(t)&&e.forEach(e=>{s.push({typeName:t,feature:e})})}),this.entityLinkChartDiagramLookup=new Map,this.relationshipLinkChartDiagramLookup=new Map;const d=new Map,p=new Map,c=new Map,u=new Map,y=new Uint8Array(a.length),w=new Float64Array(a.length),N=new Float64Array(a.length),D=new Float64Array(a.length),x=new Float64Array(a.length),v=new Uint32Array(s.length),I=new Uint32Array(s.length),E=new Float64Array(s.length),S=new Float64Array(s.length),_=[],A="organic-standard";let R=!1;const j=new g({xmin:-1e-7,ymin:-1e-7,xmax:1e-7,ymax:1e-7});let W,$="organic-standard",H=0,K=0;const V=G.apply;switch($="geographic-organic-standard"===e?A:e,$){case"organic-standard":W=U.apply;break;case"organic-community":W=B.apply;break;case"hierarchical-bottom-to-top":W=F.apply;break;case"radial-root-centric":W=O.apply;break;case"tree-left-to-right":W=P.apply;break;default:W=z.apply}let q=!1;a.forEach(({typeName:a,feature:i})=>{if("chronological-mono-timeline"!==e&&"chronological-multi-timeline"!==e&&t?.lockedNodeLocations?.has(i.attributes[b])){"geographic-organic-standard"===e&&this.dataManager.geographicLookup.has(a)?y[H]=2:y[H]=0;const n=t.lockedNodeLocations.get(i.attributes[b]);w[H]=n.x,N[H]=n.y}else if("geographic-organic-standard"===e&&this.dataManager.geographicLookup.has(a)){y[H]=2;let e=null;const t=i.attributes[this.dataManager.geographicLookup.get(a).name],n=this.dataManager.geographicLookup.get(a)?.geometryType;switch(n){case"esriGeometryPoint":w[H]=t?.x,N[H]=t?.y;break;case"esriGeometryPolygon":e=t?.centroid,null!=e?.x&&null!=e?.y?(w[H]=e.x,N[H]=e.y):y[H]=1;break;case"esriGeometryPolyline":case"esriGeometryMultipoint":e=t?.extent?.center,null!=e?.x&&null!=e?.y?(w[H]=e.x,N[H]=e.y):y[H]=1;break;default:y[H]=1}(null==w[H]||null==N[H]||Number.isNaN(w[H])||Number.isNaN(N[H]))&&(y[H]=1,w[H]=0,N[H]=0)}else if("chronological-mono-timeline"===e||"chronological-multi-timeline"===e){!q&&t?.lockedNodeLocations?.has(i.attributes[b])&&(q=!0);const e=t?.timeInfoByTypeName?.get(a),n=e?.startField,o=n&&e?.startField?i.attributes[n]:null;D[H]=o?new Date(o).getTime():NaN;const s=e?.endField,r=s&&e?.endField?i.attributes[s]:null;x[H]=r?new Date(r).getTime():NaN,w[H]=0,N[H]=0,y[H]=1}else y[H]=1,w[H]=0,N[H]=0;u.set(i.attributes[b],H),_[H]={feature:i,typeName:a},H++}),q&&n.getLogger(this).warn("Locked node locations are not supported for chronological layout at this time. Requested node locations were ignored");let J=!1;const X=new Map;s.forEach(a=>{const i=a.feature.attributes[M],n=a.feature.attributes[k],o=u.get(i),s=u.get(n),r=t?.timeInfoByTypeName?.get(a.typeName),h=t?.timeInfoByTypeName?r?.startField:null,d=h?a.feature.attributes[h]:null,p=r?.endField,c=p?a.feature.attributes[p]:null;if(void 0!==o&&void 0!==s){let t=i+"-"+n;"chronological-mono-timeline"!==e&&"chronological-multi-timeline"!==e||(t=t+"-"+d+"-"+c);const r=X.get(t),h=r?.has(a.typeName);h||(v[K]=o,I[K]=s,"chronological-mono-timeline"!==e&&"chronological-multi-timeline"!==e||(E[K]=d?new Date(d).getTime():NaN,S[K]=c?new Date(c).getTime():NaN),void 0===r?X.set(t,new Map([[a.typeName,K]])):r.set(a.typeName,K),K++),l.push(a)}else J=!0,this.relationshipLinkChartDiagramLookup.set(i,null)}),J&&n.getLogger(this).warn("A relationship is a member of this layer that has either origin or destination entity nodes that are not members. The diagram geometry will be set to null");const Y=this._validateOrganicLayoutSettings(e,t?.layoutSettings?.organicLayoutSettings),Z=this._convertValidatedOrganicSettingsToCalculationSettings(Y);await Q();let ee=1,te=null;if("chronological-mono-timeline"===e||"chronological-multi-timeline"===e){let a;({status:ee,links:te,graphics:a}=V(()=>t?.signal?.aborted??!1,y,w,N,D,x,v.subarray(0,K),I.subarray(0,K),E.subarray(0,K),S.subarray(0,K),"chronological-multi-timeline"===e,t?.layoutSettings?.chronologicalLayoutSettings)),0===ee&&(this.chronologicalAuxiliaryGraphics=a)}else({status:ee,links:te}=W(()=>t?.signal?.aborted??!1,y,w,N,v.subarray(0,K),I.subarray(0,K),Z.computationBudgetTime,Z.idealEdgeLengthMultiplier,Z.repulsionRadiusMultiplier));if(r(t?.signal),1===ee)throw new i("knowledge-graph:layout-failed","Attempting to arrange the records in the specified layout failed");if(2===ee)throw h();for(let i=0;i<_.length;i++){if(N[i]>84.9999?N[i]=84.9999:N[i]<-84.9999&&(N[i]=-84.9999),w[i]>179.9999?w[i]=179.9999:w[i]<-179.9999&&(w[i]=-179.9999),_[i].feature.attributes[C]=new m(w[i],N[i]),d.has(_[i].typeName)){const e=d.get(_[i].typeName);e?.set(_[i].feature.attributes[b],_[i].feature)}else{const e=new Map;e.set(_[i].feature.attributes[b],_[i].feature),d.set(_[i].typeName,e)}c.set(_[i].feature.attributes[b],_[i].feature);const e=L(_[i].feature.attributes[C]);this.entityLinkChartDiagramLookup.set(_[i].feature.attributes[b],_[i].feature.attributes[C]?e:null);const t=o(this.dataManager.inclusionModeDefinition.namedTypeDefinitions,_[i].typeName,()=>({useAllData:!1,members:new Map}));o(t.members,_[i].feature.attributes[b],()=>({id:_[i].feature.attributes[b],linkChartLocation:void 0})).linkChartLocation=_[i].feature.attributes[C];const{x:a,y:n}=_[i].feature.attributes[C];if(R)j.xmin=Math.min(j.xmin,a),j.xmax=Math.max(j.xmax,a),j.ymin=Math.min(j.ymin,n),j.ymax=Math.max(j.ymax,n);else{const e=1e-7;j.xmin=a-e,j.xmax=a+e,j.ymin=n-e,j.ymax=n+e,R=!0}}if(this.linkChartExtent.xmin=j.xmin,this.linkChartExtent.xmax=j.xmax,this.linkChartExtent.ymin=j.ymin,this.linkChartExtent.ymax=j.ymax,!te)throw new i("knowledge-graph:layout-failed","Attempting to retrieve link geometry from diagram engine failed");const ae=new Map,ie=new Map,ne=new Map,oe=new Set;for(let i=0;i<l.length;i++){const a=[],s=l[i],r=s.feature.attributes[M],h=s.feature.attributes[k];let d=r+"-"+h;if("chronological-mono-timeline"===e||"chronological-multi-timeline"===e){const e=t?.timeInfoByTypeName?.get(s.typeName),a=t?.timeInfoByTypeName?e?.startField:null,i=a?s.feature.attributes[a]:null,n=e?.endField;d+="-"+i+"-"+(n?s.feature.attributes[n]:null)}const y=X.get(d).get(s.typeName),g=0===y?0:te?.vertexEndIndex[y-1];if(!oe.has(y)){if(oe.add(y),2===te.types[y]){const e=[te.vertices[2*g],te.vertices[2*g+1]],t=[te.vertices[2*(g+1)],te.vertices[2*(g+1)+1]],i=[.5*(e[0]+t[0]),.5*(e[1]+t[1])],n=[i[0]-e[0],i[1]-e[1]],o=[i[0]+n[1],i[1]-n[0]],s=[i[0]-n[1],i[1]+n[0]];a.push(e),a.push(o),a.push(t),a.push(s),a.push(e)}else{if(0!==te.types[y]){n.getLogger(this).warn("A relationship generated an unsupported link geometry type. It will not be rendered");continue}for(let e=g;e<te.vertexEndIndex[y];e++)a.push([te.vertices[2*e],te.vertices[2*e+1]])}if("chronological-mono-timeline"!==e&&"chronological-multi-timeline"!==e){const e=_[u.get(r)]?.feature.attributes[C],t=_[u.get(h)]?.feature.attributes[C];a[0][0]===e.x&&a[0][1]===e.y||(a[0]=[e.x,e.y]),a[a.length-1][0]===t.x&&a[a.length-1][1]===t.y||(a[a.length-1]=[t.x,t.y])}for(let e=1;e<a.length-1;e++)a[e][1]>85.5?a[e][1]=85.5:a[e][1]<-85.5&&(a[e][1]=-85.5),a[e][0]>179.9999?a[e][0]=179.9999:a[e][0]<-179.9999&&(a[e][0]=-179.9999);ae.has(d)?ae.get(d).push(a):ae.set(d,[a])}const m=ae.get(d);ie.has(d)||(ie.set(d,new Map),ne.set(d,new Map));const w=ie.get(d),T=ne.get(d);w.has(s.typeName)||(w.set(s.typeName,m.shift()),T.set(s.typeName,0));const N=w.get(s.typeName);T.set(s.typeName,T.get(s.typeName)+1);const D=new f({paths:[N]});if(s.feature.attributes[C]=D,p.has(s.typeName)){const e=p.get(s.typeName);e?.set(s.feature.attributes[b],s.feature)}else{const e=new Map;e.set(s.feature.attributes[b],s.feature),p.set(s.typeName,e)}c.set(s.feature.attributes[b],s.feature);const x=L(s.feature.attributes[C]);this.relationshipLinkChartDiagramLookup.set(s.feature.attributes[b],s.feature.attributes[C]?x:null);const v=o(this.dataManager.inclusionModeDefinition.namedTypeDefinitions,s.typeName,()=>({useAllData:!1,members:new Map}));o(v.members,s.feature.attributes[b],()=>({id:s.feature.attributes[b],linkChartLocation:void 0})).linkChartLocation=x}for(const i of l)i.feature.attributes[T]=ne.get(i.feature.attributes[M]+"-"+i.feature.attributes[k])?.get(i.typeName)??null;return this._currentLinkChartConfig={layoutMode:e,layoutSettings:t?.layoutSettings?.clone()},{nodes:d,links:p,idMap:c}}async applyNewLinkChartLayout(e="organic-standard",t){const a=[];await this._calculateLayoutWithSublayerTimeInfo(e,t),this.layers.forEach(e=>{a.push(e.refreshCachedQueryEngine())}),this.membershipModified=!0,await Promise.all(a),this._refreshNamedTypes()}getCurrentNodeLocations(){const e=new Map;for(const[t,a]of this.dataManager.inclusionModeDefinition?.namedTypeDefinitions.entries()??[])this.dataManager.relationshipTypeNames.has(t)||a?.members?.forEach(t=>{const a=t.linkChartLocation;let i;const n=t.id;a&&(i="x"in a?{x:a.x,y:a.y}:{x:a.coords[0],y:a.coords[1]},e.set(n,new m({x:i.x,y:i.y})))});return e}async refreshLinkChartCache(e){await this.dataManager.refreshCacheContent(e);const t=[];this.layers.forEach(e=>{t.push(e.refreshCachedQueryEngine())}),await Promise.all(t),this._refreshNamedTypes()}async connectBetweenEntities(e,t){if(!e.length)return{records:[]};let a=[];try{let i=[];for(const e of this.dataManager.relationshipTypeNames){const t=this.sublayerIdsCache.get(e);t&&(i=i.concat(Array.from(t.keys())))}a=await this.dataManager.getRelationshipsBetweenNodes(e,i,t),await this._handleNewRecords(a,t),r(t)}catch(i){throw l(i)&&this.removeRecords(a),i}return{records:a}}async connectFromEntities(e,t){if(!e.length)return{records:[]};let a=[];try{let i=[];for(const e of this.dataManager.relationshipTypeNames){const t=this.sublayerIdsCache.get(e);t&&(i=i.concat(Array.from(t.keys())))}let n=[];for(const e of this.dataManager.entityTypeNames){const t=this.sublayerIdsCache.get(e);t&&(n=n.concat(Array.from(t)))}a=await this.dataManager.getRelationshipsFromNodes(e,n,i,t),await this._handleNewRecords(a,t),a.length>0&&(this.membershipModified=!0),r(t)}catch(i){throw l(i)&&this.removeRecords(a),i}return{records:a}}getCurrentLayout(){return this._currentLinkChartConfig.layoutMode}async _calculateLayoutWithSublayerTimeInfo(e="organic-standard",t){const a=new Map;this.layers.forEach(e=>{a.set(e.objectType.name,e.timeInfo)}),await this.calculateLinkChartLayout(e,{timeInfoByTypeName:a,...t}),this.linkChart?.handleChronologicalOverlay()}async _handleNewRecords(e,t){const a=new Set,i=[],n=this.layers.concat(this.tables);for(const r of e){if(!this._graphTypeLookup.has(r.typeName))continue;!1===n.some(e=>e.objectType.name===r.typeName)&&(this.dataManager.sublayerCaches.set(r.typeName,new Map),a.add(r.typeName));o(this.sublayerIdsCache,r.typeName,()=>new Set).add(r.id),i.push(r)}this.dataManager.addToLayer(i);for(const o of a){const e=this._graphTypeLookup.get(o);if(e){const t=this._createSublayer(e);"entity"===e.type?this.dataManager.entityTypeNames.add(o):this.dataManager.relationshipTypeNames.add(o),t.geometryType?this.layers.push(t):this.tables.push(t)}}await v(this,Array.from(a),t),await this.dataManager.refreshCacheContent(e.map(e=>e.id),void 0,void 0,void 0,t);const s={layoutSettings:this._currentLinkChartConfig.layoutSettings,lockedNodeLocations:new Map};for(const[o,r]of this.entityLinkChartDiagramLookup.entries())r&&s.lockedNodeLocations.set(o,new m(r.coords[0],r.coords[1]));await this.applyNewLinkChartLayout(this._currentLinkChartConfig.layoutMode,s)}_createSublayers(e,t,a){e.forEach(e=>{const i=this._createSublayer(e);a(i)&&t.push(i),this._updateSublayerCaches(e)})}_updateSublayers(e,t){t.forEach(t=>{t.parentCompositeLayer=this;const a=e.find(e=>e.type===t.graphType&&e.name===t.graphTypeName);a&&(t.objectType=a,t.read({title:a.name},{origin:"service"}),this._updateSublayerCaches(a))})}_updateSublayerCaches({name:e}){if(!e)return;const t=this.dataManager.sublayerCaches;t.has(e)||t.set(e,new Map)}_layersLoadedFromAuthoritativeItem(){const e=this.originIdOf("layers");return e>=3&&e<7}async _initializeDiagram(){this.initializationLinkChartConfig?this.initializationLinkChartConfig.doNotRecalculateLayout?(this.dataManager.inclusionModeDefinition?.namedTypeDefinitions?.forEach((e,t)=>{e?.members?.forEach(e=>{const a=e.linkChartLocation;let i;const n=e.id;if(!a)return;i="x"in a?{x:a.x,y:a.y}:{x:a.coords[0],y:a.coords[1]};const o=L(i);this.dataManager.relationshipTypeNames.has(t)?this.relationshipLinkChartDiagramLookup.set(n,o):this.entityLinkChartDiagramLookup.set(n,o),this.linkChartExtent.xmin>i.x&&(this.linkChartExtent.xmin=i.x),this.linkChartExtent.xmax<i.x&&(this.linkChartExtent.xmax=i.x),this.linkChartExtent.ymin>i.y&&(this.linkChartExtent.ymin=i.y),this.linkChartExtent.ymax<i.y&&(this.linkChartExtent.ymax=i.y)})}),this.memberRelationshipTypes.forEach(e=>{e.name&&this.dataManager.sublayerCaches.get(e.name)?.forEach(e=>{const t=this.relationshipLinkChartDiagramLookup.get(e.attributes[M]),a=this.relationshipLinkChartDiagramLookup.get(e.attributes[k]);if(t&&a){const i=L(new f({paths:[[[t.coords[0],t.coords[1]],[a.coords[0],a.coords[1]]]]}));this.relationshipLinkChartDiagramLookup.set(e.attributes[b],i)}else this.relationshipLinkChartDiagramLookup.set(e.attributes[b],null)})})):await this._calculateLayoutWithSublayerTimeInfo(this.initializationLinkChartConfig.layoutMode,{lockedNodeLocations:this.getCurrentNodeLocations(),...this.initializationLinkChartConfig}):await this._calculateLayoutWithSublayerTimeInfo("organic-standard",{lockedNodeLocations:this.getCurrentNodeLocations()})}_refreshNamedTypes(){for(const e of this.layers)e.emit("refresh",{dataChanged:!0});for(const e of this.tables)e.emit("refresh",{dataChanged:!0})}_validateOrganicLayoutSettings(e,t){const a=e=>"number"==typeof e&&!isNaN(e),i=e=>a(e)&&e>=1,o=e=>a(e)&&e>=1,s=e=>Object.values(N).includes(e),r=e=>a(e)&&e>=0,l={};if(!new Set(["organic-standard","organic-community","geographic-organic-standard","chronological-multi-timeline","chronological-mono-timeline"]).has(e)||!t)return l;const{computationBudgetTime:h,autoRepulsionRadius:d,repulsionRadiusMultiplier:p,absoluteIdealEdgeLength:c,multiplicativeIdealEdgeLength:u,idealEdgeLengthType:y}=t;return o(h)?l.computationBudgetTime=h:h&&n.getLogger(this).warn("Invalid layout computationBudgetTime setting, will revert to default setting"),l.autoRepulsionRadius=d,!d&&i(p)?l.repulsionRadiusMultiplier=p:d||(l.autoRepulsionRadius=!0,n.getLogger(this).warn("Invalid layout repulsionRadiusMultiplier setting, will revert to default setting")),"geographic-organic-standard"===e&&(s(y)?l.idealEdgeLengthType=y:void 0!==y&&n.getLogger(this).warn('Invalid layout idealEdgeLengthType setting, will revert to "multiplier" setting'),"absolute-value"===y&&r(c)?l.absoluteIdealEdgeLength=c:"absolute-value"===y&&void 0!==c?n.getLogger(this).warn("Invalid layout idealEdgeLength setting, will revert to default setting"):"multiplier"===y&&r(u)?l.multiplicativeIdealEdgeLength=u:"multiplier"===y&&void 0!==u&&n.getLogger(this).warn("Invalid layout idealEdgeLength setting, will revert to default setting")),l}_convertValidatedOrganicSettingsToCalculationSettings(e){let t=e.idealEdgeLengthType===N.ABSOLUTE?e.absoluteIdealEdgeLength:e.multiplicativeIdealEdgeLength;return e.idealEdgeLengthType===N.ABSOLUTE&&(void 0===t?t=-1:t*=-1),{computationBudgetTime:e.computationBudgetTime??void 0,repulsionRadiusMultiplier:e.repulsionRadiusMultiplier&&!e.autoRepulsionRadius?e.repulsionRadiusMultiplier:void 0,idealEdgeLengthMultiplier:t}}_createSublayer(e){return new x({objectType:e,parentCompositeLayer:this,graphType:e.type})}_handleSublayersChange(e,t){t&&(t.forEach(e=>{e.parent=null}),this.removeHandles("sublayers-owner")),e&&(e.forEach(e=>{e.parent=this}),this.addHandles([e.on("after-add",({item:e})=>{e.parent=this}),e.on("after-remove",({item:e})=>{e.parent=null})],"sublayers-owner"))}_alignLayersDataModelAndInclusionDefinition(e){const t=new Set((e.entityTypes??[]).map(e=>e.name).concat((e.relationshipTypes??[]).map(e=>e.name))),i=new Set((e.entityTypes??[]).map(e=>e.name)),o=new Set((e.relationshipTypes??[]).map(e=>e.name));if(this.layers){for(const a of this.layers)!a.graphType&&t.has(a.graphTypeName)&&(a.graphType=i.has(a.graphTypeName)?"entity":"relationship");const e=this.layers.filter(e=>t.has(e.graphTypeName)&&("entity"===e.graphType?i.has(e.graphTypeName):o.has(e.graphTypeName)));this.setAtOrigin("layers",e,y(this.originIdOf("layers")))}else this.layers=new a;if(this.layers&&this._originalInclusionList){const e=new Set(this._originalInclusionList.namedTypeDefinitions.keys()),t=this.tables?.map(e=>e.graphTypeName)??[],a=this.layers.map(e=>e.graphTypeName).concat(t);for(const n of a)e.has(n)||this._originalInclusionList.namedTypeDefinitions.set(n,{useAllData:!1,members:new Map});const i=[];for(const o of this._originalInclusionList.namedTypeDefinitions.keys())a.includes(o)||(n.getLogger(this).warn(`A named type, ${o}, was in the serialized feature collection but did not have a sublayer config in the item, so will be removed`),i.push(o));for(const n of i)this._originalInclusionList.namedTypeDefinitions.delete(n)}}};e([c(j)],$.prototype,"url",void 0),e([c()],$.prototype,"dataPreloadedInLocalCache",void 0),e([c()],$.prototype,"initializationLinkChartConfig",void 0),e([c()],$.prototype,"membershipModified",void 0),e([c()],$.prototype,"dataManager",void 0),e([c()],$.prototype,"initializationInclusionModeDefinition",null),e([c()],$.prototype,"knowledgeGraph",void 0),e([c({type:a.ofType(x),json:{write:{ignoreOrigin:!0}}})],$.prototype,"layers",void 0),e([c({readOnly:!0})],$.prototype,"linkChart",null),e([c()],$.prototype,"entityLinkChartDiagramLookup",void 0),e([c()],$.prototype,"relationshipLinkChartDiagramLookup",void 0),e([c()],$.prototype,"linkChartExtent",void 0),e([c()],$.prototype,"memberEntityTypes",void 0),e([c()],$.prototype,"memberRelationshipTypes",void 0),e([c({type:["LinkChartLayer"]})],$.prototype,"operationalLayerType",void 0),e([c()],$.prototype,"sublayerIdsCache",void 0),e([c({type:a.ofType(x),json:{write:{ignoreOrigin:!0}}})],$.prototype,"tables",void 0),e([c({json:{read:!1}})],$.prototype,"type",void 0),e([c({json:{read:!1}})],$.prototype,"chronologicalAuxiliaryGraphics",void 0),$=e([u("esri.layers.LinkChartLayer")],$);const H=$;export{H as default};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
4
4
  */
5
- import e from"../../../core/Error.js";import t from"../../../core/Logger.js";import{isAbortError as r,waitTick as a}from"../../../core/promiseUtils.js";import o from"../../../geometry/Extent.js";import{projectWithZConversion as n}from"../../../geometry/projectionUtils.js";import{load as i,execute as s}from"../../../geometry/operators/projectOperator.js";import{fromExtent as c}from"../../../geometry/support/aaBoundingRect.js";import l from"../../ElevationLayer.js";import m from"../../ImageryLayer.js";import p from"../../ImageryTileLayer.js";import{getMetersPerUnitOfSR as u}from"../core/utils.js";import{TileElevationSampler as f}from"../../support/ElevationSampler.js";import{ElevationTile as y}from"../../support/ElevationTile.js";import{ElevationTileData as w}from"../../support/ElevationTileData.js";import g from"../../support/RasterFunction.js";import d from"../../support/TileInfo.js";import{TileKey as v}from"../../support/TileKey.js";import{identify as j}from"../../../rest/imageService.js";import R from"../../../rest/support/ImageIdentifyParameters.js";import{fetchArcGISServiceJSON as h}from"../../../support/requestPresets.js";import{logAndThrow as x}from"../../../widgets/OrientedImageryViewer/utils.js";async function E(t,r,a){if(!r.extent||!r.url)throw x("esri.layer.orientedImagery.transformations",new e("update-elevation:missing-property","both extent and url are required to create a sampler",r));const o=await L(r);if(!o)throw x("esri.layers.orientedImagery.transformations",new e("update-elevation:elevation-source","could not create a sampler using provided elevation source",r));return I(t,o,a)}async function I(e,t,r){await a(r);const o=S(t,r),n=Array.isArray(e)?e:[e];return await Promise.all(n.map(o))}const L=async(e,a)=>{let o;const{extent:n,rasterFunction:i,url:s,lod:c}=e;try{o=await q(s)}catch(l){if(r(l))return;t.getLogger("esri.layers.orientedImagery.transformations").error("updateElevationUsingElevationSource",l)}switch(o){case 0:return await P(s,n,i,a);case 1:return await z(s,n,c,a);default:return}};async function z(e,a,o,n){const i=new l(e);let s;try{const{tileInfo:e}=await i.load(),t=(o&&e.lodAt(Math.min(e.lods.length-1,o))?.resolution)??"finest-contiguous";s=await i.createElevationSampler(a,{...n,demResolution:t})}catch(c){if(r(c))return;t.getLogger(i).error(c)}finally{i.destroy()}return s}async function P(e,t,r,a){const n=r?new g({functionName:r}):void 0,l=new m({url:e,rasterFunction:n,format:"lerc"});await l.load(a);const p=512,u=t.center,j=Math.max(t.width,t.height);let R=new o({xmin:u.x-j/2,ymin:u.y-j/2,xmax:u.x+j/2,ymax:u.y+j/2,spatialReference:t.spatialReference});l.spatialReference.equals(R.spatialReference)||(await i(),R=s(R,l.spatialReference));const h=await l.fetchPixels(R,p,p,a),x=d.create({scales:[j/p],size:p,spatialReference:R.spatialReference}),E=new v(null,0,0,0,c(R)),I=new w(h.pixelBlock.pixels[0],p,p,0),L=new y(E,I);return new f(L,x,void 0)}async function q(t,r){await a(r);const o=await h(t),{tileInfo:n,cacheType:i}=o;if(!o.hasOwnProperty("bandCount")||!o.hasOwnProperty("pixelSizeX"))throw new e("elevation-source:invalid-service-url",`ElevationSource URL expects an elevation 3D image service but given ${t}`);return n?"LERC"!==n?.format?.toUpperCase()||i&&"elevation"!==i.toLowerCase()?2:1:0}function S(e,t){return async r=>{let a=r.clone();const o=r.spatialReference.equals(e.spatialReference)?a:await n(r,e.spatialReference,t),i=e.queryElevation(o);if(i){a=r.spatialReference.equals(e.spatialReference)?i.clone():await n(i,r.spatialReference,t)}return a.z=a.z??1,a}}async function T(e,t,r){return await a(r),e.map(e=>(e.z=t,e))}async function U(e,a,o){const{url:n,rasterFunction:i}=a;let s;try{s=await q(n,o)}catch(c){r(c)||t.getLogger("esri.layers.orientedImagery.transformations").error(c)}switch(s){case 1:case 0:{const t=await j(n,new R({geometry:e,rasterFunction:i?new g({functionName:i}):void 0}));if(t.value?.[0]){const r=e.clone();return r.z=+t.value[0],r}break}case 2:{const t=new p(n,o);await t.load();const r=await t.identify(e,o);if(r.value?.[0]){const t=e.clone();return t.z=+r.value[0],t}break}}return e}function b(e,t){const{averageGroundElevation:r,spatialReference:a}=t,o=u(a);return e.map(e=>{const t=e.clone();return t.z=r*o/e.spatialReference.metersPerUnit,t})}export{L as getElevationSampler,P as getElevationSamplerFromDynamicImageService,z as getElevationSamplerFromElevationLayer,b as updateUsingAverageGroundElevation,T as updateUsingConstant,I as updateUsingElevationSampler,E as updateUsingElevationSource,U as updateZfromService,q as validateElevationSourceURL};
5
+ import e from"../../../core/Error.js";import t from"../../../core/Logger.js";import{isAbortError as r,waitTick as a}from"../../../core/promiseUtils.js";import o from"../../../geometry/Extent.js";import{projectWithZConversion as n}from"../../../geometry/projectionUtils.js";import{load as i,execute as s}from"../../../geometry/operators/projectOperator.js";import{fromExtent as l}from"../../../geometry/support/aaBoundingRect.js";import c from"../../ElevationLayer.js";import p from"../../ImageryLayer.js";import{getMetersPerUnitOfSR as m}from"../core/utils.js";import{TileElevationSampler as u}from"../../support/ElevationSampler.js";import{ElevationTile as f}from"../../support/ElevationTile.js";import{ElevationTileData as y}from"../../support/ElevationTileData.js";import w from"../../support/RasterFunction.js";import d from"../../support/TileInfo.js";import{TileKey as g}from"../../support/TileKey.js";import{fetchArcGISServiceJSON as v}from"../../../support/requestPresets.js";import{logAndThrow as j}from"../../../widgets/OrientedImageryViewer/utils.js";async function R(t,r,a){if(!r.extent||!r.url)throw j("esri.layer.orientedImagery.transformations",new e("update-elevation:missing-property","both extent and url are required to create a sampler",r));const o=await x(r);if(!o)throw j("esri.layers.orientedImagery.transformations",new e("update-elevation:elevation-source","could not create a sampler using provided elevation source",r));return h(t,o,a)}async function h(e,t,r){await a(r);const o=q(t,r),n=Array.isArray(e)?e:[e];return await Promise.all(n.map(o))}const x=async(e,a)=>{let o;const{extent:n,rasterFunction:i,url:s,lod:l}=e;try{o=await L(s)}catch(c){if(r(c))return;t.getLogger("esri.layers.orientedImagery.transformations").error("updateElevationUsingElevationSource",c)}switch(o){case 0:return await I(s,n,i,a);case 1:return await E(s,n,l,a);default:return}};async function E(e,a,o,n){const i=new c(e);let s;try{const{tileInfo:e}=await i.load(),t=(o&&e.lodAt(Math.min(e.lods.length-1,o))?.resolution)??"finest-contiguous";s=await i.createElevationSampler(a,{...n,demResolution:t})}catch(l){if(r(l))return;t.getLogger(i).error(l)}finally{i.destroy()}return s}async function I(e,t,r,a){const n=r?new w({functionName:r}):void 0,c=new p({url:e,rasterFunction:n,format:"lerc"});await c.load(a);const m=512,v=t.center,j=Math.max(t.width,t.height);let R=new o({xmin:v.x-j/2,ymin:v.y-j/2,xmax:v.x+j/2,ymax:v.y+j/2,spatialReference:t.spatialReference});c.spatialReference.equals(R.spatialReference)||(await i(),R=s(R,c.spatialReference));const h=await c.fetchPixels(R,m,m,a),x=d.create({scales:[j/m],size:m,spatialReference:R.spatialReference}),E=new g(null,0,0,0,l(R)),I=new y(h.pixelBlock.pixels[0],m,m,0),L=new f(E,I);return new u(L,x,void 0)}async function L(t,r){await a(r);const o=await v(t),{tileInfo:n,cacheType:i}=o;if(!o.hasOwnProperty("bandCount")||!o.hasOwnProperty("pixelSizeX"))throw new e("elevation-source:invalid-service-url",`ElevationSource URL expects an elevation 3D image service but given ${t}`);return n?"LERC"!==n?.format?.toUpperCase()||i&&"elevation"!==i.toLowerCase()?2:1:0}function q(e,t){return async r=>{let a=r.clone();const o=r.spatialReference.equals(e.spatialReference)?a:await n(r,e.spatialReference,t),i=e.queryElevation(o);if(i){a=r.spatialReference.equals(e.spatialReference)?i.clone():await n(i,r.spatialReference,t)}return a.z=a.z??1,a}}async function z(e,t,r){return await a(r),e.map(e=>(e.z=t,e))}function P(e,t){const{averageGroundElevation:r,spatialReference:a}=t,o=m(a);return e.map(e=>{const t=e.clone();return t.z=r*o/e.spatialReference.metersPerUnit,t})}export{x as getElevationSampler,I as getElevationSamplerFromDynamicImageService,E as getElevationSamplerFromElevationLayer,P as updateUsingAverageGroundElevation,z as updateUsingConstant,h as updateUsingElevationSampler,R as updateUsingElevationSource,L as validateElevationSourceURL};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
4
4
  */
5
- import t from"../../../core/Error.js";import{rad2deg as n,deg2rad as a}from"../../../core/mathUtils.js";import{create as i}from"../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{create as e,fromValues as o}from"../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{fromArray as r}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{zeros as c}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{multiply as s,transpose as l}from"../../../core/libs/gl-matrix-2/math/mat3.js";import{invertOrIdentity as f,mul as u}from"../../../core/libs/gl-matrix-2/math/mat4.js";import{a as h,f as m}from"../../../chunks/vec32.js";import{isSerializable as p}from"../../../core/support/jsonUtils.js";import M from"../../../geometry/Point.js";import{projectWithZConversion as g}from"../../../geometry/projectionUtils.js";import{earth as v}from"../../../geometry/support/Ellipsoid.js";import{isWebMercator as d}from"../../../geometry/support/spatialReferenceUtils.js";import{a as x}from"../../../chunks/vec3.js";import{isConstantElevation as w,ConstantElevation as y,isElevationSource as b}from"../core/ElevationSourceDefinitions.js";import{getMetersPerUnitOfSR as j}from"../core/utils.js";import{getElevationSampler as O}from"./updateElevationUtils.js";import{isNumber as z}from"../../../support/guards.js";import{defaultImageSphereSize as F}from"../../../widgets/PanoramicViewer/constants.js";function E(t,n,a){const[i,o,r,c]=n,[s,l,h,m]=a;P(i,o,r,c);const p=P(s,l,h,m),M=R(i,o,r,c),g=R(s,l,h,m),v=f(e(),M),d=u(e(),v,g),[x,w,y,b]=V(t,d);return[x/b,w/b,p?0:y/b]}function P(t,n,a,i){return 0===t[2]&&0===n[2]&&0===a[2]&&0===i[2]&&(t[2]=n[2]=a[2]=i[2]=1,!0)}function S(t){return 0===t?1:t}function V(t,n){const[a,i,e]=t,o=[0,0,0,0];return o[0]=a*n[0]+i*n[1]+e*n[2]+n[3],o[1]=a*n[4]+i*n[5]+e*n[6]+n[7],o[2]=a*n[8]+i*n[9]+e*n[10]+n[11],o[3]=S(a*n[12]+i*n[13]+e*n[14]+n[15]),o}function R(t,n,a,i){const c=q(r([...i,1]),f(new Array(16),o(t[0],n[0],a[0],0,t[1],n[1],a[1],0,t[2],n[2],a[2],0,1,1,1,1))),s=c[0],l=c[1],u=c[2],h=e();return h[0]=s*t[0],h[1]=l*n[0],h[2]=u*a[0],h[3]=0,h[4]=s*t[1],h[5]=l*n[1],h[6]=u*a[1],h[7]=0,h[8]=s*t[2],h[9]=l*n[2],h[10]=u*a[2],h[11]=0,h[12]=s,h[13]=l,h[14]=u,h[15]=1,h}function D(t,n,a,i,e=c()){return e[0]=t[0]+n[0]*a,e[1]=t[1]+n[1]*a,e[2]=t[2]+n[2]*(a/i),e}function H(t,n,a){const i=c();return i[0]=t[0]*n,i[1]=t[1]*n,i[2]=t[2]*(n/a),i}function L(t,n){const[a,i,e]=t,o=c();return o[0]=a*n[0]+i*n[3]+e*n[6],o[1]=a*n[1]+i*n[4]+e*n[7],o[2]=a*n[2]+i*n[5]+e*n[8],o}function q(t,n){const[a,i,e,o]=t,r=new Array(4);return r[0]=a*n[0]+i*n[1]+e*n[2]+o*n[3],r[1]=a*n[4]+i*n[5]+e*n[6]+o*n[7],r[2]=a*n[8]+i*n[9]+e*n[10]+o*n[11],r[3]=a*n[12]+i*n[13]+e*n[14]+o*n[15],r}function N(n,e,o,r=!0){if(!Number.isFinite(n))throw new t("InvalidRotationAngle","Please specify a valid angle for rotation");const c=o*(r?a(n):n),s=Math.cos(c),l=Math.sin(c),f=i();switch(e){case 0:f[4]=s,f[5]=-l,f[7]=l,f[8]=s;break;case 1:f[0]=s,f[2]=l,f[6]=-l,f[8]=s;break;case 2:f[0]=s,f[1]=-l,f[3]=l,f[4]=s;break;default:throw new t("InvalidRotationAxis","Please specify either 0, 1 or 2 for X, Y or Z axis respectively")}return f}const k={HPR:[[2,-1],[0,1],[2,-1]],OPK:[[0,1],[1,1],[2,1]]};function A(n,a,e=!0){if(3!==n?.length||3!==a?.length)throw new t("InvalidRotationAngles","Please specify three angles with config for rotation");const o=i();for(let t=0;t<3;t++){const[i,r]=a[t],c=N(n[t],i,r,e);s(o,c,o)}return o}function I(t,n=!0){return A(t,k.OPK,n)}function U(t,n=!0){return A(t,k.HPR,n)}function C(t,n,i){const e=Math.sin(a(i)),o=Math.cos(a(i)),r=[[t,0],[t,n],[0,n]];r.forEach((t,n)=>{r[n]=[o*t[0]-e*t[1],e*t[0]+o*t[1]]});const c={xmin:Math.min(0,r[0][0],r[1][0],r[2][0]),xmax:Math.max(0,r[0][0],r[1][0],r[2][0]),ymin:Math.min(0,r[0][1],r[1][1],r[2][1]),ymax:Math.max(0,r[0][1],r[1][1],r[2][1])};return{hfov:Math.abs(c.xmax-c.xmin),vfov:Math.abs(c.ymax-c.ymin)}}function K(t,n){const i=a(t[1]),e=a(t[0]),o=t[2],[r,c,s,l]=n,f=a(r),u=a(c),h=s/Math.sqrt(1-l*Math.sin(f)**2),m=e-u,p=s/Math.sqrt(1-l*Math.sin(f)**2),M=l*(h*Math.sin(f)-p*Math.sin(i));return[(p+o)*Math.cos(i)*Math.sin(m),(p+o)*(Math.sin(i)*Math.cos(f)-Math.sin(f)*Math.cos(f)*Math.cos(m))+M*Math.cos(f),(p+o)*(Math.sin(i)*Math.sin(f)+Math.cos(f)*Math.cos(i)*Math.cos(m))-h+M*Math.sin(f)]}function T(t,i){const e=Number(t[0]),o=Number(t[1]),r=Number(t[2]),[c,s,l,f]=i,u=a(c),h=a(s),m=l/Math.sqrt(1-f*Math.sin(u)**2),p=e/m,M=o/m,g=r/m,v=Math.cos(u)-Math.sin(u)*M+Math.cos(u)*g,d=Math.sin(u)+Math.cos(u)*M+Math.sin(u)*g,x=Math.sqrt(v**2+p**2),w=f*m*Math.sin(u),y=(t,n=5)=>{if(0===n)return t;const a=y(t,n-1);return Math.atan(d/x-(w-f*(l/Math.sqrt(1-f*Math.sin(a)**2))*Math.sin(a))/(m*x))},b=y(u),j=Math.atan(e/(m*v))+h,O=n(b);return[n(j),O,e/(Math.cos(b)*Math.sin(j-h))-l/Math.sqrt(1-f*Math.sin(b)**2)]}function W(t,n,a){const i=360/n,e=180/a;return{heading:(t.x-n/2)*i,pitch:90-(t.y-a/2)*e}}function X(t,n,a,i=F/2){const{heading:e,pitch:o}=Z(t,i);return Y(e,o,n,a)}function Y(t,n,a,i){const e=t%360;return{x:a/2+(e<-180?e+360:e>180?e-360:e)/(360/a),y:i-n/(180/i),heading:t,pitch:n}}function Z(t,a){const i=n(Math.acos(-t.z/a));return{heading:n(Math.atan2(t.x,t.y)),pitch:i}}function G(t,n,i=F/2){return[i*(Math.sin(a(t))*Math.sin(a(n))),i*(Math.cos(a(t))*Math.sin(a(n))),i*Math.cos(a(180-n))]}function J(t,n,a,i=F/2){const{heading:e,pitch:o}=W(t,n,a);return G(e,o,i)}async function $(t,a,i){const e=await g(a,t.spatialReference,i);let o=n(Math.atan2(e.y-t.y,e.x-t.x));return o=o>=0&&o<=90?90-o:o>90&&o<=180?360-o+90:90+Math.abs(o),o}function B(t,n,a){const i=Math.cos(a),e=Math.sin(a),o=[1,0,0,1,0,0],r=o[0]*i+o[2]*e,c=o[1]*i+o[3]*e,s=-o[0]*e+o[2]*i,l=-o[1]*e+o[3]*i;o[0]=r,o[1]=c,o[2]=s,o[3]=l;return[t*o[0]+n*o[2]+o[4],t*o[1]+n*o[3]+o[5]]}const Q=t=>t.toArray(),_=(...t)=>t.some(t=>t);function tt(t,n){if(_(0===t.length,t.some(({x:t,y:n})=>_(null==t,null==n)),!n.hasZ))throw new Error("Input pixels must have x, y and camera location must have z value")}function nt(t,n){if(t.some(t=>null==t.z)||null==n.z)throw new Error("Input points and camera location must have z value")}function at(t){if(9!==t?.length)throw new Error("Rotation matrix is not provided or is not a valid 3x3 matrix")}function it(t,n){return d(n)?1/Math.cos(Math.PI/2-2*Math.atan(Math.exp(-1*t/v.radius))):1}const et=t=>n=>new M(n,t),ot=t=>null!=t&&"queryExtent"in t;function rt(t,n,a,i){return[[-n,-n],[+n,-n],[+n,+n],[-n,+n]].map(([n,e])=>E(x(c(),a,[n,e,0]),i,t))}function ct({a0:t,a1:n,a2:a,b0:i,b1:e,b2:o},r,c,s){const l=[t??r/2-.5,n,a??0,i??c/2-.5,e??0,o].map(st);return null!=s&&lt(l)?{affines:l,focalLength:s}:{affines:[r/2-.5,1,0,c/2-.5,0,-1]}}function st(t,n){if(null==t)return null;const a=parseFloat(`${t}`);return isNaN(a)?null:a}function lt(t){return null!=t[1]&&null!=t[5]}function ft(t,n,a){const{cameraHeight:i,cameraPitch:e,cameraRoll:o,elevation:r,farDistance:c,horizontalFieldOfView:s,location:l,verticalFieldOfView:f}=zt(t,t.location.spatialReference),u=r??(l.z??0)-i;return{...mt(t,n,a),averageElevation:u,cameraPitch:e,cameraRoll:o??0,farDistance:c,horizontalFieldOfView:s,verticalFieldOfView:f}}function ut(t,n,a,i){return yt(i)?I([i.omega,i.phi,i.kappa]):bt(i)?U([i.heading,i.pitch,i.roll]):U([t,n,a??0])}function ht(t,n,a){const{cameraHeading:i,cameraHeight:e,farDistance:o,horizontalFieldOfView:r,location:c,verticalFieldOfView:s}=zt(t,t.location.spatialReference);return{averageElevation:(c.z??0)-e,cameraLocation:c,cameraHeading:i,farDistance:o,horizontalFieldOfView:r,imageHeight:a,imageWidth:n,verticalFieldOfView:s}}function mt(t,n,a){const{a0:i,a1:e,a2:o,b0:r,b1:c,b2:s,cameraHeading:l,cameraOrientation:f,cameraPitch:u,cameraRoll:h,focalLength:m,horizontalFieldOfView:p,location:M,matrix:g,principalX:v,principalY:d,radial:x,tangential:w,verticalFieldOfView:y}=t,{affines:b,focalLength:j}=ct({a0:i,a1:e,a2:o,b0:r,b1:c,b2:s},n,a,m),O=g??ut(l,u,h,f),z=null!=v&&null!=d?[v,d]:void 0;return{affineTransformations:f?.affineTransformations??b,cameraLocation:M.clone(),focalLength:f?.focalLength??j,horizontalFieldOfView:p,imageHeight:a,imageWidth:n,principalOffsetPoint:f?.principalOffsetPoint??z,radialDistortionCoefficients:f?.radialDistortionCoefficients??x,rotationMatrix:O,tangentialDistortionCoefficients:f?.tangentialDistortionCoefficients??w,verticalFieldOfView:y}}const pt=t=>null!=t&&"elevationSample"in t&&null!=t.elevationSample,Mt=t=>b(t?.elevationSource)&&null!=t?.extent,gt=t=>w(t?.elevationSource),vt=async(t,n,a,i,e)=>{const o=j(t),r=n-a/o;return gt(i)?(i.elevationSource=new y({constantElevation:i.elevationSource.constantElevation/o}),i):pt(i)?i:Mt(i)?{elevationSample:await O({...p(i.elevationSource)?i.elevationSource.toJSON():i.elevationSource,extent:i.extent},e),elevationSource:new y({constantElevation:r})}:{averageGroundElevation:r,spatialReference:t}},dt=t=>z(t?.heading)&&z(t?.pitch),xt=(t,n)=>[[-t,-n],[t,-n],[t,n],[-t,n]];function wt(t){const{cameraLocation:n,farDistance:e,horizontalFieldOfView:o,rotationMatrix:r,scalingFactor:s,verticalFieldOfView:f}=t,u=i();l(u,r);const p=2*Math.tan(a(f)/2)*e*s,M=2*Math.tan(a(o)/2)*e*s,g=L([0,0,-1],u),v=D([n.x,n.y,n.z],g,t.farDistance*s,s),d=L([0,1,0],u),x=L([1,0,0],u),w=H(d,p/2,s),y=H(x,M/2,s),b=h(c(),w,y),j=m(c(),w,y);return[m(c(),v,b),m(c(),v,j),h(c(),v,b),h(c(),v,j)]}const yt=t=>2===t?.type,bt=t=>1===t?.type;function jt(t){const n=t%360;return n<-180?n+360:n}function Ot(t,n,a){if("panoramic"===t){const[t,i]=a;return X({x:n.x,y:n.y,z:n.z},t,i)}return{x:n.x+.5,y:.5-n.y}}function zt(t,n,a=!0){const i=j(n),e=a?t.clone():t;return e.cameraHeight/=i,e.farDistance/=i,e.nearDistance/=i,w(e.elevationSource)&&(e.elevationSource.constantElevation/=i),e}export{wt as computeFarplaneVertices,C as computeHFOVAndVFOV,rt as computeNewReferenceCoordinates,G as convertHeadingPitchToSphereVertex,Y as convertOrientationToPixelLocation,J as convertPixelLocationToSphereVertex,W as convertPixelToHeadingPitch,Z as convertSphereVertexToOrientation,X as convertSphereVertexToPixelLocation,zt as convertToSRUnits,A as createRotationMatrix,U as createRotationMatrixFromHPR,I as createRotationMatrixFromOPK,K as geographicToLTP,ct as getAffinesAndFocalLength,ht as getImageToWorldPanoramicProperties,ft as getImageToWorldProperties,$ as getInitialAngle,vt as getUpdateElevationProps,it as getWebMercatorScalingFactor,mt as getWorldToImageProperties,dt as hasAngles,bt as hasHeadingPitchRoll,yt as hasOmegaPhiKappa,ot as isElevationSampler,pt as isUpdateElevationWithElevationSampler,Mt as isUpdateElevationWithElevationSource,gt as isUpdateUsingConstantElevation,lt as isValidAffines,R as linearEquationSolve,T as ltpToGeographic,jt as normalizeHeading,_ as or,Q as pointToArray,E as projectiveTransform,xt as reducerFn,B as rotatePixel,D as scaleAndAddWithFactor,H as scaleWithFactor,Ot as transformGraphicCoordinatesToPixel,L as transformMat3,q as transformMat4,tt as validatePixelsToTransform,nt as validatePointsToTransform,at as validateRotationMatrix,et as vecToPoint};
5
+ import t from"../../../core/Error.js";import{rad2deg as n,deg2rad as a}from"../../../core/mathUtils.js";import{create as e}from"../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{create as i,fromValues as o}from"../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{fromArray as r}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{zeros as c}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{multiply as s,transpose as l}from"../../../core/libs/gl-matrix-2/math/mat3.js";import{invertOrIdentity as f,mul as u}from"../../../core/libs/gl-matrix-2/math/mat4.js";import{a as m,f as h}from"../../../chunks/vec32.js";import{isSerializable as p}from"../../../core/support/jsonUtils.js";import g from"../../../geometry/Point.js";import{projectWithZConversion as v}from"../../../geometry/projectionUtils.js";import{earth as M}from"../../../geometry/support/Ellipsoid.js";import{isWebMercator as d}from"../../../geometry/support/spatialReferenceUtils.js";import{a as x}from"../../../chunks/vec3.js";import{isConstantElevation as w,ConstantElevation as y,isElevationSource as b}from"../core/ElevationSourceDefinitions.js";import{getMetersPerUnitOfSR as j}from"../core/utils.js";import{getElevationSampler as O}from"./updateElevationUtils.js";import{isNumber as z}from"../../../support/guards.js";import{defaultImageSphereSize as F}from"../../../widgets/PanoramicViewer/constants.js";function E(t,n,a){const[e,o,r,c]=n,[s,l,m,h]=a;P(e,o,r,c);const p=P(s,l,m,h),g=R(e,o,r,c),v=R(s,l,m,h),M=f(i(),g),d=u(i(),M,v),[x,w,y,b]=V(t,d);return[x/b,w/b,p?0:y/b]}function P(t,n,a,e){return 0===t[2]&&0===n[2]&&0===a[2]&&0===e[2]&&(t[2]=n[2]=a[2]=e[2]=1,!0)}function S(t){return 0===t?1:t}function V(t,n){const[a,e,i]=t,o=[0,0,0,0];return o[0]=a*n[0]+e*n[1]+i*n[2]+n[3],o[1]=a*n[4]+e*n[5]+i*n[6]+n[7],o[2]=a*n[8]+e*n[9]+i*n[10]+n[11],o[3]=S(a*n[12]+e*n[13]+i*n[14]+n[15]),o}function R(t,n,a,e){const c=N(r([...e,1]),f(new Array(16),o(t[0],n[0],a[0],0,t[1],n[1],a[1],0,t[2],n[2],a[2],0,1,1,1,1))),s=c[0],l=c[1],u=c[2],m=i();return m[0]=s*t[0],m[1]=l*n[0],m[2]=u*a[0],m[3]=0,m[4]=s*t[1],m[5]=l*n[1],m[6]=u*a[1],m[7]=0,m[8]=s*t[2],m[9]=l*n[2],m[10]=u*a[2],m[11]=0,m[12]=s,m[13]=l,m[14]=u,m[15]=1,m}function D(t,n,a,e,i=c()){return i[0]=t[0]+n[0]*a,i[1]=t[1]+n[1]*a,i[2]=t[2]+n[2]*(a/e),i}function H(t,n,a){const e=c();return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*(n/a),e}function L(t,n){const[a,e,i]=t,o=c();return o[0]=a*n[0]+e*n[3]+i*n[6],o[1]=a*n[1]+e*n[4]+i*n[7],o[2]=a*n[2]+e*n[5]+i*n[8],o}function N(t,n){const[a,e,i,o]=t,r=new Array(4);return r[0]=a*n[0]+e*n[1]+i*n[2]+o*n[3],r[1]=a*n[4]+e*n[5]+i*n[6]+o*n[7],r[2]=a*n[8]+e*n[9]+i*n[10]+o*n[11],r[3]=a*n[12]+e*n[13]+i*n[14]+o*n[15],r}function k(n,i,o,r=!0){if(!Number.isFinite(n))throw new t("InvalidRotationAngle","Please specify a valid angle for rotation");const c=o*(r?a(n):n),s=Math.cos(c),l=Math.sin(c),f=e();switch(i){case 0:f[4]=s,f[5]=-l,f[7]=l,f[8]=s;break;case 1:f[0]=s,f[2]=l,f[6]=-l,f[8]=s;break;case 2:f[0]=s,f[1]=-l,f[3]=l,f[4]=s;break;default:throw new t("InvalidRotationAxis","Please specify either 0, 1 or 2 for X, Y or Z axis respectively")}return f}const A={HPR:[[2,-1],[0,1],[2,-1]],OPK:[[0,1],[1,1],[2,1]]};function I(n,a,i=!0){if(3!==n?.length||3!==a?.length)throw new t("InvalidRotationAngles","Please specify three angles with config for rotation");const o=e();for(let t=0;t<3;t++){const[e,r]=a[t],c=k(n[t],e,r,i);s(o,c,o)}return o}function q(t,n=!0){return I(t,A.OPK,n)}function U(t,n=!0){return I(t,A.HPR,n)}function C(t,n,e){const i=Math.sin(a(e)),o=Math.cos(a(e)),r=[[t,0],[t,n],[0,n]];r.forEach((t,n)=>{r[n]=[o*t[0]-i*t[1],i*t[0]+o*t[1]]});const c={xmin:Math.min(0,r[0][0],r[1][0],r[2][0]),xmax:Math.max(0,r[0][0],r[1][0],r[2][0]),ymin:Math.min(0,r[0][1],r[1][1],r[2][1]),ymax:Math.max(0,r[0][1],r[1][1],r[2][1])};return{hfov:Math.abs(c.xmax-c.xmin),vfov:Math.abs(c.ymax-c.ymin)}}function K(t,e){const i=Number(t[0]),o=Number(t[1]),r=Number(t[2]),[c,s,l,f]=e,u=a(c),m=a(s),h=l/Math.sqrt(1-f*Math.sin(u)**2),p=i/h,g=o/h,v=r/h,M=Math.cos(u)-Math.sin(u)*g+Math.cos(u)*v,d=Math.sin(u)+Math.cos(u)*g+Math.sin(u)*v,x=Math.sqrt(M**2+p**2),w=f*h*Math.sin(u),y=(t,n=5)=>{if(0===n)return t;const a=y(t,n-1);return Math.atan(d/x-(w-f*(l/Math.sqrt(1-f*Math.sin(a)**2))*Math.sin(a))/(h*x))},b=y(u),j=Math.atan(i/(h*M))+m,O=n(b);return[n(j),O,i/(Math.cos(b)*Math.sin(j-m))-l/Math.sqrt(1-f*Math.sin(b)**2)]}function T(t,n,a){const e=360/n,i=180/a;return{heading:(t.x-n/2)*e,pitch:90-(t.y-a/2)*i}}function W(t,n,a,e=F/2){const{heading:i,pitch:o}=Y(t,e);return X(i,o,n,a)}function X(t,n,a,e){const i=t%360;return{x:a/2+(i<-180?i+360:i>180?i-360:i)/(360/a),y:e-n/(180/e),heading:t,pitch:n}}function Y(t,a){const e=n(Math.acos(-t.z/a));return{heading:n(Math.atan2(t.x,t.y)),pitch:e}}function Z(t,n,e=F/2){return[e*(Math.sin(a(t))*Math.sin(a(n))),e*(Math.cos(a(t))*Math.sin(a(n))),e*Math.cos(a(180-n))]}function G(t,n,a,e=F/2){const{heading:i,pitch:o}=T(t,n,a);return Z(i,o,e)}async function J(t,a,e){const i=await v(a,t.spatialReference,e);let o=n(Math.atan2(i.y-t.y,i.x-t.x));return o=o>=0&&o<=90?90-o:o>90&&o<=180?360-o+90:90+Math.abs(o),o}function $(t,n,a){const e=Math.cos(a),i=Math.sin(a),o=[1,0,0,1,0,0],r=o[0]*e+o[2]*i,c=o[1]*e+o[3]*i,s=-o[0]*i+o[2]*e,l=-o[1]*i+o[3]*e;o[0]=r,o[1]=c,o[2]=s,o[3]=l;return[t*o[0]+n*o[2]+o[4],t*o[1]+n*o[3]+o[5]]}const B=t=>t.toArray(),Q=(...t)=>t.some(t=>t);function _(t,n){if(Q(0===t.length,t.some(({x:t,y:n})=>Q(null==t,null==n)),!n.hasZ))throw new Error("Input pixels must have x, y and camera location must have z value")}function tt(t,n){if(t.some(t=>null==t.z)||null==n.z)throw new Error("Input points and camera location must have z value")}function nt(t){if(9!==t?.length)throw new Error("Rotation matrix is not provided or is not a valid 3x3 matrix")}function at(t,n){return d(n)?1/Math.cos(Math.PI/2-2*Math.atan(Math.exp(-1*t/M.radius))):1}const et=t=>n=>new g(n,t),it=t=>null!=t&&"queryExtent"in t;function ot(t,n,a,e){return[[-n,-n],[+n,-n],[+n,+n],[-n,+n]].map(([n,i])=>E(x(c(),a,[n,i,0]),e,t))}function rt({a0:t,a1:n,a2:a,b0:e,b1:i,b2:o},r,c,s){const l=[t??r/2-.5,n,a??0,e??c/2-.5,i??0,o].map(ct);return null!=s&&st(l)?{affines:l,focalLength:s}:{affines:[r/2-.5,1,0,c/2-.5,0,-1]}}function ct(t,n){if(null==t)return null;const a=parseFloat(`${t}`);return isNaN(a)?null:a}function st(t){return null!=t[1]&&null!=t[5]}function lt(t,n,a){const{cameraHeight:e,cameraPitch:i,cameraRoll:o,elevation:r,farDistance:c,horizontalFieldOfView:s,location:l,verticalFieldOfView:f}=jt(t,t.location.spatialReference),u=r??(l.z??0)-e;return{...mt(t,n,a),averageElevation:u,cameraPitch:i,cameraRoll:o??0,farDistance:c,horizontalFieldOfView:s,verticalFieldOfView:f}}function ft(t,n,a,e){return wt(e)?q([e.omega,e.phi,e.kappa]):yt(e)?U([e.heading,e.pitch,e.roll]):U([t,n,a??0])}function ut(t,n,a){const{cameraHeading:e,cameraHeight:i,farDistance:o,horizontalFieldOfView:r,location:c,verticalFieldOfView:s}=jt(t,t.location.spatialReference);return{averageElevation:(c.z??0)-i,cameraLocation:c,cameraHeading:e,farDistance:o,horizontalFieldOfView:r,imageHeight:a,imageWidth:n,verticalFieldOfView:s}}function mt(t,n,a){const{a0:e,a1:i,a2:o,b0:r,b1:c,b2:s,cameraHeading:l,cameraOrientation:f,cameraPitch:u,cameraRoll:m,focalLength:h,horizontalFieldOfView:p,location:g,matrix:v,principalX:M,principalY:d,radial:x,tangential:w,verticalFieldOfView:y}=t,{affines:b,focalLength:j}=rt({a0:e,a1:i,a2:o,b0:r,b1:c,b2:s},n,a,h),O=v??ft(l,u,m,f),z=null!=M&&null!=d?[M,d]:void 0;return{affineTransformations:f?.affineTransformations??b,cameraLocation:g.clone(),focalLength:f?.focalLength??j,horizontalFieldOfView:p,imageHeight:a,imageWidth:n,principalOffsetPoint:f?.principalOffsetPoint??z,radialDistortionCoefficients:f?.radialDistortionCoefficients??x,rotationMatrix:O,tangentialDistortionCoefficients:f?.tangentialDistortionCoefficients??w,verticalFieldOfView:y}}const ht=t=>null!=t&&"elevationSample"in t&&null!=t.elevationSample,pt=t=>b(t?.elevationSource)&&null!=t?.extent,gt=t=>w(t?.elevationSource),vt=async(t,n,a,e,i)=>{const o=j(t),r=n-a/o;return gt(e)?(e.elevationSource=new y({constantElevation:e.elevationSource.constantElevation/o}),e):ht(e)?e:pt(e)?{elevationSample:await O({...p(e.elevationSource)?e.elevationSource.toJSON():e.elevationSource,extent:e.extent},i),elevationSource:new y({constantElevation:r})}:{averageGroundElevation:r,spatialReference:t}},Mt=t=>z(t?.heading)&&z(t?.pitch),dt=(t,n)=>[[-t,-n],[t,-n],[t,n],[-t,n]];function xt(t){const{cameraLocation:n,farDistance:i,horizontalFieldOfView:o,rotationMatrix:r,scalingFactor:s,verticalFieldOfView:f}=t,u=e();l(u,r);const p=2*Math.tan(a(f)/2)*i*s,g=2*Math.tan(a(o)/2)*i*s,v=L([0,0,-1],u),M=D([n.x,n.y,n.z],v,t.farDistance*s,s),d=L([0,1,0],u),x=L([1,0,0],u),w=H(d,p/2,s),y=H(x,g/2,s),b=m(c(),w,y),j=h(c(),w,y);return[h(c(),M,b),h(c(),M,j),m(c(),M,b),m(c(),M,j)]}const wt=t=>2===t?.type,yt=t=>1===t?.type;function bt(t,n,a){if("panoramic"===t){const[t,e]=a;return W({x:n.x,y:n.y,z:n.z},t,e)}return{x:n.x+.5,y:.5-n.y}}function jt(t,n,a=!0){const e=j(n),i=a?t.clone():t;return i.cameraHeight/=e,i.farDistance/=e,i.nearDistance/=e,w(i.elevationSource)&&(i.elevationSource.constantElevation/=e),i}export{xt as computeFarplaneVertices,C as computeHFOVAndVFOV,ot as computeNewReferenceCoordinates,Z as convertHeadingPitchToSphereVertex,X as convertOrientationToPixelLocation,G as convertPixelLocationToSphereVertex,T as convertPixelToHeadingPitch,Y as convertSphereVertexToOrientation,W as convertSphereVertexToPixelLocation,jt as convertToSRUnits,I as createRotationMatrix,U as createRotationMatrixFromHPR,q as createRotationMatrixFromOPK,rt as getAffinesAndFocalLength,ut as getImageToWorldPanoramicProperties,lt as getImageToWorldProperties,J as getInitialAngle,vt as getUpdateElevationProps,at as getWebMercatorScalingFactor,mt as getWorldToImageProperties,Mt as hasAngles,yt as hasHeadingPitchRoll,wt as hasOmegaPhiKappa,it as isElevationSampler,ht as isUpdateElevationWithElevationSampler,pt as isUpdateElevationWithElevationSource,gt as isUpdateUsingConstantElevation,st as isValidAffines,R as linearEquationSolve,K as ltpToGeographic,Q as or,B as pointToArray,E as projectiveTransform,dt as reducerFn,$ as rotatePixel,D as scaleAndAddWithFactor,H as scaleWithFactor,bt as transformGraphicCoordinatesToPixel,L as transformMat3,N as transformMat4,_ as validatePixelsToTransform,tt as validatePointsToTransform,nt as validateRotationMatrix,et as vecToPoint};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
4
4
  */
5
- import{equals as e,difference as r,isSome as a}from"../../core/arrayUtils.js";import"../../core/has.js";import t from"../../core/Error.js";import{updateOrigins as n}from"../../core/accessorSupport/originUtils.js";import{save as s,saveAs as o,getLayerJSON as l,getPortalItem as i,addItem as c,ensureLayerConfig as u,ensureItemConfig as y,setCommonItemProperties as p,createErrorMessage as f}from"./utils.js";import{parse as m}from"../support/arcgisLayerUrl.js";import{fetchFeatureService as d,getLayerModuleType as h}from"../support/fetchService.js";import{isLayerWithFeatureLayerSource as b}from"../support/layerUtils.js";import{createForItemWrite as w}from"../../portal/support/jsonContext.js";import{getWGS84ExtentForItem as T,toggleTypeKeyword as v,typeKeyword as S,removeTypeKeyword as L}from"../../portal/support/portalItemUtils.js";const I="Feature Service",g="feature-layer-utils",P=`${g}-save`,E=`${g}-save-as`,O=`${g}-saveall`,A=`${g}-saveall-as`;function x(e){return{isValid:b(e)&&(!("dynamicDataSource"in e)||!e.dynamicDataSource),errorMessage:"Feature layer should be a layer or table in a map or feature service"}}function N(e,r){const a=w(e,"portal-item");return r?.isTable&&(a.layerContainerType="tables"),a}function $(e){const r=N(e),a=N(e);return a.layerContainerType="tables",{forLayers:r,forTables:a}}function j(e){const r=[],a=[];for(const{layer:t,layerJSON:n}of e)U(t)?a.push(n):r.push(n);return{layers:r,tables:a}}function U(e,r){return e.isTable}function R(e){return j([e])}async function J(e,r){return/\/\d+\/?$/.test(e.url)?R(r[0]):C(r,e)}async function C(e,r){if(e.reverse(),!r)return j(e);const a=await G(r,e);for(const t of e)H(t.layer,t.layerJSON,a);return D(a,e),a}async function G(e,r){let a=await e.fetchData("json");if(F(a))return a;a||={},_(a);const{layer:{url:t,customParameters:n,apiKey:s}}=r[0];return await k(a,{url:t??"",customParameters:n,apiKey:s},r.map(e=>e.layer.layerId)),a}function F(e){return!!(e&&Array.isArray(e.layers)&&Array.isArray(e.tables))}function _(e){e.layers||=[],e.tables||=[]}function D(e,r){const a=[],t=[];for(const{layer:n}of r){const{isTable:e,layerId:r}=n;e?t.push(r):a.push(r)}M(e.layers,a),M(e.tables,t)}function M(r,a){if(r.length<2)return;const t=[];for(const{id:e}of r)t.push(e);e(t.sort(Y),a.slice().sort(Y))&&r.sort((e,r)=>{const t=a.indexOf(e.id),n=a.indexOf(r.id);return t<n?-1:t>n?1:0})}function Y(e,r){return e<r?-1:e>r?1:0}async function k(e,r,a){const{url:t,customParameters:n,apiKey:s}=r,{serviceJSON:o,layersJSON:l}=await d(t,{customParameters:n,apiKey:s}),i=B(e.layers,o.layers,a),c=B(e.tables,o.tables,a);e.layers=i.itemResources,e.tables=c.itemResources;const u=[...i.added,...c.added],y=l?[...l.layers,...l.tables]:[];await K(e,u,t,y)}function B(e,a,t){const n=r(e,a,(e,r)=>e.id===r.id);e=e.filter(e=>!n.removed.some(r=>r.id===e.id));const s=n.added;return s.forEach(({id:r})=>{e.push({id:r})}),{itemResources:e,added:s.filter(({id:e})=>!t.includes(e))}}async function K(e,r,a,t){const n=await z(r),s=r.map(({id:e,type:r})=>new(n.get(r))({url:a,layerId:e,sourceJSON:t.find(({id:r})=>r===e)}));await Promise.allSettled(s.map(e=>e.load())),s.forEach(r=>{const{layerId:a,loaded:t,defaultPopupTemplate:n}=r;if(!t||null==n)return;const s={id:a,popupInfo:n.toJSON()};H(r,"ArcGISFeatureLayer"===r.operationalLayerType?s:{...s,layerType:r.operationalLayerType},e)})}async function z(e){const r=[];e.forEach(({type:e})=>{switch(h(e)){case"CatalogLayer":r.push(import("../CatalogLayer.js").then(e=>e.default));break;case"FeatureLayer":r.push(import("../FeatureLayer.js").then(e=>e.default));break;case"OrientedImageryLayer":r.push(import("../OrientedImageryLayer.js").then(e=>e.default))}});const a=await Promise.all(r),t=new Map;return e.forEach(({type:e},r)=>{t.set(e,a[r])}),t}function H(e,r,a){e.isTable?V(a.tables,r):V(a.layers,r)}function V(e,r){const a=e.findIndex(({id:e})=>e===r.id);-1===a?e.push(r):e[a]=r}function q(e,r){if(!e.length)throw new t(`${r}:missing-parameters`,"'layers' array should contain at least one feature layer")}function Q(e,r){const a=e.map(e=>e.portalItem.id);if(new Set(a).size>1)throw new t(`${r}:invalid-parameters`,"All layers in the 'layers' array should be loaded from the same portal item")}function W(e,r){const a=e.map(e=>e.layerId);if(new Set(a).size!==a.length)throw new t(`${r}:invalid-parameters`,"'layers' array should contain only one instance each of layer or table in a feature service")}async function X(e){q(e,O),await Promise.all(e.map(e=>e.load()));for(const r of e)u(r,O,x),y({layer:r,itemType:I,errorNamePrefix:O});Q(e,O),W(e,O)}function Z(e){if(!("layerType"in e))return!!e.charts?.length;switch(e.layerType){case"OrientedImageryLayer":return!!e.charts?.length;case"SubtypeGroupLayer":return!!e.layers.some(e=>!!e.charts?.length);case"SubtypeGroupTable":return!!e.tables.some(e=>!!e.charts?.length);case"CatalogLayer":return!!e.footprintLayer?.charts?.length}}function ee(e,r){let a=0,t=0,n=0,s=0;for(const o of[...r.layers,...r.tables])if(Z(o)&&s++,"layerType"in o)switch(o.layerType){case"OrientedImageryLayer":a++;break;case"SubtypeGroupLayer":t++;break;case"SubtypeGroupTable":n++}v(e,S.ORIENTED_IMAGERY_LAYER,a>0),v(e,S.SUBTYPE_GROUP_LAYER,t>0),v(e,S.SUBTYPE_GROUP_TABLE,n>0),v(e,S.CHARTS,s>0)}function re(e,r,a){L(r,S.METADATA),v(r,S.MULTI_LAYER,e.length>1),v(r,S.SINGLE_LAYER,1===e.length),v(r,S.TABLE,a.tables.length>0&&0===a.layers.length),ee(r,a)}async function ae(e,r,a){ee(r,a)}async function te(e,r,a){const{url:t,layerId:n,title:s,fullExtent:o,isTable:l}=e,i=m(t);r.url=("FeatureServer"===i?.serverType?t:`${t}/${n}`)??null,r.title||=s,r.extent=null,l||null==o||(r.extent=await T(o)),re([e],r,a)}function ne(e,r){for(const o of e){const a=o.parsedUrl.path,n=m(a),s=n?.url.path;if(!s)throw new t(`${r}:invalid-parameters`,f(o,`has unsupported url pattern: ${a}`),{layer:o});const l=n?.serverType;if("FeatureServer"!==l&&"MapServer"!==l)throw new t(`${r}:invalid-parameters`,f(o,`has unsupported server type: ${l}`),{layer:o});if("MapServer"===l&&e.length>1)throw new t(`${r}:invalid-parameters`,"Only one layer or table in a map service can be saved")}const a=m(e[0].parsedUrl.path),n=a?.url.path,s=e.every(e=>{const r=m(e.parsedUrl.path);return r?.url.path===n});if(!s)throw new t(`${r}:invalid-parameters`,"'layers' array should only contain layers or tables that belong to the same feature service")}async function se(e){q(e,A),await Promise.all(e.map(e=>e.load()));for(const r of e)u(r,A,x);ne(e,A),W(e,A)}function oe(e,r){ee(e,r),p(e)}async function le(e,r,t){let n=0;for(const{isTable:a}of e)a||n++;const s=e[0].parsedUrl.path,o=m(s);if(r.url="FeatureServer"===o?.serverType?o.url.path:s,r.title||=o.title,r.extent=null,n>0){const t=e.map(e=>e.fullExtent).filter(a).reduce((e,r)=>e.clone().union(r));t&&(r.extent=await T(t))}re(e,r,t),p(r)}async function ie(e,r){return s({layer:e,itemType:I,validateLayer:x,createJSONContext:r=>N(r,e),createItemData:(e,r)=>J(r,[e]),errorNamePrefix:P,setItemProperties:ae},r)}async function ce(e,r){await X(e);const a=e[0].portalItem,t=$(a),s=await Promise.all(e.map(e=>l(e,e.isTable?t.forTables:t.forLayers,r))),o=await J(a,e.map((e,r)=>({layer:e,layerJSON:s[r]})));return oe(a,o),await a.update({data:o}),await Promise.all(e.slice(1).map(e=>e.portalItem.reload())),n(t.forLayers),n(t.forTables),a.clone()}async function ue(e,r,a){return o({layer:e,itemType:I,validateLayer:x,createJSONContext:r=>N(r,e),createItemData:(e,r)=>Promise.resolve(R(e)),errorNamePrefix:E,newItem:r,setItemProperties:te},a)}async function ye(e,r,a){await se(e);const t=i({itemType:I,errorNamePrefix:A,newItem:r}),s=$(t),o=await Promise.all(e.map(e=>l(e,e.isTable?s.forTables:s.forLayers,a))),u=await C(e.map((e,r)=>({layer:e,layerJSON:o[r]})));await le(e,t,u),await c(t,u,a);for(const n of e)n.portalItem=t.clone();return n(s.forLayers),n(s.forTables),t}export{ie as save,ce as saveAll,ye as saveAllAs,ue as saveAs};
5
+ import{equals as e,difference as r,isSome as a}from"../../core/arrayUtils.js";import"../../core/has.js";import t from"../../core/Error.js";import{updateOrigins as n}from"../../core/accessorSupport/originUtils.js";import{save as s,saveAs as o,getLayerJSON as l,getPortalItem as i,addItem as c,ensureLayerConfig as u,ensureItemConfig as y,setCommonItemProperties as p,createErrorMessage as f}from"./utils.js";import{parse as m}from"../support/arcgisLayerUrl.js";import{fetchFeatureService as d,getLayerModuleType as h}from"../support/fetchService.js";import{isLayerWithFeatureLayerSource as b}from"../support/layerUtils.js";import{createForItemWrite as w}from"../../portal/support/jsonContext.js";import{getWGS84ExtentForItem as T,toggleTypeKeyword as v,typeKeyword as S,removeTypeKeyword as L,hasTypeKeyword as I}from"../../portal/support/portalItemUtils.js";const g="Feature Service",E="feature-layer-utils",P=`${E}-save`,O=`${E}-save-as`,A=`${E}-saveall`,x=`${E}-saveall-as`;function N(e){return{isValid:b(e)&&(!("dynamicDataSource"in e)||!e.dynamicDataSource),errorMessage:"Feature layer should be a layer or table in a map or feature service"}}function $(e,r){const a=w(e,"portal-item");return r?.isTable&&(a.layerContainerType="tables"),a}function j(e){const r=$(e),a=$(e);return a.layerContainerType="tables",{forLayers:r,forTables:a}}function U(e){const r=[],a=[];for(const{layer:t,layerJSON:n}of e)R(t)?a.push(n):r.push(n);return{layers:r,tables:a}}function R(e,r){return e.isTable}function C(e){return U([e])}async function J(e,r){return/\/\d+\/?$/.test(e.url)?C(r[0]):G(r,e)}async function G(e,r){if(e.reverse(),!r)return U(e);const a=await _(r,e);for(const t of e)V(t.layer,t.layerJSON,a);return M(a,e),a}async function _(e,r){let a=await e.fetchData("json");if(D(a)&&!I(e,S.HOSTED_SERVICE))return a;a||={},F(a);const{layer:{url:t,customParameters:n,apiKey:s}}=r[0];return await B(a,{url:t??"",customParameters:n,apiKey:s},r.map(e=>e.layer.layerId)),a}function D(e){return!!(e&&Array.isArray(e.layers)&&Array.isArray(e.tables))}function F(e){e.layers||=[],e.tables||=[]}function M(e,r){const a=[],t=[];for(const{layer:n}of r){const{isTable:e,layerId:r}=n;e?t.push(r):a.push(r)}Y(e.layers,a),Y(e.tables,t)}function Y(r,a){if(r.length<2)return;const t=[];for(const{id:e}of r)t.push(e);e(t.sort(k),a.slice().sort(k))&&r.sort((e,r)=>{const t=a.indexOf(e.id),n=a.indexOf(r.id);return t<n?-1:t>n?1:0})}function k(e,r){return e<r?-1:e>r?1:0}async function B(e,r,a){const{url:t,customParameters:n,apiKey:s}=r,{serviceJSON:o,layersJSON:l}=await d(t,{customParameters:n,apiKey:s}),i=K(e.layers,o.layers,a),c=K(e.tables,o.tables,a);e.layers=i.itemResources,e.tables=c.itemResources;const u=[...i.added,...c.added],y=l?[...l.layers,...l.tables]:[];await z(e,u,t,y)}function K(e,a,t){const n=r(e,a,(e,r)=>e.id===r.id);e=e.filter(e=>!n.removed.some(r=>r.id===e.id));const s=n.added;return s.forEach(({id:r})=>{e.push({id:r})}),{itemResources:e,added:s.filter(({id:e})=>!t.includes(e))}}async function z(e,r,a,t){const n=await H(r),s=r.map(({id:e,type:r})=>new(n.get(r))({url:a,layerId:e,sourceJSON:t.find(({id:r})=>r===e)}));await Promise.allSettled(s.map(e=>e.load())),s.forEach(r=>{const{layerId:a,loaded:t,defaultPopupTemplate:n}=r;if(!t||null==n)return;const s={id:a,popupInfo:n.toJSON()};V(r,"ArcGISFeatureLayer"===r.operationalLayerType?s:{...s,layerType:r.operationalLayerType},e)})}async function H(e){const r=[];e.forEach(({type:e})=>{switch(h(e)){case"CatalogLayer":r.push(import("../CatalogLayer.js").then(e=>e.default));break;case"FeatureLayer":r.push(import("../FeatureLayer.js").then(e=>e.default));break;case"OrientedImageryLayer":r.push(import("../OrientedImageryLayer.js").then(e=>e.default))}});const a=await Promise.all(r),t=new Map;return e.forEach(({type:e},r)=>{t.set(e,a[r])}),t}function V(e,r,a){e.isTable?q(a.tables,r):q(a.layers,r)}function q(e,r){const a=e.findIndex(({id:e})=>e===r.id);-1===a?e.push(r):e[a]=r}function Q(e,r){if(!e.length)throw new t(`${r}:missing-parameters`,"'layers' array should contain at least one feature layer")}function W(e,r){const a=e.map(e=>e.portalItem.id);if(new Set(a).size>1)throw new t(`${r}:invalid-parameters`,"All layers in the 'layers' array should be loaded from the same portal item")}function X(e,r){const a=e.map(e=>e.layerId);if(new Set(a).size!==a.length)throw new t(`${r}:invalid-parameters`,"'layers' array should contain only one instance each of layer or table in a feature service")}async function Z(e){Q(e,A),await Promise.all(e.map(e=>e.load()));for(const r of e)u(r,A,N),y({layer:r,itemType:g,errorNamePrefix:A});W(e,A),X(e,A)}function ee(e){if(!("layerType"in e))return!!e.charts?.length;switch(e.layerType){case"OrientedImageryLayer":return!!e.charts?.length;case"SubtypeGroupLayer":return!!e.layers.some(e=>!!e.charts?.length);case"SubtypeGroupTable":return!!e.tables.some(e=>!!e.charts?.length);case"CatalogLayer":return!!e.footprintLayer?.charts?.length}}function re(e,r){let a=0,t=0,n=0,s=0;for(const o of[...r.layers,...r.tables])if(ee(o)&&s++,"layerType"in o)switch(o.layerType){case"OrientedImageryLayer":a++;break;case"SubtypeGroupLayer":t++;break;case"SubtypeGroupTable":n++}v(e,S.ORIENTED_IMAGERY_LAYER,a>0),v(e,S.SUBTYPE_GROUP_LAYER,t>0),v(e,S.SUBTYPE_GROUP_TABLE,n>0),v(e,S.CHARTS,s>0)}function ae(e,r,a){L(r,S.METADATA),v(r,S.MULTI_LAYER,e.length>1),v(r,S.SINGLE_LAYER,1===e.length),v(r,S.TABLE,a.tables.length>0&&0===a.layers.length),re(r,a)}async function te(e,r,a){re(r,a)}async function ne(e,r,a){const{url:t,layerId:n,title:s,fullExtent:o,isTable:l}=e,i=m(t);r.url=("FeatureServer"===i?.serverType?t:`${t}/${n}`)??null,r.title||=s,r.extent=null,l||null==o||(r.extent=await T(o)),ae([e],r,a)}function se(e,r){for(const o of e){const a=o.parsedUrl.path,n=m(a),s=n?.url.path;if(!s)throw new t(`${r}:invalid-parameters`,f(o,`has unsupported url pattern: ${a}`),{layer:o});const l=n?.serverType;if("FeatureServer"!==l&&"MapServer"!==l)throw new t(`${r}:invalid-parameters`,f(o,`has unsupported server type: ${l}`),{layer:o});if("MapServer"===l&&e.length>1)throw new t(`${r}:invalid-parameters`,"Only one layer or table in a map service can be saved")}const a=m(e[0].parsedUrl.path),n=a?.url.path,s=e.every(e=>{const r=m(e.parsedUrl.path);return r?.url.path===n});if(!s)throw new t(`${r}:invalid-parameters`,"'layers' array should only contain layers or tables that belong to the same feature service")}async function oe(e){Q(e,x),await Promise.all(e.map(e=>e.load()));for(const r of e)u(r,x,N);se(e,x),X(e,x)}function le(e,r){re(e,r),p(e)}async function ie(e,r,t){let n=0;for(const{isTable:a}of e)a||n++;const s=e[0].parsedUrl.path,o=m(s);if(r.url="FeatureServer"===o?.serverType?o.url.path:s,r.title||=o.title,r.extent=null,n>0){const t=e.map(e=>e.fullExtent).filter(a).reduce((e,r)=>e.clone().union(r));t&&(r.extent=await T(t))}ae(e,r,t),p(r)}async function ce(e,r){return s({layer:e,itemType:g,validateLayer:N,createJSONContext:r=>$(r,e),createItemData:(e,r)=>J(r,[e]),errorNamePrefix:P,setItemProperties:te},r)}async function ue(e,r){await Z(e);const a=e[0].portalItem,t=j(a),s=await Promise.all(e.map(e=>l(e,e.isTable?t.forTables:t.forLayers,r))),o=await J(a,e.map((e,r)=>({layer:e,layerJSON:s[r]})));return le(a,o),await a.update({data:o}),await Promise.all(e.slice(1).map(e=>e.portalItem.reload())),n(t.forLayers),n(t.forTables),a.clone()}async function ye(e,r,a){return o({layer:e,itemType:g,validateLayer:N,createJSONContext:r=>$(r,e),createItemData:(e,r)=>Promise.resolve(C(e)),errorNamePrefix:O,newItem:r,setItemProperties:ne},a)}async function pe(e,r,a){await oe(e);const t=i({itemType:g,errorNamePrefix:x,newItem:r}),s=j(t),o=await Promise.all(e.map(e=>l(e,e.isTable?s.forTables:s.forLayers,a))),u=await G(e.map((e,r)=>({layer:e,layerJSON:o[r]})));await ie(e,t,u),await c(t,u,a);for(const n of e)n.portalItem=t.clone();return n(s.forLayers),n(s.forTables),t}export{ce as save,ue as saveAll,pe as saveAllAs,ye as saveAs};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
4
4
  */
5
- import e from"../../../core/Error.js";import{throwIfAborted as t}from"../../../core/promiseUtils.js";import i from"../../../geometry/Extent.js";import n from"../../../geometry/Point.js";import r from"../Field.js";import o from"../PixelBlock.js";import{getByteCount as a}from"../rasterFormats/pixelRangeUtils.js";import{snapToRaster as s,clip as l}from"../rasterFunctions/clipUtils.js";import{mosaic as c,convertPixelBlockToFeatures as p,getValidPixels as u,countCategoricalPixels as f}from"../rasterFunctions/pixelUtils.js";import{load as m,projectPolygon as x}from"../rasterFunctions/rasterProjectionHelper.js";import{computeBoxStatistics as h,computeStatisticsHistograms as y}from"../rasterFunctions/stretchUtils.js";import{getBandNames as d}from"../../../renderers/support/rasterRendererHelper.js";import w from"../../../rest/support/ImageIdentifyParameters.js";const g=2**30,k=2048,b=2**20,B=20,S=100;async function j(e,t){return"imagery"===e.type?await e.generateRasterInfo(e.rasterFunction,t)??e.serviceRasterInfo:e.raster.rasterInfo}function R(e){const t=[new r({name:"PixelID",alias:"Pixel ID",type:"oid"})],{pixelType:i}=e,n="f32"===i?"single":"f64"===i?"double":"integer";return d(e).forEach(e=>{t.push(new r({name:e,alias:e,type:n}))}),t.map(e=>e.toJSON())}function P(e,t){const i=R(t),n=i.map(({name:e})=>e),r=[],o=n.length-1;for(let a=0;a<e.length;a++){const t=e[a];if(t.pixelValue){const e={objectId:a};for(let i=0;i<o;i++)e[n[i+1]]=t.pixelValue[i];r.push({geometry:t.location,attributes:e})}}return{fields:i,features:r}}async function I(t,i){if(t.spatialReference.equals(i))return t;if("polyline"===t.type){const n=(await import("../../../geometry/operators/projectOperator.js")).execute(t,i);if(null==n)throw new e("read-pixels","failed to project the geometry into the layer's spatial reference");return n}if("extent"===t.type||t.rings[0].length<B){const e=(await import("../../../geometry/operators/lengthOperator.js")).execute(t,{unit:"meters"})/S;t=(await import("../../../geometry/operators/densifyOperator.js")).execute(t,e,{unit:"meters"}),await m(),t=x(t,i)}return t}async function F(e,t){const{spatialReference:i}=e,r=t?.geometry,o=await I(r??e.extent,i),a="extent"===o.type?o:o.extent,l=null==r||"extent"===r.type&&r.spatialReference.equals(i)?void 0:o,c=new n({x:e.pixelSize.x,y:e.pixelSize.y,spatialReference:i}),p=!!t?.autoResample,u=p?c:t?.pixelSize??c;let{extent:f,width:m,height:x}=s(e,a,u);if(!p)return{extent:f,clipGeometry:l,width:m,height:x,pixelSize:u};const h=e.storageInfo?.pyramidScalingFactor??2;let{x:y,y:d}=u;const w=t?.maxPixelCount??b;if(m*x>w)for(;m*x>w;)y*=h,d*=h,m/=h,x/=h;return m=Math.round(m),x=Math.round(x),{extent:f,clipGeometry:l,width:m,height:x,pixelSize:new n({x:y,y:d,spatialReference:i})}}async function*T(e,n,r=!1,o){const{extent:a,clipGeometry:s,width:c,height:p}=n,u=a.width/c,f=a.height/p,m=Math.ceil(c/k),x=Math.ceil(p/k),h=u*k,y=f*k,{xmin:d,xmax:w,ymin:g,ymax:b}=a,B=x*m,S={bandIds:n.bandIds?.length?n.bandIds:void 0,interpolation:"nearest",...o};for(let j=0;j<x;j++)for(let n=0;n<m;n++){t(S);const o=new i({xmin:d+n*h,xmax:r?Math.min(w,d+(n+1)*h):d+(n+1)*h,ymax:b-j*y,ymin:r?Math.max(g,b-(j+1)*y):b-(j+1)*y,spatialReference:a.spatialReference}),c={row:j,col:n},p=j*m+n+1;if(s&&!o.intersects(s)){yield{extent:o,pixelBlock:null,id:c,total:B,current:p};continue}const x=r?Math.round(o.width/u):k,R=r?Math.round(o.height/f):k;let{pixelBlock:P}=await e.fetchPixels(o,x,R,S).catch(()=>({pixelBlock:void 0}));P&&s&&(P=await l(P,o,s)),yield{extent:o,pixelBlock:P,id:c,total:B,current:p}}}async function*v(e,i,n){const r=await j(e,n),o=R(r),a={...i,geometry:i?.geometry??r.extent},s=T(e,await F(r,a),!0,n),l=r.width;for await(const c of s){if(!c.pixelBlock){yield{...c};continue}const a=K(e),{pixelBlock:s}=c,{statistics:p,histograms:u}=await V({pixelBlock:s,rasterJobHandler:a},n),f=c;f.statistics=p,f.histograms=u;const m=c.id.row*r.width*k+c.id.col*k;t(n),f.featureSet=await W({pixelBlock:s,extent:c.extent,fields:o,skipFactor:i?.skipFactor??1,rasterJobHandler:a,pixelIdOffset:m,imageRowSize:l},n),t(n),yield f}}function M(t,i,n){const r=a(i),{width:o,height:s}=t;if(o*s*r>g)throw new e("fetch-pixels","failed to fetch pixels as pixel byte count exceeds the 1GB limit");if(n&&o*s>n)throw new e("fetch-pixels",`failed to fetch pixels as pixel count exceeds the ${n} limit`)}async function z(t,i,n){if(!i.geometry)throw new e("fetch-pixels","geometry is required to fetch pixel feature set");const r=await j(t),o=await F(r,i);M(o,r.pixelType);const{extent:a,pixelSize:s}=o,l=Math.round(r.extent.width/s.x),c=R(r),p={fields:c,features:[]},u=p.features,f=T(t,o,!1,n);for await(const e of f){if(!e.pixelBlock)continue;const o=K(t),a=Math.floor((r.extent.ymax-e.extent.ymax)/s.y)*l+Math.floor((e.extent.xmin-r.extent.xmin)/s.x),p=await W({pixelBlock:e.pixelBlock,extent:e.extent,fields:c,skipFactor:i?.skipFactor??1,rasterJobHandler:o,pixelIdOffset:a,imageRowSize:l},n);if(p?.features?.length){const{features:e}=p,t=e.length;for(let i=0;i<t;i++){const t=e.pop();u.push(t)}}}return{extent:a,featureSet:p,pixelSize:s}}async function H(e,t,i){const{geometry:n}=t;if("multipoint"===n.type)return O(e,n,i);if("polyline"===n.type)return q(e,n,i);const r=await L(e,{geometry:n},i);if(!r)return null;return h(r)}async function O(e,t,i){const n=await j(e,i),r=t.points.map((e,i)=>t.getPoint(i)).map(t=>C(e,t,i)),a=(await Promise.all(r)).filter(e=>null!=e);if(a.length<=1)return J(a[0]);const s=a[0].map((e,t)=>a.map(e=>e[t]));return h(new o({pixels:s,pixelType:n.pixelType}))}async function C(e,t,i){if("imagery"===e.type){const n=await e.identify(new w({geometry:t,returnCatalogItems:!1}),i).catch(()=>null);return null==n?.value||n.value.includes("NoData")?null:n.value.replaceAll(", "," ").split(" ").map(e=>Number(e))}const n=await e.identify(t,i).catch(()=>null);return n?.value}function J(e){return e?.map(e=>({min:e,max:e,avg:e,median:e,quartile1:e,quartile3:e}))}async function q(e,t,i){const n=await D(e,{geometry:t},i),r=await j(e,i),{bandCount:a,pixelType:s}=r,l=new Array(a).fill(0).map(()=>o.createEmptyBand(s,n.length));let c=0;for(let o=0;o<n.length;o++){const e=n[o];if(null!=e.value){c++;for(let t=0;t<a;t++)l[t][o]=e.value[t]}}c!==n.length&&l.forEach((e,t)=>{l[t]=e.subarray(0,c)});return h(new o({pixels:l,pixelType:s}))}async function E(t,i,n){const r=await j(t,n);if(!r.attributeTable||!r.pixelType.startsWith("u"))return null;const o=r.attributeTable.clone(),a=o.fields.find(e=>"value"===e.name.toLowerCase()),s=o.fields.find(e=>"count"===e.name.toLowerCase());if(!a||!s)throw new e("compute-attribute-table","Value or count field not found in attribute table");const l=2**Number(r.pixelType.slice(1)),c=new Uint32Array(l),{geometry:p}=i;return await G(t,p,(e,t)=>f(e,c),n),o.features.forEach(e=>{const t=e.attributes[a.name];e.attributes[s.name]=c[t]}),o}async function N(e,t,i){const{geometry:n}=t;if("point"===n.type)return C(e,n,i);if("multipoint"===n.type){const t=n.points.map((e,t)=>n.getPoint(t)).map(t=>C(e,t,i)),r=(await Promise.all(t)).filter(e=>null!=e);if(0===r.length)return null;return U(r).map(e=>e/r.length)}const r=await G(e,n,(e,t)=>A(e),i),o=r?.filter(e=>e.count>0);if(!o?.length)return null;const a=U(o.map(e=>e.bandSum)),s=o.map(e=>e.count).reduce((e,t)=>e+t);return a.map(e=>e/s)}function U(e){return e.reduce((e,t)=>e.map((e,i)=>e+t[i]))}function A(e){const{width:t,height:i,pixels:n,mask:r}=e,o=new Array(n.length).fill(0);let a=0;for(let s=0;s<i;s++)for(let e=0;e<t;e++){const i=s*t+e;if(!r||r[i]){for(let e=0;e<n.length;e++)o[e]+=n[e][i];a++}}return{bandSum:o,count:a}}async function D(e,t,i){const n=await G(e,t.geometry,u,i);return n?.flat()??[]}async function G(i,n,r,o){const a=i.spatialReference;if("polyline"===n.type&&!n.spatialReference.equals(a)){const t=(await import("../../../geometry/operators/projectOperator.js")).execute(n,a);if(null==t)throw new e("read-pixels","failed to fetch pixels");n=t}const s="polyline"===n.type?n.extent:n,c=await I(s,a),p="polyline"===n.type?n:c,u=await j(i,o),f={geometry:c,autoResample:!1},m=[],x=T(i,await F(u,f),!0,o);for await(const e of x){if(!e.pixelBlock)continue;const{extent:i}=e,n=r(await l(e.pixelBlock,i,p),i);m.push(n),t(o)}return m}async function V(e,t){const{rasterJobHandler:i}=e,{pixelBlock:n}=e,{statistics:r,histograms:o}=i?await i.computeStatisticsHistograms({pixelBlock:n},t):y(n);return{statistics:r,histograms:o}}async function W(e,t){const{extent:i,fields:n,skipFactor:r,rasterJobHandler:o,pixelIdOffset:a,imageRowSize:s}=e,{pixelBlock:l}=e,c=n.map(({name:e})=>e),u=o?await o.convertPixelBlockToFeatures({pixelBlock:l,extent:i,fieldNames:c,skipFactor:r,pixelIdOffset:a,imageRowSize:s},t):p({pixelBlock:l,extent:i,fieldNames:c,skipFactor:r,pixelIdOffset:a,imageRowSize:s});return u?{fields:n,features:u}:void 0}function K(e){return"_rasterJobHandler"in e?e._rasterJobHandler:null}async function L(e,t,i){const n=await j(e);t={...t,maxPixelCount:t.maxPixelCount??2**28};const r=await F(n,t);M(r,n.pixelType,t.maxPixelCount);const o=[],a=T(e,r,!1,i);for await(const c of a)o.push(c.pixelBlock);if(!o.some(e=>null!=e))return null;const{width:s,height:l}=r,p=Math.ceil(s/k),u=Math.ceil(l/k),f={width:p*k,height:u*k};let m;const x=K(e);if(x){const e=await x.mosaicAndTransform({srcPixelBlocks:o,srcMosaicSize:f,destDimension:f},{...i,transferPixelsToWorker:!0});m=e?.pixelBlock}else m=c(o,f);return m}async function _(t,i,n){if(!i.geometry)throw new e("compute-statistics-histograms","geometry is required to fetch pixel feature set");const r=await L(t,i,n);if(!r)throw new e("compute-statistics-histograms","failed to get intersecting pixels");const o=K(t);return o?await o.computeStatisticsHistograms({pixelBlock:r,includeSkewnessKurtosis:!0},{...n,transferPixelsToWorker:!0}):y(r,{includeSkewnessKurtosis:!0})}export{H as computeBoxStatistics,E as computeRasterAttributeTable,_ as computeStatisticsHistograms,P as convertPixelSampleResultToFeatureSet,v as createPixelFeatureSetCursor,L as fetchLargePixelBlock,z as fetchPixelFeatureSet,N as identifyAveragePixelValue,D as readIntersectingPixels};
5
+ import e from"../../../core/Error.js";import{throwIfAborted as t}from"../../../core/promiseUtils.js";import i from"../../../geometry/Extent.js";import n from"../../../geometry/Point.js";import r from"../Field.js";import o from"../PixelBlock.js";import{getByteCount as a}from"../rasterFormats/pixelRangeUtils.js";import{snapToRaster as s,clip as l}from"../rasterFunctions/clipUtils.js";import{mosaic as c,convertPixelBlockToFeatures as p,getValidPixels as u,countCategoricalPixels as f}from"../rasterFunctions/pixelUtils.js";import{load as m,projectPolygon as x}from"../rasterFunctions/rasterProjectionHelper.js";import{computeBoxStatistics as y,computeStatisticsHistograms as h}from"../rasterFunctions/stretchUtils.js";import{getBandNames as d}from"../../../renderers/support/rasterRendererHelper.js";import w from"../../../rest/support/ImageIdentifyParameters.js";const g=2**30,k=2048,b=2**20,B=20,S=100;async function j(e,t){return"imagery"===e.type?await e.generateRasterInfo(e.rasterFunction,t)??e.serviceRasterInfo:e.raster.rasterInfo}function R(e){const t=[new r({name:"PixelID",alias:"Pixel ID",type:"oid"})],{pixelType:i}=e,n="f32"===i?"single":"f64"===i?"double":"integer";return d(e).forEach(e=>{t.push(new r({name:e,alias:e,type:n}))}),t.map(e=>e.toJSON())}async function P(t,i){if(t.spatialReference.equals(i))return t;if("polyline"===t.type){const n=(await import("../../../geometry/operators/projectOperator.js")).execute(t,i);if(null==n)throw new e("read-pixels","failed to project the geometry into the layer's spatial reference");return n}if("extent"===t.type||t.rings[0].length<B){const e=(await import("../../../geometry/operators/lengthOperator.js")).execute(t,{unit:"meters"})/S;t=(await import("../../../geometry/operators/densifyOperator.js")).execute(t,e,{unit:"meters"}),await m(),t=x(t,i)}return t}async function I(e,t){const{spatialReference:i}=e,r=t?.geometry,o=await P(r??e.extent,i),a="extent"===o.type?o:o.extent,l=null==r||"extent"===r.type&&r.spatialReference.equals(i)?void 0:o,c=new n({x:e.pixelSize.x,y:e.pixelSize.y,spatialReference:i}),p=!!t?.autoResample,u=p?c:t?.pixelSize??c;let{extent:f,width:m,height:x}=s(e,a,u);if(!p)return{extent:f,clipGeometry:l,width:m,height:x,pixelSize:u};const y=e.storageInfo?.pyramidScalingFactor??2;let{x:h,y:d}=u;const w=t?.maxPixelCount??b;if(m*x>w)for(;m*x>w;)h*=y,d*=y,m/=y,x/=y;return m=Math.round(m),x=Math.round(x),{extent:f,clipGeometry:l,width:m,height:x,pixelSize:new n({x:h,y:d,spatialReference:i})}}async function*F(e,n,r=!1,o){const{extent:a,clipGeometry:s,width:c,height:p}=n,u=a.width/c,f=a.height/p,m=Math.ceil(c/k),x=Math.ceil(p/k),y=u*k,h=f*k,{xmin:d,xmax:w,ymin:g,ymax:b}=a,B=x*m,S={bandIds:n.bandIds?.length?n.bandIds:void 0,interpolation:"nearest",...o};for(let j=0;j<x;j++)for(let n=0;n<m;n++){t(S);const o=new i({xmin:d+n*y,xmax:r?Math.min(w,d+(n+1)*y):d+(n+1)*y,ymax:b-j*h,ymin:r?Math.max(g,b-(j+1)*h):b-(j+1)*h,spatialReference:a.spatialReference}),c={row:j,col:n},p=j*m+n+1;if(s&&!o.intersects(s)){yield{extent:o,pixelBlock:null,id:c,total:B,current:p};continue}const x=r?Math.round(o.width/u):k,R=r?Math.round(o.height/f):k;let{pixelBlock:P}=await e.fetchPixels(o,x,R,S).catch(()=>({pixelBlock:void 0}));P&&s&&(P=await l(P,o,s)),yield{extent:o,pixelBlock:P,id:c,total:B,current:p}}}async function*T(e,i,n){const r=await j(e,n),o=R(r),a={...i,geometry:i?.geometry??r.extent},s=F(e,await I(r,a),!0,n),l=r.width;for await(const c of s){if(!c.pixelBlock){yield{...c};continue}const a=K(e),{pixelBlock:s}=c,{statistics:p,histograms:u}=await G({pixelBlock:s,rasterJobHandler:a},n),f=c;f.statistics=p,f.histograms=u;const m=c.id.row*r.width*k+c.id.col*k;t(n),f.featureSet=await W({pixelBlock:s,extent:c.extent,fields:o,skipFactor:i?.skipFactor??1,rasterJobHandler:a,pixelIdOffset:m,imageRowSize:l},n),t(n),yield f}}function v(t,i,n){const r=a(i),{width:o,height:s}=t;if(o*s*r>g)throw new e("fetch-pixels","failed to fetch pixels as pixel byte count exceeds the 1GB limit");if(n&&o*s>n)throw new e("fetch-pixels",`failed to fetch pixels as pixel count exceeds the ${n} limit`)}async function M(t,i,n){if(!i.geometry)throw new e("fetch-pixels","geometry is required to fetch pixel feature set");const r=await j(t),o=await I(r,i);v(o,r.pixelType);const{extent:a,pixelSize:s}=o,l=Math.round(r.extent.width/s.x),c=R(r),p={fields:c,features:[]},u=p.features,f=F(t,o,!1,n);for await(const e of f){if(!e.pixelBlock)continue;const o=K(t),a=Math.floor((r.extent.ymax-e.extent.ymax)/s.y)*l+Math.floor((e.extent.xmin-r.extent.xmin)/s.x),p=await W({pixelBlock:e.pixelBlock,extent:e.extent,fields:c,skipFactor:i?.skipFactor??1,rasterJobHandler:o,pixelIdOffset:a,imageRowSize:l},n);if(p?.features?.length){const{features:e}=p,t=e.length;for(let i=0;i<t;i++){const t=e.pop();u.push(t)}}}return{extent:a,featureSet:p,pixelSize:s}}async function z(e,t,i){const{geometry:n}=t;if("multipoint"===n.type)return H(e,n,i);if("polyline"===n.type)return J(e,n,i);const r=await L(e,{geometry:n},i);if(!r)return null;return y(r)}async function H(e,t,i){const n=await j(e,i),r=t.points.map((e,i)=>t.getPoint(i)).map(t=>O(e,t,i)),a=(await Promise.all(r)).filter(e=>null!=e);if(a.length<=1)return C(a[0]);const s=a[0].map((e,t)=>a.map(e=>e[t]));return y(new o({pixels:s,pixelType:n.pixelType}))}async function O(e,t,i){if("imagery"===e.type){const n=await e.identify(new w({geometry:t,returnCatalogItems:!1}),i).catch(()=>null);return null==n?.value||n.value.includes("NoData")?null:n.value.replaceAll(", "," ").split(" ").map(e=>Number(e))}const n=await e.identify(t,i).catch(()=>null);return n?.value}function C(e){return e?.map(e=>({min:e,max:e,avg:e,median:e,quartile1:e,quartile3:e}))}async function J(e,t,i){const n=await A(e,{geometry:t},i),r=await j(e,i),{bandCount:a,pixelType:s}=r,l=new Array(a).fill(0).map(()=>o.createEmptyBand(s,n.length));let c=0;for(let o=0;o<n.length;o++){const e=n[o];if(null!=e.value){c++;for(let t=0;t<a;t++)l[t][o]=e.value[t]}}c!==n.length&&l.forEach((e,t)=>{l[t]=e.subarray(0,c)});return y(new o({pixels:l,pixelType:s}))}async function q(t,i,n){const r=await j(t,n);if(!r.attributeTable||!r.pixelType.startsWith("u"))return null;const o=r.attributeTable.clone(),a=o.fields.find(e=>"value"===e.name.toLowerCase()),s=o.fields.find(e=>"count"===e.name.toLowerCase());if(!a||!s)throw new e("compute-attribute-table","Value or count field not found in attribute table");const l=2**Number(r.pixelType.slice(1)),c=new Uint32Array(l),{geometry:p}=i;return await D(t,p,(e,t)=>f(e,c),n),o.features.forEach(e=>{const t=e.attributes[a.name];e.attributes[s.name]=c[t]}),o}async function E(e,t,i){const{geometry:n}=t;if("point"===n.type)return O(e,n,i);if("multipoint"===n.type){const t=n.points.map((e,t)=>n.getPoint(t)).map(t=>O(e,t,i)),r=(await Promise.all(t)).filter(e=>null!=e);if(0===r.length)return null;return N(r).map(e=>e/r.length)}const r=await D(e,n,(e,t)=>U(e),i),o=r?.filter(e=>e.count>0);if(!o?.length)return null;const a=N(o.map(e=>e.bandSum)),s=o.map(e=>e.count).reduce((e,t)=>e+t);return a.map(e=>e/s)}function N(e){return e.reduce((e,t)=>e.map((e,i)=>e+t[i]))}function U(e){const{width:t,height:i,pixels:n,mask:r}=e,o=new Array(n.length).fill(0);let a=0;for(let s=0;s<i;s++)for(let e=0;e<t;e++){const i=s*t+e;if(!r||r[i]){for(let e=0;e<n.length;e++)o[e]+=n[e][i];a++}}return{bandSum:o,count:a}}async function A(e,t,i){const n=await D(e,t.geometry,u,i);return n?.flat()??[]}async function D(i,n,r,o){const a=i.spatialReference;if("polyline"===n.type&&!n.spatialReference.equals(a)){const t=(await import("../../../geometry/operators/projectOperator.js")).execute(n,a);if(null==t)throw new e("read-pixels","failed to fetch pixels");n=t}const s="polyline"===n.type?n.extent:n,c=await P(s,a),p="polyline"===n.type?n:c,u=await j(i,o),f={geometry:c,autoResample:!1},m=[],x=F(i,await I(u,f),!0,o);for await(const e of x){if(!e.pixelBlock)continue;const{extent:i}=e,n=r(await l(e.pixelBlock,i,p),i);m.push(n),t(o)}return m}async function G(e,t){const{rasterJobHandler:i}=e,{pixelBlock:n}=e,{statistics:r,histograms:o}=i?await i.computeStatisticsHistograms({pixelBlock:n},t):h(n);return{statistics:r,histograms:o}}async function W(e,t){const{extent:i,fields:n,skipFactor:r,rasterJobHandler:o,pixelIdOffset:a,imageRowSize:s}=e,{pixelBlock:l}=e,c=n.map(({name:e})=>e),u=o?await o.convertPixelBlockToFeatures({pixelBlock:l,extent:i,fieldNames:c,skipFactor:r,pixelIdOffset:a,imageRowSize:s},t):p({pixelBlock:l,extent:i,fieldNames:c,skipFactor:r,pixelIdOffset:a,imageRowSize:s});return u?{fields:n,features:u}:void 0}function K(e){return"_rasterJobHandler"in e?e._rasterJobHandler:null}async function L(e,t,i){const n=await j(e);t={...t,maxPixelCount:t.maxPixelCount??2**28};const r=await I(n,t);v(r,n.pixelType,t.maxPixelCount);const o=[],a=F(e,r,!1,i);for await(const c of a)o.push(c.pixelBlock);if(!o.some(e=>null!=e))return null;const{width:s,height:l}=r,p=Math.ceil(s/k),u=Math.ceil(l/k),f={width:p*k,height:u*k};let m;const x=K(e);if(x){const e=await x.mosaicAndTransform({srcPixelBlocks:o,srcMosaicSize:f,destDimension:f},{...i,transferPixelsToWorker:!0});m=e?.pixelBlock}else m=c(o,f);return m}async function _(t,i,n){if(!i.geometry)throw new e("compute-statistics-histograms","geometry is required to fetch pixel feature set");const r=await L(t,i,n);if(!r)throw new e("compute-statistics-histograms","failed to get intersecting pixels");const o=K(t);return o?await o.computeStatisticsHistograms({pixelBlock:r,includeSkewnessKurtosis:!0},{...n,transferPixelsToWorker:!0}):h(r,{includeSkewnessKurtosis:!0})}export{z as computeBoxStatistics,q as computeRasterAttributeTable,_ as computeStatisticsHistograms,T as createPixelFeatureSetCursor,L as fetchLargePixelBlock,M as fetchPixelFeatureSet,E as identifyAveragePixelValue,A as readIntersectingPixels};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.34/esri/copyright.txt for details.
4
4
  */
5
- import{getAssetUrl as t}from"../../assets.js";let e,n=null;function a(){return!!n}function r(){return e||(e=import("../../chunks/lclayout.js").then(t=>t.l).then(({default:e})=>e({locateFile:e=>t(`esri/libs/linkchartlayout/${e}`)})).then(t=>{s(t)}),e)}function s(t){n=t}const i={right:0,left:1,top:2,bottom:3},u={none:0,"start-only":1,"start-and-end":2};function o(t){const e={...{timeDirection:"right",timeBannerUTCOffsetInMinutes:0,eventsTicksVisualization:"start-and-end",showDurationLineForNonZeroDurationEntityEvents:!0,durationLineWidth:5,entityPositionAtDurationRatio:1,showNonZeroDurationIntervalBounds:!1,separateTimeOverlaps:!0,separateTimelineOverlaps:!0,moveFirstBends:!0,secondBendRatio:.3,lineSeparationMultiplier:1,spaceSeparatedLinesEvenly:!1,useBezierCurves:!1,separatedLineShapeRatio:0},...t?.toJSON()??{},eventsTicksVisualization:t?.eventsTicksVisualization??"start-and-end"};return{...e,timeDirection:{value:i[e.timeDirection]??i.right},eventsTicksVisualization:{value:u[e.eventsTicksVisualization]??u["start-and-end"]}}}function l(t,e,a,r,s,i){const u=a.length,o=s.length,l=Float64Array.BYTES_PER_ELEMENT,y=Uint32Array.BYTES_PER_ELEMENT,c=Uint8Array.BYTES_PER_ELEMENT,E=16,p=E+u*(c+2*l)+o*(2*y),f=n._malloc(p);try{const c=f+E-f%E,p=c+u*l,A=p+u*l,P=A+o*y,L=P+o*y,d=()=>[n.HEAPF64.subarray(c>>3,(c>>3)+u),n.HEAPF64.subarray(p>>3,(p>>3)+u),n.HEAPU32.subarray(A>>2,(A>>2)+o),n.HEAPU32.subarray(P>>2,(P>>2)+o),n.HEAPU8.subarray(L,L+u)],[b,h,v,H,_]=d();b.set(a),h.set(r),v.set(s),H.set(i),_.set(e);const m=t(u,L,c,p,o,A,P);let F=null,T=null;if(0===m.value){const t=n.getLayoutLinksTypes(),e=n.getLayoutLinksVerticesEndIndices(),a=n.getLayoutLinksVertices(),r=n.countLayoutLinksVertices();!o||t&&e?r&&!a?m.value=1:(F={types:new Uint8Array(n.HEAPU8.subarray(t,t+o)),vertexEndIndex:new Uint32Array(n.HEAPU32.subarray(e>>2,(e>>2)+o)),vertices:new Float64Array(n.HEAPF64.subarray(a>>3,(a>>3)+2*r))},T=n.getAuxiliaryGraphicElements()):m.value=1}const[g,U,k,S,B]=d();return a.set(g),r.set(U),s.set(k),i.set(S),e.set(B),{status:m.value,links:F,graphics:T}}finally{n._free(f),n.cleanupLayout()}}const y=2,c=1,E=-1;var p,f,A,P,L,d,b;function h(t,e,a,r,s,i,u,o,l,y,c,E,p,f,A){const P=e.length,L=Float64Array.BYTES_PER_ELEMENT,d=Uint32Array.BYTES_PER_ELEMENT,b=16,h=b+t*(8*L)+P*(3*d),v=n._malloc(h);try{const h=v+b-v%b,H=h+t*L,_=H+t*L,m=_+t*L,F=m+t*L,T=F+t*L,g=T+t*L,U=g+t*L,k=U+t*L,S=k+P*d,B=S+P*d,M=()=>[n.HEAPF64.subarray(h>>3,(h>>3)+t),n.HEAPF64.subarray(H>>3,(H>>3)+t),n.HEAPF64.subarray(_>>3,(_>>3)+t),n.HEAPF64.subarray(m>>3,(m>>3)+t),n.HEAPF64.subarray(F>>3,(F>>3)+t),n.HEAPF64.subarray(T>>3,(T>>3)+t),n.HEAPF64.subarray(g>>3,(g>>3)+t),n.HEAPF64.subarray(U>>3,(U>>3)+t),n.HEAPU32.subarray(k>>2,(k>>2)+P),n.HEAPU32.subarray(S>>2,(S>>2)+P),n.HEAPU32.subarray(B>>2,(B>>2)+P)],[R,N,D,V,z,I,Y,w,C,x,O]=M();R.set(o),N.set(l),D.set(y),V.set(c),z.set(E),I.set(p),Y.set(f),w.set(A),C.set(e),x.set(a),O.set(r);const j=n.computeCentrality(t,P,k,S,B,s,i,u,h,H,_,m,F,T,g,U),[Z,G,J,W,$,q,K,Q,X,tt,et]=M();return o.set(Z),l.set(G),y.set(J),c.set(W),E.set($),p.set(q),f.set(K),A.set(Q),e.set(X),a.set(tt),r.set(et),j}finally{n._free(v)}}!function(t){function e(){return n.getMinIdealEdgeLength()}function a(t,e,a,r,s,i,u=y,o=c,p=E){return l((e,a,r,s,i,l,y)=>n.applyForceDirectedLayout(t,e,a,r,s,i,l,y,u,o,p),e,a,r,s,i)}t.getMinIdealEdgeLength=e,t.apply=a}(p||(p={})),function(t){function e(t,e,a,r,s,i,u=y,o=c,p=E){return l((e,a,r,s,i,l,y)=>n.applyCommunityLayout(t,e,a,r,s,i,l,y,u,o,p),e,a,r,s,i)}t.apply=e}(f||(f={})),function(t){function e(t,e,a,r,s,i){return l((e,a,r,s,i,u,o)=>n.applySimpleLayout(t,e,a,r,s,i,u,o),e,a,r,s,i)}t.apply=e}(A||(A={})),function(t){function e(t,e,a,r,s,i){return l((e,a,r,s,i,u,o)=>n.applyHierarchicalLayout(t,e,a,r,s,i,u,o),e,a,r,s,i)}t.apply=e}(P||(P={})),function(t){function e(t,e,a,r,s,i){return l((e,a,r,s,i,u,o)=>n.applyRadialTreeLayout(t,e,a,r,s,i,u,o),e,a,r,s,i)}t.apply=e}(L||(L={})),function(t){function e(t,e,a,r,s,i){return l((e,a,r,s,i,u,o)=>n.applySmartTreeLayout(t,e,a,r,s,i,u,o),e,a,r,s,i)}t.apply=e}(d||(d={})),function(t){function e(t,e,a,r,s,i,u,y,c,E,p,f){return l((e,a,r,u,l,y,A)=>{if(s.length!==e)return{value:1};if(i.length!==e)return{value:1};if(c.length!==l)return{value:1};if(E.length!==l)return{value:1};const P=Float64Array.BYTES_PER_ELEMENT,L=16,d=n._malloc(L+e*P),b=n._malloc(L+e*P),h=n._malloc(L+l*P),v=n._malloc(L+l*P),H=d+L-d%L,_=b+L-b%L,m=h+L-h%L,F=v+L-v%L;try{return n.HEAPF64.subarray(H>>3,(H>>3)+e).set(s),n.HEAPF64.subarray(_>>3,(_>>3)+e).set(i),n.HEAPF64.subarray(m>>3,(m>>3)+l).set(c),n.HEAPF64.subarray(F>>3,(F>>3)+l).set(E),n.applyChronologicalLayout(t,e,a,r,u,H,_,l,y,A,m,F,p,o(f))}finally{n._free(d),n._free(b),n._free(h),n._free(v)}},e,a,r,u,y)}t.apply=e}(b||(b={}));export{i as Direction2D,b as LCChronologicalLayout,f as LCCommunityLayout,p as LCForceDirectedLayout,P as LCHierarchicalLayout,L as LCRadialTreeLayout,A as LCSimpleLayout,d as LCSmartTreeLayout,n as _lclib,h as computeCentrality,o as convertChronologicalLayoutSettingsToWasmSettings,y as defaultBudgetTheoreticalSeconds,c as defaultIdealEdgeLengthMultiplier,E as defaultRepulsionRadiusMultiplier,a as isLoaded,r as load};
5
+ import{getAssetUrl as t}from"../../assets.js";let e,n=null;function a(){return!!n}function r(){return e||(e=import("../../chunks/lclayout.js").then(t=>t.l).then(({default:e})=>e({locateFile:e=>t(`esri/libs/linkchartlayout/${e}`)})).then(t=>{s(t)}),e)}function s(t){n=t}const i={right:0,left:1,top:2,bottom:3},u={none:0,"start-only":1,"start-and-end":2};function o(t){const e={...{timeDirection:"right",timeBannerUTCOffsetInMinutes:0,eventsTicksVisualization:"start-and-end",showDurationLineForNonZeroDurationEntityEvents:!0,durationLineWidth:5,entityPositionAtDurationRatio:1,showNonZeroDurationIntervalBounds:!1,separateTimeOverlaps:!0,separateTimelineOverlaps:!0,moveFirstBends:!0,secondBendRatio:.3,lineSeparationMultiplier:1,spaceSeparatedLinesEvenly:!1,useBezierCurves:!1,separatedLineShapeRatio:0},...t?.toJSON(),eventsTicksVisualization:t?.eventsTicksVisualization??"start-and-end"};return{...e,timeDirection:{value:i[e.timeDirection]??i.right},eventsTicksVisualization:{value:u[e.eventsTicksVisualization]??u["start-and-end"]}}}function l(t,e,a,r,s,i){const u=a.length,o=s.length,l=Float64Array.BYTES_PER_ELEMENT,y=Uint32Array.BYTES_PER_ELEMENT,c=Uint8Array.BYTES_PER_ELEMENT,E=16,p=E+u*(c+2*l)+o*(2*y),f=n._malloc(p);try{const c=f+E-f%E,p=c+u*l,A=p+u*l,P=A+o*y,L=P+o*y,d=()=>[n.HEAPF64.subarray(c>>3,(c>>3)+u),n.HEAPF64.subarray(p>>3,(p>>3)+u),n.HEAPU32.subarray(A>>2,(A>>2)+o),n.HEAPU32.subarray(P>>2,(P>>2)+o),n.HEAPU8.subarray(L,L+u)],[b,h,v,H,_]=d();b.set(a),h.set(r),v.set(s),H.set(i),_.set(e);const m=t(u,L,c,p,o,A,P);let F=null,T=null;if(0===m.value){const t=n.getLayoutLinksTypes(),e=n.getLayoutLinksVerticesEndIndices(),a=n.getLayoutLinksVertices(),r=n.countLayoutLinksVertices();!o||t&&e?r&&!a?m.value=1:(F={types:new Uint8Array(n.HEAPU8.subarray(t,t+o)),vertexEndIndex:new Uint32Array(n.HEAPU32.subarray(e>>2,(e>>2)+o)),vertices:new Float64Array(n.HEAPF64.subarray(a>>3,(a>>3)+2*r))},T=n.getAuxiliaryGraphicElements()):m.value=1}const[g,U,k,S,B]=d();return a.set(g),r.set(U),s.set(k),i.set(S),e.set(B),{status:m.value,links:F,graphics:T}}finally{n._free(f),n.cleanupLayout()}}const y=2,c=1,E=-1;var p,f,A,P,L,d,b;function h(t,e,a,r,s,i,u,o,l,y,c,E,p,f,A){const P=e.length,L=Float64Array.BYTES_PER_ELEMENT,d=Uint32Array.BYTES_PER_ELEMENT,b=16,h=b+t*(8*L)+P*(3*d),v=n._malloc(h);try{const h=v+b-v%b,H=h+t*L,_=H+t*L,m=_+t*L,F=m+t*L,T=F+t*L,g=T+t*L,U=g+t*L,k=U+t*L,S=k+P*d,B=S+P*d,M=()=>[n.HEAPF64.subarray(h>>3,(h>>3)+t),n.HEAPF64.subarray(H>>3,(H>>3)+t),n.HEAPF64.subarray(_>>3,(_>>3)+t),n.HEAPF64.subarray(m>>3,(m>>3)+t),n.HEAPF64.subarray(F>>3,(F>>3)+t),n.HEAPF64.subarray(T>>3,(T>>3)+t),n.HEAPF64.subarray(g>>3,(g>>3)+t),n.HEAPF64.subarray(U>>3,(U>>3)+t),n.HEAPU32.subarray(k>>2,(k>>2)+P),n.HEAPU32.subarray(S>>2,(S>>2)+P),n.HEAPU32.subarray(B>>2,(B>>2)+P)],[R,N,D,V,z,I,Y,w,C,x,O]=M();R.set(o),N.set(l),D.set(y),V.set(c),z.set(E),I.set(p),Y.set(f),w.set(A),C.set(e),x.set(a),O.set(r);const j=n.computeCentrality(t,P,k,S,B,s,i,u,h,H,_,m,F,T,g,U),[Z,G,J,W,$,q,K,Q,X,tt,et]=M();return o.set(Z),l.set(G),y.set(J),c.set(W),E.set($),p.set(q),f.set(K),A.set(Q),e.set(X),a.set(tt),r.set(et),j}finally{n._free(v)}}!function(t){function e(){return n.getMinIdealEdgeLength()}function a(t,e,a,r,s,i,u=y,o=c,p=E){return l((e,a,r,s,i,l,y)=>n.applyForceDirectedLayout(t,e,a,r,s,i,l,y,u,o,p),e,a,r,s,i)}t.getMinIdealEdgeLength=e,t.apply=a}(p||(p={})),function(t){function e(t,e,a,r,s,i,u=y,o=c,p=E){return l((e,a,r,s,i,l,y)=>n.applyCommunityLayout(t,e,a,r,s,i,l,y,u,o,p),e,a,r,s,i)}t.apply=e}(f||(f={})),function(t){function e(t,e,a,r,s,i){return l((e,a,r,s,i,u,o)=>n.applySimpleLayout(t,e,a,r,s,i,u,o),e,a,r,s,i)}t.apply=e}(A||(A={})),function(t){function e(t,e,a,r,s,i){return l((e,a,r,s,i,u,o)=>n.applyHierarchicalLayout(t,e,a,r,s,i,u,o),e,a,r,s,i)}t.apply=e}(P||(P={})),function(t){function e(t,e,a,r,s,i){return l((e,a,r,s,i,u,o)=>n.applyRadialTreeLayout(t,e,a,r,s,i,u,o),e,a,r,s,i)}t.apply=e}(L||(L={})),function(t){function e(t,e,a,r,s,i){return l((e,a,r,s,i,u,o)=>n.applySmartTreeLayout(t,e,a,r,s,i,u,o),e,a,r,s,i)}t.apply=e}(d||(d={})),function(t){function e(t,e,a,r,s,i,u,y,c,E,p,f){return l((e,a,r,u,l,y,A)=>{if(s.length!==e)return{value:1};if(i.length!==e)return{value:1};if(c.length!==l)return{value:1};if(E.length!==l)return{value:1};const P=Float64Array.BYTES_PER_ELEMENT,L=16,d=n._malloc(L+e*P),b=n._malloc(L+e*P),h=n._malloc(L+l*P),v=n._malloc(L+l*P),H=d+L-d%L,_=b+L-b%L,m=h+L-h%L,F=v+L-v%L;try{return n.HEAPF64.subarray(H>>3,(H>>3)+e).set(s),n.HEAPF64.subarray(_>>3,(_>>3)+e).set(i),n.HEAPF64.subarray(m>>3,(m>>3)+l).set(c),n.HEAPF64.subarray(F>>3,(F>>3)+l).set(E),n.applyChronologicalLayout(t,e,a,r,u,H,_,l,y,A,m,F,p,o(f))}finally{n._free(d),n._free(b),n._free(h),n._free(v)}},e,a,r,u,y)}t.apply=e}(b||(b={}));export{i as Direction2D,b as LCChronologicalLayout,f as LCCommunityLayout,p as LCForceDirectedLayout,P as LCHierarchicalLayout,L as LCRadialTreeLayout,A as LCSimpleLayout,d as LCSmartTreeLayout,n as _lclib,h as computeCentrality,o as convertChronologicalLayoutSettingsToWasmSettings,y as defaultBudgetTheoreticalSeconds,c as defaultIdealEdgeLengthMultiplier,E as defaultRepulsionRadiusMultiplier,a as isLoaded,r as load};