@arcgis/core 5.2.0-next.163 → 5.2.0-next.165

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 (216) hide show
  1. package/Graphic.d.ts +47 -14
  2. package/PopupTemplate.js +1 -1
  3. package/WebScene.d.ts +3 -0
  4. package/analysis/LineOfSightAnalysis.d.ts +1 -1
  5. package/analysis/LineOfSightAnalysisObserver.d.ts +5 -4
  6. package/analysis/LineOfSightAnalysisTarget.d.ts +4 -4
  7. package/analysis/Viewshed.d.ts +4 -4
  8. package/assets/esri/core/workers/RemoteClient.js +1 -1
  9. package/assets/esri/core/workers/chunks/{97d6ef9e34a43ad2e556.js → 02e10f44edf911832c2a.js} +1 -1
  10. package/assets/esri/core/workers/chunks/{97b5f4302fb867c829f4.js → 07f7177bfaf9de73bc25.js} +1 -1
  11. package/assets/esri/core/workers/chunks/{612345f17f5eeb99ea8f.js → 0d9c4c6c571ce26d356b.js} +1 -1
  12. package/assets/esri/core/workers/chunks/{8e19629899a5becf8e19.js → 150e7a7bd5df25693da7.js} +1 -1
  13. package/assets/esri/core/workers/chunks/{12a7997a40c77f5c9160.js → 151e5799ede763a03ee2.js} +1 -1
  14. package/assets/esri/core/workers/chunks/196979cc6a765be3c5cd.js +1 -0
  15. package/assets/esri/core/workers/chunks/1ab59a97ffa49e9e1659.js +1 -0
  16. package/assets/esri/core/workers/chunks/{8715661a838361d4211a.js → 1b24a40c0fa197014873.js} +1 -1
  17. package/assets/esri/core/workers/chunks/{83f29a159b8b5197e76a.js → 266c90d8d56a2da42fcf.js} +1 -1
  18. package/assets/esri/core/workers/chunks/{b1d989b72203113a06fe.js → 2a36fe3f3f257a779a1b.js} +1 -1
  19. package/assets/esri/core/workers/chunks/{fcaf9450642fcef83286.js → 3048e74e6246324ce6fc.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{95b82cbbe355266c65d7.js → 30af63b3b750142faadb.js} +1 -1
  21. package/assets/esri/core/workers/chunks/{74137ffec5265628c33b.js → 36c780a9527c75b36725.js} +1 -1
  22. package/assets/esri/core/workers/chunks/{6a0ec102962d2c7b4368.js → 40d803584eeade4df433.js} +1 -1
  23. package/assets/esri/core/workers/chunks/{a546ec82ba149e12f7bf.js → 41773d858e212468db88.js} +1 -1
  24. package/assets/esri/core/workers/chunks/{129e04d24ced77c9bb6d.js → 49b967d89d2841cea675.js} +1 -1
  25. package/assets/esri/core/workers/chunks/{b59aaf30c7fe2c8d1aaa.js → 4b99b4cf729881e616bc.js} +1 -1
  26. package/assets/esri/core/workers/chunks/{2e096537a3a5555a4a93.js → 4cb751dc8d00bdaeb04c.js} +1 -1
  27. package/assets/esri/core/workers/chunks/{a09d2e1e2540921e4717.js → 4d3d7ec407ee5cd5f036.js} +1 -1
  28. package/assets/esri/core/workers/chunks/{85bba551057366cd00ae.js → 4db829a0238024736fe6.js} +1 -1
  29. package/assets/esri/core/workers/chunks/{2c626f525f3483c03477.js → 548b8f74a6883e364931.js} +1 -1
  30. package/assets/esri/core/workers/chunks/{25a3bd8bede2d07d3a54.js → 5af8fb4ec2c72697e35b.js} +1 -1
  31. package/assets/esri/core/workers/chunks/{340256866f524cb069f6.js → 5d2f043ebe1051326c56.js} +1 -1
  32. package/assets/esri/core/workers/chunks/{3f46acfda693c70abbdd.js → 61552b4b8111a8624d84.js} +1 -1
  33. package/assets/esri/core/workers/chunks/{e653c81ffb3d818645dd.js → 632fdf1d95ad69109427.js} +1 -1
  34. package/assets/esri/core/workers/chunks/{434a8ba841a59e0deab9.js → 67e533748435253aaba6.js} +1 -1
  35. package/assets/esri/core/workers/chunks/69d5f8ef78b9b8b3d33d.js +1 -0
  36. package/assets/esri/core/workers/chunks/{feb41abc03d677df6f73.js → 6b9961261241fdce0e94.js} +1 -1
  37. package/assets/esri/core/workers/chunks/6f897b4e7ddd1dd1672b.js +1 -0
  38. package/assets/esri/core/workers/chunks/{8aa80b892fde552577e8.js → 700b1d5bc67b7e1b3ff3.js} +1 -1
  39. package/assets/esri/core/workers/chunks/{e251921bc5367258c4d2.js → 710b8251a59884aee31e.js} +1 -1
  40. package/assets/esri/core/workers/chunks/{f528ac5c648ca6a98582.js → 711cfb84659cb4437679.js} +1 -1
  41. package/assets/esri/core/workers/chunks/{af349c7bc8ef41a0e1bd.js → 7748c2886d0122b40eeb.js} +1 -1
  42. package/assets/esri/core/workers/chunks/{8a7b02037151767542f1.js → 7dbf4c7480bf9c72820d.js} +1 -1
  43. package/assets/esri/core/workers/chunks/{1bca39e0e651426bdbb5.js → 7dfbc31f3b56728485a4.js} +1 -1
  44. package/assets/esri/core/workers/chunks/{c19f238b55ff2893f7c2.js → 82a022cc21364c9a8539.js} +1 -1
  45. package/assets/esri/core/workers/chunks/{5cb26bbaa08114aec5ce.js → 89cc1a5539b82fb46216.js} +1 -1
  46. package/assets/esri/core/workers/chunks/{8ab57cb1bfd3dc8d3c2a.js → 8b8118ab56cc808b5a71.js} +1 -1
  47. package/assets/esri/core/workers/chunks/{542e5640ea1b80ef801a.js → 9189dfe19a2a2ccd5173.js} +1 -1
  48. package/assets/esri/core/workers/chunks/{f74ae0eff3f08978e607.js → 9f358c7b052cdc0ac06f.js} +1 -1
  49. package/assets/esri/core/workers/chunks/{ee08ae5b73439a1ff666.js → a163c6005aba3378edaa.js} +1 -1
  50. package/assets/esri/core/workers/chunks/{ec9a2425b4a498054a19.js → a17673e691ced46a90d3.js} +1 -1
  51. package/assets/esri/core/workers/chunks/{72bd866df89b8d92e247.js → a43b33955aa78a2a8deb.js} +1 -1
  52. package/assets/esri/core/workers/chunks/{46c5371c7a627537098c.js → a88f346786b04bd194dc.js} +6 -6
  53. package/assets/esri/core/workers/chunks/{092e311cb7aea92a6a26.js → acb265a22be5e12f38e5.js} +1 -1
  54. package/assets/esri/core/workers/chunks/ad96132bc89671e595f3.js +1 -0
  55. package/assets/esri/core/workers/chunks/{9e8f012a56237fc8285f.js → aea44253c80493ef5755.js} +1 -1
  56. package/assets/esri/core/workers/chunks/b5b9d42e1f84ee82429c.js +1 -0
  57. package/assets/esri/core/workers/chunks/c046c4fc934bc6f54c69.js +1 -0
  58. package/assets/esri/core/workers/chunks/{c72a904e01dc8c17d992.js → c47d095434d09b5f10c6.js} +1 -1
  59. package/assets/esri/core/workers/chunks/c4b7111dcedd9d6e1c2a.js +1 -0
  60. package/assets/esri/core/workers/chunks/{81cad8d2f62a5f671c55.js → cb4db5489388559d6bd9.js} +1 -1
  61. package/assets/esri/core/workers/chunks/{bbd44ac63d2a317d8ed9.js → cc794bb94ebc1cb66024.js} +1 -1
  62. package/assets/esri/core/workers/chunks/{be308db5b61a7246edfe.js → cc94bf05b235e65291fc.js} +1 -1
  63. package/assets/esri/core/workers/chunks/d4af9faa5d901274fad2.js +1 -0
  64. package/assets/esri/core/workers/chunks/d77c68e0fc3b259bf4f9.js +1 -0
  65. package/assets/esri/core/workers/chunks/{fc5a36e54929e03efa86.js → dba5f44c4e4a3f075df2.js} +1 -1
  66. package/assets/esri/core/workers/chunks/{1f43e06dcfe56229bb0f.js → debe45e792212682b304.js} +1 -1
  67. package/assets/esri/core/workers/chunks/{8414ffd937c1099e0bbc.js → e6d10136bc08aef255ff.js} +1 -1
  68. package/assets/esri/core/workers/chunks/{45fd2b456a6997584ca1.js → f8379cd45f750f28a3d8.js} +1 -1
  69. package/assets/esri/core/workers/chunks/{709e019885822b1f6f3e.js → f905f1a1aa4c123cbe83.js} +1 -1
  70. package/assets/esri/core/workers/chunks/{a2fcbc494333376192aa.js → f9c80e9fc349db4873e8.js} +1 -1
  71. package/assets/esri/core/workers/chunks/{e0351753f6b4d1adf11e.js → fc0dbb588a4062615cb6.js} +1 -1
  72. package/assets/esri/core/workers/chunks/feb4f8c807bb0dca488f.js +1 -0
  73. package/assets/esri/layers/raster/formats/lerc-wasm.wasm +0 -0
  74. package/chunks/GlobalIllumination.glsl.js +17 -47
  75. package/config.js +1 -1
  76. package/core/workers/WorkerFallback.js +4 -2
  77. package/core/workers/workerFactory.js +1 -1
  78. package/core/workers/workers.js +4 -2
  79. package/form/elements/inputs.d.ts +126 -25
  80. package/form/elements/inputs.js +1 -1
  81. package/form/elements.d.ts +1 -0
  82. package/geometry/support/clipRay.js +1 -1
  83. package/geometry/support/plane.js +1 -1
  84. package/graphic/AnnotationFeatureGraphicOrigin.d.ts +49 -9
  85. package/graphic/BuildingGraphicOrigin.d.ts +49 -0
  86. package/graphic/CSVGraphicOrigin.d.ts +42 -9
  87. package/graphic/CatalogGraphicOrigin.d.ts +42 -9
  88. package/graphic/DimensionFeatureGraphicOrigin.d.ts +42 -9
  89. package/graphic/FeatureGraphicOrigin.d.ts +42 -9
  90. package/graphic/GeoJSONGraphicOrigin.d.ts +42 -9
  91. package/graphic/GeoRSSGraphicOrigin.d.ts +42 -9
  92. package/graphic/GraphicOrigin.d.ts +52 -12
  93. package/graphic/ImageryGraphicOrigin.d.ts +42 -9
  94. package/graphic/ImageryTileGraphicOrigin.d.ts +42 -9
  95. package/graphic/KMLGraphicOrigin.d.ts +47 -10
  96. package/graphic/KnowledgeGraphGraphicOrigin.d.ts +49 -1
  97. package/graphic/LinkChartGraphicOrigin.d.ts +49 -1
  98. package/graphic/MapImageGraphicOrigin.d.ts +49 -1
  99. package/graphic/MapNotesGraphicOrigin.d.ts +48 -1
  100. package/graphic/OGCFeatureGraphicOrigin.d.ts +42 -9
  101. package/graphic/OrientedImageryGraphicOrigin.d.ts +42 -9
  102. package/graphic/ParquetGraphicOrigin.d.ts +42 -9
  103. package/graphic/PointCloudGraphicOrigin.d.ts +43 -0
  104. package/graphic/SceneGraphicOrigin.d.ts +43 -0
  105. package/graphic/SketchGraphicOrigin.d.ts +43 -0
  106. package/graphic/StreamGraphicOrigin.d.ts +43 -0
  107. package/graphic/SubtypeGroupGraphicOrigin.d.ts +49 -1
  108. package/graphic/TileGraphicOrigin.d.ts +49 -1
  109. package/graphic/VectorTileGraphicOrigin.d.ts +43 -14
  110. package/graphic/VoxelGraphicOrigin.d.ts +43 -0
  111. package/graphic/WCSGraphicOrigin.d.ts +43 -0
  112. package/graphic/WFSGraphicOrigin.d.ts +42 -9
  113. package/graphic/getGraphicOriginTitle.d.ts +21 -3
  114. package/kernel.js +1 -1
  115. package/layers/GaussianSplatLayer.d.ts +2 -1
  116. package/layers/GeoJSONLayer.d.ts +2 -107
  117. package/layers/ParquetLayer.d.ts +24 -1
  118. package/layers/ParquetLayer.js +1 -1
  119. package/layers/SceneLayer.d.ts +40 -16
  120. package/layers/ViewshedLayer.d.ts +10 -4
  121. package/layers/WMSLayer.d.ts +2 -69
  122. package/layers/mixins/ReloadableLayer.js +1 -1
  123. package/layers/mixins/SublayersOwner.js +1 -1
  124. package/layers/mixins/TemporalLayer.d.ts +70 -48
  125. package/layers/mixins/TiledImagery.d.ts +0 -11
  126. package/layers/orientedImagery/transformations/utils.js +1 -1
  127. package/layers/save/featureLayerUtils.js +1 -1
  128. package/layers/save/imageryUtils.js +1 -1
  129. package/layers/save/mapImageLayerUtils.js +1 -1
  130. package/layers/save/mediaLayerUtils.js +1 -1
  131. package/layers/save/parquetLayerUtils.js +2 -0
  132. package/layers/save/streamLayerUtils.js +1 -1
  133. package/layers/support/LabelClass.d.ts +8 -2
  134. package/layers/support/Sublayer.js +1 -1
  135. package/layers/support/SubtypeSublayer.js +1 -1
  136. package/layers/support/layerUtils.js +1 -1
  137. package/layers/support/layersMapping.js +1 -1
  138. package/package.json +2 -2
  139. package/popup/content.d.ts +38 -1
  140. package/popup/content.js +1 -1
  141. package/portal/schemas/definitions.js +1 -1
  142. package/portal/schemas/webScene.js +1 -1
  143. package/smartMapping/popup/support/clusterUtils.js +1 -1
  144. package/smartMapping/popup/support/utils.js +2 -2
  145. package/smartMapping/renderers/size.js +1 -1
  146. package/smartMapping/renderers/support/regenerateUtils.js +1 -1
  147. package/support/timeUtils.d.ts +11 -0
  148. package/symbols/cim/CIMCursor.js +1 -1
  149. package/tables/elements.d.ts +1 -0
  150. package/views/2d/engine/webgl/GlyphWorker.js +1 -1
  151. package/views/2d/engine/webgl/SpriteMosaic.js +1 -1
  152. package/views/2d/engine/webgl/animations/instructions.js +1 -1
  153. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedMarkerMeshWriter.js +1 -1
  154. package/views/3d/environment/SunLighting.d.ts +0 -1
  155. package/views/3d/environment/SunLighting.js +1 -1
  156. package/views/3d/environment/VirtualLighting.d.ts +0 -1
  157. package/views/3d/environment/VirtualLighting.js +1 -1
  158. package/views/3d/layers/support/featureTileQuery3D.js +1 -1
  159. package/views/3d/state/helpers/SceneIntersectionHelper.js +1 -1
  160. package/views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateSceneLighting.glsl.js +5 -5
  161. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.glsl.js +1 -1
  162. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.js +1 -1
  163. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationTechniqueConfiguration.js +1 -1
  164. package/views/3d/webgl-engine/effects/glow/applyEmissiveGlow.glsl.js +9 -4
  165. package/views/3d/webgl-engine/lib/BindParameters.js +1 -1
  166. package/views/3d/webgl-engine/lib/Intersector.js +1 -1
  167. package/views/3d/webgl-engine/lib/Renderer.js +1 -1
  168. package/views/3d/webgl-engine/lib/screenPolygonTriangleIntersections.js +1 -1
  169. package/views/3d/webgl-engine/materials/ColorMaterial.js +1 -1
  170. package/views/3d/webgl-engine/materials/DefaultMaterial.js +1 -1
  171. package/views/3d/webgl-engine/materials/PathMaterial.js +1 -1
  172. package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
  173. package/views/3d/webgl-engine/materials/TriangleMaterial.js +1 -1
  174. package/views/3d/webgl-engine/materials/internal/worldSizedRibbonLineIntersectionUtils.js +2 -0
  175. package/views/layers/LineOfSightLayerView.d.ts +2 -2
  176. package/views/layers/ViewshedLayerView.d.ts +2 -1
  177. package/views/selection/SelectionOperation.js +1 -1
  178. package/views/selection/types.d.ts +43 -3
  179. package/views/support/layerViewUtils.js +1 -1
  180. package/views/support/screenshotUtils.js +1 -1
  181. package/views/support/selectionUtils.js +1 -1
  182. package/views/webgl/Texture.js +1 -1
  183. package/webdoc/support/webdocSaveUtils.js +1 -1
  184. package/webscene/Slide.d.ts +1 -2
  185. package/widgets/DirectionalPad/VisibleElements.d.ts +5 -1
  186. package/widgets/Feature/FeatureExpression/FeatureExpressionViewModel.js +1 -1
  187. package/widgets/FloorFilter/FloorFilterViewModel.js +1 -1
  188. package/widgets/OrientedImageryViewer/ImageMeasurementWorker.js +1 -1
  189. package/widgets/OrientedImageryViewer/OrientedImageryViewerViewModel.js +1 -1
  190. package/widgets/OrientedImageryViewer/imageMeasurementUtils.js +1 -1
  191. package/widgets/OrientedImageryViewer/services/ImageMeasurementService.js +1 -1
  192. package/widgets/Search/SearchViewModel.js +1 -1
  193. package/widgets/Search/support/layerSearchUtils.js +1 -1
  194. package/widgets/Sketch/SketchViewModel.js +1 -1
  195. package/widgets/Sketch/support/PluginManager.js +1 -1
  196. package/widgets/UtilityNetworkTrace/UtilityNetworkTraceFeature.js +1 -1
  197. package/widgets/UtilityNetworkValidateTopology/UtilityNetworkValidateTopologyViewModel.d.ts +3 -3
  198. package/widgets/UtilityNetworkValidateTopology.d.ts +1 -1
  199. package/widgets/support/SelectionList/GroupLayerItem.d.ts +6 -0
  200. package/widgets/support/SelectionList/GroupLayerItem.js +1 -1
  201. package/widgets/support/SelectionList/ItemBase.js +1 -1
  202. package/widgets/support/SelectionToolbar/SelectionToolbarViewModel.d.ts +6 -1
  203. package/widgets/support/SelectionToolbar/SelectionToolbarViewModel.js +1 -1
  204. package/widgets/support/SelectionToolbar.d.ts +8 -1
  205. package/widgets/support/SelectionToolbar.js +1 -1
  206. package/widgets/support/Selector2D/selectorUtils.js +1 -1
  207. package/assets/esri/core/workers/chunks/0cb50bc2b2125c5fedf2.js +0 -1
  208. package/assets/esri/core/workers/chunks/1fe24ffcd88280d84fbe.js +0 -1
  209. package/assets/esri/core/workers/chunks/2f04b8679c9f15390517.js +0 -1
  210. package/assets/esri/core/workers/chunks/42045cf46497828cd3c0.js +0 -1
  211. package/assets/esri/core/workers/chunks/72071ea5de89720fbe42.js +0 -1
  212. package/assets/esri/core/workers/chunks/9de5ad77bc37ec142218.js +0 -1
  213. package/assets/esri/core/workers/chunks/c19cd5a03b6d480fe53b.js +0 -1
  214. package/assets/esri/core/workers/chunks/d1f98c5249c487eb96f1.js +0 -1
  215. package/assets/esri/core/workers/chunks/e01fc1c31bc023dd0e33.js +0 -1
  216. package/assets/esri/core/workers/chunks/e077e321a3109c2fbbe2.js +0 -1
@@ -266,21 +266,33 @@ export interface SceneLayerProperties extends LayerProperties, APIKeyMixinProper
266
266
  */
267
267
  timeExtent?: TimeExtentProperties | null;
268
268
  /**
269
- * TimeInfo provides information such as date fields that store
270
- * [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
271
- * and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField) time
272
- * for each feature and the [TimeInfo.fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent)
273
- * for the layer.
269
+ * Defines temporal information for a layer, such as [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField) and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField)
270
+ * date fields used to track when features remain visible, as well as the layer's [full time extent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent).
271
+ * If `timeInfo` is configured on the underlying service, it is automatically read and used by the layer.
274
272
  *
275
- * If timeInfo configuration exists on the service it gets read and used from there. A developer
276
- * can overwrite or create a timeInfo configuration on initialization.
277
- * The timeInfo parameters cannot be changed after the layer is [loaded](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#load).
273
+ * The `timeInfo` property can be set or overridden in the scene layer constructor or at runtime.
274
+ * When overriding `timeInfo`, ensure that `startField` and `endField` correspond to valid date fields in the layer's schema.
275
+ * To calculate a `fullTimeExtent` that covers all dates in the configured `startField` and `endField`, call
276
+ * the [getTimeExtentFromLayers()](https://developers.arcgis.com/javascript/latest/references/core/support/timeUtils/#getTimeExtentFromLayers) function. Then assign the result to `layer.timeInfo.fullTimeExtent`.
278
277
  *
279
278
  * TimeInfo's [startField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField) and [endField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField)
280
279
  * can be `date`, `date-only` or `timestamp-offset` [field type](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Field/#type) for [SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/)
281
280
  * and [BuildingComponentSublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/).
282
281
  *
283
282
  * @since 4.30
283
+ * @example
284
+ * // update layer's timeInfo at runtime
285
+ * sceneLayer.timeInfo = {
286
+ * startField: "DateField",
287
+ * timeZone: "UTC"
288
+ * };
289
+ *
290
+ * // calculate the fullTimeExtent based on startField
291
+ * const fullTimeExtent = getTimeExtentFromLayers([sceneLayer]);
292
+ * sceneLayer.timeInfo.fullTimeExtent = fullTimeExtent;
293
+ * @example
294
+ * // set layer's timeInfo to null
295
+ * sceneLayer.timeInfo = null;
284
296
  */
285
297
  timeInfo?: TimeInfoProperties | null;
286
298
  /**
@@ -1043,21 +1055,33 @@ export default class SceneLayer extends SceneLayerSuperclass {
1043
1055
  get timeExtent(): TimeExtent | null | undefined;
1044
1056
  set timeExtent(value: TimeExtentProperties | null | undefined);
1045
1057
  /**
1046
- * TimeInfo provides information such as date fields that store
1047
- * [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
1048
- * and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField) time
1049
- * for each feature and the [TimeInfo.fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent)
1050
- * for the layer.
1058
+ * Defines temporal information for a layer, such as [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField) and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField)
1059
+ * date fields used to track when features remain visible, as well as the layer's [full time extent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent).
1060
+ * If `timeInfo` is configured on the underlying service, it is automatically read and used by the layer.
1051
1061
  *
1052
- * If timeInfo configuration exists on the service it gets read and used from there. A developer
1053
- * can overwrite or create a timeInfo configuration on initialization.
1054
- * The timeInfo parameters cannot be changed after the layer is [loaded](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#load).
1062
+ * The `timeInfo` property can be set or overridden in the scene layer constructor or at runtime.
1063
+ * When overriding `timeInfo`, ensure that `startField` and `endField` correspond to valid date fields in the layer's schema.
1064
+ * To calculate a `fullTimeExtent` that covers all dates in the configured `startField` and `endField`, call
1065
+ * the [getTimeExtentFromLayers()](https://developers.arcgis.com/javascript/latest/references/core/support/timeUtils/#getTimeExtentFromLayers) function. Then assign the result to `layer.timeInfo.fullTimeExtent`.
1055
1066
  *
1056
1067
  * TimeInfo's [startField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField) and [endField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField)
1057
1068
  * can be `date`, `date-only` or `timestamp-offset` [field type](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Field/#type) for [SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/)
1058
1069
  * and [BuildingComponentSublayer](https://developers.arcgis.com/javascript/latest/references/core/layers/buildingSublayers/BuildingComponentSublayer/).
1059
1070
  *
1060
1071
  * @since 4.30
1072
+ * @example
1073
+ * // update layer's timeInfo at runtime
1074
+ * sceneLayer.timeInfo = {
1075
+ * startField: "DateField",
1076
+ * timeZone: "UTC"
1077
+ * };
1078
+ *
1079
+ * // calculate the fullTimeExtent based on startField
1080
+ * const fullTimeExtent = getTimeExtentFromLayers([sceneLayer]);
1081
+ * sceneLayer.timeInfo.fullTimeExtent = fullTimeExtent;
1082
+ * @example
1083
+ * // set layer's timeInfo to null
1084
+ * sceneLayer.timeInfo = null;
1061
1085
  */
1062
1086
  get timeInfo(): TimeInfo | null | undefined;
1063
1087
  set timeInfo(value: TimeInfoProperties | null | undefined);
@@ -84,16 +84,22 @@ export interface ViewshedLayerProperties extends LayerProperties, OperationalLay
84
84
  *
85
85
  * > [!WARNING]
86
86
  * >
87
- * > **Known Limitations**
88
- * >
89
- * > This layer is only supported in a 3D [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/).
90
- * > The results of the tool vary depending on the zoom level, as changes in zoom level affect the level of detail (LOD) of the scene geometry.
87
+ * > **Things to consider:**
88
+ * > * This analysis is only supported in a 3D [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/).
89
+ * > * The results of the tool vary depending on the zoom level, as changes in zoom level affect the level of detail (LOD) of the scene geometry.
90
+ * > * Snapping, tooltips, display units, and input units used during interactive placement and editing are inherited from
91
+ * [ViewOptions](https://developers.arcgis.com/javascript/latest/references/core/views/interactive/options/ViewOptions/).
92
+ * > * Snapping is enabled by default. This can be temporarily disabled by holding the `CTRL` key.
93
+ * > * Layer types currently supported for snapping are: [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/), [GraphicsLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GraphicsLayer/) (except Mesh geometries),
94
+ * > [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/), [WFSLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/WFSLayer/), [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/),
95
+ * > [3D Object SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/), and [BuildingSceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/BuildingSceneLayer/).
91
96
  *
92
97
  * @since 4.31
93
98
  * @see [ViewshedLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/ViewshedLayerView/)
94
99
  * @see [Viewshed](https://developers.arcgis.com/javascript/latest/references/core/analysis/Viewshed/)
95
100
  * @see [ViewshedAnalysis](https://developers.arcgis.com/javascript/latest/references/core/analysis/ViewshedAnalysis/)
96
101
  * @see [ViewshedAnalysisView3D](https://developers.arcgis.com/javascript/latest/references/core/views/3d/analysis/ViewshedAnalysisView3D/)
102
+ * @see [ViewOptions](https://developers.arcgis.com/javascript/latest/references/core/views/interactive/options/ViewOptions/)
97
103
  * @see [Sample - ViewshedLayer in slides](https://developers.arcgis.com/javascript/latest/sample-code/layers-viewshed/)
98
104
  */
99
105
  export default class ViewshedLayer extends ViewshedLayerSuperclass {
@@ -3,7 +3,6 @@ import type Collection from "../core/Collection.js";
3
3
  import type Extent from "../geometry/Extent.js";
4
4
  import type SpatialReference from "../geometry/SpatialReference.js";
5
5
  import type Layer from "./Layer.js";
6
- import type TimeInfo from "./support/TimeInfo.js";
7
6
  import type WMSSublayer from "./support/WMSSublayer.js";
8
7
  import type TimeExtent from "../time/TimeExtent.js";
9
8
  import type TimeInterval from "../time/TimeInterval.js";
@@ -17,7 +16,6 @@ import type { PortalLayer, PortalLayerProperties } from "./mixins/PortalLayer.js
17
16
  import type { RefreshableLayer, RefreshableLayerEvents, RefreshableLayerProperties } from "./mixins/RefreshableLayer.js";
18
17
  import type { ScaleRangeLayer, ScaleRangeLayerProperties } from "./mixins/ScaleRangeLayer.js";
19
18
  import type { TemporalLayer, TemporalLayerProperties } from "./mixins/TemporalLayer.js";
20
- import type { TimeInfoProperties } from "./support/TimeInfo.js";
21
19
  import type { WMSDimension } from "./wms/types.js";
22
20
  import type { TimeExtentProperties } from "../time/TimeExtent.js";
23
21
  import type { TimeIntervalProperties } from "../time/TimeInterval.js";
@@ -150,39 +148,6 @@ export interface WMSLayerProperties extends LayerProperties, PortalLayerProperti
150
148
  * });
151
149
  */
152
150
  timeExtent?: TimeExtentProperties | null;
153
- /**
154
- * TimeInfo provides information such as date fields that store
155
- * [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
156
- * and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField) time
157
- * for each feature and the [TimeInfo.fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent)
158
- * for the layer. The `timeInfo` property is automatically set at layer initialization if the layer has one or more time dimensions.
159
- * The [TimeInfo.fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent) for `timeInfo` is
160
- * automatically set to the union of all time dimension extents.
161
- * The timeInfo parameters cannot be changed after the layer is [loaded](https://developers.arcgis.com/javascript/latest/references/core/layers/WMSLayer/#load).
162
- *
163
- * @since 4.17
164
- * @example
165
- * // create geojson layer from usgs earthquakes geojson feed
166
- * const geojsonLayer = new GeoJSONLayer({
167
- * url: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson",
168
- * copyright: "USGS Earthquakes",
169
- * fields: [
170
- * { "name": "mag", "type": "double" },
171
- * { "name": "place", "type": "string" },
172
- * { "name": "time", "type": "date" }, // date field
173
- * { "name": "depth", "type": "double" }
174
- * ],
175
- * // timeInfo can be used to do temporal queries
176
- * // set the startField and endField.
177
- * // timeExtent is automatically calculated from the
178
- * // the start and end date fields
179
- * // The date values must be in milliseconds number from the UNIX epoch specified in UTC.
180
- * timeInfo: {
181
- * startField: "time"
182
- * }
183
- * });
184
- */
185
- timeInfo?: TimeInfoProperties | null;
186
151
  /**
187
152
  * A temporary offset of the time data based on a certain [TimeInterval](https://developers.arcgis.com/javascript/latest/references/core/time/TimeInterval/). This allows
188
153
  * users to overlay features from two or more time-aware layers with different time extents.
@@ -215,6 +180,7 @@ export interface WMSLayerProperties extends LayerProperties, PortalLayerProperti
215
180
  * }
216
181
  * }
217
182
  * });
183
+ * @see [Sample - Time Bar with actions and layer timeOffset](https://developers.arcgis.com/javascript/latest/sample-code/time-bar-time-offset/)
218
184
  * @example
219
185
  * // Offset a CSV Layer containing hurricanes from 2015 so that they appear in 2019 (+4 years).
220
186
  * let layer = new CSVLayer({
@@ -678,40 +644,6 @@ export default class WMSLayer extends WMSLayerSuperclass {
678
644
  */
679
645
  get timeExtent(): TimeExtent | null | undefined;
680
646
  set timeExtent(value: TimeExtentProperties | null | undefined);
681
- /**
682
- * TimeInfo provides information such as date fields that store
683
- * [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
684
- * and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField) time
685
- * for each feature and the [TimeInfo.fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent)
686
- * for the layer. The `timeInfo` property is automatically set at layer initialization if the layer has one or more time dimensions.
687
- * The [TimeInfo.fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent) for `timeInfo` is
688
- * automatically set to the union of all time dimension extents.
689
- * The timeInfo parameters cannot be changed after the layer is [loaded](https://developers.arcgis.com/javascript/latest/references/core/layers/WMSLayer/#load).
690
- *
691
- * @since 4.17
692
- * @example
693
- * // create geojson layer from usgs earthquakes geojson feed
694
- * const geojsonLayer = new GeoJSONLayer({
695
- * url: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson",
696
- * copyright: "USGS Earthquakes",
697
- * fields: [
698
- * { "name": "mag", "type": "double" },
699
- * { "name": "place", "type": "string" },
700
- * { "name": "time", "type": "date" }, // date field
701
- * { "name": "depth", "type": "double" }
702
- * ],
703
- * // timeInfo can be used to do temporal queries
704
- * // set the startField and endField.
705
- * // timeExtent is automatically calculated from the
706
- * // the start and end date fields
707
- * // The date values must be in milliseconds number from the UNIX epoch specified in UTC.
708
- * timeInfo: {
709
- * startField: "time"
710
- * }
711
- * });
712
- */
713
- get timeInfo(): TimeInfo | null | undefined;
714
- set timeInfo(value: TimeInfoProperties | null | undefined);
715
647
  /**
716
648
  * A temporary offset of the time data based on a certain [TimeInterval](https://developers.arcgis.com/javascript/latest/references/core/time/TimeInterval/). This allows
717
649
  * users to overlay features from two or more time-aware layers with different time extents.
@@ -744,6 +676,7 @@ export default class WMSLayer extends WMSLayerSuperclass {
744
676
  * }
745
677
  * }
746
678
  * });
679
+ * @see [Sample - Time Bar with actions and layer timeOffset](https://developers.arcgis.com/javascript/latest/sample-code/time-bar-time-offset/)
747
680
  * @example
748
681
  * // Offset a CSV Layer containing hurricanes from 2015 so that they appear in 2019 (+4 years).
749
682
  * let layer = new CSVLayer({
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{abortHandle as t}from"../../core/handleUtils.js";import{debounce as n,throwIfAbortError as r}from"../../core/promiseUtils.js";import{property as i,subclass as a}from"../../core/accessorSupport/decorators.js";import{getOwningPortalUrl as o}from"../support/layerUtils.js";import s from"../../portal/Portal.js";import c from"../../portal/PortalItem.js";const l=`reload`,u=u=>{let d=u,f=class extends d{constructor(...e){super(...e),this._loadTimestamp=0,this._pendingReloadCount=0,this._serviceItemModified=null,this._debounceReload=n(async()=>{if(this.destroyed||!this.loaded||!this.canReload())return!1;let e=new AbortController;this.addHandles(t(e),l);try{let t=null,n;if(this.portalItem?.id&&this.portalItem.id===this.serviceItemId)n=await this.reloadFromPortal({supportedTypes:this.supportedPortalItemTypes},{signal:e.signal});else{let r=await this._shouldReloadFromServiceItem(e.signal);n=r.updated,t=r.modified}return n&&await this.reloadFromService(e.signal),e.signal.throwIfAborted(),t!=null&&(this._serviceItemModified=t),n}finally{this.removeHandles(l)}}),this.when().then(()=>{this._loadTimestamp=Date.now()},()=>{})}get reloading(){return this._pendingReloadCount>0}reload(){return this.destroyed||!this.loaded||!this.canReload()?Promise.resolve(!1):(this._pendingReloadCount++,this._debounceReload().finally(()=>{this._pendingReloadCount--}))}canReload(){return this.url!=null}async _shouldReloadFromServiceItem(e){let{serviceItemId:t,url:n}=this;if(!t||!n)return{modified:null,updated:!0};try{let r=await o(n,{signal:e});if(!r)return{modified:null,updated:!0};let i=new s({url:r}),a=new c({apiKey:this.apiKey,id:t,portal:i});await a.load({signal:e});let l=a.modified?.getTime();if(l==null)return{modified:null,updated:!0};let u=this._serviceItemModified;return{modified:l,updated:u==null?l>this._loadTimestamp:u<l}}catch(e){return r(e),{modified:null,updated:!0}}}};return e([i({clonable:!1})],f.prototype,`_pendingReloadCount`,void 0),e([i({readOnly:!0})],f.prototype,`reloading`,null),f=e([a(`esri.layers.mixins.ReloadableLayer`)],f),f};export{u as ReloadableLayer};
2
+ import{__decorate as e}from"tslib";import{abortHandle as t}from"../../core/handleUtils.js";import{debounce as n,throwIfAbortError as r}from"../../core/promiseUtils.js";import{property as i,subclass as a}from"../../core/accessorSupport/decorators.js";import{getOwningPortalUrl as o}from"../support/layerUtils.js";import s from"../../portal/Portal.js";import c from"../../portal/PortalItem.js";const l=`reload`,u=u=>{let d=u,f=class extends d{constructor(...e){super(...e),this._loadTimestamp=0,this._pendingReloadCount=0,this._serviceItemModified=null,this._debounceReload=n(async()=>{if(this.destroyed||!this.loaded||!this.canReload())return!1;let e=new AbortController;this.addHandles(t(e),l);try{let t=null,n=!!this.portalItem?.id&&this.portalItem.id===this.serviceItemId,r=this.portalItem?.id?await this.reloadFromPortal({supportedTypes:this.supportedPortalItemTypes},{signal:e.signal}):!1,i;if(n)i=r;else{let n=await this._shouldReloadFromServiceItem(e.signal);i=n.updated,t=n.modified}return i&&await this.reloadFromService(e.signal),e.signal.throwIfAborted(),t!=null&&(this._serviceItemModified=t),i||r}finally{this.removeHandles(l)}}),this.when().then(()=>{this._loadTimestamp=Date.now()},()=>{})}get reloading(){return this._pendingReloadCount>0}reload(){return this.destroyed||!this.loaded||!this.canReload()?Promise.resolve(!1):(this._pendingReloadCount++,this._debounceReload().finally(()=>{this._pendingReloadCount--}))}canReload(){return this.url!=null}async _shouldReloadFromServiceItem(e){let{serviceItemId:t,url:n}=this;if(!t||!n)return{modified:null,updated:!0};try{let r=await o(n,{signal:e});if(!r)return{modified:null,updated:!0};let i=new s({url:r}),a=new c({apiKey:this.apiKey,id:t,portal:i});await a.load({signal:e});let l=a.modified?.getTime();if(l==null)return{modified:null,updated:!0};let u=this._serviceItemModified;return{modified:l,updated:u==null?l>this._loadTimestamp:u<l}}catch(e){return r(e),{modified:null,updated:!0}}}};return e([i({clonable:!1})],f.prototype,`_pendingReloadCount`,void 0),e([i({readOnly:!0})],f.prototype,`reloading`,null),f=e([a(`esri.layers.mixins.ReloadableLayer`)],f),f};export{u as ReloadableLayer};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../core/Collection.js";import n from"../../core/CollectionFlattener.js";import r from"../../core/Error.js";import i from"../../core/Logger.js";import{watch as a,sync as o}from"../../core/reactiveUtils.js";import{property as s,subclass as c}from"../../core/accessorSupport/decorators.js";import{nameToId as l,idToName as u}from"../../core/accessorSupport/PropertyOrigin.js";import{getProperties as d}from"../../core/accessorSupport/utils.js";import f from"../support/Sublayer.js";import{isSublayerOverhaul as p}from"../support/sublayerUtils.js";function m(e,t){let n=[],r={};return e&&e.forEach(e=>{let i=new f;if(i.read(e,t),r[i.id]=i,e.parentLayerId!=null&&e.parentLayerId!==-1){let t=r[e.parentLayerId];t.sublayers||=[],t.sublayers.unshift(i)}else n.unshift(i)}),n}const h=t.ofType(f);function g(e,t){e&&e.forEach(e=>{t(e),e.sublayers&&e.sublayers.length&&g(e.sublayers,t)})}const _=_=>{let v=_,y=class extends v{constructor(...e){super(...e),this.allSublayers=new n({getCollections:()=>[this.sublayers],getChildrenFunction(e){return e.sublayers}}),this.sublayersSourceJSON={2:{},3:{},4:{},5:{},6:{}},this.subtables=null,this.addHandles([a(()=>this.sublayers,(e,t)=>this._handleSublayersChange(e,t),o),a(()=>this.subtables,(e,t)=>this._handleSublayersChange(e,t),o)])}destroy(){this.allSublayers.destroy()}readSublayers(e,t){if(!t||!e)return;let{sublayersSourceJSON:n}=this,r=l(t.origin);if(r<2||(n[r]={context:t,visibleLayers:e.visibleLayers||n[r].visibleLayers,layers:e.layers||n[r].layers},r>2))return;this._set(`serviceSublayers`,this.createSublayersForOrigin(`service`).sublayers);let{sublayers:i,origin:a}=this.createSublayersForOrigin(`web-document`),o=d(this);o.setDefaultOrigin(a),this._set(`sublayers`,new h(i)),o.setDefaultOrigin(`user`)}findSublayerById(e){return this.allSublayers.find(t=>t.id===e)}createServiceSublayers(){return this.createSublayersForOrigin(`service`).sublayers}createSublayersForOrigin(e){let t,n=l(e===`web-document`?`web-map`:e),r=2,i=this.sublayersSourceJSON[2].layers,a=this.sublayersSourceJSON[2].context,o=null,s=[3,4,5].filter(e=>e<=n);for(let e of s){let t=this.sublayersSourceJSON[e];p(t.layers)&&(r=e,i=t.layers,a=t.context,t.visibleLayers&&(o={visibleLayers:t.visibleLayers,context:t.context}))}let c=[3,4,5].filter(e=>e>r&&e<=n),d=null;for(let e of c){let{layers:n,visibleLayers:r,context:i}=this.sublayersSourceJSON[e];n&&(d={layers:n,context:i},t??=e),r&&(o={visibleLayers:r,context:i})}let f=m(i,a),_=new Map,v=new Set;if(d)for(let e of d.layers)_.set(e.id,e);if(o?.visibleLayers)for(let e of o.visibleLayers)v.add(e);return g(f,e=>{d&&e.read(_.get(e.id),d.context),o&&e.read({defaultVisibility:v.has(e.id)},o.context)}),{origin:u(r),originWithPartialOverrides:t?u(t):null,sublayers:new h({items:f})}}read(e,t){super.read(e,t),this.readSublayers(e,t)}_handleSublayersChange(e,t){t&&(t.forEach(e=>{e.parent=null,e.layer=null}),this.removeHandles(`sublayers-owner`)),e&&(e.forEach(e=>{e.parent=this,e.layer=this}),this.addHandles([e.on(`after-add`,({item:e})=>{e.parent=this,e.layer=this}),e.on(`after-remove`,({item:e})=>{e.parent=null,e.layer=null})],`sublayers-owner`),this.type===`tile`&&this.addHandles(e.on(`before-changes`,e=>{i.getLogger(`esri.layers.TileLayer`).error(new r(`tilelayer:sublayers-non-modifiable`,`Sublayer can't be added, moved, or removed from the layer's sublayers`,{layer:this})),e.preventDefault()}),`sublayers-owner`))}};return e([s({readOnly:!0})],y.prototype,`allSublayers`,void 0),e([s({readOnly:!0})],y.prototype,`effectiveScaleRange`,void 0),e([s({readOnly:!0,type:t.ofType(f)})],y.prototype,`serviceSublayers`,void 0),e([s({value:null,type:h,json:{read:!1,write:{allowNull:!0,ignoreOrigin:!0}}})],y.prototype,`sublayers`,void 0),e([s({readOnly:!0})],y.prototype,`sublayersSourceJSON`,void 0),e([s({type:h,json:{read:{source:`tables`}}})],y.prototype,`subtables`,void 0),y=e([c(`esri.layers.mixins.SublayersOwner`)],y),y};export{_ as SublayersOwner,g as forEachSublayer};
2
+ import{__decorate as e}from"tslib";import t from"../../core/Collection.js";import n from"../../core/CollectionFlattener.js";import r from"../../core/Error.js";import i from"../../core/Logger.js";import{watch as a,sync as o}from"../../core/reactiveUtils.js";import{property as s,subclass as c}from"../../core/accessorSupport/decorators.js";import{nameToId as l,idToName as u}from"../../core/accessorSupport/PropertyOrigin.js";import{getProperties as d}from"../../core/accessorSupport/utils.js";import f from"../support/Sublayer.js";import{isSublayerOverhaul as p}from"../support/sublayerUtils.js";function m(e,t){let n=[],r={};return e&&e.forEach(e=>{let i=new f;if(i.read(e,t),r[i.id]=i,e.parentLayerId!=null&&e.parentLayerId!==-1){let t=r[e.parentLayerId];t.sublayers||=[],t.sublayers.unshift(i)}else n.unshift(i)}),n}const h=t.ofType(f);function g(e,t){e&&e.forEach(e=>{t(e),e.sublayers&&e.sublayers.length&&g(e.sublayers,t)})}const _=_=>{let v=_,y=class extends v{constructor(...e){super(...e),this.allSublayers=new n({getCollections:()=>[this.sublayers],getChildrenFunction(e){return e.sublayers}}),this.sublayersSourceJSON={2:{},3:{},4:{},5:{},6:{}},this.subtables=null,this.addHandles([a(()=>this.sublayers,(e,t)=>this._handleSublayersChange(e,t),o),a(()=>this.subtables,(e,t)=>this._handleSublayersChange(e,t),o)])}destroy(){this.allSublayers.destroy()}readSublayers(e,t){if(!t||!e)return;let{sublayersSourceJSON:n}=this,r=l(t.origin);if(r<2||(n[r]={context:t,visibleLayers:e.visibleLayers||n[r].visibleLayers,layers:e.layers||n[r].layers},r>2))return;this._set(`serviceSublayers`,this.createSublayersForOrigin(`service`).sublayers);let{sublayers:i,origin:a}=this.createSublayersForOrigin(`web-document`),o=d(this);o.setDefaultOrigin(a),this._set(`sublayers`,new h(i)),o.setDefaultOrigin(`user`)}findSublayerById(e){return this.allSublayers.find(t=>t.id===e)}createServiceSublayers(){return this.createSublayersForOrigin(`service`).sublayers}createSublayersForOrigin(e){let t,n=l(e===`web-document`?`web-map`:e),r=2,i=this.sublayersSourceJSON[2].layers,a=this.sublayersSourceJSON[2].context,o=null,s=[3,4,5].filter(e=>e<=n);for(let e of s){let t=this.sublayersSourceJSON[e];p(t.layers)&&(r=e,i=t.layers,a=t.context,t.visibleLayers&&(o={visibleLayers:t.visibleLayers,context:t.context}))}let c=[3,4,5].filter(e=>e>r&&e<=n),d=null;for(let e of c){let{layers:n,visibleLayers:r,context:i}=this.sublayersSourceJSON[e];n&&(d={layers:n,context:i},t??=e),r&&(o={visibleLayers:r,context:i})}let f=m(i,a),_=new Map,v=new Set;if(d)for(let e of d.layers)_.set(e.id,e);if(o?.visibleLayers)for(let e of o.visibleLayers)v.add(e);return g(f,e=>{d&&e.read(_.get(e.id),d.context),o&&e.read({defaultVisibility:v.has(e.id)},o.context)}),{origin:u(r),originWithPartialOverrides:t?u(t):null,sublayers:new h({items:f})}}read(e,t){super.read(e,t),this.readSublayers(e,t)}_handleSublayersChange(e,t){t&&(t.forEach(e=>{e.parent=null,e.layer=null}),this.removeHandles(`sublayers-owner`)),e&&(e.forEach(e=>{e.parent=this,e.layer=this}),this.addHandles([e.on(`after-add`,({item:e})=>{e.parent=this,e.layer=this}),e.on(`after-remove`,({item:e})=>{e.parent=null,e.layer=null})],`sublayers-owner`),this.type===`tile`&&this.addHandles(e.on(`before-changes`,e=>{i.getLogger(`esri.layers.TileLayer`).error(new r(`tilelayer:sublayers-non-modifiable`,`Sublayer can't be added, moved, or removed from the layer's sublayers`,{layer:this})),e.preventDefault()}),`sublayers-owner`))}};return e([s({readOnly:!0})],y.prototype,`allSublayers`,void 0),e([s({readOnly:!0})],y.prototype,`effectiveScaleRange`,void 0),e([s({readOnly:!0})],y.prototype,`effectiveVisible`,void 0),e([s({readOnly:!0,type:t.ofType(f)})],y.prototype,`serviceSublayers`,void 0),e([s({value:null,type:h,json:{read:!1,write:{allowNull:!0,ignoreOrigin:!0}}})],y.prototype,`sublayers`,void 0),e([s({readOnly:!0})],y.prototype,`sublayersSourceJSON`,void 0),e([s({type:h,json:{read:{source:`tables`}}})],y.prototype,`subtables`,void 0),y=e([c(`esri.layers.mixins.SublayersOwner`)],y),y};export{_ as SublayersOwner,g as forEachSublayer};
@@ -57,28 +57,24 @@ export interface TemporalLayerProperties extends Partial<Pick<TemporalLayer, "us
57
57
  */
58
58
  timeExtent?: TimeExtentProperties | null;
59
59
  /**
60
- * TimeInfo provides information such as date fields that store
61
- * [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
62
- * and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField) time
63
- * for each feature and the [fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent)
64
- * for the layer. The `timeInfo` property, along with its `startField` and `endField` properties, must be set at the
65
- * time of layer initialization if it is being set for a
66
- * [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/),
67
- * [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/),
68
- * [OGCFeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/OGCFeatureLayer/) or
69
- * [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/)
70
- * initialized from [client-side features](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#creating-a-featurelayer).
71
- * The [fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent) for `timeInfo` is
72
- * automatically calculated based on its `startField` and `endField` properties.
73
- * The timeInfo parameters cannot be changed after the layer is [loaded](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#load).
60
+ * Defines temporal information for a layer, such as [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField) and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField)
61
+ * date fields used to track when features remain visible, as well as the layer's [full time extent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent).
62
+ * If `timeInfo` is configured on the underlying service, it is automatically read and used by the layer.
74
63
  *
75
- * TimeInfo's [TimeInfo.startField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField) and [endField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
76
- * can be `date`, `date-only` or `timestamp-offset` [field type](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Field/#type) for [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/)
77
- * and [MapImageLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/MapImageLayer/).
64
+ * The `timeInfo` can be set or overridden on the following feature based layers in the layer constructor or at runtime: [AnnotationFeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/AnnotationFeatureLayer/),
65
+ * [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/), [CatalogLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/), [DimensionFeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/DimensionFeatureLayer/), [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/),
66
+ * [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/), [OGCFeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/OGCFeatureLayer/), [OrientedImageryLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/OrientedImageryLayer/), [SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/),
67
+ * [StreamLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/StreamLayer/), and [SubtypeGroupLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/).
78
68
  *
79
- * @since 4.11
69
+ * When overriding a layer's `timeInfo`, ensure that `startField` and `endField` correspond to valid date fields in the layer's schema.
70
+ * To calculate a `fullTimeExtent` that covers all dates in the configured `startField` and `endField`, call
71
+ * [getTimeExtentFromLayers()](https://developers.arcgis.com/javascript/latest/references/core/support/timeUtils/#getTimeExtentFromLayers) method. Then assign the result to `layer.timeInfo.fullTimeExtent`.
72
+ *
73
+ * The `startField` and `endField` properties accept `date`, `date-only`, or `timestamp-offset` field types.
74
+ *
75
+ * @see [Samples using time-aware layers](https://developers.arcgis.com/javascript/latest/sample-code/?tagged=arcgis-time-bar)
80
76
  * @example
81
- * // create geojson layer from usgs earthquakes geojson feed
77
+ * // create geojson layer from USGS earthquakes GeoJSON feed
82
78
  * const geojsonLayer = new GeoJSONLayer({
83
79
  * url: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson",
84
80
  * copyright: "USGS Earthquakes",
@@ -89,14 +85,28 @@ export interface TemporalLayerProperties extends Partial<Pick<TemporalLayer, "us
89
85
  * { "name": "depth", "type": "double" }
90
86
  * ],
91
87
  * // timeInfo can be used to do temporal queries
92
- * // set the startField and endField.
93
- * // timeExtent is automatically calculated from the
94
- * // the start and end date fields
95
- * // The date values must be in milliseconds number from the UNIX epoch specified in UTC.
96
88
  * timeInfo: {
97
- * startField: "time"
89
+ * startField: "time",
90
+ * fullTimeExtent: {
91
+ * start: new Date(1970, 0, 1),
92
+ * end: new Date(2000, 11, 31)
93
+ * },
94
+ * timeZone: "UTC"
98
95
  * }
99
96
  * });
97
+ * @example
98
+ * // update layer's timeInfo at runtime after the feature layer is loaded
99
+ * featureLayer.timeInfo = {
100
+ * startField: "DateField",
101
+ * timeZone: "UTC"
102
+ * };
103
+ *
104
+ * // calculate the fullTimeExtent based on startField
105
+ * const fullTimeExtent = getTimeExtentFromLayers([featureLayer]);
106
+ * featureLayer.timeInfo.fullTimeExtent = fullTimeExtent;
107
+ * @example
108
+ * // set layer's timeInfo to null
109
+ * layer.timeInfo = null;
100
110
  */
101
111
  timeInfo?: TimeInfoProperties | null;
102
112
  /**
@@ -107,6 +117,7 @@ export interface TemporalLayerProperties extends Partial<Pick<TemporalLayer, "us
107
117
  * A time offset can be used for display purposes only. The query and selection are not affected by the offset.
108
118
  *
109
119
  * @since 4.14
120
+ * @see [Sample - Time Bar with actions and layer timeOffset](https://developers.arcgis.com/javascript/latest/sample-code/time-bar-time-offset/)
110
121
  * @example
111
122
  * // Offset a CSV Layer containing hurricanes from 2015 so that they appear in 2019 (+4 years).
112
123
  * let layer = new CSVLayer({
@@ -195,28 +206,24 @@ export abstract class TemporalLayer {
195
206
  get timeExtent(): TimeExtent | null | undefined;
196
207
  set timeExtent(value: TimeExtentProperties | null | undefined);
197
208
  /**
198
- * TimeInfo provides information such as date fields that store
199
- * [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
200
- * and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField) time
201
- * for each feature and the [fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent)
202
- * for the layer. The `timeInfo` property, along with its `startField` and `endField` properties, must be set at the
203
- * time of layer initialization if it is being set for a
204
- * [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/),
205
- * [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/),
206
- * [OGCFeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/OGCFeatureLayer/) or
207
- * [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/)
208
- * initialized from [client-side features](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#creating-a-featurelayer).
209
- * The [fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent) for `timeInfo` is
210
- * automatically calculated based on its `startField` and `endField` properties.
211
- * The timeInfo parameters cannot be changed after the layer is [loaded](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/#load).
209
+ * Defines temporal information for a layer, such as [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField) and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField)
210
+ * date fields used to track when features remain visible, as well as the layer's [full time extent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent).
211
+ * If `timeInfo` is configured on the underlying service, it is automatically read and used by the layer.
212
212
  *
213
- * TimeInfo's [TimeInfo.startField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField) and [endField](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
214
- * can be `date`, `date-only` or `timestamp-offset` [field type](https://developers.arcgis.com/javascript/latest/references/core/layers/support/Field/#type) for [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/)
215
- * and [MapImageLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/MapImageLayer/).
213
+ * The `timeInfo` can be set or overridden on the following feature based layers in the layer constructor or at runtime: [AnnotationFeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/AnnotationFeatureLayer/),
214
+ * [CSVLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CSVLayer/), [CatalogLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/CatalogLayer/), [DimensionFeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/DimensionFeatureLayer/), [FeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/FeatureLayer/),
215
+ * [GeoJSONLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/GeoJSONLayer/), [OGCFeatureLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/OGCFeatureLayer/), [OrientedImageryLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/OrientedImageryLayer/), [SceneLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/),
216
+ * [StreamLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/StreamLayer/), and [SubtypeGroupLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/SubtypeGroupLayer/).
216
217
  *
217
- * @since 4.11
218
+ * When overriding a layer's `timeInfo`, ensure that `startField` and `endField` correspond to valid date fields in the layer's schema.
219
+ * To calculate a `fullTimeExtent` that covers all dates in the configured `startField` and `endField`, call
220
+ * [getTimeExtentFromLayers()](https://developers.arcgis.com/javascript/latest/references/core/support/timeUtils/#getTimeExtentFromLayers) method. Then assign the result to `layer.timeInfo.fullTimeExtent`.
221
+ *
222
+ * The `startField` and `endField` properties accept `date`, `date-only`, or `timestamp-offset` field types.
223
+ *
224
+ * @see [Samples using time-aware layers](https://developers.arcgis.com/javascript/latest/sample-code/?tagged=arcgis-time-bar)
218
225
  * @example
219
- * // create geojson layer from usgs earthquakes geojson feed
226
+ * // create geojson layer from USGS earthquakes GeoJSON feed
220
227
  * const geojsonLayer = new GeoJSONLayer({
221
228
  * url: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson",
222
229
  * copyright: "USGS Earthquakes",
@@ -227,14 +234,28 @@ export abstract class TemporalLayer {
227
234
  * { "name": "depth", "type": "double" }
228
235
  * ],
229
236
  * // timeInfo can be used to do temporal queries
230
- * // set the startField and endField.
231
- * // timeExtent is automatically calculated from the
232
- * // the start and end date fields
233
- * // The date values must be in milliseconds number from the UNIX epoch specified in UTC.
234
237
  * timeInfo: {
235
- * startField: "time"
238
+ * startField: "time",
239
+ * fullTimeExtent: {
240
+ * start: new Date(1970, 0, 1),
241
+ * end: new Date(2000, 11, 31)
242
+ * },
243
+ * timeZone: "UTC"
236
244
  * }
237
245
  * });
246
+ * @example
247
+ * // update layer's timeInfo at runtime after the feature layer is loaded
248
+ * featureLayer.timeInfo = {
249
+ * startField: "DateField",
250
+ * timeZone: "UTC"
251
+ * };
252
+ *
253
+ * // calculate the fullTimeExtent based on startField
254
+ * const fullTimeExtent = getTimeExtentFromLayers([featureLayer]);
255
+ * featureLayer.timeInfo.fullTimeExtent = fullTimeExtent;
256
+ * @example
257
+ * // set layer's timeInfo to null
258
+ * layer.timeInfo = null;
238
259
  */
239
260
  get timeInfo(): TimeInfo | null | undefined;
240
261
  set timeInfo(value: TimeInfoProperties | null | undefined);
@@ -246,6 +267,7 @@ export abstract class TemporalLayer {
246
267
  * A time offset can be used for display purposes only. The query and selection are not affected by the offset.
247
268
  *
248
269
  * @since 4.14
270
+ * @see [Sample - Time Bar with actions and layer timeOffset](https://developers.arcgis.com/javascript/latest/sample-code/time-bar-time-offset/)
249
271
  * @example
250
272
  * // Offset a CSV Layer containing hurricanes from 2015 so that they appear in 2019 (+4 years).
251
273
  * let layer = new CSVLayer({
@@ -4,7 +4,6 @@ import type SpatialReference from "../../geometry/SpatialReference.js";
4
4
  import type DimensionalDefinition from "../support/DimensionalDefinition.js";
5
5
  import type MultidimensionalSubset from "../support/MultidimensionalSubset.js";
6
6
  import type RasterInfo from "../support/RasterInfo.js";
7
- import type TimeInfo from "../support/TimeInfo.js";
8
7
  import type ImageSampleParameters from "../../rest/support/ImageSampleParameters.js";
9
8
  import type ImageSampleResult from "../../rest/support/ImageSampleResult.js";
10
9
  import type TimeExtent from "../../time/TimeExtent.js";
@@ -273,16 +272,6 @@ export abstract class TiledImagery {
273
272
  * });
274
273
  */
275
274
  abstract accessor timeExtent: TimeExtent | null | undefined;
276
- /**
277
- * TimeInfo provides information such as date fields that store
278
- * [start](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#startField)
279
- * and [end](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#endField) time
280
- * for each feature and the [TimeInfo.fullTimeExtent](https://developers.arcgis.com/javascript/latest/references/core/layers/support/TimeInfo/#fullTimeExtent)
281
- * for the layer.
282
- *
283
- * @since 4.22
284
- */
285
- abstract accessor timeInfo: TimeInfo | null | undefined;
286
275
  /**
287
276
  * A temporary offset of the time data based on a certain [TimeInterval](https://developers.arcgis.com/javascript/latest/references/core/time/TimeInterval/). This allows
288
277
  * users to overlay features from two or more time-aware layers with different time extents.
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import e from"../../../core/Error.js";import{rad2deg as t,deg2rad as n}from"../../../core/mathUtils.js";import{create as r}from"../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{create as i,fromValues as a}from"../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{zeros as o,create as s}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{fromArray as c}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{transpose as l,multiply as u}from"../../../core/libs/gl-matrix-2/math/mat3.js";import{invertOrIdentity as d,mul as f}from"../../../core/libs/gl-matrix-2/math/mat4.js";import{scale as p,sub as m,add as h}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{isSerializable as g}from"../../../core/support/jsonUtils.js";import _ from"../../../geometry/Point.js";import{projectAsync as v}from"../../../geometry/projectionUtils.js";import{earth as y}from"../../../geometry/support/Ellipsoid.js";import{isWebMercator as b}from"../../../geometry/support/spatialReferenceUtils.js";import{a as x}from"../../../chunks/vec3.js";import{isConstantElevation as S,ConstantElevation as C,isElevationSource as w}from"../core/ElevationSourceDefinitions.js";import{getMetersPerUnitOfSR as T}from"../core/utils.js";import{getElevationSampler as ee}from"./updateElevationUtils.js";import{isNumber as E}from"../../../support/guards.js";import{defaultImageSphereSize as D}from"../../../widgets/PanoramicViewer/constants.js";function O(e,t,n){let[r,a,o,s]=t,[c,l,u,p]=n;k(r,a,o,s);let m=k(c,l,u,p),h=A(r,a,o,s),g=A(c,l,u,p),_=d(i(),h),[v,y,b,x]=ne(e,f(i(),_,g));return[v/x,y/x,m?0:b/x]}function k(e,t,n,r){return e[2]===0&&t[2]===0&&n[2]===0&&r[2]===0&&(e[2]=t[2]=n[2]=r[2]=1,!0)}function te(e){return e===0?1:e}function ne(e,t){let[n,r,i]=e,a=[0,0,0,0];return a[0]=n*t[0]+r*t[1]+i*t[2]+t[3],a[1]=n*t[4]+r*t[5]+i*t[6]+t[7],a[2]=n*t[8]+r*t[9]+i*t[10]+t[11],a[3]=te(n*t[12]+r*t[13]+i*t[14]+t[15]),a}function A(e,t,n,r){let o=re(c([...r,1]),d(Array(16),a(e[0],t[0],n[0],0,e[1],t[1],n[1],0,e[2],t[2],n[2],0,1,1,1,1))),s=o[0],l=o[1],u=o[2],f=i();return f[0]=s*e[0],f[1]=l*t[0],f[2]=u*n[0],f[3]=0,f[4]=s*e[1],f[5]=l*t[1],f[6]=u*n[1],f[7]=0,f[8]=s*e[2],f[9]=l*t[2],f[10]=u*n[2],f[11]=0,f[12]=s,f[13]=l,f[14]=u,f[15]=1,f}function j(e,t,n,r,i=o()){return i[0]=e[0]+t[0]*n,i[1]=e[1]+t[1]*n,i[2]=e[2]+t[2]*(n/r),i}function M(e,t,n){let r=o();return r[0]=e[0]*t,r[1]=e[1]*t,r[2]=e[2]*(t/n),r}function N(e,t){let[n,r,i]=e,a=o();return a[0]=n*t[0]+r*t[3]+i*t[6],a[1]=n*t[1]+r*t[4]+i*t[7],a[2]=n*t[2]+r*t[5]+i*t[8],a}function re(e,t){let[n,r,i,a]=e,o=[,,,,];return o[0]=n*t[0]+r*t[1]+i*t[2]+a*t[3],o[1]=n*t[4]+r*t[5]+i*t[6]+a*t[7],o[2]=n*t[8]+r*t[9]+i*t[10]+a*t[11],o[3]=n*t[12]+r*t[13]+i*t[14]+a*t[15],o}function ie(t,i,a,o=!0){if(!Number.isFinite(t))throw new e(`InvalidRotationAngle`,`Please specify a valid angle for rotation`);let s=a*(o?n(t):t),c=Math.cos(s),l=Math.sin(s),u=r();switch(i){case 0:u[4]=c,u[5]=-l,u[7]=l,u[8]=c;break;case 1:u[0]=c,u[2]=l,u[6]=-l,u[8]=c;break;case 2:u[0]=c,u[1]=-l,u[3]=l,u[4]=c;break;default:throw new e(`InvalidRotationAxis`,`Please specify either 0, 1 or 2 for X, Y or Z axis respectively`)}return u}const P={HPR:[[2,-1],[0,1],[2,-1]],OPK:[[0,1],[1,1],[2,1]],YPR:[[0,-1],[1,-1],[2,-1]]};function F(t,n,i=!0){if(t?.length!==3||n?.length!==3)throw new e(`InvalidRotationAngles`,`Please specify three angles with config for rotation`);let a=r();for(let e=0;e<3;e++){let[r,o]=n[e],s=ie(t[e],r,o,i);u(a,s,a)}return a}function I(e,t=!0){return F(e,P.OPK,t)}function L(e,t=!0){return F(e,P.HPR,t)}function ae(e,t,r){let i=Math.sin(n(r)),a=Math.cos(n(r)),o=[[e,0],[e,t],[0,t]];o.forEach((e,t)=>{o[t]=[a*e[0]-i*e[1],i*e[0]+a*e[1]]});let s={xmin:Math.min(0,o[0][0],o[1][0],o[2][0]),xmax:Math.max(0,o[0][0],o[1][0],o[2][0]),ymin:Math.min(0,o[0][1],o[1][1],o[2][1]),ymax:Math.max(0,o[0][1],o[1][1],o[2][1])};return{hfov:Math.abs(s.xmax-s.xmin),vfov:Math.abs(s.ymax-s.ymin)}}function oe(e,r){let i=Number(e[0]),a=Number(e[1]),o=Number(e[2]),[s,c,l,u]=r,d=n(s),f=n(c),p=l/Math.sqrt(1-u*Math.sin(d)**2),m=i/p,h=a/p,g=o/p,_=Math.cos(d)-Math.sin(d)*h+Math.cos(d)*g,v=Math.sin(d)+Math.cos(d)*h+Math.sin(d)*g,y=Math.sqrt(_**2+m**2),b=u*p*Math.sin(d),x=(e,t=5)=>{if(t===0)return e;let n=x(e,t-1);return Math.atan(v/y-(b-u*(l/Math.sqrt(1-u*Math.sin(n)**2))*Math.sin(n))/(p*y))},S=x(d),C=Math.atan(i/(p*_))+f,w=t(S);return[t(C),w,i/(Math.cos(S)*Math.sin(C-f))-l/Math.sqrt(1-u*Math.sin(S)**2)]}function R(e,t,n){let r=360/t,i=180/n,a=e.x-t/2,o=e.y-n/2;return{heading:a*r,pitch:90-o*i}}function se(e,t,n,r,i=D/2){let{heading:a,pitch:o}=B(e,i),s=r?$(a,o,r):[a,o];return{heading:a,pitch:o,...z(s[0],s[1],t,n)}}function z(e,t,n,r){let i=360/n,a=180/r,o=e%360,s=o<-180?o+360:o>180?o-360:o;return{x:n/2+s/i,y:r-t/a}}function B(e,n){let r=t(Math.acos(-e.z/n));return{heading:t(Math.atan2(e.x,e.y)),pitch:r}}function V(e,t){return[Math.sin(n(e))*Math.sin(n(t)),Math.cos(n(e))*Math.sin(n(t)),Math.cos(n(180-t))]}function H(e,t,n,r=D/2){let i=n?$(e,t,n,!0):[e,t];return p(s(),V(i[0],i[1]),r)}function ce(e,t,n,r,i=D/2){let{heading:a,pitch:o}=R(e,t,n);return H(a,o,r,i)}async function le(e,n,r){let i=await v(n,e.spatialReference,r),a=t(Math.atan2(i.y-e.y,i.x-e.x));return a=a>=0&&a<=90?90-a:a>90&&a<=180?360-a+90:90+Math.abs(a),a}function ue(e,t,n){let r=Math.cos(n),i=Math.sin(n),a=[1,0,0,1,0,0],o=a[0]*r+a[2]*i,s=a[1]*r+a[3]*i,c=-a[0]*i+a[2]*r,l=-a[1]*i+a[3]*r;return a[0]=o,a[1]=s,a[2]=c,a[3]=l,[e*a[0]+t*a[2]+a[4],e*a[1]+t*a[3]+a[5]]}const de=e=>e.toArray(),U=(...e)=>e.some(e=>e);function fe(e,t){if(U(e.length===0,e.some(({x:e,y:t})=>U(e==null,t==null)),!t.hasZ))throw Error(`Input pixels must have x, y and camera location must have z value`)}function pe(e,t){if(e.some(e=>e.z==null)||t.z==null)throw Error(`Input points and camera location must have z value`)}function me(e){if(e?.length!==9)throw Error(`Rotation matrix is not provided or is not a valid 3x3 matrix`)}function he(e,t){return b(t)?1/Math.cos(Math.PI/2-2*Math.atan(Math.exp(-1*e/y.radius))):1}const ge=e=>t=>new _({x:t[0],y:t[1],z:t[2],spatialReference:e});function _e(e,t,n,r){return[[-t,-t],[+t,-t],[+t,+t],[-t,+t]].map(([t,i])=>O(x(o(),n,[t,i,0]),r,e))}function W({a0:e,a1:t,a2:n,b0:r,b1:i,b2:a},o,s,c){let l=[e??o/2-.5,t,n??0,r??s/2-.5,i??0,a].map(ve);return c!=null&&G(l)?{affines:l,focalLength:c}:{affines:[o/2-.5,1,0,s/2-.5,0,-1]}}function ve(e,t){if(e==null)return null;let n=parseFloat(`${e}`);return isNaN(n)?null:n}function G(e){return e[1]!=null&&e[5]!=null}function ye(e,t,n){let{cameraHeight:r,cameraPitch:i,cameraRoll:a,elevation:o,farDistance:s,horizontalFieldOfView:c,location:l,verticalFieldOfView:u}=Q(e,e.location.spatialReference),d=o??(l.z??0)-r;return{...K(e,t,n),averageElevation:d,cameraPitch:i,cameraRoll:a??0,farDistance:s,horizontalFieldOfView:c,verticalFieldOfView:u}}function be(e,t,n,r){return X(r)?I([r.omega,r.phi,r.kappa]):Z(r)?L([r.heading,r.pitch,r.roll]):L([e,t,n??0])}function xe(e,t,n){let{cameraHeading:r,cameraHeight:i,farDistance:a,horizontalFieldOfView:o,location:s,verticalFieldOfView:c}=Q(e,e.location.spatialReference),l=(s.z??0)-i,u=-r,d=0,f=0;if(e?.matrix){let{matrix:t}=e;[d,f,u]=Ee(t)}return{averageElevation:l,cameraLocation:s,cameraHeading:r,farDistance:a,horizontalFieldOfView:o,imageHeight:n,imageWidth:t,verticalFieldOfView:c,horizonYaw:u,horizonPitch:d,horizonRoll:f}}function K(e,t,n){let{a0:r,a1:i,a2:a,b0:o,b1:s,b2:c,cameraHeading:l,cameraOrientation:u,cameraPitch:d,cameraRoll:f,focalLength:p,horizontalFieldOfView:m,location:h,matrix:g,principalX:_,principalY:v,radial:y,tangential:b,verticalFieldOfView:x}=e,{affines:S,focalLength:C}=W({a0:r,a1:i,a2:a,b0:o,b1:s,b2:c},t,n,p),w=g??be(l,d,f,u),T=_!=null&&v!=null?[_,v]:void 0;return{affineTransformations:u?.affineTransformations??S,cameraLocation:h.clone(),focalLength:u?.focalLength??C,horizontalFieldOfView:m,imageHeight:n,imageWidth:t,principalOffsetPoint:u?.principalOffsetPoint??T,radialDistortionCoefficients:u?.radialDistortionCoefficients??y,rotationMatrix:w,tangentialDistortionCoefficients:u?.tangentialDistortionCoefficients??b,verticalFieldOfView:x}}const q=e=>e!=null&&`elevationSample`in e&&e.elevationSample!=null,J=e=>w(e?.elevationSource)&&e?.extent!=null,Y=e=>S(e?.elevationSource),Se=async(e,t,n,r,i)=>{let a=T(e),o=t-n/a;return q(r)?r:Y(r)?(r.elevationSource=new C({constantElevation:r.elevationSource.constantElevation/a}),r):J(r)?{elevationSample:await ee({...g(r.elevationSource)?r.elevationSource.toJSON():r.elevationSource,extent:r.extent},i),elevationSource:new C({constantElevation:o})}:{averageGroundElevation:o,spatialReference:e}},Ce=e=>E(e?.heading)&&E(e?.pitch),we=(e,t)=>[[-e,-t],[e,-t],[e,t],[-e,t]];function Te(e){let{cameraLocation:t,farDistance:i,horizontalFieldOfView:a,rotationMatrix:s,scalingFactor:c,verticalFieldOfView:u}=e,d=r();l(d,s);let f=2*Math.tan(n(u)/2)*i*c,p=2*Math.tan(n(a)/2)*i*c,g=N([0,0,-1],d),_=j([t.x,t.y,t.z],g,e.farDistance*c,c),v=N([0,1,0],d),y=N([1,0,0],d),b=M(v,f/2,c),x=M(y,p/2,c),S=m(o(),b,x),C=h(o(),b,x);return[h(o(),_,S),h(o(),_,C),m(o(),_,S),m(o(),_,C)]}const X=e=>e?.type===2,Z=e=>e?.type===1;function Q(e,t,n=!0){let r=T(t),i=n?e.clone():e;return i.cameraHeight/=r,i.farDistance/=r,i.nearDistance/=r,S(i.elevationSource)&&(i.elevationSource.constantElevation/=r),i}function Ee(e){return[t(Math.asin(-e[6])),t(Math.atan(e[7]/e[8])),t(Math.atan2(e[3],e[0]))]}function $(e,t,n,r=!1){return De(V(e,t),n,r)}function De(e,n,i=!1){let a=i?l(r(),F(n,P.YPR)):F(n,P.YPR),o=e[0]*a[0]+e[1]*a[1]+e[2]*a[2],s=e[0]*a[3]+e[1]*a[4]+e[2]*a[5],c=e[0]*a[6]+e[1]*a[7]+e[2]*a[8],u=t(Math.acos(-c));return[t(Math.atan2(o,s)),u]}export{$ as adjustHorizonAngles,De as adjustHorizonAnglesVec3,Te as computeFarplaneVertices,ae as computeHFOVAndVFOV,_e as computeNewReferenceCoordinates,H as convertHeadingPitchToSphereVertex,z as convertOrientationToPixelLocation,ce as convertPixelLocationToSphereVertex,R as convertPixelToHeadingPitch,B as convertSphereVertexToOrientation,se as convertSphereVertexToPixelLocation,Q as convertToSRUnits,V as createMeshSpaceVector,F as createRotationMatrix,L as createRotationMatrixFromHPR,I as createRotationMatrixFromOPK,Ee as extractHorizonAngles,W as getAffinesAndFocalLength,xe as getImageToWorldPanoramicProperties,ye as getImageToWorldProperties,le as getInitialAngle,Se as getUpdateElevationProps,he as getWebMercatorScalingFactor,K as getWorldToImageProperties,Ce as hasAngles,Z as hasHeadingPitchRoll,X as hasOmegaPhiKappa,q as isUpdateElevationWithElevationSampler,J as isUpdateElevationWithElevationSource,Y as isUpdateUsingConstantElevation,G as isValidAffines,A as linearEquationSolve,oe as ltpToGeographic,U as or,de as pointToArray,O as projectiveTransform,we as reducerFn,ue as rotatePixel,j as scaleAndAddWithFactor,M as scaleWithFactor,N as transformMat3,re as transformMat4,fe as validatePixelsToTransform,pe as validatePointsToTransform,me as validateRotationMatrix,ge as vecToPoint};
2
+ import e from"../../../core/Error.js";import{deg2rad as t,rad2deg as n}from"../../../core/mathUtils.js";import{create as r}from"../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{create as i,fromValues as a}from"../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{zeros as o,create as s}from"../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{fromArray as c}from"../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{multiply as l,transpose as u}from"../../../core/libs/gl-matrix-2/math/mat3.js";import{invertOrIdentity as d,mul as f}from"../../../core/libs/gl-matrix-2/math/mat4.js";import{scale as p,sub as m,add as h}from"../../../core/libs/gl-matrix-2/math/vec3.js";import{isSerializable as g}from"../../../core/support/jsonUtils.js";import _ from"../../../geometry/Point.js";import{projectAsync as v}from"../../../geometry/projectionUtils.js";import{earth as y}from"../../../geometry/support/Ellipsoid.js";import{isWebMercator as b}from"../../../geometry/support/spatialReferenceUtils.js";import{a as x}from"../../../chunks/vec3.js";import{isConstantElevation as S,ConstantElevation as C,isElevationSource as w}from"../core/ElevationSourceDefinitions.js";import{getMetersPerUnitOfSR as T}from"../core/utils.js";import{getElevationSampler as ee}from"./updateElevationUtils.js";import{isNumber as E}from"../../../support/guards.js";import{defaultImageSphereSize as D}from"../../../widgets/PanoramicViewer/constants.js";function O(e,t,n){let[r,a,o,s]=t,[c,l,u,p]=n;k(r,a,o,s);let m=k(c,l,u,p),h=A(r,a,o,s),g=A(c,l,u,p),_=d(i(),h),[v,y,b,x]=ne(e,f(i(),_,g));return[v/x,y/x,m?0:b/x]}function k(e,t,n,r){return e[2]===0&&t[2]===0&&n[2]===0&&r[2]===0&&(e[2]=t[2]=n[2]=r[2]=1,!0)}function te(e){return e===0?1:e}function ne(e,t){let[n,r,i]=e,a=[0,0,0,0];return a[0]=n*t[0]+r*t[1]+i*t[2]+t[3],a[1]=n*t[4]+r*t[5]+i*t[6]+t[7],a[2]=n*t[8]+r*t[9]+i*t[10]+t[11],a[3]=te(n*t[12]+r*t[13]+i*t[14]+t[15]),a}function A(e,t,n,r){let o=re(c([...r,1]),d(Array(16),a(e[0],t[0],n[0],0,e[1],t[1],n[1],0,e[2],t[2],n[2],0,1,1,1,1))),s=o[0],l=o[1],u=o[2],f=i();return f[0]=s*e[0],f[1]=l*t[0],f[2]=u*n[0],f[3]=0,f[4]=s*e[1],f[5]=l*t[1],f[6]=u*n[1],f[7]=0,f[8]=s*e[2],f[9]=l*t[2],f[10]=u*n[2],f[11]=0,f[12]=s,f[13]=l,f[14]=u,f[15]=1,f}function j(e,t,n,r,i=o()){return i[0]=e[0]+t[0]*n,i[1]=e[1]+t[1]*n,i[2]=e[2]+t[2]*(n/r),i}function M(e,t,n){let r=o();return r[0]=e[0]*t,r[1]=e[1]*t,r[2]=e[2]*(t/n),r}function N(e,t){let[n,r,i]=e,a=o();return a[0]=n*t[0]+r*t[3]+i*t[6],a[1]=n*t[1]+r*t[4]+i*t[7],a[2]=n*t[2]+r*t[5]+i*t[8],a}function re(e,t){let[n,r,i,a]=e,o=[,,,,];return o[0]=n*t[0]+r*t[1]+i*t[2]+a*t[3],o[1]=n*t[4]+r*t[5]+i*t[6]+a*t[7],o[2]=n*t[8]+r*t[9]+i*t[10]+a*t[11],o[3]=n*t[12]+r*t[13]+i*t[14]+a*t[15],o}function ie(n,i,a,o=!0){if(!Number.isFinite(n))throw new e(`InvalidRotationAngle`,`Please specify a valid angle for rotation`);let s=a*(o?t(n):n),c=Math.cos(s),l=Math.sin(s),u=r();switch(i){case 0:u[4]=c,u[5]=-l,u[7]=l,u[8]=c;break;case 1:u[0]=c,u[2]=l,u[6]=-l,u[8]=c;break;case 2:u[0]=c,u[1]=-l,u[3]=l,u[4]=c;break;default:throw new e(`InvalidRotationAxis`,`Please specify either 0, 1 or 2 for X, Y or Z axis respectively`)}return u}const P={HPR:[[2,-1],[0,1],[2,-1]],OPK:[[0,1],[1,1],[2,1]],YPR:[[0,-1],[1,-1],[2,-1]]};function F(t,n,i=!0){if(t?.length!==3||n?.length!==3)throw new e(`InvalidRotationAngles`,`Please specify three angles with config for rotation`);let a=r();for(let e=0;e<3;e++){let[r,o]=n[e],s=ie(t[e],r,o,i);l(a,s,a)}return a}function I(e,t=!0){return F(e,P.OPK,t)}function L(e,t=!0){return F(e,P.HPR,t)}function ae(e,n,r){let i=Math.sin(t(r)),a=Math.cos(t(r)),o=[[e,0],[e,n],[0,n]];o.forEach((e,t)=>{o[t]=[a*e[0]-i*e[1],i*e[0]+a*e[1]]});let s={xmin:Math.min(0,o[0][0],o[1][0],o[2][0]),xmax:Math.max(0,o[0][0],o[1][0],o[2][0]),ymin:Math.min(0,o[0][1],o[1][1],o[2][1]),ymax:Math.max(0,o[0][1],o[1][1],o[2][1])};return{hfov:Math.abs(s.xmax-s.xmin),vfov:Math.abs(s.ymax-s.ymin)}}function oe(e,r){let i=Number(e[0]),a=Number(e[1]),o=Number(e[2]),[s,c,l,u]=r,d=t(s),f=t(c),p=l/Math.sqrt(1-u*Math.sin(d)**2),m=i/p,h=a/p,g=o/p,_=Math.cos(d)-Math.sin(d)*h+Math.cos(d)*g,v=Math.sin(d)+Math.cos(d)*h+Math.sin(d)*g,y=Math.sqrt(_**2+m**2),b=u*p*Math.sin(d),x=(e,t=5)=>{if(t===0)return e;let n=x(e,t-1);return Math.atan(v/y-(b-u*(l/Math.sqrt(1-u*Math.sin(n)**2))*Math.sin(n))/(p*y))},S=x(d),C=Math.atan(i/(p*_))+f,w=n(S);return[n(C),w,i/(Math.cos(S)*Math.sin(C-f))-l/Math.sqrt(1-u*Math.sin(S)**2)]}function R(e,t,n){let r=360/t,i=180/n,a=e.x-t/2,o=e.y-n/2;return{heading:a*r,pitch:90-o*i}}function se(e,t,n,r,i=D/2){let{heading:a,pitch:o}=B(e,i),s=r?$(a,o,r):[a,o];return{heading:a,pitch:o,...z(s[0],s[1],t,n)}}function z(e,t,n,r){let i=360/n,a=180/r,o=e%360,s=o<-180?o+360:o>180?o-360:o;return{x:n/2+s/i,y:r-t/a}}function B(e,t){let r=n(Math.acos(-e.z/t));return{heading:n(Math.atan2(e.x,e.y)),pitch:r}}function V(e,n){return[Math.sin(t(e))*Math.sin(t(n)),Math.cos(t(e))*Math.sin(t(n)),Math.cos(t(180-n))]}function H(e,t,n,r=D/2){let i=n?$(e,t,n,!0):[e,t];return p(s(),V(i[0],i[1]),r)}function ce(e,t,n,r,i=D/2){let{heading:a,pitch:o}=R(e,t,n);return H(a,o,r,i)}async function le(e,t,r){let i=await v(t,e.spatialReference,r),a=n(Math.atan2(i.y-e.y,i.x-e.x));return a=a>=0&&a<=90?90-a:a>90&&a<=180?360-a+90:90+Math.abs(a),a}function ue(e,t,n){let r=Math.cos(n),i=Math.sin(n),a=[1,0,0,1,0,0],o=a[0]*r+a[2]*i,s=a[1]*r+a[3]*i,c=-a[0]*i+a[2]*r,l=-a[1]*i+a[3]*r;return a[0]=o,a[1]=s,a[2]=c,a[3]=l,[e*a[0]+t*a[2]+a[4],e*a[1]+t*a[3]+a[5]]}const de=e=>e.toArray(),U=(...e)=>e.some(e=>e);function fe(e,t){if(U(e.length===0,e.some(({x:e,y:t})=>U(e==null,t==null)),!t.hasZ))throw Error(`Input pixels must have x, y and camera location must have z value`)}function pe(e,t){if(e.some(e=>e.z==null)||t.z==null)throw Error(`Input points and camera location must have z value`)}function me(e){if(e?.length!==9)throw Error(`Rotation matrix is not provided or is not a valid 3x3 matrix`)}function he(e,t){return b(t)?1/Math.cos(Math.PI/2-2*Math.atan(Math.exp(-1*e/y.radius))):1}const ge=e=>t=>new _({x:t[0],y:t[1],z:t[2],spatialReference:e});function _e(e,t,n,r){return[[-t,-t],[+t,-t],[+t,+t],[-t,+t]].map(([t,i])=>O(x(o(),n,[t,i,0]),r,e))}function W({a0:e,a1:t,a2:n,b0:r,b1:i,b2:a},o,s,c){let l=[e??o/2-.5,t,n??0,r??s/2-.5,i??0,a].map(ve);return c!=null&&G(l)?{affines:l,focalLength:c}:{affines:[o/2-.5,1,0,s/2-.5,0,-1]}}function ve(e,t){if(e==null)return null;let n=parseFloat(`${e}`);return isNaN(n)?null:n}function G(e){return e[1]!=null&&e[5]!=null}function ye(e,t,n){let{cameraHeight:r,cameraPitch:i,cameraRoll:a,elevation:o,farDistance:s,horizontalFieldOfView:c,location:l,verticalFieldOfView:u}=Q(e,e.location.spatialReference),d=o??(l.z??0)-r;return{...K(e,t,n),averageElevation:d,cameraPitch:i,cameraRoll:a??0,farDistance:s,horizontalFieldOfView:c,verticalFieldOfView:u}}function be(e,t,n,r){return X(r)?I([r.omega,r.phi,r.kappa]):Z(r)?L([r.heading,r.pitch,r.roll]):L([e,t,n??0])}function xe(e,t,n){let{cameraHeading:r,cameraHeight:i,farDistance:a,horizontalFieldOfView:o,location:s,verticalFieldOfView:c}=Q(e,e.location.spatialReference),l=(s.z??0)-i,u=-r,d=0,f=0;if(e?.matrix){let{matrix:t}=e;[d,f,u]=Ee(t)}return{averageElevation:l,cameraLocation:s,cameraHeading:r,farDistance:a,horizontalFieldOfView:o,imageHeight:n,imageWidth:t,verticalFieldOfView:c,horizonYaw:u,horizonPitch:d,horizonRoll:f}}function K(e,t,n){let{a0:r,a1:i,a2:a,b0:o,b1:s,b2:c,cameraHeading:l,cameraOrientation:u,cameraPitch:d,cameraRoll:f,focalLength:p,horizontalFieldOfView:m,location:h,matrix:g,principalX:_,principalY:v,radial:y,tangential:b,verticalFieldOfView:x}=e,{affines:S,focalLength:C}=W({a0:r,a1:i,a2:a,b0:o,b1:s,b2:c},t,n,p),w=g??be(l,d,f,u),T=_!=null&&v!=null?[_,v]:void 0;return{affineTransformations:u?.affineTransformations??S,cameraLocation:h.clone(),focalLength:u?.focalLength??C,horizontalFieldOfView:m,imageHeight:n,imageWidth:t,principalOffsetPoint:u?.principalOffsetPoint??T,radialDistortionCoefficients:u?.radialDistortionCoefficients??y,rotationMatrix:w,tangentialDistortionCoefficients:u?.tangentialDistortionCoefficients??b,verticalFieldOfView:x}}const q=e=>e!=null&&`elevationSample`in e&&e.elevationSample!=null,J=e=>w(e?.elevationSource)&&e?.extent!=null,Y=e=>S(e?.elevationSource),Se=async(e,t,n,r,i)=>{let a=T(e),o=t-n/a;return q(r)?r:Y(r)?(r.elevationSource=new C({constantElevation:r.elevationSource.constantElevation/a}),r):J(r)?{elevationSample:await ee({...g(r.elevationSource)?r.elevationSource.toJSON():r.elevationSource,extent:r.extent},i),elevationSource:new C({constantElevation:o})}:{averageGroundElevation:o,spatialReference:e}},Ce=e=>E(e?.heading)&&E(e?.pitch),we=(e,t)=>[[-e,-t],[e,-t],[e,t],[-e,t]];function Te(e){let{cameraLocation:n,farDistance:i,horizontalFieldOfView:a,rotationMatrix:s,scalingFactor:c,verticalFieldOfView:l}=e,d=r();u(d,s);let f=2*Math.tan(t(l)/2)*i*c,p=2*Math.tan(t(a)/2)*i*c,g=N([0,0,-1],d),_=j([n.x,n.y,n.z],g,e.farDistance*c,c),v=N([0,1,0],d),y=N([1,0,0],d),b=M(v,f/2,c),x=M(y,p/2,c),S=m(o(),b,x),C=h(o(),b,x);return[h(o(),_,S),h(o(),_,C),m(o(),_,S),m(o(),_,C)]}const X=e=>e?.type===2,Z=e=>e?.type===1;function Q(e,t,n=!0){let r=T(t),i=n?e.clone():e;return i.cameraHeight/=r,i.farDistance/=r,i.nearDistance/=r,S(i.elevationSource)&&(i.elevationSource.constantElevation/=r),i}function Ee(e){return[n(Math.asin(-e[6])),n(Math.atan(e[7]/e[8])),n(Math.atan2(e[3],e[0]))]}function $(e,t,n,r=!1){return De(V(e,t),n,r)}function De(e,t,i=!1){let a=i?u(r(),F(t,P.YPR)):F(t,P.YPR),o=e[0]*a[0]+e[1]*a[1]+e[2]*a[2],s=e[0]*a[3]+e[1]*a[4]+e[2]*a[5],c=e[0]*a[6]+e[1]*a[7]+e[2]*a[8],l=n(Math.acos(-c));return[n(Math.atan2(o,s)),l]}export{$ as adjustHorizonAngles,De as adjustHorizonAnglesVec3,Te as computeFarplaneVertices,ae as computeHFOVAndVFOV,_e as computeNewReferenceCoordinates,H as convertHeadingPitchToSphereVertex,z as convertOrientationToPixelLocation,ce as convertPixelLocationToSphereVertex,R as convertPixelToHeadingPitch,B as convertSphereVertexToOrientation,se as convertSphereVertexToPixelLocation,Q as convertToSRUnits,V as createMeshSpaceVector,F as createRotationMatrix,L as createRotationMatrixFromHPR,I as createRotationMatrixFromOPK,Ee as extractHorizonAngles,W as getAffinesAndFocalLength,xe as getImageToWorldPanoramicProperties,ye as getImageToWorldProperties,le as getInitialAngle,Se as getUpdateElevationProps,he as getWebMercatorScalingFactor,K as getWorldToImageProperties,Ce as hasAngles,Z as hasHeadingPitchRoll,X as hasOmegaPhiKappa,q as isUpdateElevationWithElevationSampler,J as isUpdateElevationWithElevationSource,Y as isUpdateUsingConstantElevation,G as isValidAffines,A as linearEquationSolve,oe as ltpToGeographic,U as or,de as pointToArray,O as projectiveTransform,we as reducerFn,ue as rotatePixel,j as scaleAndAddWithFactor,M as scaleWithFactor,N as transformMat3,re as transformMat4,fe as validatePixelsToTransform,pe as validatePointsToTransform,me as validateRotationMatrix,ge as vecToPoint};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{isSome as e,equals as t,difference as n}from"../../core/arrayUtils.js";import r from"../../core/Error.js";import{updateOrigins as i}from"../../core/accessorSupport/originUtils.js";import{saveAs as a,save as o,getLayerJSON as s,getPortalItem as c,addItem as l,ensureLayerConfig as u,ensureItemConfig as d,setCommonItemProperties as f,validateItemType as ee,createErrorMessage as p}from"./utils.js";import{parse as m}from"../support/arcgisLayerUrl.js";import{fetchFeatureServiceWithAllResources as te,getFeatureServiceItemLayerType as h,getLayerModuleTypeStrict as g}from"../support/fetchService.js";import _ from"../../portal/Portal.js";import ne from"../../portal/PortalItem.js";import{createForItemWrite as re}from"../../portal/support/jsonContext.js";import{getWGS84ExtentForItem as v,toggleTypeKeyword as y,typeKeyword as b,removeTypeKeyword as ie,hasTypeKeyword as ae}from"../../portal/support/portalItemUtils.js";const x=`Feature Service`,S=`feature-layer-utils`,C=`${S}-save`,w=`${S}-save-as`,T=`${S}-saveall`,E=`${S}-saveall-as`;function D(e){let t=e?.type;return(t===`feature`||t===`subtype-group`||t===`oriented-imagery`||t===`dimension-feature`||t===`annotation-feature`)&&e?.source?.type===`feature-layer`}function O(e){return{isValid:D(e)&&(`dynamicDataSource`in e?!e.dynamicDataSource:!0),errorMessage:`Feature layer should be a layer or table in a map or feature service`}}function k(e,t){let n=re(e,`portal-item`);return t?.isTable&&(n.layerContainerType=`tables`),n}function A(e){let t=k(e),n=k(e);return n.layerContainerType=`tables`,{forLayers:t,forTables:n}}function j(e){let t=[],n=[];for(let{layer:r,layerJSON:i}of e)oe(r)?n.push(i):t.push(i);return{layers:t,tables:n}}function oe(e,t){return e.isTable}function M(e){return j([e])}async function N(e,t){return/\/\d+\/?$/.test(e.url)?M(t[0]):P(t,e)}async function P(e,t){if(e.reverse(),!t)return j(e);let n=await F(t,e);for(let t of e)G(t.layer,t.layerJSON,n);return R(n,e),n}async function F(e,t){let n=await e.fetchData(`json`),r;if(!I(n)||ae(e,b.HOSTED_SERVICE))r=!0;else if(q(n))return n;else r=!1;n??={},L(n);let{layer:{url:i,customParameters:a,apiKey:o}}=t[0];return await V(n,{url:i??``,customParameters:a,apiKey:o},t.map(e=>e.layer.layerId),r),n}function I(e){return!!(e&&Array.isArray(e.layers)&&Array.isArray(e.tables))}function L(e){e.layers??=[],e.tables??=[]}function R(e,t){let n=[],r=[];for(let{layer:e}of t){let{isTable:t,layerId:i}=e;t?r.push(i):n.push(i)}z(e.layers,n),z(e.tables,r)}function z(e,n){if(e.length<2)return;let r=[];for(let{id:t}of e)r.push(t);t(r.sort(B),n.slice().sort(B))&&e.sort((e,t)=>{let r=n.indexOf(e.id),i=n.indexOf(t.id);return r<i?-1:+(r>i)})}function B(e,t){return e<t?-1:+(e>t)}async function V(e,t,n,r){let{url:i,customParameters:a,apiKey:o}=t,{serviceJSON:s,layersJSON:c}=await te(i,{customParameters:a,apiKey:o});if(!r){J(e,s);return}let l=H(e.layers,s.layers,n),u=H(e.tables,s.tables,n);e.layers=l.itemResources,e.tables=u.itemResources,J(e,s),await U(e,[...l.added,...u.added],i,c?[...c.layers,...c.tables]:[])}function H(e,t,r){let i=n(e,t,(e,t)=>e.id===t.id);e=e.filter(e=>!i.removed.some(t=>t.id===e.id));let a=i.added;for(let{id:t}of a)e.push({id:t});return{itemResources:e,added:a.filter(({id:e})=>!r.includes(e))}}async function U(e,t,n,r){let i=await W(t),a=[];for(let{id:e,type:o}of t){let t=i.get(o);t&&a.push(new t({url:n,layerId:e,sourceJSON:r.find(({id:t})=>t===e)}))}await Promise.allSettled(a.map(e=>e.load()));for(let t of a){let{layerId:n,loaded:r}=t;if(!r||!(`defaultPopupTemplate`in t)||!t.defaultPopupTemplate)continue;let i={id:n,popupInfo:t.defaultPopupTemplate.toJSON()};G(t,t.operationalLayerType===`ArcGISFeatureLayer`?i:{...i,layerType:t.operationalLayerType},e)}}async function W(e){let t=new Set,n=[];for(let{type:r}of e){let e=g(r);if(e&&!t.has(r))switch(t.add(r),e){case`AnnotationFeatureLayer`:n.push(import(`../AnnotationFeatureLayer.js`).then(e=>e.default));break;case`CatalogLayer`:n.push(import(`../CatalogLayer.js`).then(e=>e.default));break;case`DimensionFeatureLayer`:n.push(import(`../DimensionFeatureLayer.js`).then(e=>e.default));break;case`FeatureLayer`:n.push(import(`../FeatureLayer.js`).then(e=>e.default));break;case`OrientedImageryLayer`:n.push(import(`../OrientedImageryLayer.js`).then(e=>e.default))}}let r=await Promise.all(n),i=new Map;return Array.from(t).forEach((e,t)=>{i.set(e,r[t])}),i}function G(e,t,n){e.isTable?K(n.tables,t):K(n.layers,t)}function K(e,t){let n=e.findIndex(({id:e})=>e===t.id);n===-1?e.push(t):e[n]=t}function q(e){return[...e.layers,...e.tables].every(e=>`layerType`in e&&!!e.layerType)}function J(e,t){let n=e.layers??[],r=e.tables??[],i=[...t.layers??[],...t.tables??[]];for(let e of[...n,...r]){let{id:t}=e;if(`layerType`in e&&e.layerType)continue;let n=i.find(({id:e})=>e===t);if(!n)continue;let a=h(n.type,r.includes(e));a&&se(e,a)&&ce(a)&&(e.layerType=a)}}function se(e,t){return t!==`ArcGISFeatureLayer`&&t!==`Table`}function ce(e){return e!==`ArcGISFeatureLayer`&&e!==`Table`}function Y(e,t){if(!e.length)throw new r(`${t}:missing-parameters`,`'layers' array should contain at least one feature layer`)}function le(e,t){let n=e.map(e=>e.portalItem.id);if(new Set(n).size>1)throw new r(`${t}:invalid-parameters`,`All layers in the 'layers' array should be loaded from the same portal item`)}function X(e,t){let n=e.map(e=>e.layerId);if(new Set(n).size!==n.length)throw new r(`${t}:invalid-parameters`,`'layers' array should contain only one instance each of layer or table in a feature service`)}async function ue(e){Y(e,T),await Promise.all(e.map(e=>e.load()));for(let t of e)u(t,T,O),d({layer:t,itemType:x,errorNamePrefix:T});le(e,T),X(e,T)}function de(e){if(!(`layerType`in e))return!!e.charts?.length;switch(e.layerType){case`CatalogLayer`:return!!e.footprintLayer?.charts?.length;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)}return!1}function Z(e,t){let n=0,r=0,i=0,a=0,o=0,s=0,c=0;for(let e of[...t.layers,...t.tables])if(de(e)&&c++,`layerType`in e)switch(e.layerType){case`CatalogLayer`:n++;break;case`OrientedImageryLayer`:r++;break;case`ParcelLayer`:o++;break;case`SubtypeGroupLayer`:i++;break;case`SubtypeGroupTable`:a++;break;case`UtilityNetworkLayer`:s++}y(e,b.CATALOG_LAYER,n>0),y(e,b.ORIENTED_IMAGERY_LAYER,r>0),y(e,b.PARCEL_FABRIC,o>0),y(e,b.SUBTYPE_GROUP_LAYER,i>0),y(e,b.SUBTYPE_GROUP_TABLE,a>0),y(e,b.UTILITY_NETWORK,s>0),y(e,b.CHARTS,c>0)}function Q(e,t,n){ie(t,b.METADATA),y(t,b.MULTI_LAYER,e.length>1),y(t,b.SINGLE_LAYER,e.length===1),y(t,b.TABLE,n.tables.length>0&&n.layers.length===0),Z(t,n)}function $(e,t,n){Z(t,n)}async function fe(e,t,n){let{url:r,layerId:i,title:a,fullExtent:o,isTable:s}=e;t.url=(m(r)?.serverType===`FeatureServer`?r:`${r}/${i}`)??null,t.title||=a,t.extent=null,!s&&o!=null&&(t.extent=await v(o)),Q([e],t,n)}function pe(e,t,n){for(let t of e){let i=t.parsedUrl.path,a=m(i);if(!a?.url.path)throw new r(`${n}:invalid-parameters`,p(t,`has unsupported url pattern: ${i}`),{layer:t});let o=a?.serverType;if(o!==`FeatureServer`&&o!==`MapServer`)throw new r(`${n}:invalid-parameters`,p(t,`has unsupported server type: ${o}`),{layer:t});if(o===`MapServer`&&e.length>1)throw new r(`${n}:invalid-parameters`,`Only one layer or table in a map service can be saved`)}let i=m(e[0].parsedUrl.path)?.url.path;if(!e.every(e=>m(e.parsedUrl.path)?.url.path===i))throw new r(`${n}:invalid-parameters`,`'layers' array should only contain layers or tables that belong to the same feature service`);if(t&&m(t.url)?.url.path!==i)throw new r(`${n}:invalid-parameters`,`'sourcePortalItem.url' and 'layers' should belong to the same service`)}async function me(e,t){let n=t?ne.from(t):null;n&&(n.portal??=_.getDefault()),Y(e,E),await Promise.all([...e.map(e=>e.load()),n?.load()]),n&&ee({item:n,itemType:x,errorNamePrefix:E});for(let t of e)u(t,E,O);return pe(e,n,E),X(e,E),n}function he(e,t){Z(e,t),f(e)}async function ge(t,n,r){let i=0;for(let{isTable:e}of t)e||i++;let a=t[0].parsedUrl.path,o=m(a);if(n.url=o?.serverType===`FeatureServer`?o.url.path:a,n.title||=o.title,n.extent=null,i>0){let r=t.map(e=>e.fullExtent).filter(e).reduce((e,t)=>e.clone().union(t));r&&(n.extent=await v(r))}Q(t,n,r),f(n)}async function _e(e,t){return o({layer:e,itemType:x,validateLayer:O,createJSONContext:t=>k(t,e),createItemData:(e,t)=>N(t,[e]),errorNamePrefix:C,setItemProperties:$},t)}async function ve(e,t){await ue(e);let n=e[0].portalItem,r=A(n),a=await Promise.all(e.map(e=>s(e,e.isTable?r.forTables:r.forLayers,t))),o=await N(n,e.map((e,t)=>({layer:e,layerJSON:a[t]})));return he(n,o),await n.update({data:o}),await Promise.all(e.slice(1).map(e=>e.portalItem.reload())),i(r.forLayers),i(r.forTables),n.clone()}async function ye(e,t,n){return a({layer:e,itemType:x,validateLayer:O,createJSONContext:t=>k(t,e),createItemData:(e,t)=>Promise.resolve(M(e)),errorNamePrefix:w,newItem:t,setItemProperties:fe},n)}async function be(e,t,n){let r=await me(e,n?.sourcePortalItem),a=c({itemType:x,errorNamePrefix:E,newItem:t}),o=A(a),u=await Promise.all(e.map(e=>s(e,e.isTable?o.forTables:o.forLayers,n))),d=await P(e.map((e,t)=>({layer:e,layerJSON:u[t]})),r);await ge(e,a,d),await l(a,d,n);for(let t of e)t.portalItem=a.clone();return i(o.forLayers),i(o.forTables),a}export{_e as save,ve as saveAll,be as saveAllAs,ye as saveAs};
2
+ import{equals as e,difference as t,isSome as n}from"../../core/arrayUtils.js";import r from"../../core/Error.js";import{updateOrigins as i}from"../../core/accessorSupport/originUtils.js";import{saveAs as a,save as o,getLayerJSON as s,getPortalItem as c,addItem as l,ensureLayerConfig as u,ensureItemConfig as d,setCommonItemProperties as f,validateItemType as ee,createErrorMessage as p}from"./utils.js";import{parse as m}from"../support/arcgisLayerUrl.js";import{fetchFeatureServiceWithAllResources as te,getFeatureServiceItemLayerType as h,getLayerModuleTypeStrict as g}from"../support/fetchService.js";import _ from"../../portal/Portal.js";import v from"../../portal/PortalItem.js";import{createForItemWrite as ne}from"../../portal/support/jsonContext.js";import{getWGS84ExtentForItem as y,removeTypeKeyword as re,typeKeyword as b,toggleTypeKeyword as x,hasTypeKeyword as ie}from"../../portal/support/portalItemUtils.js";const S=`Feature Service`,C=`feature-layer-utils`,ae=`${C}-save`,w=`${C}-save-as`,T=`${C}-saveall`,E=`${C}-saveall-as`;function D(e){let t=e?.type;return(t===`feature`||t===`subtype-group`||t===`oriented-imagery`||t===`dimension-feature`||t===`annotation-feature`)&&e?.source?.type===`feature-layer`}function O(e){return{isValid:D(e)&&(`dynamicDataSource`in e?!e.dynamicDataSource:!0),errorMessage:`Feature layer should be a layer or table in a map or feature service`}}function k(e,t){let n=ne(e,`portal-item`);return t?.isTable&&(n.layerContainerType=`tables`),n}function A(e){let t=k(e),n=k(e);return n.layerContainerType=`tables`,{forLayers:t,forTables:n}}function j(e){let t=[],n=[];for(let{layer:r,layerJSON:i}of e)oe(r)?n.push(i):t.push(i);return{layers:t,tables:n}}function oe(e,t){return e.isTable}function M(e){return j([e])}async function N(e,t){return/\/\d+\/?$/.test(e.url)?M(t[0]):P(t,e)}async function P(e,t){if(e.reverse(),!t)return j(e);let n=await F(t,e);for(let t of e)G(t.layer,t.layerJSON,n);return R(n,e),n}async function F(e,t){let n=await e.fetchData(`json`),r;if(!I(n)||ie(e,b.HOSTED_SERVICE))r=!0;else if(q(n))return n;else r=!1;n??={},L(n);let{layer:{url:i,customParameters:a,apiKey:o}}=t[0];return await V(n,{url:i??``,customParameters:a,apiKey:o},t.map(e=>e.layer.layerId),r),n}function I(e){return!!(e&&Array.isArray(e.layers)&&Array.isArray(e.tables))}function L(e){e.layers??=[],e.tables??=[]}function R(e,t){let n=[],r=[];for(let{layer:e}of t){let{isTable:t,layerId:i}=e;t?r.push(i):n.push(i)}z(e.layers,n),z(e.tables,r)}function z(t,n){if(t.length<2)return;let r=[];for(let{id:e}of t)r.push(e);e(r.sort(B),n.slice().sort(B))&&t.sort((e,t)=>{let r=n.indexOf(e.id),i=n.indexOf(t.id);return r<i?-1:+(r>i)})}function B(e,t){return e<t?-1:+(e>t)}async function V(e,t,n,r){let{url:i,customParameters:a,apiKey:o}=t,{serviceJSON:s,layersJSON:c}=await te(i,{customParameters:a,apiKey:o});if(!r){J(e,s);return}let l=H(e.layers,s.layers,n),u=H(e.tables,s.tables,n);e.layers=l.itemResources,e.tables=u.itemResources,J(e,s),await U(e,[...l.added,...u.added],i,c?[...c.layers,...c.tables]:[])}function H(e,n,r){let i=t(e,n,(e,t)=>e.id===t.id);e=e.filter(e=>!i.removed.some(t=>t.id===e.id));let a=i.added;for(let{id:t}of a)e.push({id:t});return{itemResources:e,added:a.filter(({id:e})=>!r.includes(e))}}async function U(e,t,n,r){let i=await W(t),a=[];for(let{id:e,type:o}of t){let t=i.get(o);t&&a.push(new t({url:n,layerId:e,sourceJSON:r.find(({id:t})=>t===e)}))}await Promise.allSettled(a.map(e=>e.load()));for(let t of a){let{layerId:n,loaded:r}=t;if(!r||!(`defaultPopupTemplate`in t)||!t.defaultPopupTemplate)continue;let i={id:n,popupInfo:t.defaultPopupTemplate.toJSON()};G(t,t.operationalLayerType===`ArcGISFeatureLayer`?i:{...i,layerType:t.operationalLayerType},e)}}async function W(e){let t=new Set,n=[];for(let{type:r}of e){let e=g(r);if(e&&!t.has(r))switch(t.add(r),e){case`AnnotationFeatureLayer`:n.push(import(`../AnnotationFeatureLayer.js`).then(e=>e.default));break;case`CatalogLayer`:n.push(import(`../CatalogLayer.js`).then(e=>e.default));break;case`DimensionFeatureLayer`:n.push(import(`../DimensionFeatureLayer.js`).then(e=>e.default));break;case`FeatureLayer`:n.push(import(`../FeatureLayer.js`).then(e=>e.default));break;case`OrientedImageryLayer`:n.push(import(`../OrientedImageryLayer.js`).then(e=>e.default))}}let r=await Promise.all(n),i=new Map;return Array.from(t).forEach((e,t)=>{i.set(e,r[t])}),i}function G(e,t,n){e.isTable?K(n.tables,t):K(n.layers,t)}function K(e,t){let n=e.findIndex(({id:e})=>e===t.id);n===-1?e.push(t):e[n]=t}function q(e){return[...e.layers,...e.tables].every(e=>`layerType`in e&&!!e.layerType)}function J(e,t){let n=e.layers??[],r=e.tables??[],i=[...t.layers??[],...t.tables??[]];for(let e of[...n,...r]){let{id:t}=e;if(`layerType`in e&&e.layerType)continue;let n=i.find(({id:e})=>e===t);if(!n)continue;let a=h(n.type,r.includes(e));a&&se(e,a)&&ce(a)&&(e.layerType=a)}}function se(e,t){return t!==`ArcGISFeatureLayer`&&t!==`Table`}function ce(e){return e!==`ArcGISFeatureLayer`&&e!==`Table`}function Y(e,t){if(!e.length)throw new r(`${t}:missing-parameters`,`'layers' array should contain at least one feature layer`)}function le(e,t){let n=e.map(e=>e.portalItem.id);if(new Set(n).size>1)throw new r(`${t}:invalid-parameters`,`All layers in the 'layers' array should be loaded from the same portal item`)}function X(e,t){let n=e.map(e=>e.layerId);if(new Set(n).size!==n.length)throw new r(`${t}:invalid-parameters`,`'layers' array should contain only one instance each of layer or table in a feature service`)}async function ue(e){Y(e,T),await Promise.all(e.map(e=>e.load()));for(let t of e)u(t,T,O),d({layer:t,itemType:S,errorNamePrefix:T});le(e,T),X(e,T)}function de(e){if(!(`layerType`in e))return!!e.charts?.length;switch(e.layerType){case`CatalogLayer`:return!!e.footprintLayer?.charts?.length;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)}return!1}function Z(e,t){let n=0,r=0,i=0,a=0,o=0,s=0,c=0;for(let e of[...t.layers,...t.tables])if(de(e)&&c++,`layerType`in e)switch(e.layerType){case`CatalogLayer`:n++;break;case`OrientedImageryLayer`:r++;break;case`ParcelLayer`:o++;break;case`SubtypeGroupLayer`:i++;break;case`SubtypeGroupTable`:a++;break;case`UtilityNetworkLayer`:s++}x(e,b.CATALOG_LAYER,n>0),x(e,b.ORIENTED_IMAGERY_LAYER,r>0),x(e,b.PARCEL_FABRIC,o>0),x(e,b.SUBTYPE_GROUP_LAYER,i>0),x(e,b.SUBTYPE_GROUP_TABLE,a>0),x(e,b.UTILITY_NETWORK,s>0),x(e,b.CHARTS,c>0)}function Q(e,t,n){re(t,b.METADATA),x(t,b.MULTI_LAYER,e.length>1),x(t,b.SINGLE_LAYER,e.length===1),x(t,b.TABLE,n.tables.length>0&&n.layers.length===0),Z(t,n)}function $(e,t,n){Z(t,n)}async function fe(e,t,n){let{url:r,layerId:i,title:a,fullExtent:o,isTable:s}=e;t.url=(m(r)?.serverType===`FeatureServer`?r:`${r}/${i}`)??null,t.title||=a,t.extent=null,!s&&o!=null&&(t.extent=await y(o)),Q([e],t,n)}function pe(e,t,n){for(let t of e){let i=t.parsedUrl.path,a=m(i);if(!a?.url.path)throw new r(`${n}:invalid-parameters`,p(t,`has unsupported url pattern: ${i}`),{layer:t});let o=a?.serverType;if(o!==`FeatureServer`&&o!==`MapServer`)throw new r(`${n}:invalid-parameters`,p(t,`has unsupported server type: ${o}`),{layer:t});if(o===`MapServer`&&e.length>1)throw new r(`${n}:invalid-parameters`,`Only one layer or table in a map service can be saved`)}let i=m(e[0].parsedUrl.path)?.url.path;if(!e.every(e=>m(e.parsedUrl.path)?.url.path===i))throw new r(`${n}:invalid-parameters`,`'layers' array should only contain layers or tables that belong to the same feature service`);if(t&&m(t.url)?.url.path!==i)throw new r(`${n}:invalid-parameters`,`'sourcePortalItem.url' and 'layers' should belong to the same service`)}async function me(e,t){let n=t?v.from(t):null;n&&(n.portal??=_.getDefault()),Y(e,E),await Promise.all([...e.map(e=>e.load()),n?.load()]),n&&ee({item:n,itemType:S,errorNamePrefix:E});for(let t of e)u(t,E,O);return pe(e,n,E),X(e,E),n}function he(e,t){Z(e,t),f(e)}async function ge(e,t,r){let i=0;for(let{isTable:t}of e)t||i++;let a=e[0].parsedUrl.path,o=m(a);if(t.url=o?.serverType===`FeatureServer`?o.url.path:a,t.title||=o.title,t.extent=null,i>0){let r=e.map(e=>e.fullExtent).filter(n).reduce((e,t)=>e.clone().union(t));r&&(t.extent=await y(r))}Q(e,t,r),f(t)}async function _e(e,t){return o({layer:e,itemType:S,validateLayer:O,createJSONContext:t=>k(t,e),createItemData:(e,t)=>N(t,[e]),errorNamePrefix:ae,setItemProperties:$},t)}async function ve(e,t){await ue(e);let n=e[0].portalItem,r=A(n),a=await Promise.all(e.map(e=>s(e,e.isTable?r.forTables:r.forLayers,t))),o=await N(n,e.map((e,t)=>({layer:e,layerJSON:a[t]})));return he(n,o),await n.update({data:o}),await Promise.all(e.slice(1).map(e=>e.portalItem.reload())),i(r.forLayers),i(r.forTables),n.clone()}async function ye(e,t,n){return a({layer:e,itemType:S,validateLayer:O,createJSONContext:t=>k(t,e),createItemData:(e,t)=>Promise.resolve(M(e)),errorNamePrefix:w,newItem:t,setItemProperties:fe},n)}async function be(e,t,n){let r=await me(e,n?.sourcePortalItem),a=c({itemType:S,errorNamePrefix:E,newItem:t}),o=A(a),u=await Promise.all(e.map(e=>s(e,e.isTable?o.forTables:o.forLayers,n))),d=await P(e.map((e,t)=>({layer:e,layerJSON:u[t]})),r);await ge(e,a,d),await l(a,d,n);for(let t of e)t.portalItem=a.clone();return i(o.forLayers),i(o.forTables),a}export{_e as save,ve as saveAll,be as saveAllAs,ye as saveAs};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{getPrimaryRasters as e}from"../raster/datasets/datasetUtils.js";import{saveAs as t,save as n}from"./utils.js";import{toggleTypeKeyword as r,typeKeyword as i,getWGS84ExtentForItem as a,removeTypeKeyword as o}from"../../portal/support/portalItemUtils.js";const s=`Image Service`;function c(t){if(t.type===`imagery`||t.type===`wcs`)return{isValid:!0};let{raster:n}=t,r=e(n)[0];return{isValid:r?.datasetFormat===`RasterTileServer`&&(r.tileType===`Raster`||r.tileType===`Map`),errorMessage:`imagery tile layer should be created from a tiled image service.`}}function l(e){let t=e.layerJSON;return Promise.resolve(t&&Object.keys(t).length?t:null)}function u(e,t){r(t,i.CHARTS,!!e.charts?.length)}async function d(e,t){let{parsedUrl:n,title:s,fullExtent:c}=e;t.url=n.path,t.title||=s;try{t.extent=await a(c)}catch{t.extent=void 0}o(t,i.METADATA),r(t,i.TILED_IMAGERY,e.type===`imagery-tile`),r(t,i.CHARTS,!!e.charts?.length)}async function f(e,t){let r=e.type===`imagery`?`imagery-layer-save`:e.type===`imagery-tile`?`imagery-tile-layer-save`:`wcs-layer-save`,i={layer:e,itemType:e.type===`wcs`?`WCS`:s,validateLayer:c,createItemData:l,errorNamePrefix:r,setItemProperties:u};return n(i,t)}async function p(e,n,r){let i=e.type===`imagery`?`imagery-layer-save-as`:e.type===`imagery-tile`?`imagery-tile-layer-save-as`:`wcs-layer-save-as`,a={layer:e,itemType:e.type===`wcs`?`WCS`:s,validateLayer:c,createItemData:l,errorNamePrefix:i,newItem:n,setItemProperties:d};return t(a,r)}export{f as save,p as saveAs};
2
+ import{getPrimaryRasters as e}from"../raster/datasets/datasetUtils.js";import{saveAs as t,save as n}from"./utils.js";import{getWGS84ExtentForItem as r,removeTypeKeyword as i,toggleTypeKeyword as a,typeKeyword as o}from"../../portal/support/portalItemUtils.js";const s=`Image Service`;function c(t){if(t.type===`imagery`||t.type===`wcs`)return{isValid:!0};let{raster:n}=t,r=e(n)[0];return{isValid:r?.datasetFormat===`RasterTileServer`&&(r.tileType===`Raster`||r.tileType===`Map`),errorMessage:`imagery tile layer should be created from a tiled image service.`}}function l(e){let t=e.layerJSON;return Promise.resolve(t&&Object.keys(t).length?t:null)}function u(e,t){a(t,o.CHARTS,!!e.charts?.length)}async function d(e,t){let{parsedUrl:n,title:s,fullExtent:c}=e;t.url=n.path,t.title||=s;try{t.extent=await r(c)}catch{t.extent=void 0}i(t,o.METADATA),a(t,o.TILED_IMAGERY,e.type===`imagery-tile`),a(t,o.CHARTS,!!e.charts?.length)}async function f(e,t){let r=e.type===`imagery`?`imagery-layer-save`:e.type===`imagery-tile`?`imagery-tile-layer-save`:`wcs-layer-save`,i={layer:e,itemType:e.type===`wcs`?`WCS`:s,validateLayer:c,createItemData:l,errorNamePrefix:r,setItemProperties:u};return n(i,t)}async function p(e,n,r){let i=e.type===`imagery`?`imagery-layer-save-as`:e.type===`imagery-tile`?`imagery-tile-layer-save-as`:`wcs-layer-save-as`,a={layer:e,itemType:e.type===`wcs`?`WCS`:s,validateLayer:c,createItemData:l,errorNamePrefix:i,newItem:n,setItemProperties:d};return t(a,r)}export{f as save,p as saveAs};