@arcgis/core 5.0.0-next.121 → 5.0.0-next.123

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 (241) hide show
  1. package/applications/Components/SketchTooltipControls.d.ts +3 -2
  2. package/applications/Components/SketchTooltipControls.js +1 -1
  3. package/assets/esri/core/workers/RemoteClient.js +1 -1
  4. package/assets/esri/core/workers/chunks/0184b4c0c92c76c60ab2.js +1 -0
  5. package/assets/esri/core/workers/chunks/{56a296cb5c1ae1ea5ab2.js → 08616877b58b518e7461.js} +1 -1
  6. package/assets/esri/core/workers/chunks/089cef7124173a5cd5f9.js +1 -0
  7. package/assets/esri/core/workers/chunks/{4d438627dd3509f65d5a.js → 0baa0d66003d23cc76a7.js} +1 -1
  8. package/assets/esri/core/workers/chunks/0e216f0075fd531c3a2b.js +1 -0
  9. package/assets/esri/core/workers/chunks/{d5314786df52b6be5307.js → 0e6ffb02a929130ddb50.js} +1 -1
  10. package/assets/esri/core/workers/chunks/{4cb702d574c100483226.js → 0e8b4543e895b615c254.js} +1 -1
  11. package/assets/esri/core/workers/chunks/{ae0a555b047b11aa68eb.js → 1219b588f983b4f35033.js} +1 -1
  12. package/assets/esri/core/workers/chunks/{41fe4d8fe97388498f73.js → 13512a23655258fa77f4.js} +1 -1
  13. package/assets/esri/core/workers/chunks/{ee34f14bbfe619b85a80.js → 13e913aa5f5113fceb16.js} +1 -1
  14. package/assets/esri/core/workers/chunks/1458ef3857be3b76be95.js +1 -0
  15. package/assets/esri/core/workers/chunks/{d621cdd0aef6d77986f0.js → 1469e6d1d0d4e310b8f8.js} +1 -1
  16. package/assets/esri/core/workers/chunks/{b9e90875943703486227.js → 15ba0296403dd4152b88.js} +1 -1
  17. package/assets/esri/core/workers/chunks/{7595c52b1647f092c61a.js → 16abc548724e428c325a.js} +1 -1
  18. package/assets/esri/core/workers/chunks/{dddcae86e434d93b10c0.js → 189e22df73414a1a3989.js} +1 -1
  19. package/assets/esri/core/workers/chunks/{90aeef17af12cfbecb36.js → 1d124a55f6804be19e09.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{63831996ad82bd3b1ca9.js → 1e29a114c1cfe21121c4.js} +1 -1
  21. package/assets/esri/core/workers/chunks/{153a9d087e0fe7072af4.js → 1ede5fa7a16839ed9444.js} +1 -1
  22. package/assets/esri/core/workers/chunks/{6b1e1fb4e9010873c171.js → 1f30558e3ad6ac68bdb8.js} +1 -1
  23. package/assets/esri/core/workers/chunks/{9c06b803912fcafa7f52.js → 24dd404612c35f6a3fc3.js} +1 -1
  24. package/assets/esri/core/workers/chunks/{b6e155b42a4a423139e7.js → 27d1f8279df34d8b15b5.js} +1 -1
  25. package/assets/esri/core/workers/chunks/{401af6d07c9f458ae067.js → 2c69d8bb1c950b95278d.js} +1 -1
  26. package/assets/esri/core/workers/chunks/{22d12c309af9c19a1a48.js → 2c7e5b78d94e5850537b.js} +1 -1
  27. package/assets/esri/core/workers/chunks/{120a5fa9b46084cd0c45.js → 2d376f82cdf020e1fca9.js} +1 -1
  28. package/assets/esri/core/workers/chunks/{8c321c6bc344544ebb51.js → 2d52b137ee64469a46b2.js} +1 -1
  29. package/assets/esri/core/workers/chunks/2d67ab4927a968d5c8d4.js +1 -0
  30. package/assets/esri/core/workers/chunks/{5b3f2bad61a0d993bf16.js → 2e63e18df96e5a2461de.js} +1 -1
  31. package/assets/esri/core/workers/chunks/{d4da3abbd3d88cd63cb9.js → 454150571b5b664b576a.js} +1 -1
  32. package/assets/esri/core/workers/chunks/4740d319f233b7f528fe.js +1 -0
  33. package/assets/esri/core/workers/chunks/{78ce6fcb72e97d3dc087.js → 499d594dc0d282dfe777.js} +1 -1
  34. package/assets/esri/core/workers/chunks/49d58bacb5b397246978.js +1 -0
  35. package/assets/esri/core/workers/chunks/4ba4aa6c75e3f8950e65.js +1 -0
  36. package/assets/esri/core/workers/chunks/{61ce373f00a0cad113ed.js → 4f2c29168c9de0b08741.js} +1 -1
  37. package/assets/esri/core/workers/chunks/{5789898948cc0da78b8b.js → 552e5c413828e181f89a.js} +1 -1
  38. package/assets/esri/core/workers/chunks/{5210bde0a05ab172ab28.js → 59f955c7d6b0589e7cc6.js} +1 -1
  39. package/assets/esri/core/workers/chunks/{5fe0bed2a0a9f8eadb28.js → 5a347b1d87eb6f710136.js} +1 -1
  40. package/assets/esri/core/workers/chunks/5b97cdeb5949822fbef3.js +1 -0
  41. package/assets/esri/core/workers/chunks/{178c91fabf4a87bbb50b.js → 620d7cd0b0885122aa0f.js} +1 -1
  42. package/assets/esri/core/workers/chunks/6321680c8070dffa3b6c.js +1 -0
  43. package/assets/esri/core/workers/chunks/6997b4d5bcc9c4755375.js +1 -0
  44. package/assets/esri/core/workers/chunks/{b79cceeee3ed46f218a0.js → 69ab42b965bccc3bad4f.js} +1 -1
  45. package/assets/esri/core/workers/chunks/{bb4c75479cfea67cf8a2.js → 6af14a0217077d9ab47f.js} +1 -1
  46. package/assets/esri/core/workers/chunks/{672542d0435fbfd0647c.js → 6b3d8280a24f7a3aac40.js} +1 -1
  47. package/assets/esri/core/workers/chunks/6e0cfb76f9c2a9ec6530.js +1 -0
  48. package/assets/esri/core/workers/chunks/6e8989d61204b0b5ff52.js +1 -0
  49. package/assets/esri/core/workers/chunks/{3d78e9b3c97c0ce21d16.js → 7017c2e621236c7a7da4.js} +1 -1
  50. package/assets/esri/core/workers/chunks/7407a1e0cef508116a0b.js +1 -0
  51. package/assets/esri/core/workers/chunks/{da188d0e22ba1639928e.js → 75907e5d009b71ce723b.js} +1 -1
  52. package/assets/esri/core/workers/chunks/{1ab4289195f5e46c6fe8.js → 78936c591fd49ff955a9.js} +1 -1
  53. package/assets/esri/core/workers/chunks/{f0b8de5b3cfbe9223df6.js → 796f5265747ce8be910e.js} +1 -1
  54. package/assets/esri/core/workers/chunks/{ac62411b9b4cf85a4722.js → 7a037fbfd91dd22e3bf0.js} +1 -1
  55. package/assets/esri/core/workers/chunks/{50661f65a9c191f528bc.js → 7ee7529fcbd0d169047c.js} +1 -1
  56. package/assets/esri/core/workers/chunks/7f9b0ef7f9b3f3fd3df9.js +1 -0
  57. package/assets/esri/core/workers/chunks/804c31973f7d116523cb.js +1 -0
  58. package/assets/esri/core/workers/chunks/{82a446e8befe9d29c8f0.js → 822a115c7d718e4e3d2b.js} +1 -1
  59. package/assets/esri/core/workers/chunks/{6789ddaa61e6d8f20d04.js → 8eea620f770576d18809.js} +1 -1
  60. package/assets/esri/core/workers/chunks/{10c4f5afe14c0addc418.js → 9332db133a0925d522fe.js} +1 -1
  61. package/assets/esri/core/workers/chunks/{bc87890d00d6dba979b2.js → 99c9f35a29f9f6c9e4ce.js} +1 -1
  62. package/assets/esri/core/workers/chunks/a4b422dbb6d3cb2505e1.js +1 -0
  63. package/assets/esri/core/workers/chunks/{455fbddd814e4681f0c0.js → a5e91cf150f6cf6a5d2a.js} +1 -1
  64. package/assets/esri/core/workers/chunks/{eb4a2dc5efdb873a7f25.js → aef2832902b270f1a594.js} +1 -1
  65. package/assets/esri/core/workers/chunks/{b5fc0a2480a229e8891a.js → b5f291e8ed7f7cac158d.js} +1 -1
  66. package/assets/esri/core/workers/chunks/bc32a4baeb0ecabb68cc.js +1 -0
  67. package/assets/esri/core/workers/chunks/bd05e68b00b9878d0266.js +1 -0
  68. package/assets/esri/core/workers/chunks/{9a43065e51df9c21c9fa.js → bdb4f216ae8881b98604.js} +1 -1
  69. package/assets/esri/core/workers/chunks/{bf9b2aa2e67ca746ec7c.js → c15f0769a64863cccef0.js} +1 -1
  70. package/assets/esri/core/workers/chunks/c6e0ada6f2ad74fddfec.js +1 -0
  71. package/assets/esri/core/workers/chunks/cf09408cb7729126caae.js +1 -0
  72. package/assets/esri/core/workers/chunks/e0565849281ffbe8269e.js +1 -0
  73. package/assets/esri/core/workers/chunks/{4ef60a76eeca20bcafb1.js → e4f1e584f89ffb86206b.js} +1 -1
  74. package/assets/esri/core/workers/chunks/{2889e782ed81bb05b9e5.js → e508f8e707eb3207cfcc.js} +1 -1
  75. package/assets/esri/core/workers/chunks/{2216264b22a605a0f1ce.js → e60684918100666bb892.js} +1 -1
  76. package/assets/esri/core/workers/chunks/{4550b7620932cd6de20e.js → e94448b371cd17d7a472.js} +1 -1
  77. package/assets/esri/core/workers/chunks/{bb8530ade7c40a1ed7c4.js → eb9e913fe0dfcc71cf92.js} +1 -1
  78. package/assets/esri/core/workers/chunks/{8f26e93eb539ee66c5ac.js → ec2dfd89e4ce6fda4971.js} +1 -1
  79. package/assets/esri/core/workers/chunks/ede1d1cc2f315a34f4ca.js +1 -0
  80. package/assets/esri/core/workers/chunks/{a5bd7e5d71cffde68f89.js → ee89564d11c077169b31.js} +1 -1
  81. package/assets/esri/core/workers/chunks/{b3cc7f6d953bfbc3a70d.js → f62e37863a549f72093c.js} +1 -1
  82. package/assets/esri/core/workers/chunks/fc98b8351be567d3eb62.js +1 -0
  83. package/assets/esri/core/workers/chunks/{554f389f99db430b309c.js → ff961bb6d29ab3fe129d.js} +1 -1
  84. package/assets/esri/themes/base/widgets/_Attribution.scss +4 -2
  85. package/assets/esri/themes/dark/main.css +1 -1
  86. package/assets/esri/themes/light/main.css +1 -1
  87. package/assets/esri/themes/light/view.css +1 -1
  88. package/config.js +1 -1
  89. package/core/Logger.js +1 -1
  90. package/core/deprecate.js +1 -1
  91. package/core/has.js +1 -1
  92. package/core/types.d.ts +5 -0
  93. package/core/workers/workerFactory.js +1 -1
  94. package/editing/sharedTemplates/executor/builders/radialLines.js +1 -1
  95. package/editing/sharedTemplates/executor/builders/support/shapeUtils.js +1 -1
  96. package/geometry/projectionUtils.js +1 -1
  97. package/geometry/support/curves/curveUtils.js +1 -1
  98. package/kernel.js +1 -1
  99. package/layers/ImageryLayer.d.ts +1 -1
  100. package/layers/MapImageLayer.d.ts +1 -1
  101. package/layers/TileLayer.d.ts +1 -1
  102. package/layers/WebTileLayer.d.ts +1 -1
  103. package/layers/graphics/data/QueryEngineResult.js +1 -1
  104. package/layers/graphics/data/SnappingCandidate.js +1 -1
  105. package/layers/orientedImagery/transformations/imageToWorld.js +1 -1
  106. package/layers/orientedImagery/transformations/utils.js +1 -1
  107. package/layers/orientedImagery/transformations/worldToImage.js +1 -1
  108. package/layers/support/ControlPointsGeoreference.d.ts +2 -2
  109. package/layers/support/ControlPointsGeoreference.js +1 -1
  110. package/layers/support/CornersGeoreference.d.ts +2 -2
  111. package/layers/support/CornersGeoreference.js +1 -1
  112. package/layers/support/ExtentAndRotationGeoreference.d.ts +2 -2
  113. package/layers/support/ExtentAndRotationGeoreference.js +1 -1
  114. package/layers/support/GeoreferenceBaseMixin.js +2 -0
  115. package/layers/support/mediaUtils.js +1 -1
  116. package/layers/support/relativeTimeQueryUtils.js +1 -1
  117. package/layers/support/serviceCapabilitiesUtils.js +1 -1
  118. package/package.json +1 -1
  119. package/renderers/DotDensityRenderer.d.ts +43 -0
  120. package/renderers/DotDensityRenderer.js +1 -1
  121. package/rest/featureService/FeatureService.js +1 -1
  122. package/rest/print.js +1 -1
  123. package/rest/query/operations/pbfFlatFeatureSet.js +1 -1
  124. package/support/basemapUtils.js +1 -1
  125. package/support/revision.js +1 -1
  126. package/symbols/ExtrudeSymbol3DLayer.d.ts +20 -10
  127. package/symbols/FillSymbol3DLayer.d.ts +36 -16
  128. package/symbols/ObjectSymbol3DLayer.d.ts +28 -6
  129. package/symbols/PathSymbol3DLayer.d.ts +18 -6
  130. package/symbols/cim/CIMSymbolHelper.js +1 -1
  131. package/symbols/cim/rasterizingUtils.js +1 -1
  132. package/symbols/support/Symbol3DEmissive.d.ts +9 -9
  133. package/symbols/support/Symbol3DMaterial.d.ts +8 -8
  134. package/time/TimeExtent.d.ts +1 -1
  135. package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
  136. package/views/2d/interactive/SnappingVisualizer2D.js +1 -1
  137. package/views/2d/layers/features/layerAdapters/CatalogFootprintLayerAdapter.js +1 -1
  138. package/views/2d/layers/features/layerAdapters/FeatureLayerAdapter.js +1 -1
  139. package/views/2d/layers/features/layerAdapters/InMemoryLayerAdapter.js +1 -1
  140. package/views/2d/layers/features/layerAdapters/KnowledgeGraphSublayerAdapter.js +1 -1
  141. package/views/2d/layers/features/layerAdapters/OGCFeatureLayerAdapter.js +1 -1
  142. package/views/2d/layers/features/layerAdapters/OrientedImageryLayerAdapter.js +1 -1
  143. package/views/2d/layers/features/layerAdapters/SubtypeGroupLayerAdapter.js +1 -1
  144. package/views/2d/layers/features/sources/FeatureSourceQueryInfo.js +1 -1
  145. package/views/2d/layers/features/sources/strategies/FeaturePagedTileLoadStrategy.js +1 -1
  146. package/views/2d/layers/features/sources/strategies/FeatureSnapshotLoadStrategy.js +1 -1
  147. package/views/2d/layers/features/support/FeatureSetReaderPBF.js +1 -1
  148. package/views/2d/layers/features/support/FeatureSetReaderPBFHeader.js +1 -1
  149. package/views/2d/layers/support/RouteLayerWaypointVisualization.js +1 -1
  150. package/views/3d/analysis/ShadowCast/ShadowCastTooltip.js +1 -1
  151. package/views/3d/analysis/VolumeMeasurement/VolumeMeasurementCutFillController.js +1 -1
  152. package/views/3d/analysis/VolumeMeasurement/VolumeMeasurementCutFillVisualization.js +1 -1
  153. package/views/3d/layers/support/featureTileQuery3D.js +1 -1
  154. package/views/3d/support/pointsOfInterest/CameraOnSurface.js +1 -1
  155. package/views/3d/webgl-engine/collections/Component/Material/ComponentMaterial.js +1 -1
  156. package/views/3d/webgl-engine/materials/renderers/VaoWriter.js +1 -1
  157. package/views/Attribution.js +1 -1
  158. package/views/DOMContainer.js +1 -1
  159. package/views/LinkChartView.d.ts +1 -1
  160. package/views/MapView.d.ts +1 -1
  161. package/views/SceneView.d.ts +1 -1
  162. package/views/View.d.ts +1 -1
  163. package/views/input/types.d.ts +1 -1
  164. package/views/interactive/keybindings.js +1 -1
  165. package/views/interactive/snapping/candidates/EdgeSnappingCandidate.js +1 -1
  166. package/views/interactive/snapping/featureSources/GraphicsSnappingSource.js +1 -1
  167. package/views/interactive/snapping/featureSources/queryEngineUtils.js +1 -1
  168. package/views/interactive/snapping/featureSources/snappingCandidateElevationAlignment.js +1 -1
  169. package/views/interactive/snapping/featureSources/snappingCandidateElevationFilter.js +1 -1
  170. package/views/interactive/snapping/hints/LineSnappingHint.js +1 -1
  171. package/views/layers/FeatureLikeLayerView.js +1 -1
  172. package/views/layers/support/WhereClauseVisitor.js +1 -1
  173. package/views/ui/DefaultUI.d.ts +5 -12
  174. package/views/ui/DefaultUI.js +1 -1
  175. package/views/ui/types.d.ts +1 -1
  176. package/webscene/Glow.d.ts +5 -0
  177. package/webscene/SunLighting.d.ts +20 -2
  178. package/webscene/VirtualLighting.d.ts +20 -2
  179. package/widgets/Attribution/AttributionViewModel.d.ts +1 -1
  180. package/widgets/Attribution.d.ts +1 -1
  181. package/widgets/BatchAttributeForm/expressions/ExpressionsManager.js +1 -1
  182. package/widgets/BatchAttributeForm/expressions/ExpressionsModel.js +1 -1
  183. package/widgets/BatchAttributeForm/inputs/FieldInput.d.ts +1 -1
  184. package/widgets/BatchAttributeForm/inputs/InputBase.js +1 -1
  185. package/widgets/BatchAttributeForm/inputs/TextElementInput.d.ts +2 -11
  186. package/widgets/BatchAttributeForm/inputs/TextElementInput.js +1 -1
  187. package/widgets/BatchAttributeForm/inputs/support/inputUtils.js +1 -1
  188. package/widgets/BatchAttributeForm/inputs/support/textElementInputUtils.js +2 -0
  189. package/widgets/BatchAttributeForm/templates/TextElementTemplate.js +1 -1
  190. package/widgets/BatchAttributeForm/templates/support/constants.js +2 -0
  191. package/widgets/BatchAttributeForm/templates/support/createBatchFormTemplate.js +1 -1
  192. package/widgets/BatchAttributeForm/templates/support/hashElementTemplate.js +1 -1
  193. package/widgets/BatchAttributeForm/templates/support/textElementTemplateUtils.js +2 -0
  194. package/widgets/Editor/components/Settings.js +1 -1
  195. package/widgets/Features/FeaturesViewModel.js +1 -1
  196. package/widgets/OrientedImageryViewer/OrientedImageryViewerViewModel.js +1 -1
  197. package/widgets/OrientedImageryViewer/adapters/sketch/DataCaptureAdapter.js +1 -1
  198. package/widgets/OrientedImageryViewer/adapters/view/MapViewAdapter.js +1 -1
  199. package/widgets/OrientedImageryViewer/adapters/view/SceneViewAdapter.js +1 -1
  200. package/widgets/OrientedImageryViewer/services/TransformationService.js +1 -1
  201. package/widgets/OrientedImageryViewer/support/dataCaptureUtils.js +1 -1
  202. package/widgets/OrientedImageryViewer/support/geometryUtils.js +1 -1
  203. package/widgets/OrientedImageryViewer/support/urlUtils.js +1 -1
  204. package/widgets/OrientedImageryViewer/utils.js +1 -1
  205. package/widgets/OrientedImageryViewer.js +1 -1
  206. package/widgets/PanoramicViewer/PanoramicViewerViewModel.js +1 -1
  207. package/widgets/PanoramicViewer/support/PanoramicMedia.js +1 -1
  208. package/widgets/Print/PrintViewModel.js +1 -1
  209. package/widgets/Sketch.js +1 -1
  210. package/widgets/TimeSlider/TimeSliderViewModel.d.ts +1 -2
  211. package/widgets/TimeSlider.d.ts +5 -6
  212. package/widgets/support/SketchTooltipControls.js +1 -1
  213. package/assets/esri/core/workers/chunks/00112f984698b31909d3.js +0 -1
  214. package/assets/esri/core/workers/chunks/0c8a676599821b9871c2.js +0 -1
  215. package/assets/esri/core/workers/chunks/2b7615cccbaeda1649f3.js +0 -1
  216. package/assets/esri/core/workers/chunks/2f0ea91afc9aa8ee9cad.js +0 -1
  217. package/assets/esri/core/workers/chunks/3a850b5e847b6b0ea53f.js +0 -1
  218. package/assets/esri/core/workers/chunks/449cf6ae6b6e6c2795e5.js +0 -1
  219. package/assets/esri/core/workers/chunks/4dcd5d5ea5875a08a7c7.js +0 -1
  220. package/assets/esri/core/workers/chunks/5058715f32ff026053a9.js +0 -1
  221. package/assets/esri/core/workers/chunks/529dbf16ffbbd39f3fa2.js +0 -1
  222. package/assets/esri/core/workers/chunks/58cf3d35771b87bd74e5.js +0 -1
  223. package/assets/esri/core/workers/chunks/652bb1b53782cdd3103c.js +0 -1
  224. package/assets/esri/core/workers/chunks/6acab23acf3b044f5215.js +0 -1
  225. package/assets/esri/core/workers/chunks/6c2a7bac3f8e32c83292.js +0 -1
  226. package/assets/esri/core/workers/chunks/6d26e5368e8952003669.js +0 -1
  227. package/assets/esri/core/workers/chunks/7cb6ccee9bcef449caea.js +0 -1
  228. package/assets/esri/core/workers/chunks/879e8439a513cb333b61.js +0 -1
  229. package/assets/esri/core/workers/chunks/98c3b7d8db53f0b12642.js +0 -1
  230. package/assets/esri/core/workers/chunks/a027da22acdaa6d6baa3.js +0 -1
  231. package/assets/esri/core/workers/chunks/a6006718fe22d9f2fa87.js +0 -1
  232. package/assets/esri/core/workers/chunks/b60337c471e2b855d02a.js +0 -1
  233. package/assets/esri/core/workers/chunks/bd1bbf1820e12d7a27f6.js +0 -1
  234. package/assets/esri/core/workers/chunks/c88101cb8301f095d037.js +0 -1
  235. package/assets/esri/core/workers/chunks/c9067667290e93407dd7.js +0 -1
  236. package/assets/esri/core/workers/chunks/e59c5bcf91984aa5be6d.js +0 -1
  237. package/assets/esri/core/workers/chunks/e71d08c6f545c2c70174.js +0 -1
  238. package/assets/esri/core/workers/chunks/f347dee99faa9ee5eef1.js +0 -1
  239. package/layers/support/GeoreferenceBase.d.ts +0 -4
  240. package/layers/support/GeoreferenceBase.js +0 -2
  241. package/widgets/BatchAttributeForm/inputs/support/textInputElementUtils.js +0 -2
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.0/LICENSE.txt */
2
- const b="20260210",e="dbfae1f5c721f8ce09be69a8e7b3f93d4b941d8b";export{b as buildDate,e as commitHash};
2
+ const b="20260212",c="2c4010f93e16b61394a5bc5933d36a9f7b36676e";export{b as buildDate,c as commitHash};
@@ -27,7 +27,7 @@ export interface ExtrudeSymbol3DLayerProperties extends Symbol3DLayerProperties,
27
27
  */
28
28
  edges?: Edges3DProperties | null;
29
29
  /**
30
- * The material used to shade the extrusion. This property defines the extrusion's color.
30
+ * The material used to shade the extrusion. This property defines the extrusion's color and emissive properties.
31
31
  *
32
32
  * @example
33
33
  * // CSS color string
@@ -38,12 +38,12 @@ export interface ExtrudeSymbol3DLayerProperties extends Symbol3DLayerProperties,
38
38
  * // HEX string
39
39
  * symbolLayer.material = {
40
40
  * color: "#33cc33";
41
- * }
41
+ * };
42
42
  * @example
43
43
  * // array of RGBA values
44
44
  * symbolLayer.material = {
45
45
  * color: [51, 204, 51, 0.3];
46
- * }
46
+ * };
47
47
  * @example
48
48
  * // object with rgba properties
49
49
  * symbolLayer.material = {
@@ -54,6 +54,12 @@ export interface ExtrudeSymbol3DLayerProperties extends Symbol3DLayerProperties,
54
54
  * a: 0.7
55
55
  * }
56
56
  * };
57
+ * @example
58
+ * // object with emissive properties and color
59
+ * symbolLayer.material: {
60
+ * color: "#00E9FF",
61
+ * emissive: { strength: 1, source: "color" },
62
+ * };
57
63
  */
58
64
  material?: Symbol3DMaterialProperties | null;
59
65
  }
@@ -104,10 +110,8 @@ export interface ExtrudeSymbol3DLayerProperties extends Symbol3DLayerProperties,
104
110
  export default class ExtrudeSymbol3DLayer extends Symbol3DLayer {
105
111
  constructor(properties?: ExtrudeSymbol3DLayerProperties);
106
112
  /**
107
- * Indicates whether the symbol layer geometry casts shadows in the scene.
108
- * Setting this property to `false` will disable shadows for the symbol layer
109
- * even if direct shadows are enabled in
110
- * [SceneView.environment](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#environment).
113
+ * Indicates whether the symbol layer geometry casts shadows in the scene. Setting this property to `false` will
114
+ * disable shadows for the symbol layer even if direct shadows are enabled in [SceneView.environment](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/#environment).
111
115
  *
112
116
  * @default true
113
117
  * @since 4.11
@@ -138,7 +142,7 @@ export default class ExtrudeSymbol3DLayer extends Symbol3DLayer {
138
142
  get edges(): Edges3D | null | undefined;
139
143
  set edges(value: Edges3DProperties | null | undefined);
140
144
  /**
141
- * The material used to shade the extrusion. This property defines the extrusion's color.
145
+ * The material used to shade the extrusion. This property defines the extrusion's color and emissive properties.
142
146
  *
143
147
  * @example
144
148
  * // CSS color string
@@ -149,12 +153,12 @@ export default class ExtrudeSymbol3DLayer extends Symbol3DLayer {
149
153
  * // HEX string
150
154
  * symbolLayer.material = {
151
155
  * color: "#33cc33";
152
- * }
156
+ * };
153
157
  * @example
154
158
  * // array of RGBA values
155
159
  * symbolLayer.material = {
156
160
  * color: [51, 204, 51, 0.3];
157
- * }
161
+ * };
158
162
  * @example
159
163
  * // object with rgba properties
160
164
  * symbolLayer.material = {
@@ -165,6 +169,12 @@ export default class ExtrudeSymbol3DLayer extends Symbol3DLayer {
165
169
  * a: 0.7
166
170
  * }
167
171
  * };
172
+ * @example
173
+ * // object with emissive properties and color
174
+ * symbolLayer.material: {
175
+ * color: "#00E9FF",
176
+ * emissive: { strength: 1, source: "color" },
177
+ * };
168
178
  */
169
179
  get material(): Symbol3DMaterial | null | undefined;
170
180
  set material(value: Symbol3DMaterialProperties | null | undefined);
@@ -33,10 +33,9 @@ export interface FillSymbol3DLayerProperties extends Symbol3DLayerProperties, Pa
33
33
  */
34
34
  edges?: Edges3DProperties | null;
35
35
  /**
36
- * The material defines the final color of the graphic,
37
- * by blending the `color` property set in the material with the
38
- * feature's geometry color/texture information. `colorMixMode` defines how these
39
- * colors are mixed together.
36
+ * The material used to shade the extrusion. This property defines the extrusion's color and emissive properties. The
37
+ * final color of the graphic is defined by blending the `color` property set in the material with the feature's
38
+ * geometry color/texture information. `colorMixMode` defines how these colors are mixed together.
40
39
  *
41
40
  * @see [Sample: Coloring options for textured buildings](https://developers.arcgis.com/javascript/latest/sample-code/layers-scenelayer-color-mix-mode/)
42
41
  * @example
@@ -49,12 +48,12 @@ export interface FillSymbol3DLayerProperties extends Symbol3DLayerProperties, Pa
49
48
  * // HEX string
50
49
  * symbolLayer.material = {
51
50
  * color: "#33cc33"
52
- * }
51
+ * };
53
52
  * @example
54
53
  * // array of RGBA values
55
54
  * symbolLayer.material = {
56
55
  * color: [51, 204, 51, 0.3]
57
- * }
56
+ * };
58
57
  * @example
59
58
  * // object with rgba properties
60
59
  * symbolLayer.material = {
@@ -65,11 +64,22 @@ export interface FillSymbol3DLayerProperties extends Symbol3DLayerProperties, Pa
65
64
  * a: 0.7
66
65
  * }
67
66
  * };
67
+ * @example
68
+ * // object with emissive properties enabled
69
+ * symbolLayer.material: {
70
+ * color: "#00E9FF",
71
+ * emissive: { strength: 1, source: "color" },
72
+ * };
73
+ * @example
74
+ * // object with emissive properties from a object's texture
75
+ * symbolLayer.material: {
76
+ * emissive: { strength: 1, source: "emissive" },
77
+ * };
68
78
  */
69
79
  material?: Symbol3DFillMaterialProperties | null;
70
80
  /**
71
- * The outline used to draw a line around the filled geometry.
72
- * This property is not supported in [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/MeshSymbol3D/) symbol layers.
81
+ * The outline used to draw a line around the filled geometry. This property is not supported in [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/MeshSymbol3D/)
82
+ * symbol layers.
73
83
  *
74
84
  * @example
75
85
  * symbolLayer.outline = {
@@ -183,10 +193,9 @@ export default class FillSymbol3DLayer extends Symbol3DLayer {
183
193
  get edges(): Edges3D | null | undefined;
184
194
  set edges(value: Edges3DProperties | null | undefined);
185
195
  /**
186
- * The material defines the final color of the graphic,
187
- * by blending the `color` property set in the material with the
188
- * feature's geometry color/texture information. `colorMixMode` defines how these
189
- * colors are mixed together.
196
+ * The material used to shade the extrusion. This property defines the extrusion's color and emissive properties. The
197
+ * final color of the graphic is defined by blending the `color` property set in the material with the feature's
198
+ * geometry color/texture information. `colorMixMode` defines how these colors are mixed together.
190
199
  *
191
200
  * @see [Sample: Coloring options for textured buildings](https://developers.arcgis.com/javascript/latest/sample-code/layers-scenelayer-color-mix-mode/)
192
201
  * @example
@@ -199,12 +208,12 @@ export default class FillSymbol3DLayer extends Symbol3DLayer {
199
208
  * // HEX string
200
209
  * symbolLayer.material = {
201
210
  * color: "#33cc33"
202
- * }
211
+ * };
203
212
  * @example
204
213
  * // array of RGBA values
205
214
  * symbolLayer.material = {
206
215
  * color: [51, 204, 51, 0.3]
207
- * }
216
+ * };
208
217
  * @example
209
218
  * // object with rgba properties
210
219
  * symbolLayer.material = {
@@ -215,12 +224,23 @@ export default class FillSymbol3DLayer extends Symbol3DLayer {
215
224
  * a: 0.7
216
225
  * }
217
226
  * };
227
+ * @example
228
+ * // object with emissive properties enabled
229
+ * symbolLayer.material: {
230
+ * color: "#00E9FF",
231
+ * emissive: { strength: 1, source: "color" },
232
+ * };
233
+ * @example
234
+ * // object with emissive properties from a object's texture
235
+ * symbolLayer.material: {
236
+ * emissive: { strength: 1, source: "emissive" },
237
+ * };
218
238
  */
219
239
  get material(): Symbol3DFillMaterial | null | undefined;
220
240
  set material(value: Symbol3DFillMaterialProperties | null | undefined);
221
241
  /**
222
- * The outline used to draw a line around the filled geometry.
223
- * This property is not supported in [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/MeshSymbol3D/) symbol layers.
242
+ * The outline used to draw a line around the filled geometry. This property is not supported in [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/MeshSymbol3D/)
243
+ * symbol layers.
224
244
  *
225
245
  * @example
226
246
  * symbolLayer.outline = {
@@ -27,7 +27,7 @@ export interface ObjectSymbol3DLayerProperties extends Symbol3DLayerProperties,
27
27
  */
28
28
  anchorPosition?: Symbol3DAnchorPosition3DProperties | null;
29
29
  /**
30
- * The material used to shade the object. This property defines the object's color.
30
+ * The material used to shade the object. This property defines the object's color and emissive properties.
31
31
  *
32
32
  * @example
33
33
  * // CSS color string
@@ -38,12 +38,12 @@ export interface ObjectSymbol3DLayerProperties extends Symbol3DLayerProperties,
38
38
  * // HEX string
39
39
  * symbolLayer.material = {
40
40
  * color: "#33cc33";
41
- * }
41
+ * };
42
42
  * @example
43
43
  * // array of RGBA values
44
44
  * symbolLayer.material = {
45
45
  * color: [51, 204, 51, 0.3];
46
- * }
46
+ * };
47
47
  * @example
48
48
  * // object with rgba properties
49
49
  * symbolLayer.material = {
@@ -54,6 +54,17 @@ export interface ObjectSymbol3DLayerProperties extends Symbol3DLayerProperties,
54
54
  * a: 0.7
55
55
  * }
56
56
  * };
57
+ * @example
58
+ * // object with emissive properties enabled
59
+ * symbolLayer.material: {
60
+ * color: "#00E9FF",
61
+ * emissive: { strength: 1, source: "color" },
62
+ * };
63
+ * @example
64
+ * // object with emissive properties from a object's texture
65
+ * symbolLayer.material: {
66
+ * emissive: { strength: 1, source: "emissive" },
67
+ * };
57
68
  */
58
69
  material?: Symbol3DMaterialProperties | null;
59
70
  /**
@@ -214,7 +225,7 @@ export default class ObjectSymbol3DLayer extends Symbol3DLayer {
214
225
  */
215
226
  accessor height: number | null | undefined;
216
227
  /**
217
- * The material used to shade the object. This property defines the object's color.
228
+ * The material used to shade the object. This property defines the object's color and emissive properties.
218
229
  *
219
230
  * @example
220
231
  * // CSS color string
@@ -225,12 +236,12 @@ export default class ObjectSymbol3DLayer extends Symbol3DLayer {
225
236
  * // HEX string
226
237
  * symbolLayer.material = {
227
238
  * color: "#33cc33";
228
- * }
239
+ * };
229
240
  * @example
230
241
  * // array of RGBA values
231
242
  * symbolLayer.material = {
232
243
  * color: [51, 204, 51, 0.3];
233
- * }
244
+ * };
234
245
  * @example
235
246
  * // object with rgba properties
236
247
  * symbolLayer.material = {
@@ -241,6 +252,17 @@ export default class ObjectSymbol3DLayer extends Symbol3DLayer {
241
252
  * a: 0.7
242
253
  * }
243
254
  * };
255
+ * @example
256
+ * // object with emissive properties enabled
257
+ * symbolLayer.material: {
258
+ * color: "#00E9FF",
259
+ * emissive: { strength: 1, source: "color" },
260
+ * };
261
+ * @example
262
+ * // object with emissive properties from a object's texture
263
+ * symbolLayer.material: {
264
+ * emissive: { strength: 1, source: "emissive" },
265
+ * };
244
266
  */
245
267
  get material(): Symbol3DMaterial | null | undefined;
246
268
  set material(value: Symbol3DMaterialProperties | null | undefined);
@@ -6,7 +6,7 @@ import type { Symbol3DLayerProperties } from "./Symbol3DLayer.js";
6
6
 
7
7
  export interface PathSymbol3DLayerProperties extends Symbol3DLayerProperties, Partial<Pick<PathSymbol3DLayer, "anchor" | "cap" | "castShadows" | "height" | "join" | "profile" | "profileRotation" | "width">> {
8
8
  /**
9
- * The material used to shade the path. This property defines the paths's color.
9
+ * The material used to shade the path. This property defines the paths's color and emissive properties.
10
10
  *
11
11
  * @example
12
12
  * // CSS color string
@@ -17,12 +17,12 @@ export interface PathSymbol3DLayerProperties extends Symbol3DLayerProperties, Pa
17
17
  * // HEX string
18
18
  * symbolLayer.material = {
19
19
  * color: "#33cc33";
20
- * }
20
+ * };
21
21
  * @example
22
22
  * // array of RGBA values
23
23
  * symbolLayer.material = {
24
24
  * color: [51, 204, 51, 0.3];
25
- * }
25
+ * };
26
26
  * @example
27
27
  * // object with rgba properties
28
28
  * symbolLayer.material = {
@@ -33,6 +33,12 @@ export interface PathSymbol3DLayerProperties extends Symbol3DLayerProperties, Pa
33
33
  * a: 0.7
34
34
  * }
35
35
  * };
36
+ * @example
37
+ * // object with emissive properties and color
38
+ * symbolLayer.material: {
39
+ * color: "#00E9FF",
40
+ * emissive: { strength: 1, source: "color" },
41
+ * };
36
42
  */
37
43
  material?: Symbol3DMaterialProperties | null;
38
44
  }
@@ -195,7 +201,7 @@ export default class PathSymbol3DLayer extends Symbol3DLayer {
195
201
  */
196
202
  accessor join: PathSymbol3DLayerJoin;
197
203
  /**
198
- * The material used to shade the path. This property defines the paths's color.
204
+ * The material used to shade the path. This property defines the paths's color and emissive properties.
199
205
  *
200
206
  * @example
201
207
  * // CSS color string
@@ -206,12 +212,12 @@ export default class PathSymbol3DLayer extends Symbol3DLayer {
206
212
  * // HEX string
207
213
  * symbolLayer.material = {
208
214
  * color: "#33cc33";
209
- * }
215
+ * };
210
216
  * @example
211
217
  * // array of RGBA values
212
218
  * symbolLayer.material = {
213
219
  * color: [51, 204, 51, 0.3];
214
- * }
220
+ * };
215
221
  * @example
216
222
  * // object with rgba properties
217
223
  * symbolLayer.material = {
@@ -222,6 +228,12 @@ export default class PathSymbol3DLayer extends Symbol3DLayer {
222
228
  * a: 0.7
223
229
  * }
224
230
  * };
231
+ * @example
232
+ * // object with emissive properties and color
233
+ * symbolLayer.material: {
234
+ * color: "#00E9FF",
235
+ * emissive: { strength: 1, source: "color" },
236
+ * };
225
237
  */
226
238
  get material(): Symbol3DMaterial | null | undefined;
227
239
  set material(value: Symbol3DMaterialProperties | null | undefined);
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.0/LICENSE.txt */
2
- import{bidiText as e}from"../../core/BidiText.js";import has from"../../core/has.js";import{clone as t}from"../../core/lang.js";import r from"../../core/Logger.js";import o from"../../core/RandomLCG.js";import{px2pt as a}from"../../core/screenUtils.js";import{create as s,expandPointInPlace as i}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as n}from"../../geometry/support/boundsUtils.js";import l from"../Font.js";import{loadGeometryOperatorsForEffect as c,loadGeometryOperatorsForPlacement as m}from"./CIMEffects.js";import{Placement as f}from"./CIMPlacements.js";import{EnvDrawHelper as y,CanvasDrawHelper as h,lineGapType2LineHeight as u,Transformation as M}from"./CIMSymbolDrawHelper.js";import{defaultCIMValues as p}from"./defaultCIMValues.js";import{isGeometricLinearEffect as S,getNumericValue as d,fromCIMFontStyle as b,fromCIMFontDecoration as g}from"./utils.js";import{defaultPolylineSymbol2D as C}from"../support/defaults.js";import{cInfinity as x}from"../../views/2d/engine/vectorTiles/GeometryUtils.js";import{magicLabelLineHeight as I,glyphSize as k,randomInsidePolygonTextureSize as w}from"../../views/2d/engine/webgl/definitions.js";import{shapeGlyphs as P}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";import{roundPtToWholePixel as L,getLineWidth as F}from"../../views/2d/layers/graphics/graphicsUtils.js";const z=Math.PI,D=z/2,G=Math.PI/180,T=96/72,E=1.4142135623730951,v=2,A=4,R=()=>r.getLogger("esri.symbols.cim.CIMSymbolHelper");function j(e){let t;switch(e.type){case"cim":return e.data;case"web-style":return e;case"simple-marker":{const r=_.fromSimpleMarker(e);if(!r)throw new Error("InternalError: Cannot convert symbol to CIM");t=r;break}case"picture-marker":t=_.fromPictureMarker(e);break;case"simple-line":t=_.fromSimpleLineSymbol(e);break;case"simple-fill":t=_.fromSimpleFillSymbol(e);break;case"picture-fill":t=_.fromPictureFillSymbol(e);break;case"text":t=_.fromTextSymbol(e)}return{type:"CIMSymbolReference",symbol:t}}function B(e,t,r){switch(t.type){case"CIMSymbolReference":return B(e,t.symbol,r);case"CIMPointSymbol":null==r&&(r={x:0,y:0}),e.drawSymbol(t,r);break;case"CIMLineSymbol":null==r&&(r={paths:[[[0,0],[10,0]]]}),e.drawSymbol(t,r);break;case"CIMPolygonSymbol":null==r&&(r={rings:[[[0,0],[0,10],[10,10],[10,0],[0,0]]]}),e.drawSymbol(t,r);break;case"CIMTextSymbol":{const r={x:0,y:0};e.drawSymbol(t,r);break}case"CIMVectorMarker":{const r=new f;e.drawMarker(t,r);break}}return e.envelope()}function X(e){if(!e)return 0;switch(e.type){case"CIMMarkerPlacementAlongLineSameSize":case"CIMMarkerPlacementAlongLineRandomSize":case"CIMMarkerPlacementAtExtremities":case"CIMMarkerPlacementAtMeasuredUnits":case"CIMMarkerPlacementAtRatioPositions":case"CIMMarkerPlacementOnLine":case"CIMMarkerPlacementOnVertices":return Math.abs(e.offset);default:return 0}}function V(e){if(!e)return 0;let t=0;for(const r of e)t+=Y(r);return t}function Y(e){if(!e)return 0;if(S(e))return e.inflateSize??256;switch(e.type){case"CIMGeometricEffectArrow":return Math.abs(.5*e.width);case"CIMGeometricEffectBuffer":return Math.abs(e.size);case"CIMGeometricEffectControlMeasureLine":return 500;case"CIMGeometricEffectExtension":case"CIMGeometricEffectRadial":return Math.abs(e.length);case"CIMGeometricEffectJog":return Math.abs(.5*e.length);case"CIMGeometricEffectMove":return Math.max(Math.abs(d(e.offsetX)),Math.abs(d(e.offsetY)));case"CIMGeometricEffectOffset":case"CIMGeometricEffectOffsetTangent":return Math.abs(e.offset);case"CIMGeometricEffectRegularPolygon":return Math.abs(e.radius);case"CIMGeometricEffectRotate":case"CIMGeometricEffectScale":default:return 0;case"CIMGeometricEffectTaperedPolygon":return.5*Math.max(Math.abs(e.fromWidth),Math.abs(e.toWidth));case"CIMGeometricEffectWave":return Math.abs(e.amplitude);case"CIMGeometricEffectDonut":return Math.abs(e.width)}}class N{static getSymbolInflateSize(e,t,r,o,a){return e||(e=[0,0,0,0]),t?this._getInflateSize(e,t,r,o,a):e}static safeSize(e){const t=Math.max(Math.abs(e[0]),Math.abs(e[2])),r=Math.max(Math.abs(e[1]),Math.abs(e[3]));return Math.sqrt(t*t+r*r)}static _vectorMarkerBounds(e,t,r,o){let a=!0;const i=s();if(t?.markerGraphics)for(const s of t.markerGraphics){const t=[0,0,0,0];s.geometry&&(n(i,s.geometry),t[0]=0,t[1]=0,t[2]=0,t[3]=0,this.getSymbolInflateSize(t,s.symbol,r,0,o),i[0]+=t[0],i[1]+=t[1],i[2]+=t[2],i[3]+=t[3],a?(e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],a=!1):(e[0]=Math.min(e[0],i[0]),e[1]=Math.min(e[1],i[1]),e[2]=Math.max(e[2],i[2]),e[3]=Math.max(e[3],i[3])))}return e}static _getInflateSize(e,t,r,o,a){if(ee(t)){const s=this._getLayersInflateSize(e,t.symbolLayers,r,o,a),i=V(t.effects);return i>0&&(s[0]-=i,s[1]-=i,s[2]+=i,s[3]+=i),s}return this._getTextInflatedSize(e,t,a)}static _getLayersInflateSize(e,t,r,o,a){let n=!0;if(!t)return e;for(const l of t){if(!l)continue;let t=[0,0,0,0];switch(l.type){case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":{const e=l;let r=e.width;null!=r&&("Square"===e.capStyle||"Miter"===e.joinStyle?r/=E:r/=2,t[0]=-r,t[1]=-r,t[2]=r,t[3]=r);break}case"CIMCharacterMarker":case"CIMVectorMarker":case"CIMPictureMarker":{const e=l;if("CIMVectorMarker"===l.type){const e=l;if(t=this._vectorMarkerBounds(t,e,r,a),e.frame){const r=(e.frame.xmin+e.frame.xmax)/2,o=(e.frame.ymin+e.frame.ymax)/2;if(t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o,null!=e.size){const r=e.size/(e.frame.ymax-e.frame.ymin);t[0]*=r,t[1]*=r,t[2]*=r,t[3]*=r}}}else if("CIMPictureMarker"===l.type){const o=l,a=r.getResource(o.url);let s=1;if(null!=a&&a.height&&(s=a.width/a.height),null!=e.size){const r=e.size/2,a=e.size*s*o.scaleX/2;t=[-a,-r,a,r]}}else if(null!=e.size){const r=e.size/2;t=[-r,-r,r,r]}if(e.anchorPoint){let r,o;"Absolute"===e.anchorPointUnits?(r=e.anchorPoint.x,o=e.anchorPoint.y):(r=e.anchorPoint.x*(t[2]-t[0]),o=e.anchorPoint.y*(t[3]-t[1]));const a=1.25*Math.sqrt(r*r+o*o);t[0]-=a,t[1]-=a,t[2]+=a,t[3]+=a}let n=d(e.rotation);if(e.rotateClockwise&&(n=-n),o&&(n-=o),n){const e=G*n,r=Math.cos(e),o=Math.sin(e),a=s([x,x,-x,-x]);i(a,[t[0]*r-t[1]*o,t[0]*o+t[1]*r]),i(a,[t[0]*r-t[3]*o,t[0]*o+t[3]*r]),i(a,[t[2]*r-t[1]*o,t[2]*o+t[1]*r]),i(a,[t[2]*r-t[3]*o,t[2]*o+t[3]*r]),t=a}let c=d(e.offsetX),m=d(e.offsetY);if(o){const e=G*o,t=Math.cos(e),r=Math.sin(e),a=c*r+m*t;c=c*t-m*r,m=a}t[0]+=c,t[1]+=m,t[2]+=c,t[3]+=m;const f=X(e.markerPlacement);f>0&&(t[0]-=f,t[1]-=f,t[2]+=f,t[3]+=f);break}}const c=V(l.effects);c>0&&(t[0]-=c,t[1]-=c,t[2]+=c,t[3]+=c),n?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],n=!1):(e[0]=Math.min(e[0],t[0]),e[1]=Math.min(e[1],t[1]),e[2]=Math.max(e[2],t[2]),e[3]=Math.max(e[3],t[3]))}return e}static _getTextInflatedSize(e,t,r){const o=L(t.height??p.CIMTextSymbol.height);if(e[0]=-o/2,e[1]=-o/2,e[2]=o/2,e[3]=o/2,!r)return e;const a=r.get(t);if(!a)return e;if(!a.glyphMosaicItems.glyphs.length)return e;const{lineGapType:s,lineGap:i}=t,n=s?u(s,i??0,o):0,l="CIMBackgroundCallout"===t.callout?.type,c=P(a.glyphMosaicItems,{scale:o/k,angle:d(t.angle),xOffset:d(t.offsetX),yOffset:d(t.offsetY),horizontalAlignment:t.horizontalAlignment,verticalAlignment:t.verticalAlignment,maxLineWidth:F(t.lineWidth),lineHeight:I*Math.max(.25,Math.min(n||1,4)),decoration:t.font.decoration||"none",useCIMAngleBehavior:!0,hasBackground:l}).boundsT,m=Math.sqrt(c.width*c.width+c.height*c.height);return e[0]-=c.x+m,e[1]-=c.y-m,e[2]+=c.x+m,e[3]+=-c.y+m,e}}class _{static getEnvelope(e,t,r){if(!e)return null;const o=new y(r);if(Array.isArray(e)){let r;for(const a of e)r?r.union(B(o,a,t)):r=B(o,a,t);return r}return B(o,e,t)}static getTextureInfo(e,t,r,o,a){const s=o??this.getEnvelope(e,null,t);if(!s)return[0,0,0,0,1];const i=Math.max(s.width,s.height)*T;let n=null!=a?Math.max(a/i,1):1;n*=T,s.x*=n,s.y*=n,s.width*=n,s.height*=n,s.width=Math.max(Math.ceil(s.x+s.width)-Math.floor(s.x),1)-1,s.height=Math.max(Math.ceil(s.y+s.height)-Math.floor(s.y),1)-1;let l=s.x+.5*s.width,c=s.y+.5*s.height;return l+=s.x-Math.floor(s.x),c+=s.y-Math.floor(s.y),o||(s.width+=r,s.height+=r,l+=r/2,c+=r/2),[s.width,s.height,l,c,n]}static getTextureAnchor(e,t,r){const[o,a,s,i,n]=this.getTextureInfo(e,t,v,null,r);return[-s/o,-i/a,a/n*T]}static rasterize(e,t,r,o,a=!0,s){const[i,n,l,c,m]=this.getTextureInfo(t,o,v,r,s);e.width=i,e.height=n;const y=e.getContext("2d",{willReadFrequently:!0}),u=M.createScale(m,-m);u.translate(.5*i-l,.5*n+c);const p=new h(y,o,u);switch(t.type){case"CIMPointSymbol":{const e={type:"point",x:0,y:0};p.drawSymbol(t,e);break}case"CIMVectorMarker":{const e=new f;p.drawMarker(t,e);break}}const S=y.getImageData(0,0,e.width,e.height),d=new Uint8Array(S.data);if(a){let e;for(let t=0;t<d.length;t+=4)e=d[t+3]/255,d[t]=d[t]*e,d[t+1]=d[t+1]*e,d[t+2]=d[t+2]*e}return[d,e.width,e.height,-l/i,-c/n]}static fromTextSymbol(e){const{text:t}=e;return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,anchorPointUnits:"Relative",dominantSizeAxis3D:"Y",size:10,billboardMode3D:"FaceNearPlane",frame:{xmin:-5,ymin:-5,xmax:5,ymax:5},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{x:0,y:0},symbol:_.createCIMTextSymbolfromTextSymbol(e),textString:t}],scaleSymbolsProportionally:!0,respectFrame:!0}],scaleX:1,angleAlignment:"Display"}}static fromPictureFillSymbol(e){const{height:t,outline:r,width:o,xoffset:a,xscale:s,yoffset:i,yscale:n}=e,l=[],c={type:"CIMPolygonSymbol",symbolLayers:l};if(r){const e=oe(r);e&&l.push(e)}let m=e.url;"esriPFS"===e.type&&e.imageData&&(m=e.imageData);const f="angle"in e?e.angle??0:0,y=(o??0)*(s||1),h=(t??0)*(n||1);return l.push({type:"CIMPictureFill",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:m,height:h,width:y,offsetX:d(a),offsetY:d(i),rotation:d(-f),colorSubstitutions:null}),c}static fromSimpleFillSymbol(e){const{color:r,style:o,outline:s}=e,i=[],n={type:"CIMPolygonSymbol",symbolLayers:i};if(s){const e=oe(s);e&&i.push(e)}if(o&&"solid"!==o&&"none"!==o&&"esriSFSSolid"!==o&&"esriSFSNull"!==o){const e={type:"CIMLineSymbol",symbolLayers:[{type:"CIMSolidStroke",color:$(r),capStyle:"Butt",joinStyle:"Miter",width:.75}]};let s=0;const n=a(re(o)?8:10);switch(o){case"vertical":case"esriSFSVertical":s=90;break;case"forward-diagonal":case"esriSFSForwardDiagonal":case"diagonal-cross":case"esriSFSDiagonalCross":s=-45;break;case"backward-diagonal":case"esriSFSBackwardDiagonal":s=45;break;case"cross":case"esriSFSCross":s=0}i.push({type:"CIMHatchFill",lineSymbol:e,offsetX:0,offsetY:0,rotation:s,separation:n}),"cross"===o||"esriSFSCross"===o?i.push({type:"CIMHatchFill",lineSymbol:t(e),offsetX:0,offsetY:0,rotation:90,separation:n}):"diagonal-cross"!==o&&"esriSFSDiagonalCross"!==o||i.push({type:"CIMHatchFill",lineSymbol:t(e),offsetX:0,offsetY:0,rotation:45,separation:n})}else!o||"solid"!==o&&"esriSFSSolid"!==o||i.push({type:"CIMSolidFill",enable:!0,color:$(r)});return n}static fromSimpleLineSymbol(e){const{cap:t,color:r,join:o,marker:a,miterLimit:s,style:i,width:n}=e;let l=null;"solid"!==i&&"none"!==i&&"esriSLSSolid"!==i&&"esriSLSNull"!==i&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:Z(i,t),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]);const c=[];if(a){let e;switch(a.placement){case"begin-end":e="Both";break;case"begin":e="JustBegin";break;case"end":e="JustEnd";break;default:e="None"}const t=_.fromSimpleMarker(a,n,r).symbolLayers[0];t.markerPlacement={type:"CIMMarkerPlacementAtExtremities",placePerPart:!1,angleToLine:!0,offset:0,extremityPlacement:e,offsetAlongLine:0},c.push(t)}return c.push({type:"CIMSolidStroke",color:"none"!==i&&"esriSLSNull"!==i?$(r):[0,0,0,0],capStyle:H(t),joinStyle:O(o),miterLimit:s,width:n,effects:l}),{type:"CIMLineSymbol",symbolLayers:c}}static fromPictureMarker(e){const{angle:t,height:r,width:o,xoffset:a,yoffset:s}=e;let i=e.url;return"esriPMS"===e.type&&e.imageData&&(i=e.imageData),{type:"CIMPointSymbol",symbolLayers:[{type:"CIMPictureMarker",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:i,size:r,width:o,offsetX:d(a),offsetY:d(s),rotation:d(-t)}]}}static createCIMTextSymbolfromTextSymbol(t){const{angle:r,color:o,font:a,haloColor:s,haloSize:i,horizontalAlignment:n,kerning:l,lineWidth:c,text:m,verticalAlignment:f,xoffset:y,yoffset:h,backgroundColor:u,borderLineColor:M,borderLineSize:p}=t;let S,b,g,C,x,I;a&&(S=a.family,b=a.style,g=a.weight,C=a.size,x=a.decoration);let k=!1;if(m){k=e(m)[1]}return(u||p)&&(I={type:"CIMBackgroundCallout",margin:null,backgroundSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",color:$(u)},{type:"CIMSolidStroke",color:$(M),width:p??0}]},accentBarSymbol:null,gap:null,leaderLineSymbol:null,lineStyle:null}),{type:"CIMTextSymbol",angle:r,blockProgression:2,depth3D:1,extrapolateBaselines:!0,fontEffects:0,fontEncoding:1,fontFamilyName:S||"Arial",fontStyleName:J(b,g),fontType:0,haloSize:i,height:C,hinting:1,horizontalAlignment:U(n??"center"),kerning:l,letterWidth:100,ligatures:!0,lineGapType:"Multiple",lineWidth:c,offsetX:d(y),offsetY:d(h),strikethrough:"line-through"===x,underline:"underline"===x,symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:$(o)}]},haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:$(s)}]},shadowColor:[0,0,0,255],shadowOffsetX:1,shadowOffsetY:1,textCase:"Normal",textDirection:k?1:0,verticalAlignment:W(f??"baseline"),verticalGlyphOrientation:0,wordSpacing:100,billboardMode3D:2,callout:I}}static createPictureMarkerRasterizationParam(e){const{angle:t,height:r,width:o,xoffset:a,yoffset:s}=e,i=e.url??e.source?.url??e.source?.imageData;return i?{type:"sprite-rasterization-param",overrides:[],resource:{type:"CIMPictureMarker",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:i,size:r,width:o,offsetX:d(a),offsetY:d(s),rotation:d(-t)}}:null}static createPictureFillRasterizationParam(e){const{width:t,height:r,xoffset:o,yoffset:a,url:s}=e;return s?{type:"sprite-rasterization-param",overrides:[],resource:{type:"CIMPictureFill",scaleX:1,textureFilter:"Picture",tintColor:null,url:s,width:t,height:r,offsetX:d(o),offsetY:d(a),rotation:0}}:null}static fromSimpleMarker(e,t,r){const{style:o}=e,a=e.color??r;if("path"===o||"esriSMSPath"===o){const t=[];if("outline"in e&&e.outline){const r=e.outline;t.push({type:"CIMSolidStroke",enable:!0,width:r.width,color:$(r.color),path:e.path})}t.push({type:"CIMSolidFill",enable:!0,color:$(a),path:e.path});const[r,o]=te("square");return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:-d(e.angle),size:d(e.size||6),offsetX:d(e.xoffset),offsetY:d(e.yoffset),scaleSymbolsProportionally:!1,frame:r,markerGraphics:[{type:"CIMMarkerGraphic",geometry:o,symbol:{type:"CIMPolygonSymbol",symbolLayers:t}}]}]}}const s=[];let i,n,l=e.size;if("outline"in e&&e.outline&&"none"!==e.outline.style&&"esriSLSNull"!==e.outline.style){const t=e.outline,r="solid"!==t.style&&"esriSLSSolid"!==t.style;[i,n]=r?te(o,e.size):te(o);const a=t.width??C.width;if(r){const t=a/e.size,r=(i.xmax-i.xmin)*t/2,o=(i.ymax-i.ymin)*t/2;i.xmin-=r,i.xmax+=r,i.ymin-=o,i.ymax+=o,l&&(l+=a)}const c="cross"!==e.style&&"x"!==e.style||"dot"===e?.outline.style||"short-dot"===e?.outline.style?"HalfGap":"FullPattern",m=r?[{type:"CIMGeometricEffectAddControlPoints"},{type:"CIMGeometricEffectDashes",dashTemplate:Z(t.style,null).map(e=>t.width&&t.width>0?e*t.width:e),lineDashEnding:c,controlPointEnding:"FullPattern"}]:void 0;s.push({type:"CIMSolidStroke",capStyle:r?"Round":"Butt",enable:!0,width:a,color:$(t.color),effects:m})}else!t||"line-marker"!==e.type||"cross"!==e.style&&"x"!==e.style?[i,n]=te(o):([i,n]=te(o),s.push({type:"CIMSolidStroke",enable:!0,width:t,color:$(a)}));s.push({type:"CIMSolidFill",enable:!0,color:$(a)});const c={type:"CIMPolygonSymbol",symbolLayers:s};return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:d(-e.angle),size:d(l||6*t),offsetX:d(e.xoffset),offsetY:d(e.yoffset),scaleSymbolsProportionally:!1,frame:i,markerGraphics:[{type:"CIMMarkerGraphic",geometry:n,symbol:c}]}]}}static fromCIMHatchFill(e,r){const o=r*(e.separation??p.CIMHatchFill.separation),a=o/2,s=t(e.lineSymbol);s.symbolLayers?.forEach(e=>{switch(e.type){case"CIMSolidStroke":null!=e.width&&(e.width*=r),e.effects?.forEach(e=>{if("CIMGeometricEffectDashes"===e.type){const t=e.dashTemplate;e.dashTemplate=t?.map(e=>e*r)}});break;case"CIMVectorMarker":{null!=e.size&&(e.size*=r);const t=e.markerPlacement;null!=t&&"placementTemplate"in t&&(t.placementTemplate=t.placementTemplate.map(e=>e*r));break}}});let i=this._getLineSymbolPeriod(s)||A;for(;i<A;)i*=2;const n=i/2;return{type:"CIMVectorMarker",frame:{xmin:-n,xmax:n,ymin:-a,ymax:a},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{paths:[[[-n,0],[n,0]]]},symbol:s}],size:o}}static fetchResources(e,t,r,o=null){if(!e||!t)return r;switch(e.type){case"CIMMeshSymbol":case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":for(const t of e.effects||[])r.push(c(t))}return q(e,e=>{for(const t of e.effects||[])r.push(c(t));"CIMVectorMarker"===e.type&&e.markerPlacement&&r.push(m(e.markerPlacement)),"url"in e&&e.url&&r.push(t.fetchResource(e.url,{signal:o}))}),r}static fetchFonts(e,t,r){if(e&&t)if("symbolLayers"in e&&e.symbolLayers){for(const o of e.symbolLayers)if("CIMVectorMarker"===o.type&&o.markerGraphics)for(const e of o.markerGraphics)e?.symbol&&_.fetchFonts(e.symbol,t,r)}else if("CIMTextSymbol"===e.type){const{fontFamilyName:o,fontStyleName:a}=e;if(!o||"calcitewebcoreicons"===o.toLowerCase())return;const{style:s,weight:i}=b(a),n=g(e),c=new l({family:o,style:s,weight:i,decoration:n});r.push(t.loadFont(c).catch(()=>{R().error(`Unsupported font ${o} in CIM symbol`)}))}}static _getLineSymbolPeriod(e){if(e){const t=this._getEffectsRepeat(e.effects);if(t)return t;if(e.symbolLayers)for(const r of e.symbolLayers)if(r){const e=this._getEffectsRepeat(r.effects);if(e)return e;switch(r.type){case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":case"CIMObjectMarker3D":case"CIMglTFMarker3D":{const e=this._getPlacementRepeat(r.markerPlacement);if(e)return e}}}}return 0}static _getEffectsRepeat(e){if(e)for(const t of e)if(t)switch(t.type){case"CIMGeometricEffectDashes":{const e=t.dashTemplate;if(e&&e.length){let t=0;for(const r of e)t+=r;return 1&e.length&&(t*=2),t}break}case"CIMGeometricEffectWave":return t.period;default:R().error(`unsupported geometric effect type ${t.type}`)}return 0}static _getPlacementRepeat(e){if(e)switch(e.type){case"CIMMarkerPlacementAlongLineSameSize":case"CIMMarkerPlacementAlongLineRandomSize":case"CIMMarkerPlacementAlongLineVariableSize":{const t=e.placementTemplate;if(t&&t.length){let e=0;for(const r of t)e+=+r;return 1&t.length&&(e*=2),e}break}}return 0}static fromCIMInsidePolygon(e){const t=e.markerPlacement,r={...e};r.markerPlacement=null,r.anchorPoint=null;const s=Math.abs(t.stepX),i=Math.abs(t.stepY),n=(t.randomness??100)/100;let l,c,m,f;if("Random"===t.gridType){const e=a(w),r=Math.max(Math.floor(e/s),1),y=Math.max(Math.floor(e/i),1);l=r*s/2,c=y*i/2,m=2*c;const h=new o(t.seed),u=n*s/1.5,M=n*i/1.5;f=[];for(let t=0;t<r;t++)for(let e=0;e<y;e++){const r=t*s-l+u*(.5-h.getFloat()),o=e*i-c+M*(.5-h.getFloat());f.push({x:r,y:o}),0===t&&f.push({x:r+2*l,y:o}),0===e&&f.push({x:r,y:o+2*c})}}else!0===t.shiftOddRows?(l=s/2,c=i,m=2*i,f=[{x:-l,y:0},{x:l,y:0},{x:0,y:c},{x:0,y:-c}]):(l=s/2,c=i/2,m=i,f=[{x:-s,y:0},{x:0,y:-i},{x:-s,y:-i},{x:0,y:0},{x:s,y:0},{x:0,y:i},{x:s,y:i},{x:-s,y:i},{x:s,y:-i}]);return{type:"CIMVectorMarker",frame:{xmin:-l,xmax:l,ymin:-c,ymax:c},markerGraphics:f.map(e=>({type:"CIMMarkerGraphic",geometry:e,symbol:{type:"CIMPointSymbol",symbolLayers:[r]}})),size:m}}}function q(e,t){if(e)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const r=e.symbolLayers;if(!r)return;for(const e of r)if(t(e),"CIMVectorMarker"===e.type){const r=e.markerGraphics;if(!r)continue;for(const e of r)if(e){const r=e.symbol;r&&q(r,t)}}break}}}const H=e=>{if(!e)return"Butt";switch(e){case"butt":return"Butt";case"square":return"Square";case"round":return"Round"}},O=e=>{if(!e)return"Miter";switch(e){case"miter":return"Miter";case"round":return"Round";case"bevel":return"Bevel"}},U=e=>{if(null==e)return"Center";switch(e){case"left":return"Left";case"right":return"Right";case"center":return"Center"}},W=e=>{if(null==e)return"Center";switch(e){case"baseline":return"Baseline";case"top":return"Top";case"middle":return"Center";case"bottom":return"Bottom"}},$=e=>{if(!e)return[0,0,0,0];const{r:t,g:r,b:o,a}=e;return[t,r,o,255*a]},J=(e,t)=>{const r=K(t),o=Q(e);return r&&o?`${r}-${o}`:`${r}${o}`},K=e=>{if(!e)return"";switch(e.toLowerCase()){case"bold":case"bolder":return"bold"}return""},Q=e=>{if(!e)return"";switch(e.toLowerCase()){case"italic":case"oblique":return"italic"}return""},Z=(e,t)=>{const r=has("safari")?.001:0,o="butt"===t;switch(e){case"dash":case"esriSLSDash":return o?[4,3]:[3,4];case"dash-dot":case"esriSLSDashDot":return o?[4,3,1,3]:[3,4,r,4];case"dot":case"esriSLSDot":return o?[1,3]:[r,4];case"long-dash":case"esriSLSLongDash":return o?[8,3]:[7,4];case"long-dash-dot":case"esriSLSLongDashDot":return o?[8,3,1,3]:[7,4,r,4];case"long-dash-dot-dot":case"esriSLSDashDotDot":return o?[8,3,1,3,1,3]:[7,4,r,4,r,4];case"short-dash":case"esriSLSShortDash":return o?[4,1]:[3,2];case"short-dash-dot":case"esriSLSShortDashDot":return o?[4,1,1,1]:[3,2,r,2];case"short-dash-dot-dot":case"esriSLSShortDashDotDot":return o?[4,1,1,1,1,1]:[3,2,r,2,r,2];case"short-dot":case"esriSLSShortDot":return o?[1,1]:[r,2];case"solid":case"esriSLSSolid":case"none":return R().error("Unexpected: style does not require rasterization"),[0,0];default:return R().error(`Tried to rasterize SLS, but found an unexpected style: ${e}!`),[0,0]}};function ee(e){return void 0!==e.symbolLayers}const te=(e,t=100)=>{const r=t/2;let o,a;const s=e;if("circle"===s||"esriSMSCircle"===s){const e=.25;let t=Math.acos(1-e/r),s=Math.ceil(z/t/4);0===s&&(s=1),t=D/s,s*=4;const i=[];i.push([r,0]);for(let o=1;o<s;o++)i.push([r*Math.cos(o*t),-r*Math.sin(o*t)]);i.push([r,0]),o={rings:[i]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("cross"===s||"esriSMSCross"===s){const e=0;o={paths:[[[e,r],[e,-r]],[[r,e],[-r,e]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("diamond"===s||"esriSMSDiamond"===s)o={rings:[[[-r,0],[0,r],[r,0],[0,-r],[-r,0]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("square"===s||"esriSMSSquare"===s)o={rings:[[[-r,-r],[-r,r],[r,r],[r,-r],[-r,-r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("x"===s||"esriSMSX"===s)o={paths:[[[r,r],[-r,-r]],[[r,-r],[-r,r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("triangle"===s||"esriSMSTriangle"===s){const e=t*.5773502691896257,r=-e,s=2/3*t,i=s-t;o={rings:[[[r,i],[0,s],[e,i],[r,i]]]},a={xmin:r,ymin:i,xmax:e,ymax:s}}else"arrow"===s&&(o={rings:[[[-50,50],[50,0],[-50,-50],[-33,-20],[-33,20],[-50,50]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r});return[a,o]},re=e=>"vertical"===e||"horizontal"===e||"cross"===e||"esriSFSCross"===e||"esriSFSVertical"===e||"esriSFSHorizontal"===e;function oe(e){if(!e)return null;let t=null;const{cap:r,color:o,join:a,miterLimit:s,style:i,width:n}=e;return"solid"!==i&&"none"!==i&&"esriSLSSolid"!==i&&"esriSLSNull"!==i&&(t=[{type:"CIMGeometricEffectDashes",dashTemplate:Z(i,r),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]),{type:"CIMSolidStroke",color:"esriSLSNull"!==i&&"none"!==i?$(o):[0,0,0,0],capStyle:H(r),joinStyle:O(a),miterLimit:s,width:n,effects:t}}export{_ as CIMSymbolHelper,N as CIMSymbolInflatedSizeHelper,H as capTypeToEnum,q as forEachSymbolLayer,V as getEffectsInflateSize,Z as slsDashToTemplateArray,j as symbolToCIM};
2
+ import{bidiText as e}from"../../core/BidiText.js";import{clone as t}from"../../core/lang.js";import r from"../../core/Logger.js";import o from"../../core/RandomLCG.js";import{px2pt as a}from"../../core/screenUtils.js";import{create as s,expandPointInPlace as i}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as n}from"../../geometry/support/boundsUtils.js";import l from"../Font.js";import{loadGeometryOperatorsForEffect as c,loadGeometryOperatorsForPlacement as m}from"./CIMEffects.js";import{Placement as f}from"./CIMPlacements.js";import{EnvDrawHelper as y,CanvasDrawHelper as h,lineGapType2LineHeight as u,Transformation as M}from"./CIMSymbolDrawHelper.js";import{defaultCIMValues as p}from"./defaultCIMValues.js";import{isGeometricLinearEffect as S,getNumericValue as d,fromCIMFontStyle as b,fromCIMFontDecoration as g}from"./utils.js";import{defaultPolylineSymbol2D as C}from"../support/defaults.js";import{cInfinity as x}from"../../views/2d/engine/vectorTiles/GeometryUtils.js";import{magicLabelLineHeight as I,glyphSize as k,randomInsidePolygonTextureSize as w}from"../../views/2d/engine/webgl/definitions.js";import{shapeGlyphs as P}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";import{roundPtToWholePixel as L,getLineWidth as F}from"../../views/2d/layers/graphics/graphicsUtils.js";const z=Math.PI,D=z/2,G=Math.PI/180,T=96/72,E=1.4142135623730951,v=2,A=4,R=()=>r.getLogger("esri.symbols.cim.CIMSymbolHelper");function j(e){let t;switch(e.type){case"cim":return e.data;case"web-style":return e;case"simple-marker":{const r=_.fromSimpleMarker(e);if(!r)throw new Error("InternalError: Cannot convert symbol to CIM");t=r;break}case"picture-marker":t=_.fromPictureMarker(e);break;case"simple-line":t=_.fromSimpleLineSymbol(e);break;case"simple-fill":t=_.fromSimpleFillSymbol(e);break;case"picture-fill":t=_.fromPictureFillSymbol(e);break;case"text":t=_.fromTextSymbol(e)}return{type:"CIMSymbolReference",symbol:t}}function B(e,t,r){switch(t.type){case"CIMSymbolReference":return B(e,t.symbol,r);case"CIMPointSymbol":null==r&&(r={x:0,y:0}),e.drawSymbol(t,r);break;case"CIMLineSymbol":null==r&&(r={paths:[[[0,0],[10,0]]]}),e.drawSymbol(t,r);break;case"CIMPolygonSymbol":null==r&&(r={rings:[[[0,0],[0,10],[10,10],[10,0],[0,0]]]}),e.drawSymbol(t,r);break;case"CIMTextSymbol":{const r={x:0,y:0};e.drawSymbol(t,r);break}case"CIMVectorMarker":{const r=new f;e.drawMarker(t,r);break}}return e.envelope()}function X(e){if(!e)return 0;switch(e.type){case"CIMMarkerPlacementAlongLineSameSize":case"CIMMarkerPlacementAlongLineRandomSize":case"CIMMarkerPlacementAtExtremities":case"CIMMarkerPlacementAtMeasuredUnits":case"CIMMarkerPlacementAtRatioPositions":case"CIMMarkerPlacementOnLine":case"CIMMarkerPlacementOnVertices":return Math.abs(e.offset);default:return 0}}function V(e){if(!e)return 0;let t=0;for(const r of e)t+=Y(r);return t}function Y(e){if(!e)return 0;if(S(e))return e.inflateSize??256;switch(e.type){case"CIMGeometricEffectArrow":return Math.abs(.5*e.width);case"CIMGeometricEffectBuffer":return Math.abs(e.size);case"CIMGeometricEffectControlMeasureLine":return 500;case"CIMGeometricEffectExtension":case"CIMGeometricEffectRadial":return Math.abs(e.length);case"CIMGeometricEffectJog":return Math.abs(.5*e.length);case"CIMGeometricEffectMove":return Math.max(Math.abs(d(e.offsetX)),Math.abs(d(e.offsetY)));case"CIMGeometricEffectOffset":case"CIMGeometricEffectOffsetTangent":return Math.abs(e.offset);case"CIMGeometricEffectRegularPolygon":return Math.abs(e.radius);case"CIMGeometricEffectRotate":case"CIMGeometricEffectScale":default:return 0;case"CIMGeometricEffectTaperedPolygon":return.5*Math.max(Math.abs(e.fromWidth),Math.abs(e.toWidth));case"CIMGeometricEffectWave":return Math.abs(e.amplitude);case"CIMGeometricEffectDonut":return Math.abs(e.width)}}class N{static getSymbolInflateSize(e,t,r,o,a){return e||(e=[0,0,0,0]),t?this._getInflateSize(e,t,r,o,a):e}static safeSize(e){const t=Math.max(Math.abs(e[0]),Math.abs(e[2])),r=Math.max(Math.abs(e[1]),Math.abs(e[3]));return Math.sqrt(t*t+r*r)}static _vectorMarkerBounds(e,t,r,o){let a=!0;const i=s();if(t?.markerGraphics)for(const s of t.markerGraphics){const t=[0,0,0,0];s.geometry&&(n(i,s.geometry),t[0]=0,t[1]=0,t[2]=0,t[3]=0,this.getSymbolInflateSize(t,s.symbol,r,0,o),i[0]+=t[0],i[1]+=t[1],i[2]+=t[2],i[3]+=t[3],a?(e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],a=!1):(e[0]=Math.min(e[0],i[0]),e[1]=Math.min(e[1],i[1]),e[2]=Math.max(e[2],i[2]),e[3]=Math.max(e[3],i[3])))}return e}static _getInflateSize(e,t,r,o,a){if(ee(t)){const s=this._getLayersInflateSize(e,t.symbolLayers,r,o,a),i=V(t.effects);return i>0&&(s[0]-=i,s[1]-=i,s[2]+=i,s[3]+=i),s}return this._getTextInflatedSize(e,t,a)}static _getLayersInflateSize(e,t,r,o,a){let n=!0;if(!t)return e;for(const l of t){if(!l)continue;let t=[0,0,0,0];switch(l.type){case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":{const e=l;let r=e.width;null!=r&&("Square"===e.capStyle||"Miter"===e.joinStyle?r/=E:r/=2,t[0]=-r,t[1]=-r,t[2]=r,t[3]=r);break}case"CIMCharacterMarker":case"CIMVectorMarker":case"CIMPictureMarker":{const e=l;if("CIMVectorMarker"===l.type){const e=l;if(t=this._vectorMarkerBounds(t,e,r,a),e.frame){const r=(e.frame.xmin+e.frame.xmax)/2,o=(e.frame.ymin+e.frame.ymax)/2;if(t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o,null!=e.size){const r=e.size/(e.frame.ymax-e.frame.ymin);t[0]*=r,t[1]*=r,t[2]*=r,t[3]*=r}}}else if("CIMPictureMarker"===l.type){const o=l,a=r.getResource(o.url);let s=1;if(null!=a&&a.height&&(s=a.width/a.height),null!=e.size){const r=e.size/2,a=e.size*s*o.scaleX/2;t=[-a,-r,a,r]}}else if(null!=e.size){const r=e.size/2;t=[-r,-r,r,r]}if(e.anchorPoint){let r,o;"Absolute"===e.anchorPointUnits?(r=e.anchorPoint.x,o=e.anchorPoint.y):(r=e.anchorPoint.x*(t[2]-t[0]),o=e.anchorPoint.y*(t[3]-t[1]));const a=1.25*Math.sqrt(r*r+o*o);t[0]-=a,t[1]-=a,t[2]+=a,t[3]+=a}let n=d(e.rotation);if(e.rotateClockwise&&(n=-n),o&&(n-=o),n){const e=G*n,r=Math.cos(e),o=Math.sin(e),a=s([x,x,-x,-x]);i(a,[t[0]*r-t[1]*o,t[0]*o+t[1]*r]),i(a,[t[0]*r-t[3]*o,t[0]*o+t[3]*r]),i(a,[t[2]*r-t[1]*o,t[2]*o+t[1]*r]),i(a,[t[2]*r-t[3]*o,t[2]*o+t[3]*r]),t=a}let c=d(e.offsetX),m=d(e.offsetY);if(o){const e=G*o,t=Math.cos(e),r=Math.sin(e),a=c*r+m*t;c=c*t-m*r,m=a}t[0]+=c,t[1]+=m,t[2]+=c,t[3]+=m;const f=X(e.markerPlacement);f>0&&(t[0]-=f,t[1]-=f,t[2]+=f,t[3]+=f);break}}const c=V(l.effects);c>0&&(t[0]-=c,t[1]-=c,t[2]+=c,t[3]+=c),n?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],n=!1):(e[0]=Math.min(e[0],t[0]),e[1]=Math.min(e[1],t[1]),e[2]=Math.max(e[2],t[2]),e[3]=Math.max(e[3],t[3]))}return e}static _getTextInflatedSize(e,t,r){const o=L(t.height??p.CIMTextSymbol.height);if(e[0]=-o/2,e[1]=-o/2,e[2]=o/2,e[3]=o/2,!r)return e;const a=r.get(t);if(!a)return e;if(!a.glyphMosaicItems.glyphs.length)return e;const{lineGapType:s,lineGap:i}=t,n=s?u(s,i??0,o):0,l="CIMBackgroundCallout"===t.callout?.type,c=P(a.glyphMosaicItems,{scale:o/k,angle:d(t.angle),xOffset:d(t.offsetX),yOffset:d(t.offsetY),horizontalAlignment:t.horizontalAlignment,verticalAlignment:t.verticalAlignment,maxLineWidth:F(t.lineWidth),lineHeight:I*Math.max(.25,Math.min(n||1,4)),decoration:t.font.decoration||"none",useCIMAngleBehavior:!0,hasBackground:l}).boundsT,m=Math.sqrt(c.width*c.width+c.height*c.height);return e[0]-=c.x+m,e[1]-=c.y-m,e[2]+=c.x+m,e[3]+=-c.y+m,e}}class _{static getEnvelope(e,t,r){if(!e)return null;const o=new y(r);if(Array.isArray(e)){let r;for(const a of e)r?r.union(B(o,a,t)):r=B(o,a,t);return r}return B(o,e,t)}static getTextureInfo(e,t,r,o,a){const s=o??this.getEnvelope(e,null,t);if(!s)return[0,0,0,0,1];const i=Math.max(s.width,s.height)*T;let n=null!=a?Math.max(a/i,1):1;n*=T,s.x*=n,s.y*=n,s.width*=n,s.height*=n,s.width=Math.max(Math.ceil(s.x+s.width)-Math.floor(s.x),1)-1,s.height=Math.max(Math.ceil(s.y+s.height)-Math.floor(s.y),1)-1;let l=s.x+.5*s.width,c=s.y+.5*s.height;return l+=s.x-Math.floor(s.x),c+=s.y-Math.floor(s.y),o||(s.width+=r,s.height+=r,l+=r/2,c+=r/2),[s.width,s.height,l,c,n]}static getTextureAnchor(e,t,r){const[o,a,s,i,n]=this.getTextureInfo(e,t,v,null,r);return[-s/o,-i/a,a/n*T]}static rasterize(e,t,r,o,a=!0,s){const[i,n,l,c,m]=this.getTextureInfo(t,o,v,r,s);e.width=i,e.height=n;const y=e.getContext("2d",{willReadFrequently:!0}),u=M.createScale(m,-m);u.translate(.5*i-l,.5*n+c);const p=new h(y,o,u);switch(t.type){case"CIMPointSymbol":{const e={type:"point",x:0,y:0};p.drawSymbol(t,e);break}case"CIMVectorMarker":{const e=new f;p.drawMarker(t,e);break}}const S=y.getImageData(0,0,e.width,e.height),d=new Uint8Array(S.data);if(a){let e;for(let t=0;t<d.length;t+=4)e=d[t+3]/255,d[t]=d[t]*e,d[t+1]=d[t+1]*e,d[t+2]=d[t+2]*e}return[d,e.width,e.height,-l/i,-c/n]}static fromTextSymbol(e){const{text:t}=e;return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,anchorPointUnits:"Relative",dominantSizeAxis3D:"Y",size:10,billboardMode3D:"FaceNearPlane",frame:{xmin:-5,ymin:-5,xmax:5,ymax:5},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{x:0,y:0},symbol:_.createCIMTextSymbolfromTextSymbol(e),textString:t}],scaleSymbolsProportionally:!0,respectFrame:!0}],scaleX:1,angleAlignment:"Display"}}static fromPictureFillSymbol(e){const{height:t,outline:r,width:o,xoffset:a,xscale:s,yoffset:i,yscale:n}=e,l=[],c={type:"CIMPolygonSymbol",symbolLayers:l};if(r){const e=oe(r);e&&l.push(e)}let m=e.url;"esriPFS"===e.type&&e.imageData&&(m=e.imageData);const f="angle"in e?e.angle??0:0,y=(o??0)*(s||1),h=(t??0)*(n||1);return l.push({type:"CIMPictureFill",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:m,height:h,width:y,offsetX:d(a),offsetY:d(i),rotation:d(-f),colorSubstitutions:null}),c}static fromSimpleFillSymbol(e){const{color:r,style:o,outline:s}=e,i=[],n={type:"CIMPolygonSymbol",symbolLayers:i};if(s){const e=oe(s);e&&i.push(e)}if(o&&"solid"!==o&&"none"!==o&&"esriSFSSolid"!==o&&"esriSFSNull"!==o){const e={type:"CIMLineSymbol",symbolLayers:[{type:"CIMSolidStroke",color:$(r),capStyle:"Butt",joinStyle:"Miter",width:.75}]};let s=0;const n=a(re(o)?8:10);switch(o){case"vertical":case"esriSFSVertical":s=90;break;case"forward-diagonal":case"esriSFSForwardDiagonal":case"diagonal-cross":case"esriSFSDiagonalCross":s=-45;break;case"backward-diagonal":case"esriSFSBackwardDiagonal":s=45;break;case"cross":case"esriSFSCross":s=0}i.push({type:"CIMHatchFill",lineSymbol:e,offsetX:0,offsetY:0,rotation:s,separation:n}),"cross"===o||"esriSFSCross"===o?i.push({type:"CIMHatchFill",lineSymbol:t(e),offsetX:0,offsetY:0,rotation:90,separation:n}):"diagonal-cross"!==o&&"esriSFSDiagonalCross"!==o||i.push({type:"CIMHatchFill",lineSymbol:t(e),offsetX:0,offsetY:0,rotation:45,separation:n})}else!o||"solid"!==o&&"esriSFSSolid"!==o||i.push({type:"CIMSolidFill",enable:!0,color:$(r)});return n}static fromSimpleLineSymbol(e){const{cap:t,color:r,join:o,marker:a,miterLimit:s,style:i,width:n}=e;let l=null;"solid"!==i&&"none"!==i&&"esriSLSSolid"!==i&&"esriSLSNull"!==i&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:Z(i,t),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]);const c=[];if(a){let e;switch(a.placement){case"begin-end":e="Both";break;case"begin":e="JustBegin";break;case"end":e="JustEnd";break;default:e="None"}const t=_.fromSimpleMarker(a,n,r).symbolLayers[0];t.markerPlacement={type:"CIMMarkerPlacementAtExtremities",placePerPart:!1,angleToLine:!0,offset:0,extremityPlacement:e,offsetAlongLine:0},c.push(t)}return c.push({type:"CIMSolidStroke",color:"none"!==i&&"esriSLSNull"!==i?$(r):[0,0,0,0],capStyle:H(t),joinStyle:O(o),miterLimit:s,width:n,effects:l}),{type:"CIMLineSymbol",symbolLayers:c}}static fromPictureMarker(e){const{angle:t,height:r,width:o,xoffset:a,yoffset:s}=e;let i=e.url;return"esriPMS"===e.type&&e.imageData&&(i=e.imageData),{type:"CIMPointSymbol",symbolLayers:[{type:"CIMPictureMarker",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:i,size:r,width:o,offsetX:d(a),offsetY:d(s),rotation:d(-t)}]}}static createCIMTextSymbolfromTextSymbol(t){const{angle:r,color:o,font:a,haloColor:s,haloSize:i,horizontalAlignment:n,kerning:l,lineWidth:c,text:m,verticalAlignment:f,xoffset:y,yoffset:h,backgroundColor:u,borderLineColor:M,borderLineSize:p}=t;let S,b,g,C,x,I;a&&(S=a.family,b=a.style,g=a.weight,C=a.size,x=a.decoration);let k=!1;if(m){k=e(m)[1]}return(u||p)&&(I={type:"CIMBackgroundCallout",margin:null,backgroundSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",color:$(u)},{type:"CIMSolidStroke",color:$(M),width:p??0}]},accentBarSymbol:null,gap:null,leaderLineSymbol:null,lineStyle:null}),{type:"CIMTextSymbol",angle:r,blockProgression:2,depth3D:1,extrapolateBaselines:!0,fontEffects:0,fontEncoding:1,fontFamilyName:S||"Arial",fontStyleName:J(b,g),fontType:0,haloSize:i,height:C,hinting:1,horizontalAlignment:U(n??"center"),kerning:l,letterWidth:100,ligatures:!0,lineGapType:"Multiple",lineWidth:c,offsetX:d(y),offsetY:d(h),strikethrough:"line-through"===x,underline:"underline"===x,symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:$(o)}]},haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:$(s)}]},shadowColor:[0,0,0,255],shadowOffsetX:1,shadowOffsetY:1,textCase:"Normal",textDirection:k?1:0,verticalAlignment:W(f??"baseline"),verticalGlyphOrientation:0,wordSpacing:100,billboardMode3D:2,callout:I}}static createPictureMarkerRasterizationParam(e){const{angle:t,height:r,width:o,xoffset:a,yoffset:s}=e,i=e.url??e.source?.url??e.source?.imageData;return i?{type:"sprite-rasterization-param",overrides:[],resource:{type:"CIMPictureMarker",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:i,size:r,width:o,offsetX:d(a),offsetY:d(s),rotation:d(-t)}}:null}static createPictureFillRasterizationParam(e){const{width:t,height:r,xoffset:o,yoffset:a,url:s}=e;return s?{type:"sprite-rasterization-param",overrides:[],resource:{type:"CIMPictureFill",scaleX:1,textureFilter:"Picture",tintColor:null,url:s,width:t,height:r,offsetX:d(o),offsetY:d(a),rotation:0}}:null}static fromSimpleMarker(e,t,r){const{style:o}=e,a=e.color??r;if("path"===o||"esriSMSPath"===o){const t=[];if("outline"in e&&e.outline){const r=e.outline;t.push({type:"CIMSolidStroke",enable:!0,width:r.width,color:$(r.color),path:e.path})}t.push({type:"CIMSolidFill",enable:!0,color:$(a),path:e.path});const[r,o]=te("square");return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:-d(e.angle),size:d(e.size||6),offsetX:d(e.xoffset),offsetY:d(e.yoffset),scaleSymbolsProportionally:!1,frame:r,markerGraphics:[{type:"CIMMarkerGraphic",geometry:o,symbol:{type:"CIMPolygonSymbol",symbolLayers:t}}]}]}}const s=[];let i,n,l=e.size;if("outline"in e&&e.outline&&"none"!==e.outline.style&&"esriSLSNull"!==e.outline.style){const t=e.outline,r="solid"!==t.style&&"esriSLSSolid"!==t.style;[i,n]=r?te(o,e.size):te(o);const a=t.width??C.width;if(r){const t=a/e.size,r=(i.xmax-i.xmin)*t/2,o=(i.ymax-i.ymin)*t/2;i.xmin-=r,i.xmax+=r,i.ymin-=o,i.ymax+=o,l&&(l+=a)}const c="cross"!==e.style&&"x"!==e.style||"dot"===e?.outline.style||"short-dot"===e?.outline.style?"HalfGap":"FullPattern",m=r?[{type:"CIMGeometricEffectAddControlPoints"},{type:"CIMGeometricEffectDashes",dashTemplate:Z(t.style,null).map(e=>t.width&&t.width>0?e*t.width:e),lineDashEnding:c,controlPointEnding:"FullPattern"}]:void 0;s.push({type:"CIMSolidStroke",capStyle:r?"Round":"Butt",enable:!0,width:a,color:$(t.color),effects:m})}else!t||"line-marker"!==e.type||"cross"!==e.style&&"x"!==e.style?[i,n]=te(o):([i,n]=te(o),s.push({type:"CIMSolidStroke",enable:!0,width:t,color:$(a)}));s.push({type:"CIMSolidFill",enable:!0,color:$(a)});const c={type:"CIMPolygonSymbol",symbolLayers:s};return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:d(-e.angle),size:d(l||6*t),offsetX:d(e.xoffset),offsetY:d(e.yoffset),scaleSymbolsProportionally:!1,frame:i,markerGraphics:[{type:"CIMMarkerGraphic",geometry:n,symbol:c}]}]}}static fromCIMHatchFill(e,r){const o=r*(e.separation??p.CIMHatchFill.separation),a=o/2,s=t(e.lineSymbol);s.symbolLayers?.forEach(e=>{switch(e.type){case"CIMSolidStroke":null!=e.width&&(e.width*=r),e.effects?.forEach(e=>{if("CIMGeometricEffectDashes"===e.type){const t=e.dashTemplate;e.dashTemplate=t?.map(e=>e*r)}});break;case"CIMVectorMarker":{null!=e.size&&(e.size*=r);const t=e.markerPlacement;null!=t&&"placementTemplate"in t&&(t.placementTemplate=t.placementTemplate.map(e=>e*r));break}}});let i=this._getLineSymbolPeriod(s)||A;for(;i<A;)i*=2;const n=i/2;return{type:"CIMVectorMarker",frame:{xmin:-n,xmax:n,ymin:-a,ymax:a},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{paths:[[[-n,0],[n,0]]]},symbol:s}],size:o}}static fetchResources(e,t,r,o=null){if(!e||!t)return r;switch(e.type){case"CIMMeshSymbol":case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":for(const t of e.effects||[])r.push(c(t))}return q(e,e=>{for(const t of e.effects||[])r.push(c(t));"CIMVectorMarker"===e.type&&e.markerPlacement&&r.push(m(e.markerPlacement)),"url"in e&&e.url&&r.push(t.fetchResource(e.url,{signal:o}))}),r}static fetchFonts(e,t,r){if(e&&t)if("symbolLayers"in e&&e.symbolLayers){for(const o of e.symbolLayers)if("CIMVectorMarker"===o.type&&o.markerGraphics)for(const e of o.markerGraphics)e?.symbol&&_.fetchFonts(e.symbol,t,r)}else if("CIMTextSymbol"===e.type){const{fontFamilyName:o,fontStyleName:a}=e;if(!o||"calcitewebcoreicons"===o.toLowerCase())return;const{style:s,weight:i}=b(a),n=g(e),c=new l({family:o,style:s,weight:i,decoration:n});r.push(t.loadFont(c).catch(()=>{R().error(`Unsupported font ${o} in CIM symbol`)}))}}static _getLineSymbolPeriod(e){if(e){const t=this._getEffectsRepeat(e.effects);if(t)return t;if(e.symbolLayers)for(const r of e.symbolLayers)if(r){const e=this._getEffectsRepeat(r.effects);if(e)return e;switch(r.type){case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":case"CIMObjectMarker3D":case"CIMglTFMarker3D":{const e=this._getPlacementRepeat(r.markerPlacement);if(e)return e}}}}return 0}static _getEffectsRepeat(e){if(e)for(const t of e)if(t)switch(t.type){case"CIMGeometricEffectDashes":{const e=t.dashTemplate;if(e&&e.length){let t=0;for(const r of e)t+=r;return 1&e.length&&(t*=2),t}break}case"CIMGeometricEffectWave":return t.period;default:R().error(`unsupported geometric effect type ${t.type}`)}return 0}static _getPlacementRepeat(e){if(e)switch(e.type){case"CIMMarkerPlacementAlongLineSameSize":case"CIMMarkerPlacementAlongLineRandomSize":case"CIMMarkerPlacementAlongLineVariableSize":{const t=e.placementTemplate;if(t&&t.length){let e=0;for(const r of t)e+=+r;return 1&t.length&&(e*=2),e}break}}return 0}static fromCIMInsidePolygon(e){const t=e.markerPlacement,r={...e};r.markerPlacement=null,r.anchorPoint=null;const s=Math.abs(t.stepX),i=Math.abs(t.stepY),n=(t.randomness??100)/100;let l,c,m,f;if("Random"===t.gridType){const e=a(w),r=Math.max(Math.floor(e/s),1),y=Math.max(Math.floor(e/i),1);l=r*s/2,c=y*i/2,m=2*c;const h=new o(t.seed),u=n*s/1.5,M=n*i/1.5;f=[];for(let t=0;t<r;t++)for(let e=0;e<y;e++){const r=t*s-l+u*(.5-h.getFloat()),o=e*i-c+M*(.5-h.getFloat());f.push({x:r,y:o}),0===t&&f.push({x:r+2*l,y:o}),0===e&&f.push({x:r,y:o+2*c})}}else!0===t.shiftOddRows?(l=s/2,c=i,m=2*i,f=[{x:-l,y:0},{x:l,y:0},{x:0,y:c},{x:0,y:-c}]):(l=s/2,c=i/2,m=i,f=[{x:-s,y:0},{x:0,y:-i},{x:-s,y:-i},{x:0,y:0},{x:s,y:0},{x:0,y:i},{x:s,y:i},{x:-s,y:i},{x:s,y:-i}]);return{type:"CIMVectorMarker",frame:{xmin:-l,xmax:l,ymin:-c,ymax:c},markerGraphics:f.map(e=>({type:"CIMMarkerGraphic",geometry:e,symbol:{type:"CIMPointSymbol",symbolLayers:[r]}})),size:m}}}function q(e,t){if(e)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const r=e.symbolLayers;if(!r)return;for(const e of r)if(t(e),"CIMVectorMarker"===e.type){const r=e.markerGraphics;if(!r)continue;for(const e of r)if(e){const r=e.symbol;r&&q(r,t)}}break}}}const H=e=>{if(!e)return"Butt";switch(e){case"butt":return"Butt";case"square":return"Square";case"round":return"Round"}},O=e=>{if(!e)return"Miter";switch(e){case"miter":return"Miter";case"round":return"Round";case"bevel":return"Bevel"}},U=e=>{if(null==e)return"Center";switch(e){case"left":return"Left";case"right":return"Right";case"center":return"Center"}},W=e=>{if(null==e)return"Center";switch(e){case"baseline":return"Baseline";case"top":return"Top";case"middle":return"Center";case"bottom":return"Bottom"}},$=e=>{if(!e)return[0,0,0,0];const{r:t,g:r,b:o,a}=e;return[t,r,o,255*a]},J=(e,t)=>{const r=K(t),o=Q(e);return r&&o?`${r}-${o}`:`${r}${o}`},K=e=>{if(!e)return"";switch(e.toLowerCase()){case"bold":case"bolder":return"bold"}return""},Q=e=>{if(!e)return"";switch(e.toLowerCase()){case"italic":case"oblique":return"italic"}return""},Z=(e,t)=>{const r=.001,o="butt"===t;switch(e){case"dash":case"esriSLSDash":return o?[4,3]:[3,4];case"dash-dot":case"esriSLSDashDot":return o?[4,3,1,3]:[3,4,r,4];case"dot":case"esriSLSDot":return o?[1,3]:[r,4];case"long-dash":case"esriSLSLongDash":return o?[8,3]:[7,4];case"long-dash-dot":case"esriSLSLongDashDot":return o?[8,3,1,3]:[7,4,r,4];case"long-dash-dot-dot":case"esriSLSDashDotDot":return o?[8,3,1,3,1,3]:[7,4,r,4,r,4];case"short-dash":case"esriSLSShortDash":return o?[4,1]:[3,2];case"short-dash-dot":case"esriSLSShortDashDot":return o?[4,1,1,1]:[3,2,r,2];case"short-dash-dot-dot":case"esriSLSShortDashDotDot":return o?[4,1,1,1,1,1]:[3,2,r,2,r,2];case"short-dot":case"esriSLSShortDot":return o?[1,1]:[r,2];case"solid":case"esriSLSSolid":case"none":return R().error("Unexpected: style does not require rasterization"),[0,0];default:return R().error(`Tried to rasterize SLS, but found an unexpected style: ${e}!`),[0,0]}};function ee(e){return void 0!==e.symbolLayers}const te=(e,t=100)=>{const r=t/2;let o,a;const s=e;if("circle"===s||"esriSMSCircle"===s){const e=.25;let t=Math.acos(1-e/r),s=Math.ceil(z/t/4);0===s&&(s=1),t=D/s,s*=4;const i=[];i.push([r,0]);for(let o=1;o<s;o++)i.push([r*Math.cos(o*t),-r*Math.sin(o*t)]);i.push([r,0]),o={rings:[i]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("cross"===s||"esriSMSCross"===s){const e=0;o={paths:[[[e,r],[e,-r]],[[r,e],[-r,e]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("diamond"===s||"esriSMSDiamond"===s)o={rings:[[[-r,0],[0,r],[r,0],[0,-r],[-r,0]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("square"===s||"esriSMSSquare"===s)o={rings:[[[-r,-r],[-r,r],[r,r],[r,-r],[-r,-r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("x"===s||"esriSMSX"===s)o={paths:[[[r,r],[-r,-r]],[[r,-r],[-r,r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("triangle"===s||"esriSMSTriangle"===s){const e=t*.5773502691896257,r=-e,s=2/3*t,i=s-t;o={rings:[[[r,i],[0,s],[e,i],[r,i]]]},a={xmin:r,ymin:i,xmax:e,ymax:s}}else"arrow"===s&&(o={rings:[[[-50,50],[50,0],[-50,-50],[-33,-20],[-33,20],[-50,50]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r});return[a,o]},re=e=>"vertical"===e||"horizontal"===e||"cross"===e||"esriSFSCross"===e||"esriSFSVertical"===e||"esriSFSHorizontal"===e;function oe(e){if(!e)return null;let t=null;const{cap:r,color:o,join:a,miterLimit:s,style:i,width:n}=e;return"solid"!==i&&"none"!==i&&"esriSLSSolid"!==i&&"esriSLSNull"!==i&&(t=[{type:"CIMGeometricEffectDashes",dashTemplate:Z(i,r),lineDashEnding:"NoConstraint",scaleDash:!0,offsetAlongLine:null}]),{type:"CIMSolidStroke",color:"esriSLSNull"!==i&&"none"!==i?$(o):[0,0,0,0],capStyle:H(r),joinStyle:O(a),miterLimit:s,width:n,effects:t}}export{_ as CIMSymbolHelper,N as CIMSymbolInflatedSizeHelper,H as capTypeToEnum,q as forEachSymbolLayer,V as getEffectsInflateSize,Z as slsDashToTemplateArray,j as symbolToCIM};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.0/LICENSE.txt */
2
- import{packFloatRGBA as o}from"../../core/floatRGBA.js";import t from"../../core/Logger.js";import{nextPowerOfTwo as e}from"../../core/mathUtils.js";import{dashSdfRasterizationScale as r,dashSdfDistanceNormalization as n,dashRadius as a}from"./constants.js";import{defaultCIMValues as s}from"./defaultCIMValues.js";import{gradientTextureExternalPadding as i}from"../../views/2d/engine/webgl/definitions.js";const l=()=>t.getLogger("esri.symbols.cim.rasterizingUtils"),c=32,h=o=>"vertical"===o||"horizontal"===o||"cross"===o||"esriSFSCross"===o||"esriSFSVertical"===o||"esriSFSHorizontal"===o;function f(o,t,r){const n=t.style,a=e(Math.ceil(r)),s=h(n)?8*a:16*a,i=2*a;o.width=s,o.height=s;const l=o.getContext("2d");l.strokeStyle="#ffffff",l.lineWidth=a,l.beginPath(),"vertical"!==n&&"cross"!==n&&"esriSFSCross"!==n&&"esriSFSVertical"!==n||(l.moveTo(s/2,-i),l.lineTo(s/2,s+i)),"horizontal"!==n&&"cross"!==n&&"esriSFSCross"!==n&&"esriSFSHorizontal"!==n||(l.moveTo(-i,s/2),l.lineTo(s+i,s/2)),"backward-diagonal"!==n&&"diagonal-cross"!==n&&"esriSFSDiagonalCross"!==n&&"esriSFSBackwardDiagonal"!==n||(l.moveTo(-i,-i),l.lineTo(s+i,s+i),l.moveTo(s-i,-i),l.lineTo(s+i,i),l.moveTo(-i,s-i),l.lineTo(i,s+i)),"forward-diagonal"!==n&&"diagonal-cross"!==n&&"esriSFSForwardDiagonal"!==n&&"esriSFSDiagonalCross"!==n||(l.moveTo(s+i,-i),l.lineTo(-i,s+i),l.moveTo(i,-i),l.lineTo(-i,i),l.moveTo(s+i,s-i),l.lineTo(s-i,s+i)),l.stroke();const c=l.getImageData(0,0,o.width,o.height),f=new Uint8Array(c.data);let m;for(let e=0;e<f.length;e+=4)m=f[e+3]/255,f[e]=f[e]*m,f[e+1]=f[e+1]*m,f[e+2]=f[e+2]*m;return[f,o.width,o.height,a]}function m(t){t.length%2==1&&(t=[...t,...t]);const e=t.reduce((o,t)=>o+t,0),a=Math.round(e*r),s=1,i=new Float32Array(a*s);let l=0,c=0,h=.5,f=!0;for(const o of t){for(l=c,c+=o*r;h<=c;){const o=h-.5,t=Math.min(Math.abs(h-l),Math.abs(h-c));i[o]=f?-t:t,h++}f=!f}const m=i.length,u=new Uint8Array(4*m);for(let g=0;g<m;++g){const t=i[g]/r;o(t/n*.5+.5,u,4*g)}return[u,a,s]}function u(t,e){null==t&&(t=[]);const r="Butt"===e,n="Square"===e,s=!r&&!n;t.length%2==1&&(t=[...t,...t]);const i=a,l=2*i;let c=0;for(const o of t)c+=o;const h=Math.round(c*i),f=new Float32Array(h*l),m=.5*i;let u=0,g=0,d=.5,p=!0;for(const o of t){for(u=g,g+=o*i;d<=g;){let o=.5;for(;o<l;){const t=(o-.5)*h+d-.5,e=s?(o-i)*(o-i):Math.abs(o-i);f[t]=p?r?Math.max(Math.max(u+m-d,e),Math.max(d-g+m,e)):e:s?Math.min((d-u)*(d-u)+e,(d-g)*(d-g)+e):n?Math.min(Math.max(d-u,e),Math.max(g-d,e)):Math.min(Math.max(d-u+m,e),Math.max(g+m-d,e)),o++}d++}p=!p}const C=f.length,M=new Uint8Array(4*C);for(let a=0;a<C;++a){const t=(s?Math.sqrt(f[a]):f[a])/i;o(t,M,4*a)}return[M,h,l]}function g(o,t){const{colorRamp:e,gradientType:r}=t,n="CIMFixedColorRamp"===e.type,a=t.interval||s.CIMGradientFill.interval;let i=C(e);return n&&(i=M(i,a)),"Discrete"===r||n?w(o,i,a):x(o,i)}let d;function p(o,t){const{colorRamp:e,gradientType:r}=t,n=C(e),a="CIMFixedColorRamp"===e.type;if("Continuous"===r&&!a)return y(o,n);const i=t.interval??s.CIMGradientFill.interval;if(a){return y(o,M(n,i))}const l=[];d??=document.createElement("canvas"),S(d,n,i,1,0);const c=d.getContext("2d").getImageData(0,0,i,1).data;for(let s=0,h=0;s<i;s++,h=4*s){const o=[c[h+0],c[h+1],c[h+2],c[h+3]];l.push({offset:s/i,color:o}),l.push({offset:(s+1)/i,color:o})}return y(o,l)}function C(o){const t=[];switch(o.type){case"CIMPolarContinuousColorRamp":case"CIMLinearContinuousColorRamp":{"CIMPolarContinuousColorRamp"===o.type&&l().warnOnce("CIMPolarContinuousColorRamp is currently unsupported. Falling back to CIMLinearContinuousColorRamp.");const e=o;t.push({offset:0,color:[e.fromColor[0],e.fromColor[1],e.fromColor[2],e.fromColor[3]/255]}),t.push({offset:1,color:[e.toColor[0],e.toColor[1],e.toColor[2],e.toColor[3]/255]});break}case"CIMFixedColorRamp":{const e=o,r=1/(e.colors.length-1);let n=0;for(const o of e.colors)t.push({offset:n,color:[o[0],o[1],o[2],o[3]/255]}),n+=r;break}case"CIMMultipartColorRamp":{const e=o,r=e.weights.reduce((o,t)=>o+t,0);let n=0;for(let o=0;o<e.colorRamps.length;o++){const a=e.colorRamps[o],s=e.weights[o],i=C(a);for(const o of i)t.push({offset:(n+o.offset*s)/r,color:o.color});n+=s}break}default:l().error(`Color ramp "${o.type}" currently unsupported.`)}return t}function M(o,t){const e=[],r=(o.length-1)/(t-1);for(let n=0;n<t;n++){const a=o[Math.round(n*r)].color;e.push({offset:n/t,color:a}),e.push({offset:(n+1)/t,color:a})}return e}function x(o,t){return S(o,t,c,1,i),F(o)}function w(o,t,e){return S(o,t,e,1,i),F(o)}function y(o,t,e=0){for(const{offset:r,color:n}of t)o.addColorStop(Math.min(Math.max(r,e),1-e),`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${n[3]})`)}function S(o,t,e,r,n){const a=e+2*n;o.width=a,o.height=r;const s=(n+1)/a,i=o.getContext("2d",{willReadFrequently:!0});if(t.length>0){const o=i.createLinearGradient(0,0,a,r);y(o,t,s),i.fillStyle=o}else i.fillStyle="rgba(128, 128, 128, 1)";i.fillRect(0,0,a,r)}function F(o){const{width:t,height:e}=o,r=o.getContext("2d").getImageData(0,0,t,e),n=new Uint8Array(r.data);for(let a=0;a<n.length;a+=4){const o=n[a+3]/255;n[a]*=o,n[a+1]*=o,n[a+2]*=o}return[n,t,e]}function v(o){const t=o[0]?.[0]?.[0]??0,e=o[0]?.[0]?.[1]??0,r={ymin:e,xmin:t,ymax:e,xmax:t,width:0,height:0};for(let n=0;n<o.length;n++){const t=o[n];for(let o=0;o<t.length;o++){const e=t[o][0],n=t[o][1];e<r.xmin&&(r.xmin=e),e>r.xmax&&(r.xmax=e),n<r.ymin&&(r.ymin=n),n>r.ymax&&(r.ymax=n)}}return r.width=Math.abs(r.xmax-r.xmin),r.height=Math.abs(r.ymax-r.ymin),r}function T(o,t){const e=v(o),r=0===e.width?1:e.width,n=0===e.height?1:e.height,a=[];for(let s=0;s<o.length;s++){const i=o[s],l=[];for(let o=0;o<i.length;o++){let a=Math.round(i[o][0]-e.xmin),s=Math.round(i[o][1]-e.ymin);if(a=t.xmin+a*t.width/r,s=t.ymin+s*t.height/n,isNaN(a)||isNaN(s))throw new Error("Scaled shape has NaN values");l.push([a,s])}a.push(l)}return a}function R(o,t,e){const r=[];for(let n=0;n<o.length;n++){const a=o[n],s=[];for(let o=0;o<a.length;o++){const r=a[o][0]+t,n=a[o][1]+e;if(isNaN(r)||isNaN(n))throw new Error("Scaled shape has NaN values");s.push([r,n])}r.push(s)}return r}export{p as addColorStops,u as rasterizeDash,m as rasterizeDash1D,f as rasterizeFillStyle,g as rasterizeGradient,T as scale,R as translate};
2
+ import{packFloatRGBA as t}from"../../core/floatRGBA.js";import o from"../../core/Logger.js";import{nextPowerOfTwo as e}from"../../core/mathUtils.js";import{dashSdfRasterizationScale as n,dashSdfDistanceNormalization as r,dashRadius as a}from"./constants.js";import{defaultCIMValues as l}from"./defaultCIMValues.js";import{gradientTextureExternalPadding as s}from"../../views/2d/engine/webgl/definitions.js";const i=()=>o.getLogger("esri.symbols.cim.rasterizingUtils"),c=32,h=t=>"vertical"===t||"horizontal"===t||"cross"===t||"esriSFSCross"===t||"esriSFSVertical"===t||"esriSFSHorizontal"===t;function f(t,o,n){const r=o.style,a=e(Math.ceil(n)),l=h(r)?8*a:16*a,s=2*a;t.width=l,t.height=l;const i=t.getContext("2d");i.strokeStyle="#ffffff",i.lineWidth=a,i.beginPath(),"vertical"!==r&&"cross"!==r&&"esriSFSCross"!==r&&"esriSFSVertical"!==r||(i.moveTo(l/2,-s),i.lineTo(l/2,l+s)),"horizontal"!==r&&"cross"!==r&&"esriSFSCross"!==r&&"esriSFSHorizontal"!==r||(i.moveTo(-s,l/2),i.lineTo(l+s,l/2)),"backward-diagonal"!==r&&"diagonal-cross"!==r&&"esriSFSDiagonalCross"!==r&&"esriSFSBackwardDiagonal"!==r||(i.moveTo(-s,-s),i.lineTo(l+s,l+s),i.moveTo(l-s,-s),i.lineTo(l+s,s),i.moveTo(-s,l-s),i.lineTo(s,l+s)),"forward-diagonal"!==r&&"diagonal-cross"!==r&&"esriSFSForwardDiagonal"!==r&&"esriSFSDiagonalCross"!==r||(i.moveTo(l+s,-s),i.lineTo(-s,l+s),i.moveTo(s,-s),i.lineTo(-s,s),i.moveTo(l+s,l-s),i.lineTo(l-s,l+s)),i.stroke();const c=i.getImageData(0,0,t.width,t.height),f=new Uint8Array(c.data);let u;for(let e=0;e<f.length;e+=4)u=f[e+3]/255,f[e]=f[e]*u,f[e+1]=f[e+1]*u,f[e+2]=f[e+2]*u;return[f,t.width,t.height,a]}function u(o){o.length%2==1&&(o=[...o,...o]);let e=0,a=o.length-1;for(;e<o.length&&0===o[e];)e++;for(;a>=0&&0===o[a];)a--;let l=0;const s=[];for(let t=e;t<=a;t++)0===o[t]?l++:0===l?s.push(o[t]):1&l?(s[s.length-1]+=o[t],l=0):(s.push(o[t]),l=0);if(l=e+o.length-1-a,(o=s).length<=1)return 0===o.length||e%2==0?[new Uint8Array,0,1]:[new Uint8Array([255,255,255,255]),1,1];const i=o.reduce((t,o)=>t+o,0),c=Math.round(i*n),h=1,f=c*h,u=new Float32Array(f);let m=0,g=0,d=.5,p=e%2==0;const C=o.length>1&&l%2==1;for(let t=0;t<o.length;t++){for(m=g,g+=o[t]*n,0===t&&C&&(m-=o[o.length-1]*n),t===o.length-1&&C&&(g+=o[0]*n);d<=g&&d-.5<f;){const t=d-.5,o=Math.min(Math.abs(d-m),Math.abs(d-g));u[t]=p?-o:o,d++}p=!p}const M=u.length,x=new Uint8Array(4*M);for(let w=0;w<M;++w){const o=u[w]/n;t(o/r*.5+.5,x,4*w)}return[x,c,h]}function m(o,e){null==o&&(o=[]);const n="Butt"===e,r="Square"===e,l=!n&&!r;o.length%2==1&&(o=[...o,...o]);const s=a,i=2*s;let c=0;for(const t of o)c+=t;const h=Math.round(c*s),f=new Float32Array(h*i),u=.5*s;let m=0,g=0,d=.5,p=!0;for(const t of o){for(m=g,g+=t*s;d<=g;){let t=.5;for(;t<i;){const o=(t-.5)*h+d-.5,e=l?(t-s)*(t-s):Math.abs(t-s);f[o]=p?n?Math.max(Math.max(m+u-d,e),Math.max(d-g+u,e)):e:l?Math.min((d-m)*(d-m)+e,(d-g)*(d-g)+e):r?Math.min(Math.max(d-m,e),Math.max(g-d,e)):Math.min(Math.max(d-m+u,e),Math.max(g+u-d,e)),t++}d++}p=!p}const C=f.length,M=new Uint8Array(4*C);for(let a=0;a<C;++a){const o=(l?Math.sqrt(f[a]):f[a])/s;t(o,M,4*a)}return[M,h,i]}function g(t,o){const{colorRamp:e,gradientType:n}=o,r="CIMFixedColorRamp"===e.type,a=o.interval||l.CIMGradientFill.interval;let s=C(e);return r&&(s=M(s,a)),"Discrete"===n||r?w(t,s,a):x(t,s)}let d;function p(t,o){const{colorRamp:e,gradientType:n}=o,r=C(e),a="CIMFixedColorRamp"===e.type;if("Continuous"===n&&!a)return y(t,r);const s=o.interval??l.CIMGradientFill.interval;if(a){return y(t,M(r,s))}const i=[];d??=document.createElement("canvas"),S(d,r,s,1,0);const c=d.getContext("2d").getImageData(0,0,s,1).data;for(let l=0,h=0;l<s;l++,h=4*l){const t=[c[h+0],c[h+1],c[h+2],c[h+3]];i.push({offset:l/s,color:t}),i.push({offset:(l+1)/s,color:t})}return y(t,i)}function C(t){const o=[];switch(t.type){case"CIMPolarContinuousColorRamp":case"CIMLinearContinuousColorRamp":{"CIMPolarContinuousColorRamp"===t.type&&i().warnOnce("CIMPolarContinuousColorRamp is currently unsupported. Falling back to CIMLinearContinuousColorRamp.");const e=t;o.push({offset:0,color:[e.fromColor[0],e.fromColor[1],e.fromColor[2],e.fromColor[3]/255]}),o.push({offset:1,color:[e.toColor[0],e.toColor[1],e.toColor[2],e.toColor[3]/255]});break}case"CIMFixedColorRamp":{const e=t,n=1/(e.colors.length-1);let r=0;for(const t of e.colors)o.push({offset:r,color:[t[0],t[1],t[2],t[3]/255]}),r+=n;break}case"CIMMultipartColorRamp":{const e=t,n=e.weights.reduce((t,o)=>t+o,0);let r=0;for(let t=0;t<e.colorRamps.length;t++){const a=e.colorRamps[t],l=e.weights[t],s=C(a);for(const t of s)o.push({offset:(r+t.offset*l)/n,color:t.color});r+=l}break}default:i().error(`Color ramp "${t.type}" currently unsupported.`)}return o}function M(t,o){const e=[],n=(t.length-1)/(o-1);for(let r=0;r<o;r++){const a=t[Math.round(r*n)].color;e.push({offset:r/o,color:a}),e.push({offset:(r+1)/o,color:a})}return e}function x(t,o){return S(t,o,c,1,s),F(t)}function w(t,o,e){return S(t,o,e,1,s),F(t)}function y(t,o,e=0){for(const{offset:n,color:r}of o)t.addColorStop(Math.min(Math.max(n,e),1-e),`rgba(${r[0]}, ${r[1]}, ${r[2]}, ${r[3]})`)}function S(t,o,e,n,r){const a=e+2*r;t.width=a,t.height=n;const l=(r+1)/a,s=t.getContext("2d",{willReadFrequently:!0});if(o.length>0){const t=s.createLinearGradient(0,0,a,n);y(t,o,l),s.fillStyle=t}else s.fillStyle="rgba(128, 128, 128, 1)";s.fillRect(0,0,a,n)}function F(t){const{width:o,height:e}=t,n=t.getContext("2d").getImageData(0,0,o,e),r=new Uint8Array(n.data);for(let a=0;a<r.length;a+=4){const t=r[a+3]/255;r[a]*=t,r[a+1]*=t,r[a+2]*=t}return[r,o,e]}function v(t){const o=t[0]?.[0]?.[0]??0,e=t[0]?.[0]?.[1]??0,n={ymin:e,xmin:o,ymax:e,xmax:o,width:0,height:0};for(let r=0;r<t.length;r++){const o=t[r];for(let t=0;t<o.length;t++){const e=o[t][0],r=o[t][1];e<n.xmin&&(n.xmin=e),e>n.xmax&&(n.xmax=e),r<n.ymin&&(n.ymin=r),r>n.ymax&&(n.ymax=r)}}return n.width=Math.abs(n.xmax-n.xmin),n.height=Math.abs(n.ymax-n.ymin),n}function T(t,o){const e=v(t),n=0===e.width?1:e.width,r=0===e.height?1:e.height,a=[];for(let l=0;l<t.length;l++){const s=t[l],i=[];for(let t=0;t<s.length;t++){let a=Math.round(s[t][0]-e.xmin),l=Math.round(s[t][1]-e.ymin);if(a=o.xmin+a*o.width/n,l=o.ymin+l*o.height/r,isNaN(a)||isNaN(l))throw new Error("Scaled shape has NaN values");i.push([a,l])}a.push(i)}return a}function R(t,o,e){const n=[];for(let r=0;r<t.length;r++){const a=t[r],l=[];for(let t=0;t<a.length;t++){const n=a[t][0]+o,r=a[t][1]+e;if(isNaN(n)||isNaN(r))throw new Error("Scaled shape has NaN values");l.push([n,r])}n.push(l)}return n}export{p as addColorStops,m as rasterizeDash,u as rasterizeDash1D,f as rasterizeFillStyle,g as rasterizeGradient,T as scale,R as translate};
@@ -6,16 +6,16 @@ import type { Symbol3DEmissiveSource } from "./types.js";
6
6
  export interface Symbol3DEmissiveProperties extends Partial<Pick<Symbol3DEmissive, "source" | "strength">> {}
7
7
 
8
8
  /**
9
- * [Symbol3DEmissive](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DEmissive/) is used to define an object as light emitter. It can be set as part of a
10
- * [Symbol3DMaterial](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DMaterial/) on a volumetric [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/Symbol3DLayer/).
9
+ * [Symbol3DEmissive](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DEmissive/) defines a material as a light emitter for 3D symbols. It can be set as part
10
+ * of a [Symbol3DMaterial](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DMaterial/) on volumetric [Symbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/Symbol3DLayer/) types.
11
11
  *
12
12
  * > [!WARNING]
13
13
  * >
14
14
  * > **Known Limitations**
15
15
  * >
16
- * > [Symbol3DEmissive](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DEmissive/) is not supported on [IconSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/IconSymbol3DLayer/),[LineSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/LineSymbol3DLayer/),
17
- * > [WaterSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/WaterSymbol3DLayer/), [TextSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/TextSymbol3DLayer/) and [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/FillSymbol3DLayer/) on
18
- * > [PolygonSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/PolygonSymbol3D/).
16
+ * > [Symbol3DEmissive](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DEmissive/) and [Glow](https://developers.arcgis.com/javascript/latest/references/core/webscene/Glow/) require support for the WebGL2 extension `EXT_float_blend`.
17
+ * > [Symbol3DEmissive](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/Symbol3DEmissive/) is supported on [ObjectSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/ObjectSymbol3DLayer/), [ExtrudeSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/ExtrudeSymbol3DLayer/),
18
+ * > [PathSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/PathSymbol3DLayer/), or [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/FillSymbol3DLayer/) on [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/MeshSymbol3D/).
19
19
  *
20
20
  * Example:
21
21
  * ```js
@@ -25,7 +25,7 @@ export interface Symbol3DEmissiveProperties extends Partial<Pick<Symbol3DEmissiv
25
25
  * type: "extrude", // autocasts as new ExtrudeSymbol3DLayer()
26
26
  * size: 100000,
27
27
  * material: { // autocasts as new Symbol3DMaterial()
28
- * color: "red"
28
+ * color: "red",
29
29
  * emissive: { // autocasts as new Symbol3DEmissive()
30
30
  * source: "color",
31
31
  * strength: 2
@@ -41,8 +41,8 @@ export class Symbol3DEmissive extends Symbol3DEmissiveSuperclass {
41
41
  /** @since 5.0 */
42
42
  constructor(properties?: Symbol3DEmissiveProperties);
43
43
  /**
44
- * The emissive source defines whether the emissive values are derived from an underlying model or the combined color
45
- * information of the symbology.
44
+ * The source for the emissive effect. Determines whether the emissive values are derived from an underlying model or
45
+ * from the combined color information of the symbology.
46
46
  *
47
47
  * Value | Description
48
48
  * ------|------------
@@ -54,7 +54,7 @@ export class Symbol3DEmissive extends Symbol3DEmissiveSuperclass {
54
54
  */
55
55
  accessor source: Symbol3DEmissiveSource;
56
56
  /**
57
- * The emissive strength of this material.
57
+ * The intensity of the emissive effect for this material. Higher values produce a brighter, more pronounced glow effect.
58
58
  *
59
59
  * @default 1
60
60
  * @since 5.0