@arcgis/core 4.32.0-next.20250106 → 4.32.0-next.20250108

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 (228) hide show
  1. package/AttributeBinsGraphic.js +5 -0
  2. package/README.md +1 -1
  3. package/WebLinkChart.js +1 -1
  4. package/applications/MapViewer/templateUtils.js +1 -1
  5. package/assets/esri/core/workers/RemoteClient.js +1 -1
  6. package/assets/esri/core/workers/chunks/000771f8eefcd6af0fda.js +1 -0
  7. package/assets/esri/core/workers/chunks/{9372d08ba8bf3342c48f.js → 011ccfd3acee83e7dc68.js} +1 -1
  8. package/assets/esri/core/workers/chunks/03af4a51043677ffcd0f.js +1 -0
  9. package/assets/esri/core/workers/chunks/{d07da8b63d83af179a2c.js → 05943caacfd28c383810.js} +1 -1
  10. package/assets/esri/core/workers/chunks/{9f495ad57cdbfa90c5b8.js → 095aeb19e2207c8361ca.js} +1 -1
  11. package/assets/esri/core/workers/chunks/{67c7bdc0c91a8f803ea8.js → 11cb25dfab7c8467897a.js} +1 -1
  12. package/assets/esri/core/workers/chunks/{07304287ed5244fa4e12.js → 12b2c8251ec2d0e2ca46.js} +1 -1
  13. package/assets/esri/core/workers/chunks/{42aa697b4718b75b8cb2.js → 1abeba63bf623a746d5c.js} +2 -2
  14. package/assets/esri/core/workers/chunks/{42aa697b4718b75b8cb2.js.LICENSE.txt → 1abeba63bf623a746d5c.js.LICENSE.txt} +1 -1
  15. package/assets/esri/core/workers/chunks/{a57cead317eb2fc9afd8.js → 206194cf069ad4bcc3ad.js} +1 -1
  16. package/assets/esri/core/workers/chunks/24a597ae32a2083a50a5.js +1 -0
  17. package/assets/esri/core/workers/chunks/{0673d811c496143fc3d4.js → 2779cf112299b612a73a.js} +1 -1
  18. package/assets/esri/core/workers/chunks/{bd37c9cc720587665fd3.js → 304b88ade7551130ad3a.js} +1 -1
  19. package/assets/esri/core/workers/chunks/{aedff36d3fec86abb9fb.js → 30a84ddf0384bb52fdbe.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{367af4aa7e170c8553e3.js → 33a13544b9e5f4f20bce.js} +1 -1
  21. package/assets/esri/core/workers/chunks/{dce55e7f76adecc055c3.js → 35d9457109d0631a1ca8.js} +1 -1
  22. package/assets/esri/core/workers/chunks/{3a90163b76b0bc7f21d2.js → 3767defbd9c4b2e86886.js} +1 -1
  23. package/assets/esri/core/workers/chunks/3a3e9701e5d7b05f41b7.js +1 -0
  24. package/assets/esri/core/workers/chunks/{9a498f2c007f4d78d4dd.js → 4234539a9721104acafb.js} +1 -1
  25. package/assets/esri/core/workers/chunks/{76fa5c7c87831ad25cde.js → 435c037ccba71f1e22d3.js} +1 -1
  26. package/assets/esri/core/workers/chunks/4387c47ae1b36d770f1d.js +1 -0
  27. package/assets/esri/core/workers/chunks/44ec3c77339b9765aaa4.js +1 -0
  28. package/assets/esri/core/workers/chunks/4b77c8d994498899631a.js +1 -0
  29. package/assets/esri/core/workers/chunks/510cb8647841fec436c8.js +1 -0
  30. package/assets/esri/core/workers/chunks/{f9af0473878d960a02f2.js → 58485909e1cfeb52c01e.js} +1 -1
  31. package/assets/esri/core/workers/chunks/5b61a1e7ac60a02a906d.js +1 -0
  32. package/assets/esri/core/workers/chunks/62f8949a2d9076f3c1ea.js +2 -0
  33. package/assets/esri/core/workers/chunks/{c8cd6ba5600d8ff8db0b.js.LICENSE.txt → 62f8949a2d9076f3c1ea.js.LICENSE.txt} +1 -1
  34. package/assets/esri/core/workers/chunks/{664aa401887b59abd7b7.js → 6400f39a965900f66ce7.js} +1 -1
  35. package/assets/esri/core/workers/chunks/{ddce265c46e4dfeb6c6d.js → 66d40a486aa3caa76106.js} +1 -1
  36. package/assets/esri/core/workers/chunks/6b3ee691646fbc39445c.js +1 -0
  37. package/assets/esri/core/workers/chunks/{533a7fd64b17bb294545.js → 6c58f792e2ae3736f662.js} +1 -1
  38. package/assets/esri/core/workers/chunks/{370b230fd2d7703d0698.js → 6efb36bc2205203ff44d.js} +2 -2
  39. package/assets/esri/core/workers/chunks/{370b230fd2d7703d0698.js.LICENSE.txt → 6efb36bc2205203ff44d.js.LICENSE.txt} +1 -1
  40. package/assets/esri/core/workers/chunks/76a7114a69264f5c07b0.js +2 -0
  41. package/assets/esri/core/workers/chunks/{005727711cca0614c2ab.js.LICENSE.txt → 76a7114a69264f5c07b0.js.LICENSE.txt} +1 -1
  42. package/assets/esri/core/workers/chunks/{a90611cdc86190799560.js → 7a43fda8984549a084b8.js} +1 -1
  43. package/assets/esri/core/workers/chunks/7b753da3b8a6d75abf20.js +1 -0
  44. package/assets/esri/core/workers/chunks/{ca1e186f136abb23ae4b.js → 7d0fc25ce1f74adcfeb6.js} +1 -1
  45. package/assets/esri/core/workers/chunks/{9b020c47ca9ff5de9bb8.js → 7db356976198c4df76c1.js} +1 -1
  46. package/assets/esri/core/workers/chunks/{9ad7d095e614e7e8d7f5.js → 7df076d15b7b7a66dcee.js} +1 -1
  47. package/assets/esri/core/workers/chunks/{955421ee2247965244f0.js → 7fe92f072d3641ec4662.js} +1 -1
  48. package/assets/esri/core/workers/chunks/{4c56698cf1c669371865.js → 81816410cb1453938593.js} +1 -1
  49. package/assets/esri/core/workers/chunks/{4ffaa2c5ab47a599ee9f.js → 82266ca8002554198208.js} +1 -1
  50. package/assets/esri/core/workers/chunks/{88c68881cbdf4e911832.js → 89286d8f59844724cd16.js} +1 -1
  51. package/assets/esri/core/workers/chunks/{f19d3c855f6e93544918.js → 8be0151a24c9af76a976.js} +1 -1
  52. package/assets/esri/core/workers/chunks/{d9e396adf3354ee68339.js → 8f2b2d2dc9935b0d2039.js} +1 -1
  53. package/assets/esri/core/workers/chunks/907a91266e25cc4b9d42.js +1 -0
  54. package/assets/esri/core/workers/chunks/{a77aa86896bbb0e088df.js → 9857491cafa0278d9ae6.js} +1 -1
  55. package/assets/esri/core/workers/chunks/{993db7646a8fc60179eb.js → 98da074899c82f0ded0b.js} +1 -1
  56. package/assets/esri/core/workers/chunks/{3bb94da29dac3367ecc6.js → a1edd3f68e691ea39594.js} +1 -1
  57. package/assets/esri/core/workers/chunks/a8ec4189ec3b37d5ff74.js +1 -0
  58. package/assets/esri/core/workers/chunks/{6a4305eb1e52b80ecb5c.js → b8ea84adff5619040494.js} +3 -3
  59. package/assets/esri/core/workers/chunks/c4374b6bc5c8dc6435c7.js +1 -0
  60. package/assets/esri/core/workers/chunks/c5a928dcff7dc8a8cc9f.js +2 -0
  61. package/assets/esri/core/workers/chunks/{f4e3db71d1adae717535.js.LICENSE.txt → c5a928dcff7dc8a8cc9f.js.LICENSE.txt} +1 -1
  62. package/assets/esri/core/workers/chunks/cac79b64a7dade8bf486.js +2 -0
  63. package/assets/esri/core/workers/chunks/{bf0a0ca7fdac98f06a89.js.LICENSE.txt → cac79b64a7dade8bf486.js.LICENSE.txt} +1 -1
  64. package/assets/esri/core/workers/chunks/cd92b80de7e9f982f9a9.js +1 -0
  65. package/assets/esri/core/workers/chunks/{2cccaf50134c65944e0a.js → d0876eed5249b029f9f0.js} +1 -1
  66. package/assets/esri/core/workers/chunks/{178f606c8896ae5f39de.js → d1dbbab4a4c6072c182f.js} +1 -1
  67. package/assets/esri/core/workers/chunks/{8e42fb623f56942958d8.js → d74b5dc60f02892d03e7.js} +1 -1
  68. package/assets/esri/core/workers/chunks/e27b8674a3492db51f2e.js +1 -0
  69. package/assets/esri/core/workers/chunks/{756c2f7c8659deab6c96.js → e2d987c39a6ef318511c.js} +2 -2
  70. package/assets/esri/core/workers/chunks/{756c2f7c8659deab6c96.js.LICENSE.txt → e2d987c39a6ef318511c.js.LICENSE.txt} +1 -1
  71. package/assets/esri/core/workers/chunks/{943428cf643e87ccfaad.js → e7e26b71f9eb28421936.js} +1 -1
  72. package/assets/esri/core/workers/chunks/{f0adabf6d71a27f3183b.js → e80b0646a7e0e466ea65.js} +1 -1
  73. package/assets/esri/core/workers/chunks/e9c21907fabcedbd32ae.js +1 -0
  74. package/assets/esri/core/workers/chunks/{3ed7c8138231de3a3b96.js → f8c960df1dabab120c70.js} +1 -1
  75. package/assets/esri/core/workers/chunks/{fdd8a5eb07466541f1f9.js → fd95b19f02d8dfef2baf.js} +1 -1
  76. package/assets/esri/widgets/support/GridControls/t9n/GridControls_ja.json +1 -1
  77. package/chunks/CrackAndCluster-CfzXpEle.js +1 -1
  78. package/chunks/LineSeries.js +1 -1
  79. package/chunks/OperatorProject.js +1 -1
  80. package/chunks/Pattern.glsl.js +1 -1
  81. package/chunks/QuadraticBezier.js +1 -1
  82. package/chunks/Transformation2D.js +1 -1
  83. package/chunks/bufferOperator.js +1 -1
  84. package/chunks/chartUtilsAm5.js +1 -1
  85. package/chunks/geodesicBufferOperator.js +1 -1
  86. package/chunks/lyr3DWorker.js +1 -1
  87. package/chunks/terrainUtilsPlanar.js +1 -1
  88. package/chunks/terrainUtilsSpherical.js +1 -1
  89. package/chunks/vxlLayer.js +1 -1
  90. package/geometry/operators/graphicBufferOperator.js +1 -1
  91. package/geometry/support/meshUtils/primitives.js +1 -1
  92. package/geometry/support/meshVertexSpaceUtils.js +1 -1
  93. package/geometry/support/triangle.js +1 -1
  94. package/interfaces.d.ts +186 -96
  95. package/layers/LinkChartLayer.js +1 -1
  96. package/layers/MapNotesLayer.js +1 -1
  97. package/layers/MediaLayer.js +1 -1
  98. package/layers/graphics/data/QueryEngineResult.js +1 -1
  99. package/layers/graphics/data/queryUtils.js +1 -1
  100. package/layers/graphics/data/queryValidationUtils.js +1 -1
  101. package/layers/graphics/sources/WFSSource.js +1 -1
  102. package/layers/support/ImageElement.js +1 -1
  103. package/layers/support/VideoElement.js +1 -1
  104. package/layers/support/capabilities.js +1 -1
  105. package/layers/support/featureLayerUtils.js +1 -1
  106. package/layers/support/rasterFunctions/rasterProjectionHelper.js +1 -1
  107. package/layers/support/serviceCapabilitiesUtils.js +1 -1
  108. package/layers/video/VideoController.js +1 -1
  109. package/linkChart/OrganicLayoutSettings.js +1 -1
  110. package/package.json +4 -4
  111. package/renderers/RasterStretchRenderer.js +1 -1
  112. package/rest/query/executeAttributeBinsQuery.js +1 -1
  113. package/rest/support/AttributeBinsFeatureSet.js +5 -0
  114. package/rest/support/AttributeBinsQuery.js +1 -1
  115. package/rest/support/BinParametersAttributes.js +1 -1
  116. package/rest/support/BinParametersBase.js +1 -1
  117. package/rest/support/DateBinParameters.js +1 -1
  118. package/rest/support/FeatureSet.js +1 -1
  119. package/rest/support/NormalizationBinParametersMixin.js +1 -1
  120. package/rest/support/Query.js +1 -1
  121. package/rest/support/TopFeaturesQuery.js +1 -1
  122. package/smartMapping/renderers/color.js +1 -1
  123. package/smartMapping/renderers/dotDensity.js +1 -1
  124. package/smartMapping/renderers/pieChart.js +1 -1
  125. package/smartMapping/renderers/size.js +1 -1
  126. package/smartMapping/renderers/univariateColorSize.js +1 -1
  127. package/smartMapping/statistics/summaryStatisticsForAttributes.js +1 -1
  128. package/support/mediaLayerUtils.js +5 -0
  129. package/support/revision.js +1 -1
  130. package/symbols/cim/CIMSymbolDrawHelper.js +1 -1
  131. package/symbols/cim/cimAnalyzer.js +1 -1
  132. package/symbols/cim/placements/PlacementInsidePolygon.js +1 -1
  133. package/views/2d/AnimationManager.js +1 -1
  134. package/views/2d/engine/Bitmap.js +1 -1
  135. package/views/2d/engine/BitmapContainer.js +1 -1
  136. package/views/2d/engine/BitmapTileContainer.js +1 -1
  137. package/views/2d/engine/vectorTiles/buckets/FillBucket.js +1 -1
  138. package/views/2d/engine/webgl/Overlay.js +1 -1
  139. package/views/2d/engine/webgl/SDFConverter.js +1 -1
  140. package/views/2d/engine/webgl/mesh/templates/shapingUtils.js +1 -1
  141. package/views/2d/engine/webgl/shaderGraph/techniques/bitmap/BitmapTechnique.js +1 -1
  142. package/views/2d/engine/webgl/shaderGraph/techniques/shaders/hittestUtils.js +1 -1
  143. package/views/2d/layers/FeatureLayerView2D.js +1 -1
  144. package/views/2d/layers/features/processor/ClusterStrategy.js +1 -1
  145. package/views/2d/layers/features/support/GraphicsReader.js +1 -1
  146. package/views/2d/navigation/MapViewNavigation.js +1 -1
  147. package/views/2d/support/HighlightGroup.js +1 -1
  148. package/views/3d/analysis/Dimension/lengthDimensionUtils.js +1 -1
  149. package/views/3d/analysis/Slice/ShiftManipulator.js +1 -1
  150. package/views/3d/analysis/Viewshed/FieldOfViewManipulation.js +1 -1
  151. package/views/3d/analysis/Viewshed/ViewshedSubTool.js +1 -1
  152. package/views/3d/analysis/support/measurementUtils.js +1 -1
  153. package/views/3d/environment/CloudsParameters.js +1 -1
  154. package/views/3d/environment/MarsAtmosphere.js +1 -1
  155. package/views/3d/interactive/editingTools/transform/ScaleRotateTransform.js +1 -1
  156. package/views/3d/layers/MediaLayerView3D.js +1 -1
  157. package/views/3d/layers/graphics/Graphics3DMeshFillSymbolLayer.js +1 -1
  158. package/views/3d/layers/graphics/placementUtils.js +1 -1
  159. package/views/3d/layers/i3s/I3SUtil.js +1 -1
  160. package/views/3d/layers/support/FeatureTileVisibility3D.js +1 -1
  161. package/views/3d/state/NearFarHeuristic.js +1 -1
  162. package/views/3d/state/helpers/SceneIntersectionHelper.js +1 -1
  163. package/views/3d/support/HighlightGroup.js +1 -1
  164. package/views/3d/terrain/SphericalPatch.js +1 -1
  165. package/views/3d/terrain/TerrainRenderer.js +1 -1
  166. package/views/3d/terrain/TerrainSurface.js +1 -1
  167. package/views/3d/terrain/TilePerLayerInfo.js +1 -1
  168. package/views/3d/terrain/TileRenderer.js +1 -1
  169. package/views/3d/terrain/TileTexture.js +1 -1
  170. package/views/3d/terrain/terrainUtilsPlanar.js +1 -1
  171. package/views/3d/terrain/terrainUtilsSpherical.js +1 -1
  172. package/views/3d/webgl-engine/collections/Component/ComponentIntersectionData.js +1 -1
  173. package/views/3d/webgl-engine/collections/Component/SourceGeometry.js +1 -1
  174. package/views/3d/webgl-engine/effects/bloom/BloomRenderNode.js +1 -1
  175. package/views/3d/webgl-engine/lib/PathProfile.js +1 -1
  176. package/views/3d/webgl-engine/lib/depthRangeUtils.js +1 -1
  177. package/views/3d/webgl-engine/lib/edgeRendering/EdgeView.js +1 -1
  178. package/views/3d/webgl-engine/shaders/OutputColorHighlightOID.glsl.js +4 -4
  179. package/views/SceneView.js +1 -1
  180. package/views/View.js +1 -1
  181. package/views/draw/support/HighlightHelper.js +1 -1
  182. package/views/input/BrowserEventSource.js +1 -1
  183. package/views/layers/DimensionLayerView.js +1 -1
  184. package/views/layers/MediaLayerView.js +1 -1
  185. package/views/support/HighlightGroup.d.ts +4 -0
  186. package/views/support/HighlightGroup.js +5 -0
  187. package/views/webgl/Texture.js +1 -1
  188. package/views/webgl/textureUtils.js +5 -0
  189. package/webscene/Slide.js +1 -1
  190. package/widgets/BasemapLayerList.js +1 -1
  191. package/widgets/BuildingExplorer/BuildingLevelPicker/BuildingLevelPicker.js +1 -1
  192. package/widgets/CatalogLayerList.js +1 -1
  193. package/widgets/Editor/UpdateRecordWorkflow.js +1 -1
  194. package/widgets/Editor/UpdateWorkflow.js +1 -1
  195. package/widgets/FeatureTable/FeatureTableViewModel.js +1 -1
  196. package/widgets/FeatureTable/Grid/Grid.js +1 -1
  197. package/widgets/FeatureTable/support/exportUtils.js +1 -1
  198. package/widgets/FeatureTable/support/tableUtils.js +1 -1
  199. package/widgets/LayerList/support/layerListUtils.js +1 -1
  200. package/widgets/LayerList.js +1 -1
  201. package/widgets/Legend/styles/support/relationshipUtils.js +1 -1
  202. package/widgets/PanoramicViewer/utils.js +1 -1
  203. package/widgets/ScaleRangeSlider/ScaleRangeSliderViewModel.js +1 -1
  204. package/widgets/Sketch/SketchViewModel.js +1 -1
  205. package/widgets/TableList.js +1 -1
  206. package/widgets/support/ColorPicker.js +1 -1
  207. package/assets/esri/core/workers/chunks/005727711cca0614c2ab.js +0 -2
  208. package/assets/esri/core/workers/chunks/0a3bf1b74cce1b6b7ed8.js +0 -1
  209. package/assets/esri/core/workers/chunks/0d2411a941c42acb8cc2.js +0 -1
  210. package/assets/esri/core/workers/chunks/127c82cdb229434883b6.js +0 -1
  211. package/assets/esri/core/workers/chunks/13720b1d97fb7d80e972.js +0 -1
  212. package/assets/esri/core/workers/chunks/14b87f3dd9942e6b19d0.js +0 -1
  213. package/assets/esri/core/workers/chunks/16530347bd78dc6c2fcd.js +0 -1
  214. package/assets/esri/core/workers/chunks/1a713cc601c6fcd97d2f.js +0 -1
  215. package/assets/esri/core/workers/chunks/3029354194f1a3030c5c.js +0 -1
  216. package/assets/esri/core/workers/chunks/318a39b56851e707edad.js +0 -1
  217. package/assets/esri/core/workers/chunks/53cd990b2c988518de6d.js +0 -1
  218. package/assets/esri/core/workers/chunks/5a0eb9dfe668cf290462.js +0 -1
  219. package/assets/esri/core/workers/chunks/66b411119b8ffb99b9dc.js +0 -1
  220. package/assets/esri/core/workers/chunks/8cd2c9ec1e541836b81c.js +0 -1
  221. package/assets/esri/core/workers/chunks/9f0ebeae8a3ba360284b.js +0 -1
  222. package/assets/esri/core/workers/chunks/a3cef3837f4df9ab022e.js +0 -1
  223. package/assets/esri/core/workers/chunks/bf0a0ca7fdac98f06a89.js +0 -2
  224. package/assets/esri/core/workers/chunks/c8cd6ba5600d8ff8db0b.js +0 -2
  225. package/assets/esri/core/workers/chunks/ea250d66089967976c05.js +0 -1
  226. package/assets/esri/core/workers/chunks/ecf317c6c790b3cc83bf.js +0 -1
  227. package/assets/esri/core/workers/chunks/f4e3db71d1adae717535.js +0 -2
  228. package/views/2d/support/HighlightGroup.d.ts +0 -4
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.32/esri/copyright.txt for details.
4
4
  */
5
- import e from"../../renderers/ClassBreaksRenderer.js";import"../../renderers/DictionaryRenderer.js";import"../../renderers/DotDensityRenderer.js";import"../../renderers/HeatmapRenderer.js";import"../../renderers/PieChartRenderer.js";import"../../renderers/Renderer.js";import"../../renderers/SimpleRenderer.js";import"../../renderers/UniqueValueRenderer.js";import"../../renderers/support/jsonUtils.js";import"../../core/Logger.js";import{createUniqueColors as i}from"../../core/colorUtils.js";import r from"../../core/Error.js";import{toPt as a}from"../../core/screenUtils.js";import{ensureClass as n}from"../../core/accessorSupport/ensureType.js";import{fetchMessageBundle as s}from"../../intl/messages.js";import l from"../../renderers/support/AuthoringInfo.js";import t from"../../renderers/support/AuthoringInfoSizeStop.js";import o from"../../renderers/support/AuthoringInfoVisualVariable.js";import{setLabelsForClassBreaks as m}from"../../renderers/support/utils.js";import u from"../../renderers/visualVariables/SizeVariable.js";import{castSizeFromStringOrNumber as d}from"../../renderers/visualVariables/support/castSizeVariable.js";import p from"../../renderers/visualVariables/support/SizeVariableLegendOptions.js";import{TransformationType as c}from"../../renderers/visualVariables/support/sizeVariableUtils.js";import f from"../heuristics/ageUnit.js";import y from"../heuristics/outline.js";import v from"../heuristics/referenceSize.js";import z from"../heuristics/sizeRange.js";import{getReferenceSizeStops as w,createPrimitiveOverrides as b,updateReferenceSizeSymbol as h,createReferenceSizeSymbol as g}from"./support/referenceSizeUtils.js";import{isSizeVV as S,getAuthoringInfoVisualVariable as x,spliceVisualVariables as E,findSizeVVIndex as T,findOutlineVVIndex as V,updateAuthoringInfoVisualVariable as I,processRegenerateParams as O,getRendererToUpdate as j,getStyleType as k,hasScaleDependentSizeVV as B,hasOutlineVV as F}from"./support/regenerateUtils.js";import{getSummaryStatistics as R,errorCallback as q,getClassBreaks as D,getTitleAndExpressionForAgeRenderer as U,updateAgeRendererAuthoringInfoVV as G,verifyBasicFieldValidity as P,getDataRange as M,getSizeRangeForAxis as C,createSymbol as $,getSymbolOutlineFromScheme as A,getSymbolSizeFromScheme as L,getBasemapInfo as W}from"./support/utils.js";import{verifyDates as H,supportedAgeUnits as J}from"../statistics/support/ageUtils.js";import{verifyBinningParams as K}from"../support/binningUtils.js";import{getFieldsList as N,getNormalizationType as Q,isAnyDateField as X}from"../support/utils.js";import{binningCapableLayerTypes as Y,featureCapableLayerTypes as Z,createLayerAdapter as _,getLayerTypeLabels as ee}from"../support/adapters/support/layerUtils.js";import{cloneScheme as ie,getSchemes as re}from"../symbology/size.js";import{getColorFromSymbol as ae}from"../../symbols/support/utils.js";const ne=2**53-1;async function se(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new r("size-visual-variable:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new r("size-visual-variable:missing-parameters","View is required when 'valueExpression' is specified");if("reference-size"===e.theme&&!e.view&&!e.field)throw new r("size-visual-variable:missing-parameters","'view' and 'field' are required when 'theme' is 'reference-size'");if("reference-size"===e.theme&&e.valueExpression)throw new r("size-visual-variable:missing-parameters","'valueExpression' is not supported when 'theme' is 'reference-size'");e.forBinning&&K(e,"size-visual-variable");const i={...e},a=e.forBinning?Y:Z,n=_(i.layer,a,e.forBinning);if(!n)throw new r("size-visual-variable:invalid-parameters","'layer' must be one of these types: "+ee(a).join(", "));"height"===i.axis&&(i.sizeOptimizationEnabled=!1);const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType;if("mesh"===l)throw new r("size-visual-variable:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(i.worldScale){if("polyline"===l||"polygon"===l)throw new r("size-visual-variable:not-supported","'worldScale' sizing is not supported for polyline and polygon layers");if(!i.view||"3d"!==i.view.type)throw new r("size-visual-variable:invalid-parameters","'view' parameter should be an instance of SceneView when 'worldScale' parameter is true")}if("reference-size"===i.theme&&!e.forBinning&&"polygon"!==l)throw new r("size-visual-variable:invalid-parameters","Reference size is only supported for polygon layers");const t=await N({field:i.field,normalizationField:i.normalizationField,valueExpression:i.valueExpression}),o=P(n,t,"size-visual-variable:invalid-parameters");if(o)throw o;return await te(i),{...i,layer:n}}async function le(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new r("size-continuous-renderer:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new r("size-continuous-renderer:missing-parameters","View is required when 'valueExpression' is specified");e.forBinning&&K(e,"size-continuous-renderer");const i={...e};i.symbolType=i.symbolType||"2d",i.defaultSymbolEnabled??=!0;const a=e.forBinning?Y:Z,n=_(i.layer,a,e.forBinning);if(!n)throw new r("size-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+ee(a).join(", "));const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType,t=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="reference-size"!==i.theme&&"polygon"===l&&i.outlineOptimizationEnabled,"mesh"===l)throw new r("size-continuous-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(t&&("polyline"===l||"polygon"===l))throw new r("size-continuous-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new r("size-continuous-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");if("reference-size"===i.theme&&!e.forBinning&&"polygon"!==l)throw new r("size-continuous-renderer:invalid-parameters","Reference size is only supported for polygon layers");const o=await N({field:i.field,normalizationField:i.normalizationField,valueExpression:i.valueExpression}),m=P(n,o,"size-continuous-renderer:invalid-parameters");if(m)throw m;return await te(i),{...i,layer:n}}async function te(e){const i=e.layer;if(("polygon"===i.geometryType||e.forBinning)&&e.view&&e.field&&!e.valueExpression&&(!e.theme||"reference-size"===e.theme)){try{e.referenceSizeResult=e.referenceSizeResult??await v({layer:i,view:e.view,filter:e.filter,forBinning:e.forBinning,signal:e.signal})}catch{}!e.theme&&e.referenceSizeResult?.isGrid&&(e.theme="reference-size"),e.referenceSizeOptions?.symbolStyle||(e.referenceSizeOptions?e.referenceSizeOptions.symbolStyle="circle":e.referenceSizeOptions={symbolStyle:"circle"})}}async function oe(e){if(!e||!(e.layer&&e.view&&e.sizeStops))throw new r("update-renderer-with-reference-size:missing-parameters","'layer', 'view and 'sizeStops' parameters are required");const{view:i,forBinning:a}=e,n=e.forBinning?Y:Z,s=_(e.layer,n,e.forBinning);if(!s)throw new r("update-renderer-with-reference-size:invalid-parameters","'layer' must be one of these types: "+ee(n).join(", "));const l=s.layer;let t=e.renderer;if(!t)if(e.forBinning){if(!("featureReduction"in l&&l.featureReduction&&"renderer"in l.featureReduction&&l.featureReduction.renderer)||"class-breaks"!==l.featureReduction.renderer.type&&"unique-value"!==l.featureReduction.renderer.type)throw new r("update-renderer-with-reference-size:invalid-parameters","Feature reduction renderer is not supported");t=l.featureReduction.renderer}else{if(!("renderer"in l)||!l.renderer||"class-breaks"!==l.renderer.type&&"unique-value"!==l.renderer.type)throw new r("update-renderer-with-reference-size:invalid-parameters","Renderer is not supported");t=l.renderer}const o=t.authoringInfo;if(!o||!o?.visualVariables?.some((e=>"reference-size"===e.theme)))throw new r("update-renderer-with-reference-size:invalid-parameters","'renderer.authoringInfo.visualVariables' should have an authoringInfoVisualVariable with 'theme' set to 'reference-size'");const m=e.isGrid??(await v({view:i,layer:l,forBinning:a}))?.isGrid;return{...e,isGrid:m,renderer:t,layer:s}}async function me(e){if(!e||!e.layer||!e.field&&!e.valueExpression)throw new r("size-class-breaks-renderer:missing-parameters","'layer' and 'field' or 'valueExpression' parameters are required");if(e.valueExpression&&!e.view)throw new r("size-class-breaks-renderer:missing-parameters","View is required when 'valueExpression' is specified");e.forBinning&&K(e,"size-class-breaks-renderer");const i={...e};i.symbolType=i.symbolType||"2d",i.defaultSymbolEnabled??=!0,i.classificationMethod??="equal-interval",i.normalizationType=Q(i);const a=e.forBinning?Y:Z,n=_(i.layer,a,e.forBinning);if(!n)throw new r("size-class-breaks-renderer:invalid-parameters","'layer' must be one of these types: "+ee(a).join(", "));if(!(null!=i.minValue&&null!=i.maxValue)&&(null!=i.minValue||null!=i.maxValue))throw new r("size-class-breaks-renderer:missing-parameters","Both 'minValue' and 'maxValue' are required when specifying custom data range");const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType,t=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="polygon"===l&&i.outlineOptimizationEnabled,"mesh"===l)throw new r("size-class-breaks-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(t&&("polyline"===l||"polygon"===l))throw new r("size-class-breaks-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new r("size-class-breaks-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");const o=await N({field:i.field,normalizationField:i.normalizationField}),m=P(n,o,"size-class-breaks-renderer:invalid-parameters");if(m)throw m;return{...i,layer:n}}function ue(e){const i={...e};delete i.basemap,delete i.sizeScheme,delete i.legendOptions,delete i.symbolType,delete i.defaultSymbolEnabled;const r=i;return r.analyzeData=!(null!=i.minValue&&null!=i.maxValue),r}function de(e){const i={...e},r=!!i.symbolType?.includes("3d-volumetric"),a=i;return a.worldScale=r,r&&(a.axis="3d-volumetric-uniform"===i.symbolType?"all":"height"),delete i.symbolType,delete i.defaultSymbolEnabled,a}async function pe(e){if(!(e&&e.layer&&e.view&&e.startTime&&e.endTime))throw new r("size-age-renderer:missing-parameters","'layer', 'view', 'startTime', 'endTime' parameters are required");const i={...e};i.symbolType??="2d",i.defaultSymbolEnabled??=!0;const a=_(i.layer,Z);if(!a)throw new r("size-age-renderer:invalid-parameters","'layer' must be one of these types: "+ee(Z).join(", "));const n=null!=i.signal?{signal:i.signal}:null;await a.load(n);const s=a.geometryType,l=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="polygon"===s&&i.outlineOptimizationEnabled,"mesh"===s)throw new r("size-age-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(l&&("polyline"===s||"polygon"===s))throw new r("size-age-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new r("size-age-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");const t=H(a,i.startTime,i.endTime,"size-age-renderer:invalid-parameters");if(t)throw t;if(i.unit&&!J.includes(i.unit))throw new r("size-age-renderer:invalid-unit",`Supported units are: ${J.join(", ")}`);return{...i,layer:a}}async function ce(e){const i="regenerate-size-visual-variables";O(e,i);const a=await j(e),n=k(a);if(!n||!["size-continuous","univariate-color-size","color-size","relationship-size","type-size"].includes(n))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const s=x(a,"size");if(!s)throw new r(`${i}:invalid-parameters`,"Renderer does not have a size visual variable authoringInfo");const l=s.theme,t="reference-size"===l,o=a.visualVariables?.find(S);if(!o&&!t)throw new r(`${i}:invalid-parameters`,"Renderer does not have a size visual variable");let m=s.field,u=s.normalizationField,d=null,p=null;m||(o?.field?(m=o.field,u=o.normalizationField):a.field?(m=a.field,u=a.normalizationField):(d=o?.valueExpression??a.valueExpression,p=o?.valueExpressionTitle??a.valueExpressionTitle));const{layer:c,forBinning:f,filter:y,view:v,signal:z}=e,w=B(a),b=await se({layer:c,field:m,valueExpression:d,valueExpressionTitle:p,normalizationField:u,theme:l,sizeOptimizationEnabled:w,forBinning:f,filter:y,view:v,signal:z});return{...e,creatorParameters:b,renderer:a}}async function fe(e){const i="regenerate-size-continuous-renderer";O(e,i);const a=await j(e),n=k(a);if(!n||!["size-continuous","univariate-color-size"].includes(n))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:s,field:l,normalizationField:t,valueExpression:o,valueExpressionTitle:m}=a,u=s?.visualVariables.find((e=>"size"===e.type)),d=u.theme,{layer:p,forBinning:c,filter:f,view:y,signal:v}=e,z=F(a),w=B(a),b=await le({layer:p,field:l,valueExpression:o,valueExpressionTitle:m,normalizationField:t,theme:d,outlineOptimizationEnabled:z,sizeOptimizationEnabled:w,forBinning:c,filter:f,view:y,signal:v});return{...e,creatorParameters:b,renderer:a}}async function ye(e){const i="regenerate-size-class-breaks-renderer";await O(e,i);const a=await j(e);if("size-class-breaks"!==k(a))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:n,field:s,normalizationField:l,normalizationType:t,normalizationTotal:o,valueExpression:m,valueExpressionTitle:u}=a,{classificationMethod:d,standardDeviationInterval:p}=n,c=a.classBreakInfos.length,{layer:f,forBinning:y,filter:v,view:z,signal:w}=e,b=F(a),h=await me({layer:f,field:s,valueExpression:m,valueExpressionTitle:u,normalizationType:t,normalizationField:l,normalizationTotal:o,classificationMethod:d,standardDeviationInterval:p,numClasses:c,outlineOptimizationEnabled:b,forBinning:y,filter:v,view:z,signal:w});return{...e,creatorParameters:h,renderer:a}}async function ve(e){const i="regenerate-size-age-renderer";await O(e,i);const a=await j(e);if("size-age"!==k(a))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:n}=a,s=n?.visualVariables.find((e=>"size"===e.type)),l=s.startTime,t=s.endTime,o=s.units,m=s.theme,{layer:u,filter:d,view:p,signal:c}=e,f=F(a),y=B(a),v=await pe({layer:u,startTime:l,endTime:t,unit:o,theme:m,outlineOptimizationEnabled:f,sizeOptimizationEnabled:y,filter:d,view:p,signal:c});return{...e,creatorParameters:v,renderer:a}}async function ze(e){let i=e.sizeScheme,r=null,a=null;const n=await W(e.basemap,e.view);if(r=null!=n.basemapId?n.basemapId:null,a=null!=n.basemapTheme?n.basemapTheme:null,i)return{scheme:ie(i),basemapId:r,basemapTheme:a};const s=re({basemapTheme:a,geometryType:e.geometryType,worldScale:e.worldScale,view:e.view});return s&&(i=s.primaryScheme,r=s.basemapId,a=s.basemapTheme),{scheme:i,basemapId:r,basemapTheme:a}}function we(e,i){switch(i){case"point":case"multipoint":{const i=e;return[d(i.minSize),d(i.maxSize)]}case"polyline":{const i=e;return[d(i.minWidth),d(i.maxWidth)]}case"polygon":{const i=e;return[d(i.marker.minSize),d(i.marker.maxSize)]}}}function be(e,i){e.transformationType===c.ClampedLinear&&"below"===i&&e.flipSizes()}async function he(e,i,r,a,n){return"reference-size"===r&&i?[1,i.size]:e?[e.minSize,e.maxSize]:we(a,n)}function ge(e,i,r){return"reference-size"===r&&i?[1,i.size]:e?[e.minSize,e.maxSize]:null}function Se(e,i){if("reference-size"===i.theme&&null!=e.min&&null!=e.max&&null!=e.avg&&null!=e.stddev){const i=100,r=0,a=0,n=1,s=e.avg,l=e.min,t=e.max,o=e.stddev,m=0!==s?o/s:0,u=l>a&&l<n&&t<2*n&&m<.5,d=l>r&&l<i&&t<2*i&&m<.5;return{minDataValue:u?a:d?r:l,maxDataValue:u?n:d?i:s+2*o,defaultValuesUsed:!1}}const{theme:r,field:a}=i,n=i.layer,s=a&&!("function"==typeof a)?n.getField(a):null,l=X(s);return M(e,r,l,"above"===r||"below"===r)}async function xe(e,i,a,s){const{theme:m,field:d,normalizationField:c,minValue:f,maxValue:y,axis:v}=e,z=e.layer.geometryType,b=await ze({basemap:e.basemap,geometryType:z,sizeScheme:e.sizeScheme,worldScale:e.worldScale,view:e.view}),h=b.scheme;if(!h)throw new r("size-visual-variable:insufficient-info","Unable to find size scheme");const g=await he(a,s,m,h,z),{minDataValue:S,maxDataValue:x,defaultValuesUsed:E}=Se(i,e),T=[],V="height"===v,I=V?v:void 0,O=g[0];let j=g[1];if(V&&"number"==typeof O&&"number"==typeof j){const e=C({minSize:O,maxSize:j},I);T.push(new u({axis:"width-and-depth",minSize:e.minSize})),j=e.maxSize}const k=new u({field:d??void 0,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,valueUnit:"unknown",normalizationField:c,axis:I,minSize:O,maxSize:j,minDataValue:S,maxDataValue:x,legendOptions:n(p,e.legendOptions)});be(k,m),T.unshift(k);const B=new o("reference-size"===m?{type:"size",field:e.field,normalizationField:e.normalizationField,sizeStops:w(k).map((({label:e,size:i,value:r})=>new t({label:e,size:i,value:r}))),theme:m,referenceSizeScale:s?.isGrid||e.sizeOptimizationEnabled?e?.view?.scale:void 0,referenceSizeSymbolStyle:e.referenceSizeOptions?.symbolStyle,minSliderValue:null!=f?f:i.min,maxSliderValue:null!=y?y:i.max}:{type:"size",theme:m,minSliderValue:null!=f?f:i.min,maxSliderValue:null!=y?y:i.max}),F=new l({visualVariables:[B]});return{basemapId:b.basemapId,basemapTheme:b.basemapTheme,visualVariables:T,statistics:i,isGrid:s?.isGrid,defaultValuesUsed:E,sizeScheme:ie(h),authoringInfo:F}}async function Ee(i,r,a,n,l){const t=await s("esri/smartMapping/t9n/smartMapping"),o=l.layer,m=l.field,u=o.geometryType,d=l.defaultSymbolEnabled,p=ie(i.sizeScheme),c="polygon"===u,f=c?p.marker:p,y=c?p.background:null,v=c?"point":u,z=r?.opacity,h=i.isGrid,S="reference-size"===l.theme,x=S?[]:i.visualVariables.map((e=>e.clone()));r?.visualVariables?.length&&x.push(...r.visualVariables.map((e=>e.clone())));const E=S?b({view:l.view,field:m,normalizationField:n,sizeStops:w(i.visualVariables[0]),sizeByScaleEnabled:h||!!l.sizeOptimizationEnabled}):null;return{renderer:new e({backgroundFillSymbol:!h&&y?$(u,{type:l.symbolType,color:y.color,outline:A(y,u,z)}):null,classBreakInfos:[{minValue:-ne,maxValue:ne,symbol:E?g({type:l.referenceSizeOptions?.symbolStyle||"circle",color:f.color,primitiveOverrides:E}):$(v,{type:l.symbolType,color:f.color,size:L(f,v),outline:A(f,v,z)})}],defaultLabel:d?t.other:null,defaultSymbol:d&&!S?$(v,{type:l.symbolType,color:f.noDataColor,size:L(f,v,!0),outline:A(f,v,z)}):null,field:m,normalizationField:n,normalizationType:a,valueExpression:l.valueExpression,valueExpressionTitle:l.valueExpressionTitle,visualVariables:x,authoringInfo:i.authoringInfo?.clone()}),visualVariables:i.visualVariables.map((e=>e.clone())),statistics:i.statistics,defaultValuesUsed:i.defaultValuesUsed,isGrid:h,sizeScheme:ie(i.sizeScheme),basemapId:i.basemapId,basemapTheme:i.basemapTheme}}function Te(e,i){const r=a(e.minSize),n=(a(e.maxSize)-r)/(i>=4?i-1:i),s=[];for(let a=0;a<i;a++)s.push(r+n*a);return s}async function Ve(i,r){const a=await s("esri/smartMapping/t9n/smartMapping"),n=i.layer,t=i.defaultSymbolEnabled,o=n.geometryType,u="polygon"===o,d=i.symbolType?.includes("3d-volumetric"),p=await ze({basemap:i.basemap,geometryType:o,sizeScheme:i.sizeScheme,worldScale:d,view:i.view}),c=p.scheme,{result:f,outlineResult:y}=r,v=f?.classBreakInfos??[],z=i.classificationMethod,w=i.normalizationType,b=u?c.marker:c,h=u?c.background:null,g=u?"point":o,S=we(b,g),x=d?C({minSize:S[0],maxSize:S[1]},"height"):null,E=Te({minSize:S[0],maxSize:x?x.maxSize:S[1]},v.length),T=y?.opacity,V=new e({backgroundFillSymbol:h&&$(o,{type:i.symbolType,color:h.color,outline:A(h,o,T)}),classBreakInfos:v.map(((e,r)=>({minValue:e.minValue,maxValue:e.maxValue,symbol:$(g,{type:i.symbolType,color:b.color,size:E[r],widthAndDepth:x?.minSize,outline:A(b,g,T)}),label:e.label}))),defaultLabel:t?a.other:null,defaultSymbol:t?$(g,{type:i.symbolType,color:b.noDataColor,size:L(b,g,!0),widthAndDepth:x?.minSize,outline:A(b,g,T)}):null,field:i.field,valueExpression:i.valueExpression,valueExpressionTitle:i.valueExpressionTitle,normalizationType:w,normalizationField:i.normalizationField,normalizationTotal:"percent-of-total"===w?f?.normalizationTotal:void 0,legendOptions:i.legendOptions,authoringInfo:new l({type:"class-breaks-size",classificationMethod:z,standardDeviationInterval:i.standardDeviationInterval})});return"standard-deviation"!==z&&m({classBreakInfos:V.classBreakInfos,classificationMethod:z,normalizationType:w,round:!0}),y?.visualVariables?.length&&(V.visualVariables=y.visualVariables.map((e=>e.clone()))),{renderer:V,sizeScheme:ie(c),classBreaksResult:f,defaultValuesUsed:!!r.defaultValuesUsed,basemapId:p.basemapId,basemapTheme:p.basemapTheme}}async function Ie(e){const i=await se(e),{view:r,field:a,valueExpression:n,minValue:s,maxValue:l,layer:t,normalizationField:o,signal:m,statistics:u,filter:d}=i,p=o?"field":void 0,[c,f]=await Promise.all([u??R({layer:t,field:a,valueExpression:n,sqlExpression:i.sqlExpression,sqlWhere:i.sqlWhere,normalizationType:p,normalizationField:o,filter:d,minValue:s,maxValue:l,view:r,signal:m}),i.sizeOptimizationEnabled?z({view:r,layer:t,signal:m,filter:d}).catch(q):null]);return xe(i,c,f,i.referenceSizeResult)}async function Oe(e){const{view:i,filter:r,renderer:a,signal:n,creatorParameters:s}=await ce(e),{field:l,normalizationField:o,valueExpression:m,theme:d,layer:p,sizeOptimizationEnabled:c,referenceSizeResult:f,valueExpressionTitle:y}=s,v=o?"field":void 0,[b,h]=await Promise.all([R({layer:p,field:l,valueExpression:m,normalizationField:o,normalizationType:v,filter:r,view:i,signal:n}),c?z({view:i,layer:p,signal:n,filter:r}).catch(q):null]),g=ge(h,f,d),{minDataValue:E,maxDataValue:T}=Se(b,{theme:d,layer:p,field:l}),V=a.visualVariables?.find(S),I=(V?.stops?null:V)??new u({field:l??void 0,valueExpression:m,valueExpressionTitle:y,valueUnit:"unknown",normalizationField:o});g&&(I.minSize=g[0],I.maxSize=g[1]),I.minDataValue=E,I.maxDataValue=T,be(I,d);const O=x(a,"size");return O.minSliderValue=b.min,O.maxSliderValue=b.max,"reference-size"===d&&(O.sizeStops=w(I).map((({label:e,size:i,value:r})=>new t({label:e,size:i,value:r}))),O.referenceSizeScale=f?.isGrid||c?i?.scale:void 0),{visualVariables:"reference-size"===d?[]:[I],isGrid:!!f?.isGrid,authoringInfo:a.authoringInfo?.clone(),statistics:b}}async function je(e){const i=await le(e),r={layer:i.layer,view:i.view,filter:i.filter,signal:i.signal},[a,n]=await Promise.all([Ie(de(i)),i.outlineOptimizationEnabled?y(r).catch(q):null]),s=i.normalizationField;return Ee(a,n,s?"field":void 0,s,i)}async function ke(e){const{renderer:i,view:r,signal:a,filter:n,creatorParameters:s,forBinning:l}=await fe(e),{layer:t,outlineOptimizationEnabled:o,theme:m,referenceSizeResult:u}=s,[d,p]=await Promise.all([Oe({...e,referenceSizeResult:u}),o?y({layer:t,view:r,filter:n,signal:a}).catch(q):null]),c=d.isGrid,f="reference-size"===m;E(i,d.visualVariables,T),E(i,p?.visualVariables,V),I(i,d.authoringInfo,"size");const v=d.statistics;if(!f)return{renderer:i,statistics:v};return{renderer:await Be({layer:t,renderer:i,view:r,forBinning:l,sizeStops:x(i,"size","reference-size")?.sizeStops,isGrid:c}),isGrid:c,statistics:v}}async function Be(e){const{layer:a,referenceSizeOptions:n,renderer:s,sizeScheme:o,sizeStops:m,typeScheme:u,view:d,isGrid:p}=await oe(e),c=s.clone();c.authoringInfo??=new l;const f=c.authoringInfo.visualVariables.find((e=>"reference-size"===e.theme)),y=e.field??f?.field,v=e.normalizationField??f?.normalizationField;if(!y)throw new r("update-renderer-with-reference-size:invalid-parameters","'field' parameter or authoring info with 'field' is required.");const z=b({view:d,field:y,normalizationField:v,sizeStops:m,sizeByScaleEnabled:p||!!e.sizeOptimizationEnabled}),w=n?.symbolStyle||f?.referenceSizeSymbolStyle||"circle";if("class-breaks"===c.type){const e="polygon"===("geometryType"in a?a.geometryType:null)&&o&&"marker"in o?o.marker:null;c.classBreakInfos.forEach((i=>{const r=e?.color??ae(i.symbol,1);"cim"===i.symbol.type?h(i.symbol,{type:w,color:r,primitiveOverrides:z}):r&&(i.symbol=g({type:w,color:r,primitiveOverrides:z}))}))}else if("unique-value"===c.type){const e=c.uniqueValueGroups,r="polygon"===("geometryType"in a?a.geometryType:null)&&u&&"colors"in u?u.colors:null,n=r?i(r,c.uniqueValueInfos?.length??0):null;let s=0;if(e){for(const i of e)for(const e of i.classes??[]){const i=n?n[s]:ae(e.symbol,1);"cim"===e.symbol?.type?h(e.symbol,{type:w,color:i,primitiveOverrides:z}):i&&(e.symbol=g({type:w,color:i,primitiveOverrides:z})),s++}c.uniqueValueGroups=e}}return f&&(f.field=y,f.normalizationField=v,f.sizeStops=m.map((({label:e,size:i,value:r})=>new t({label:e,size:i,value:r}))),f.referenceSizeScale=p||e.sizeOptimizationEnabled?d.scale:void 0,f.referenceSizeSymbolStyle=w),c}async function Fe(e){const i=await me(e);return Ve(i,await D(ue(i),i.outlineOptimizationEnabled))}async function Re(e){const{renderer:i,creatorParameters:a}=await ye(e),{outlineOptimizationEnabled:n,normalizationType:s,classificationMethod:l}=a,{result:t,outlineResult:o}=await D(ue(a),n),u=t.classBreakInfos;if(a.numClasses!==u.length)throw new r("regenerate-class-breaks-renderer:invalid-parameters","The number of class breaks generated does not match the number of class breaks in the renderer.");return i.classBreakInfos.forEach(((e,i)=>{e.minValue=u[i].minValue,e.maxValue=u[i].maxValue,e.label=u[i].label})),i.normalizationTotal="percent-of-total"===s?t.normalizationTotal:void 0,"standard-deviation"!==l&&m({classBreakInfos:i.classBreakInfos,classificationMethod:l,normalizationType:s,round:!0}),E(i,o?.visualVariables,V),{renderer:i}}async function qe(e){const i=await pe(e),{defaultSymbolEnabled:r,view:a,startTime:n,endTime:s,symbolType:l,minValue:t,maxValue:o,signal:m,filter:u,layer:d}=i,[p,c]=await Promise.all([i.unit?{unit:i.unit,statistics:null,valueExpression:null}:await f({view:a,layer:d,startTime:n,endTime:s,minValue:t,maxValue:o,signal:m,filter:u}),i.outlineOptimizationEnabled?y({layer:d,view:a,filter:u,signal:m}).catch(q):null]),{unit:v,statistics:z}=p,{valueExpression:w,title:b}=await U(i,v),h=await Ie(de({layer:d,basemap:i.basemap,valueExpression:w,symbolType:l,statistics:z,legendOptions:{title:b},theme:i.theme,sizeScheme:i.sizeScheme,sizeOptimizationEnabled:i.sizeOptimizationEnabled,view:i.view,minValue:t,maxValue:o,filter:u,signal:m})),g={layer:d,valueExpression:w,defaultSymbolEnabled:r,symbolType:l},S=await Ee(h,c,null,null,g),x=S.renderer.authoringInfo?.visualVariables;return x?.forEach((e=>G(e,n,s,v))),{...S,unit:v}}async function De(e){const{renderer:i,creatorParameters:r}=await ve(e),{layer:a,outlineOptimizationEnabled:n,sizeOptimizationEnabled:s,startTime:l,endTime:t,theme:o,view:m,signal:u,filter:d}=r,[p,c]=await Promise.all([f({view:m,layer:a,startTime:l,endTime:t,signal:u,filter:d}),n?y({layer:a,view:m,filter:d,signal:u}).catch(q):null]),{unit:v,statistics:z}=p,{valueExpression:w,title:b}=await U(r,v),h=await Ie(de({layer:a,valueExpression:w,statistics:z,legendOptions:{title:b},sizeOptimizationEnabled:s,theme:o,view:m,filter:d,signal:u}));E(i,h.visualVariables,T),E(i,c?.visualVariables,V),i.authoringInfo=h.authoringInfo.clone();const g=i.authoringInfo?.visualVariables;return g?.forEach((e=>G(e,l,t,v))),{renderer:i}}export{qe as createAgeRenderer,Fe as createClassBreaksRenderer,je as createContinuousRenderer,Ie as createVisualVariables,De as regenerateAgeRenderer,Re as regenerateClassBreaksRenderer,ke as regenerateContinuousRenderer,Oe as regenerateVisualVariables,Be as updateRendererWithReferenceSize};
5
+ import e from"../../renderers/ClassBreaksRenderer.js";import"../../renderers/DictionaryRenderer.js";import"../../renderers/DotDensityRenderer.js";import"../../renderers/HeatmapRenderer.js";import"../../renderers/PieChartRenderer.js";import"../../renderers/Renderer.js";import"../../renderers/SimpleRenderer.js";import"../../renderers/UniqueValueRenderer.js";import"../../renderers/support/jsonUtils.js";import"../../core/Logger.js";import{createUniqueColors as i}from"../../core/colorUtils.js";import r from"../../core/Error.js";import{toPt as a}from"../../core/screenUtils.js";import{ensureClass as n}from"../../core/accessorSupport/ensureType.js";import{fetchMessageBundle as s}from"../../intl/messages.js";import l from"../../renderers/support/AuthoringInfo.js";import t from"../../renderers/support/AuthoringInfoSizeStop.js";import o from"../../renderers/support/AuthoringInfoVisualVariable.js";import{setLabelsForClassBreaks as m}from"../../renderers/support/utils.js";import u from"../../renderers/visualVariables/SizeVariable.js";import{castSizeFromStringOrNumber as d}from"../../renderers/visualVariables/support/castSizeVariable.js";import p from"../../renderers/visualVariables/support/SizeVariableLegendOptions.js";import{TransformationType as c}from"../../renderers/visualVariables/support/sizeVariableUtils.js";import f from"../heuristics/ageUnit.js";import y from"../heuristics/outline.js";import v from"../heuristics/referenceSize.js";import z from"../heuristics/sizeRange.js";import{getReferenceSizeStops as w,createPrimitiveOverrides as b,updateReferenceSizeSymbol as h,createReferenceSizeSymbol as g}from"./support/referenceSizeUtils.js";import{isSizeVV as S,getAuthoringInfoVisualVariable as x,spliceVisualVariables as E,findSizeVVIndex as T,findOutlineVVIndex as V,updateAuthoringInfoVisualVariable as I,processRegenerateParams as O,getRendererToUpdate as j,getStyleType as k,hasScaleDependentSizeVV as B,hasOutlineVV as F}from"./support/regenerateUtils.js";import{getSummaryStatistics as R,errorCallback as q,getClassBreaks as D,getTitleAndExpressionForAgeRenderer as U,updateAgeRendererAuthoringInfoVV as G,verifyBasicFieldValidity as P,getDataRange as M,getSizeRangeForAxis as C,createSymbol as $,getSymbolOutlineFromScheme as A,getSymbolSizeFromScheme as L,getBasemapInfo as W}from"./support/utils.js";import{verifyDates as H,supportedAgeUnits as J}from"../statistics/support/ageUtils.js";import{verifyBinningParams as K}from"../support/binningUtils.js";import{getFieldsList as N,getNormalizationType as Q,isAnyDateField as X}from"../support/utils.js";import{binningCapableLayerTypes as Y,featureCapableLayerTypes as Z,createLayerAdapter as _,getLayerTypeLabels as ee}from"../support/adapters/support/layerUtils.js";import{cloneScheme as ie,getSchemes as re}from"../symbology/size.js";import{getColorFromSymbol as ae}from"../../symbols/support/utils.js";const ne=2**53-1;async function se(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new r("size-visual-variable:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new r("size-visual-variable:missing-parameters","View is required when 'valueExpression' is specified");if("reference-size"===e.theme&&!e.view&&!e.field)throw new r("size-visual-variable:missing-parameters","'view' and 'field' are required when 'theme' is 'reference-size'");if("reference-size"===e.theme&&e.valueExpression)throw new r("size-visual-variable:missing-parameters","'valueExpression' is not supported when 'theme' is 'reference-size'");e.forBinning&&K(e,"size-visual-variable");const i={...e},a=e.forBinning?Y:Z,n=_(i.layer,a,e.forBinning);if(!n)throw new r("size-visual-variable:invalid-parameters","'layer' must be one of these types: "+ee(a).join(", "));"height"===i.axis&&(i.sizeOptimizationEnabled=!1);const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType;if("mesh"===l)throw new r("size-visual-variable:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(i.worldScale){if("polyline"===l||"polygon"===l)throw new r("size-visual-variable:not-supported","'worldScale' sizing is not supported for polyline and polygon layers");if(!i.view||"3d"!==i.view.type)throw new r("size-visual-variable:invalid-parameters","'view' parameter should be an instance of SceneView when 'worldScale' parameter is true")}if("reference-size"===i.theme&&!e.forBinning&&"polygon"!==l)throw new r("size-visual-variable:invalid-parameters","Reference size is only supported for polygon layers");const t=await N({field:i.field,normalizationField:i.normalizationField,valueExpression:i.valueExpression}),o=P(n,t,"size-visual-variable:invalid-parameters");if(o)throw o;return await te(i),{...i,layer:n}}async function le(e){if(!(e&&e.layer&&(e.field||e.valueExpression||e.sqlExpression)))throw new r("size-continuous-renderer:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(e.valueExpression&&!e.sqlExpression&&!e.view)throw new r("size-continuous-renderer:missing-parameters","View is required when 'valueExpression' is specified");e.forBinning&&K(e,"size-continuous-renderer");const i={...e};i.symbolType=i.symbolType||"2d",i.defaultSymbolEnabled??=!0;const a=e.forBinning?Y:Z,n=_(i.layer,a,e.forBinning);if(!n)throw new r("size-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+ee(a).join(", "));const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType,t=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="reference-size"!==i.theme&&"polygon"===l&&i.outlineOptimizationEnabled,"mesh"===l)throw new r("size-continuous-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(t&&("polyline"===l||"polygon"===l))throw new r("size-continuous-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new r("size-continuous-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");if("reference-size"===i.theme&&!e.forBinning&&"polygon"!==l)throw new r("size-continuous-renderer:invalid-parameters","Reference size is only supported for polygon layers");const o=await N({field:i.field,normalizationField:i.normalizationField,valueExpression:i.valueExpression}),m=P(n,o,"size-continuous-renderer:invalid-parameters");if(m)throw m;return await te(i),{...i,layer:n}}async function te(e){const i=e.layer;if(("polygon"===i.geometryType||e.forBinning)&&e.view&&e.field&&!e.valueExpression&&(!e.theme||"reference-size"===e.theme)){try{e.referenceSizeResult=e.referenceSizeResult??await v({layer:i,view:e.view,filter:e.filter,forBinning:e.forBinning,signal:e.signal})}catch{}!e.theme&&e.referenceSizeResult?.isGrid&&(e.theme="reference-size"),e.referenceSizeOptions?.symbolStyle||(e.referenceSizeOptions?e.referenceSizeOptions.symbolStyle="circle":e.referenceSizeOptions={symbolStyle:"circle"})}}async function oe(e){if(!e||!(e.layer&&e.view&&e.sizeStops))throw new r("update-renderer-with-reference-size:missing-parameters","'layer', 'view and 'sizeStops' parameters are required");const{view:i,forBinning:a}=e,n=e.forBinning?Y:Z,s=_(e.layer,n,e.forBinning);if(!s)throw new r("update-renderer-with-reference-size:invalid-parameters","'layer' must be one of these types: "+ee(n).join(", "));const l=s.layer;let t=e.renderer;if(!t)if(e.forBinning){if(!("featureReduction"in l&&l.featureReduction&&"renderer"in l.featureReduction&&l.featureReduction.renderer)||"class-breaks"!==l.featureReduction.renderer.type&&"unique-value"!==l.featureReduction.renderer.type)throw new r("update-renderer-with-reference-size:invalid-parameters","Feature reduction renderer is not supported");t=l.featureReduction.renderer}else{if(!("renderer"in l)||!l.renderer||"class-breaks"!==l.renderer.type&&"unique-value"!==l.renderer.type)throw new r("update-renderer-with-reference-size:invalid-parameters","Renderer is not supported");t=l.renderer}const o=t.authoringInfo;if(!o||!o?.visualVariables?.some((e=>"reference-size"===e.theme)))throw new r("update-renderer-with-reference-size:invalid-parameters","'renderer.authoringInfo.visualVariables' should have an authoringInfoVisualVariable with 'theme' set to 'reference-size'");const m=e.isGrid??(await v({view:i,layer:l,forBinning:a}))?.isGrid;return{...e,isGrid:m,renderer:t,layer:s}}async function me(e){if(!e||!e.layer||!e.field&&!e.valueExpression)throw new r("size-class-breaks-renderer:missing-parameters","'layer' and 'field' or 'valueExpression' parameters are required");if(e.valueExpression&&!e.view)throw new r("size-class-breaks-renderer:missing-parameters","View is required when 'valueExpression' is specified");e.forBinning&&K(e,"size-class-breaks-renderer");const i={...e};i.symbolType=i.symbolType||"2d",i.defaultSymbolEnabled??=!0,i.classificationMethod??="equal-interval",i.normalizationType=Q(i);const a=e.forBinning?Y:Z,n=_(i.layer,a,e.forBinning);if(!n)throw new r("size-class-breaks-renderer:invalid-parameters","'layer' must be one of these types: "+ee(a).join(", "));if(!(null!=i.minValue&&null!=i.maxValue)&&(null!=i.minValue||null!=i.maxValue))throw new r("size-class-breaks-renderer:missing-parameters","Both 'minValue' and 'maxValue' are required when specifying custom data range");const s=null!=i.signal?{signal:i.signal}:null;await n.load(s);const l=n.geometryType,t=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="polygon"===l&&i.outlineOptimizationEnabled,"mesh"===l)throw new r("size-class-breaks-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(t&&("polyline"===l||"polygon"===l))throw new r("size-class-breaks-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new r("size-class-breaks-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");const o=await N({field:i.field,normalizationField:i.normalizationField}),m=P(n,o,"size-class-breaks-renderer:invalid-parameters");if(m)throw m;return{...i,layer:n}}function ue(e){const i={...e};delete i.basemap,delete i.sizeScheme,delete i.legendOptions,delete i.symbolType,delete i.defaultSymbolEnabled;const r=i;return r.analyzeData=!(null!=i.minValue&&null!=i.maxValue),r}function de(e){const i={...e},r=!!i.symbolType?.includes("3d-volumetric"),a=i;return a.worldScale=r,r&&(a.axis="3d-volumetric-uniform"===i.symbolType?"all":"height"),delete i.symbolType,delete i.defaultSymbolEnabled,a}async function pe(e){if(!(e&&e.layer&&e.view&&e.startTime&&e.endTime))throw new r("size-age-renderer:missing-parameters","'layer', 'view', 'startTime', 'endTime' parameters are required");const i={...e};i.symbolType??="2d",i.defaultSymbolEnabled??=!0;const a=_(i.layer,Z);if(!a)throw new r("size-age-renderer:invalid-parameters","'layer' must be one of these types: "+ee(Z).join(", "));const n=null!=i.signal?{signal:i.signal}:null;await a.load(n);const s=a.geometryType,l=i.symbolType.includes("3d");if(i.outlineOptimizationEnabled="polygon"===s&&i.outlineOptimizationEnabled,"mesh"===s)throw new r("size-age-renderer:invalid-parameters","Size visualization is not applicable to layers with 'mesh' geometry type");if(l&&("polyline"===s||"polygon"===s))throw new r("size-age-renderer:not-supported","3d symbols are not supported for polyline and polygon layers");if(i.symbolType.includes("3d-volumetric")&&(!i.view||"3d"!==i.view.type))throw new r("size-age-renderer:invalid-parameters","'view' parameter should be an instance of SceneView when 'symbolType' parameter is '3d-volumetric' or 3d-volumetric-uniform");const t=H(a,i.startTime,i.endTime,"size-age-renderer:invalid-parameters");if(t)throw t;if(i.unit&&!J.includes(i.unit))throw new r("size-age-renderer:invalid-unit",`Supported units are: ${J.join(", ")}`);return{...i,layer:a}}async function ce(e){const i="regenerate-size-visual-variables";O(e,i);const a=await j(e),n=k(a);if(!n||!["size-continuous","univariate-color-size","color-size","relationship-size","type-size"].includes(n))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const s=x(a,"size");if(!s)throw new r(`${i}:invalid-parameters`,"Renderer does not have a size visual variable authoringInfo");const l=s.theme,t="reference-size"===l,o=a.visualVariables?.find(S);if(!o&&!t)throw new r(`${i}:invalid-parameters`,"Renderer does not have a size visual variable");let m=s.field,u=s.normalizationField,d=null,p=null;m||(o?.field?(m=o.field,u=o.normalizationField):a.field?(m=a.field,u=a.normalizationField):(d=o?.valueExpression??a.valueExpression,p=o?.valueExpressionTitle??a.valueExpressionTitle));const{layer:c,forBinning:f,filter:y,view:v,signal:z}=e,w=B(a),b=await se({layer:c,field:m,valueExpression:d,valueExpressionTitle:p,normalizationField:u,theme:l,sizeOptimizationEnabled:w,forBinning:f,filter:y,view:v,signal:z});return{...e,creatorParameters:b,renderer:a}}async function fe(e){const i="regenerate-size-continuous-renderer";O(e,i);const a=await j(e),n=k(a);if(!n||!["size-continuous","univariate-color-size"].includes(n))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:s,field:l,normalizationField:t,valueExpression:o,valueExpressionTitle:m}=a,u=s?.visualVariables.find((e=>"size"===e.type)),d=u.theme,{layer:p,forBinning:c,filter:f,view:y,signal:v}=e,z=F(a),w=B(a),b=await le({layer:p,field:l,valueExpression:o,valueExpressionTitle:m,normalizationField:t,theme:d,outlineOptimizationEnabled:z,sizeOptimizationEnabled:w,forBinning:c,filter:f,view:y,signal:v});return{...e,creatorParameters:b,renderer:a}}async function ye(e){const i="regenerate-size-class-breaks-renderer";await O(e,i);const a=await j(e);if("size-class-breaks"!==k(a))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:n,field:s,normalizationField:l,normalizationType:t,normalizationTotal:o,valueExpression:m,valueExpressionTitle:u}=a,{classificationMethod:d,standardDeviationInterval:p}=n,c=a.classBreakInfos.length,{layer:f,forBinning:y,filter:v,view:z,signal:w}=e,b=F(a),h=await me({layer:f,field:s,valueExpression:m,valueExpressionTitle:u,normalizationType:t,normalizationField:l,normalizationTotal:o,classificationMethod:d,standardDeviationInterval:p,numClasses:c,outlineOptimizationEnabled:b,forBinning:y,filter:v,view:z,signal:w});return{...e,creatorParameters:h,renderer:a}}async function ve(e){const i="regenerate-size-age-renderer";await O(e,i);const a=await j(e);if("size-age"!==k(a))throw new r(`${i}:invalid-parameters`,"Renderer is invalid");const{authoringInfo:n}=a,s=n?.visualVariables.find((e=>"size"===e.type)),l=s.startTime,t=s.endTime,o=s.units,m=s.theme,{layer:u,filter:d,view:p,signal:c}=e,f=F(a),y=B(a),v=await pe({layer:u,startTime:l,endTime:t,unit:o,theme:m,outlineOptimizationEnabled:f,sizeOptimizationEnabled:y,filter:d,view:p,signal:c});return{...e,creatorParameters:v,renderer:a}}async function ze(e){let i=e.sizeScheme,r=null,a=null;const n=await W(e.basemap,e.view);if(r=null!=n.basemapId?n.basemapId:null,a=null!=n.basemapTheme?n.basemapTheme:null,i)return{scheme:ie(i),basemapId:r,basemapTheme:a};const s=re({basemapTheme:a,geometryType:e.geometryType,worldScale:e.worldScale,view:e.view});return s&&(i=s.primaryScheme,r=s.basemapId,a=s.basemapTheme),{scheme:i,basemapId:r,basemapTheme:a}}function we(e,i){switch(i){case"point":case"multipoint":{const i=e;return[d(i.minSize),d(i.maxSize)]}case"polyline":{const i=e;return[d(i.minWidth),d(i.maxWidth)]}case"polygon":{const i=e;return[d(i.marker.minSize),d(i.marker.maxSize)]}}}function be(e,i){e.transformationType===c.ClampedLinear&&"below"===i&&e.flipSizes()}async function he(e,i,r,a,n){return"reference-size"===r&&i?[1,i.size]:e?[e.minSize,e.maxSize]:we(a,n)}function ge(e,i,r){return"reference-size"===r&&i?[1,i.size]:e?[e.minSize,e.maxSize]:null}function Se(e,i){if("reference-size"===i.theme&&null!=e.min&&null!=e.max&&null!=e.avg&&null!=e.stddev){const i=100,r=0,a=0,n=1,s=e.avg,l=e.min,t=e.max,o=e.stddev,m=0!==s?o/s:0,u=l>a&&l<n&&t<2*n&&m<.5,d=l>r&&l<i&&t<2*i&&m<.5;return{minDataValue:u?a:d?r:l,maxDataValue:u?n:d?i:s+2*o,defaultValuesUsed:!1}}const{theme:r,field:a}=i,n=i.layer,s=a&&!("function"==typeof a)?n.getField(a):null,l=X(s);return M(e,r,l,"above"===r||"below"===r)}async function xe(e,i,a,s){const{theme:m,field:d,normalizationField:c,minValue:f,maxValue:y,axis:v}=e,z=e.layer.geometryType,b=await ze({basemap:e.basemap,geometryType:z,sizeScheme:e.sizeScheme,worldScale:e.worldScale,view:e.view}),h=b.scheme;if(!h)throw new r("size-visual-variable:insufficient-info","Unable to find size scheme");const g=await he(a,s,m,h,z),{minDataValue:S,maxDataValue:x,defaultValuesUsed:E}=Se(i,e),T=[],V="height"===v,I=V?v:void 0,O=g[0];let j=g[1];if(V&&"number"==typeof O&&"number"==typeof j){const e=C({minSize:O,maxSize:j},I);T.push(new u({axis:"width-and-depth",minSize:e.minSize})),j=e.maxSize}const k=new u({field:d??void 0,valueExpression:e.valueExpression,valueExpressionTitle:e.valueExpressionTitle,valueUnit:"unknown",normalizationField:c,axis:I,minSize:O,maxSize:j,minDataValue:S,maxDataValue:x,legendOptions:n(p,e.legendOptions)});be(k,m),T.unshift(k);const B=new o("reference-size"===m?{type:"size",field:e.field,normalizationField:e.normalizationField,sizeStops:w(k).map((({label:e,size:i,value:r})=>new t({label:e,size:i,value:r}))),theme:m,referenceSizeScale:s?.isGrid||e.sizeOptimizationEnabled?e?.view?.scale:void 0,referenceSizeSymbolStyle:e.referenceSizeOptions?.symbolStyle,minSliderValue:null!=f?f:i.min,maxSliderValue:null!=y?y:i.max}:{type:"size",theme:m,minSliderValue:null!=f?f:i.min,maxSliderValue:null!=y?y:i.max}),F=new l({visualVariables:[B]});return{basemapId:b.basemapId,basemapTheme:b.basemapTheme,visualVariables:T,statistics:i,isGrid:s?.isGrid,defaultValuesUsed:E,sizeScheme:ie(h),authoringInfo:F}}async function Ee(i,r,a,n,l){const t=await s("esri/smartMapping/t9n/smartMapping"),o=l.layer,m=l.field,u=o.geometryType,d=l.defaultSymbolEnabled,p=ie(i.sizeScheme),c="polygon"===u,f=c?p.marker:p,y=c?p.background:null,v=c?"point":u,z=r?.opacity,h=i.isGrid,S="reference-size"===l.theme,x=S?[]:i.visualVariables.map((e=>e.clone()));r?.visualVariables?.length&&x.push(...r.visualVariables.map((e=>e.clone())));const E=S?b({view:l.view,field:m,normalizationField:n,sizeStops:w(i.visualVariables[0]),sizeByScaleEnabled:h||!!l.sizeOptimizationEnabled}):null;return{renderer:new e({backgroundFillSymbol:!h&&y?$(u,{type:l.symbolType,color:y.color,outline:A(y,u,z)}):null,classBreakInfos:[{minValue:-9007199254740991,maxValue:ne,symbol:E?g({type:l.referenceSizeOptions?.symbolStyle||"circle",color:f.color,primitiveOverrides:E}):$(v,{type:l.symbolType,color:f.color,size:L(f,v),outline:A(f,v,z)})}],defaultLabel:d?t.other:null,defaultSymbol:d&&!S?$(v,{type:l.symbolType,color:f.noDataColor,size:L(f,v,!0),outline:A(f,v,z)}):null,field:m,normalizationField:n,normalizationType:a,valueExpression:l.valueExpression,valueExpressionTitle:l.valueExpressionTitle,visualVariables:x,authoringInfo:i.authoringInfo?.clone()}),visualVariables:i.visualVariables.map((e=>e.clone())),statistics:i.statistics,defaultValuesUsed:i.defaultValuesUsed,isGrid:h,sizeScheme:ie(i.sizeScheme),basemapId:i.basemapId,basemapTheme:i.basemapTheme}}function Te(e,i){const r=a(e.minSize),n=(a(e.maxSize)-r)/(i>=4?i-1:i),s=[];for(let a=0;a<i;a++)s.push(r+n*a);return s}async function Ve(i,r){const a=await s("esri/smartMapping/t9n/smartMapping"),n=i.layer,t=i.defaultSymbolEnabled,o=n.geometryType,u="polygon"===o,d=i.symbolType?.includes("3d-volumetric"),p=await ze({basemap:i.basemap,geometryType:o,sizeScheme:i.sizeScheme,worldScale:d,view:i.view}),c=p.scheme,{result:f,outlineResult:y}=r,v=f?.classBreakInfos??[],z=i.classificationMethod,w=i.normalizationType,b=u?c.marker:c,h=u?c.background:null,g=u?"point":o,S=we(b,g),x=d?C({minSize:S[0],maxSize:S[1]},"height"):null,E=Te({minSize:S[0],maxSize:x?x.maxSize:S[1]},v.length),T=y?.opacity,V=new e({backgroundFillSymbol:h&&$(o,{type:i.symbolType,color:h.color,outline:A(h,o,T)}),classBreakInfos:v.map(((e,r)=>({minValue:e.minValue,maxValue:e.maxValue,symbol:$(g,{type:i.symbolType,color:b.color,size:E[r],widthAndDepth:x?.minSize,outline:A(b,g,T)}),label:e.label}))),defaultLabel:t?a.other:null,defaultSymbol:t?$(g,{type:i.symbolType,color:b.noDataColor,size:L(b,g,!0),widthAndDepth:x?.minSize,outline:A(b,g,T)}):null,field:i.field,valueExpression:i.valueExpression,valueExpressionTitle:i.valueExpressionTitle,normalizationType:w,normalizationField:i.normalizationField,normalizationTotal:"percent-of-total"===w?f?.normalizationTotal:void 0,legendOptions:i.legendOptions,authoringInfo:new l({type:"class-breaks-size",classificationMethod:z,standardDeviationInterval:i.standardDeviationInterval})});return"standard-deviation"!==z&&m({classBreakInfos:V.classBreakInfos,classificationMethod:z,normalizationType:w,round:!0}),y?.visualVariables?.length&&(V.visualVariables=y.visualVariables.map((e=>e.clone()))),{renderer:V,sizeScheme:ie(c),classBreaksResult:f,defaultValuesUsed:!!r.defaultValuesUsed,basemapId:p.basemapId,basemapTheme:p.basemapTheme}}async function Ie(e){const i=await se(e),{view:r,field:a,valueExpression:n,minValue:s,maxValue:l,layer:t,normalizationField:o,signal:m,statistics:u,filter:d}=i,p=o?"field":void 0,[c,f]=await Promise.all([u??R({layer:t,field:a,valueExpression:n,sqlExpression:i.sqlExpression,sqlWhere:i.sqlWhere,normalizationType:p,normalizationField:o,filter:d,minValue:s,maxValue:l,view:r,signal:m}),i.sizeOptimizationEnabled?z({view:r,layer:t,signal:m,filter:d}).catch(q):null]);return xe(i,c,f,i.referenceSizeResult)}async function Oe(e){const{view:i,filter:r,renderer:a,signal:n,creatorParameters:s}=await ce(e),{field:l,normalizationField:o,valueExpression:m,theme:d,layer:p,sizeOptimizationEnabled:c,referenceSizeResult:f,valueExpressionTitle:y}=s,v=o?"field":void 0,[b,h]=await Promise.all([R({layer:p,field:l,valueExpression:m,normalizationField:o,normalizationType:v,filter:r,view:i,signal:n}),c?z({view:i,layer:p,signal:n,filter:r}).catch(q):null]),g=ge(h,f,d),{minDataValue:E,maxDataValue:T}=Se(b,{theme:d,layer:p,field:l}),V=a.visualVariables?.find(S),I=(V?.stops?null:V)??new u({field:l??void 0,valueExpression:m,valueExpressionTitle:y,valueUnit:"unknown",normalizationField:o});g&&(I.minSize=g[0],I.maxSize=g[1]),I.minDataValue=E,I.maxDataValue=T,be(I,d);const O=x(a,"size");return O.minSliderValue=b.min,O.maxSliderValue=b.max,"reference-size"===d&&(O.sizeStops=w(I).map((({label:e,size:i,value:r})=>new t({label:e,size:i,value:r}))),O.referenceSizeScale=f?.isGrid||c?i?.scale:void 0),{visualVariables:"reference-size"===d?[]:[I],isGrid:!!f?.isGrid,authoringInfo:a.authoringInfo?.clone(),statistics:b}}async function je(e){const i=await le(e),r={layer:i.layer,view:i.view,filter:i.filter,signal:i.signal},[a,n]=await Promise.all([Ie(de(i)),i.outlineOptimizationEnabled?y(r).catch(q):null]),s=i.normalizationField;return Ee(a,n,s?"field":void 0,s,i)}async function ke(e){const{renderer:i,view:r,signal:a,filter:n,creatorParameters:s,forBinning:l}=await fe(e),{layer:t,outlineOptimizationEnabled:o,theme:m,referenceSizeResult:u}=s,[d,p]=await Promise.all([Oe({...e,referenceSizeResult:u}),o?y({layer:t,view:r,filter:n,signal:a}).catch(q):null]),c=d.isGrid,f="reference-size"===m;E(i,d.visualVariables,T),E(i,p?.visualVariables,V),I(i,d.authoringInfo,"size");const v=d.statistics;if(!f)return{renderer:i,statistics:v};return{renderer:await Be({layer:t,renderer:i,view:r,forBinning:l,sizeStops:x(i,"size","reference-size")?.sizeStops,isGrid:c}),isGrid:c,statistics:v}}async function Be(e){const{layer:a,referenceSizeOptions:n,renderer:s,sizeScheme:o,sizeStops:m,typeScheme:u,view:d,isGrid:p}=await oe(e),c=s.clone();c.authoringInfo??=new l;const f=c.authoringInfo.visualVariables.find((e=>"reference-size"===e.theme)),y=e.field??f?.field,v=e.normalizationField??f?.normalizationField;if(!y)throw new r("update-renderer-with-reference-size:invalid-parameters","'field' parameter or authoring info with 'field' is required.");const z=b({view:d,field:y,normalizationField:v,sizeStops:m,sizeByScaleEnabled:p||!!e.sizeOptimizationEnabled}),w=n?.symbolStyle||f?.referenceSizeSymbolStyle||"circle";if("class-breaks"===c.type){const e="polygon"===("geometryType"in a?a.geometryType:null)&&o&&"marker"in o?o.marker:null;c.classBreakInfos.forEach((i=>{const r=e?.color??ae(i.symbol,1);"cim"===i.symbol.type?h(i.symbol,{type:w,color:r,primitiveOverrides:z}):r&&(i.symbol=g({type:w,color:r,primitiveOverrides:z}))}))}else if("unique-value"===c.type){const e=c.uniqueValueGroups,r="polygon"===("geometryType"in a?a.geometryType:null)&&u&&"colors"in u?u.colors:null,n=r?i(r,c.uniqueValueInfos?.length??0):null;let s=0;if(e){for(const i of e)for(const e of i.classes??[]){const i=n?n[s]:ae(e.symbol,1);"cim"===e.symbol?.type?h(e.symbol,{type:w,color:i,primitiveOverrides:z}):i&&(e.symbol=g({type:w,color:i,primitiveOverrides:z})),s++}c.uniqueValueGroups=e}}return f&&(f.field=y,f.normalizationField=v,f.sizeStops=m.map((({label:e,size:i,value:r})=>new t({label:e,size:i,value:r}))),f.referenceSizeScale=p||e.sizeOptimizationEnabled?d.scale:void 0,f.referenceSizeSymbolStyle=w),c}async function Fe(e){const i=await me(e);return Ve(i,await D(ue(i),i.outlineOptimizationEnabled))}async function Re(e){const{renderer:i,creatorParameters:a}=await ye(e),{outlineOptimizationEnabled:n,normalizationType:s,classificationMethod:l}=a,{result:t,outlineResult:o}=await D(ue(a),n),u=t.classBreakInfos;if(a.numClasses!==u.length)throw new r("regenerate-class-breaks-renderer:invalid-parameters","The number of class breaks generated does not match the number of class breaks in the renderer.");return i.classBreakInfos.forEach(((e,i)=>{e.minValue=u[i].minValue,e.maxValue=u[i].maxValue,e.label=u[i].label})),i.normalizationTotal="percent-of-total"===s?t.normalizationTotal:void 0,"standard-deviation"!==l&&m({classBreakInfos:i.classBreakInfos,classificationMethod:l,normalizationType:s,round:!0}),E(i,o?.visualVariables,V),{renderer:i}}async function qe(e){const i=await pe(e),{defaultSymbolEnabled:r,view:a,startTime:n,endTime:s,symbolType:l,minValue:t,maxValue:o,signal:m,filter:u,layer:d}=i,[p,c]=await Promise.all([i.unit?{unit:i.unit,statistics:null,valueExpression:null}:await f({view:a,layer:d,startTime:n,endTime:s,minValue:t,maxValue:o,signal:m,filter:u}),i.outlineOptimizationEnabled?y({layer:d,view:a,filter:u,signal:m}).catch(q):null]),{unit:v,statistics:z}=p,{valueExpression:w,title:b}=await U(i,v),h=await Ie(de({layer:d,basemap:i.basemap,valueExpression:w,symbolType:l,statistics:z,legendOptions:{title:b},theme:i.theme,sizeScheme:i.sizeScheme,sizeOptimizationEnabled:i.sizeOptimizationEnabled,view:i.view,minValue:t,maxValue:o,filter:u,signal:m})),g={layer:d,valueExpression:w,defaultSymbolEnabled:r,symbolType:l},S=await Ee(h,c,null,null,g),x=S.renderer.authoringInfo?.visualVariables;return x?.forEach((e=>G(e,n,s,v))),{...S,unit:v}}async function De(e){const{renderer:i,creatorParameters:r}=await ve(e),{layer:a,outlineOptimizationEnabled:n,sizeOptimizationEnabled:s,startTime:l,endTime:t,theme:o,view:m,signal:u,filter:d}=r,[p,c]=await Promise.all([f({view:m,layer:a,startTime:l,endTime:t,signal:u,filter:d}),n?y({layer:a,view:m,filter:d,signal:u}).catch(q):null]),{unit:v,statistics:z}=p,{valueExpression:w,title:b}=await U(r,v),h=await Ie(de({layer:a,valueExpression:w,statistics:z,legendOptions:{title:b},sizeOptimizationEnabled:s,theme:o,view:m,filter:d,signal:u}));E(i,h.visualVariables,T),E(i,c?.visualVariables,V),i.authoringInfo=h.authoringInfo.clone();const g=i.authoringInfo?.visualVariables;return g?.forEach((e=>G(e,l,t,v))),{renderer:i}}export{qe as createAgeRenderer,Fe as createClassBreaksRenderer,je as createContinuousRenderer,Ie as createVisualVariables,De as regenerateAgeRenderer,Re as regenerateClassBreaksRenderer,ke as regenerateContinuousRenderer,Oe as regenerateVisualVariables,Be as updateRendererWithReferenceSize};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.32/esri/copyright.txt for details.
4
4
  */
5
- import e from"../../core/Error.js";import i from"../../renderers/support/AuthoringInfo.js";import a from"../../renderers/support/ClassBreakInfo.js";import s from"../../renderers/visualVariables/support/SizeStop.js";import{getSize as o}from"../../renderers/visualVariables/support/visualVariableUtils.js";import{createVisualVariable as n}from"./color.js";import{createVisualVariables as l,createContinuousRenderer as t,regenerateContinuousRenderer as r}from"./size.js";import{isColorVV as u,updateAuthoringInfoVisualVariable as p,spliceVisualVariables as m,findSizeVVIndex as c,getAuthoringInfoVisualVariable as v,processRegenerateParams as d,getRendererToUpdate as f,getStyleType as b,hasOutlineVV as y,hasScaleDependentSizeVV as w}from"./support/regenerateUtils.js";import{verifyBasicFieldValidity as h,createStopValuesForAboveBelow as z,clampAboveAndBelowStopValues as g,createDefaultStopValues as V}from"./support/utils.js";import{verifyBinningParams as O}from"../support/binningUtils.js";import{isAnyDateField as x,getFieldsList as E}from"../support/utils.js";import{binningCapableLayerTypes as S,featureCapableLayerTypes as I,createLayerAdapter as T,getLayerTypeLabels as j}from"../support/adapters/support/layerUtils.js";import{getAboveAndBelowSymbols as B}from"../symbology/support/aboveAndBelowUtils.js";import{applyCIMSymbolColor as q}from"../../symbols/support/cimSymbolUtils.js";import{Symbol3DMaterial as D}from"../../symbols/support/Symbol3DMaterial.js";const U=2**53-1;async function C(i){if(!i?.layer||!(i.field||i.valueExpression||i.sqlExpression))throw new e("univariate-colorsize-visual-variables:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(i.valueExpression&&!i.sqlExpression&&!i.view)throw new e("univariate-colorsize-visual-variables:missing-parameters","View is required when 'valueExpression' is specified");if("above-and-below"===i.theme&&i.sizeOptions?.sizeOptimizationEnabled)throw new e("univariate-colorsize-visual-variables:invalid-parameters","sizeOptimizationEnabled cannot be true for 'above-and-below' theme");i.forBinning&&O(i,"univariate-colorsize-visual-variables");const a={...i,layer:i.layer},s=i.forBinning?S:I,o=T(a.layer,s,i.forBinning);if(!o)throw new e("univariate-colorsize-visual-variables:invalid-parameters","'layer' must be one of these types: "+j(s).join(", "));a.layer=o,a.theme=a.theme||a.colorOptions?.theme?a.theme:"high-to-low";const n=null!=a.signal?{signal:a.signal}:null;await o.load(n);const l=await E({field:a.field,normalizationField:a.normalizationField,valueExpression:a.valueExpression}),t=h(o,l,"univariate-colorsize-visual-variables:invalid-parameters");if(t)throw t;return a}function F(e,i){const a={...e},{sizeOptions:s,theme:o}=a,n=a.legendOptions||a.sizeOptions?.legendOptions;return delete a.sizeOptions,delete a.colorOptions,{...a,...s,statistics:i||a.statistics,theme:"above-and-below"===o?null:o,legendOptions:n}}function k(e,i){const a={...e},s=a.colorOptions,o=a.theme||s?.theme,n=a.legendOptions||a.colorOptions?.legendOptions;return delete a.sizeOptions,delete a.colorOptions,{...a,...s,statistics:i||a.statistics,theme:o,legendOptions:n}}async function A(i){if(!i?.layer||!(i.field||i.valueExpression||i.sqlExpression))throw new e("univariate-colorsize-continuous-renderer:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(i.valueExpression&&!i.sqlExpression&&!i.view)throw new e("univariate-colorsize-continuous-renderer:missing-parameters","View is required when 'valueExpression' is specified");i.forBinning&&O(i,"univariate-colorsize-continuous-renderer");const a={...i,layer:i.layer};a.symbolType=a.symbolType||"2d",a.colorOptions||(a.colorOptions={}),a.colorOptions.isContinuous=a.colorOptions.isContinuous??!1;const s=i.forBinning?S:I,o=T(a.layer,s,i.forBinning);if(!o)throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+j(s).join(", "));const n=null!=a.signal?{signal:a.signal}:null;if(await o.load(n),"above-and-below"===a.theme&&a.symbolOptions){if(a.symbolType.includes("3d-volumetric"))throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'symbolOptions' is applicable for '2d' and '3d-flat' 'symbolType' only");if("point"!==o.geometryType&&"polygon"!==o.geometryType)throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'symbolOptions' only apply to layers with 'point' or 'polygon' geometryType")}const l=await E({field:a.field,normalizationField:a.normalizationField,valueExpression:a.valueExpression}),t=h(o,l,"univariate-colorsize-continuous-renderer:invalid-parameters");if(t)throw t;return{...a,layer:o}}function M(e){const i={...e},a={...i.sizeOptions};return delete i.sizeOptions,delete i.colorOptions,delete a.sizeOptimizationEnabled,{...i,...a}}async function P(i){const a="regenerate-univariate-color-size-renderer";await d(i,a);const s=await f(i);if("univariate-color-size"!==b(s))throw new e(`${a}:invalid-parameters`,"Renderer is invalid");const{layer:o,forBinning:n,filter:l,view:t,signal:r}=i,{field:u,normalizationField:p,valueExpression:m,valueExpressionTitle:c}=s,v=y(s),h=w(s),z=s.authoringInfo?.univariateTheme,g=await A({layer:o,field:u,normalizationField:p,valueExpression:m,valueExpressionTitle:c,outlineOptimizationEnabled:v,theme:z,colorOptions:{isContinuous:"above-and-below"===z?s.visualVariables?.some((e=>"color"===e.type)):void 0},sizeOptions:{sizeOptimizationEnabled:h},forBinning:n,filter:l,view:t,signal:r});return{...i,creatorParameters:g,renderer:s}}function R(e,i){if("type"in e&&"cim"===e.type)q(e,i);else if("type"in e&&e.type.includes("3d")){e.symbolLayers.forEach((e=>{"material"in e&&null!=e.material&&"color"in e.material&&(e.material?e.material.color=i:e.material=new D({color:i}))}))}else"color"in e&&(e.color=i)}function L(e,i,a){if((i?.symbolStyle||i?.symbols)&&("point"===a||"polygon"===a))return i.symbols||B(i.symbolStyle);const s=e.classBreakInfos[0].symbol;return{above:s.clone(),below:s.clone()}}function $(e,i,s){const o=s.symbolOptions,n=s.layer,l=o?.symbols?"custom":o?.symbolStyle,t=s.colorOptions?.isContinuous;if(G(e,i,t),l||!t){const s=i.size.visualVariables[0].stops,{above:r,below:u}=L(e,o,n.geometryType);if(!t){const e=i.color.colorScheme.colors,a=e[0];R(r,e[e.length-1]),R(u,a)}e.classBreakInfos=[new a({minValue:-U,maxValue:s[2].value,symbol:u}),new a({minValue:s[2].value,maxValue:U,symbol:r})],l&&e.authoringInfo&&(e.authoringInfo.univariateSymbolStyle=l)}}function G(e,i,a=!0){const s=i?.authoringInfo?.clone(),o=s?.visualVariables?.some((e=>"reference-size"===e.theme)),n=o?[]:i.size.visualVariables.map((e=>e.clone()));a?n.push(i.color.visualVariable.clone()):s.visualVariables=s.visualVariables?.filter((e=>"size"===e.type)),e.visualVariables&&n.push(...e.visualVariables.filter((e=>"target"in e&&"outline"===e.target)).map((e=>e.clone()))),e.authoringInfo=s,e.visualVariables=n}function H(e){const i={...e},a=i.symbolType,s=!!a?.includes("3d-volumetric");delete i.symbolType,delete i.defaultSymbolEnabled;const o=i;return o.worldScale=s,s&&(o.sizeOptions={...o.sizeOptions},o.sizeOptions.axis="3d-volumetric-uniform"===a?"all":"height"),o}async function J(e,i,a,n){const l=i[0],t=i[1],r=Math.round((t-l)/2)+l,u=e.clone();u.stops=[new s({value:a[0],size:t}),new s({value:a[1],size:r}),new s({value:a[2],size:l}),new s({value:a[3],size:r}),new s({value:a[4],size:t})],e.stops=[new s({value:n[0],size:o(u,n[0])}),new s({value:n[1],size:o(u,n[1])}),new s({value:n[2],size:o(u,n[2])}),new s({value:n[3],size:o(u,n[3])}),new s({value:n[4],size:o(u,n[4])})]}async function K(e,i,a,s,o){const n=e.find((e=>"width-and-depth"!==e.axis&&!e.target)),l="number"==typeof n?.minSize?n?.minSize:null,t="number"==typeof n?.maxSize?n?.maxSize:null;if(null!=n?.minDataValue&&null!=l&&null!=t)if(s)if("above-and-below"===s){n.minDataValue=null,n.maxDataValue=null,n.minSize=null,n.maxSize=null;const e=z(a,o),s=g(e,a);await J(n,[l,t],e,s),i.stops.forEach(((e,i)=>e.value=s[i]))}else{const{minDataValue:e,maxDataValue:a}=n,s=V(e,a,5);i.stops.forEach(((e,i)=>e.value=s[i])),n.minDataValue=s[0],n.maxDataValue=s[s.length-1]}else n.minDataValue=i.stops[0].value,n.maxDataValue=i.stops[i.stops.length-1].value}function N(e,a,s){const{theme:o,minValue:n,maxValue:l}=e,t=a.authoringInfo.visualVariables[0].clone(),r=s.authoringInfo.visualVariables[0].clone(),{stops:u}=a.visualVariable;return"above-and-below"===o?(t.minSliderValue=r.minSliderValue=n??u[0].value,t.maxSliderValue=r.maxSliderValue=l??u.at(-1)?.value,r.theme="above-and-below"):o&&"high-to-low"!==o||"reference-size"!==r.theme||2!==r.sizeStops?.length||(r.sizeStops[0].value=u[0].value,r.sizeStops[1].value=u.at(-1)?.value),new i({type:"univariate-color-size",univariateTheme:o,visualVariables:[t,r]})}async function Q(e){const i=await C(e),a=await n(k(i)),{visualVariable:s,statistics:o}=a,t=await l(F(i,o)),r=t.visualVariables,u=e.layer,p=e.field?u.getField(e.field):null;return await K(r,s,o,i.theme,x(p)),{basemapId:t.basemapId,basemapTheme:t.basemapTheme,statistics:o,defaultValuesUsed:a.defaultValuesUsed,color:{visualVariable:s,colorScheme:a.colorScheme},size:{visualVariables:r,sizeScheme:t.sizeScheme},authoringInfo:N(i,a,t)}}async function W(e){return X(e)}async function X(e){const i=await A(e),{renderer:a,statistics:s,defaultValuesUsed:o}=await t(M(i)),n=H(i);n.statistics=s;const l=await Q(n);return"above-and-below"===i.theme?$(a,l,i):G(a,l),{renderer:a,statistics:s,defaultValuesUsed:o,color:i.colorOptions?.isContinuous||"above-and-below"!==i.theme?l.color:null,size:l.size,basemapId:l.basemapId,basemapTheme:l.basemapTheme}}async function Y(e){const{creatorParameters:i}=await P(e),{layer:a,field:s,theme:o,colorOptions:t}=i,{renderer:d,statistics:f}=await r(e),b=await C({...H(i),statistics:f}),y=await n(k(b)),w=y.visualVariable,h=(await l(F(b))).visualVariables,z=s?a.getField(s):null;await K(h,w,f,o,x(z));const g=t?.isContinuous||"above-and-below"!==o,V=d.visualVariables?.find(u);g&&V?.stops&&(V.stops.forEach(((e,i)=>e.value=w.stops[i].value)),p(d,y.authoringInfo,"color")),m(d,h,c);const O=v(d,"size");if((!o||"high-to-low"===o)&&O&&"reference-size"===O.theme&&2===O.sizeStops?.length){const{stops:e}=w;O.sizeStops[0].value=e[0].value,O.sizeStops[1].value=e.at(-1)?.value}if("above-and-below"===o&&h[0]?.stops){const e=h[0].stops;d.classBreakInfos[0].maxValue=e[2].value,d.classBreakInfos[1].minValue=e[2].value}return{renderer:d}}export{W as createContinuousRenderer,X as createRenderer,Q as createVisualVariables,Y as regenerateRenderer};
5
+ import e from"../../core/Error.js";import i from"../../renderers/support/AuthoringInfo.js";import a from"../../renderers/support/ClassBreakInfo.js";import s from"../../renderers/visualVariables/support/SizeStop.js";import{getSize as o}from"../../renderers/visualVariables/support/visualVariableUtils.js";import{createVisualVariable as n}from"./color.js";import{createVisualVariables as l,createContinuousRenderer as t,regenerateContinuousRenderer as r}from"./size.js";import{isColorVV as u,updateAuthoringInfoVisualVariable as p,spliceVisualVariables as m,findSizeVVIndex as c,getAuthoringInfoVisualVariable as v,processRegenerateParams as d,getRendererToUpdate as f,getStyleType as b,hasOutlineVV as y,hasScaleDependentSizeVV as w}from"./support/regenerateUtils.js";import{verifyBasicFieldValidity as h,createStopValuesForAboveBelow as z,clampAboveAndBelowStopValues as g,createDefaultStopValues as V}from"./support/utils.js";import{verifyBinningParams as O}from"../support/binningUtils.js";import{isAnyDateField as x,getFieldsList as E}from"../support/utils.js";import{binningCapableLayerTypes as S,featureCapableLayerTypes as I,createLayerAdapter as T,getLayerTypeLabels as j}from"../support/adapters/support/layerUtils.js";import{getAboveAndBelowSymbols as B}from"../symbology/support/aboveAndBelowUtils.js";import{applyCIMSymbolColor as q}from"../../symbols/support/cimSymbolUtils.js";import{Symbol3DMaterial as D}from"../../symbols/support/Symbol3DMaterial.js";const U=2**53-1;async function C(i){if(!i?.layer||!(i.field||i.valueExpression||i.sqlExpression))throw new e("univariate-colorsize-visual-variables:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(i.valueExpression&&!i.sqlExpression&&!i.view)throw new e("univariate-colorsize-visual-variables:missing-parameters","View is required when 'valueExpression' is specified");if("above-and-below"===i.theme&&i.sizeOptions?.sizeOptimizationEnabled)throw new e("univariate-colorsize-visual-variables:invalid-parameters","sizeOptimizationEnabled cannot be true for 'above-and-below' theme");i.forBinning&&O(i,"univariate-colorsize-visual-variables");const a={...i,layer:i.layer},s=i.forBinning?S:I,o=T(a.layer,s,i.forBinning);if(!o)throw new e("univariate-colorsize-visual-variables:invalid-parameters","'layer' must be one of these types: "+j(s).join(", "));a.layer=o,a.theme=a.theme||a.colorOptions?.theme?a.theme:"high-to-low";const n=null!=a.signal?{signal:a.signal}:null;await o.load(n);const l=await E({field:a.field,normalizationField:a.normalizationField,valueExpression:a.valueExpression}),t=h(o,l,"univariate-colorsize-visual-variables:invalid-parameters");if(t)throw t;return a}function F(e,i){const a={...e},{sizeOptions:s,theme:o}=a,n=a.legendOptions||a.sizeOptions?.legendOptions;return delete a.sizeOptions,delete a.colorOptions,{...a,...s,statistics:i||a.statistics,theme:"above-and-below"===o?null:o,legendOptions:n}}function k(e,i){const a={...e},s=a.colorOptions,o=a.theme||s?.theme,n=a.legendOptions||a.colorOptions?.legendOptions;return delete a.sizeOptions,delete a.colorOptions,{...a,...s,statistics:i||a.statistics,theme:o,legendOptions:n}}async function A(i){if(!i?.layer||!(i.field||i.valueExpression||i.sqlExpression))throw new e("univariate-colorsize-continuous-renderer:missing-parameters","'layer' and 'field', 'valueExpression' or 'sqlExpression' parameters are required");if(i.valueExpression&&!i.sqlExpression&&!i.view)throw new e("univariate-colorsize-continuous-renderer:missing-parameters","View is required when 'valueExpression' is specified");i.forBinning&&O(i,"univariate-colorsize-continuous-renderer");const a={...i,layer:i.layer};a.symbolType=a.symbolType||"2d",a.colorOptions||(a.colorOptions={}),a.colorOptions.isContinuous=a.colorOptions.isContinuous??!1;const s=i.forBinning?S:I,o=T(a.layer,s,i.forBinning);if(!o)throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'layer' must be one of these types: "+j(s).join(", "));const n=null!=a.signal?{signal:a.signal}:null;if(await o.load(n),"above-and-below"===a.theme&&a.symbolOptions){if(a.symbolType.includes("3d-volumetric"))throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'symbolOptions' is applicable for '2d' and '3d-flat' 'symbolType' only");if("point"!==o.geometryType&&"polygon"!==o.geometryType)throw new e("univariate-colorsize-continuous-renderer:invalid-parameters","'symbolOptions' only apply to layers with 'point' or 'polygon' geometryType")}const l=await E({field:a.field,normalizationField:a.normalizationField,valueExpression:a.valueExpression}),t=h(o,l,"univariate-colorsize-continuous-renderer:invalid-parameters");if(t)throw t;return{...a,layer:o}}function M(e){const i={...e},a={...i.sizeOptions};return delete i.sizeOptions,delete i.colorOptions,delete a.sizeOptimizationEnabled,{...i,...a}}async function P(i){const a="regenerate-univariate-color-size-renderer";await d(i,a);const s=await f(i);if("univariate-color-size"!==b(s))throw new e(`${a}:invalid-parameters`,"Renderer is invalid");const{layer:o,forBinning:n,filter:l,view:t,signal:r}=i,{field:u,normalizationField:p,valueExpression:m,valueExpressionTitle:c}=s,v=y(s),h=w(s),z=s.authoringInfo?.univariateTheme,g=await A({layer:o,field:u,normalizationField:p,valueExpression:m,valueExpressionTitle:c,outlineOptimizationEnabled:v,theme:z,colorOptions:{isContinuous:"above-and-below"===z?s.visualVariables?.some((e=>"color"===e.type)):void 0},sizeOptions:{sizeOptimizationEnabled:h},forBinning:n,filter:l,view:t,signal:r});return{...i,creatorParameters:g,renderer:s}}function R(e,i){if("type"in e&&"cim"===e.type)q(e,i);else if("type"in e&&e.type.includes("3d")){e.symbolLayers.forEach((e=>{"material"in e&&null!=e.material&&"color"in e.material&&(e.material?e.material.color=i:e.material=new D({color:i}))}))}else"color"in e&&(e.color=i)}function L(e,i,a){if((i?.symbolStyle||i?.symbols)&&("point"===a||"polygon"===a))return i.symbols||B(i.symbolStyle);const s=e.classBreakInfos[0].symbol;return{above:s.clone(),below:s.clone()}}function $(e,i,s){const o=s.symbolOptions,n=s.layer,l=o?.symbols?"custom":o?.symbolStyle,t=s.colorOptions?.isContinuous;if(G(e,i,t),l||!t){const s=i.size.visualVariables[0].stops,{above:r,below:u}=L(e,o,n.geometryType);if(!t){const e=i.color.colorScheme.colors,a=e[0];R(r,e[e.length-1]),R(u,a)}e.classBreakInfos=[new a({minValue:-9007199254740991,maxValue:s[2].value,symbol:u}),new a({minValue:s[2].value,maxValue:U,symbol:r})],l&&e.authoringInfo&&(e.authoringInfo.univariateSymbolStyle=l)}}function G(e,i,a=!0){const s=i?.authoringInfo?.clone(),o=s?.visualVariables?.some((e=>"reference-size"===e.theme)),n=o?[]:i.size.visualVariables.map((e=>e.clone()));a?n.push(i.color.visualVariable.clone()):s.visualVariables=s.visualVariables?.filter((e=>"size"===e.type)),e.visualVariables&&n.push(...e.visualVariables.filter((e=>"target"in e&&"outline"===e.target)).map((e=>e.clone()))),e.authoringInfo=s,e.visualVariables=n}function H(e){const i={...e},a=i.symbolType,s=!!a?.includes("3d-volumetric");delete i.symbolType,delete i.defaultSymbolEnabled;const o=i;return o.worldScale=s,s&&(o.sizeOptions={...o.sizeOptions},o.sizeOptions.axis="3d-volumetric-uniform"===a?"all":"height"),o}async function J(e,i,a,n){const l=i[0],t=i[1],r=Math.round((t-l)/2)+l,u=e.clone();u.stops=[new s({value:a[0],size:t}),new s({value:a[1],size:r}),new s({value:a[2],size:l}),new s({value:a[3],size:r}),new s({value:a[4],size:t})],e.stops=[new s({value:n[0],size:o(u,n[0])}),new s({value:n[1],size:o(u,n[1])}),new s({value:n[2],size:o(u,n[2])}),new s({value:n[3],size:o(u,n[3])}),new s({value:n[4],size:o(u,n[4])})]}async function K(e,i,a,s,o){const n=e.find((e=>"width-and-depth"!==e.axis&&!e.target)),l="number"==typeof n?.minSize?n?.minSize:null,t="number"==typeof n?.maxSize?n?.maxSize:null;if(null!=n?.minDataValue&&null!=l&&null!=t)if(s)if("above-and-below"===s){n.minDataValue=null,n.maxDataValue=null,n.minSize=null,n.maxSize=null;const e=z(a,o),s=g(e,a);await J(n,[l,t],e,s),i.stops.forEach(((e,i)=>e.value=s[i]))}else{const{minDataValue:e,maxDataValue:a}=n,s=V(e,a,5);i.stops.forEach(((e,i)=>e.value=s[i])),n.minDataValue=s[0],n.maxDataValue=s[s.length-1]}else n.minDataValue=i.stops[0].value,n.maxDataValue=i.stops[i.stops.length-1].value}function N(e,a,s){const{theme:o,minValue:n,maxValue:l}=e,t=a.authoringInfo.visualVariables[0].clone(),r=s.authoringInfo.visualVariables[0].clone(),{stops:u}=a.visualVariable;return"above-and-below"===o?(t.minSliderValue=r.minSliderValue=n??u[0].value,t.maxSliderValue=r.maxSliderValue=l??u.at(-1)?.value,r.theme="above-and-below"):o&&"high-to-low"!==o||"reference-size"!==r.theme||2!==r.sizeStops?.length||(r.sizeStops[0].value=u[0].value,r.sizeStops[1].value=u.at(-1)?.value),new i({type:"univariate-color-size",univariateTheme:o,visualVariables:[t,r]})}async function Q(e){const i=await C(e),a=await n(k(i)),{visualVariable:s,statistics:o}=a,t=await l(F(i,o)),r=t.visualVariables,u=e.layer,p=e.field?u.getField(e.field):null;return await K(r,s,o,i.theme,x(p)),{basemapId:t.basemapId,basemapTheme:t.basemapTheme,statistics:o,defaultValuesUsed:a.defaultValuesUsed,color:{visualVariable:s,colorScheme:a.colorScheme},size:{visualVariables:r,sizeScheme:t.sizeScheme},authoringInfo:N(i,a,t)}}async function W(e){return X(e)}async function X(e){const i=await A(e),{renderer:a,statistics:s,defaultValuesUsed:o}=await t(M(i)),n=H(i);n.statistics=s;const l=await Q(n);return"above-and-below"===i.theme?$(a,l,i):G(a,l),{renderer:a,statistics:s,defaultValuesUsed:o,color:i.colorOptions?.isContinuous||"above-and-below"!==i.theme?l.color:null,size:l.size,basemapId:l.basemapId,basemapTheme:l.basemapTheme}}async function Y(e){const{creatorParameters:i}=await P(e),{layer:a,field:s,theme:o,colorOptions:t}=i,{renderer:d,statistics:f}=await r(e),b=await C({...H(i),statistics:f}),y=await n(k(b)),w=y.visualVariable,h=(await l(F(b))).visualVariables,z=s?a.getField(s):null;await K(h,w,f,o,x(z));const g=t?.isContinuous||"above-and-below"!==o,V=d.visualVariables?.find(u);g&&V?.stops&&(V.stops.forEach(((e,i)=>e.value=w.stops[i].value)),p(d,y.authoringInfo,"color")),m(d,h,c);const O=v(d,"size");if((!o||"high-to-low"===o)&&O&&"reference-size"===O.theme&&2===O.sizeStops?.length){const{stops:e}=w;O.sizeStops[0].value=e[0].value,O.sizeStops[1].value=e.at(-1)?.value}if("above-and-below"===o&&h[0]?.stops){const e=h[0].stops;d.classBreakInfos[0].maxValue=e[2].value,d.classBreakInfos[1].minValue=e[2].value}return{renderer:d}}export{W as createContinuousRenderer,X as createRenderer,Q as createVisualVariables,Y as regenerateRenderer};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.32/esri/copyright.txt for details.
4
4
  */
5
- import e from"../../core/Error.js";import{getSumOfAttributesExpr as s,verifyBasicFieldValidity as t}from"./support/utils.js";import{verifyBinningParams as r}from"../support/binningUtils.js";import{defaultStatisticTypes as i,getFieldsList as a}from"../support/utils.js";import{LayerType as n,binningCapableLayerTypes as o,createLayerAdapter as u,getLayerTypeLabels as l}from"../support/adapters/support/layerUtils.js";async function p(s){if(!(s&&s.layer&&s.attributes))throw new e("summary-statistics-for-attributes:missing-parameters","'layer' and 'attributes' parameters are required");if(s.attributes.some((e=>!!e.valueExpression))&&!s.view)throw new e("summary-statistics-for-attributes:missing-parameters","View is required when 'valueExpression' is specified in attributes");s.forBinning&&r(s,"summary-statistics-for-attributes");const{layer:i,...p}=s,m=[n.CSVLayer,n.FeatureLayer,n.OGCFeatureLayer,n.GeoJSONLayer,n.WFSLayer],c=s.forBinning?o:m,f=u(i,c,s.forBinning);if(!f)throw new e("summary-statistics-for-attributes:invalid-parameters","'layer' must be one of these types: "+l(c).join(", "));const y={layerAdapter:f,...p};y.includeZeros=null==y.includeZeros||y.includeZeros,y.includeNegatives=null==y.includeNegatives||y.includeNegatives;const d=y.view,w=null!=y.signal?{signal:y.signal}:null;await Promise.all([d?.when(),f.load(w)]);const v=[];for(const e of y.attributes){const s=await a({field:e.field,valueExpression:e.valueExpression});Array.prototype.push.apply(v,s)}const g=t(f,v,"summary-statistics-for-attributes:invalid-parameters");if(g)throw g;return y}async function m(e){const{layerAdapter:t,...r}=await p(e),a=s(r.attributes,r.includeZeros,r.includeNegatives);return t.summaryStatistics({valueExpression:a.valueExpression,sqlExpression:a.sqlExpression,sqlWhere:a.sqlWhere,view:r.view,filter:r.filter,outStatisticTypes:i,signal:r.signal})}export{m as default};
5
+ import e from"../../core/Error.js";import{getSumOfAttributesExpr as s,verifyBasicFieldValidity as t}from"./support/utils.js";import{verifyBinningParams as r}from"../support/binningUtils.js";import{defaultStatisticTypes as i,getFieldsList as a}from"../support/utils.js";import{LayerType as n,binningCapableLayerTypes as o,createLayerAdapter as u,getLayerTypeLabels as l}from"../support/adapters/support/layerUtils.js";async function p(s){if(!(s&&s.layer&&s.attributes))throw new e("summary-statistics-for-attributes:missing-parameters","'layer' and 'attributes' parameters are required");if(s.attributes.some((e=>!!e.valueExpression))&&!s.view)throw new e("summary-statistics-for-attributes:missing-parameters","View is required when 'valueExpression' is specified in attributes");s.forBinning&&r(s,"summary-statistics-for-attributes");const{layer:i,...p}=s,m=[n.CSVLayer,n.FeatureLayer,n.OGCFeatureLayer,n.GeoJSONLayer,n.ParquetLayer,n.WFSLayer],c=s.forBinning?o:m,f=u(i,c,s.forBinning);if(!f)throw new e("summary-statistics-for-attributes:invalid-parameters","'layer' must be one of these types: "+l(c).join(", "));const y={layerAdapter:f,...p};y.includeZeros=null==y.includeZeros||y.includeZeros,y.includeNegatives=null==y.includeNegatives||y.includeNegatives;const d=y.view,w=null!=y.signal?{signal:y.signal}:null;await Promise.all([d?.when(),f.load(w)]);const v=[];for(const e of y.attributes){const s=await a({field:e.field,valueExpression:e.valueExpression});Array.prototype.push.apply(v,s)}const g=t(f,v,"summary-statistics-for-attributes:invalid-parameters");if(g)throw g;return y}async function m(e){const{layerAdapter:t,...r}=await p(e),a=s(r.attributes,r.includeZeros,r.includeNegatives);return t.summaryStatistics({valueExpression:a.valueExpression,sqlExpression:a.sqlExpression,sqlWhere:a.sqlWhere,view:r.view,filter:r.filter,outStatisticTypes:i,signal:r.signal})}export{m as default};
@@ -0,0 +1,5 @@
1
+ /*
2
+ All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
+ See https://js.arcgis.com/4.32/esri/copyright.txt for details.
4
+ */
5
+ const n=Symbol("ImageElementInstance"),e=Symbol("VideoElementInstance");function t(e){return null!=e&&"object"==typeof e&&n in e}function o(n){return null!=n&&"object"==typeof n&&e in n}function c(n){return t(n)||o(n)}export{n as ImageElementSymbol,e as VideoElementSymbol,t as isImageElement,c as isMediaElement,o as isVideoElement};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.32/esri/copyright.txt for details.
4
4
  */
5
- const d="20250106",a="75a956abdbdedb2376d9c36946215a28d51f26d3";export{d as buildDate,a as commitHash};
5
+ const e="20250108",f="fe2a82213efb9748e652f6d8d317312900df26b1";export{e as buildDate,f as commitHash};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.32/esri/copyright.txt for details.
4
4
  */
5
- import{defaultFontFamily as t}from"../../core/fontUtils.js";import has from"../../core/has.js";import{clone as e}from"../../core/lang.js";import r from"../../core/Logger.js";import{deg2rad as i}from"../../core/mathUtils.js";import s from"../../core/ObjectPool.js";import{px2pt as o,pt2px as n}from"../../core/screenUtils.js";import{GeometryCursor as a}from"../../geometry/GeometryCursor.js";import{fromValues as l,create as h,expandPointInPlace as c,center as m,width as f,height as u,diagonal as d}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as g}from"../../geometry/support/boundsUtils.js";import{polygonCentroid as p}from"../../geometry/support/centroid.js";import{isPoint as _,isPolygon as y,isPolyline as P,isExtent as S,isMultipoint as w}from"../../geometry/support/jsonUtils.js";import{SimpleEffectCursor as x}from"./CIMEffects.js";import M from"./CIMImageColorSubstitutionHelper.js";import{getEffectOperator as b,getPlacementOperator as k}from"./CIMOperators.js";import{Placement as C}from"./CIMPlacements.js";import{defaultCIMValues as v}from"./defaultCIMValues.js";import{LineCapStyle as I,LineJoinStyle as T}from"./enums.js";import{getFirstFrame as R}from"./imageUtils.js";import{rotate as z}from"./mathUtils.js";import{addColorStops as L}from"./rasterizingUtils.js";import F from"./Rect.js";import U from"./TextRasterizer.js";import{getNumericValue as A,isCIMFill as j,getSize as G,isSVGImage as D,getRelativeGradientSize as H,fromCIMFontDecoration as B,fromCIMFontStyle as E,fromCIMHorizontalAlignment as X,fromCIMVerticalAlignment as J,getFillColor as N,getStrokeColor as O,getStrokeWidth as q,getFontStyle as V,getFontWeight as W}from"./utils.js";import{destroyHiddenSvg as Y,createHiddenSvg as $,createSvgElement as K}from"../../views/2d/engine/svgUtils.js";import{glyphSize as Q,magicLabelLineHeight as Z,hittestToleranceSmallSymbol as tt,hittestSmallSymbolThreshold as et}from"../../views/2d/engine/webgl/definitions.js";import{shapeGlyphs as rt}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";import{roundPtToWholePixel as it,getLineWidth as st}from"../../views/2d/layers/graphics/graphicsUtils.js";const ot=Math.PI/180,nt=.5,at=()=>r.getLogger("esri.symbols.cim.CIMSymbolDrawHelper");class lt{constructor(t){this._t=t}static createIdentity(){return new lt([1,0,0,0,1,0])}clone(){const t=this._t;return new lt(t.slice())}transform(t){const e=this._t;return[e[0]*t[0]+e[1]*t[1]+e[2],e[3]*t[0]+e[4]*t[1]+e[5]]}static createScale(t,e){return new lt([t,0,0,0,e,0])}scale(t,e){const r=this._t;return r[0]*=t,r[1]*=t,r[2]*=t,r[3]*=e,r[4]*=e,r[5]*=e,this}scaleRatio(){return Math.sqrt(this._t[0]*this._t[0]+this._t[1]*this._t[1])}static createTranslate(t,e){return new lt([0,0,t,0,0,e])}translate(t,e){const r=this._t;return r[2]+=t,r[5]+=e,this}static createRotate(t){const e=Math.cos(t),r=Math.sin(t);return new lt([e,-r,0,r,e,0])}rotate(t){return lt.multiply(this,lt.createRotate(t),this)}angle(){const t=this._t[0],e=this._t[3],r=Math.sqrt(t*t+e*e);return[t/r,e/r]}static multiply(t,e,r){const i=t._t,s=e._t,o=i[0]*s[0]+i[3]*s[1],n=i[1]*s[0]+i[4]*s[1],a=i[2]*s[0]+i[5]*s[1]+s[2],l=i[0]*s[3]+i[3]*s[4],h=i[1]*s[3]+i[4]*s[4],c=i[2]*s[3]+i[5]*s[4]+s[5],m=r._t;return m[0]=o,m[1]=n,m[2]=a,m[3]=l,m[4]=h,m[5]=c,r}invert(){const t=this._t;let e=t[0]*t[4]-t[1]*t[3];if(0===e)return new lt([0,0,0,0,0,0]);e=1/e;const r=(t[1]*t[5]-t[2]*t[4])*e,i=(t[2]*t[3]-t[0]*t[5])*e,s=t[4]*e,o=-t[1]*e,n=-t[3]*e,a=t[0]*e;return new lt([s,o,r,n,a,i])}}class ht{constructor(t,e){this._resourceManager=t,this._transfos=[],this._sizeTransfos=[],this._geomUnitsPerPoint=1,this._placementPool=new s(C,void 0,void 0,100),this._earlyReturn=!1,this._mapRotation=0,this._transfos.push(e||lt.createIdentity()),this._sizeTransfos.push(e?e.scaleRatio():1)}setTransform(t,e){this._transfos=[t||lt.createIdentity()],this._sizeTransfos=[e||(t?t.scaleRatio():1)]}setGeomUnitsPerPoint(t){this._geomUnitsPerPoint=t}transformPt(t){return this._transfos[this._transfos.length-1].transform(t)}transformSize(t){return t*this._sizeTransfos[this._sizeTransfos.length-1]}reverseTransformPt(t){return this._transfos[this._transfos.length-1].invert().transform(t)}reverseTransformSize(t){return t/this._sizeTransfos[this._sizeTransfos.length-1]}reverseTransformScalar(t){return t/this._transfos[this._transfos.length-1].scaleRatio()}getTransformAngle(){return this._transfos[this._transfos.length-1].angle()}geomUnitsPerPoint(){return this.isEmbedded()?1:this._geomUnitsPerPoint}prevGeomUnitsPerPoint(){return this._transfos.length>2?1:this._geomUnitsPerPoint}isEmbedded(){return this._transfos.length>1}back(){return this._transfos[this._transfos.length-1]}push(t,e){const r=e?t.scaleRatio():1;lt.multiply(t,this.back(),t),this._transfos.push(t),this._sizeTransfos.push(this._sizeTransfos[this._sizeTransfos.length-1]*r)}pop(){this._transfos.splice(-1,1),this._sizeTransfos.splice(-1,1)}drawSymbol(t,e,r){if(t)switch(t.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":this.drawMultiLayerSymbol(t,e);break;case"CIMTextSymbol":this.drawTextSymbol(t,e,r)}}drawMultiLayerSymbol(t,e){if(!t||!e)return;const r=t.symbolLayers;if(!r)return;const i=t.effects;if(i&&i.length>0){const t=this.executeEffects(i,e);if(t){let e=t.next();for(;e;)this.drawSymbolLayers(r,e.asJSON()),e=t.next()}}else this.drawSymbolLayers(r,e)}executeEffects(t,e){const r=this._resourceManager.geometryEngine;let i=new x(a.fromJSONCIM(e));for(const s of t){const t=b(s);t&&(i=t.execute(i,s,this.geomUnitsPerPoint(),null,r))}return i}drawSymbolLayers(t,e){let r=t.length;for(;r--;){const i=t[r];if(!i||!1===i.enable)continue;const s=i.effects;if(s&&s.length>0){const t=this.executeEffects(s,e);if(t){let e=null;for(;(e=t.next())&&(this.drawSymbolLayer(i,e.asJSON()),!this._earlyReturn););}}else this.drawSymbolLayer(i,e);if(this._earlyReturn)return}}drawSymbolLayer(t,e){switch(t.type){case"CIMSolidFill":this.drawSolidFill(e,t.color,t.path);break;case"CIMHatchFill":this.drawHatchFill(e,t);break;case"CIMPictureFill":this.drawPictureFill(e,t);break;case"CIMGradientFill":this.drawGradientFill(e,t);break;case"CIMSolidStroke":this.drawSolidStroke(e,t.color,t.width,t.capStyle,t.joinStyle,t.miterLimit,t.path);break;case"CIMPictureStroke":this.drawPictureStroke(e,t);break;case"CIMGradientStroke":this.drawGradientStroke(e,t);break;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":this.drawMarkerLayer(t,e)}}drawHatchFill(t,e){const r=ut(e,t,this.geomUnitsPerPoint());r&&(this.pushClipPath(t),this.drawMultiLayerSymbol(e.lineSymbol,r),this.popClipPath())}drawPictureFill(t,e){}drawGradientFill(t,e){}drawPictureStroke(t,e){}drawGradientStroke(t,e){}drawMarkerLayer(t,e){const r=t.markerPlacement;if(r){const i=k(r);if(i){const s="CIMMarkerPlacementInsidePolygon"===r.type||"CIMMarkerPlacementPolygonCenter"===r.type&&r.clipAtBoundary;s&&this.pushClipPath(e);const o=i.execute(a.fromJSONCIM(e),r,this.geomUnitsPerPoint(),null,this._resourceManager.geometryEngine);if(o){let e=null;for(;(e=o.next())&&(this.drawMarker(t,e),!this._earlyReturn););}s&&this.popClipPath()}}else{const r=this._placementPool.acquire();if(_(e))r.tx=e.x,r.ty=e.y,this.drawMarker(t,r);else if(y(e)){const i=p(e);i&&([r.tx,r.ty]=i,this.drawMarker(t,r))}else for(const i of e.points)if(r.tx=i[0],r.ty=i[1],this.drawMarker(t,r),this._earlyReturn)break;this._placementPool.release(r)}}drawMarker(t,e){switch(t.type){case"CIMCharacterMarker":case"CIMPictureMarker":this.drawPictureMarker(t,e);break;case"CIMVectorMarker":this.drawVectorMarker(t,e)}}drawPictureMarker(t,e){if(!t)return;const r=this._resourceManager.getResource(t.url),i=A(t.size,v.CIMPictureMarker.size);if(null==r||i<=0)return;const s=r.width,o=r.height;if(!s||!o)return;const n=s/o,a=A(t.scaleX,1),l=lt.createIdentity(),h=t.anchorPoint;if(h){let e=h.x,r=h.y;"Absolute"!==t.anchorPointUnits&&(e*=i*n*a,r*=i),l.translate(-e,-r)}let c=A(t.rotation);t.rotateClockwise&&(c=-c),this._mapRotation&&(c+=this._mapRotation),c&&l.rotate(c*ot);let m=A(t.offsetX),f=A(t.offsetY);if(m||f){if(this._mapRotation){const t=ot*this._mapRotation,e=Math.cos(t),r=Math.sin(t),i=m*r+f*e;m=m*e-f*r,f=i}l.translate(m,f)}const u=this.geomUnitsPerPoint();1!==u&&l.scale(u,u);const d=e.getAngle();d&&l.rotate(d),l.translate(e.tx,e.ty),this.push(l,!1),this.drawImage(t,i),this.pop()}drawVectorMarker(t,e){if(!t)return;const r=t.markerGraphics;if(!r)return;const i=A(t.size,v.CIMVectorMarker.size),s=t.frame,o=s?s.ymax-s.ymin:0,n=i&&o?i/o:1,a=lt.createIdentity();s&&a.translate(.5*-(s.xmax+s.xmin),.5*-(s.ymax+s.ymin));const l=t.anchorPoint;if(l){let e=l.x,r=l.y;"Absolute"!==t.anchorPointUnits?s&&(e*=s.xmax-s.xmin,r*=s.ymax-s.ymin):(e/=n,r/=n),a.translate(-e,-r)}1!==n&&a.scale(n,n);let h=A(t.rotation);t.rotateClockwise&&(h=-h),this._mapRotation&&(h+=this._mapRotation),h&&a.rotate(h*ot);let c=A(t.offsetX),m=A(t.offsetY);if(c||m){if(this._mapRotation){const t=ot*this._mapRotation,e=Math.cos(t),r=Math.sin(t),i=c*r+m*e;c=c*e-m*r,m=i}a.translate(c,m)}const f=this.geomUnitsPerPoint();1!==f&&a.scale(f,f);const u=e.getAngle();u&&a.rotate(u),a.translate(e.tx,e.ty),this.push(a,t.scaleSymbolsProportionally);for(const d of r){d?.symbol&&d.geometry||at().error("Invalid marker graphic",d);let t=d.textString;if("number"==typeof t&&(t=t.toString()),this.drawSymbol(d.symbol,d.geometry,t),this._earlyReturn)break}this.pop()}drawTextSymbol(t,e,r){if(!t)return;if(!_(e))return;if(A(t.height,v.CIMTextSymbol.height)<=0)return;const i=lt.createIdentity();let s=A(t.angle);s=-s,s&&i.rotate(s*ot);const o=A(t.offsetX),n=A(t.offsetY);(o||n)&&i.translate(o,n);const a=this.geomUnitsPerPoint();1!==a&&i.scale(a,a),i.translate(e.x,e.y),this.push(i,!1),this.drawText(t,r),this.pop()}}class ct extends ht{constructor(t,e){super(t,e),this.reset()}reset(){this._xmin=this._ymin=1/0,this._xmax=this._ymax=-1/0,this._clipCount=0}envelope(){return new F(this._xmin,this._ymin,this._xmax-this._xmin,this._ymax-this._ymin)}bounds(){return l(this._xmin,this._ymin,this._xmax,this._ymax)}drawSolidFill(t){if(t&&!(this._clipCount>0))if(y(t))this._processPath(t.rings,0);else if(P(t))this._processPath(t.paths,0);else if(S(t)){const e=_t(t);e&&this._processPath(e.rings,0)}else console.error("drawSolidFill Unexpected geometry type!")}drawSolidStroke(t,e,r){if(!t||this._clipCount>0||null==r||r<=0)return;const i=Math.max(.5*this.transformSize(A(r,v.CIMSolidStroke.width)),.5*nt);if(y(t))this._processPath(t.rings,i);else if(P(t))this._processPath(t.paths,i);else if(S(t)){const e=_t(t);e&&this._processPath(e.rings,i)}else console.error("drawSolidStroke unexpected geometry type!")}drawMarkerLayer(t,e){y(e)&&t.markerPlacement&&("CIMMarkerPlacementInsidePolygon"===t.markerPlacement.type||"CIMMarkerPlacementPolygonCenter"===t.markerPlacement.type&&t.markerPlacement.clipAtBoundary)?this._processPath(e.rings,0):super.drawMarkerLayer(t,e)}drawHatchFill(t,e){this.drawSolidFill(t)}drawPictureFill(t,e){this.drawSolidFill(t)}drawGradientFill(t,e){this.drawSolidFill(t)}drawPictureStroke(t,e){this.drawSolidStroke(t,null,e.width)}drawGradientStroke(t,e){this.drawSolidStroke(t,null,e.width)}pushClipPath(t){this.drawSolidFill(t),this._clipCount++}popClipPath(){this._clipCount--}drawImage(t,e){const{url:r}=t,i=A(t.scaleX,1);let s=i*e,o=e;const n=this._resourceManager.getResource(r);if(null!=n){const t=n.height/n.width;s=i*(e?t>1?e:e/t:n.width),o=e?t>1?e*t:e:n.height}this._merge(this.transformPt([-s/2,-o/2]),0),this._merge(this.transformPt([-s/2,o/2]),0),this._merge(this.transformPt([s/2,-o/2]),0),this._merge(this.transformPt([s/2,o/2]),0)}drawText(t,e){if(!e||0===e.length)return;this._textRasterizer||(this._textRasterizer=new U);const r=Pt(t);let[i,s]=this._textRasterizer.computeTextSize(e,r);i=o(i),s=o(s);const n=this.transformSize(1)*this.reverseTransformScalar(1);i*=n,s*=n;let a=0;switch(t.horizontalAlignment){case"Left":a=i/2;break;case"Right":a=-i/2}let l=0;switch(t.verticalAlignment){case"Bottom":l=s/2;break;case"Top":l=-s/2;break;case"Baseline":l=s/6}this._merge(this.transformPt([-i/2+a,-s/2+l]),0),this._merge(this.transformPt([-i/2+a,s/2+l]),0),this._merge(this.transformPt([i/2+a,-s/2+l]),0),this._merge(this.transformPt([i/2+a,s/2+l]),0)}_processPath(t,e){if(t)for(const r of t){const t=r?r.length:0;if(t>1){this._merge(this.transformPt(r[0]),e);for(let i=1;i<t;i++)this._merge(this.transformPt(r[i]),e)}}}_merge(t,e){t[0]-e<this._xmin&&(this._xmin=t[0]-e),t[0]+e>this._xmax&&(this._xmax=t[0]+e),t[1]-e<this._ymin&&(this._ymin=t[1]-e),t[1]+e>this._ymax&&(this._ymax=t[1]+e)}}class mt extends ht{constructor(){super(...arguments),this._searchPoint=[0,0],this._searchDistPoint=0,this._textInfo=null,this._svg=null,this._path=null,this._canvas=null}destroy(){this._svg=Y(this._svg),this._path=null,this._canvas=null}hitTest(t,e,r,i,s,a){const l=a*n(1);this.setTransform(),this.setGeomUnitsPerPoint(l),this._searchPoint=[(t[0]+t[2])/2,(t[1]+t[3])/2],this._searchDistPoint=(t[2]-t[0])/2/l,this._textInfo=i;const h=e&&("CIMPointSymbol"===e.type&&"Map"!==e.angleAlignment||"CIMTextSymbol"===e.type);if(this._mapRotation=h?s:0,!has("esri-mobile")){const t=o(tt*window.devicePixelRatio),r=o(et);!(("CIMLineSymbol"===e?.type||"CIMPolygonSymbol"===e?.type)&&e.symbolLayers?.some(j))&&"CIMMeshSymbol"!==e?.type&&(G(e)??0)<r&&(this._searchDistPoint=t)}return this._earlyReturn=!1,this.drawSymbol(e,r),this._earlyReturn}executeEffects(t,e){return"CIMGeometricEffectDashes"===t.at(-1)?.type&&(t=t.slice(0,-1)),super.executeEffects(t,e)}drawSolidFill(t,e,r){null!=r?this._hittestSvgPath(t,r,!0):this._hitTestFill(t)}drawHatchFill(t,e){this._hitTestFill(t)}drawPictureFill(t,e){this._hitTestFill(t)}drawGradientFill(t,e){this._hitTestFill(t)}drawSolidStroke(t,e,r,i,s,o,n){null!=n?this._hittestSvgPath(t,n,!1,r):this._hitTestStroke(t,r)}drawPictureStroke(t,e){this._hitTestStroke(t,e.width)}drawGradientStroke(t,e){this._hitTestStroke(t,e.width)}drawMarkerLayer(t,e){t.markerPlacement&&("CIMMarkerPlacementInsidePolygon"===t.markerPlacement.type||"CIMMarkerPlacementPolygonCenter"===t.markerPlacement.type&&t.markerPlacement.clipAtBoundary)?this._hitTestFill(e):super.drawMarkerLayer(t,e)}pushClipPath(t){}popClipPath(){}drawImage(t,e){const{url:r}=t,i=A(t.scaleX,1),s=this._resourceManager.getResource(r);if(null==s||0===s.height||0===e)return;const o=e*this.geomUnitsPerPoint(),n=o*i*(s.width/s.height),a=this.reverseTransformPt(this._searchPoint),l=this._searchDistPoint;Math.abs(a[0])<n/2+l&&Math.abs(a[1])<o/2+l&&(this._earlyReturn=!0)}drawText(t,e){const r=this._textInfo;if(!r)return;const i=r.get(t);if(!i)return;if(!i.glyphMosaicItems.glyphs.length)return;const s=it(A(t.height,v.CIMTextSymbol.height)),{lineGapType:o,lineGap:n}=t,a=o?yt(o,A(n),s):0,l="CIMBackgroundCallout"===t.callout?.type,h=rt(i.glyphMosaicItems,{scale:s/Q,angle:0,xOffset:0,yOffset:0,horizontalAlignment:t.horizontalAlignment,verticalAlignment:t.verticalAlignment,maxLineWidth:st(t.lineWidth),lineHeight:Z*Math.max(.25,Math.min(a||1,4)),decoration:t.font.decoration||"none",useCIMAngleBehavior:!0,hasBackground:l}),c=this.reverseTransformPt(this._searchPoint),m=c[0],f=c[1];for(const u of h.glyphs)if(m>u.xTopLeft&&m<u.xBottomRight&&f>-u.yBottomRight&&f<-u.yTopLeft){this._earlyReturn=!0;break}}_hitTestFill(t){let e=null;if(S(t)){const r=t;e=[[[r.xmin,r.ymin],[r.xmin,r.ymax],[r.xmax,r.ymax],[r.xmax,r.ymin],[r.xmin,r.ymin]]]}else if(y(t))e=t.rings;else{if(!P(t))return;e=t.paths}const r=this.reverseTransformPt(this._searchPoint);if(dt(r,e)&&(this._earlyReturn=!0),!this._earlyReturn){gt(r,e,this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint())&&(this._earlyReturn=!0)}}_getSvgPath(){return null!=this._svg&&null!=this._path||(this._svg??=$(),this._path??=K("path"),this._svg.appendChild(this._path)),this._path}_getCanvasContext(t,e){return this._canvas??=document.createElement("canvas"),this._canvas.width=t,this._canvas.height=e,this._canvas.getContext("2d",{willReadFrequently:!0})}_hittestSvgPath(t,e,r,i=0){const s=this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint(),o=this.reverseTransformPt(this._searchPoint),n=h();g(n,t);const a={x:n[0],y:n[1],width:n[2]-n[0],height:n[3]-n[1]},l=this._getSvgPath();l.setAttribute("d",e);const c=l.getBBox();let m=Math.max(c.width/a.width,c.height/a.height),f=1;const u=2*s*m;u<1&&(f=2/u,m*=f,c.x*=f,c.y*=f,c.width*=f,c.height*=f);const d=1+i*m/2,p=this._getCanvasContext(c.width+2*d,c.height+2*d);p.setTransform(f,0,0,f,-c.x+d,-c.y+d);const _=new Path2D(e);r?p.fill(_):(p.lineWidth=i*(m/f),p.stroke(_));const y=(a.width*m-c.width)/2,P=(a.height*m-c.height)/2,S=Math.floor((o[0]-a.x-s)*m-y+d),w=Math.floor((a.height-(o[1]-a.y)-s)*m+P+d),x=Math.ceil(2*s*m),M=Math.ceil(2*s*m),b=p.getImageData(S,w,x,M).data;for(let h=3;h<b.length;h+=4)if(b[h]>127.5)return void(this._earlyReturn=!0)}_hitTestStroke(t,e){let r=null;if(S(t)){const e=t;r=[[[e.xmin,e.ymin],[e.xmin,e.ymax],[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin]]]}else if(y(t))r=t.rings;else{if(!P(t))return;r=t.paths}gt(this.reverseTransformPt(this._searchPoint),r,A(e,v.CIMSolidStroke.width)*this.geomUnitsPerPoint()/2+this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint())&&(this._earlyReturn=!0)}}class ft extends ht{constructor(t,e,r,i){super(e,r),this._applyAdditionalRenderProps=i,this._colorSubstitutionHelper=new M,this._ctx=t}drawSolidFill(t,e){if(!t)return;if(y(t))this._buildPath(t.rings,!0);else if(P(t))this._buildPath(t.paths,!0);else if(S(t))this._buildPath(_t(t).rings,!0);else{if(!w(t))return;console.log("CanvasDrawHelper.drawSolidFill - No implementation!")}const r=this._ctx;r.fillStyle="string"==typeof e?e:"rgba("+Math.round(e[0])+","+Math.round(e[1])+","+Math.round(e[2])+","+(e[3]??255)/255+")",r.fill("evenodd")}drawSolidStroke(t,e,r,i,s,o){if(!t||!e||0===r)return;if(y(t))this._buildPath(t.rings,!0);else if(P(t))this._buildPath(t.paths,!1);else{if(!S(t))return void console.log("CanvasDrawHelper.drawSolidStroke isn't implemented!");this._buildPath(_t(t).rings,!0)}const n=this._ctx;n.strokeStyle="string"==typeof e?e:"rgba("+Math.round(e[0])+","+Math.round(e[1])+","+Math.round(e[2])+","+(e[3]??255)/255+")",n.lineWidth=Math.max(this.transformSize(r),nt),this._setCapStyle(i),this._setJoinStyle(s),n.miterLimit=o,n.stroke()}pushClipPath(t){if(this._ctx.save(),y(t))this._buildPath(t.rings,!0);else if(P(t))this._buildPath(t.paths,!0);else{if(!S(t))return;this._buildPath(_t(t).rings,!0)}this._ctx.clip("evenodd")}popClipPath(){this._ctx.restore()}drawImage(t,e){const{colorSubstitutions:r,url:i,tintColor:s}=t,o=A(t.scaleX,1),n=this._resourceManager.getResource(i);if(null==n)return;let a=e*(n.width/n.height),l=e;e||(a=n.width,l=n.height);const h=D(i)||"src"in n&&D(n.src);let c="getFrame"in n?R(n):n;r&&(c=this._colorSubstitutionHelper.applyColorSubstitution(c,r)),this._applyAdditionalRenderProps&&!h&&s&&(c=this._colorSubstitutionHelper.tintImageData(c,s));const m=this.transformPt([0,0]),[f,u]=this.getTransformAngle(),d=this.transformSize(1),g=this._ctx;g.save(),g.setTransform({m11:o*d*f,m12:o*d*u,m21:-d*u,m22:d*f,m41:m[0],m42:m[1]}),g.drawImage(c,-a/2,-l/2,a,l),g.restore()}drawText(t,e){if(!e||0===e.length)return;this._textRasterizer||(this._textRasterizer=new U);const r=Pt(t,this.transformSize(o(1))),i=this._textRasterizer.rasterizeText(e,r);if(!i)return;const{size:s,anchorX:n,anchorY:a,canvas:l}=i,h=s[0]*(n+.5),c=s[1]*(a-.5),m=this._ctx,f=this.transformPt([0,0]),[u,d]=this.getTransformAngle(),g=1;m.save(),m.setTransform({m11:g*u,m12:g*d,m21:-g*d,m22:g*u,m41:f[0]-g*h,m42:f[1]+g*c}),m.drawImage(l,0,0),m.restore()}drawPictureFill(t,e){if(!t)return;let{colorSubstitutions:r,height:i,offsetX:s,offsetY:o,rotation:n,scaleX:a,tintColor:l,url:h}=e;const c=this._resourceManager.getResource(h);if(null==c)return;if(y(t))this._buildPath(t.rings,!0);else if(P(t))this._buildPath(t.paths,!0);else if(S(t))this._buildPath(_t(t).rings,!0);else{if(!w(t))return;console.log("CanvasDrawHelper.drawPictureFill - No implementation!")}const m=this._ctx,f=D(h)||"src"in c&&D(c.src);let u,d="getFrame"in c?R(c):c;if(r&&(d=this._colorSubstitutionHelper.applyColorSubstitution(d,r)),this._applyAdditionalRenderProps){f||l&&(d=this._colorSubstitutionHelper.tintImageData(d,l)),u=m.createPattern(d,"repeat");const t=this.transformSize(1);n||(n=0),s?s*=t:s=0,o?o*=t:o=0,i&&(i*=t);const e=i?i/c.height:1,r=a&&i?a*i/c.width:1;if(0!==n||1!==e||1!==r||0!==s||0!==o){const t=new DOMMatrix;t.rotateSelf(0,0,-n).translateSelf(s,o).scaleSelf(r,e,1),u.setTransform(t)}}else u=m.createPattern(d,"repeat");m.save(),m.fillStyle=u,m.fill("evenodd"),m.restore()}drawPictureStroke(t,r){if(!t)return;let{colorSubstitutions:i,capStyle:s,joinStyle:o,miterLimit:a,tintColor:l,url:h,width:c}=r;const m=this._resourceManager.getResource(h);if(null==m)return;let f;if(y(t))f=t.rings;else if(P(t))f=t.paths;else{if(!S(t))return w(t)?void console.log("CanvasDrawHelper.drawPictureStroke - No implementation!"):void 0;f=_t(t).rings}c||(c=m.width);const u=D(h)||"src"in m&&D(m.src);let d="getFrame"in m?R(m):m;i&&(d=this._colorSubstitutionHelper.applyColorSubstitution(d,i)),this._applyAdditionalRenderProps&&(u||l&&(d=this._colorSubstitutionHelper.tintImageData(d,l)));const g=Math.max(this.transformSize(n(c)),.5),p=g/d.width,_=this._ctx,x=_.createPattern(d,"repeat-y");let M,b;_.save(),this._setCapStyle(s),this._setJoinStyle(o),void 0!==a&&(_.miterLimit=a),_.lineWidth=g;for(let n of f)if(n=e(n),wt(n),n&&!(n.length<=1)){M=this.transformPt(n[0]);for(let t=1;t<n.length;t++){b=this.transformPt(n[t]);const e=pt(M,b),r=new DOMMatrix;r.translateSelf(0,M[1]-g/2).scaleSelf(p,p,1).rotateSelf(0,0,90-e),x.setTransform(r),_.strokeStyle=x,_.beginPath(),_.moveTo(M[0],M[1]),_.lineTo(b[0],b[1]),_.stroke(),M=b}}_.restore()}drawGradientFill(t,e){if(!t)return;let r;if(y(t))r=t.rings;else if(P(t))r=t.paths;else{if(!S(t))return void at().error("Unable to draw gradient fill");r=_t(t).rings}this._buildPath(r,!0);const{angle:s,gradientMethod:o,gradientSize:a,gradientSizeUnits:l}=e,g=v.CIMGradientFill,p=e.gradientType??g.gradientType,_=-i(s??0),w=h();for(const i of r){const t=i?i.length:0;if(t>1)for(let e=0;e<t;e++){let t=this.transformPt(i[e]);"Linear"!==o&&"Rectangular"!==o||(t=z(t,-_)),c(w,t)}}const[x,M,b,k]=w,C=this._ctx;switch(C.save(),o){case"Buffered":at().error(`Gradient method "${o}" currently unsupported.`);break;case"Linear":{const t=(M+k)/2,r="Absolute"===l?this.transformSize(n(a)):H(a,g.gradientSize)*(b-x),[i,s]="Discrete"===p?[b,b-r]:[x+r,x],o=z([i,t],_),h=z([s,t],_),c=C.createLinearGradient(o[0],o[1],h[0],h[1]);L(c,e),C.fillStyle=c,C.fill("evenodd");break}case"Circular":{const t=m(w),r=d(w)/2,i="Absolute"===l?this.transformSize(n(a)):H(a,g.gradientSize)*r,[s,o]="Discrete"===p?[r,r-i]:[i,0],h=C.createRadialGradient(t[0],t[1],s,t[0],t[1],o);L(h,e),C.fillStyle=h,C.fill("evenodd");break}case"Rectangular":{const r=m(w),i=r[0],s=r[1],o=z(r,_),h=(r,i,s,n,a,l,h,c)=>{C.save(),this.pushClipPath(t);const m=z([a,l],_),f=z([h,c],_);C.beginPath(),C.moveTo(o[0],o[1]),C.lineTo(m[0],m[1]),C.lineTo(f[0],f[1]),C.lineTo(o[0],o[1]),C.clip();const u=z([r,i],_),d=z([s,n],_),g=C.createLinearGradient(u[0],u[1],d[0],d[1]);L(g,e),C.fillStyle=g,C.fill("evenodd"),C.restore()};let c="Absolute"===l?this.transformSize(n(a)):H(a,g.gradientSize)*(f(w)/2),[d,y]="Discrete"===p?[b,b-c]:[i+c,i];h(d,s,y,s,b,M,b,k),[d,y]="Discrete"===p?[x,x+c]:[i-c,i],h(d,s,y,s,x,k,x,M),c="Absolute"===l?this.transformSize(n(a)):H(a,g.gradientSize)*(u(w)/2);let[P,S]="Discrete"===p?[k,k-c]:[s+c,s];h(i,P,i,S,b,k,x,k),[P,S]="Discrete"===p?[M,M+c]:[s-c,s],h(i,P,i,S,x,M,b,M);break}}C.restore()}drawGradientStroke(t,r){const{capStyle:i,gradientMethod:s,gradientSize:o,gradientSizeUnits:a,joinStyle:l,miterLimit:h,width:c}=r;if(!t||0===c)return;let m;if(y(t))m=t.rings;else if(P(t))m=t.paths;else{if(!S(t))return void at().error("Unable to draw gradient stroke");m=_t(t).rings}const f=r.gradientType??v.CIMGradientStroke.gradientType,u=Math.max(this.transformSize(n(c)),.5),d=this._ctx;let g,p;d.save(),this._setCapStyle(i),this._setJoinStyle(l),void 0!==h&&(d.miterLimit=h),d.lineWidth=u;for(let _ of m){if(_=e(_),wt(_),!_||_.length<=1)continue;let t=0;g=this.transformPt(_[0]);for(let e=1;e<_.length;e++){p=this.transformPt(_[e]);const r=p[0]-g[0],i=p[1]-g[1];t+=Math.sqrt(r*r+i*i),g=p}const i="Absolute"===a?this.transformSize(n(o)):H(o,v.CIMGradientStroke.gradientSize)*("AcrossLine"===s?u:t);let l=0;g=this.transformPt(_[0]);for(let e=1;e<_.length;e++){p=this.transformPt(_[e]);const o=p[0]-g[0],n=p[1]-g[1],a=Math.sqrt(o*o+n*n);let h,c,m,y;switch(s){case"AcrossLine":{const[t,e]=z([o/a,n/a],Math.PI/2),r=u/2,s="Discrete"===f?r:i-r;h=(g[0]+p[0])/2+t*s,c=(g[1]+p[1])/2+e*s,m=h-t*i,y=c-e*i;break}case"AlongLine":{const e=o/a,r=n/a;"Discrete"===f?(h=g[0]-e*l,c=g[1]-r*l,m=h+e*i,y=c+r*i):(m=g[0]+e*(t-l),y=g[1]+r*(t-l),h=m-e*i,c=y-r*i);break}default:return at().error("Unrecognized gradient method:",s),void d.restore()}const P=d.createLinearGradient(h,c,m,y);L(P,r),d.strokeStyle=P,d.beginPath(),d.moveTo(g[0],g[1]),d.lineTo(p[0],p[1]),d.stroke(),l+=a,g=p}}d.restore()}_buildPath(t,e){const r=this._ctx;if(r.beginPath(),t)for(const i of t){const t=i?i.length:0;if(t>1){let s=this.transformPt(i[0]);r.moveTo(s[0],s[1]);for(let e=1;e<t;e++)s=this.transformPt(i[e]),r.lineTo(s[0],s[1]);e&&r.closePath()}}}_setCapStyle(t){switch(t){case I.Butt:this._ctx.lineCap="butt";break;case I.Round:this._ctx.lineCap="round";break;case I.Square:this._ctx.lineCap="square"}}_setJoinStyle(t){switch(t){case T.Bevel:this._ctx.lineJoin="bevel";break;case T.Round:this._ctx.lineJoin="round";break;case T.Miter:this._ctx.lineJoin="miter"}}}function ut(t,e,r){let i=A(t.separation,v.CIMHatchFill.separation)*r,s=A(t.rotation);if(0===i)return null;i<0&&(i=-i);let o=0;const n=.5*i;for(;o>n;)o-=i;for(;o<-n;)o+=i;const a=h();g(a,e),a[0]-=n,a[1]-=n,a[2]+=n,a[3]+=n;const l=[[a[0],a[1]],[a[0],a[3]],[a[2],a[3]],[a[2],a[1]]];for(;s>180;)s-=180;for(;s<0;)s+=180;const c=Math.cos(s*ot),m=Math.sin(s*ot),f=-i*m,u=i*c;let d,p,_,y;o=A(t.offsetX)*r*m-A(t.offsetY)*r*c,d=_=Number.MAX_VALUE,p=y=-Number.MAX_VALUE;for(const h of l){const t=h[0],e=h[1],r=c*t+m*e,i=-m*t+c*e;d=Math.min(d,r),_=Math.min(_,i),p=Math.max(p,r),y=Math.max(y,i)}_=Math.floor(_/i)*i;let P=c*d-m*_-f*o/i,S=m*d+c*_-u*o/i,w=c*p-m*_-f*o/i,x=m*p+c*_-u*o/i;const M=1+Math.round((y-_)/i),b=[];for(let h=0;h<M;h++)P+=f,S+=u,w+=f,x+=u,b.push([[P,S],[w,x]]);return{paths:b}}function dt(t,e){let r=0;for(const i of e){const e=i.length;for(let s=1;s<e;s++){const e=i[s-1],o=i[s];if(e[1]>t[1]==o[1]>t[1])continue;(o[0]-e[0])*(t[1]-e[1])-(o[1]-e[1])*(t[0]-e[0])>0?r++:r--}}return 0!==r}function gt(t,e,r){for(const i of e){const e=i.length;for(let s=1;s<e;s++){const e=i[s-1],o=i[s];let n=(o[0]-e[0])*(o[0]-e[0])+(o[1]-e[1])*(o[1]-e[1]);if(0===n)continue;n=Math.sqrt(n);const a=((o[0]-e[0])*(t[1]-e[1])-(o[1]-e[1])*(t[0]-e[0]))/n;if(Math.abs(a)<r){const i=((o[0]-e[0])*(t[0]-e[0])+(o[1]-e[1])*(t[1]-e[1]))/n;if(i>-r&&i<n+r)return!0}}}return!1}function pt(t,e){const r=e[0]-t[0],i=e[1]-t[1];return 180/Math.PI*Math.atan2(i,r)}const _t=t=>t?{spatialReference:t.spatialReference,rings:[[[t.xmin,t.ymin],[t.xmin,t.ymax],[t.xmax,t.ymax],[t.xmax,t.ymin],[t.xmin,t.ymin]]]}:null,yt=(t,e,r)=>{switch(t){case"ExtraLeading":return 1+e/r;case"Multiple":return e;case"Exact":return e/r}};function Pt(e,r=1){const i=B(e),s=E(e.fontStyleName),o=e.fontFamilyName??t,{weight:n,style:a}=s,l=r*(e.height||5),h=X(e.horizontalAlignment),c=J(e.verticalAlignment),m=N(e),f=N(e.haloSymbol),u=null!=f?r*(e.haloSize??0):0,d=O(e.symbol),g=r*(q(e.symbol)||0),p="CIMBackgroundCallout"===e.callout?.type?e.callout.backgroundSymbol:null,_=N(p),y=q(p),P=O(p);return{color:m,size:l,horizontalAlignment:h,verticalAlignment:c,font:{family:o,style:V(a),weight:W(n),decoration:i},outline:{size:g||0,color:d},halo:{size:u||0,color:f,style:a},backgroundColor:_,borderLine:null!=y&&null!=P?{size:y,color:P}:null,pixelRatio:1,premultiplyColors:!0}}const St=1e-4;function wt(t){let e,r,i,s,o,n=t[0],a=1;for(;a<t.length;)e=t[a][0]-n[0],r=t[a][1]-n[1],s=0!==e?r/e:Math.PI/2,void 0!==i&&Math.abs(s-i)<=St?(t.splice(a-1,1),n=o):(o=n,n=t[a],a++),i=s}export{ht as CIMSymbolDrawHelper,ft as CanvasDrawHelper,ct as EnvDrawHelper,mt as HittestDrawHelper,lt as Transformation,ot as cDegToRad,yt as lineGapType2LineHeight};
5
+ import{defaultFontFamily as t}from"../../core/fontUtils.js";import has from"../../core/has.js";import{clone as e}from"../../core/lang.js";import r from"../../core/Logger.js";import{deg2rad as i}from"../../core/mathUtils.js";import s from"../../core/ObjectPool.js";import{px2pt as o,pt2px as n}from"../../core/screenUtils.js";import{GeometryCursor as a}from"../../geometry/GeometryCursor.js";import{fromValues as l,create as h,empty as c,expandPointInPlace as m,center as f,width as u,height as d,diagonal as g}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as p}from"../../geometry/support/boundsUtils.js";import{polygonCentroid as _}from"../../geometry/support/centroid.js";import{isPoint as y,isPolygon as P,isPolyline as S,isExtent as w,isMultipoint as x}from"../../geometry/support/jsonUtils.js";import{SimpleEffectCursor as M}from"./CIMEffects.js";import b from"./CIMImageColorSubstitutionHelper.js";import{getEffectOperator as k,getPlacementOperator as C}from"./CIMOperators.js";import{Placement as v}from"./CIMPlacements.js";import{defaultCIMValues as I}from"./defaultCIMValues.js";import{LineCapStyle as T,LineJoinStyle as R}from"./enums.js";import{getFirstFrame as z}from"./imageUtils.js";import{rotate as L}from"./mathUtils.js";import{addColorStops as F}from"./rasterizingUtils.js";import U from"./Rect.js";import A from"./TextRasterizer.js";import{getNumericValue as j,isCIMFill as G,getSize as D,isSVGImage as H,getRelativeGradientSize as B,fromCIMFontDecoration as E,fromCIMFontStyle as X,fromCIMHorizontalAlignment as J,fromCIMVerticalAlignment as N,getFillColor as O,getStrokeColor as q,getStrokeWidth as V,getFontStyle as W,getFontWeight as Y}from"./utils.js";import{destroyHiddenSvg as $,createHiddenSvg as K,createSvgElement as Q}from"../../views/2d/engine/svgUtils.js";import{glyphSize as Z,magicLabelLineHeight as tt,hittestToleranceSmallSymbol as et,hittestSmallSymbolThreshold as rt}from"../../views/2d/engine/webgl/definitions.js";import{shapeGlyphs as it}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";import{roundPtToWholePixel as st,getLineWidth as ot}from"../../views/2d/layers/graphics/graphicsUtils.js";const nt=Math.PI/180,at=.5,lt=()=>r.getLogger("esri.symbols.cim.CIMSymbolDrawHelper");class ht{constructor(t){this._t=t}static createIdentity(){return new ht([1,0,0,0,1,0])}clone(){const t=this._t;return new ht(t.slice())}transform(t){const e=this._t;return[e[0]*t[0]+e[1]*t[1]+e[2],e[3]*t[0]+e[4]*t[1]+e[5]]}static createScale(t,e){return new ht([t,0,0,0,e,0])}scale(t,e){const r=this._t;return r[0]*=t,r[1]*=t,r[2]*=t,r[3]*=e,r[4]*=e,r[5]*=e,this}scaleRatio(){return Math.sqrt(this._t[0]*this._t[0]+this._t[1]*this._t[1])}static createTranslate(t,e){return new ht([0,0,t,0,0,e])}translate(t,e){const r=this._t;return r[2]+=t,r[5]+=e,this}static createRotate(t){const e=Math.cos(t),r=Math.sin(t);return new ht([e,-r,0,r,e,0])}rotate(t){return ht.multiply(this,ht.createRotate(t),this)}angle(){const t=this._t[0],e=this._t[3],r=Math.sqrt(t*t+e*e);return[t/r,e/r]}static multiply(t,e,r){const i=t._t,s=e._t,o=i[0]*s[0]+i[3]*s[1],n=i[1]*s[0]+i[4]*s[1],a=i[2]*s[0]+i[5]*s[1]+s[2],l=i[0]*s[3]+i[3]*s[4],h=i[1]*s[3]+i[4]*s[4],c=i[2]*s[3]+i[5]*s[4]+s[5],m=r._t;return m[0]=o,m[1]=n,m[2]=a,m[3]=l,m[4]=h,m[5]=c,r}invert(){const t=this._t;let e=t[0]*t[4]-t[1]*t[3];if(0===e)return new ht([0,0,0,0,0,0]);e=1/e;const r=(t[1]*t[5]-t[2]*t[4])*e,i=(t[2]*t[3]-t[0]*t[5])*e,s=t[4]*e,o=-t[1]*e,n=-t[3]*e,a=t[0]*e;return new ht([s,o,r,n,a,i])}}class ct{constructor(t,e){this._resourceManager=t,this._transfos=[],this._sizeTransfos=[],this._geomUnitsPerPoint=1,this._placementPool=new s(v,void 0,void 0,100),this._earlyReturn=!1,this._mapRotation=0,this._transfos.push(e||ht.createIdentity()),this._sizeTransfos.push(e?e.scaleRatio():1)}setTransform(t,e){this._transfos=[t||ht.createIdentity()],this._sizeTransfos=[e||(t?t.scaleRatio():1)]}setGeomUnitsPerPoint(t){this._geomUnitsPerPoint=t}transformPt(t){return this._transfos[this._transfos.length-1].transform(t)}transformSize(t){return t*this._sizeTransfos[this._sizeTransfos.length-1]}reverseTransformPt(t){return this._transfos[this._transfos.length-1].invert().transform(t)}reverseTransformSize(t){return t/this._sizeTransfos[this._sizeTransfos.length-1]}reverseTransformScalar(t){return t/this._transfos[this._transfos.length-1].scaleRatio()}getTransformAngle(){return this._transfos[this._transfos.length-1].angle()}geomUnitsPerPoint(){return this.isEmbedded()?1:this._geomUnitsPerPoint}prevGeomUnitsPerPoint(){return this._transfos.length>2?1:this._geomUnitsPerPoint}isEmbedded(){return this._transfos.length>1}back(){return this._transfos[this._transfos.length-1]}push(t,e){const r=e?t.scaleRatio():1;ht.multiply(t,this.back(),t),this._transfos.push(t),this._sizeTransfos.push(this._sizeTransfos[this._sizeTransfos.length-1]*r)}pop(){this._transfos.splice(-1,1),this._sizeTransfos.splice(-1,1)}drawSymbol(t,e,r){if(t)switch(t.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":this.drawMultiLayerSymbol(t,e);break;case"CIMTextSymbol":this.drawTextSymbol(t,e,r)}}drawMultiLayerSymbol(t,e){if(!t||!e)return;const r=t.symbolLayers;if(!r)return;const i=t.effects;if(i&&i.length>0){const t=this.executeEffects(i,e);if(t){let e=t.next();for(;e;)this.drawSymbolLayers(r,e.asJSON()),e=t.next()}}else this.drawSymbolLayers(r,e)}executeEffects(t,e){const r=this._resourceManager.geometryEngine;let i=new M(a.fromJSONCIM(e));for(const s of t){const t=k(s);t&&(i=t.execute(i,s,this.geomUnitsPerPoint(),null,r))}return i}drawSymbolLayers(t,e){let r=t.length;for(;r--;){const i=t[r];if(!i||!1===i.enable)continue;const s=i.effects;if(s&&s.length>0){const t=this.executeEffects(s,e);if(t){let e=null;for(;(e=t.next())&&(this.drawSymbolLayer(i,e.asJSON()),!this._earlyReturn););}}else this.drawSymbolLayer(i,e);if(this._earlyReturn)return}}drawSymbolLayer(t,e){switch(t.type){case"CIMSolidFill":this.drawSolidFill(e,t.color,t.path);break;case"CIMHatchFill":this.drawHatchFill(e,t);break;case"CIMPictureFill":this.drawPictureFill(e,t);break;case"CIMGradientFill":this.drawGradientFill(e,t);break;case"CIMSolidStroke":this.drawSolidStroke(e,t.color,t.width,t.capStyle,t.joinStyle,t.miterLimit,t.path);break;case"CIMPictureStroke":this.drawPictureStroke(e,t);break;case"CIMGradientStroke":this.drawGradientStroke(e,t);break;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":this.drawMarkerLayer(t,e)}}drawHatchFill(t,e){const r=dt(e,t,this.geomUnitsPerPoint());r&&(this.pushClipPath(t),this.drawMultiLayerSymbol(e.lineSymbol,r),this.popClipPath())}drawPictureFill(t,e){}drawGradientFill(t,e){}drawPictureStroke(t,e){}drawGradientStroke(t,e){}drawMarkerLayer(t,e){const r=t.markerPlacement;if(r){const i=C(r);if(i){const s="CIMMarkerPlacementInsidePolygon"===r.type||"CIMMarkerPlacementPolygonCenter"===r.type&&r.clipAtBoundary;s&&this.pushClipPath(e);const o=i.execute(a.fromJSONCIM(e),r,this.geomUnitsPerPoint(),null,this._resourceManager.geometryEngine);if(o){let e=null;for(;(e=o.next())&&(this.drawMarker(t,e),!this._earlyReturn););}s&&this.popClipPath()}}else{const r=this._placementPool.acquire();if(y(e))r.tx=e.x,r.ty=e.y,this.drawMarker(t,r);else if(P(e)){const i=_(e);i&&([r.tx,r.ty]=i,this.drawMarker(t,r))}else for(const i of e.points)if(r.tx=i[0],r.ty=i[1],this.drawMarker(t,r),this._earlyReturn)break;this._placementPool.release(r)}}drawMarker(t,e){switch(t.type){case"CIMCharacterMarker":case"CIMPictureMarker":this.drawPictureMarker(t,e);break;case"CIMVectorMarker":this.drawVectorMarker(t,e)}}drawPictureMarker(t,e){if(!t)return;const r=this._resourceManager.getResource(t.url),i=j(t.size,I.CIMPictureMarker.size);if(null==r||i<=0)return;const s=r.width,o=r.height;if(!s||!o)return;const n=s/o,a=j(t.scaleX,1),l=ht.createIdentity(),h=t.anchorPoint;if(h){let e=h.x,r=h.y;"Absolute"!==t.anchorPointUnits&&(e*=i*n*a,r*=i),l.translate(-e,-r)}let c=j(t.rotation);t.rotateClockwise&&(c=-c),this._mapRotation&&(c+=this._mapRotation),c&&l.rotate(c*nt);let m=j(t.offsetX),f=j(t.offsetY);if(m||f){if(this._mapRotation){const t=nt*this._mapRotation,e=Math.cos(t),r=Math.sin(t),i=m*r+f*e;m=m*e-f*r,f=i}l.translate(m,f)}const u=this.geomUnitsPerPoint();1!==u&&l.scale(u,u);const d=e.getAngle();d&&l.rotate(d),l.translate(e.tx,e.ty),this.push(l,!1),this.drawImage(t,i),this.pop()}drawVectorMarker(t,e){if(!t)return;const r=t.markerGraphics;if(!r)return;const i=j(t.size,I.CIMVectorMarker.size),s=t.frame,o=s?s.ymax-s.ymin:0,n=i&&o?i/o:1,a=ht.createIdentity();s&&a.translate(.5*-(s.xmax+s.xmin),.5*-(s.ymax+s.ymin));const l=t.anchorPoint;if(l){let e=l.x,r=l.y;"Absolute"!==t.anchorPointUnits?s&&(e*=s.xmax-s.xmin,r*=s.ymax-s.ymin):(e/=n,r/=n),a.translate(-e,-r)}1!==n&&a.scale(n,n);let h=j(t.rotation);t.rotateClockwise&&(h=-h),this._mapRotation&&(h+=this._mapRotation),h&&a.rotate(h*nt);let c=j(t.offsetX),m=j(t.offsetY);if(c||m){if(this._mapRotation){const t=nt*this._mapRotation,e=Math.cos(t),r=Math.sin(t),i=c*r+m*e;c=c*e-m*r,m=i}a.translate(c,m)}const f=this.geomUnitsPerPoint();1!==f&&a.scale(f,f);const u=e.getAngle();u&&a.rotate(u),a.translate(e.tx,e.ty),this.push(a,t.scaleSymbolsProportionally);for(const d of r){d?.symbol&&d.geometry||lt().error("Invalid marker graphic",d);let t=d.textString;if("number"==typeof t&&(t=t.toString()),this.drawSymbol(d.symbol,d.geometry,t),this._earlyReturn)break}this.pop()}drawTextSymbol(t,e,r){if(!t)return;if(!y(e))return;if(j(t.height,I.CIMTextSymbol.height)<=0)return;const i=ht.createIdentity();let s=j(t.angle);s=-s,s&&i.rotate(s*nt);const o=j(t.offsetX),n=j(t.offsetY);(o||n)&&i.translate(o,n);const a=this.geomUnitsPerPoint();1!==a&&i.scale(a,a),i.translate(e.x,e.y),this.push(i,!1),this.drawText(t,r),this.pop()}}class mt extends ct{constructor(t,e){super(t,e),this.reset()}reset(){this._xmin=this._ymin=1/0,this._xmax=this._ymax=-1/0,this._clipCount=0}envelope(){return new U(this._xmin,this._ymin,this._xmax-this._xmin,this._ymax-this._ymin)}bounds(){return l(this._xmin,this._ymin,this._xmax,this._ymax)}drawSolidFill(t){if(t&&!(this._clipCount>0))if(P(t))this._processPath(t.rings,0);else if(S(t))this._processPath(t.paths,0);else if(w(t)){const e=yt(t);e&&this._processPath(e.rings,0)}else console.error("drawSolidFill Unexpected geometry type!")}drawSolidStroke(t,e,r){if(!t||this._clipCount>0||null==r||r<=0)return;const i=Math.max(.5*this.transformSize(j(r,I.CIMSolidStroke.width)),.5*at);if(P(t))this._processPath(t.rings,i);else if(S(t))this._processPath(t.paths,i);else if(w(t)){const e=yt(t);e&&this._processPath(e.rings,i)}else console.error("drawSolidStroke unexpected geometry type!")}drawMarkerLayer(t,e){P(e)&&t.markerPlacement&&("CIMMarkerPlacementInsidePolygon"===t.markerPlacement.type||"CIMMarkerPlacementPolygonCenter"===t.markerPlacement.type&&t.markerPlacement.clipAtBoundary)?this._processPath(e.rings,0):super.drawMarkerLayer(t,e)}drawHatchFill(t,e){this.drawSolidFill(t)}drawPictureFill(t,e){this.drawSolidFill(t)}drawGradientFill(t,e){this.drawSolidFill(t)}drawPictureStroke(t,e){this.drawSolidStroke(t,null,e.width)}drawGradientStroke(t,e){this.drawSolidStroke(t,null,e.width)}pushClipPath(t){this.drawSolidFill(t),this._clipCount++}popClipPath(){this._clipCount--}drawImage(t,e){const{url:r}=t,i=j(t.scaleX,1);let s=i*e,o=e;const n=this._resourceManager.getResource(r);if(null!=n){const t=n.height/n.width;s=i*(e?t>1?e:e/t:n.width),o=e?t>1?e*t:e:n.height}this._merge(this.transformPt([-s/2,-o/2]),0),this._merge(this.transformPt([-s/2,o/2]),0),this._merge(this.transformPt([s/2,-o/2]),0),this._merge(this.transformPt([s/2,o/2]),0)}drawText(t,e){if(!e||0===e.length)return;this._textRasterizer||(this._textRasterizer=new A);const r=St(t);let[i,s]=this._textRasterizer.computeTextSize(e,r);i=o(i),s=o(s);const n=this.transformSize(1)*this.reverseTransformScalar(1);i*=n,s*=n;let a=0;switch(t.horizontalAlignment){case"Left":a=i/2;break;case"Right":a=-i/2}let l=0;switch(t.verticalAlignment){case"Bottom":l=s/2;break;case"Top":l=-s/2;break;case"Baseline":l=s/6}this._merge(this.transformPt([-i/2+a,-s/2+l]),0),this._merge(this.transformPt([-i/2+a,s/2+l]),0),this._merge(this.transformPt([i/2+a,-s/2+l]),0),this._merge(this.transformPt([i/2+a,s/2+l]),0)}_processPath(t,e){if(t)for(const r of t){const t=r?r.length:0;if(t>1){this._merge(this.transformPt(r[0]),e);for(let i=1;i<t;i++)this._merge(this.transformPt(r[i]),e)}}}_merge(t,e){t[0]-e<this._xmin&&(this._xmin=t[0]-e),t[0]+e>this._xmax&&(this._xmax=t[0]+e),t[1]-e<this._ymin&&(this._ymin=t[1]-e),t[1]+e>this._ymax&&(this._ymax=t[1]+e)}}class ft extends ct{constructor(){super(...arguments),this._searchPoint=[0,0],this._searchDistPoint=0,this._textInfo=null,this._svg=null,this._path=null,this._canvas=null}destroy(){this._svg=$(this._svg),this._path=null,this._canvas=null}hitTest(t,e,r,i,s,a){const l=a*n(1);this.setTransform(),this.setGeomUnitsPerPoint(l),this._searchPoint=[(t[0]+t[2])/2,(t[1]+t[3])/2],this._searchDistPoint=(t[2]-t[0])/2/l,this._textInfo=i;const h=e&&("CIMPointSymbol"===e.type&&"Map"!==e.angleAlignment||"CIMTextSymbol"===e.type);if(this._mapRotation=h?s:0,!has("esri-mobile")){const t=o(et*window.devicePixelRatio),r=o(rt);!(("CIMLineSymbol"===e?.type||"CIMPolygonSymbol"===e?.type)&&e.symbolLayers?.some(G))&&"CIMMeshSymbol"!==e?.type&&(D(e)??0)<r&&(this._searchDistPoint=t)}return this._earlyReturn=!1,this.drawSymbol(e,r),this._earlyReturn}executeEffects(t,e){return"CIMGeometricEffectDashes"===t.at(-1)?.type&&(t=t.slice(0,-1)),super.executeEffects(t,e)}drawSolidFill(t,e,r){null!=r?this._hittestSvgPath(t,r,!0):this._hitTestFill(t)}drawHatchFill(t,e){this._hitTestFill(t)}drawPictureFill(t,e){this._hitTestFill(t)}drawGradientFill(t,e){this._hitTestFill(t)}drawSolidStroke(t,e,r,i,s,o,n){null!=n?this._hittestSvgPath(t,n,!1,r):this._hitTestStroke(t,r)}drawPictureStroke(t,e){this._hitTestStroke(t,e.width)}drawGradientStroke(t,e){this._hitTestStroke(t,e.width)}drawMarkerLayer(t,e){t.markerPlacement&&("CIMMarkerPlacementInsidePolygon"===t.markerPlacement.type||"CIMMarkerPlacementPolygonCenter"===t.markerPlacement.type&&t.markerPlacement.clipAtBoundary)?this._hitTestFill(e):super.drawMarkerLayer(t,e)}pushClipPath(t){}popClipPath(){}drawImage(t,e){const{url:r}=t,i=j(t.scaleX,1),s=this._resourceManager.getResource(r);if(null==s||0===s.height||0===e)return;const o=e*this.geomUnitsPerPoint(),n=o*i*(s.width/s.height),a=this.reverseTransformPt(this._searchPoint),l=this._searchDistPoint;Math.abs(a[0])<n/2+l&&Math.abs(a[1])<o/2+l&&(this._earlyReturn=!0)}drawText(t,e){const r=this._textInfo;if(!r)return;const i=r.get(t);if(!i)return;if(!i.glyphMosaicItems.glyphs.length)return;const s=st(j(t.height,I.CIMTextSymbol.height)),{lineGapType:o,lineGap:n}=t,a=o?Pt(o,j(n),s):0,l="CIMBackgroundCallout"===t.callout?.type,h=it(i.glyphMosaicItems,{scale:s/Z,angle:0,xOffset:0,yOffset:0,horizontalAlignment:t.horizontalAlignment,verticalAlignment:t.verticalAlignment,maxLineWidth:ot(t.lineWidth),lineHeight:tt*Math.max(.25,Math.min(a||1,4)),decoration:t.font.decoration||"none",useCIMAngleBehavior:!0,hasBackground:l}),c=this.reverseTransformPt(this._searchPoint),m=c[0],f=c[1];for(const u of h.glyphs)if(m>u.xTopLeft&&m<u.xBottomRight&&f>-u.yBottomRight&&f<-u.yTopLeft){this._earlyReturn=!0;break}}_hitTestFill(t){let e=null;if(w(t)){const r=t;e=[[[r.xmin,r.ymin],[r.xmin,r.ymax],[r.xmax,r.ymax],[r.xmax,r.ymin],[r.xmin,r.ymin]]]}else if(P(t))e=t.rings;else{if(!S(t))return;e=t.paths}const r=this.reverseTransformPt(this._searchPoint);if(gt(r,e)&&(this._earlyReturn=!0),!this._earlyReturn){pt(r,e,this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint())&&(this._earlyReturn=!0)}}_getSvgPath(){return null!=this._svg&&null!=this._path||(this._svg??=K(),this._path??=Q("path"),this._svg.appendChild(this._path)),this._path}_getCanvasContext(t,e){return this._canvas??=document.createElement("canvas"),this._canvas.width=t,this._canvas.height=e,this._canvas.getContext("2d",{willReadFrequently:!0})}_hittestSvgPath(t,e,r,i=0){const s=this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint(),o=this.reverseTransformPt(this._searchPoint),n=h();p(n,t);const a={x:n[0],y:n[1],width:n[2]-n[0],height:n[3]-n[1]},l=this._getSvgPath();l.setAttribute("d",e);const c=l.getBBox();let m=Math.max(c.width/a.width,c.height/a.height),f=1;const u=2*s*m;u<1&&(f=2/u,m*=f,c.x*=f,c.y*=f,c.width*=f,c.height*=f);const d=1+i*m/2,g=this._getCanvasContext(c.width+2*d,c.height+2*d);g.setTransform(f,0,0,f,-c.x+d,-c.y+d);const _=new Path2D(e);r?g.fill(_):(g.lineWidth=i*(m/f),g.stroke(_));const y=(a.width*m-c.width)/2,P=(a.height*m-c.height)/2,S=Math.floor((o[0]-a.x-s)*m-y+d),w=Math.floor((a.height-(o[1]-a.y)-s)*m+P+d),x=Math.ceil(2*s*m),M=Math.ceil(2*s*m),b=g.getImageData(S,w,x,M).data;for(let h=3;h<b.length;h+=4)if(b[h]>127.5)return void(this._earlyReturn=!0)}_hitTestStroke(t,e){let r=null;if(w(t)){const e=t;r=[[[e.xmin,e.ymin],[e.xmin,e.ymax],[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin]]]}else if(P(t))r=t.rings;else{if(!S(t))return;r=t.paths}pt(this.reverseTransformPt(this._searchPoint),r,j(e,I.CIMSolidStroke.width)*this.geomUnitsPerPoint()/2+this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint())&&(this._earlyReturn=!0)}}class ut extends ct{constructor(t,e,r,i){super(e,r),this._applyAdditionalRenderProps=i,this._colorSubstitutionHelper=new b,this._ctx=t}drawSolidFill(t,e){if(!t)return;if(P(t))this._buildPath(t.rings,!0);else if(S(t))this._buildPath(t.paths,!0);else if(w(t))this._buildPath(yt(t).rings,!0);else{if(!x(t))return;console.log("CanvasDrawHelper.drawSolidFill - No implementation!")}const r=this._ctx;r.fillStyle="string"==typeof e?e:"rgba("+Math.round(e[0])+","+Math.round(e[1])+","+Math.round(e[2])+","+(e[3]??255)/255+")",r.fill("evenodd")}drawSolidStroke(t,e,r,i,s,o){if(!t||!e||0===r)return;if(P(t))this._buildPath(t.rings,!0);else if(S(t))this._buildPath(t.paths,!1);else{if(!w(t))return void console.log("CanvasDrawHelper.drawSolidStroke isn't implemented!");this._buildPath(yt(t).rings,!0)}const n=this._ctx;n.strokeStyle="string"==typeof e?e:"rgba("+Math.round(e[0])+","+Math.round(e[1])+","+Math.round(e[2])+","+(e[3]??255)/255+")",n.lineWidth=Math.max(this.transformSize(r),at),this._setCapStyle(i),this._setJoinStyle(s),n.miterLimit=o,n.stroke()}pushClipPath(t){if(this._ctx.save(),P(t))this._buildPath(t.rings,!0);else if(S(t))this._buildPath(t.paths,!0);else{if(!w(t))return;this._buildPath(yt(t).rings,!0)}this._ctx.clip("evenodd")}popClipPath(){this._ctx.restore()}drawImage(t,e){const{colorSubstitutions:r,url:i,tintColor:s}=t,o=j(t.scaleX,1),n=this._resourceManager.getResource(i);if(null==n)return;let a=e*(n.width/n.height),l=e;e||(a=n.width,l=n.height);const h=H(i)||"src"in n&&H(n.src);let c="getFrame"in n?z(n):n;r&&(c=this._colorSubstitutionHelper.applyColorSubstitution(c,r)),this._applyAdditionalRenderProps&&!h&&s&&(c=this._colorSubstitutionHelper.tintImageData(c,s));const m=this.transformPt([0,0]),[f,u]=this.getTransformAngle(),d=this.transformSize(1),g=this._ctx;g.save(),g.setTransform({m11:o*d*f,m12:o*d*u,m21:-d*u,m22:d*f,m41:m[0],m42:m[1]}),g.drawImage(c,-a/2,-l/2,a,l),g.restore()}drawText(t,e){if(!e||0===e.length)return;this._textRasterizer||(this._textRasterizer=new A);const r=St(t,this.transformSize(o(1))),i=this._textRasterizer.rasterizeText(e,r);if(!i)return;const{size:s,anchorX:n,anchorY:a,canvas:l}=i,h=s[0]*(n+.5),c=s[1]*(a-.5),m=this._ctx,f=this.transformPt([0,0]),[u,d]=this.getTransformAngle(),g=1;m.save(),m.setTransform({m11:g*u,m12:g*d,m21:-1*d,m22:g*u,m41:f[0]-g*h,m42:f[1]+g*c}),m.drawImage(l,0,0),m.restore()}drawPictureFill(t,e){if(!t)return;let{colorSubstitutions:r,height:i,offsetX:s,offsetY:o,rotation:n,scaleX:a,tintColor:l,url:h}=e;const c=this._resourceManager.getResource(h);if(null==c)return;if(P(t))this._buildPath(t.rings,!0);else if(S(t))this._buildPath(t.paths,!0);else if(w(t))this._buildPath(yt(t).rings,!0);else{if(!x(t))return;console.log("CanvasDrawHelper.drawPictureFill - No implementation!")}const m=this._ctx,f=H(h)||"src"in c&&H(c.src);let u,d="getFrame"in c?z(c):c;if(r&&(d=this._colorSubstitutionHelper.applyColorSubstitution(d,r)),this._applyAdditionalRenderProps){f||l&&(d=this._colorSubstitutionHelper.tintImageData(d,l)),u=m.createPattern(d,"repeat");const t=this.transformSize(1);n||(n=0),s?s*=t:s=0,o?o*=t:o=0,i&&(i*=t);const e=i?i/c.height:1,r=a&&i?a*i/c.width:1;if(0!==n||1!==e||1!==r||0!==s||0!==o){const t=new DOMMatrix;t.rotateSelf(0,0,-n).translateSelf(s,o).scaleSelf(r,e,1),u.setTransform(t)}}else u=m.createPattern(d,"repeat");m.save(),m.fillStyle=u,m.fill("evenodd"),m.restore()}drawPictureStroke(t,r){if(!t)return;let{colorSubstitutions:i,capStyle:s,joinStyle:o,miterLimit:a,tintColor:l,url:h,width:c}=r;const m=this._resourceManager.getResource(h);if(null==m)return;let f;if(P(t))f=t.rings;else if(S(t))f=t.paths;else{if(!w(t))return x(t)?void console.log("CanvasDrawHelper.drawPictureStroke - No implementation!"):void 0;f=yt(t).rings}c||(c=m.width);const u=H(h)||"src"in m&&H(m.src);let d="getFrame"in m?z(m):m;i&&(d=this._colorSubstitutionHelper.applyColorSubstitution(d,i)),this._applyAdditionalRenderProps&&(u||l&&(d=this._colorSubstitutionHelper.tintImageData(d,l)));const g=Math.max(this.transformSize(n(c)),.5),p=g/d.width,_=this._ctx,y=_.createPattern(d,"repeat-y");let M,b;_.save(),this._setCapStyle(s),this._setJoinStyle(o),void 0!==a&&(_.miterLimit=a),_.lineWidth=g;for(let n of f)if(n=e(n),xt(n),n&&!(n.length<=1)){M=this.transformPt(n[0]);for(let t=1;t<n.length;t++){b=this.transformPt(n[t]);const e=_t(M,b),r=new DOMMatrix;r.translateSelf(0,M[1]-g/2).scaleSelf(p,p,1).rotateSelf(0,0,90-e),y.setTransform(r),_.strokeStyle=y,_.beginPath(),_.moveTo(M[0],M[1]),_.lineTo(b[0],b[1]),_.stroke(),M=b}}_.restore()}drawGradientFill(t,e){if(!t)return;let r;if(P(t))r=t.rings;else if(S(t))r=t.paths;else{if(!w(t))return void lt().error("Unable to draw gradient fill");r=yt(t).rings}this._buildPath(r,!0);const{angle:s,gradientMethod:o,gradientSize:a,gradientSizeUnits:l}=e,h=I.CIMGradientFill,p=e.gradientType??h.gradientType,_=-i(s??0),y=c();for(const i of r){const t=i?i.length:0;if(t>1)for(let e=0;e<t;e++){let t=this.transformPt(i[e]);"Linear"!==o&&"Rectangular"!==o||(t=L(t,-_)),m(y,t)}}const[x,M,b,k]=y,C=this._ctx;switch(C.save(),o){case"Buffered":lt().error(`Gradient method "${o}" currently unsupported.`);break;case"Linear":{const t=(M+k)/2,r="Absolute"===l?this.transformSize(n(a)):B(a,h.gradientSize)*(b-x),[i,s]="Discrete"===p?[b,b-r]:[x+r,x],o=L([i,t],_),c=L([s,t],_),m=C.createLinearGradient(o[0],o[1],c[0],c[1]);F(m,e),C.fillStyle=m,C.fill("evenodd");break}case"Circular":{const t=f(y),r=g(y)/2,i="Absolute"===l?this.transformSize(n(a)):B(a,h.gradientSize)*r,[s,o]="Discrete"===p?[r,r-i]:[i,0],c=C.createRadialGradient(t[0],t[1],s,t[0],t[1],o);F(c,e),C.fillStyle=c,C.fill("evenodd");break}case"Rectangular":{const r=f(y),i=r[0],s=r[1],o=L(r,_),c=(r,i,s,n,a,l,h,c)=>{C.save(),this.pushClipPath(t);const m=L([a,l],_),f=L([h,c],_);C.beginPath(),C.moveTo(o[0],o[1]),C.lineTo(m[0],m[1]),C.lineTo(f[0],f[1]),C.lineTo(o[0],o[1]),C.clip();const u=L([r,i],_),d=L([s,n],_),g=C.createLinearGradient(u[0],u[1],d[0],d[1]);F(g,e),C.fillStyle=g,C.fill("evenodd"),C.restore()};let m="Absolute"===l?this.transformSize(n(a)):B(a,h.gradientSize)*(u(y)/2),[g,P]="Discrete"===p?[b,b-m]:[i+m,i];c(g,s,P,s,b,M,b,k),[g,P]="Discrete"===p?[x,x+m]:[i-m,i],c(g,s,P,s,x,k,x,M),m="Absolute"===l?this.transformSize(n(a)):B(a,h.gradientSize)*(d(y)/2);let[S,w]="Discrete"===p?[k,k-m]:[s+m,s];c(i,S,i,w,b,k,x,k),[S,w]="Discrete"===p?[M,M+m]:[s-m,s],c(i,S,i,w,x,M,b,M);break}}C.restore()}drawGradientStroke(t,r){const{capStyle:i,gradientMethod:s,gradientSize:o,gradientSizeUnits:a,joinStyle:l,miterLimit:h,width:c}=r;if(!t||0===c)return;let m;if(P(t))m=t.rings;else if(S(t))m=t.paths;else{if(!w(t))return void lt().error("Unable to draw gradient stroke");m=yt(t).rings}const f=r.gradientType??I.CIMGradientStroke.gradientType,u=Math.max(this.transformSize(n(c)),.5),d=this._ctx;let g,p;d.save(),this._setCapStyle(i),this._setJoinStyle(l),void 0!==h&&(d.miterLimit=h),d.lineWidth=u;for(let _ of m){if(_=e(_),xt(_),!_||_.length<=1)continue;let t=0;g=this.transformPt(_[0]);for(let e=1;e<_.length;e++){p=this.transformPt(_[e]);const r=p[0]-g[0],i=p[1]-g[1];t+=Math.sqrt(r*r+i*i),g=p}const i="Absolute"===a?this.transformSize(n(o)):B(o,I.CIMGradientStroke.gradientSize)*("AcrossLine"===s?u:t);let l=0;g=this.transformPt(_[0]);for(let e=1;e<_.length;e++){p=this.transformPt(_[e]);const o=p[0]-g[0],n=p[1]-g[1],a=Math.sqrt(o*o+n*n);let h,c,m,y;switch(s){case"AcrossLine":{const[t,e]=L([o/a,n/a],-Math.PI/2),r=u/2,s="Discrete"===f?r:i-r;h=(g[0]+p[0])/2+t*s,c=(g[1]+p[1])/2+e*s,m=h-t*i,y=c-e*i;break}case"AlongLine":{const e=o/a,r=n/a;"Discrete"===f?(h=g[0]-e*l,c=g[1]-r*l,m=h+e*i,y=c+r*i):(m=g[0]+e*(t-l),y=g[1]+r*(t-l),h=m-e*i,c=y-r*i);break}default:return lt().error("Unrecognized gradient method:",s),void d.restore()}const P=d.createLinearGradient(h,c,m,y);F(P,r),d.strokeStyle=P,d.beginPath(),d.moveTo(g[0],g[1]),d.lineTo(p[0],p[1]),d.stroke(),l+=a,g=p}}d.restore()}_buildPath(t,e){const r=this._ctx;if(r.beginPath(),t)for(const i of t){const t=i?i.length:0;if(t>1){let s=this.transformPt(i[0]);r.moveTo(s[0],s[1]);for(let e=1;e<t;e++)s=this.transformPt(i[e]),r.lineTo(s[0],s[1]);e&&r.closePath()}}}_setCapStyle(t){switch(t){case T.Butt:this._ctx.lineCap="butt";break;case T.Round:this._ctx.lineCap="round";break;case T.Square:this._ctx.lineCap="square"}}_setJoinStyle(t){switch(t){case R.Bevel:this._ctx.lineJoin="bevel";break;case R.Round:this._ctx.lineJoin="round";break;case R.Miter:this._ctx.lineJoin="miter"}}}function dt(t,e,r){let i=j(t.separation,I.CIMHatchFill.separation)*r,s=j(t.rotation);if(0===i)return null;i<0&&(i=-i);let o=0;const n=.5*i;for(;o>n;)o-=i;for(;o<-n;)o+=i;const a=h();p(a,e),a[0]-=n,a[1]-=n,a[2]+=n,a[3]+=n;const l=[[a[0],a[1]],[a[0],a[3]],[a[2],a[3]],[a[2],a[1]]];for(;s>180;)s-=180;for(;s<0;)s+=180;const c=Math.cos(s*nt),m=Math.sin(s*nt),f=-i*m,u=i*c;let d,g,_,y;o=j(t.offsetX)*r*m-j(t.offsetY)*r*c,d=_=Number.MAX_VALUE,g=y=-Number.MAX_VALUE;for(const h of l){const t=h[0],e=h[1],r=c*t+m*e,i=-m*t+c*e;d=Math.min(d,r),_=Math.min(_,i),g=Math.max(g,r),y=Math.max(y,i)}_=Math.floor(_/i)*i;let P=c*d-m*_-f*o/i,S=m*d+c*_-u*o/i,w=c*g-m*_-f*o/i,x=m*g+c*_-u*o/i;const M=1+Math.round((y-_)/i),b=[];for(let h=0;h<M;h++)P+=f,S+=u,w+=f,x+=u,b.push([[P,S],[w,x]]);return{paths:b}}function gt(t,e){let r=0;for(const i of e){const e=i.length;for(let s=1;s<e;s++){const e=i[s-1],o=i[s];if(e[1]>t[1]==o[1]>t[1])continue;(o[0]-e[0])*(t[1]-e[1])-(o[1]-e[1])*(t[0]-e[0])>0?r++:r--}}return 0!==r}function pt(t,e,r){for(const i of e){const e=i.length;for(let s=1;s<e;s++){const e=i[s-1],o=i[s];let n=(o[0]-e[0])*(o[0]-e[0])+(o[1]-e[1])*(o[1]-e[1]);if(0===n)continue;n=Math.sqrt(n);const a=((o[0]-e[0])*(t[1]-e[1])-(o[1]-e[1])*(t[0]-e[0]))/n;if(Math.abs(a)<r){const i=((o[0]-e[0])*(t[0]-e[0])+(o[1]-e[1])*(t[1]-e[1]))/n;if(i>-r&&i<n+r)return!0}}}return!1}function _t(t,e){const r=e[0]-t[0],i=e[1]-t[1];return 180/Math.PI*Math.atan2(i,r)}const yt=t=>t?{spatialReference:t.spatialReference,rings:[[[t.xmin,t.ymin],[t.xmin,t.ymax],[t.xmax,t.ymax],[t.xmax,t.ymin],[t.xmin,t.ymin]]]}:null,Pt=(t,e,r)=>{switch(t){case"ExtraLeading":return 1+e/r;case"Multiple":return e;case"Exact":return e/r}};function St(e,r=1){const i=E(e),s=X(e.fontStyleName),o=e.fontFamilyName??t,{weight:n,style:a}=s,l=r*(e.height||5),h=J(e.horizontalAlignment),c=N(e.verticalAlignment),m=O(e),f=O(e.haloSymbol),u=null!=f?r*(e.haloSize??0):0,d=q(e.symbol),g=r*(V(e.symbol)||0),p="CIMBackgroundCallout"===e.callout?.type?e.callout.backgroundSymbol:null,_=O(p),y=V(p),P=q(p);return{color:m,size:l,horizontalAlignment:h,verticalAlignment:c,font:{family:o,style:W(a),weight:Y(n),decoration:i},outline:{size:g||0,color:d},halo:{size:u||0,color:f,style:a},backgroundColor:_,borderLine:null!=y&&null!=P?{size:y,color:P}:null,pixelRatio:1,premultiplyColors:!0}}const wt=1e-4;function xt(t){let e,r,i,s,o,n=t[0],a=1;for(;a<t.length;)e=t[a][0]-n[0],r=t[a][1]-n[1],s=0!==e?r/e:Math.PI/2,void 0!==i&&Math.abs(s-i)<=wt?(t.splice(a-1,1),n=o):(o=n,n=t[a],a++),i=s}export{ct as CIMSymbolDrawHelper,ut as CanvasDrawHelper,mt as EnvDrawHelper,ft as HittestDrawHelper,ht as Transformation,nt as cDegToRad,Pt as lineGapType2LineHeight};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.32/esri/copyright.txt for details.
4
4
  */
5
- import{isRGB as e}from"../../core/colorUtils.js";import{getFontFamily as r}from"../../core/fontUtils.js";import{clone as t}from"../../core/lang.js";import i from"../../core/Logger.js";import{pt2px as o,px2pt as a}from"../../core/screenUtils.js";import{numericHash as s}from"../../core/string.js";import{checkForAnimations as l,getAnimationParams as n,handleAbsoluteAnchor as p,handleMarker as c,handleRelativeAnchor as m,getFrameTranslation as y,translate as d,getStaticParam as h,shouldUseAnimatedPath as f}from"./animationUtils.js";import{CIMSymbolHelper as u}from"./CIMSymbolHelper.js";import{defaultCIMValues as v}from"./defaultCIMValues.js";import{Alignment as O,SymbolUnits as g}from"./enums.js";import{OverrideHelper as _}from"./OverrideHelper.js";import{getExtent as S,getSDFMetrics as M,getSDFDimensions as k}from"./SDFHelper.js";import{colorToArray as C,normalizeAlpha as b,getSize as P,isCIMMarkerStrokePlacement as z,getTintColor as x,getNumericValue as E,normalizePrimitiveOverrideProps as L,getDefaultCIMValue as I,getEnum as V,getStrokeWidth as R,getFillColor as N,getStrokeColor as A,fromCIMFontDecoration as w,fromCIMFontStyle as G,fromCIMHorizontalAlignment as F,fromCIMVerticalAlignment as T,isValidCIMValue as X,uncapitalize as Y}from"./utils.js";import{CIMEffectHelper as j}from"./effects/CIMEffectHelper.js";import{randomInsidePolygonTextureSize as W}from"../../views/2d/engine/webgl/definitions.js";const D=()=>i.getLogger("esri.symbols.cim.cimAnalyzer");function U(e){const r=e.markerPlacement;return r&&r.angleToLine?O.MAP:O.SCREEN}class H{constructor(e){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[],e&&(this._resourceManager=e)}analyzeSymbolReference(r,t,i){if(this._cimLayers=i??[],!r)return this._cimLayers;if(this._reset(),r.primitiveOverrides){this._primitiveOverrides=r.primitiveOverrides;for(const r of this._primitiveOverrides){const t=r.valueExpressionInfo;if(t)this._setPoMap(r.primitiveName,r.propertyName,t);else if(null!=r.value){let t=r.value;r.propertyName.includes("Color")&&(e(t)&&(t=C(t)),t=b(t)),this._setPoMap(r.primitiveName,r.propertyName,t)}}}return this._analyzeSymbol(r.symbol,t),this._cimLayers}_reset(){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[]}_analyzeSymbol(e,r){switch(e?.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":this._analyzeMultiLayerSymbol(e,r)}}_analyzeMultiLayerSymbol(e,r){const t=e?.symbolLayers;if(!t)return;const i=e.effects;let o=O.SCREEN;const a=P(e)??0;"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(o=O.MAP);let s={transform:[0,0,0,1],fromColor:[1,1,1,1],toColor:[1,1,1,1],colorMix:[0,0,0,0],toOpacity:[1,1,1,1],opacityMix:[0,0,0,0],hasAnimations:l(e)};s=n(this._poMap,e,s);const p="CIMPolygonSymbol"===e.type;let c=t.length;for(;c--;){const l=t[c];if(!l||!1===l.enable)continue;let n;i?.length&&(n=[...i]);const m=l.effects;m?.length&&(i?n.push(...m):n=[...m]);let y=null;if(n){y=[];for(const e of n){const r=_.findEffectOverrides(e,this._primitiveOverrides);r&&y.push(r)}}const d=[];switch(_.findApplicableOverrides(l,this._primitiveOverrides,d),l.type){case"CIMSolidFill":this._analyzeSolidFill(l,y);break;case"CIMPictureFill":this._analyzePictureFill(l,y);break;case"CIMHatchFill":this._analyzeHatchFill(l,y);break;case"CIMGradientFill":this._analyzeGradientFill(l,y);break;case"CIMSolidStroke":this._analyzeSolidStroke(l,y,p,a);break;case"CIMPictureStroke":this._analyzePictureStroke(l,y,p,a);break;case"CIMGradientStroke":this._analyzeGradientStroke(l,y,p,a);break;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":{"CIMLineSymbol"!==e.type&&"CIMPolygonSymbol"!==e.type||(o=U(l));const t=[],i=l.primitiveName;i&&t.push(i);const n=p&&z(l.markerPlacement);this._analyzeMarker(l,y,null,t,o,a,r,[],s,!1,n);break}default:D().error("Cannot analyze CIM layer",l.type)}}}_analyzeSolidFill(e,r){const{primitiveName:t,type:i}=e,o=b(e.color);this._cimLayers.push({type:"fill",spriteRasterizationParam:null,colorLocked:!!e.colorLocked,color:this._getValueOrOverrideExpression(i,t,"Color",o),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:r,applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!1})}_analyzePictureFill(e,r){const{primitiveName:t,type:i}=e,o=x(e),a=E(e.height,v.CIMPictureFill.height);let s=E(e.scaleX,1);if("width"in e&&"number"==typeof e.width){const r=e.width;let t=1;const i=this._resourceManager.getResource(e.url);null!=i&&(t=i.width/i.height),s/=t*(a/r)}const l={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(t,i)};this._cimLayers.push({type:"fill",spriteRasterizationParam:l,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(i,t,"TintColor",o),height:this._getValueOrOverrideExpression(i,t,"Height",a),scaleX:this._getValueOrOverrideExpression(i,t,"ScaleX",s),angle:this._getValueOrOverrideExpression(i,t,"Rotation",E(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,t,"OffsetX",E(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,t,"OffsetY",E(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1})}_analyzeHatchFill(e,r){const{primitiveName:t,type:i}=e,o=this._analyzeMaterialOverrides(t,["Rotation","OffsetX","OffsetY"]),a=L(o);let s=[255,255,255,1],l=!1;if(e.lineSymbol?.symbolLayers)for(const p of e.lineSymbol.symbolLayers){if("CIMSolidStroke"!==p.type)continue;const e=p.primitiveName??t;l||!e||p.colorLocked||null==this._poMap[e]?.Color&&null==this._poMap[e]?.StrokeColor||(s=b(p.color),s=this._maybeGetValueOrOverrideExpression(e,"StrokeColor")??this._getValueOrOverrideExpression(i,e,"Color",s),l=!0);const r=this._maybeGetValueOrOverrideExpression(e,"StrokeWidth");if(r){let t=null,o=null;"number"==typeof r?t=r:o=r.valueExpressionInfo;let s=a.find((e=>"strokeWidth"===e.propertyName));s?s.propertyName="width":(s={type:"CIMPrimitiveOverride",primitiveName:e,propertyName:"width",valueExpressionInfo:o,value:t,defaultValue:I(i,"width")},a.push(s))}}const n={type:"sprite-rasterization-param",resource:e,overrides:a};this._cimLayers.push({type:"fill",spriteRasterizationParam:n,colorLocked:!!e.colorLocked,effects:r,color:s,height:this._getValueOrOverrideExpression(i,t,"Separation",E(e.separation,v.CIMHatchFill.separation)),scaleX:1,angle:this._getValueOrOverrideExpression(i,t,"Rotation",E(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,t,"OffsetX",E(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,t,"OffsetY",E(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!l})}_analyzeGradientFill(e,r){const{angle:t,gradientMethod:i,gradientSize:o,gradientSizeUnits:a,gradientType:s,interval:l,primitiveName:n,type:p}=e,c=v.CIMGradientFill,m=e.colorRamp;this._cimLayers.push({type:"gradientFill",spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(n,p)},colorLocked:!1,effects:r,color:[255,255,255,1],gradientMethod:this._getValueOrOverrideExpression(p,n,"GradientMethod",i??"Linear"),angle:this._getValueOrOverrideExpression(p,n,"Angle",E(t,c.angle)),gradientType:"CIMFixedColorRamp"===m.type?"Discrete":this._getValueOrOverrideExpression(p,n,"GradientType",s??c.gradientType),interval:this._getValueOrOverrideExpression(p,n,"Interval",E(l,"CIMFixedColorRamp"===m.type?m.colors.length:c.interval)),gradientSize:this._getValueOrOverrideExpression(p,n,"GradientSize",E(o,c.gradientSize)),gradientSizeUnits:"Absolute"===a?g.Absolute:"Relative"===a?g.Relative:c.gradientSizeUnits})}_analyzeSolidStroke(e,r,t,i){const{primitiveName:o,type:a}=e,s=b(e.color),l=E(e.width,v.CIMSolidStroke.width),n=V(e.capStyle,v.CIMSolidStroke.capstyle),p=V(e.joinStyle,v.CIMSolidStroke.joinstyle),c=e.miterLimit;let m,y,d,h,f=[];if(this._analyzePrimitiveOverrides(o,r,null,null)&&(f=this._getPrimitiveMaterialOverrides(o,a)),r&&Array.isArray(r)&&r.length>0){const e=r[r.length-1].effect;e&&"CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&(m=e.dashTemplate,y=e.scaleDash,d=e.offsetAlongLine,h=e.primitiveName,(r=[...r]).pop())}null!=h&&f.push(...this._getPrimitiveMaterialOverrides(h,a).filter((e=>"dashTemplate"===e.propertyName)));const u=void 0!==m?{type:"sprite-rasterization-param",resource:{type:"dash",dashTemplate:m,primitiveName:h},overrides:f}:null;this._cimLayers.push({type:"line",spriteRasterizationParam:u,isOutline:t,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(a,o,"Color",s),width:this._getValueOrOverrideExpression(a,o,"Width",l),cap:this._getValueOrOverrideExpression(a,o,"CapStyle",n),join:this._getValueOrOverrideExpression(a,o,"JoinStyle",p),miterLimit:c&&this._getValueOrOverrideExpression(a,o,"MiterLimit",c),referenceWidth:i,zOrder:B(e.name),dashTemplate:this._maybeGetValueOrOverrideExpression(h,"DashTemplate")??m,offsetAlongLine:this._getValueOrOverrideExpression(a,h,"OffsetAlongLine",d??0),scaleDash:y,sampleAlphaOnly:!0})}_analyzePictureStroke(e,r,t,i){const{primitiveName:o,type:a}=e,s=x(e),l=E(e.width,v.CIMPictureStroke.width),n=V(e.capStyle,v.CIMPictureStroke.capstyle),p=V(e.joinStyle,v.CIMPictureStroke.joinstyle),c=e.miterLimit,m={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(o,a)};this._cimLayers.push({type:"line",spriteRasterizationParam:m,isOutline:t,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(a,o,"TintColor",s),width:this._getValueOrOverrideExpression(a,o,"Width",l),cap:this._getValueOrOverrideExpression(a,o,"CapStyle",n),join:this._getValueOrOverrideExpression(a,o,"JoinStyle",p),miterLimit:c&&this._getValueOrOverrideExpression(a,o,"MiterLimit",c),referenceWidth:i,zOrder:B(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1})}_analyzeGradientStroke(e,r,t,i){const{gradientMethod:o,gradientSize:a,gradientSizeUnits:s,gradientType:l,interval:n,primitiveName:p,type:c}=e,m=v.CIMGradientStroke,y=E(e.width,m.width),d=V(e.capStyle,m.capstyle),h=V(e.joinStyle,m.joinstyle),f=e.miterLimit,u=e.colorRamp;this._cimLayers.push({type:"gradientStroke",spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(p,c)},colorLocked:!!e.colorLocked,effects:r,color:[255,255,255,1],width:this._getValueOrOverrideExpression(c,p,"Width",y),cap:this._getValueOrOverrideExpression(c,p,"CapStyle",d),join:this._getValueOrOverrideExpression(c,p,"JoinStyle",h),miterLimit:f&&this._getValueOrOverrideExpression(c,p,"MiterLimit",f),referenceWidth:i,isOutline:t,gradientMethod:this._getValueOrOverrideExpression(c,p,"GradientMethod",o??m.gradientMethod),gradientType:"CIMFixedColorRamp"===u.type?"Discrete":this._getValueOrOverrideExpression(c,p,"GradientType",l??m.gradientType),interval:this._getValueOrOverrideExpression(c,p,"Interval",E(n,"CIMFixedColorRamp"===u.type?u.colors.length:m.interval)),gradientSize:this._getValueOrOverrideExpression(c,p,"GradientSize",E(a,m.gradientSize)),gradientSizeUnits:"Absolute"===s?g.Absolute:"Relative"===s?g.Relative:m.gradientSizeUnits})}_analyzeMarker(e,r,t,i,o,a,s,l,y,d=!1,h=!1){if(d||=!!e.colorLocked,this._analyzeMarkerInsidePolygon(e,r,d))return;const f=E(e.size,v.CIMVectorMarker.size),u=E(e.rotation),O=E(e.offsetX),g=E(e.offsetY),{primitiveName:_,type:S}=e,M=this._getValueOrOverrideExpression(S,_,"Size",f),k=this._getValueOrOverrideExpression(S,_,"Rotation",u),C=this._getValueOrOverrideExpression(S,_,"OffsetX",O),b=this._getValueOrOverrideExpression(S,_,"OffsetY",g);let P=y;switch(P=p(e,P),P=c(this._poMap,e,P),P=m(e,P),P=n(this._poMap,e,P),e.type){case"CIMPictureMarker":this._analyzePictureMarker(e,r,t,i,o,a,M,k,C,b,l,P,d,h);break;case"CIMVectorMarker":this._analyzeVectorMarker(e,r,t,i,o,a,M,k,C,b,l,P,s,d,h)}}_analyzeMarkerInsidePolygon(e,r,t){const{markerPlacement:i,type:o}=e;if(!i||"CIMMarkerPlacementInsidePolygon"!==i.type)return!1;if("CIMVectorMarker"===o||"CIMPictureMarker"===o){const t=e.primitiveName;if(t&&this._analyzePrimitiveOverrides([t],r,null,null))return!1;const a=i.primitiveName;if(a&&this._analyzePrimitiveOverrides([a],r,null,null))return!1;if("CIMVectorMarker"===o){const{markerGraphics:r}=e;if(r)for(const e of r){const{symbol:r}=e;if("CIMPolygonSymbol"===r?.type&&r.symbolLayers){const{symbolLayers:e}=r;for(const r of e)if("CIMSolidStroke"===r.type)return!1}}}else{const{animatedSymbolProperties:r}=e;if(r)return!1}}const s=Math.abs(i.stepX),l=Math.abs(i.stepY);if(0===s||0===l)return!0;let n,p;if("Random"===i.gridType){const e=a(W),r=Math.max(Math.floor(e/s),1);n=l*Math.max(Math.floor(e/l),1);p=r*s/n}else i.shiftOddRows?(n=2*l,p=s/l*.5):(n=l,p=s/l);const c=x(e),m="CIMCharacterMarker"===e.type?null:{type:"sprite-rasterization-param",resource:e,overrides:[]};return this._cimLayers.push({type:"fill",spriteRasterizationParam:m,colorLocked:t,effects:r,color:c,height:n,scaleX:p,angle:i.gridAngle,offsetX:E(i.offsetX),offsetY:E(i.offsetY),applyRandomOffset:"Random"===i.gridType,sampleAlphaOnly:"CIMPictureMarker"!==e.type,hasUnresolvedReplacementColor:!0}),!0}_analyzePictureMarker(e,r,i,o,a,l,n,p,c,m,y,d,h,f){const{animatedSymbolProperties:u,primitiveName:v,type:O}=e;let g=E(e.scaleX,1);const _=x(e);i||(i=this._createMarkerPlacementOverrideExpression(e.markerPlacement));const S=this._createGIFAnimatedSymbolPropertiesOverrideExpression(u),M=e.anchorPoint??{x:0,y:0};if("width"in e&&"number"==typeof e.width){const r=e.width;let t=1;const i=this._resourceManager.getResource(e.url);null!=i&&(t=i.width/i.height);g/=t*(E(e.size)/r)}const k=[...o];let C;e.primitiveName&&k.push(e.primitiveName),u||S?C={type:"animated",url:e.url,urlHash:"H"+s(e.url),playAnimation:e.animatedSymbolProperties?.playAnimation,reverseAnimation:e.animatedSymbolProperties?.reverseAnimation,randomizeStartTime:e.animatedSymbolProperties?.randomizeStartTime,randomizeStartSeed:e.animatedSymbolProperties?.randomizeStartSeed,startTimeOffset:e.animatedSymbolProperties?.startTimeOffset,duration:e.animatedSymbolProperties?.duration,repeatType:e.animatedSymbolProperties?.repeatType,repeatDelay:e.animatedSymbolProperties?.repeatDelay}:(C=t(e),C.markerPlacement=null);const b={type:"sprite-rasterization-param",resource:C,overrides:this._getMaterialOverrides(k,O)};S&&b.overrides.push(...S.overrides);const P=n;this._cimLayers.push({type:"marker",spriteRasterizationParam:b,colorLocked:h,effects:r,scaleSymbolsProportionally:!1,alignment:a,size:n,scaleX:this._getValueOrOverrideExpression(O,v,"ScaleX",g),rotation:p,offsetX:c,offsetY:m,transform:{type:"cim-marker-transform-param",params:y},color:this._getValueOrOverrideExpression(O,v,"TintColor",_),anchorPoint:{x:M.x,y:M.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:[0,0,0,0],outlineWidth:0,frameHeight:0,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:1,isOutline:f,markerPlacement:i,animationParams:$(d),baseSize:P})}_analyzeVectorMarker(e,r,t,i,o,a,s,l,p,c,m,f,u,v,O){const g=e.markerGraphics;if(!g)return;const _=e.frame;let S=0;S=_?_.ymax-_.ymin:a;const M=!!e.scaleSymbolsProportionally;if(S){const r={offsetX:p,offsetY:c,rotation:l,size:s,frameHeight:S,rotateClockWise:!!e.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:M};m=[...m,r]}t||(t=this._createMarkerPlacementOverrideExpression(e.markerPlacement));for(const k of g)if(k){const s=k.symbol;if(!s)continue;const l=k.primitiveName;l&&i.push(l);let p,c=f;if(("CIMPointSymbol"===s.type||"CIMTextSymbol"===s.type)&&_){let r=0,t=0;const i=k.geometry;"x"in i&&"y"in i&&(r+=i.x-.5*(_.xmin+_.xmax),t+=i.y-.5*(_.ymin+_.ymax));const o=e.anchorPoint;let a=!1;o&&("Absolute"===e.anchorPointUnits?(r-=o.x,t-=o.y,a=!0):_&&(r-=(_.xmax-_.xmin)*o.x,t-=(_.ymax-_.ymin)*o.y));const s={offsetX:r,offsetY:t,rotation:0,size:0,frameHeight:0,rotateClockWise:!1,absoluteAnchorPoint:a,scaleSymbolsProportionally:M};p=[...m,s]}const g=k.geometry,[C,b]=y(g,_);switch(0===C&&0===b||(c=d(c,C,b)),"CIMPointSymbol"===s.type&&(c=n(this._poMap,s,c)),s.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":u||Q(s)?(c={...c,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!0,translation:h([0,0]),rotation:h(0),scale:h(S),parent:f.transform}},this._analyzeMultiLayerGraphicNonSDF(e,r,t,k,i,o,a,p??m,c,S,v,O)):this._analyzeMultiLayerGraphic(e,r,t,k,i,o,a,p??m,c,S,v,O);break;case"CIMTextSymbol":this._analyzeTextGraphic(r,t,k,i,o,a,p??m,v)}l&&i.pop()}}_analyzeMultiLayerGraphic(e,r,t,i,o,a,s,l,p,c,m,y){const d=i.symbol,h=d.symbolLayers;if(!h)return;let u=h.length;if(K(h)&&!f(p))return void this._analyzeCompositeMarkerGraphic(e,r,t,i,h,a,s,l,c,m,y);const O=this._resourceManager.geometryEngine,g=j.applyEffects(d.effects,i.geometry,O);if(g)for(;u--;){const d=h[u];if(!d||!1===d.enable)continue;const f=d.primitiveName;switch(f&&o.push(f),d.type){case"CIMSolidFill":case"CIMSolidStroke":{const o=j.applyEffects(d.effects,g,O),h=S(o);if(!h)continue;const u="Relative"!==e.anchorPointUnits,_=R(d)??0,{frameSizeRatio:C,anchorX:P,anchorY:z,widthRatio:x,sdfPaddingRatio:L}=M(h,e.frame,e.size,e.anchorPoint,u,_,e.scaleSymbolsProportionally),I="CIMSolidFill"===d.type,V={type:"sdf",geom:o,sdfPaddingRatio:L,asFill:I},{path:w}=d,G=I?b(N(d)):null==w?b(A(d)):[0,0,0,0],F=I?[0,0,0,0]:b(A(d));if(!I&&!_)break;const T=i.primitiveName;let X=null;I&&!d.colorLocked&&(X=this._maybeGetValueOrOverrideExpression(T,"FillColor"));let Y=null;I||d.colorLocked||(Y=this._maybeGetValueOrOverrideExpression(T,"StrokeColor"));const W=X??this._getValueOrOverrideExpression(d.type,f,"Color",G),D=Y??this._getValueOrOverrideExpression(d.type,f,"Color",F),U=this._maybeGetValueOrOverrideExpression(T,"StrokeWidth")??this._getValueOrOverrideExpression(d.type,f,"Width",_),H=w?{type:"sprite-rasterization-param",resource:{type:"path",path:w,asFill:I},overrides:[]}:{type:"sprite-rasterization-param",resource:V,overrides:[]},J=n(this._poMap,d,p),B=E(e.size,v.CIMVectorMarker.size),q=this._getValueOrOverrideExpression(e.type,e.primitiveName,"Size",B);this._cimLayers.push({type:"marker",spriteRasterizationParam:H,colorLocked:!!d.colorLocked||!!m,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:P,y:z},isAbsoluteAnchorPoint:u,size:c,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:c,widthRatio:x,rotateClockwise:!1,referenceSize:s,sizeRatio:C,color:W,outlineColor:D,outlineWidth:U,isOutline:y,markerPlacement:t,animationParams:$(J),isStroke:"CIMSolidFill"!==d.type,baseSize:q,...k(o,L)});break}case"CIMPictureMarker":case"CIMVectorMarker":d.markerPlacement?this._analyzeMultiLayerGraphicNonSDF(e,r,t,i,o,a,s,l,p,c,!!d.colorLocked||!!m,y):this._analyzeMarker(d,r,t,o,a,s,!1,l,p,m,y);break;default:this._analyzeMultiLayerGraphicNonSDF(e,r,t,i,o,a,s,l,p,c,!!d.colorLocked||!!m,y)}f&&o.pop()}}_analyzeTextGraphic(e,t,i,o,a,s,l,n){const p=[];_.findApplicableOverrides(i,this._primitiveOverrides,p);const c=i.geometry;if(!("x"in c)||!("y"in c))return;const m=i.symbol,y=w(m),d=G(m.fontStyleName),h=r(m.fontFamilyName);m.font={family:h,decoration:y,...d};const f=E(m.height,v.CIMTextSymbol.height),u=E(m.angle),O=E(m.offsetX),g=E(m.offsetY),{haloSymbol:S}=m,M=E(m.haloSize,0);let k=[0,0,0,0];if(S?.symbolLayers?.length){const e=S.symbolLayers;for(const r of e)if(r.color){k=this._getValueOrOverrideExpression(m?.haloSymbol?.type??"CIMPolygonSymbol",r.primitiveName,"Color",b(r.color));break}}const C=i.primitiveName;let P=[0,0,0,1],z=[0,0,0,0],x=0,L=!1;if(m.symbol?.symbolLayers)for(const r of m.symbol.symbolLayers){const e=r.primitiveName;if("CIMSolidStroke"===r.type)z=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Color",b(r.color)),x=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Width",R(r)??0);else if("CIMSolidFill"===r.type){const t=b(r.color);L=L??!!r.colorLocked,P=this._getValueOrOverrideExpression("CIMSolidFill",e??C,"Color",t)}}let I=null,V=null,N=null,A=null,X=null;C&&(I=this._maybeGetValueOrOverrideExpression(C,"TextSize"),V=this._maybeGetValueOrOverrideExpression(C,"TextAngle"),N=this._maybeGetValueOrOverrideExpression(C,"TextOffsetX"),A=this._maybeGetValueOrOverrideExpression(C,"TextOffsetY"),L||(X=this._maybeGetValueOrOverrideExpression(C,"FillColor")));const Y=X??P;let j=null,W=null,D=0;if(m.callout&&"CIMBackgroundCallout"===m.callout.type){const e=m.callout;if(e.backgroundSymbol){const r=e.backgroundSymbol.symbolLayers;if(r)for(const e of r)"CIMSolidFill"===e.type?j=b(e.color):"CIMSolidStroke"===e.type&&(W=b(e.color),D=E(e.width,v.CIMSolidStroke.width))}}const U=this._getValueOrOverrideExpression(m.type,i.primitiveName,"TextString",i.textString??"");if(null==U)return;const{fontStyleName:H}=m,J=h+(H?"-"+H.toLowerCase():"-regular"),B=this._getMaterialOverrides(o,m.type);B.push(...this._getPrimitiveMaterialOverrides(i.primitiveName,m.type));const q={type:"text-rasterization-param",resource:{type:"text",textString:i.textString??"",font:m.font,symbol:m,primitiveName:i.primitiveName},overrides:B};this._cimLayers.push({type:"text",lineWidth:m.lineWidth,textRasterizationParam:q,colorLocked:!!n||!!L,effects:e,alignment:a,anchorPoint:{x:0,y:0},isAbsoluteAnchorPoint:!1,fontName:J,decoration:y,haloSize:M,haloColor:k,weight:d.weight,style:d.style,size:I??f,angle:V??u,offsetX:N??O,offsetY:A??g,transform:{type:"cim-marker-transform-param",params:l},horizontalAlignment:F(m.horizontalAlignment),verticalAlignment:T(m.verticalAlignment),text:U,color:Y,outlineColor:z,outlineSize:x,backgroundColor:j,borderLineColor:W,borderLineWidth:D,referenceSize:s,sizeRatio:1,markerPlacement:t})}_analyzeMultiLayerGraphicNonSDF(e,r,t,i,a,s,l,n,p,c,m,y){const d=J(e,i),h=e.primitiveName,f=this._analyzeMaterialOverrides(h,["Rotation","OffsetX","OffsetY"]),O=L(f),[g,_,S]=u.getTextureAnchor(d,this._resourceManager),M=this._getMaterialOverrides(a,e.type);M.push(...O);const k={type:"sprite-rasterization-param",resource:{...d,avoidSDFRasterization:!0},overrides:M},C=E(e.size,v.CIMVectorMarker.size),b=this._getValueOrOverrideExpression(e.type,h,"Size",C);this._cimLayers.push({type:"marker",spriteRasterizationParam:k,colorLocked:m,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:s,anchorPoint:{x:g,y:_},isAbsoluteAnchorPoint:!1,size:c,rotation:0,offsetX:0,offsetY:0,transform:{type:"cim-marker-transform-param",params:n},color:[255,255,255,1],outlineColor:[0,0,0,0],outlineWidth:0,scaleX:1,frameHeight:c,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:S/o(e.size),isOutline:y,markerPlacement:t,animationParams:$(p),baseSize:b})}_createMarkerPlacementOverrideExpression(e){if(!e)return null;const r=[];return _.findApplicableOverrides(e,this._primitiveOverrides,r),{type:"cim-marker-placement-param",placement:e,overrides:Z(r)}}_createGIFAnimatedSymbolPropertiesOverrideExpression(e){if(!e)return null;const r=[];return _.findApplicableOverrides(e,this._primitiveOverrides,r),{type:"cim-gif-animation-params",animation:e,overrides:Z(r)}}_analyzeCompositeMarkerGraphic(e,r,t,i,o,a,s,l,n,p,c){const m=i.geometry,y=o[0],d=o[1],h=S(m);if(!h)return;const f="Relative"!==e.anchorPointUnits,u=E(y.width,v.CIMSolidStroke.width),{frameSizeRatio:O,anchorX:g,anchorY:_,widthRatio:k,sdfPaddingRatio:C}=M(h,e.frame,e.size,e.anchorPoint,f,u,e.scaleSymbolsProportionally),{path:P}=d,z=d.primitiveName,x=y.primitiveName,L=i.primitiveName;let I=null;d.colorLocked||p||(I=this._maybeGetValueOrOverrideExpression(L,"FillColor"));const V=I??this._getValueOrOverrideExpression(d.type,z,"Color",b(d.color));let R=null;y.colorLocked||p||(R=this._maybeGetValueOrOverrideExpression(L,"StrokeColor"));const N=R??this._getValueOrOverrideExpression(y.type,x,"Color",b(y.color)),A=this._maybeGetValueOrOverrideExpression(L,"StrokeWidth")??this._getValueOrOverrideExpression(y.type,x,"Width",u),w={type:"sprite-rasterization-param",resource:P?{type:"path",path:P,asFill:!0}:{type:"sdf",geom:m,sdfPaddingRatio:C,asFill:!0},overrides:[]};this._cimLayers.push({type:"marker",spriteRasterizationParam:w,colorLocked:p,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:g,y:_},isAbsoluteAnchorPoint:f,size:n,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:n,widthRatio:k,rotateClockwise:!1,referenceSize:s,sizeRatio:O,color:V,outlineColor:N,outlineWidth:A,isOutline:c,markerPlacement:t})}_setPoMap(e,r,t){let i;this._poMap[e]?i=this._poMap[e]:(i={},this._poMap[e]=i),i[r]=t}_maybeGetValueOrOverrideExpression(e,r,t){return this._getValueOrOverrideExpression("",e,r,t,!1)}_getValueOrOverrideExpression(e,r,t,i,o=!0){if(o&&!X(i)&&(i=I(e,t.toLowerCase())),null==r)return i;const a=this._poMap[r];if(null==a)return i;const s=a[t];return"string"==typeof s||"number"==typeof s||Array.isArray(s)?s:s?{valueExpressionInfo:s,defaultValue:i}:i}_analyzePrimitiveOverrides(e,r,t,i){if(null==e)return!1;"string"==typeof e&&(e=[e]);for(const o of this._primitiveOverrides)if(e.includes(o.primitiveName)&&o.valueExpressionInfo)return!0;if(null!=r)for(const o of r)if(o?.overrides.length>0)return!0;if(null!=t)for(const o of t)if(o?.overrides.length>0)return!0;if(null!=i)for(const o of i)if(o?.overrides.length>0)return!0;return!1}_getMaterialOverrides(e,r){if(!e)return[];const t=[];for(const i of e)t.push(...this._getPrimitiveMaterialOverrides(i,r));return t}_getPrimitiveMaterialOverrides(e,r){if(!e)return[];const t=L(this._primitiveOverrides.filter((r=>r.primitiveName===e)));return t.forEach((e=>e.defaultValue=I(r,e.propertyName.toLowerCase()))),t}_analyzeMaterialOverrides(e,r){return this._primitiveOverrides.filter((t=>t.primitiveName!==e||!r.includes(t.propertyName)))}}function J(e,r){return{type:e.type,enable:!0,name:e.name,colorLocked:e.colorLocked,primitiveName:e.primitiveName,anchorPoint:e.anchorPoint,anchorPointUnits:e.anchorPointUnits,offsetX:0,offsetY:0,rotateClockwise:e.rotateClockwise,rotation:0,size:e.size,billboardMode3D:e.billboardMode3D,depth3D:e.depth3D,frame:e.frame,markerGraphics:[r],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function B(e){if(e&&0===e.indexOf("Level_")){const r=parseInt(e.slice(6),10);if(!isNaN(r))return r}return 0}function q(e,r){if(!r||0===r.length)return e;const i=t(e);return _.applyOverrides(i,r),i}const K=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&null==e[0].path&&null==e[1].path&&!e[0].effects&&!e[1].effects&&!e[0].animations&&!e[1].animations;function Q(e){const r=e.symbolLayers;if(!r)return!1;const t=r.find((e=>e.effects?.find((e=>"CIMGeometricEffectDashes"===e.type&&null!=e.dashTemplate)))),i=r.find((e=>e.effects?.find((e=>"CIMGeometricEffectAddControlPoints"===e.type))));return!!t||!!i}function Z(e){return t(e).map((e=>({...e,propertyName:Y(e.propertyName)})))}function $(e){return f(e)?{type:"animation-params",params:e}:null}export{H as CIMAnalyzer,q as analyzeCIMResource};
5
+ import{isRGB as e}from"../../core/colorUtils.js";import{getFontFamily as r}from"../../core/fontUtils.js";import{clone as t}from"../../core/lang.js";import i from"../../core/Logger.js";import{pt2px as o,px2pt as a}from"../../core/screenUtils.js";import{numericHash as s}from"../../core/string.js";import{checkForAnimations as l,getAnimationParams as n,handleAbsoluteAnchor as p,handleMarker as c,handleRelativeAnchor as m,getFrameTranslation as y,translate as d,getStaticParam as h,shouldUseAnimatedPath as f}from"./animationUtils.js";import{CIMSymbolHelper as u}from"./CIMSymbolHelper.js";import{defaultCIMValues as v}from"./defaultCIMValues.js";import{Alignment as O,SymbolUnits as g}from"./enums.js";import{OverrideHelper as _}from"./OverrideHelper.js";import{getExtent as S,getSDFMetrics as M,getSDFDimensions as k}from"./SDFHelper.js";import{colorToArray as b,normalizeAlpha as C,getSize as P,isCIMMarkerStrokePlacement as z,getTintColor as x,getNumericValue as E,normalizePrimitiveOverrideProps as L,getDefaultCIMValue as I,getEnum as V,getStrokeWidth as N,getFillColor as R,getStrokeColor as A,fromCIMFontDecoration as w,fromCIMFontStyle as G,fromCIMHorizontalAlignment as F,fromCIMVerticalAlignment as T,isValidCIMValue as X,uncapitalize as Y}from"./utils.js";import{CIMEffectHelper as j}from"./effects/CIMEffectHelper.js";import{randomInsidePolygonTextureSize as W}from"../../views/2d/engine/webgl/definitions.js";const U=()=>i.getLogger("esri.symbols.cim.cimAnalyzer");function D(e){const r=e.markerPlacement;return r&&r.angleToLine?O.MAP:O.SCREEN}class H{constructor(e){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[],e&&(this._resourceManager=e)}analyzeSymbolReference(r,t,i){if(this._cimLayers=i??[],!r)return this._cimLayers;if(this._reset(),r.primitiveOverrides){this._primitiveOverrides=r.primitiveOverrides;for(const r of this._primitiveOverrides){const t=r.valueExpressionInfo;if(t)this._setPoMap(r.primitiveName,r.propertyName,t);else if(null!=r.value){let t=r.value;r.propertyName.includes("Color")&&(e(t)&&(t=b(t)),t=C(t)),this._setPoMap(r.primitiveName,r.propertyName,t)}}}return this._analyzeSymbol(r.symbol,t),this._cimLayers}_reset(){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[]}_analyzeSymbol(e,r){switch(e?.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":this._analyzeMultiLayerSymbol(e,r)}}_analyzeMultiLayerSymbol(e,r){const t=e?.symbolLayers;if(!t)return;const i=e.effects;let o=O.SCREEN;const a=P(e)??0;"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(o=O.MAP);let s={transform:[0,0,0,1],fromColor:[1,1,1,1],toColor:[1,1,1,1],colorMix:[0,0,0,0],toOpacity:[1,1,1,1],opacityMix:[0,0,0,0],hasAnimations:l(e)};s=n(this._poMap,e,s);const p="CIMPolygonSymbol"===e.type;let c=t.length;for(;c--;){const l=t[c];if(!l||!1===l.enable)continue;let n;i?.length&&(n=[...i]);const m=l.effects;m?.length&&(i?n.push(...m):n=[...m]);let y=null;if(n){y=[];for(const e of n){const r=_.findEffectOverrides(e,this._primitiveOverrides);r&&y.push(r)}}const d=[];switch(_.findApplicableOverrides(l,this._primitiveOverrides,d),l.type){case"CIMSolidFill":this._analyzeSolidFill(l,y);break;case"CIMPictureFill":this._analyzePictureFill(l,y);break;case"CIMHatchFill":this._analyzeHatchFill(l,y);break;case"CIMGradientFill":this._analyzeGradientFill(l,y);break;case"CIMSolidStroke":this._analyzeSolidStroke(l,y,p,a);break;case"CIMPictureStroke":this._analyzePictureStroke(l,y,p,a);break;case"CIMGradientStroke":this._analyzeGradientStroke(l,y,p,a);break;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":{"CIMLineSymbol"!==e.type&&"CIMPolygonSymbol"!==e.type||(o=D(l));const t=[],i=l.primitiveName;i&&t.push(i);const n=p&&z(l.markerPlacement);this._analyzeMarker(l,y,null,t,o,a,r,[],s,!1,n);break}default:U().error("Cannot analyze CIM layer",l.type)}}}_analyzeSolidFill(e,r){const{primitiveName:t,type:i}=e,o=C(e.color);this._cimLayers.push({type:"fill",spriteRasterizationParam:null,colorLocked:!!e.colorLocked,color:this._getValueOrOverrideExpression(i,t,"Color",o),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:r,applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!1})}_analyzePictureFill(e,r){const{primitiveName:t,type:i}=e,o=x(e),a=E(e.height,v.CIMPictureFill.height);let s=E(e.scaleX,1);if("width"in e&&"number"==typeof e.width){const r=e.width;let t=1;const i=this._resourceManager.getResource(e.url);null!=i&&(t=i.width/i.height),s/=t*(a/r)}const l={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(t,i)};this._cimLayers.push({type:"fill",spriteRasterizationParam:l,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(i,t,"TintColor",o),height:this._getValueOrOverrideExpression(i,t,"Height",a),scaleX:this._getValueOrOverrideExpression(i,t,"ScaleX",s),angle:this._getValueOrOverrideExpression(i,t,"Rotation",E(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,t,"OffsetX",E(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,t,"OffsetY",E(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1})}_analyzeHatchFill(e,r){const{primitiveName:t,type:i}=e,o=this._analyzeMaterialOverrides(t,["Rotation","OffsetX","OffsetY"]),a=L(o);let s=[255,255,255,1],l=!1;if(e.lineSymbol?.symbolLayers)for(const p of e.lineSymbol.symbolLayers){if("CIMSolidStroke"!==p.type)continue;const e=p.primitiveName??t;l||!e||p.colorLocked||null==this._poMap[e]?.Color&&null==this._poMap[e]?.StrokeColor||(s=C(p.color),s=this._maybeGetValueOrOverrideExpression(e,"StrokeColor")??this._getValueOrOverrideExpression(i,e,"Color",s),l=!0);const r=this._maybeGetValueOrOverrideExpression(e,"StrokeWidth");if(r){let t=null,o=null;"number"==typeof r?t=r:o=r.valueExpressionInfo;let s=a.find((e=>"strokeWidth"===e.propertyName));s?s.propertyName="width":(s={type:"CIMPrimitiveOverride",primitiveName:e,propertyName:"width",valueExpressionInfo:o,value:t,defaultValue:I(i,"width")},a.push(s))}}const n={type:"sprite-rasterization-param",resource:e,overrides:a};this._cimLayers.push({type:"fill",spriteRasterizationParam:n,colorLocked:!!e.colorLocked,effects:r,color:s,height:this._getValueOrOverrideExpression(i,t,"Separation",E(e.separation,v.CIMHatchFill.separation)),scaleX:1,angle:this._getValueOrOverrideExpression(i,t,"Rotation",E(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,t,"OffsetX",E(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,t,"OffsetY",E(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!l})}_analyzeGradientFill(e,r){const{angle:t,gradientMethod:i,gradientSize:o,gradientSizeUnits:a,gradientType:s,interval:l,primitiveName:n,type:p}=e,c=v.CIMGradientFill,m=e.colorRamp;this._cimLayers.push({type:"gradientFill",spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(n,p)},colorLocked:!1,effects:r,color:[255,255,255,1],gradientMethod:this._getValueOrOverrideExpression(p,n,"GradientMethod",i??"Linear"),angle:this._getValueOrOverrideExpression(p,n,"Angle",E(t,c.angle)),gradientType:this._getValueOrOverrideExpression(p,n,"GradientType",s??c.gradientType),interval:this._getValueOrOverrideExpression(p,n,"Interval",E(l,"CIMFixedColorRamp"===m.type?m.colors.length:c.interval)),gradientSize:this._getValueOrOverrideExpression(p,n,"GradientSize",E(o,c.gradientSize)),gradientSizeUnits:"Absolute"===a?g.Absolute:"Relative"===a?g.Relative:c.gradientSizeUnits})}_analyzeSolidStroke(e,r,t,i){const{primitiveName:o,type:a}=e,s=C(e.color),l=E(e.width,v.CIMSolidStroke.width),n=V(e.capStyle,v.CIMSolidStroke.capstyle),p=V(e.joinStyle,v.CIMSolidStroke.joinstyle),c=e.miterLimit;let m,y,d,h,f=[];if(this._analyzePrimitiveOverrides(o,r,null,null)&&(f=this._getPrimitiveMaterialOverrides(o,a)),r&&Array.isArray(r)&&r.length>0){const e=r[r.length-1].effect;e&&"CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&(m=e.dashTemplate,y=e.scaleDash,d=e.offsetAlongLine,h=e.primitiveName,(r=[...r]).pop())}null!=h&&f.push(...this._getPrimitiveMaterialOverrides(h,a).filter((e=>"dashTemplate"===e.propertyName)));const u=void 0!==m?{type:"sprite-rasterization-param",resource:{type:"dash",dashTemplate:m,primitiveName:h},overrides:f}:null;this._cimLayers.push({type:"line",spriteRasterizationParam:u,isOutline:t,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(a,o,"Color",s),width:this._getValueOrOverrideExpression(a,o,"Width",l),cap:this._getValueOrOverrideExpression(a,o,"CapStyle",n),join:this._getValueOrOverrideExpression(a,o,"JoinStyle",p),miterLimit:c&&this._getValueOrOverrideExpression(a,o,"MiterLimit",c),referenceWidth:i,zOrder:B(e.name),dashTemplate:this._maybeGetValueOrOverrideExpression(h,"DashTemplate")??m,offsetAlongLine:this._getValueOrOverrideExpression(a,h,"OffsetAlongLine",d??0),scaleDash:y,sampleAlphaOnly:!0})}_analyzePictureStroke(e,r,t,i){const{primitiveName:o,type:a}=e,s=x(e),l=E(e.width,v.CIMPictureStroke.width),n=V(e.capStyle,v.CIMPictureStroke.capstyle),p=V(e.joinStyle,v.CIMPictureStroke.joinstyle),c=e.miterLimit,m={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(o,a)};this._cimLayers.push({type:"line",spriteRasterizationParam:m,isOutline:t,colorLocked:!!e.colorLocked,effects:r,color:this._getValueOrOverrideExpression(a,o,"TintColor",s),width:this._getValueOrOverrideExpression(a,o,"Width",l),cap:this._getValueOrOverrideExpression(a,o,"CapStyle",n),join:this._getValueOrOverrideExpression(a,o,"JoinStyle",p),miterLimit:c&&this._getValueOrOverrideExpression(a,o,"MiterLimit",c),referenceWidth:i,zOrder:B(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1})}_analyzeGradientStroke(e,r,t,i){const{gradientMethod:o,gradientSize:a,gradientSizeUnits:s,gradientType:l,interval:n,primitiveName:p,type:c}=e,m=v.CIMGradientStroke,y=E(e.width,m.width),d=V(e.capStyle,m.capstyle),h=V(e.joinStyle,m.joinstyle),f=e.miterLimit,u=e.colorRamp;this._cimLayers.push({type:"gradientStroke",spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(p,c)},colorLocked:!!e.colorLocked,effects:r,color:[255,255,255,1],width:this._getValueOrOverrideExpression(c,p,"Width",y),cap:this._getValueOrOverrideExpression(c,p,"CapStyle",d),join:this._getValueOrOverrideExpression(c,p,"JoinStyle",h),miterLimit:f&&this._getValueOrOverrideExpression(c,p,"MiterLimit",f),referenceWidth:i,isOutline:t,gradientMethod:this._getValueOrOverrideExpression(c,p,"GradientMethod",o??m.gradientMethod),gradientType:this._getValueOrOverrideExpression(c,p,"GradientType",l??m.gradientType),interval:this._getValueOrOverrideExpression(c,p,"Interval",E(n,"CIMFixedColorRamp"===u.type?u.colors.length:m.interval)),gradientSize:this._getValueOrOverrideExpression(c,p,"GradientSize",E(a,m.gradientSize)),gradientSizeUnits:"Absolute"===s?g.Absolute:"Relative"===s?g.Relative:m.gradientSizeUnits})}_analyzeMarker(e,r,t,i,o,a,s,l,y,d=!1,h=!1){if(d||=!!e.colorLocked,this._analyzeMarkerInsidePolygon(e,r,d))return;const f=E(e.size,v.CIMVectorMarker.size),u=E(e.rotation),O=E(e.offsetX),g=E(e.offsetY),{primitiveName:_,type:S}=e,M=this._getValueOrOverrideExpression(S,_,"Size",f),k=this._getValueOrOverrideExpression(S,_,"Rotation",u),b=this._getValueOrOverrideExpression(S,_,"OffsetX",O),C=this._getValueOrOverrideExpression(S,_,"OffsetY",g);let P=y;switch(P=p(e,P),P=c(this._poMap,e,P),P=m(e,P),P=n(this._poMap,e,P),e.type){case"CIMPictureMarker":this._analyzePictureMarker(e,r,t,i,o,a,M,k,b,C,l,P,d,h);break;case"CIMVectorMarker":this._analyzeVectorMarker(e,r,t,i,o,a,M,k,b,C,l,P,s,d,h)}}_analyzeMarkerInsidePolygon(e,r,t){const{markerPlacement:i,type:o}=e;if(!i||"CIMMarkerPlacementInsidePolygon"!==i.type)return!1;if("CIMVectorMarker"===o||"CIMPictureMarker"===o){const t=e.primitiveName;if(t&&this._analyzePrimitiveOverrides([t],r,null,null))return!1;const a=i.primitiveName;if(a&&this._analyzePrimitiveOverrides([a],r,null,null))return!1;if("CIMVectorMarker"===o){const{markerGraphics:r}=e;if(r)for(const e of r){const{symbol:r}=e;if("CIMPolygonSymbol"===r?.type&&r.symbolLayers){const{symbolLayers:e}=r;for(const r of e)if("CIMSolidStroke"===r.type)return!1}}}else{const{animatedSymbolProperties:r}=e;if(r)return!1}}const s=Math.abs(i.stepX),l=Math.abs(i.stepY);if(0===s||0===l)return!0;let n,p;if("Random"===i.gridType){const e=a(W),r=Math.max(Math.floor(e/s),1);n=l*Math.max(Math.floor(e/l),1);p=r*s/n}else i.shiftOddRows?(n=2*l,p=s/l*.5):(n=l,p=s/l);const c=x(e),m="CIMCharacterMarker"===e.type?null:{type:"sprite-rasterization-param",resource:e,overrides:[]};return this._cimLayers.push({type:"fill",spriteRasterizationParam:m,colorLocked:t,effects:r,color:c,height:n,scaleX:p,angle:i.gridAngle,offsetX:E(i.offsetX),offsetY:E(i.offsetY),applyRandomOffset:"Random"===i.gridType,sampleAlphaOnly:"CIMPictureMarker"!==e.type,hasUnresolvedReplacementColor:!0}),!0}_analyzePictureMarker(e,r,i,o,a,l,n,p,c,m,y,d,h,f){const{animatedSymbolProperties:u,primitiveName:v,type:O}=e;let g=E(e.scaleX,1);const _=x(e);i||(i=this._createMarkerPlacementOverrideExpression(e.markerPlacement));const S=this._createGIFAnimatedSymbolPropertiesOverrideExpression(u),M=e.anchorPoint??{x:0,y:0};if("width"in e&&"number"==typeof e.width){const r=e.width;let t=1;const i=this._resourceManager.getResource(e.url);null!=i&&(t=i.width/i.height);g/=t*(E(e.size)/r)}const k=[...o];let b;e.primitiveName&&k.push(e.primitiveName),u||S?b={type:"animated",url:e.url,urlHash:"H"+s(e.url),playAnimation:e.animatedSymbolProperties?.playAnimation,reverseAnimation:e.animatedSymbolProperties?.reverseAnimation,randomizeStartTime:e.animatedSymbolProperties?.randomizeStartTime,randomizeStartSeed:e.animatedSymbolProperties?.randomizeStartSeed,startTimeOffset:e.animatedSymbolProperties?.startTimeOffset,duration:e.animatedSymbolProperties?.duration,repeatType:e.animatedSymbolProperties?.repeatType,repeatDelay:e.animatedSymbolProperties?.repeatDelay}:(b=t(e),b.markerPlacement=null);const C={type:"sprite-rasterization-param",resource:b,overrides:this._getMaterialOverrides(k,O)};S&&C.overrides.push(...S.overrides);const P=n;this._cimLayers.push({type:"marker",spriteRasterizationParam:C,colorLocked:h,effects:r,scaleSymbolsProportionally:!1,alignment:a,size:n,scaleX:this._getValueOrOverrideExpression(O,v,"ScaleX",g),rotation:p,offsetX:c,offsetY:m,transform:{type:"cim-marker-transform-param",params:y},color:this._getValueOrOverrideExpression(O,v,"TintColor",_),anchorPoint:{x:M.x,y:M.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:[0,0,0,0],outlineWidth:0,frameHeight:0,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:1,isOutline:f,markerPlacement:i,animationParams:$(d),baseSize:P})}_analyzeVectorMarker(e,r,t,i,o,a,s,l,p,c,m,f,u,v,O){const g=e.markerGraphics;if(!g)return;const _=e.frame;let S=0;S=_?_.ymax-_.ymin:a;const M=!!e.scaleSymbolsProportionally;if(S){const r={offsetX:p,offsetY:c,rotation:l,size:s,frameHeight:S,rotateClockWise:!!e.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:M};m=[...m,r]}t||(t=this._createMarkerPlacementOverrideExpression(e.markerPlacement));for(const k of g)if(k){const s=k.symbol;if(!s)continue;const l=k.primitiveName;l&&i.push(l);let p,c=f;if(("CIMPointSymbol"===s.type||"CIMTextSymbol"===s.type)&&_){let r=0,t=0;const i=k.geometry;"x"in i&&"y"in i&&(r+=i.x-.5*(_.xmin+_.xmax),t+=i.y-.5*(_.ymin+_.ymax));const o=e.anchorPoint;let a=!1;o&&("Absolute"===e.anchorPointUnits?(r-=o.x,t-=o.y,a=!0):_&&(r-=(_.xmax-_.xmin)*o.x,t-=(_.ymax-_.ymin)*o.y));const s={offsetX:r,offsetY:t,rotation:0,size:0,frameHeight:0,rotateClockWise:!1,absoluteAnchorPoint:a,scaleSymbolsProportionally:M};p=[...m,s]}const g=k.geometry,[b,C]=y(g,_);switch(0===b&&0===C||(c=d(c,b,C)),"CIMPointSymbol"===s.type&&(c=n(this._poMap,s,c)),s.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":u||Q(s)?(c={...c,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!0,translation:h([0,0]),rotation:h(0),scale:h(S),parent:f.transform}},this._analyzeMultiLayerGraphicNonSDF(e,r,t,k,i,o,a,p??m,c,S,v,O)):this._analyzeMultiLayerGraphic(e,r,t,k,i,o,a,p??m,c,S,v,O);break;case"CIMTextSymbol":this._analyzeTextGraphic(r,t,k,i,o,a,p??m,v)}l&&i.pop()}}_analyzeMultiLayerGraphic(e,r,t,i,o,a,s,l,p,c,m,y){const d=i.symbol,h=d.symbolLayers;if(!h)return;let u=h.length;if(K(h)&&!f(p))return void this._analyzeCompositeMarkerGraphic(e,r,t,i,h,a,s,l,c,m,y);const O=this._resourceManager.geometryEngine,g=j.applyEffects(d.effects,i.geometry,O);if(g)for(;u--;){const d=h[u];if(!d||!1===d.enable)continue;const f=d.primitiveName;switch(f&&o.push(f),d.type){case"CIMSolidFill":case"CIMSolidStroke":{const o=j.applyEffects(d.effects,g,O),h=S(o);if(!h)continue;const u="Relative"!==e.anchorPointUnits,_=N(d)??0,{frameSizeRatio:b,anchorX:P,anchorY:z,widthRatio:x,sdfPaddingRatio:L}=M(h,e.frame,e.size,e.anchorPoint,u,_,e.scaleSymbolsProportionally),I="CIMSolidFill"===d.type,V={type:"sdf",geom:o,sdfPaddingRatio:L,asFill:I},{path:w}=d,G=I?C(R(d)):null==w?C(A(d)):[0,0,0,0],F=I?[0,0,0,0]:C(A(d));if(!I&&!_)break;const T=i.primitiveName;let X=null;I&&!d.colorLocked&&(X=this._maybeGetValueOrOverrideExpression(T,"FillColor"));let Y=null;I||d.colorLocked||(Y=this._maybeGetValueOrOverrideExpression(T,"StrokeColor"));const W=X??this._getValueOrOverrideExpression(d.type,f,"Color",G),U=Y??this._getValueOrOverrideExpression(d.type,f,"Color",F),D=this._maybeGetValueOrOverrideExpression(T,"StrokeWidth")??this._getValueOrOverrideExpression(d.type,f,"Width",_),H=w?{type:"sprite-rasterization-param",resource:{type:"path",path:w,asFill:I},overrides:[]}:{type:"sprite-rasterization-param",resource:V,overrides:[]},J=n(this._poMap,d,p),B=E(e.size,v.CIMVectorMarker.size),q=this._getValueOrOverrideExpression(e.type,e.primitiveName,"Size",B);this._cimLayers.push({type:"marker",spriteRasterizationParam:H,colorLocked:!!d.colorLocked||!!m,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:P,y:z},isAbsoluteAnchorPoint:u,size:c,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:c,widthRatio:x,rotateClockwise:!1,referenceSize:s,sizeRatio:b,color:W,outlineColor:U,outlineWidth:D,isOutline:y,markerPlacement:t,animationParams:$(J),isStroke:"CIMSolidFill"!==d.type,baseSize:q,...k(o,L)});break}case"CIMPictureMarker":case"CIMVectorMarker":d.markerPlacement?this._analyzeMultiLayerGraphicNonSDF(e,r,t,i,o,a,s,l,p,c,!!d.colorLocked||!!m,y):this._analyzeMarker(d,r,t,o,a,s,!1,l,p,m,y);break;default:this._analyzeMultiLayerGraphicNonSDF(e,r,t,i,o,a,s,l,p,c,!!d.colorLocked||!!m,y)}f&&o.pop()}}_analyzeTextGraphic(e,t,i,o,a,s,l,n){const p=[];_.findApplicableOverrides(i,this._primitiveOverrides,p);const c=i.geometry;if(!("x"in c)||!("y"in c))return;const m=i.symbol,y=w(m),d=G(m.fontStyleName),h=r(m.fontFamilyName);m.font={family:h,decoration:y,...d};const f=E(m.height,v.CIMTextSymbol.height),u=E(m.angle),O=E(m.offsetX),g=E(m.offsetY),{haloSymbol:S}=m,M=E(m.haloSize,0);let k=[0,0,0,0];if(S?.symbolLayers?.length){const e=S.symbolLayers;for(const r of e)if(r.color){k=this._getValueOrOverrideExpression(m?.haloSymbol?.type??"CIMPolygonSymbol",r.primitiveName,"Color",C(r.color));break}}const b=i.primitiveName;let P=[0,0,0,1],z=[0,0,0,0],x=0,L=!1;if(m.symbol?.symbolLayers)for(const r of m.symbol.symbolLayers){const e=r.primitiveName;if("CIMSolidStroke"===r.type)z=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Color",C(r.color)),x=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Width",N(r)??0);else if("CIMSolidFill"===r.type){const t=C(r.color);L=L??!!r.colorLocked,P=this._getValueOrOverrideExpression("CIMSolidFill",e??b,"Color",t)}}let I=null,V=null,R=null,A=null,X=null;b&&(I=this._maybeGetValueOrOverrideExpression(b,"TextSize"),V=this._maybeGetValueOrOverrideExpression(b,"TextAngle"),R=this._maybeGetValueOrOverrideExpression(b,"TextOffsetX"),A=this._maybeGetValueOrOverrideExpression(b,"TextOffsetY"),L||(X=this._maybeGetValueOrOverrideExpression(b,"FillColor")));const Y=X??P;let j=null,W=null,U=0;if(m.callout&&"CIMBackgroundCallout"===m.callout.type){const e=m.callout;if(e.backgroundSymbol){const r=e.backgroundSymbol.symbolLayers;if(r)for(const e of r)"CIMSolidFill"===e.type?j=C(e.color):"CIMSolidStroke"===e.type&&(W=C(e.color),U=E(e.width,v.CIMSolidStroke.width))}}const D=this._getValueOrOverrideExpression(m.type,i.primitiveName,"TextString",i.textString??"");if(null==D)return;const{fontStyleName:H}=m,J=h+(H?"-"+H.toLowerCase():"-regular"),B=this._getMaterialOverrides(o,m.type);B.push(...this._getPrimitiveMaterialOverrides(i.primitiveName,m.type));const q={type:"text-rasterization-param",resource:{type:"text",textString:i.textString??"",font:m.font,symbol:m,primitiveName:i.primitiveName},overrides:B};this._cimLayers.push({type:"text",lineWidth:m.lineWidth,textRasterizationParam:q,colorLocked:!!n||!!L,effects:e,alignment:a,anchorPoint:{x:0,y:0},isAbsoluteAnchorPoint:!1,fontName:J,decoration:y,haloSize:M,haloColor:k,weight:d.weight,style:d.style,size:I??f,angle:V??u,offsetX:R??O,offsetY:A??g,transform:{type:"cim-marker-transform-param",params:l},horizontalAlignment:F(m.horizontalAlignment),verticalAlignment:T(m.verticalAlignment),text:D,color:Y,outlineColor:z,outlineSize:x,backgroundColor:j,borderLineColor:W,borderLineWidth:U,referenceSize:s,sizeRatio:1,markerPlacement:t})}_analyzeMultiLayerGraphicNonSDF(e,r,t,i,a,s,l,n,p,c,m,y){const d=J(e,i),h=e.primitiveName,f=this._analyzeMaterialOverrides(h,["Rotation","OffsetX","OffsetY"]),O=L(f),[g,_,S]=u.getTextureAnchor(d,this._resourceManager),M=this._getMaterialOverrides(a,e.type);M.push(...O);const k={type:"sprite-rasterization-param",resource:{...d,avoidSDFRasterization:!0},overrides:M},b=E(e.size,v.CIMVectorMarker.size),C=this._getValueOrOverrideExpression(e.type,h,"Size",b);this._cimLayers.push({type:"marker",spriteRasterizationParam:k,colorLocked:m,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:s,anchorPoint:{x:g,y:_},isAbsoluteAnchorPoint:!1,size:c,rotation:0,offsetX:0,offsetY:0,transform:{type:"cim-marker-transform-param",params:n},color:[255,255,255,1],outlineColor:[0,0,0,0],outlineWidth:0,scaleX:1,frameHeight:c,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:S/o(e.size),isOutline:y,markerPlacement:t,animationParams:$(p),baseSize:C})}_createMarkerPlacementOverrideExpression(e){if(!e)return null;const r=[];return _.findApplicableOverrides(e,this._primitiveOverrides,r),{type:"cim-marker-placement-param",placement:e,overrides:Z(r)}}_createGIFAnimatedSymbolPropertiesOverrideExpression(e){if(!e)return null;const r=[];return _.findApplicableOverrides(e,this._primitiveOverrides,r),{type:"cim-gif-animation-params",animation:e,overrides:Z(r)}}_analyzeCompositeMarkerGraphic(e,r,t,i,o,a,s,l,n,p,c){const m=i.geometry,y=o[0],d=o[1],h=S(m);if(!h)return;const f="Relative"!==e.anchorPointUnits,u=E(y.width,v.CIMSolidStroke.width),{frameSizeRatio:O,anchorX:g,anchorY:_,widthRatio:k,sdfPaddingRatio:b}=M(h,e.frame,e.size,e.anchorPoint,f,u,e.scaleSymbolsProportionally),{path:P}=d,z=d.primitiveName,x=y.primitiveName,L=i.primitiveName;let I=null;d.colorLocked||p||(I=this._maybeGetValueOrOverrideExpression(L,"FillColor"));const V=I??this._getValueOrOverrideExpression(d.type,z,"Color",C(d.color));let N=null;y.colorLocked||p||(N=this._maybeGetValueOrOverrideExpression(L,"StrokeColor"));const R=N??this._getValueOrOverrideExpression(y.type,x,"Color",C(y.color)),A=this._maybeGetValueOrOverrideExpression(L,"StrokeWidth")??this._getValueOrOverrideExpression(y.type,x,"Width",u),w={type:"sprite-rasterization-param",resource:P?{type:"path",path:P,asFill:!0}:{type:"sdf",geom:m,sdfPaddingRatio:b,asFill:!0},overrides:[]};this._cimLayers.push({type:"marker",spriteRasterizationParam:w,colorLocked:p,effects:r,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:g,y:_},isAbsoluteAnchorPoint:f,size:n,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:n,widthRatio:k,rotateClockwise:!1,referenceSize:s,sizeRatio:O,color:V,outlineColor:R,outlineWidth:A,isOutline:c,markerPlacement:t})}_setPoMap(e,r,t){let i;this._poMap[e]?i=this._poMap[e]:(i={},this._poMap[e]=i),i[r]=t}_maybeGetValueOrOverrideExpression(e,r,t){return this._getValueOrOverrideExpression("",e,r,t,!1)}_getValueOrOverrideExpression(e,r,t,i,o=!0){if(o&&!X(i)&&(i=I(e,t.toLowerCase())),null==r)return i;const a=this._poMap[r];if(null==a)return i;const s=a[t];return"string"==typeof s||"number"==typeof s||Array.isArray(s)?s:s?{valueExpressionInfo:s,defaultValue:i}:i}_analyzePrimitiveOverrides(e,r,t,i){if(null==e)return!1;"string"==typeof e&&(e=[e]);for(const o of this._primitiveOverrides)if(e.includes(o.primitiveName)&&o.valueExpressionInfo)return!0;if(null!=r)for(const o of r)if(o?.overrides.length>0)return!0;if(null!=t)for(const o of t)if(o?.overrides.length>0)return!0;if(null!=i)for(const o of i)if(o?.overrides.length>0)return!0;return!1}_getMaterialOverrides(e,r){if(!e)return[];const t=[];for(const i of e)t.push(...this._getPrimitiveMaterialOverrides(i,r));return t}_getPrimitiveMaterialOverrides(e,r){if(!e)return[];const t=L(this._primitiveOverrides.filter((r=>r.primitiveName===e)));return t.forEach((e=>e.defaultValue=I(r,e.propertyName.toLowerCase()))),t}_analyzeMaterialOverrides(e,r){return this._primitiveOverrides.filter((t=>t.primitiveName!==e||!r.includes(t.propertyName)))}}function J(e,r){return{type:e.type,enable:!0,name:e.name,colorLocked:e.colorLocked,primitiveName:e.primitiveName,anchorPoint:e.anchorPoint,anchorPointUnits:e.anchorPointUnits,offsetX:0,offsetY:0,rotateClockwise:e.rotateClockwise,rotation:0,size:e.size,billboardMode3D:e.billboardMode3D,depth3D:e.depth3D,frame:e.frame,markerGraphics:[r],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function B(e){if(e&&0===e.indexOf("Level_")){const r=parseInt(e.slice(6),10);if(!isNaN(r))return r}return 0}function q(e,r){if(!r||0===r.length)return e;const i=t(e);return _.applyOverrides(i,r),i}const K=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&null==e[0].path&&null==e[1].path&&!e[0].effects&&!e[1].effects&&!e[0].animations&&!e[1].animations;function Q(e){const r=e.symbolLayers;if(!r)return!1;const t=r.find((e=>e.effects?.find((e=>"CIMGeometricEffectDashes"===e.type&&null!=e.dashTemplate)))),i=r.find((e=>e.effects?.find((e=>"CIMGeometricEffectAddControlPoints"===e.type))));return!!t||!!i}function Z(e){return t(e).map((e=>({...e,propertyName:Y(e.propertyName)})))}function $(e){return f(e)?{type:"animation-params",params:e}:null}export{H as CIMAnalyzer,q as analyzeCIMResource};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.32/esri/copyright.txt for details.
4
4
  */
5
- import t from"../../../core/RandomLCG.js";import{Placement as s}from"../CIMPlacements.js";import{PlacementGridType as i}from"../enums.js";const e=512,h=10,n=24,_=1e-6;class r{static local(){return null===r.instance&&(r.instance=new r),r.instance}execute(t,s,i,e,h){return new a(t,s,i,e,h)}}r.instance=null;class a{constructor(h,n,_,r,a){if(this._xMin=0,this._xMax=0,this._yMin=0,this._yMax=0,this._currentX=0,this._currentY=0,this._accelerationMap=null,this._testInsidePolygon=!1,this._verticalSubdivision=!0,this._stepX=Math.abs(n.stepX??16)*_,this._stepY=Math.abs(n.stepY??16)*_,this._stepX=Math.round(128*this._stepX)/128,this._stepY=Math.round(128*this._stepY)/128,0!==this._stepX&&0!==this._stepY){if(this._gridType=n.gridType??i.Fixed,this._gridType===i.Random){const s=n.seed??13,i=1;this._randomLCG=new t(s*i),this._randomness=(n.randomness??100)/100,this._gridAngle=0,this._shiftOddRows=!1,this._cosAngle=1,this._sinAngle=0,this._offsetX=0,this._offsetY=0,this._buildRandomValues()}else{if(this._randomness=0,this._gridAngle=n.gridAngle??0,this._shiftOddRows=n.shiftOddRows??!1,this._offsetX=(n.offsetX??0)*_,this._offsetY=(n.offsetY??0)*_,this._cosAngle=Math.cos(this._gridAngle/180*Math.PI),this._sinAngle=-Math.sin(this._gridAngle/180*Math.PI),this._stepX)if(this._offsetX<0)for(;this._offsetX<-.5*this._stepX;)this._offsetX+=this._stepX;else for(;this._offsetX>=.5*this._stepX;)this._offsetX-=this._stepX;if(this._stepY)if(this._offsetY<0)for(;this._offsetY<-.5*this._stepY;)this._offsetY+=this._stepY;else for(;this._offsetY>=.5*this._stepY;)this._offsetY-=this._stepY}if(this._graphicOriginX=0,this._graphicOriginY=0,null!=r){const[t,s,i,h]=r.split("/"),n=parseFloat(t),_=parseFloat(s),a=parseFloat(i),o=parseFloat(h);this._graphicOriginX=-(o*2**n+a)*e,this._graphicOriginY=_*e,this._testInsidePolygon=!0}this._internalPlacement=new s,this._calculateMinMax(h),this._geometryCursor=h}}next(){return this._geometryCursor?this._nextInside():null}_buildRandomValues(){if(!a._randValues){a._randValues=[];for(let t=0;t<n;t++)for(let s=0;s<n;s++)a._randValues.push(this._randomLCG.getFloat()),a._randValues.push(this._randomLCG.getFloat())}}_calculateMinMax(t){let s,i,h,n,_,r,a,o,l,f,c,u,p,M;this._xMin=0,this._xMax=0,this._yMin=0,this._yMax=0,a=o=p=c=Number.MAX_VALUE,l=f=M=u=-Number.MAX_VALUE;const g=1!==this._cosAngle;for(t.reset();t.nextPath();)for(;t.nextPoint();)r=t.x,_=t.y,s=r-this._graphicOriginX-this._offsetX,i=_-this._graphicOriginY-this._offsetY,g?(h=this._cosAngle*s-this._sinAngle*i,n=this._sinAngle*s+this._cosAngle*i):(h=s,n=i),a=Math.min(a,h),l=Math.max(l,h),o=Math.min(o,n),f=Math.max(f,n),c=Math.min(c,_),u=Math.max(u,_),p=Math.min(p,r),M=Math.max(M,r);c=c!==Number.MAX_VALUE?c:-e-this._stepY,u=u!==-Number.MAX_VALUE?u:this._stepY,p=p!==Number.MAX_VALUE?p:-this._stepX,M=M!==-Number.MAX_VALUE?M:e+this._stepX;const d=u-c,X=M-p;if(this._verticalSubdivision=d>=X,this._polygonMin=this._verticalSubdivision?c:p,this._testInsidePolygon){let t=0-this._graphicOriginX-this._offsetX-this._stepX,s=e-this._graphicOriginX-this._offsetX+this._stepX,i=-e-this._graphicOriginY-this._offsetY-this._stepY,h=0-this._graphicOriginY-this._offsetY+this._stepY;if(g){const e=[[t,i],[t,h],[s,i],[s,h]];t=i=Number.MAX_VALUE,s=h=-Number.MAX_VALUE;for(const n of e){const e=this._cosAngle*n[0]-this._sinAngle*n[1],_=this._sinAngle*n[0]+this._cosAngle*n[1];t=Math.min(t,e),s=Math.max(s,e),i=Math.min(i,_),h=Math.max(h,_)}}a=a!==Number.MAX_VALUE?Math.max(a,t):t,o=o!==Number.MAX_VALUE?Math.max(o,i):i,l=l!==-Number.MAX_VALUE?Math.min(l,s):s,f=f!==-Number.MAX_VALUE?Math.min(f,h):h}this._xMin=Math.round(a/this._stepX),this._xMax=Math.round(l/this._stepX),this._yMin=Math.round(o/this._stepY),this._yMax=Math.round(f/this._stepY),this._currentX=this._xMax+1,this._currentY=this._yMin-1,this._buildAccelerationMap(t,p,M,c,u)}_buildAccelerationMap(t,s,i,n,_){t.reset();const r=new Map,a=this._verticalSubdivision,o=a?_-n:i-s;let f=Math.ceil(o/h);if(f<=1)return;const c=Math.floor(o/f);let u,p,M,g,d,X,m,x,A,Y,y;for(f++,this._delta=c,a?(A=-e-2*this._stepY,Y=2*this._stepY,y=n):(A=-2*this._stepX,Y=e+2*this._stepX,y=s);t.nextPath();)if(!(t.pathSize<2)&&t.nextPoint())for(u=t.x,p=t.y;t.nextPoint();u=M,p=g){if(M=t.x,g=t.y,a){if(p===g||p<A&&g<A||p>Y&&g>Y)continue;d=Math.min(p,g),X=Math.max(p,g)}else{if(u===M||u<A&&M<A||u>Y&&M>Y)continue;d=Math.min(u,M),X=Math.max(u,M)}for(;d<X;)m=Math.floor((d-y)/c),l(m,u,p,M,g,r),d+=c;x=Math.floor((X-y)/c),x>m&&l(x,u,p,M,g,r)}this._accelerationMap=r}_nextInside(){for(;;){if(this._currentX>this._xMax){if(this._currentY++,this._currentY>this._yMax)return null;this._currentX=this._xMin,this._shiftOddRows&&this._currentY%2&&this._currentX--}let t=this._currentX*this._stepX+this._offsetX;this._shiftOddRows&&this._currentY%2&&(t+=.5*this._stepX);const s=this._currentY*this._stepY+this._offsetY;let e,h;if(this._currentX++,this._gridType===i.Random){const i=(this._currentX%n+n)%n,_=(this._currentY%n+n)%n;e=this._graphicOriginX+t+this._stepX*this._randomness*(.5-a._randValues[_*n+i])*2/3,h=this._graphicOriginY+s+this._stepY*this._randomness*(.5-a._randValues[_*n+i+1])*2/3}else e=this._graphicOriginX+this._cosAngle*t+this._sinAngle*s,h=this._graphicOriginY-this._sinAngle*t+this._cosAngle*s;if(!this._testInsidePolygon||this._isInsidePolygon(e,h,this._geometryCursor))return this._internalPlacement.setTranslate(e,h),this._internalPlacement}}_isInsidePolygon(t,s,i){if(null==this._accelerationMap)return o(t,s,i);t+=_,s+=_;const e=this._verticalSubdivision,h=e?s:t,n=Math.floor((h-this._polygonMin)/this._delta),r=this._accelerationMap.get(n);if(!r)return!1;let a,l,f,c=0;for(const _ of r){if(a=_[0],l=_[1],e){if(a[1]>s==l[1]>s)continue;f=(l[0]-a[0])*(s-a[1])-(l[1]-a[1])*(t-a[0])}else{if(a[0]>t==l[0]>t)continue;f=(l[1]-a[1])*(t-a[0])-(l[0]-a[0])*(s-a[1])}f>0?c++:c--}return 0!==c}}function o(t,s,i){let e,h,n,r,a=0;for(t+=_,s+=_,i.reset();i.nextPath();)if(i.nextPoint())for(e=i.x,h=i.y;i.nextPoint();e=n,h=r){if(n=i.x,r=i.y,h>s==r>s)continue;(n-e)*(s-h)-(r-h)*(t-e)>0?a++:a--}return 0!==a}function l(t,s,i,e,h,n){let _=n.get(t);_||(_=[],n.set(t,_)),_.push([[s,i],[e,h]])}export{r as PlacementInsidePolygon};
5
+ import t from"../../../core/RandomLCG.js";import{Placement as s}from"../CIMPlacements.js";import{PlacementGridType as i}from"../enums.js";const e=512,h=10,n=24,_=1e-6;class r{static local(){return null===r.instance&&(r.instance=new r),r.instance}execute(t,s,i,e,h){return new a(t,s,i,e,h)}}r.instance=null;class a{constructor(h,n,_,r,a){if(this._xMin=0,this._xMax=0,this._yMin=0,this._yMax=0,this._currentX=0,this._currentY=0,this._accelerationMap=null,this._testInsidePolygon=!1,this._verticalSubdivision=!0,this._stepX=Math.abs(n.stepX??16)*_,this._stepY=Math.abs(n.stepY??16)*_,this._stepX=Math.round(128*this._stepX)/128,this._stepY=Math.round(128*this._stepY)/128,0!==this._stepX&&0!==this._stepY){if(this._gridType=n.gridType??i.Fixed,this._gridType===i.Random){const s=n.seed??13,i=1;this._randomLCG=new t(s*i),this._randomness=(n.randomness??100)/100,this._gridAngle=0,this._shiftOddRows=!1,this._cosAngle=1,this._sinAngle=0,this._offsetX=0,this._offsetY=0,this._buildRandomValues()}else{if(this._randomness=0,this._gridAngle=n.gridAngle??0,this._shiftOddRows=n.shiftOddRows??!1,this._offsetX=(n.offsetX??0)*_,this._offsetY=(n.offsetY??0)*_,this._cosAngle=Math.cos(this._gridAngle/180*Math.PI),this._sinAngle=-Math.sin(this._gridAngle/180*Math.PI),this._stepX)if(this._offsetX<0)for(;this._offsetX<-.5*this._stepX;)this._offsetX+=this._stepX;else for(;this._offsetX>=.5*this._stepX;)this._offsetX-=this._stepX;if(this._stepY)if(this._offsetY<0)for(;this._offsetY<-.5*this._stepY;)this._offsetY+=this._stepY;else for(;this._offsetY>=.5*this._stepY;)this._offsetY-=this._stepY}if(this._graphicOriginX=0,this._graphicOriginY=0,null!=r){const[t,s,i,h]=r.split("/"),n=parseFloat(t),_=parseFloat(s),a=parseFloat(i),o=parseFloat(h);this._graphicOriginX=-(o*2**n+a)*e,this._graphicOriginY=_*e,this._testInsidePolygon=!0}this._internalPlacement=new s,this._calculateMinMax(h),this._geometryCursor=h}}next(){return this._geometryCursor?this._nextInside():null}_buildRandomValues(){if(!a._randValues){a._randValues=[];for(let t=0;t<n;t++)for(let s=0;s<n;s++)a._randValues.push(this._randomLCG.getFloat()),a._randValues.push(this._randomLCG.getFloat())}}_calculateMinMax(t){let s,i,h,n,_,r,a,o,l,f,c,u,p,M;this._xMin=0,this._xMax=0,this._yMin=0,this._yMax=0,a=o=p=c=Number.MAX_VALUE,l=f=M=u=-Number.MAX_VALUE;const g=1!==this._cosAngle;for(t.reset();t.nextPath();)for(;t.nextPoint();)r=t.x,_=t.y,s=r-this._graphicOriginX-this._offsetX,i=_-this._graphicOriginY-this._offsetY,g?(h=this._cosAngle*s-this._sinAngle*i,n=this._sinAngle*s+this._cosAngle*i):(h=s,n=i),a=Math.min(a,h),l=Math.max(l,h),o=Math.min(o,n),f=Math.max(f,n),c=Math.min(c,_),u=Math.max(u,_),p=Math.min(p,r),M=Math.max(M,r);c=c!==Number.MAX_VALUE?c:-512-this._stepY,u=u!==-Number.MAX_VALUE?u:this._stepY,p=p!==Number.MAX_VALUE?p:-this._stepX,M=M!==-Number.MAX_VALUE?M:e+this._stepX;const d=u-c,X=M-p;if(this._verticalSubdivision=d>=X,this._polygonMin=this._verticalSubdivision?c:p,this._testInsidePolygon){let t=0-this._graphicOriginX-this._offsetX-this._stepX,s=e-this._graphicOriginX-this._offsetX+this._stepX,i=-512-this._graphicOriginY-this._offsetY-this._stepY,h=0-this._graphicOriginY-this._offsetY+this._stepY;if(g){const e=[[t,i],[t,h],[s,i],[s,h]];t=i=Number.MAX_VALUE,s=h=-Number.MAX_VALUE;for(const n of e){const e=this._cosAngle*n[0]-this._sinAngle*n[1],_=this._sinAngle*n[0]+this._cosAngle*n[1];t=Math.min(t,e),s=Math.max(s,e),i=Math.min(i,_),h=Math.max(h,_)}}a=a!==Number.MAX_VALUE?Math.max(a,t):t,o=o!==Number.MAX_VALUE?Math.max(o,i):i,l=l!==-Number.MAX_VALUE?Math.min(l,s):s,f=f!==-Number.MAX_VALUE?Math.min(f,h):h}this._xMin=Math.round(a/this._stepX),this._xMax=Math.round(l/this._stepX),this._yMin=Math.round(o/this._stepY),this._yMax=Math.round(f/this._stepY),this._currentX=this._xMax+1,this._currentY=this._yMin-1,this._buildAccelerationMap(t,p,M,c,u)}_buildAccelerationMap(t,s,i,n,_){t.reset();const r=new Map,a=this._verticalSubdivision,o=a?_-n:i-s;let f=Math.ceil(o/h);if(f<=1)return;const c=Math.floor(o/f);let u,p,M,g,d,X,m,x,A,Y,y;for(f++,this._delta=c,a?(A=-512-2*this._stepY,Y=2*this._stepY,y=n):(A=-2*this._stepX,Y=e+2*this._stepX,y=s);t.nextPath();)if(!(t.pathSize<2)&&t.nextPoint())for(u=t.x,p=t.y;t.nextPoint();u=M,p=g){if(M=t.x,g=t.y,a){if(p===g||p<A&&g<A||p>Y&&g>Y)continue;d=Math.min(p,g),X=Math.max(p,g)}else{if(u===M||u<A&&M<A||u>Y&&M>Y)continue;d=Math.min(u,M),X=Math.max(u,M)}for(;d<X;)m=Math.floor((d-y)/c),l(m,u,p,M,g,r),d+=c;x=Math.floor((X-y)/c),x>m&&l(x,u,p,M,g,r)}this._accelerationMap=r}_nextInside(){for(;;){if(this._currentX>this._xMax){if(this._currentY++,this._currentY>this._yMax)return null;this._currentX=this._xMin,this._shiftOddRows&&this._currentY%2&&this._currentX--}let t=this._currentX*this._stepX+this._offsetX;this._shiftOddRows&&this._currentY%2&&(t+=.5*this._stepX);const s=this._currentY*this._stepY+this._offsetY;let e,h;if(this._currentX++,this._gridType===i.Random){const i=(this._currentX%n+n)%n,_=(this._currentY%n+n)%n;e=this._graphicOriginX+t+this._stepX*this._randomness*(.5-a._randValues[_*n+i])*2/3,h=this._graphicOriginY+s+this._stepY*this._randomness*(.5-a._randValues[_*n+i+1])*2/3}else e=this._graphicOriginX+this._cosAngle*t+this._sinAngle*s,h=this._graphicOriginY-this._sinAngle*t+this._cosAngle*s;if(!this._testInsidePolygon||this._isInsidePolygon(e,h,this._geometryCursor))return this._internalPlacement.setTranslate(e,h),this._internalPlacement}}_isInsidePolygon(t,s,i){if(null==this._accelerationMap)return o(t,s,i);t+=_,s+=_;const e=this._verticalSubdivision,h=e?s:t,n=Math.floor((h-this._polygonMin)/this._delta),r=this._accelerationMap.get(n);if(!r)return!1;let a,l,f,c=0;for(const _ of r){if(a=_[0],l=_[1],e){if(a[1]>s==l[1]>s)continue;f=(l[0]-a[0])*(s-a[1])-(l[1]-a[1])*(t-a[0])}else{if(a[0]>t==l[0]>t)continue;f=(l[1]-a[1])*(t-a[0])-(l[0]-a[0])*(s-a[1])}f>0?c++:c--}return 0!==c}}function o(t,s,i){let e,h,n,r,a=0;for(t+=_,s+=_,i.reset();i.nextPath();)if(i.nextPoint())for(e=i.x,h=i.y;i.nextPoint();e=n,h=r){if(n=i.x,r=i.y,h>s==r>s)continue;(n-e)*(s-h)-(r-h)*(t-e)>0?a++:a--}return 0!==a}function l(t,s,i,e,h,n){let _=n.get(t);_||(_=[],n.set(t,_)),_.push([[s,i],[e,h]])}export{r as PlacementInsidePolygon};