@arcgis/core 5.1.0-next.104 → 5.1.0-next.105

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 (147) hide show
  1. package/analysis/ShadowCastAnalysis.d.ts +81 -62
  2. package/assets/esri/core/t9n/Units.json +1 -1
  3. package/assets/esri/core/t9n/Units_en.json +1 -1
  4. package/assets/esri/core/workers/RemoteClient.js +1 -1
  5. package/assets/esri/core/workers/chunks/{f5bd0a4f82df5e942b70.js → 093f27e4e4781870b431.js} +1 -1
  6. package/assets/esri/core/workers/chunks/{8e986167d4a393ee41ea.js → 130851b81f04e6a008cd.js} +1 -1
  7. package/assets/esri/core/workers/chunks/{1cb0c4fc315bbc2bd00b.js → 1c8a21b7b60c0709e6b2.js} +1 -1
  8. package/assets/esri/core/workers/chunks/{ce0c7070eeb723a718e7.js → 1e8d5bfc5f8c2664190c.js} +1 -1
  9. package/assets/esri/core/workers/chunks/{7d571845292b1b7769c2.js → 2dced41ff2aa1bd86665.js} +1 -1
  10. package/assets/esri/core/workers/chunks/{bff0c4094c14cb97b18f.js → 359dbfbfb9acfb18bc6e.js} +1 -1
  11. package/assets/esri/core/workers/chunks/{9542ef3f6c2bc7c14d85.js → 39a8e6c9d710d3faea3c.js} +1 -1
  12. package/assets/esri/core/workers/chunks/466c250537415f12eb59.js +1 -0
  13. package/assets/esri/core/workers/chunks/{0cb8bc6dbbbe3b212712.js → 558606a1af22e4a0d536.js} +1 -1
  14. package/assets/esri/core/workers/chunks/6854b28853f5dd195110.js +262 -0
  15. package/assets/esri/core/workers/chunks/{b63cbf6c2c9ec1b02b9a.js → 6e21675bbd7a44070771.js} +1 -1
  16. package/assets/esri/core/workers/chunks/{bb04aff0b4947408592c.js → 7617bd0f3a70dfe61637.js} +1 -1
  17. package/assets/esri/core/workers/chunks/{cf3c0bee919bb509cd4f.js → 7b66691d133dabd87ce6.js} +1 -1
  18. package/assets/esri/core/workers/chunks/{bf2c202dec5ab7bc770b.js → 829a0583b8a228c65379.js} +1 -1
  19. package/assets/esri/core/workers/chunks/8a1751187a20b6578875.js +1 -0
  20. package/assets/esri/core/workers/chunks/{d610f517fb3c6cb24365.js → 8ade869fa9bae446266a.js} +1 -1
  21. package/assets/esri/core/workers/chunks/9b89cc85c1b5d561df7c.js +2 -0
  22. package/assets/esri/core/workers/chunks/{2a5f6a8d282f2c391591.js → a0e72b107991ba38a9f0.js} +1 -1
  23. package/assets/esri/core/workers/chunks/{f3a9100518b044e79501.js → a943bd2e6fb7443c2b66.js} +1 -1
  24. package/assets/esri/core/workers/chunks/{037b36d415ae27e987f9.js → aec4a4cd7044fdbbbe34.js} +1 -1
  25. package/assets/esri/core/workers/chunks/{29b00d07d3e1d095c590.js → b262478da29470abb72b.js} +2 -2
  26. package/assets/esri/core/workers/chunks/b7a81fd4994eabba1869.js +640 -0
  27. package/assets/esri/core/workers/chunks/{3c9482764c9e4f8bcbb0.js → c187bc997bad61b6c6e9.js} +1 -1
  28. package/assets/esri/core/workers/chunks/{1c83e61fd9a4f8fc8372.js → d3f08f1a9a250cd8a2c8.js} +1 -1
  29. package/assets/esri/core/workers/chunks/{c476f4979048e558baa7.js → e90afd914f2ccd4f5374.js} +57 -75
  30. package/assets/esri/core/workers/chunks/{5cffc7b49966201eccdb.js → f75295cdd5e84eb97d5a.js} +1 -1
  31. package/assets/esri/core/workers/chunks/{95798e3de3419fdda6ac.js → fb415b01f0f1d644832d.js} +1 -1
  32. package/assets/esri/core/workers/chunks/{64e268ebac0b62076f81.js → fbb23db01f3cf629d32e.js} +1 -1
  33. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer.json +1 -1
  34. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ar.json +1 -1
  35. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_bg.json +1 -1
  36. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_bs.json +1 -1
  37. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ca.json +1 -1
  38. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_cs.json +1 -1
  39. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_da.json +1 -1
  40. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_de.json +1 -1
  41. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_el.json +1 -1
  42. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_en.json +1 -1
  43. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_es.json +1 -1
  44. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_et.json +1 -1
  45. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_fi.json +1 -1
  46. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_fr.json +1 -1
  47. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_he.json +1 -1
  48. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_hr.json +1 -1
  49. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_hu.json +1 -1
  50. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_id.json +1 -1
  51. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_it.json +1 -1
  52. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ja.json +1 -1
  53. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ko.json +1 -1
  54. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_lt.json +1 -1
  55. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_lv.json +1 -1
  56. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_nl.json +1 -1
  57. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_no.json +1 -1
  58. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_pl.json +1 -1
  59. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_pt-BR.json +1 -1
  60. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_pt-PT.json +1 -1
  61. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ro.json +1 -1
  62. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_ru.json +1 -1
  63. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_sk.json +1 -1
  64. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_sl.json +1 -1
  65. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_sr.json +1 -1
  66. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_sv.json +1 -1
  67. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_th.json +1 -1
  68. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_tr.json +1 -1
  69. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_uk.json +1 -1
  70. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_vi.json +1 -1
  71. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_zh-CN.json +1 -1
  72. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_zh-HK.json +1 -1
  73. package/assets/esri/widgets/OrientedImageryViewer/t9n/OrientedImageryViewer_zh-TW.json +1 -1
  74. package/assets/esri/widgets/Sketch/t9n/Sketch_cs.json +1 -1
  75. package/chunks/ChapmanAtmosphere.glsl.js +14 -19
  76. package/chunks/Compositing.glsl.js +4 -4
  77. package/chunks/GaussianSplatShadow.glsl.js +7 -7
  78. package/chunks/GlobalIllumination.glsl.js +27 -50
  79. package/chunks/GlobalIlluminationBlur.glsl.js +16 -11
  80. package/chunks/Terrain.glsl.js +1 -1
  81. package/config.js +1 -1
  82. package/core/ReactiveSet.js +1 -1
  83. package/kernel.js +1 -1
  84. package/layers/VideoLayer.js +1 -1
  85. package/layers/knowledgeGraph/KnowledgeGraphLayerDataManager.js +1 -1
  86. package/layers/knowledgeGraph/KnowledgeGraphSublayer.d.ts +1 -1
  87. package/layers/knowledgeGraph/KnowledgeGraphSublayer.js +1 -1
  88. package/layers/knowledgeGraph/layerUtils.js +1 -1
  89. package/layers/orientedImagery/core/utils.js +1 -1
  90. package/package.json +2 -2
  91. package/support/revision.js +1 -1
  92. package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
  93. package/views/2d/layers/features/layerAdapters/KnowledgeGraphSublayerAdapter.js +1 -1
  94. package/views/3d/analysis/ShadowCastAnalysisView3D.d.ts +9 -5
  95. package/views/3d/layers/FlowSubView3D.js +1 -1
  96. package/views/3d/layers/graphics/objectResourceUtils.js +1 -1
  97. package/views/3d/support/flow/FlowSubViewTiles3D.js +1 -1
  98. package/views/3d/terrain/TerrainRenderer.js +1 -1
  99. package/views/3d/terrain/TileCompositor.js +1 -1
  100. package/views/3d/webgl-engine/collections/Component/Material/ComponentTechnique.js +1 -1
  101. package/views/3d/webgl-engine/core/shaderTechnique/ShaderTechnique.js +1 -1
  102. package/views/3d/webgl-engine/effects/atmosphere/ChapmanAtmosphere.glsl.js +1 -1
  103. package/views/3d/webgl-engine/effects/atmosphere/ChapmanAtmosphere.js +1 -1
  104. package/views/3d/webgl-engine/effects/atmosphere/ChapmanAtmosphereTechnique.js +1 -1
  105. package/views/3d/webgl-engine/effects/blit/Blit.js +1 -1
  106. package/views/3d/webgl-engine/effects/clouds/CloudsComposition.js +1 -1
  107. package/views/3d/webgl-engine/effects/focusArea/FocusAreaMaskNode.js +1 -1
  108. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIllumination.glsl.js +1 -1
  109. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationBlur.glsl.js +1 -1
  110. package/views/3d/webgl-engine/effects/globalIllumination/GlobalIlluminationTechniqueConfiguration.js +1 -1
  111. package/views/3d/webgl-engine/lib/Compositor.js +1 -1
  112. package/views/3d/webgl-engine/lib/Renderer.js +1 -1
  113. package/views/3d/webgl-engine/lib/RenderingContext.js +1 -1
  114. package/views/3d/webgl-engine/lib/ShadowAccumulator.js +1 -1
  115. package/views/3d/webgl-engine/materials/renderers/VaoRenderer.js +1 -1
  116. package/views/3d/webgl-engine/parts/RenderView.js +1 -1
  117. package/views/3d/webgl-engine/shaders/ColorMaterialTechnique.js +1 -1
  118. package/views/3d/webgl-engine/shaders/CompositingTechnique.js +1 -1
  119. package/views/3d/webgl-engine/shaders/CompositingTechniqueConfiguration.js +1 -1
  120. package/views/3d/webgl-engine/shaders/DefaultMaterialTechnique.js +1 -1
  121. package/views/3d/webgl-engine/shaders/ImageMaterialTechnique.js +1 -1
  122. package/views/3d/webgl-engine/shaders/LineMarkerTechnique.js +1 -1
  123. package/views/3d/webgl-engine/shaders/NativeLineTechnique.js +1 -1
  124. package/views/3d/webgl-engine/shaders/PatternTechnique.js +1 -1
  125. package/views/3d/webgl-engine/shaders/RibbonLineTechnique.js +1 -1
  126. package/views/3d/webgl-engine/shaders/TerrainTechnique.js +1 -1
  127. package/views/3d/webgl-engine/shaders/ditherNoise.glsl.js +1 -1
  128. package/views/layers/FeatureLikeLayerView.js +1 -1
  129. package/widgets/BatchAttributeForm/BatchAttributeFormViewModel.js +1 -1
  130. package/widgets/BatchAttributeForm/inputs/UtilityNetworkAssociationsElementInput.js +1 -1
  131. package/widgets/BatchAttributeForm/inputs/support/createBatchFormInputs.js +1 -1
  132. package/widgets/OrientedImageryViewer/components/VideoEnhancementTools.js +1 -1
  133. package/widgets/OrientedImageryViewer.js +1 -1
  134. package/widgets/TableList/TableListViewModel.js +1 -1
  135. package/widgets/Track/TrackViewModel.d.ts +1 -0
  136. package/widgets/Track/TrackViewModel.js +1 -1
  137. package/widgets/Track.js +1 -1
  138. package/widgets/support/GeolocationPositioning.d.ts +1 -0
  139. package/widgets/support/GeolocationPositioning.js +1 -1
  140. package/assets/esri/core/workers/chunks/35fdd62277fd06468a29.js +0 -2
  141. package/assets/esri/core/workers/chunks/40caf5e09e4382d81104.js +0 -640
  142. package/assets/esri/core/workers/chunks/4213aa844900fcf95287.js +0 -1
  143. package/assets/esri/core/workers/chunks/594e1f633527749d92d7.js +0 -1
  144. package/assets/esri/core/workers/chunks/cc8d55d1830d7542c3f5.js +0 -262
  145. package/views/3d/webgl-engine/effects/atmosphere/ChapmanAtmosphereTechniqueConfiguration.js +0 -2
  146. /package/assets/esri/core/workers/chunks/{35fdd62277fd06468a29.js.LICENSE.txt → 9b89cc85c1b5d561df7c.js.LICENSE.txt} +0 -0
  147. /package/assets/esri/core/workers/chunks/{29b00d07d3e1d095c590.js.LICENSE.txt → b262478da29470abb72b.js.LICENSE.txt} +0 -0
@@ -1,7 +1,7 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import{set as e}from"../core/libs/gl-matrix-2/math/vec2.js";import{create as a}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{create as i}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{RejectBySlicePass as n}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{OutputDepth as r}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputDepth.glsl.js";import{positionOutsideClipSpace as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PositionOutsideClipSpace.js";import{GaussianSplatCovariance as c}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatCovariance.glsl.js";import{GaussianSplatEvaluation as s}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatEvaluation.glsl.js";import{GaussianSplatTextureFetch as t}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatTextureFetch.glsl.js";import{GaussianSplatUnpackingPassParameters as l,GaussianSplatUnpacking as v}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatUnpacking.glsl.js";import{QuaternionToRotationMatrix as d}from"../views/3d/webgl-engine/core/shaderLibrary/util/QuaternionToRotationMatrix.glsl.js";import{Float2BindUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Float2BindUniform.js";import{Float3PassUniform as p}from"../views/3d/webgl-engine/core/shaderModules/Float3PassUniform.js";import{FloatPassUniform as m}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as f,If as x}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as g}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DUintPassUniform as w}from"../views/3d/webgl-engine/core/shaderModules/Texture2DUintPassUniform.js";import{ShaderBuilder as h}from"../views/webgl/ShaderBuilder.js";class P extends l{constructor(){super(...arguments),this.clipMinCameraRelative=i(),this.clipMaxCameraRelative=i(),this.minSplatRadius=-1}}function S(a){const{clippingEnabled:i,hasSlicePlane:l}=a,P=new h,{fragment:S,varyings:G,vertex:y}=P;P.include(r,a),G.add("conic","vec3"),G.add("gaussianLogAlphaCutoff","float"),G.add("offsetFromCenter","vec2"),G.add("depth","float",{invariant:!0}),y.uniforms.add(new w("splatOrderTexture",e=>e.splatOrder),new w("splatAtlasTexture",e=>e.splatAtlas),new m("minSplatRadius",e=>e.minSplatRadius),new u("inverseScreenSize",({camera:a})=>e(j,1/a.fullWidth,1/a.fullHeight)),new g("proj",e=>e.camera.projectionMatrix),new g("view",e=>e.camera.viewMatrix),new u("nearFar",e=>e.camera.nearFar)),i&&y.uniforms.add(new p("clipMin",e=>e.clipMinCameraRelative),new p("clipMax",e=>e.clipMaxCameraRelative)),y.include(v),y.include(t),y.include(d),y.include(c),y.include(s),y.include(n,a),y.code.add(f`float safeClipW(float clipW) {
2
+ import{set as e}from"../core/libs/gl-matrix-2/math/vec2.js";import{create as a}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{create as i}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{RejectBySlicePass as n}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{OutputDepth as r}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputDepth.glsl.js";import{positionOutsideClipSpace as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/PositionOutsideClipSpace.js";import{GaussianSplatCovariance as c}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatCovariance.glsl.js";import{GaussianSplatEvaluation as s}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatEvaluation.glsl.js";import{GaussianSplatTextureFetch as t}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatTextureFetch.glsl.js";import{GaussianSplatUnpackingPassParameters as l,GaussianSplatUnpacking as v}from"../views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatUnpacking.glsl.js";import{QuaternionToRotationMatrix as d}from"../views/3d/webgl-engine/core/shaderLibrary/util/QuaternionToRotationMatrix.glsl.js";import{Float2BindUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Float2BindUniform.js";import{Float3PassUniform as p}from"../views/3d/webgl-engine/core/shaderModules/Float3PassUniform.js";import{FloatPassUniform as m}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as f,If as x}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as g}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DUintPassUniform as w}from"../views/3d/webgl-engine/core/shaderModules/Texture2DUintPassUniform.js";import{ShaderBuilder as h}from"../views/webgl/ShaderBuilder.js";class S extends l{constructor(){super(...arguments),this.clipMinCameraRelative=i(),this.clipMaxCameraRelative=i(),this.minSplatRadius=-1}}function P(a){const{clippingEnabled:i,hasSlicePlane:l}=a,S=new h,{fragment:P,varyings:y,vertex:G}=S;S.include(r,a),y.add("conic","vec3"),y.add("gaussianLogAlphaCutoff","float"),y.add("offsetFromCenter","vec2"),y.add("depth","float",{invariant:!0}),G.uniforms.add(new w("splatOrderTexture",e=>e.splatOrder),new w("splatAtlasTexture",e=>e.splatAtlas),new m("minSplatRadius",e=>e.minSplatRadius),new u("inverseScreenSize",({camera:a})=>e(j,1/a.fullWidth,1/a.fullHeight)),new g("proj",e=>e.camera.projectionMatrix),new g("view",e=>e.camera.viewMatrix),new u("nearFar",e=>e.camera.nearFar)),i&&G.uniforms.add(new p("clipMin",e=>e.clipMinCameraRelative),new p("clipMax",e=>e.clipMaxCameraRelative)),G.include(v),G.include(t),G.include(d),G.include(c),G.include(s),G.include(n,a),G.code.add(f`float safeClipW(float clipW) {
3
3
  return abs(clipW) < 1e-7 ? (clipW < 0.0 ? -1e-7 : 1e-7) : clipW;
4
- }`),y.code.add(f`vec3 computeProjectivePixelGradient(
4
+ }`),G.code.add(f`vec3 computeProjectivePixelGradient(
5
5
  vec3 clipGradient,
6
6
  vec3 clipWGradient,
7
7
  float clipValue,
@@ -10,13 +10,13 @@ float invWSquared,
10
10
  float halfScreenSize
11
11
  ) {
12
12
  return (clipGradient * safeW - clipValue * clipWGradient) * invWSquared * halfScreenSize;
13
- }`),y.code.add(f`vec3 multiplyCovariance3D(float[6] covariance3D, vec3 value) {
13
+ }`),G.code.add(f`vec3 multiplyCovariance3D(float[6] covariance3D, vec3 value) {
14
14
  return vec3(
15
15
  covariance3D[0] * value.x + covariance3D[1] * value.y + covariance3D[2] * value.z,
16
16
  covariance3D[1] * value.x + covariance3D[3] * value.y + covariance3D[4] * value.z,
17
17
  covariance3D[2] * value.x + covariance3D[4] * value.y + covariance3D[5] * value.z
18
18
  );
19
- }`),y.code.add(f`vec3 computeProjectiveCovariance2D(vec3 pixelXGradient, vec3 pixelYGradient, float[6] covariance3D, mat4 view) {
19
+ }`),G.code.add(f`vec3 computeProjectiveCovariance2D(vec3 pixelXGradient, vec3 pixelYGradient, float[6] covariance3D, mat4 view) {
20
20
  mat3 worldToView = transpose(mat3(view));
21
21
  vec3 axisX = worldToView * pixelXGradient;
22
22
  vec3 axisY = worldToView * pixelYGradient;
@@ -27,13 +27,13 @@ float covarianceXX = dot(axisX, covarianceAxisX) + regularization;
27
27
  float covarianceXY = dot(axisX, covarianceAxisY);
28
28
  float covarianceYY = dot(axisY, covarianceAxisY) + regularization;
29
29
  return vec3(covarianceXX, covarianceXY, covarianceYY);
30
- }`);const b=.25,D=Math.log(b);return y.main.add(`\n uint gaussianIndex = fetchOrderedGaussianIndex(uint(gl_InstanceID));\n uvec4 packedGaussian = fetchPackedGaussian(gaussianIndex);\n\n float opacity = unpackOpacity(packedGaussian);\n\n gl_Position = ${o};\n\n if (opacity < ${b}) {\n return;\n }\n\n vec3 cameraRelativePosition = fetchGaussianCameraRelativePosition(gaussianIndex, packedGaussian);\n\n ${x(i,f`if (cameraRelativePosition.x < clipMin.x || cameraRelativePosition.y < clipMin.y || cameraRelativePosition.z < clipMin.z ||
30
+ }`);const b=.25,D=Math.log(b);return G.main.add(`\n uint gaussianIndex = fetchOrderedGaussianIndex(uint(gl_InstanceID));\n uvec4 packedGaussian = fetchPackedGaussian(gaussianIndex);\n\n float opacity = unpackOpacity(packedGaussian);\n\n gl_Position = ${o};\n\n if (opacity < ${b}) {\n return;\n }\n\n vec3 cameraRelativePosition = fetchGaussianCameraRelativePosition(gaussianIndex, packedGaussian);\n\n ${x(i,f`if (cameraRelativePosition.x < clipMin.x || cameraRelativePosition.y < clipMin.y || cameraRelativePosition.z < clipMin.z ||
31
31
  cameraRelativePosition.x > clipMax.x || cameraRelativePosition.y > clipMax.y || cameraRelativePosition.z > clipMax.z) {
32
32
  return;
33
33
  }`)}\n\n ${x(l,f`if (rejectBySlice(cameraRelativePosition)) {
34
34
  return;
35
- }`)}\n\n vec4 viewPos = vec4(mat3(view) * cameraRelativePosition, 1.0);\n\n if (viewPos.z > -nearFar.x || viewPos.z < -nearFar.y) {\n return;\n }\n\n vec3 covarianceA;\n vec3 covarianceB;\n computePackedGaussianCovariance3D(packedGaussian, covarianceA, covarianceB);\n\n float covariance3D[6] = float[6](covarianceA.x, covarianceA.y, covarianceA.z, covarianceB.x, covarianceB.y, covarianceB.z);\n\n vec4 projPos = proj * viewPos;\n float safeW = safeClipW(projPos.w);\n float invWSquared = 1.0 / (safeW * safeW);\n vec2 halfScreenSize = 0.5 / inverseScreenSize;\n\n // Projection matrix columns are the clip-space derivatives with respect to view-space xyz.\n vec3 clipWGradient = vec3(proj[0][3], proj[1][3], proj[2][3]);\n vec3 pixelXGradient = computeProjectivePixelGradient(\n vec3(proj[0][0], proj[1][0], proj[2][0]),\n clipWGradient,\n projPos.x,\n safeW,\n invWSquared,\n halfScreenSize.x\n );\n vec3 pixelYGradient = computeProjectivePixelGradient(\n vec3(proj[0][1], proj[1][1], proj[2][1]),\n clipWGradient,\n projPos.y,\n safeW,\n invWSquared,\n halfScreenSize.y\n );\n vec3 covariance2D = computeProjectiveCovariance2D(pixelXGradient, pixelYGradient, covariance3D, view);\n\n float determinant = computeGaussianCovarianceDeterminant(covariance2D);\n if (determinant <= 0.0) {\n return;\n }\n\n vec2 eigenvalues = computeGaussianCovarianceEigenvalues(covariance2D);\n\n gaussianLogAlphaCutoff = ${D} - log(opacity);\n float gaussianEllipseThreshold = computeGaussianEllipseThreshold(gaussianLogAlphaCutoff);\n vec2 axisLengths = computeGaussianAxisLengths(eigenvalues, gaussianEllipseThreshold);\n float maxRadius = max(axisLengths.x, axisLengths.y);\n\n if (rejectGaussianByMinimumRadius(maxRadius, opacity, minSplatRadius)) {\n return;\n }\n\n vec3 ndcPos = projPos.xyz / safeW;\n vec2 clipSpacePixelScale = 2.0 * inverseScreenSize;\n\n if (rejectGaussianByScreenBounds(ndcPos.xy, maxRadius, clipSpacePixelScale)) {\n return;\n }\n\n offsetFromCenter = computeGaussianQuadOffset(covariance2D, eigenvalues, axisLengths, gl_VertexID);\n conic = computeGaussianConic(covariance2D, determinant);\n depth = (-viewPos.z - nearFar.x) / (nearFar.y - nearFar.x);\n\n vec2 clipPos = ndcPos.xy + offsetFromCenter * clipSpacePixelScale - inverseScreenSize;\n gl_Position = vec4(clipPos, ndcPos.z, 1.0);\n `),S.include(s),S.main.add(f`float gaussianExponent = evaluateGaussianExponent(conic, offsetFromCenter);
35
+ }`)}\n\n vec4 viewPos = vec4(mat3(view) * cameraRelativePosition, 1.0);\n\n if (viewPos.z > -nearFar.x || viewPos.z < -nearFar.y) {\n return;\n }\n\n vec3 covarianceA;\n vec3 covarianceB;\n computePackedGaussianCovariance3D(packedGaussian, covarianceA, covarianceB);\n\n float covariance3D[6] = float[6](covarianceA.x, covarianceA.y, covarianceA.z, covarianceB.x, covarianceB.y, covarianceB.z);\n\n vec4 projPos = proj * viewPos;\n float safeW = safeClipW(projPos.w);\n float invWSquared = 1.0 / (safeW * safeW);\n vec2 halfScreenSize = 0.5 / inverseScreenSize;\n float maxShadowSplatRadius = max(halfScreenSize.x, halfScreenSize.y);\n\n // Projection matrix columns are the clip-space derivatives with respect to view-space xyz.\n vec3 clipWGradient = vec3(proj[0][3], proj[1][3], proj[2][3]);\n vec3 pixelXGradient = computeProjectivePixelGradient(\n vec3(proj[0][0], proj[1][0], proj[2][0]),\n clipWGradient,\n projPos.x,\n safeW,\n invWSquared,\n halfScreenSize.x\n );\n vec3 pixelYGradient = computeProjectivePixelGradient(\n vec3(proj[0][1], proj[1][1], proj[2][1]),\n clipWGradient,\n projPos.y,\n safeW,\n invWSquared,\n halfScreenSize.y\n );\n vec3 covariance2D = computeProjectiveCovariance2D(pixelXGradient, pixelYGradient, covariance3D, view);\n\n float determinant = computeGaussianCovarianceDeterminant(covariance2D);\n if (determinant <= 0.0) {\n return;\n }\n\n vec2 eigenvalues = computeGaussianCovarianceEigenvalues(covariance2D);\n\n gaussianLogAlphaCutoff = ${D} - log(opacity);\n float gaussianEllipseThreshold = computeGaussianEllipseThreshold(gaussianLogAlphaCutoff);\n vec2 axisLengths = computeGaussianAxisLengths(eigenvalues, gaussianEllipseThreshold);\n float maxRadius = max(axisLengths.x, axisLengths.y);\n\n // Avoid invalid/extremely large footprints.\n if (maxRadius < 0.0 || maxRadius > maxShadowSplatRadius) {\n return;\n }\n\n if (rejectGaussianByMinimumRadius(maxRadius, opacity, minSplatRadius)) {\n return;\n }\n\n vec3 ndcPos = projPos.xyz / safeW;\n vec2 clipSpacePixelScale = 2.0 * inverseScreenSize;\n\n if (rejectGaussianByScreenBounds(ndcPos.xy, maxRadius, clipSpacePixelScale)) {\n return;\n }\n\n offsetFromCenter = computeGaussianQuadOffset(covariance2D, eigenvalues, axisLengths, gl_VertexID);\n conic = computeGaussianConic(covariance2D, determinant);\n depth = (-viewPos.z - nearFar.x) / (nearFar.y - nearFar.x);\n\n vec2 clipPos = ndcPos.xy + offsetFromCenter * clipSpacePixelScale - inverseScreenSize;\n gl_Position = vec4(clipPos, ndcPos.z, 1.0);\n `),P.include(s),P.main.add(f`float gaussianExponent = evaluateGaussianExponent(conic, offsetFromCenter);
36
36
  if (gaussianExponent > 0.0 || gaussianExponent < gaussianLogAlphaCutoff) {
37
37
  discard;
38
38
  }
39
- outputDepth(depth);`),P}const j=a(),G=Object.freeze(Object.defineProperty({__proto__:null,GaussianSplatShadowPassParameters:P,build:S},Symbol.toStringTag,{value:"Module"}));export{G,P as a,S as b};
39
+ outputDepth(depth);`),S}const j=a(),y=Object.freeze(Object.defineProperty({__proto__:null,GaussianSplatShadowPassParameters:S,build:P},Symbol.toStringTag,{value:"Module"}));export{y as G,S as a,P as b};
@@ -1,28 +1,28 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepthLastFrame as a}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepthLastFrame.glsl.js";import{addMainLightDirection as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MainLighting.glsl.js";import{ScreenSpaceRayMarching as t}from"../views/3d/webgl-engine/core/shaderLibrary/shading/ScreenSpaceRayMarching.glsl.js";import{CameraSpace as r}from"../views/3d/webgl-engine/core/shaderLibrary/util/CameraSpace.glsl.js";import{FloatPassUniform as i}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as l,If as n}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as c}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DBindUniform as s}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{Texture2DPassUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{ColorAttachment1 as h}from"../views/webgl/enums.js";import{NoParameters as u}from"../views/webgl/NoParameters.js";import{ShaderBuilder as d}from"../views/webgl/ShaderBuilder.js";const p=.01,f=.008,g=.002,v=.5,x=.02,M=.1,y=.008,b=.012,w=.008,S=40,W=.095,C=.008,F=60,R=2,D=.0039,j=.25,z=1/3,I=2/3,B=2,G=.05,P=.15,T=.75,$=25,E=.15,L=.5,O=1,U=1,V=16;class k extends u{constructor(){super(...arguments),this.projScale=1,this.scaleGlobalIllumination=1,this.accumulatedFrames=0,this.frameCount=0,this.rayMarchMinReach=E,this.rayMarchMaxReach=L,this.rayMarchWorldReach=$,this.rayMarchMinReachEmissionWeight=O,this.rayMarchMaxReachEmissionWeight=U,this.rayMarchMaxSteps=V}}function N(u){const $=new d,E=$.fragment;return $.include(e),$.include(r),o(E),E.include(a),$.include(t,u),E.uniforms.add(new m("normalMap",e=>e.normalTexture),new m("depthMap",e=>e.depthTexture),new m("lastFrameColorTexture",(e,a)=>a.reprojection.lastFrameColor?.getTexture()),new m("lastFrameDepthTexture",(e,a)=>a.reprojection.lastFrameDepth?.attachment),new s("lastFrameGlobalIlluminationTexture",e=>e.globalIllumination?.getTexture()),new s("lastFrameGlobalIlluminationWeightTexture",e=>e.globalIllumination?.getTexture(h)),new c("reprojectionViewMatrix",e=>e.reprojection.viewMatrix),new c("view",e=>e.camera.viewMatrix),new i("accumulatedFramesGI",e=>e.accumulatedFrames),new i("frameCount",e=>e.frameCount),new i("scaleGlobalIllumination",e=>e.scaleGlobalIllumination),new m("blueNoiseTex",e=>e.noiseTexture)),E.uniforms.add(new i("rayMarchMinReach",e=>e.rayMarchMinReach),new i("rayMarchMaxReach",e=>e.rayMarchMaxReach),new i("rayMarchWorldReach",e=>e.rayMarchWorldReach),new i("rayMarchMinReachEmissionWeight",e=>e.rayMarchMinReachEmissionWeight),new i("rayMarchMaxReachEmissionWeight",e=>e.rayMarchMaxReachEmissionWeight),new i("rayMarchMaxSteps",e=>e.rayMarchMaxSteps)),u.hasEmission&&E.uniforms.add(new m("lastFrameEmissionTexture",(e,a)=>a.reprojection.lastFrameEmission?.attachment)),E.constants.add("timeSamplesSize","float",64),E.constants.add("blueNoiseGridSize","float",8),E.code.add(l`
2
+ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepthLastFrame as a}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepthLastFrame.glsl.js";import{Gamma as t}from"../views/3d/webgl-engine/core/shaderLibrary/shading/Gamma.glsl.js";import{addMainLightDirection as o}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MainLighting.glsl.js";import{ScreenSpaceRayMarching as r}from"../views/3d/webgl-engine/core/shaderLibrary/shading/ScreenSpaceRayMarching.glsl.js";import{CameraSpace as i}from"../views/3d/webgl-engine/core/shaderLibrary/util/CameraSpace.glsl.js";import{FloatPassUniform as l}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as n,If as s}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4BindUniform as c}from"../views/3d/webgl-engine/core/shaderModules/Matrix4BindUniform.js";import{Texture2DBindUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{Texture2DPassUniform as h}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{ColorAttachment1 as d}from"../views/webgl/enums.js";import{NoParameters as u}from"../views/webgl/NoParameters.js";import{ShaderBuilder as p}from"../views/webgl/ShaderBuilder.js";const f=.01,g=.008,x=.002,M=.5,v=.02,y=.1,b=.008,w=.012,S=.008,W=40,R=.095,D=.008,F=60,j=2,z=.0039,C=.25,B=.15,I=25,G=.15,P=.5,T=1,E=1,$=16;class L extends u{constructor(){super(...arguments),this.projScale=1,this.scaleGlobalIllumination=1,this.accumulatedFrames=0,this.frameCount=0,this.rayMarchMinReach=G,this.rayMarchMaxReach=P,this.rayMarchWorldReach=I,this.rayMarchMinReachEmissionWeight=T,this.rayMarchMaxReachEmissionWeight=E,this.rayMarchMaxSteps=$,this.colorBleedWeight=B}}function O(u){const B=new p,I=B.fragment;return B.include(e),B.include(i),o(I),I.include(a),I.include(t),B.include(r,u),I.uniforms.add(new h("normalMap",e=>e.normalTexture),new h("depthMap",e=>e.depthTexture),new h("lastFrameColorTexture",(e,a)=>a.reprojection.lastFrameColor?.getTexture()),new h("lastFrameDepthTexture",(e,a)=>a.reprojection.lastFrameDepth?.attachment),new m("lastFrameGlobalIlluminationTexture",e=>e.globalIllumination?.getTexture()),new m("lastFrameGlobalIlluminationWeightTexture",e=>e.globalIllumination?.getTexture(d)),new c("reprojectionViewMatrix",e=>e.reprojection.viewMatrix),new c("view",e=>e.camera.viewMatrix),new l("accumulatedFramesGI",e=>e.accumulatedFrames),new l("frameCount",e=>e.frameCount),new l("scaleGlobalIllumination",e=>e.scaleGlobalIllumination),new h("blueNoiseTex",e=>e.noiseTexture)),I.uniforms.add(new l("rayMarchMinReach",e=>e.rayMarchMinReach),new l("rayMarchMaxReach",e=>e.rayMarchMaxReach),new l("rayMarchWorldReach",e=>e.rayMarchWorldReach),new l("rayMarchMinReachEmissionWeight",e=>e.rayMarchMinReachEmissionWeight),new l("rayMarchMaxReachEmissionWeight",e=>e.rayMarchMaxReachEmissionWeight),new l("rayMarchMaxSteps",e=>e.rayMarchMaxSteps),new l("colorBleedWeight",e=>e.colorBleedWeight)),u.hasEmission&&I.uniforms.add(new h("lastFrameEmissionTexture",(e,a)=>a.reprojection.lastFrameEmission?.attachment)),I.constants.add("timeSamplesSize","float",64),I.constants.add("blueNoiseGridSize","float",8),I.code.add(n`
3
3
  float computeIdleColorBlendWeight(float accumulatedFrames) {
4
4
  float idleColorBlendProgress = clamp(
5
- accumulatedFrames / ${l.float(S)},
5
+ accumulatedFrames / ${n.float(W)},
6
6
  0.0,
7
7
  1.0
8
8
  );
9
9
  return mix(
10
- ${l.float(b)},
11
- ${l.float(w)},
10
+ ${n.float(w)},
11
+ ${n.float(S)},
12
12
  idleColorBlendProgress
13
13
  );
14
14
  }
15
15
 
16
16
  float computeIdleOcclusionBlendWeight(float accumulatedFrames) {
17
17
  float idleOcclusionBlendProgress = clamp(
18
- accumulatedFrames / ${l.float(F)},
18
+ accumulatedFrames / ${n.float(F)},
19
19
  0.0,
20
20
  1.0
21
21
  );
22
22
  return mix(
23
- ${l.float(W)},
24
- ${l.float(C)},
25
- pow(idleOcclusionBlendProgress, ${l.float(R)})
23
+ ${n.float(R)},
24
+ ${n.float(D)},
25
+ pow(idleOcclusionBlendProgress, ${n.float(j)})
26
26
  );
27
27
  }
28
28
 
@@ -67,30 +67,7 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
67
67
 
68
68
  return mat3(tangent, bitangent, n);
69
69
  }
70
-
71
- float computeChromaWeight(vec3 color) {
72
- float gray = dot(color, vec3(${l.float(z)}));
73
- vec3 deviationFromGray = color - gray;
74
- float chromaDistanceSquared = dot(deviationFromGray, deviationFromGray);
75
- float normalizedChroma = chromaDistanceSquared / ${l.float(I)};
76
-
77
- return clamp(normalizedChroma * ${l.float(B)}, 0.0, 1.0);
78
- }
79
-
80
- float computeColorBleedWeight(vec3 receiverColor, vec3 sourceColor) {
81
- float receiverChromaWeight = computeChromaWeight(receiverColor);
82
- float sourceChromaWeight = computeChromaWeight(sourceColor);
83
- float receiverAverageIntensity = dot(receiverColor, vec3(${l.float(z)}));
84
-
85
- // Favor bright, neutral receivers lit by more saturated hit surfaces
86
- float bleedFactor =
87
- pow(receiverAverageIntensity, ${l.float(G)}) *
88
- (1.0 - receiverChromaWeight) *
89
- pow(sourceChromaWeight, ${l.float(P)});
90
-
91
- return ${l.float(T)} * clamp(bleedFactor, 0.0, 1.0);
92
- }
93
- `),$.outputs.add("fragGlobalIllumination","vec4",0),$.outputs.add("fragWeight","float",1),E.main.add(l`
70
+ `),B.outputs.add("fragGlobalIllumination","vec4",0),B.outputs.add("fragWeight","float",1),I.main.add(n`
94
71
  float depth = depthFromTexture(depthMap, uv);
95
72
 
96
73
  // Early out if depth is out of range, such as in the sky
@@ -130,7 +107,7 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
130
107
  float idleColorBlendWeight = computeIdleColorBlendWeight(accumulatedFramesGI);
131
108
  float idleOcclusionBlendWeight = computeIdleOcclusionBlendWeight(accumulatedFramesGI);
132
109
  float reprojectionDepthMismatch = abs((lastFrameDepthViewPos + reprojectedViewPos.z) / max(lastFrameDepthViewPos, reprojectedViewPos.z));
133
- bool hasReprojectionMismatch = reprojectionDepthMismatch > ${l.float(p)};
110
+ bool hasReprojectionMismatch = reprojectionDepthMismatch > ${n.float(f)};
134
111
  bool isScaledGlobalIllumination = scaleGlobalIllumination < 1.0;
135
112
  bool isLowQualityEdgePixel = isScaledGlobalIllumination && isEdgeDepth(currentPixelDepth, uv);
136
113
  bool resetColorHistory = false;
@@ -139,7 +116,7 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
139
116
  if (hasReprojectionMismatch) {
140
117
  if (isLowQualityEdgePixel) {
141
118
  steps = 1;
142
- occlusionBlendWeight = ${l.float(f)};
119
+ occlusionBlendWeight = ${n.float(g)};
143
120
  resetColorHistory = true;
144
121
  } else {
145
122
  steps = 6;
@@ -148,15 +125,15 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
148
125
  }
149
126
  } else {
150
127
  steps = 1;
151
- if (historyOcclusionBlendWeight > ${l.float(v)}) {
152
- occlusionBlendWeight = ${l.float(M)};
153
- colorBlendWeight = ${l.float(y)};
154
- } else if (historyOcclusionBlendWeight > ${l.float(x)}) {
128
+ if (historyOcclusionBlendWeight > ${n.float(M)}) {
129
+ occlusionBlendWeight = ${n.float(y)};
130
+ colorBlendWeight = ${n.float(b)};
131
+ } else if (historyOcclusionBlendWeight > ${n.float(v)}) {
155
132
  occlusionBlendWeight = historyOcclusionBlendWeight - 0.05;
156
- colorBlendWeight = ${l.float(y)};
133
+ colorBlendWeight = ${n.float(b)};
157
134
  } else {
158
- occlusionBlendWeight = isScaledGlobalIllumination ? ${l.float(f)} : idleOcclusionBlendWeight;
159
- colorBlendWeight = isScaledGlobalIllumination ? ${l.float(g)} : idleColorBlendWeight;
135
+ occlusionBlendWeight = isScaledGlobalIllumination ? ${n.float(g)} : idleOcclusionBlendWeight;
136
+ colorBlendWeight = isScaledGlobalIllumination ? ${n.float(x)} : idleColorBlendWeight;
160
137
  }
161
138
  }
162
139
 
@@ -186,21 +163,21 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
186
163
  );
187
164
 
188
165
  if (hit.z > 0.0) {
189
- ${n(u.hasColor,l`
166
+ ${s(u.hasColor,n`
190
167
  // Emission and color bleed - Reproject the current receiver and sampled hit to estimate bounced color
191
168
  vec3 receiverColor = texture(lastFrameColorTexture, reprojectedCoordinate.xy).rgb;
192
169
 
193
170
  vec2 hitReprojectedCoordinate = reprojectionCoordinate(hit);
194
171
  vec3 sourceColor = texture(lastFrameColorTexture, hitReprojectedCoordinate).rgb;
195
- vec3 sourceEmission = ${n(u.hasEmission,"texture(lastFrameEmissionTexture, hitReprojectedCoordinate).xyz","vec3(0.0)")};
172
+ vec3 sourceColorLinear = linearizeGamma(sourceColor);
173
+ vec3 sourceEmission = ${s(u.hasEmission,"texture(lastFrameEmissionTexture, hitReprojectedCoordinate).xyz","vec3(0.0)")};
196
174
 
197
- float colorBleedWeight = computeColorBleedWeight(receiverColor, sourceColor);
198
175
  float emissionWeight = mix(
199
176
  rayMarchMinReachEmissionWeight,
200
177
  rayMarchMaxReachEmissionWeight,
201
178
  (rayMarchScreenReach - rayMarchMinReach) / max(rayMarchMaxReach - rayMarchMinReach, 0.00001)
202
179
  );
203
- fragGlobalIllumination.rgb += (sourceColor * colorBleedWeight + sourceEmission * emissionWeight) * stepSize;
180
+ fragGlobalIllumination.rgb += ((sourceColorLinear * colorBleedWeight) + sourceEmission * emissionWeight) * stepSize;
204
181
  `)}
205
182
  } else {
206
183
  // Occlusion - heuristic modulating sky intensity based on angle to main light
@@ -214,17 +191,17 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
214
191
 
215
192
  // Rendering trick add noise to reduce accumulation artifacts
216
193
  float accumulationDither = occlusionBlendWeight < 1.0
217
- ? randomDirectionSample.b * ${l.float(D)}
194
+ ? randomDirectionSample.b * ${n.float(z)}
218
195
  : 0.0;
219
196
 
220
- ${n(u.hasColor,l`
197
+ ${s(u.hasColor,n`
221
198
  // Accumulate color
222
199
  vec3 lastFrameColor = lastFrameGlobalIllumination.rgb;
223
- float colorDitherScale = isScaledGlobalIllumination ? ${l.float(j)} : 1.0;
200
+ float colorDitherScale = isScaledGlobalIllumination ? ${n.float(C)} : 1.0;
224
201
  fragGlobalIllumination.rgb = resetColorHistory
225
202
  ? vec3(0.0)
226
203
  : mix(lastFrameColor + accumulationDither * colorDitherScale, fragGlobalIllumination.rgb, colorBlendWeight);
227
- `,l`
204
+ `,n`
228
205
  fragGlobalIllumination.rgb = vec3(0.0);
229
206
  `)}
230
207
 
@@ -232,4 +209,4 @@ import{ScreenSpacePass as e}from"../views/3d/webgl-engine/core/shaderLibrary/Scr
232
209
  fragGlobalIllumination.a = mix(lastFrameGlobalIllumination.a + accumulationDither, fragGlobalIllumination.a, occlusionBlendWeight);
233
210
 
234
211
  fragWeight = occlusionBlendWeight;
235
- `),$}const H=Object.freeze(Object.defineProperty({__proto__:null,GlobalIlluminationPassParameters:k,build:N,defaultRayMarchMaxReach:L,defaultRayMarchMaxReachEmissionWeight:U,defaultRayMarchMaxSteps:V,defaultRayMarchMinReach:E,defaultRayMarchMinReachEmissionWeight:O,defaultRayMarchWorldReach:$},Symbol.toStringTag,{value:"Module"}));export{H as G,k as a,N as b,U as c,L as d,V as e,E as f,O as g,$ as h};
212
+ `),B}const U=Object.freeze(Object.defineProperty({__proto__:null,GlobalIlluminationPassParameters:L,build:O,defaultColorBleedWeight:B,defaultRayMarchMaxReach:P,defaultRayMarchMaxReachEmissionWeight:E,defaultRayMarchMaxSteps:$,defaultRayMarchMinReach:G,defaultRayMarchMinReachEmissionWeight:T,defaultRayMarchWorldReach:I},Symbol.toStringTag,{value:"Module"}));export{U as G,L as a,O as b,P as c,B as d,E as e,$ as f,G as g,T as h,I as i};
@@ -1,5 +1,5 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{ScreenSpacePass as l}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepth as o}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepth.glsl.js";import{GlobalIlluminationWeights as i}from"../views/3d/webgl-engine/core/shaderLibrary/shading/GlobalIlluminationWeights.glsl.js";import{CameraSpace as t}from"../views/3d/webgl-engine/core/shaderLibrary/util/CameraSpace.glsl.js";import{BooleanBindUniform as a}from"../views/3d/webgl-engine/core/shaderModules/BooleanBindUniform.js";import{Float2DrawUniform as s}from"../views/3d/webgl-engine/core/shaderModules/Float2DrawUniform.js";import{FloatPassUniform as n}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as r}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Texture2DDrawUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Texture2DDrawUniform.js";import{Texture2DPassUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{NoParameters as c}from"../views/webgl/NoParameters.js";import{ShaderBuilder as p}from"../views/webgl/ShaderBuilder.js";const h=4;class f extends c{constructor(){super(...arguments),this.blurSize=e()}}function d(){const e=new p,c=e.fragment;e.include(l),e.include(t),e.include(i);const f=(h+3)/2,d=1/(2*f*f);c.include(o);const g=5e4;c.uniforms.add(new a("hasEmission",e=>e.hasEmission),new u("depthMap",e=>e.depthTexture),new u("normalMap",e=>e.normalTexture),new m("globalIlluminationTexture",e=>e.texture),new m("globalIlluminationWeightTexture",e=>e.weightTexture),new s("blurSize",e=>e.blurSize),new n("scaleGlobalIllumination",e=>e.scaleGlobalIllumination),new n("projScale",(e,l)=>{const o=l.camera.distance;return o>g?Math.max(0,e.projScale-(o-g)):e.projScale}));const b=.1,S=400,v=.03,w=.08,W=1.5;return c.code.add(r`
2
+ import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{ScreenSpacePass as l}from"../views/3d/webgl-engine/core/shaderLibrary/ScreenSpacePass.glsl.js";import{ReadDepth as o}from"../views/3d/webgl-engine/core/shaderLibrary/output/ReadDepth.glsl.js";import{GlobalIlluminationWeights as i}from"../views/3d/webgl-engine/core/shaderLibrary/shading/GlobalIlluminationWeights.glsl.js";import{CameraSpace as t}from"../views/3d/webgl-engine/core/shaderLibrary/util/CameraSpace.glsl.js";import{BooleanBindUniform as a}from"../views/3d/webgl-engine/core/shaderModules/BooleanBindUniform.js";import{Float2DrawUniform as s}from"../views/3d/webgl-engine/core/shaderModules/Float2DrawUniform.js";import{FloatPassUniform as n}from"../views/3d/webgl-engine/core/shaderModules/FloatPassUniform.js";import{glsl as r}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Texture2DDrawUniform as m}from"../views/3d/webgl-engine/core/shaderModules/Texture2DDrawUniform.js";import{Texture2DPassUniform as u}from"../views/3d/webgl-engine/core/shaderModules/Texture2DPassUniform.js";import{ditherNoiseUnconditional as c}from"../views/3d/webgl-engine/shaders/ditherNoise.glsl.js";import{NoParameters as p}from"../views/webgl/NoParameters.js";import{ShaderBuilder as h}from"../views/webgl/ShaderBuilder.js";const d=4;class f extends p{constructor(){super(...arguments),this.blurSize=e()}}function g(){const e=new h,p=e.fragment;e.include(l),e.include(t),e.include(i);const f=(d+3)/2,g=1/(2*f*f);p.include(o),p.include(c);const b=5e4;p.uniforms.add(new a("hasEmission",e=>e.hasEmission),new u("depthMap",e=>e.depthTexture),new u("normalMap",e=>e.normalTexture),new m("globalIlluminationTexture",e=>e.texture),new m("globalIlluminationWeightTexture",e=>e.weightTexture),new s("blurSize",e=>e.blurSize),new n("scaleGlobalIllumination",e=>e.scaleGlobalIllumination),new n("projScale",(e,l)=>{const o=l.camera.distance;return o>b?Math.max(0,e.projScale-(o-b)):e.projScale}));const S=.1,v=400,w=.03,W=.08,I=1.5;return p.code.add(r`
3
3
  void accumulateBlurSample(
4
4
  vec2 sampleUv,
5
5
  float sampleOffset,
@@ -22,10 +22,10 @@ import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{Sc
22
22
  float normalSimilarityWeight = globalIlluminationNormalSimilarityWeight(sampleNormal, centerNormal);
23
23
  float depthNormalCorrection = globalIlluminationDepthNormalCorrection(sampleNormal);
24
24
  vec3 emission = sampleGlobalIllumination.rgb;
25
- float emissionSpatialWeightMultiplier = isScaledGlobalIllumination ? ${r.float(S)} : 1.0;
25
+ float emissionSpatialWeightMultiplier = isScaledGlobalIllumination ? ${r.float(v)} : 1.0;
26
26
 
27
27
  float emissionWeight = exp(
28
- -sampleOffset * sampleOffset * ${r.float(d)} * ${r.float(b)} * emissionSpatialWeightMultiplier
28
+ -sampleOffset * sampleOffset * ${r.float(g)} * ${r.float(S)} * emissionSpatialWeightMultiplier
29
29
  - depthDelta * depthDelta * depthSharpness * depthNormalCorrection
30
30
  );
31
31
  emissionWeight *= normalSimilarityWeight;
@@ -36,22 +36,22 @@ import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{Sc
36
36
  return;
37
37
  }
38
38
 
39
- float occlusionSpatialKernelScale = centerOcclusionBlendWeight > ${r.float(v)}
40
- ? ${r.float(w)}
41
- : ${r.float(W)};
39
+ float occlusionSpatialKernelScale = centerOcclusionBlendWeight > ${r.float(w)}
40
+ ? ${r.float(W)}
41
+ : ${r.float(I)};
42
42
  float occlusionWeight = exp(-sampleOffset * sampleOffset * occlusionSpatialKernelScale - depthDelta * depthDelta * depthSharpness);
43
43
  occlusionWeight *= normalSimilarityWeight;
44
44
  occlusionWeightSum += occlusionWeight;
45
45
  occlusionSum += occlusionWeight * sampleGlobalIllumination.a;
46
46
  }
47
- `),c.main.add(r`
47
+ `),p.main.add(r`
48
48
  vec3 emissionSum = vec3(0.0);
49
49
  float emissionWeightSum = 0.0;
50
50
 
51
51
  vec4 centerGlobalIllumination = texture(globalIlluminationTexture, uv);
52
52
  float centerOcclusionBlendWeight = texture(globalIlluminationWeightTexture, uv).r;
53
53
  bool isScaledGlobalIllumination = scaleGlobalIllumination < 1.0;
54
- bool shouldReuseCenterOcclusion = isScaledGlobalIllumination && centerOcclusionBlendWeight <= ${r.float(v)};
54
+ bool shouldReuseCenterOcclusion = isScaledGlobalIllumination && centerOcclusionBlendWeight <= ${r.float(w)};
55
55
  bool shouldSkipLowQualityBlur = !hasEmission && shouldReuseCenterOcclusion;
56
56
  if (shouldSkipLowQualityBlur) {
57
57
  fragColor = centerGlobalIllumination;
@@ -64,7 +64,7 @@ import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{Sc
64
64
  float occlusionWeightSum = 0.0;
65
65
 
66
66
  float depthSharpness = globalIlluminationDepthSharpness(projScale, centerDepth);
67
- for (int sampleOffset = -${r.int(h)}; sampleOffset <= ${r.int(h)}; ++sampleOffset) {
67
+ for (int sampleOffset = -${r.int(d)}; sampleOffset <= ${r.int(d)}; ++sampleOffset) {
68
68
  float sampleOffsetFloat = float(sampleOffset);
69
69
  vec2 sampleUv = uv + sampleOffsetFloat * blurSize;
70
70
  accumulateBlurSample(
@@ -82,7 +82,12 @@ import{create as e}from"../core/libs/gl-matrix-2/factories/vec2f64.js";import{Sc
82
82
  );
83
83
  }
84
84
 
85
- vec3 blurredEmission = (emissionSum / emissionWeightSum).rgb;
86
85
  float occlusion = shouldReuseCenterOcclusion ? centerGlobalIllumination.a : occlusionSum / occlusionWeightSum;
86
+ vec3 blurredEmission = (emissionSum / emissionWeightSum).rgb;
87
+
88
+ // heuristic dithering of the colors to remove banding, color shifts and wrong color accumulation
89
+ float dither = ditherNoise(vec4(blurredEmission, occlusion)) - 1./32768.0;
90
+ blurredEmission += isScaledGlobalIllumination ? 0.85 * dither : dither;
91
+
87
92
  fragColor = vec4(blurredEmission, occlusion);
88
- `),e}const g=Object.freeze(Object.defineProperty({__proto__:null,GlobalIlluminationBlurDrawParameters:f,build:d},Symbol.toStringTag,{value:"Module"}));export{g as G,f as a,d as b};
93
+ `),e}const b=Object.freeze(Object.defineProperty({__proto__:null,GlobalIlluminationBlurDrawParameters:f,build:g},Symbol.toStringTag,{value:"Module"}));export{b as G,f as a,g as b};
@@ -1,5 +1,5 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import{translate as e}from"../core/libs/gl-matrix-2/math/mat4.js";import{create as o}from"../core/libs/gl-matrix-2/factories/mat4f64.js";import{normalize as r,set as i}from"../core/libs/gl-matrix-2/math/vec3.js";import{create as a}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{addLinearDepth as l}from"../views/3d/webgl-engine/core/shaderLibrary/ForwardLinearDepth.glsl.js";import{addNearFar as t}from"../views/3d/webgl-engine/core/shaderLibrary/ForwardLinearDepthToWriteShadowMap.glsl.js";import{SliceDraw as n}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{Transform as s}from"../views/3d/webgl-engine/core/shaderLibrary/Transform.glsl.js";import{NormalAttribute as d}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/NormalAttribute.glsl.js";import{TextureCoordinateAttribute as c}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/TextureCoordinateAttribute.glsl.js";import{VertexTangent as m}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/VertexTangent.glsl.js";import{OutputDepth as g}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputDepth.glsl.js";import{OutputHighlight as v}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputHighlight.glsl.js";import{OutputHighlightOverlay as u}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputHighlightOverlay.js";import{EvaluateAmbientOcclusion as p}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateAmbientOcclusion.glsl.js";import{EvaluateSceneLighting as w,addAmbientBoostFactor as f,addLightingGlobalFactor as h}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateSceneLighting.glsl.js";import{addMainLightDirection as b,addMainLightIntensity as y}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MainLighting.glsl.js";import{NormalUtils as C}from"../views/3d/webgl-engine/core/shaderLibrary/shading/NormalUtils.glsl.js";import{ReadShadowMapDrawFragment as O}from"../views/3d/webgl-engine/core/shaderLibrary/shading/ReadShadowMap.glsl.js";import{OverlayTerrain as L}from"../views/3d/webgl-engine/core/shaderLibrary/terrain/Overlay.glsl.js";import{OverlayTerrainPassParameters as j,TerrainTexture as x}from"../views/3d/webgl-engine/core/shaderLibrary/terrain/TerrainTexture.glsl.js";import{addProjViewLocalOrigin as T,addViewNormal as M,addCameraPosition as P}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float3BindUniform as S}from"../views/3d/webgl-engine/core/shaderModules/Float3BindUniform.js";import{glsl as z,If as D}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4DrawUniform as $}from"../views/3d/webgl-engine/core/shaderModules/Matrix4DrawUniform.js";import{Texture2DBindUniform as A}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{alphaCutoff as F}from"../views/3d/webgl-engine/shaders/alphaCutoff.glsl.js";import{outputColorHighlightOLID as _}from"../views/3d/webgl-engine/shaders/OutputColorHighlightOLID.glsl.js";import{ShaderBuilder as V}from"../views/webgl/ShaderBuilder.js";class N extends j{}function W(o){const a=new V,{attributes:j,vertex:N,fragment:W,varyings:H}=a;j.add("position","vec3"),a.include(d,o),a.include(c,o);const U=()=>{a.include(C,o),N.code.add(z`vec3 getNormal() {
2
+ import{translate as e}from"../core/libs/gl-matrix-2/math/mat4.js";import{create as o}from"../core/libs/gl-matrix-2/factories/mat4f64.js";import{normalize as r,set as i}from"../core/libs/gl-matrix-2/math/vec3.js";import{create as a}from"../core/libs/gl-matrix-2/factories/vec3f64.js";import{addLinearDepth as l}from"../views/3d/webgl-engine/core/shaderLibrary/ForwardLinearDepth.glsl.js";import{addNearFar as t}from"../views/3d/webgl-engine/core/shaderLibrary/ForwardLinearDepthToWriteShadowMap.glsl.js";import{SliceDraw as n}from"../views/3d/webgl-engine/core/shaderLibrary/Slice.glsl.js";import{Transform as s}from"../views/3d/webgl-engine/core/shaderLibrary/Transform.glsl.js";import{NormalAttribute as d}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/NormalAttribute.glsl.js";import{TextureCoordinateAttribute as c}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/TextureCoordinateAttribute.glsl.js";import{VertexTangent as m}from"../views/3d/webgl-engine/core/shaderLibrary/attributes/VertexTangent.glsl.js";import{OutputDepth as g}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputDepth.glsl.js";import{OutputHighlight as v}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputHighlight.glsl.js";import{OutputHighlightOverlay as u}from"../views/3d/webgl-engine/core/shaderLibrary/output/OutputHighlightOverlay.js";import{EvaluateAmbientOcclusion as p}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateAmbientOcclusion.glsl.js";import{EvaluateSceneLighting as w,addAmbientBoostFactor as f,addLightingGlobalFactor as h}from"../views/3d/webgl-engine/core/shaderLibrary/shading/EvaluateSceneLighting.glsl.js";import{addMainLightDirection as b,addMainLightIntensity as y}from"../views/3d/webgl-engine/core/shaderLibrary/shading/MainLighting.glsl.js";import{NormalUtils as C}from"../views/3d/webgl-engine/core/shaderLibrary/shading/NormalUtils.glsl.js";import{ReadShadowMapDrawFragment as O}from"../views/3d/webgl-engine/core/shaderLibrary/shading/ReadShadowMap.glsl.js";import{OverlayTerrain as L}from"../views/3d/webgl-engine/core/shaderLibrary/terrain/Overlay.glsl.js";import{OverlayTerrainPassParameters as j,TerrainTexture as x}from"../views/3d/webgl-engine/core/shaderLibrary/terrain/TerrainTexture.glsl.js";import{addProjViewLocalOrigin as T,addViewNormal as M,addCameraPosition as P}from"../views/3d/webgl-engine/core/shaderLibrary/util/View.glsl.js";import{Float3BindUniform as S}from"../views/3d/webgl-engine/core/shaderModules/Float3BindUniform.js";import{glsl as z,If as D}from"../views/3d/webgl-engine/core/shaderModules/glsl.js";import{Matrix4DrawUniform as $}from"../views/3d/webgl-engine/core/shaderModules/Matrix4DrawUniform.js";import{Texture2DBindUniform as A}from"../views/3d/webgl-engine/core/shaderModules/Texture2DBindUniform.js";import{alphaCutoff as F}from"../views/3d/webgl-engine/shaders/alphaCutoff.glsl.js";import{outputColorHighlightOLID as _}from"../views/3d/webgl-engine/shaders/OutputColorHighlightOLID.glsl.js";import{ShaderBuilder as V}from"../views/webgl/ShaderBuilder.js";class N extends j{constructor(){super(...arguments),this.useStencil=!1}}function W(o){const a=new V,{attributes:j,vertex:N,fragment:W,varyings:H}=a;j.add("position","vec3"),a.include(d,o),a.include(c,o);const U=()=>{a.include(C,o),N.code.add(z`vec3 getNormal() {
3
3
  float z = 1.0 - abs(normalCompressed.x) - abs(normalCompressed.y);
4
4
  vec3 n = vec3(normalCompressed + vec2(normalCompressed.x >= 0.0 ? 1.0 : -1.0,
5
5
  normalCompressed.y >= 0.0 ? 1.0 : -1.0) * min(z, 0.0), z);
package/config.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import"./core/has.js";import{deepMerge as e}from"./core/object.js";const s={apiKey:void 0,apiKeys:{scopes:[]},applicationName:"",applicationUrl:globalThis.location?.href,assetsPath:"",fontsUrl:"https://static.arcgis.com/fonts",geometryServiceUrl:"https://utility.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer",geoRSSServiceUrl:"https://utility.arcgis.com/sharing/rss",kmlServiceUrl:"https://utility.arcgis.com/sharing/kml",userPrivilegesApplied:!0,portalUrl:"https://www.arcgis.com",respectPrefersReducedMotion:!0,routeServiceUrl:"https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World",workers:{loaderConfig:{has:{},paths:{},map:{},packages:[]}},request:{crossOriginNoCorsDomains:null,httpsDomains:["arcgis.com","arcgisonline.com","esrikr.com","premiumservices.blackbridge.com","esripremium.accuweather.com","gbm.digitalglobe.com","firstlook.digitalglobe.com","msi.digitalglobe.com"],interceptors:[],internalInterceptors:[],maxUrlLength:2e3,priority:"high",proxyRules:[],proxyUrl:null,timeout:62e3,trustedServers:[],useIdentity:!0},log:{interceptors:[],level:null}};if(globalThis.esriConfig&&(e(s,globalThis.esriConfig,!0),delete s.has),!s.assetsPath){{const e="5.1.0-next.104";s.assetsPath=`https://cdn.jsdelivr.net/npm/@arcgis/core@${e}/assets`}s.defaultAssetsPath=s.assetsPath}export{s as default};
2
+ import"./core/has.js";import{deepMerge as e}from"./core/object.js";const s={apiKey:void 0,apiKeys:{scopes:[]},applicationName:"",applicationUrl:globalThis.location?.href,assetsPath:"",fontsUrl:"https://static.arcgis.com/fonts",geometryServiceUrl:"https://utility.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer",geoRSSServiceUrl:"https://utility.arcgis.com/sharing/rss",kmlServiceUrl:"https://utility.arcgis.com/sharing/kml",userPrivilegesApplied:!0,portalUrl:"https://www.arcgis.com",respectPrefersReducedMotion:!0,routeServiceUrl:"https://route-api.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World",workers:{loaderConfig:{has:{},paths:{},map:{},packages:[]}},request:{crossOriginNoCorsDomains:null,httpsDomains:["arcgis.com","arcgisonline.com","esrikr.com","premiumservices.blackbridge.com","esripremium.accuweather.com","gbm.digitalglobe.com","firstlook.digitalglobe.com","msi.digitalglobe.com"],interceptors:[],internalInterceptors:[],maxUrlLength:2e3,priority:"high",proxyRules:[],proxyUrl:null,timeout:62e3,trustedServers:[],useIdentity:!0},log:{interceptors:[],level:null}};if(globalThis.esriConfig&&(e(s,globalThis.esriConfig,!0),delete s.has),!s.assetsPath){{const e="5.1.0-next.105";s.assetsPath=`https://cdn.jsdelivr.net/npm/@arcgis/core@${e}/assets`}s.defaultAssetsPath=s.assetsPath}export{s as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import{trackAccess as t}from"./accessorSupport/tracking.js";import{SimpleObservable as s}from"./accessorSupport/tracking/SimpleObservable.js";class e{constructor(t){this._observable=new s,this._notifyPending=!1,this._batchDepth=0,this._set=new Set(t)}get size(){return t(this._observable),this._set.size}add(t){const s=this._set.size;return this._set.add(t),this._set.size!==s&&this._notify(),this}batch(t){try{this._batchDepth++,t()}finally{this._batchDepth--,this._notifyPending&&0===this._batchDepth&&(this._notifyPending=!1,this._notify())}}clear(){this._set.size>0&&(this._set.clear(),this._notify())}delete(t){const s=this._set.delete(t);return s&&this._notify(),s}entries(){return t(this._observable),this._set.entries()}forEach(s,e){t(this._observable),this._set.forEach((t,i)=>s.call(e,t,i,this),e)}has(s){return t(this._observable),this._set.has(s)}keys(){return t(this._observable),this._set.keys()}values(){return t(this._observable),this._set.values()}[Symbol.iterator](){return t(this._observable),this._set[Symbol.iterator]()}[Symbol.dispose](){this._observable.destroy()}get[Symbol.toStringTag](){return this._set[Symbol.toStringTag]}_notify(){this._batchDepth>0?this._notifyPending=!0:this._observable.notify()}}export{e as default};
2
+ import{trackAccess as t}from"./accessorSupport/tracking.js";import{SimpleObservable as e}from"./accessorSupport/tracking/SimpleObservable.js";class s{constructor(t){this._observable=new e,this._notifyPending=!1,this._batchDepth=0,this._set=new Set(t)}get size(){return t(this._observable),this._set.size}add(t){const e=this._set.size;return this._set.add(t),this._set.size!==e&&this._notify(),this}batch(t){try{this._batchDepth++,t()}finally{this._batchDepth--,this._notifyPending&&0===this._batchDepth&&(this._notifyPending=!1,this._notify())}}clear(){this._set.size>0&&(this._set.clear(),this._notify())}delete(t){const e=this._set.delete(t);return e&&this._notify(),e}entries(){return t(this._observable),this._set.entries()}forEach(e,s){t(this._observable),this._set.forEach((t,i)=>e.call(s,t,i,this),s)}has(e){return t(this._observable),this._set.has(e)}keys(){return t(this._observable),this._set.keys()}values(){return t(this._observable),this._set.values()}union(e){return t(this._observable),this._set.union(e)}intersection(e){return t(this._observable),this._set.intersection(e)}difference(e){return t(this._observable),this._set.difference(e)}symmetricDifference(e){return t(this._observable),this._set.symmetricDifference(e)}isSubsetOf(e){return t(this._observable),this._set.isSubsetOf(e)}isSupersetOf(e){return t(this._observable),this._set.isSupersetOf(e)}isDisjointFrom(e){return t(this._observable),this._set.isDisjointFrom(e)}[Symbol.iterator](){return t(this._observable),this._set[Symbol.iterator]()}[Symbol.dispose](){this._observable.destroy()}get[Symbol.toStringTag](){return this._set[Symbol.toStringTag]}_notify(){this._batchDepth>0?this._notifyPending=!0:this._observable.notify()}}export{s as default};
package/kernel.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import has from"./core/has.js";import{addQueryParameter as o}from"./core/urlUtils.js";export{buildDate,commitHash as revision}from"./support/revision.js";Symbol.dispose??=Symbol("Symbol.dispose"),Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");const e="5.1";let s,r=e;function i(o){s=o}function t(e){const r=s?.findCredential(e);return r?.token?o(e,"token",r.token):e}r="5.1.0-next.104",has("host-webworker")||globalThis.$arcgis||Object.defineProperty(globalThis,"$arcgis",{configurable:!1,enumerable:!0,writable:!1,value:{}}),has("host-webworker");export{t as addTokenParameter,r as fullVersion,s as id,i as setId,e as version};
2
+ import has from"./core/has.js";import{addQueryParameter as o}from"./core/urlUtils.js";export{buildDate,commitHash as revision}from"./support/revision.js";Symbol.dispose??=Symbol("Symbol.dispose"),Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");const e="5.1";let s,r=e;function i(o){s=o}function t(e){const r=s?.findCredential(e);return r?.token?o(e,"token",r.token):e}r="5.1.0-next.105",has("host-webworker")||globalThis.$arcgis||Object.defineProperty(globalThis,"$arcgis",{configurable:!1,enumerable:!0,writable:!1,value:{}}),has("host-webworker");export{t as addTokenParameter,r as fullVersion,s as id,i as setId,e as version};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../Color.js";import r from"../request.js";import{deprecatedProperty as o}from"../core/deprecate.js";import i from"../core/Error.js";import s from"../core/Logger.js";import{clamp as l}from"../core/mathUtils.js";import{MultiOriginJSONSupportMixin as n}from"../core/MultiOriginJSONSupport.js";import{throwIfAbortError as a}from"../core/promiseUtils.js";import{watch as p,initial as m,whenOnce as y}from"../core/reactiveUtils.js";import{property as u,subclass as d}from"../core/accessorSupport/decorators.js";import{Integer as c}from"../core/accessorSupport/ensureType.js";import h from"../geometry/Extent.js";import f from"../geometry/Point.js";import v from"../geometry/Polygon.js";import g from"../geometry/Polyline.js";import S from"../geometry/SpatialReference.js";import b from"./Layer.js";import{ArcGISService as O}from"./mixins/ArcGISService.js";import{BlendLayer as j,effectProperty as T}from"./mixins/BlendLayer.js";import{CustomParametersMixin as w}from"./mixins/CustomParametersMixin.js";import{OperationalLayer as P}from"./mixins/OperationalLayer.js";import{PortalLayer as I}from"./mixins/PortalLayer.js";import{ScaleRangeLayer as C}from"./mixins/ScaleRangeLayer.js";import{parse as L,cleanTitle as x,titleFromUrlAndName as U}from"./support/arcgisLayerUrl.js";import{opacity as E,id as M}from"./support/commonProperties.js";import{normalizeParsedUrlObject as N,urlProperty as _}from"./support/multiLayerServiceUtils.js";import k from"./support/PlaybackInfo.js";import{getVideoLayerCapabilities as J}from"./support/serviceCapabilitiesUtils.js";import F from"./support/TelemetryData.js";import V from"./support/TelemetryDisplay.js";import R from"./support/VideoFrame.js";import H from"./support/VideoTimeExtent.js";import G from"./video/VideoController.js";import{getFrameHorizonPoints as q,getGroundControlPoints as z,getTelemetryData as A,getServiceLayersInfo as D,getStyledTelemetrySymbol as Z,getLineOfSight as B,getSensorTrailPoints as Q,readVideoTimeExtent as W}from"./video/videoUtils.js";import $ from"../symbols/CIMSymbol.js";import K from"../symbols/PictureMarkerSymbol.js";import X from"../symbols/SimpleFillSymbol.js";import Y from"../symbols/SimpleLineSymbol.js";import ee from"../symbols/SimpleMarkerSymbol.js";import te from"../symbols/Symbol.js";import{write as re}from"../symbols/support/jsonUtils.js";import{addLayerUnsupportedError as oe}from"../webdoc/support/unsupportedErrors.js";import{reader as ie}from"../core/accessorSupport/decorators/reader.js";function se(e,t){return{ignoreOrigin:this.originIdOf(t)<3}}const le=new t([255,127,0]),ne=new t([0,0,0,.05]),ae=new t([0,0,0]),pe=new ee({angle:0,color:le,size:10,style:"cross"}),me=new X({color:ne,outline:new Y({color:le,width:2})}),ye=new Y({color:ae,style:"dash",width:1}),ue=new Y({color:le,width:1}),de=new ee({angle:0,color:le,outline:{color:[255,255,255],width:1.33},size:10,style:"circle"}),ce=new Y({color:le,width:1}),he={types:{base:te,key:"type",typeMap:{"simple-marker":ee,"picture-marker":K,cim:$}},json:{name:"drawingInfo.sensorSymbol",write:{writer:re,overridePolicy:se}}};function fe(e,t){return{type:t,json:{name:e,write:{overridePolicy:se}}}}let ve=class extends(j(C(O(P(I(n(w(b)))))))){constructor(e){super(e),this._trailPoints=[],this.cameraInfo=null,this.capabilities=null,this.codecs=null,this.connectionInfo=null,this.controller=new G,this.copyright=null,this.coverage=null,this.created=null,this.customParameters=null,this.description=null,this.elevationSource=null,this.frame=null,this.frameCenterSymbol=pe.clone(),this.frameCount=null,this.frameEffect=null,this.frameOpacity=1,this.frameOutlineSymbol=me.clone(),this.fullExtent=null,this.fullTimeExtent=null,this.initialExtent=null,this.layerId=null,this.operationalLayerType="ArcGISVideoLayer",this.playbackInfo=null,this.posterUrl=null,this.qualities=null,this.sensorSymbolOrientation={source:"platformHeading",symbolOffset:0},this.sensorPathSymbol=ye.clone(),this.sensorSymbol=de.clone(),this.sensorSightLineSymbol=ue.clone(),this.sensorTrailSymbol=ce.clone(),this.serviceItemId=null,this.sourceJSON=null,this.sourceQuality=null,this.sourceType=null,this.spatialReference=S.WGS84,this.start=0,this.telemetryDisplay=new V,this.sublayerTitleMode="item-title",this.type="video",this.url=null,this.version=null,this.videoLayersInfo=null}initialize(){this.addHandles([p(()=>this.metadata,()=>{this.notifyChange("telemetry"),this.notifyChange("groundControlPoints"),this.notifyChange("frameHorizonPoints")}),p(()=>this.telemetry?.sensorLocation,e=>{this._setSensorPath(e),this._setSensorTrail(e)},m)]),y(()=>this.loaded&&"can-play"===this.state&&this.duration>0).then(()=>{this.start>=0&&this.start<=this.duration&&this.setCurrentTime(this.start)})}destroy(){this.removeAllHandles(),this.controller&&this.controller.destroy()}load(e){const t=null!=e?e.signal:null,r=this.loadFromPortal({supportedTypes:["Video Service"],supportsData:!0},e).catch(a).then(()=>this._fetchService(t)).then(()=>this._fetchCoverage(t));return this.addResolvingPromise(r),Promise.resolve(this)}get autoplay(){return this.controller?.autoplay??!1}set autoplay(e){this.controller.autoplay=e}get buffered(){return this.controller.buffered}readCapabilitiesFromService(e,t){return J(t)}readConnectionInfo(e,t){const r=Object.values(t.connectionUrl);return r?.length&&(this.controller.startMode="ondemand"===t.serviceType?"auto":"metadata",this.controller.playerUrl=r[0]),t.connectionUrl}get currentTime(){return this.controller.currentTime}get duration(){return this.controller.duration}get ended(){return this.controller.ended}get frameHorizonPoints(){return q(this.metadata)}get groundControlPoints(){return z(this.metadata)}get isLive(){return this.controller?.isLive??!1}get livestreamStatus(){return this.controller?.livestreamStatus}get loop(){return this.controller.loop}set loop(e){this.controller.loop=e}get metadata(){return this.controller?.currentMetadata}get mimeType(){return this.controller?.mimeType}get muted(){return this.controller.muted}set muted(e){this.controller.muted=e}get parsedUrl(){return N(this)}get playbackRate(){return this.controller.rate}set playbackRate(e){this.controller.rate=e}get playerUrl(){return this.controller.playerUrl}get playing(){return this.controller.playing}get started(){return this.controller?.started??!1}get state(){return this.controller.state}get telemetry(){return A(this.metadata)}readTitleFromService(e,t){const{url:r}=this,o=t.name||(r?L(r)?.title:void 0);switch(this.sublayerTitleMode){case"item-title":if(r)return U(r,o);break;case"item-title-and-service-name":{const e=this.portalItem?.title;if(e&&e!==o)return x(e)+(o?" - "+x(o):"");break}}return o?x(o):void 0}readTitleFromPortalItem(e){return"item-title"===this.sublayerTitleMode?e:void 0}get videoElement(){return this.controller?.element}get videoHeight(){return this.controller?.videoHeight}readLayerInfosFromService(e,t){return D(t)}get videoTimeExtent(){return o(s.getLogger(this),"videoTimeExtent",{replacement:"fullTimeExtent",version:"4.33",warnOnce:!0}),this.fullTimeExtent}get videoWidth(){return this.controller?.videoWidth}get volume(){return this.controller?.volume??0}set volume(e){this.controller.volume=e}get waiting(){return this.controller.waiting}play(){this.controller.play()}pause(){this.controller.pause()}reset(){this._trailPoints=[],this.controller.reset()}setCurrentTime(e){if(this.duration<0)return;const t=l(e,0,this.duration);this.controller.setCurrentTime(t)}toGround(e,t){return this.controller?.sensorModel?.metadataSupportsTransforms?this.controller.sensorModel.transformImageToGeo(e,t):null}toVideo(e){if(!this.controller?.sensorModel?.metadataSupportsTransforms)return null;const t=this.controller.sensorModel.transformGeoToImage(e.x,e.y,e.z);return{x:t[0],y:t[1]}}updateTelemetryColor(e,r){if(!e)return;const o=new t(e);r&&!r?.frameCenter||(this.frameCenterSymbol=Z(this.frameCenterSymbol,o)??pe),r&&!r?.frameOutline||(this.frameOutlineSymbol=Z(this.frameOutlineSymbol,o,ne)??me),r&&!r?.lineOfSight||(this.sensorSightLineSymbol=Z(this.sensorSightLineSymbol,o)??ue),r&&!r?.sensorLocation||(this.sensorSymbol=Z(this.sensorSymbol,o)??de),r&&!r?.sensorPath||(this.sensorPathSymbol=Z(this.sensorPathSymbol,o)??ye),r&&!r?.sensorTrail||(this.sensorTrailSymbol=Z(this.sensorTrailSymbol,o)??ce)}write(e,t){return null==this.layerId?(oe(t,this,"the ArcGIS server version must be greater than 11.2."),null):super.write(e,t)}async _fetchCoverage(e){if(!this.capabilities?.operations?.supportsCoverageQuery||"number"!=typeof this.layerId)return;const t=`${this.parsedUrl.path}/coverage`,{data:o}=await r(t,{query:{f:"json",...this.customParameters},signal:e}),{area:i=null,sensorPoints:s=null,telemetry:l=null}=o,n={area:null,path:null};if(i?.rings?.length&&(n.area=v.fromJSON(i)),s?.points?.length){const e=s.points;n.path=new g({hasM:!0,hasZ:!0,paths:[e]})}if(l?.start){const{frameCenter:e=null,frameOutline:t=null,sensor:r=null}=l?.start||{};if(t&&(this.telemetry.frameOutline=v.fromJSON(t)),r&&(this.telemetry.sensorLocation=f.fromJSON(r)),e&&(this.telemetry.frameCenter=f.fromJSON(e)),r&&e){const{sensorLocation:e,frameCenter:t}=this.telemetry;this.telemetry.lineOfSight=B(e,t)}}this._set("coverage",n)}async _fetchService(e){if(this.sourceJSON)return void this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl});const{data:t,ssl:o}=await r(this.url,{query:{f:"json",...this.parsedUrl.query,...this.customParameters},signal:e});if(o&&(this.url=this.url.replace(/^http:/i,"https:")),!t?.currentVersion)return t.currentVersion="11.2",this.sourceJSON=t,void this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl});if(this.layerId??=t.layers?.[0]?.id??null,null==this.layerId)throw new i("arcgis-layers:url-mismatch","The url is not a valid arcgis resource");const{data:s}=await r(this.parsedUrl.path,{query:{f:"json",...this.customParameters},signal:e});this.sourceJSON={...t,...s},this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl})}_setSensorTrail(e){if(!e)return;const t=Q(e,this._trailPoints);this._trailPoints=[...t];const r=this._trailPoints.map(e=>e.toArray()),o=new g({hasZ:e.hasZ,paths:[r]});this.telemetry.sensorTrail=o.clone()}_setSensorPath(e){if(!e||"polyline"!==this.coverage?.path?.type)return;const t=this.telemetry?.sensorPath??this.coverage.path.clone(),{spatialReference:r,hasZ:o,hasM:i,paths:s}=t;if(!i)return;const l=t.hasZ?3:2,n=1e3*this.currentTime,a=[];for(const p of s){let e=0;const t=p.length,r=n>500?n+1500:n;for(;e<t&&p[e][l]<=r;)e++;e<p.length&&a.push(...p.slice(e))}this.telemetry.sensorPath=new g({hasZ:o,hasM:i,paths:[a],spatialReference:r})}};e([u({type:Boolean,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"autoplay",null),e([u({readOnly:!0})],ve.prototype,"buffered",null),e([u({readOnly:!0})],ve.prototype,"cameraInfo",void 0),e([u({readOnly:!0,json:{read:!1}})],ve.prototype,"capabilities",void 0),e([ie("service","capabilities",["supportsAppend","supportsCoverageQuery","supportsExportClip","supportsExportFrameset","supportsMensuration","supportsPreviews","supportsUpdate"])],ve.prototype,"readCapabilitiesFromService",null),e([u({readOnly:!0})],ve.prototype,"codecs",void 0),e([u({readOnly:!0})],ve.prototype,"connectionInfo",void 0),e([ie("connectionInfo",["connectionUrl"])],ve.prototype,"readConnectionInfo",null),e([u()],ve.prototype,"controller",void 0),e([u({type:String})],ve.prototype,"copyright",void 0),e([u({readOnly:!0})],ve.prototype,"coverage",void 0),e([u({readOnly:!0,type:Date})],ve.prototype,"created",void 0),e([u({type:Number})],ve.prototype,"currentTime",null),e([u({json:{write:!1}})],ve.prototype,"customParameters",void 0),e([u({type:String})],ve.prototype,"description",void 0),e([u({type:Number})],ve.prototype,"duration",null),e([u({readOnly:!0})],ve.prototype,"elevationSource",void 0),e([u({type:Boolean})],ve.prototype,"ended",null),e([u({type:R})],ve.prototype,"frame",void 0),e([u(fe("drawingInfo.frameCenterSymbol",ee))],ve.prototype,"frameCenterSymbol",void 0),e([u({readOnly:!0,type:c})],ve.prototype,"frameCount",void 0),e([u(T)],ve.prototype,"frameEffect",void 0),e([u(E)],ve.prototype,"frameOpacity",void 0),e([u(fe("drawingInfo.frameOutlineSymbol",X))],ve.prototype,"frameOutlineSymbol",void 0),e([u({type:h})],ve.prototype,"fullExtent",void 0),e([u({readOnly:!0})],ve.prototype,"frameHorizonPoints",null),e([u({readOnly:!0,json:{read:{reader:W,source:"time"}},type:H})],ve.prototype,"fullTimeExtent",void 0),e([u({readOnly:!0})],ve.prototype,"groundControlPoints",null),e([u(M)],ve.prototype,"id",void 0),e([u({type:h})],ve.prototype,"initialExtent",void 0),e([u({readOnly:!0})],ve.prototype,"isLive",null),e([u({type:c,json:{read:!1,origins:{service:{read:{source:"id"}}}}})],ve.prototype,"layerId",void 0),e([u({readOnly:!0})],ve.prototype,"livestreamStatus",null),e([u({type:Boolean})],ve.prototype,"loop",null),e([u({readOnly:!0})],ve.prototype,"metadata",null),e([u({readOnly:!0})],ve.prototype,"mimeType",null),e([u({type:Boolean,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"muted",null),e([u({type:["ArcGISVideoLayer"]})],ve.prototype,"operationalLayerType",void 0),e([u({readOnly:!0})],ve.prototype,"parsedUrl",null),e([u({type:k})],ve.prototype,"playbackInfo",void 0),e([u({type:Number})],ve.prototype,"playbackRate",null),e([u({readOnly:!0,type:String})],ve.prototype,"playerUrl",null),e([u({readOnly:!0})],ve.prototype,"playing",null),e([u({readOnly:!0,json:{read:{source:"poster"}}})],ve.prototype,"posterUrl",void 0),e([u({readOnly:!0})],ve.prototype,"qualities",void 0),e([u()],ve.prototype,"sensorSymbolOrientation",void 0),e([u(fe("drawingInfo.sensorPathSymbol",Y))],ve.prototype,"sensorPathSymbol",void 0),e([u(he)],ve.prototype,"sensorSymbol",void 0),e([u(fe("drawingInfo.sensorSightLineSymbol",Y))],ve.prototype,"sensorSightLineSymbol",void 0),e([u(fe("drawingInfo.sensorTrailSymbol",Y))],ve.prototype,"sensorTrailSymbol",void 0),e([u({readOnly:!0})],ve.prototype,"serviceItemId",void 0),e([u()],ve.prototype,"sourceJSON",void 0),e([u({readOnly:!0})],ve.prototype,"sourceQuality",void 0),e([u({readOnly:!0,json:{name:"serviceType"}})],ve.prototype,"sourceType",void 0),e([u({type:S})],ve.prototype,"spatialReference",void 0),e([u({json:{write:!0}})],ve.prototype,"start",void 0),e([u({readOnly:!0})],ve.prototype,"started",null),e([u({readOnly:!0,type:String})],ve.prototype,"state",null),e([u({readOnly:!0,type:F})],ve.prototype,"telemetry",null),e([u({type:V,nonNullable:!0,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"telemetryDisplay",void 0),e([ie("service","title",["name"])],ve.prototype,"readTitleFromService",null),e([ie("portal-item","title")],ve.prototype,"readTitleFromPortalItem",null),e([u({type:String})],ve.prototype,"sublayerTitleMode",void 0),e([u({readOnly:!0})],ve.prototype,"type",void 0),e([u(_())],ve.prototype,"url",void 0),e([u({readOnly:!0,type:Number,json:{read:{source:"currentVersion"}}})],ve.prototype,"version",void 0),e([u({readOnly:!0})],ve.prototype,"videoElement",null),e([u({readOnly:!0})],ve.prototype,"videoHeight",null),e([u({readOnly:!0,json:{read:!1}})],ve.prototype,"videoLayersInfo",void 0),e([ie("service","videoLayersInfo",["id","name","poster","serviceType","type"])],ve.prototype,"readLayerInfosFromService",null),e([u({type:H,readOnly:!0})],ve.prototype,"videoTimeExtent",null),e([u({readOnly:!0})],ve.prototype,"videoWidth",null),e([u()],ve.prototype,"volume",null),e([u({readOnly:!0})],ve.prototype,"waiting",null),ve=e([d("esri.layers.VideoLayer")],ve);const ge=ve;export{ge as default};
2
+ import{__decorate as e}from"tslib";import t from"../Color.js";import r from"../request.js";import{deprecatedProperty as o}from"../core/deprecate.js";import i from"../core/Error.js";import s from"../core/Logger.js";import{clamp as l}from"../core/mathUtils.js";import{MultiOriginJSONSupportMixin as n}from"../core/MultiOriginJSONSupport.js";import{throwIfAbortError as a}from"../core/promiseUtils.js";import{watch as p,initial as m,whenOnce as y}from"../core/reactiveUtils.js";import{property as u,subclass as d}from"../core/accessorSupport/decorators.js";import{Integer as c}from"../core/accessorSupport/ensureType.js";import h from"../geometry/Extent.js";import f from"../geometry/Point.js";import v from"../geometry/Polygon.js";import g from"../geometry/Polyline.js";import S from"../geometry/SpatialReference.js";import b from"./Layer.js";import{ArcGISService as O}from"./mixins/ArcGISService.js";import{BlendLayer as j,effectProperty as T}from"./mixins/BlendLayer.js";import{CustomParametersMixin as w}from"./mixins/CustomParametersMixin.js";import{OperationalLayer as P}from"./mixins/OperationalLayer.js";import{PortalLayer as I}from"./mixins/PortalLayer.js";import{ScaleRangeLayer as C}from"./mixins/ScaleRangeLayer.js";import{parse as L,cleanTitle as x,titleFromUrlAndName as U}from"./support/arcgisLayerUrl.js";import{opacity as E,id as M}from"./support/commonProperties.js";import{normalizeParsedUrlObject as N,urlProperty as _}from"./support/multiLayerServiceUtils.js";import k from"./support/PlaybackInfo.js";import{getVideoLayerCapabilities as J}from"./support/serviceCapabilitiesUtils.js";import F from"./support/TelemetryData.js";import V from"./support/TelemetryDisplay.js";import R from"./support/VideoFrame.js";import H from"./support/VideoTimeExtent.js";import G from"./video/VideoController.js";import{getFrameHorizonPoints as q,getGroundControlPoints as z,getTelemetryData as A,getServiceLayersInfo as D,getStyledTelemetrySymbol as Z,getLineOfSight as B,getSensorTrailPoints as Q,readVideoTimeExtent as W}from"./video/videoUtils.js";import $ from"../symbols/CIMSymbol.js";import K from"../symbols/PictureMarkerSymbol.js";import X from"../symbols/SimpleFillSymbol.js";import Y from"../symbols/SimpleLineSymbol.js";import ee from"../symbols/SimpleMarkerSymbol.js";import te from"../symbols/Symbol.js";import{write as re}from"../symbols/support/jsonUtils.js";import{addLayerUnsupportedError as oe}from"../webdoc/support/unsupportedErrors.js";import{reader as ie}from"../core/accessorSupport/decorators/reader.js";function se(e,t){return{ignoreOrigin:this.originIdOf(t)<3}}const le=new t([255,127,0]),ne=new t([0,0,0,.05]),ae=new t([0,0,0]),pe=new ee({angle:0,color:le,size:10,style:"cross"}),me=new X({color:ne,outline:new Y({color:le,width:2})}),ye=new Y({color:ae,style:"dash",width:1}),ue=new Y({color:le,width:1}),de=new ee({angle:0,color:le,outline:{color:[255,255,255],width:1.33},size:10,style:"circle"}),ce=new Y({color:le,width:1}),he={types:{base:te,key:"type",typeMap:{"simple-marker":ee,"picture-marker":K,cim:$}},json:{name:"drawingInfo.sensorSymbol",write:{writer:re,overridePolicy:se}}};function fe(e,t){return{type:t,json:{name:e,write:{overridePolicy:se}}}}let ve=class extends(j(C(O(P(I(n(w(b)))))))){constructor(e){super(e),this._trailPoints=[],this.cameraInfo=null,this.capabilities=null,this.codecs=null,this.connectionInfo=null,this.controller=new G,this.copyright=null,this.coverage=null,this.created=null,this.customParameters=null,this.description=null,this.elevationSource=null,this.frame=null,this.frameCenterSymbol=pe.clone(),this.frameCount=null,this.frameEffect=null,this.frameOpacity=1,this.frameOutlineSymbol=me.clone(),this.fullExtent=null,this.fullTimeExtent=null,this.initialExtent=null,this.layerId=null,this.operationalLayerType="ArcGISVideoLayer",this.playbackInfo=null,this.posterUrl=null,this.qualities=null,this.sensorSymbolOrientation={source:"platformHeading",symbolOffset:0},this.sensorPathSymbol=ye.clone(),this.sensorSymbol=de.clone(),this.sensorSightLineSymbol=ue.clone(),this.sensorTrailSymbol=ce.clone(),this.serviceItemId=null,this.sourceJSON=null,this.sourceQuality=null,this.sourceType=null,this.spatialReference=S.WGS84,this.start=0,this.telemetryDisplay=new V,this.sublayerTitleMode="item-title",this.type="video",this.url=null,this.version=null,this.videoLayersInfo=null}initialize(){this.addHandles([p(()=>this.metadata,()=>{this.notifyChange("telemetry"),this.notifyChange("groundControlPoints"),this.notifyChange("frameHorizonPoints")}),p(()=>this.telemetry?.sensorLocation,e=>{this._setSensorPath(e),this._setSensorTrail(e)},m)]),y(()=>this.loaded&&"can-play"===this.state&&this.duration>0).then(()=>{this.start>=0&&this.start<=this.duration&&this.setCurrentTime(this.start)})}destroy(){this.removeAllHandles(),this.controller&&this.controller.destroy()}load(e){const t=null!=e?e.signal:null,r=this.loadFromPortal({supportedTypes:["Video Service"],supportsData:!0},e).catch(a).then(()=>this._fetchService(t)).then(()=>this._fetchCoverage(t));return this.addResolvingPromise(r),Promise.resolve(this)}get autoplay(){return this.controller?.autoplay??!1}set autoplay(e){this.controller.autoplay=e}get buffered(){return this.controller.buffered}readCapabilitiesFromService(e,t){return J(t)}readConnectionInfo(e,t){const r=Object.values(t.connectionUrl);return r?.length&&(this.controller.startMode="ondemand"===t.serviceType?"auto":"metadata",this.controller.playerUrl=r[0]),t.connectionUrl}get currentTime(){return this.controller.currentTime}get duration(){return this.controller.duration}get ended(){return this.controller.ended}get frameHorizonPoints(){return q(this.metadata)}get groundControlPoints(){return z(this.metadata)}get isLive(){return this.controller?.isLive??!1}get livestreamStatus(){return this.controller?.livestreamStatus}get loop(){return this.controller.loop}set loop(e){this.controller.loop=e}get metadata(){return this.controller?.currentMetadata}get mimeType(){return this.controller?.mimeType}get muted(){return this.controller.muted}set muted(e){this.controller.muted=e}get parsedUrl(){return N(this)}get playbackRate(){return this.controller.rate}set playbackRate(e){this.controller.rate=e}get playerUrl(){return this.controller.playerUrl}get playing(){return this.controller.playing}get started(){return this.controller?.started??!1}get state(){return this.controller.state}get telemetry(){return A(this.metadata)}readTitleFromService(e,t){const{url:r}=this,o=t.name||(r?L(r)?.title:void 0);switch(this.sublayerTitleMode){case"item-title":if(r)return U(r,o);break;case"item-title-and-service-name":{const e=this.portalItem?.title;if(e&&e!==o)return x(e)+(o?" - "+x(o):"");break}}return o?x(o):void 0}readTitleFromPortalItem(e){return"item-title"===this.sublayerTitleMode?e:void 0}get videoElement(){return this.controller?.element}get videoHeight(){return this.controller?.videoHeight}readLayerInfosFromService(e,t){return D(t)}get videoTimeExtent(){return o(s.getLogger(this),"videoTimeExtent",{replacement:"fullTimeExtent",version:"4.33",warnOnce:!0}),this.fullTimeExtent}get videoWidth(){return this.controller?.videoWidth}get volume(){return this.controller?.volume??0}set volume(e){this.controller.volume=e}get waiting(){return this.controller.waiting}play(){this.controller.play()}pause(){this.controller.pause()}reset(){this._trailPoints=[],this.controller.reset()}setCurrentTime(e){if(this.duration<0)return;const t=l(e,0,this.duration);this.controller.setCurrentTime(t)}toGround(e,t){return this.controller?.sensorModel?.metadataSupportsTransforms?this.controller.sensorModel.transformImageToGeo(e,t):null}toVideo(e){if(!this.controller?.sensorModel?.metadataSupportsTransforms)return null;const t=this.controller.sensorModel.transformGeoToImage(e.x,e.y,e.z);return{x:t[0],y:t[1]}}updateTelemetryColor(e,r){if(!e)return;const o=new t(e);r&&!r?.frameCenter||(this.frameCenterSymbol=Z(this.frameCenterSymbol,o)??pe),r&&!r?.frameOutline||(this.frameOutlineSymbol=Z(this.frameOutlineSymbol,o,ne)??me),r&&!r?.lineOfSight||(this.sensorSightLineSymbol=Z(this.sensorSightLineSymbol,o)??ue),r&&!r?.sensorLocation||(this.sensorSymbol=Z(this.sensorSymbol,o)??de),r&&!r?.sensorPath||(this.sensorPathSymbol=Z(this.sensorPathSymbol,o)??ye),r&&!r?.sensorTrail||(this.sensorTrailSymbol=Z(this.sensorTrailSymbol,o)??ce)}write(e,t){return null==this.layerId?(oe(t,this,"the ArcGIS server version must be greater than 11.2."),null):super.write(e,t)}async _fetchCoverage(e){if(!this.capabilities?.operations?.supportsCoverageQuery||"number"!=typeof this.layerId)return;const t=`${this.parsedUrl.path}/coverage`,{data:o}=await r(t,{query:{f:"json",...this.customParameters},signal:e}),{area:i=null,sensorPoints:s=null,telemetry:l=null}=o,n={area:null,path:null};if(i?.rings?.length&&(n.area=v.fromJSON(i)),s?.points?.length){const e=s.points;n.path=new g({hasM:!0,hasZ:!0,paths:[e]})}if(l?.start){const{frameCenter:e=null,frameOutline:t=null,sensor:r=null}=l?.start||{};if(t&&(this.telemetry.frameOutline=v.fromJSON(t)),r&&(this.telemetry.sensorLocation=f.fromJSON(r)),e&&(this.telemetry.frameCenter=f.fromJSON(e)),r&&e){const{sensorLocation:e,frameCenter:t}=this.telemetry;this.telemetry.lineOfSight=B(e,t)}}this._set("coverage",n)}async _fetchService(e){if(this.sourceJSON)return void this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl});const{data:t,ssl:o}=await r(this.url,{query:{f:"json",...this.parsedUrl.query,...this.customParameters},signal:e});if(o&&(this.url=this.url.replace(/^http:/i,"https:")),!t?.currentVersion)return t.currentVersion="11.2",this.sourceJSON=t,void this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl});if(this.layerId??=t.layers?.[0]?.id??null,null==this.layerId)throw new i("arcgis-layers:url-mismatch","The url is not a valid arcgis resource");const{data:s}=await r(this.parsedUrl.path,{query:{f:"json",...this.customParameters},signal:e});this.sourceJSON={...t,...s},this.read(this.sourceJSON,{origin:"service",url:this.parsedUrl})}_setSensorTrail(e){if(!e)return;const t=Q(e,this._trailPoints);this._trailPoints=[...t];const r=this._trailPoints.map(e=>e.toArray()),o=new g({hasZ:e.hasZ,paths:[r]});this.telemetry.sensorTrail=o.clone()}_setSensorPath(e){if(!e||"polyline"!==this.coverage?.path?.type)return;const t=this.telemetry?.sensorPath??this.coverage.path.clone(),{spatialReference:r,hasZ:o,hasM:i,paths:s}=t;if(!i)return;const l=t.hasZ?3:2,n=1e3*this.currentTime,a=[];for(const p of s){let e=0;const t=p.length,r=n>500?n+1500:n;for(;e<t&&p[e][l]<=r;)e++;e<p.length&&a.push(...p.slice(e))}this.telemetry.sensorPath=new g({hasZ:o,hasM:i,paths:[a],spatialReference:r})}};e([u({type:Boolean,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"autoplay",null),e([u({readOnly:!0})],ve.prototype,"buffered",null),e([u({readOnly:!0})],ve.prototype,"cameraInfo",void 0),e([u({readOnly:!0,json:{read:!1}})],ve.prototype,"capabilities",void 0),e([ie("service","capabilities",["supportsAppend","supportsCoverageQuery","supportsExportClip","supportsExportFrameset","supportsMensuration","supportsPreviews","supportsUpdate"])],ve.prototype,"readCapabilitiesFromService",null),e([u({readOnly:!0})],ve.prototype,"codecs",void 0),e([u({readOnly:!0})],ve.prototype,"connectionInfo",void 0),e([ie("connectionInfo",["connectionUrl"])],ve.prototype,"readConnectionInfo",null),e([u()],ve.prototype,"controller",void 0),e([u({type:String})],ve.prototype,"copyright",void 0),e([u({readOnly:!0})],ve.prototype,"coverage",void 0),e([u({readOnly:!0,type:Date})],ve.prototype,"created",void 0),e([u({type:Number})],ve.prototype,"currentTime",null),e([u({json:{write:!1}})],ve.prototype,"customParameters",void 0),e([u({type:String})],ve.prototype,"description",void 0),e([u({type:Number})],ve.prototype,"duration",null),e([u({readOnly:!0})],ve.prototype,"elevationSource",void 0),e([u({type:Boolean})],ve.prototype,"ended",null),e([u({type:R})],ve.prototype,"frame",void 0),e([u(fe("drawingInfo.frameCenterSymbol",ee))],ve.prototype,"frameCenterSymbol",void 0),e([u({readOnly:!0,type:c})],ve.prototype,"frameCount",void 0),e([u(T)],ve.prototype,"frameEffect",void 0),e([u(E)],ve.prototype,"frameOpacity",void 0),e([u(fe("drawingInfo.frameOutlineSymbol",X))],ve.prototype,"frameOutlineSymbol",void 0),e([u({type:h})],ve.prototype,"fullExtent",void 0),e([u({readOnly:!0})],ve.prototype,"frameHorizonPoints",null),e([u({readOnly:!0,json:{read:{reader:W,source:"time"}},type:H})],ve.prototype,"fullTimeExtent",void 0),e([u({readOnly:!0})],ve.prototype,"groundControlPoints",null),e([u(M)],ve.prototype,"id",void 0),e([u({type:h})],ve.prototype,"initialExtent",void 0),e([u({readOnly:!0})],ve.prototype,"isLive",null),e([u({type:c,json:{read:!1,origins:{service:{read:{source:"id"}}}}})],ve.prototype,"layerId",void 0),e([u({readOnly:!0})],ve.prototype,"livestreamStatus",null),e([u({type:Boolean,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"loop",null),e([u({readOnly:!0})],ve.prototype,"metadata",null),e([u({readOnly:!0})],ve.prototype,"mimeType",null),e([u({type:Boolean,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"muted",null),e([u({type:["ArcGISVideoLayer"]})],ve.prototype,"operationalLayerType",void 0),e([u({readOnly:!0})],ve.prototype,"parsedUrl",null),e([u({type:k})],ve.prototype,"playbackInfo",void 0),e([u({type:Number,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"playbackRate",null),e([u({readOnly:!0,type:String})],ve.prototype,"playerUrl",null),e([u({readOnly:!0})],ve.prototype,"playing",null),e([u({readOnly:!0,json:{read:{source:"poster"}}})],ve.prototype,"posterUrl",void 0),e([u({readOnly:!0})],ve.prototype,"qualities",void 0),e([u()],ve.prototype,"sensorSymbolOrientation",void 0),e([u(fe("drawingInfo.sensorPathSymbol",Y))],ve.prototype,"sensorPathSymbol",void 0),e([u(he)],ve.prototype,"sensorSymbol",void 0),e([u(fe("drawingInfo.sensorSightLineSymbol",Y))],ve.prototype,"sensorSightLineSymbol",void 0),e([u(fe("drawingInfo.sensorTrailSymbol",Y))],ve.prototype,"sensorTrailSymbol",void 0),e([u({readOnly:!0})],ve.prototype,"serviceItemId",void 0),e([u()],ve.prototype,"sourceJSON",void 0),e([u({readOnly:!0})],ve.prototype,"sourceQuality",void 0),e([u({readOnly:!0,json:{name:"serviceType"}})],ve.prototype,"sourceType",void 0),e([u({type:S})],ve.prototype,"spatialReference",void 0),e([u({json:{write:!0}})],ve.prototype,"start",void 0),e([u({readOnly:!0})],ve.prototype,"started",null),e([u({readOnly:!0,type:String})],ve.prototype,"state",null),e([u({readOnly:!0,type:F})],ve.prototype,"telemetry",null),e([u({type:V,nonNullable:!0,json:{write:{ignoreOrigin:!0}}})],ve.prototype,"telemetryDisplay",void 0),e([ie("service","title",["name"])],ve.prototype,"readTitleFromService",null),e([ie("portal-item","title")],ve.prototype,"readTitleFromPortalItem",null),e([u({type:String})],ve.prototype,"sublayerTitleMode",void 0),e([u({readOnly:!0})],ve.prototype,"type",void 0),e([u(_())],ve.prototype,"url",void 0),e([u({readOnly:!0,type:Number,json:{read:{source:"currentVersion"}}})],ve.prototype,"version",void 0),e([u({readOnly:!0})],ve.prototype,"videoElement",null),e([u({readOnly:!0})],ve.prototype,"videoHeight",null),e([u({readOnly:!0,json:{read:!1}})],ve.prototype,"videoLayersInfo",void 0),e([ie("service","videoLayersInfo",["id","name","poster","serviceType","type"])],ve.prototype,"readLayerInfosFromService",null),e([u({type:H,readOnly:!0})],ve.prototype,"videoTimeExtent",null),e([u({readOnly:!0})],ve.prototype,"videoWidth",null),e([u()],ve.prototype,"volume",null),e([u({readOnly:!0})],ve.prototype,"waiting",null),ve=e([d("esri.layers.VideoLayer")],ve);const ge=ve;export{ge as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../core/Accessor.js";import i from"../../core/Error.js";import n from"../../core/Logger.js";import{getOrCreateMapValue as o}from"../../core/MapUtils.js";import{createAbortError as s}from"../../core/promiseUtils.js";import{parseWhereClause as a}from"../../core/sql.js";import{property as r,subclass as p}from"../../core/accessorSupport/decorators.js";import d from"../../geometry/Extent.js";import m from"../../geometry/Polygon.js";import{initializeProjection as l,project as h}from"../../geometry/projectionUtils.js";import{wgs84 as c}from"../../geometry/support/spatialReferenceUtils.js";import{systemOidFieldName as y,systemOriginIdFieldName as u,systemDestinationIdFieldName as f,systemIsSpatialFieldName as g,systemLayoutGeometryFieldName as b}from"./constants.js";import{recursiveParseSqlToCypher as T,addAdditionalClausesToCypher as w}from"./cypherUtils.js";import I from"./SessionMemoryStorage.js";import{utilsExtentToInBoundsRings as M}from"./supportUtils.js";import{executeQueryStreaming as D}from"../../rest/knowledgeGraphService.js";import E from"../../rest/knowledgeGraph/GraphQueryStreaming.js";import N from"../../rest/support/Query.js";let k=class extends t{constructor(e){super(e),this._processingCacheUpdatesLookup=new Map,this.knowledgeGraph=null,this.inclusionModeDefinition={generateAllSublayers:!0,namedTypeDefinitions:new Map},this.entityTypeNames=new Set,this.relationshipTypeNames=new Set,this.geographicLookup=new Map,this.sublayerCaches=new Map,this.nodeConnectionsLookup=new Map,this.relationshipConnectionsLookup=new Map,this.memberIdTypeLookup=new Map;const t=new Map;e.knowledgeGraph.dataModel.entityTypes?.forEach(i=>{i.name&&(t.set(i.name,"entity"),this._processingCacheUpdatesLookup.set(i.name,[]),e.inclusionModeDefinition&&!e.inclusionModeDefinition?.generateAllSublayers||this.entityTypeNames.add(i.name),i.properties?.forEach(e=>{e.geometryType&&"esriGeometryNull"!==e.geometryType&&this.geographicLookup.set(i.name,{name:e.name??"",geometryType:e.geometryType})}))}),e.knowledgeGraph.dataModel.relationshipTypes?.forEach(i=>{i.name&&(t.set(i.name,"relationship"),this._processingCacheUpdatesLookup.set(i.name,[]),e.inclusionModeDefinition&&!e.inclusionModeDefinition?.generateAllSublayers||this.relationshipTypeNames.add(i.name),i.properties?.forEach(e=>{e.geometryType&&"esriGeometryNull"!==e.geometryType&&this.geographicLookup.set(i.name,{name:e.name??"",geometryType:e.geometryType})}))}),e.inclusionModeDefinition?.namedTypeDefinitions.forEach((i,s)=>{if("entity"===t.get(s))this.entityTypeNames.add(s);else{if("relationship"!==t.get(s))return n.getLogger(this).warn(`A named type, ${s}, was in the inclusion list that wasn't in the data model and will be removed`),void e.inclusionModeDefinition?.namedTypeDefinitions.delete(s);this.relationshipTypeNames.add(s)}const a=new Map;i.members?.forEach(e=>{o(this.memberIdTypeLookup,e.id,()=>new Set).add(s)}),this.sublayerCaches.set(s,a)})}addToLayer(e){e.forEach(({typeName:e,id:t})=>{if(!this.inclusionModeDefinition)throw new i("knowledge-graph:layer-data-manager","You cannot add to a layer's exclusion list if it was not created with an exclusion list originally");if(this.inclusionModeDefinition.namedTypeDefinitions.has(e)){if(this.inclusionModeDefinition.namedTypeDefinitions.has(e)){const i=this.inclusionModeDefinition.namedTypeDefinitions.get(e);i.members||(i.members=new Map),i.members.set(t,{id:t}),o(this.memberIdTypeLookup,t,()=>new Set).add(e)}}else{const i=new Map;i.set(t,{id:t}),this.inclusionModeDefinition.namedTypeDefinitions.set(e,{useAllData:!1,members:i}),o(this.memberIdTypeLookup,t,()=>new Set).add(e)}})}getById(e){return I.getInstance().readFromStoreById(e)}async getData(e,t,i){if(t.objectType.name&&this.inclusionModeDefinition?.namedTypeDefinitions&&this.inclusionModeDefinition.namedTypeDefinitions.size>0&&!this.inclusionModeDefinition.namedTypeDefinitions.has(t.objectType.name))return[];let n;if(n=e||new N({where:"1=1",outFields:["*"]}),"link-chart"===t.parentCompositeLayer.type){const e=t.parentCompositeLayer,i=this._processingCacheUpdatesLookup.get(t.objectType.name??""),o=n.outFields;o&&1===o.length&&o[0]===y&&"1=1"===n.where||await Promise.all(i??[]);const s=this.sublayerCaches.has(t.objectType.name??"")?Array.from(this.sublayerCaches.get(t.objectType.name)?.values()):[],a=[];return s.forEach(i=>{if(this.relationshipTypeNames.has(t.objectType.name)){i.geometry=e.relationshipLinkChartDiagramLookup.get(i.attributes[t.objectIdField]);const n=this.memberIdTypeLookup.get(i.attributes[u]),o=this.memberIdTypeLookup.get(i.attributes[f]),s=this._isEndEntitySpatial(n,i,u),a=this._isEndEntitySpatial(o,i,f);i.attributes[g]=Number(s&&a)}else{i.geometry=e.entityLinkChartDiagramLookup.get(i.attributes[t.objectIdField]);const n=this.geographicLookup.get(t.objectType.name);n&&i.attributes[n.name]?i.attributes[g]=1:i.attributes[g]=0}i.attributes[b]=i.geometry,a.push(i)}),a}return this.retrieveDataFromService(n,t,i)}async getConnectedRecordIds(e,t,i){const n=[];let o="";const s=this._getNamedTypeIdMapFromNodeIds(e);if(t&&0!==t?.length){for(const e of t)o=o+e+"|";o=o.slice(0,-1)}const a={},r=[];for(const[m,l]of s){const e=`${m}_ids`;a[e]=l,t&&0!==t?.length?r.push(`MATCH (n:${m}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r:${o}]-(m) RETURN id(r), type(r), id(m), labels(m)[0]`):r.push(`MATCH (n:${m}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]-(m) RETURN id(r), type(r), id(m), labels(m)[0]`)}if(!r.length)return n;const p=r.join(" UNION "),d=(await D(this.knowledgeGraph,new E({openCypherQuery:p,bindParameters:a}),{signal:i?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await d.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];n.push({id:e[0],typeName:e[1]}),n.push({id:e[2],typeName:e[3]})}}return n}async getRelationshipsBetweenNodes(e,t,i){const n=this._getNamedTypeIdMapFromNodeIds(e);if(0===n.size)return[];const o={relationshipExclusionIds:t,possibleConnectionEntityIds:e},s=[];for(const[d,m]of n.entries()){const e=`${d}_ids`;o[e]=m,s.push(`MATCH (n:${d}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]->(m) WHERE id(m) IN $possibleConnectionEntityIds AND NOT id(r) IN $relationshipExclusionIds RETURN id(r), type(r)`)}const a=s.join(" UNION "),r=[],p=(await D(this.knowledgeGraph,new E({openCypherQuery:a,bindParameters:o}),{signal:i?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await p.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];r.push({id:e[0],typeName:e[1]})}}return r}async getRelationshipsFromNodes(e,t,i,n){const o=this._getNamedTypeIdMapFromNodeIds(e);if(0===o.size||0===t.length)return[];const s={relationshipExclusionIds:i,possibleConnectionEntityIds:t},a=[];for(const[l,h]of o.entries()){const e=`${l}_ids`;s[e]=h,a.push(`MATCH (n:${l}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]-(m) WHERE id(m) IN $possibleConnectionEntityIds AND NOT id(r) IN $relationshipExclusionIds RETURN id(r), type(r)`)}const r=a.join(" UNION "),p=new Map,d=(await D(this.knowledgeGraph,new E({openCypherQuery:r,bindParameters:s}),{signal:n?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await d.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];let n=p.get(e[1]);n||(n=new Set,p.set(e[1],n)),n.add(e[0])}}const m=[];for(const[l,h]of p)for(const e of h)m.push({id:e,typeName:l});return m}async refreshCacheContent(e,t,n,a=!0,r){const p=I.getInstance(),d=[],m=new Map,l=new Map;this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&l.set(e.name,e)}),this.knowledgeGraph.dataModel.relationshipTypes?.forEach(e=>{e.name&&l.set(e.name,e)}),e||this.inclusionModeDefinition?e?e.forEach(e=>{if(this.memberIdTypeLookup.has(e))for(const t of this.memberIdTypeLookup.get(e))m.has(t)?m.get(t)?.push(e):m.set(t,[e])}):this.inclusionModeDefinition?.namedTypeDefinitions?.forEach((e,t)=>{e.useAllData?m.set(t,null):e.members&&e.members.forEach(e=>{m.has(t)&&null!==m.get(t)?m.get(t)?.push(e.id):m.set(t,[e.id])})}):(this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&m.set(e.name,null)}),this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&m.set(e.name,null)}));for(const[s,h]of m){const e=new Set(h),m=new Promise((d,m)=>{const c=async()=>{const d=new Set,m=[];let c,u="",f=!1;if(t||l.get(s)?.properties?.forEach(e=>{e.name&&d.add(e.name)}),n&&this.geographicLookup.has(s)){const e=this.geographicLookup.get(s)?.name;e&&d.add(e)}if(this.entityTypeNames.has(s))u=`MATCH (n:${s}) ${h?"WHERE id(n) IN $ids ":""}return ID(n)`,d.forEach(e=>{u+=`, n.${e}`,m.push(e)});else{if(!this.relationshipTypeNames.has(s))throw new i("knowledge-graph:layer-data-manager",`The graph type of ${s} could not be determined. Was this type set in the KG data model and inclusion definition?`);f=!0,u=`MATCH ()-[n:${s}]->() ${h?"WHERE id(n) IN $ids ":""}return ID(n), id(startNode(n)), id(endNode(n))`,d.forEach(e=>{u+=`, n.${e}`,m.push(e)})}c=new E(h?{openCypherQuery:u,bindParameters:{ids:h}}:{openCypherQuery:u});const g=(await D(this.knowledgeGraph,c,{signal:r?.signal})).resultRowsStream.getReader();for(;;){const{done:t,value:i}=await g.read();if(t)break;const n=[];for(let s=0;s<i.length;s++){const t=i[s];let a=0,r=0;const p={properties:{}};for(p.id=t[a],a++,r++,f&&(p.originId=t[a],a++,r++,p.destinationId=t[a],a++,r++,o(this.nodeConnectionsLookup,p.originId,()=>new Set).add(p.id),o(this.nodeConnectionsLookup,p.destinationId,()=>new Set).add(p.id),o(this.relationshipConnectionsLookup,p.id,()=>[p.originId,p.destinationId]));a<t.length;a++)p.properties[m[a-r]]=t[a];e.delete(p.id),n.push(p)}const r=p.writeToStore(n,y,this.geographicLookup.get(s)?.name);this.sublayerCaches.has(s)||this.sublayerCaches.set(s,new Map),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.has(s)&&this.inclusionModeDefinition?.namedTypeDefinitions.set(s,{useAllData:!1,members:new Map}),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members&&(this.inclusionModeDefinition.namedTypeDefinitions.get(s).members=new Map);const d=this.sublayerCaches.get(s);r.forEach(e=>{d?.set(e.attributes[y],e),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members.has(e.attributes[y])&&(this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members.set(e.attributes[y],{id:e.attributes[y]}),o(this.memberIdTypeLookup,e.attributes[y],()=>new Set).add(s))})}const b=this.inclusionModeDefinition?.namedTypeDefinitions.get(s);if(b)for(const t of e)b.members?.delete(t)};c().then(()=>{d(null)}).catch(e=>{"AbortError"===e.name?d(null):m(e)})});d.push(m),this._processingCacheUpdatesLookup.get(s)?.push(m)}if(await Promise.all(d),r?.signal?.aborted)throw s()}removeFromLayer(e){const t=new Set,i=new Set(e.map(e=>e.id));for(const n of e)t.add(n.typeName),1===this.memberIdTypeLookup.get(n.id)?.size?this.memberIdTypeLookup.delete(n.id):this.memberIdTypeLookup.get(n.id)?.delete(n.typeName),this.inclusionModeDefinition?.namedTypeDefinitions.forEach((e,t)=>{t===n.typeName&&e.members?.has(n.id)&&e.members.delete(n.id)});t.forEach(e=>{this.sublayerCaches.get(e)?.forEach((t,n)=>{i.has(n)&&this.sublayerCaches.get(e)?.delete(n)})})}async retrieveDataFromService(e,t,n){const o=I.getInstance(),s=new Set,r=[];let p,u="",f=[];const g="relationship"===t.graphType,b=this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData,N=t.parentCompositeLayer.sublayerIdsCache.get(t.objectType.name);let k=!b&&N?Array.from(N).sort():null;if(this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData)this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData&&null!=e.objectIds&&(k=e.objectIds);else if(null!=e.objectIds&&k&&k.length>0){const t=e.objectIds;e.objectIds=k.filter(e=>t.includes(e))}else if(null!=e.objectIds)k=e.objectIds;else{if(this.inclusionModeDefinition?.namedTypeDefinitions.has(t.objectType.name)&&(!this.inclusionModeDefinition.namedTypeDefinitions.get(t.objectType.name)?.members||this.inclusionModeDefinition.namedTypeDefinitions.get(t.objectType.name)?.members?.size<1))return e.objectIds=[],[];e.objectIds=k}if(null!=e.outFields){const i=e.outFields;i.includes("*")?t.fields.forEach(e=>{s.add(e.name)}):i.forEach(e=>{e!==y&&e!==t.geometryFieldName&&s.add(e)})}if(null!=e.geometry){const n=e.geometry;let o;const y=t.parentCompositeLayer.dataManager.knowledgeGraph.serviceDefinition,f=y?.spatialReference,b=y?.serviceCapabilities?.geometryCapabilities;let T=b?.geometryMaxBoundingRectangleSizeX,w=b?.geometryMaxBoundingRectangleSizeY;if("point"===n.type){let e=n;e.spatialReference?.isWGS84||(await l(e.spatialReference,c),e=h(e,c)),o=new d({spatialReference:c,xmin:e.x-1e-4,ymin:e.y-1e-4,xmax:e.x+1e-4,ymax:e.y+1e-4})}else n?.extent?.spatialReference&&!n.spatialReference?.isWGS84?(await l(n.extent.spatialReference,c),o=h(n.extent,c)):o=n.extent;if(T&&w&&f){if(4326!==f.wkid){const e=new d({spatialReference:f,xmax:T,ymax:w}),t=h(e,c);T=t.xmax,w=t.ymax}if(o.xmax-o.xmin>T)throw new i("knowledge-graph:layer-data-manager",`Extent x bounds should be within ${T}° latitude, limit exceeded`);if(o.ymax-o.ymin>w)throw new i("knowledge-graph:layer-data-manager",`Extent y bounds should be within ${w}° longitude, limit exceeded`)}if(null!=e.where&&"1=1"!==e.where){const i=await a(e.where.toUpperCase(),t.fieldsIndex);t.fields.forEach(e=>{i.fieldNames.includes(e.name)&&s.add(e.name)})}u=g?`Match ()-[n:${t.objectType.name}]->() WHERE esri.graph.ST_Intersects($param_filter_geom, n.${t.geometryFieldName}) return ID(n), id(startNode(r)), id(endNode(r))`:`Match (n:${t.objectType.name}) WHERE esri.graph.ST_Intersects($param_filter_geom, n.${t.geometryFieldName}) return ID(n)`,t.geometryFieldName&&s.add(t.geometryFieldName),s.forEach(e=>{u+=`, n.${e}`,r.push(e)}),p=new E({openCypherQuery:u,bindParameters:{param_filter_geom:new m({rings:M(o)})}})}else{let i="";if(null!=e.where&&"1=1"!==e.where){const n=await a(e.where,t.fieldsIndex);t.fields.forEach(e=>{n.fieldNames.includes(e.name)&&s.add(e.name)});const o={systemOidFieldName:y,supportedSqlTypes:new Set(["column-reference","string","number","binary-expression"]),supportedSqlOperators:new Set(["=","<","<=","<>",">",">=","AND","OR","LIKE"]),unsupportedOperationFound:!1};i=T(n.parseTree,o),o.unsupportedOperationFound&&(i="")}let n="";n=g?`Match ()-[n:${t.objectType.name}]->()`:`Match (n:${t.objectType.name})`;let o=!1;k&&(o=!0,n+=" WHERE ID(n) IN $ids"),i&&(n+=o?" AND":" WHERE",n+=` ${i}`),n+=" return ID(n)",g&&(n+=", id(startNode(n)), id(endNode(n))"),e.returnGeometry&&t.geometryFieldName&&s.add(t.geometryFieldName),s.forEach(e=>{n+=`, n.${e}`,r.push(e)}),n=w(n,e),p=new E(k?{openCypherQuery:n,bindParameters:{ids:k}}:{openCypherQuery:n})}const C=(await D(t.parentCompositeLayer.dataManager.knowledgeGraph,p,n)).resultRowsStream.getReader();for(;;){const{done:e,value:i}=await C.read();if(e)break;const n=[];for(let t=0;t<i.length;t++){const e=i[t];let o=0,s=0;const a={properties:{}};for(a.id=e[o],o++,s++,g&&(a.originId=e[o],o++,s++,a.destinationId=e[o],o++,s++);o<e.length;o++)a.properties[r[o-s]]=e[o];n.push(a)}f=f.concat(o.writeToStore(n,y,t.parentCompositeLayer.dataManager.geographicLookup.get(t.objectType.name)?.name))}return f}_isEndEntitySpatial(e,t,i){for(const n of e??[])if(this.entityTypeNames.has(n)){const e=this.geographicLookup.get(n),o=e&&this.sublayerCaches.get(n)?.get(t.attributes[i]);if(e&&o?.attributes[e.name])return!0}return!1}_getNamedTypeIdMapFromNodeIds(e){const t=new Map;return e.forEach(e=>{if(this.memberIdTypeLookup.has(e))for(const i of this.memberIdTypeLookup.get(e)){if(!this.entityTypeNames.has(i))return;t.has(i)?t.get(i)?.push(e):t.set(i,[e])}}),t}};e([r()],k.prototype,"knowledgeGraph",void 0),e([r()],k.prototype,"inclusionModeDefinition",void 0),e([r()],k.prototype,"entityTypeNames",void 0),e([r()],k.prototype,"relationshipTypeNames",void 0),e([r()],k.prototype,"geographicLookup",void 0),e([r()],k.prototype,"sublayerCaches",void 0),e([r()],k.prototype,"nodeConnectionsLookup",void 0),e([r()],k.prototype,"relationshipConnectionsLookup",void 0),e([r()],k.prototype,"memberIdTypeLookup",void 0),k=e([p("esri.layers.knowledgeGraph.KnowledgeGraphLayerDataManager")],k);export{k as KnowledgeGraphLayerDataManager};
2
+ import{__decorate as e}from"tslib";import t from"../../core/Accessor.js";import i from"../../core/Error.js";import n from"../../core/Logger.js";import{getOrCreateMapValue as o}from"../../core/MapUtils.js";import{createAbortError as s}from"../../core/promiseUtils.js";import{parseWhereClause as a}from"../../core/sql.js";import{property as r,subclass as d}from"../../core/accessorSupport/decorators.js";import p from"../../geometry/Extent.js";import m from"../../geometry/Polygon.js";import{initializeProjection as l,project as h}from"../../geometry/projectionUtils.js";import{wgs84 as c}from"../../geometry/support/spatialReferenceUtils.js";import{systemOidFieldName as y,systemOriginIdFieldName as u,systemDestinationIdFieldName as f,systemIsSpatialFieldName as g,systemLayoutGeometryFieldName as b}from"./constants.js";import{recursiveParseSqlToCypher as T,addAdditionalClausesToCypher as w}from"./cypherUtils.js";import I from"./SessionMemoryStorage.js";import{utilsExtentToInBoundsRings as M}from"./supportUtils.js";import{executeQueryStreaming as D}from"../../rest/knowledgeGraphService.js";import E from"../../rest/knowledgeGraph/GraphQueryStreaming.js";import N from"../../rest/support/Query.js";let k=class extends t{constructor(e){super(e),this._processingCacheUpdatesLookup=new Map,this.knowledgeGraph=null,this.inclusionModeDefinition={generateAllSublayers:!0,namedTypeDefinitions:new Map},this.entityTypeNames=new Set,this.relationshipTypeNames=new Set,this.geographicLookup=new Map,this.sublayerCaches=new Map,this.nodeConnectionsLookup=new Map,this.relationshipConnectionsLookup=new Map,this.memberIdTypeLookup=new Map;const t=new Map;e.knowledgeGraph.dataModel.entityTypes?.forEach(i=>{i.name&&(t.set(i.name,"entity"),this._processingCacheUpdatesLookup.set(i.name,[]),e.inclusionModeDefinition&&!e.inclusionModeDefinition?.generateAllSublayers||this.entityTypeNames.add(i.name),i.properties?.forEach(e=>{e.geometryType&&"esriGeometryNull"!==e.geometryType&&this.geographicLookup.set(i.name,{name:e.name??"",geometryType:e.geometryType})}))}),e.knowledgeGraph.dataModel.relationshipTypes?.forEach(i=>{i.name&&(t.set(i.name,"relationship"),this._processingCacheUpdatesLookup.set(i.name,[]),e.inclusionModeDefinition&&!e.inclusionModeDefinition?.generateAllSublayers||this.relationshipTypeNames.add(i.name),i.properties?.forEach(e=>{e.geometryType&&"esriGeometryNull"!==e.geometryType&&this.geographicLookup.set(i.name,{name:e.name??"",geometryType:e.geometryType})}))}),e.inclusionModeDefinition?.namedTypeDefinitions.forEach((i,s)=>{if("entity"===t.get(s))this.entityTypeNames.add(s);else{if("relationship"!==t.get(s))return n.getLogger(this).warn(`A named type, ${s}, was in the inclusion list that wasn't in the data model and will be removed`),void e.inclusionModeDefinition?.namedTypeDefinitions.delete(s);this.relationshipTypeNames.add(s)}const a=new Map;i.members?.forEach(e=>{o(this.memberIdTypeLookup,e.id,()=>new Set).add(s)}),this.sublayerCaches.set(s,a)})}addToLayer(e){e.forEach(({typeName:e,id:t})=>{if(!this.inclusionModeDefinition)throw new i("knowledge-graph:layer-data-manager","You cannot add to a layer's exclusion list if it was not created with an exclusion list originally");if(this.inclusionModeDefinition.namedTypeDefinitions.has(e)){if(this.inclusionModeDefinition.namedTypeDefinitions.has(e)){const i=this.inclusionModeDefinition.namedTypeDefinitions.get(e);i.members||(i.members=new Map),i.members.set(t,{id:t}),o(this.memberIdTypeLookup,t,()=>new Set).add(e)}}else{const i=new Map;i.set(t,{id:t}),this.inclusionModeDefinition.namedTypeDefinitions.set(e,{useAllData:!1,members:i}),o(this.memberIdTypeLookup,t,()=>new Set).add(e)}})}getById(e){return I.getInstance().readFromStoreById(e)}async getData(e,t,i,n){if(t.objectType.name&&this.inclusionModeDefinition?.namedTypeDefinitions&&this.inclusionModeDefinition.namedTypeDefinitions.size>0&&!this.inclusionModeDefinition.namedTypeDefinitions.has(t.objectType.name))return[];let o;if(o=e||new N({where:"1=1",outFields:["*"]}),"link-chart"===i.type){const e=i,n=this._processingCacheUpdatesLookup.get(t.objectType.name??""),s=o.outFields;s&&1===s.length&&s[0]===y&&"1=1"===o.where||await Promise.all(n??[]);const a=this.sublayerCaches.has(t.objectType.name??"")?Array.from(this.sublayerCaches.get(t.objectType.name)?.values()):[],r=[];return a.forEach(i=>{if(this.relationshipTypeNames.has(t.objectType.name)){i.geometry=e.relationshipLinkChartDiagramLookup.get(i.attributes[t.objectIdField]);const n=this.memberIdTypeLookup.get(i.attributes[u]),o=this.memberIdTypeLookup.get(i.attributes[f]),s=this._isEndEntitySpatial(n,i,u),a=this._isEndEntitySpatial(o,i,f);i.attributes[g]=Number(s&&a)}else{i.geometry=e.entityLinkChartDiagramLookup.get(i.attributes[t.objectIdField]);const n=this.geographicLookup.get(t.objectType.name);n&&i.attributes[n.name]?i.attributes[g]=1:i.attributes[g]=0}i.attributes[b]=i.geometry,r.push(i)}),r}return this.retrieveDataFromService(o,t,i,n)}async getConnectedRecordIds(e,t,i){const n=[];let o="";const s=this._getNamedTypeIdMapFromNodeIds(e);if(t&&0!==t?.length){for(const e of t)o=o+e+"|";o=o.slice(0,-1)}const a={},r=[];for(const[m,l]of s){const e=`${m}_ids`;a[e]=l,t&&0!==t?.length?r.push(`MATCH (n:${m}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r:${o}]-(m) RETURN id(r), type(r), id(m), labels(m)[0]`):r.push(`MATCH (n:${m}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]-(m) RETURN id(r), type(r), id(m), labels(m)[0]`)}if(!r.length)return n;const d=r.join(" UNION "),p=(await D(this.knowledgeGraph,new E({openCypherQuery:d,bindParameters:a}),{signal:i?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await p.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];n.push({id:e[0],typeName:e[1]}),n.push({id:e[2],typeName:e[3]})}}return n}async getRelationshipsBetweenNodes(e,t,i){const n=this._getNamedTypeIdMapFromNodeIds(e);if(0===n.size)return[];const o={relationshipExclusionIds:t,possibleConnectionEntityIds:e},s=[];for(const[p,m]of n.entries()){const e=`${p}_ids`;o[e]=m,s.push(`MATCH (n:${p}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]->(m) WHERE id(m) IN $possibleConnectionEntityIds AND NOT id(r) IN $relationshipExclusionIds RETURN id(r), type(r)`)}const a=s.join(" UNION "),r=[],d=(await D(this.knowledgeGraph,new E({openCypherQuery:a,bindParameters:o}),{signal:i?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await d.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];r.push({id:e[0],typeName:e[1]})}}return r}async getRelationshipsFromNodes(e,t,i,n){const o=this._getNamedTypeIdMapFromNodeIds(e);if(0===o.size||0===t.length)return[];const s={relationshipExclusionIds:i,possibleConnectionEntityIds:t},a=[];for(const[l,h]of o.entries()){const e=`${l}_ids`;s[e]=h,a.push(`MATCH (n:${l}) WHERE id(n) IN $${e} WITH n MATCH (n)-[r]-(m) WHERE id(m) IN $possibleConnectionEntityIds AND NOT id(r) IN $relationshipExclusionIds RETURN id(r), type(r)`)}const r=a.join(" UNION "),d=new Map,p=(await D(this.knowledgeGraph,new E({openCypherQuery:r,bindParameters:s}),{signal:n?.signal})).resultRowsStream.getReader();for(;;){const{done:e,value:t}=await p.read();if(e)break;for(let i=0;i<t.length;i++){const e=t[i];let n=d.get(e[1]);n||(n=new Set,d.set(e[1],n)),n.add(e[0])}}const m=[];for(const[l,h]of d)for(const e of h)m.push({id:e,typeName:l});return m}async refreshCacheContent(e,t,n,a=!0,r){const d=I.getInstance(),p=[],m=new Map,l=new Map;this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&l.set(e.name,e)}),this.knowledgeGraph.dataModel.relationshipTypes?.forEach(e=>{e.name&&l.set(e.name,e)}),e||this.inclusionModeDefinition?e?e.forEach(e=>{if(this.memberIdTypeLookup.has(e))for(const t of this.memberIdTypeLookup.get(e))m.has(t)?m.get(t)?.push(e):m.set(t,[e])}):this.inclusionModeDefinition?.namedTypeDefinitions?.forEach((e,t)=>{e.useAllData?m.set(t,null):e.members&&e.members.forEach(e=>{m.has(t)&&null!==m.get(t)?m.get(t)?.push(e.id):m.set(t,[e.id])})}):(this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&m.set(e.name,null)}),this.knowledgeGraph.dataModel.entityTypes?.forEach(e=>{e.name&&m.set(e.name,null)}));for(const[s,h]of m){const e=new Set(h),m=new Promise((p,m)=>{const c=async()=>{const p=new Set,m=[];let c,u="",f=!1;if(t||l.get(s)?.properties?.forEach(e=>{e.name&&p.add(e.name)}),n&&this.geographicLookup.has(s)){const e=this.geographicLookup.get(s)?.name;e&&p.add(e)}if(this.entityTypeNames.has(s))u=`MATCH (n:${s}) ${h?"WHERE id(n) IN $ids ":""}return ID(n)`,p.forEach(e=>{u+=`, n.${e}`,m.push(e)});else{if(!this.relationshipTypeNames.has(s))throw new i("knowledge-graph:layer-data-manager",`The graph type of ${s} could not be determined. Was this type set in the KG data model and inclusion definition?`);f=!0,u=`MATCH ()-[n:${s}]->() ${h?"WHERE id(n) IN $ids ":""}return ID(n), id(startNode(n)), id(endNode(n))`,p.forEach(e=>{u+=`, n.${e}`,m.push(e)})}c=new E(h?{openCypherQuery:u,bindParameters:{ids:h}}:{openCypherQuery:u});const g=(await D(this.knowledgeGraph,c,{signal:r?.signal})).resultRowsStream.getReader();for(;;){const{done:t,value:i}=await g.read();if(t)break;const n=[];for(let s=0;s<i.length;s++){const t=i[s];let a=0,r=0;const d={properties:{}};for(d.id=t[a],a++,r++,f&&(d.originId=t[a],a++,r++,d.destinationId=t[a],a++,r++,o(this.nodeConnectionsLookup,d.originId,()=>new Set).add(d.id),o(this.nodeConnectionsLookup,d.destinationId,()=>new Set).add(d.id),o(this.relationshipConnectionsLookup,d.id,()=>[d.originId,d.destinationId]));a<t.length;a++)d.properties[m[a-r]]=t[a];e.delete(d.id),n.push(d)}const r=d.writeToStore(n,y,this.geographicLookup.get(s)?.name);this.sublayerCaches.has(s)||this.sublayerCaches.set(s,new Map),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.has(s)&&this.inclusionModeDefinition?.namedTypeDefinitions.set(s,{useAllData:!1,members:new Map}),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members&&(this.inclusionModeDefinition.namedTypeDefinitions.get(s).members=new Map);const p=this.sublayerCaches.get(s);r.forEach(e=>{p?.set(e.attributes[y],e),a&&!this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members.has(e.attributes[y])&&(this.inclusionModeDefinition?.namedTypeDefinitions.get(s).members.set(e.attributes[y],{id:e.attributes[y]}),o(this.memberIdTypeLookup,e.attributes[y],()=>new Set).add(s))})}const b=this.inclusionModeDefinition?.namedTypeDefinitions.get(s);if(b)for(const t of e)b.members?.delete(t)};c().then(()=>{p(null)}).catch(e=>{"AbortError"===e.name?p(null):m(e)})});p.push(m),this._processingCacheUpdatesLookup.get(s)?.push(m)}if(await Promise.all(p),r?.signal?.aborted)throw s()}removeFromLayer(e){const t=new Set,i=new Set(e.map(e=>e.id));for(const n of e)t.add(n.typeName),1===this.memberIdTypeLookup.get(n.id)?.size?this.memberIdTypeLookup.delete(n.id):this.memberIdTypeLookup.get(n.id)?.delete(n.typeName),this.inclusionModeDefinition?.namedTypeDefinitions.forEach((e,t)=>{t===n.typeName&&e.members?.has(n.id)&&e.members.delete(n.id)});t.forEach(e=>{this.sublayerCaches.get(e)?.forEach((t,n)=>{i.has(n)&&this.sublayerCaches.get(e)?.delete(n)})})}async retrieveDataFromService(e,t,n,o){const s=I.getInstance(),r=new Set,d=[];let u,f="",g=[];const b="relationship"===t.graphType,N=this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData,k=n.sublayerIdsCache.get(t.objectType.name);let C=!N&&k?Array.from(k).sort():null;if(this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData)this.inclusionModeDefinition?.namedTypeDefinitions?.get(t.objectType.name)?.useAllData&&null!=e.objectIds&&(C=e.objectIds);else if(null!=e.objectIds&&C&&C.length>0){const t=e.objectIds;e.objectIds=C.filter(e=>t.includes(e))}else if(null!=e.objectIds)C=e.objectIds;else{if(this.inclusionModeDefinition?.namedTypeDefinitions.has(t.objectType.name)&&(!this.inclusionModeDefinition.namedTypeDefinitions.get(t.objectType.name)?.members||this.inclusionModeDefinition.namedTypeDefinitions.get(t.objectType.name)?.members?.size<1))return e.objectIds=[],[];e.objectIds=C}if(null!=e.outFields){const i=e.outFields;i.includes("*")?t.fields.forEach(e=>{r.add(e.name)}):i.forEach(e=>{e!==y&&e!==t.geometryFieldName&&r.add(e)})}if(null!=e.geometry){const o=e.geometry;let s;const y=n.dataManager.knowledgeGraph.serviceDefinition,g=y?.spatialReference,T=y?.serviceCapabilities?.geometryCapabilities;let w=T?.geometryMaxBoundingRectangleSizeX,I=T?.geometryMaxBoundingRectangleSizeY;if("point"===o.type){let e=o;e.spatialReference?.isWGS84||(await l(e.spatialReference,c),e=h(e,c)),s=new p({spatialReference:c,xmin:e.x-1e-4,ymin:e.y-1e-4,xmax:e.x+1e-4,ymax:e.y+1e-4})}else o?.extent?.spatialReference&&!o.spatialReference?.isWGS84?(await l(o.extent.spatialReference,c),s=h(o.extent,c)):s=o.extent;if(w&&I&&g){if(4326!==g.wkid){const e=new p({spatialReference:g,xmax:w,ymax:I}),t=h(e,c);w=t.xmax,I=t.ymax}if(s.xmax-s.xmin>w)throw new i("knowledge-graph:layer-data-manager",`Extent x bounds should be within ${w}° latitude, limit exceeded`);if(s.ymax-s.ymin>I)throw new i("knowledge-graph:layer-data-manager",`Extent y bounds should be within ${I}° longitude, limit exceeded`)}if(null!=e.where&&"1=1"!==e.where){const i=await a(e.where.toUpperCase(),t.fieldsIndex);t.fields.forEach(e=>{i.fieldNames.includes(e.name)&&r.add(e.name)})}f=b?`Match ()-[n:${t.objectType.name}]->() WHERE esri.graph.ST_Intersects($param_filter_geom, n.${t.geometryFieldName}) return ID(n), id(startNode(r)), id(endNode(r))`:`Match (n:${t.objectType.name}) WHERE esri.graph.ST_Intersects($param_filter_geom, n.${t.geometryFieldName}) return ID(n)`,t.geometryFieldName&&r.add(t.geometryFieldName),r.forEach(e=>{f+=`, n.${e}`,d.push(e)}),u=new E({openCypherQuery:f,bindParameters:{param_filter_geom:new m({rings:M(s)})}})}else{let i="";if(null!=e.where&&"1=1"!==e.where){const n=await a(e.where,t.fieldsIndex);t.fields.forEach(e=>{n.fieldNames.includes(e.name)&&r.add(e.name)});const o={systemOidFieldName:y,supportedSqlTypes:new Set(["column-reference","string","number","binary-expression"]),supportedSqlOperators:new Set(["=","<","<=","<>",">",">=","AND","OR","LIKE"]),unsupportedOperationFound:!1};i=T(n.parseTree,o),o.unsupportedOperationFound&&(i="")}let n="";n=b?`Match ()-[n:${t.objectType.name}]->()`:`Match (n:${t.objectType.name})`;let o=!1;C&&(o=!0,n+=" WHERE ID(n) IN $ids"),i&&(n+=o?" AND":" WHERE",n+=` ${i}`),n+=" return ID(n)",b&&(n+=", id(startNode(n)), id(endNode(n))"),e.returnGeometry&&t.geometryFieldName&&r.add(t.geometryFieldName),r.forEach(e=>{n+=`, n.${e}`,d.push(e)}),n=w(n,e),u=new E(C?{openCypherQuery:n,bindParameters:{ids:C}}:{openCypherQuery:n})}const j=(await D(n.dataManager.knowledgeGraph,u,o)).resultRowsStream.getReader();for(;;){const{done:e,value:i}=await j.read();if(e)break;const o=[];for(let t=0;t<i.length;t++){const e=i[t];let n=0,s=0;const a={properties:{}};for(a.id=e[n],n++,s++,b&&(a.originId=e[n],n++,s++,a.destinationId=e[n],n++,s++);n<e.length;n++)a.properties[d[n-s]]=e[n];o.push(a)}g=g.concat(s.writeToStore(o,y,n.dataManager.geographicLookup.get(t.objectType.name)?.name))}return g}_isEndEntitySpatial(e,t,i){for(const n of e??[])if(this.entityTypeNames.has(n)){const e=this.geographicLookup.get(n),o=e&&this.sublayerCaches.get(n)?.get(t.attributes[i]);if(e&&o?.attributes[e.name])return!0}return!1}_getNamedTypeIdMapFromNodeIds(e){const t=new Map;return e.forEach(e=>{if(this.memberIdTypeLookup.has(e))for(const i of this.memberIdTypeLookup.get(e)){if(!this.entityTypeNames.has(i))return;t.has(i)?t.get(i)?.push(e):t.set(i,[e])}}),t}};e([r()],k.prototype,"knowledgeGraph",void 0),e([r()],k.prototype,"inclusionModeDefinition",void 0),e([r()],k.prototype,"entityTypeNames",void 0),e([r()],k.prototype,"relationshipTypeNames",void 0),e([r()],k.prototype,"geographicLookup",void 0),e([r()],k.prototype,"sublayerCaches",void 0),e([r()],k.prototype,"nodeConnectionsLookup",void 0),e([r()],k.prototype,"relationshipConnectionsLookup",void 0),e([r()],k.prototype,"memberIdTypeLookup",void 0),k=e([d("esri.layers.knowledgeGraph.KnowledgeGraphLayerDataManager")],k);export{k as KnowledgeGraphLayerDataManager};
@@ -468,7 +468,7 @@ export default class KnowledgeGraphSublayer extends KnowledgeGraphSublayerSuperc
468
468
  /** Outlines the [type](https://developers.arcgis.com/javascript/latest/references/core/rest/knowledgeGraph/GraphObjectType/) definition for the named type represented by the sublayer. */
469
469
  accessor objectType: GraphObjectType;
470
470
  /** The [KnowledgeGraphLayer](https://developers.arcgis.com/javascript/latest/references/core/layers/KnowledgeGraphLayer/) of which this is a sublayer for a specific entity or relationship type. */
471
- accessor parentCompositeLayer: LinkChartLayer | KnowledgeGraphLayer;
471
+ accessor parentCompositeLayer: LinkChartLayer | KnowledgeGraphLayer | null | undefined;
472
472
  /**
473
473
  * Enable persistence of the layer in a [WebMap](https://developers.arcgis.com/javascript/latest/references/core/WebMap/) or [WebScene](https://developers.arcgis.com/javascript/latest/references/core/WebScene/).
474
474
  *