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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (439) hide show
  1. package/analysis/LineOfSightAnalysis.d.ts +49 -32
  2. package/analysis/LineOfSightAnalysisObserver.d.ts +19 -3
  3. package/analysis/LineOfSightAnalysisTarget.d.ts +19 -3
  4. package/analysis/Viewshed.d.ts +23 -3
  5. package/analysis/ViewshedAnalysis.d.ts +33 -13
  6. package/arcade/geometry/operatorsWorkerConnection.js +1 -1
  7. package/assets/esri/core/workers/RemoteClient.js +1 -1
  8. package/assets/esri/core/workers/chunks/00d66e3fba5ab4d2aa3c.js +1 -0
  9. package/assets/esri/core/workers/chunks/{d994bcf0a65d1c07160f.js → 0320cbd825f9a4222042.js} +1 -1
  10. package/assets/esri/core/workers/chunks/14d5d219e7fe017f23f0.js +1 -0
  11. package/assets/esri/core/workers/chunks/164c8eeefa8232b2b191.js +2 -0
  12. package/assets/esri/core/workers/chunks/164e74d586297946a717.js +1 -0
  13. package/assets/esri/core/workers/chunks/1967b9c96045a5802d08.js +1 -0
  14. package/assets/esri/core/workers/chunks/{1bca39e0e651426bdbb5.js → 1b1d3f6916d2cb751435.js} +1 -1
  15. package/assets/esri/core/workers/chunks/{ed6e9d7f71bfd2691717.js → 1c77de1e79860f8d2228.js} +1 -1
  16. package/assets/esri/core/workers/chunks/1e40a26dcce4d1dadc28.js +1 -0
  17. package/assets/esri/core/workers/chunks/{261fea092ee7d27608a0.js → 20a2124cbe43e5527c40.js} +1 -1
  18. package/assets/esri/core/workers/chunks/237a1f68a0efbfe5b77c.js +1 -0
  19. package/assets/esri/core/workers/chunks/{3418877328f4f0830300.js → 24dac4970526a4e0ae63.js} +1 -1
  20. package/assets/esri/core/workers/chunks/26ceb0ff8d93dbb9b84f.js +1 -0
  21. package/assets/esri/core/workers/chunks/2853606099602f73d379.js +1 -0
  22. package/assets/esri/core/workers/chunks/2981e904ab62f3ed80d0.js +2 -0
  23. package/assets/esri/core/workers/chunks/2acf2952cef69e382a35.js +1 -0
  24. package/assets/esri/core/workers/chunks/32cc59e126df8c96a0cf.js +2 -0
  25. package/assets/esri/core/workers/chunks/{4df6cb1bee5d0720a43e.js → 34e0a8a3a2beea50f4f5.js} +1 -1
  26. package/assets/esri/core/workers/chunks/{481589c3eddad6e026ad.js → 369780276b2755361f7d.js} +1 -1
  27. package/assets/esri/core/workers/chunks/{1e0d2715d603f48a7e0b.js → 370aad23df597db80d65.js} +1 -1
  28. package/assets/esri/core/workers/chunks/3e30b96a8c75bd5b9ae2.js +1 -0
  29. package/assets/esri/core/workers/chunks/{25f19fc929f25ddd628c.js → 42753cf4965a94bc91ca.js} +1 -1
  30. package/assets/esri/core/workers/chunks/42d44c7d532df5ee70e9.js +1 -0
  31. package/assets/esri/core/workers/chunks/42e985a576d7aaeed0cf.js +1 -0
  32. package/assets/esri/core/workers/chunks/{6400446b7615b97c3521.js → 45f826554499c38968c6.js} +1 -1
  33. package/assets/esri/core/workers/chunks/48cc58890fddbcf69cef.js +1 -0
  34. package/assets/esri/core/workers/chunks/494bd434fee9032e1d02.js +1 -0
  35. package/assets/esri/core/workers/chunks/{33e4ff228a8c81b99022.js → 4abd3753cd9b80e4d937.js} +1 -1
  36. package/assets/esri/core/workers/chunks/{b564ec4e03478f5659db.js → 4c240ca50f70bf30813f.js} +1 -1
  37. package/assets/esri/core/workers/chunks/4c389472b8cdb0c55154.js +1 -0
  38. package/assets/esri/core/workers/chunks/4e4f747de424941a0bfa.js +1 -0
  39. package/assets/esri/core/workers/chunks/{70d3055f15d8b0cf4074.js → 532e9cda8ac3601d8892.js} +1 -1
  40. package/assets/esri/core/workers/chunks/5529831dd891382c79df.js +1 -0
  41. package/assets/esri/core/workers/chunks/{953ba13299e7aa92c1a0.js → 564565246dae080f5e6c.js} +1 -1
  42. package/assets/esri/core/workers/chunks/576248e9ae2654569420.js +1 -0
  43. package/assets/esri/core/workers/chunks/{2145a512d269d64036b0.js → 58c3ae6030def2ed5f31.js} +1 -1
  44. package/assets/esri/core/workers/chunks/5a19a9c3e01d3d415188.js +1 -0
  45. package/assets/esri/core/workers/chunks/5a830bc35adbedd33783.js +1 -0
  46. package/assets/esri/core/workers/chunks/{eb04e1717a1002cda3ab.js → 5b91e2dffdc84c006539.js} +1 -1
  47. package/assets/esri/core/workers/chunks/{aeaaff7a4b1a99540f52.js → 5cb26bbaa08114aec5ce.js} +1 -1
  48. package/assets/esri/core/workers/chunks/603fdbbe9534c614928f.js +1 -0
  49. package/assets/esri/core/workers/chunks/{4e6f40cbdb8c508e6df1.js → 60f92eb03c6e17ab4747.js} +1 -1
  50. package/assets/esri/core/workers/chunks/{67ebc5a3d46b254b725c.js → 612345f17f5eeb99ea8f.js} +1 -1
  51. package/assets/esri/core/workers/chunks/{1b077c92345ffb5916c2.js → 65c98f3449044fa4fd79.js} +1 -1
  52. package/assets/esri/core/workers/chunks/{2bd4ee083ca4ad221f8b.js → 65cb5e39c467a35621ca.js} +1 -1
  53. package/assets/esri/core/workers/chunks/661c6324529dd17b297e.js +1 -0
  54. package/assets/esri/core/workers/chunks/67a35155b8b4d36f171e.js +1 -0
  55. package/assets/esri/core/workers/chunks/68dd1fd2025c7125ead1.js +1 -0
  56. package/assets/esri/core/workers/chunks/{89e76de5ae3328d821a4.js → 69f6d5997b8ff1326e39.js} +1 -1
  57. package/assets/esri/core/workers/chunks/{ae31fd416bbb41a81392.js → 6ad309154fe84210d23c.js} +1 -1
  58. package/assets/esri/core/workers/chunks/{a40b6d8b5c73e06e14d4.js → 6c255c029d67423e4dac.js} +1 -1
  59. package/assets/esri/core/workers/chunks/7446d0dfebf93e86c098.js +1 -0
  60. package/assets/esri/core/workers/chunks/{688f2dbf784e66082308.js → 74c866e0b66e61751861.js} +1 -1
  61. package/assets/esri/core/workers/chunks/784d6c6949284ed6e10b.js +1 -0
  62. package/assets/esri/core/workers/chunks/{3ffda5bf0b91700dc308.js → 78643f116677950ea29a.js} +1 -1
  63. package/assets/esri/core/workers/chunks/{916b363c342b61ba5461.js → 787c1a8bda7d745633f2.js} +1 -1
  64. package/assets/esri/core/workers/chunks/{e2190361247f35b02b32.js → 7b5cd150a4d0139850be.js} +1 -1
  65. package/assets/esri/core/workers/chunks/7bbfe9ff352afc566367.js +1 -0
  66. package/assets/esri/core/workers/chunks/7d2cbc767c336d15e4d5.js +1 -0
  67. package/assets/esri/core/workers/chunks/{ac5a6603f7fa78d3e4c8.js → 7e8611cb709f105946f5.js} +1 -1
  68. package/assets/esri/core/workers/chunks/{05cd33d41d91f8d09633.js → 7fb7493f483cd9878bfa.js} +1 -1
  69. package/assets/esri/core/workers/chunks/{590e6c70206122e4cc3c.js → 844eedda8f749972f707.js} +2 -2
  70. package/assets/esri/core/workers/chunks/{acfa03c65ba3ca6c5685.js → 8715661a838361d4211a.js} +1 -1
  71. package/assets/esri/core/workers/chunks/{601e1d020b8115497944.js → 8a485130781b49dbf608.js} +1 -1
  72. package/assets/esri/core/workers/chunks/{0ccab50877b24f862d6e.js → 8ac2098ecdc40ad41055.js} +1 -1
  73. package/assets/esri/core/workers/chunks/{a655ebdb4bf0660615a2.js → 8b4e9fd88c0c313416d4.js} +1 -1
  74. package/assets/esri/core/workers/chunks/{4e544de61f07ca660236.js → 8c12269d26f5a4c753cb.js} +1 -1
  75. package/assets/esri/core/workers/chunks/{46b4fb6a7fe4877b0efc.js → 94baa354e50c03b82b25.js} +2 -2
  76. package/assets/esri/core/workers/chunks/9503eedfdda55fc5adab.js +1 -0
  77. package/assets/esri/core/workers/chunks/950d4578dc450467404c.js +1 -0
  78. package/assets/esri/core/workers/chunks/{68be3fb88ca61f82fb90.js → 95dbbddac6581b9d671f.js} +1 -1
  79. package/assets/esri/core/workers/chunks/98be2f621801e230aa01.js +1 -0
  80. package/assets/esri/core/workers/chunks/999c23da883eb11cb29e.js +1 -0
  81. package/assets/esri/core/workers/chunks/9b6929faf649e81265fb.js +1 -0
  82. package/assets/esri/core/workers/chunks/9d61740ef8bdcc162be1.js +1 -0
  83. package/assets/esri/core/workers/chunks/{fafb92ca2c5e4b0b2c23.js → a09d2e1e2540921e4717.js} +1 -1
  84. package/assets/esri/core/workers/chunks/a35c69a4751d28c39907.js +1 -0
  85. package/assets/esri/core/workers/chunks/{3b3e519f15ed52c83f0c.js → a49fe94933b65b4b64f8.js} +1 -1
  86. package/assets/esri/core/workers/chunks/{1819c45655c836b9a8d7.js → a4d3944700f1cc240176.js} +1 -1
  87. package/assets/esri/core/workers/chunks/{ec8b7476eac4718eb0ac.js → a504a5e06cb89a620799.js} +1 -1
  88. package/assets/esri/core/workers/chunks/a596779eaeec7310671d.js +1 -0
  89. package/assets/esri/core/workers/chunks/{d5d0fe8e198ff5a902ee.js → a5c8f9f5be4ef5063b42.js} +1 -1
  90. package/assets/esri/core/workers/chunks/{900181f68449d8f82eeb.js → aa1ac7954e4f0fefe15b.js} +1 -1
  91. package/assets/esri/core/workers/chunks/{90bdf86f553e2742d67c.js → ab1660f5f8a5268c2fac.js} +1 -1
  92. package/assets/esri/core/workers/chunks/ac24b4370dc7194a3107.js +1 -0
  93. package/assets/esri/core/workers/chunks/{b8337492e2b753aefac4.js → ace41659a5ca0e5abfc3.js} +1 -1
  94. package/assets/esri/core/workers/chunks/ae0563d573baf91e01f7.js +1 -0
  95. package/assets/esri/core/workers/chunks/{3c0ed15b544df6fb0903.js → b48952e1fb4cb7360dd0.js} +1 -1
  96. package/assets/esri/core/workers/chunks/b5e7475cc5fbf31289d3.js +1 -0
  97. package/assets/esri/core/workers/chunks/b686cd74975da09b9c91.js +2 -0
  98. package/assets/esri/core/workers/chunks/{aa36c3a9bbaa086e3757.js → b8fd7c3b36981261378b.js} +1 -1
  99. package/assets/esri/core/workers/chunks/bd046399e05e759e0bc2.js +1 -0
  100. package/assets/esri/core/workers/chunks/bd46a04a9ee4ea9e6ef1.js +2 -0
  101. package/assets/esri/core/workers/chunks/{f3da30d7300b92bd8bb0.js → befa32b9e7b3fbdd431e.js} +1 -1
  102. package/assets/esri/core/workers/chunks/bfb39590c548188f5052.js +1 -0
  103. package/assets/esri/core/workers/chunks/c4ddac23bd649d24f3f2.js +1 -0
  104. package/assets/esri/core/workers/chunks/cddc3e285f763ccf33c2.js +1 -0
  105. package/assets/esri/core/workers/chunks/d08ff41e2a9bcd58b64a.js +1 -0
  106. package/assets/esri/core/workers/chunks/d62afb71f4ece4283994.js +1 -0
  107. package/assets/esri/core/workers/chunks/dc1761cba0454fda3cf9.js +1 -0
  108. package/assets/esri/core/workers/chunks/{0f617980c7dd9ad0444f.js → dd0310184fe4832755a8.js} +1 -1
  109. package/assets/esri/core/workers/chunks/dfa5f1311806473e473f.js +1 -0
  110. package/assets/esri/core/workers/chunks/{4ac1d3e49e242e373a92.js → e0650b1408197d3ac862.js} +1 -1
  111. package/assets/esri/core/workers/chunks/{3ff6d1ed3c0f1285f3e7.js → e0d9dc97985561320bd4.js} +1 -1
  112. package/assets/esri/core/workers/chunks/eaddffcc7004101fc230.js +1 -0
  113. package/assets/esri/core/workers/chunks/eb2652ec48faa78de3c5.js +1 -0
  114. package/assets/esri/core/workers/chunks/eca44e53bcee9b08d70a.js +1 -0
  115. package/assets/esri/core/workers/chunks/f00458654c7c34c369ef.js +1 -0
  116. package/assets/esri/core/workers/chunks/f3cd610084e3f4d8656b.js +1 -0
  117. package/assets/esri/core/workers/chunks/f47fe4433b05fca5c3ad.js +1 -0
  118. package/assets/esri/core/workers/chunks/f7bfa3d33b05b250ce33.js +1 -0
  119. package/assets/esri/core/workers/chunks/f91bc1cb1014e05be763.js +1 -0
  120. package/assets/esri/core/workers/chunks/{19676b2c5f8b0a5ee680.js → facd1ff23203fed67686.js} +1 -1
  121. package/assets/esri/core/workers/chunks/{634523cc7757da9020e4.js → fb70ab267a08e24b710f.js} +1 -1
  122. package/assets/esri/core/workers/chunks/fc139f251dc0523074e7.js +1 -0
  123. package/assets/esri/core/workers/chunks/{40a584cb952e94326e9e.js → fcb86d24fc7e0666b564.js} +1 -1
  124. package/assets/esri/themes/base/widgets/_Weather.scss +1 -0
  125. package/assets/esri/themes/dark/main.css +1 -1
  126. package/assets/esri/themes/light/main.css +1 -1
  127. package/assets/esri/themes/light/view.css +1 -1
  128. package/chunks/Distance2DCalculator-DjIp2uQi.js +1 -1
  129. package/chunks/Envelope.js +1 -1
  130. package/chunks/MultiPathImpl.js +1 -1
  131. package/chunks/OperatorGeodeticArea.js +1 -1
  132. package/chunks/OperatorShapePreservingLength.js +1 -1
  133. package/chunks/OperatorShapePreservingProject.js +1 -1
  134. package/chunks/UnitFactory.js +1 -1
  135. package/chunks/basis_encoder.js +1 -1
  136. package/chunks/basis_transcoder.js +1 -1
  137. package/chunks/index.js +1 -1
  138. package/chunks/lclayout.js +1 -1
  139. package/chunks/lerc-wasm.js +1 -1
  140. package/config.d.ts +2 -0
  141. package/config.js +1 -1
  142. package/core/accessorSupport/DefaultsStore.js +1 -1
  143. package/core/accessorSupport/MultiOriginStore.js +1 -1
  144. package/core/accessorSupport/Store.js +1 -1
  145. package/core/accessorSupport/decorators/reader.js +1 -1
  146. package/core/accessorSupport/decorators/writer.js +1 -1
  147. package/core/sql/WhereGrammar.js +2 -2
  148. package/core/workers/WorkerOwner.js +1 -1
  149. package/core/workers/workerFactory.js +1 -1
  150. package/core/workers/workers.js +2 -2
  151. package/core/workers.d.ts +9 -0
  152. package/editing/sharedTemplates/executor/builders/equallySpaced.js +1 -1
  153. package/form/elements/inputs/DynamicChoiceInput.d.ts +4 -2
  154. package/geometry/Mesh.js +1 -1
  155. package/geometry/operators/gx/operatorAlphaShape.js +1 -1
  156. package/geometry/operators/gx/operatorOffset.js +1 -1
  157. package/geometry/operators/gx/operatorPolygonSlicer.js +1 -1
  158. package/geometry/operators/support/jsonConverter.js +1 -1
  159. package/geometry/support/curves/bezierCurveUtils.js +1 -1
  160. package/geometry/support/curves/ellipticArc7Utils.js +1 -1
  161. package/geometry/support/meshUtils/merge.js +1 -1
  162. package/geometry/support/meshUtils/rotate.js +1 -1
  163. package/geometry/support/polygonExtentClipping.js +1 -1
  164. package/identity/Credential.js +1 -1
  165. package/kernel.js +1 -1
  166. package/layers/AnnotationFeatureLayer.d.ts +2 -2
  167. package/layers/AnnotationFeatureLayer.js +1 -1
  168. package/layers/CatalogLayer.d.ts +2 -2
  169. package/layers/CatalogLayer.js +1 -1
  170. package/layers/DimensionFeatureLayer.d.ts +2 -2
  171. package/layers/DimensionFeatureLayer.js +1 -1
  172. package/layers/ElevationLayer.js +1 -1
  173. package/layers/FeatureLayer.d.ts +4 -4
  174. package/layers/FeatureLayer.js +1 -1
  175. package/layers/GeoJSONLayer.d.ts +1 -1
  176. package/layers/ImageryTileLayer.js +1 -1
  177. package/layers/LineOfSightLayer.d.ts +10 -8
  178. package/layers/SceneLayer.js +1 -1
  179. package/layers/SubtypeGroupLayer.d.ts +2 -2
  180. package/layers/SubtypeGroupLayer.js +1 -1
  181. package/layers/ViewshedLayer.d.ts +1 -1
  182. package/layers/VoxelLayer.js +1 -1
  183. package/layers/WMSLayer.js +1 -1
  184. package/layers/effects/parser.js +3 -3
  185. package/layers/geospatialPDF/GeospatialPDFFrame.js +1 -1
  186. package/layers/geospatialPDF/GeospatialPDFLayerWorker.js +9 -9
  187. package/layers/geospatialPDF/GeospatialPDFWorkerClient.js +1 -1
  188. package/layers/geospatialPDF/LGIDictMapFrame.js +1 -1
  189. package/layers/geospatialPDF/ViewportMeasureFrame.js +1 -1
  190. package/layers/geospatialPDF/geospatialPDFParserUtils.js +1 -1
  191. package/layers/graphics/controllers/I3SOnDemandController.js +1 -1
  192. package/layers/graphics/data/QueryEngineResult.js +1 -1
  193. package/layers/graphics/sources/connections/WebSocketConnection.js +1 -1
  194. package/layers/graphics/sources/parquet/FileProvider.js +1 -1
  195. package/layers/graphics/sources/support/ParquetSourceWorker.js +1 -1
  196. package/layers/mixins/{FeatureLayerReload.d.ts → ReloadableLayer.d.ts} +5 -3
  197. package/layers/mixins/ReloadableLayer.js +2 -0
  198. package/layers/raster/datasets/BaseRaster.js +1 -1
  199. package/layers/raster/datasets/GeospatialPDFRaster.js +1 -1
  200. package/layers/raster/datasets/ImageAuxRaster.js +2 -2
  201. package/layers/raster/datasets/ImageServerRaster.js +1 -1
  202. package/layers/raster/datasets/InMemoryRaster.js +1 -1
  203. package/layers/raster/datasets/MRFRaster.js +1 -1
  204. package/layers/raster/datasets/TIFFRaster.js +1 -1
  205. package/layers/raster/datasets/WCSRaster.js +1 -1
  206. package/layers/raster/formats/ElevationCodec.js +2 -0
  207. package/layers/raster/formats/ImageCanvasDecoder.js +1 -1
  208. package/layers/raster/formats/Lerc.js +1 -1
  209. package/layers/raster/formats/RasterCodec.js +1 -1
  210. package/layers/raster/formats/TiffDecoder.js +1 -1
  211. package/layers/raster/formats/Zlib.js +1 -1
  212. package/layers/raster/functions/stretchUtils.js +1 -1
  213. package/layers/raster/functions/vectorFieldUtils.js +1 -1
  214. package/layers/support/FieldsIndex.js +1 -1
  215. package/layers/support/LercWorker.js +1 -1
  216. package/layers/support/RasterWorker.js +1 -1
  217. package/layers/support/TileInfo.d.ts +1 -1
  218. package/layers/support/TileInfo.js +1 -1
  219. package/layers/support/featureReductionProperties.js +1 -1
  220. package/layers/support/kmlUtils.js +1 -1
  221. package/layers/support/layerOriginUtils.js +1 -1
  222. package/layers/video/VideoController.js +10 -10
  223. package/libs/maquette/projection.js +1 -1
  224. package/networks/UtilityNetworkTraceAnalysis.js +1 -1
  225. package/package.json +6 -6
  226. package/popup/FeatureModel.js +1 -1
  227. package/popup/FeaturesModel.js +1 -1
  228. package/portal/Portal.js +1 -1
  229. package/request/process.js +1 -1
  230. package/request/types.d.ts +7 -0
  231. package/rest/knowledgeGraphService.js +1 -1
  232. package/rest/networks/trace.js +1 -1
  233. package/rest/query/executeQuery.js +1 -1
  234. package/smartMapping/raster/renderers/shadedRelief.js +1 -1
  235. package/smartMapping/renderers/univariateColorSize.js +1 -1
  236. package/smartMapping/statistics/support/statsWorker.js +1 -1
  237. package/smartMapping/statistics/support/utils.js +1 -1
  238. package/smartMapping/support/adapters/FeatureLayerAdapter.js +1 -1
  239. package/smartMapping/support/adapters/FeatureLayerBinningAdapter.js +1 -1
  240. package/smartMapping/support/adapters/InMemoryLayerAdapter.js +1 -1
  241. package/smartMapping/support/adapters/OGCFeatureLayerAdapter.js +1 -1
  242. package/smartMapping/support/adapters/SceneLayerAdapter.js +1 -1
  243. package/smartMapping/support/adapters/support/utils.js +1 -1
  244. package/smartMapping/support/clusterUtils.js +1 -1
  245. package/statistics/utils.js +1 -1
  246. package/symbols/cim/CIMCursor.js +1 -1
  247. package/symbols/cim/CIMSymbolDrawHelper.js +1 -1
  248. package/symbols/cim/cimAnalyzer.js +1 -1
  249. package/symbols/support/ElevationInfo.d.ts +4 -3
  250. package/time/TimeExtent.d.ts +1 -1
  251. package/undoredo/support/Services.js +1 -1
  252. package/views/2d/engine/vectorTiles/buckets/SymbolBucket.js +2 -2
  253. package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelMeshWriter.js +1 -1
  254. package/views/2d/grid/GridView2D.js +1 -1
  255. package/views/2d/layers/FeatureLikeLayerView2D.js +1 -1
  256. package/views/2d/layers/features/sources/strategies/FeatureHybridTileLoadStrategy.js +1 -1
  257. package/views/2d/layers/features/sources/strategies/FeaturePagedTileLoadStrategy.js +1 -1
  258. package/views/2d/layers/features/sources/strategies/FeatureSnapshotLoadStrategy.js +1 -1
  259. package/views/2d/viewpointUtils.js +1 -1
  260. package/views/3d/analysis/AreaMeasurement/support/MeasurementData.js +1 -1
  261. package/views/3d/analysis/Dimension/LengthDimensionSubTool.js +1 -1
  262. package/views/3d/analysis/LineOfSight/LineOfSightController.js +1 -1
  263. package/views/3d/analysis/LineOfSight/LineOfSightTool.js +1 -1
  264. package/views/3d/analysis/LineOfSight/types.d.ts +14 -3
  265. package/views/3d/analysis/LineOfSightAnalysisView3D.d.ts +39 -13
  266. package/views/3d/analysis/Viewshed/ViewshedEditTool.js +1 -1
  267. package/views/3d/analysis/Viewshed/ViewshedTool.js +1 -1
  268. package/views/3d/analysis/Viewshed/types.d.ts +7 -0
  269. package/views/3d/analysis/ViewshedAnalysisView3D.d.ts +43 -15
  270. package/views/3d/analysis/VolumeMeasurement/VolumeMeasurementTool.js +1 -1
  271. package/views/3d/input/handlers/KeyboardNavigation.js +1 -1
  272. package/views/3d/interactive/editingTools/draw/DrawGraphicTool3D.js +1 -1
  273. package/views/3d/interactive/editingTools/reshape/ReshapeOperation.js +1 -1
  274. package/views/3d/interactive/editingTools/transform/ExtentTransformTool.js +1 -1
  275. package/views/3d/interactive/editingTools/transform/ScaleRotateTransform.js +1 -1
  276. package/views/3d/interactive/measurementTools/areaMeasurement3D/AreaMeasurement3DTool.js +1 -1
  277. package/views/3d/interactive/measurementTools/directLineMeasurement3D/DirectLineMeasurement3DTool.js +1 -1
  278. package/views/3d/interactive/visualElements/ExtendedLineVisualElement.js +1 -1
  279. package/views/3d/interactive/visualElements/OutlineVisualElement.js +1 -1
  280. package/views/3d/layers/IntegratedMesh3DTilesLayerView3D.js +1 -1
  281. package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
  282. package/views/3d/layers/graphics/Graphics3DElevationAlignment.js +1 -1
  283. package/views/3d/layers/graphics/Graphics3DGraphic.js +1 -1
  284. package/views/3d/layers/graphics/Graphics3DIconSymbolLayer.js +1 -1
  285. package/views/3d/layers/graphics/Graphics3DPathSymbolLayer.js +1 -1
  286. package/views/3d/layers/graphics/SpatialIndex2D.js +1 -1
  287. package/views/3d/layers/i3s/I3SNode.js +1 -1
  288. package/views/3d/layers/i3s/I3SUtil.js +1 -1
  289. package/views/3d/layers/i3s/I3SViewportQueries.js +1 -1
  290. package/views/3d/layers/i3s/LayerElevationProvider.js +1 -1
  291. package/views/3d/layers/support/FeatureTileFetcher3D.js +1 -1
  292. package/views/3d/layers/support/FeatureTileFetcher3DDebugger.js +1 -1
  293. package/views/3d/layers/support/ImageHighlightHelper3D.js +1 -1
  294. package/views/3d/layers/support/MediaLayerInteraction.js +1 -1
  295. package/views/3d/layers/support/StageLayerElevationProvider.js +1 -1
  296. package/views/3d/state/helpers/SceneIntersectionHelper.js +1 -1
  297. package/views/3d/state/utils/navigationUtils.js +1 -1
  298. package/views/3d/support/elevationUpdateExtentUtils.js +1 -1
  299. package/views/3d/support/elevationUpdateUtils.js +1 -1
  300. package/views/3d/support/pointsOfInterest/Focus.js +1 -1
  301. package/views/3d/support/sphereExtentUtils.js +2 -0
  302. package/views/3d/terrain/OverlayFramebufferObject.js +1 -1
  303. package/views/3d/terrain/OverlayRenderer.js +1 -1
  304. package/views/3d/terrain/PatchRenderData.js +1 -1
  305. package/views/3d/webgl-engine/lib/BindParameters.js +1 -1
  306. package/views/3d/webgl-engine/lib/ManagedTexture.js +1 -1
  307. package/views/3d/webgl-engine/lib/Renderer.js +1 -1
  308. package/views/3d/webgl-engine/lib/ViewshedShadowMap.js +1 -1
  309. package/views/3d/webgl-engine/materials/internal/MaterialUtil.js +1 -1
  310. package/views/3d/webgl-engine/materials/renderers/MergedRenderer.js +1 -1
  311. package/views/3d/webgl-engine/materials/renderers/PerBufferData.js +1 -1
  312. package/views/SceneView.js +1 -1
  313. package/views/ToolViewManager.js +1 -1
  314. package/views/View.js +1 -1
  315. package/views/analysis/ElevationProfile/ElevationProfileTool.js +1 -1
  316. package/views/draw/DrawOperation.js +1 -1
  317. package/views/draw/support/InteractiveHandle.js +1 -1
  318. package/views/draw/support/Reshape.js +1 -1
  319. package/views/draw/support/createUtils.js +1 -1
  320. package/views/draw/support/editingSessionUtils.js +1 -1
  321. package/views/draw/support/managers/InteractiveHandleManager.js +1 -1
  322. package/views/interactive/SegmentLabels.js +1 -1
  323. package/views/interactive/editGeometry/EditGeometry.js +1 -1
  324. package/views/interactive/editGeometry/EditGeometryOperations.js +1 -1
  325. package/views/interactive/editGeometry/operations/SetAllVertexPositions.js +1 -1
  326. package/views/interactive/editGeometry/operations/UndoGroup.js +1 -1
  327. package/views/interactive/options/TooltipOptions.d.ts +2 -0
  328. package/views/interactive/sketch/SketchTooltipOptions.d.ts +2 -0
  329. package/views/interactive/sketch/constraintUtils.js +1 -1
  330. package/views/interactive/snapping/SnappingDragPipelineStep.js +1 -1
  331. package/views/interactive/snapping/SnappingManagerPool.js +1 -1
  332. package/views/interactive/snapping/allLayerSnapping.js +1 -1
  333. package/views/interactive/tooltip/components/TooltipEditableField.js +1 -1
  334. package/views/layers/LayerView.js +1 -1
  335. package/views/layers/LineOfSightLayerView.d.ts +35 -13
  336. package/views/layers/SketchLayerView.d.ts +1 -0
  337. package/views/layers/ViewshedLayerView.d.ts +36 -12
  338. package/views/webgl/Program.js +1 -1
  339. package/views/webgl/Texture.js +1 -1
  340. package/widgets/AreaMeasurement2D/AreaMeasurement2DViewModel.d.ts +2 -1
  341. package/widgets/BasemapToggle/BasemapToggleViewModel.d.ts +2 -0
  342. package/widgets/BasemapToggle/BasemapToggleViewModel.js +1 -1
  343. package/widgets/Directions.js +1 -1
  344. package/widgets/DistanceMeasurement2D/DistanceMeasurement2DViewModel.d.ts +2 -1
  345. package/widgets/Editor/CreateFeaturesWorkflow.js +1 -1
  346. package/widgets/Editor/legacy/CreateFeaturesWorkflow.js +1 -1
  347. package/widgets/ElevationProfile/components/Statistics.js +1 -1
  348. package/widgets/ElevationProfile/support/chartUtils.js +1 -1
  349. package/widgets/Expand/ExpandViewModel.d.ts +2 -0
  350. package/widgets/FeatureTable/support/FeatureStore.js +1 -1
  351. package/widgets/FeatureTable/support/GroupColumnTemplate.js +1 -1
  352. package/widgets/FeatureTable/support/TableTemplate.js +1 -1
  353. package/widgets/Fullscreen/FullscreenViewModel.d.ts +3 -1
  354. package/widgets/Home/HomeViewModel.d.ts +2 -0
  355. package/widgets/OrientedImageryViewer.js +1 -1
  356. package/widgets/Print.js +1 -1
  357. package/widgets/Sketch/SketchViewModel.js +1 -1
  358. package/widgets/Slice.js +1 -1
  359. package/widgets/Swipe/SwipeViewModel.d.ts +2 -0
  360. package/widgets/Swipe/types.d.ts +9 -2
  361. package/widgets/TimeSlider/TimeSliderViewModel.d.ts +9 -5
  362. package/widgets/TimeSlider/types.d.ts +7 -0
  363. package/widgets/TimeSlider.d.ts +2 -3
  364. package/widgets/TimeSlider.js +1 -1
  365. package/widgets/Track/TrackViewModel.d.ts +4 -0
  366. package/widgets/Track/types.d.ts +1 -0
  367. package/widgets/UtilityNetworkTraceAnalysis/UtilityNetworkTraceAnalysisViewModel.js +1 -1
  368. package/widgets/support/SelectionList/SelectionListViewModel.js +1 -1
  369. package/widgets/support/SelectionList.js +1 -1
  370. package/widgets/support/Selector3D/selectorUtils.js +1 -1
  371. package/widgets/support/componentsUtils.js +1 -1
  372. package/assets/esri/core/workers/chunks/0050916e462e3c9e0627.js +0 -1
  373. package/assets/esri/core/workers/chunks/024b44c0c8876627f904.js +0 -1
  374. package/assets/esri/core/workers/chunks/02c5d027bdaee67869cf.js +0 -1
  375. package/assets/esri/core/workers/chunks/03261b9451e293a0fac8.js +0 -1
  376. package/assets/esri/core/workers/chunks/0c8c01097847617261b9.js +0 -1
  377. package/assets/esri/core/workers/chunks/0d931c7579b6409a696d.js +0 -1
  378. package/assets/esri/core/workers/chunks/12c154342fff876f2f1e.js +0 -1
  379. package/assets/esri/core/workers/chunks/1e11d2e97d17685b878a.js +0 -1
  380. package/assets/esri/core/workers/chunks/1f339247b68b061ab0a4.js +0 -1
  381. package/assets/esri/core/workers/chunks/21ddb26526bcb2b122c3.js +0 -1
  382. package/assets/esri/core/workers/chunks/2eae542fe7f0f6576ac1.js +0 -1
  383. package/assets/esri/core/workers/chunks/34cbaf844730ac2d92c2.js +0 -2
  384. package/assets/esri/core/workers/chunks/3c301a689c7853c9fa67.js +0 -2
  385. package/assets/esri/core/workers/chunks/3f946c13ad97fbed867b.js +0 -1
  386. package/assets/esri/core/workers/chunks/444e5f214abce3d607cd.js +0 -1
  387. package/assets/esri/core/workers/chunks/46a7da93a63663878583.js +0 -1
  388. package/assets/esri/core/workers/chunks/4a1e23e021bac37a88ab.js +0 -1
  389. package/assets/esri/core/workers/chunks/4c4117e28ea358a32088.js +0 -1
  390. package/assets/esri/core/workers/chunks/54b18559280a7d2a8d93.js +0 -1
  391. package/assets/esri/core/workers/chunks/59b216b60464611742d4.js +0 -1
  392. package/assets/esri/core/workers/chunks/604f0f4150fb79ee54c8.js +0 -1
  393. package/assets/esri/core/workers/chunks/6299be5e7e26bf3c6859.js +0 -1
  394. package/assets/esri/core/workers/chunks/62ac588f7dd1d24d0c9d.js +0 -1
  395. package/assets/esri/core/workers/chunks/62c8c9ad09e0166207fd.js +0 -1
  396. package/assets/esri/core/workers/chunks/62d6e101e9bd9557a410.js +0 -1
  397. package/assets/esri/core/workers/chunks/6558488ea96620439f34.js +0 -1
  398. package/assets/esri/core/workers/chunks/665e31c494d2af505acc.js +0 -1
  399. package/assets/esri/core/workers/chunks/6f4e6022a52de0c54aab.js +0 -1
  400. package/assets/esri/core/workers/chunks/7267b17de212207142c9.js +0 -1
  401. package/assets/esri/core/workers/chunks/745a153d0cd34faa124e.js +0 -1
  402. package/assets/esri/core/workers/chunks/7572c2bc5062e66f6330.js +0 -1
  403. package/assets/esri/core/workers/chunks/76ab353d80d786777161.js +0 -2
  404. package/assets/esri/core/workers/chunks/7ef182e24cad50815b4e.js +0 -1
  405. package/assets/esri/core/workers/chunks/8293600f94553afc8c38.js +0 -1
  406. package/assets/esri/core/workers/chunks/8431ca60ad33d594e323.js +0 -1
  407. package/assets/esri/core/workers/chunks/8483c50ed8f280fd74bb.js +0 -1
  408. package/assets/esri/core/workers/chunks/876f7633c15f1e31078d.js +0 -1
  409. package/assets/esri/core/workers/chunks/8ca9648eacb894283513.js +0 -1
  410. package/assets/esri/core/workers/chunks/8cb716f110d164030309.js +0 -1
  411. package/assets/esri/core/workers/chunks/91ebb2ccab1889eb7e81.js +0 -1
  412. package/assets/esri/core/workers/chunks/94e427040edb469d58ad.js +0 -1
  413. package/assets/esri/core/workers/chunks/9ce91a909eccc4dfe388.js +0 -1
  414. package/assets/esri/core/workers/chunks/9e1a3b6a08c96dcefdde.js +0 -1
  415. package/assets/esri/core/workers/chunks/9e3e442a9874ed23a043.js +0 -1
  416. package/assets/esri/core/workers/chunks/ad76f7ab2f3e6d5a5b3c.js +0 -1
  417. package/assets/esri/core/workers/chunks/aff32980d91dab07dfb7.js +0 -1
  418. package/assets/esri/core/workers/chunks/b49df4ebd4be1181b0f9.js +0 -2
  419. package/assets/esri/core/workers/chunks/b557824bc1fa163d72a3.js +0 -2
  420. package/assets/esri/core/workers/chunks/bbf993dba74850bbf9d7.js +0 -1
  421. package/assets/esri/core/workers/chunks/d8f1cefcad02d7353d4b.js +0 -1
  422. package/assets/esri/core/workers/chunks/d938987344bce83cc660.js +0 -1
  423. package/assets/esri/core/workers/chunks/ddf0671976648f621269.js +0 -1
  424. package/assets/esri/core/workers/chunks/de02f60258e6985ef676.js +0 -1
  425. package/assets/esri/core/workers/chunks/e10b57aefcc89671116e.js +0 -1
  426. package/assets/esri/core/workers/chunks/e65dfa19f030ec298437.js +0 -1
  427. package/assets/esri/core/workers/chunks/ed8786fed345718ed684.js +0 -1
  428. package/assets/esri/core/workers/chunks/f122c18af10e56f9ec2b.js +0 -1
  429. package/assets/esri/core/workers/chunks/f92364afaefbac7e8f77.js +0 -1
  430. package/assets/esri/core/workers/chunks/fc44227c1756f65b95df.js +0 -1
  431. package/assets/esri/core/workers/chunks/fd9663952d5a94f3a83f.js +0 -1
  432. package/assets/esri/core/workers/chunks/fe9879ecd69ac4329291.js +0 -1
  433. package/layers/mixins/FeatureLayerReload.js +0 -2
  434. /package/assets/esri/core/workers/chunks/{b557824bc1fa163d72a3.js.LICENSE.txt → 164c8eeefa8232b2b191.js.LICENSE.txt} +0 -0
  435. /package/assets/esri/core/workers/chunks/{b49df4ebd4be1181b0f9.js.LICENSE.txt → 2981e904ab62f3ed80d0.js.LICENSE.txt} +0 -0
  436. /package/assets/esri/core/workers/chunks/{34cbaf844730ac2d92c2.js.LICENSE.txt → 32cc59e126df8c96a0cf.js.LICENSE.txt} +0 -0
  437. /package/assets/esri/core/workers/chunks/{590e6c70206122e4cc3c.js.LICENSE.txt → 844eedda8f749972f707.js.LICENSE.txt} +0 -0
  438. /package/assets/esri/core/workers/chunks/{3c301a689c7853c9fa67.js.LICENSE.txt → b686cd74975da09b9c91.js.LICENSE.txt} +0 -0
  439. /package/assets/esri/core/workers/chunks/{76ab353d80d786777161.js.LICENSE.txt → bd46a04a9ee4ea9e6ef1.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{defaultFontFamily as e}from"../../core/fontUtils.js";import has from"../../core/has.js";import{clone as t}from"../../core/lang.js";import n from"../../core/Logger.js";import{deg2rad as r}from"../../core/mathUtils.js";import i from"../../core/ObjectPool.js";import{onePixelInPoints as a,pt2px as o,px2pt as s,onePointInPixels as c}from"../../core/screenUtils.js";import{GeometryCursor as l}from"../../geometry/GeometryCursor.js";import{empty as u,expandPointInPlace as d,center as f,width as p,height as m,diagonal as h,fromValues as g,create as _}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as v}from"../../geometry/support/boundsUtils.js";import{polygonCentroid as y}from"../../geometry/support/centroid.js";import{targetIntersectsPolygon as b,pointInPolygon as x,nearLine as S}from"../../geometry/support/intersectsBase.js";import{isPolygon as C,isPolyline as w,isExtent as T,isMultipoint as E,isPoint as D}from"../../geometry/support/jsonTypeUtils.js";import{SimpleEffectCursor as O}from"./CIMEffects.js";import ee from"./CIMImageColorSubstitutionHelper.js";import{getEffectOperator as te,getPlacementOperator as ne}from"./CIMOperators.js";import{Placement as re}from"./CIMPlacements.js";import{defaultCIMValues as k}from"./defaultCIMValues.js";import{fromCIMFontStyle as ie}from"./fromCIMFontStyle.js";import{getFirstFrame as A}from"./imageUtils.js";import{rotate as j}from"./mathUtils.js";import{addColorStops as M}from"./rasterizingUtils.js";import ae from"./Rect.js";import{parseRichTextRuns as N,hasRichTextFormattingTags as P}from"./richTextUtils.js";import F from"./TextRasterizer.js";import{getNumericValue as I,isSVGImage as L,getRelativeGradientSize as R,getEffectsInflateSize as oe,fromCIMFontDecoration as se,fromCIMHorizontalAlignment as ce,fromCIMVerticalAlignment as le,getFillColor as z,getStrokeColor as B,getStrokeWidth as V,getFontWeight as H,getFontStyle as U,isCIMFill as ue,getSize as de}from"./utils.js";import{destroyHiddenSvg as fe,createHiddenSvg as pe,createSvgElement as W}from"../../views/2d/engine/svgUtils.js";import{magicLabelLineHeight as me,glyphSize as he,hittestToleranceSmallSymbol as ge,hittestSmallSymbolThreshold as _e}from"../../views/2d/engine/webgl/definitions.js";import{shapeTextResource as ve}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";import{roundPtToWholePixel as ye,getLineWidth as be}from"../../views/2d/layers/graphics/graphicsUtils.js";const G=Math.PI/180,K=.5,q=()=>n.getLogger(`esri.symbols.cim.CIMSymbolDrawHelper`);class J{constructor(e){this._t=e}static createIdentity(){return new J([1,0,0,0,1,0])}clone(){let e=this._t;return new J(e.slice())}transform(e){let t=this._t;return[t[0]*e[0]+t[1]*e[1]+t[2],t[3]*e[0]+t[4]*e[1]+t[5]]}static createScale(e,t){return new J([e,0,0,0,t,0])}scale(e,t){let n=this._t;return n[0]*=e,n[1]*=e,n[2]*=e,n[3]*=t,n[4]*=t,n[5]*=t,this}scaleRatio(){return Math.sqrt(this._t[0]*this._t[0]+this._t[1]*this._t[1])}static createTranslate(e,t){return new J([0,0,e,0,0,t])}translate(e,t){let n=this._t;return n[2]+=e,n[5]+=t,this}static createRotate(e){let t=Math.cos(e),n=Math.sin(e);return new J([t,-n,0,n,t,0])}rotate(e){return J.multiply(this,J.createRotate(e),this)}angle(){let e=this._t[0],t=this._t[3],n=Math.sqrt(e*e+t*t);return[e/n,t/n]}static multiply(e,t,n){let r=e._t,i=t._t,a=r[0]*i[0]+r[3]*i[1],o=r[1]*i[0]+r[4]*i[1],s=r[2]*i[0]+r[5]*i[1]+i[2],c=r[0]*i[3]+r[3]*i[4],l=r[1]*i[3]+r[4]*i[4],u=r[2]*i[3]+r[5]*i[4]+i[5],d=n._t;return d[0]=a,d[1]=o,d[2]=s,d[3]=c,d[4]=l,d[5]=u,n}invert(){let e=this._t,t=e[0]*e[4]-e[1]*e[3];if(t===0)return new J([0,0,0,0,0,0]);t=1/t;let n=(e[1]*e[5]-e[2]*e[4])*t,r=(e[2]*e[3]-e[0]*e[5])*t,i=e[4]*t,a=-e[1]*t,o=-e[3]*t,s=e[0]*t;return new J([i,a,n,o,s,r])}}class Y{constructor(e,t){this._resourceManager=e,this._transfos=[],this._sizeTransfos=[],this._textScaling=[],this._geomUnitsPerPoint=1,this._placementPool=new i(()=>new re,void 0,void 0,100),this._earlyReturn=!1,this._mapRotation=0,this._transfos.push(t||J.createIdentity()),this._sizeTransfos.push(t?t.scaleRatio():1),this._textScaling.push(1)}setTransform(e,t){this._transfos=[e||J.createIdentity()],this._sizeTransfos=[t||(e?e.scaleRatio():1)],this._textScaling=[1]}setGeomUnitsPerPoint(e){this._geomUnitsPerPoint=e}transformPt(e){return this._transfos[this._transfos.length-1].transform(e)}transformSize(e){return e*this._sizeTransfos[this._sizeTransfos.length-1]}scaleText(e){return e*this._textScaling[this._textScaling.length-1]}reverseTransformPt(e){return this._transfos[this._transfos.length-1].invert().transform(e)}reverseTransformSize(e){return e/this._sizeTransfos[this._sizeTransfos.length-1]}reverseTransformScalar(e){return e/this._transfos[this._transfos.length-1].scaleRatio()}reverseScaleText(e){return e/this._textScaling[this._textScaling.length-1]}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(e,t=!1,n=1){let r=t?e.scaleRatio():1;J.multiply(e,this.back(),e),this._transfos.push(e),this._sizeTransfos.push(this._sizeTransfos[this._sizeTransfos.length-1]*r),this._textScaling.push(this._textScaling[this._textScaling.length-1]*n)}pop(){this._transfos.splice(-1,1),this._sizeTransfos.splice(-1,1),this._textScaling.splice(-1,1)}drawSymbol(e,t,n){if(e)switch(e.type){case`CIMPointSymbol`:case`CIMLineSymbol`:case`CIMPolygonSymbol`:this.drawMultiLayerSymbol(e,t);break;case`CIMTextSymbol`:this.drawTextSymbol(e,t,n)}}drawMultiLayerSymbol(e,t){if(!e||!t)return;let n=e.symbolLayers;if(!n)return;let r=e.effects;if(r&&r.length>0){let e=this.executeEffects(r,t);if(e){let t=e.next();for(;t;)this.drawSymbolLayers(n,t.asJSON()),t=e.next()}}else this.drawSymbolLayers(n,t)}executeEffects(e,t){let n=this.geomUnitsPerPoint(),r=oe(e),i=new O(l.fromJSONCIM(t));for(let a of e){let e=te(a);e&&(i=e.execute(i,a,{geomUnitsPerPoint:n,tileKey:null,maxInflateSize:r,scale:null,spatialReference:t.spatialReference,preventClipping:!1}))}return i}drawSymbolLayers(e,t){let n=e.length;for(;n--;){let r=e[n];if(!r||r.enable===!1)continue;let i=r.effects;if(i&&i.length>0){let e=this.executeEffects(i,t);if(e){let t=null;for(;(t=e.next())&&(this.drawSymbolLayer(r,t.asJSON()),!this._earlyReturn););}}else this.drawSymbolLayer(r,t);if(this._earlyReturn)return}}drawSymbolLayer(e,t){switch(e.type){case`CIMSolidFill`:this.drawSolidFill(t,e.color,e.path);break;case`CIMHatchFill`:this.drawHatchFill(t,e);break;case`CIMPictureFill`:this.drawPictureFill(t,e);break;case`CIMGradientFill`:this.drawGradientFill(t,e);break;case`CIMSolidStroke`:this.drawSolidStroke(t,e.color,e.width,e.capStyle,e.joinStyle,e.miterLimit,e.path);break;case`CIMPictureStroke`:this.drawPictureStroke(t,e);break;case`CIMGradientStroke`:this.drawGradientStroke(t,e);break;case`CIMCharacterMarker`:case`CIMPictureMarker`:case`CIMVectorMarker`:this.drawMarkerLayer(e,t)}}drawHatchFill(e,t){let n=we(t,e,this.geomUnitsPerPoint());n&&(this.pushClipPath(e),this.drawMultiLayerSymbol(t.lineSymbol,n),this.popClipPath())}drawPictureFill(e,t){}drawGradientFill(e,t){}drawPictureStroke(e,t){}drawGradientStroke(e,t){}drawMarkerLayer(e,t){let n=e.markerPlacement;if(n){let r=ne(n);if(r){let i=n.type===`CIMMarkerPlacementInsidePolygon`||n.type===`CIMMarkerPlacementPolygonCenter`&&n.clipAtBoundary;i&&this.pushClipPath(t);let a=r.execute(l.fromJSONCIM(t),n,this.geomUnitsPerPoint(),null);if(a){let t=null;for(;(t=a.next())&&(this.drawMarker(e,t),!this._earlyReturn););}i&&this.popClipPath()}}else{let n=this._placementPool.acquire();if(D(t))n.tx=t.x,n.ty=t.y,this.drawMarker(e,n);else if(C(t)){let r=y(t);r&&([n.tx,n.ty]=r,this.drawMarker(e,n))}else if(w(t)){for(let r of t.paths)for(let t of r)if(n.tx=t[0],n.ty=t[1],this.drawMarker(e,n),this._earlyReturn)break}else for(let r of t.points)if(n.tx=r[0],n.ty=r[1],this.drawMarker(e,n),this._earlyReturn)break;this._placementPool.release(n)}}drawMarker(e,t){switch(e.type){case`CIMCharacterMarker`:case`CIMPictureMarker`:this.drawPictureMarker(e,t);break;case`CIMVectorMarker`:this.drawVectorMarker(e,t)}}drawPictureMarker(e,t){if(!e)return;let n=this._resourceManager.getResource(e.url),r=I(e.size,k.CIMPictureMarker.size);if(n==null||r<=0)return;let i=n.width,a=n.height;if(!i||!a)return;let o=i/a,s=I(e.scaleX,1),c=J.createIdentity(),l=e.anchorPoint;if(l){let t=l.x,n=l.y;e.anchorPointUnits!==`Absolute`&&(t*=r*o*s,n*=r),c.translate(-t,-n)}let u=I(e.rotation);e.rotateClockwise&&(u=-u),this._mapRotation&&(u+=this._mapRotation),u&&c.rotate(u*G);let d=I(e.offsetX),f=I(e.offsetY);if(d||f){if(this._mapRotation){let e=G*this._mapRotation,t=Math.cos(e),n=Math.sin(e),r=d*t-f*n,i=d*n+f*t;d=r,f=i}c.translate(d,f)}let p=this.geomUnitsPerPoint();p!==1&&c.scale(p,p);let m=t.getAngle();m&&c.rotate(m),c.translate(t.tx,t.ty),this.push(c),this.drawImage(e,r),this.pop()}drawVectorMarker(e,t){if(!e)return;let n=e.markerGraphics;if(!n)return;let r=I(e.size,k.CIMVectorMarker.size),i=e.frame,a=i?i.ymax-i.ymin:0,o=r&&a?r/a:1,s=J.createIdentity();i&&s.translate(-(i.xmax+i.xmin)*.5,-(i.ymax+i.ymin)*.5);let c=e.anchorPoint;if(c){let t=c.x,n=c.y;e.anchorPointUnits===`Absolute`?(t/=o,n/=o):i&&(t*=i.xmax-i.xmin,n*=i.ymax-i.ymin),s.translate(-t,-n)}o!==1&&s.scale(o,o);let l=I(e.rotation);e.rotateClockwise&&(l=-l),this._mapRotation&&(l+=this._mapRotation),l&&s.rotate(l*G);let u=I(e.offsetX),d=I(e.offsetY);if(u||d){if(this._mapRotation){let e=G*this._mapRotation,t=Math.cos(e),n=Math.sin(e),r=u*t-d*n,i=u*n+d*t;u=r,d=i}s.translate(u,d)}let f=this.geomUnitsPerPoint();f!==1&&s.scale(f,f);let p=t.getAngle();p&&s.rotate(p),s.translate(t.tx,t.ty);let m=e.scaleSymbolsProportionally?1:o;this.push(s,e.scaleSymbolsProportionally,m);for(let e of n){(!e?.symbol||!e.geometry)&&q().error(`Invalid marker graphic`,e);let t=e.textString;if(typeof t==`number`&&(t=t.toString()),this.drawSymbol(e.symbol,e.geometry,t),this._earlyReturn)break}this.pop()}drawTextSymbol(e,t,n){if(!e||!D(t)||I(e.height,k.CIMTextSymbol.height)<=0)return;let r=J.createIdentity(),i=I(e.angle);i=-i,i&&r.rotate(i*G);let a=I(e.offsetX),o=I(e.offsetY);(a||o)&&r.translate(a,o);let s=this.geomUnitsPerPoint();s!==1&&r.scale(s,s),r.translate(t.x,t.y),this.push(r),this.drawText(e,n),this.pop()}}class xe extends Y{constructor(e,t){super(e,t),this.reset()}reset(){this._xmin=this._ymin=1/0,this._xmax=this._ymax=-1/0,this._clipCount=0}envelope(){return new ae(this._xmin,this._ymin,this._xmax-this._xmin,this._ymax-this._ymin)}bounds(){return g(this._xmin,this._ymin,this._xmax,this._ymax)}drawSolidFill(e){if(!(!e||this._clipCount>0)){if(C(e))this._processPath(e.rings,0);else if(w(e))this._processPath(e.paths,0);else if(T(e)){let t=X(e);t&&this._processPath(t.rings,0)}else console.error(`drawSolidFill Unexpected geometry type!`)}}drawSolidStroke(e,t,n){if(!e||this._clipCount>0||n==null||n<=0)return;let r=Math.max(this.transformSize(I(n,k.CIMSolidStroke.width))*.5,.5*K);if(C(e))this._processPath(e.rings,r);else if(w(e))this._processPath(e.paths,r);else if(T(e)){let t=X(e);t&&this._processPath(t.rings,r)}else console.error(`drawSolidStroke unexpected geometry type!`)}drawMarkerLayer(e,t){C(t)&&e.markerPlacement&&(e.markerPlacement.type===`CIMMarkerPlacementInsidePolygon`||e.markerPlacement.type===`CIMMarkerPlacementPolygonCenter`&&e.markerPlacement.clipAtBoundary)?this._processPath(t.rings,0):super.drawMarkerLayer(e,t)}drawHatchFill(e,t){this.drawSolidFill(e)}drawPictureFill(e,t){this.drawSolidFill(e)}drawGradientFill(e,t){this.drawSolidFill(e)}drawPictureStroke(e,t){this.drawSolidStroke(e,null,t.width)}drawGradientStroke(e,t){this.drawSolidStroke(e,null,t.width)}pushClipPath(e){this.drawSolidFill(e),this._clipCount++}popClipPath(){this._clipCount--}drawImage(e,t){let{url:n}=e,r=I(e.scaleX,1),i=r*t,a=t,o=this._resourceManager.getResource(n);if(o!=null){let e=o.height/o.width;i=r*(t?e>1?t:t/e:o.width),a=t?e>1?t*e:t:o.height}this._merge(this.transformPt([-i/2,-a/2]),0),this._merge(this.transformPt([-i/2,a/2]),0),this._merge(this.transformPt([i/2,-a/2]),0),this._merge(this.transformPt([i/2,a/2]),0)}drawText(e,t){if(!t||t.length===0)return;this._textRasterizer||=new F;let n=Q(e),r=N({textString:t,font:n.font,symbol:e,supportsRichText:P(t)}),[i,a]=r?this._textRasterizer.computeRichTextSize(r,n):this._textRasterizer.computeTextSize(t,n);i=s(i),a=s(a);let o=this.transformSize(1)*this.reverseTransformScalar(1);i*=o,a*=o;let c=e.horizontalAlignment??k.CIMTextSymbol.horizontalalignment,l=e.verticalAlignment??k.CIMTextSymbol.verticalalignment,u=0;switch(c){case`Left`:u=i/2;break;case`Right`:u=-i/2}let d=0;switch(l){case`Bottom`:d=a/2;break;case`Top`:d=-a/2;break;case`Baseline`:d=a/6}this._merge(this.transformPt([-i/2+u,-a/2+d]),0),this._merge(this.transformPt([-i/2+u,a/2+d]),0),this._merge(this.transformPt([i/2+u,-a/2+d]),0),this._merge(this.transformPt([i/2+u,a/2+d]),0)}_processPath(e,t){if(e)for(let n of e){let e=n?n.length:0;if(e>1){this._merge(this.transformPt(n[0]),t);for(let r=1;r<e;r++)this._merge(this.transformPt(n[r]),t)}}}_merge(e,t){e[0]-t<this._xmin&&(this._xmin=e[0]-t),e[0]+t>this._xmax&&(this._xmax=e[0]+t),e[1]-t<this._ymin&&(this._ymin=e[1]-t),e[1]+t>this._ymax&&(this._ymax=e[1]+t)}}class Se extends Y{constructor(){super(...arguments),this._hittestType=`point`,this._searchTarget=[],this._searchDistPoint=0,this._textInfo=null,this._svg=null,this._path=null,this._canvas=null}destroy(){this._svg=fe(this._svg),this._path=null,this._canvas=null}hitTest(e,t,n,r){let{textInfo:i,mapRotation:a,resolution:o,searchDist:l,hittestType:u,isScreenAligned:d}=r;this._resetHittest();let f=o*c;switch(this.setGeomUnitsPerPoint(f),u){case`point`:if(e.length!==1)return q().error(`Unexpected hittest area`,e),!1;this._hittestType=`point`,this._searchDistPoint=l/2/f,this._searchTarget=[[e[0].x,e[0].y]];break;case`rect`:if(e.length!==4)return q().error(`Unexpected hittest area`,e),!1;this._hittestType=`rect`,this._searchDistPoint=0,this._searchTarget=e.map(e=>[e.x,e.y]);break;case`polygon`:this._hittestType=`polygon`,this._searchDistPoint=0,this._searchTarget=e.map(e=>[e.x,e.y])}if(this._textInfo=i,this._mapRotation=d?a:0,!has(`esri-mobile`)){let e=s(ge*window.devicePixelRatio),n=s(_e);(t?.type!==`CIMLineSymbol`&&t?.type!==`CIMPolygonSymbol`||!t.symbolLayers?.some(ue))&&t?.type!==`CIMMeshSymbol`&&(de(t)??0)<n&&(this._searchDistPoint=e)}return this._earlyReturn=!1,this.drawSymbol(t,n),this._earlyReturn}executeEffects(e,t){return e.at(-1)?.type===`CIMGeometricEffectDashes`&&(e=e.slice(0,-1)),super.executeEffects(e,t)}drawSolidFill(e,t,n){n==null?this._hitTestFill(e):this._hittestSvgPath(e,n,!0)}drawHatchFill(e,t){this._hitTestFill(e)}drawPictureFill(e,t){this._hitTestFill(e)}drawGradientFill(e,t){this._hitTestFill(e)}drawSolidStroke(e,t,n,r,i,a,o){o==null?this._hitTestStroke(e,n):this._hittestSvgPath(e,o,!1,n)}drawPictureStroke(e,t){this._hitTestStroke(e,t.width)}drawGradientStroke(e,t){this._hitTestStroke(e,t.width)}drawMarkerLayer(e,t){e.markerPlacement&&(e.markerPlacement.type===`CIMMarkerPlacementInsidePolygon`||e.markerPlacement.type===`CIMMarkerPlacementPolygonCenter`&&e.markerPlacement.clipAtBoundary)?this._hitTestFill(t):super.drawMarkerLayer(e,t)}drawTextSymbol(e,t,n){if(!e||!D(t)||I(e.height,k.CIMTextSymbol.height)<=0)return;let r=J.createIdentity(),i=this.geomUnitsPerPoint();i!==1&&r.scale(i,i),r.translate(t.x,t.y),this.push(r),this.drawText(e,n),this.pop()}pushClipPath(e){}popClipPath(){}drawImage(e,t){let{url:n}=e,r=I(e.scaleX,1),i=this._resourceManager.getResource(n);if(i==null||i.height===0||t===0)return;let a=t*this.geomUnitsPerPoint(),o=a*r*(i.width/i.height);if(this._hittestType===`point`){let e=this.reverseTransformPt(this._searchTarget[0]),t=this._searchDistPoint;Math.abs(e[0])<o/2+t&&Math.abs(e[1])<a/2+t&&(this._earlyReturn=!0)}else{let e=o/2,t=a/2,n=[[-e,t],[e,t],[e,-t],[-e,-t],[-e,t]],r=this.isEmbedded()?this._searchTarget.map(e=>this.reverseTransformPt(e)):this._searchTarget;b(r,[n])&&(this._earlyReturn=!0)}}drawText(e,t){let n=this._textInfo;if(!n)return;let r=n.get(e);if(!r||!p(r.glyphMosaicItems))return;let i=ye(I(e.height,k.CIMTextSymbol.height)),{lineGapType:a,lineGap:o}=e,s=a?Z(a,I(o),i):0,c=e.horizontalAlignment??k.CIMTextSymbol.horizontalalignment,l=e.verticalAlignment??k.CIMTextSymbol.verticalalignment,u=e.callout?.type===`CIMBackgroundCallout`,d=ve(r.glyphMosaicItems,{scale:i/he,angle:I(e.angle),xOffset:I(e.offsetX),yOffset:I(e.offsetY),horizontalAlignment:c,verticalAlignment:l,maxLineWidth:be(e.lineWidth),lineHeight:me*Math.max(.25,Math.min(s||1,4)),decoration:e.font.decoration||`none`,useCIMAngleBehavior:!1,hasBackground:u}),f=this.reverseScaleText(1);for(let e of d.glyphs){let t=e.offsets,n=[[t.topLeft[0]*f,-t.topLeft[1]*f],[t.topRight[0]*f,-t.topRight[1]*f],[t.bottomRight[0]*f,-t.bottomRight[1]*f],[t.bottomLeft[0]*f,-t.bottomLeft[1]*f],[t.topLeft[0]*f,-t.topLeft[1]*f]];if(this._hittestType===`point`){let e=this.reverseTransformPt(this._searchTarget[0]);x(e,[n])&&(this._earlyReturn=!0)}else{let e=this.isEmbedded()?this._searchTarget.map(e=>this.reverseTransformPt(e)):this._searchTarget;b(e,[n])&&(this._earlyReturn=!0)}}function p(e){return e.type===`glyphs`?e.glyphs.length>0:e.runs.some(e=>e.glyphs.glyphs.length>0)}}_hitTestFill(e){let t=null;if(T(e)){let n=e;t=[[[n.xmin,n.ymin],[n.xmin,n.ymax],[n.xmax,n.ymax],[n.xmax,n.ymin],[n.xmin,n.ymin]]]}else if(C(e))t=e.rings;else if(w(e))t=e.paths;else return;if(this._hittestType===`point`){let e=this.reverseTransformPt(this._searchTarget[0]);if(x(e,t)&&(this._earlyReturn=!0),!this._earlyReturn){let n=this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint();S(e,t,n)&&(this._earlyReturn=!0)}}else{let e=this.isEmbedded()?this._searchTarget.map(e=>this.reverseTransformPt(e)):this._searchTarget;b(e,t)&&(this._earlyReturn=!0)}}_getSvgPath(){return(this._svg==null||this._path==null)&&(this._svg??=pe(),this._path??=W(`path`),this._svg.appendChild(this._path)),this._path}_getCanvasContext(e,t){return this._canvas??=document.createElement(`canvas`),this._canvas.width=e,this._canvas.height=t,this._canvas.getContext(`2d`,{willReadFrequently:!0})}_hittestSvgPath(e,t,n,r=0){let i=_();v(i,e);let a={x:i[0],y:i[1],width:i[2]-i[0],height:i[3]-i[1]},o=this._getSvgPath();o.setAttribute(`d`,t);let s=o.getBBox();if(this._hittestType===`point`){let e=this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint(),i=this.reverseTransformPt(this._searchTarget[0]),o=Math.max(s.width/a.width,s.height/a.height),c=1,l=2*e*o;l<1&&(c=2/l,o*=c,s.x*=c,s.y*=c,s.width*=c,s.height*=c);let u=1+r*o/2,d=this._getCanvasContext(s.width+u*2,s.height+u*2);d.setTransform(c,0,0,c,-s.x+u,-s.y+u);let f=new Path2D(t);n?d.fill(f):(d.lineWidth=o/c*r,d.stroke(f));let p=(a.width*o-s.width)/2,m=(a.height*o-s.height)/2,h=Math.floor((i[0]-a.x-e)*o-p+u),g=Math.floor((a.height-(i[1]-a.y)-e)*o+m+u),_=Math.ceil(2*e*o),v=Math.ceil(2*e*o),y=d.getImageData(h,g,_,v).data;for(let e=3;e<y.length;e+=4)if(y[e]>127.5){this._earlyReturn=!0;return}}else{let e=[[a.x,a.y],[a.x,a.y+a.height],[a.x+a.width,a.y+a.height],[a.x+a.width,a.y],[a.x,a.y]],t=this.isEmbedded()?this._searchTarget.map(e=>this.reverseTransformPt(e)):this._searchTarget;if(b(t,[e])){this._earlyReturn=!0;return}}}_hitTestStroke(e,t){let n=null;if(T(e)){let t=e;n=[[[t.xmin,t.ymin],[t.xmin,t.ymax],[t.xmax,t.ymax],[t.xmax,t.ymin],[t.xmin,t.ymin]]]}else if(C(e))n=e.rings;else if(w(e))n=e.paths;else return;if(this._hittestType===`point`){let e=this.reverseTransformPt(this._searchTarget[0]),r=I(t,k.CIMSolidStroke.width)*this.geomUnitsPerPoint(),i=this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint();S(e,n,r/2+i)&&(this._earlyReturn=!0)}else{let e=this.isEmbedded()?this._searchTarget.map(e=>this.reverseTransformPt(e)):this._searchTarget;b(e,n)&&(this._earlyReturn=!0)}}_resetHittest(){this.setTransform(),this._hittestType=`point`,this._searchTarget=[],this._searchDistPoint=0,this._textInfo=null}}class Ce extends Y{constructor(e,t,n,r){super(t,n),this._applyAdditionalRenderProps=r,this._colorSubstitutionHelper=new ee,this._ctx=e}drawSolidFill(e,t){if(!e)return;if(C(e))this._buildPath(e.rings,!0);else if(w(e))this._buildPath(e.paths,!0);else if(T(e))this._buildPath(X(e).rings,!0);else if(E(e))console.log(`CanvasDrawHelper.drawSolidFill - No implementation!`);else return;let n=this._ctx;n.fillStyle=typeof t==`string`?t:`rgba(`+Math.round(t[0])+`,`+Math.round(t[1])+`,`+Math.round(t[2])+`,`+(t[3]??255)/255+`)`,n.fill(`evenodd`)}drawSolidStroke(e,t,n,r,i,a){if(!e||!t||n===0)return;if(C(e))this._buildPath(e.rings,!0);else if(w(e))this._buildPath(e.paths,!1);else if(T(e))this._buildPath(X(e).rings,!0);else{console.log(`CanvasDrawHelper.drawSolidStroke isn't implemented!`);return}let o=this._ctx;o.strokeStyle=typeof t==`string`?t:`rgba(`+Math.round(t[0])+`,`+Math.round(t[1])+`,`+Math.round(t[2])+`,`+(t[3]??255)/255+`)`,o.lineWidth=Math.max(this.transformSize(n),K),this._setCapStyle(r),this._setJoinStyle(i),o.miterLimit=a,o.stroke()}pushClipPath(e){if(this._ctx.save(),C(e))this._buildPath(e.rings,!0);else if(w(e))this._buildPath(e.paths,!0);else if(T(e))this._buildPath(X(e).rings,!0);else return;this._ctx.clip(`evenodd`)}popClipPath(){this._ctx.restore()}drawImage(e,t){let{colorSubstitutions:n,url:r,tintColor:i}=e,a=I(e.scaleX,1),o=this._resourceManager.getResource(r);if(o==null)return;let s=t*(o.width/o.height),c=t;t||(s=o.width,c=o.height);let l=L(r)||`src`in o&&L(o.src),u=`getFrame`in o?A(o):o;n&&(u=this._colorSubstitutionHelper.applyColorSubstitution(u,n)),this._applyAdditionalRenderProps&&!l&&i&&(u=this._colorSubstitutionHelper.tintImageData(u,i));let d=this.transformPt([0,0]),[f,p]=this.getTransformAngle(),m=this.transformSize(1),h=this._ctx;h.save(),h.setTransform({m11:a*m*f,m12:a*m*p,m21:-m*p,m22:m*f,m41:d[0],m42:d[1]}),h.drawImage(u,-s/2,-c/2,s,c),h.restore()}drawText(e,t){if(!t||t.length===0)return;this._textRasterizer||=new F;let n=Q(e,this.transformSize(a)),r=N({textString:t,font:n.font,symbol:e,supportsRichText:P(t)}),i=r?this._textRasterizer.rasterizeRichText(r,n):this._textRasterizer.rasterizeText(t,n);if(!i)return;let{size:o,anchorX:s,anchorY:c,canvas:l}=i,u=o[0]*(s+.5),d=o[1]*(c-.5),f=this._ctx,p=this.transformPt([0,0]),[m,h]=this.getTransformAngle();f.save(),f.setTransform({m11:1*m,m12:1*h,m21:-1*h,m22:1*m,m41:p[0]-1*u,m42:p[1]+1*d}),f.drawImage(l,0,0),f.restore()}drawPictureFill(e,t){if(!e)return;let{colorSubstitutions:n,height:r,offsetX:i,offsetY:a,rotation:o,scaleX:s,tintColor:c,url:l}=t,u=this._resourceManager.getResource(l);if(u==null)return;if(C(e))this._buildPath(e.rings,!0);else if(w(e))this._buildPath(e.paths,!0);else if(T(e))this._buildPath(X(e).rings,!0);else if(E(e))console.log(`CanvasDrawHelper.drawPictureFill - No implementation!`);else return;let d=this._ctx,f=L(l)||`src`in u&&L(u.src),p=`getFrame`in u?A(u):u;n&&(p=this._colorSubstitutionHelper.applyColorSubstitution(p,n));let m;if(this._applyAdditionalRenderProps){f||c&&(p=this._colorSubstitutionHelper.tintImageData(p,c)),m=d.createPattern(p,`repeat`);let e=this.transformSize(1);o||=0,i=i?e*i:0,a=a?e*a:0,r&&=e*r;let t=r?r/u.height:1,n=s&&r?s*r/u.width:1;if(o!==0||t!==1||n!==1||i!==0||a!==0){let e=new DOMMatrix;e.rotateSelf(0,0,-o).translateSelf(i,a).scaleSelf(n,t,1),m.setTransform(e)}}else m=d.createPattern(p,`repeat`);d.save(),d.fillStyle=m,d.fill(`evenodd`),d.restore()}drawPictureStroke(e,n){if(!e)return;let{colorSubstitutions:r,capStyle:i,joinStyle:a,miterLimit:s,tintColor:c,url:l,width:u}=n,d=this._resourceManager.getResource(l);if(d==null)return;let f;if(C(e))f=e.rings;else if(w(e))f=e.paths;else if(T(e))f=X(e).rings;else if(E(e)){console.log(`CanvasDrawHelper.drawPictureStroke - No implementation!`);return}else return;u||=d.width;let p=L(l)||`src`in d&&L(d.src),m=`getFrame`in d?A(d):d;r&&(m=this._colorSubstitutionHelper.applyColorSubstitution(m,r)),this._applyAdditionalRenderProps&&(p||c&&(m=this._colorSubstitutionHelper.tintImageData(m,c)));let h=Math.max(this.transformSize(o(u)),.5),g=h/m.width,_=this._ctx,v=_.createPattern(m,`repeat-y`);_.save(),this._setCapStyle(i),this._setJoinStyle(a),s!==void 0&&(_.miterLimit=s),_.lineWidth=h;let y,b;for(let e of f)if(e=t(e),$(e),!(!e||e.length<=1)){y=this.transformPt(e[0]);for(let t=1;t<e.length;t++){b=this.transformPt(e[t]);let n=Te(y,b),r=new DOMMatrix;r.translateSelf(0,y[1]-h/2).scaleSelf(g,g,1).rotateSelf(0,0,90-n),v.setTransform(r),_.strokeStyle=v,_.beginPath(),_.moveTo(y[0],y[1]),_.lineTo(b[0],b[1]),_.stroke(),y=b}}_.restore()}drawGradientFill(e,t){if(!e)return;let n;if(C(e))n=e.rings;else if(w(e))n=e.paths;else if(T(e))n=X(e).rings;else{q().error(`Unable to draw gradient fill`);return}this._buildPath(n,!0);let{angle:i,gradientMethod:a,gradientSize:s,gradientSizeUnits:c}=t,l=k.CIMGradientFill,g=t.gradientType??l.gradientType,_=-r(i??0),v=u();for(let e of n){let t=e?e.length:0;if(t>1)for(let n=0;n<t;n++){let t=this.transformPt(e[n]);(a===`Linear`||a===`Rectangular`)&&(t=j(t,-_)),d(v,t)}}let[y,b,x,S]=v,E=this._ctx;switch(E.save(),a){case`Buffered`:q().error(`Gradient method "${a}" currently unsupported.`);break;case`Linear`:{let e=(b+S)/2,n=c===`Absolute`?this.transformSize(o(s)):R(s,l.gradientSize)*(x-y),[r,i]=g===`Discrete`?[x,x-n]:[y+n,y],a=j([r,e],_),u=j([i,e],_),d=E.createLinearGradient(a[0],a[1],u[0],u[1]);M(d,t),E.fillStyle=d,E.fill(`evenodd`);break}case`Circular`:{let e=f(v),n=h(v)/2,r=c===`Absolute`?this.transformSize(o(s)):R(s,l.gradientSize)*n,[i,a]=g===`Discrete`?[n,n-r]:[r,0],u=E.createRadialGradient(e[0],e[1],i,e[0],e[1],a);M(u,t),E.fillStyle=u,E.fill(`evenodd`);break}case`Rectangular`:{let n=f(v),r=n[0],i=n[1],a=j(n,_),u=(n,r,i,o,s,c,l,u)=>{E.save(),this.pushClipPath(e);let d=j([s,c],_),f=j([l,u],_);E.beginPath(),E.moveTo(a[0],a[1]),E.lineTo(d[0],d[1]),E.lineTo(f[0],f[1]),E.lineTo(a[0],a[1]),E.clip();let p=j([n,r],_),m=j([i,o],_),h=E.createLinearGradient(p[0],p[1],m[0],m[1]);M(h,t),E.fillStyle=h,E.fill(`evenodd`),E.restore()},d=c===`Absolute`?this.transformSize(o(s)):R(s,l.gradientSize)*(p(v)/2),[h,C]=g===`Discrete`?[x,x-d]:[r+d,r];u(h,i,C,i,x,b,x,S),[h,C]=g===`Discrete`?[y,y+d]:[r-d,r],u(h,i,C,i,y,S,y,b),d=c===`Absolute`?this.transformSize(o(s)):R(s,l.gradientSize)*(m(v)/2);let[w,T]=g===`Discrete`?[S,S-d]:[i+d,i];u(r,w,r,T,x,S,y,S),[w,T]=g===`Discrete`?[b,b+d]:[i-d,i],u(r,w,r,T,y,b,x,b);break}}E.restore()}drawGradientStroke(e,n){let{capStyle:r,gradientMethod:i,gradientSize:a,gradientSizeUnits:s,joinStyle:c,miterLimit:l,width:u}=n;if(!e||u===0)return;let d;if(C(e))d=e.rings;else if(w(e))d=e.paths;else if(T(e))d=X(e).rings;else{q().error(`Unable to draw gradient stroke`);return}let f=n.gradientType??k.CIMGradientStroke.gradientType,p=Math.max(this.transformSize(o(u)),.5),m=this._ctx;m.save(),this._setCapStyle(r),this._setJoinStyle(c),l!==void 0&&(m.miterLimit=l),m.lineWidth=p;let h,g;for(let e of d){if(e=t(e),$(e),!e||e.length<=1)continue;let r=0;h=this.transformPt(e[0]);for(let t=1;t<e.length;t++){g=this.transformPt(e[t]);let n=g[0]-h[0],i=g[1]-h[1];r+=Math.sqrt(n*n+i*i),h=g}let c=s===`Absolute`?this.transformSize(o(a)):R(a,k.CIMGradientStroke.gradientSize)*(i===`AcrossLine`?p:r),l=0;h=this.transformPt(e[0]);for(let t=1;t<e.length;t++){g=this.transformPt(e[t]);let a=g[0]-h[0],o=g[1]-h[1],s=Math.sqrt(a*a+o*o),u,d,_,v;switch(i){case`AcrossLine`:{let[e,t]=j([a/s,o/s],-Math.PI/2),n=p/2,r=f===`Discrete`?n:c-n;u=(h[0]+g[0])/2+e*r,d=(h[1]+g[1])/2+t*r,_=u-e*c,v=d-t*c;break}case`AlongLine`:{let e=a/s,t=o/s;f===`Discrete`?(u=h[0]-e*l,d=h[1]-t*l,_=u+e*c,v=d+t*c):(_=h[0]+e*(r-l),v=h[1]+t*(r-l),u=_-e*c,d=v-t*c);break}default:q().error(`Unrecognized gradient method:`,i),m.restore();return}let y=m.createLinearGradient(u,d,_,v);M(y,n),m.strokeStyle=y,m.beginPath(),m.moveTo(h[0],h[1]),m.lineTo(g[0],g[1]),m.stroke(),l+=s,h=g}}m.restore()}_buildPath(e,t){let n=this._ctx;if(n.beginPath(),e)for(let r of e){let e=r?r.length:0;if(e>1){let i=this.transformPt(r[0]);n.moveTo(i[0],i[1]);for(let t=1;t<e;t++)i=this.transformPt(r[t]),n.lineTo(i[0],i[1]);t&&n.closePath()}}}_setCapStyle(e){switch(e){case`Butt`:this._ctx.lineCap=`butt`;break;case`Round`:this._ctx.lineCap=`round`;break;case`Square`:this._ctx.lineCap=`square`}}_setJoinStyle(e){switch(e){case`Bevel`:this._ctx.lineJoin=`bevel`;break;case`Round`:this._ctx.lineJoin=`round`;break;case`Miter`:this._ctx.lineJoin=`miter`}}}function we(e,t,n){let r=I(e.separation,k.CIMHatchFill.separation)*n,i=I(e.rotation);if(r===0)return null;r<0&&(r=-r);let a=0,o=.5*r;for(;a>o;)a-=r;for(;a<-o;)a+=r;let s=_();v(s,t),s[0]-=o,s[1]-=o,s[2]+=o,s[3]+=o;let c=[[s[0],s[1]],[s[0],s[3]],[s[2],s[3]],[s[2],s[1]]];for(;i>180;)i-=180;for(;i<0;)i+=180;let l=Math.cos(i*G),u=Math.sin(i*G),d=-r*u,f=r*l,p=I(e.offsetX)*n,m=I(e.offsetY)*n;a=p*u-m*l;let h,g,y,b;h=y=Number.MAX_VALUE,g=b=-Number.MAX_VALUE;for(let e of c){let t=e[0],n=e[1],r=l*t+u*n,i=-u*t+l*n;h=Math.min(h,r),y=Math.min(y,i),g=Math.max(g,r),b=Math.max(b,i)}y=Math.floor(y/r)*r;let x=l*h-u*y-d*a/r,S=u*h+l*y-f*a/r,C=l*g-u*y-d*a/r,w=u*g+l*y-f*a/r,T=1+Math.round((b-y)/r),E=[];for(let e=0;e<T;e++)x+=d,S+=f,C+=d,w+=f,E.push([[x,S],[C,w]]);return{paths:E}}function Te(e,t){let n=t[0]-e[0],r=t[1]-e[1];return 180/Math.PI*Math.atan2(r,n)}const X=e=>e?{spatialReference:e.spatialReference,rings:[[[e.xmin,e.ymin],[e.xmin,e.ymax],[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin]]]}:null,Z=(e,t,n)=>{switch(e){case`ExtraLeading`:return 1+t/n;case`Multiple`:return t;case`Exact`:return t/n}};function Q(t,n=1){let r=se(t),i=ie(t.fontStyleName),a=t.fontFamilyName??e,{weight:o,style:s}=i,c=n*(t.height||5),l=ce(t.horizontalAlignment),u=le(t.verticalAlignment),d=z(t),f=z(t.haloSymbol),p=f==null?0:n*(t.haloSize??0),m=B(t.symbol),h=n*(V(t.symbol)||0),g=t.callout?.type===`CIMBackgroundCallout`?t.callout.backgroundSymbol:null,_=z(g),v=V(g),y=B(g);return{color:d,size:c,horizontalAlignment:l,verticalAlignment:u,font:{family:a,style:U(s),weight:H(o),decoration:r},outline:{size:h||0,color:m},halo:{size:p||0,color:f,style:s},backgroundColor:_,borderLine:v!=null&&y!=null?{size:v,color:y}:null,pixelRatio:1,premultiplyColors:!0}}function $(e){let t=e[0],n=1,r,i,a,o,s;for(;n<e.length;)r=e[n][0]-t[0],i=e[n][1]-t[1],o=r===0?Math.PI/2:i/r,a!==void 0&&Math.abs(o-a)<=1e-4?(e.splice(n-1,1),t=s):(s=t,t=e[n],n++),a=o}export{Y as CIMSymbolDrawHelper,Ce as CanvasDrawHelper,xe as EnvDrawHelper,Se as HittestDrawHelper,J as Transformation,G as cDegToRad,Z as lineGapType2LineHeight};
2
+ import{defaultFontFamily as e}from"../../core/fontUtils.js";import has from"../../core/has.js";import{clone as t}from"../../core/lang.js";import n from"../../core/Logger.js";import{deg2rad as r}from"../../core/mathUtils.js";import i from"../../core/ObjectPool.js";import{onePixelInPoints as a,pt2px as o,px2pt as s,onePointInPixels as c}from"../../core/screenUtils.js";import{GeometryCursor as l}from"../../geometry/GeometryCursor.js";import{empty as u,expandPointInPlace as d,center as f,width as p,height as m,diagonal as h,fromValues as g,create as _}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as v}from"../../geometry/support/boundsUtils.js";import{polygonCentroid as y}from"../../geometry/support/centroid.js";import{targetIntersectsPolygon as b,pointInPolygon as x,nearLine as S}from"../../geometry/support/intersectsBase.js";import{isPolygon as C,isPolyline as w,isExtent as T,isMultipoint as E,isPoint as D}from"../../geometry/support/jsonTypeUtils.js";import{SimpleEffectCursor as O}from"./CIMEffects.js";import ee from"./CIMImageColorSubstitutionHelper.js";import{getEffectOperator as te,getPlacementOperator as ne}from"./CIMOperators.js";import{Placement as re}from"./CIMPlacements.js";import{defaultCIMValues as k}from"./defaultCIMValues.js";import{fromCIMFontStyle as ie}from"./fromCIMFontStyle.js";import{getFirstFrame as A}from"./imageUtils.js";import{rotate as j}from"./mathUtils.js";import{addColorStops as M}from"./rasterizingUtils.js";import ae from"./Rect.js";import{parseRichTextRuns as N,hasRichTextFormattingTags as P}from"./richTextUtils.js";import F from"./TextRasterizer.js";import{getNumericValue as I,isSVGImage as L,getRelativeGradientSize as R,getEffectsInflateSize as oe,fromCIMFontDecoration as se,fromCIMHorizontalAlignment as ce,fromCIMVerticalAlignment as le,getFillColor as z,getStrokeColor as B,getStrokeWidth as V,getFontWeight as H,getFontStyle as U,isCIMFill as ue,getSize as de}from"./utils.js";import{destroyHiddenSvg as fe,createHiddenSvg as pe,createSvgElement as W}from"../../views/2d/engine/svgUtils.js";import{magicLabelLineHeight as me,glyphSize as he,hittestToleranceSmallSymbol as ge,hittestSmallSymbolThreshold as _e}from"../../views/2d/engine/webgl/definitions.js";import{shapeTextResource as ve}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";import{roundPtToWholePixel as ye,getLineWidth as be}from"../../views/2d/layers/graphics/graphicsUtils.js";const G=Math.PI/180,K=.5,q=()=>n.getLogger(`esri.symbols.cim.CIMSymbolDrawHelper`);class J{constructor(e){this._t=e}static createIdentity(){return new J([1,0,0,0,1,0])}clone(){let e=this._t;return new J(e.slice())}transform(e){let t=this._t;return[t[0]*e[0]+t[1]*e[1]+t[2],t[3]*e[0]+t[4]*e[1]+t[5]]}static createScale(e,t){return new J([e,0,0,0,t,0])}scale(e,t){let n=this._t;return n[0]*=e,n[1]*=e,n[2]*=e,n[3]*=t,n[4]*=t,n[5]*=t,this}scaleRatio(){return Math.sqrt(this._t[0]*this._t[0]+this._t[1]*this._t[1])}static createTranslate(e,t){return new J([0,0,e,0,0,t])}translate(e,t){let n=this._t;return n[2]+=e,n[5]+=t,this}static createRotate(e){let t=Math.cos(e),n=Math.sin(e);return new J([t,-n,0,n,t,0])}rotate(e){return J.multiply(this,J.createRotate(e),this)}angle(){let e=this._t[0],t=this._t[3],n=Math.sqrt(e*e+t*t);return[e/n,t/n]}static multiply(e,t,n){let r=e._t,i=t._t,a=r[0]*i[0]+r[3]*i[1],o=r[1]*i[0]+r[4]*i[1],s=r[2]*i[0]+r[5]*i[1]+i[2],c=r[0]*i[3]+r[3]*i[4],l=r[1]*i[3]+r[4]*i[4],u=r[2]*i[3]+r[5]*i[4]+i[5],d=n._t;return d[0]=a,d[1]=o,d[2]=s,d[3]=c,d[4]=l,d[5]=u,n}invert(){let e=this._t,t=e[0]*e[4]-e[1]*e[3];if(t===0)return new J([0,0,0,0,0,0]);t=1/t;let n=(e[1]*e[5]-e[2]*e[4])*t,r=(e[2]*e[3]-e[0]*e[5])*t,i=e[4]*t,a=-e[1]*t,o=-e[3]*t,s=e[0]*t;return new J([i,a,n,o,s,r])}}class Y{constructor(e,t){this._resourceManager=e,this._transfos=[],this._sizeTransfos=[],this._textScaling=[],this._geomUnitsPerPoint=1,this._placementPool=new i(()=>new re,void 0,void 0,100),this._earlyReturn=!1,this._mapRotation=0,this._transfos.push(t||J.createIdentity()),this._sizeTransfos.push(t?t.scaleRatio():1),this._textScaling.push(1)}setTransform(e,t){this._transfos=[e||J.createIdentity()],this._sizeTransfos=[t||(e?e.scaleRatio():1)],this._textScaling=[1]}setGeomUnitsPerPoint(e){this._geomUnitsPerPoint=e}transformPt(e){return this._transfos[this._transfos.length-1].transform(e)}transformSize(e){return e*this._sizeTransfos[this._sizeTransfos.length-1]}scaleText(e){return e*this._textScaling[this._textScaling.length-1]}reverseTransformPt(e){return this._transfos[this._transfos.length-1].invert().transform(e)}reverseTransformSize(e){return e/this._sizeTransfos[this._sizeTransfos.length-1]}reverseTransformScalar(e){return e/this._transfos[this._transfos.length-1].scaleRatio()}reverseScaleText(e){return e/this._textScaling[this._textScaling.length-1]}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(e,t=!1,n=1){let r=t?e.scaleRatio():1;J.multiply(e,this.back(),e),this._transfos.push(e),this._sizeTransfos.push(this._sizeTransfos[this._sizeTransfos.length-1]*r),this._textScaling.push(this._textScaling[this._textScaling.length-1]*n)}pop(){this._transfos.splice(-1,1),this._sizeTransfos.splice(-1,1),this._textScaling.splice(-1,1)}drawSymbol(e,t,n){if(e)switch(e.type){case`CIMPointSymbol`:case`CIMLineSymbol`:case`CIMPolygonSymbol`:this.drawMultiLayerSymbol(e,t);break;case`CIMTextSymbol`:this.drawTextSymbol(e,t,n)}}drawMultiLayerSymbol(e,t){if(!e||!t)return;let n=e.symbolLayers;if(!n)return;let r=e.effects;if(r&&r.length>0){let e=this.executeEffects(r,t);if(e){let t=e.next();for(;t;)this.drawSymbolLayers(n,t.asJSON()),t=e.next()}}else this.drawSymbolLayers(n,t)}executeEffects(e,t){let n=this.geomUnitsPerPoint(),r=oe(e),i=new O(l.fromJSONCIM(t));for(let a of e){let e=te(a);e&&(i=e.execute(i,a,{geomUnitsPerPoint:n,tileKey:null,maxInflateSize:r,scale:null,spatialReference:t.spatialReference,preventClipping:!1}))}return i}drawSymbolLayers(e,t){let n=e.length;for(;n--;){let r=e[n];if(!r||r.enable===!1)continue;let i=r.effects;if(i&&i.length>0){let e=this.executeEffects(i,t);if(e){let t=null;for(;(t=e.next())&&(this.drawSymbolLayer(r,t.asJSON()),!this._earlyReturn););}}else this.drawSymbolLayer(r,t);if(this._earlyReturn)return}}drawSymbolLayer(e,t){switch(e.type){case`CIMSolidFill`:this.drawSolidFill(t,e.color,e.path);break;case`CIMHatchFill`:this.drawHatchFill(t,e);break;case`CIMPictureFill`:this.drawPictureFill(t,e);break;case`CIMGradientFill`:this.drawGradientFill(t,e);break;case`CIMSolidStroke`:this.drawSolidStroke(t,e.color,e.width,e.capStyle,e.joinStyle,e.miterLimit,e.path);break;case`CIMPictureStroke`:this.drawPictureStroke(t,e);break;case`CIMGradientStroke`:this.drawGradientStroke(t,e);break;case`CIMCharacterMarker`:case`CIMPictureMarker`:case`CIMVectorMarker`:this.drawMarkerLayer(e,t)}}drawHatchFill(e,t){let n=we(t,e,this.geomUnitsPerPoint());n&&(this.pushClipPath(e),this.drawMultiLayerSymbol(t.lineSymbol,n),this.popClipPath())}drawPictureFill(e,t){}drawGradientFill(e,t){}drawPictureStroke(e,t){}drawGradientStroke(e,t){}drawMarkerLayer(e,t){let n=e.markerPlacement;if(n){let r=ne(n);if(r){let i=n.type===`CIMMarkerPlacementInsidePolygon`||n.type===`CIMMarkerPlacementPolygonCenter`&&n.clipAtBoundary;i&&this.pushClipPath(t);let a=r.execute(l.fromJSONCIM(t),n,this.geomUnitsPerPoint(),null);if(a){let t=null;for(;(t=a.next())&&(this.drawMarker(e,t),!this._earlyReturn););}i&&this.popClipPath()}}else{let n=this._placementPool.acquire();if(D(t))n.tx=t.x,n.ty=t.y,this.drawMarker(e,n);else if(C(t)){let r=y(t);r&&([n.tx,n.ty]=r,this.drawMarker(e,n))}else if(w(t)){for(let r of t.paths)for(let t of r)if(n.tx=t[0],n.ty=t[1],this.drawMarker(e,n),this._earlyReturn)break}else for(let r of t.points)if(n.tx=r[0],n.ty=r[1],this.drawMarker(e,n),this._earlyReturn)break;this._placementPool.release(n)}}drawMarker(e,t){switch(e.type){case`CIMCharacterMarker`:case`CIMPictureMarker`:this.drawPictureMarker(e,t);break;case`CIMVectorMarker`:this.drawVectorMarker(e,t)}}drawPictureMarker(e,t){if(!e)return;let n=this._resourceManager.getResource(e.url),r=I(e.size,k.CIMPictureMarker.size);if(n==null||r<=0)return;let i=n.width,a=n.height;if(!i||!a)return;let o=i/a,s=I(e.scaleX,1),c=J.createIdentity(),l=e.anchorPoint;if(l){let t=l.x,n=l.y;e.anchorPointUnits!==`Absolute`&&(t*=r*o*s,n*=r),c.translate(-t,-n)}let u=I(e.rotation);e.rotateClockwise&&(u=-u),this._mapRotation&&(u+=this._mapRotation),u&&c.rotate(u*G);let d=I(e.offsetX),f=I(e.offsetY);if(d||f){if(this._mapRotation){let e=G*this._mapRotation,t=Math.cos(e),n=Math.sin(e),r=d*t-f*n,i=d*n+f*t;d=r,f=i}c.translate(d,f)}let p=this.geomUnitsPerPoint();p!==1&&c.scale(p,p);let m=t.getAngle();m&&c.rotate(m),c.translate(t.tx,t.ty),this.push(c),this.drawImage(e,r),this.pop()}drawVectorMarker(e,t){if(!e)return;let n=e.markerGraphics;if(!n)return;let r=I(e.size,k.CIMVectorMarker.size),i=e.frame,a=i?i.ymax-i.ymin:0,o=r&&a?r/a:1,s=J.createIdentity();i&&s.translate(-(i.xmax+i.xmin)*.5,-(i.ymax+i.ymin)*.5);let c=e.anchorPoint;if(c){let t=c.x,n=c.y;e.anchorPointUnits===`Absolute`?(t/=o,n/=o):i&&(t*=i.xmax-i.xmin,n*=i.ymax-i.ymin),s.translate(-t,-n)}o!==1&&s.scale(o,o);let l=I(e.rotation);e.rotateClockwise&&(l=-l),this._mapRotation&&(l+=this._mapRotation),l&&s.rotate(l*G);let u=I(e.offsetX),d=I(e.offsetY);if(u||d){if(this._mapRotation){let e=G*this._mapRotation,t=Math.cos(e),n=Math.sin(e),r=u*t-d*n,i=u*n+d*t;u=r,d=i}s.translate(u,d)}let f=this.geomUnitsPerPoint();f!==1&&s.scale(f,f);let p=t.getAngle();p&&s.rotate(p),s.translate(t.tx,t.ty);let m=e.scaleSymbolsProportionally?1:o;this.push(s,e.scaleSymbolsProportionally,m);for(let e of n){e?.symbol&&e.geometry||q().error(`Invalid marker graphic`,e);let t=e.textString;if(typeof t==`number`&&(t=t.toString()),this.drawSymbol(e.symbol,e.geometry,t),this._earlyReturn)break}this.pop()}drawTextSymbol(e,t,n){if(!e||!D(t)||I(e.height,k.CIMTextSymbol.height)<=0)return;let r=J.createIdentity(),i=I(e.angle);i=-i,i&&r.rotate(i*G);let a=I(e.offsetX),o=I(e.offsetY);(a||o)&&r.translate(a,o);let s=this.geomUnitsPerPoint();s!==1&&r.scale(s,s),r.translate(t.x,t.y),this.push(r),this.drawText(e,n),this.pop()}}class xe extends Y{constructor(e,t){super(e,t),this.reset()}reset(){this._xmin=this._ymin=1/0,this._xmax=this._ymax=-1/0,this._clipCount=0}envelope(){return new ae(this._xmin,this._ymin,this._xmax-this._xmin,this._ymax-this._ymin)}bounds(){return g(this._xmin,this._ymin,this._xmax,this._ymax)}drawSolidFill(e){if(!(!e||this._clipCount>0)){if(C(e))this._processPath(e.rings,0);else if(w(e))this._processPath(e.paths,0);else if(T(e)){let t=X(e);t&&this._processPath(t.rings,0)}else console.error(`drawSolidFill Unexpected geometry type!`)}}drawSolidStroke(e,t,n){if(!e||this._clipCount>0||n==null||n<=0)return;let r=Math.max(this.transformSize(I(n,k.CIMSolidStroke.width))*.5,.5*K);if(C(e))this._processPath(e.rings,r);else if(w(e))this._processPath(e.paths,r);else if(T(e)){let t=X(e);t&&this._processPath(t.rings,r)}else console.error(`drawSolidStroke unexpected geometry type!`)}drawMarkerLayer(e,t){C(t)&&e.markerPlacement&&(e.markerPlacement.type===`CIMMarkerPlacementInsidePolygon`||e.markerPlacement.type===`CIMMarkerPlacementPolygonCenter`&&e.markerPlacement.clipAtBoundary)?this._processPath(t.rings,0):super.drawMarkerLayer(e,t)}drawHatchFill(e,t){this.drawSolidFill(e)}drawPictureFill(e,t){this.drawSolidFill(e)}drawGradientFill(e,t){this.drawSolidFill(e)}drawPictureStroke(e,t){this.drawSolidStroke(e,null,t.width)}drawGradientStroke(e,t){this.drawSolidStroke(e,null,t.width)}pushClipPath(e){this.drawSolidFill(e),this._clipCount++}popClipPath(){this._clipCount--}drawImage(e,t){let{url:n}=e,r=I(e.scaleX,1),i=r*t,a=t,o=this._resourceManager.getResource(n);if(o!=null){let e=o.height/o.width;i=r*(t?e>1?t:t/e:o.width),a=t?e>1?t*e:t:o.height}this._merge(this.transformPt([-i/2,-a/2]),0),this._merge(this.transformPt([-i/2,a/2]),0),this._merge(this.transformPt([i/2,-a/2]),0),this._merge(this.transformPt([i/2,a/2]),0)}drawText(e,t){if(!t||t.length===0)return;this._textRasterizer||=new F;let n=Q(e),r=N({textString:t,font:n.font,symbol:e,supportsRichText:P(t)}),[i,a]=r?this._textRasterizer.computeRichTextSize(r,n):this._textRasterizer.computeTextSize(t,n);i=s(i),a=s(a);let o=this.transformSize(1)*this.reverseTransformScalar(1);i*=o,a*=o;let c=e.horizontalAlignment??k.CIMTextSymbol.horizontalalignment,l=e.verticalAlignment??k.CIMTextSymbol.verticalalignment,u=0;switch(c){case`Left`:u=i/2;break;case`Right`:u=-i/2}let d=0;switch(l){case`Bottom`:d=a/2;break;case`Top`:d=-a/2;break;case`Baseline`:d=a/6}this._merge(this.transformPt([-i/2+u,-a/2+d]),0),this._merge(this.transformPt([-i/2+u,a/2+d]),0),this._merge(this.transformPt([i/2+u,-a/2+d]),0),this._merge(this.transformPt([i/2+u,a/2+d]),0)}_processPath(e,t){if(e)for(let n of e){let e=n?n.length:0;if(e>1){this._merge(this.transformPt(n[0]),t);for(let r=1;r<e;r++)this._merge(this.transformPt(n[r]),t)}}}_merge(e,t){e[0]-t<this._xmin&&(this._xmin=e[0]-t),e[0]+t>this._xmax&&(this._xmax=e[0]+t),e[1]-t<this._ymin&&(this._ymin=e[1]-t),e[1]+t>this._ymax&&(this._ymax=e[1]+t)}}class Se extends Y{constructor(){super(...arguments),this._hittestType=`point`,this._searchTarget=[],this._searchDistPoint=0,this._textInfo=null,this._svg=null,this._path=null,this._canvas=null}destroy(){this._svg=fe(this._svg),this._path=null,this._canvas=null}hitTest(e,t,n,r){let{textInfo:i,mapRotation:a,resolution:o,searchDist:l,hittestType:u,isScreenAligned:d}=r;this._resetHittest();let f=o*c;switch(this.setGeomUnitsPerPoint(f),u){case`point`:if(e.length!==1)return q().error(`Unexpected hittest area`,e),!1;this._hittestType=`point`,this._searchDistPoint=l/2/f,this._searchTarget=[[e[0].x,e[0].y]];break;case`rect`:if(e.length!==4)return q().error(`Unexpected hittest area`,e),!1;this._hittestType=`rect`,this._searchDistPoint=0,this._searchTarget=e.map(e=>[e.x,e.y]);break;case`polygon`:this._hittestType=`polygon`,this._searchDistPoint=0,this._searchTarget=e.map(e=>[e.x,e.y])}if(this._textInfo=i,this._mapRotation=d?a:0,!has(`esri-mobile`)){let e=s(ge*window.devicePixelRatio),n=s(_e);(t?.type!==`CIMLineSymbol`&&t?.type!==`CIMPolygonSymbol`||!t.symbolLayers?.some(ue))&&t?.type!==`CIMMeshSymbol`&&(de(t)??0)<n&&(this._searchDistPoint=e)}return this._earlyReturn=!1,this.drawSymbol(t,n),this._earlyReturn}executeEffects(e,t){return e.at(-1)?.type===`CIMGeometricEffectDashes`&&(e=e.slice(0,-1)),super.executeEffects(e,t)}drawSolidFill(e,t,n){n==null?this._hitTestFill(e):this._hittestSvgPath(e,n,!0)}drawHatchFill(e,t){this._hitTestFill(e)}drawPictureFill(e,t){this._hitTestFill(e)}drawGradientFill(e,t){this._hitTestFill(e)}drawSolidStroke(e,t,n,r,i,a,o){o==null?this._hitTestStroke(e,n):this._hittestSvgPath(e,o,!1,n)}drawPictureStroke(e,t){this._hitTestStroke(e,t.width)}drawGradientStroke(e,t){this._hitTestStroke(e,t.width)}drawMarkerLayer(e,t){e.markerPlacement&&(e.markerPlacement.type===`CIMMarkerPlacementInsidePolygon`||e.markerPlacement.type===`CIMMarkerPlacementPolygonCenter`&&e.markerPlacement.clipAtBoundary)?this._hitTestFill(t):super.drawMarkerLayer(e,t)}drawTextSymbol(e,t,n){if(!e||!D(t)||I(e.height,k.CIMTextSymbol.height)<=0)return;let r=J.createIdentity(),i=this.geomUnitsPerPoint();i!==1&&r.scale(i,i),r.translate(t.x,t.y),this.push(r),this.drawText(e,n),this.pop()}pushClipPath(e){}popClipPath(){}drawImage(e,t){let{url:n}=e,r=I(e.scaleX,1),i=this._resourceManager.getResource(n);if(i==null||i.height===0||t===0)return;let a=t*this.geomUnitsPerPoint(),o=a*r*(i.width/i.height);if(this._hittestType===`point`){let e=this.reverseTransformPt(this._searchTarget[0]),t=this._searchDistPoint;Math.abs(e[0])<o/2+t&&Math.abs(e[1])<a/2+t&&(this._earlyReturn=!0)}else{let e=o/2,t=a/2,n=[[-e,t],[e,t],[e,-t],[-e,-t],[-e,t]],r=this.isEmbedded()?this._searchTarget.map(e=>this.reverseTransformPt(e)):this._searchTarget;b(r,[n])&&(this._earlyReturn=!0)}}drawText(e,t){let n=this._textInfo;if(!n)return;let r=n.get(e);if(!r||!p(r.glyphMosaicItems))return;let i=ye(I(e.height,k.CIMTextSymbol.height)),{lineGapType:a,lineGap:o}=e,s=a?Z(a,I(o),i):0,c=e.horizontalAlignment??k.CIMTextSymbol.horizontalalignment,l=e.verticalAlignment??k.CIMTextSymbol.verticalalignment,u=e.callout?.type===`CIMBackgroundCallout`,d=ve(r.glyphMosaicItems,{scale:i/he,angle:I(e.angle),xOffset:I(e.offsetX),yOffset:I(e.offsetY),horizontalAlignment:c,verticalAlignment:l,maxLineWidth:be(e.lineWidth),lineHeight:me*Math.max(.25,Math.min(s||1,4)),decoration:e.font.decoration||`none`,useCIMAngleBehavior:!1,hasBackground:u}),f=this.reverseScaleText(1);for(let e of d.glyphs){let t=e.offsets,n=[[t.topLeft[0]*f,-t.topLeft[1]*f],[t.topRight[0]*f,-t.topRight[1]*f],[t.bottomRight[0]*f,-t.bottomRight[1]*f],[t.bottomLeft[0]*f,-t.bottomLeft[1]*f],[t.topLeft[0]*f,-t.topLeft[1]*f]];if(this._hittestType===`point`){let e=this.reverseTransformPt(this._searchTarget[0]);x(e,[n])&&(this._earlyReturn=!0)}else{let e=this.isEmbedded()?this._searchTarget.map(e=>this.reverseTransformPt(e)):this._searchTarget;b(e,[n])&&(this._earlyReturn=!0)}}function p(e){return e.type===`glyphs`?e.glyphs.length>0:e.runs.some(e=>e.glyphs.glyphs.length>0)}}_hitTestFill(e){let t=null;if(T(e)){let n=e;t=[[[n.xmin,n.ymin],[n.xmin,n.ymax],[n.xmax,n.ymax],[n.xmax,n.ymin],[n.xmin,n.ymin]]]}else if(C(e))t=e.rings;else if(w(e))t=e.paths;else return;if(this._hittestType===`point`){let e=this.reverseTransformPt(this._searchTarget[0]);if(x(e,t)&&(this._earlyReturn=!0),!this._earlyReturn){let n=this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint();S(e,t,n)&&(this._earlyReturn=!0)}}else{let e=this.isEmbedded()?this._searchTarget.map(e=>this.reverseTransformPt(e)):this._searchTarget;b(e,t)&&(this._earlyReturn=!0)}}_getSvgPath(){return(this._svg==null||this._path==null)&&(this._svg??=pe(),this._path??=W(`path`),this._svg.appendChild(this._path)),this._path}_getCanvasContext(e,t){return this._canvas??=document.createElement(`canvas`),this._canvas.width=e,this._canvas.height=t,this._canvas.getContext(`2d`,{willReadFrequently:!0})}_hittestSvgPath(e,t,n,r=0){let i=_();v(i,e);let a={x:i[0],y:i[1],width:i[2]-i[0],height:i[3]-i[1]},o=this._getSvgPath();o.setAttribute(`d`,t);let s=o.getBBox();if(this._hittestType===`point`){let e=this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint(),i=this.reverseTransformPt(this._searchTarget[0]),o=Math.max(s.width/a.width,s.height/a.height),c=1,l=2*e*o;l<1&&(c=2/l,o*=c,s.x*=c,s.y*=c,s.width*=c,s.height*=c);let u=1+r*o/2,d=this._getCanvasContext(s.width+u*2,s.height+u*2);d.setTransform(c,0,0,c,-s.x+u,-s.y+u);let f=new Path2D(t);n?d.fill(f):(d.lineWidth=o/c*r,d.stroke(f));let p=(a.width*o-s.width)/2,m=(a.height*o-s.height)/2,h=Math.floor((i[0]-a.x-e)*o-p+u),g=Math.floor((a.height-(i[1]-a.y)-e)*o+m+u),_=Math.ceil(2*e*o),v=Math.ceil(2*e*o),y=d.getImageData(h,g,_,v).data;for(let e=3;e<y.length;e+=4)if(y[e]>127.5){this._earlyReturn=!0;return}}else{let e=[[a.x,a.y],[a.x,a.y+a.height],[a.x+a.width,a.y+a.height],[a.x+a.width,a.y],[a.x,a.y]],t=this.isEmbedded()?this._searchTarget.map(e=>this.reverseTransformPt(e)):this._searchTarget;if(b(t,[e])){this._earlyReturn=!0;return}}}_hitTestStroke(e,t){let n=null;if(T(e)){let t=e;n=[[[t.xmin,t.ymin],[t.xmin,t.ymax],[t.xmax,t.ymax],[t.xmax,t.ymin],[t.xmin,t.ymin]]]}else if(C(e))n=e.rings;else if(w(e))n=e.paths;else return;if(this._hittestType===`point`){let e=this.reverseTransformPt(this._searchTarget[0]),r=I(t,k.CIMSolidStroke.width)*this.geomUnitsPerPoint(),i=this.reverseTransformScalar(this._searchDistPoint)*this.prevGeomUnitsPerPoint();S(e,n,r/2+i)&&(this._earlyReturn=!0)}else{let e=this.isEmbedded()?this._searchTarget.map(e=>this.reverseTransformPt(e)):this._searchTarget;b(e,n)&&(this._earlyReturn=!0)}}_resetHittest(){this.setTransform(),this._hittestType=`point`,this._searchTarget=[],this._searchDistPoint=0,this._textInfo=null}}class Ce extends Y{constructor(e,t,n,r){super(t,n),this._applyAdditionalRenderProps=r,this._colorSubstitutionHelper=new ee,this._ctx=e}drawSolidFill(e,t){if(!e)return;if(C(e))this._buildPath(e.rings,!0);else if(w(e))this._buildPath(e.paths,!0);else if(T(e))this._buildPath(X(e).rings,!0);else if(E(e))console.log(`CanvasDrawHelper.drawSolidFill - No implementation!`);else return;let n=this._ctx;n.fillStyle=typeof t==`string`?t:`rgba(`+Math.round(t[0])+`,`+Math.round(t[1])+`,`+Math.round(t[2])+`,`+(t[3]??255)/255+`)`,n.fill(`evenodd`)}drawSolidStroke(e,t,n,r,i,a){if(!e||!t||n===0)return;if(C(e))this._buildPath(e.rings,!0);else if(w(e))this._buildPath(e.paths,!1);else if(T(e))this._buildPath(X(e).rings,!0);else{console.log(`CanvasDrawHelper.drawSolidStroke isn't implemented!`);return}let o=this._ctx;o.strokeStyle=typeof t==`string`?t:`rgba(`+Math.round(t[0])+`,`+Math.round(t[1])+`,`+Math.round(t[2])+`,`+(t[3]??255)/255+`)`,o.lineWidth=Math.max(this.transformSize(n),K),this._setCapStyle(r),this._setJoinStyle(i),o.miterLimit=a,o.stroke()}pushClipPath(e){if(this._ctx.save(),C(e))this._buildPath(e.rings,!0);else if(w(e))this._buildPath(e.paths,!0);else if(T(e))this._buildPath(X(e).rings,!0);else return;this._ctx.clip(`evenodd`)}popClipPath(){this._ctx.restore()}drawImage(e,t){let{colorSubstitutions:n,url:r,tintColor:i}=e,a=I(e.scaleX,1),o=this._resourceManager.getResource(r);if(o==null)return;let s=t*(o.width/o.height),c=t;t||(s=o.width,c=o.height);let l=L(r)||`src`in o&&L(o.src),u=`getFrame`in o?A(o):o;n&&(u=this._colorSubstitutionHelper.applyColorSubstitution(u,n)),this._applyAdditionalRenderProps&&!l&&i&&(u=this._colorSubstitutionHelper.tintImageData(u,i));let d=this.transformPt([0,0]),[f,p]=this.getTransformAngle(),m=this.transformSize(1),h=this._ctx;h.save(),h.setTransform({m11:a*m*f,m12:a*m*p,m21:-m*p,m22:m*f,m41:d[0],m42:d[1]}),h.drawImage(u,-s/2,-c/2,s,c),h.restore()}drawText(e,t){if(!t||t.length===0)return;this._textRasterizer||=new F;let n=Q(e,this.transformSize(a)),r=N({textString:t,font:n.font,symbol:e,supportsRichText:P(t)}),i=r?this._textRasterizer.rasterizeRichText(r,n):this._textRasterizer.rasterizeText(t,n);if(!i)return;let{size:o,anchorX:s,anchorY:c,canvas:l}=i,u=o[0]*(s+.5),d=o[1]*(c-.5),f=this._ctx,p=this.transformPt([0,0]),[m,h]=this.getTransformAngle();f.save(),f.setTransform({m11:1*m,m12:1*h,m21:-1*h,m22:1*m,m41:p[0]-1*u,m42:p[1]+1*d}),f.drawImage(l,0,0),f.restore()}drawPictureFill(e,t){if(!e)return;let{colorSubstitutions:n,height:r,offsetX:i,offsetY:a,rotation:o,scaleX:s,tintColor:c,url:l}=t,u=this._resourceManager.getResource(l);if(u==null)return;if(C(e))this._buildPath(e.rings,!0);else if(w(e))this._buildPath(e.paths,!0);else if(T(e))this._buildPath(X(e).rings,!0);else if(E(e))console.log(`CanvasDrawHelper.drawPictureFill - No implementation!`);else return;let d=this._ctx,f=L(l)||`src`in u&&L(u.src),p=`getFrame`in u?A(u):u;n&&(p=this._colorSubstitutionHelper.applyColorSubstitution(p,n));let m;if(this._applyAdditionalRenderProps){f||c&&(p=this._colorSubstitutionHelper.tintImageData(p,c)),m=d.createPattern(p,`repeat`);let e=this.transformSize(1);o||=0,i=i?e*i:0,a=a?e*a:0,r&&=e*r;let t=r?r/u.height:1,n=s&&r?s*r/u.width:1;if(o!==0||t!==1||n!==1||i!==0||a!==0){let e=new DOMMatrix;e.rotateSelf(0,0,-o).translateSelf(i,a).scaleSelf(n,t,1),m.setTransform(e)}}else m=d.createPattern(p,`repeat`);d.save(),d.fillStyle=m,d.fill(`evenodd`),d.restore()}drawPictureStroke(e,n){if(!e)return;let{colorSubstitutions:r,capStyle:i,joinStyle:a,miterLimit:s,tintColor:c,url:l,width:u}=n,d=this._resourceManager.getResource(l);if(d==null)return;let f;if(C(e))f=e.rings;else if(w(e))f=e.paths;else if(T(e))f=X(e).rings;else if(E(e)){console.log(`CanvasDrawHelper.drawPictureStroke - No implementation!`);return}else return;u||=d.width;let p=L(l)||`src`in d&&L(d.src),m=`getFrame`in d?A(d):d;r&&(m=this._colorSubstitutionHelper.applyColorSubstitution(m,r)),this._applyAdditionalRenderProps&&(p||c&&(m=this._colorSubstitutionHelper.tintImageData(m,c)));let h=Math.max(this.transformSize(o(u)),.5),g=h/m.width,_=this._ctx,v=_.createPattern(m,`repeat-y`);_.save(),this._setCapStyle(i),this._setJoinStyle(a),s!==void 0&&(_.miterLimit=s),_.lineWidth=h;let y,b;for(let e of f)if(e=t(e),$(e),!(!e||e.length<=1)){y=this.transformPt(e[0]);for(let t=1;t<e.length;t++){b=this.transformPt(e[t]);let n=Te(y,b),r=new DOMMatrix;r.translateSelf(0,y[1]-h/2).scaleSelf(g,g,1).rotateSelf(0,0,90-n),v.setTransform(r),_.strokeStyle=v,_.beginPath(),_.moveTo(y[0],y[1]),_.lineTo(b[0],b[1]),_.stroke(),y=b}}_.restore()}drawGradientFill(e,t){if(!e)return;let n;if(C(e))n=e.rings;else if(w(e))n=e.paths;else if(T(e))n=X(e).rings;else{q().error(`Unable to draw gradient fill`);return}this._buildPath(n,!0);let{angle:i,gradientMethod:a,gradientSize:s,gradientSizeUnits:c}=t,l=k.CIMGradientFill,g=t.gradientType??l.gradientType,_=-r(i??0),v=u();for(let e of n){let t=e?e.length:0;if(t>1)for(let n=0;n<t;n++){let t=this.transformPt(e[n]);(a===`Linear`||a===`Rectangular`)&&(t=j(t,-_)),d(v,t)}}let[y,b,x,S]=v,E=this._ctx;switch(E.save(),a){case`Buffered`:q().error(`Gradient method "${a}" currently unsupported.`);break;case`Linear`:{let e=(b+S)/2,n=c===`Absolute`?this.transformSize(o(s)):R(s,l.gradientSize)*(x-y),[r,i]=g===`Discrete`?[x,x-n]:[y+n,y],a=j([r,e],_),u=j([i,e],_),d=E.createLinearGradient(a[0],a[1],u[0],u[1]);M(d,t),E.fillStyle=d,E.fill(`evenodd`);break}case`Circular`:{let e=f(v),n=h(v)/2,r=c===`Absolute`?this.transformSize(o(s)):R(s,l.gradientSize)*n,[i,a]=g===`Discrete`?[n,n-r]:[r,0],u=E.createRadialGradient(e[0],e[1],i,e[0],e[1],a);M(u,t),E.fillStyle=u,E.fill(`evenodd`);break}case`Rectangular`:{let n=f(v),r=n[0],i=n[1],a=j(n,_),u=(n,r,i,o,s,c,l,u)=>{E.save(),this.pushClipPath(e);let d=j([s,c],_),f=j([l,u],_);E.beginPath(),E.moveTo(a[0],a[1]),E.lineTo(d[0],d[1]),E.lineTo(f[0],f[1]),E.lineTo(a[0],a[1]),E.clip();let p=j([n,r],_),m=j([i,o],_),h=E.createLinearGradient(p[0],p[1],m[0],m[1]);M(h,t),E.fillStyle=h,E.fill(`evenodd`),E.restore()},d=c===`Absolute`?this.transformSize(o(s)):R(s,l.gradientSize)*(p(v)/2),[h,C]=g===`Discrete`?[x,x-d]:[r+d,r];u(h,i,C,i,x,b,x,S),[h,C]=g===`Discrete`?[y,y+d]:[r-d,r],u(h,i,C,i,y,S,y,b),d=c===`Absolute`?this.transformSize(o(s)):R(s,l.gradientSize)*(m(v)/2);let[w,T]=g===`Discrete`?[S,S-d]:[i+d,i];u(r,w,r,T,x,S,y,S),[w,T]=g===`Discrete`?[b,b+d]:[i-d,i],u(r,w,r,T,y,b,x,b);break}}E.restore()}drawGradientStroke(e,n){let{capStyle:r,gradientMethod:i,gradientSize:a,gradientSizeUnits:s,joinStyle:c,miterLimit:l,width:u}=n;if(!e||u===0)return;let d;if(C(e))d=e.rings;else if(w(e))d=e.paths;else if(T(e))d=X(e).rings;else{q().error(`Unable to draw gradient stroke`);return}let f=n.gradientType??k.CIMGradientStroke.gradientType,p=Math.max(this.transformSize(o(u)),.5),m=this._ctx;m.save(),this._setCapStyle(r),this._setJoinStyle(c),l!==void 0&&(m.miterLimit=l),m.lineWidth=p;let h,g;for(let e of d){if(e=t(e),$(e),!e||e.length<=1)continue;let r=0;h=this.transformPt(e[0]);for(let t=1;t<e.length;t++){g=this.transformPt(e[t]);let n=g[0]-h[0],i=g[1]-h[1];r+=Math.sqrt(n*n+i*i),h=g}let c=s===`Absolute`?this.transformSize(o(a)):R(a,k.CIMGradientStroke.gradientSize)*(i===`AcrossLine`?p:r),l=0;h=this.transformPt(e[0]);for(let t=1;t<e.length;t++){g=this.transformPt(e[t]);let a=g[0]-h[0],o=g[1]-h[1],s=Math.sqrt(a*a+o*o),u,d,_,v;switch(i){case`AcrossLine`:{let[e,t]=j([a/s,o/s],-Math.PI/2),n=p/2,r=f===`Discrete`?n:c-n;u=(h[0]+g[0])/2+e*r,d=(h[1]+g[1])/2+t*r,_=u-e*c,v=d-t*c;break}case`AlongLine`:{let e=a/s,t=o/s;f===`Discrete`?(u=h[0]-e*l,d=h[1]-t*l,_=u+e*c,v=d+t*c):(_=h[0]+e*(r-l),v=h[1]+t*(r-l),u=_-e*c,d=v-t*c);break}default:q().error(`Unrecognized gradient method:`,i),m.restore();return}let y=m.createLinearGradient(u,d,_,v);M(y,n),m.strokeStyle=y,m.beginPath(),m.moveTo(h[0],h[1]),m.lineTo(g[0],g[1]),m.stroke(),l+=s,h=g}}m.restore()}_buildPath(e,t){let n=this._ctx;if(n.beginPath(),e)for(let r of e){let e=r?r.length:0;if(e>1){let i=this.transformPt(r[0]);n.moveTo(i[0],i[1]);for(let t=1;t<e;t++)i=this.transformPt(r[t]),n.lineTo(i[0],i[1]);t&&n.closePath()}}}_setCapStyle(e){switch(e){case`Butt`:this._ctx.lineCap=`butt`;break;case`Round`:this._ctx.lineCap=`round`;break;case`Square`:this._ctx.lineCap=`square`}}_setJoinStyle(e){switch(e){case`Bevel`:this._ctx.lineJoin=`bevel`;break;case`Round`:this._ctx.lineJoin=`round`;break;case`Miter`:this._ctx.lineJoin=`miter`}}}function we(e,t,n){let r=I(e.separation,k.CIMHatchFill.separation)*n,i=I(e.rotation);if(r===0)return null;r<0&&(r=-r);let a=0,o=.5*r;for(;a>o;)a-=r;for(;a<-o;)a+=r;let s=_();v(s,t),s[0]-=o,s[1]-=o,s[2]+=o,s[3]+=o;let c=[[s[0],s[1]],[s[0],s[3]],[s[2],s[3]],[s[2],s[1]]];for(;i>180;)i-=180;for(;i<0;)i+=180;let l=Math.cos(i*G),u=Math.sin(i*G),d=-r*u,f=r*l,p=I(e.offsetX)*n,m=I(e.offsetY)*n;a=p*u-m*l;let h,g,y,b;h=y=Number.MAX_VALUE,g=b=-Number.MAX_VALUE;for(let e of c){let t=e[0],n=e[1],r=l*t+u*n,i=-u*t+l*n;h=Math.min(h,r),y=Math.min(y,i),g=Math.max(g,r),b=Math.max(b,i)}y=Math.floor(y/r)*r;let x=l*h-u*y-d*a/r,S=u*h+l*y-f*a/r,C=l*g-u*y-d*a/r,w=u*g+l*y-f*a/r,T=1+Math.round((b-y)/r),E=[];for(let e=0;e<T;e++)x+=d,S+=f,C+=d,w+=f,E.push([[x,S],[C,w]]);return{paths:E}}function Te(e,t){let n=t[0]-e[0],r=t[1]-e[1];return 180/Math.PI*Math.atan2(r,n)}const X=e=>e?{spatialReference:e.spatialReference,rings:[[[e.xmin,e.ymin],[e.xmin,e.ymax],[e.xmax,e.ymax],[e.xmax,e.ymin],[e.xmin,e.ymin]]]}:null,Z=(e,t,n)=>{switch(e){case`ExtraLeading`:return 1+t/n;case`Multiple`:return t;case`Exact`:return t/n}};function Q(t,n=1){let r=se(t),i=ie(t.fontStyleName),a=t.fontFamilyName??e,{weight:o,style:s}=i,c=n*(t.height||5),l=ce(t.horizontalAlignment),u=le(t.verticalAlignment),d=z(t),f=z(t.haloSymbol),p=f==null?0:n*(t.haloSize??0),m=B(t.symbol),h=n*(V(t.symbol)||0),g=t.callout?.type===`CIMBackgroundCallout`?t.callout.backgroundSymbol:null,_=z(g),v=V(g),y=B(g);return{color:d,size:c,horizontalAlignment:l,verticalAlignment:u,font:{family:a,style:U(s),weight:H(o),decoration:r},outline:{size:h||0,color:m},halo:{size:p||0,color:f,style:s},backgroundColor:_,borderLine:v!=null&&y!=null?{size:v,color:y}:null,pixelRatio:1,premultiplyColors:!0}}function $(e){let t=e[0],n=1,r,i,a,o,s;for(;n<e.length;)r=e[n][0]-t[0],i=e[n][1]-t[1],o=r===0?Math.PI/2:i/r,a!==void 0&&Math.abs(o-a)<=1e-4?(e.splice(n-1,1),t=s):(s=t,t=e[n],n++),a=o}export{Y as CIMSymbolDrawHelper,Ce as CanvasDrawHelper,xe as EnvDrawHelper,Se as HittestDrawHelper,J as Transformation,G as cDegToRad,Z as lineGapType2LineHeight};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{isRGB as e}from"../../core/colorUtils.js";import{getFontFamily as t}from"../../core/fontUtils.js";import"../../core/has.js";import{clone as n}from"../../core/lang.js";import r from"../../core/Logger.js";import{pt2px as i,px2pt as a}from"../../core/screenUtils.js";import{numericHash as o}from"../../core/string.js";import{isCurvedGeometry as s}from"../../geometry/support/curves/curveUtils.js";import{densifyCurvedGeometry as c}from"../../geometry/support/curves/densifyCurvedGeometry.js";import{checkForAnimations as l,globalRotation as u,getAnimationParams as d,handleAbsoluteAnchor as f,handleMarker as p,handleRelativeAnchor as m,getFrameTranslation as h,translate as g,getStaticParam as _,shouldUseAnimatedPath as v}from"./animationUtils.js";import{CIMSymbolInflatedSizeHelper as y,CIMSymbolHelper as b,forEachSymbolLayer as x}from"./CIMSymbolHelper.js";import{antialiasingOutlineFillSettings as S}from"./constants.js";import{defaultCIMValues as C}from"./defaultCIMValues.js";import{fitVectorMarker as w}from"./fitVectorMarker.js";import{fromCIMFontStyle as T}from"./fromCIMFontStyle.js";import{OverrideHelper as E}from"./OverrideHelper.js";import{hasRichTextFormattingTags as D}from"./richTextUtils.js";import{getSDFInfo as O,getExtent as k,getSDFMetrics as A,getSDFDimensions as j}from"./SDFHelper.js";import{CIMSymbolUnits as M}from"./types.js";import{colorToArray as N,normalizeAlpha as P,getSize as F,isCIMMarkerStrokePlacement as I,hasStrokeLayer as L,getNumericValue as R,getMaxStrokeWidth as z,getTintColor as B,normalizePrimitiveOverrideProps as V,getDefaultCIMValue as H,getEnum as U,getFillColor as W,getStrokeColor as G,fromCIMFontDecoration as K,getStrokeWidth as q,fromCIMVerticalAlignment as ee,fromCIMHorizontalAlignment as te,getTextCasing as J,isValidCIMValue as ne,uncapitalize as re}from"./utils.js";import{isSupportedCallout as ie,getPointSymbolCalloutTransforms as ae,normalizePointSymbolCalloutScale as oe,normalizeLeaderLineStyle as Y,getPointSymbolCalloutFitProperties as se,normalizeBalloonCalloutStyle as ce}from"./callouts/calloutAnalysisUtils.js";import{EffectHelper as le}from"./effects/EffectHelper.js";import{rasterizedVectorMarkerMinSize as ue,randomInsidePolygonTextureSize as de}from"../../views/2d/engine/webgl/definitions.js";const X=()=>r.getLogger(`esri.symbols.cim.cimAnalyzer`);function fe(e){let t=e.markerPlacement;return t&&t.angleToLine?1:0}class pe{constructor(e){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[],this._hasTextStringTemplates=!1,e&&(this._resourceManager=e)}analyzeSymbolReference(t,n,r){if(this._cimLayers=r??[],!t)return this._cimLayers;if(this._reset(),this._hasTextStringTemplates=t.hasTextStringTemplates??!1,t.primitiveOverrides){this._primitiveOverrides=t.primitiveOverrides;for(let t of this._primitiveOverrides){let n=t.valueExpressionInfo;if(n)this._setPoMap(t.primitiveName,t.propertyName,n);else if(t.value!=null){let n=t.value;t.propertyName.includes(`Color`)&&(e(n)&&(n=N(n)),n=P(n)),this._setPoMap(t.primitiveName,t.propertyName,n)}}}return this._analyzeSymbol(t.symbol,n),this._cimLayers}_reset(){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[]}_analyzeSymbol(e,t){switch(e?.type){case`CIMPointSymbol`:case`CIMLineSymbol`:case`CIMPolygonSymbol`:this._analyzeMultiLayerSymbol(e,t)}}_analyzeMultiLayerSymbol(e,t){let n=e?.symbolLayers;if(!n)return;for(let e=0;e<n.length;e++){let t=n[e];t.type===`CIMVectorMarker`&&(n[e]=w(t))}let r=e.effects,i=0,a=F(e)??0;e.type===`CIMPointSymbol`&&e.angleAlignment===`Map`&&(i=1);let o={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],shift:[1,1,1,1],hasAnimations:l(e),hasShiftAnimation:!1,hasMotionAnimations:!1};o=u(o),o=d(this._poMap,e,o);let s=null;e.type===`CIMPointSymbol`&&(s=this._analyzePointSymbolHalo(e,i,a,r,o),this._analyzeCallout(e,null,[],o,a,i,t));let c=s?n.filter(e=>e!==s):n;if(Ce(c,r))return this._analyzeCompositeOutlineFill(c,r,a);this._analyzeSymbolLayer(s?{...e,symbolLayers:c}:e,null,[],o,a,i,t)}_analyzeSymbolLayer(e,t,n,r,i,a,o){let s=e?.symbolLayers;if(!s)return;let c=e.type===`CIMPolygonSymbol`,l=e.effects,u=s.length;for(;u--;){let d=s[u];if(!d||d.enable===!1)continue;let f;l?.length&&(f=[...l]);let p=d.effects;p?.length&&(l?f.push(...p):f=[...p]);let m=t?[...t]:null;if(f){m??=[];for(let e of f){let t=E.findEffectOverrides(e,this._primitiveOverrides);t&&m.push(t)}}E.findApplicableOverrides(d,this._primitiveOverrides,[]);let h=this._cimLayers.length;switch(d.type){case`CIMSolidFill`:this._analyzeSolidFill(d,m,r,L(s));break;case`CIMPictureFill`:this._analyzePictureFill(d,m,r);break;case`CIMHatchFill`:this._analyzeHatchFill(d,m,r);break;case`CIMGradientFill`:this._analyzeGradientFill(d,m);break;case`CIMSolidStroke`:this._analyzeSolidStroke(d,m,c,i,r);break;case`CIMPictureStroke`:this._analyzePictureStroke(d,m,c,i,r);break;case`CIMGradientStroke`:this._analyzeGradientStroke(d,m,c,i);break;case`CIMCharacterMarker`:case`CIMPictureMarker`:case`CIMVectorMarker`:{(e.type===`CIMLineSymbol`||e.type===`CIMPolygonSymbol`)&&(a=fe(d));let t=[],s=d.primitiveName;s&&t.push(s);let l=c&&I(d.markerPlacement);this._analyzeMarker(d,m,null,t,a,i,o,n,r,!1,l);break}default:X().error(`Cannot analyze CIM layer`,d.type)}if(m?.some(({effect:e})=>Z(e)))for(let e=h;e<this._cimLayers.length;e++)this._cimLayers[e].effectsChangeGeometryType=!0}}_analyzePointSymbolHalo(e,t,r,i,o){let{haloSymbol:s}=e,c=R(e.haloSize,0);if(c<=0||!s?.symbolLayers)return null;let u=s.symbolLayers.filter(e=>e.enable!==!1),f=u[0];if(!f)return null;let p=u.length===1&&f.type===`CIMSolidFill`;if(e.symbolLayers?.some(e=>l(e))===!0||l(s))return X().warnOnce(`CIM point symbol halos do not support independently animated symbol components`),null;let m=i?.map(e=>E.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>e!=null);if(m?.some(({effect:e})=>Z(e))){if(!p)return X().warnOnce(`Complex CIM point symbol halos are not supported with geometry-changing effects`),null;let t=e.symbolLayers?.filter(e=>e.enable!==!1)??[];if(!xe(t,m))return X().warnOnce(`CIM point symbol halos with geometry-changing effects currently require polygon-producing effects and an unambiguous solid-fill effect chain`),null;let n=t.find(e=>e.type===`CIMSolidFill`);if(!n)return null;let i=[...m,...(n.effects??[]).map(e=>E.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>e!=null)],a=z(t),o=this._getValueOrOverrideExpression(f.type,f.primitiveName,`Color`,P(f.color));return this._cimLayers.push({type:`outlineFill`,name:n.name,colorLocked:!!n.colorLocked,color:this._getValueOrOverrideExpression(n.type,n.primitiveName,`Color`,P(n.color)),effects:i,effectsChangeGeometryType:!0,outlineColorLocked:!0,outlineColor:o,outlineWidth:c+a,cap:`Round`,join:`Round`,referenceWidth:r,pixelBufferSize:c+a,outlineEffects:i}),n}let h=e.symbolLayers?.filter(e=>e.enable!==!1)??[],g=h.length===1&&h[0].type===`CIMVectorMarker`?h[0]:null,_=n(e);if(_.effects=void 0,_.angle=0,_.scaleX=1,g){let e=_.symbolLayers?.find(e=>e.type===`CIMVectorMarker`&&e.enable!==!1);e&&(e.rotation=0,e.offsetX=0,e.offsetY=0)}let v={..._,haloSize:0,haloSymbol:void 0},x=y.getPointSymbolHaloPadding(e,this._resourceManager),[S,C,w]=b.getTextureAnchor(v,this._resourceManager,ue,x),T=a(w),D=[];E.findApplicableOverrides(_,this._primitiveOverrides,D);let k=g?D.filter(e=>e.primitiveName!==g.primitiveName||![`Rotation`,`OffsetX`,`OffsetY`].includes(e.propertyName)):D,A=g?[{offsetX:this._getValueOrOverrideExpression(g.type,g.primitiveName,`OffsetX`,R(g.offsetX)),offsetY:this._getValueOrOverrideExpression(g.type,g.primitiveName,`OffsetY`,R(g.offsetY)),rotation:this._getValueOrOverrideExpression(g.type,g.primitiveName,`Rotation`,R(g.rotation)),size:T,frameHeight:T,rotateClockWise:!!g.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:!1}]:[],j=$(p?d(this._poMap,f,o):o),M,N;if(j){let e=b.getEnvelope(v,null,this._resourceManager);e&&(M=[e.width,e.height],N=[e.width+2*x,e.height+2*x])}return this._cimLayers.push({type:`marker`,spriteRasterizationParam:{type:`sprite-rasterization-param`,resource:{type:`cim-point-symbol-halo`,symbol:_,sdf:!j&&p&&O(v)!=null},overrides:k},colorLocked:!0,color:p?this._getValueOrOverrideExpression(f.type,f.primitiveName,`Color`,P(f.color)):[255,255,255,1],effects:m??null,effectsChangeGeometryType:m?.some(({effect:e})=>Z(e)),scaleSymbolsProportionally:!1,alignment:t,anchorPoint:{x:S,y:C},isAbsoluteAnchorPoint:!1,size:T,scaleX:R(e.scaleX,1),rotation:g?0:R(e.angle,0),offsetX:0,offsetY:0,outlineColor:[0,0,0,0],outlineWidth:0,transform:{type:`cim-marker-transform-param`,params:A},frameHeight:T,widthRatio:1,rotateClockwise:!1,referenceSize:r||T,sizeRatio:1,markerPlacement:null,isOutline:!1,animationParams:j,baseSize:r||T,pixelDimensions:M,texelDimensions:N}),null}_analyzeSolidFill(e,t,n,r){let{primitiveName:i,type:a}=e,o=P(e.color),s=d(this._poMap,e,n);if(!r&&t?.some(e=>e.effect.type===`CIMGeometricEffectTaperedPolygon`)){let n=this._getValueOrOverrideExpression(a,i,`Color`,o);this._cimLayers.push({type:`outlineFill`,name:e.name,colorLocked:!!e.colorLocked,color:n,effects:t,outlineColor:n,outlineColorLocked:!!e.colorLocked,...S,outlineEffects:t})}else this._cimLayers.push({type:`fill`,name:e.name,spriteRasterizationParam:null,colorLocked:!!e.colorLocked,color:this._getValueOrOverrideExpression(a,i,`Color`,o),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t,applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!1,animationParams:$(s)})}_analyzePictureFill(e,t,n){let{primitiveName:r,type:i}=e,a=B(e),o=R(e.height,C.CIMPictureFill.height),s=R(e.scaleX,1);if(`width`in e&&typeof e.width==`number`){let t=e.width,n=1,r=this._resourceManager.getResource(e.url);r!=null&&(n=r.width/r.height),s/=o/t*n}let c={type:`sprite-rasterization-param`,resource:e,overrides:this._getPrimitiveMaterialOverrides(r,i)},l=d(this._poMap,e,n);this._cimLayers.push({type:`fill`,name:e.name,spriteRasterizationParam:c,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(i,r,`TintColor`,a),height:this._getValueOrOverrideExpression(i,r,`Height`,o),scaleX:this._getValueOrOverrideExpression(i,r,`ScaleX`,s),angle:this._getValueOrOverrideExpression(i,r,`Rotation`,R(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,r,`OffsetX`,R(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,r,`OffsetY`,R(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1,animationParams:$(l)})}_analyzeHatchFill(e,t,n){let{primitiveName:r,type:i}=e,a=d(this._poMap,e,n),o=this._analyzeMaterialOverrides(r,[`Rotation`,`OffsetX`,`OffsetY`]),s=V(o),c=[255,255,255,1],l=!1;if(e.lineSymbol?.symbolLayers)for(let t of e.lineSymbol.symbolLayers){if(t.type!==`CIMSolidStroke`)continue;let e=t.primitiveName??r;!l&&e&&!t.colorLocked&&(this._poMap[e]?.Color!=null||this._poMap[e]?.StrokeColor!=null)&&(c=P(t.color),c=this._maybeGetValueOrOverrideExpression(e,`StrokeColor`)??this._getValueOrOverrideExpression(i,e,`Color`,c),l=!0);let n=this._maybeGetValueOrOverrideExpression(e,`StrokeWidth`);if(n){let t=null,r=null;typeof n==`number`?t=n:r=n.valueExpressionInfo;let a=s.find(e=>e.propertyName===`strokeWidth`);a?a.propertyName=`width`:(a={type:`CIMPrimitiveOverride`,primitiveName:e,propertyName:`width`,valueExpressionInfo:r,value:t,defaultValue:H(i,`width`)},s.push(a))}}let u={type:`sprite-rasterization-param`,resource:e,overrides:s};this._cimLayers.push({type:`fill`,name:e.name,spriteRasterizationParam:u,colorLocked:!!e.colorLocked,effects:t,color:c,height:this._getValueOrOverrideExpression(i,r,`Separation`,R(e.separation,C.CIMHatchFill.separation)),scaleX:1,angle:this._getValueOrOverrideExpression(i,r,`Rotation`,R(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,r,`OffsetX`,R(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,r,`OffsetY`,R(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!l,animationParams:$(a)})}_analyzeGradientFill(e,t){let{angle:n,gradientMethod:r,gradientSize:i,gradientSizeUnits:a,gradientType:o,interval:s,primitiveName:c,type:l}=e,u=C.CIMGradientFill,d=e.colorRamp;this._cimLayers.push({type:`gradientFill`,name:e.name,spriteRasterizationParam:{type:`sprite-rasterization-param`,resource:e,overrides:this._getPrimitiveMaterialOverrides(c,l)},colorLocked:!1,effects:t,color:[255,255,255,1],gradientMethod:this._getValueOrOverrideExpression(l,c,`GradientMethod`,r??`Linear`),angle:this._getValueOrOverrideExpression(l,c,`Angle`,R(n,u.angle)),gradientType:this._getValueOrOverrideExpression(l,c,`GradientType`,o??u.gradientType),interval:this._getValueOrOverrideExpression(l,c,`Interval`,R(s,d.type===`CIMFixedColorRamp`?d.colors.length:u.interval)),gradientSize:this._getValueOrOverrideExpression(l,c,`GradientSize`,R(i,u.gradientSize)),gradientSizeUnits:a===`Absolute`?M.Absolute:a===`Relative`?M.Relative:u.gradientSizeUnits})}_analyzeCompositeOutlineFill(e,t,n,r=[]){let i=e.find(e=>e.type===`CIMSolidFill`),a=e.find(e=>e.type===`CIMSolidStroke`);if(i==null||a==null)return;let o=[...r,...[...t??[],...i.effects??[]].map(e=>E.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>e!=null)],s=[...r,...[...t??[],...a.effects??[]].map(e=>E.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>e!=null)],c=R(a.width,C.CIMSolidStroke.width),l=U(a.capStyle,C.CIMSolidStroke.capstyle),u=U(a.joinStyle,C.CIMSolidStroke.joinstyle),d=a.miterLimit;this._cimLayers.push({type:`outlineFill`,name:i.name,colorLocked:!!i.colorLocked,color:this._getValueOrOverrideExpression(i.type,i.primitiveName,`Color`,P(i.color)),effects:o,effectsChangeGeometryType:o.some(({effect:e})=>Z(e))||s.some(({effect:e})=>Z(e)),outlineColorLocked:!!a.colorLocked,outlineColor:this._getValueOrOverrideExpression(a.type,a.primitiveName,`Color`,P(a.color)),outlineWidth:this._getValueOrOverrideExpression(a.type,a.primitiveName,`Width`,c),cap:this._getValueOrOverrideExpression(a.type,a.primitiveName,`CapStyle`,l),join:this._getValueOrOverrideExpression(a.type,a.primitiveName,`JoinStyle`,u),miterLimit:d&&this._getValueOrOverrideExpression(a.type,a.primitiveName,`MiterLimit`,d),referenceWidth:n,outlineEffects:s})}_analyzeSolidStroke(e,t,n,r,i){let{primitiveName:a,type:o}=e,s=P(e.color),c=R(e.width,C.CIMSolidStroke.width),l=U(e.capStyle,C.CIMSolidStroke.capstyle),u=U(e.joinStyle,C.CIMSolidStroke.joinstyle),f=e.miterLimit,p=this._analyzePrimitiveOverrides(a,t,null,null),m=[];p&&(m=this._getPrimitiveMaterialOverrides(a,o));let h,g,_,v;if(t&&Array.isArray(t)&&t.length>0){let e=t[t.length-1].effect;e&&e.type===`CIMGeometricEffectDashes`&&e.lineDashEnding===`NoConstraint`&&(h=e.dashTemplate,g=e.scaleDash,_=e.offsetAlongLine,v=e.primitiveName,t=[...t],t.pop())}v!=null&&m.push(...this._getPrimitiveMaterialOverrides(v,o).filter(e=>e.propertyName===`dashTemplate`));let y=h===void 0?null:{type:`sprite-rasterization-param`,resource:{type:`dash`,dashTemplate:h,primitiveName:v},overrides:m},b=d(this._poMap,e,i);this._cimLayers.push({type:`line`,name:e.name,spriteRasterizationParam:y,isOutline:n,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(o,a,`Color`,s),width:this._getValueOrOverrideExpression(o,a,`Width`,c),cap:this._getValueOrOverrideExpression(o,a,`CapStyle`,l),join:this._getValueOrOverrideExpression(o,a,`JoinStyle`,u),miterLimit:f&&this._getValueOrOverrideExpression(o,a,`MiterLimit`,f),referenceWidth:r,zOrder:he(e.name),dashTemplate:this._maybeGetValueOrOverrideExpression(v,`DashTemplate`)??h,offsetAlongLine:this._getValueOrOverrideExpression(o,v,`OffsetAlongLine`,_??0),scaleDash:g,sampleAlphaOnly:!0,animationParams:$(b)})}_analyzePictureStroke(e,t,n,r,i){let{primitiveName:a,type:o}=e,s=B(e),c=R(e.width,C.CIMPictureStroke.width),l=U(e.capStyle,C.CIMPictureStroke.capstyle),u=U(e.joinStyle,C.CIMPictureStroke.joinstyle),f=e.miterLimit,p={type:`sprite-rasterization-param`,resource:e,overrides:this._getPrimitiveMaterialOverrides(a,o)},m=d(this._poMap,e,i);this._cimLayers.push({type:`line`,name:e.name,spriteRasterizationParam:p,isOutline:n,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(o,a,`TintColor`,s),width:this._getValueOrOverrideExpression(o,a,`Width`,c),cap:this._getValueOrOverrideExpression(o,a,`CapStyle`,l),join:this._getValueOrOverrideExpression(o,a,`JoinStyle`,u),miterLimit:f&&this._getValueOrOverrideExpression(o,a,`MiterLimit`,f),referenceWidth:r,zOrder:he(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1,animationParams:$(m)})}_analyzeGradientStroke(e,t,n,r){let{gradientMethod:i,gradientSize:a,gradientSizeUnits:o,gradientType:s,interval:c,primitiveName:l,type:u}=e,d=C.CIMGradientStroke,f=R(e.width,d.width),p=U(e.capStyle,d.capstyle),m=U(e.joinStyle,d.joinstyle),h=e.miterLimit,g=e.colorRamp;this._cimLayers.push({type:`gradientStroke`,name:e.name,spriteRasterizationParam:{type:`sprite-rasterization-param`,resource:e,overrides:this._getPrimitiveMaterialOverrides(l,u)},colorLocked:!!e.colorLocked,effects:t,color:[255,255,255,1],width:this._getValueOrOverrideExpression(u,l,`Width`,f),cap:this._getValueOrOverrideExpression(u,l,`CapStyle`,p),join:this._getValueOrOverrideExpression(u,l,`JoinStyle`,m),miterLimit:h&&this._getValueOrOverrideExpression(u,l,`MiterLimit`,h),referenceWidth:r,isOutline:n,gradientMethod:this._getValueOrOverrideExpression(u,l,`GradientMethod`,i??d.gradientMethod),gradientType:this._getValueOrOverrideExpression(u,l,`GradientType`,s??d.gradientType),interval:this._getValueOrOverrideExpression(u,l,`Interval`,R(c,g.type===`CIMFixedColorRamp`?g.colors.length:d.interval)),gradientSize:this._getValueOrOverrideExpression(u,l,`GradientSize`,R(a,d.gradientSize)),gradientSizeUnits:o===`Absolute`?M.Absolute:o===`Relative`?M.Relative:d.gradientSizeUnits})}_analyzeMarker(e,t,n,r,i,a,o,s,c,l=!1,u=!1){l||=!!e.colorLocked;let h=c;if(h=f(e,h),h=p(this._poMap,e,h),h=m(e,h),h=d(this._poMap,e,h),this._analyzeMarkerInsidePolygon(e,t,l,h))return;let g=R(e.size,C.CIMVectorMarker.size),_=R(e.rotation),v=R(e.offsetX),y=R(e.offsetY),{primitiveName:b,type:x}=e,S=this._getValueOrOverrideExpression(x,b,`Size`,g),w=this._getValueOrOverrideExpression(x,b,`Rotation`,_),T=this._getValueOrOverrideExpression(x,b,`OffsetX`,v),E=this._getValueOrOverrideExpression(x,b,`OffsetY`,y),D=this._cimLayers.length;switch(e.type){case`CIMPictureMarker`:this._analyzePictureMarker(e,t,n,r,i,a,S,w,T,E,s,h,l,u);break;case`CIMVectorMarker`:this._analyzeVectorMarker(e,t,n,r,i,a,S,w,T,E,s,h,o,l,u)}if(e.name)for(let t=D;t<this._cimLayers.length;t++){let n=this._cimLayers[t];n.name??=e.name;let r=n.groupNames??=[];r[r.length-1]!==e.name&&r.push(e.name)}}_analyzeMarkerInsidePolygon(e,t,n,r){let{markerPlacement:i,type:o}=e;if(!i||i.type!==`CIMMarkerPlacementInsidePolygon`||r.hasMotionAnimations)return!1;if(o===`CIMVectorMarker`||o===`CIMPictureMarker`){let n=e.primitiveName;if(n&&this._analyzePrimitiveOverrides([n],t,null,null))return!1;let r=i.primitiveName;if(r&&this._analyzePrimitiveOverrides([r],t,null,null))return!1;if(o===`CIMVectorMarker`){let{markerGraphics:t}=e;if(t)for(let e of t){let{symbol:t}=e;if(t?.type===`CIMPolygonSymbol`&&t.symbolLayers){let{symbolLayers:e}=t;for(let t of e)if(t.type===`CIMSolidStroke`)return!1}}}else{let{animatedSymbolProperties:t}=e;if(t)return!1}}let s=Math.abs(i.stepX),c=Math.abs(i.stepY);if(s===0||c===0)return!0;let l,u;if(i.gridType===`Random`){let e=a(de),t=Math.max(Math.floor(e/s),1);l=c*Math.max(Math.floor(e/c),1),u=t*s/l}else i.shiftOddRows?(l=c*2,u=s/c*.5):(l=c,u=s/c);let d=B(e),f=e.type===`CIMCharacterMarker`?null:{type:`sprite-rasterization-param`,resource:{...e,effects:e.effects?.filter(e=>!ye(e))},overrides:[]};return this._cimLayers.push({type:`fill`,name:e.name,spriteRasterizationParam:f,colorLocked:n,effects:t,color:d,height:l,scaleX:u,angle:i.gridAngle??0,offsetX:R(i.offsetX),offsetY:R(i.offsetY),applyRandomOffset:i.gridType===`Random`,sampleAlphaOnly:e.type!==`CIMPictureMarker`,hasUnresolvedReplacementColor:!0,animationParams:$(r)}),!0}_analyzePictureMarker(e,t,r,i,a,s,c,l,u,d,f,p,m,h){let{animatedSymbolProperties:g,primitiveName:_,type:v}=e,y=R(e.scaleX,1),b=B(e);r||=this._createMarkerPlacementOverrideExpression(e.markerPlacement);let x=this._createGIFAnimatedSymbolPropertiesOverrideExpression(g),S=e.anchorPoint??{x:0,y:0};if(`width`in e&&typeof e.width==`number`){let t=e.width,n=1,r=this._resourceManager.getResource(e.url);r!=null&&(n=r.width/r.height);let i=R(e.size);y/=i/t*n}let C=[...i];e.primitiveName&&C.push(e.primitiveName);let w;g||x?w={type:`animated`,url:e.url,urlHash:`H`+o(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}:(w=n(e),w.markerPlacement=null);let T={type:`sprite-rasterization-param`,resource:w,overrides:this._getMaterialOverrides(C,v)};x&&T.overrides.push(...x.overrides);let E=c;this._cimLayers.push({type:`marker`,name:e.name,spriteRasterizationParam:T,colorLocked:m,effects:t,scaleSymbolsProportionally:!1,alignment:a,size:c,scaleX:this._getValueOrOverrideExpression(v,_,`ScaleX`,y),rotation:l,offsetX:u,offsetY:d,transform:{type:`cim-marker-transform-param`,params:f},color:this._getValueOrOverrideExpression(v,_,`TintColor`,b),anchorPoint:{x:S.x,y:S.y},isAbsoluteAnchorPoint:e.anchorPointUnits!==`Relative`,outlineColor:[0,0,0,0],outlineWidth:0,frameHeight:0,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:s,sizeRatio:1,isOutline:h,markerPlacement:r,animationParams:$(p),baseSize:E})}_analyzeVectorMarker(e,t,n,r,i,a,o,l,u,d,f,p,m,v,y){let b=e.markerGraphics;if(!b)return;let x=e.frame,S=0;S=x?x.ymax-x.ymin:a;let C=!!e.scaleSymbolsProportionally;if(S){let t={offsetX:u,offsetY:d,rotation:l,size:o,frameHeight:S,rotateClockWise:!!e.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:C};f=[...f,t]}n||=this._createMarkerPlacementOverrideExpression(e.markerPlacement);for(let o of b)if(o){let l=o.symbol;if(!l)continue;let u=o.primitiveName;u&&r.push(u);let d=p,b;if((l.type===`CIMPointSymbol`||l.type===`CIMTextSymbol`)&&x){let t=0,n=0,r=o.geometry;`x`in r&&`y`in r&&(t+=r.x-(x.xmin+x.xmax)*.5,n+=r.y-(x.ymin+x.ymax)*.5);let i=e.anchorPoint,a=!1;i&&(e.anchorPointUnits===`Absolute`?(t-=i.x,n-=i.y,a=!0):x&&(t-=(x.xmax-x.xmin)*i.x,n-=(x.ymax-x.ymin)*i.y));let s={offsetX:t,offsetY:n,rotation:0,size:0,frameHeight:0,rotateClockWise:!1,absoluteAnchorPoint:a,scaleSymbolsProportionally:C};b=[...f,s]}(l.type===`CIMPointSymbol`||l.type===`CIMTextSymbol`)&&this._analyzeCallout(l,t,b??f,d,a,i,m);let w=s(o.geometry)?{...o,geometry:c(o.geometry,{maxDeviation:.01})}:o,T=w.geometry,[E,D]=h(T,x);switch((E!==0||D!==0)&&(d=g(d,E,D)),l.type){case`CIMPointSymbol`:case`CIMLineSymbol`:case`CIMPolygonSymbol`:m||ve(l)?(d={...d,transform:{type:`AnimatedTransform`,relativeTranslation:!1,absoluteScale:!0,selectGlobalRotation:!1,translation:_([0,0]),rotation:_(0),scale:_(S),parent:p.transform}},this._analyzeMultiLayerGraphicNonSDF(e,t,n,w,r,i,a,b??f,d,S,v,y)):this._analyzeMultiLayerGraphic(e,t,n,w,r,i,a,b??f,d,S,v,y);break;case`CIMTextSymbol`:this._analyzeTextGraphic(t,n,w,r,i,a,b??f,v)}u&&r.pop()}}_analyzeCallout(e,t,n,r,i,a,o){let s=e.callout;if(!s||!ie(s))return;let c=t??[],{leaderTolerance:l,leaderOffset:u}=s;switch(s.type){case`CIMSimpleLineCallout`:{let{lineSymbol:e,autoSnap:t}=s,d={type:`CIMSimpleLineCallout`,leaderTolerance:l,leaderOffset:u,autoSnap:t,inflateSize:500};this._analyzeSymbolLayer(e,[...c,{type:`cim-effect-param`,effect:d,overrides:[]}],n,r,i,a,o);break}case`CIMBackgroundCallout`:{let{accentBarSymbol:e,gap:t,backgroundSymbol:d,leaderLineSymbol:f,lineStyle:p,margin:m}=s,h=n=>({type:`CIMBackgroundCallout`,leaderTolerance:l,leaderOffset:u,lineStyle:Y(p),gap:t,hasAccentBar:!!e,margin:m,inflateSize:500,part:n}),g=[...c,{type:`cim-effect-param`,effect:h(`background`),overrides:[]}];if(f&&this._analyzeSymbolLayer(f,[...c,{type:`cim-effect-param`,effect:h(`leader`),overrides:[]}],n,r,i,a,o),d){let e=d.symbolLayers??[];Q(e)?this._analyzeCompositeOutlineFill(e,null,i,g):this._analyzeSymbolLayer(d,g,n,r,i,a,o)}e&&this._analyzeSymbolLayer(e,[...c,{type:`cim-effect-param`,effect:h(`accent-bar`),overrides:[]}],n,r,i,a,o);break}case`CIMBalloonCallout`:{let{balloonStyle:e,backgroundSymbol:t,dartSymbol:d,fixedDartWidth:f,margin:p,useDartSymbol:m,useFixedDartWidth:h}=s,g=m===!0&&d!=null,_=t=>({type:`CIMBalloonCallout`,leaderTolerance:l,leaderOffset:u,margin:p,balloonStyle:ce(e),dartWidth:h?f:void 0,inflateSize:500,part:t,separateDart:g}),v=(e,t)=>{let s=[...c,{type:`cim-effect-param`,effect:_(t),overrides:[]}],l=e.symbolLayers??[];Q(l)?this._analyzeCompositeOutlineFill(l,null,i,s):this._analyzeSymbolLayer(e,s,n,r,i,a,o)};g&&v(d,`dart`),v(t,`background`);break}case`CIMPointSymbolCallout`:{let{backgroundScale:e,gap:t,leaderLineSymbol:d,lineStyle:f,pointSymbol:p}=s,m=oe(e),h=ae(p,n),g=e=>({type:`CIMPointSymbolCallout`,leaderTolerance:l,leaderOffset:u,backgroundScale:m,...se(p,e),lineStyle:Y(f),gap:t,inflateSize:500,part:e});d&&this._analyzeSymbolLayer(d,[...c,{type:`cim-effect-param`,effect:g(`leader`),overrides:[]}],n,r,i,a,o),this._analyzeSymbolLayer(p,[...c,{type:`cim-effect-param`,effect:g(`marker`),overrides:[]}],h,r,i,a,o||m!==0);break}case`CIMCompositeCallout`:{let{backgroundSymbol:e,margin:t,shadowSymbol:d}=s,f={type:`CIMBalloonCallout`,leaderTolerance:l,leaderOffset:u,margin:t,balloonStyle:1,inflateSize:500,part:`background`},p=[...c,{type:`cim-effect-param`,effect:f,overrides:[]}],m=e=>{let t=e.symbolLayers??[];Q(t)?this._analyzeCompositeOutlineFill(t,null,i,p):this._analyzeSymbolLayer(e,p,n,r,i,a,o)};d&&m(d),m(e);break}}}_analyzeMultiLayerGraphic(e,t,n,r,i,a,o,s,c,l,u,d){let f=r.symbol,p=f.symbolLayers;p&&(_e(p)&&!v(c)?this._analyzeCompositeMarkerGraphic(e,t,n,r,p,a,o,s,l,u,d):Se(p)?(x(f,e=>{e.colorLocked&&(u=!0)}),this._analyzeMultiLayerGraphicNonSDF(e,t,n,r,i,a,o,s,c,l,u,d)):this._analyzeMarkerGraphicSymbolLayers(e,t,n,r,i,a,o,s,c,l,u,d))}_analyzeMarkerGraphicSymbolLayers(e,t,n,r,i,a,o,s,c,l,u,f){let p=r.symbol,m=p.symbolLayers;if(!m)return;let h=le.applyEffects(p.effects,r.geometry);if(!h)return;let g=m.length;for(;g--;){let p=m[g];if(!p||p.enable===!1)continue;let _=p.primitiveName;switch(_&&i.push(_),p.type){case`CIMSolidFill`:case`CIMSolidStroke`:{let i=le.applyEffects(p.effects,h),m=k(i);if(!m)continue;let g=e.anchorPointUnits!==`Relative`,v=p.type===`CIMSolidStroke`?p.width:0,{frameSizeRatio:y,anchorX:b,anchorY:x,widthRatio:S,sdfPaddingRatio:w,sdfTextureSize:T}=A(m,e.frame,e.size,e.anchorPoint,g,v,e.scaleSymbolsProportionally),E=p.type===`CIMSolidFill`,D={type:`sdf`,geometry:i,sdfPaddingRatio:w,asFill:E,sdfTextureSize:T},{path:O}=p,M=E?P(W(p)):O==null?P(G(p)):[0,0,0,0],N=E?[0,0,0,0]:P(G(p));if(!E&&!v)break;let F=r.primitiveName,I=null;E&&!p.colorLocked&&(I=this._maybeGetValueOrOverrideExpression(F,`FillColor`));let L=null;!E&&!p.colorLocked&&(L=this._maybeGetValueOrOverrideExpression(F,`StrokeColor`));let z=I??this._getValueOrOverrideExpression(p.type,_,`Color`,M),B=L??this._getValueOrOverrideExpression(p.type,_,`Color`,N),V=this._maybeGetValueOrOverrideExpression(F,`StrokeWidth`)??this._getValueOrOverrideExpression(p.type,_,`Width`,v),H=O?{type:`sprite-rasterization-param`,resource:{type:`path`,path:O,asFill:E},overrides:[]}:{type:`sprite-rasterization-param`,resource:D,overrides:[]},U=d(this._poMap,p,c),K=R(e.size,C.CIMVectorMarker.size),q=this._getValueOrOverrideExpression(e.type,e.primitiveName,`Size`,K);this._cimLayers.push({type:`marker`,name:p.name,groupNames:e.name?[e.name]:void 0,spriteRasterizationParam:H,colorLocked:!!p.colorLocked||!!u,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:b,y:x},isAbsoluteAnchorPoint:g,size:l,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:`cim-marker-transform-param`,params:s},frameHeight:l,widthRatio:S,rotateClockwise:!1,referenceSize:o,sizeRatio:y,color:z,outlineColor:B,outlineWidth:V,isOutline:f,markerPlacement:n,animationParams:$(U),isStroke:p.type!==`CIMSolidFill`,baseSize:q,...j(i,T,w)});break}case`CIMPictureMarker`:case`CIMVectorMarker`:if(p.markerPlacement){X().error(`Error analyzing CIM, got unexpected marker placement`);break}this._analyzeMarker(p,t,n,i,a,o,!1,s,c,u,f)}_&&i.pop()}}_analyzeTextGraphic(e,n,r,i,a,o,s,c){E.findApplicableOverrides(r,this._primitiveOverrides,[]);let l=r.geometry;if(!(`x`in l)||!(`y`in l))return;let u=r.symbol,d=K(u),f=T(u.fontStyleName),p=t(u.fontFamilyName);u.font={family:p,decoration:d,...f};let m=R(u.height,C.CIMTextSymbol.height),h=R(u.angle),g=R(u.offsetX),_=R(u.offsetY),{haloSymbol:v}=u,y=R(u.haloSize,0),b=[0,0,0,0];if(v?.symbolLayers?.length){let e=v.symbolLayers;for(let t of e)if(t.color){b=this._getValueOrOverrideExpression(u?.haloSymbol?.type??`CIMPolygonSymbol`,t.primitiveName,`Color`,P(t.color));break}}let x=r.primitiveName,S=[0,0,0,1],w=[0,0,0,0],O=0,k=!1;if(u.symbol?.symbolLayers)for(let e of u.symbol.symbolLayers){let t=e.primitiveName;if(e.type===`CIMSolidStroke`)w=this._getValueOrOverrideExpression(`CIMSolidStroke`,t,`Color`,P(e.color)),O=this._getValueOrOverrideExpression(`CIMSolidStroke`,t,`Width`,q(e)??0);else if(e.type===`CIMSolidFill`){let n=P(e.color);k??=!!e.colorLocked,S=this._getValueOrOverrideExpression(`CIMSolidFill`,t??x,`Color`,n)}}let A=null,j=null,M=null,N=null,F=null;x&&(A=this._maybeGetValueOrOverrideExpression(x,`TextSize`),j=this._maybeGetValueOrOverrideExpression(x,`TextAngle`),M=this._maybeGetValueOrOverrideExpression(x,`TextOffsetX`),N=this._maybeGetValueOrOverrideExpression(x,`TextOffsetY`),k||(F=this._maybeGetValueOrOverrideExpression(x,`FillColor`)));let I=F??S,L=null,z=null,B=0,V=u.callout?.type===`CIMBackgroundCallout`;if(u.callout?.type===`CIMBackgroundCallout`){let e=u.callout;if(e.backgroundSymbol){let t=e.backgroundSymbol.symbolLayers;if(t)for(let e of t)e.type===`CIMSolidFill`?L=P(e.color):e.type===`CIMSolidStroke`&&(z=P(e.color),B=R(e.width,C.CIMSolidStroke.width))}}let H=this._getValueOrOverrideExpression(u.type,r.primitiveName,`TextString`,r.textString??``);if(H==null)return;let{fontStyleName:U}=u,W=p+(U?`-`+U.toLowerCase():`-regular`),G=this._getMaterialOverrides(i,u.type);G.push(...this._getPrimitiveMaterialOverrides(r.primitiveName,u.type)),this._collectDictionaryTemplateOverrides(G,r);let J={type:`text-rasterization-param`,resource:{type:`text`,textString:r.textString??``,font:u.font,symbol:u,primitiveName:r.primitiveName,supportsRichText:D(r.textString??``)||G.some(e=>e.propertyName===`textString`)},overrides:G};this._cimLayers.push({type:`text`,lineWidth:u.lineWidth,textRasterizationParam:J,colorLocked:!!c||!!k,effects:e,alignment:a,anchorPoint:{x:0,y:0},isAbsoluteAnchorPoint:!1,fontName:W,decoration:d,haloSize:y,haloColor:b,weight:f.weight,style:f.style,size:A??m,angle:j??h,offsetX:M??g,offsetY:N??_,transform:{type:`cim-marker-transform-param`,params:s},horizontalAlignment:te(u.horizontalAlignment),verticalAlignment:ee(u.verticalAlignment),text:H,color:I,outlineColor:w,outlineSize:O,backgroundColor:L,borderLineColor:z,borderLineWidth:B,useBackgroundCallout:V,referenceSize:o,sizeRatio:1,markerPlacement:n})}_collectDictionaryTemplateOverrides(e,t){if(t.textString&&this._hasTextStringTemplates){let n=J(t.symbol);e.push({propertyName:`textString`,defaultValue:``,valueExpressionInfo:{type:`dictionary-template`,textCase:n,template:t.textString},primitiveName:t.primitiveName})}}_analyzeMultiLayerGraphicNonSDF(e,t,n,r,a,o,s,c,l,u,d,f){let p=me(e,r),m=e.primitiveName,h=this._analyzeMaterialOverrides(m,[`Rotation`,`OffsetX`,`OffsetY`]),g=V(h),[_,v,y]=b.getTextureAnchor(p,this._resourceManager,ue),x=this._getMaterialOverrides(a,e.type).filter(e=>e.primitiveName!==m||![`rotation`,`offsetX`,`offsetY`].includes(e.propertyName));x.push(...g);let S={type:`sprite-rasterization-param`,resource:{...p,avoidSDFRasterization:!0},overrides:x},w=R(e.size,C.CIMVectorMarker.size),T=this._getValueOrOverrideExpression(e.type,m,`Size`,w);this._cimLayers.push({type:`marker`,name:e.name,spriteRasterizationParam:S,colorLocked:d,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:o,anchorPoint:{x:_,y:v},isAbsoluteAnchorPoint:!1,size:u,rotation:0,offsetX:0,offsetY:0,transform:{type:`cim-marker-transform-param`,params:c},color:[255,255,255,1],outlineColor:[0,0,0,0],outlineWidth:0,scaleX:1,frameHeight:u,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:s,sizeRatio:y/i(e.size),isOutline:f,markerPlacement:n,animationParams:$(l),baseSize:T})}_createMarkerPlacementOverrideExpression(e){if(!e)return null;let t=[];return E.findApplicableOverrides(e,this._primitiveOverrides,t),{type:`cim-marker-placement-param`,placement:e,overrides:we(t)}}_createGIFAnimatedSymbolPropertiesOverrideExpression(e){if(!e)return null;let t=[];return E.findApplicableOverrides(e,this._primitiveOverrides,t),{type:`cim-gif-animation-params`,animation:e,overrides:we(t)}}_analyzeCompositeMarkerGraphic(e,t,n,r,i,a,o,s,c,l,u){let d=r.geometry,f=i[0],p=i[1],m=k(d);if(!m)return;let h=e.anchorPointUnits!==`Relative`,g=R(f.width,C.CIMSolidStroke.width),{frameSizeRatio:_,anchorX:v,anchorY:y,widthRatio:b,sdfPaddingRatio:x,sdfTextureSize:S}=A(m,e.frame,e.size,e.anchorPoint,h,g,e.scaleSymbolsProportionally),{path:w}=p,T=p.primitiveName,E=f.primitiveName,D=r.primitiveName,O=null;!p.colorLocked&&!l&&(O=this._maybeGetValueOrOverrideExpression(D,`FillColor`));let j=O??this._getValueOrOverrideExpression(p.type,T,`Color`,P(p.color)),M=null;!f.colorLocked&&!l&&(M=this._maybeGetValueOrOverrideExpression(D,`StrokeColor`));let N=M??this._getValueOrOverrideExpression(f.type,E,`Color`,P(f.color)),F=this._maybeGetValueOrOverrideExpression(D,`StrokeWidth`)??this._getValueOrOverrideExpression(f.type,E,`Width`,g),I={type:`sprite-rasterization-param`,resource:w?{type:`path`,path:w,asFill:!0}:{type:`sdf`,geometry:d,sdfTextureSize:S,sdfPaddingRatio:x,asFill:!0},overrides:[]};this._cimLayers.push({type:`marker`,name:e.name,spriteRasterizationParam:I,colorLocked:l,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:v,y},isAbsoluteAnchorPoint:h,size:c,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:`cim-marker-transform-param`,params:s},frameHeight:c,widthRatio:b,rotateClockwise:!1,referenceSize:o,sizeRatio:_,color:j,outlineColor:N,outlineWidth:F,isOutline:u,markerPlacement:n})}_setPoMap(e,t,n){let r;this._poMap[e]?r=this._poMap[e]:(r={},this._poMap[e]=r),r[t]=n}_maybeGetValueOrOverrideExpression(e,t,n){return this._getValueOrOverrideExpression(``,e,t,n,!1)}_getValueOrOverrideExpression(e,t,n,r,i=!0){if(i&&!ne(r)&&(r=H(e,n.toLowerCase())),t==null)return r;let a=this._poMap[t];if(a==null)return r;let o=a[n];return typeof o==`string`||typeof o==`number`||Array.isArray(o)?o:o?{valueExpressionInfo:o,defaultValue:r}:r}_analyzePrimitiveOverrides(e,t,n,r){if(e==null)return!1;typeof e==`string`&&(e=[e]);for(let t of this._primitiveOverrides)if(e.includes(t.primitiveName)&&t.valueExpressionInfo)return!0;if(t!=null){for(let e of t)if(e?.overrides.length>0)return!0}if(n!=null){for(let e of n)if(e?.overrides.length>0)return!0}if(r!=null){for(let e of r)if(e?.overrides.length>0)return!0}return!1}_getMaterialOverrides(e,t){if(!e)return[];let n=[];for(let r of e)n.push(...this._getPrimitiveMaterialOverrides(r,t));return n}_getPrimitiveMaterialOverrides(e,t){if(!e)return[];let n=V(this._primitiveOverrides.filter(t=>t.primitiveName===e));return n.forEach(e=>e.defaultValue=H(t,e.propertyName.toLowerCase())),n}_analyzeMaterialOverrides(e,t){return this._primitiveOverrides.filter(n=>n.primitiveName!==e||!t.includes(n.propertyName))}}function me(e,t){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:[{...t}],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function he(e){if(e?.startsWith(`Level_`)){let t=parseInt(e.slice(6),10);if(!isNaN(t))return t}return 0}function ge(e,t){if(!t||t.length===0)return e;let r=n(e);return E.applyOverrides(r,t),r}const _e=e=>e&&e.length===2&&e[0].enable&&e[1].enable&&e[0].type===`CIMSolidStroke`&&e[1].type===`CIMSolidFill`&&e[0].path==null&&e[1].path==null&&!e[0].effects&&!e[1].effects&&!e[0].animations&&!e[1].animations;function ve(e){let t=e.symbolLayers;if(!t)return!1;let n=t.find(e=>e.effects?.find(e=>e.type===`CIMGeometricEffectDashes`&&e.dashTemplate!=null)),r=t.find(e=>e.effects?.find(e=>e.type===`CIMGeometricEffectAddControlPoints`));return!!n||!!r}function ye(e){return Z(e)}function Z(e){return e.type===`CIMGeometricEffectCircularSector`||e.type===`CIMGeometricEffectRadial`||e.type===`CIMGeometricEffectTaperedPolygon`||e.type===`PrivateDimensionEffect`||e.type===`PrivateMatcherGeometryOverrideEffect`}function be(e){return e.type===`CIMGeometricEffectCircularSector`||e.type===`CIMGeometricEffectTaperedPolygon`}function xe(e,t){let n=e.filter(e=>e.type===`CIMSolidFill`),r=e.every(e=>e.type===`CIMSolidFill`||e.type===`CIMSolidStroke`),i=e.filter(e=>e.effects?.length),a=i.length===0||i.length===1&&n.length===1&&i[0]===n[0];return n.length>0&&r&&a&&t.some(({effect:e})=>be(e))}function Se(e){return e.some(e=>e.type!==`CIMSolidFill`&&e.type!==`CIMSolidStroke`&&(e.type!==`CIMVectorMarker`&&e.type!==`CIMPictureMarker`||e.markerPlacement!=null))}function Ce(e,t){return!!(t?.some(e=>e.type===`CIMGeometricEffectRadial`)&&t?.some(e=>e.type===`CIMGeometricEffectTaperedPolygon`)||t?.some(e=>e.type===`CIMGeometricEffectCircularSector`))&&Q(e)}function Q(e){if(e?.length!==2)return!1;let t=e.find(e=>e.type===`CIMSolidFill`),n=e.find(e=>e.type===`CIMSolidStroke`),r=n?.effects?.some(e=>e.type===`CIMGeometricEffectDashes`);return t!=null&&n!=null&&!r}function we(e){return n(e).map(e=>({...e,propertyName:re(e.propertyName)}))}function $(e){return v(e)?{type:`animation-params`,params:e}:null}export{pe as CIMAnalyzer,ge as analyzeCIMResource};
2
+ import{isRGB as e}from"../../core/colorUtils.js";import{getFontFamily as t}from"../../core/fontUtils.js";import"../../core/has.js";import{clone as n}from"../../core/lang.js";import r from"../../core/Logger.js";import{pt2px as i,px2pt as a}from"../../core/screenUtils.js";import{numericHash as o}from"../../core/string.js";import{isCurvedGeometry as s}from"../../geometry/support/curves/curveUtils.js";import{densifyCurvedGeometry as c}from"../../geometry/support/curves/densifyCurvedGeometry.js";import{checkForAnimations as l,globalRotation as u,getAnimationParams as d,handleAbsoluteAnchor as f,handleMarker as p,handleRelativeAnchor as m,getFrameTranslation as h,translate as g,getStaticParam as _,shouldUseAnimatedPath as v}from"./animationUtils.js";import{CIMSymbolInflatedSizeHelper as y,CIMSymbolHelper as b,forEachSymbolLayer as x}from"./CIMSymbolHelper.js";import{antialiasingOutlineFillSettings as S}from"./constants.js";import{defaultCIMValues as C}from"./defaultCIMValues.js";import{fitVectorMarker as w}from"./fitVectorMarker.js";import{fromCIMFontStyle as T}from"./fromCIMFontStyle.js";import{OverrideHelper as E}from"./OverrideHelper.js";import{hasRichTextFormattingTags as D}from"./richTextUtils.js";import{getSDFInfo as O,getExtent as k,getSDFMetrics as A,getSDFDimensions as j}from"./SDFHelper.js";import{CIMSymbolUnits as M}from"./types.js";import{colorToArray as N,normalizeAlpha as P,getSize as F,isCIMMarkerStrokePlacement as I,hasStrokeLayer as L,getNumericValue as R,getMaxStrokeWidth as z,getTintColor as B,normalizePrimitiveOverrideProps as V,getDefaultCIMValue as H,getEnum as U,getFillColor as W,getStrokeColor as G,fromCIMFontDecoration as K,getStrokeWidth as q,fromCIMVerticalAlignment as ee,fromCIMHorizontalAlignment as te,getTextCasing as J,isValidCIMValue as ne,uncapitalize as re}from"./utils.js";import{isSupportedCallout as ie,getPointSymbolCalloutTransforms as ae,normalizePointSymbolCalloutScale as oe,normalizeLeaderLineStyle as Y,getPointSymbolCalloutFitProperties as se,normalizeBalloonCalloutStyle as ce}from"./callouts/calloutAnalysisUtils.js";import{EffectHelper as le}from"./effects/EffectHelper.js";import{rasterizedVectorMarkerMinSize as ue,randomInsidePolygonTextureSize as de}from"../../views/2d/engine/webgl/definitions.js";const X=()=>r.getLogger(`esri.symbols.cim.cimAnalyzer`);function fe(e){let t=e.markerPlacement;return t&&t.angleToLine?1:0}class pe{constructor(e){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[],this._hasTextStringTemplates=!1,e&&(this._resourceManager=e)}analyzeSymbolReference(t,n,r){if(this._cimLayers=r??[],!t)return this._cimLayers;if(this._reset(),this._hasTextStringTemplates=t.hasTextStringTemplates??!1,t.primitiveOverrides){this._primitiveOverrides=t.primitiveOverrides;for(let t of this._primitiveOverrides){let n=t.valueExpressionInfo;if(n)this._setPoMap(t.primitiveName,t.propertyName,n);else if(t.value!=null){let n=t.value;t.propertyName.includes(`Color`)&&(e(n)&&(n=N(n)),n=P(n)),this._setPoMap(t.primitiveName,t.propertyName,n)}}}return this._analyzeSymbol(t.symbol,n),this._cimLayers}_reset(){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[]}_analyzeSymbol(e,t){switch(e?.type){case`CIMPointSymbol`:case`CIMLineSymbol`:case`CIMPolygonSymbol`:this._analyzeMultiLayerSymbol(e,t)}}_analyzeMultiLayerSymbol(e,t){let n=e?.symbolLayers;if(!n)return;for(let e=0;e<n.length;e++){let t=n[e];t.type===`CIMVectorMarker`&&(n[e]=w(t))}let r=e.effects,i=0,a=F(e)??0;e.type===`CIMPointSymbol`&&e.angleAlignment===`Map`&&(i=1);let o={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],shift:[1,1,1,1],hasAnimations:l(e),hasShiftAnimation:!1,hasMotionAnimations:!1};o=u(o),o=d(this._poMap,e,o);let s=null;e.type===`CIMPointSymbol`&&(s=this._analyzePointSymbolHalo(e,i,a,r,o),this._analyzeCallout(e,null,[],o,a,i,t));let c=s?n.filter(e=>e!==s):n;if(Ce(c,r))return this._analyzeCompositeOutlineFill(c,r,a);this._analyzeSymbolLayer(s?{...e,symbolLayers:c}:e,null,[],o,a,i,t)}_analyzeSymbolLayer(e,t,n,r,i,a,o){let s=e?.symbolLayers;if(!s)return;let c=e.type===`CIMPolygonSymbol`,l=e.effects,u=s.length;for(;u--;){let d=s[u];if(!d||d.enable===!1)continue;let f;l?.length&&(f=[...l]);let p=d.effects;p?.length&&(l?f.push(...p):f=[...p]);let m=t?[...t]:null;if(f){m??=[];for(let e of f){let t=E.findEffectOverrides(e,this._primitiveOverrides);t&&m.push(t)}}E.findApplicableOverrides(d,this._primitiveOverrides,[]);let h=this._cimLayers.length;switch(d.type){case`CIMSolidFill`:this._analyzeSolidFill(d,m,r,L(s));break;case`CIMPictureFill`:this._analyzePictureFill(d,m,r);break;case`CIMHatchFill`:this._analyzeHatchFill(d,m,r);break;case`CIMGradientFill`:this._analyzeGradientFill(d,m);break;case`CIMSolidStroke`:this._analyzeSolidStroke(d,m,c,i,r);break;case`CIMPictureStroke`:this._analyzePictureStroke(d,m,c,i,r);break;case`CIMGradientStroke`:this._analyzeGradientStroke(d,m,c,i);break;case`CIMCharacterMarker`:case`CIMPictureMarker`:case`CIMVectorMarker`:{(e.type===`CIMLineSymbol`||e.type===`CIMPolygonSymbol`)&&(a=fe(d));let t=[],s=d.primitiveName;s&&t.push(s);let l=c&&I(d.markerPlacement);this._analyzeMarker(d,m,null,t,a,i,o,n,r,!1,l);break}default:X().error(`Cannot analyze CIM layer`,d.type)}if(m?.some(({effect:e})=>Z(e)))for(let e=h;e<this._cimLayers.length;e++)this._cimLayers[e].effectsChangeGeometryType=!0}}_analyzePointSymbolHalo(e,t,r,i,o){let{haloSymbol:s}=e,c=R(e.haloSize,0);if(c<=0||!s?.symbolLayers)return null;let u=s.symbolLayers.filter(e=>e.enable!==!1),f=u[0];if(!f)return null;let p=u.length===1&&f.type===`CIMSolidFill`;if(e.symbolLayers?.some(e=>l(e))===!0||l(s))return X().warnOnce(`CIM point symbol halos do not support independently animated symbol components`),null;let m=i?.map(e=>E.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>e!=null);if(m?.some(({effect:e})=>Z(e))){if(!p)return X().warnOnce(`Complex CIM point symbol halos are not supported with geometry-changing effects`),null;let t=e.symbolLayers?.filter(e=>e.enable!==!1)??[];if(!xe(t,m))return X().warnOnce(`CIM point symbol halos with geometry-changing effects currently require polygon-producing effects and an unambiguous solid-fill effect chain`),null;let n=t.find(e=>e.type===`CIMSolidFill`);if(!n)return null;let i=[...m,...(n.effects??[]).map(e=>E.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>e!=null)],a=z(t),o=this._getValueOrOverrideExpression(f.type,f.primitiveName,`Color`,P(f.color));return this._cimLayers.push({type:`outlineFill`,name:n.name,colorLocked:!!n.colorLocked,color:this._getValueOrOverrideExpression(n.type,n.primitiveName,`Color`,P(n.color)),effects:i,effectsChangeGeometryType:!0,outlineColorLocked:!0,outlineColor:o,outlineWidth:c+a,cap:`Round`,join:`Round`,referenceWidth:r,pixelBufferSize:c+a,outlineEffects:i}),n}let h=e.symbolLayers?.filter(e=>e.enable!==!1)??[],g=h.length===1&&h[0].type===`CIMVectorMarker`?h[0]:null,_=n(e);if(_.effects=void 0,_.angle=0,_.scaleX=1,g){let e=_.symbolLayers?.find(e=>e.type===`CIMVectorMarker`&&e.enable!==!1);e&&(e.rotation=0,e.offsetX=0,e.offsetY=0)}let v={..._,haloSize:0,haloSymbol:void 0},x=y.getPointSymbolHaloPadding(e,this._resourceManager),[S,C,w]=b.getTextureAnchor(v,this._resourceManager,ue,x),T=a(w),D=[];E.findApplicableOverrides(_,this._primitiveOverrides,D);let k=g?D.filter(e=>e.primitiveName!==g.primitiveName||![`Rotation`,`OffsetX`,`OffsetY`].includes(e.propertyName)):D,A=g?[{offsetX:this._getValueOrOverrideExpression(g.type,g.primitiveName,`OffsetX`,R(g.offsetX)),offsetY:this._getValueOrOverrideExpression(g.type,g.primitiveName,`OffsetY`,R(g.offsetY)),rotation:this._getValueOrOverrideExpression(g.type,g.primitiveName,`Rotation`,R(g.rotation)),size:T,frameHeight:T,rotateClockWise:!!g.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:!1}]:[],j=$(p?d(this._poMap,f,o):o),M,N;if(j){let e=b.getEnvelope(v,null,this._resourceManager);e&&(M=[e.width,e.height],N=[e.width+2*x,e.height+2*x])}return this._cimLayers.push({type:`marker`,spriteRasterizationParam:{type:`sprite-rasterization-param`,resource:{type:`cim-point-symbol-halo`,symbol:_,sdf:!j&&p&&O(v)!=null},overrides:k},colorLocked:!0,color:p?this._getValueOrOverrideExpression(f.type,f.primitiveName,`Color`,P(f.color)):[255,255,255,1],effects:m??null,effectsChangeGeometryType:m?.some(({effect:e})=>Z(e)),scaleSymbolsProportionally:!1,alignment:t,anchorPoint:{x:S,y:C},isAbsoluteAnchorPoint:!1,size:T,scaleX:R(e.scaleX,1),rotation:g?0:R(e.angle,0),offsetX:0,offsetY:0,outlineColor:[0,0,0,0],outlineWidth:0,transform:{type:`cim-marker-transform-param`,params:A},frameHeight:T,widthRatio:1,rotateClockwise:!1,referenceSize:r||T,sizeRatio:1,markerPlacement:null,isOutline:!1,animationParams:j,baseSize:r||T,pixelDimensions:M,texelDimensions:N}),null}_analyzeSolidFill(e,t,n,r){let{primitiveName:i,type:a}=e,o=P(e.color),s=d(this._poMap,e,n);if(!r&&t?.some(e=>e.effect.type===`CIMGeometricEffectTaperedPolygon`)){let n=this._getValueOrOverrideExpression(a,i,`Color`,o);this._cimLayers.push({type:`outlineFill`,name:e.name,colorLocked:!!e.colorLocked,color:n,effects:t,outlineColor:n,outlineColorLocked:!!e.colorLocked,...S,outlineEffects:t})}else this._cimLayers.push({type:`fill`,name:e.name,spriteRasterizationParam:null,colorLocked:!!e.colorLocked,color:this._getValueOrOverrideExpression(a,i,`Color`,o),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t,applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!1,animationParams:$(s)})}_analyzePictureFill(e,t,n){let{primitiveName:r,type:i}=e,a=B(e),o=R(e.height,C.CIMPictureFill.height),s=R(e.scaleX,1);if(`width`in e&&typeof e.width==`number`){let t=e.width,n=1,r=this._resourceManager.getResource(e.url);r!=null&&(n=r.width/r.height),s/=o/t*n}let c={type:`sprite-rasterization-param`,resource:e,overrides:this._getPrimitiveMaterialOverrides(r,i)},l=d(this._poMap,e,n);this._cimLayers.push({type:`fill`,name:e.name,spriteRasterizationParam:c,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(i,r,`TintColor`,a),height:this._getValueOrOverrideExpression(i,r,`Height`,o),scaleX:this._getValueOrOverrideExpression(i,r,`ScaleX`,s),angle:this._getValueOrOverrideExpression(i,r,`Rotation`,R(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,r,`OffsetX`,R(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,r,`OffsetY`,R(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1,animationParams:$(l)})}_analyzeHatchFill(e,t,n){let{primitiveName:r,type:i}=e,a=d(this._poMap,e,n),o=this._analyzeMaterialOverrides(r,[`Rotation`,`OffsetX`,`OffsetY`]),s=V(o),c=[255,255,255,1],l=!1;if(e.lineSymbol?.symbolLayers)for(let t of e.lineSymbol.symbolLayers){if(t.type!==`CIMSolidStroke`)continue;let e=t.primitiveName??r;l||!e||t.colorLocked||this._poMap[e]?.Color==null&&this._poMap[e]?.StrokeColor==null||(c=P(t.color),c=this._maybeGetValueOrOverrideExpression(e,`StrokeColor`)??this._getValueOrOverrideExpression(i,e,`Color`,c),l=!0);let n=this._maybeGetValueOrOverrideExpression(e,`StrokeWidth`);if(n){let t=null,r=null;typeof n==`number`?t=n:r=n.valueExpressionInfo;let a=s.find(e=>e.propertyName===`strokeWidth`);a?a.propertyName=`width`:(a={type:`CIMPrimitiveOverride`,primitiveName:e,propertyName:`width`,valueExpressionInfo:r,value:t,defaultValue:H(i,`width`)},s.push(a))}}let u={type:`sprite-rasterization-param`,resource:e,overrides:s};this._cimLayers.push({type:`fill`,name:e.name,spriteRasterizationParam:u,colorLocked:!!e.colorLocked,effects:t,color:c,height:this._getValueOrOverrideExpression(i,r,`Separation`,R(e.separation,C.CIMHatchFill.separation)),scaleX:1,angle:this._getValueOrOverrideExpression(i,r,`Rotation`,R(e.rotation)),offsetX:this._getValueOrOverrideExpression(i,r,`OffsetX`,R(e.offsetX)),offsetY:this._getValueOrOverrideExpression(i,r,`OffsetY`,R(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!l,animationParams:$(a)})}_analyzeGradientFill(e,t){let{angle:n,gradientMethod:r,gradientSize:i,gradientSizeUnits:a,gradientType:o,interval:s,primitiveName:c,type:l}=e,u=C.CIMGradientFill,d=e.colorRamp;this._cimLayers.push({type:`gradientFill`,name:e.name,spriteRasterizationParam:{type:`sprite-rasterization-param`,resource:e,overrides:this._getPrimitiveMaterialOverrides(c,l)},colorLocked:!1,effects:t,color:[255,255,255,1],gradientMethod:this._getValueOrOverrideExpression(l,c,`GradientMethod`,r??`Linear`),angle:this._getValueOrOverrideExpression(l,c,`Angle`,R(n,u.angle)),gradientType:this._getValueOrOverrideExpression(l,c,`GradientType`,o??u.gradientType),interval:this._getValueOrOverrideExpression(l,c,`Interval`,R(s,d.type===`CIMFixedColorRamp`?d.colors.length:u.interval)),gradientSize:this._getValueOrOverrideExpression(l,c,`GradientSize`,R(i,u.gradientSize)),gradientSizeUnits:a===`Absolute`?M.Absolute:a===`Relative`?M.Relative:u.gradientSizeUnits})}_analyzeCompositeOutlineFill(e,t,n,r=[]){let i=e.find(e=>e.type===`CIMSolidFill`),a=e.find(e=>e.type===`CIMSolidStroke`);if(i==null||a==null)return;let o=[...r,...[...t??[],...i.effects??[]].map(e=>E.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>e!=null)],s=[...r,...[...t??[],...a.effects??[]].map(e=>E.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>e!=null)],c=R(a.width,C.CIMSolidStroke.width),l=U(a.capStyle,C.CIMSolidStroke.capstyle),u=U(a.joinStyle,C.CIMSolidStroke.joinstyle),d=a.miterLimit;this._cimLayers.push({type:`outlineFill`,name:i.name,colorLocked:!!i.colorLocked,color:this._getValueOrOverrideExpression(i.type,i.primitiveName,`Color`,P(i.color)),effects:o,effectsChangeGeometryType:o.some(({effect:e})=>Z(e))||s.some(({effect:e})=>Z(e)),outlineColorLocked:!!a.colorLocked,outlineColor:this._getValueOrOverrideExpression(a.type,a.primitiveName,`Color`,P(a.color)),outlineWidth:this._getValueOrOverrideExpression(a.type,a.primitiveName,`Width`,c),cap:this._getValueOrOverrideExpression(a.type,a.primitiveName,`CapStyle`,l),join:this._getValueOrOverrideExpression(a.type,a.primitiveName,`JoinStyle`,u),miterLimit:d&&this._getValueOrOverrideExpression(a.type,a.primitiveName,`MiterLimit`,d),referenceWidth:n,outlineEffects:s})}_analyzeSolidStroke(e,t,n,r,i){let{primitiveName:a,type:o}=e,s=P(e.color),c=R(e.width,C.CIMSolidStroke.width),l=U(e.capStyle,C.CIMSolidStroke.capstyle),u=U(e.joinStyle,C.CIMSolidStroke.joinstyle),f=e.miterLimit,p=this._analyzePrimitiveOverrides(a,t,null,null),m=[];p&&(m=this._getPrimitiveMaterialOverrides(a,o));let h,g,_,v;if(t&&Array.isArray(t)&&t.length>0){let e=t[t.length-1].effect;e&&e.type===`CIMGeometricEffectDashes`&&e.lineDashEnding===`NoConstraint`&&(h=e.dashTemplate,g=e.scaleDash,_=e.offsetAlongLine,v=e.primitiveName,t=[...t],t.pop())}v!=null&&m.push(...this._getPrimitiveMaterialOverrides(v,o).filter(e=>e.propertyName===`dashTemplate`));let y=h===void 0?null:{type:`sprite-rasterization-param`,resource:{type:`dash`,dashTemplate:h,primitiveName:v},overrides:m},b=d(this._poMap,e,i);this._cimLayers.push({type:`line`,name:e.name,spriteRasterizationParam:y,isOutline:n,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(o,a,`Color`,s),width:this._getValueOrOverrideExpression(o,a,`Width`,c),cap:this._getValueOrOverrideExpression(o,a,`CapStyle`,l),join:this._getValueOrOverrideExpression(o,a,`JoinStyle`,u),miterLimit:f&&this._getValueOrOverrideExpression(o,a,`MiterLimit`,f),referenceWidth:r,zOrder:he(e.name),dashTemplate:this._maybeGetValueOrOverrideExpression(v,`DashTemplate`)??h,offsetAlongLine:this._getValueOrOverrideExpression(o,v,`OffsetAlongLine`,_??0),scaleDash:g,sampleAlphaOnly:!0,animationParams:$(b)})}_analyzePictureStroke(e,t,n,r,i){let{primitiveName:a,type:o}=e,s=B(e),c=R(e.width,C.CIMPictureStroke.width),l=U(e.capStyle,C.CIMPictureStroke.capstyle),u=U(e.joinStyle,C.CIMPictureStroke.joinstyle),f=e.miterLimit,p={type:`sprite-rasterization-param`,resource:e,overrides:this._getPrimitiveMaterialOverrides(a,o)},m=d(this._poMap,e,i);this._cimLayers.push({type:`line`,name:e.name,spriteRasterizationParam:p,isOutline:n,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(o,a,`TintColor`,s),width:this._getValueOrOverrideExpression(o,a,`Width`,c),cap:this._getValueOrOverrideExpression(o,a,`CapStyle`,l),join:this._getValueOrOverrideExpression(o,a,`JoinStyle`,u),miterLimit:f&&this._getValueOrOverrideExpression(o,a,`MiterLimit`,f),referenceWidth:r,zOrder:he(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1,animationParams:$(m)})}_analyzeGradientStroke(e,t,n,r){let{gradientMethod:i,gradientSize:a,gradientSizeUnits:o,gradientType:s,interval:c,primitiveName:l,type:u}=e,d=C.CIMGradientStroke,f=R(e.width,d.width),p=U(e.capStyle,d.capstyle),m=U(e.joinStyle,d.joinstyle),h=e.miterLimit,g=e.colorRamp;this._cimLayers.push({type:`gradientStroke`,name:e.name,spriteRasterizationParam:{type:`sprite-rasterization-param`,resource:e,overrides:this._getPrimitiveMaterialOverrides(l,u)},colorLocked:!!e.colorLocked,effects:t,color:[255,255,255,1],width:this._getValueOrOverrideExpression(u,l,`Width`,f),cap:this._getValueOrOverrideExpression(u,l,`CapStyle`,p),join:this._getValueOrOverrideExpression(u,l,`JoinStyle`,m),miterLimit:h&&this._getValueOrOverrideExpression(u,l,`MiterLimit`,h),referenceWidth:r,isOutline:n,gradientMethod:this._getValueOrOverrideExpression(u,l,`GradientMethod`,i??d.gradientMethod),gradientType:this._getValueOrOverrideExpression(u,l,`GradientType`,s??d.gradientType),interval:this._getValueOrOverrideExpression(u,l,`Interval`,R(c,g.type===`CIMFixedColorRamp`?g.colors.length:d.interval)),gradientSize:this._getValueOrOverrideExpression(u,l,`GradientSize`,R(a,d.gradientSize)),gradientSizeUnits:o===`Absolute`?M.Absolute:o===`Relative`?M.Relative:d.gradientSizeUnits})}_analyzeMarker(e,t,n,r,i,a,o,s,c,l=!1,u=!1){l||=!!e.colorLocked;let h=c;if(h=f(e,h),h=p(this._poMap,e,h),h=m(e,h),h=d(this._poMap,e,h),this._analyzeMarkerInsidePolygon(e,t,l,h))return;let g=R(e.size,C.CIMVectorMarker.size),_=R(e.rotation),v=R(e.offsetX),y=R(e.offsetY),{primitiveName:b,type:x}=e,S=this._getValueOrOverrideExpression(x,b,`Size`,g),w=this._getValueOrOverrideExpression(x,b,`Rotation`,_),T=this._getValueOrOverrideExpression(x,b,`OffsetX`,v),E=this._getValueOrOverrideExpression(x,b,`OffsetY`,y),D=this._cimLayers.length;switch(e.type){case`CIMPictureMarker`:this._analyzePictureMarker(e,t,n,r,i,a,S,w,T,E,s,h,l,u);break;case`CIMVectorMarker`:this._analyzeVectorMarker(e,t,n,r,i,a,S,w,T,E,s,h,o,l,u)}if(e.name)for(let t=D;t<this._cimLayers.length;t++){let n=this._cimLayers[t];n.name??=e.name;let r=n.groupNames??=[];r[r.length-1]!==e.name&&r.push(e.name)}}_analyzeMarkerInsidePolygon(e,t,n,r){let{markerPlacement:i,type:o}=e;if(!i||i.type!==`CIMMarkerPlacementInsidePolygon`||r.hasMotionAnimations)return!1;if(o===`CIMVectorMarker`||o===`CIMPictureMarker`){let n=e.primitiveName;if(n&&this._analyzePrimitiveOverrides([n],t,null,null))return!1;let r=i.primitiveName;if(r&&this._analyzePrimitiveOverrides([r],t,null,null))return!1;if(o===`CIMVectorMarker`){let{markerGraphics:t}=e;if(t)for(let e of t){let{symbol:t}=e;if(t?.type===`CIMPolygonSymbol`&&t.symbolLayers){let{symbolLayers:e}=t;for(let t of e)if(t.type===`CIMSolidStroke`)return!1}}}else{let{animatedSymbolProperties:t}=e;if(t)return!1}}let s=Math.abs(i.stepX),c=Math.abs(i.stepY);if(s===0||c===0)return!0;let l,u;if(i.gridType===`Random`){let e=a(de),t=Math.max(Math.floor(e/s),1);l=c*Math.max(Math.floor(e/c),1),u=t*s/l}else i.shiftOddRows?(l=c*2,u=s/c*.5):(l=c,u=s/c);let d=B(e),f=e.type===`CIMCharacterMarker`?null:{type:`sprite-rasterization-param`,resource:{...e,effects:e.effects?.filter(e=>!ye(e))},overrides:[]};return this._cimLayers.push({type:`fill`,name:e.name,spriteRasterizationParam:f,colorLocked:n,effects:t,color:d,height:l,scaleX:u,angle:i.gridAngle??0,offsetX:R(i.offsetX),offsetY:R(i.offsetY),applyRandomOffset:i.gridType===`Random`,sampleAlphaOnly:e.type!==`CIMPictureMarker`,hasUnresolvedReplacementColor:!0,animationParams:$(r)}),!0}_analyzePictureMarker(e,t,r,i,a,s,c,l,u,d,f,p,m,h){let{animatedSymbolProperties:g,primitiveName:_,type:v}=e,y=R(e.scaleX,1),b=B(e);r||=this._createMarkerPlacementOverrideExpression(e.markerPlacement);let x=this._createGIFAnimatedSymbolPropertiesOverrideExpression(g),S=e.anchorPoint??{x:0,y:0};if(`width`in e&&typeof e.width==`number`){let t=e.width,n=1,r=this._resourceManager.getResource(e.url);r!=null&&(n=r.width/r.height);let i=R(e.size);y/=i/t*n}let C=[...i];e.primitiveName&&C.push(e.primitiveName);let w;g||x?w={type:`animated`,url:e.url,urlHash:`H`+o(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}:(w=n(e),w.markerPlacement=null);let T={type:`sprite-rasterization-param`,resource:w,overrides:this._getMaterialOverrides(C,v)};x&&T.overrides.push(...x.overrides);let E=c;this._cimLayers.push({type:`marker`,name:e.name,spriteRasterizationParam:T,colorLocked:m,effects:t,scaleSymbolsProportionally:!1,alignment:a,size:c,scaleX:this._getValueOrOverrideExpression(v,_,`ScaleX`,y),rotation:l,offsetX:u,offsetY:d,transform:{type:`cim-marker-transform-param`,params:f},color:this._getValueOrOverrideExpression(v,_,`TintColor`,b),anchorPoint:{x:S.x,y:S.y},isAbsoluteAnchorPoint:e.anchorPointUnits!==`Relative`,outlineColor:[0,0,0,0],outlineWidth:0,frameHeight:0,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:s,sizeRatio:1,isOutline:h,markerPlacement:r,animationParams:$(p),baseSize:E})}_analyzeVectorMarker(e,t,n,r,i,a,o,l,u,d,f,p,m,v,y){let b=e.markerGraphics;if(!b)return;let x=e.frame,S=0;S=x?x.ymax-x.ymin:a;let C=!!e.scaleSymbolsProportionally;if(S){let t={offsetX:u,offsetY:d,rotation:l,size:o,frameHeight:S,rotateClockWise:!!e.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:C};f=[...f,t]}n||=this._createMarkerPlacementOverrideExpression(e.markerPlacement);for(let o of b)if(o){let l=o.symbol;if(!l)continue;let u=o.primitiveName;u&&r.push(u);let d=p,b;if((l.type===`CIMPointSymbol`||l.type===`CIMTextSymbol`)&&x){let t=0,n=0,r=o.geometry;`x`in r&&`y`in r&&(t+=r.x-(x.xmin+x.xmax)*.5,n+=r.y-(x.ymin+x.ymax)*.5);let i=e.anchorPoint,a=!1;i&&(e.anchorPointUnits===`Absolute`?(t-=i.x,n-=i.y,a=!0):x&&(t-=(x.xmax-x.xmin)*i.x,n-=(x.ymax-x.ymin)*i.y));let s={offsetX:t,offsetY:n,rotation:0,size:0,frameHeight:0,rotateClockWise:!1,absoluteAnchorPoint:a,scaleSymbolsProportionally:C};b=[...f,s]}(l.type===`CIMPointSymbol`||l.type===`CIMTextSymbol`)&&this._analyzeCallout(l,t,b??f,d,a,i,m);let w=s(o.geometry)?{...o,geometry:c(o.geometry,{maxDeviation:.01})}:o,T=w.geometry,[E,D]=h(T,x);switch((E!==0||D!==0)&&(d=g(d,E,D)),l.type){case`CIMPointSymbol`:case`CIMLineSymbol`:case`CIMPolygonSymbol`:m||ve(l)?(d={...d,transform:{type:`AnimatedTransform`,relativeTranslation:!1,absoluteScale:!0,selectGlobalRotation:!1,translation:_([0,0]),rotation:_(0),scale:_(S),parent:p.transform}},this._analyzeMultiLayerGraphicNonSDF(e,t,n,w,r,i,a,b??f,d,S,v,y)):this._analyzeMultiLayerGraphic(e,t,n,w,r,i,a,b??f,d,S,v,y);break;case`CIMTextSymbol`:this._analyzeTextGraphic(t,n,w,r,i,a,b??f,v)}u&&r.pop()}}_analyzeCallout(e,t,n,r,i,a,o){let s=e.callout;if(!s||!ie(s))return;let c=t??[],{leaderTolerance:l,leaderOffset:u}=s;switch(s.type){case`CIMSimpleLineCallout`:{let{lineSymbol:e,autoSnap:t}=s,d={type:`CIMSimpleLineCallout`,leaderTolerance:l,leaderOffset:u,autoSnap:t,inflateSize:500};this._analyzeSymbolLayer(e,[...c,{type:`cim-effect-param`,effect:d,overrides:[]}],n,r,i,a,o);break}case`CIMBackgroundCallout`:{let{accentBarSymbol:e,gap:t,backgroundSymbol:d,leaderLineSymbol:f,lineStyle:p,margin:m}=s,h=n=>({type:`CIMBackgroundCallout`,leaderTolerance:l,leaderOffset:u,lineStyle:Y(p),gap:t,hasAccentBar:!!e,margin:m,inflateSize:500,part:n}),g=[...c,{type:`cim-effect-param`,effect:h(`background`),overrides:[]}];if(f&&this._analyzeSymbolLayer(f,[...c,{type:`cim-effect-param`,effect:h(`leader`),overrides:[]}],n,r,i,a,o),d){let e=d.symbolLayers??[];Q(e)?this._analyzeCompositeOutlineFill(e,null,i,g):this._analyzeSymbolLayer(d,g,n,r,i,a,o)}e&&this._analyzeSymbolLayer(e,[...c,{type:`cim-effect-param`,effect:h(`accent-bar`),overrides:[]}],n,r,i,a,o);break}case`CIMBalloonCallout`:{let{balloonStyle:e,backgroundSymbol:t,dartSymbol:d,fixedDartWidth:f,margin:p,useDartSymbol:m,useFixedDartWidth:h}=s,g=m===!0&&d!=null,_=t=>({type:`CIMBalloonCallout`,leaderTolerance:l,leaderOffset:u,margin:p,balloonStyle:ce(e),dartWidth:h?f:void 0,inflateSize:500,part:t,separateDart:g}),v=(e,t)=>{let s=[...c,{type:`cim-effect-param`,effect:_(t),overrides:[]}],l=e.symbolLayers??[];Q(l)?this._analyzeCompositeOutlineFill(l,null,i,s):this._analyzeSymbolLayer(e,s,n,r,i,a,o)};g&&v(d,`dart`),v(t,`background`);break}case`CIMPointSymbolCallout`:{let{backgroundScale:e,gap:t,leaderLineSymbol:d,lineStyle:f,pointSymbol:p}=s,m=oe(e),h=ae(p,n),g=e=>({type:`CIMPointSymbolCallout`,leaderTolerance:l,leaderOffset:u,backgroundScale:m,...se(p,e),lineStyle:Y(f),gap:t,inflateSize:500,part:e});d&&this._analyzeSymbolLayer(d,[...c,{type:`cim-effect-param`,effect:g(`leader`),overrides:[]}],n,r,i,a,o),this._analyzeSymbolLayer(p,[...c,{type:`cim-effect-param`,effect:g(`marker`),overrides:[]}],h,r,i,a,o||m!==0);break}case`CIMCompositeCallout`:{let{backgroundSymbol:e,margin:t,shadowSymbol:d}=s,f={type:`CIMBalloonCallout`,leaderTolerance:l,leaderOffset:u,margin:t,balloonStyle:1,inflateSize:500,part:`background`},p=[...c,{type:`cim-effect-param`,effect:f,overrides:[]}],m=e=>{let t=e.symbolLayers??[];Q(t)?this._analyzeCompositeOutlineFill(t,null,i,p):this._analyzeSymbolLayer(e,p,n,r,i,a,o)};d&&m(d),m(e);break}}}_analyzeMultiLayerGraphic(e,t,n,r,i,a,o,s,c,l,u,d){let f=r.symbol,p=f.symbolLayers;p&&(_e(p)&&!v(c)?this._analyzeCompositeMarkerGraphic(e,t,n,r,p,a,o,s,l,u,d):Se(p)?(x(f,e=>{e.colorLocked&&(u=!0)}),this._analyzeMultiLayerGraphicNonSDF(e,t,n,r,i,a,o,s,c,l,u,d)):this._analyzeMarkerGraphicSymbolLayers(e,t,n,r,i,a,o,s,c,l,u,d))}_analyzeMarkerGraphicSymbolLayers(e,t,n,r,i,a,o,s,c,l,u,f){let p=r.symbol,m=p.symbolLayers;if(!m)return;let h=le.applyEffects(p.effects,r.geometry);if(!h)return;let g=m.length;for(;g--;){let p=m[g];if(!p||p.enable===!1)continue;let _=p.primitiveName;switch(_&&i.push(_),p.type){case`CIMSolidFill`:case`CIMSolidStroke`:{let i=le.applyEffects(p.effects,h),m=k(i);if(!m)continue;let g=e.anchorPointUnits!==`Relative`,v=p.type===`CIMSolidStroke`?p.width:0,{frameSizeRatio:y,anchorX:b,anchorY:x,widthRatio:S,sdfPaddingRatio:w,sdfTextureSize:T}=A(m,e.frame,e.size,e.anchorPoint,g,v,e.scaleSymbolsProportionally),E=p.type===`CIMSolidFill`,D={type:`sdf`,geometry:i,sdfPaddingRatio:w,asFill:E,sdfTextureSize:T},{path:O}=p,M=E?P(W(p)):O==null?P(G(p)):[0,0,0,0],N=E?[0,0,0,0]:P(G(p));if(!E&&!v)break;let F=r.primitiveName,I=null;E&&!p.colorLocked&&(I=this._maybeGetValueOrOverrideExpression(F,`FillColor`));let L=null;!E&&!p.colorLocked&&(L=this._maybeGetValueOrOverrideExpression(F,`StrokeColor`));let z=I??this._getValueOrOverrideExpression(p.type,_,`Color`,M),B=L??this._getValueOrOverrideExpression(p.type,_,`Color`,N),V=this._maybeGetValueOrOverrideExpression(F,`StrokeWidth`)??this._getValueOrOverrideExpression(p.type,_,`Width`,v),H=O?{type:`sprite-rasterization-param`,resource:{type:`path`,path:O,asFill:E},overrides:[]}:{type:`sprite-rasterization-param`,resource:D,overrides:[]},U=d(this._poMap,p,c),K=R(e.size,C.CIMVectorMarker.size),q=this._getValueOrOverrideExpression(e.type,e.primitiveName,`Size`,K);this._cimLayers.push({type:`marker`,name:p.name,groupNames:e.name?[e.name]:void 0,spriteRasterizationParam:H,colorLocked:!!p.colorLocked||!!u,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:b,y:x},isAbsoluteAnchorPoint:g,size:l,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:`cim-marker-transform-param`,params:s},frameHeight:l,widthRatio:S,rotateClockwise:!1,referenceSize:o,sizeRatio:y,color:z,outlineColor:B,outlineWidth:V,isOutline:f,markerPlacement:n,animationParams:$(U),isStroke:p.type!==`CIMSolidFill`,baseSize:q,...j(i,T,w)});break}case`CIMPictureMarker`:case`CIMVectorMarker`:if(p.markerPlacement){X().error(`Error analyzing CIM, got unexpected marker placement`);break}this._analyzeMarker(p,t,n,i,a,o,!1,s,c,u,f)}_&&i.pop()}}_analyzeTextGraphic(e,n,r,i,a,o,s,c){E.findApplicableOverrides(r,this._primitiveOverrides,[]);let l=r.geometry;if(!(`x`in l)||!(`y`in l))return;let u=r.symbol,d=K(u),f=T(u.fontStyleName),p=t(u.fontFamilyName);u.font={family:p,decoration:d,...f};let m=R(u.height,C.CIMTextSymbol.height),h=R(u.angle),g=R(u.offsetX),_=R(u.offsetY),{haloSymbol:v}=u,y=R(u.haloSize,0),b=[0,0,0,0];if(v?.symbolLayers?.length){let e=v.symbolLayers;for(let t of e)if(t.color){b=this._getValueOrOverrideExpression(u?.haloSymbol?.type??`CIMPolygonSymbol`,t.primitiveName,`Color`,P(t.color));break}}let x=r.primitiveName,S=[0,0,0,1],w=[0,0,0,0],O=0,k=!1;if(u.symbol?.symbolLayers)for(let e of u.symbol.symbolLayers){let t=e.primitiveName;if(e.type===`CIMSolidStroke`)w=this._getValueOrOverrideExpression(`CIMSolidStroke`,t,`Color`,P(e.color)),O=this._getValueOrOverrideExpression(`CIMSolidStroke`,t,`Width`,q(e)??0);else if(e.type===`CIMSolidFill`){let n=P(e.color);k??=!!e.colorLocked,S=this._getValueOrOverrideExpression(`CIMSolidFill`,t??x,`Color`,n)}}let A=null,j=null,M=null,N=null,F=null;x&&(A=this._maybeGetValueOrOverrideExpression(x,`TextSize`),j=this._maybeGetValueOrOverrideExpression(x,`TextAngle`),M=this._maybeGetValueOrOverrideExpression(x,`TextOffsetX`),N=this._maybeGetValueOrOverrideExpression(x,`TextOffsetY`),k||(F=this._maybeGetValueOrOverrideExpression(x,`FillColor`)));let I=F??S,L=null,z=null,B=0,V=u.callout?.type===`CIMBackgroundCallout`;if(u.callout?.type===`CIMBackgroundCallout`){let e=u.callout;if(e.backgroundSymbol){let t=e.backgroundSymbol.symbolLayers;if(t)for(let e of t)e.type===`CIMSolidFill`?L=P(e.color):e.type===`CIMSolidStroke`&&(z=P(e.color),B=R(e.width,C.CIMSolidStroke.width))}}let H=this._getValueOrOverrideExpression(u.type,r.primitiveName,`TextString`,r.textString??``);if(H==null)return;let{fontStyleName:U}=u,W=p+(U?`-`+U.toLowerCase():`-regular`),G=this._getMaterialOverrides(i,u.type);G.push(...this._getPrimitiveMaterialOverrides(r.primitiveName,u.type)),this._collectDictionaryTemplateOverrides(G,r);let J={type:`text-rasterization-param`,resource:{type:`text`,textString:r.textString??``,font:u.font,symbol:u,primitiveName:r.primitiveName,supportsRichText:D(r.textString??``)||G.some(e=>e.propertyName===`textString`)},overrides:G};this._cimLayers.push({type:`text`,lineWidth:u.lineWidth,textRasterizationParam:J,colorLocked:!!c||!!k,effects:e,alignment:a,anchorPoint:{x:0,y:0},isAbsoluteAnchorPoint:!1,fontName:W,decoration:d,haloSize:y,haloColor:b,weight:f.weight,style:f.style,size:A??m,angle:j??h,offsetX:M??g,offsetY:N??_,transform:{type:`cim-marker-transform-param`,params:s},horizontalAlignment:te(u.horizontalAlignment),verticalAlignment:ee(u.verticalAlignment),text:H,color:I,outlineColor:w,outlineSize:O,backgroundColor:L,borderLineColor:z,borderLineWidth:B,useBackgroundCallout:V,referenceSize:o,sizeRatio:1,markerPlacement:n})}_collectDictionaryTemplateOverrides(e,t){if(t.textString&&this._hasTextStringTemplates){let n=J(t.symbol);e.push({propertyName:`textString`,defaultValue:``,valueExpressionInfo:{type:`dictionary-template`,textCase:n,template:t.textString},primitiveName:t.primitiveName})}}_analyzeMultiLayerGraphicNonSDF(e,t,n,r,a,o,s,c,l,u,d,f){let p=me(e,r),m=e.primitiveName,h=this._analyzeMaterialOverrides(m,[`Rotation`,`OffsetX`,`OffsetY`]),g=V(h),[_,v,y]=b.getTextureAnchor(p,this._resourceManager,ue),x=this._getMaterialOverrides(a,e.type).filter(e=>e.primitiveName!==m||![`rotation`,`offsetX`,`offsetY`].includes(e.propertyName));x.push(...g);let S={type:`sprite-rasterization-param`,resource:{...p,avoidSDFRasterization:!0},overrides:x},w=R(e.size,C.CIMVectorMarker.size),T=this._getValueOrOverrideExpression(e.type,m,`Size`,w);this._cimLayers.push({type:`marker`,name:e.name,spriteRasterizationParam:S,colorLocked:d,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:o,anchorPoint:{x:_,y:v},isAbsoluteAnchorPoint:!1,size:u,rotation:0,offsetX:0,offsetY:0,transform:{type:`cim-marker-transform-param`,params:c},color:[255,255,255,1],outlineColor:[0,0,0,0],outlineWidth:0,scaleX:1,frameHeight:u,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:s,sizeRatio:y/i(e.size),isOutline:f,markerPlacement:n,animationParams:$(l),baseSize:T})}_createMarkerPlacementOverrideExpression(e){if(!e)return null;let t=[];return E.findApplicableOverrides(e,this._primitiveOverrides,t),{type:`cim-marker-placement-param`,placement:e,overrides:we(t)}}_createGIFAnimatedSymbolPropertiesOverrideExpression(e){if(!e)return null;let t=[];return E.findApplicableOverrides(e,this._primitiveOverrides,t),{type:`cim-gif-animation-params`,animation:e,overrides:we(t)}}_analyzeCompositeMarkerGraphic(e,t,n,r,i,a,o,s,c,l,u){let d=r.geometry,f=i[0],p=i[1],m=k(d);if(!m)return;let h=e.anchorPointUnits!==`Relative`,g=R(f.width,C.CIMSolidStroke.width),{frameSizeRatio:_,anchorX:v,anchorY:y,widthRatio:b,sdfPaddingRatio:x,sdfTextureSize:S}=A(m,e.frame,e.size,e.anchorPoint,h,g,e.scaleSymbolsProportionally),{path:w}=p,T=p.primitiveName,E=f.primitiveName,D=r.primitiveName,O=null;!p.colorLocked&&!l&&(O=this._maybeGetValueOrOverrideExpression(D,`FillColor`));let j=O??this._getValueOrOverrideExpression(p.type,T,`Color`,P(p.color)),M=null;!f.colorLocked&&!l&&(M=this._maybeGetValueOrOverrideExpression(D,`StrokeColor`));let N=M??this._getValueOrOverrideExpression(f.type,E,`Color`,P(f.color)),F=this._maybeGetValueOrOverrideExpression(D,`StrokeWidth`)??this._getValueOrOverrideExpression(f.type,E,`Width`,g),I={type:`sprite-rasterization-param`,resource:w?{type:`path`,path:w,asFill:!0}:{type:`sdf`,geometry:d,sdfTextureSize:S,sdfPaddingRatio:x,asFill:!0},overrides:[]};this._cimLayers.push({type:`marker`,name:e.name,spriteRasterizationParam:I,colorLocked:l,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:v,y},isAbsoluteAnchorPoint:h,size:c,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:`cim-marker-transform-param`,params:s},frameHeight:c,widthRatio:b,rotateClockwise:!1,referenceSize:o,sizeRatio:_,color:j,outlineColor:N,outlineWidth:F,isOutline:u,markerPlacement:n})}_setPoMap(e,t,n){let r;this._poMap[e]?r=this._poMap[e]:(r={},this._poMap[e]=r),r[t]=n}_maybeGetValueOrOverrideExpression(e,t,n){return this._getValueOrOverrideExpression(``,e,t,n,!1)}_getValueOrOverrideExpression(e,t,n,r,i=!0){if(i&&!ne(r)&&(r=H(e,n.toLowerCase())),t==null)return r;let a=this._poMap[t];if(a==null)return r;let o=a[n];return typeof o==`string`||typeof o==`number`||Array.isArray(o)?o:o?{valueExpressionInfo:o,defaultValue:r}:r}_analyzePrimitiveOverrides(e,t,n,r){if(e==null)return!1;typeof e==`string`&&(e=[e]);for(let t of this._primitiveOverrides)if(e.includes(t.primitiveName)&&t.valueExpressionInfo)return!0;if(t!=null){for(let e of t)if(e?.overrides.length>0)return!0}if(n!=null){for(let e of n)if(e?.overrides.length>0)return!0}if(r!=null){for(let e of r)if(e?.overrides.length>0)return!0}return!1}_getMaterialOverrides(e,t){if(!e)return[];let n=[];for(let r of e)n.push(...this._getPrimitiveMaterialOverrides(r,t));return n}_getPrimitiveMaterialOverrides(e,t){if(!e)return[];let n=V(this._primitiveOverrides.filter(t=>t.primitiveName===e));return n.forEach(e=>e.defaultValue=H(t,e.propertyName.toLowerCase())),n}_analyzeMaterialOverrides(e,t){return this._primitiveOverrides.filter(n=>n.primitiveName!==e||!t.includes(n.propertyName))}}function me(e,t){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:[{...t}],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function he(e){if(e?.startsWith(`Level_`)){let t=parseInt(e.slice(6),10);if(!isNaN(t))return t}return 0}function ge(e,t){if(!t||t.length===0)return e;let r=n(e);return E.applyOverrides(r,t),r}const _e=e=>e&&e.length===2&&e[0].enable&&e[1].enable&&e[0].type===`CIMSolidStroke`&&e[1].type===`CIMSolidFill`&&e[0].path==null&&e[1].path==null&&!e[0].effects&&!e[1].effects&&!e[0].animations&&!e[1].animations;function ve(e){let t=e.symbolLayers;if(!t)return!1;let n=t.find(e=>e.effects?.find(e=>e.type===`CIMGeometricEffectDashes`&&e.dashTemplate!=null)),r=t.find(e=>e.effects?.find(e=>e.type===`CIMGeometricEffectAddControlPoints`));return!!n||!!r}function ye(e){return Z(e)}function Z(e){return e.type===`CIMGeometricEffectCircularSector`||e.type===`CIMGeometricEffectRadial`||e.type===`CIMGeometricEffectTaperedPolygon`||e.type===`PrivateDimensionEffect`||e.type===`PrivateMatcherGeometryOverrideEffect`}function be(e){return e.type===`CIMGeometricEffectCircularSector`||e.type===`CIMGeometricEffectTaperedPolygon`}function xe(e,t){let n=e.filter(e=>e.type===`CIMSolidFill`),r=e.every(e=>e.type===`CIMSolidFill`||e.type===`CIMSolidStroke`),i=e.filter(e=>e.effects?.length),a=i.length===0||i.length===1&&n.length===1&&i[0]===n[0];return n.length>0&&r&&a&&t.some(({effect:e})=>be(e))}function Se(e){return e.some(e=>e.type!==`CIMSolidFill`&&e.type!==`CIMSolidStroke`&&(e.type!==`CIMVectorMarker`&&e.type!==`CIMPictureMarker`||e.markerPlacement!=null))}function Ce(e,t){return!!(t?.some(e=>e.type===`CIMGeometricEffectRadial`)&&t?.some(e=>e.type===`CIMGeometricEffectTaperedPolygon`)||t?.some(e=>e.type===`CIMGeometricEffectCircularSector`))&&Q(e)}function Q(e){if(e?.length!==2)return!1;let t=e.find(e=>e.type===`CIMSolidFill`),n=e.find(e=>e.type===`CIMSolidStroke`),r=n?.effects?.some(e=>e.type===`CIMGeometricEffectDashes`);return t!=null&&n!=null&&!r}function we(e){return n(e).map(e=>({...e,propertyName:re(e.propertyName)}))}function $(e){return v(e)?{type:`animation-params`,params:e}:null}export{pe as CIMAnalyzer,ge as analyzeCIMResource};
@@ -32,11 +32,12 @@ export interface ElevationInfoProperties<Modes extends ElevationInfoMode = Eleva
32
32
  *
33
33
  * > [!WARNING]
34
34
  * >
35
- * > If `elevationInfo` is not set, the elevation mode is picked on the fly for each feature:
36
- * > - Features with z-values default to `absolute-height`.
37
- * > - Features without z-values:
35
+ * > If `elevationInfo` is not set, the elevation mode is picked on the fly for each element:
36
+ * > - Elements with z-values default to `absolute-height`.
37
+ * > - Elements without z-values:
38
38
  * > - Polylines, polygons, and points drawn with `ObjectSymbol3DLayer` default to `on-the-ground`.
39
39
  * > - Points drawn with `IconSymbol3DLayer` default to `relative-to-ground`.
40
+ * > - Visibility analyses' observers and targets default to `on-the-ground`.
40
41
  * >
41
42
  * > Feature services do not persist `elevationInfo`, so elevation settings from publishing tools such as ArcGIS Pro are lost unless saved in a web scene.
42
43
  *
@@ -87,7 +87,7 @@ export default class TimeExtent extends JSONSupport {
87
87
  * @param unit - The time unit to align the start and end dates.
88
88
  * @param timeZone - The time zone in which progressing will occur. The default is "system".
89
89
  * @returns A new expanded TimeExtent.
90
- * @see [Sample - Time Slider component](https://developers.arcgis.com/javascript/latest/sample-code/timeslider/)
90
+ * @see [Sample - Time Bar component](https://developers.arcgis.com/javascript/latest/sample-code/time-bar/)
91
91
  * @example
92
92
  * // Expand a time extent to a decade.
93
93
  * const extent = new TimeExtent({
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../core/Collection.js";import n from"../../core/Error.js";import{EventedAccessor as r}from"../../core/Evented.js";import i from"../../core/Logger.js";import{getOrCreateMapValue as a}from"../../core/MapUtils.js";import{debounce as o,logOnError as s}from"../../core/promiseUtils.js";import c from"../../core/ReactiveMap.js";import{whenOnce as l,watch as u}from"../../core/reactiveUtils.js";import{property as d,subclass as f}from"../../core/accessorSupport/decorators.js";import{UpdatingHandles as p}from"../../core/support/UpdatingHandles.js";import{parse as m}from"../../layers/support/arcgisLayerUrl.js";import{isSubtypeGroupLayer as h,isFeatureLayer as g}from"../../layers/support/layerUtils.js";import _ from"../../rest/featureService/FeatureService.js";import{ServiceVersionInfo as v}from"./ServiceVersionInfo.js";function y(e){return!e||e.trim().length===0}const b=new Map;function x(e){return a(b,e,()=>{let t=new S({view:e});return e.addHandles({remove(){b.delete(e),t.destroy()}}),t})}let S=class extends r{constructor(e){super(e),this._updatingHandles=new p,this.items=new t,this.tablesAndLayersLookup=new c,this.additionalLayers=new t,this._debouncedCheckAndUpdateServiceInfos=o(async()=>{let e=[];for(let t of this.items)t.layersAndTables.length!==0&&t.layersAndTables.getItemAt(0)?.gdbVersion!==t.versionInfo?.versionIdentifier.name&&e.push(t);e.length!==0&&(await l(()=>!this.updating),await this._updateVersionInfos(e))}),this._processed=new Set}initialize(){this._syncServiceInfos(),this.addHandles([u(()=>this.view.map,()=>{this._reset()}),u(()=>this._allLayersAndTables,()=>this._syncServiceInfos()),u(()=>this.items.map(e=>e.layersAndTables.map(e=>e.gdbVersion??``).join(`,`)),()=>{s(this.checkAndUpdateServiceInfos(),i.getLogger(this))})])}destroy(){this._set(`view`,null),this.items.removeAll(),this.tablesAndLayersLookup.clear()}get updating(){return this._updatingHandles.updating}checkAndUpdateServiceInfos(){return this._debouncedCheckAndUpdateServiceInfos()}changeVersion(e,t,n){return this._updatingHandles.addPromise((async()=>{await this._changeVersionInternal(e,t,n)})())}createVersion(e){return this._updatingHandles.addPromise((async()=>{let t=e.featureServerUrl,r=this._findServiceInfo(t);if(!r?.versionService)throw new n(`services:no-version-management-service`,`No version management service`);let i=r.loggedInServiceUser.toUpperCase(),a=y(e.ownerName)?i:e.ownerName?.trim().toUpperCase();if(a!==i&&r.featureServiceVersion<=11.1)throw new n(`services:versioning-api-error`,`Version management API too old`);if(a?.toUpperCase()===`SDE`&&e.versionName.toUpperCase()===`DEFAULT`||(await r.versionService.getVersionInfos())?.find(t=>t.versionIdentifier.name.toUpperCase()===(a+`.`+e.versionName).toUpperCase()||t.versionIdentifier.name.toUpperCase()===(i+`.`+e.versionName).toUpperCase()))throw new n(`services:no-valid-version-name`,`No valid version name`);let o=await r.versionService.createVersion({versionName:e.versionName,access:a===i?e.access:`public`,description:e.description});if(a!==i){let{guid:t,name:n}=o.versionIdentifier;await r.versionService.alterVersion({guid:t,name:n},{ownerName:a,access:e.access})}e.switchToVersion&&await this._changeVersionInternal(t,o.versionIdentifier.name,o.versionIdentifier.guid),this.emit(`version-created`,{versionIdentifier:o.versionIdentifier,versionManagementService:r.versionService})})())}deleteVersion(e,t,r){return this._updatingHandles.addPromise((async()=>{let i=this._findServiceInfo(e);if(!i?.versionService)throw new n(`services:no-version-management-service`,`No version management service`);if(i.featureServiceVersion<=11.1)throw new n(`services:versioning-api-error`,`Version management API too old`);let a={name:t,guid:r};await i.versionService.deleteVersion(a)&&(await i.syncVersionInfo(),this.emit(`version-deleted`,{versionIdentifier:a,versionManagementService:i.versionService}))})())}startEditing(e){return this._updatingHandles.addPromise((async()=>{let t=this._findServiceInfo(e);if(!t?.versionService)throw new n(`services:no-version-management-service`,`No version management service`);let r=t.versionInfo?.versionIdentifier??{name:t.versionService.defaultVersionIdentifier.name,guid:t.versionService.defaultVersionIdentifier.guid},i=!0;t.versionService.getLockType(r)===`none`&&(i=await t.versionService.startReading(r),!i)||(i=await t.versionService.startEditing(r),t.updateLockType())})())}finishEditing(e,t){return this._updatingHandles.addPromise((async()=>{let r=this._findServiceInfo(e);if(!r?.versionService)throw new n(`services:no-version-management-service`,`No version management service`);let i=r.versionInfo?.versionIdentifier??{name:r.versionService.defaultVersionIdentifier.name,guid:r.versionService.defaultVersionIdentifier.guid},a=r.versionService.getLockType(i);a!==`none`&&(a===`read`?(await r.versionService.stopReading(i),r.updateLockType()):a===`edit`&&(await r.versionService.stopEditing(i,t),await r.versionService.stopReading(i),r.updateLockType()))})())}async loadAll(){await this._updatingHandles.addPromise(Promise.allSettled(this.items.map(e=>e.load())))}async loadServiceVersionInfoForLayer(e){return await this.tablesAndLayersLookup.get(e)?.load()}async _changeVersionInternal(e,t,r){let i=this._findServiceInfo(e);if(!i?.versionService)throw new n(`services:no-version-management-service`,`No version management service`);let a=i.versionInfo?.versionIdentifier??{name:i.versionService.defaultVersionIdentifier.name,guid:i.versionService.defaultVersionIdentifier.guid},o={name:t,guid:r};await i.versionService.changeVersion(this.view?.map,a,o)&&await i.syncVersionInfo()}_findServiceInfo(e){return this.items.find(t=>t.featureService.url===e)??null}_removeFeatureService(e){this.items.remove(e)}_reset(){this.additionalLayers.removeAll(),this._processed.clear(),this.tablesAndLayersLookup.clear(),this.items.removeAll()}_updateVersionInfos(e){return this._updatingHandles.addPromise((async()=>{for(let t of e)await t.syncVersionInfo().catch(e=>{i.getLogger(this).error(`Failed to update version details`,e)})})())}_addServiceInfo(e,n){let r=new _({url:e}),i=n.isTable?[]:[n],a=n.isTable?[n]:[],o=new v({featureService:r,layers:new t(i),tables:new t(a)});return this.items.push(o),this.tablesAndLayersLookup.set(n,o),o}get _allLayersAndTables(){return[...this.view.map?.allLayers??[],...this.view.map?.allTables??[],...this.additionalLayers]}_detectNewLayersAndTables(){let e=new Set(this._allLayersAndTables),t=[];for(let n of e)(n.type===`feature`||n.type===`subtype-group`)&&(this._processed.has(n)||t.push(n));for(let t of this._processed)if(!e.has(t)&&(h(t)||g(t))){let e=this.tablesAndLayersLookup.get(t);if(!e)continue;this.tablesAndLayersLookup.delete(t),t.isTable?e.tables.remove(t):e.layers.remove(t),e.layersAndTables.length===0&&this._removeFeatureService(e)}return this._processed=e,t}_syncServiceInfos(){let e=this._detectNewLayersAndTables();if(e.length!==0){for(let t of e)if(t.type===`feature`||t.type===`subtype-group`){if(!t.url)continue;let e=m(t.url).url.path,n=this._findServiceInfo(e);n?(this.tablesAndLayersLookup.set(t,n),t.isTable?n.tables.push(t):n.layers.push(t)):this._addServiceInfo(e,t)}}}};e([d({constructOnly:!0})],S.prototype,`view`,void 0),e([d()],S.prototype,`items`,void 0),e([d()],S.prototype,`tablesAndLayersLookup`,void 0),e([d()],S.prototype,`additionalLayers`,void 0),e([d()],S.prototype,`updating`,null),e([d()],S.prototype,`_allLayersAndTables`,null),S=e([f(`esri.undoredo.support.Services`)],S);export{S as Services,x as getServices};
2
+ import{__decorate as e}from"tslib";import t from"../../core/Collection.js";import n from"../../core/Error.js";import{EventedAccessor as r}from"../../core/Evented.js";import i from"../../core/Logger.js";import{getOrCreateMapValue as a}from"../../core/MapUtils.js";import{debounce as o,logOnError as s}from"../../core/promiseUtils.js";import c from"../../core/ReactiveMap.js";import{whenOnce as l,watch as u}from"../../core/reactiveUtils.js";import{property as d,subclass as f}from"../../core/accessorSupport/decorators.js";import{UpdatingHandles as p}from"../../core/support/UpdatingHandles.js";import{parse as m}from"../../layers/support/arcgisLayerUrl.js";import{isSubtypeGroupLayer as h,isFeatureLayer as g}from"../../layers/support/layerUtils.js";import _ from"../../rest/featureService/FeatureService.js";import{ServiceVersionInfo as v}from"./ServiceVersionInfo.js";function y(e){return!e||e.trim().length===0}const b=new Map;function x(e){return a(b,e,()=>{let t=new S({view:e});return e.addHandles({remove(){b.delete(e),t.destroy()}}),t})}let S=class extends r{constructor(e){super(e),this._updatingHandles=new p,this.items=new t,this.tablesAndLayersLookup=new c,this.additionalLayers=new t,this._debouncedCheckAndUpdateServiceInfos=o(async()=>{let e=[];for(let t of this.items)t.layersAndTables.length!==0&&t.layersAndTables.getItemAt(0)?.gdbVersion!==t.versionInfo?.versionIdentifier.name&&e.push(t);e.length!==0&&(await l(()=>!this.updating),await this._updateVersionInfos(e))}),this._processed=new Set}initialize(){this._syncServiceInfos(),this.addHandles([u(()=>this.view.map,()=>{this._reset()}),u(()=>this._allLayersAndTables,()=>this._syncServiceInfos()),u(()=>this.items.map(e=>e.layersAndTables.map(e=>e.gdbVersion??``).join(`,`)),()=>{s(this.checkAndUpdateServiceInfos(),i.getLogger(this))})])}destroy(){this._set(`view`,null),this.items.removeAll(),this.tablesAndLayersLookup.clear()}get updating(){return this._updatingHandles.updating}checkAndUpdateServiceInfos(){return this._debouncedCheckAndUpdateServiceInfos()}changeVersion(e,t,n){return this._updatingHandles.addPromise((async()=>{await this._changeVersionInternal(e,t,n)})())}createVersion(e){return this._updatingHandles.addPromise((async()=>{let t=e.featureServerUrl,r=this._findServiceInfo(t);if(!r?.versionService)throw new n(`services:no-version-management-service`,`No version management service`);let i=r.loggedInServiceUser.toUpperCase(),a=y(e.ownerName)?i:e.ownerName?.trim().toUpperCase();if(a!==i&&r.featureServiceVersion<=11.1)throw new n(`services:versioning-api-error`,`Version management API too old`);if(a?.toUpperCase()===`SDE`&&e.versionName.toUpperCase()===`DEFAULT`||(await r.versionService.getVersionInfos())?.find(t=>t.versionIdentifier.name.toUpperCase()===(a+`.`+e.versionName).toUpperCase()||t.versionIdentifier.name.toUpperCase()===(i+`.`+e.versionName).toUpperCase()))throw new n(`services:no-valid-version-name`,`No valid version name`);let o=await r.versionService.createVersion({versionName:e.versionName,access:a===i?e.access:`public`,description:e.description});if(a!==i){let{guid:t,name:n}=o.versionIdentifier;await r.versionService.alterVersion({guid:t,name:n},{ownerName:a,access:e.access})}e.switchToVersion&&await this._changeVersionInternal(t,o.versionIdentifier.name,o.versionIdentifier.guid),this.emit(`version-created`,{versionIdentifier:o.versionIdentifier,versionManagementService:r.versionService})})())}deleteVersion(e,t,r){return this._updatingHandles.addPromise((async()=>{let i=this._findServiceInfo(e);if(!i?.versionService)throw new n(`services:no-version-management-service`,`No version management service`);if(i.featureServiceVersion<=11.1)throw new n(`services:versioning-api-error`,`Version management API too old`);let a={name:t,guid:r};await i.versionService.deleteVersion(a)&&(await i.syncVersionInfo(),this.emit(`version-deleted`,{versionIdentifier:a,versionManagementService:i.versionService}))})())}startEditing(e){return this._updatingHandles.addPromise((async()=>{let t=this._findServiceInfo(e);if(!t?.versionService)throw new n(`services:no-version-management-service`,`No version management service`);let r=t.versionInfo?.versionIdentifier??{name:t.versionService.defaultVersionIdentifier.name,guid:t.versionService.defaultVersionIdentifier.guid},i=!0;t.versionService.getLockType(r)===`none`&&(i=await t.versionService.startReading(r),!i)||(i=await t.versionService.startEditing(r),t.updateLockType())})())}finishEditing(e,t){return this._updatingHandles.addPromise((async()=>{let r=this._findServiceInfo(e);if(!r?.versionService)throw new n(`services:no-version-management-service`,`No version management service`);let i=r.versionInfo?.versionIdentifier??{name:r.versionService.defaultVersionIdentifier.name,guid:r.versionService.defaultVersionIdentifier.guid},a=r.versionService.getLockType(i);a!==`none`&&(a===`read`?(await r.versionService.stopReading(i),r.updateLockType()):a===`edit`&&(await r.versionService.stopEditing(i,t),await r.versionService.stopReading(i),r.updateLockType()))})())}async loadAll(){await this._updatingHandles.addPromise(Promise.allSettled(this.items.map(e=>e.load())))}async loadServiceVersionInfoForLayer(e){return await this.tablesAndLayersLookup.get(e)?.load()}async _changeVersionInternal(e,t,r){let i=this._findServiceInfo(e);if(!i?.versionService)throw new n(`services:no-version-management-service`,`No version management service`);let a=i.versionInfo?.versionIdentifier??{name:i.versionService.defaultVersionIdentifier.name,guid:i.versionService.defaultVersionIdentifier.guid},o={name:t,guid:r};await i.versionService.changeVersion(this.view?.map,a,o)&&await i.syncVersionInfo()}_findServiceInfo(e){return this.items.find(t=>t.featureService.url===e)??null}_removeFeatureService(e){this.items.remove(e)}_reset(){this.additionalLayers.removeAll(),this._processed.clear(),this.tablesAndLayersLookup.clear(),this.items.removeAll()}_updateVersionInfos(e){return this._updatingHandles.addPromise((async()=>{for(let t of e)await t.syncVersionInfo().catch(e=>{i.getLogger(this).error(`Failed to update version details`,e)})})())}_addServiceInfo(e,n){let r=new _({url:e}),i=n.isTable?[]:[n],a=n.isTable?[n]:[],o=new v({featureService:r,layers:new t(i),tables:new t(a)});return this.items.push(o),this.tablesAndLayersLookup.set(n,o),o}get _allLayersAndTables(){return[...this.view.map?.allLayers??[],...this.view.map?.allTables??[],...this.additionalLayers]}_detectNewLayersAndTables(){let e=new Set(this._allLayersAndTables),t=[];for(let n of e)n.type!==`feature`&&n.type!==`subtype-group`||this._processed.has(n)||t.push(n);for(let t of this._processed)if(!e.has(t)&&(h(t)||g(t))){let e=this.tablesAndLayersLookup.get(t);if(!e)continue;this.tablesAndLayersLookup.delete(t),t.isTable?e.tables.remove(t):e.layers.remove(t),e.layersAndTables.length===0&&this._removeFeatureService(e)}return this._processed=e,t}_syncServiceInfos(){let e=this._detectNewLayersAndTables();if(e.length!==0){for(let t of e)if(t.type===`feature`||t.type===`subtype-group`){if(!t.url)continue;let e=m(t.url).url.path,n=this._findServiceInfo(e);n?(this.tablesAndLayersLookup.set(t,n),t.isTable?n.tables.push(t):n.layers.push(t)):this._addServiceInfo(e,t)}}}};e([d({constructOnly:!0})],S.prototype,`view`,void 0),e([d()],S.prototype,`items`,void 0),e([d()],S.prototype,`tablesAndLayersLookup`,void 0),e([d()],S.prototype,`additionalLayers`,void 0),e([d()],S.prototype,`updating`,null),e([d()],S.prototype,`_allLayersAndTables`,null),S=e([f(`esri.undoredo.support.Services`)],S);export{S as Services,x as getServices};
@@ -1,3 +1,3 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import e from"../../../../../core/BidiEngine.js";import{assertIsSome as t}from"../../../../../core/maybe.js";import{numericHash as n}from"../../../../../core/string.js";import{Point as r}from"../../../../../geometry/support/TileClipper.js";import{tilePixelRatio as i,tileSizeInTileUnits as a}from"../constants.js";import{cDegToRad as o,log2 as s,interpolate as c}from"../GeometryUtils.js";import{Anchor as l}from"../Placement.js";import{sdfGlyphSize as u,TextShaping as d}from"../TextShaping.js";import f from"./BaseBucket.js";import{getPolygonLabelPlacement as p}from"../style/GeoJSONLabelUtils.js";import{IconLayout as m,TextLayout as h}from"../style/StyleLayer.js";function g(e,t){return e.iconMosaicItem&&t.iconMosaicItem?e.iconMosaicItem.page===t.iconMosaicItem.page?0:e.iconMosaicItem.page-t.iconMosaicItem.page:e.iconMosaicItem&&!t.iconMosaicItem?1:!e.iconMosaicItem&&t.iconMosaicItem?-1:0}class _ extends f{constructor(e,t,n,r,i,a,o,s,c){super(t,n,c.getSpriteItems()),this.type=3,this._markerMap=new Map,this._glyphMap=new Map,this._glyphBufferDataStorage=new Map,this._isIconSDF=!1,this._sourceTileKey=e,this._iconVertexBuffer=r,this._iconIndexBuffer=i,this._textVertexBuffer=a,this._textIndexBuffer=o,this._placementEngine=s,this._workerTileHandler=c}get markerPageMap(){return this._markerMap}get glyphsPageMap(){return this._glyphMap}get symbolInstances(){return this._symbolInstances}static{this._bidiEngine=new e}getResources(e,t,r){let i=this.layer,a=this.zoom;e&&e.setExtent(this.layerExtent);let o=i.getLayoutProperty(`icon-image`),s=i.getLayoutProperty(`text-field`),c=i.getLayoutProperty(`text-transform`),l=i.getLayoutProperty(`text-font`),u=[],d;o&&!o.isDataDriven&&(d=o.getValue(a));let f;s&&!s.isDataDriven&&(f=s.getValue(a));let p;(!c||!c.isDataDriven)&&(p=i.getLayoutValue(`text-transform`,a),c=null);let m;(!l||!l.isDataDriven)&&(m=i.getLayoutValue(`text-font`,a),l=null);for(let h of this._features){let g=h.getGeometry(e);if(!g||g.length===0)continue;let v;o&&(v=o.isDataDriven?o.getValue(a,h):this._replaceKeys(d,h.values),v&&t(v));let y,b=!1;if(s&&(y=s.isDataDriven?s.getValue(a,h):this._replaceKeys(f,h.values),y)){switch(y=y.replaceAll(`\\n`,`
3
- `),c&&(p=c.getValue(a,h)),p){case 2:y=y.toLowerCase();break;case 1:y=y.toUpperCase()}if(_._bidiEngine.hasBidiChar(y)){let e=_._bidiEngine.checkContextual(y),t;t=e===`rtl`?`IDNNN`:`ICNNN`,y=_._bidiEngine.bidiTransform(y,t,`VLYSN`),b=!0}if(y.length>0){l&&(m=l.getValue(a,h));for(let e of m){let t=r[e];t||=r[e]=new Set;for(let e of y){let n=e.codePointAt(0);n!=null&&t.add(n)}}}}if(!v&&!y)continue;let x=i.getLayoutValue(`symbol-sort-key`,a,h),S={feature:h,sprite:v,label:y,rtl:b,geometry:g,hash:(y?n(y):0)^(v?n(v):0),priority:x,textFont:m};u.push(S)}this._symbolFeatures=u}processFeatures(e){e&&e.setExtent(this.layerExtent);let n=this.layer,r=this.zoom,s=n.getLayoutValue(`symbol-placement`,r),c=s!==0,f=n.getLayoutValue(`symbol-spacing`,r)*i,p=n.getLayoutProperty(`icon-image`),v=n.getLayoutProperty(`text-field`),y=p?new m(n,r,c):null,b=v?new h(n,r,c):null,x=this._workerTileHandler,S;p&&(S=x.getSpriteItems()),this._iconIndexStart=this._iconIndexBuffer.index*3,this._textIndexStart=this._textIndexBuffer.index*3,this._iconIndexCount=0,this._textIndexCount=0,this._markerMap.clear(),this._glyphMap.clear();let C=[],w=1;b?.size&&(w=b.size/u);let T=b?b.maxAngle*o:0,E=b?b.size*i:0;for(let e of this._symbolFeatures){let o;y&&S&&e.sprite&&(o=S[e.sprite],o&&o.sdf&&(this._isIconSDF=!0)),o&&y.update(r,e.feature);let p,m=0,h=e.label;if(h){t(b),b.update(r,e.feature);let n=c&&b.rotationAlignment===0?b.keepUpright:b.writingMode&&b.writingMode.includes(1),a=.5;switch(b.anchor){case 5:case 1:case 7:a=0;break;case 6:case 2:case 8:a=1}let o=.5;switch(b.anchor){case 5:case 3:case 6:o=0;break;case 7:case 4:case 8:o=1}let s=.5;switch(b.justify){case 0:s=a;break;case 1:s=0;break;case 3:s=1}let l=b.letterSpacing*u,f=c?0:b.maxWidth*u,g=b.lineHeight*u,_=e.textFont.map(e=>x.getGlyphItems(e));if(p=new d(_,f,g,l,a,o,s).getShaping(h,e.rtl,n),p&&p.length>0){let e=1e30,t=-1e30;for(let n of p)e=Math.min(e,n.x),t=Math.max(t,n.x);m=(t-e+u*2)*w*i}}let g=_._getPlacementCandidates(n,s,e.feature,e.geometry);for(let t of g){let{vertices:n}=t,r=[];if(s===1){if(p?.length&&b?.size){let e=b.size*i*(2+Math.min(2,Math.abs(b.offset[1])*4));n=_._smoothVertices(n,e)}_._pushAnchors(r,n,f,m)}else s===2?_._pushCenterAnchor(r,n):e.feature.type===3?t.anchor?r.push(t.anchor):_._pushCentroid(r,n):r.push(new l(n[0].x,n[0].y));for(let t of r){if(t.x<0||t.x>a||t.y<0||t.y>a||c&&m>0&&b?.rotationAlignment===0&&!_._honorsTextMaxAngle(n,t,m,T,E))continue;let r={shaping:p,line:n,iconMosaicItem:o,anchor:t,symbolFeature:e,textColliders:[],iconColliders:[],textVertexRanges:[],iconVertexRanges:[]};C.push(r),this._processFeature(r,y,b)}}}C.sort(g),this._addPlacedGlyphs(),this._symbolInstances=C}serialize(){let e=14;e+=this.layerUIDs.length,e+=this.markerPageMap.size*3,e+=this.glyphsPageMap.size*3,e+=_._symbolsSerializationLength(this._symbolInstances),e+=this._iconVertexBuffer.array.length,e+=this._iconIndexBuffer.array.length,e+=this._textVertexBuffer.array.length,e+=this._textIndexBuffer.array.length;let t=new Uint32Array(e),n=new Int32Array(t.buffer),r=new Float32Array(t.buffer),[i,a,o]=this._sourceTileKey.split(`/`),s=0;t[s++]=this.type,t[s++]=this.layerUIDs.length;for(let e=0;e<this.layerUIDs.length;e++)t[s++]=this.layerUIDs[e];t[s++]=+!!this._isIconSDF,t[s++]=parseFloat(i),t[s++]=parseFloat(a),t[s++]=parseFloat(o),t[s++]=this.markerPageMap.size;for(let[e,[n,r]]of this.markerPageMap)t[s++]=e,t[s++]=n,t[s++]=r;t[s++]=this.glyphsPageMap.size;for(let[e,[n,r]]of this.glyphsPageMap)t[s++]=e,t[s++]=n,t[s++]=r;t[s++]=this._iconVertexBuffer.index/4,t[s++]=this._textVertexBuffer.index/4,s=_.serializeSymbols(t,n,r,s,this._symbolInstances),t[s++]=this._iconVertexBuffer.array.length;for(let e=0;e<this._iconVertexBuffer.array.length;e++)n[s++]=this._iconVertexBuffer.array[e];t[s++]=this._iconIndexBuffer.array.length;for(let e=0;e<this._iconIndexBuffer.array.length;e++)t[s++]=this._iconIndexBuffer.array[e];t[s++]=this._textVertexBuffer.array.length;for(let e=0;e<this._textVertexBuffer.array.length;e++)n[s++]=this._textVertexBuffer.array[e];t[s++]=this._textIndexBuffer.array.length;for(let e=0;e<this._textIndexBuffer.array.length;e++)t[s++]=this._textIndexBuffer.array[e];return t.buffer}static _symbolsSerializationLength(e){let t=0;t+=1;for(let n of e||[]){t+=5,t+=1;for(let e of n.textColliders)t+=10;for(let e of n.iconColliders)t+=10;t+=1,t+=n.textVertexRanges.length*2,t+=1,t+=n.iconVertexRanges.length*2}return t}static serializeSymbols(e,t,n,r,i){i||=[],t[r++]=i.length;for(let e of i){t[r++]=e.anchor.x,t[r++]=e.anchor.y,t[r++]=e.symbolFeature.hash,t[r++]=e.symbolFeature.priority,t[r++]=e.symbolFeature.feature.featureIndex,t[r++]=e.textColliders.length+e.iconColliders.length;for(let i of e.textColliders)t[r++]=i.xTile,t[r++]=i.yTile,t[r++]=i.dxPixels,t[r++]=i.dyPixels,t[r++]=+!!i.hard,t[r++]=i.partIndex,n[r++]=i.minLod,n[r++]=i.maxLod,t[r++]=i.width,t[r++]=i.height;for(let i of e.iconColliders)t[r++]=i.xTile,t[r++]=i.yTile,t[r++]=i.dxPixels,t[r++]=i.dyPixels,t[r++]=+!!i.hard,t[r++]=i.partIndex,n[r++]=i.minLod,n[r++]=i.maxLod,t[r++]=i.width,t[r++]=i.height;t[r++]=e.textVertexRanges.length;for(let[n,i]of e.textVertexRanges)t[r++]=n,t[r++]=i;t[r++]=e.iconVertexRanges.length;for(let[n,i]of e.iconVertexRanges)t[r++]=n,t[r++]=i}return r}_replaceKeys(e,t){return e.replaceAll(/{([^{}]+)}/g,(e,n)=>n in t?t[n]:``)}_processFeature(e,t,n){let{line:r,iconMosaicItem:i,shaping:a,anchor:o}=e,c=this.zoom,l=this.layer,u=!!i,d=!0;u&&(d=t?.optional||!i);let f=a&&a.length>0,p=!f||n?.optional,m;if(u&&(m=this._placementEngine.getIconPlacement(o,i,t)),!m&&!d)return;let h;if(f&&(h=this._placementEngine.getTextPlacement(o,a,r,n)),h||p){if((!m||!h)&&(!p&&!d?(m=null,h=null):!p&&!h?m=null:!d&&!m&&(h=null)),h){let t=l.hasDataDrivenText?l.textMaterial.encodeAttributes(e.symbolFeature.feature,c,l):null;if(this._storePlacedGlyphs(e,h.shapes,c,n.rotationAlignment,t),h.textColliders){e.textColliders=h.textColliders;for(let e of h.textColliders){e.minLod=Math.max(c+s(e.minLod),0),e.maxLod=Math.min(c+s(e.maxLod),25);let t=e.angle;if(t){let n=Math.cos(t),r=Math.sin(t),i=e.dxPixels*n-e.dyPixels*r,a=e.dxPixels*r+e.dyPixels*n,o=(e.dxPixels+e.width)*n-e.dyPixels*r,s=(e.dxPixels+e.width)*r+e.dyPixels*n,c=e.dxPixels*n-(e.dyPixels+e.height)*r,l=e.dxPixels*r+(e.dyPixels+e.height)*n,u=(e.dxPixels+e.width)*n-(e.dyPixels+e.height)*r,d=(e.dxPixels+e.width)*r+(e.dyPixels+e.height)*n,f=Math.min(i,o,c,u),p=Math.max(i,o,c,u),m=Math.min(a,s,l,d),h=Math.max(a,s,l,d);e.dxPixels=f,e.dyPixels=m,e.width=p-f,e.height=h-m}}}}if(m){let n=l.hasDataDrivenIcon?l.iconMaterial.encodeAttributes(e.symbolFeature.feature,c,l):null;if(this._addPlacedIcons(e,m.shapes,c,i.page,t.rotationAlignment===1,n),m.iconColliders){e.iconColliders=m.iconColliders;for(let e of m.iconColliders){e.minLod=Math.max(c+s(e.minLod),0),e.maxLod=Math.min(c+s(e.maxLod),25);let t=e.angle;if(t){let n=Math.cos(t),r=Math.sin(t),i=e.dxPixels*n-e.dyPixels*r,a=e.dxPixels*r+e.dyPixels*n,o=(e.dxPixels+e.width)*n-e.dyPixels*r,s=(e.dxPixels+e.width)*r+e.dyPixels*n,c=e.dxPixels*n-(e.dyPixels+e.height)*r,l=e.dxPixels*r+(e.dyPixels+e.height)*n,u=(e.dxPixels+e.width)*n-(e.dyPixels+e.height)*r,d=(e.dxPixels+e.width)*r+(e.dyPixels+e.height)*n,f=Math.min(i,o,c,u),p=Math.max(i,o,c,u),m=Math.min(a,s,l,d),h=Math.max(a,s,l,d);e.dxPixels=f,e.dyPixels=m,e.width=p-f,e.height=h-m}}}}}}_addPlacedIcons(e,t,n,r,i,a){let o=Math.max(n-1,0),c=this._iconVertexBuffer,l=this._iconIndexBuffer,u=this._markerMap;for(let d of t){let t=i?0:Math.max(n+s(d.minzoom),o),f=i?25:Math.min(n+s(d.maxzoom),25);if(f<=t)continue;let p=d.tl,m=d.tr,h=d.bl,g=d.br,_=d.mosaicRect,v=d.labelAngle,y=d.minAngle,b=d.maxAngle,x=d.anchor,S=c.index,C=_.x,w=_.y,T=C+_.width,E=w+_.height,D=c.index;c.add(x.x,x.y,p.x,p.y,C,w,v,y,b,t,f,a),c.add(x.x,x.y,m.x,m.y,T,w,v,y,b,t,f,a),c.add(x.x,x.y,h.x,h.y,C,E,v,y,b,t,f,a),c.add(x.x,x.y,g.x,g.y,T,E,v,y,b,t,f,a),e.iconVertexRanges.length>0&&e.iconVertexRanges[0][0]+e.iconVertexRanges[0][1]===D?e.iconVertexRanges[0][1]+=4:e.iconVertexRanges.push([D,4]),l.add(S,S+1,S+2),l.add(S+1,S+2,S+3),u.has(r)?u.get(r)[1]+=6:u.set(r,[this._iconIndexStart+this._iconIndexCount,6]),this._iconIndexCount+=6}}_addPlacedGlyphs(){let e=this._textVertexBuffer,t=this._textIndexBuffer,n=this._glyphMap;for(let[r,i]of this._glyphBufferDataStorage)for(let a of i){let i=e.index,o=a.symbolInstance,s=a.ddAttributes,c=e.index;e.add(a.glyphAnchor[0],a.glyphAnchor[1],a.tl[0],a.tl[1],a.xmin,a.ymin,a.labelAngle,a.minAngle,a.maxAngle,a.minLod,a.maxLod,s),e.add(a.glyphAnchor[0],a.glyphAnchor[1],a.tr[0],a.tr[1],a.xmax,a.ymin,a.labelAngle,a.minAngle,a.maxAngle,a.minLod,a.maxLod,s),e.add(a.glyphAnchor[0],a.glyphAnchor[1],a.bl[0],a.bl[1],a.xmin,a.ymax,a.labelAngle,a.minAngle,a.maxAngle,a.minLod,a.maxLod,s),e.add(a.glyphAnchor[0],a.glyphAnchor[1],a.br[0],a.br[1],a.xmax,a.ymax,a.labelAngle,a.minAngle,a.maxAngle,a.minLod,a.maxLod,s),o.textVertexRanges.length>0&&o.textVertexRanges[0][0]+o.textVertexRanges[0][1]===c?o.textVertexRanges[0][1]+=4:o.textVertexRanges.push([c,4]),t.add(i,i+1,i+2),t.add(i+1,i+2,i+3),n.has(r)?n.get(r)[1]+=6:n.set(r,[this._textIndexStart+this._textIndexCount,6]),this._textIndexCount+=6}this._glyphBufferDataStorage.clear()}_storePlacedGlyphs(e,t,n,r,i){let a=Math.max(n-1,0),o=r===1,c,l,u,d,f,p,m,h,g,_,v;for(let r of t)c=o?0:Math.max(n+s(r.minzoom),a),l=o?25:Math.min(n+s(r.maxzoom),25),!(l<=c)&&(u=r.tl,d=r.tr,f=r.bl,p=r.br,m=r.labelAngle,h=r.minAngle,g=r.maxAngle,_=r.anchor,v=r.mosaicRect,this._glyphBufferDataStorage.has(r.page)||this._glyphBufferDataStorage.set(r.page,[]),this._glyphBufferDataStorage.get(r.page).push({glyphAnchor:[_.x,_.y],tl:[u.x,u.y],tr:[d.x,d.y],bl:[f.x,f.y],br:[p.x,p.y],xmin:v.x,ymin:v.y,xmax:v.x+v.width,ymax:v.y+v.height,labelAngle:m,minAngle:h,maxAngle:g,minLod:c,maxLod:l,placementLod:a,symbolInstance:e,ddAttributes:i}))}static _pushAnchors(e,t,n,i){n+=i;let a=0,o=t.length-1;for(let e=0;e<o;e++)a+=r.distance(t[e],t[e+1]);let s=i||n;if(s*=.5,a<=s)return;let u=s/a;n=a/Math.max(Math.round(a/n),1);let d=0,f=-n/2,p=t.length-1;for(let r=0;r<p;r++){let i=t[r],a=t[r+1],o=a.x-i.x,s=a.y-i.y,p=Math.sqrt(o*o+s*s),m;for(;f+n<d+p;){f+=n;let t=(f-d)/p,h=c(i.x,a.x,t),g=c(i.y,a.y,t);m===void 0&&(m=Math.atan2(s,o)),e.push(new l(h,g,m,r,u))}d+=p}}static _pushCenterAnchor(e,t){let n=0,i=t.length-1;for(let e=0;e<i;e++)n+=r.distance(t[e],t[e+1]);let a=n/2,o=0,s=t.length-1;for(let n=0;n<s;n++){let r=t[n],i=t[n+1],s=i.x-r.x,u=i.y-r.y,d=Math.sqrt(s*s+u*u);if(a<o+d){let t=(a-o)/d,f=c(r.x,i.x,t),p=c(r.y,i.y,t),m=Math.atan2(u,s);e.push(new l(f,p,m,n,0));return}o+=d}}static _deviation(e,t,n){let r=(t.x-e.x)*(n.x-t.x)+(t.y-e.y)*(n.y-t.y),i=(t.x-e.x)*(n.y-t.y)-(t.y-e.y)*(n.x-t.x);return Math.atan2(i,r)}static _honorsTextMaxAngle(e,t,n,i,a){let o=0,s=n/2,c=new r(t.x,t.y),l=t.segment+1;for(;o>-s;){if(--l,l<0)return!1;o-=r.distance(e[l],c),c=e[l]}o+=r.distance(e[l],e[l+1]);let u=[],d=0,f=e.length;for(;o<s;){let t=e[l],n=l,s;do{if(++n,n===f)return!1;s=e[n]}while(s.isEqual(t));let c=n,p;do{if(++c,c===f)return!1;p=e[c]}while(p.isEqual(s));let m=this._deviation(t,s,p);for(u.push({deviation:m,distToAnchor:o}),d+=m;o-u[0].distToAnchor>a;)d-=u.shift().deviation;if(Math.abs(d)>i)return!1;o+=r.distance(s,p),l=n}return!0}static _smoothVertices(e,t){if(t<=0)return e;let n=e.length;if(n<3)return e;let i=[],a=0,o=0;i.push(0);for(let t=1;t<n;t++){let n=r.distance(e[t],e[t-1]);n>0&&(a+=n,i.push(a),o++,o!==t&&(e[o]=e[t]))}if(n=o+1,n<3)return e;t=Math.min(t,.2*a);let s=e[0].x,c=e[0].y,l=e[n-1].x,u=e[n-1].y,d=r.sub(e[0],e[1]);d.normalize(),e[0].x+=t*d.x,e[0].y+=t*d.y,d.assignSub(e[n-1],e[n-2]),d.normalize(),e[n-1].x+=t*d.x,e[n-1].y+=t*d.y,i[0]-=t,i[n-1]+=t;let f=[];f.push(new r(s,c));let p=1e-6,m=.5*t;for(let a=1;a<n-1;a++){let o=0,s=0,c=0;for(let n=a-1;n>=0;n--){let r=m+i[n+1]-i[a];if(r<0)break;let l=i[n+1]-i[n],u=i[a]-i[n]<m?1:r/l;if(u<p)break;let d=u*u,f=u*r-.5*d*l,h=u*l/t,g=e[n+1],_=e[n].x-g.x,v=e[n].y-g.y;o+=h/f*(g.x*u*r+.5*d*(r*_-l*g.x)-d*u*l*_/3),s+=h/f*(g.y*u*r+.5*d*(r*v-l*g.y)-d*u*l*v/3),c+=h}for(let r=a+1;r<n;r++){let n=m-i[r-1]+i[a];if(n<0)break;let l=i[r]-i[r-1],u=i[r]-i[a]<m?1:n/l;if(u<p)break;let d=u*u,f=u*n-.5*d*l,h=u*l/t,g=e[r-1],_=e[r].x-g.x,v=e[r].y-g.y;o+=h/f*(g.x*u*n+.5*d*(n*_-l*g.x)-d*u*l*_/3),s+=h/f*(g.y*u*n+.5*d*(n*v-l*g.y)-d*u*l*v/3),c+=h}f.push(new r(o/c,s/c))}return f.push(new r(l,u)),e[0].x=s,e[0].y=c,e[n-1].x=l,e[n-1].y=u,f}static _getPlacementCandidates(e,t,n,r){if(t!==0||n.type!==3||e.sourceType!==`geojson`)return r.map(e=>({anchor:null,vertices:e}));let i=p(r);return i?[{anchor:new l(i.x,i.y),vertices:i.vertices}]:[]}static _pushCentroid(e,t){let n=a,r=a,i=t.length-1,o=0,s=0,c=0,u=t[0].x,d=t[0].y;u>n&&(u=n),u<0&&(u=0),d>r&&(d=r),d<0&&(d=0);for(let e=1;e<i;e++){let i=t[e].x,a=t[e].y,l=t[e+1].x,f=t[e+1].y;i>n&&(i=n),i<0&&(i=0),a>r&&(a=r),a<0&&(a=0),l>n&&(l=n),l<0&&(l=0),f>r&&(f=r),f<0&&(f=0);let p=(i-u)*(f-d)-(l-u)*(a-d);o+=p*(u+i+l),s+=p*(d+a+f),c+=p}o/=3*c,s/=3*c,!isNaN(o)&&!isNaN(s)&&e.push(new l(o,s))}}export{_ as default};
2
+ import e from"../../../../../core/BidiEngine.js";import{assertIsSome as t}from"../../../../../core/maybe.js";import{numericHash as n}from"../../../../../core/string.js";import{Point as r}from"../../../../../geometry/support/TileClipper.js";import{tilePixelRatio as i,tileSizeInTileUnits as a}from"../constants.js";import{cDegToRad as o,log2 as s,interpolate as c}from"../GeometryUtils.js";import{Anchor as l}from"../Placement.js";import{sdfGlyphSize as u,TextShaping as d}from"../TextShaping.js";import f from"./BaseBucket.js";import{getPolygonLabelPlacement as p}from"../style/GeoJSONLabelUtils.js";import{IconLayout as m,TextLayout as h}from"../style/StyleLayer.js";function g(e,t){return e.iconMosaicItem&&t.iconMosaicItem?e.iconMosaicItem.page===t.iconMosaicItem.page?0:e.iconMosaicItem.page-t.iconMosaicItem.page:e.iconMosaicItem&&!t.iconMosaicItem?1:!e.iconMosaicItem&&t.iconMosaicItem?-1:0}class _ extends f{constructor(e,t,n,r,i,a,o,s,c){super(t,n,c.getSpriteItems()),this.type=3,this._markerMap=new Map,this._glyphMap=new Map,this._glyphBufferDataStorage=new Map,this._isIconSDF=!1,this._sourceTileKey=e,this._iconVertexBuffer=r,this._iconIndexBuffer=i,this._textVertexBuffer=a,this._textIndexBuffer=o,this._placementEngine=s,this._workerTileHandler=c}get markerPageMap(){return this._markerMap}get glyphsPageMap(){return this._glyphMap}get symbolInstances(){return this._symbolInstances}static{this._bidiEngine=new e}getResources(e,t,r){let i=this.layer,a=this.zoom;e&&e.setExtent(this.layerExtent);let o=i.getLayoutProperty(`icon-image`),s=i.getLayoutProperty(`text-field`),c=i.getLayoutProperty(`text-transform`),l=i.getLayoutProperty(`text-font`),u=[],d;o&&!o.isDataDriven&&(d=o.getValue(a));let f;s&&!s.isDataDriven&&(f=s.getValue(a));let p;c&&c.isDataDriven||(p=i.getLayoutValue(`text-transform`,a),c=null);let m;l&&l.isDataDriven||(m=i.getLayoutValue(`text-font`,a),l=null);for(let h of this._features){let g=h.getGeometry(e);if(!g||g.length===0)continue;let v;o&&(v=o.isDataDriven?o.getValue(a,h):this._replaceKeys(d,h.values),v&&t(v));let y,b=!1;if(s&&(y=s.isDataDriven?s.getValue(a,h):this._replaceKeys(f,h.values),y)){switch(y=y.replaceAll(`\\n`,`
3
+ `),c&&(p=c.getValue(a,h)),p){case 2:y=y.toLowerCase();break;case 1:y=y.toUpperCase()}if(_._bidiEngine.hasBidiChar(y)){let e=_._bidiEngine.checkContextual(y),t;t=e===`rtl`?`IDNNN`:`ICNNN`,y=_._bidiEngine.bidiTransform(y,t,`VLYSN`),b=!0}if(y.length>0){l&&(m=l.getValue(a,h));for(let e of m){let t=r[e];t||=r[e]=new Set;for(let e of y){let n=e.codePointAt(0);n!=null&&t.add(n)}}}}if(!v&&!y)continue;let x=i.getLayoutValue(`symbol-sort-key`,a,h),S={feature:h,sprite:v,label:y,rtl:b,geometry:g,hash:(y?n(y):0)^(v?n(v):0),priority:x,textFont:m};u.push(S)}this._symbolFeatures=u}processFeatures(e){e&&e.setExtent(this.layerExtent);let n=this.layer,r=this.zoom,s=n.getLayoutValue(`symbol-placement`,r),c=s!==0,f=n.getLayoutValue(`symbol-spacing`,r)*i,p=n.getLayoutProperty(`icon-image`),v=n.getLayoutProperty(`text-field`),y=p?new m(n,r,c):null,b=v?new h(n,r,c):null,x=this._workerTileHandler,S;p&&(S=x.getSpriteItems()),this._iconIndexStart=this._iconIndexBuffer.index*3,this._textIndexStart=this._textIndexBuffer.index*3,this._iconIndexCount=0,this._textIndexCount=0,this._markerMap.clear(),this._glyphMap.clear();let C=[],w=1;b?.size&&(w=b.size/u);let T=b?b.maxAngle*o:0,E=b?b.size*i:0;for(let e of this._symbolFeatures){let o;y&&S&&e.sprite&&(o=S[e.sprite],o&&o.sdf&&(this._isIconSDF=!0)),o&&y.update(r,e.feature);let p,m=0,h=e.label;if(h){t(b),b.update(r,e.feature);let n=c&&b.rotationAlignment===0?b.keepUpright:b.writingMode&&b.writingMode.includes(1),a=.5;switch(b.anchor){case 5:case 1:case 7:a=0;break;case 6:case 2:case 8:a=1}let o=.5;switch(b.anchor){case 5:case 3:case 6:o=0;break;case 7:case 4:case 8:o=1}let s=.5;switch(b.justify){case 0:s=a;break;case 1:s=0;break;case 3:s=1}let l=b.letterSpacing*u,f=c?0:b.maxWidth*u,g=b.lineHeight*u,_=e.textFont.map(e=>x.getGlyphItems(e));if(p=new d(_,f,g,l,a,o,s).getShaping(h,e.rtl,n),p&&p.length>0){let e=1e30,t=-1e30;for(let n of p)e=Math.min(e,n.x),t=Math.max(t,n.x);m=(t-e+u*2)*w*i}}let g=_._getPlacementCandidates(n,s,e.feature,e.geometry);for(let t of g){let{vertices:n}=t,r=[];if(s===1){if(p?.length&&b?.size){let e=b.size*i*(2+Math.min(2,Math.abs(b.offset[1])*4));n=_._smoothVertices(n,e)}_._pushAnchors(r,n,f,m)}else s===2?_._pushCenterAnchor(r,n):e.feature.type===3?t.anchor?r.push(t.anchor):_._pushCentroid(r,n):r.push(new l(n[0].x,n[0].y));for(let t of r){if(t.x<0||t.x>a||t.y<0||t.y>a||c&&m>0&&b?.rotationAlignment===0&&!_._honorsTextMaxAngle(n,t,m,T,E))continue;let r={shaping:p,line:n,iconMosaicItem:o,anchor:t,symbolFeature:e,textColliders:[],iconColliders:[],textVertexRanges:[],iconVertexRanges:[]};C.push(r),this._processFeature(r,y,b)}}}C.sort(g),this._addPlacedGlyphs(),this._symbolInstances=C}serialize(){let e=14;e+=this.layerUIDs.length,e+=this.markerPageMap.size*3,e+=this.glyphsPageMap.size*3,e+=_._symbolsSerializationLength(this._symbolInstances),e+=this._iconVertexBuffer.array.length,e+=this._iconIndexBuffer.array.length,e+=this._textVertexBuffer.array.length,e+=this._textIndexBuffer.array.length;let t=new Uint32Array(e),n=new Int32Array(t.buffer),r=new Float32Array(t.buffer),[i,a,o]=this._sourceTileKey.split(`/`),s=0;t[s++]=this.type,t[s++]=this.layerUIDs.length;for(let e=0;e<this.layerUIDs.length;e++)t[s++]=this.layerUIDs[e];t[s++]=+!!this._isIconSDF,t[s++]=parseFloat(i),t[s++]=parseFloat(a),t[s++]=parseFloat(o),t[s++]=this.markerPageMap.size;for(let[e,[n,r]]of this.markerPageMap)t[s++]=e,t[s++]=n,t[s++]=r;t[s++]=this.glyphsPageMap.size;for(let[e,[n,r]]of this.glyphsPageMap)t[s++]=e,t[s++]=n,t[s++]=r;t[s++]=this._iconVertexBuffer.index/4,t[s++]=this._textVertexBuffer.index/4,s=_.serializeSymbols(t,n,r,s,this._symbolInstances),t[s++]=this._iconVertexBuffer.array.length;for(let e=0;e<this._iconVertexBuffer.array.length;e++)n[s++]=this._iconVertexBuffer.array[e];t[s++]=this._iconIndexBuffer.array.length;for(let e=0;e<this._iconIndexBuffer.array.length;e++)t[s++]=this._iconIndexBuffer.array[e];t[s++]=this._textVertexBuffer.array.length;for(let e=0;e<this._textVertexBuffer.array.length;e++)n[s++]=this._textVertexBuffer.array[e];t[s++]=this._textIndexBuffer.array.length;for(let e=0;e<this._textIndexBuffer.array.length;e++)t[s++]=this._textIndexBuffer.array[e];return t.buffer}static _symbolsSerializationLength(e){let t=0;t+=1;for(let n of e||[]){t+=5,t+=1;for(let e of n.textColliders)t+=10;for(let e of n.iconColliders)t+=10;t+=1,t+=n.textVertexRanges.length*2,t+=1,t+=n.iconVertexRanges.length*2}return t}static serializeSymbols(e,t,n,r,i){i||=[],t[r++]=i.length;for(let e of i){t[r++]=e.anchor.x,t[r++]=e.anchor.y,t[r++]=e.symbolFeature.hash,t[r++]=e.symbolFeature.priority,t[r++]=e.symbolFeature.feature.featureIndex,t[r++]=e.textColliders.length+e.iconColliders.length;for(let i of e.textColliders)t[r++]=i.xTile,t[r++]=i.yTile,t[r++]=i.dxPixels,t[r++]=i.dyPixels,t[r++]=+!!i.hard,t[r++]=i.partIndex,n[r++]=i.minLod,n[r++]=i.maxLod,t[r++]=i.width,t[r++]=i.height;for(let i of e.iconColliders)t[r++]=i.xTile,t[r++]=i.yTile,t[r++]=i.dxPixels,t[r++]=i.dyPixels,t[r++]=+!!i.hard,t[r++]=i.partIndex,n[r++]=i.minLod,n[r++]=i.maxLod,t[r++]=i.width,t[r++]=i.height;t[r++]=e.textVertexRanges.length;for(let[n,i]of e.textVertexRanges)t[r++]=n,t[r++]=i;t[r++]=e.iconVertexRanges.length;for(let[n,i]of e.iconVertexRanges)t[r++]=n,t[r++]=i}return r}_replaceKeys(e,t){return e.replaceAll(/{([^{}]+)}/g,(e,n)=>n in t?t[n]:``)}_processFeature(e,t,n){let{line:r,iconMosaicItem:i,shaping:a,anchor:o}=e,c=this.zoom,l=this.layer,u=!!i,d=!0;u&&(d=t?.optional||!i);let f=a&&a.length>0,p=!f||n?.optional,m;if(u&&(m=this._placementEngine.getIconPlacement(o,i,t)),!m&&!d)return;let h;if(f&&(h=this._placementEngine.getTextPlacement(o,a,r,n)),h||p){if(m&&h||(!p&&!d?(m=null,h=null):!p&&!h?m=null:!d&&!m&&(h=null)),h){let t=l.hasDataDrivenText?l.textMaterial.encodeAttributes(e.symbolFeature.feature,c,l):null;if(this._storePlacedGlyphs(e,h.shapes,c,n.rotationAlignment,t),h.textColliders){e.textColliders=h.textColliders;for(let e of h.textColliders){e.minLod=Math.max(c+s(e.minLod),0),e.maxLod=Math.min(c+s(e.maxLod),25);let t=e.angle;if(t){let n=Math.cos(t),r=Math.sin(t),i=e.dxPixels*n-e.dyPixels*r,a=e.dxPixels*r+e.dyPixels*n,o=(e.dxPixels+e.width)*n-e.dyPixels*r,s=(e.dxPixels+e.width)*r+e.dyPixels*n,c=e.dxPixels*n-(e.dyPixels+e.height)*r,l=e.dxPixels*r+(e.dyPixels+e.height)*n,u=(e.dxPixels+e.width)*n-(e.dyPixels+e.height)*r,d=(e.dxPixels+e.width)*r+(e.dyPixels+e.height)*n,f=Math.min(i,o,c,u),p=Math.max(i,o,c,u),m=Math.min(a,s,l,d),h=Math.max(a,s,l,d);e.dxPixels=f,e.dyPixels=m,e.width=p-f,e.height=h-m}}}}if(m){let n=l.hasDataDrivenIcon?l.iconMaterial.encodeAttributes(e.symbolFeature.feature,c,l):null;if(this._addPlacedIcons(e,m.shapes,c,i.page,t.rotationAlignment===1,n),m.iconColliders){e.iconColliders=m.iconColliders;for(let e of m.iconColliders){e.minLod=Math.max(c+s(e.minLod),0),e.maxLod=Math.min(c+s(e.maxLod),25);let t=e.angle;if(t){let n=Math.cos(t),r=Math.sin(t),i=e.dxPixels*n-e.dyPixels*r,a=e.dxPixels*r+e.dyPixels*n,o=(e.dxPixels+e.width)*n-e.dyPixels*r,s=(e.dxPixels+e.width)*r+e.dyPixels*n,c=e.dxPixels*n-(e.dyPixels+e.height)*r,l=e.dxPixels*r+(e.dyPixels+e.height)*n,u=(e.dxPixels+e.width)*n-(e.dyPixels+e.height)*r,d=(e.dxPixels+e.width)*r+(e.dyPixels+e.height)*n,f=Math.min(i,o,c,u),p=Math.max(i,o,c,u),m=Math.min(a,s,l,d),h=Math.max(a,s,l,d);e.dxPixels=f,e.dyPixels=m,e.width=p-f,e.height=h-m}}}}}}_addPlacedIcons(e,t,n,r,i,a){let o=Math.max(n-1,0),c=this._iconVertexBuffer,l=this._iconIndexBuffer,u=this._markerMap;for(let d of t){let t=i?0:Math.max(n+s(d.minzoom),o),f=i?25:Math.min(n+s(d.maxzoom),25);if(f<=t)continue;let p=d.tl,m=d.tr,h=d.bl,g=d.br,_=d.mosaicRect,v=d.labelAngle,y=d.minAngle,b=d.maxAngle,x=d.anchor,S=c.index,C=_.x,w=_.y,T=C+_.width,E=w+_.height,D=c.index;c.add(x.x,x.y,p.x,p.y,C,w,v,y,b,t,f,a),c.add(x.x,x.y,m.x,m.y,T,w,v,y,b,t,f,a),c.add(x.x,x.y,h.x,h.y,C,E,v,y,b,t,f,a),c.add(x.x,x.y,g.x,g.y,T,E,v,y,b,t,f,a),e.iconVertexRanges.length>0&&e.iconVertexRanges[0][0]+e.iconVertexRanges[0][1]===D?e.iconVertexRanges[0][1]+=4:e.iconVertexRanges.push([D,4]),l.add(S,S+1,S+2),l.add(S+1,S+2,S+3),u.has(r)?u.get(r)[1]+=6:u.set(r,[this._iconIndexStart+this._iconIndexCount,6]),this._iconIndexCount+=6}}_addPlacedGlyphs(){let e=this._textVertexBuffer,t=this._textIndexBuffer,n=this._glyphMap;for(let[r,i]of this._glyphBufferDataStorage)for(let a of i){let i=e.index,o=a.symbolInstance,s=a.ddAttributes,c=e.index;e.add(a.glyphAnchor[0],a.glyphAnchor[1],a.tl[0],a.tl[1],a.xmin,a.ymin,a.labelAngle,a.minAngle,a.maxAngle,a.minLod,a.maxLod,s),e.add(a.glyphAnchor[0],a.glyphAnchor[1],a.tr[0],a.tr[1],a.xmax,a.ymin,a.labelAngle,a.minAngle,a.maxAngle,a.minLod,a.maxLod,s),e.add(a.glyphAnchor[0],a.glyphAnchor[1],a.bl[0],a.bl[1],a.xmin,a.ymax,a.labelAngle,a.minAngle,a.maxAngle,a.minLod,a.maxLod,s),e.add(a.glyphAnchor[0],a.glyphAnchor[1],a.br[0],a.br[1],a.xmax,a.ymax,a.labelAngle,a.minAngle,a.maxAngle,a.minLod,a.maxLod,s),o.textVertexRanges.length>0&&o.textVertexRanges[0][0]+o.textVertexRanges[0][1]===c?o.textVertexRanges[0][1]+=4:o.textVertexRanges.push([c,4]),t.add(i,i+1,i+2),t.add(i+1,i+2,i+3),n.has(r)?n.get(r)[1]+=6:n.set(r,[this._textIndexStart+this._textIndexCount,6]),this._textIndexCount+=6}this._glyphBufferDataStorage.clear()}_storePlacedGlyphs(e,t,n,r,i){let a=Math.max(n-1,0),o=r===1,c,l,u,d,f,p,m,h,g,_,v;for(let r of t)c=o?0:Math.max(n+s(r.minzoom),a),l=o?25:Math.min(n+s(r.maxzoom),25),!(l<=c)&&(u=r.tl,d=r.tr,f=r.bl,p=r.br,m=r.labelAngle,h=r.minAngle,g=r.maxAngle,_=r.anchor,v=r.mosaicRect,this._glyphBufferDataStorage.has(r.page)||this._glyphBufferDataStorage.set(r.page,[]),this._glyphBufferDataStorage.get(r.page).push({glyphAnchor:[_.x,_.y],tl:[u.x,u.y],tr:[d.x,d.y],bl:[f.x,f.y],br:[p.x,p.y],xmin:v.x,ymin:v.y,xmax:v.x+v.width,ymax:v.y+v.height,labelAngle:m,minAngle:h,maxAngle:g,minLod:c,maxLod:l,placementLod:a,symbolInstance:e,ddAttributes:i}))}static _pushAnchors(e,t,n,i){n+=i;let a=0,o=t.length-1;for(let e=0;e<o;e++)a+=r.distance(t[e],t[e+1]);let s=i||n;if(s*=.5,a<=s)return;let u=s/a;n=a/Math.max(Math.round(a/n),1);let d=0,f=-n/2,p=t.length-1;for(let r=0;r<p;r++){let i=t[r],a=t[r+1],o=a.x-i.x,s=a.y-i.y,p=Math.sqrt(o*o+s*s),m;for(;f+n<d+p;){f+=n;let t=(f-d)/p,h=c(i.x,a.x,t),g=c(i.y,a.y,t);m===void 0&&(m=Math.atan2(s,o)),e.push(new l(h,g,m,r,u))}d+=p}}static _pushCenterAnchor(e,t){let n=0,i=t.length-1;for(let e=0;e<i;e++)n+=r.distance(t[e],t[e+1]);let a=n/2,o=0,s=t.length-1;for(let n=0;n<s;n++){let r=t[n],i=t[n+1],s=i.x-r.x,u=i.y-r.y,d=Math.sqrt(s*s+u*u);if(a<o+d){let t=(a-o)/d,f=c(r.x,i.x,t),p=c(r.y,i.y,t),m=Math.atan2(u,s);e.push(new l(f,p,m,n,0));return}o+=d}}static _deviation(e,t,n){let r=(t.x-e.x)*(n.x-t.x)+(t.y-e.y)*(n.y-t.y),i=(t.x-e.x)*(n.y-t.y)-(t.y-e.y)*(n.x-t.x);return Math.atan2(i,r)}static _honorsTextMaxAngle(e,t,n,i,a){let o=0,s=n/2,c=new r(t.x,t.y),l=t.segment+1;for(;o>-s;){if(--l,l<0)return!1;o-=r.distance(e[l],c),c=e[l]}o+=r.distance(e[l],e[l+1]);let u=[],d=0,f=e.length;for(;o<s;){let t=e[l],n=l,s;do{if(++n,n===f)return!1;s=e[n]}while(s.isEqual(t));let c=n,p;do{if(++c,c===f)return!1;p=e[c]}while(p.isEqual(s));let m=this._deviation(t,s,p);for(u.push({deviation:m,distToAnchor:o}),d+=m;o-u[0].distToAnchor>a;)d-=u.shift().deviation;if(Math.abs(d)>i)return!1;o+=r.distance(s,p),l=n}return!0}static _smoothVertices(e,t){if(t<=0)return e;let n=e.length;if(n<3)return e;let i=[],a=0,o=0;i.push(0);for(let t=1;t<n;t++){let n=r.distance(e[t],e[t-1]);n>0&&(a+=n,i.push(a),o++,o!==t&&(e[o]=e[t]))}if(n=o+1,n<3)return e;t=Math.min(t,.2*a);let s=e[0].x,c=e[0].y,l=e[n-1].x,u=e[n-1].y,d=r.sub(e[0],e[1]);d.normalize(),e[0].x+=t*d.x,e[0].y+=t*d.y,d.assignSub(e[n-1],e[n-2]),d.normalize(),e[n-1].x+=t*d.x,e[n-1].y+=t*d.y,i[0]-=t,i[n-1]+=t;let f=[];f.push(new r(s,c));let p=1e-6,m=.5*t;for(let a=1;a<n-1;a++){let o=0,s=0,c=0;for(let n=a-1;n>=0;n--){let r=m+i[n+1]-i[a];if(r<0)break;let l=i[n+1]-i[n],u=i[a]-i[n]<m?1:r/l;if(u<p)break;let d=u*u,f=u*r-.5*d*l,h=u*l/t,g=e[n+1],_=e[n].x-g.x,v=e[n].y-g.y;o+=h/f*(g.x*u*r+.5*d*(r*_-l*g.x)-d*u*l*_/3),s+=h/f*(g.y*u*r+.5*d*(r*v-l*g.y)-d*u*l*v/3),c+=h}for(let r=a+1;r<n;r++){let n=m-i[r-1]+i[a];if(n<0)break;let l=i[r]-i[r-1],u=i[r]-i[a]<m?1:n/l;if(u<p)break;let d=u*u,f=u*n-.5*d*l,h=u*l/t,g=e[r-1],_=e[r].x-g.x,v=e[r].y-g.y;o+=h/f*(g.x*u*n+.5*d*(n*_-l*g.x)-d*u*l*_/3),s+=h/f*(g.y*u*n+.5*d*(n*v-l*g.y)-d*u*l*v/3),c+=h}f.push(new r(o/c,s/c))}return f.push(new r(l,u)),e[0].x=s,e[0].y=c,e[n-1].x=l,e[n-1].y=u,f}static _getPlacementCandidates(e,t,n,r){if(t!==0||n.type!==3||e.sourceType!==`geojson`)return r.map(e=>({anchor:null,vertices:e}));let i=p(r);return i?[{anchor:new l(i.x,i.y),vertices:i.vertices}]:[]}static _pushCentroid(e,t){let n=a,r=a,i=t.length-1,o=0,s=0,c=0,u=t[0].x,d=t[0].y;u>n&&(u=n),u<0&&(u=0),d>r&&(d=r),d<0&&(d=0);for(let e=1;e<i;e++){let i=t[e].x,a=t[e].y,l=t[e+1].x,f=t[e+1].y;i>n&&(i=n),i<0&&(i=0),a>r&&(a=r),a<0&&(a=0),l>n&&(l=n),l<0&&(l=0),f>r&&(f=r),f<0&&(f=0);let p=(i-u)*(f-d)-(l-u)*(a-d);o+=p*(u+i+l),s+=p*(d+a+f),c+=p}o/=3*c,s/=3*c,!isNaN(o)&&!isNaN(s)&&e.push(new l(o,s))}}export{_ as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{importLazily as e}from"../../../../../../../core/importUtils.js";import{memoize as t}from"../../../../../../../core/MapUtils.js";import{pt2px as n}from"../../../../../../../core/screenUtils.js";import{numericHash as r}from"../../../../../../../core/string.js";import{fromRotation as i,translate as a}from"../../../../../../../core/libs/gl-matrix-2/math/mat2d.js";import{create as o}from"../../../../../../../core/libs/gl-matrix-2/factories/mat2df32.js";import{transformMat2d as s,set as c,sub as l,normalize as u,add as d,scale as f}from"../../../../../../../core/libs/gl-matrix-2/math/vec2.js";import{fromValues as p}from"../../../../../../../core/libs/gl-matrix-2/factories/vec2f32.js";import{create as m}from"../../../../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{convertGeometryToFlat as h,convertOptimizedGeometryToFlat as g,convertFlatToOptimizedGeometry as _,FlatGeometry as v}from"../../../../../../../geometry/FlatGeometry.js";import{GeometryCursor as y}from"../../../../../../../geometry/GeometryCursor.js";import{getLabelPoint as b}from"../../../../../../../geometry/support/labelPoint.js";import{generalizeOptimizedGeometry as x,convertToGeometry as S}from"../../../../../../../layers/graphics/featureConversionUtils.js";import C from"../../../../../../../layers/graphics/OptimizedGeometry.js";import{tileSize as w}from"../../../definitions.js";import T from"../../../collisions/BoundingBox.js";import{LabelMetric as E}from"../../../collisions/LabelMetric.js";import{smoothPaths as D,pathDivide as O,closestPointOnPaths as k}from"../../../mesh/templates/segmentUtils.js";import{getMinMaxZoom as A,processColorInput as j}from"../fill/meshWriterUtils.js";import{TextMeshWriter as M,maxLabelZoom as N}from"../text/TextMeshWriter.js";const P=w*w/16;function F(e,t,n,r){if(n===0&&r===0)return null;let i=Math.max(e.xmax-e.xmin,e.ymax-e.ymin)+1;return{x:t.x-n*i,y:t.y+r*i}}const I=e(()=>import(`../../../../../../../geometry/operators/gx/operatorIntersection.js`)),L=e(()=>import(`../../../../../../../chunks/FlatGeometry.js`));function R(e,t,n){return r(`${e}${t}${n}`)}function z(e,t,n,i,a){let o=i*2**(N-a);return r(`${e}${t}${n}${o}`)}function B(e,t,n){return r(`${e}${t}${n}`)}function V(e,t,n,i,a){let o=n*2**(N-i);return r(`${e}${a}${t}${o}`)}const H=t(e=>{let t=0;if(e===0)return 1/0;for(;!(e%2);)t++,e/=2;return t});class U extends M{constructor(){super(...arguments),this.calloutRecordsUseLabelPhase=!0,this._zoomLevel=0,this._calloutVisuals=[],this._calloutVisualIndex=0}async loadDependencies(){await Promise.all([super.loadDependencies(),I.getImportPromise(),L.getImportPromise()])}getCalloutEffectGeometry(e){let t=this._calloutVisuals[this._calloutVisualIndex]?.metric;return t?y.fromJSON({x:t.anchorX,y:t.anchorY}):null}getLocalCalloutReferenceInfo(){let e=this._calloutVisuals[this._calloutVisualIndex],t=e?.referenceInfo;if(!t||!e)return t;let{metric:n,featureAnchor:r}=e,i=t.anchor??{x:0,y:0},a={x:r[0]-n.anchorX,y:n.anchorY-r[1]},o={x:a.x+i.x,y:a.y+i.y},s=F(t.bodyBounds,o,n.directionX,n.directionY);return{...t,anchor:o,...s?{layoutAnchor:s}:null}}getCalloutVisualCount(){return this._calloutVisuals.length}setCalloutVisualIndex(e){if(e<0||e>=this._calloutVisuals.length)throw Error(`InternalError: callout visual index is out of bounds`);this._calloutVisualIndex=e}includeCalloutRecordRange(e,t){this._calloutVisuals[this._calloutVisualIndex]?.metric.includeRecordRange(e,t)}includeCalloutCollisionBounds(e){this._calloutVisuals[this._calloutVisualIndex]?.metric.includeCalloutCollisionBounds(e)}includeCalloutPartCollisionBounds(e){this._calloutVisuals[this._calloutVisualIndex]?.metric.includeCalloutPartCollisionBounds(e)}_write(e,{target:t,effect:n,level:r,viewExtent:i}){if(this._zoomLevel=r,this._calloutVisuals=[],this._calloutVisualIndex=0,n?.geometry!=null)throw Error(`InternalError: EffectGeometry not support for LabelMeshWriter`);switch(t.geometryType){case`esriGeometryPoint`:{let n=t.readXForDisplay(),r=t.readYForDisplay();this._writePoint(e,n,r,0,t);break}case`esriGeometryEnvelope`:case`esriGeometryPolygon`:this._writePolygon(e,t,i);break;case`esriGeometryMultipoint`:{let n=0,r=y.fromFeatureSetReader(t);if(r?.nextPath())for(;r.nextPoint();)this._writePoint(e,r.x,r.y,n++,t);break}case`esriGeometryPolyline`:this._writeLines(e,t)}}_getMetricDir(){let{horizontalAlignment:e,verticalAlignment:t}=this.evaluatedMeshParams;return[e===`center`?0:e===`right`?-1:1,t===`middle`?0:t===`bottom`?-1:1]}_createLineLabelMetric(e,t,n,r,i,a){let[o,s]=this._getMetricDir(),c=this.evaluatedMeshParams.scaleInfo?.maxScale??0,l=this.evaluatedMeshParams.scaleInfo?.minScale??0,u=this.evaluatedMeshParams.labelClassId;return new E(e,u,t,n,r,i,o,s,c,l,a)}_writePolygon(e,t,n){let r=t.readGeometryForDisplay()?.justXY();e.requiresRefresh||=(r?.area()||0)>=P;let i=this._getPolygonLabelPoint(t,n);i&&this._writePoint(e,i[0],i[1],0,t)}_getPolygonLabelPoint(e,t){if(!t){let t=e.readCentroidForDisplay()?.coords;return t?[t[0],t[1]]:null}let n=I.module,r=L.module.constructFromFlatGeometry,i=e.readGeometryForDisplay()?.justXY(),a=e.readCentroidForDisplay()?.coords,o=i?.area()||0;if(!a)return;let s=o>=P,c=r(h(t)),l=r(h({x:a[0],y:a[1]})),u=!!n.execute(l,c,null);if(!i||!s||!u)return[a[0],a[1]];let d=r(g(`polygon`,i,null)),f=n.execute(d,c,null);if(!f)return[a[0],a[1]];let p=_(new v(f.toFlatGeometry())),m=y.fromOptimized(p,`esriGeometryPolygon`,1),x=b(m)??a;return[x[0],x[1]]}_writePoint(e,t,n,r,i){if(t<0||t>w||n<0||n>w)return;let a=this._getShaping();if(!a)return;let o=i.getDisplayId(),s=this.evaluatedMeshParams.labelClassId,c=this.evaluatedMeshParams.layerId,l=R(c,i.getObjectId(),r),u=B(i.getObjectId(),s,r),[d,f]=this._getMetricDir(),p=this.evaluatedMeshParams.scaleInfo?.maxScale??0,m=this.evaluatedMeshParams.scaleInfo?.minScale??0,h=this._getPointLabelReferenceBounds(),g=new E(o,s,l,u,t,n,d,f,p,m,h);this._calloutVisuals.push({metric:g,featureAnchor:[t,n],referenceInfo:this._createLocalCalloutReferenceInfo(a,h)}),e.metricStart(g),this._writeGlyphs(e,o,t,n,a,0,h,void 0,!1),e.metricBoxWrite(a.boundsT),e.metricEnd()}_getPointReferenceBounds(){return this._references?.get(`label-reference-symbol`)?.getBoundsInfo()??null}_getPointLabelReferenceBounds(){let e=this._getPointReferenceBounds()??{offsetX:0,offsetY:0,size:0},t=this.evaluatedMeshParams.labelOffsetDistance??0,[n,r]=this._getMetricDir();return{...e,offsetX:e.offsetX+n*t,offsetY:e.offsetY-r*t}}_writeLines(e,t){let{scaleInfo:n,verticalAlignment:r}=this.evaluatedMeshParams,i=this.evaluatedMeshParams.repeatLabelDistance||128,a=this._getShaping(`middle`);if(!a)return;let o=(e,t,n,r)=>this._placeSubdivGlyphs(e,t,n,r),s=(a.bounds.width+i)/2;this._current={out:e,id:t.getDisplayId(),objId:t.getObjectId(),shaping:a,zoomRange:A(n,this.getTileInfo()),referenceBounds:this._getPointReferenceBounds()||{offsetX:0,offsetY:0,size:0},calloutPaths:t.readLegacyGeometryForDisplay().paths.map(e=>e.map(([e,t])=>[e,t])),offsetDirection:null,pathIndex:0},this._verticalPlacement=r===`bottom`?`above`:r===`top`?`below`:null,this._verticalPlacement?this._writeAboveAndBelowAlong(t,o,s):this._writeCenterAlong(t,o,s)}_writeAboveAndBelowAlong(e,t,n){let{repeatLabel:r}=this.evaluatedMeshParams,{shaping:i}=this._current,a=i.bounds.halfHeight,o=e.readGeometryForDisplay()?.justXY();if(!o)return;let s=x(o,`esriGeometryPolyline`,1)??new C,c=W(s,a),l=W(s,-a),u=S(l,`esriGeometryPolyline`,!1,!1),d=S(c,`esriGeometryPolyline`,!1,!1),f=D(d.paths,i.bounds.width),p=D(u.paths,i.bounds.width);this._current.offsetDirection=`above`;for(let e=0;e<f.length;e++)this._current.pathIndex=e,O(f[e],n,t,!!r);this._current.offsetDirection=`below`;for(let e=0;e<p.length;e++)this._current.pathIndex=e,O(p[e],n,t,!!r)}_writeCenterAlong(e,t,n){let{repeatLabel:r}=this.evaluatedMeshParams,{shaping:i}=this._current,a=D(e.readLegacyGeometryForDisplay().paths,i.bounds.width);for(let e=0;e<a.length;e++)this._current.pathIndex=e,O(a[e],n,t,!!r)}_placeSubdivGlyphs(e,t,n,r){if(e.x<0||e.x>w||e.y<0||e.y>w)return;let{allowOverrun:i,labelPosition:a,repeatLabelDistance:o,layerId:s,labelClassId:c}=this.evaluatedMeshParams,{objId:l,shaping:u,pathIndex:d}=this._current,f=this._current.zoomRange[0],p=H(t),m=this._current.shaping.bounds.width/2,h=Math.sqrt(o||128)/2,g=Math.min(n,r-n),_=u.isMultiline?N:Math.log2(g/(h+m/2)),v=t===0?_:Math.min(p,_),y=Math.max(f,this._zoomLevel+1-v),b=this._zoomLevel-y,x=u.bounds.width/2*2**b,S=z(s,l,d,t,this._zoomLevel),C=V(l,d,t,this._zoomLevel,c);i&&b<0?this._placeStraightAlong(e,f,S,C):a===`parallel`||u.isMultiline?this._placeStraightAlong(e,y,S,C):a===`curved`&&this._placeCurved(e,y,x,S,C)}_placeCurved(e,t,n,r,i){let{out:a,id:o}=this._current,s=this._createLineLabelMetric(o,r,i,e.x,e.y);this._registerLineCalloutMetric(s),a.metricStart(s);let c=e.clone(),l=e.angle*(180/Math.PI)%360,u=(e.angle*(180/Math.PI)+180)%360;(!this._verticalPlacement||this._verticalPlacement===this._current.offsetDirection)&&(this._placeFirst(c,t,1,l),this._placeBack(e,c,t,n,1,l),this._placeForward(e,c,t,n,1,l)),(!this._verticalPlacement||this._verticalPlacement!==this._current.offsetDirection)&&(this._placeFirst(c,t,0,u),this._placeBack(e,c,t,n,0,u),this._placeForward(e,c,t,n,0,u)),a.metricEnd()}_placeStraightAlong(e,t,r,s){let{out:c,id:l,shaping:u,zoomRange:d,referenceBounds:f}=this._current,{boxBorderLineColor:m,boxBackgroundColor:h}=this.evaluatedMeshParams,g=e.clone(),_=e.angle*(180/Math.PI)%360,v=(e.angle*(180/Math.PI)+180)%360,y=u.glyphs.length>0&&!!(m||h),b=this._createLineLabelMetric(l,r,s,e.x,e.y);if(this._registerLineCalloutMetric(b),c.metricStart(b),y){let r=Math.max(t,d[0],0),s=Math.min(N,d[1]),m=i(o(),-e.angle),h={minZoom:r,maxZoom:s,clipAngle:_,mapAligned:!0,isLineLabel:!0},g=n(this.evaluatedMeshParams.offsetX),y=n(this.evaluatedMeshParams.offsetY);if(!this._verticalPlacement||this._verticalPlacement===this._current.offsetDirection){let t=p(g,-1*y),[n,r]=u.shapeBackground(a(o(),m,t));c.recordStart(this.instanceId,this.attributeLayout,u.glyphs[0].textureBinding),this._writeTextBox(c,l,e.x,e.y,r,f,h),c.recordEnd()}if(!this._verticalPlacement||this._verticalPlacement!==this._current.offsetDirection){let t=p(g,y),[n,r]=u.shapeBackground(a(o(),m,t));h.clipAngle=v,c.recordStart(this.instanceId,this.attributeLayout,u.glyphs[0].textureBinding),this._writeTextBox(c,l,e.x,e.y,r,f,h),c.recordEnd()}}(!this._verticalPlacement||this._verticalPlacement===this._current.offsetDirection)&&this._placeFirst(g,t,1,_,!0),(!this._verticalPlacement||this._verticalPlacement!==this._current.offsetDirection)&&this._placeFirst(g,t,0,v,!0),c.metricEnd()}_registerLineCalloutMetric(e){this._calloutVisuals.push({metric:e,featureAnchor:k(this._current.calloutPaths,e.anchorX,e.anchorY),referenceInfo:this._createLocalCalloutReferenceInfo(this._current.shaping)})}_placeBack(e,t,n,r,i,a){let o=e.clone(),s=e.backwardLength+0;for(;o.prev()&&!(s>=r);)this._placeOnSegment(o,t,s,n,-1,i,a),s+=o.length+0}_placeForward(e,t,n,r,i,a){let o=e.clone(),s=e.remainingLength+0;for(;o.next()&&!(s>=r);)this._placeOnSegment(o,t,s,n,1,i,a),s+=o.length+0}_placeFirst(e,t,n,r,i=!1){let{out:a,id:o,shaping:s,zoomRange:c,referenceBounds:l}=this._current,u=s.glyphs,d=this._getBoundsOffset(e.angle);for(let f of u){let u=f.x>s.bounds.x?n:1-n,p=u*e.remainingLength+(1-u)*e.backwardLength,m=Math.abs(f.x+f.width/2-s.bounds.x),h=Math.max(0,this._zoomLevel+Math.log2(m/(p+0))),g=Math.max(t,i?0:h);f.angle=e.angle+(1-n)*Math.PI;let _=[Math.max(c[0],g),Math.min(c[1],N)];this._writeLineGlyph(a,o,e.x,e.y,f,_,r,l),this._writeLineGlyphBox(a,f,n,_,d)}}_placeOnSegment(e,t,n,r,i,a,o){let{out:s,id:c,shaping:l,referenceBounds:u}=this._current,d=l.glyphs,f=e.dx/e.length,p=e.dy/e.length,m={x:e.x+n*-i*f,y:e.y+n*-i*p},h=this._getBoundsOffset(e.angle);for(let t of d){let d=t.x>l.bounds.x?a:1-a;if(!(d&&i===1||!d&&i===-1))continue;let f=Math.abs(t.x+t.width/2-l.bounds.x),p=Math.max(0,this._zoomLevel+Math.log2(f/n)-.1),g=Math.max(r,this._zoomLevel+Math.log2(f/(n+e.length+0)));if(p===0)continue;t.angle=e.angle+(1-a)*Math.PI;let _=[g,p];this._writeLineGlyph(s,c,m.x,m.y,t,_,o,u),this._writeLineGlyphBox(s,t,a,_,h)}}_getBoundsOffset(e){let t=n(this.evaluatedMeshParams.offsetX),r=n(this.evaluatedMeshParams.offsetY),a=p(t,r),c=i(o(),-e);return s(a,a,c)}_writeLineGlyph(e,t,n,r,i,a,o,s){e.recordStart(this.instanceId,this.attributeLayout,i.textureBinding);let{texcoords:c,offsets:l}=i,{fontSize:u,haloSize:d,outlineSize:f}=this._textMeshTransformProps,p=this._getDefaultGlyphMetrics(this.evaluatedMeshParams.glyphs),m=i.fontSize??u;this._writeQuad(e,t,n,r,{sdfSize:p.sdfSize,sdfRadius:p.sdfRadius,texcoords:c,offsets:l,fontSize:m,haloSize:d,outlineSize:f,color:i.color?j(i.color):j(this.evaluatedMeshParams.color),isBackground:!1,referenceBounds:s,minZoom:Math.max(this._current.zoomRange[0],a[0]),maxZoom:Math.min(this._current.zoomRange[1],a[1]),clipAngle:o,mapAligned:!0,isLineLabel:!0}),e.recordEnd()}_writeLineGlyphBox(e,t,n,r,i){if((n||this._current.offsetDirection)&&this._isVisible(r)&&t.bounds){let n=t.bounds,r=new T(n.x+i[0],n.y+i[1],n.width,n.height);e.metricBoxWrite(r)}}_isVisible(e){let t=Math.max(this._current.zoomRange[0],e[0]),n=Math.min(this._current.zoomRange[1],e[1]),r=this._zoomLevel;return t<=r&&r<=n}}function W(e,t){let n=new C,{coords:r,lengths:i}=e,a=m(),o=m(),s=m(),p=m(),h=m(),g=m(),_=0;for(let e=0;e<i.length;e++){let m=i[e];for(let e=0;e<m;e++){let i=2*(e+_-1),v=2*(e+_),y=2*(e+_+1);e>0?c(a,r[i],r[i+1]):c(a,0,0),c(o,r[v],r[v+1]),e<m-1?c(s,r[y],r[y+1]):c(s,0,0),e===0?c(p,0,0):(l(p,o,a),u(p,p),c(p,p[1],-p[0])),e===m-1?c(h,0,0):(l(h,s,o),u(h,h),c(h,h[1],-h[0])),d(g,p,h),u(g,g);let b=g[0]*h[0]+g[1]*h[1];b!==0&&f(g,g,b),f(g,g,t),n.coords.push(o[0]+g[0],o[1]+g[1])}n.lengths.push(m),_+=m}return n}export{U as LabelMeshWriter,R as labelIdHash,B as labelMetricHash,z as lineLabelIdHash,V as lineLabelMetricHash};
2
+ import{importLazily as e}from"../../../../../../../core/importUtils.js";import{memoize as t}from"../../../../../../../core/MapUtils.js";import{pt2px as n}from"../../../../../../../core/screenUtils.js";import{numericHash as r}from"../../../../../../../core/string.js";import{fromRotation as i,translate as a}from"../../../../../../../core/libs/gl-matrix-2/math/mat2d.js";import{create as o}from"../../../../../../../core/libs/gl-matrix-2/factories/mat2df32.js";import{transformMat2d as s,set as c,sub as l,normalize as u,add as d,scale as f}from"../../../../../../../core/libs/gl-matrix-2/math/vec2.js";import{fromValues as p}from"../../../../../../../core/libs/gl-matrix-2/factories/vec2f32.js";import{create as m}from"../../../../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{convertGeometryToFlat as h,convertOptimizedGeometryToFlat as g,convertFlatToOptimizedGeometry as _,FlatGeometry as v}from"../../../../../../../geometry/FlatGeometry.js";import{GeometryCursor as y}from"../../../../../../../geometry/GeometryCursor.js";import{getLabelPoint as b}from"../../../../../../../geometry/support/labelPoint.js";import{generalizeOptimizedGeometry as x,convertToGeometry as S}from"../../../../../../../layers/graphics/featureConversionUtils.js";import C from"../../../../../../../layers/graphics/OptimizedGeometry.js";import{tileSize as w}from"../../../definitions.js";import T from"../../../collisions/BoundingBox.js";import{LabelMetric as E}from"../../../collisions/LabelMetric.js";import{smoothPaths as D,pathDivide as O,closestPointOnPaths as k}from"../../../mesh/templates/segmentUtils.js";import{getMinMaxZoom as A,processColorInput as j}from"../fill/meshWriterUtils.js";import{TextMeshWriter as M,maxLabelZoom as N}from"../text/TextMeshWriter.js";const P=w*w/16;function F(e,t,n,r){if(n===0&&r===0)return null;let i=Math.max(e.xmax-e.xmin,e.ymax-e.ymin)+1;return{x:t.x-n*i,y:t.y+r*i}}const I=e(()=>import(`../../../../../../../geometry/operators/gx/operatorIntersection.js`)),L=e(()=>import(`../../../../../../../chunks/FlatGeometry.js`));function R(e,t,n){return r(`${e}${t}${n}`)}function z(e,t,n,i,a){let o=i*2**(N-a);return r(`${e}${t}${n}${o}`)}function B(e,t,n){return r(`${e}${t}${n}`)}function V(e,t,n,i,a){let o=n*2**(N-i);return r(`${e}${a}${t}${o}`)}const H=t(e=>{let t=0;if(e===0)return 1/0;for(;!(e%2);)t++,e/=2;return t});class U extends M{constructor(){super(...arguments),this.calloutRecordsUseLabelPhase=!0,this._zoomLevel=0,this._calloutVisuals=[],this._calloutVisualIndex=0}async loadDependencies(){await Promise.all([super.loadDependencies(),I.getImportPromise(),L.getImportPromise()])}getCalloutEffectGeometry(e){let t=this._calloutVisuals[this._calloutVisualIndex]?.metric;return t?y.fromJSON({x:t.anchorX,y:t.anchorY}):null}getLocalCalloutReferenceInfo(){let e=this._calloutVisuals[this._calloutVisualIndex],t=e?.referenceInfo;if(!t||!e)return t;let{metric:n,featureAnchor:r}=e,i=t.anchor??{x:0,y:0},a={x:r[0]-n.anchorX,y:n.anchorY-r[1]},o={x:a.x+i.x,y:a.y+i.y},s=F(t.bodyBounds,o,n.directionX,n.directionY);return{...t,anchor:o,...s?{layoutAnchor:s}:null}}getCalloutVisualCount(){return this._calloutVisuals.length}setCalloutVisualIndex(e){if(e<0||e>=this._calloutVisuals.length)throw Error(`InternalError: callout visual index is out of bounds`);this._calloutVisualIndex=e}includeCalloutRecordRange(e,t){this._calloutVisuals[this._calloutVisualIndex]?.metric.includeRecordRange(e,t)}includeCalloutCollisionBounds(e){this._calloutVisuals[this._calloutVisualIndex]?.metric.includeCalloutCollisionBounds(e)}includeCalloutPartCollisionBounds(e){this._calloutVisuals[this._calloutVisualIndex]?.metric.includeCalloutPartCollisionBounds(e)}_write(e,{target:t,effect:n,level:r,viewExtent:i}){if(this._zoomLevel=r,this._calloutVisuals=[],this._calloutVisualIndex=0,n?.geometry!=null)throw Error(`InternalError: EffectGeometry not support for LabelMeshWriter`);switch(t.geometryType){case`esriGeometryPoint`:{let n=t.readXForDisplay(),r=t.readYForDisplay();this._writePoint(e,n,r,0,t);break}case`esriGeometryEnvelope`:case`esriGeometryPolygon`:this._writePolygon(e,t,i);break;case`esriGeometryMultipoint`:{let n=0,r=y.fromFeatureSetReader(t);if(r?.nextPath())for(;r.nextPoint();)this._writePoint(e,r.x,r.y,n++,t);break}case`esriGeometryPolyline`:this._writeLines(e,t)}}_getMetricDir(){let{horizontalAlignment:e,verticalAlignment:t}=this.evaluatedMeshParams;return[e===`center`?0:e===`right`?-1:1,t===`middle`?0:t===`bottom`?-1:1]}_createLineLabelMetric(e,t,n,r,i,a){let[o,s]=this._getMetricDir(),c=this.evaluatedMeshParams.scaleInfo?.maxScale??0,l=this.evaluatedMeshParams.scaleInfo?.minScale??0,u=this.evaluatedMeshParams.labelClassId;return new E(e,u,t,n,r,i,o,s,c,l,a)}_writePolygon(e,t,n){let r=t.readGeometryForDisplay()?.justXY();e.requiresRefresh||=(r?.area()||0)>=P;let i=this._getPolygonLabelPoint(t,n);i&&this._writePoint(e,i[0],i[1],0,t)}_getPolygonLabelPoint(e,t){if(!t){let t=e.readCentroidForDisplay()?.coords;return t?[t[0],t[1]]:null}let n=I.module,r=L.module.constructFromFlatGeometry,i=e.readGeometryForDisplay()?.justXY(),a=e.readCentroidForDisplay()?.coords,o=i?.area()||0;if(!a)return;let s=o>=P,c=r(h(t)),l=r(h({x:a[0],y:a[1]})),u=!!n.execute(l,c,null);if(!i||!s||!u)return[a[0],a[1]];let d=r(g(`polygon`,i,null)),f=n.execute(d,c,null);if(!f)return[a[0],a[1]];let p=_(new v(f.toFlatGeometry())),m=y.fromOptimized(p,`esriGeometryPolygon`,1),x=b(m)??a;return[x[0],x[1]]}_writePoint(e,t,n,r,i){if(t<0||t>w||n<0||n>w)return;let a=this._getShaping();if(!a)return;let o=i.getDisplayId(),s=this.evaluatedMeshParams.labelClassId,c=this.evaluatedMeshParams.layerId,l=R(c,i.getObjectId(),r),u=B(i.getObjectId(),s,r),[d,f]=this._getMetricDir(),p=this.evaluatedMeshParams.scaleInfo?.maxScale??0,m=this.evaluatedMeshParams.scaleInfo?.minScale??0,h=this._getPointLabelReferenceBounds(),g=new E(o,s,l,u,t,n,d,f,p,m,h);this._calloutVisuals.push({metric:g,featureAnchor:[t,n],referenceInfo:this._createLocalCalloutReferenceInfo(a,h)}),e.metricStart(g),this._writeGlyphs(e,o,t,n,a,0,h,void 0,!1),e.metricBoxWrite(a.boundsT),e.metricEnd()}_getPointReferenceBounds(){return this._references?.get(`label-reference-symbol`)?.getBoundsInfo()??null}_getPointLabelReferenceBounds(){let e=this._getPointReferenceBounds()??{offsetX:0,offsetY:0,size:0},t=this.evaluatedMeshParams.labelOffsetDistance??0,[n,r]=this._getMetricDir();return{...e,offsetX:e.offsetX+n*t,offsetY:e.offsetY-r*t}}_writeLines(e,t){let{scaleInfo:n,verticalAlignment:r}=this.evaluatedMeshParams,i=this.evaluatedMeshParams.repeatLabelDistance||128,a=this._getShaping(`middle`);if(!a)return;let o=(e,t,n,r)=>this._placeSubdivGlyphs(e,t,n,r),s=(a.bounds.width+i)/2;this._current={out:e,id:t.getDisplayId(),objId:t.getObjectId(),shaping:a,zoomRange:A(n,this.getTileInfo()),referenceBounds:this._getPointReferenceBounds()||{offsetX:0,offsetY:0,size:0},calloutPaths:t.readLegacyGeometryForDisplay().paths.map(e=>e.map(([e,t])=>[e,t])),offsetDirection:null,pathIndex:0},this._verticalPlacement=r===`bottom`?`above`:r===`top`?`below`:null,this._verticalPlacement?this._writeAboveAndBelowAlong(t,o,s):this._writeCenterAlong(t,o,s)}_writeAboveAndBelowAlong(e,t,n){let{repeatLabel:r}=this.evaluatedMeshParams,{shaping:i}=this._current,a=i.bounds.halfHeight,o=e.readGeometryForDisplay()?.justXY();if(!o)return;let s=x(o,`esriGeometryPolyline`,1)??new C,c=W(s,a),l=W(s,-a),u=S(l,`esriGeometryPolyline`,!1,!1),d=S(c,`esriGeometryPolyline`,!1,!1),f=D(d.paths,i.bounds.width),p=D(u.paths,i.bounds.width);this._current.offsetDirection=`above`;for(let e=0;e<f.length;e++)this._current.pathIndex=e,O(f[e],n,t,!!r);this._current.offsetDirection=`below`;for(let e=0;e<p.length;e++)this._current.pathIndex=e,O(p[e],n,t,!!r)}_writeCenterAlong(e,t,n){let{repeatLabel:r}=this.evaluatedMeshParams,{shaping:i}=this._current,a=D(e.readLegacyGeometryForDisplay().paths,i.bounds.width);for(let e=0;e<a.length;e++)this._current.pathIndex=e,O(a[e],n,t,!!r)}_placeSubdivGlyphs(e,t,n,r){if(e.x<0||e.x>w||e.y<0||e.y>w)return;let{allowOverrun:i,labelPosition:a,repeatLabelDistance:o,layerId:s,labelClassId:c}=this.evaluatedMeshParams,{objId:l,shaping:u,pathIndex:d}=this._current,f=this._current.zoomRange[0],p=H(t),m=this._current.shaping.bounds.width/2,h=Math.sqrt(o||128)/2,g=Math.min(n,r-n),_=u.isMultiline?N:Math.log2(g/(h+m/2)),v=t===0?_:Math.min(p,_),y=Math.max(f,this._zoomLevel+1-v),b=this._zoomLevel-y,x=u.bounds.width/2*2**b,S=z(s,l,d,t,this._zoomLevel),C=V(l,d,t,this._zoomLevel,c);i&&b<0?this._placeStraightAlong(e,f,S,C):a===`parallel`||u.isMultiline?this._placeStraightAlong(e,y,S,C):a===`curved`&&this._placeCurved(e,y,x,S,C)}_placeCurved(e,t,n,r,i){let{out:a,id:o}=this._current,s=this._createLineLabelMetric(o,r,i,e.x,e.y);this._registerLineCalloutMetric(s),a.metricStart(s);let c=e.clone(),l=e.angle*(180/Math.PI)%360,u=(e.angle*(180/Math.PI)+180)%360;this._verticalPlacement&&this._verticalPlacement!==this._current.offsetDirection||(this._placeFirst(c,t,1,l),this._placeBack(e,c,t,n,1,l),this._placeForward(e,c,t,n,1,l)),this._verticalPlacement&&this._verticalPlacement===this._current.offsetDirection||(this._placeFirst(c,t,0,u),this._placeBack(e,c,t,n,0,u),this._placeForward(e,c,t,n,0,u)),a.metricEnd()}_placeStraightAlong(e,t,r,s){let{out:c,id:l,shaping:u,zoomRange:d,referenceBounds:f}=this._current,{boxBorderLineColor:m,boxBackgroundColor:h}=this.evaluatedMeshParams,g=e.clone(),_=e.angle*(180/Math.PI)%360,v=(e.angle*(180/Math.PI)+180)%360,y=u.glyphs.length>0&&!!(m||h),b=this._createLineLabelMetric(l,r,s,e.x,e.y);if(this._registerLineCalloutMetric(b),c.metricStart(b),y){let r=Math.max(t,d[0],0),s=Math.min(N,d[1]),m=i(o(),-e.angle),h={minZoom:r,maxZoom:s,clipAngle:_,mapAligned:!0,isLineLabel:!0},g=n(this.evaluatedMeshParams.offsetX),y=n(this.evaluatedMeshParams.offsetY);if(!this._verticalPlacement||this._verticalPlacement===this._current.offsetDirection){let t=p(g,-1*y),[n,r]=u.shapeBackground(a(o(),m,t));c.recordStart(this.instanceId,this.attributeLayout,u.glyphs[0].textureBinding),this._writeTextBox(c,l,e.x,e.y,r,f,h),c.recordEnd()}if(!this._verticalPlacement||this._verticalPlacement!==this._current.offsetDirection){let t=p(g,y),[n,r]=u.shapeBackground(a(o(),m,t));h.clipAngle=v,c.recordStart(this.instanceId,this.attributeLayout,u.glyphs[0].textureBinding),this._writeTextBox(c,l,e.x,e.y,r,f,h),c.recordEnd()}}this._verticalPlacement&&this._verticalPlacement!==this._current.offsetDirection||this._placeFirst(g,t,1,_,!0),this._verticalPlacement&&this._verticalPlacement===this._current.offsetDirection||this._placeFirst(g,t,0,v,!0),c.metricEnd()}_registerLineCalloutMetric(e){this._calloutVisuals.push({metric:e,featureAnchor:k(this._current.calloutPaths,e.anchorX,e.anchorY),referenceInfo:this._createLocalCalloutReferenceInfo(this._current.shaping)})}_placeBack(e,t,n,r,i,a){let o=e.clone(),s=e.backwardLength+0;for(;o.prev()&&!(s>=r);)this._placeOnSegment(o,t,s,n,-1,i,a),s+=o.length+0}_placeForward(e,t,n,r,i,a){let o=e.clone(),s=e.remainingLength+0;for(;o.next()&&!(s>=r);)this._placeOnSegment(o,t,s,n,1,i,a),s+=o.length+0}_placeFirst(e,t,n,r,i=!1){let{out:a,id:o,shaping:s,zoomRange:c,referenceBounds:l}=this._current,u=s.glyphs,d=this._getBoundsOffset(e.angle);for(let f of u){let u=f.x>s.bounds.x?n:1-n,p=u*e.remainingLength+(1-u)*e.backwardLength,m=Math.abs(f.x+f.width/2-s.bounds.x),h=Math.max(0,this._zoomLevel+Math.log2(m/(p+0))),g=Math.max(t,i?0:h);f.angle=e.angle+(1-n)*Math.PI;let _=[Math.max(c[0],g),Math.min(c[1],N)];this._writeLineGlyph(a,o,e.x,e.y,f,_,r,l),this._writeLineGlyphBox(a,f,n,_,d)}}_placeOnSegment(e,t,n,r,i,a,o){let{out:s,id:c,shaping:l,referenceBounds:u}=this._current,d=l.glyphs,f=e.dx/e.length,p=e.dy/e.length,m={x:e.x+n*-i*f,y:e.y+n*-i*p},h=this._getBoundsOffset(e.angle);for(let t of d){let d=t.x>l.bounds.x?a:1-a;if(!(d&&i===1||!d&&i===-1))continue;let f=Math.abs(t.x+t.width/2-l.bounds.x),p=Math.max(0,this._zoomLevel+Math.log2(f/n)-.1),g=Math.max(r,this._zoomLevel+Math.log2(f/(n+e.length+0)));if(p===0)continue;t.angle=e.angle+(1-a)*Math.PI;let _=[g,p];this._writeLineGlyph(s,c,m.x,m.y,t,_,o,u),this._writeLineGlyphBox(s,t,a,_,h)}}_getBoundsOffset(e){let t=n(this.evaluatedMeshParams.offsetX),r=n(this.evaluatedMeshParams.offsetY),a=p(t,r),c=i(o(),-e);return s(a,a,c)}_writeLineGlyph(e,t,n,r,i,a,o,s){e.recordStart(this.instanceId,this.attributeLayout,i.textureBinding);let{texcoords:c,offsets:l}=i,{fontSize:u,haloSize:d,outlineSize:f}=this._textMeshTransformProps,p=this._getDefaultGlyphMetrics(this.evaluatedMeshParams.glyphs),m=i.fontSize??u;this._writeQuad(e,t,n,r,{sdfSize:p.sdfSize,sdfRadius:p.sdfRadius,texcoords:c,offsets:l,fontSize:m,haloSize:d,outlineSize:f,color:i.color?j(i.color):j(this.evaluatedMeshParams.color),isBackground:!1,referenceBounds:s,minZoom:Math.max(this._current.zoomRange[0],a[0]),maxZoom:Math.min(this._current.zoomRange[1],a[1]),clipAngle:o,mapAligned:!0,isLineLabel:!0}),e.recordEnd()}_writeLineGlyphBox(e,t,n,r,i){if((n||this._current.offsetDirection)&&this._isVisible(r)&&t.bounds){let n=t.bounds,r=new T(n.x+i[0],n.y+i[1],n.width,n.height);e.metricBoxWrite(r)}}_isVisible(e){let t=Math.max(this._current.zoomRange[0],e[0]),n=Math.min(this._current.zoomRange[1],e[1]),r=this._zoomLevel;return t<=r&&r<=n}}function W(e,t){let n=new C,{coords:r,lengths:i}=e,a=m(),o=m(),s=m(),p=m(),h=m(),g=m(),_=0;for(let e=0;e<i.length;e++){let m=i[e];for(let e=0;e<m;e++){let i=2*(e+_-1),v=2*(e+_),y=2*(e+_+1);e>0?c(a,r[i],r[i+1]):c(a,0,0),c(o,r[v],r[v+1]),e<m-1?c(s,r[y],r[y+1]):c(s,0,0),e===0?c(p,0,0):(l(p,o,a),u(p,p),c(p,p[1],-p[0])),e===m-1?c(h,0,0):(l(h,s,o),u(h,h),c(h,h[1],-h[0])),d(g,p,h),u(g,g);let b=g[0]*h[0]+g[1]*h[1];b!==0&&f(g,g,b),f(g,g,t),n.coords.push(o[0]+g[0],o[1]+g[1])}n.lengths.push(m),_+=m}return n}export{U as LabelMeshWriter,R as labelIdHash,B as labelMetricHash,z as lineLabelIdHash,V as lineLabelMetricHash};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import e from"../../../core/Handles.js";import{deg2rad as t}from"../../../core/mathUtils.js";import{destroyMaybe as n}from"../../../core/maybe.js";import{watch as r,initial as i}from"../../../core/reactiveUtils.js";import{convertUnit as a}from"../../../core/units.js";import{fromRotation as o,translate as s,rotate as c,scaleByVec2 as l}from"../../../core/libs/gl-matrix-2/math/mat3.js";import{create as u}from"../../../core/libs/gl-matrix-2/factories/mat3f32.js";import{set as d,sub as f,scale as p,rotate as m}from"../../../core/libs/gl-matrix-2/math/vec2.js";import{ZEROS as h}from"../../../core/libs/gl-matrix-2/factories/vec2f32.js";import{create as g}from"../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{isLoadedOrLoadFor as _,project as v}from"../../../geometry/projectionUtils.js";import{getClosestDenormalizedXToReference as y}from"../../../geometry/support/normalizeUtils.js";import{getResolutionForScale as b}from"../../../geometry/support/scaleUtils.js";import{equals as x}from"../../../geometry/support/spatialReferenceUtils.js";import{DisplayObject as S}from"../engine/DisplayObject.js";import{GridTechnique as C}from"../engine/webgl/shaderGraph/techniques/grid/GridTechnique.js";import{minimumPixelsPerStrideForDisplayWhenScalingOff as w}from"./constants.js";import{measureMetersPerUnitAtReferencePoint as T,getScaleFactor as E}from"./gridUtils.js";const D=g();class O extends S{constructor(){super(),this._handles=new e,this._projectedCenter=null,this._metersPerSRUnit=null,this._technique=new C,this._grid=null,this.visible=!0}destroy(){super.destroy(),this._handles=n(this._handles),this._technique.shutdown()}get grid(){return this._grid}set grid(e){this._grid=e,this._handles.removeAll(),this._handles.add([r(()=>e?.center,()=>{this._projectedCenter=null},i),r(()=>[e?.center,e?.dynamicScaling,e?.majorLineColor,e?.majorLineInterval,e?.minorLineColor,e?.rotateWithMap,e?.rotation,e?.spacing,e?.units],()=>this.requestRender(),i)])}_createTransforms(){return{displayViewScreenMat3:u()}}doRender(e){if(e.drawPhase!==1||this.grid==null||!this.visible)return;let{spacing:t,units:n,majorLineInterval:r,dynamicScaling:i,majorLineColor:o,minorLineColor:s}=this.grid;if(t===0||(this._updateDerivedValues(e),this._projectedCenter==null||this._metersPerSRUnit==null))return;let{scale:c,spatialReference:l}=e.state,u=a(t,n,`meters`),d=this._metersPerSRUnit*b(c,l),f=u/d;if(!i&&f<w)return;let p=u*E(r,f,i);this._updateTransform(e,d,p),this._technique.render(e,{transform:{dvs:this.transforms.displayViewScreenMat3},config:{pxPerCell:p/d,minorLineColor:A(s),majorLineColor:A(o),majorLineInterval:r,halfWidth:.25,aaWidth:.5}})}_updateDerivedValues(e){if(!this.grid)return;let{center:t}=this.grid,{spatialReference:n}=e.state;(!this._projectedCenter||!x(this._projectedCenter.spatialReference,n))&&(this._metersPerSRUnit=null,x(t.spatialReference,n)?this._projectedCenter=t:_(t.spatialReference,n)?this._projectedCenter=v(t,n):this.requestRender()),this._metersPerSRUnit==null&&this._projectedCenter!=null&&(this._metersPerSRUnit=T(this._projectedCenter))}_updateTransform(e,n,r){let{grid:i}=this,{center:a,rotation:u,size:g,spatialReference:_}=e.state;if(i==null||this._projectedCenter==null||this._metersPerSRUnit==null)return;let v=n*(g[0]/2),b=n*(g[1]/2),x=this._metersPerSRUnit/r,S=this._projectedCenter,C=t(i.rotation),w=t(u),T=this.transforms.displayViewScreenMat3;o(T,-C);let E=_.isWrappable?y(S.x,a[0],_):S.x,O=d(D,E,S.y),A=f(D,a,O);p(A,A,x),i.rotateWithMap||m(A,A,h,-w),m(A,A,h,-C),p(A,A,1/i.majorLineInterval),k(A,A),p(A,A,i.majorLineInterval),m(A,A,h,C),s(T,T,A),i.rotateWithMap&&c(T,T,w);let j=v/r,M=b/r,N=d(D,j,M);l(T,T,N)}}function k(e,t){return e[0]=t[0]-Math.trunc(t[0]),e[1]=t[1]-Math.trunc(t[1]),e}function A(e){let[t,n,r,i]=e.toArray().map(e=>e/255);return[t*i,n*i,r*i,i]}export{O as default};
2
+ import e from"../../../core/Handles.js";import{deg2rad as t}from"../../../core/mathUtils.js";import{destroyMaybe as n}from"../../../core/maybe.js";import{watch as r,initial as i}from"../../../core/reactiveUtils.js";import{convertUnit as a}from"../../../core/units.js";import{fromRotation as o,translate as s,rotate as c,scaleByVec2 as l}from"../../../core/libs/gl-matrix-2/math/mat3.js";import{create as u}from"../../../core/libs/gl-matrix-2/factories/mat3f32.js";import{set as d,sub as f,scale as p,rotate as m}from"../../../core/libs/gl-matrix-2/math/vec2.js";import{ZEROS as h}from"../../../core/libs/gl-matrix-2/factories/vec2f32.js";import{create as g}from"../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{isLoadedOrLoadFor as _,project as v}from"../../../geometry/projectionUtils.js";import{getClosestDenormalizedXToReference as y}from"../../../geometry/support/normalizeUtils.js";import{getResolutionForScale as b}from"../../../geometry/support/scaleUtils.js";import{equals as x}from"../../../geometry/support/spatialReferenceUtils.js";import{DisplayObject as S}from"../engine/DisplayObject.js";import{GridTechnique as C}from"../engine/webgl/shaderGraph/techniques/grid/GridTechnique.js";import{minimumPixelsPerStrideForDisplayWhenScalingOff as w}from"./constants.js";import{measureMetersPerUnitAtReferencePoint as T,getScaleFactor as E}from"./gridUtils.js";const D=g();class O extends S{constructor(){super(),this._handles=new e,this._projectedCenter=null,this._metersPerSRUnit=null,this._technique=new C,this._grid=null,this.visible=!0}destroy(){super.destroy(),this._handles=n(this._handles),this._technique.shutdown()}get grid(){return this._grid}set grid(e){this._grid=e,this._handles.removeAll(),this._handles.add([r(()=>e?.center,()=>{this._projectedCenter=null},i),r(()=>[e?.center,e?.dynamicScaling,e?.majorLineColor,e?.majorLineInterval,e?.minorLineColor,e?.rotateWithMap,e?.rotation,e?.spacing,e?.units],()=>this.requestRender(),i)])}_createTransforms(){return{displayViewScreenMat3:u()}}doRender(e){if(e.drawPhase!==1||this.grid==null||!this.visible)return;let{spacing:t,units:n,majorLineInterval:r,dynamicScaling:i,majorLineColor:o,minorLineColor:s}=this.grid;if(t===0||(this._updateDerivedValues(e),this._projectedCenter==null||this._metersPerSRUnit==null))return;let{scale:c,spatialReference:l}=e.state,u=a(t,n,`meters`),d=this._metersPerSRUnit*b(c,l),f=u/d;if(!i&&f<w)return;let p=u*E(r,f,i);this._updateTransform(e,d,p),this._technique.render(e,{transform:{dvs:this.transforms.displayViewScreenMat3},config:{pxPerCell:p/d,minorLineColor:A(s),majorLineColor:A(o),majorLineInterval:r,halfWidth:.25,aaWidth:.5}})}_updateDerivedValues(e){if(!this.grid)return;let{center:t}=this.grid,{spatialReference:n}=e.state;this._projectedCenter&&x(this._projectedCenter.spatialReference,n)||(this._metersPerSRUnit=null,x(t.spatialReference,n)?this._projectedCenter=t:_(t.spatialReference,n)?this._projectedCenter=v(t,n):this.requestRender()),this._metersPerSRUnit==null&&this._projectedCenter!=null&&(this._metersPerSRUnit=T(this._projectedCenter))}_updateTransform(e,n,r){let{grid:i}=this,{center:a,rotation:u,size:g,spatialReference:_}=e.state;if(i==null||this._projectedCenter==null||this._metersPerSRUnit==null)return;let v=n*(g[0]/2),b=n*(g[1]/2),x=this._metersPerSRUnit/r,S=this._projectedCenter,C=t(i.rotation),w=t(u),T=this.transforms.displayViewScreenMat3;o(T,-C);let E=_.isWrappable?y(S.x,a[0],_):S.x,O=d(D,E,S.y),A=f(D,a,O);p(A,A,x),i.rotateWithMap||m(A,A,h,-w),m(A,A,h,-C),p(A,A,1/i.majorLineInterval),k(A,A),p(A,A,i.majorLineInterval),m(A,A,h,C),s(T,T,A),i.rotateWithMap&&c(T,T,w);let j=v/r,M=b/r,N=d(D,j,M);l(T,T,N)}}function k(e,t){return e[0]=t[0]-Math.trunc(t[0]),e[1]=t[1]-Math.trunc(t[1]),e}function A(e){let[t,n,r,i]=e.toArray().map(e=>e/255);return[t*i,n*i,r*i,i]}export{O as default};