@arcgis/core 5.2.0-next.126 → 5.2.0-next.128

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 (234) hide show
  1. package/WebScene.js +1 -1
  2. package/applications/Components/basemapToggleUtils.d.ts +53 -0
  3. package/applications/Components/basemapToggleUtils.js +2 -0
  4. package/applications/SceneViewer/sceneViewerUtils.d.ts +14 -1
  5. package/applications/SceneViewer/sceneViewerUtils.js +1 -1
  6. package/applications/WebEditor/sketchUtils.js +1 -1
  7. package/arcgisGlobal.d.ts +1 -0
  8. package/assets/esri/core/libs/libtess/libtess-f32.wasm +0 -0
  9. package/assets/esri/core/libs/libtess/libtess-f64.wasm +0 -0
  10. package/assets/esri/core/workers/RemoteClient.js +1 -1
  11. package/assets/esri/core/workers/chunks/{e35eb93c0fb1f6de8db0.js → 00d9e41deecf5828975c.js} +1 -1
  12. package/assets/esri/core/workers/chunks/038d2b80d96237c25b6f.js +1 -0
  13. package/assets/esri/core/workers/chunks/{ab8a1140bf31f46f8ebf.js → 1262918b2161d79851c0.js} +1 -1
  14. package/assets/esri/core/workers/chunks/{d3ef23923424ad8c5048.js → 1c2723f9630e7d597843.js} +1 -1
  15. package/assets/esri/core/workers/chunks/{9ca98fffd43e63d5ade3.js → 1c33aa349beea9a3792f.js} +1 -1
  16. package/assets/esri/core/workers/chunks/{54eeb4cac4fa092359ab.js → 2226c20c38e20713bcb5.js} +2 -2
  17. package/assets/esri/core/workers/chunks/{54eeb4cac4fa092359ab.js.LICENSE.txt → 2226c20c38e20713bcb5.js.LICENSE.txt} +2 -2
  18. package/assets/esri/core/workers/chunks/{4d18451e0ea6ca54101a.js → 2ebad7e588b26e74cefe.js} +1 -1
  19. package/assets/esri/core/workers/chunks/{a8258636096416c837a2.js → 3b7dff15a0058ea29886.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{4716693eca44e8f89f5c.js → 3bf56c33876ba56c4b21.js} +1 -1
  21. package/assets/esri/core/workers/chunks/3c6ee445e49da0076ac1.js +1 -0
  22. package/assets/esri/core/workers/chunks/3f045f09ac95e7f22a97.js +1 -0
  23. package/assets/esri/core/workers/chunks/500f6d6f0ffa235cae85.js +1 -0
  24. package/assets/esri/core/workers/chunks/{56acda1eed3a013430e2.js → 58fb92775d668cfd295c.js} +1 -1
  25. package/assets/esri/core/workers/chunks/{e6637f9176566382ed3e.js → 606cca69eaea84bfcdc6.js} +1 -1
  26. package/assets/esri/core/workers/chunks/{fdbda3d2afea25142b86.js → 6267a1fe1603daa399b4.js} +1 -1
  27. package/assets/esri/core/workers/chunks/{b013b70e40dfb6ce013e.js → 668ec0bdfb2095e90c9e.js} +1 -1
  28. package/assets/esri/core/workers/chunks/{806f96ad09e882be41af.js → 67fd2cdb2e6834bfa710.js} +1 -1
  29. package/assets/esri/core/workers/chunks/{5fe5ef5ccf480634d159.js → 75294f515c7f8393181c.js} +1 -1
  30. package/assets/esri/core/workers/chunks/75879ae88fd87b089a87.js +1 -0
  31. package/assets/esri/core/workers/chunks/761ea719ec1b4d562db2.js +1 -0
  32. package/assets/esri/core/workers/chunks/{24673aac70d6c949b6fa.js → 86d7a3ae672a51b75fcc.js} +1 -1
  33. package/assets/esri/core/workers/chunks/{30604a29df320d7a4c6b.js → 88e11b645a1361f1bdbe.js} +1 -1
  34. package/assets/esri/core/workers/chunks/89dad6c1bfd81e4d7f8e.js +1 -0
  35. package/assets/esri/core/workers/chunks/{8daed13400d9e63e65ae.js → 8a842cde240aef12e417.js} +1 -1
  36. package/assets/esri/core/workers/chunks/{c692e583e87af58f6d91.js → 8b0d6205ceeec1ab446f.js} +1 -1
  37. package/assets/esri/core/workers/chunks/{57ab87e70ef85b9405f9.js → 8cb216404a6254bc695c.js} +1 -0
  38. package/assets/esri/core/workers/chunks/92509dd25996c6390a31.js +1 -0
  39. package/assets/esri/core/workers/chunks/9ccc2c8f7416943cc373.js +29 -0
  40. package/assets/esri/core/workers/chunks/a0a9c41400ae98df1912.js +1 -0
  41. package/assets/esri/core/workers/chunks/{b96358d475dc98034aa4.js → a15ed056e7493ddf3b4c.js} +1 -1
  42. package/assets/esri/core/workers/chunks/{25e212fe9a2ea37c9e81.js → a3a33ffa34f4d645ddfe.js} +1 -1
  43. package/assets/esri/core/workers/chunks/af0704494398f33aa315.js +1 -0
  44. package/assets/esri/core/workers/chunks/{ce1ccf9ec90b786591e5.js → b396c4b4bb144200acc7.js} +1 -1
  45. package/assets/esri/core/workers/chunks/{97602019a1ccad22a03a.js → bbfb80a6983574007ce5.js} +1 -1
  46. package/assets/esri/core/workers/chunks/{d5f72670634e73c0b53a.js → bcf2e5cf6b9c6d0442bb.js} +1 -1
  47. package/assets/esri/core/workers/chunks/{17218d714cb07b607c2f.js → c35e9dee87937f483a3d.js} +1 -1
  48. package/assets/esri/core/workers/chunks/{85739ed6af0f0a3cb302.js → c94bdfed831c775e04c0.js} +1 -1
  49. package/assets/esri/core/workers/chunks/{2e3fd81653dc0d86456c.js → cfeba0ffb7fdc2a9af05.js} +1 -1
  50. package/assets/esri/core/workers/chunks/d1187ad6cc4959683819.js +1 -0
  51. package/assets/esri/core/workers/chunks/d94a2b3b2ef49af9c2e3.js +1 -0
  52. package/assets/esri/core/workers/chunks/{cb7cb7d57c4e7f76600f.js → dc92710a8fdfb9135e55.js} +1 -1
  53. package/assets/esri/core/workers/chunks/ec187933b42fe65594b7.js +1 -0
  54. package/assets/esri/core/workers/chunks/eec5a93dbc258a90b6de.js +1 -0
  55. package/assets/esri/core/workers/chunks/{e1ae83ff3e0225708d4d.js → f479b4a4cee4bb2e046c.js} +1 -1
  56. package/assets/esri/core/workers/chunks/{78abd6c42f39e6f6ffbb.js → f983296b6f4a62a911eb.js} +1 -1
  57. package/assets/esri/images/portal/gaussiansplatlayer16.png +0 -0
  58. package/assets/esri/images/portal/knowledgegraphlayer16.png +0 -0
  59. package/assets/esri/images/portal/propresentation16.png +0 -0
  60. package/assets/esri/images/portal/urbanproject16.png +0 -0
  61. package/assets/esri/images/support/loading-throb.gif +0 -0
  62. package/assets/esri/layers/raster/formats/lerc-wasm.wasm +0 -0
  63. package/assets/esri/themes/base/icons/style.scss +0 -0
  64. package/assets/esri/themes/base/icons/variables.scss +0 -0
  65. package/assets/esri/themes/base/images/files/archive-32.svg +0 -0
  66. package/assets/esri/themes/base/images/files/cad-32.svg +0 -0
  67. package/assets/esri/themes/base/images/files/code-32.svg +0 -0
  68. package/assets/esri/themes/base/images/files/csv-32.svg +0 -0
  69. package/assets/esri/themes/base/images/files/excel-32.svg +0 -0
  70. package/assets/esri/themes/base/images/files/generic-32.svg +0 -0
  71. package/assets/esri/themes/base/images/files/gpx-32.svg +0 -0
  72. package/assets/esri/themes/base/images/files/image-32.svg +0 -0
  73. package/assets/esri/themes/base/images/files/pdf-32.svg +0 -0
  74. package/assets/esri/themes/base/images/files/report-32.svg +0 -0
  75. package/assets/esri/themes/base/images/files/sound-32.svg +0 -0
  76. package/assets/esri/themes/base/images/files/text-32.svg +0 -0
  77. package/assets/esri/themes/base/images/files/video-32.svg +0 -0
  78. package/assets/esri/themes/base/images/files/word-32.svg +0 -0
  79. package/assets/esri/themes/base/images/files/zip-32.svg +0 -0
  80. package/assets/esri/themes/base/images/loading-throb.gif +0 -0
  81. package/assets/esri/themes/base/widgets/_Bookmarks.scss +0 -0
  82. package/assets/esri/themes/base/widgets/_Tooltip.scss +42 -3
  83. package/assets/esri/themes/dark/main.css +1 -1
  84. package/assets/esri/themes/light/main.css +1 -1
  85. package/assets/esri/themes/light/view.css +1 -1
  86. package/assets/esri/views/interactive/tooltip/t9n/messages.en.json +1 -1
  87. package/assets/esri/widgets/BatchAttributeForm/t9n/messages.en.json +1 -1
  88. package/chunks/GlobalIllumination.glsl.js +1 -0
  89. package/config.js +1 -1
  90. package/core/Accessor.d.ts +1 -1
  91. package/core/lang.js +1 -1
  92. package/core/units.js +1 -1
  93. package/geometry/HeightModelInfo.js +1 -1
  94. package/geometry/ellipsoidUtils.js +1 -1
  95. package/geometry/support/heightModelInfoUtils.js +1 -1
  96. package/interfaces.d.ts +1 -0
  97. package/kernel.js +1 -1
  98. package/layers/ElevationLayer.js +1 -1
  99. package/layers/OrientedImageryLayer.js +1 -1
  100. package/layers/ParquetLayer.d.ts +21 -13
  101. package/layers/graphics/controllers/FeatureTileController3D.js +1 -1
  102. package/layers/graphics/dehydratedFeatures.js +1 -1
  103. package/layers/graphics/transferFeatures.js +2 -0
  104. package/layers/mixins/FeatureLayerBase.js +1 -1
  105. package/layers/mixins/HeightModelInfoMixin.js +2 -0
  106. package/layers/mixins/SceneService.js +1 -1
  107. package/layers/orientedImagery/core/ExposurePoint.js +1 -1
  108. package/layers/raster/datasets/RasterFactory.js +1 -1
  109. package/package.json +3 -3
  110. package/popup/FeatureContentCollection.d.ts +15 -25
  111. package/popup/FeatureContentCollection.js +1 -1
  112. package/rest/query/operations/pbfDehydratedFeatureSet.js +1 -1
  113. package/rest/query/operations/pbfFeatureServiceParser.js +1 -1
  114. package/support/revision.js +1 -1
  115. package/symbols/cim/callouts/calloutAnalysisUtils.js +2 -0
  116. package/symbols/cim/callouts/effects/BackgroundCallout.js +1 -1
  117. package/symbols/cim/callouts/effects/BalloonCallout.js +1 -1
  118. package/symbols/cim/callouts/effects/PointSymbolCallout.js +1 -1
  119. package/symbols/cim/callouts/effects/SimpleLineCallout.js +1 -1
  120. package/symbols/cim/callouts/effects/calloutUtils.js +1 -1
  121. package/symbols/cim/cimAnalyzer.js +1 -1
  122. package/views/2d/engine/webgl/ClipMesh.js +1 -1
  123. package/views/2d/engine/webgl/mesh/factories/CalloutMeshWriterCoordinator.js +1 -1
  124. package/views/2d/engine/webgl/mesh/factories/MeshWriterGroupCoordinator.js +1 -1
  125. package/views/2d/engine/webgl/mesh/templates/templateUtils.js +1 -1
  126. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedMarkerMeshWriter.js +1 -1
  127. package/views/2d/engine/webgl/shaderGraph/techniques/animated/AnimatedPolyMeshWriters.js +1 -1
  128. package/views/2d/engine/webgl/shaderGraph/techniques/fill/AFillMeshWriter.js +1 -1
  129. package/views/2d/engine/webgl/shaderGraph/techniques/fill/ComplexOutlineFillMeshWriter.js +1 -1
  130. package/views/2d/engine/webgl/shaderGraph/techniques/fill/GradientFillMeshWriter.js +1 -1
  131. package/views/2d/engine/webgl/shaderGraph/techniques/fill/OutlineFillMeshWriter.js +1 -1
  132. package/views/2d/engine/webgl/shaderGraph/techniques/fill/PatternFillMeshWriter.js +1 -1
  133. package/views/2d/engine/webgl/shaderGraph/techniques/fill/PatternOutlineFillMeshWriter.js +1 -1
  134. package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelMeshWriter.js +1 -1
  135. package/views/2d/engine/webgl/shaderGraph/techniques/line/GradientStrokeMeshWriter.js +1 -1
  136. package/views/2d/engine/webgl/shaderGraph/techniques/line/LineMeshWriter.js +1 -1
  137. package/views/2d/engine/webgl/shaderGraph/techniques/line/TexturedLineMeshWriter.js +1 -1
  138. package/views/2d/engine/webgl/shaderGraph/techniques/markers/ComputedMarkerParams.js +1 -1
  139. package/views/2d/engine/webgl/shaderGraph/techniques/markers/MarkerMeshWriter.js +1 -1
  140. package/views/2d/engine/webgl/shaderGraph/techniques/mesh/CalloutMeshWriterPolicy.js +1 -1
  141. package/views/2d/engine/webgl/shaderGraph/techniques/mesh/MeshWriter.js +1 -1
  142. package/views/2d/engine/webgl/shaderGraph/techniques/mesh/MeshWriterReferences.js +1 -1
  143. package/views/2d/engine/webgl/shaderGraph/techniques/text/TextMeshWriter.js +1 -1
  144. package/views/2d/engine/webgl/util/AnnotationMatcher.js +1 -1
  145. package/views/2d/engine/webgl/util/Matcher.js +1 -1
  146. package/views/2d/layers/LayerView2D.js +1 -1
  147. package/views/2d/layers/support/annodime/MatcherGeometryOverride.js +1 -1
  148. package/views/2d/layers/support/annodime/PrivateMatcherGeometryOverrideEffect.js +1 -1
  149. package/views/3d/analysis/LineOfSight/LineOfSightAuthoringUtils.js +1 -1
  150. package/views/3d/analysis/LineOfSight/LineOfSightItemManipulatedObject3D.js +1 -1
  151. package/views/3d/analysis/LineOfSight/LineOfSightItemTool.js +1 -1
  152. package/views/3d/analysis/LineOfSight/LineOfSightPlacementController.js +1 -1
  153. package/views/3d/analysis/LineOfSight/LineOfSightRootPlugin.js +1 -1
  154. package/views/3d/analysis/LineOfSight/LineOfSightTargetPlugin.js +1 -1
  155. package/views/3d/analysis/LineOfSight/lineOfSightPlacementUtils.js +1 -1
  156. package/views/3d/analysis/LineOfSightAnalysisView3D.d.ts +5 -3
  157. package/views/3d/analysis/Viewshed/ViewshedPlacementController.js +1 -1
  158. package/views/3d/analysis/Viewshed/ViewshedPlacementRootPlugin.js +1 -1
  159. package/views/3d/camera/constraintUtils/surfaceCollision.js +1 -1
  160. package/views/3d/camera/intersectionUtils.js +1 -1
  161. package/views/3d/interactive/editingTools/manipulatedObjectUtils.js +1 -1
  162. package/views/3d/interactive/editingTools/move/MoveTool3D.js +1 -1
  163. package/views/3d/interactive/editingTools/tooltipUtils3D.js +1 -1
  164. package/views/3d/layers/I3SMeshView3D.js +1 -1
  165. package/views/3d/layers/graphics/FeatureGraphics3DGraphicsPipeline.js +1 -1
  166. package/views/3d/layers/graphics/Graphics3DCore.js +1 -1
  167. package/views/3d/layers/graphics/Graphics3DFeatureProcessor.js +1 -1
  168. package/views/3d/layers/graphics/Graphics3DGraphic.js +1 -1
  169. package/views/3d/layers/graphics/Graphics3DGraphicsPipeline.js +1 -1
  170. package/views/3d/layers/i3s/I3SClientMaterialUtil.js +1 -1
  171. package/views/3d/layers/support/FeatureMemory.js +2 -0
  172. package/views/3d/layers/support/FeatureTile.js +1 -1
  173. package/views/3d/layers/support/FeatureTileFetcher3D.js +1 -1
  174. package/views/3d/layers/support/featureReference.js +1 -1
  175. package/views/3d/navigation/modes/GroundNavigationMode3D.js +1 -1
  176. package/views/3d/state/Constraints.js +1 -1
  177. package/views/3d/state/helpers/SceneIntersectionHelper.js +1 -1
  178. package/views/3d/state/utils/OffsetCorrectionController.js +1 -1
  179. package/views/3d/state/utils/groundNavigationUtils.js +1 -1
  180. package/views/3d/support/PBFDecoder.js +1 -1
  181. package/views/3d/support/PBFDecoderWorker.js +1 -1
  182. package/views/3d/support/QualityProfile.js +1 -1
  183. package/views/3d/support/popupHitTest.js +1 -1
  184. package/views/3d/terrain/TerrainRenderer.js +1 -1
  185. package/views/3d/terrain/TerrainSurface.js +1 -1
  186. package/views/3d/webgl-engine/lib/TriangleIntersectionData.js +1 -1
  187. package/views/3d/webgl-engine/materials/stippleTextureRepository.js +1 -1
  188. package/views/DOMContainer.d.ts +2 -2
  189. package/views/DOMContainer.js +1 -1
  190. package/views/PopupView.d.ts +1 -1
  191. package/views/SceneView.js +1 -1
  192. package/views/ToolViewManager.js +1 -1
  193. package/views/interactive/options/TooltipVisibleElements.d.ts +11 -1
  194. package/views/interactive/options/TooltipVisibleElements.js +1 -1
  195. package/views/interactive/tooltip/components/ElevationModeSelect.js +2 -0
  196. package/views/interactive/tooltip/components/TooltipEditableField.js +1 -1
  197. package/views/interactive/tooltip/content/TooltipContent.js +1 -1
  198. package/views/interactive/tooltip/infos/DynamicTooltipInfo.js +1 -1
  199. package/views/interactive/tooltip/infos/SketchTooltipInfo.js +1 -1
  200. package/views/support/hitTestSelectUtils.js +1 -1
  201. package/widgets/BasemapToggle/BasemapToggleViewModel.d.ts +1 -0
  202. package/widgets/BasemapToggle/BasemapToggleViewModel.js +1 -1
  203. package/widgets/BasemapToggle.js +1 -1
  204. package/widgets/BatchAttributeForm/inputs/AttachmentElementInput.d.ts +9 -1
  205. package/widgets/BatchAttributeForm/inputs/support/DynamicChoiceController.js +1 -1
  206. package/widgets/BatchAttributeForm.js +1 -1
  207. package/widgets/DirectionalPad/DirectionalPadViewModel.d.ts +1 -0
  208. package/widgets/DirectionalPad/DirectionalPadViewModel.js +1 -1
  209. package/widgets/DirectionalPad.js +1 -1
  210. package/widgets/Editor/UpdateFeatureWorkflow.js +1 -1
  211. package/widgets/Editor/legacy/UpdateFeatureWorkflow.js +1 -1
  212. package/widgets/Editor/workflowUtils.js +1 -1
  213. package/widgets/OrientedImageryViewer/OrientedImageryViewerViewModel.js +1 -1
  214. package/widgets/OrientedImageryViewer/utils.js +1 -1
  215. package/widgets/Popup/types.d.ts +0 -7
  216. package/widgets/Popup.d.ts +7 -7
  217. package/widgets/TimeSlider/TimeSliderViewModel.d.ts +2 -0
  218. package/widgets/TimeSlider/TimeSliderViewModel.js +1 -1
  219. package/widgets/TimeSlider.js +1 -1
  220. package/assets/esri/core/workers/chunks/0a2b7c691a577cb3d189.js +0 -1
  221. package/assets/esri/core/workers/chunks/2146c25c01c9fc11b16c.js +0 -1
  222. package/assets/esri/core/workers/chunks/4678a8170d8a3ccd1a7b.js +0 -1
  223. package/assets/esri/core/workers/chunks/56e97b98dcb8a3f2bcb7.js +0 -1
  224. package/assets/esri/core/workers/chunks/6c3535aa7250c08b9e5b.js +0 -1
  225. package/assets/esri/core/workers/chunks/6e75f09fb9452bd5f9fb.js +0 -1
  226. package/assets/esri/core/workers/chunks/7441d121f00ce747c08e.js +0 -1
  227. package/assets/esri/core/workers/chunks/76548469fe1b9c3b2051.js +0 -1
  228. package/assets/esri/core/workers/chunks/82ce034b5ba54de9b970.js +0 -29
  229. package/assets/esri/core/workers/chunks/ba435cc73956d9c64a11.js +0 -1
  230. package/assets/esri/core/workers/chunks/c77496c350004ee66eb2.js +0 -1
  231. package/assets/esri/core/workers/chunks/d371d9279b30548efa02.js +0 -1
  232. package/assets/esri/core/workers/chunks/dc52e036547612949d32.js +0 -1
  233. package/assets/esri/core/workers/chunks/e5ee64e2fb5bfcb716d8.js +0 -1
  234. package/views/2d/engine/webgl/mesh/bufcut.js +0 -2
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{GeometryCursor as e}from"../../../../geometry/GeometryCursor.js";import{extractCalloutData as t,autoSnap as n}from"./calloutUtils.js";class r{constructor(){this.type="CIMSimpleLineCallout"}static{this.instance=null}static local(){return null===r.instance&&(r.instance=new r),r.instance}execute(e,t,n){if("CIMSimpleLineCallout"!==t?.type)throw new Error("Invalid effect type for SimpleLineCalloutEffect");return new o(e,t,n)}}class o{constructor(e,t,n){this._inputGeometries=e,this._autoSnap=t.autoSnap??!0;const r=n.geomUnitsPerPoint*(n.scaleFactor??1);this._leaderTolerance=(t.leaderTolerance??0)*r,this._relativeCalloutAnchor=n.relativeCalloutAnchor,this._absoluteCalloutAnchor=n.absoluteCalloutAnchor,this._calloutBodyBounds=n.calloutBodyBounds}next(){let e;for(;e=this._inputGeometries.next();){const t=this._createLeaderGeometry(e);if(t)return t}return null}_createLeaderGeometry(e){const r=t(e,this._relativeCalloutAnchor,this._calloutBodyBounds,this._absoluteCalloutAnchor);if(r){const t=this._autoSnap?n(r.bounds,r.anchor):l(r.bounds);return a(r.bounds,r.anchor)||!this._passesLeaderTolerance(t,r.anchor)?null:i(t,r.anchor,e.yFactor)}return"esriGeometryPolyline"===e.geometryType&&this._passesPolylineTolerance(e)?e.clone():null}_passesLeaderTolerance(e,t){return this._leaderTolerance<=0||s(e,t)>=this._leaderTolerance}_passesPolylineTolerance(e){if(this._leaderTolerance<=0)return!0;const t=e.clone();let n=0;for(;t.nextPath();)n+=t.pathLength();return n>=this._leaderTolerance}}function l(e){return{x:e.xmin,y:e.ymin}}function a(e,t){return t.x>=e.xmin&&t.x<=e.xmax&&t.y>=e.ymin&&t.y<=e.ymax}function s(e,t){return Math.hypot(t.x-e.x,t.y-e.y)}function i(t,n,r){const o=e.createEmptyOptimizedCIM("esriGeometryPolyline",!1,!1,r);return o.startPath(),o.pushXY(t.x,r*t.y),o.pushXY(n.x,r*n.y),o.reset(),o}export{r as default};
2
+ import{GeometryCursor as e}from"../../../../geometry/GeometryCursor.js";import{extractCalloutData as t,autoSnap as n}from"./calloutUtils.js";class r{constructor(){this.type="CIMSimpleLineCallout"}static{this.instance=null}static local(){return null===r.instance&&(r.instance=new r),r.instance}execute(e,t,n){if("CIMSimpleLineCallout"!==t?.type)throw new Error("Invalid effect type for SimpleLineCalloutEffect");return new o(e,t,n)}}class o{constructor(e,t,n){this._inputGeometries=e,this._autoSnap=t.autoSnap??!0;const r=n.geomUnitsPerPoint*(n.scaleFactor??1);this._leaderTolerance=(t.leaderTolerance??0)*r,this._calloutContext=n.callout}next(){let e;for(;e=this._inputGeometries.next();){const t=this._createLeaderGeometry(e);if(t)return t}return null}_createLeaderGeometry(e){const r=t(e,this._calloutContext);if(r){const t=this._autoSnap?n(r.bounds,r.layoutAnchor):a(r.bounds);return l(r.bounds,r.layoutAnchor)||!this._passesLeaderTolerance(t,r.layoutAnchor)?null:i(t,r.anchor,e.yFactor)}return"esriGeometryPolyline"===e.geometryType&&this._passesPolylineTolerance(e)?e.clone():null}_passesLeaderTolerance(e,t){return this._leaderTolerance<=0||s(e,t)>=this._leaderTolerance}_passesPolylineTolerance(e){if(this._leaderTolerance<=0)return!0;const t=e.clone();let n=0;for(;t.nextPath();)n+=t.pathLength();return n>=this._leaderTolerance}}function a(e){return{x:e.xmin,y:e.ymin}}function l(e,t){return t.x>=e.xmin&&t.x<=e.xmax&&t.y>=e.ymin&&t.y<=e.ymax}function s(e,t){return Math.hypot(t.x-e.x,t.y-e.y)}function i(t,n,r){const o=e.createEmptyOptimizedCIM("esriGeometryPolyline",!1,!1,r);return o.startPath(),o.pushXY(t.x,r*t.y),o.pushXY(n.x,r*n.y),o.reset(),o}export{r as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{GeometryCursor as t}from"../../../../geometry/GeometryCursor.js";function n(t,n,x,y){const i=t.clone();if("esriGeometryPoint"===i.geometryType||"esriGeometryMultipoint"===i.geometryType){if(!i.nextPath())return null;if(i.seekPathStart(),!i.nextPoint())return null;return{anchor:y??(n?{x:i.x+n.x,y:i.y+n.y}:{x:i.x,y:i.y}),bounds:x?m(x,i.x,i.y):{xmin:i.x,ymin:i.y,xmax:i.x,ymax:i.y}}}if(x&&1===i.totalSize&&1===i.totalPoints){if(!i.seekPath(0))return null;if(i.seekPathStart(),!i.nextPoint())return null;return{anchor:y??(n?{x:i.x+n.x,y:i.y+n.y}:{x:i.x,y:i.y}),bounds:m(x,i.x,i.y)}}if(i.totalSize<2)return null;function m(t,n,x){return{xmin:t.xmin+n,ymin:t.ymin+x,xmax:t.xmax+n,ymax:t.ymax+x}}const e=i.totalSize-1,a={xmin:1/0,ymin:1/0,xmax:-1/0,ymax:-1/0};for(let r=0;r<e;r++){if(!i.seekPath(r))return null;for(i.seekPathStart();i.nextPoint();)f(a,i.x,i.y)}return l(a)&&i.seekPath(e)?(i.seekPathStart(),i.nextPoint()?{anchor:y??{x:i.x,y:i.y},bounds:a}:null):null}function x(t,n){return{left:(t?.left??0)*n,right:(t?.right??0)*n,top:(t?.top??0)*n,bottom:(t?.bottom??0)*n}}function y(t,n){return{xmin:t.xmin-n.left,ymin:t.ymin-n.bottom,xmax:t.xmax+n.right,ymax:t.ymax+n.top}}function i(t,n){return n.x>=t.xmin&&n.x<=t.xmax&&n.y>=t.ymin&&n.y<=t.ymax}function m(t){return{x:.5*(t.xmin+t.xmax),y:.5*(t.ymin+t.ymax)}}function e(t,n){let x,y;const i=.5*(t.xmin+t.xmax),m=.5*(t.ymin+t.ymax);return x=n.x<t.xmin?t.xmin:n.x>t.xmax?t.xmax:n.x<i?Math.abs(n.x-t.xmin)<Math.abs(n.x-i)?t.xmin:i:Math.abs(n.x-t.xmax)<Math.abs(n.x-i)?t.xmax:i,y=n.y<t.ymin?t.ymin:n.y>t.ymax?t.ymax:n.y<m?Math.abs(n.y-t.ymin)<Math.abs(n.y-m)?t.ymin:m:Math.abs(n.y-t.ymax)<Math.abs(n.y-m)?t.ymax:m,{x,y}}function a(t,n){const x=.5*(t.xmin+t.xmax),y=.5*(t.ymin+t.ymax);if(n.x>=t.xmin&&n.x<=t.xmax){if(n.y<=t.ymin)return"bottom";if(n.y>=t.ymax)return"top"}else{if(n.x<t.xmin)return"left";if(n.x>t.xmax)return"right"}const i=[{side:"left",distance:Math.abs(n.x-t.xmin)},{side:"right",distance:Math.abs(n.x-t.xmax)},{side:"bottom",distance:Math.abs(n.y-t.ymin)},{side:"top",distance:Math.abs(n.y-t.ymax)}];return i.sort((t,n)=>t.distance-n.distance),i[0].distance===i[1].distance?n.x<x?"left":n.y<y?"bottom":"top":i[0].side}function r(t,n,x,y,i){const m=x??0,r=a(t,n),o=4===m?E(t,n,r):e(t,n);return M(Y(N(y>0?X(o,r,y):o,n,t,r,m,y)),i)}function o(t,n){return p([{x:t.xmin,y:t.ymin},{x:t.xmin,y:t.ymax},{x:t.xmax,y:t.ymax},{x:t.xmax,y:t.ymin},{x:t.xmin,y:t.ymin}],n)}function s(t,n,x,y){switch(a(t,n)){case"left":return M([{x:t.xmin-x,y:t.ymin},{x:t.xmin-x,y:t.ymax}],y);case"top":return M([{x:t.xmin,y:t.ymax+x},{x:t.xmax,y:t.ymax+x}],y);case"right":return M([{x:t.xmax+x,y:t.ymax},{x:t.xmax+x,y:t.ymin}],y);case"bottom":return M([{x:t.xmax,y:t.ymin-x},{x:t.xmin,y:t.ymin-x}],y)}}function u(n,x){const y=t.createEmptyOptimizedCIM("esriGeometryPoint",!1,!1,x);return y.startPath(),y.pushXY(n.x,x*n.y),y.reset(),y}function c(t,n,x,y,m,e=null){const a=i(t,n)?null:z(t,n,y,e);switch(x){case 1:return P(t,a,m);case 2:return k(t,a,m);default:return b(t,a,m)}}function h(t,n){return Math.hypot(n.x-t.x,n.y-t.y)}function f(t,n,x){t.xmin=Math.min(t.xmin,n),t.ymin=Math.min(t.ymin,x),t.xmax=Math.max(t.xmax,n),t.ymax=Math.max(t.ymax,x)}function l(t){return Number.isFinite(t.xmin)&&Number.isFinite(t.ymin)&&Number.isFinite(t.xmax)&&Number.isFinite(t.ymax)}function M(n,x){const y=t.createEmptyOptimizedCIM("esriGeometryPolyline",!1,!1,x);y.startPath();for(const t of n)y.pushXY(t.x,x*t.y);return y.reset(),y}function p(n,x){const y=t.createEmptyOptimizedCIM("esriGeometryPolygon",!1,!1,x);y.startPath();for(const t of v(n))y.pushXY(t.x,x*t.y);return y.reset(),y}function b(t,n,x){const y=[{x:t.xmin,y:t.ymin},{x:t.xmin,y:t.ymax},{x:t.xmax,y:t.ymax},{x:t.xmax,y:t.ymin},{x:t.xmin,y:t.ymin}];return n&&w(y,n),p(y,x)}function P(t,n,x){const y=d(t);return n&&w(y,n),p(y,x)}function d(t){const n=t.xmax-t.xmin,x=t.ymax-t.ymin,y=Math.min(n,x)/8,i=[{x:t.xmin+y,y:t.ymin}];return G(i,t.xmin+y,t.ymin+y,y,-Math.PI/2,-Math.PI),i.push({x:t.xmin,y:t.ymax-y}),G(i,t.xmin+y,t.ymax-y,y,Math.PI,Math.PI/2),i.push({x:t.xmax-y,y:t.ymax}),G(i,t.xmax-y,t.ymax-y,y,Math.PI/2,0),i.push({x:t.xmax,y:t.ymin+y}),G(i,t.xmax-y,t.ymin+y,y,0,-Math.PI/2),i.push(i[0]),i}function g(t,n){return p(I(t),n)}function k(t,n,x){if(!n)return g(t,x);const y=I(t),i=y.length,m=S(y,n.points[0]),e=S(y,n.points[n.points.length-1]),a=(e-m+i)%i,r=i-a;return a<=r?y.splice(m+1,Math.max(a-1,0),...n.points):y.splice(e+1,Math.max(r-1,0),...n.points.slice().reverse()),p(y,x)}function I(t){const n=.5*(t.xmin+t.xmax),x=.5*(t.ymin+t.ymax),y=.5*(t.xmax-t.xmin),i=.5*(t.ymax-t.ymin),m=[],e=32;for(let a=0;a<e;a++){const t=2*Math.PI*a/e;m.push({x:n+y*Math.cos(t),y:x+i*Math.sin(t)})}return m}function S(t,n){let x=0,y=1/0;for(let i=0;i<t.length;i++){const m=h(t[i],n);m<y&&(y=m,x=i)}return x}function z(t,n,x,y){const i=t.xmax-t.xmin,m=t.ymax-t.ymin,e=t.xmin+i/2,a=t.ymin+m/2;let r=-1;if(n.x>=t.xmin&&n.x<=t.xmax?n.y<=t.ymin?r=n.x<=e?7:6:n.y>=t.ymax&&(r=n.x<=e?2:3):r=n.x<t.xmin?n.y<=a?0:1:n.y<=a?5:4,r<0)return null;const o=F(t)[r];if(h(o,n)<x)return null;let s,u;const c=null==y?i/8:Math.min(y/2,i/2),f=null==y?m/8:Math.min(y/2,m/2);switch(r){case 0:case 1:s={x:o.x,y:o.y-f},u={x:o.x,y:o.y+f};break;case 2:case 3:s={x:o.x-c,y:o.y},u={x:o.x+c,y:o.y};break;case 4:case 5:s={x:o.x,y:o.y+f},u={x:o.x,y:o.y-f};break;default:s={x:o.x+c,y:o.y},u={x:o.x-c,y:o.y}}return{index:r,points:[s,n,u]}}function G(t,n,x,y,i,m){const e=4;for(let a=1;a<=e;a++){const r=i+(m-i)*a/e;t.push({x:n+y*Math.cos(r),y:x+y*Math.sin(r)})}}function w(t,n){const[x,,y]=n.points;for(let i=0;i<t.length-1;i++)if(C(x,t[i],t[i+1])&&C(y,t[i],t[i+1]))return void t.splice(i+1,0,...n.points)}function C(t,n,x){const y=(t.x-n.x)*(x.y-n.y)-(t.y-n.y)*(x.x-n.x);return!(Math.abs(y)>1e-9)&&(t.x>=Math.min(n.x,x.x)&&t.x<=Math.max(n.x,x.x)&&t.y>=Math.min(n.y,x.y)&&t.y<=Math.max(n.y,x.y))}function F(t){const n=t.xmax-t.xmin,x=t.ymax-t.ymin;return[{x:t.xmin,y:t.ymin+x/4},{x:t.xmin,y:t.ymax-x/4},{x:t.xmin+n/4,y:t.ymax},{x:t.xmax-n/4,y:t.ymax},{x:t.xmax,y:t.ymax-x/4},{x:t.xmax,y:t.ymin+x/4},{x:t.xmax-n/4,y:t.ymin},{x:t.xmin+n/4,y:t.ymin}]}function N(t,n,x,y,i,m){const e=Math.max(m,Math.min(x.xmax-x.xmin,x.ymax-x.ymin)/4);switch(i){case 1:{if("left"===y||"right"===y){const x=.5*(t.x+n.x);return[t,{x,y:t.y},{x,y:n.y},n]}const x=.5*(t.y+n.y);return[t,{x:t.x,y:x},{x:n.x,y:x},n]}case 2:{const x=X(t,y,e);return[t,x,O(x,n,y),n]}case 3:{const x=X(t,y,e);if("left"===y||"right"===y){const y=.5*(x.x+n.x);return[t,x,{x:y,y:x.y},{x:y,y:n.y},n]}const i=.5*(x.y+n.y);return[t,x,{x:x.x,y:i},{x:n.x,y:i},n]}case 4:{const t="top"===y?x.ymax:x.ymin;return[{x:x.xmin,y:t},{x:x.xmax,y:t},n]}case 5:case 6:{const x=5===i?-1:1,m=h(t,n)/4||e,a={x:.5*(t.x+n.x),y:.5*(t.y+n.y)};return"left"===y||"right"===y?[t,{x:a.x,y:a.y+x*m},n]:[t,{x:a.x+x*m,y:a.y},n]}default:return[t,n]}}function E(t,n,x){return"left"===x||"right"===x?{x:"left"===x?t.xmin:t.xmax,y:t.ymin}:{x:T(n.x,t.xmin,t.xmax),y:"top"===x?t.ymax:t.ymin}}function O(t,n,x){return"left"===x||"right"===x?{x:t.x,y:n.y}:{x:n.x,y:t.y}}function X(t,n,x){switch(n){case"left":return{x:t.x-x,y:t.y};case"top":return{x:t.x,y:t.y+x};case"right":return{x:t.x+x,y:t.y};case"bottom":return{x:t.x,y:t.y-x}}}function Y(t){return t.filter((n,x)=>0===x||n.x!==t[x-1].x||n.y!==t[x-1].y)}function v(t){if(!t.length)return t;const n=t[0],x=t[t.length-1];return n.x===x.x&&n.y===x.y?t:[...t,n]}function T(t,n,x){return Math.max(n,Math.min(x,t))}export{e as autoSnap,m as center,i as contains,s as createAccentBar,c as createBalloonGeometry,r as createLeaderPath,u as createPointGeometry,o as createRectangle,h as distance,f as expandBounds,n as extractCalloutData,y as inflateBounds,l as isFiniteBounds,a as resolveLeaderSide,x as scaleMargins};
2
+ import{GeometryCursor as n}from"../../../../geometry/GeometryCursor.js";function t(n,t){const{relativeAnchor:x,relativeLayoutAnchor:y,absoluteAnchor:i,bodyBounds:m}=t??{},a=n.clone();if("esriGeometryPoint"===a.geometryType||"esriGeometryMultipoint"===a.geometryType){if(!a.nextPath())return null;if(a.seekPathStart(),!a.nextPoint())return null;const n=i??(x?{x:a.x+x.x,y:a.y+x.y}:{x:a.x,y:a.y});return{anchor:n,layoutAnchor:i??(y?{x:a.x+y.x,y:a.y+y.y}:n),bounds:m?e(m,a.x,a.y):{xmin:a.x,ymin:a.y,xmax:a.x,ymax:a.y}}}if(m&&1===a.totalSize&&1===a.totalPoints){if(!a.seekPath(0))return null;if(a.seekPathStart(),!a.nextPoint())return null;const n=i??(x?{x:a.x+x.x,y:a.y+x.y}:{x:a.x,y:a.y});return{anchor:n,layoutAnchor:i??(y?{x:a.x+y.x,y:a.y+y.y}:n),bounds:e(m,a.x,a.y)}}if(a.totalSize<2)return null;function e(n,t,x){return{xmin:n.xmin+t,ymin:n.ymin+x,xmax:n.xmax+t,ymax:n.ymax+x}}const r=a.totalSize-1,o={xmin:1/0,ymin:1/0,xmax:-1/0,ymax:-1/0};for(let s=0;s<r;s++){if(!a.seekPath(s))return null;for(a.seekPathStart();a.nextPoint();)M(o,a.x,a.y)}return p(o)&&a.seekPath(r)?(a.seekPathStart(),a.nextPoint()?{anchor:i??{x:a.x,y:a.y},layoutAnchor:i??{x:a.x,y:a.y},bounds:o}:null):null}function x(n,t){return{left:(n?.left??0)*t,right:(n?.right??0)*t,top:(n?.top??0)*t,bottom:(n?.bottom??0)*t}}function y(n,t){return{xmin:n.xmin-t.left,ymin:n.ymin-t.bottom,xmax:n.xmax+t.right,ymax:n.ymax+t.top}}function i(n,t){return t.x>=n.xmin&&t.x<=n.xmax&&t.y>=n.ymin&&t.y<=n.ymax}function m(n){return{x:.5*(n.xmin+n.xmax),y:.5*(n.ymin+n.ymax)}}function a(n,t){let x,y;const i=.5*(n.xmin+n.xmax),m=.5*(n.ymin+n.ymax);return x=t.x<n.xmin?n.xmin:t.x>n.xmax?n.xmax:t.x<i?Math.abs(t.x-n.xmin)<Math.abs(t.x-i)?n.xmin:i:Math.abs(t.x-n.xmax)<Math.abs(t.x-i)?n.xmax:i,y=t.y<n.ymin?n.ymin:t.y>n.ymax?n.ymax:t.y<m?Math.abs(t.y-n.ymin)<Math.abs(t.y-m)?n.ymin:m:Math.abs(t.y-n.ymax)<Math.abs(t.y-m)?n.ymax:m,{x,y}}function e(n,t){const x=.5*(n.xmin+n.xmax),y=.5*(n.ymin+n.ymax);if(t.x>=n.xmin&&t.x<=n.xmax){if(t.y<=n.ymin)return"bottom";if(t.y>=n.ymax)return"top"}else{if(t.x<n.xmin)return"left";if(t.x>n.xmax)return"right"}const i=[{side:"left",distance:Math.abs(t.x-n.xmin)},{side:"right",distance:Math.abs(t.x-n.xmax)},{side:"bottom",distance:Math.abs(t.y-n.ymin)},{side:"top",distance:Math.abs(t.y-n.ymax)}];return i.sort((n,t)=>n.distance-t.distance),i[0].distance===i[1].distance?t.x<x?"left":t.y<y?"bottom":"top":i[0].side}function r(n,t,x,y,i,m=t){const r=x??0,o=e(n,t),s=4===r?T(n,t,o):a(n,t);return b(X(N(y>0?O(s,o,y):s,m,n,o,r,y)),i)}function o(n,t){return P([{x:n.xmin,y:n.ymin},{x:n.xmin,y:n.ymax},{x:n.xmax,y:n.ymax},{x:n.xmax,y:n.ymin},{x:n.xmin,y:n.ymin}],t)}function s(n,t,x,y){switch(i(n,t)?"left":e(n,t)){case"left":return b([{x:n.xmin-x,y:n.ymin},{x:n.xmin-x,y:n.ymax}],y);case"top":return b([{x:n.xmin,y:n.ymax+x},{x:n.xmax,y:n.ymax+x}],y);case"right":return b([{x:n.xmax+x,y:n.ymax},{x:n.xmax+x,y:n.ymin}],y);case"bottom":return b([{x:n.xmax,y:n.ymin-x},{x:n.xmin,y:n.ymin-x}],y)}}function u(t,x){const y=n.createEmptyOptimizedCIM("esriGeometryPoint",!1,!1,x);return y.startPath(),y.pushXY(t.x,x*t.y),y.reset(),y}function c(n,t,x,y,m,a=null,e=t){const r=h(n,x),o=i(r,e)?null:G(r,e,t,x,y,a);switch(x){case 1:return g(r,o,m);case 2:return S(r,o,m);default:return d(r,o,m)}}function h(n,t){if(2!==t)return n;const x=.5*(n.xmin+n.xmax),y=.5*(n.ymin+n.ymax),i=.5*(n.xmax-n.xmin)*Math.SQRT2,m=.5*(n.ymax-n.ymin)*Math.SQRT2;return{xmin:x-i,ymin:y-m,xmax:x+i,ymax:y+m}}function f(n,t){return 1===t?Math.min(n.xmax-n.xmin,n.ymax-n.ymin)/8:0}function l(n,t){return Math.hypot(t.x-n.x,t.y-n.y)}function M(n,t,x){n.xmin=Math.min(n.xmin,t),n.ymin=Math.min(n.ymin,x),n.xmax=Math.max(n.xmax,t),n.ymax=Math.max(n.ymax,x)}function p(n){return Number.isFinite(n.xmin)&&Number.isFinite(n.ymin)&&Number.isFinite(n.xmax)&&Number.isFinite(n.ymax)}function b(t,x){const y=n.createEmptyOptimizedCIM("esriGeometryPolyline",!1,!1,x);y.startPath();for(const n of t)y.pushXY(n.x,x*n.y);return y.reset(),y}function P(t,x){const y=n.createEmptyOptimizedCIM("esriGeometryPolygon",!1,!1,x);y.startPath();for(const n of Y(t))y.pushXY(n.x,x*n.y);return y.reset(),y}function d(n,t,x){const y=[{x:n.xmin,y:n.ymin},{x:n.xmin,y:n.ymax},{x:n.xmax,y:n.ymax},{x:n.xmax,y:n.ymin},{x:n.xmin,y:n.ymin}];return t&&v(y,t),P(y,x)}function g(n,t,x){const y=k(n);return t&&v(y,t),P(y,x)}function k(n){const t=f(n,1),x=[{x:n.xmin+t,y:n.ymin}];return w(x,n.xmin+t,n.ymin+t,t,-Math.PI/2,-Math.PI),x.push({x:n.xmin,y:n.ymax-t}),w(x,n.xmin+t,n.ymax-t,t,Math.PI,Math.PI/2),x.push({x:n.xmax-t,y:n.ymax}),w(x,n.xmax-t,n.ymax-t,t,Math.PI/2,0),x.push({x:n.xmax,y:n.ymin+t}),w(x,n.xmax-t,n.ymin+t,t,0,-Math.PI/2),x.push(x[0]),x}function I(n,t){return P(z(n),t)}function S(n,t,x){if(!t)return I(n,x);const y=z(n),i=y.length,m=A(y,t.points[0]),a=A(y,t.points[t.points.length-1]),e=(a-m+i)%i,r=i-e;return e<=r?y.splice(m+1,Math.max(e-1,0),...t.points):y.splice(a+1,Math.max(r-1,0),...t.points.slice().reverse()),P(y,x)}function z(n){const t=.5*(n.xmin+n.xmax),x=.5*(n.ymin+n.ymax),y=.5*(n.xmax-n.xmin),i=.5*(n.ymax-n.ymin),m=[],a=32;for(let e=0;e<a;e++){const n=2*Math.PI*e/a;m.push({x:t+y*Math.cos(n),y:x+i*Math.sin(n)})}return m}function A(n,t){let x=0,y=1/0;for(let i=0;i<n.length;i++){const m=l(n[i],t);m<y&&(y=m,x=i)}return x}function G(n,t,x,y,i,m){const a=n.xmax-n.xmin,e=n.ymax-n.ymin,r=n.xmin+a/2,o=n.ymin+e/2;let s=-1;if(t.x>=n.xmin&&t.x<=n.xmax?t.y<=n.ymin?s=t.x<=r?7:6:t.y>=n.ymax&&(s=t.x<=r?2:3):s=t.x<n.xmin?t.y<=o?0:1:t.y<=o?5:4,s<0)return null;const u=F(n)[s];if(l(u,t)<i)return null;let c,h;const M=f(n,y),p=1===y?a/4-M:a/2,b=1===y?e/4-M:e/2,P=null==m?a/8:Math.min(m/2,Math.max(p,0)),d=null==m?e/8:Math.min(m/2,Math.max(b,0));switch(s){case 0:case 1:c={x:u.x,y:u.y-d},h={x:u.x,y:u.y+d};break;case 2:case 3:c={x:u.x-P,y:u.y},h={x:u.x+P,y:u.y};break;case 4:case 5:c={x:u.x,y:u.y+d},h={x:u.x,y:u.y-d};break;default:c={x:u.x+P,y:u.y},h={x:u.x-P,y:u.y}}return{index:s,points:[c,x,h]}}function w(n,t,x,y,i,m){const a=4;for(let e=1;e<=a;e++){const r=i+(m-i)*e/a;n.push({x:t+y*Math.cos(r),y:x+y*Math.sin(r)})}}function v(n,t){const[x,,y]=t.points;for(let i=0;i<n.length-1;i++)if(C(x,n[i],n[i+1])&&C(y,n[i],n[i+1]))return void n.splice(i+1,0,...t.points)}function C(n,t,x){const y=1e-9,i=(n.x-t.x)*(x.y-t.y)-(n.y-t.y)*(x.x-t.x);return!(Math.abs(i)>y)&&(n.x>=Math.min(t.x,x.x)-y&&n.x<=Math.max(t.x,x.x)+y&&n.y>=Math.min(t.y,x.y)-y&&n.y<=Math.max(t.y,x.y)+y)}function F(n){const t=n.xmax-n.xmin,x=n.ymax-n.ymin;return[{x:n.xmin,y:n.ymin+x/4},{x:n.xmin,y:n.ymax-x/4},{x:n.xmin+t/4,y:n.ymax},{x:n.xmax-t/4,y:n.ymax},{x:n.xmax,y:n.ymax-x/4},{x:n.xmax,y:n.ymin+x/4},{x:n.xmax-t/4,y:n.ymin},{x:n.xmin+t/4,y:n.ymin}]}function N(n,t,x,y,i,m){const a=Math.max(m,Math.min(x.xmax-x.xmin,x.ymax-x.ymin)/4);switch(i){case 1:{if("left"===y||"right"===y){const x=.5*(n.x+t.x);return[n,{x,y:n.y},{x,y:t.y},t]}const x=.5*(n.y+t.y);return[n,{x:n.x,y:x},{x:t.x,y:x},t]}case 2:{const x=O(n,y,a);return[n,x,E(x,t,y),t]}case 3:{const x=O(n,y,a);if("left"===y||"right"===y){const y=.5*(x.x+t.x);return[n,x,{x:y,y:x.y},{x:y,y:t.y},t]}const i=.5*(x.y+t.y);return[n,x,{x:x.x,y:i},{x:t.x,y:i},t]}case 4:{const n="top"===y?x.ymax:x.ymin;return[{x:x.xmin,y:n},{x:x.xmax,y:n},t]}case 5:case 6:{const x=5===i?-1:1,m=l(n,t)/4||a,e={x:.5*(n.x+t.x),y:.5*(n.y+t.y)};return"left"===y||"right"===y?[n,{x:e.x,y:e.y+x*m},t]:[n,{x:e.x+x*m,y:e.y},t]}default:return[n,t]}}function T(n,t,x){return"left"===x||"right"===x?{x:"left"===x?n.xmin:n.xmax,y:n.ymin}:{x:Q(t.x,n.xmin,n.xmax),y:"top"===x?n.ymax:n.ymin}}function E(n,t,x){return"left"===x||"right"===x?{x:n.x,y:t.y}:{x:t.x,y:n.y}}function O(n,t,x){switch(t){case"left":return{x:n.x-x,y:n.y};case"top":return{x:n.x,y:n.y+x};case"right":return{x:n.x+x,y:n.y};case"bottom":return{x:n.x,y:n.y-x}}}function X(n){return n.filter((t,x)=>0===x||t.x!==n[x-1].x||t.y!==n[x-1].y)}function Y(n){if(!n.length)return n;const t=n[0],x=n[n.length-1];return t.x===x.x&&t.y===x.y?n:[...n,t]}function Q(n,t,x){return Math.max(t,Math.min(x,n))}export{a as autoSnap,m as center,i as contains,s as createAccentBar,c as createBalloonGeometry,r as createLeaderPath,u as createPointGeometry,o as createRectangle,l as distance,M as expandBounds,t as extractCalloutData,h as getBalloonBodyBounds,f as getBalloonCornerRadius,y as inflateBounds,p as isFiniteBounds,e as resolveLeaderSide,x as scaleMargins};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/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 r}from"../../core/lang.js";import i from"../../core/Logger.js";import{pt2px as o,px2pt as a}from"../../core/screenUtils.js";import{numericHash as s}from"../../core/string.js";import{checkForAnimations as l,globalRotation as n,getAnimationParams as m,handleAbsoluteAnchor as c,handleMarker as p,handleRelativeAnchor as f,getFrameTranslation as y,translate as d,getStaticParam as h,shouldUseAnimatedPath as u}from"./animationUtils.js";import{CIMSymbolInflatedSizeHelper as v,CIMSymbolHelper as O,forEachSymbolLayer as g}from"./CIMSymbolHelper.js";import{antialiasingOutlineFillSettings as S}from"./constants.js";import{defaultCIMValues as _}from"./defaultCIMValues.js";import{fitVectorMarker as M}from"./fitVectorMarker.js";import{fromCIMFontStyle as C}from"./fromCIMFontStyle.js";import{OverrideHelper as b}from"./OverrideHelper.js";import{hasRichTextFormattingTags as k}from"./richTextUtils.js";import{getSDFInfo as z,getExtent as x,getSDFMetrics as P,getSDFDimensions as I}from"./SDFHelper.js";import{CIMSymbolUnits as L}from"./types.js";import{colorToArray as E,normalizeAlpha as V,getSize as N,isCIMMarkerStrokePlacement as R,hasStrokeLayer as T,getNumericValue as w,getMaxStrokeWidth as G,getTintColor as A,normalizePrimitiveOverrideProps as F,getDefaultCIMValue as X,getEnum as Y,getFillColor as j,getStrokeColor as W,fromCIMFontDecoration as D,getStrokeWidth as H,fromCIMVerticalAlignment as U,fromCIMHorizontalAlignment as B,getTextCasing as J,isValidCIMValue as q,uncapitalize as K}from"./utils.js";import{EffectHelper as Q}from"./effects/EffectHelper.js";import{rasterizedVectorMarkerMinSize as Z,randomInsidePolygonTextureSize as $}from"../../views/2d/engine/webgl/definitions.js";const ee=()=>i.getLogger("esri.symbols.cim.cimAnalyzer");function te(e){const t=e.markerPlacement;return t&&t.angleToLine?1:0}class re{constructor(e){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[],this._hasTextStringTemplates=!1,e&&(this._resourceManager=e)}analyzeSymbolReference(t,r,i){if(this._cimLayers=i??[],!t)return this._cimLayers;if(this._reset(),this._hasTextStringTemplates=t.hasTextStringTemplates??!1,t.primitiveOverrides){this._primitiveOverrides=t.primitiveOverrides;for(const t of this._primitiveOverrides){const r=t.valueExpressionInfo;if(r)this._setPoMap(t.primitiveName,t.propertyName,r);else if(null!=t.value){let r=t.value;t.propertyName.includes("Color")&&(e(r)&&(r=E(r)),r=V(r)),this._setPoMap(t.primitiveName,t.propertyName,r)}}}return this._analyzeSymbol(t.symbol,r),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){const r=e?.symbolLayers;if(!r)return;for(let l=0;l<r.length;l++){const e=r[l];"CIMVectorMarker"===e.type&&(r[l]=M(e))}const i=e.effects;let o=0;const a=N(e)??0;"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(o=1);const s=l(e);let c={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:s,hasShiftAnimation:!1,hasMotionAnimations:!1};if(c=n(c),c=m(this._poMap,e,c),"CIMPointSymbol"===e.type&&(this._analyzePointSymbolHalo(e,o,a,i,s),this._analyzeCallout(e,null,[],c,a,o,t)),de(r,i))return this._analyzeCompositeOutlineFill(r,i,a);this._analyzeSymbolLayer(e,null,[],c,a,o,t)}_analyzeSymbolLayer(e,t,r,i,o,a,s){const l=e?.symbolLayers;if(!l)return;const n="CIMPolygonSymbol"===e.type,m=e.effects;let c=l.length;for(;c--;){const p=l[c];if(!p||!1===p.enable)continue;let f;m?.length&&(f=[...m]);const y=p.effects;y?.length&&(m?f.push(...y):f=[...y]);let d=t?[...t]:null;if(f){d??=[];for(const e of f){const t=b.findEffectOverrides(e,this._primitiveOverrides);t&&d.push(t)}}const h=[];b.findApplicableOverrides(p,this._primitiveOverrides,h);const u=this._cimLayers.length;switch(p.type){case"CIMSolidFill":this._analyzeSolidFill(p,d,i,T(l));break;case"CIMPictureFill":this._analyzePictureFill(p,d,i);break;case"CIMHatchFill":this._analyzeHatchFill(p,d,i);break;case"CIMGradientFill":this._analyzeGradientFill(p,d);break;case"CIMSolidStroke":this._analyzeSolidStroke(p,d,n,o,i);break;case"CIMPictureStroke":this._analyzePictureStroke(p,d,n,o,i);break;case"CIMGradientStroke":this._analyzeGradientStroke(p,d,n,o);break;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":{"CIMLineSymbol"!==e.type&&"CIMPolygonSymbol"!==e.type||(a=te(p));const t=[],l=p.primitiveName;l&&t.push(l);const m=n&&R(p.markerPlacement);this._analyzeMarker(p,d,null,t,a,o,s,r,i,!1,m);break}default:ee().error("Cannot analyze CIM layer",p.type)}if(d?.some(({effect:e})=>me(e)))for(let e=u;e<this._cimLayers.length;e++)this._cimLayers[e].effectsChangeGeometryType=!0}}_analyzePointSymbolHalo(e,t,i,o,s){const{haloSymbol:l}=e,n=w(e.haloSize,0);if(n<=0||!l?.symbolLayers)return;const m=l.symbolLayers.filter(e=>!1!==e.enable),c=m[0];if(!c)return;const p=1===m.length&&"CIMSolidFill"===c.type;if(s)return void ee().warnOnce("CIM point symbol halos are not supported with symbol animations");const f=o?.map(e=>b.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e);if(f?.some(({effect:e})=>me(e))){if(!p)return void ee().warnOnce("Complex CIM point symbol halos are not supported with geometry-changing effects");const t=e.symbolLayers?.filter(e=>!1!==e.enable)??[];if(!fe(t,f))return void ee().warnOnce("CIM point symbol halos with geometry-changing effects currently require polygon-producing effects and solid fill or stroke layers");const r=G(t),o=this._getValueOrOverrideExpression(c.type,c.primitiveName,"Color",V(c.color));return void this._cimLayers.push({type:"outlineFill",name:c.name,colorLocked:!0,color:o,effects:f,effectsChangeGeometryType:!0,outlineColorLocked:!0,outlineColor:o,outlineWidth:2*n+r,cap:"Round",join:"Round",referenceWidth:i,pixelBufferSize:2*n+r,outlineEffects:f})}const y=e.symbolLayers?.filter(e=>!1!==e.enable)??[],d=1===y.length&&"CIMVectorMarker"===y[0].type?y[0]:null,h=new Set(d?this._primitiveOverrides.filter(e=>e.primitiveName===d.primitiveName&&["Rotation","OffsetX","OffsetY"].includes(e.propertyName)).map(e=>e.propertyName):[]),u=h.size>0?d:null,g=r(e);if(g.effects=void 0,g.angle=0,g.scaleX=1,u){const e=g.symbolLayers?.find(e=>"CIMVectorMarker"===e.type&&!1!==e.enable);e&&(h.has("Rotation")&&(e.rotation=0),h.has("OffsetX")&&(e.offsetX=0),h.has("OffsetY")&&(e.offsetY=0))}const S={...g,haloSize:0,haloSymbol:void 0},_=v.getPointSymbolHaloPadding(e,this._resourceManager),[M,C,k]=O.getTextureAnchor(S,this._resourceManager,Z,_),x=a(k),P=[];b.findApplicableOverrides(g,this._primitiveOverrides,P);const I=u?P.filter(e=>e.primitiveName!==u.primitiveName||!["Rotation","OffsetX","OffsetY"].includes(e.propertyName)):P,L=u?[{offsetX:this._getValueOrOverrideExpression(u.type,u.primitiveName,"OffsetX",h.has("OffsetX")?w(u.offsetX):0),offsetY:this._getValueOrOverrideExpression(u.type,u.primitiveName,"OffsetY",h.has("OffsetY")?w(u.offsetY):0),rotation:this._getValueOrOverrideExpression(u.type,u.primitiveName,"Rotation",h.has("Rotation")?w(u.rotation):0),size:x,frameHeight:x,rotateClockWise:!!u.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:!1}]:[];this._cimLayers.push({type:"marker",spriteRasterizationParam:{type:"sprite-rasterization-param",resource:{type:"cim-point-symbol-halo",symbol:g,sdf:p&&null!=z(S)},overrides:I},colorLocked:!0,color:p?this._getValueOrOverrideExpression(c.type,c.primitiveName,"Color",V(c.color)):[255,255,255,1],effects:f??null,effectsChangeGeometryType:f?.some(({effect:e})=>me(e)),scaleSymbolsProportionally:!1,alignment:t,anchorPoint:{x:M,y:C},isAbsoluteAnchorPoint:!1,size:x,scaleX:w(e.scaleX,1),rotation:w(e.angle,0),offsetX:0,offsetY:0,outlineColor:[0,0,0,0],outlineWidth:0,transform:{type:"cim-marker-transform-param",params:L},frameHeight:x,widthRatio:1,rotateClockwise:!0,referenceSize:i||x,sizeRatio:1,markerPlacement:null,isOutline:!1})}_analyzeSolidFill(e,t,r,i){const{primitiveName:o,type:a}=e,s=V(e.color),l=m(this._poMap,e,r);if(!i&&t?.some(e=>"CIMGeometricEffectTaperedPolygon"===e.effect.type)){const r=this._getValueOrOverrideExpression(a,o,"Color",s);return void this._cimLayers.push({type:"outlineFill",name:e.name,colorLocked:!!e.colorLocked,color:r,effects:t,outlineColor:r,outlineColorLocked:!!e.colorLocked,...S,outlineEffects:t})}this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:null,colorLocked:!!e.colorLocked,color:this._getValueOrOverrideExpression(a,o,"Color",s),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t,applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!1,animationParams:ve(l)})}_analyzePictureFill(e,t,r){const{primitiveName:i,type:o}=e,a=A(e),s=w(e.height,_.CIMPictureFill.height);let l=w(e.scaleX,1);if("width"in e&&"number"==typeof e.width){const t=e.width;let r=1;const i=this._resourceManager.getResource(e.url);null!=i&&(r=i.width/i.height),l/=r*(s/t)}const n={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(i,o)},c=m(this._poMap,e,r);this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:n,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(o,i,"TintColor",a),height:this._getValueOrOverrideExpression(o,i,"Height",s),scaleX:this._getValueOrOverrideExpression(o,i,"ScaleX",l),angle:this._getValueOrOverrideExpression(o,i,"Rotation",w(e.rotation)),offsetX:this._getValueOrOverrideExpression(o,i,"OffsetX",w(e.offsetX)),offsetY:this._getValueOrOverrideExpression(o,i,"OffsetY",w(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1,animationParams:ve(c)})}_analyzeHatchFill(e,t,r){const{primitiveName:i,type:o}=e,a=m(this._poMap,e,r),s=this._analyzeMaterialOverrides(i,["Rotation","OffsetX","OffsetY"]),l=F(s);let n=[255,255,255,1],c=!1;if(e.lineSymbol?.symbolLayers)for(const m of e.lineSymbol.symbolLayers){if("CIMSolidStroke"!==m.type)continue;const e=m.primitiveName??i;c||!e||m.colorLocked||null==this._poMap[e]?.Color&&null==this._poMap[e]?.StrokeColor||(n=V(m.color),n=this._maybeGetValueOrOverrideExpression(e,"StrokeColor")??this._getValueOrOverrideExpression(o,e,"Color",n),c=!0);const t=this._maybeGetValueOrOverrideExpression(e,"StrokeWidth");if(t){let r=null,i=null;"number"==typeof t?r=t:i=t.valueExpressionInfo;let a=l.find(e=>"strokeWidth"===e.propertyName);a?a.propertyName="width":(a={type:"CIMPrimitiveOverride",primitiveName:e,propertyName:"width",valueExpressionInfo:i,value:r,defaultValue:X(o,"width")},l.push(a))}}const p={type:"sprite-rasterization-param",resource:e,overrides:l};this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:p,colorLocked:!!e.colorLocked,effects:t,color:n,height:this._getValueOrOverrideExpression(o,i,"Separation",w(e.separation,_.CIMHatchFill.separation)),scaleX:1,angle:this._getValueOrOverrideExpression(o,i,"Rotation",w(e.rotation)),offsetX:this._getValueOrOverrideExpression(o,i,"OffsetX",w(e.offsetX)),offsetY:this._getValueOrOverrideExpression(o,i,"OffsetY",w(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!c,animationParams:ve(a)})}_analyzeGradientFill(e,t){const{angle:r,gradientMethod:i,gradientSize:o,gradientSizeUnits:a,gradientType:s,interval:l,primitiveName:n,type:m}=e,c=_.CIMGradientFill,p=e.colorRamp;this._cimLayers.push({type:"gradientFill",name:e.name,spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(n,m)},colorLocked:!1,effects:t,color:[255,255,255,1],gradientMethod:this._getValueOrOverrideExpression(m,n,"GradientMethod",i??"Linear"),angle:this._getValueOrOverrideExpression(m,n,"Angle",w(r,c.angle)),gradientType:this._getValueOrOverrideExpression(m,n,"GradientType",s??c.gradientType),interval:this._getValueOrOverrideExpression(m,n,"Interval",w(l,"CIMFixedColorRamp"===p.type?p.colors.length:c.interval)),gradientSize:this._getValueOrOverrideExpression(m,n,"GradientSize",w(o,c.gradientSize)),gradientSizeUnits:"Absolute"===a?L.Absolute:"Relative"===a?L.Relative:c.gradientSizeUnits})}_analyzeCompositeOutlineFill(e,t,r,i=[]){const o=e.find(e=>"CIMSolidFill"===e.type),a=e.find(e=>"CIMSolidStroke"===e.type);if(null==o||null==a)return;const s=[...i,...[...t??[],...o.effects??[]].map(e=>b.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e)],l=[...i,...[...t??[],...a.effects??[]].map(e=>b.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e)],n=w(a.width,_.CIMSolidStroke.width),m=Y(a.capStyle,_.CIMSolidStroke.capstyle),c=Y(a.joinStyle,_.CIMSolidStroke.joinstyle),p=a.miterLimit;this._cimLayers.push({type:"outlineFill",name:o.name,colorLocked:!!o.colorLocked,color:this._getValueOrOverrideExpression(o.type,o.primitiveName,"Color",V(o.color)),effects:s,effectsChangeGeometryType:s.some(({effect:e})=>me(e))||l.some(({effect:e})=>me(e)),outlineColorLocked:!!a.colorLocked,outlineColor:this._getValueOrOverrideExpression(a.type,a.primitiveName,"Color",V(a.color)),outlineWidth:this._getValueOrOverrideExpression(a.type,a.primitiveName,"Width",n),cap:this._getValueOrOverrideExpression(a.type,a.primitiveName,"CapStyle",m),join:this._getValueOrOverrideExpression(a.type,a.primitiveName,"JoinStyle",c),miterLimit:p&&this._getValueOrOverrideExpression(a.type,a.primitiveName,"MiterLimit",p),referenceWidth:r,outlineEffects:l})}_analyzeSolidStroke(e,t,r,i,o){const{primitiveName:a,type:s}=e,l=V(e.color),n=w(e.width,_.CIMSolidStroke.width),c=Y(e.capStyle,_.CIMSolidStroke.capstyle),p=Y(e.joinStyle,_.CIMSolidStroke.joinstyle),f=e.miterLimit;let y,d,h,u,v=[];if(this._analyzePrimitiveOverrides(a,t,null,null)&&(v=this._getPrimitiveMaterialOverrides(a,s)),t&&Array.isArray(t)&&t.length>0){const e=t[t.length-1].effect;e&&"CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&(y=e.dashTemplate,d=e.scaleDash,h=e.offsetAlongLine,u=e.primitiveName,(t=[...t]).pop())}null!=u&&v.push(...this._getPrimitiveMaterialOverrides(u,s).filter(e=>"dashTemplate"===e.propertyName));const O=void 0!==y?{type:"sprite-rasterization-param",resource:{type:"dash",dashTemplate:y,primitiveName:u},overrides:v}:null,g=m(this._poMap,e,o);this._cimLayers.push({type:"line",name:e.name,spriteRasterizationParam:O,isOutline:r,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(s,a,"Color",l),width:this._getValueOrOverrideExpression(s,a,"Width",n),cap:this._getValueOrOverrideExpression(s,a,"CapStyle",c),join:this._getValueOrOverrideExpression(s,a,"JoinStyle",p),miterLimit:f&&this._getValueOrOverrideExpression(s,a,"MiterLimit",f),referenceWidth:i,zOrder:oe(e.name),dashTemplate:this._maybeGetValueOrOverrideExpression(u,"DashTemplate")??y,offsetAlongLine:this._getValueOrOverrideExpression(s,u,"OffsetAlongLine",h??0),scaleDash:d,sampleAlphaOnly:!0,animationParams:ve(g)})}_analyzePictureStroke(e,t,r,i,o){const{primitiveName:a,type:s}=e,l=A(e),n=w(e.width,_.CIMPictureStroke.width),c=Y(e.capStyle,_.CIMPictureStroke.capstyle),p=Y(e.joinStyle,_.CIMPictureStroke.joinstyle),f=e.miterLimit,y={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(a,s)},d=m(this._poMap,e,o);this._cimLayers.push({type:"line",name:e.name,spriteRasterizationParam:y,isOutline:r,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(s,a,"TintColor",l),width:this._getValueOrOverrideExpression(s,a,"Width",n),cap:this._getValueOrOverrideExpression(s,a,"CapStyle",c),join:this._getValueOrOverrideExpression(s,a,"JoinStyle",p),miterLimit:f&&this._getValueOrOverrideExpression(s,a,"MiterLimit",f),referenceWidth:i,zOrder:oe(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1,animationParams:ve(d)})}_analyzeGradientStroke(e,t,r,i){const{gradientMethod:o,gradientSize:a,gradientSizeUnits:s,gradientType:l,interval:n,primitiveName:m,type:c}=e,p=_.CIMGradientStroke,f=w(e.width,p.width),y=Y(e.capStyle,p.capstyle),d=Y(e.joinStyle,p.joinstyle),h=e.miterLimit,u=e.colorRamp;this._cimLayers.push({type:"gradientStroke",name:e.name,spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(m,c)},colorLocked:!!e.colorLocked,effects:t,color:[255,255,255,1],width:this._getValueOrOverrideExpression(c,m,"Width",f),cap:this._getValueOrOverrideExpression(c,m,"CapStyle",y),join:this._getValueOrOverrideExpression(c,m,"JoinStyle",d),miterLimit:h&&this._getValueOrOverrideExpression(c,m,"MiterLimit",h),referenceWidth:i,isOutline:r,gradientMethod:this._getValueOrOverrideExpression(c,m,"GradientMethod",o??p.gradientMethod),gradientType:this._getValueOrOverrideExpression(c,m,"GradientType",l??p.gradientType),interval:this._getValueOrOverrideExpression(c,m,"Interval",w(n,"CIMFixedColorRamp"===u.type?u.colors.length:p.interval)),gradientSize:this._getValueOrOverrideExpression(c,m,"GradientSize",w(a,p.gradientSize)),gradientSizeUnits:"Absolute"===s?L.Absolute:"Relative"===s?L.Relative:p.gradientSizeUnits})}_analyzeMarker(e,t,r,i,o,a,s,l,n,y=!1,d=!1){y||=!!e.colorLocked;let h=n;if(h=c(e,h),h=p(this._poMap,e,h),h=f(e,h),h=m(this._poMap,e,h),this._analyzeMarkerInsidePolygon(e,t,y,h))return;const u=w(e.size,_.CIMVectorMarker.size),v=w(e.rotation),O=w(e.offsetX),g=w(e.offsetY),{primitiveName:S,type:M}=e,C=this._getValueOrOverrideExpression(M,S,"Size",u),b=this._getValueOrOverrideExpression(M,S,"Rotation",v),k=this._getValueOrOverrideExpression(M,S,"OffsetX",O),z=this._getValueOrOverrideExpression(M,S,"OffsetY",g);switch(e.type){case"CIMPictureMarker":this._analyzePictureMarker(e,t,r,i,o,a,C,b,k,z,l,h,y,d);break;case"CIMVectorMarker":this._analyzeVectorMarker(e,t,r,i,o,a,C,b,k,z,l,h,s,y,d)}}_analyzeMarkerInsidePolygon(e,t,r,i){const{markerPlacement:o,type:s}=e;if(!o||"CIMMarkerPlacementInsidePolygon"!==o.type||i.hasMotionAnimations)return!1;if("CIMVectorMarker"===s||"CIMPictureMarker"===s){const r=e.primitiveName;if(r&&this._analyzePrimitiveOverrides([r],t,null,null))return!1;const i=o.primitiveName;if(i&&this._analyzePrimitiveOverrides([i],t,null,null))return!1;if("CIMVectorMarker"===s){const{markerGraphics:t}=e;if(t)for(const e of t){const{symbol:t}=e;if("CIMPolygonSymbol"===t?.type&&t.symbolLayers){const{symbolLayers:e}=t;for(const t of e)if("CIMSolidStroke"===t.type)return!1}}}else{const{animatedSymbolProperties:t}=e;if(t)return!1}}const l=Math.abs(o.stepX),n=Math.abs(o.stepY);if(0===l||0===n)return!0;let m,c;if("Random"===o.gridType){const e=a($),t=Math.max(Math.floor(e/l),1);m=n*Math.max(Math.floor(e/n),1);c=t*l/m}else o.shiftOddRows?(m=2*n,c=l/n*.5):(m=n,c=l/n);const p=A(e),f="CIMCharacterMarker"===e.type?null:{type:"sprite-rasterization-param",resource:{...e,effects:e.effects?.filter(e=>!ne(e))},overrides:[]};return this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:f,colorLocked:r,effects:t,color:p,height:m,scaleX:c,angle:o.gridAngle??0,offsetX:w(o.offsetX),offsetY:w(o.offsetY),applyRandomOffset:"Random"===o.gridType,sampleAlphaOnly:"CIMPictureMarker"!==e.type,hasUnresolvedReplacementColor:!0,animationParams:ve(i)}),!0}_analyzePictureMarker(e,t,i,o,a,l,n,m,c,p,f,y,d,h){const{animatedSymbolProperties:u,primitiveName:v,type:O}=e;let g=w(e.scaleX,1);const S=A(e);i||(i=this._createMarkerPlacementOverrideExpression(e.markerPlacement));const _=this._createGIFAnimatedSymbolPropertiesOverrideExpression(u),M=e.anchorPoint??{x:0,y:0};if("width"in e&&"number"==typeof e.width){const t=e.width;let r=1;const i=this._resourceManager.getResource(e.url);null!=i&&(r=i.width/i.height);g/=r*(w(e.size)/t)}const C=[...o];let b;e.primitiveName&&C.push(e.primitiveName),u||_?b={type:"animated",url:e.url,urlHash:"H"+s(e.url),playAnimation:e.animatedSymbolProperties?.playAnimation,reverseAnimation:e.animatedSymbolProperties?.reverseAnimation,randomizeStartTime:e.animatedSymbolProperties?.randomizeStartTime,randomizeStartSeed:e.animatedSymbolProperties?.randomizeStartSeed,startTimeOffset:e.animatedSymbolProperties?.startTimeOffset,duration:e.animatedSymbolProperties?.duration,repeatType:e.animatedSymbolProperties?.repeatType,repeatDelay:e.animatedSymbolProperties?.repeatDelay}:(b=r(e),b.markerPlacement=null);const k={type:"sprite-rasterization-param",resource:b,overrides:this._getMaterialOverrides(C,O)};_&&k.overrides.push(..._.overrides);const z=n;this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:k,colorLocked:d,effects:t,scaleSymbolsProportionally:!1,alignment:a,size:n,scaleX:this._getValueOrOverrideExpression(O,v,"ScaleX",g),rotation:m,offsetX:c,offsetY:p,transform:{type:"cim-marker-transform-param",params:f},color:this._getValueOrOverrideExpression(O,v,"TintColor",S),anchorPoint:{x:M.x,y:M.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:[0,0,0,0],outlineWidth:0,frameHeight:0,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:1,isOutline:h,markerPlacement:i,animationParams:ve(y),baseSize:z})}_analyzeVectorMarker(e,t,r,i,o,a,s,l,n,m,c,p,f,u,v){const O=e.markerGraphics;if(!O)return;const g=e.frame;let S=0;S=g?g.ymax-g.ymin:a;const _=!!e.scaleSymbolsProportionally;if(S){const t={offsetX:n,offsetY:m,rotation:l,size:s,frameHeight:S,rotateClockWise:!!e.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:_};c=[...c,t]}r||(r=this._createMarkerPlacementOverrideExpression(e.markerPlacement));for(const M of O)if(M){const s=M.symbol;if(!s)continue;const l=M.primitiveName;l&&i.push(l);let n,m=p;if(("CIMPointSymbol"===s.type||"CIMTextSymbol"===s.type)&&g){let t=0,r=0;const i=M.geometry;"x"in i&&"y"in i&&(t+=i.x-.5*(g.xmin+g.xmax),r+=i.y-.5*(g.ymin+g.ymax));const o=e.anchorPoint;let a=!1;o&&("Absolute"===e.anchorPointUnits?(t-=o.x,r-=o.y,a=!0):g&&(t-=(g.xmax-g.xmin)*o.x,r-=(g.ymax-g.ymin)*o.y));const s={offsetX:t,offsetY:r,rotation:0,size:0,frameHeight:0,rotateClockWise:!1,absoluteAnchorPoint:a,scaleSymbolsProportionally:_};n=[...c,s]}"CIMPointSymbol"!==s.type&&"CIMTextSymbol"!==s.type||this._analyzeCallout(s,t,n??c,m,a,o,f);const O=M.geometry,[C,b]=y(O,g);switch(0===C&&0===b||(m=d(m,C,b)),s.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":f||le(s)?(m={...m,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!0,selectGlobalRotation:!1,translation:h([0,0]),rotation:h(0),scale:h(S),parent:p.transform}},this._analyzeMultiLayerGraphicNonSDF(e,t,r,M,i,o,a,n??c,m,S,u,v)):this._analyzeMultiLayerGraphic(e,t,r,M,i,o,a,n??c,m,S,u,v);break;case"CIMTextSymbol":this._analyzeTextGraphic(t,r,M,i,o,a,n??c,u)}l&&i.pop()}}_analyzeCallout(e,t,r,i,o,a,s){const l=e.callout;if(!l||!ce(l))return;const n=t??[],{leaderTolerance:m,leaderOffset:c}=l,p=500;switch(l.type){case"CIMSimpleLineCallout":{const{lineSymbol:e,autoSnap:t}=l,f={type:"CIMSimpleLineCallout",leaderTolerance:m,leaderOffset:c,autoSnap:t,inflateSize:p};this._analyzeSymbolLayer(e,[...n,{type:"cim-effect-param",effect:f,overrides:[]}],r,i,o,a,s);break}case"CIMBackgroundCallout":{const{accentBarSymbol:e,gap:t,backgroundSymbol:f,leaderLineSymbol:y,lineStyle:d,margin:h}=l,u=e=>({type:"CIMBackgroundCallout",leaderTolerance:m,leaderOffset:c,lineStyle:d,gap:t,margin:h,inflateSize:p,part:e}),v=[...n,{type:"cim-effect-param",effect:u("background"),overrides:[]}];y&&this._analyzeSymbolLayer(y,[...n,{type:"cim-effect-param",effect:u("leader"),overrides:[]}],r,i,o,a,s);const O=f.symbolLayers??[];he(O)?this._analyzeCompositeOutlineFill(O,null,o,v):this._analyzeSymbolLayer(f,v,r,i,o,a,s),e&&this._analyzeSymbolLayer(e,[...n,{type:"cim-effect-param",effect:u("accent-bar"),overrides:[]}],r,i,o,a,s);break}case"CIMBalloonCallout":{const{balloonStyle:e,backgroundSymbol:t,fixedDartWidth:f,margin:y,useFixedDartWidth:d}=l,h={type:"CIMBalloonCallout",leaderTolerance:m,leaderOffset:c,margin:y,balloonStyle:e,dartWidth:d?f:void 0,inflateSize:p,part:"background"},u=[...n,{type:"cim-effect-param",effect:h,overrides:[]}],v=t.symbolLayers??[];he(v)?this._analyzeCompositeOutlineFill(v,null,o,u):this._analyzeSymbolLayer(t,u,r,i,o,a,s);break}case"CIMPointSymbolCallout":{const{backgroundScale:e,gap:t,leaderLineSymbol:f,lineStyle:y,pointSymbol:d}=l,h=r=>({type:"CIMPointSymbolCallout",leaderTolerance:m,leaderOffset:c,backgroundScale:e,lineStyle:y,gap:t,inflateSize:p,part:r});f&&this._analyzeSymbolLayer(f,[...n,{type:"cim-effect-param",effect:h("leader"),overrides:[]}],r,i,o,a,s),this._analyzeSymbolLayer(d,[...n,{type:"cim-effect-param",effect:h("marker"),overrides:[]}],r,i,o,a,s);break}}}_analyzeMultiLayerGraphic(e,t,r,i,o,a,s,l,n,m,c,p){const f=i.symbol,y=f.symbolLayers;if(y){if(!se(y)||u(n))return ye(y)?(g(f,e=>{e.colorLocked&&(c=!0)}),void this._analyzeMultiLayerGraphicNonSDF(e,t,r,i,o,a,s,l,n,m,c,p)):void this._analyzeMarkerGraphicSymbolLayers(e,t,r,i,o,a,s,l,n,m,c,p);this._analyzeCompositeMarkerGraphic(e,t,r,i,y,a,s,l,m,c,p)}}_analyzeMarkerGraphicSymbolLayers(e,t,r,i,o,a,s,l,n,c,p,f){const y=i.symbol,d=y.symbolLayers;if(!d)return;const h=Q.applyEffects(y.effects,i.geometry);if(!h)return;let u=d.length;for(;u--;){const y=d[u];if(!y||!1===y.enable)continue;const v=y.primitiveName;switch(v&&o.push(v),y.type){case"CIMSolidFill":case"CIMSolidStroke":{const o=Q.applyEffects(y.effects,h),d=x(o);if(!d)continue;const u="Relative"!==e.anchorPointUnits,O="CIMSolidStroke"===y.type?y.width:0,{frameSizeRatio:g,anchorX:S,anchorY:M,widthRatio:C,sdfPaddingRatio:b,sdfTextureSize:k}=P(d,e.frame,e.size,e.anchorPoint,u,O,e.scaleSymbolsProportionally),z="CIMSolidFill"===y.type,L={type:"sdf",geometry:o,sdfPaddingRatio:b,asFill:z,sdfTextureSize:k},{path:E}=y,N=z?V(j(y)):null==E?V(W(y)):[0,0,0,0],R=z?[0,0,0,0]:V(W(y));if(!z&&!O)break;const T=i.primitiveName;let G=null;z&&!y.colorLocked&&(G=this._maybeGetValueOrOverrideExpression(T,"FillColor"));let A=null;z||y.colorLocked||(A=this._maybeGetValueOrOverrideExpression(T,"StrokeColor"));const F=G??this._getValueOrOverrideExpression(y.type,v,"Color",N),X=A??this._getValueOrOverrideExpression(y.type,v,"Color",R),Y=this._maybeGetValueOrOverrideExpression(T,"StrokeWidth")??this._getValueOrOverrideExpression(y.type,v,"Width",O),D=E?{type:"sprite-rasterization-param",resource:{type:"path",path:E,asFill:z},overrides:[]}:{type:"sprite-rasterization-param",resource:L,overrides:[]},H=m(this._poMap,y,n),U=w(e.size,_.CIMVectorMarker.size),B=this._getValueOrOverrideExpression(e.type,e.primitiveName,"Size",U);this._cimLayers.push({type:"marker",name:y.name,groupName:e.name,spriteRasterizationParam:D,colorLocked:!!y.colorLocked||!!p,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:S,y:M},isAbsoluteAnchorPoint:u,size:c,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:c,widthRatio:C,rotateClockwise:!1,referenceSize:s,sizeRatio:g,color:F,outlineColor:X,outlineWidth:Y,isOutline:f,markerPlacement:r,animationParams:ve(H),isStroke:"CIMSolidFill"!==y.type,baseSize:B,...I(o,k,b)});break}case"CIMPictureMarker":case"CIMVectorMarker":if(y.markerPlacement){ee().error("Error analyzing CIM, got unexpected marker placement");break}this._analyzeMarker(y,t,r,o,a,s,!1,l,n,p,f)}v&&o.pop()}}_analyzeTextGraphic(e,r,i,o,a,s,l,n){const m=[];b.findApplicableOverrides(i,this._primitiveOverrides,m);const c=i.geometry;if(!("x"in c)||!("y"in c))return;const p=i.symbol,f=D(p),y=C(p.fontStyleName),d=t(p.fontFamilyName);p.font={family:d,decoration:f,...y};const h=w(p.height,_.CIMTextSymbol.height),u=w(p.angle),v=w(p.offsetX),O=w(p.offsetY),{haloSymbol:g}=p,S=w(p.haloSize,0);let M=[0,0,0,0];if(g?.symbolLayers?.length){const e=g.symbolLayers;for(const t of e)if(t.color){M=this._getValueOrOverrideExpression(p?.haloSymbol?.type??"CIMPolygonSymbol",t.primitiveName,"Color",V(t.color));break}}const z=i.primitiveName;let x=[0,0,0,1],P=[0,0,0,0],I=0,L=!1;if(p.symbol?.symbolLayers)for(const t of p.symbol.symbolLayers){const e=t.primitiveName;if("CIMSolidStroke"===t.type)P=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Color",V(t.color)),I=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Width",H(t)??0);else if("CIMSolidFill"===t.type){const r=V(t.color);L=L??!!t.colorLocked,x=this._getValueOrOverrideExpression("CIMSolidFill",e??z,"Color",r)}}let E=null,N=null,R=null,T=null,G=null;z&&(E=this._maybeGetValueOrOverrideExpression(z,"TextSize"),N=this._maybeGetValueOrOverrideExpression(z,"TextAngle"),R=this._maybeGetValueOrOverrideExpression(z,"TextOffsetX"),T=this._maybeGetValueOrOverrideExpression(z,"TextOffsetY"),L||(G=this._maybeGetValueOrOverrideExpression(z,"FillColor")));const A=G??x;let F=null,X=null,Y=0;const j="CIMBackgroundCallout"===p.callout?.type;if("CIMBackgroundCallout"===p.callout?.type){const e=p.callout;if(e.backgroundSymbol){const t=e.backgroundSymbol.symbolLayers;if(t)for(const e of t)"CIMSolidFill"===e.type?F=V(e.color):"CIMSolidStroke"===e.type&&(X=V(e.color),Y=w(e.width,_.CIMSolidStroke.width))}}const W=this._getValueOrOverrideExpression(p.type,i.primitiveName,"TextString",i.textString??"");if(null==W)return;const{fontStyleName:J}=p,q=d+(J?"-"+J.toLowerCase():"-regular"),K=this._getMaterialOverrides(o,p.type);K.push(...this._getPrimitiveMaterialOverrides(i.primitiveName,p.type)),this._collectDictionaryTemplateOverrides(K,i);const Q={type:"text-rasterization-param",resource:{type:"text",textString:i.textString??"",font:p.font,symbol:p,primitiveName:i.primitiveName,supportsRichText:k(i.textString??"")||K.some(e=>"textString"===e.propertyName)},overrides:K};this._cimLayers.push({type:"text",lineWidth:p.lineWidth,textRasterizationParam:Q,colorLocked:!!n||!!L,effects:e,alignment:a,anchorPoint:{x:0,y:0},isAbsoluteAnchorPoint:!1,fontName:q,decoration:f,haloSize:S,haloColor:M,weight:y.weight,style:y.style,size:E??h,angle:N??u,offsetX:R??v,offsetY:T??O,transform:{type:"cim-marker-transform-param",params:l},horizontalAlignment:B(p.horizontalAlignment),verticalAlignment:U(p.verticalAlignment),text:W,color:A,outlineColor:P,outlineSize:I,backgroundColor:F,borderLineColor:X,borderLineWidth:Y,useBackgroundCallout:j,referenceSize:s,sizeRatio:1,markerPlacement:r})}_collectDictionaryTemplateOverrides(e,t){if(t.textString&&this._hasTextStringTemplates){const r=J(t.symbol);e.push({propertyName:"textString",defaultValue:"",valueExpressionInfo:{type:"dictionary-template",textCase:r,template:t.textString},primitiveName:t.primitiveName})}}_analyzeMultiLayerGraphicNonSDF(e,t,r,i,a,s,l,n,m,c,p,f){const y=ie(e,i),d=e.primitiveName,h=this._analyzeMaterialOverrides(d,["Rotation","OffsetX","OffsetY"]),u=F(h),[v,g,S]=O.getTextureAnchor(y,this._resourceManager,Z),M=this._getMaterialOverrides(a,e.type).filter(e=>e.primitiveName!==d||!["rotation","offsetX","offsetY"].includes(e.propertyName));M.push(...u);const C={type:"sprite-rasterization-param",resource:{...y,avoidSDFRasterization:!0},overrides:M},b=w(e.size,_.CIMVectorMarker.size),k=this._getValueOrOverrideExpression(e.type,d,"Size",b);this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:C,colorLocked:p,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:s,anchorPoint:{x:v,y:g},isAbsoluteAnchorPoint:!1,size:c,rotation:0,offsetX:0,offsetY:0,transform:{type:"cim-marker-transform-param",params:n},color:[255,255,255,1],outlineColor:[0,0,0,0],outlineWidth:0,scaleX:1,frameHeight:c,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:S/o(e.size),isOutline:f,markerPlacement:r,animationParams:ve(m),baseSize:k})}_createMarkerPlacementOverrideExpression(e){if(!e)return null;const t=[];return b.findApplicableOverrides(e,this._primitiveOverrides,t),{type:"cim-marker-placement-param",placement:e,overrides:ue(t)}}_createGIFAnimatedSymbolPropertiesOverrideExpression(e){if(!e)return null;const t=[];return b.findApplicableOverrides(e,this._primitiveOverrides,t),{type:"cim-gif-animation-params",animation:e,overrides:ue(t)}}_analyzeCompositeMarkerGraphic(e,t,r,i,o,a,s,l,n,m,c){const p=i.geometry,f=o[0],y=o[1],d=x(p);if(!d)return;const h="Relative"!==e.anchorPointUnits,u=w(f.width,_.CIMSolidStroke.width),{frameSizeRatio:v,anchorX:O,anchorY:g,widthRatio:S,sdfPaddingRatio:M,sdfTextureSize:C}=P(d,e.frame,e.size,e.anchorPoint,h,u,e.scaleSymbolsProportionally),{path:b}=y,k=y.primitiveName,z=f.primitiveName,I=i.primitiveName;let L=null;y.colorLocked||m||(L=this._maybeGetValueOrOverrideExpression(I,"FillColor"));const E=L??this._getValueOrOverrideExpression(y.type,k,"Color",V(y.color));let N=null;f.colorLocked||m||(N=this._maybeGetValueOrOverrideExpression(I,"StrokeColor"));const R=N??this._getValueOrOverrideExpression(f.type,z,"Color",V(f.color)),T=this._maybeGetValueOrOverrideExpression(I,"StrokeWidth")??this._getValueOrOverrideExpression(f.type,z,"Width",u),G={type:"sprite-rasterization-param",resource:b?{type:"path",path:b,asFill:!0}:{type:"sdf",geometry:p,sdfTextureSize:C,sdfPaddingRatio:M,asFill:!0},overrides:[]};this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:G,colorLocked:m,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:O,y:g},isAbsoluteAnchorPoint:h,size:n,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:n,widthRatio:S,rotateClockwise:!1,referenceSize:s,sizeRatio:v,color:E,outlineColor:R,outlineWidth:T,isOutline:c,markerPlacement:r})}_setPoMap(e,t,r){let i;this._poMap[e]?i=this._poMap[e]:(i={},this._poMap[e]=i),i[t]=r}_maybeGetValueOrOverrideExpression(e,t,r){return this._getValueOrOverrideExpression("",e,t,r,!1)}_getValueOrOverrideExpression(e,t,r,i,o=!0){if(o&&!q(i)&&(i=X(e,r.toLowerCase())),null==t)return i;const a=this._poMap[t];if(null==a)return i;const s=a[r];return"string"==typeof s||"number"==typeof s||Array.isArray(s)?s:s?{valueExpressionInfo:s,defaultValue:i}:i}_analyzePrimitiveOverrides(e,t,r,i){if(null==e)return!1;"string"==typeof e&&(e=[e]);for(const o of this._primitiveOverrides)if(e.includes(o.primitiveName)&&o.valueExpressionInfo)return!0;if(null!=t)for(const o of t)if(o?.overrides.length>0)return!0;if(null!=r)for(const o of r)if(o?.overrides.length>0)return!0;if(null!=i)for(const o of i)if(o?.overrides.length>0)return!0;return!1}_getMaterialOverrides(e,t){if(!e)return[];const r=[];for(const i of e)r.push(...this._getPrimitiveMaterialOverrides(i,t));return r}_getPrimitiveMaterialOverrides(e,t){if(!e)return[];const r=F(this._primitiveOverrides.filter(t=>t.primitiveName===e));return r.forEach(e=>e.defaultValue=X(t,e.propertyName.toLowerCase())),r}_analyzeMaterialOverrides(e,t){return this._primitiveOverrides.filter(r=>r.primitiveName!==e||!t.includes(r.propertyName))}}function ie(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 oe(e){if(e?.startsWith("Level_")){const t=parseInt(e.slice(6),10);if(!isNaN(t))return t}return 0}function ae(e,t){if(!t||0===t.length)return e;const i=r(e);return b.applyOverrides(i,t),i}const se=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&null==e[0].path&&null==e[1].path&&!e[0].effects&&!e[1].effects&&!e[0].animations&&!e[1].animations;function le(e){const t=e.symbolLayers;if(!t)return!1;const r=t.find(e=>e.effects?.find(e=>"CIMGeometricEffectDashes"===e.type&&null!=e.dashTemplate)),i=t.find(e=>e.effects?.find(e=>"CIMGeometricEffectAddControlPoints"===e.type));return!!r||!!i}function ne(e){return me(e)}function me(e){return"CIMGeometricEffectCircularSector"===e.type||"CIMGeometricEffectRadial"===e.type||"CIMGeometricEffectTaperedPolygon"===e.type||"PrivateDimensionEffect"===e.type||"PrivateMatcherGeometryOverrideEffect"===e.type}function ce(e){return"CIMSimpleLineCallout"===e.type||"CIMBackgroundCallout"===e.type||"CIMBalloonCallout"===e.type||"CIMPointSymbolCallout"===e.type}function pe(e){return"CIMGeometricEffectCircularSector"===e.type||"CIMGeometricEffectTaperedPolygon"===e.type}function fe(e,t){const r=e.some(e=>"CIMSolidFill"===e.type),i=e.every(e=>"CIMSolidFill"===e.type||"CIMSolidStroke"===e.type);return r&&i&&t.some(({effect:e})=>pe(e))}function ye(e){return e.some(e=>"CIMSolidFill"!==e.type&&"CIMSolidStroke"!==e.type&&("CIMVectorMarker"!==e.type&&"CIMPictureMarker"!==e.type||null!=e.markerPlacement))}function de(e,t){return!!(t?.some(e=>"CIMGeometricEffectRadial"===e.type)&&t?.some(e=>"CIMGeometricEffectTaperedPolygon"===e.type)||t?.some(e=>"CIMGeometricEffectCircularSector"===e.type))&&he(e)}function he(e){if(2!==e?.length)return!1;const t=e.find(e=>"CIMSolidFill"===e.type),r=e.find(e=>"CIMSolidStroke"===e.type),i=r?.effects?.some(e=>"CIMGeometricEffectDashes"===e.type);return null!=t&&null!=r&&!i}function ue(e){return r(e).map(e=>({...e,propertyName:K(e.propertyName)}))}function ve(e){return u(e)?{type:"animation-params",params:e}:null}export{re as CIMAnalyzer,ae 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 r}from"../../core/lang.js";import i from"../../core/Logger.js";import{pt2px as o,px2pt as a}from"../../core/screenUtils.js";import{numericHash as s}from"../../core/string.js";import{isCurvedGeometry as l}from"../../geometry/support/curves/curveUtils.js";import{densifyCurvedGeometry as n}from"../../geometry/support/curves/densifyCurvedGeometry.js";import{checkForAnimations as m,globalRotation as c,getAnimationParams as p,handleAbsoluteAnchor as f,handleMarker as y,handleRelativeAnchor as d,getFrameTranslation as h,translate as u,getStaticParam as v,shouldUseAnimatedPath as g}from"./animationUtils.js";import{CIMSymbolInflatedSizeHelper as O,CIMSymbolHelper as S,forEachSymbolLayer as _}from"./CIMSymbolHelper.js";import{antialiasingOutlineFillSettings as M}from"./constants.js";import{defaultCIMValues as C}from"./defaultCIMValues.js";import{fitVectorMarker as b}from"./fitVectorMarker.js";import{fromCIMFontStyle as k}from"./fromCIMFontStyle.js";import{OverrideHelper as z}from"./OverrideHelper.js";import{hasRichTextFormattingTags as x}from"./richTextUtils.js";import{getSDFInfo as P,getExtent as L,getSDFMetrics as I,getSDFDimensions as E}from"./SDFHelper.js";import{CIMSymbolUnits as V}from"./types.js";import{colorToArray as N,normalizeAlpha as R,getSize as T,isCIMMarkerStrokePlacement as w,hasStrokeLayer as G,getNumericValue as A,getMaxStrokeWidth as F,getTintColor as X,normalizePrimitiveOverrideProps as j,getDefaultCIMValue as Y,getEnum as W,getFillColor as D,getStrokeColor as U,fromCIMFontDecoration as H,getStrokeWidth as B,fromCIMVerticalAlignment as J,fromCIMHorizontalAlignment as q,getTextCasing as K,isValidCIMValue as Q,uncapitalize as Z}from"./utils.js";import{isSupportedCallout as $,getPointSymbolCalloutTransforms as ee,normalizePointSymbolCalloutScale as te,normalizeLeaderLineStyle as re,getPointSymbolCalloutFitProperties as ie,normalizeBalloonCalloutStyle as oe}from"./callouts/calloutAnalysisUtils.js";import{EffectHelper as ae}from"./effects/EffectHelper.js";import{rasterizedVectorMarkerMinSize as se,randomInsidePolygonTextureSize as le}from"../../views/2d/engine/webgl/definitions.js";const ne=()=>i.getLogger("esri.symbols.cim.cimAnalyzer");function me(e){const t=e.markerPlacement;return t&&t.angleToLine?1:0}class ce{constructor(e){this._cimLayers=[],this._poMap={},this._primitiveOverrides=[],this._hasTextStringTemplates=!1,e&&(this._resourceManager=e)}analyzeSymbolReference(t,r,i){if(this._cimLayers=i??[],!t)return this._cimLayers;if(this._reset(),this._hasTextStringTemplates=t.hasTextStringTemplates??!1,t.primitiveOverrides){this._primitiveOverrides=t.primitiveOverrides;for(const t of this._primitiveOverrides){const r=t.valueExpressionInfo;if(r)this._setPoMap(t.primitiveName,t.propertyName,r);else if(null!=t.value){let r=t.value;t.propertyName.includes("Color")&&(e(r)&&(r=N(r)),r=R(r)),this._setPoMap(t.primitiveName,t.propertyName,r)}}}return this._analyzeSymbol(t.symbol,r),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){const r=e?.symbolLayers;if(!r)return;for(let n=0;n<r.length;n++){const e=r[n];"CIMVectorMarker"===e.type&&(r[n]=b(e))}const i=e.effects;let o=0;const a=T(e)??0;"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(o=1);const s=m(e);let l={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:s,hasShiftAnimation:!1,hasMotionAnimations:!1};if(l=c(l),l=p(this._poMap,e,l),"CIMPointSymbol"===e.type&&(this._analyzePointSymbolHalo(e,o,a,i,s),this._analyzeCallout(e,null,[],l,a,o,t)),_e(r,i))return this._analyzeCompositeOutlineFill(r,i,a);this._analyzeSymbolLayer(e,null,[],l,a,o,t)}_analyzeSymbolLayer(e,t,r,i,o,a,s){const l=e?.symbolLayers;if(!l)return;const n="CIMPolygonSymbol"===e.type,m=e.effects;let c=l.length;for(;c--;){const p=l[c];if(!p||!1===p.enable)continue;let f;m?.length&&(f=[...m]);const y=p.effects;y?.length&&(m?f.push(...y):f=[...y]);let d=t?[...t]:null;if(f){d??=[];for(const e of f){const t=z.findEffectOverrides(e,this._primitiveOverrides);t&&d.push(t)}}const h=[];z.findApplicableOverrides(p,this._primitiveOverrides,h);const u=this._cimLayers.length;switch(p.type){case"CIMSolidFill":this._analyzeSolidFill(p,d,i,G(l));break;case"CIMPictureFill":this._analyzePictureFill(p,d,i);break;case"CIMHatchFill":this._analyzeHatchFill(p,d,i);break;case"CIMGradientFill":this._analyzeGradientFill(p,d);break;case"CIMSolidStroke":this._analyzeSolidStroke(p,d,n,o,i);break;case"CIMPictureStroke":this._analyzePictureStroke(p,d,n,o,i);break;case"CIMGradientStroke":this._analyzeGradientStroke(p,d,n,o);break;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":{"CIMLineSymbol"!==e.type&&"CIMPolygonSymbol"!==e.type||(a=me(p));const t=[],l=p.primitiveName;l&&t.push(l);const m=n&&w(p.markerPlacement);this._analyzeMarker(p,d,null,t,a,o,s,r,i,!1,m);break}default:ne().error("Cannot analyze CIM layer",p.type)}if(d?.some(({effect:e})=>ve(e)))for(let e=u;e<this._cimLayers.length;e++)this._cimLayers[e].effectsChangeGeometryType=!0}}_analyzePointSymbolHalo(e,t,i,o,s){const{haloSymbol:l}=e,n=A(e.haloSize,0);if(n<=0||!l?.symbolLayers)return;const m=l.symbolLayers.filter(e=>!1!==e.enable),c=m[0];if(!c)return;const p=1===m.length&&"CIMSolidFill"===c.type;if(s)return void ne().warnOnce("CIM point symbol halos are not supported with symbol animations");const f=o?.map(e=>z.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e);if(f?.some(({effect:e})=>ve(e))){if(!p)return void ne().warnOnce("Complex CIM point symbol halos are not supported with geometry-changing effects");const t=e.symbolLayers?.filter(e=>!1!==e.enable)??[];if(!Oe(t,f))return void ne().warnOnce("CIM point symbol halos with geometry-changing effects currently require polygon-producing effects and solid fill or stroke layers");const r=F(t),o=this._getValueOrOverrideExpression(c.type,c.primitiveName,"Color",R(c.color));return void this._cimLayers.push({type:"outlineFill",name:c.name,colorLocked:!0,color:o,effects:f,effectsChangeGeometryType:!0,outlineColorLocked:!0,outlineColor:o,outlineWidth:2*n+r,cap:"Round",join:"Round",referenceWidth:i,pixelBufferSize:2*n+r,outlineEffects:f})}const y=e.symbolLayers?.filter(e=>!1!==e.enable)??[],d=1===y.length&&"CIMVectorMarker"===y[0].type?y[0]:null,h=new Set(d?this._primitiveOverrides.filter(e=>e.primitiveName===d.primitiveName&&["Rotation","OffsetX","OffsetY"].includes(e.propertyName)).map(e=>e.propertyName):[]),u=h.size>0?d:null,v=r(e);if(v.effects=void 0,v.angle=0,v.scaleX=1,u){const e=v.symbolLayers?.find(e=>"CIMVectorMarker"===e.type&&!1!==e.enable);e&&(h.has("Rotation")&&(e.rotation=0),h.has("OffsetX")&&(e.offsetX=0),h.has("OffsetY")&&(e.offsetY=0))}const g={...v,haloSize:0,haloSymbol:void 0},_=O.getPointSymbolHaloPadding(e,this._resourceManager),[M,C,b]=S.getTextureAnchor(g,this._resourceManager,se,_),k=a(b),x=[];z.findApplicableOverrides(v,this._primitiveOverrides,x);const L=u?x.filter(e=>e.primitiveName!==u.primitiveName||!["Rotation","OffsetX","OffsetY"].includes(e.propertyName)):x,I=u?[{offsetX:this._getValueOrOverrideExpression(u.type,u.primitiveName,"OffsetX",h.has("OffsetX")?A(u.offsetX):0),offsetY:this._getValueOrOverrideExpression(u.type,u.primitiveName,"OffsetY",h.has("OffsetY")?A(u.offsetY):0),rotation:this._getValueOrOverrideExpression(u.type,u.primitiveName,"Rotation",h.has("Rotation")?A(u.rotation):0),size:k,frameHeight:k,rotateClockWise:!!u.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:!1}]:[];this._cimLayers.push({type:"marker",spriteRasterizationParam:{type:"sprite-rasterization-param",resource:{type:"cim-point-symbol-halo",symbol:v,sdf:p&&null!=P(g)},overrides:L},colorLocked:!0,color:p?this._getValueOrOverrideExpression(c.type,c.primitiveName,"Color",R(c.color)):[255,255,255,1],effects:f??null,effectsChangeGeometryType:f?.some(({effect:e})=>ve(e)),scaleSymbolsProportionally:!1,alignment:t,anchorPoint:{x:M,y:C},isAbsoluteAnchorPoint:!1,size:k,scaleX:A(e.scaleX,1),rotation:A(e.angle,0),offsetX:0,offsetY:0,outlineColor:[0,0,0,0],outlineWidth:0,transform:{type:"cim-marker-transform-param",params:I},frameHeight:k,widthRatio:1,rotateClockwise:!0,referenceSize:i||k,sizeRatio:1,markerPlacement:null,isOutline:!1})}_analyzeSolidFill(e,t,r,i){const{primitiveName:o,type:a}=e,s=R(e.color),l=p(this._poMap,e,r);if(!i&&t?.some(e=>"CIMGeometricEffectTaperedPolygon"===e.effect.type)){const r=this._getValueOrOverrideExpression(a,o,"Color",s);return void this._cimLayers.push({type:"outlineFill",name:e.name,colorLocked:!!e.colorLocked,color:r,effects:t,outlineColor:r,outlineColorLocked:!!e.colorLocked,...M,outlineEffects:t})}this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:null,colorLocked:!!e.colorLocked,color:this._getValueOrOverrideExpression(a,o,"Color",s),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t,applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!1,animationParams:be(l)})}_analyzePictureFill(e,t,r){const{primitiveName:i,type:o}=e,a=X(e),s=A(e.height,C.CIMPictureFill.height);let l=A(e.scaleX,1);if("width"in e&&"number"==typeof e.width){const t=e.width;let r=1;const i=this._resourceManager.getResource(e.url);null!=i&&(r=i.width/i.height),l/=r*(s/t)}const n={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(i,o)},m=p(this._poMap,e,r);this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:n,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(o,i,"TintColor",a),height:this._getValueOrOverrideExpression(o,i,"Height",s),scaleX:this._getValueOrOverrideExpression(o,i,"ScaleX",l),angle:this._getValueOrOverrideExpression(o,i,"Rotation",A(e.rotation)),offsetX:this._getValueOrOverrideExpression(o,i,"OffsetX",A(e.offsetX)),offsetY:this._getValueOrOverrideExpression(o,i,"OffsetY",A(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!1,hasUnresolvedReplacementColor:!1,animationParams:be(m)})}_analyzeHatchFill(e,t,r){const{primitiveName:i,type:o}=e,a=p(this._poMap,e,r),s=this._analyzeMaterialOverrides(i,["Rotation","OffsetX","OffsetY"]),l=j(s);let n=[255,255,255,1],m=!1;if(e.lineSymbol?.symbolLayers)for(const p of e.lineSymbol.symbolLayers){if("CIMSolidStroke"!==p.type)continue;const e=p.primitiveName??i;m||!e||p.colorLocked||null==this._poMap[e]?.Color&&null==this._poMap[e]?.StrokeColor||(n=R(p.color),n=this._maybeGetValueOrOverrideExpression(e,"StrokeColor")??this._getValueOrOverrideExpression(o,e,"Color",n),m=!0);const t=this._maybeGetValueOrOverrideExpression(e,"StrokeWidth");if(t){let r=null,i=null;"number"==typeof t?r=t:i=t.valueExpressionInfo;let a=l.find(e=>"strokeWidth"===e.propertyName);a?a.propertyName="width":(a={type:"CIMPrimitiveOverride",primitiveName:e,propertyName:"width",valueExpressionInfo:i,value:r,defaultValue:Y(o,"width")},l.push(a))}}const c={type:"sprite-rasterization-param",resource:e,overrides:l};this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:c,colorLocked:!!e.colorLocked,effects:t,color:n,height:this._getValueOrOverrideExpression(o,i,"Separation",A(e.separation,C.CIMHatchFill.separation)),scaleX:1,angle:this._getValueOrOverrideExpression(o,i,"Rotation",A(e.rotation)),offsetX:this._getValueOrOverrideExpression(o,i,"OffsetX",A(e.offsetX)),offsetY:this._getValueOrOverrideExpression(o,i,"OffsetY",A(e.offsetY)),applyRandomOffset:!1,sampleAlphaOnly:!0,hasUnresolvedReplacementColor:!m,animationParams:be(a)})}_analyzeGradientFill(e,t){const{angle:r,gradientMethod:i,gradientSize:o,gradientSizeUnits:a,gradientType:s,interval:l,primitiveName:n,type:m}=e,c=C.CIMGradientFill,p=e.colorRamp;this._cimLayers.push({type:"gradientFill",name:e.name,spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(n,m)},colorLocked:!1,effects:t,color:[255,255,255,1],gradientMethod:this._getValueOrOverrideExpression(m,n,"GradientMethod",i??"Linear"),angle:this._getValueOrOverrideExpression(m,n,"Angle",A(r,c.angle)),gradientType:this._getValueOrOverrideExpression(m,n,"GradientType",s??c.gradientType),interval:this._getValueOrOverrideExpression(m,n,"Interval",A(l,"CIMFixedColorRamp"===p.type?p.colors.length:c.interval)),gradientSize:this._getValueOrOverrideExpression(m,n,"GradientSize",A(o,c.gradientSize)),gradientSizeUnits:"Absolute"===a?V.Absolute:"Relative"===a?V.Relative:c.gradientSizeUnits})}_analyzeCompositeOutlineFill(e,t,r,i=[]){const o=e.find(e=>"CIMSolidFill"===e.type),a=e.find(e=>"CIMSolidStroke"===e.type);if(null==o||null==a)return;const s=[...i,...[...t??[],...o.effects??[]].map(e=>z.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e)],l=[...i,...[...t??[],...a.effects??[]].map(e=>z.findEffectOverrides(e,this._primitiveOverrides)).filter(e=>null!=e)],n=A(a.width,C.CIMSolidStroke.width),m=W(a.capStyle,C.CIMSolidStroke.capstyle),c=W(a.joinStyle,C.CIMSolidStroke.joinstyle),p=a.miterLimit;this._cimLayers.push({type:"outlineFill",name:o.name,colorLocked:!!o.colorLocked,color:this._getValueOrOverrideExpression(o.type,o.primitiveName,"Color",R(o.color)),effects:s,effectsChangeGeometryType:s.some(({effect:e})=>ve(e))||l.some(({effect:e})=>ve(e)),outlineColorLocked:!!a.colorLocked,outlineColor:this._getValueOrOverrideExpression(a.type,a.primitiveName,"Color",R(a.color)),outlineWidth:this._getValueOrOverrideExpression(a.type,a.primitiveName,"Width",n),cap:this._getValueOrOverrideExpression(a.type,a.primitiveName,"CapStyle",m),join:this._getValueOrOverrideExpression(a.type,a.primitiveName,"JoinStyle",c),miterLimit:p&&this._getValueOrOverrideExpression(a.type,a.primitiveName,"MiterLimit",p),referenceWidth:r,outlineEffects:l})}_analyzeSolidStroke(e,t,r,i,o){const{primitiveName:a,type:s}=e,l=R(e.color),n=A(e.width,C.CIMSolidStroke.width),m=W(e.capStyle,C.CIMSolidStroke.capstyle),c=W(e.joinStyle,C.CIMSolidStroke.joinstyle),f=e.miterLimit;let y,d,h,u,v=[];if(this._analyzePrimitiveOverrides(a,t,null,null)&&(v=this._getPrimitiveMaterialOverrides(a,s)),t&&Array.isArray(t)&&t.length>0){const e=t[t.length-1].effect;e&&"CIMGeometricEffectDashes"===e.type&&"NoConstraint"===e.lineDashEnding&&(y=e.dashTemplate,d=e.scaleDash,h=e.offsetAlongLine,u=e.primitiveName,(t=[...t]).pop())}null!=u&&v.push(...this._getPrimitiveMaterialOverrides(u,s).filter(e=>"dashTemplate"===e.propertyName));const g=void 0!==y?{type:"sprite-rasterization-param",resource:{type:"dash",dashTemplate:y,primitiveName:u},overrides:v}:null,O=p(this._poMap,e,o);this._cimLayers.push({type:"line",name:e.name,spriteRasterizationParam:g,isOutline:r,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(s,a,"Color",l),width:this._getValueOrOverrideExpression(s,a,"Width",n),cap:this._getValueOrOverrideExpression(s,a,"CapStyle",m),join:this._getValueOrOverrideExpression(s,a,"JoinStyle",c),miterLimit:f&&this._getValueOrOverrideExpression(s,a,"MiterLimit",f),referenceWidth:i,zOrder:fe(e.name),dashTemplate:this._maybeGetValueOrOverrideExpression(u,"DashTemplate")??y,offsetAlongLine:this._getValueOrOverrideExpression(s,u,"OffsetAlongLine",h??0),scaleDash:d,sampleAlphaOnly:!0,animationParams:be(O)})}_analyzePictureStroke(e,t,r,i,o){const{primitiveName:a,type:s}=e,l=X(e),n=A(e.width,C.CIMPictureStroke.width),m=W(e.capStyle,C.CIMPictureStroke.capstyle),c=W(e.joinStyle,C.CIMPictureStroke.joinstyle),f=e.miterLimit,y={type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(a,s)},d=p(this._poMap,e,o);this._cimLayers.push({type:"line",name:e.name,spriteRasterizationParam:y,isOutline:r,colorLocked:!!e.colorLocked,effects:t,color:this._getValueOrOverrideExpression(s,a,"TintColor",l),width:this._getValueOrOverrideExpression(s,a,"Width",n),cap:this._getValueOrOverrideExpression(s,a,"CapStyle",m),join:this._getValueOrOverrideExpression(s,a,"JoinStyle",c),miterLimit:f&&this._getValueOrOverrideExpression(s,a,"MiterLimit",f),referenceWidth:i,zOrder:fe(e.name),dashTemplate:null,scaleDash:!1,sampleAlphaOnly:!1,animationParams:be(d)})}_analyzeGradientStroke(e,t,r,i){const{gradientMethod:o,gradientSize:a,gradientSizeUnits:s,gradientType:l,interval:n,primitiveName:m,type:c}=e,p=C.CIMGradientStroke,f=A(e.width,p.width),y=W(e.capStyle,p.capstyle),d=W(e.joinStyle,p.joinstyle),h=e.miterLimit,u=e.colorRamp;this._cimLayers.push({type:"gradientStroke",name:e.name,spriteRasterizationParam:{type:"sprite-rasterization-param",resource:e,overrides:this._getPrimitiveMaterialOverrides(m,c)},colorLocked:!!e.colorLocked,effects:t,color:[255,255,255,1],width:this._getValueOrOverrideExpression(c,m,"Width",f),cap:this._getValueOrOverrideExpression(c,m,"CapStyle",y),join:this._getValueOrOverrideExpression(c,m,"JoinStyle",d),miterLimit:h&&this._getValueOrOverrideExpression(c,m,"MiterLimit",h),referenceWidth:i,isOutline:r,gradientMethod:this._getValueOrOverrideExpression(c,m,"GradientMethod",o??p.gradientMethod),gradientType:this._getValueOrOverrideExpression(c,m,"GradientType",l??p.gradientType),interval:this._getValueOrOverrideExpression(c,m,"Interval",A(n,"CIMFixedColorRamp"===u.type?u.colors.length:p.interval)),gradientSize:this._getValueOrOverrideExpression(c,m,"GradientSize",A(a,p.gradientSize)),gradientSizeUnits:"Absolute"===s?V.Absolute:"Relative"===s?V.Relative:p.gradientSizeUnits})}_analyzeMarker(e,t,r,i,o,a,s,l,n,m=!1,c=!1){m||=!!e.colorLocked;let h=n;if(h=f(e,h),h=y(this._poMap,e,h),h=d(e,h),h=p(this._poMap,e,h),this._analyzeMarkerInsidePolygon(e,t,m,h))return;const u=A(e.size,C.CIMVectorMarker.size),v=A(e.rotation),g=A(e.offsetX),O=A(e.offsetY),{primitiveName:S,type:_}=e,M=this._getValueOrOverrideExpression(_,S,"Size",u),b=this._getValueOrOverrideExpression(_,S,"Rotation",v),k=this._getValueOrOverrideExpression(_,S,"OffsetX",g),z=this._getValueOrOverrideExpression(_,S,"OffsetY",O);switch(e.type){case"CIMPictureMarker":this._analyzePictureMarker(e,t,r,i,o,a,M,b,k,z,l,h,m,c);break;case"CIMVectorMarker":this._analyzeVectorMarker(e,t,r,i,o,a,M,b,k,z,l,h,s,m,c)}}_analyzeMarkerInsidePolygon(e,t,r,i){const{markerPlacement:o,type:s}=e;if(!o||"CIMMarkerPlacementInsidePolygon"!==o.type||i.hasMotionAnimations)return!1;if("CIMVectorMarker"===s||"CIMPictureMarker"===s){const r=e.primitiveName;if(r&&this._analyzePrimitiveOverrides([r],t,null,null))return!1;const i=o.primitiveName;if(i&&this._analyzePrimitiveOverrides([i],t,null,null))return!1;if("CIMVectorMarker"===s){const{markerGraphics:t}=e;if(t)for(const e of t){const{symbol:t}=e;if("CIMPolygonSymbol"===t?.type&&t.symbolLayers){const{symbolLayers:e}=t;for(const t of e)if("CIMSolidStroke"===t.type)return!1}}}else{const{animatedSymbolProperties:t}=e;if(t)return!1}}const l=Math.abs(o.stepX),n=Math.abs(o.stepY);if(0===l||0===n)return!0;let m,c;if("Random"===o.gridType){const e=a(le),t=Math.max(Math.floor(e/l),1);m=n*Math.max(Math.floor(e/n),1);c=t*l/m}else o.shiftOddRows?(m=2*n,c=l/n*.5):(m=n,c=l/n);const p=X(e),f="CIMCharacterMarker"===e.type?null:{type:"sprite-rasterization-param",resource:{...e,effects:e.effects?.filter(e=>!ue(e))},overrides:[]};return this._cimLayers.push({type:"fill",name:e.name,spriteRasterizationParam:f,colorLocked:r,effects:t,color:p,height:m,scaleX:c,angle:o.gridAngle??0,offsetX:A(o.offsetX),offsetY:A(o.offsetY),applyRandomOffset:"Random"===o.gridType,sampleAlphaOnly:"CIMPictureMarker"!==e.type,hasUnresolvedReplacementColor:!0,animationParams:be(i)}),!0}_analyzePictureMarker(e,t,i,o,a,l,n,m,c,p,f,y,d,h){const{animatedSymbolProperties:u,primitiveName:v,type:g}=e;let O=A(e.scaleX,1);const S=X(e);i||(i=this._createMarkerPlacementOverrideExpression(e.markerPlacement));const _=this._createGIFAnimatedSymbolPropertiesOverrideExpression(u),M=e.anchorPoint??{x:0,y:0};if("width"in e&&"number"==typeof e.width){const t=e.width;let r=1;const i=this._resourceManager.getResource(e.url);null!=i&&(r=i.width/i.height);O/=r*(A(e.size)/t)}const C=[...o];let b;e.primitiveName&&C.push(e.primitiveName),u||_?b={type:"animated",url:e.url,urlHash:"H"+s(e.url),playAnimation:e.animatedSymbolProperties?.playAnimation,reverseAnimation:e.animatedSymbolProperties?.reverseAnimation,randomizeStartTime:e.animatedSymbolProperties?.randomizeStartTime,randomizeStartSeed:e.animatedSymbolProperties?.randomizeStartSeed,startTimeOffset:e.animatedSymbolProperties?.startTimeOffset,duration:e.animatedSymbolProperties?.duration,repeatType:e.animatedSymbolProperties?.repeatType,repeatDelay:e.animatedSymbolProperties?.repeatDelay}:(b=r(e),b.markerPlacement=null);const k={type:"sprite-rasterization-param",resource:b,overrides:this._getMaterialOverrides(C,g)};_&&k.overrides.push(..._.overrides);const z=n;this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:k,colorLocked:d,effects:t,scaleSymbolsProportionally:!1,alignment:a,size:n,scaleX:this._getValueOrOverrideExpression(g,v,"ScaleX",O),rotation:m,offsetX:c,offsetY:p,transform:{type:"cim-marker-transform-param",params:f},color:this._getValueOrOverrideExpression(g,v,"TintColor",S),anchorPoint:{x:M.x,y:M.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:[0,0,0,0],outlineWidth:0,frameHeight:0,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:1,isOutline:h,markerPlacement:i,animationParams:be(y),baseSize:z})}_analyzeVectorMarker(e,t,r,i,o,a,s,m,c,p,f,y,d,g,O){const S=e.markerGraphics;if(!S)return;const _=e.frame;let M=0;M=_?_.ymax-_.ymin:a;const C=!!e.scaleSymbolsProportionally;if(M){const t={offsetX:c,offsetY:p,rotation:m,size:s,frameHeight:M,rotateClockWise:!!e.rotateClockwise,absoluteAnchorPoint:!1,scaleSymbolsProportionally:C};f=[...f,t]}r||(r=this._createMarkerPlacementOverrideExpression(e.markerPlacement));for(const b of S)if(b){const s=b.symbol;if(!s)continue;const m=b.primitiveName;m&&i.push(m);let c,p=y;if(("CIMPointSymbol"===s.type||"CIMTextSymbol"===s.type)&&_){let t=0,r=0;const i=b.geometry;"x"in i&&"y"in i&&(t+=i.x-.5*(_.xmin+_.xmax),r+=i.y-.5*(_.ymin+_.ymax));const o=e.anchorPoint;let a=!1;o&&("Absolute"===e.anchorPointUnits?(t-=o.x,r-=o.y,a=!0):_&&(t-=(_.xmax-_.xmin)*o.x,r-=(_.ymax-_.ymin)*o.y));const s={offsetX:t,offsetY:r,rotation:0,size:0,frameHeight:0,rotateClockWise:!1,absoluteAnchorPoint:a,scaleSymbolsProportionally:C};c=[...f,s]}"CIMPointSymbol"!==s.type&&"CIMTextSymbol"!==s.type||this._analyzeCallout(s,t,c??f,p,a,o,d);const S=l(b.geometry)?{...b,geometry:n(b.geometry,{maxDeviation:.01})}:b,k=S.geometry,[z,x]=h(k,_);switch(0===z&&0===x||(p=u(p,z,x)),s.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":d||he(s)?(p={...p,transform:{type:"AnimatedTransform",relativeTranslation:!1,absoluteScale:!0,selectGlobalRotation:!1,translation:v([0,0]),rotation:v(0),scale:v(M),parent:y.transform}},this._analyzeMultiLayerGraphicNonSDF(e,t,r,S,i,o,a,c??f,p,M,g,O)):this._analyzeMultiLayerGraphic(e,t,r,S,i,o,a,c??f,p,M,g,O);break;case"CIMTextSymbol":this._analyzeTextGraphic(t,r,S,i,o,a,c??f,g)}m&&i.pop()}}_analyzeCallout(e,t,r,i,o,a,s){const l=e.callout;if(!l||!$(l))return;const n=t??[],{leaderTolerance:m,leaderOffset:c}=l,p=500;switch(l.type){case"CIMSimpleLineCallout":{const{lineSymbol:e,autoSnap:t}=l,f={type:"CIMSimpleLineCallout",leaderTolerance:m,leaderOffset:c,autoSnap:t,inflateSize:p};this._analyzeSymbolLayer(e,[...n,{type:"cim-effect-param",effect:f,overrides:[]}],r,i,o,a,s);break}case"CIMBackgroundCallout":{const{accentBarSymbol:e,gap:t,backgroundSymbol:f,leaderLineSymbol:y,lineStyle:d,margin:h}=l,u=e=>({type:"CIMBackgroundCallout",leaderTolerance:m,leaderOffset:c,lineStyle:re(d),gap:t,margin:h,inflateSize:p,part:e}),v=[...n,{type:"cim-effect-param",effect:u("background"),overrides:[]}];y&&this._analyzeSymbolLayer(y,[...n,{type:"cim-effect-param",effect:u("leader"),overrides:[]}],r,i,o,a,s);const g=f.symbolLayers??[];Me(g)?this._analyzeCompositeOutlineFill(g,null,o,v):this._analyzeSymbolLayer(f,v,r,i,o,a,s),e&&this._analyzeSymbolLayer(e,[...n,{type:"cim-effect-param",effect:u("accent-bar"),overrides:[]}],r,i,o,a,s);break}case"CIMBalloonCallout":{const{balloonStyle:e,backgroundSymbol:t,fixedDartWidth:f,margin:y,useFixedDartWidth:d}=l,h={type:"CIMBalloonCallout",leaderTolerance:m,leaderOffset:c,margin:y,balloonStyle:oe(e),dartWidth:d?f:void 0,inflateSize:p,part:"background"},u=[...n,{type:"cim-effect-param",effect:h,overrides:[]}],v=t.symbolLayers??[];Me(v)?this._analyzeCompositeOutlineFill(v,null,o,u):this._analyzeSymbolLayer(t,u,r,i,o,a,s);break}case"CIMPointSymbolCallout":{const{backgroundScale:e,gap:t,leaderLineSymbol:f,lineStyle:y,pointSymbol:d}=l,h=te(e),u=ee(d,r),v=e=>({type:"CIMPointSymbolCallout",leaderTolerance:m,leaderOffset:c,backgroundScale:h,...ie(d,e),lineStyle:re(y),gap:t,inflateSize:p,part:e});f&&this._analyzeSymbolLayer(f,[...n,{type:"cim-effect-param",effect:v("leader"),overrides:[]}],r,i,o,a,s),this._analyzeSymbolLayer(d,[...n,{type:"cim-effect-param",effect:v("marker"),overrides:[]}],u,i,o,a,s||0!==h);break}case"CIMCompositeCallout":{const{backgroundSymbol:e,margin:t,shadowSymbol:f}=l,y={type:"CIMBalloonCallout",leaderTolerance:m,leaderOffset:c,margin:t,balloonStyle:1,inflateSize:p,part:"background"},d=[...n,{type:"cim-effect-param",effect:y,overrides:[]}],h=e=>{const t=e.symbolLayers??[];Me(t)?this._analyzeCompositeOutlineFill(t,null,o,d):this._analyzeSymbolLayer(e,d,r,i,o,a,s)};f&&h(f),h(e);break}}}_analyzeMultiLayerGraphic(e,t,r,i,o,a,s,l,n,m,c,p){const f=i.symbol,y=f.symbolLayers;if(y){if(!de(y)||g(n))return Se(y)?(_(f,e=>{e.colorLocked&&(c=!0)}),void this._analyzeMultiLayerGraphicNonSDF(e,t,r,i,o,a,s,l,n,m,c,p)):void this._analyzeMarkerGraphicSymbolLayers(e,t,r,i,o,a,s,l,n,m,c,p);this._analyzeCompositeMarkerGraphic(e,t,r,i,y,a,s,l,m,c,p)}}_analyzeMarkerGraphicSymbolLayers(e,t,r,i,o,a,s,l,n,m,c,f){const y=i.symbol,d=y.symbolLayers;if(!d)return;const h=ae.applyEffects(y.effects,i.geometry);if(!h)return;let u=d.length;for(;u--;){const y=d[u];if(!y||!1===y.enable)continue;const v=y.primitiveName;switch(v&&o.push(v),y.type){case"CIMSolidFill":case"CIMSolidStroke":{const o=ae.applyEffects(y.effects,h),d=L(o);if(!d)continue;const u="Relative"!==e.anchorPointUnits,g="CIMSolidStroke"===y.type?y.width:0,{frameSizeRatio:O,anchorX:S,anchorY:_,widthRatio:M,sdfPaddingRatio:b,sdfTextureSize:k}=I(d,e.frame,e.size,e.anchorPoint,u,g,e.scaleSymbolsProportionally),z="CIMSolidFill"===y.type,x={type:"sdf",geometry:o,sdfPaddingRatio:b,asFill:z,sdfTextureSize:k},{path:P}=y,V=z?R(D(y)):null==P?R(U(y)):[0,0,0,0],N=z?[0,0,0,0]:R(U(y));if(!z&&!g)break;const T=i.primitiveName;let w=null;z&&!y.colorLocked&&(w=this._maybeGetValueOrOverrideExpression(T,"FillColor"));let G=null;z||y.colorLocked||(G=this._maybeGetValueOrOverrideExpression(T,"StrokeColor"));const F=w??this._getValueOrOverrideExpression(y.type,v,"Color",V),X=G??this._getValueOrOverrideExpression(y.type,v,"Color",N),j=this._maybeGetValueOrOverrideExpression(T,"StrokeWidth")??this._getValueOrOverrideExpression(y.type,v,"Width",g),Y=P?{type:"sprite-rasterization-param",resource:{type:"path",path:P,asFill:z},overrides:[]}:{type:"sprite-rasterization-param",resource:x,overrides:[]},W=p(this._poMap,y,n),H=A(e.size,C.CIMVectorMarker.size),B=this._getValueOrOverrideExpression(e.type,e.primitiveName,"Size",H);this._cimLayers.push({type:"marker",name:y.name,groupName:e.name,spriteRasterizationParam:Y,colorLocked:!!y.colorLocked||!!c,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:S,y:_},isAbsoluteAnchorPoint:u,size:m,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:m,widthRatio:M,rotateClockwise:!1,referenceSize:s,sizeRatio:O,color:F,outlineColor:X,outlineWidth:j,isOutline:f,markerPlacement:r,animationParams:be(W),isStroke:"CIMSolidFill"!==y.type,baseSize:B,...E(o,k,b)});break}case"CIMPictureMarker":case"CIMVectorMarker":if(y.markerPlacement){ne().error("Error analyzing CIM, got unexpected marker placement");break}this._analyzeMarker(y,t,r,o,a,s,!1,l,n,c,f)}v&&o.pop()}}_analyzeTextGraphic(e,r,i,o,a,s,l,n){const m=[];z.findApplicableOverrides(i,this._primitiveOverrides,m);const c=i.geometry;if(!("x"in c)||!("y"in c))return;const p=i.symbol,f=H(p),y=k(p.fontStyleName),d=t(p.fontFamilyName);p.font={family:d,decoration:f,...y};const h=A(p.height,C.CIMTextSymbol.height),u=A(p.angle),v=A(p.offsetX),g=A(p.offsetY),{haloSymbol:O}=p,S=A(p.haloSize,0);let _=[0,0,0,0];if(O?.symbolLayers?.length){const e=O.symbolLayers;for(const t of e)if(t.color){_=this._getValueOrOverrideExpression(p?.haloSymbol?.type??"CIMPolygonSymbol",t.primitiveName,"Color",R(t.color));break}}const M=i.primitiveName;let b=[0,0,0,1],P=[0,0,0,0],L=0,I=!1;if(p.symbol?.symbolLayers)for(const t of p.symbol.symbolLayers){const e=t.primitiveName;if("CIMSolidStroke"===t.type)P=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Color",R(t.color)),L=this._getValueOrOverrideExpression("CIMSolidStroke",e,"Width",B(t)??0);else if("CIMSolidFill"===t.type){const r=R(t.color);I=I??!!t.colorLocked,b=this._getValueOrOverrideExpression("CIMSolidFill",e??M,"Color",r)}}let E=null,V=null,N=null,T=null,w=null;M&&(E=this._maybeGetValueOrOverrideExpression(M,"TextSize"),V=this._maybeGetValueOrOverrideExpression(M,"TextAngle"),N=this._maybeGetValueOrOverrideExpression(M,"TextOffsetX"),T=this._maybeGetValueOrOverrideExpression(M,"TextOffsetY"),I||(w=this._maybeGetValueOrOverrideExpression(M,"FillColor")));const G=w??b;let F=null,X=null,j=0;const Y="CIMBackgroundCallout"===p.callout?.type;if("CIMBackgroundCallout"===p.callout?.type){const e=p.callout;if(e.backgroundSymbol){const t=e.backgroundSymbol.symbolLayers;if(t)for(const e of t)"CIMSolidFill"===e.type?F=R(e.color):"CIMSolidStroke"===e.type&&(X=R(e.color),j=A(e.width,C.CIMSolidStroke.width))}}const W=this._getValueOrOverrideExpression(p.type,i.primitiveName,"TextString",i.textString??"");if(null==W)return;const{fontStyleName:D}=p,U=d+(D?"-"+D.toLowerCase():"-regular"),K=this._getMaterialOverrides(o,p.type);K.push(...this._getPrimitiveMaterialOverrides(i.primitiveName,p.type)),this._collectDictionaryTemplateOverrides(K,i);const Q={type:"text-rasterization-param",resource:{type:"text",textString:i.textString??"",font:p.font,symbol:p,primitiveName:i.primitiveName,supportsRichText:x(i.textString??"")||K.some(e=>"textString"===e.propertyName)},overrides:K};this._cimLayers.push({type:"text",lineWidth:p.lineWidth,textRasterizationParam:Q,colorLocked:!!n||!!I,effects:e,alignment:a,anchorPoint:{x:0,y:0},isAbsoluteAnchorPoint:!1,fontName:U,decoration:f,haloSize:S,haloColor:_,weight:y.weight,style:y.style,size:E??h,angle:V??u,offsetX:N??v,offsetY:T??g,transform:{type:"cim-marker-transform-param",params:l},horizontalAlignment:q(p.horizontalAlignment),verticalAlignment:J(p.verticalAlignment),text:W,color:G,outlineColor:P,outlineSize:L,backgroundColor:F,borderLineColor:X,borderLineWidth:j,useBackgroundCallout:Y,referenceSize:s,sizeRatio:1,markerPlacement:r})}_collectDictionaryTemplateOverrides(e,t){if(t.textString&&this._hasTextStringTemplates){const r=K(t.symbol);e.push({propertyName:"textString",defaultValue:"",valueExpressionInfo:{type:"dictionary-template",textCase:r,template:t.textString},primitiveName:t.primitiveName})}}_analyzeMultiLayerGraphicNonSDF(e,t,r,i,a,s,l,n,m,c,p,f){const y=pe(e,i),d=e.primitiveName,h=this._analyzeMaterialOverrides(d,["Rotation","OffsetX","OffsetY"]),u=j(h),[v,g,O]=S.getTextureAnchor(y,this._resourceManager,se),_=this._getMaterialOverrides(a,e.type).filter(e=>e.primitiveName!==d||!["rotation","offsetX","offsetY"].includes(e.propertyName));_.push(...u);const M={type:"sprite-rasterization-param",resource:{...y,avoidSDFRasterization:!0},overrides:_},b=A(e.size,C.CIMVectorMarker.size),k=this._getValueOrOverrideExpression(e.type,d,"Size",b);this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:M,colorLocked:p,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:s,anchorPoint:{x:v,y:g},isAbsoluteAnchorPoint:!1,size:c,rotation:0,offsetX:0,offsetY:0,transform:{type:"cim-marker-transform-param",params:n},color:[255,255,255,1],outlineColor:[0,0,0,0],outlineWidth:0,scaleX:1,frameHeight:c,widthRatio:1,rotateClockwise:!!e.rotateClockwise,referenceSize:l,sizeRatio:O/o(e.size),isOutline:f,markerPlacement:r,animationParams:be(m),baseSize:k})}_createMarkerPlacementOverrideExpression(e){if(!e)return null;const t=[];return z.findApplicableOverrides(e,this._primitiveOverrides,t),{type:"cim-marker-placement-param",placement:e,overrides:Ce(t)}}_createGIFAnimatedSymbolPropertiesOverrideExpression(e){if(!e)return null;const t=[];return z.findApplicableOverrides(e,this._primitiveOverrides,t),{type:"cim-gif-animation-params",animation:e,overrides:Ce(t)}}_analyzeCompositeMarkerGraphic(e,t,r,i,o,a,s,l,n,m,c){const p=i.geometry,f=o[0],y=o[1],d=L(p);if(!d)return;const h="Relative"!==e.anchorPointUnits,u=A(f.width,C.CIMSolidStroke.width),{frameSizeRatio:v,anchorX:g,anchorY:O,widthRatio:S,sdfPaddingRatio:_,sdfTextureSize:M}=I(d,e.frame,e.size,e.anchorPoint,h,u,e.scaleSymbolsProportionally),{path:b}=y,k=y.primitiveName,z=f.primitiveName,x=i.primitiveName;let P=null;y.colorLocked||m||(P=this._maybeGetValueOrOverrideExpression(x,"FillColor"));const E=P??this._getValueOrOverrideExpression(y.type,k,"Color",R(y.color));let V=null;f.colorLocked||m||(V=this._maybeGetValueOrOverrideExpression(x,"StrokeColor"));const N=V??this._getValueOrOverrideExpression(f.type,z,"Color",R(f.color)),T=this._maybeGetValueOrOverrideExpression(x,"StrokeWidth")??this._getValueOrOverrideExpression(f.type,z,"Width",u),w={type:"sprite-rasterization-param",resource:b?{type:"path",path:b,asFill:!0}:{type:"sdf",geometry:p,sdfTextureSize:M,sdfPaddingRatio:_,asFill:!0},overrides:[]};this._cimLayers.push({type:"marker",name:e.name,spriteRasterizationParam:w,colorLocked:m,effects:t,scaleSymbolsProportionally:!!e.scaleSymbolsProportionally,alignment:a,anchorPoint:{x:g,y:O},isAbsoluteAnchorPoint:h,size:n,rotation:0,offsetX:0,offsetY:0,scaleX:1,transform:{type:"cim-marker-transform-param",params:l},frameHeight:n,widthRatio:S,rotateClockwise:!1,referenceSize:s,sizeRatio:v,color:E,outlineColor:N,outlineWidth:T,isOutline:c,markerPlacement:r})}_setPoMap(e,t,r){let i;this._poMap[e]?i=this._poMap[e]:(i={},this._poMap[e]=i),i[t]=r}_maybeGetValueOrOverrideExpression(e,t,r){return this._getValueOrOverrideExpression("",e,t,r,!1)}_getValueOrOverrideExpression(e,t,r,i,o=!0){if(o&&!Q(i)&&(i=Y(e,r.toLowerCase())),null==t)return i;const a=this._poMap[t];if(null==a)return i;const s=a[r];return"string"==typeof s||"number"==typeof s||Array.isArray(s)?s:s?{valueExpressionInfo:s,defaultValue:i}:i}_analyzePrimitiveOverrides(e,t,r,i){if(null==e)return!1;"string"==typeof e&&(e=[e]);for(const o of this._primitiveOverrides)if(e.includes(o.primitiveName)&&o.valueExpressionInfo)return!0;if(null!=t)for(const o of t)if(o?.overrides.length>0)return!0;if(null!=r)for(const o of r)if(o?.overrides.length>0)return!0;if(null!=i)for(const o of i)if(o?.overrides.length>0)return!0;return!1}_getMaterialOverrides(e,t){if(!e)return[];const r=[];for(const i of e)r.push(...this._getPrimitiveMaterialOverrides(i,t));return r}_getPrimitiveMaterialOverrides(e,t){if(!e)return[];const r=j(this._primitiveOverrides.filter(t=>t.primitiveName===e));return r.forEach(e=>e.defaultValue=Y(t,e.propertyName.toLowerCase())),r}_analyzeMaterialOverrides(e,t){return this._primitiveOverrides.filter(r=>r.primitiveName!==e||!t.includes(r.propertyName))}}function pe(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 fe(e){if(e?.startsWith("Level_")){const t=parseInt(e.slice(6),10);if(!isNaN(t))return t}return 0}function ye(e,t){if(!t||0===t.length)return e;const i=r(e);return z.applyOverrides(i,t),i}const de=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&null==e[0].path&&null==e[1].path&&!e[0].effects&&!e[1].effects&&!e[0].animations&&!e[1].animations;function he(e){const t=e.symbolLayers;if(!t)return!1;const r=t.find(e=>e.effects?.find(e=>"CIMGeometricEffectDashes"===e.type&&null!=e.dashTemplate)),i=t.find(e=>e.effects?.find(e=>"CIMGeometricEffectAddControlPoints"===e.type));return!!r||!!i}function ue(e){return ve(e)}function ve(e){return"CIMGeometricEffectCircularSector"===e.type||"CIMGeometricEffectRadial"===e.type||"CIMGeometricEffectTaperedPolygon"===e.type||"PrivateDimensionEffect"===e.type||"PrivateMatcherGeometryOverrideEffect"===e.type}function ge(e){return"CIMGeometricEffectCircularSector"===e.type||"CIMGeometricEffectTaperedPolygon"===e.type}function Oe(e,t){const r=e.some(e=>"CIMSolidFill"===e.type),i=e.every(e=>"CIMSolidFill"===e.type||"CIMSolidStroke"===e.type);return r&&i&&t.some(({effect:e})=>ge(e))}function Se(e){return e.some(e=>"CIMSolidFill"!==e.type&&"CIMSolidStroke"!==e.type&&("CIMVectorMarker"!==e.type&&"CIMPictureMarker"!==e.type||null!=e.markerPlacement))}function _e(e,t){return!!(t?.some(e=>"CIMGeometricEffectRadial"===e.type)&&t?.some(e=>"CIMGeometricEffectTaperedPolygon"===e.type)||t?.some(e=>"CIMGeometricEffectCircularSector"===e.type))&&Me(e)}function Me(e){if(2!==e?.length)return!1;const t=e.find(e=>"CIMSolidFill"===e.type),r=e.find(e=>"CIMSolidStroke"===e.type),i=r?.effects?.some(e=>"CIMGeometricEffectDashes"===e.type);return null!=t&&null!=r&&!i}function Ce(e){return r(e).map(e=>({...e,propertyName:Z(e.propertyName)}))}function be(e){return g(e)?{type:"animation-params",params:e}:null}export{ce as CIMAnalyzer,ye as analyzeCIMResource};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import t from"../../../../core/Error.js";import e from"../../../../core/Logger.js";import{getMetersPerUnitForSR as r}from"../../../../core/units.js";import{create as i}from"../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{project as s}from"../../../../geometry/projectionUtils.js";import{convertFromPolygon as n,generalizeOptimizedGeometry as o,convertFromPolyline as c}from"../../../../layers/graphics/featureConversionUtils.js";import{checkProjectionSupport as a}from"../../../../layers/graphics/data/projectionSupport.js";import{triangulateUnsafe as m}from"./mesh/templates/templateUtils.js";import{SimpleMesh as l}from"./meshing/SimpleMesh.js";import{createScreenExtent as p}from"../../support/clippingUtils.js";import{DataType as h,PrimitiveType as u}from"../../../webgl/enums.js";class g{static async create(t,e){const r=await f(t,e);return r?new g(r):null}constructor(t){this._target=t}destroy(){this._mesh?.destroy()}getMesh(t,e){const r=this._target;if(!r)return null;if(null!==this._mesh&&this._lastStateVersion===e.id)return this._mesh;const{vertices:i,indices:s}=r.getTriangulation(e),n=s?new Uint32Array(s):void 0,o=new Int32Array(i);return this._lastStateVersion=e.id,this._mesh?.destroy(),this._mesh=l.createForShader(t,{primitive:u.TRIANGLES,index:n,vertex:o,layout:{pos:{type:h.INT,count:2}}}),this._mesh}}async function f(r,i){switch(r.type){case"rect":return new _(r);case"path":return w.fromPath(r);case"geometry":return i?y.fromGeometry(r,i):(e.getLogger("esri.views.2d.engine.webgl.ClippingInfo").error(new t("mapview-bad-type","No spatial reference")),null);default:return e.getLogger("esri.views.2d.engine.webgl.ClippingInfo").error(new t("mapview-bad-type","Unable to create ClippingInfo mesh from clip of type: ${clip.type}")),null}}class y{static async fromGeometry({geometry:t},e){if(!t)return null;switch(t.type){case"polygon":return this._fromPolygon(t,e);case"extent":return this._fromMapExtent(t)}}static async _fromPolygon(t,e){const i=t.spatialReference??e;await a(i,e);const c=s(t,e),l=r(e),p=n(c,!1,!1),h=o(p,"esriGeometryPolygon",100*l,!1,!1);if(!h)return null;const u=await m(h);return u?new y(u.vertices,u.indices):null}static _fromMapExtent(t){const{xmin:e,ymin:r,xmax:i,ymax:s}=t,n=new Float32Array([e,r,i,r,e,s,e,s,i,r,i,s]),o=new Uint32Array([0,1,2,3,4,5]);return new y(n,o)}constructor(t,e){this._vertices=t,this._indices=e}getTriangulation(t){const e=[],r=i();for(let i=0;i<this._vertices.length/2;i++){const[s,n]=t.toScreen(r,[this._vertices[2*i],this._vertices[2*i+1]]);e.push(s,n)}return{vertices:e,indices:this._indices}}}class w{static async fromPath({path:t}){const e=c({paths:t},!1,!1),r=await m(e);return r?new w(r.vertices,r.indices):null}static fromTriangulation({vertices:t,indices:e}){return new w(t,e)}constructor(t,e){this._vertices=t,this._indices=e}getTriangulation(t){return{vertices:this._vertices,indices:this._indices}}}class _{constructor(t){this._rect=t}getTriangulation(t){const{xmin:e,xmax:r,ymin:i,ymax:s}=p(this._rect,t.size[0],t.size[1]);return{vertices:[e,i,r,i,e,s,e,s,r,i,r,s],indices:new Uint32Array([0,1,2,3,4,5])}}}export{g as ClipMesh,w as ScreenGeometry};
2
+ import e from"../../../../core/Error.js";import t from"../../../../core/Logger.js";import{create as i}from"../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{loadLibtessF32 as r}from"../../../../geometry/libtess.js";import{project as s}from"../../../../geometry/projectionUtils.js";import{convertFromPolygon as n,generalizeOptimizedGeometry as o,convertFromPolyline as c}from"../../../../layers/graphics/featureConversionUtils.js";import{checkProjectionSupport as a}from"../../../../layers/graphics/data/projectionSupport.js";import{triangulateSyncUnsafe as l,triangulateUnsafe as m}from"./mesh/templates/templateUtils.js";import{SimpleMesh as h}from"./meshing/SimpleMesh.js";import{createScreenExtent as g}from"../../support/clippingUtils.js";import{DataType as p,PrimitiveType as u}from"../../../webgl/enums.js";class y{static async create(e,t){const i=await f(e,t);return i?new y(i):null}constructor(e){this._target=e}destroy(){this._mesh?.destroy()}getMesh(e,t){const i=this._target;if(!i)return null;if(null!==this._mesh&&this._lastStateVersion===t.id)return this._mesh;const{vertices:r,indices:s}=i.getTriangulation(t),n=s?new Uint32Array(s):void 0,o=new Int32Array(r);return this._lastStateVersion=t.id,this._mesh?.destroy(),this._mesh=h.createForShader(e,{primitive:u.TRIANGLES,index:n,vertex:o,layout:{pos:{type:p.INT,count:2}}}),this._mesh}}async function f(i,r){switch(i.type){case"rect":return new v(i);case"path":return w.fromPath(i);case"geometry":return r?_.fromGeometry(i,r):(t.getLogger("esri.views.2d.engine.webgl.ClippingInfo").error(new e("mapview-bad-type","No feature tiling scheme")),null);default:return t.getLogger("esri.views.2d.engine.webgl.ClippingInfo").error(new e("mapview-bad-type","Unable to create ClippingInfo mesh from clip of type: ${clip.type}")),null}}class _{static async fromGeometry({geometry:e},t){if(!e)return null;switch(e.type){case"polygon":return this._fromPolygon(e,t);case"extent":return new d(e)}}static async _fromPolygon(e,t){const i=t.tileInfo.spatialReference,o=e.spatialReference??i;await a(o,i);const c=s(e,i),l=n(c,!1,!1);return l.coords.length?(await r(),new _(l,t)):null}constructor(e,t){this._geometry=e,this._tilingScheme=t,this._triangulations=new Map}getTriangulation(e){const{level:t,resolution:r}=this._tilingScheme.getClosestInfoForScale(e.scale);let s=this._triangulations.get(t);if(!s){const e=o(this._geometry,"esriGeometryPolygon",r/2,!1,!1);s=(e&&l(e))??{vertices:[],indices:[]},this._triangulations.set(t,s)}const n=i(),c=[],{vertices:a,indices:m}=s;for(let i=0;i<a.length/2;i++){const[t,r]=e.toScreen(n,[a[2*i],a[2*i+1]]);c.push(t,r)}return{vertices:c,indices:m}}}class d{constructor({xmin:e,ymin:t,xmax:i,ymax:r}){this._vertices=new Float32Array([e,t,i,t,e,r,e,r,i,t,i,r]),this._indices=new Uint32Array([0,1,2,3,4,5])}getTriangulation(e){const t=[],r=i();for(let i=0;i<this._vertices.length/2;i++){const[s,n]=e.toScreen(r,[this._vertices[2*i],this._vertices[2*i+1]]);t.push(s,n)}return{vertices:t,indices:this._indices}}}class w{static async fromPath({path:e}){const t=c({paths:e},!1,!1),i=await m(t);return i?new w(i.vertices,i.indices):null}static fromTriangulation({vertices:e,indices:t}){return new w(e,t)}constructor(e,t){this._vertices=e,this._indices=t}getTriangulation(e){return{vertices:this._vertices,indices:this._indices}}}class v{constructor(e){this._rect=e}getTriangulation(e){const{xmin:t,xmax:i,ymin:r,ymax:s}=g(this._rect,e.size[0],e.size[1]);return{vertices:[t,r,i,r,t,s,t,s,i,r,i,s],indices:new Uint32Array([0,1,2,3,4,5])}}}export{y as ClipMesh,w as ScreenGeometry};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- const t=t=>new o(t.out,t.scaleFactor);class o{constructor(t,o){this._out=t,this._scaleFactor=o}handles(t){return null!=t.calloutReference}coordinateWrite(t,o,l,e){const s=o.calloutReference,u=s?.getCalloutVisualCount?.()??1;for(let n=0;n<u;n++)s?.setCalloutVisualIndex?.(n),this._writeVisual(t,s,e)}_writeVisual(t,o,l){const e=this._out.recordCount();o?.calloutRecordsUseLabelPhase?this._out.writeWithoutBuffering(l):l();const s=this._out.recordCount()-e;if(0===s)return;o?.includeCalloutRecordRange?.(e,s);const u=t.getCalloutCollisionBounds(this._scaleFactor);u&&o?.includeCalloutCollisionBounds?.(u);for(const n of t.getCalloutPartCollisionBounds(this._scaleFactor))o?.includeCalloutPartCollisionBounds?.(n)}}export{t as createCalloutMeshWriterCoordinator};
2
+ import{GeometryCursor as e}from"../../../../../../geometry/GeometryCursor.js";import{tileSize as t}from"../../definitions.js";import{CalloutMeshWriterPolicy as o}from"../../shaderGraph/techniques/mesh/CalloutMeshWriterPolicy.js";const r=e=>new i(e.out,e.scaleFactor);class i{constructor(e,t){this._out=e,this._scaleFactor=t}handles(e){return null!=e.calloutReference}coordinateWrite(e,t,o,r){const i=t.calloutReference,s=i?.getCalloutVisualCount?.()??1;for(let n=0;n<s;n++)i?.setCalloutVisualIndex?.(n),this._writeVisual(e,i,o,r)}_writeVisual(r,i,s,n){if(!i)return void n();const l=new o({writer:r,effects:r.effects,reference:i,collisionVisibility:r.collisionVisibility}),a=null!=s.target.geometryType&&s.target.readGeometryForDisplay()?e.fromOptimizedCIM(s.target.readGeometryForDisplay().clone(),s.target.geometryType):null,c="esriGeometryPoint"===s.target.geometryType||"esriGeometryMultipoint"===s.target.geometryType,u=l.resolveEffectGeometry(s,a,c),d=l.getReferenceInfo(),f={effect:{inputGeometry:u.geometry,executionContext:l.getEffectExecutionContextOverrides({matcher:s.matcher,scaleFactor:s.scaleFactor,target:s.target,tileKey:this._out.id||""},u.preserveInputGeometry),referenceBounds:d?.bodyBounds,rotation:l.getReferencedRotation(),viewRotation:l.getViewRotation(void 0)??void 0,clippingMargin:t+l.getCornerRadius(this._scaleFactor)+r.effectClippingPadding}},g=this._out.recordCount();i?.calloutRecordsUseLabelPhase?this._out.writeWithoutBuffering(()=>n(f)):n(f);const m=this._out.recordCount()-g;if(0===m)return;i?.includeCalloutRecordRange?.(g,m);const y=l.getCollisionBounds(this._scaleFactor);y&&i?.includeCalloutCollisionBounds?.(y);for(const e of l.getPartCollisionBounds(this._scaleFactor))i?.includeCalloutPartCollisionBounds?.(e)}}export{r as createCalloutMeshWriterCoordinator};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- class e{constructor(e){this._context=e,this._coordinators=(e.coordinatorFactories??[]).map(t=>t({out:e.out,scaleFactor:e.scaleFactor}))}coordinateAndWrite(e,t={}){const r=[...e.writers],n=new Set;for(;r.length>0;){const o=this._getNextWriter(e,r,n,t.externalReferences);if(!o)throw new Error("InternalError: mesh writer dependency graph contains a cycle");const[s]=r.splice(o.index,1),c=o.references;s.setReferences(c.writers.length?[...c.writers]:null),this._coordinateWrite(s,c,t.matcher),n.add(s)}}_getNextWriter(e,t,r,n){for(let o=0;o<t.length;o++){const s=t[o],c=this._getReferences(e,s,n);if(c.internal.every(e=>r.has(e)))return{index:o,references:c}}return null}_write(e,t){const{out:r,proxy:n,feature:o,options:s,level:c,viewExtent:i,scaleFactor:a}=this._context;e.write(r,n,o,s,c,i,a,t)}_coordinateWrite(e,t,r){const n=this._coordinators.filter(e=>e.handles(t)),o=s=>{const c=n[s];c?c.coordinateWrite(e,t,r,()=>o(s+1)):this._write(e,r)};o(0)}_getReferences(e,t,r){const n=[],o=[];let s=null;for(const c of e.dependencies.get(t)??[]){if(c.external){const e=r?.get(c.type);if(!e)continue;n.push(e);continue}const e=c.writer;o.push(e),n.push(e),"callout-body"===c.type&&(s=e)}return{writers:n,internal:o,calloutReference:s}}}export{e as MeshWriterGroupCoordinator};
2
+ class e{constructor(e){this._context=e,this._coordinators=(e.coordinatorFactories??[]).map(t=>t({out:e.out,scaleFactor:e.scaleFactor}))}coordinateAndWrite(e,t={}){const r=[...e.writers],n=new Set;for(;r.length>0;){const o=this._getNextWriter(e,r,n,t.externalReferences);if(!o)throw new Error("InternalError: mesh writer dependency graph contains a cycle");const[i]=r.splice(o.index,1),s=o.references;i.setReferences(s.bindings.size?s.bindings:null),this._coordinateWrite(i,s,t.matcher),n.add(i)}}_getNextWriter(e,t,r,n){for(let o=0;o<t.length;o++){const i=t[o],s=this._getReferences(e,i,n);if(s.internal.every(e=>r.has(e)))return{index:o,references:s}}return null}_write(e,t,r){const{out:n,proxy:o,feature:i,options:s,level:c,viewExtent:a,scaleFactor:l}=this._context;e.write(n,o,i,s,c,a,l,t,r)}_coordinateWrite(e,t,r){const n=this._coordinators.filter(e=>e.handles(t)),{feature:o,options:i,level:s,viewExtent:c,scaleFactor:a}=this._context,l={target:o,options:i,level:s,viewExtent:c,scaleFactor:a,matcher:r},d=(o,i)=>{const s=n[o];s?s.coordinateWrite(e,t,l,e=>d(o+1,{...i,...e})):this._write(e,r,i)};d(0)}_getReferences(e,t,r){const n=new Map,o=[];let i=null;for(const s of e.dependencies.get(t)??[]){if(s.external){const e=r?.get(s.type);if(!e)continue;n.set(s.type,e);continue}const e=s.writer;o.push(e),n.set(s.type,e),"callout-body"===s.type&&(i=e)}return{bindings:n,internal:o,calloutReference:i}}}export{e as MeshWriterGroupCoordinator};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{triangulateF32 as t,loadLibtessF32 as e}from"../../../../../../geometry/libtess.js";import{TileClipper as n}from"../../../../../../geometry/support/TileClipper.js";import o from"../../../../../../layers/graphics/OptimizedGeometry.js";import{tileSize as r}from"../../definitions.js";import{bufcut as s}from"../bufcut.js";const l=1e-5,i=new n(0,0,0,1,0),f=new n(0,0,0,1,0),c=100;function u(t,e,n){let o=0;for(let r=1;r<n;r++){const n=t[2*(e+r-1)],s=t[2*(e+r-1)+1];o+=(t[2*(e+r)]-n)*(t[2*(e+r)+1]+s)}return o}function h(t,e,n,o,r){let s=0;const l=2;for(let i=n;i<o;i+=3){const n=(t[i]-r)*l,o=(t[i+1]-r)*l,f=(t[i+2]-r)*l;s+=Math.abs((e[n]-e[f])*(e[o+1]-e[n+1])-(e[n]-e[o])*(e[f+1]-e[n+1]))}return s}async function a(t){return await e(),g(t)}function g(t){const e=[];if(!(t.maxLength>c)&&p(e,t))return e.length?{indices:e,vertices:t.coords}:null;return{indices:null,vertices:m(t)}}function p(t,e){const{coords:n,lengths:o}=e,r=0,i=t;let f=0;for(let c=0;c<o.length;){let t=c,e=o[c],a=u(n,f,e);const g=[];for(;++t<o.length;){const r=o[t],s=u(n,f+e,r);if(!(s>0))break;a+=s,g.push(f+e),e+=r}const p=i.length;s(i,n,f,f+e,g,2,r);const m=h(i,n,p,i.length,r),x=Math.abs(a);if(Math.abs((m-x)/Math.max(1e-7,x))>l)return i.length=0,!1;c=t,f+=e}return!0}function m(e){const{coords:n,lengths:o}=e,{buffer:r}=t(n,o);return r}function x(t,e,n){let o=0;for(let r=0;r<t.lengths.length;r++){const s=t.lengths[r];for(let r=0;r<s;r++){const s=t.coords[2*(r+o)],l=t.coords[2*(r+o)+1];if(s<e||s>n||l<e||l>n)return!0}o+=s}return!1}function d(t,e){if(null==t)return null;if(!x(t,-128,r+128))return t;i.setPixelMargin(e),i.reset(3);const{stride:n,lengths:s,coords:l}=t;let f=0;for(const o of s){const t=f+o*n;for(i.moveTo(l[f],l[f+1]),f+=n;f<t;)i.lineTo(l[f],l[f+1]),f+=n;i.close()}const c=i.result(!1);if(!c)return null;const u=new o;for(const o of c){for(const{x:t,y:e}of o)u.coords.push(t,e);u.lengths.push(o.length)}return u}function y(t,e){f.setPixelMargin(e);const n=f,o=-e,s=r+e;let l=[],i=!1;if(!t.nextPath())return null;let c=t.pathLength(),u=!0;for(;u;){t.seekPathStart();const e=[];if(!t.pathSize)return null;n.reset(2),t.nextPoint();let r=t.x,f=t.y;if(i)n.moveTo(r,f);else{if(r<o||r>s||f<o||f>s){i=!0;continue}e.push({x:r,y:f})}let h=!1;for(;t.nextPoint();)if(r=t.x,f=t.y,i)n.lineTo(r,f);else{if(r<o||r>s||f<o||f>s){h=!0;break}e.push({x:r,y:f})}if(h)i=!0;else{if(i){const t=n.resultWithStarts();if(t)for(const e of t)l.push({...e,pathLength:c})}else l.push({line:e,start:0,pathLength:c});u=t.nextPath(),c=u?t.pathLength():0,i=!1}}return l=l.filter(t=>t.line.length>1),0===l.length?null:l}i.setExtent(r),f.setExtent(r);export{u as area,y as clipLinesMarshall,d as clipMarshall,h as triangleAreaArray,p as triangulateEarcut,m as triangulateLibtess,g as triangulateSyncUnsafe,a as triangulateUnsafe};
2
+ import{e as t}from"../../../../../../chunks/earcut.js";import{triangulateF32 as e,loadLibtessF32 as n}from"../../../../../../geometry/libtess.js";import{TileClipper as o}from"../../../../../../geometry/support/TileClipper.js";import r from"../../../../../../layers/graphics/OptimizedGeometry.js";import{tileSize as s}from"../../definitions.js";const l=1e-5,i=new o(0,0,0,1,0),f=new o(0,0,0,1,0);function c(t,e,n){let o=0;for(let r=1;r<n;r++){const n=t[2*(e+r-1)],s=t[2*(e+r-1)+1];o+=(t[2*(e+r)]-n)*(t[2*(e+r)+1]+s)}return o}function u(t,e,n,o,r){let s=0;const l=2;for(let i=n;i<o;i+=3){const n=(t[i]-r)*l,o=(t[i+1]-r)*l,f=(t[i+2]-r)*l;s+=Math.abs((e[n]-e[f])*(e[o+1]-e[n+1])-(e[n]-e[o])*(e[f+1]-e[n+1]))}return s}async function h(t){return await n(),a(t)}function a(t){const e=[];if(g(e,t))return e.length?{indices:e,vertices:t.coords}:null;return{indices:null,vertices:p(t)}}function g(e,n){const{coords:o,lengths:r}=n,s=0,i=e;let f=0;for(let h=0;h<r.length;){let e=h,n=r[h],a=c(o,f,n);const g=[];for(;++e<r.length;){const t=r[e],s=c(o,f+n,t);if(!(s>0))break;a+=s,g.push(n),n+=t}const p=i.length,m=o.slice(2*f,2*(f+n)),x=t(m,g,2);for(const t of x)i.push(t+f);const d=u(i,o,p,i.length,s),y=Math.abs(a);if(Math.abs((d-y)/Math.max(1e-7,y))>l)return i.length=0,!1;h=e,f+=n}return!0}function p(t){const{coords:n,lengths:o}=t,{buffer:r}=e(n,o);return r}function m(t,e,n){let o=0;for(let r=0;r<t.lengths.length;r++){const s=t.lengths[r];for(let r=0;r<s;r++){const s=t.coords[2*(r+o)],l=t.coords[2*(r+o)+1];if(s<e||s>n||l<e||l>n)return!0}o+=s}return!1}function x(t,e){if(null==t)return null;if(!m(t,-128,s+128))return t;i.setPixelMargin(e),i.reset(3);const{stride:n,lengths:o,coords:l}=t;let f=0;for(const r of o){const t=f+r*n;for(i.moveTo(l[f],l[f+1]),f+=n;f<t;)i.lineTo(l[f],l[f+1]),f+=n;i.close()}const c=i.result(!1);if(!c)return null;const u=new r;for(const r of c){for(const{x:t,y:e}of r)u.coords.push(t,e);u.lengths.push(r.length)}return u}function d(t,e){f.setPixelMargin(e);const n=f,o=-e,r=s+e;let l=[],i=!1;if(!t.nextPath())return null;let c=t.pathLength(),u=!0;for(;u;){t.seekPathStart();const e=[];if(!t.pathSize)return null;n.reset(2),t.nextPoint();let s=t.x,f=t.y;if(i)n.moveTo(s,f);else{if(s<o||s>r||f<o||f>r){i=!0;continue}e.push({x:s,y:f})}let h=!1;for(;t.nextPoint();)if(s=t.x,f=t.y,i)n.lineTo(s,f);else{if(s<o||s>r||f<o||f>r){h=!0;break}e.push({x:s,y:f})}if(h)i=!0;else{if(i){const t=n.resultWithStarts();if(t)for(const e of t)l.push({...e,pathLength:c})}else l.push({line:e,start:0,pathLength:c});u=t.nextPath(),c=u?t.pathLength():0,i=!1}}return l=l.filter(t=>t.line.length>1),0===l.length?null:l}i.setExtent(s),f.setExtent(s);export{c as area,d as clipLinesMarshall,x as clipMarshall,u as triangleAreaArray,g as triangulateEarcut,p as triangulateLibtess,a as triangulateSyncUnsafe,h as triangulateUnsafe};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{pt2px as e}from"../../../../../../../core/screenUtils.js";import{GeometryCursor as t}from"../../../../../../../geometry/GeometryCursor.js";import{maxTileCoordValue as i}from"../../../../../../../symbols/cim/constants.js";import{CIMMarkerPlacementHelper as r}from"../../../../../../../symbols/cim/placements/CIMMarkerPlacementHelper.js";import{spritePadding as s,tileSize as n}from"../../../definitions.js";import{AAnimatedMeshWriter as o}from"./AnimatedMeshWriter.js";import{angle as a,sizing as l,animationPointerAndBaseSizeAndReferenceSize as c,uv as m,offset as d,pos as u,bitset as p,id as h,lineLength as f,value1Position2Value2 as x,zoomRange as y}from"./attributes.js";import{clipWithVertexInterpolation as g}from"./clipping.js";import{createComputedAnimatedMeshParams as P}from"./ComputedAnimatedParams.js";const M=64,b=64,v=2;function w(e,t){const i=[];let r=0,s=0;for(;e.nextPath();){s=t?0:r,e.nextPoint();let{x:n,y:o}=e;const a=[{x:n,y:o,attributes:[s]}];for(;e.nextPoint();){const{x:t,y:i}=e,r=t-n,l=i-o;s+=Math.sqrt(r*r+l*l),a.push({x:t,y:i,attributes:[s]}),n=t,o=i}a.length>1&&i.push(a),r=s}return{lineData:i,totalDistance:r}}class _ extends o{get vertexSpec(){return{createComputedParams:P,optionalAttributes:{zoomRange:y,value1Position2Value2:x,lineLength:f},attributes:{id:h,bitset:p,pos:u,offset:d.marker,uv:m.marker,animationPointerAndBaseSizeAndReferenceSize:c,sizing:l,angle:a}}}_write(e,{target:i,effectGeometry:r}){const s=this.evaluatedMeshParams.sprite,{textureBinding:n}=s;e.recordStart(this.instanceId,this.attributeLayout,n);const o=i.getDisplayId();if(this.shift&&"esriGeometryPolyline"===i.geometryType){if(!r){const r=t.fromFeatureSetReaderCIM(i);r&&this._writeParticles(e,i,r)}}else if(null!=this.evaluatedMeshParams.placement)this._writePlacedMarkers(e,i);else if("esriGeometryPolygon"===i.geometryType){const t=i.readCentroidForDisplay();if(!t)return;const[r,s]=t.coords;this._writeQuad(e,o,r,s)}else if("esriGeometryPoint"===i.geometryType){const t=i.readXForDisplay(),r=i.readYForDisplay();this._writeQuad(e,o,t,r)}else{const t=i.readGeometryForDisplay();t&&t.forEachVertex((t,i)=>{this._writeQuad(e,o,t,i)})}e.recordEnd()}_writePlacedMarkers(s,n){const o=t.fromFeatureSetReaderCIM(n)?.clone();if(!o)return;const a=-1,l=r.getPlacement(o,a,this.evaluatedMeshParams.placement,e(1),s.id);if(!l)return;const c=n.getDisplayId();let m=l.next(),d=null;for(;null!=m;){const e=m.tx,t=-m.ty;if(Math.abs(e)>i||Math.abs(t)>i){m=l.next();continue}const r=-m.getAngle();s.recordBounds(e,t,M,b),this.shift?d&&this._writeQuad(s,c,d[0],d[1],void 0,r):this._writeQuad(s,c,e,t,void 0,r),d=[e,t],m=l.next()}}_writeParticles(e,t,i){const r=t.getDisplayId(),{placement:s}=this.evaluatedMeshParams,o=s?.placePerPart??!1,{lineData:a,totalDistance:l}=w(i,o);if(0===a.length)return;const c=this.evaluatedMeshParams.baseSize,m={x:-c,y:-c,width:n+2*c,height:n+2*c},d=a.flatMap(e=>{const t=o?e[e.length-1].attributes[0]:l;return C(g(e,m),t)});for(const{particles:n,lineLength:u}of d){const t=t=>{for(const i of n){const{a:s,b:n}=i;this._writeQuad(e,r,s.position[0],s.position[1],[s.distance-t,n.position[0],n.position[1],n.distance-t],this.evaluatedMeshParams.angleToLine?Math.atan2(s.direction[1],s.direction[0]):0,u,!0)}};if(!s||"placementTemplate"in s||"CIMMarkerPlacementOnVertices"===s.type){let e;if(s&&"CIMMarkerPlacementOnVertices"!==s.type)e=s.placementTemplate;else{e=[0];for(const t of n){const{a:i,b:r}=t,s=i.position[0]-r.position[0],n=i.position[1]-r.position[1],o=Math.sqrt(s*s+n*n);e.push(o)}}let i=-1*u;for(;i<(1+v/2)*u;)for(const r of e)i+=r,t(i)}else"CIMMarkerPlacementAtExtremities"===s.type?"JustBegin"===s.extremityPlacement?t(1):"JustEnd"===s.extremityPlacement?(t(u-1),t(-1)):"Both"===s.extremityPlacement&&(t(1),t(u-1)):"CIMMarkerPlacementOnLine"===s.type&&("LineBeginning"===s.relativeTo?t(1):"LineEnd"===s.relativeTo?(t(u-1),t(-1)):"LineMiddle"===s.relativeTo&&t(u/2))}}_writeQuad(e,t,i,r,n,o=0,a=0,l=!1){const c=this.evaluatedMeshParams.sprite,{rect:m}=c,d=m.x+s,u=m.y+s,p=m.x+m.width-s,h=m.y+m.height-s,f=e.vertexCount();l||e.recordBounds(i,r,M,M);const x={texXmin:d,texYmin:u,texXmax:p,texYmax:h,value1Position2Value2:n,angle:o,lineLength:a};for(let s=0;s<4;s++)this._writeVertex(e,t,i,r,x);e.indexEnsureSize(6),e.indexWrite(f),e.indexWrite(f+1),e.indexWrite(f+2),e.indexWrite(f+1),e.indexWrite(f+3),e.indexWrite(f+2)}}function C(e,t){const i=[];for(const r of e){const e=[];let{x:s,y:n}=r[0],o=r[0].attributes[0];for(let t=1;t<r.length;t++){const{x:i,y:a}=r[t],l=r[t].attributes[0];let c=i-s,m=a-n;const d=Math.sqrt(c*c+m*m);d>0&&(c/=d,m/=d,e.push({a:{position:[s,n],distance:o,direction:[c,m]},b:{position:[i,a],distance:l,direction:[c,m]}}),s=i,n=a,o=l)}i.push({particles:e,lineLength:t})}return i}class D extends _{constructor(){super(...arguments),this.shift=!1}}class I extends _{constructor(){super(...arguments),this.shift=!0}}export{D as AnimatedMarkerMeshWriter,I as AnimatedMarkerShiftMeshWriter,w as convertToLineData};
2
+ import{pt2px as e}from"../../../../../../../core/screenUtils.js";import{GeometryCursor as t}from"../../../../../../../geometry/GeometryCursor.js";import{maxTileCoordValue as i}from"../../../../../../../symbols/cim/constants.js";import{CIMMarkerPlacementHelper as r}from"../../../../../../../symbols/cim/placements/CIMMarkerPlacementHelper.js";import{spritePadding as s,tileSize as n}from"../../../definitions.js";import{AAnimatedMeshWriter as o}from"./AnimatedMeshWriter.js";import{angle as a,sizing as l,animationPointerAndBaseSizeAndReferenceSize as c,uv as m,offset as d,pos as u,bitset as p,id as h,lineLength as f,value1Position2Value2 as x,zoomRange as y}from"./attributes.js";import{clipWithVertexInterpolation as g}from"./clipping.js";import{createComputedAnimatedMeshParams as P}from"./ComputedAnimatedParams.js";const M=64,b=64,v=2;function w(e,t){const i=[];let r=0,s=0;for(;e.nextPath();){s=t?0:r,e.nextPoint();let{x:n,y:o}=e;const a=[{x:n,y:o,attributes:[s]}];for(;e.nextPoint();){const{x:t,y:i}=e,r=t-n,l=i-o;s+=Math.sqrt(r*r+l*l),a.push({x:t,y:i,attributes:[s]}),n=t,o=i}a.length>1&&i.push(a),r=s}return{lineData:i,totalDistance:r}}class _ extends o{get vertexSpec(){return{createComputedParams:P,optionalAttributes:{zoomRange:y,value1Position2Value2:x,lineLength:f},attributes:{id:h,bitset:p,pos:u,offset:d.marker,uv:m.marker,animationPointerAndBaseSizeAndReferenceSize:c,sizing:l,angle:a}}}_write(e,{target:i,effect:r}){const s=r?.geometry,n=this.evaluatedMeshParams.sprite,{textureBinding:o}=n;e.recordStart(this.instanceId,this.attributeLayout,o);const a=i.getDisplayId();if(this.shift&&"esriGeometryPolyline"===i.geometryType){if(!s){const r=t.fromFeatureSetReaderCIM(i);r&&this._writeParticles(e,i,r)}}else if(null!=this.evaluatedMeshParams.placement)this._writePlacedMarkers(e,i);else if("esriGeometryPolygon"===i.geometryType){const t=i.readCentroidForDisplay();if(!t)return;const[r,s]=t.coords;this._writeQuad(e,a,r,s)}else if("esriGeometryPoint"===i.geometryType){const t=i.readXForDisplay(),r=i.readYForDisplay();this._writeQuad(e,a,t,r)}else{const t=i.readGeometryForDisplay();t&&t.forEachVertex((t,i)=>{this._writeQuad(e,a,t,i)})}e.recordEnd()}_writePlacedMarkers(s,n){const o=t.fromFeatureSetReaderCIM(n)?.clone();if(!o)return;const a=-1,l=r.getPlacement(o,a,this.evaluatedMeshParams.placement,e(1),s.id);if(!l)return;const c=n.getDisplayId();let m=l.next(),d=null;for(;null!=m;){const e=m.tx,t=-m.ty;if(Math.abs(e)>i||Math.abs(t)>i){m=l.next();continue}const r=-m.getAngle();s.recordBounds(e,t,M,b),this.shift?d&&this._writeQuad(s,c,d[0],d[1],void 0,r):this._writeQuad(s,c,e,t,void 0,r),d=[e,t],m=l.next()}}_writeParticles(e,t,i){const r=t.getDisplayId(),{placement:s}=this.evaluatedMeshParams,o=s?.placePerPart??!1,{lineData:a,totalDistance:l}=w(i,o);if(0===a.length)return;const c=this.evaluatedMeshParams.baseSize,m={x:-c,y:-c,width:n+2*c,height:n+2*c},d=a.flatMap(e=>{const t=o?e[e.length-1].attributes[0]:l;return C(g(e,m),t)});for(const{particles:n,lineLength:u}of d){const t=t=>{for(const i of n){const{a:s,b:n}=i;this._writeQuad(e,r,s.position[0],s.position[1],[s.distance-t,n.position[0],n.position[1],n.distance-t],this.evaluatedMeshParams.angleToLine?Math.atan2(s.direction[1],s.direction[0]):0,u,!0)}};if(!s||"placementTemplate"in s||"CIMMarkerPlacementOnVertices"===s.type){let e;if(s&&"CIMMarkerPlacementOnVertices"!==s.type)e=s.placementTemplate;else{e=[0];for(const t of n){const{a:i,b:r}=t,s=i.position[0]-r.position[0],n=i.position[1]-r.position[1],o=Math.sqrt(s*s+n*n);e.push(o)}}let i=-1*u;for(;i<(1+v/2)*u;)for(const r of e)i+=r,t(i)}else"CIMMarkerPlacementAtExtremities"===s.type?"JustBegin"===s.extremityPlacement?t(1):"JustEnd"===s.extremityPlacement?(t(u-1),t(-1)):"Both"===s.extremityPlacement&&(t(1),t(u-1)):"CIMMarkerPlacementOnLine"===s.type&&("LineBeginning"===s.relativeTo?t(1):"LineEnd"===s.relativeTo?(t(u-1),t(-1)):"LineMiddle"===s.relativeTo&&t(u/2))}}_writeQuad(e,t,i,r,n,o=0,a=0,l=!1){const c=this.evaluatedMeshParams.sprite,{rect:m}=c,d=m.x+s,u=m.y+s,p=m.x+m.width-s,h=m.y+m.height-s,f=e.vertexCount();l||e.recordBounds(i,r,M,M);const x={texXmin:d,texYmin:u,texXmax:p,texYmax:h,value1Position2Value2:n,angle:o,lineLength:a};for(let s=0;s<4;s++)this._writeVertex(e,t,i,r,x);e.indexEnsureSize(6),e.indexWrite(f),e.indexWrite(f+1),e.indexWrite(f+2),e.indexWrite(f+1),e.indexWrite(f+3),e.indexWrite(f+2)}}function C(e,t){const i=[];for(const r of e){const e=[];let{x:s,y:n}=r[0],o=r[0].attributes[0];for(let t=1;t<r.length;t++){const{x:i,y:a}=r[t],l=r[t].attributes[0];let c=i-s,m=a-n;const d=Math.sqrt(c*c+m*m);d>0&&(c/=d,m/=d,e.push({a:{position:[s,n],distance:o,direction:[c,m]},b:{position:[i,a],distance:l,direction:[c,m]}}),s=i,n=a,o=l)}i.push({particles:e,lineLength:t})}return i}class D extends _{constructor(){super(...arguments),this.shift=!1}}class I extends _{constructor(){super(...arguments),this.shift=!0}}export{D as AnimatedMarkerMeshWriter,I as AnimatedMarkerShiftMeshWriter,w as convertToLineData};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{pt2px as t}from"../../../../../../../core/screenUtils.js";import{GeometryCursor as e}from"../../../../../../../geometry/GeometryCursor.js";import{triangulateF32 as s}from"../../../../../../../geometry/libtess.js";import{LineTessellation as i}from"../../../TurboLine.js";import{clipLinesMarshall as r,triangulateEarcut as n,clipMarshall as o}from"../../../mesh/templates/templateUtils.js";import{AAnimatedMeshWriter as a}from"./AnimatedMeshWriter.js";import{noPatternAngle as h,lineLength as l,noTiming as m,zoomRange as u,segmentDirection as c,normal as d,accumulatedDistance as f,sizing as p,animationPointerAndBaseSizeAndReferenceSize as x,tlbr as _,offset as g,pos as P,bitset as b,id as v,patternAngle as y,noLineLength as L}from"./attributes.js";import{createComputedAnimatedMeshParams as W}from"./ComputedAnimatedParams.js";import{processLineCapInput as w,processLineJoinInput as C}from"../fill/meshWriterUtils.js";import{LineTessellationParams as z}from"../line/LineMeshWriter.js";class j extends a{_write(t,{target:s,effectGeometry:i}){const r=i??e.fromFeatureSetReaderCIM(s);if(!r)return;const n=this.evaluatedMeshParams.sprite,{textureBinding:o}=n;t.recordStart(this.instanceId,this.attributeLayout,o);const a=s.getDisplayId();this._writePoly(t,a,r.asOptimized()),t.recordEnd()}}class S extends j{constructor(){super(...arguments),this.vertexSpec={createComputedParams:W,attributes:{id:v,bitset:b,pos:P,offset:g.fill,tlbr:_,animationPointerAndBaseSizeAndReferenceSize:x,sizing:p},optionalAttributes:{zoomRange:u,value1Position2Value2:m,lineLength:L,angle:y}}}_writePoly(t,e,i){const r=this._clip(i);if(!r)return;i=r;const o=[],a=t.vertexCount();let h;if(n(o,i)){if(0===o.length)return;h=0;for(const s of o){const r=i.coords[2*s],n=i.coords[2*s+1];this._writeVertex(t,e,r,n),h++}}else{const{coords:r,lengths:n}=i,o=s(r,n);h=o.vertexCount;for(let s=0;s<o.buffer.length/2;s++){const i=o.buffer[2*s],r=o.buffer[2*s+1];this._writeVertex(t,e,i,r)}}if(h>0){t.indexEnsureSize(h);for(let e=0;e<h;e++)t.indexWrite(e+a)}}_clip(t){const e=this.hasEffects;return o(t,e?256:8)}}class T{constructor(){this.id=0,this.bitset=0,this.indexCount=0,this.vertexCount=0,this.vertexFrom=0,this.vertexBounds=0,this.pathLength=0}}const A=65535;class R extends j{constructor(){super(...arguments),this.vertexSpec={createComputedParams:W,attributes:{id:v,bitset:b,pos:P,offset:g.line,tlbr:_,animationPointerAndBaseSizeAndReferenceSize:x,sizing:p,accumulatedDistance:f,normal:d,segmentDirection:c},optionalAttributes:{zoomRange:u,value1Position2Value2:m,lineLength:l,angle:h}},this._tessParams=new z,this._currentWrite=new T,this._tessellationOptions={halfWidth:0,pixelCoordRatio:1,offset:0,wrapDistance:A,textured:!1},this._lineLength=0,this._lineTessellator=new i((t,e,s,i,r,n,o,a,h,l,m)=>this._writeTesselatedVertex(t,e,s,i,r,n,o,a,h,l,m,this._lineLength),this._writeTriangle.bind(this),!1)}_writePoly(s,i,n){const o=64,a=!1,h=r(e.fromOptimized(n,"esriGeometryPolyline"),o);if(null==h)return;const{_currentWrite:l,_tessellationOptions:m}=this,{baseSize:u,capType:c,joinType:d,miterLimit:f}=this.evaluatedMeshParams,p=t(.5*u);m.halfWidth=p,m.capType=w(c||"Round"),m.joinType=C(d||"Round"),m.miterLimit=f||2,l.out=s,l.id=i,l.vertexCount=0,l.indexCount=0,l.vertexFrom=s.vertexCount(),l.vertexBounds=1;for(const{line:t,start:e,pathLength:r}of h){m.initialDistance=e%A,l.pathLength=r,this._lineLength=0;for(let e=1;e<t.length;e++){const s=t[e].x-t[e-1].x,i=t[e].y-t[e-1].y;this._lineLength+=Math.sqrt(s*s+i*i)}this._lineTessellator.tessellate(t,m,a)}}_writeTesselatedVertex(t,e,s,i,r,n,o,a,h,l,m,u){const{out:c,id:d,vertexBounds:f,pathLength:p}=this._currentWrite;return this.hasEffects&&c.recordBounds(t,e,f,f),this._tessParams.extrusionOffsetX=o,this._tessParams.extrusionOffsetY=a,this._tessParams.normalX=h,this._tessParams.normalY=l,this._tessParams.directionX=r,this._tessParams.directionY=n,this._tessParams.distance=m,this._tessParams.pathLength=p,this._tessParams.lineLength=u,this._writeVertex(c,d,t,e,this._tessParams),this._currentWrite.vertexFrom+this._currentWrite.vertexCount++}_writeTriangle(t,e,s){const{out:i}=this._currentWrite;i.indexEnsureSize(3),i.indexWrite(t),i.indexWrite(e),i.indexWrite(s),this._currentWrite.indexCount+=3}}export{j as AAnimatedPolyMeshWriter,S as AnimatedFillMeshWriter,R as AnimatedLineMeshWriter};
2
+ import{pt2px as t}from"../../../../../../../core/screenUtils.js";import{GeometryCursor as e}from"../../../../../../../geometry/GeometryCursor.js";import{triangulateF32 as s}from"../../../../../../../geometry/libtess.js";import{LineTessellation as i}from"../../../TurboLine.js";import{clipLinesMarshall as r,triangulateEarcut as n,clipMarshall as o}from"../../../mesh/templates/templateUtils.js";import{AAnimatedMeshWriter as a}from"./AnimatedMeshWriter.js";import{noPatternAngle as h,lineLength as l,noTiming as m,zoomRange as u,segmentDirection as c,normal as d,accumulatedDistance as f,sizing as p,animationPointerAndBaseSizeAndReferenceSize as x,tlbr as _,offset as g,pos as P,bitset as b,id as v,patternAngle as y,noLineLength as L}from"./attributes.js";import{createComputedAnimatedMeshParams as W}from"./ComputedAnimatedParams.js";import{processLineCapInput as w,processLineJoinInput as C}from"../fill/meshWriterUtils.js";import{LineTessellationParams as z}from"../line/LineMeshWriter.js";class j extends a{_write(t,{target:s,effect:i}){const r=i?.geometry??e.fromFeatureSetReaderCIM(s);if(!r)return;const n=this.evaluatedMeshParams.sprite,{textureBinding:o}=n;t.recordStart(this.instanceId,this.attributeLayout,o);const a=s.getDisplayId();this._writePoly(t,a,r.asOptimized()),t.recordEnd()}}class S extends j{constructor(){super(...arguments),this.vertexSpec={createComputedParams:W,attributes:{id:v,bitset:b,pos:P,offset:g.fill,tlbr:_,animationPointerAndBaseSizeAndReferenceSize:x,sizing:p},optionalAttributes:{zoomRange:u,value1Position2Value2:m,lineLength:L,angle:y}}}_writePoly(t,e,i){const r=this._clip(i);if(!r)return;i=r;const o=[],a=t.vertexCount();let h;if(n(o,i)){if(0===o.length)return;h=0;for(const s of o){const r=i.coords[2*s],n=i.coords[2*s+1];this._writeVertex(t,e,r,n),h++}}else{const{coords:r,lengths:n}=i,o=s(r,n);h=o.vertexCount;for(let s=0;s<o.buffer.length/2;s++){const i=o.buffer[2*s],r=o.buffer[2*s+1];this._writeVertex(t,e,i,r)}}if(h>0){t.indexEnsureSize(h);for(let e=0;e<h;e++)t.indexWrite(e+a)}}_clip(t){const e=this.hasEffects;return o(t,e?256:8)}}class T{constructor(){this.id=0,this.bitset=0,this.indexCount=0,this.vertexCount=0,this.vertexFrom=0,this.vertexBounds=0,this.pathLength=0}}const A=65535;class R extends j{constructor(){super(...arguments),this.vertexSpec={createComputedParams:W,attributes:{id:v,bitset:b,pos:P,offset:g.line,tlbr:_,animationPointerAndBaseSizeAndReferenceSize:x,sizing:p,accumulatedDistance:f,normal:d,segmentDirection:c},optionalAttributes:{zoomRange:u,value1Position2Value2:m,lineLength:l,angle:h}},this._tessParams=new z,this._currentWrite=new T,this._tessellationOptions={halfWidth:0,pixelCoordRatio:1,offset:0,wrapDistance:A,textured:!1},this._lineLength=0,this._lineTessellator=new i((t,e,s,i,r,n,o,a,h,l,m)=>this._writeTesselatedVertex(t,e,s,i,r,n,o,a,h,l,m,this._lineLength),this._writeTriangle.bind(this),!1)}_writePoly(s,i,n){const o=64,a=!1,h=r(e.fromOptimized(n,"esriGeometryPolyline"),o);if(null==h)return;const{_currentWrite:l,_tessellationOptions:m}=this,{baseSize:u,capType:c,joinType:d,miterLimit:f}=this.evaluatedMeshParams,p=t(.5*u);m.halfWidth=p,m.capType=w(c||"Round"),m.joinType=C(d||"Round"),m.miterLimit=f||2,l.out=s,l.id=i,l.vertexCount=0,l.indexCount=0,l.vertexFrom=s.vertexCount(),l.vertexBounds=1;for(const{line:t,start:e,pathLength:r}of h){m.initialDistance=e%A,l.pathLength=r,this._lineLength=0;for(let e=1;e<t.length;e++){const s=t[e].x-t[e-1].x,i=t[e].y-t[e-1].y;this._lineLength+=Math.sqrt(s*s+i*i)}this._lineTessellator.tessellate(t,m,a)}}_writeTesselatedVertex(t,e,s,i,r,n,o,a,h,l,m,u){const{out:c,id:d,vertexBounds:f,pathLength:p}=this._currentWrite;return this.hasEffects&&c.recordBounds(t,e,f,f),this._tessParams.extrusionOffsetX=o,this._tessParams.extrusionOffsetY=a,this._tessParams.normalX=h,this._tessParams.normalY=l,this._tessParams.directionX=r,this._tessParams.directionY=n,this._tessParams.distance=m,this._tessParams.pathLength=p,this._tessParams.lineLength=u,this._writeVertex(c,d,t,e,this._tessParams),this._currentWrite.vertexFrom+this._currentWrite.vertexCount++}_writeTriangle(t,e,s){const{out:i}=this._currentWrite;i.indexEnsureSize(3),i.indexWrite(t),i.indexWrite(e),i.indexWrite(s),this._currentWrite.indexCount+=3}}export{j as AAnimatedPolyMeshWriter,S as AnimatedFillMeshWriter,R as AnimatedLineMeshWriter};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{loadLibtessF32 as e}from"../../../../../../../geometry/libtess.js";import{clipMarshall as t,triangulateSyncUnsafe as s}from"../../../mesh/templates/templateUtils.js";import{MeshWriter as r}from"../mesh/MeshWriter.js";class i extends r{async loadDependencies(){await Promise.all([super.loadDependencies(),e()])}_write(e,{target:t,effectGeometry:s}){const r=s?.asOptimized()??t.readGeometryForDisplay(),i=this._clip(r);i&&e.withRecord(this.instanceId,this.attributeLayout,void 0,()=>{this._writeGeometry(e,t,i)})}_clip(e){if(!e)return null;const s=this.hasEffects;return t(e,s?256:8)}_writeGeometry(e,t,r){r=r.justXY();const i=s(r);if(!i||!i.vertices.length)return;const o=this.createTesselationParams(t);this._writeVertices(e,t,i,o)}_writeVertices(e,t,s,r){const i=t.getDisplayId(),o=e.vertexCount(),n=this.hasEffects,{vertices:c,indices:a}=s;let l=0;if(a)for(const d of a){const t=c[2*d],s=c[2*d+1];n&&e.recordBounds(t,s,0,0),this._writeVertex(e,i,t,s,r),l++}else for(let d=0;d<c.length;d+=2){const t=Math.round(c[d]),s=Math.round(c[d+1]);n&&e.recordBounds(t,s,0,0),this._writeVertex(e,i,t,s,r),l++}e.indexEnsureSize(l);for(let d=0;d<l;d++)e.indexWrite(d+o)}}export{i as AFillMeshWriter};
2
+ import{loadLibtessF32 as e}from"../../../../../../../geometry/libtess.js";import{clipMarshall as t,triangulateSyncUnsafe as s}from"../../../mesh/templates/templateUtils.js";import{MeshWriter as r}from"../mesh/MeshWriter.js";class i extends r{async loadDependencies(){await Promise.all([super.loadDependencies(),e()])}_write(e,{target:t,effect:s}){const r=s?.geometry?.asOptimized()??t.readGeometryForDisplay(),i=this._clip(r);i&&e.withRecord(this.instanceId,this.attributeLayout,void 0,()=>{this._writeGeometry(e,t,i)})}_clip(e){if(!e)return null;const s=this.hasEffects;return t(e,s?256:8)}_writeGeometry(e,t,r){r=r.justXY();const i=s(r);if(!i||!i.vertices.length)return;const o=this.createTesselationParams(t);this._writeVertices(e,t,i,o)}_writeVertices(e,t,s,r){const i=t.getDisplayId(),o=e.vertexCount(),n=this.hasEffects,{vertices:c,indices:a}=s;let l=0;if(a)for(const d of a){const t=c[2*d],s=c[2*d+1];n&&e.recordBounds(t,s,0,0),this._writeVertex(e,i,t,s,r),l++}else for(let d=0;d<c.length;d+=2){const t=Math.round(c[d]),s=Math.round(c[d+1]);n&&e.recordBounds(t,s,0,0),this._writeVertex(e,i,t,s,r),l++}e.indexEnsureSize(l);for(let d=0;d<l;d++)e.indexWrite(d+o)}}export{i as AFillMeshWriter};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{pt2px as e}from"../../../../../../../core/screenUtils.js";import{complexFillVertexSpec as t,getPatternSize as s,packComplexFillBitset as r}from"./ComplexFillMeshWriter.js";import{packBitset as i}from"./meshWriterUtils.js";import{OutlineFillMeshWriter as a,OutlineFillOutlineMeshWriter as o,outlineFillVertexSpec_Outline as u}from"./OutlineFillMeshWriter.js";import{packPrecision as n,signedToUnsignedByte as c,bitsetTypeFillOutline as p}from"../shaders/constants.js";import{DataType as l}from"../../../../../../webgl/enums.js";const h=t,m=u,d={createComputedParams:e=>e,optionalAttributes:h.optionalAttributes,attributes:{...h.attributes,bitset:{type:l.UNSIGNED_BYTE,count:1,pack:e=>r(e)},aux1:{count:1,type:l.HALF_FLOAT,pack:e=>s(e).width},aux2:{count:1,type:l.HALF_FLOAT,pack:e=>s(e).height},aux3:{count:2,type:l.HALF_FLOAT,pack:({offsetX:t,offsetY:s})=>[e(t),e(s)]},aux4:{count:2,type:l.UNSIGNED_BYTE,pack:({scaleX:e,scaleY:t})=>[e*n,t*n]}}},x={createComputedParams:e=>e,optionalAttributes:h.optionalAttributes,attributes:{...h.attributes,color:m.attributes.color,bitset:{type:l.UNSIGNED_BYTE,count:1,pack:e=>i([[p,!0]])},aux1:{count:1,type:l.HALF_FLOAT,pack:t=>e(.5*t.width)},aux2:{count:1,type:l.HALF_FLOAT,pack:t=>e(.5*t.referenceWidth)},aux3:{count:2,type:l.HALF_FLOAT,packTessellation:({extrusionOffsetX:e,extrusionOffsetY:t})=>[e,t]},aux4:{count:2,type:l.UNSIGNED_BYTE,packTessellation:({normalX:e,normalY:t})=>[e*n+c,t*n+c]}}};class A extends o{constructor(){super(...arguments),this.vertexSpec=x}}class f extends a{constructor(){super(...arguments),this.vertexSpec=d}_createOutlineWriter(e,t,s,r){return new A(e,t,s,r)}write(e,t,s,r,i,a,o,u){this.ensurePacked(t,s,r);const n=this.evaluatedMeshParams.sprite?.textureBinding;e.withRecord(this.instanceId,this.attributeLayout,n,()=>{this._write(e,{target:s,options:r,level:i,viewExtent:a,scaleFactor:o,matcher:u})})}ensurePacked(e,t,s){super.ensurePacked(e,t,s),this._lineMeshWriter.ensurePacked(e,t,s)}enqueueRequest(e,t,s){super.enqueueRequest(e,t,s),this._lineMeshWriter.enqueueRequest(e,t,s)}async loadDependencies(){await Promise.all([super.loadDependencies(),this._lineMeshWriter.loadDependencies()])}}export{f as ComplexOutlineFillMeshWriter};
2
+ import{pt2px as e}from"../../../../../../../core/screenUtils.js";import{complexFillVertexSpec as t,getPatternSize as s,packComplexFillBitset as r}from"./ComplexFillMeshWriter.js";import{packBitset as i}from"./meshWriterUtils.js";import{OutlineFillMeshWriter as a,OutlineFillOutlineMeshWriter as o,outlineFillVertexSpec_Outline as n}from"./OutlineFillMeshWriter.js";import{packPrecision as u,signedToUnsignedByte as c,bitsetTypeFillOutline as p}from"../shaders/constants.js";import{DataType as l}from"../../../../../../webgl/enums.js";const h=t,m=n,d={createComputedParams:e=>e,optionalAttributes:h.optionalAttributes,attributes:{...h.attributes,bitset:{type:l.UNSIGNED_BYTE,count:1,pack:e=>r(e)},aux1:{count:1,type:l.HALF_FLOAT,pack:e=>s(e).width},aux2:{count:1,type:l.HALF_FLOAT,pack:e=>s(e).height},aux3:{count:2,type:l.HALF_FLOAT,pack:({offsetX:t,offsetY:s})=>[e(t),e(s)]},aux4:{count:2,type:l.UNSIGNED_BYTE,pack:({scaleX:e,scaleY:t})=>[e*u,t*u]}}},x={createComputedParams:e=>e,optionalAttributes:h.optionalAttributes,attributes:{...h.attributes,color:m.attributes.color,bitset:{type:l.UNSIGNED_BYTE,count:1,pack:e=>i([[p,!0]])},aux1:{count:1,type:l.HALF_FLOAT,pack:t=>e(.5*t.width)},aux2:{count:1,type:l.HALF_FLOAT,pack:t=>e(.5*t.referenceWidth)},aux3:{count:2,type:l.HALF_FLOAT,packTessellation:({extrusionOffsetX:e,extrusionOffsetY:t})=>[e,t]},aux4:{count:2,type:l.UNSIGNED_BYTE,packTessellation:({normalX:e,normalY:t})=>[e*u+c,t*u+c]}}};class A extends o{constructor(){super(...arguments),this.vertexSpec=x}}class f extends a{constructor(){super(...arguments),this.vertexSpec=d}_createOutlineWriter(e,t,s,r){return new A(e,t,s,r)}write(e,t,s,r,i,a,o,n,u={}){const c={target:s,options:r,level:i,viewExtent:a,scaleFactor:o,matcher:n,...u};this.ensurePacked(t,s,r,c);const p=this.evaluatedMeshParams.sprite?.textureBinding;e.withRecord(this.instanceId,this.attributeLayout,p,()=>{this._write(e,c)})}ensurePacked(e,t,s,r){super.ensurePacked(e,t,s,r),this._lineMeshWriter.ensurePacked(e,t,s,r)}enqueueRequest(e,t,s){super.enqueueRequest(e,t,s),this._lineMeshWriter.enqueueRequest(e,t,s)}async loadDependencies(){await Promise.all([super.loadDependencies(),this._lineMeshWriter.loadDependencies()])}}export{f as ComplexOutlineFillMeshWriter};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{CIMSymbolUnits as t}from"../../../../../../../symbols/cim/types.js";import{spritePadding as e,gradientTextureExternalPadding as r}from"../../../definitions.js";import{AFillMeshWriter as i}from"./AFillMeshWriter.js";import{fillVertexSpec as s}from"./FillMeshWriter.js";import{gradientFillMethods as a,bitset as o}from"./gradientFillConstants.js";import{getGradientSizeHelper as n}from"./GradientSizeHelper.js";import{getBitMask as l}from"./meshWriterUtils.js";import{DataType as c}from"../../../../../../webgl/enums.js";const u={createComputedParams:t=>t,optionalAttributes:s.optionalAttributes,attributes:{...s.attributes,bitset:{type:c.UNSIGNED_BYTE,count:1,pack:({gradientSizeUnits:e,gradientType:r})=>{let i=0;return e===t.Absolute&&(i|=l(o.isAbsolute)),"discrete"===r.toLowerCase()&&(i|=l(o.isDiscrete)),i}},tlbr:{count:4,type:c.UNSIGNED_SHORT,pack:({sprite:t})=>{const{rect:i,width:s,height:a}=t,o=i.x+e+r,n=i.y+e;return[o,n,o+s-2*r,n+a]}},relativePosition:{count:2,type:c.HALF_FLOAT,packTessellation:({gradientStats:t},e,r,i)=>t?.getRelativePosition(r,i)??[0,0]},relativeGradientSize:{count:2,type:c.HALF_FLOAT,packTessellation:({gradientStats:t})=>t?.relativeSize??[1,1]},gradientMethod:{count:1,type:c.UNSIGNED_BYTE,pack:({gradientMethod:t})=>{switch(t.toLowerCase()){case"rectangular":return a.rectangular;case"circular":return a.circular;default:return a.linear}}}}};class p extends i{constructor(){super(...arguments),this.vertexSpec=u}get _effectRotation(){const{effectRotation:t,effectRotationType:e,useEffectOrigin:r,viewRotation:i}=this.evaluatedMeshParams;return null==t&&null==i?null:{value:t,type:e,useEffectOrigin:!!r,viewRotation:i}}get _preventEffectClipping(){return!0}createTesselationParams(t){return{gradientStats:n(this._unclippedGeometry,this.evaluatedMeshParams)}}_write(t,{target:e,effectGeometry:r}){const i=r?.asOptimized()??e.readGeometryForDisplay();this._unclippedGeometry=i;const s=this._clip(i);if(!s)return void(this._unclippedGeometry=null);const a=this.evaluatedMeshParams.sprite?.textureBinding;t.recordStart(this.instanceId,this.attributeLayout,a),this._writeGeometry(t,e,s),this._unclippedGeometry=null,t.recordEnd()}}export{p as GradientFillMeshWriter,u as gradientFillVertexSpec};
2
+ import{CIMSymbolUnits as t}from"../../../../../../../symbols/cim/types.js";import{spritePadding as e,gradientTextureExternalPadding as r}from"../../../definitions.js";import{AFillMeshWriter as i}from"./AFillMeshWriter.js";import{fillVertexSpec as s}from"./FillMeshWriter.js";import{gradientFillMethods as a,bitset as o}from"./gradientFillConstants.js";import{getGradientSizeHelper as n}from"./GradientSizeHelper.js";import{getBitMask as l}from"./meshWriterUtils.js";import{DataType as c}from"../../../../../../webgl/enums.js";const u={createComputedParams:t=>t,optionalAttributes:s.optionalAttributes,attributes:{...s.attributes,bitset:{type:c.UNSIGNED_BYTE,count:1,pack:({gradientSizeUnits:e,gradientType:r})=>{let i=0;return e===t.Absolute&&(i|=l(o.isAbsolute)),"discrete"===r.toLowerCase()&&(i|=l(o.isDiscrete)),i}},tlbr:{count:4,type:c.UNSIGNED_SHORT,pack:({sprite:t})=>{const{rect:i,width:s,height:a}=t,o=i.x+e+r,n=i.y+e;return[o,n,o+s-2*r,n+a]}},relativePosition:{count:2,type:c.HALF_FLOAT,packTessellation:({gradientStats:t},e,r,i)=>t?.getRelativePosition(r,i)??[0,0]},relativeGradientSize:{count:2,type:c.HALF_FLOAT,packTessellation:({gradientStats:t})=>t?.relativeSize??[1,1]},gradientMethod:{count:1,type:c.UNSIGNED_BYTE,pack:({gradientMethod:t})=>{switch(t.toLowerCase()){case"rectangular":return a.rectangular;case"circular":return a.circular;default:return a.linear}}}}};class p extends i{constructor(){super(...arguments),this.vertexSpec=u}get _effectRotation(){const{effectRotation:t,effectRotationType:e,useEffectOrigin:r,viewRotation:i}=this.evaluatedMeshParams;return null==t&&null==i?null:{value:t,type:e,useEffectOrigin:!!r,viewRotation:i}}get _preventEffectClipping(){return!0}createTesselationParams(t){return{gradientStats:n(this._unclippedGeometry,this.evaluatedMeshParams)}}_write(t,{target:e,effect:r}){const i=r?.geometry?.asOptimized()??e.readGeometryForDisplay();this._unclippedGeometry=i;const s=this._clip(i);if(!s)return void(this._unclippedGeometry=null);const a=this.evaluatedMeshParams.sprite?.textureBinding;t.recordStart(this.instanceId,this.attributeLayout,a),this._writeGeometry(t,e,s),this._unclippedGeometry=null,t.recordEnd()}}export{p as GradientFillMeshWriter,u as gradientFillVertexSpec};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{GeometryCursor as e}from"../../../../../../../geometry/GeometryCursor.js";import{clipMarshall as t}from"../../../mesh/templates/templateUtils.js";import{FillMeshWriter as i}from"./FillMeshWriter.js";import{processColorInput as r,packBitset as s}from"./meshWriterUtils.js";import{LineVertexSpec as o,LineMeshWriter as n}from"../line/LineMeshWriter.js";import{getLineClippingMargin as l}from"../mesh/utils.js";import{bitsetTypeFillOutline as a,bitsetOutlineUsesColorVV as c}from"../shaders/constants.js";import{DataType as u}from"../../../../../../webgl/enums.js";const h={createComputedParams:e=>e,optionalAttributes:o.optionalAttributes,attributes:{...o.attributes,bitset:{type:u.UNSIGNED_BYTE,count:1,pack:e=>0},color:{type:u.UNSIGNED_BYTE,count:4,normalized:!0,pack:({color:e})=>r(e)}}},m={createComputedParams:e=>e,optionalAttributes:o.optionalAttributes,attributes:{...o.attributes,bitset:{type:u.UNSIGNED_BYTE,count:1,pack:e=>s([[a,!0],[c,e.outlineUsesColorVV]])},color:{type:u.UNSIGNED_BYTE,count:4,normalized:!0,pack:({outlineColor:e})=>r(e)}}};class p extends n{constructor(){super(...arguments),this.vertexSpec=m}}class f extends i{constructor(e,t,i,r){super(e,t,i,r),this.vertexSpec=h,this._lineMeshWriter=this._createOutlineWriter(e,t,i,r)}_createOutlineWriter(e,t,i,r){return new p(e,t,i,r)}_write(e,t){const{target:i,options:r,scaleFactor:s,matcher:o}=t,n=this.evaluatedMeshParams.effects,l=this.evaluatedMeshParams.outlineEffects,a=e.id||"",c=this._createEffectExecutionContext(i,r,a,s,o);if(n?.length||l?.length){if(n?.length){const r=this.getEffectCursor(i,n,c,t);if(r){let t;for(;t=r?.next();)t.invertY(),this._writeFill(e,i,t)}}else this._writeFill(e,i);if(l?.length){const r=this.getEffectCursor(i,l,c,t);if(r){let t;for(;t=r?.next();)t.invertY(),this._writeOutline(e,i,t)}}else this._writeOutline(e,i)}else this._writeSimpleOutlineFill(e,i)}_writeSimpleOutlineFill(t,i){const r=i.readGeometryForDisplay(),s=this._clip(r);s&&(this._writeGeometry(t,i,s),this._lineMeshWriter.writeLineVertices(t,e.fromOptimizedCIM(s,"esriGeometryPolyline"),i))}_writeFill(e,t,i){const r=i?.asOptimized()??t.readGeometryForDisplay(),s=this._clip(r);s&&this._writeGeometry(e,t,s)}_writeOutline(t,i,r){if(r)return void this._lineMeshWriter.writeLineVertices(t,r,i);const s=i.readGeometryForDisplay(),o=this._clip(s);o&&this._lineMeshWriter.writeLineVertices(t,e.fromOptimizedCIM(o,"esriGeometryPolyline"),i)}_clip(e){return e?t(e,l(this.evaluatedMeshParams)):null}get effectInfos(){return[...this._evaluator.inputMeshParams.effects?.effectInfos??[],...this._evaluator.inputMeshParams.outlineEffects?.effectInfos??[]]}write(e,t,i,r,s,o,n,l){this.ensurePacked(t,i,r),e.withRecord(this.instanceId,this.attributeLayout,void 0,()=>{this._write(e,{target:i,options:r,level:s,viewExtent:o,scaleFactor:n,matcher:l})})}ensurePacked(e,t,i){super.ensurePacked(e,t,i),this._lineMeshWriter.ensurePacked(e,t,i)}enqueueRequest(e,t,i){super.enqueueRequest(e,t,i),this._lineMeshWriter.enqueueRequest(e,t,i)}async loadDependencies(){await Promise.all([super.loadDependencies(),this._lineMeshWriter.loadDependencies()])}get hasEffects(){return!!this.evaluatedMeshParams.outlineEffects}}export{f as OutlineFillMeshWriter,p as OutlineFillOutlineMeshWriter,h as outlineFillVertexSpec_Fill,m as outlineFillVertexSpec_Outline};
2
+ import{GeometryCursor as e}from"../../../../../../../geometry/GeometryCursor.js";import{clipMarshall as t}from"../../../mesh/templates/templateUtils.js";import{FillMeshWriter as i}from"./FillMeshWriter.js";import{processColorInput as r,packBitset as s}from"./meshWriterUtils.js";import{LineVertexSpec as o,LineMeshWriter as n}from"../line/LineMeshWriter.js";import{getLineClippingMargin as l}from"../mesh/utils.js";import{bitsetTypeFillOutline as a,bitsetOutlineUsesColorVV as c}from"../shaders/constants.js";import{DataType as u}from"../../../../../../webgl/enums.js";const h={createComputedParams:e=>e,optionalAttributes:o.optionalAttributes,attributes:{...o.attributes,bitset:{type:u.UNSIGNED_BYTE,count:1,pack:e=>0},color:{type:u.UNSIGNED_BYTE,count:4,normalized:!0,pack:({color:e})=>r(e)}}},p={createComputedParams:e=>e,optionalAttributes:o.optionalAttributes,attributes:{...o.attributes,bitset:{type:u.UNSIGNED_BYTE,count:1,pack:e=>s([[a,!0],[c,e.outlineUsesColorVV]])},color:{type:u.UNSIGNED_BYTE,count:4,normalized:!0,pack:({outlineColor:e})=>r(e)}}};class m extends n{constructor(){super(...arguments),this.vertexSpec=p}}class f extends i{constructor(e,t,i,r){super(e,t,i,r),this.vertexSpec=h,this._lineMeshWriter=this._createOutlineWriter(e,t,i,r)}_createOutlineWriter(e,t,i,r){return new m(e,t,i,r)}_write(e,t){const{target:i,options:r,scaleFactor:s,matcher:o}=t,n=this.evaluatedMeshParams.effects,l=this.evaluatedMeshParams.outlineEffects,a=e.id||"",c=this._createEffectExecutionContext(i,r,a,s,o,t.effect?.executionContext);if(n?.length||l?.length){if(n?.length){const r=this.getEffectCursor(i,n,c,t);if(r){let t;for(;t=r?.next();)t.invertY(),this._writeFill(e,i,t)}}else this._writeFill(e,i);if(l?.length){const r=this.getEffectCursor(i,l,c,t);if(r){let s;for(;s=r?.next();)s.invertY(),this._writeOutline(e,i,s,t.effect?.clippingMargin)}}else this._writeOutline(e,i)}else this._writeSimpleOutlineFill(e,i)}get effectClippingPadding(){return this._lineMeshWriter.getRenderedLineWidth()}_writeSimpleOutlineFill(t,i){const r=i.readGeometryForDisplay(),s=this._clip(r);s&&(this._writeGeometry(t,i,s),this._lineMeshWriter.writeLineVertices(t,e.fromOptimizedCIM(s,"esriGeometryPolyline"),i))}_writeFill(e,t,i){const r=i?.asOptimized()??t.readGeometryForDisplay(),s=this._clip(r);s&&this._writeGeometry(e,t,s)}_writeOutline(t,i,r,s){if(r)return void this._lineMeshWriter.writeLineVertices(t,r,i,s);const o=i.readGeometryForDisplay(),n=this._clip(o);n&&this._lineMeshWriter.writeLineVertices(t,e.fromOptimizedCIM(n,"esriGeometryPolyline"),i)}_clip(e){return e?t(e,l(this.evaluatedMeshParams)):null}get effectInfos(){return[...this._evaluator.inputMeshParams.effects?.effectInfos??[],...this._evaluator.inputMeshParams.outlineEffects?.effectInfos??[]]}write(e,t,i,r,s,o,n,l,a={}){const c={target:i,options:r,level:s,viewExtent:o,scaleFactor:n,matcher:l,...a};this.ensurePacked(t,i,r,c),e.withRecord(this.instanceId,this.attributeLayout,void 0,()=>{this._write(e,c)})}ensurePacked(e,t,i,r){super.ensurePacked(e,t,i,r),this._lineMeshWriter.ensurePacked(e,t,i,r)}enqueueRequest(e,t,i){super.enqueueRequest(e,t,i),this._lineMeshWriter.enqueueRequest(e,t,i)}async loadDependencies(){await Promise.all([super.loadDependencies(),this._lineMeshWriter.loadDependencies()])}get hasEffects(){return!!this.evaluatedMeshParams.outlineEffects}}export{f as OutlineFillMeshWriter,m as OutlineFillOutlineMeshWriter,h as outlineFillVertexSpec_Fill,p as outlineFillVertexSpec_Outline};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{spritePadding as t}from"../../../definitions.js";import{fillVertexSpec as e,FillMeshWriter as r}from"./FillMeshWriter.js";import{DataType as i}from"../../../../../../webgl/enums.js";const s={createComputedParams:t=>t,optionalAttributes:e.optionalAttributes,attributes:{...e.attributes,tlbr:{count:4,type:i.UNSIGNED_SHORT,pack:({sprite:e})=>{const{rect:r,width:i,height:s}=e,o=r.x+t,a=r.y+t;return[o,a,o+i,a+s]}},inverseRasterizationScale:{count:1,type:i.BYTE,packPrecisionFactor:16,pack:({sprite:t})=>1/t.rasterizationScale}}};class o extends r{constructor(){super(...arguments),this.vertexSpec=s}_write(t,{target:e,effectGeometry:r}){const i=r?.asOptimized()??e.readGeometryForDisplay(),s=this._clip(i);if(!s)return;const o=this.evaluatedMeshParams.sprite?.textureBinding;t.recordStart(this.instanceId,this.attributeLayout,o),this._writeGeometry(t,e,s),t.recordEnd()}}export{o as PatternFillMeshWriter,s as patternFillVertexSpec};
2
+ import{spritePadding as t}from"../../../definitions.js";import{fillVertexSpec as e,FillMeshWriter as r}from"./FillMeshWriter.js";import{DataType as i}from"../../../../../../webgl/enums.js";const s={createComputedParams:t=>t,optionalAttributes:e.optionalAttributes,attributes:{...e.attributes,tlbr:{count:4,type:i.UNSIGNED_SHORT,pack:({sprite:e})=>{const{rect:r,width:i,height:s}=e,o=r.x+t,a=r.y+t;return[o,a,o+i,a+s]}},inverseRasterizationScale:{count:1,type:i.BYTE,packPrecisionFactor:16,pack:({sprite:t})=>1/t.rasterizationScale}}};class o extends r{constructor(){super(...arguments),this.vertexSpec=s}_write(t,{target:e,effect:r}){const i=r?.geometry?.asOptimized()??e.readGeometryForDisplay(),s=this._clip(i);if(!s)return;const o=this.evaluatedMeshParams.sprite?.textureBinding;t.recordStart(this.instanceId,this.attributeLayout,o),this._writeGeometry(t,e,s),t.recordEnd()}}export{o as PatternFillMeshWriter,s as patternFillVertexSpec};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{OutlineFillMeshWriter as e,outlineFillVertexSpec_Fill as t,OutlineFillOutlineMeshWriter as s,outlineFillVertexSpec_Outline as r}from"./OutlineFillMeshWriter.js";import{patternFillVertexSpec as i}from"./PatternFillMeshWriter.js";const a={optionalAttributes:i.optionalAttributes,createComputedParams:e=>e,attributes:{...i.attributes,...t.attributes}},u={optionalAttributes:i.optionalAttributes,createComputedParams:e=>e,attributes:{...i.attributes,...r.attributes}};class n extends s{constructor(){super(...arguments),this.vertexSpec=u}}class o extends e{constructor(){super(...arguments),this.vertexSpec=a}_createOutlineWriter(e,t,s,r){return new n(e,t,s,r)}write(e,t,s,r,i,a,u,n){this.ensurePacked(t,s,r);const o=this.evaluatedMeshParams.sprite?.textureBinding;e.withRecord(this.instanceId,this.attributeLayout,o,()=>{this._write(e,{target:s,options:r,level:i,viewExtent:a,scaleFactor:u,matcher:n})})}ensurePacked(e,t,s){super.ensurePacked(e,t,s),this._lineMeshWriter.ensurePacked(e,t,s)}enqueueRequest(e,t,s){super.enqueueRequest(e,t,s),this._lineMeshWriter.enqueueRequest(e,t,s)}async loadDependencies(){await Promise.all([super.loadDependencies(),this._lineMeshWriter.loadDependencies()])}}export{o as PatternOutlineFillMeshWriter};
2
+ import{OutlineFillMeshWriter as e,outlineFillVertexSpec_Fill as t,OutlineFillOutlineMeshWriter as s,outlineFillVertexSpec_Outline as r}from"./OutlineFillMeshWriter.js";import{patternFillVertexSpec as i}from"./PatternFillMeshWriter.js";const a={optionalAttributes:i.optionalAttributes,createComputedParams:e=>e,attributes:{...i.attributes,...t.attributes}},n={optionalAttributes:i.optionalAttributes,createComputedParams:e=>e,attributes:{...i.attributes,...r.attributes}};class u extends s{constructor(){super(...arguments),this.vertexSpec=n}}class o extends e{constructor(){super(...arguments),this.vertexSpec=a}_createOutlineWriter(e,t,s,r){return new u(e,t,s,r)}write(e,t,s,r,i,a,n,u,o={}){const c={target:s,options:r,level:i,viewExtent:a,scaleFactor:n,matcher:u,...o};this.ensurePacked(t,s,r,c);const l=this.evaluatedMeshParams.sprite?.textureBinding;e.withRecord(this.instanceId,this.attributeLayout,l,()=>{this._write(e,c)})}ensurePacked(e,t,s,r){super.ensurePacked(e,t,s,r),this._lineMeshWriter.ensurePacked(e,t,s,r)}enqueueRequest(e,t,s){super.enqueueRequest(e,t,s),this._lineMeshWriter.enqueueRequest(e,t,s)}async loadDependencies(){await Promise.all([super.loadDependencies(),this._lineMeshWriter.loadDependencies()])}}export{o as PatternOutlineFillMeshWriter};