@arcgis/core 4.22.0-next.20211206 → 4.22.2

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 (150) hide show
  1. package/PopupTemplate.js +1 -1
  2. package/assets/esri/core/workers/RemoteClient.js +1 -1
  3. package/assets/esri/core/workers/chunks/0146455a237a1d237525.js +1 -0
  4. package/assets/esri/core/workers/chunks/{44ccee36f8c74f4f134e.js → 025df54bafc05c183182.js} +1 -1
  5. package/assets/esri/core/workers/chunks/0677ed519c51710d7629.js +1 -0
  6. package/assets/esri/core/workers/chunks/{6a1ce00bcb689ea95bcb.js → 26111da2277612ba0e38.js} +1 -1
  7. package/assets/esri/core/workers/chunks/28f9b48b59bf1347facd.js +1 -0
  8. package/assets/esri/core/workers/chunks/360bb187a91c8cadcb8b.js +1 -0
  9. package/assets/esri/core/workers/chunks/{96a62dc1e07f3ef20a30.js → 3981c2e5b88c93d63793.js} +1 -1
  10. package/assets/esri/core/workers/chunks/{44145763617ea985cce4.js → 3ccb827134eb2ad54ff2.js} +1 -1
  11. package/assets/esri/core/workers/chunks/{4417dfcb2ba50ac9f199.js → 487713de9462be6b5202.js} +1 -1
  12. package/assets/esri/core/workers/chunks/53c05fb7fed21c815ee9.js +1 -0
  13. package/assets/esri/core/workers/chunks/{6e736a6717e09bf6c1fc.js → 5f87aea9f42c40c51b6f.js} +1 -1
  14. package/assets/esri/core/workers/chunks/{d7f77fe32bb2d69b5714.js → 606b99f366517ca9d577.js} +1 -1
  15. package/assets/esri/core/workers/chunks/{f3da8b797c8e1fcb1c21.js → 63161320a58a0b1702a2.js} +1 -1
  16. package/assets/esri/core/workers/chunks/{8bc4ea821be16a752226.js → 88fd591d45e8b4542f82.js} +1 -1
  17. package/assets/esri/core/workers/chunks/8cdaa07b09d5c2b1ccc5.js +1 -0
  18. package/assets/esri/core/workers/chunks/{fd874267d81bc0b2be50.js → a4c58e301ded79fe827d.js} +1 -1
  19. package/assets/esri/core/workers/chunks/{23af0b02208e20d5c07e.js → ab067b1b6a2af26decc5.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{6210b23872c362f51b12.js → ac9f18daa7236446c9c8.js} +1 -1
  21. package/assets/esri/core/workers/chunks/{bc0b85bc1e5116836ba4.js → b6e150686198dec02a27.js} +1 -1
  22. package/assets/esri/core/workers/chunks/d06d4b76625afc309a55.js +1 -0
  23. package/assets/esri/core/workers/chunks/{5f2718cd77cbd5ba7920.js → da62f8159ec2fdbdeb58.js} +1 -1
  24. package/assets/esri/core/workers/chunks/{52aa3b44bddb10caa343.js → e07f78db820375e105c0.js} +1 -1
  25. package/assets/esri/core/workers/chunks/f1b3f84ddf34a13c9d8e.js +1 -0
  26. package/assets/esri/widgets/Editor/t9n/Editor_ar.json +1 -1
  27. package/assets/esri/widgets/Editor/t9n/Editor_bg.json +1 -1
  28. package/assets/esri/widgets/Editor/t9n/Editor_bs.json +1 -1
  29. package/assets/esri/widgets/Editor/t9n/Editor_ca.json +1 -1
  30. package/assets/esri/widgets/Editor/t9n/Editor_cs.json +1 -1
  31. package/assets/esri/widgets/Editor/t9n/Editor_da.json +1 -1
  32. package/assets/esri/widgets/Editor/t9n/Editor_de.json +1 -1
  33. package/assets/esri/widgets/Editor/t9n/Editor_el.json +1 -1
  34. package/assets/esri/widgets/Editor/t9n/Editor_es.json +1 -1
  35. package/assets/esri/widgets/Editor/t9n/Editor_et.json +1 -1
  36. package/assets/esri/widgets/Editor/t9n/Editor_fi.json +1 -1
  37. package/assets/esri/widgets/Editor/t9n/Editor_fr.json +1 -1
  38. package/assets/esri/widgets/Editor/t9n/Editor_he.json +1 -1
  39. package/assets/esri/widgets/Editor/t9n/Editor_hr.json +1 -1
  40. package/assets/esri/widgets/Editor/t9n/Editor_hu.json +1 -1
  41. package/assets/esri/widgets/Editor/t9n/Editor_id.json +1 -1
  42. package/assets/esri/widgets/Editor/t9n/Editor_it.json +1 -1
  43. package/assets/esri/widgets/Editor/t9n/Editor_ja.json +1 -1
  44. package/assets/esri/widgets/Editor/t9n/Editor_ko.json +1 -1
  45. package/assets/esri/widgets/Editor/t9n/Editor_lt.json +1 -1
  46. package/assets/esri/widgets/Editor/t9n/Editor_lv.json +1 -1
  47. package/assets/esri/widgets/Editor/t9n/Editor_nb.json +1 -1
  48. package/assets/esri/widgets/Editor/t9n/Editor_nl.json +1 -1
  49. package/assets/esri/widgets/Editor/t9n/Editor_pl.json +1 -1
  50. package/assets/esri/widgets/Editor/t9n/Editor_pt-BR.json +1 -1
  51. package/assets/esri/widgets/Editor/t9n/Editor_pt-PT.json +1 -1
  52. package/assets/esri/widgets/Editor/t9n/Editor_ro.json +1 -1
  53. package/assets/esri/widgets/Editor/t9n/Editor_ru.json +1 -1
  54. package/assets/esri/widgets/Editor/t9n/Editor_sk.json +1 -1
  55. package/assets/esri/widgets/Editor/t9n/Editor_sl.json +1 -1
  56. package/assets/esri/widgets/Editor/t9n/Editor_sr.json +1 -1
  57. package/assets/esri/widgets/Editor/t9n/Editor_sv.json +1 -1
  58. package/assets/esri/widgets/Editor/t9n/Editor_th.json +1 -1
  59. package/assets/esri/widgets/Editor/t9n/Editor_tr.json +1 -1
  60. package/assets/esri/widgets/Editor/t9n/Editor_uk.json +1 -1
  61. package/assets/esri/widgets/Editor/t9n/Editor_vi.json +1 -1
  62. package/assets/esri/widgets/Editor/t9n/Editor_zh-CN.json +1 -1
  63. package/assets/esri/widgets/Editor/t9n/Editor_zh-HK.json +1 -1
  64. package/assets/esri/widgets/Editor/t9n/Editor_zh-TW.json +1 -1
  65. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_ar.json +1 -1
  66. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_bg.json +1 -1
  67. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_bs.json +1 -1
  68. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_ca.json +1 -1
  69. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_cs.json +1 -1
  70. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_da.json +1 -1
  71. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_de.json +1 -1
  72. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_el.json +1 -1
  73. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_es.json +1 -1
  74. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_et.json +1 -1
  75. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_fi.json +1 -1
  76. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_fr.json +1 -1
  77. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_he.json +1 -1
  78. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_hr.json +1 -1
  79. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_hu.json +1 -1
  80. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_id.json +1 -1
  81. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_it.json +1 -1
  82. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_ja.json +1 -1
  83. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_ko.json +1 -1
  84. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_lt.json +1 -1
  85. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_lv.json +1 -1
  86. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_nb.json +1 -1
  87. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_nl.json +1 -1
  88. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_pl.json +1 -1
  89. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_pt-BR.json +1 -1
  90. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_pt-PT.json +1 -1
  91. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_ro.json +1 -1
  92. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_ru.json +1 -1
  93. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_sk.json +1 -1
  94. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_sl.json +1 -1
  95. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_sr.json +1 -1
  96. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_sv.json +1 -1
  97. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_th.json +1 -1
  98. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_tr.json +1 -1
  99. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_uk.json +1 -1
  100. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_vi.json +1 -1
  101. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_zh-CN.json +1 -1
  102. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_zh-HK.json +1 -1
  103. package/assets/esri/widgets/UtilityNetworkTrace/t9n/UtilityNetworkTrace_zh-TW.json +1 -1
  104. package/assets/esri/widgets/support/t9n/timezone_bg.json +1 -1
  105. package/chunks/Clouds.glsl.js +4 -4
  106. package/config.js +1 -1
  107. package/interfaces.d.ts +138 -41
  108. package/layers/CSVLayer.js +1 -1
  109. package/layers/GeoJSONLayer.js +1 -1
  110. package/layers/mixins/ArcGISImageService.js +1 -1
  111. package/package.json +1 -1
  112. package/renderers/VectorFieldRenderer.js +1 -1
  113. package/renderers/support/RasterSymbolizer.js +1 -1
  114. package/renderers/support/rasterRendererHelper.js +1 -1
  115. package/rest/query/operations/query.js +1 -1
  116. package/smartMapping/raster/renderers/classBreaks.js +1 -1
  117. package/support/arcadeUtils.js +1 -1
  118. package/support/revision.js +1 -1
  119. package/symbols/cim/CIMSymbolHelper.js +1 -1
  120. package/symbols/cim/cimAnalyzer.js +1 -1
  121. package/views/2d/MapViewConstraints.js +1 -1
  122. package/views/2d/constraints/ZoomConstraint.js +1 -1
  123. package/views/2d/engine/Stage.js +1 -1
  124. package/views/2d/engine/webgl/collisions/CollisionEngine.js +1 -1
  125. package/views/2d/engine/webgl/collisions/CollisionGrid.js +1 -1
  126. package/views/2d/engine/webgl/mesh/templates/WGLDynamicMeshTemplate.js +1 -1
  127. package/views/2d/engine/webgl/mesh/templates/WGLDynamicTextTemplate.js +1 -1
  128. package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
  129. package/views/2d/layers/FeatureLayerView2D.js +1 -1
  130. package/views/2d/layers/VectorTileLayerView2D.js +1 -1
  131. package/views/2d/layers/graphics/GraphicBoundsRenderer.js +1 -1
  132. package/views/2d/layers/graphics/GraphicStore.js +1 -1
  133. package/views/3d/environment/Clouds.glsl.js +1 -1
  134. package/views/3d/environment/CloudsGenerator.js +1 -1
  135. package/views/3d/environment/NoiseTextureAtlas.js +1 -1
  136. package/views/MapView.js +1 -1
  137. package/views/webgl/Program.js +1 -1
  138. package/widgets/Histogram.js +1 -1
  139. package/widgets/Legend/support/ActiveLayerInfo.js +1 -1
  140. package/widgets/Sketch/SketchViewModel.js +1 -1
  141. package/widgets/TimeSlider/TimeSliderViewModel.js +1 -1
  142. package/widgets/UtilityNetworkTrace.js +1 -1
  143. package/assets/esri/core/workers/chunks/22d1bead2fe51ab81bea.js +0 -1
  144. package/assets/esri/core/workers/chunks/49bb222ee07a768e998d.js +0 -1
  145. package/assets/esri/core/workers/chunks/650f04de72c173beaebc.js +0 -1
  146. package/assets/esri/core/workers/chunks/aa57f2c380132c746730.js +0 -1
  147. package/assets/esri/core/workers/chunks/af6251cc7973b43a1523.js +0 -1
  148. package/assets/esri/core/workers/chunks/deba37055be7c2d7da26.js +0 -1
  149. package/assets/esri/core/workers/chunks/e02a3d456525e76ddb60.js +0 -1
  150. package/assets/esri/core/workers/chunks/e3d43cdc72fa4c58e183.js +0 -1
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- import e from"../../../core/Error.js";import{isSome as r}from"../../../core/maybe.js";import{formatNumber as a}from"../../../intl/number.js";import{createClassBreaksRenderer as t,getField as s}from"../../../renderers/support/rasterRendererHelper.js";import{processRasterRendererParameters as n}from"../support/utils.js";async function o(a){const t=(a=await n(a)).layer,{rasterInfo:o}=t;if(o.bandCount>1)throw new e("raster-class-breaks-renderer:not-supported","Multiband raster is not supported");if(!r(o.attributeTable)&&!r(o.histograms)&&(await t.updateRasterInfoWithEstimatedStats({renderingRule:a.renderingRule,signal:a.signal}),!r(o.histograms)))throw new e("raster-class-breaks-renderer:not-supported","Histograms or raster attribute table is required on the source raster. Unable to estimate histograms");const{colors:i,numClasses:l}=a;if(i&&l&&i.length!==l)throw new e("raster-class-breaks-renderer:not-supported","The size of the `colors` parameter does not match 'numClasses'");return a.field||(a.field=r(o.attributeTable)?s(o.attributeTable,"value").name:"value"),a.classificationMethod||(a.classificationMethod="natural-breaks"),a}async function i(a){a=await o(a);const s=t(a.layer.rasterInfo,a);if(!r(s))throw new e("raster-class-breaks-renderer:not-supported","Class breaks renderer is not supported on this data");const n={minValue:s.minValue,maxValue:s.classBreakInfos[s.classBreakInfos.length-1].maxValue,normalizationTotal:null,classBreakInfos:s.classBreakInfos.map((e=>{const r=l(e.minValue,e.maxValue);return e.label=r,{minValue:e.minValue,maxValue:e.maxValue,label:r}}))};return{renderer:s,classBreaksResult:n}}function l(e,r){return a(e,{maximumFractionDigits:3})+" - "+a(r,{maximumFractionDigits:3})}export{i as createRenderer};
5
+ import e from"../../../core/Error.js";import{isSome as r}from"../../../core/maybe.js";import{formatNumber as a}from"../../../intl/number.js";import{createClassBreaksRenderer as t,getField as s}from"../../../renderers/support/rasterRendererHelper.js";import{processRasterRendererParameters as n}from"../support/utils.js";async function o(a){const t=(a=await n(a)).layer,{rasterInfo:o}=t;if(o.bandCount>1)throw new e("raster-class-breaks-renderer:not-supported","Multiband raster is not supported");a.field||(a.field=r(o.attributeTable)?s(o.attributeTable,"value").name:"value");const i=r(o.attributeTable),l=i&&o.attributeTable.fields.find((e=>"count"===e.name.toLowerCase())),u=i&&o.attributeTable.fields.find((e=>e.name.toLowerCase()===a.field.toLowerCase()));if(!(l&&u||r(o.histograms)||(await t.updateRasterInfoWithEstimatedStats({renderingRule:a.renderingRule,signal:a.signal}),r(o.histograms))))throw new e("raster-class-breaks-renderer:not-supported","Histograms or raster attribute table is required on the source raster. Unable to estimate histograms");const{colors:m,numClasses:c}=a;if(m&&c&&m.length!==c)throw new e("raster-class-breaks-renderer:not-supported","The size of the `colors` parameter does not match 'numClasses'");return a.classificationMethod||(a.classificationMethod="natural-breaks"),a}async function i(a){a=await o(a);const s=t(a.layer.rasterInfo,a);if(!r(s))throw new e("raster-class-breaks-renderer:not-supported","Class breaks renderer is not supported on this data");const n={minValue:s.minValue,maxValue:s.classBreakInfos[s.classBreakInfos.length-1].maxValue,normalizationTotal:null,classBreakInfos:s.classBreakInfos.map((e=>{const r=l(e.minValue,e.maxValue);return e.label=r,{minValue:e.minValue,maxValue:e.maxValue,label:r}}))};return{renderer:s,classBreaksResult:n}}function l(e,r){return a(e,{maximumFractionDigits:3})+" - "+a(r,{maximumFractionDigits:3})}export{i as createRenderer};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- import{p as e,c as r,e as n,a as t,r as u,l as i,b as a,d as s,f as o,s as l,g as c}from"../chunks/arcade.js";export{h as arcade}from"../chunks/arcade.js";import f from"../arcade/Dictionary.js";export{default as Dictionary}from"../arcade/Dictionary.js";import p from"../arcade/Feature.js";export{default as arcadeFeature}from"../arcade/Feature.js";import{clone as m}from"../core/lang.js";import{isSizeVariable as d}from"../renderers/visualVariables/support/sizeVariableUtils.js";const y=/^\$(feature|aggregatedFeatures)\./i,v={vars:{$feature:"any",$view:"any"},spatialReference:null};function x(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")}function g(r){if(!r)return null;try{return e(r)}catch(n){}return null}function w(e,n){const t="string"==typeof e?g(e):e;if(!t)return null;try{return n=n||m(v),r(t,n)}catch(u){}return null}function E(e,r){return{vars:{$feature:null==e?new p:p.createFromGraphic(e),$view:r&&r.view},spatialReference:r&&r.sr}}function F(e,r,n){return p.createFromGraphicLikeObject(r,e,n)}function $(e,r){e.vars.$feature=r}function b(e,r){let t;try{t=n(e,r)}catch(u){t=null}return t}function j(e,r){let n;try{n=e?e(r):null}catch(t){n=null}return n}function S(e,r){try{return e?e(r):Promise.resolve(null)}catch(n){return Promise.resolve(null)}}function R(e,r){if(!e)return[];const n="string"==typeof e?g(e):e;if(!n)return[];const u=t(n);let i=new Array;u.forEach((e=>{y.test(e)&&(e=e.replace(y,""),i.push(e))}));const a=i.filter((e=>e.includes("*")));return i=i.filter((e=>!a.includes(e))),r&&a.forEach((e=>{const n=new RegExp(`^${e.split(/\*+/).map(x).join(".*")}$`,"i");r.forEach((e=>n.test(e)?i.push(e):null))})),[...new Set(i.sort())]}function z(e){return u(e,"$view")}function C(e,r){return!!e&&u(e,r)}function M(e){if(!e||null==e.spatialReference&&(null==e.scale||null==e.viewingMode))return;return{view:e.viewingMode&&null!=e.scale?new f({viewingMode:e.viewingMode,scale:e.scale}):null,sr:e.spatialReference}}function k({url:e,spatialReference:r,lrucache:n,interceptor:t}){const u=o();return u?u.createFeatureSetCollectionFromService(e,r,n,t):null}function I({layer:e,spatialReference:r,outFields:n,returnGeometry:t,lrucache:u,interceptor:i}){if(null===e)return null;const a=o();return a?a.constructFeatureSet(e,r,n,null==t||t,u,i):null}function D(e){if(null===(null==e?void 0:e.map))return null;const r=o();return r?r.createFeatureSetCollectionFromMap(e.map,e.spatialReference,e.lrucache,e.interceptor):null}function G(e,r,n=[]){return i(e,r,n)}function P(){return a()}function V(){return s()}function L(e){return"simple"===e.type||"class-breaks"===e.type||"unique-value"===e.type||"dot-density"===e.type||"dictionary"===e.type}function q(e){return"esri.layers.support.LabelClass"===e.declaredClass}function A(e){return"esri.PopupTemplate"===e.declaredClass}function O(e,r){if(!e)return!1;if("string"==typeof e)return r(e);const n=e;if(L(n)){if("dot-density"===n.type){const e=n.attributes.some((e=>r(e.valueExpression)));if(e)return e}const e=n.visualVariables,t=!!e&&e.some((e=>{let n=r(e.valueExpression);return"size"===e.type&&(d(e.minSize)&&(n=n||r(e.minSize.valueExpression)),d(e.maxSize)&&(n=n||r(e.maxSize.valueExpression))),n}));return!(!("valueExpression"in n)||!r(n.valueExpression))||t}if(q(n)){const e=n.labelExpressionInfo&&n.labelExpressionInfo.expression;return!(!e||!r(e))||!1}return!!A(n)&&(!!n.expressionInfos&&n.expressionInfos.some((e=>r(e.expression))))}function T(e){const r=g(e);return!!r&&l(r)}function U(e){return O(e,T)}function B(e){const r=g(e);return!!r&&c(r)}function H(e){return O(e,B)}export{I as convertFeatureLayerToFeatureSet,D as convertMapToFeatureSetCollection,k as convertServiceUrlToWorkspace,E as createExecContext,F as createFeature,w as createFunction,g as createSyntaxTree,z as dependsOnView,V as enableFeatureSetOperations,P as enableGeometryOperations,b as evalSyntaxTree,S as executeAsyncFunction,j as executeFunction,R as extractFieldNames,M as getViewInfo,U as hasGeometryFunctions,H as hasGeometryOperations,C as hasVariable,G as loadScriptDependencies,$ as updateExecContext};
5
+ import{p as e,c as r,e as n,a as t,r as u,l as s,b as i,d as a,f as o,s as l,g as c}from"../chunks/arcade.js";export{h as arcade}from"../chunks/arcade.js";import f from"../arcade/Dictionary.js";export{default as Dictionary}from"../arcade/Dictionary.js";import p from"../arcade/Feature.js";export{default as arcadeFeature}from"../arcade/Feature.js";import{clone as m}from"../core/lang.js";import{isSizeVariable as d}from"../renderers/visualVariables/support/sizeVariableUtils.js";const y=/^\$(feature|aggregatedFeatures)\./i,v={vars:{$feature:"any",$view:"any"},spatialReference:null};function x(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")}function g(r){if(!r)return null;try{return e(r)}catch(n){}return null}function w(e,n){const t="string"==typeof e?g(e):e;if(!t)return null;try{return n=n||m(v),r(t,n)}catch(u){}return null}function E(e,r){return{vars:{$feature:null==e?new p:p.createFromGraphic(e),$view:r&&r.view},spatialReference:r&&r.sr}}function F(e,r,n){return p.createFromGraphicLikeObject(r,e,n)}function $(e,r){e.vars.$feature=r}function b(e,r){let t;try{t=n(e,r)}catch(u){t=null}return t}function j(e,r){let n;try{n=e?e(r):null}catch(t){n=null}return n}function S(e,r){try{return e?e(r):Promise.resolve(null)}catch(n){return Promise.resolve(null)}}function R(e,r){if(!e)return[];const n="string"==typeof e?g(e):e;if(!n)return[];const u=t(n);let s=new Array;u.forEach((e=>{y.test(e)&&(e=e.replace(y,""),s.push(e))}));const i=s.filter((e=>e.includes("*")));return s=s.filter((e=>!i.includes(e))),r&&i.forEach((e=>{const n=new RegExp(`^${e.split(/\*+/).map(x).join(".*")}$`,"i");r.forEach((e=>n.test(e)?s.push(e):null))})),[...new Set(s.sort())]}function z(e){return u(e,"$view")}function C(e,r){return!!e&&u(e,r)}function I(e){if(!e||null==e.spatialReference&&(null==e.scale||null==e.viewingMode))return;return{view:e.viewingMode&&null!=e.scale?new f({viewingMode:e.viewingMode,scale:e.scale}):null,sr:e.spatialReference}}function M({url:e,spatialReference:r,lrucache:n,interceptor:t}){const u=o();return u?u.createFeatureSetCollectionFromService(e,r,n,t):null}function k({layer:e,spatialReference:r,outFields:n,returnGeometry:t,lrucache:u,interceptor:s}){if(null===e)return null;const i=o();return i?i.constructFeatureSet(e,r,n,null==t||t,u,s):null}function A(e){if(null===(null==e?void 0:e.map))return null;const r=o();return r?r.createFeatureSetCollectionFromMap(e.map,e.spatialReference,e.lrucache,e.interceptor):null}function D(e,r,n=[]){return s(e,r,n)}function G(){return i()}function P(){return a()}function V(e){return"simple"===e.type||"class-breaks"===e.type||"unique-value"===e.type||"dot-density"===e.type||"dictionary"===e.type}function L(e){return"esri.layers.support.LabelClass"===e.declaredClass}function q(e){return"esri.PopupTemplate"===e.declaredClass}function O(e,r){if(!e)return!1;if("string"==typeof e)return r(e);const n=e;if(V(n)){if("dot-density"===n.type){const e=n.attributes.some((e=>r(e.valueExpression)));if(e)return e}const e=n.visualVariables,t=!!e&&e.some((e=>{let n=r(e.valueExpression);return"size"===e.type&&(d(e.minSize)&&(n=n||r(e.minSize.valueExpression)),d(e.maxSize)&&(n=n||r(e.maxSize.valueExpression))),n}));return!(!("valueExpression"in n)||!r(n.valueExpression))||t}if(L(n)){const e=n.labelExpressionInfo&&n.labelExpressionInfo.expression;return!(!e||!r(e))||!1}return!!q(n)&&(!!n.expressionInfos&&n.expressionInfos.some((e=>r(e.expression)))||Array.isArray(n.content)&&n.content.some((e=>{var n;return"expression"===e.type&&r(null==(n=e.expressionInfo)?void 0:n.expression)})))}function T(e){const r=g(e);return!!r&&l(r)}function U(e){return O(e,T)}function B(e){const r=g(e);return!!r&&c(r)}function H(e){return O(e,B)}export{k as convertFeatureLayerToFeatureSet,A as convertMapToFeatureSetCollection,M as convertServiceUrlToWorkspace,E as createExecContext,F as createFeature,w as createFunction,g as createSyntaxTree,z as dependsOnView,P as enableFeatureSetOperations,G as enableGeometryOperations,b as evalSyntaxTree,S as executeAsyncFunction,j as executeFunction,R as extractFieldNames,I as getViewInfo,U as hasGeometryFunctions,H as hasGeometryOperations,C as hasVariable,D as loadScriptDependencies,$ as updateExecContext};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- const e="20211206",a="366dc51d7741e65c1219855abe95e96b3710a29a";export{e as buildDate,a as commitHash};
5
+ const a="20211215",d="ad43611b413b1d0a625293a3ce87543dde5c1fa2";export{a as buildDate,d as commitHash};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- import e from"../../Color.js";import{bidiText as t}from"../../core/BidiText.js";import{packFloatRGBA as r}from"../../core/floatRGBA.js";import{clone as o}from"../../core/lang.js";import a from"../../core/Logger.js";import{nextPowerOfTwo as i}from"../../core/mathUtils.js";import{isSome as s}from"../../core/maybe.js";import{pt2px as n,px2pt as l}from"../../core/screenUtils.js";import{create as c,expandPointInPlace as m}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as f}from"../../geometry/support/boundsUtils.js";import{Placement as y}from"./CIMPlacements.js";import{lineGapType2LineHeight as h,horizontalAlignment2HAlign as u,verticalAlignment2VAlign as p,EnvDrawHelper as S,Transformation as M,CanvasDrawHelper as d}from"./CIMSymbolDrawHelper.js";import{getValue as b}from"./utils.js";import{C_INFINITY as g}from"../../views/2d/engine/vectorTiles/GeometryUtils.js";import{GLYPH_SIZE as C,MAGIC_LABEL_LINE_HEIGHT as I}from"../../views/2d/engine/webgl/definitions.js";import{shapeGlyphs as k}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";const x=Math.PI,w=x/2,P=4,L=10,v=96/72,F=Math.PI/180,z=a.getLogger("esri.symbols.cim.CIMSymbolHelper");function D(e){if(!e||!e.type)return null;let t;switch(e.type){case"cim":return e.data;case"web-style":return e;case"simple-marker":t=O.fromSimpleMarker(e);break;case"picture-marker":t=O.fromPictureMarker(e);break;case"simple-line":t=O.fromSimpleLineSymbol(e);break;case"simple-fill":t=O.fromSimpleFillSymbol(e);break;case"picture-fill":t=O.fromPictureFillSymbol(e);break;case"text":t=O.fromTextSymbol(e)}return{type:"CIMSymbolReference",symbol:t}}function T(e,t){switch(t.type){case"CIMSymbolReference":return T(e,t.symbol);case"CIMPointSymbol":{const r={x:0,y:0};e.drawSymbol(t,r);break}case"CIMLineSymbol":{const r={paths:[[[0,0],[0,1]]]};e.drawSymbol(t,r);break}case"CIMPolygonSymbol":{const r={rings:[[[0,0],[0,1],[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 y;e.drawMarker(t,r);break}}return e.envelope()}function G(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 A(e){if(!e)return 0;switch(e.type){case"CIMGeometricEffectArrow":return Math.abs(.5*e.width);case"CIMGeometricEffectBuffer":return Math.abs(e.size);case"CIMGeometricEffectExtension":case"CIMGeometricEffectRadial":return Math.abs(e.length);case"CIMGeometricEffectJog":return Math.abs(.5*e.length);case"CIMGeometricEffectMove":return Math.max(Math.abs(b(e.offsetX)),Math.abs(b(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)}}function E(e){if(!e)return 0;let t=0;for(const r of e)t+=A(r);return t}class N{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)}_vectorMarkerBounds(e,t,r,o){let a=!0;const i=c();if(t&&t.markerGraphics)for(const s of t.markerGraphics){const t=[0,0,0,0];s.geometry&&(f(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}_getInflateSize(e,t,r,o,a){if($(t)){const i=this._getLayersInflateSize(e,t.symbolLayers,r,o,a),s=E(t.effects);return s>0&&(i[0]-=s,i[1]-=s,i[2]+=s,i[3]+=s),i}return this._getTextInflatedSize(e,t,a)}_getLayersInflateSize(e,t,r,o,a){let i=!0;if(!t)return e;for(const n of t){if(!n)continue;let t=[0,0,0,0];switch(n.type){case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":{const e=n;let r=e.width;"Square"===e.capStyle||"Miter"===e.joinStyle?r/=1.4142135623730951:r/=2,t[0]=-r,t[1]=-r,t[2]=r,t[3]=r;break}case"CIMCharacterMarker":case"CIMVectorMarker":case"CIMPictureMarker":{const e=n;if("CIMVectorMarker"===n.type){const e=n;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;t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o;const a=e.size/(e.frame.ymax-e.frame.ymin);t[0]*=a,t[1]*=a,t[2]*=a,t[3]*=a}}else if("CIMPictureMarker"===n.type){const o=n,a=r.getResource(o.url);let i=1;s(a)&&a.height&&(i=a.width/a.height);const l=e.size/2,c=e.size*i*o.scaleX/2;t=[-c,-l,c,l]}else{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])),t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o}let i=b(e.rotation);if(e.rotateClockwise&&(i=-i),o&&(i-=o),i){const e=F*i,r=Math.cos(e),o=Math.sin(e),a=c([g,g,-g,-g]);m(a,[t[0]*r-t[1]*o,t[0]*o+t[1]*r]),m(a,[t[0]*r-t[3]*o,t[0]*o+t[3]*r]),m(a,[t[2]*r-t[1]*o,t[2]*o+t[1]*r]),m(a,[t[2]*r-t[3]*o,t[2]*o+t[3]*r]),t=a}let l=b(e.offsetX),f=b(e.offsetY);if(o){const e=F*o,t=Math.cos(e),r=Math.sin(e),a=l*r+f*t;l=l*t-f*r,f=a}t[0]+=l,t[1]+=f,t[2]+=l,t[3]+=f;const y=G(e.markerPlacement);y>0&&(t[0]-=y,t[1]-=y,t[2]+=y,t[3]+=y);break}}const l=E(n.effects);l>0&&(t[0]-=l,t[1]-=l,t[2]+=l,t[3]+=l),i?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],i=!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}_getTextInflatedSize(e,r,o){var a,i;const s=null!=(a=r.height)?a:L;if(e[0]=-s/2,e[1]=-s/2,e[2]=s/2,e[3]=s/2,!o)return e;const n=o.get(r);if(!n)return e;const{text:l,mosaicItem:c}=n;if(!c||0===c.glyphMosaicItems.length)return e;const m=h(r.lineGapType,null!=(i=r.lineGap)?i:0,s),f=t(l)[1],y=c.glyphMosaicItems,S=k(y,f,{scale:s/C,angle:b(r.angle),xOffset:b(r.offsetX),yOffset:b(r.offsetY),hAlign:u(r.horizontalAlignment),vAlign:p(r.verticalAlignment),maxLineWidth:512,lineHeight:I*Math.max(.25,Math.min(m||1,4)),decoration:r.font.decoration||"none",isCIM:!0}).boundsT;return e[0]=S.x-S.halfWidth,e[1]=-S.y-S.halfHeight,e[2]=S.x+S.halfWidth,e[3]=-S.y+S.halfHeight,e}}class O{static getEnvelope(e,t){const r=new S(t);if(Array.isArray(e)){let t;for(const o of e)t?t.union(T(r,o)):t=T(r,o);return t}return T(r,e)}static getTextureAnchor(e,t){const r=this.getEnvelope(e,t);if(!r)return[0,0,0];const o=(r.x+.5*r.width)*v,a=-(r.y+.5*r.height)*v,i=r.width*v+2,s=r.height*v+2;return[o/i,a/s,s]}static rasterize(e,t,r,o,a=!0){const i=r||this.getEnvelope(t,o);if(!i)return[null,0,0,0,0];const s=(i.x+.5*i.width)*v,n=(i.y+.5*i.height)*v;e.width=i.width*v,e.height=i.height*v,r||(e.width+=2,e.height+=2);const l=e.getContext("2d"),c=M.createScale(v,-v);c.translate(.5*e.width-s,.5*e.height+n);const m=new d(l,o,c);switch(t.type){case"CIMPointSymbol":{const e={type:"point",x:0,y:0};m.drawSymbol(t,e);break}case"CIMVectorMarker":{const e=new y;m.drawMarker(t,e);break}}const f=l.getImageData(0,0,e.width,e.height),h=new Uint8Array(f.data);if(a){let e;for(let t=0;t<h.length;t+=4)e=h[t+3]/255,h[t]=h[t]*e,h[t+1]=h[t+1]*e,h[t+2]=h[t+2]*e}return[h,e.width,e.height,-s/e.width,-n/e.height]}static fromTextSymbol(e){const{angle:r,color:o,font:a,haloColor:i,haloSize:s,horizontalAlignment:n,kerning:l,text:c,verticalAlignment:m,xoffset:f,yoffset:y}=e;let h,u,p,S,M;a&&(h=a.family,u=a.style,p=a.weight,S=a.size,M=a.decoration);let d=!1;if(c){d=t(c)[1]}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:{type:"CIMTextSymbol",angle:r,blockProgression:2,depth3D:1,extrapolateBaselines:!0,fontEffects:0,fontEncoding:1,fontFamilyName:h||"Tahoma",fontStyleName:H(u,p),fontType:0,haloSize:s,height:S,hinting:1,horizontalAlignment:X(null!=n?n:"center"),kerning:l,letterWidth:100,ligatures:!0,lineGapType:"Multiple",offsetX:b(f),offsetY:b(y),strikethrough:"line-through"===M,underline:"underline"===M,symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:_(o)}]},haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:_(i)}]},shadowColor:[0,0,0,255],shadowOffsetX:1,shadowOffsetY:1,textCase:"Normal",textDirection:d?1:0,verticalAlignment:Y(null!=m?m:"baseline"),verticalGlyphOrientation:0,wordSpacing:100,billboardMode3D:2},textString:c}],scaleSymbolsProportionally:!0,respectFrame:!0}],scaleX:1,angleAlignment:"Display"}}static fromPictureFillSymbol(e){const{height:t,outline:r,width:o,xoffset:a,xscale:i,yoffset:s,yscale:n}=e,l=[],c={type:"CIMPolygonSymbol",symbolLayers:l};if(r){const{cap:e,join:t,miterLimit:o,width:a}=r;l.push({type:"CIMSolidStroke",color:_(r.color),capStyle:V(e),joinStyle:B(t),miterLimit:o,width:a})}let m=e.url;"esriPFS"===e.type&&e.imageData&&(m=e.imageData);const f="angle"in e?e.angle:0,y=o*(i||1),h=t*(n||1);return l.push({type:"CIMPictureFill",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:m,height:h,width:y,offsetX:b(a),offsetY:b(s),rotation:b(-f),colorSubstitutions:null}),c}static fromSimpleFillSymbol(e){const{color:t,style:r,outline:a}=e,s=[],n={type:"CIMPolygonSymbol",symbolLayers:s};let l=null;if(a){const{cap:e,join:t,style:r}=a;"solid"!==r&&"none"!==r&&"esriSLSSolid"!==r&&"esriSLSNull"!==r&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:W(r,e),lineDashEnding:"NoConstraint",scaleDash:!0}]),s.push({type:"CIMSolidStroke",color:_(a.color),capStyle:V(e),joinStyle:B(t),miterLimit:a.miterLimit,width:a.width,effects:l})}if(r&&"solid"!==r&&"none"!==r&&"esriSFSSolid"!==r&&"esriSFSNull"!==r){const e={type:"CIMLineSymbol",symbolLayers:[{type:"CIMSolidStroke",color:_(t),capStyle:"Butt",joinStyle:"Miter",width:.75}]};let a=0;const n=i(Math.ceil(window.devicePixelRatio)),l=K(r)?8*n:10*n;switch(r){case"vertical":case"esriSFSVertical":a=90;break;case"forward-diagonal":case"esriSFSForwardDiagonal":case"diagonal-cross":case"esriSFSDiagonalCross":a=-45;break;case"backward-diagonal":case"esriSFSBackwardDiagonal":a=45;break;case"cross":case"esriSFSCross":a=0}s.push({type:"CIMHatchFill",lineSymbol:e,offsetX:0,offsetY:0,rotation:a,separation:l}),"cross"===r||"esriSFSCross"===r?s.push({type:"CIMHatchFill",lineSymbol:o(e),offsetX:0,offsetY:0,rotation:90,separation:l}):"diagonal-cross"!==r&&"esriSFSDiagonalCross"!==r||s.push({type:"CIMHatchFill",lineSymbol:o(e),offsetX:0,offsetY:0,rotation:45,separation:l})}else!r||"solid"!==r&&"esriSFSSolid"!==r||s.push({type:"CIMSolidFill",enable:!0,color:_(t)});return n}static fromSimpleLineSymbol(e){const{cap:t,color:r,join:o,marker:a,miterLimit:i,style:s,width:n}=e;let l=null;"solid"!==s&&"none"!==s&&"esriSLSSolid"!==s&&"esriSLSNull"!==s&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:W(s,t),lineDashEnding:"NoConstraint",scaleDash:!0}]);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=O.fromSimpleMarker(a,n,r).symbolLayers[0];t.markerPlacement={type:"CIMMarkerPlacementAtExtremities",angleToLine:!0,offset:0,extremityPlacement:e,offsetAlongLine:0},c.push(t)}return"none"!==s&&"esriSLSNull"!==s&&c.push({type:"CIMSolidStroke",color:_(r),capStyle:V(t),joinStyle:B(o),miterLimit:i,width:n,effects:l}),{type:"CIMLineSymbol",symbolLayers:c}}static fromPictureMarker(e){const{angle:t,height:r,width:o,xoffset:a,yoffset:i}=e;let s=e.url;return"esriPMS"===e.type&&e.imageData&&(s=e.imageData),{type:"CIMPointSymbol",symbolLayers:[{type:"CIMPictureMarker",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:s,size:r,width:o,offsetX:b(a),offsetY:b(i),rotation:b(-t)}]}}static fromSimpleMarker(e,t,r){var o;const{style:a}=e,i=null!=(o=e.color)?o:r;if("path"===a){const t=[];if("outline"in e&&e.outline){const r=e.outline;t.push({type:"CIMSolidStroke",enable:!0,width:n(Math.round(l(r.width))),color:_(r.color)})}t.push({type:"CIMSolidFill",enable:!0,color:_(i),path:e.path});const[r,o]=J("square");return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:b(-e.angle),size:b(e.size||6),offsetX:b(e.xoffset),offsetY:b(e.yoffset),frame:r,markerGraphics:[{type:"CIMMarkerGraphic",geometry:o,symbol:{type:"CIMPolygonSymbol",symbolLayers:t}}]}]}}const[s,c]=J(a);let m;if(c&&s){const r=[];if("outline"in e&&e.outline){const t=e.outline;r.push({type:"CIMSolidStroke",enable:!0,width:n(Math.round(l(t.width))),color:_(t.color)})}else!t||"line-marker"!==e.type||"cross"!==e.style&&"x"!==e.style||r.push({type:"CIMSolidStroke",enable:!0,width:t,color:_(i)});r.push({type:"CIMSolidFill",enable:!0,color:_(i)});const o={type:"CIMPolygonSymbol",symbolLayers:r};m={type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:b(-e.angle),size:b(e.size||6*t),offsetX:b(e.xoffset),offsetY:b(e.yoffset),frame:s,markerGraphics:[{type:"CIMMarkerGraphic",geometry:c,symbol:o}]}]}}return m}static fromCIMHatchFill(e){var t;const r=null!=(t=e.separation)?t:P,o=r/2,a=4;let i=this._getLineSymbolPeriod(e.lineSymbol)||a;for(;i<a;)i*=2;const s=i/2;return{type:"CIMVectorMarker",frame:{xmin:-s,xmax:s,ymin:-o,ymax:o},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{paths:[[[-s,0],[s,0]]]},symbol:e.lineSymbol}],size:r}}static _getLineSymbolPeriod(e){if(e){const t=this._getEffectsRepeat(e.effects);if(t)return t;if(e.symbolLayers)for(const r of e.symbolLayers){const e=this._getEffectsRepeat(r.effects);if(e)return e;if(r){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:z.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={type:e.type,...e};let o,a,i,s;if(r.markerPlacement=null,r.anchorPoint=null,!0===t.shiftOddRows){a=t.stepX/2,i=t.stepY,s=2*t.stepY;o=[{x:-a,y:0},{x:a,y:0},{x:0,y:i},{x:0,y:-i}].map((e=>({type:"CIMMarkerGraphic",geometry:e,symbol:{type:"CIMPointSymbol",symbolLayers:[r]}})))}else a=t.stepX/2,i=t.stepY/2,s=t.stepY,o=[{type:"CIMMarkerGraphic",geometry:{x:0,y:0},symbol:{type:"CIMPointSymbol",symbolLayers:[r]}}];return{type:"CIMVectorMarker",frame:{xmin:-a,xmax:a,ymin:-i,ymax:i},markerGraphics:o,size:s}}static getFillColor(e){if(!e)return null;switch(e.type){case"CIMPolygonSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=O.getFillColor(t);if(null!=e)return e}break;case"CIMTextSymbol":return O.getFillColor(e.symbol);case"CIMSolidFill":return e.color}}static getStrokeColor(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=O.getStrokeColor(t);if(void 0!==e)return e}break;case"CIMTextSymbol":return O.getStrokeColor(e.symbol);case"CIMSolidStroke":return e.color}}static getStrokeWidth(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=O.getStrokeWidth(t);if(void 0!==e)return e}break;case"CIMTextSymbol":return O.getStrokeWidth(e.symbol);case"CIMSolidStroke":case"CIMGradientStroke":case"CIMPictureStroke":return e.width}}static getSize(e){if(e)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{let t=0;if(e.symbolLayers)for(const r of e.symbolLayers){const e=O.getSize(r);e>t&&(t=e)}return t}case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":return e.width;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":return e.size}}static getMarkerScaleRatio(e){if(e&&"CIMVectorMarker"===e.type)if(!1!==e.scaleSymbolsProportionally&&e.frame){const t=e.frame.ymax-e.frame.ymin;return e.size/t}return 1}}class j{static rasterizeSimpleFill(e,t,r){"solid"!==t&&"none"!==t&&"esriSFSSolid"!==t&&"esriSFSNull"!==t||console.error("Unexpected: style does not require rasterization");const o=i(Math.ceil(r)),a=K(t)?8*o:16*o,s=2*o;e.width=a,e.height=a;const n=e.getContext("2d");n.strokeStyle="#FFFFFF",n.lineWidth=o,n.beginPath(),"vertical"!==t&&"cross"!==t&&"esriSFSCross"!==t&&"esriSFSVertical"!==t||(n.moveTo(a/2,-s),n.lineTo(a/2,a+s)),"horizontal"!==t&&"cross"!==t&&"esriSFSCross"!==t&&"esriSFSHorizontal"!==t||(n.moveTo(-s,a/2),n.lineTo(a+s,a/2)),"forward-diagonal"!==t&&"diagonal-cross"!==t&&"esriSFSDiagonalCross"!==t&&"esriSFSForwardDiagonal"!==t||(n.moveTo(-s,-s),n.lineTo(a+s,a+s),n.moveTo(a-s,-s),n.lineTo(a+s,s),n.moveTo(-s,a-s),n.lineTo(s,a+s)),"backward-diagonal"!==t&&"diagonal-cross"!==t&&"esriSFSBackwardDiagonal"!==t&&"esriSFSDiagonalCross"!==t||(n.moveTo(a+s,-s),n.lineTo(-s,a+s),n.moveTo(s,-s),n.lineTo(-s,s),n.moveTo(a+s,a-s),n.lineTo(a-s,a+s)),n.stroke();const l=n.getImageData(0,0,e.width,e.height),c=new Uint8Array(l.data);let m;for(let i=0;i<c.length;i+=4)m=c[i+3]/255,c[i]=c[i]*m,c[i+1]=c[i+1]*m,c[i+2]=c[i+2]*m;return[c,e.width,e.height]}static rasterizeSimpleLine(e,t){return this.rasterizeDash(e,t)}static rasterizeDash(e,t){const o="Butt"===t,a="Square"===t,i=!o&&!a;e.length%2==1&&(e=[...e,...e]);const s=15.5,n=2*s;let l=0;for(const r of e)l+=r;const c=Math.round(l*s),m=new Float32Array(c*n),f=.5*s;let y=0,h=0,u=.5,p=!0;for(const r of e){for(y=h,h+=r*s;u<=h;){let e=.5;for(;e<n;){const t=(e-.5)*c+u-.5,r=i?(e-s)*(e-s):Math.abs(e-s);m[t]=p?o?Math.max(Math.max(y+f-u,r),Math.max(u-h+f,r)):r:i?Math.min((u-y)*(u-y)+r,(u-h)*(u-h)+r):a?Math.min(Math.max(u-y,r),Math.max(h-u,r)):Math.min(Math.max(u-y+f,r),Math.max(h+f-u,r)),e++}u++}p=!p}const S=m.length,M=new Uint8Array(4*S);for(let d=0;d<S;++d){const e=(i?Math.sqrt(m[d]):m[d])/s;r(e,M,4*d)}return[M,c,n]}}class R{static findApplicableOverrides(e,t,r){if(t){if(e.primitiveName){let o=!1;for(const t of r)if(t.primitiveName===e.primitiveName){o=!0;break}if(!o)for(const a of t)a.primitiveName===e.primitiveName&&r.push(a)}switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":if(e.effects)for(const o of e.effects)R.findApplicableOverrides(o,t,r);if(e.symbolLayers)for(const o of e.symbolLayers)R.findApplicableOverrides(o,t,r);break;case"CIMTextSymbol":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":case"CIMVectorMarker":case"CIMCharacterMarker":case"CIMPictureMarker":if(e.effects)for(const o of e.effects)R.findApplicableOverrides(o,t,r);if(e.markerPlacement&&R.findApplicableOverrides(e.markerPlacement,t,r),"CIMVectorMarker"===e.type){if(e.markerGraphics)for(const o of e.markerGraphics)R.findApplicableOverrides(o,t,r),R.findApplicableOverrides(o.symbol,t,r)}else"CIMCharacterMarker"===e.type?R.findApplicableOverrides(e.symbol,t,r):"CIMHatchFill"===e.type&&R.findApplicableOverrides(e.lineSymbol,t,r)}}}static applyOverrides(e,t,r,o){if(!t)return;const a=e=>e?e.charAt(0).toLowerCase()+e.substr(1):e;if(e.primitiveName)for(const i of t)if(i.primitiveName===e.primitiveName){const t=a(i.propertyName);if(o&&o.push({cim:e,nocapPropertyName:t,value:e[t]}),i.expression&&(i.value=R.toValue(i.propertyName,i.expression)),r){let t=!1;for(const o of r)o.primitiveName===e.primitiveName&&(t=!0);t||r.push(i)}e[t]=i.value}switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":if(e.effects)for(const a of e.effects)R.applyOverrides(a,t,r,o);if(e.symbolLayers)for(const a of e.symbolLayers)R.applyOverrides(a,t,r,o);break;case"CIMTextSymbol":break;case"CIMSolidStroke":case"CIMSolidFill":case"CIMVectorMarker":if(e.effects)for(const a of e.effects)R.applyOverrides(a,t,r,o);if("CIMVectorMarker"===e.type&&e.markerGraphics)for(const a of e.markerGraphics)R.applyOverrides(a,t,r,o),R.applyOverrides(a.symbol,t,r,o)}}static restoreOverrides(e){for(const t of e)t.cim[t.nocapPropertyName]=t.value}static buildOverrideKey(e){let t="";for(const r of e)void 0!==r.value&&(t+=`${r.primitiveName}${r.propertyName}${JSON.stringify(r.value)}`);return t}static toValue(t,r){if("DashTemplate"===t)return r.split(" ").map((e=>Number(e)));if("Color"===t){const t=new e(r).toRgba();return t[3]*=255,t}return r}}const V=e=>{if(!e)return"Butt";switch(e){case"butt":return"Butt";case"square":return"Square";case"round":return"Round"}},B=e=>{if(!e)return"Miter";switch(e){case"miter":return"Miter";case"round":return"Round";case"bevel":return"Bevel"}},X=e=>{if(!e)return"Center";switch(e){case"left":return"Left";case"right":return"Right";case"center":return"Center";case"justify":return"Justify"}},Y=e=>{if(!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]},H=(e,t)=>{const r=U(t),o=q(e);return r&&o?`${r}-${o}`:`${r}${o}`},U=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""},W=(e,t)=>{const r="butt"===t;switch(e){case"dash":case"esriSLSDash":return r?[4,3]:[3,4];case"dash-dot":case"esriSLSDashDot":return r?[4,3,1,3]:[3,4,0,4];case"dot":case"esriSLSDot":return r?[1,3]:[0,4];case"long-dash":case"esriSLSLongDash":return r?[8,3]:[7,4];case"long-dash-dot":case"esriSLSLongDashDot":return r?[8,3,1,3]:[7,4,0,4];case"long-dash-dot-dot":case"esriSLSDashDotDot":return r?[8,3,1,3,1,3]:[7,4,0,4,0,4];case"short-dash":case"esriSLSShortDash":return r?[4,1]:[3,2];case"short-dash-dot":case"esriSLSShortDashDot":return r?[4,1,1,1]:[3,2,0,2];case"short-dash-dot-dot":case"esriSLSShortDashDotDot":return r?[4,1,1,1,1,1]:[3,2,0,2,0,2];case"short-dot":case"esriSLSShortDot":return r?[1,1]:[0,2];case"solid":case"esriSLSSolid":case"none":return z.error("Unexpected: style does not require rasterization"),[0,0];default:return z.error(`Tried to rasterize SLS, but found an unexpected style: ${e}!`),[0,0]}};function $(e){return void 0!==e.symbolLayers}const J=e=>{const t=100,r=50;let o,a;const i=e;if("circle"===i||"esriSMSCircle"===i){const e=.25;let t=Math.acos(1-e/r),i=Math.ceil(x/t/4);0===i&&(i=1),t=w/i,i*=4;const s=[];s.push([r,0]);for(let o=1;o<i;o++)s.push([r*Math.cos(o*t),-r*Math.sin(o*t)]);s.push([r,0]),o={rings:[s]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("cross"===i||"esriSMSCross"===i){const e=0;o={rings:[[[e,r],[e,e],[r,e],[r,-e],[e,-e],[e,-r],[-e,-r],[-e,-e],[-r,-e],[-r,e],[-e,e],[-e,r],[e,r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("diamond"===i||"esriSMSDiamond"===i)o={rings:[[[-r,0],[0,r],[r,0],[0,-r],[-r,0]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("square"===i||"esriSMSSquare"===i)o={rings:[[[-r,-r],[-r,r],[r,r],[r,-r],[-r,-r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("x"===i||"esriSMSX"===i){const e=0;o={rings:[[[0,e],[r-e,r],[r,r-e],[e,0],[r,e-r],[r-e,-r],[0,-e],[e-r,-r],[-r,e-r],[-e,0],[-r,r-e],[e-r,r],[0,e]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("triangle"===i||"esriSMSTriangle"===i){const e=t*.5773502691896257,r=-e,i=2/3*t,s=i-t;o={rings:[[[r,s],[0,i],[e,s],[r,s]]]},a={xmin:r,ymin:s,xmax:e,ymax:i}}else"arrow"===i&&(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]},K=e=>"vertical"===e||"horizontal"===e||"cross"===e||"esriSFSCross"===e||"esriSFSVertical"===e||"esriSFSHorizontal"===e;export{N as CIMSimbolInflatedSizeHelper,O as CIMSymbolHelper,R as OverrideHelper,j as SymbolHelper,W as slsDashToTemplateArray,D as symbolToCIM};
5
+ import e from"../../Color.js";import{bidiText as t}from"../../core/BidiText.js";import{packFloatRGBA as r}from"../../core/floatRGBA.js";import{clone as o}from"../../core/lang.js";import a from"../../core/Logger.js";import{nextPowerOfTwo as i}from"../../core/mathUtils.js";import{isSome as s}from"../../core/maybe.js";import{pt2px as n,px2pt as l}from"../../core/screenUtils.js";import{create as c,expandPointInPlace as m}from"../../geometry/support/aaBoundingRect.js";import{getBoundsXY as f}from"../../geometry/support/boundsUtils.js";import{Placement as y}from"./CIMPlacements.js";import{lineGapType2LineHeight as h,horizontalAlignment2HAlign as u,verticalAlignment2VAlign as p,EnvDrawHelper as S,Transformation as M,CanvasDrawHelper as d}from"./CIMSymbolDrawHelper.js";import{getValue as b}from"./utils.js";import{C_INFINITY as g}from"../../views/2d/engine/vectorTiles/GeometryUtils.js";import{GLYPH_SIZE as C,MAGIC_LABEL_LINE_HEIGHT as I}from"../../views/2d/engine/webgl/definitions.js";import{shapeGlyphs as k}from"../../views/2d/engine/webgl/mesh/templates/shapingUtils.js";const x=Math.PI,w=x/2,P=4,L=10,v=96/72,F=Math.PI/180,z=a.getLogger("esri.symbols.cim.CIMSymbolHelper");function D(e){if(!e||!e.type)return null;let t;switch(e.type){case"cim":return e.data;case"web-style":return e;case"simple-marker":t=O.fromSimpleMarker(e);break;case"picture-marker":t=O.fromPictureMarker(e);break;case"simple-line":t=O.fromSimpleLineSymbol(e);break;case"simple-fill":t=O.fromSimpleFillSymbol(e);break;case"picture-fill":t=O.fromPictureFillSymbol(e);break;case"text":t=O.fromTextSymbol(e)}return{type:"CIMSymbolReference",symbol:t}}function T(e,t){switch(t.type){case"CIMSymbolReference":return T(e,t.symbol);case"CIMPointSymbol":{const r={x:0,y:0};e.drawSymbol(t,r);break}case"CIMLineSymbol":{const r={paths:[[[0,0],[0,1]]]};e.drawSymbol(t,r);break}case"CIMPolygonSymbol":{const r={rings:[[[0,0],[0,1],[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 y;e.drawMarker(t,r);break}}return e.envelope()}function G(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 A(e){if(!e)return 0;switch(e.type){case"CIMGeometricEffectArrow":return Math.abs(.5*e.width);case"CIMGeometricEffectBuffer":return Math.abs(e.size);case"CIMGeometricEffectExtension":case"CIMGeometricEffectRadial":return Math.abs(e.length);case"CIMGeometricEffectJog":return Math.abs(.5*e.length);case"CIMGeometricEffectMove":return Math.max(Math.abs(b(e.offsetX)),Math.abs(b(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)}}function E(e){if(!e)return 0;let t=0;for(const r of e)t+=A(r);return t}class N{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)}_vectorMarkerBounds(e,t,r,o){let a=!0;const i=c();if(t&&t.markerGraphics)for(const s of t.markerGraphics){const t=[0,0,0,0];s.geometry&&(f(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}_getInflateSize(e,t,r,o,a){if($(t)){const i=this._getLayersInflateSize(e,t.symbolLayers,r,o,a),s=E(t.effects);return s>0&&(i[0]-=s,i[1]-=s,i[2]+=s,i[3]+=s),i}return this._getTextInflatedSize(e,t,a)}_getLayersInflateSize(e,t,r,o,a){let i=!0;if(!t)return e;for(const n of t){if(!n)continue;let t=[0,0,0,0];switch(n.type){case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":{const e=n;let r=e.width;"Square"===e.capStyle||"Miter"===e.joinStyle?r/=1.4142135623730951:r/=2,t[0]=-r,t[1]=-r,t[2]=r,t[3]=r;break}case"CIMCharacterMarker":case"CIMVectorMarker":case"CIMPictureMarker":{const e=n;if("CIMVectorMarker"===n.type){const e=n;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;t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o;const a=e.size/(e.frame.ymax-e.frame.ymin);t[0]*=a,t[1]*=a,t[2]*=a,t[3]*=a}}else if("CIMPictureMarker"===n.type){const o=n,a=r.getResource(o.url);let i=1;s(a)&&a.height&&(i=a.width/a.height);const l=e.size/2,c=e.size*i*o.scaleX/2;t=[-c,-l,c,l]}else{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])),t[0]-=r,t[1]-=o,t[2]-=r,t[3]-=o}let i=b(e.rotation);if(e.rotateClockwise&&(i=-i),o&&(i-=o),i){const e=F*i,r=Math.cos(e),o=Math.sin(e),a=c([g,g,-g,-g]);m(a,[t[0]*r-t[1]*o,t[0]*o+t[1]*r]),m(a,[t[0]*r-t[3]*o,t[0]*o+t[3]*r]),m(a,[t[2]*r-t[1]*o,t[2]*o+t[1]*r]),m(a,[t[2]*r-t[3]*o,t[2]*o+t[3]*r]),t=a}let l=b(e.offsetX),f=b(e.offsetY);if(o){const e=F*o,t=Math.cos(e),r=Math.sin(e),a=l*r+f*t;l=l*t-f*r,f=a}t[0]+=l,t[1]+=f,t[2]+=l,t[3]+=f;const y=G(e.markerPlacement);y>0&&(t[0]-=y,t[1]-=y,t[2]+=y,t[3]+=y);break}}const l=E(n.effects);l>0&&(t[0]-=l,t[1]-=l,t[2]+=l,t[3]+=l),i?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],i=!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}_getTextInflatedSize(e,r,o){var a,i;const s=null!=(a=r.height)?a:L;if(e[0]=-s/2,e[1]=-s/2,e[2]=s/2,e[3]=s/2,!o)return e;const n=o.get(r);if(!n)return e;const{text:l,mosaicItem:c}=n;if(!c||0===c.glyphMosaicItems.length)return e;const m=h(r.lineGapType,null!=(i=r.lineGap)?i:0,s),f=t(l)[1],y=c.glyphMosaicItems,S=k(y,f,{scale:s/C,angle:b(r.angle),xOffset:b(r.offsetX),yOffset:b(r.offsetY),hAlign:u(r.horizontalAlignment),vAlign:p(r.verticalAlignment),maxLineWidth:512,lineHeight:I*Math.max(.25,Math.min(m||1,4)),decoration:r.font.decoration||"none",isCIM:!0}).boundsT;return e[0]=S.x-S.halfWidth,e[1]=-S.y-S.halfHeight,e[2]=S.x+S.halfWidth,e[3]=-S.y+S.halfHeight,e}}class O{static getEnvelope(e,t){const r=new S(t);if(Array.isArray(e)){let t;for(const o of e)t?t.union(T(r,o)):t=T(r,o);return t}return T(r,e)}static getTextureAnchor(e,t){const r=this.getEnvelope(e,t);if(!r)return[0,0,0];const o=(r.x+.5*r.width)*v,a=-(r.y+.5*r.height)*v,i=r.width*v+2,s=r.height*v+2;return[o/i,a/s,s]}static rasterize(e,t,r,o,a=!0){const i=r||this.getEnvelope(t,o);if(!i)return[null,0,0,0,0];const s=(i.x+.5*i.width)*v,n=(i.y+.5*i.height)*v;e.width=i.width*v,e.height=i.height*v,r||(e.width+=2,e.height+=2);const l=e.getContext("2d"),c=M.createScale(v,-v);c.translate(.5*e.width-s,.5*e.height+n);const m=new d(l,o,c);switch(t.type){case"CIMPointSymbol":{const e={type:"point",x:0,y:0};m.drawSymbol(t,e);break}case"CIMVectorMarker":{const e=new y;m.drawMarker(t,e);break}}const f=l.getImageData(0,0,e.width,e.height),h=new Uint8Array(f.data);if(a){let e;for(let t=0;t<h.length;t+=4)e=h[t+3]/255,h[t]=h[t]*e,h[t+1]=h[t+1]*e,h[t+2]=h[t+2]*e}return[h,e.width,e.height,-s/e.width,-n/e.height]}static fromTextSymbol(e){const{angle:r,color:o,font:a,haloColor:i,haloSize:s,horizontalAlignment:n,kerning:l,text:c,verticalAlignment:m,xoffset:f,yoffset:y}=e;let h,u,p,S,M;a&&(h=a.family,u=a.style,p=a.weight,S=a.size,M=a.decoration);let d=!1;if(c){d=t(c)[1]}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:{type:"CIMTextSymbol",angle:r,blockProgression:2,depth3D:1,extrapolateBaselines:!0,fontEffects:0,fontEncoding:1,fontFamilyName:h||"Arial",fontStyleName:H(u,p),fontType:0,haloSize:s,height:S,hinting:1,horizontalAlignment:X(null!=n?n:"center"),kerning:l,letterWidth:100,ligatures:!0,lineGapType:"Multiple",offsetX:b(f),offsetY:b(y),strikethrough:"line-through"===M,underline:"underline"===M,symbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:_(o)}]},haloSymbol:{type:"CIMPolygonSymbol",symbolLayers:[{type:"CIMSolidFill",enable:!0,color:_(i)}]},shadowColor:[0,0,0,255],shadowOffsetX:1,shadowOffsetY:1,textCase:"Normal",textDirection:d?1:0,verticalAlignment:Y(null!=m?m:"baseline"),verticalGlyphOrientation:0,wordSpacing:100,billboardMode3D:2},textString:c}],scaleSymbolsProportionally:!0,respectFrame:!0}],scaleX:1,angleAlignment:"Display"}}static fromPictureFillSymbol(e){const{height:t,outline:r,width:o,xoffset:a,xscale:i,yoffset:s,yscale:n}=e,l=[],c={type:"CIMPolygonSymbol",symbolLayers:l};if(r){const{cap:e,join:t,miterLimit:o,width:a}=r;l.push({type:"CIMSolidStroke",color:_(r.color),capStyle:V(e),joinStyle:B(t),miterLimit:o,width:a})}let m=e.url;"esriPFS"===e.type&&e.imageData&&(m=e.imageData);const f="angle"in e?e.angle:0,y=o*(i||1),h=t*(n||1);return l.push({type:"CIMPictureFill",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:m,height:h,width:y,offsetX:b(a),offsetY:b(s),rotation:b(-f),colorSubstitutions:null}),c}static fromSimpleFillSymbol(e){const{color:t,style:r,outline:a}=e,s=[],n={type:"CIMPolygonSymbol",symbolLayers:s};let l=null;if(a){const{cap:e,join:t,style:r}=a;"solid"!==r&&"none"!==r&&"esriSLSSolid"!==r&&"esriSLSNull"!==r&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:W(r,e),lineDashEnding:"NoConstraint",scaleDash:!0}]),s.push({type:"CIMSolidStroke",color:_(a.color),capStyle:V(e),joinStyle:B(t),miterLimit:a.miterLimit,width:a.width,effects:l})}if(r&&"solid"!==r&&"none"!==r&&"esriSFSSolid"!==r&&"esriSFSNull"!==r){const e={type:"CIMLineSymbol",symbolLayers:[{type:"CIMSolidStroke",color:_(t),capStyle:"Butt",joinStyle:"Miter",width:.75}]};let a=0;const n=i(Math.ceil(window.devicePixelRatio)),l=K(r)?8*n:10*n;switch(r){case"vertical":case"esriSFSVertical":a=90;break;case"forward-diagonal":case"esriSFSForwardDiagonal":case"diagonal-cross":case"esriSFSDiagonalCross":a=-45;break;case"backward-diagonal":case"esriSFSBackwardDiagonal":a=45;break;case"cross":case"esriSFSCross":a=0}s.push({type:"CIMHatchFill",lineSymbol:e,offsetX:0,offsetY:0,rotation:a,separation:l}),"cross"===r||"esriSFSCross"===r?s.push({type:"CIMHatchFill",lineSymbol:o(e),offsetX:0,offsetY:0,rotation:90,separation:l}):"diagonal-cross"!==r&&"esriSFSDiagonalCross"!==r||s.push({type:"CIMHatchFill",lineSymbol:o(e),offsetX:0,offsetY:0,rotation:45,separation:l})}else!r||"solid"!==r&&"esriSFSSolid"!==r||s.push({type:"CIMSolidFill",enable:!0,color:_(t)});return n}static fromSimpleLineSymbol(e){const{cap:t,color:r,join:o,marker:a,miterLimit:i,style:s,width:n}=e;let l=null;"solid"!==s&&"none"!==s&&"esriSLSSolid"!==s&&"esriSLSNull"!==s&&(l=[{type:"CIMGeometricEffectDashes",dashTemplate:W(s,t),lineDashEnding:"NoConstraint",scaleDash:!0}]);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=O.fromSimpleMarker(a,n,r).symbolLayers[0];t.markerPlacement={type:"CIMMarkerPlacementAtExtremities",angleToLine:!0,offset:0,extremityPlacement:e,offsetAlongLine:0},c.push(t)}return"none"!==s&&"esriSLSNull"!==s&&c.push({type:"CIMSolidStroke",color:_(r),capStyle:V(t),joinStyle:B(o),miterLimit:i,width:n,effects:l}),{type:"CIMLineSymbol",symbolLayers:c}}static fromPictureMarker(e){const{angle:t,height:r,width:o,xoffset:a,yoffset:i}=e;let s=e.url;return"esriPMS"===e.type&&e.imageData&&(s=e.imageData),{type:"CIMPointSymbol",symbolLayers:[{type:"CIMPictureMarker",invertBackfaceTexture:!1,scaleX:1,textureFilter:"Picture",tintColor:null,url:s,size:r,width:o,offsetX:b(a),offsetY:b(i),rotation:b(-t)}]}}static fromSimpleMarker(e,t,r){var o;const{style:a}=e,i=null!=(o=e.color)?o:r;if("path"===a){const t=[];if("outline"in e&&e.outline){const r=e.outline;t.push({type:"CIMSolidStroke",enable:!0,width:n(Math.round(l(r.width))),color:_(r.color)})}t.push({type:"CIMSolidFill",enable:!0,color:_(i),path:e.path});const[r,o]=J("square");return{type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:b(-e.angle),size:b(e.size||6),offsetX:b(e.xoffset),offsetY:b(e.yoffset),frame:r,markerGraphics:[{type:"CIMMarkerGraphic",geometry:o,symbol:{type:"CIMPolygonSymbol",symbolLayers:t}}]}]}}const[s,c]=J(a);let m;if(c&&s){const r=[];if("outline"in e&&e.outline){const t=e.outline;r.push({type:"CIMSolidStroke",enable:!0,width:n(Math.round(l(t.width))),color:_(t.color)})}else!t||"line-marker"!==e.type||"cross"!==e.style&&"x"!==e.style||r.push({type:"CIMSolidStroke",enable:!0,width:t,color:_(i)});r.push({type:"CIMSolidFill",enable:!0,color:_(i)});const o={type:"CIMPolygonSymbol",symbolLayers:r};m={type:"CIMPointSymbol",symbolLayers:[{type:"CIMVectorMarker",enable:!0,rotation:b(-e.angle),size:b(e.size||6*t),offsetX:b(e.xoffset),offsetY:b(e.yoffset),frame:s,markerGraphics:[{type:"CIMMarkerGraphic",geometry:c,symbol:o}]}]}}return m}static fromCIMHatchFill(e){var t;const r=null!=(t=e.separation)?t:P,o=r/2,a=4;let i=this._getLineSymbolPeriod(e.lineSymbol)||a;for(;i<a;)i*=2;const s=i/2;return{type:"CIMVectorMarker",frame:{xmin:-s,xmax:s,ymin:-o,ymax:o},markerGraphics:[{type:"CIMMarkerGraphic",geometry:{paths:[[[-s,0],[s,0]]]},symbol:e.lineSymbol}],size:r}}static _getLineSymbolPeriod(e){if(e){const t=this._getEffectsRepeat(e.effects);if(t)return t;if(e.symbolLayers)for(const r of e.symbolLayers){const e=this._getEffectsRepeat(r.effects);if(e)return e;if(r){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:z.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={type:e.type,...e};let o,a,i,s;if(r.markerPlacement=null,r.anchorPoint=null,!0===t.shiftOddRows){a=t.stepX/2,i=t.stepY,s=2*t.stepY;o=[{x:-a,y:0},{x:a,y:0},{x:0,y:i},{x:0,y:-i}].map((e=>({type:"CIMMarkerGraphic",geometry:e,symbol:{type:"CIMPointSymbol",symbolLayers:[r]}})))}else a=t.stepX/2,i=t.stepY/2,s=t.stepY,o=[{type:"CIMMarkerGraphic",geometry:{x:0,y:0},symbol:{type:"CIMPointSymbol",symbolLayers:[r]}}];return{type:"CIMVectorMarker",frame:{xmin:-a,xmax:a,ymin:-i,ymax:i},markerGraphics:o,size:s}}static getFillColor(e){if(!e)return null;switch(e.type){case"CIMPolygonSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=O.getFillColor(t);if(null!=e)return e}break;case"CIMTextSymbol":return O.getFillColor(e.symbol);case"CIMSolidFill":return e.color}}static getStrokeColor(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=O.getStrokeColor(t);if(void 0!==e)return e}break;case"CIMTextSymbol":return O.getStrokeColor(e.symbol);case"CIMSolidStroke":return e.color}}static getStrokeWidth(e){if(e)switch(e.type){case"CIMPolygonSymbol":case"CIMLineSymbol":if(e.symbolLayers)for(const t of e.symbolLayers){const e=O.getStrokeWidth(t);if(void 0!==e)return e}break;case"CIMTextSymbol":return O.getStrokeWidth(e.symbol);case"CIMSolidStroke":case"CIMGradientStroke":case"CIMPictureStroke":return e.width}}static getSize(e){if(e)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{let t=0;if(e.symbolLayers)for(const r of e.symbolLayers){const e=O.getSize(r);e>t&&(t=e)}return t}case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":return e.width;case"CIMCharacterMarker":case"CIMPictureMarker":case"CIMVectorMarker":return e.size}}static getMarkerScaleRatio(e){if(e&&"CIMVectorMarker"===e.type)if(!1!==e.scaleSymbolsProportionally&&e.frame){const t=e.frame.ymax-e.frame.ymin;return e.size/t}return 1}}class j{static rasterizeSimpleFill(e,t,r){"solid"!==t&&"none"!==t&&"esriSFSSolid"!==t&&"esriSFSNull"!==t||console.error("Unexpected: style does not require rasterization");const o=i(Math.ceil(r)),a=K(t)?8*o:16*o,s=2*o;e.width=a,e.height=a;const n=e.getContext("2d");n.strokeStyle="#FFFFFF",n.lineWidth=o,n.beginPath(),"vertical"!==t&&"cross"!==t&&"esriSFSCross"!==t&&"esriSFSVertical"!==t||(n.moveTo(a/2,-s),n.lineTo(a/2,a+s)),"horizontal"!==t&&"cross"!==t&&"esriSFSCross"!==t&&"esriSFSHorizontal"!==t||(n.moveTo(-s,a/2),n.lineTo(a+s,a/2)),"forward-diagonal"!==t&&"diagonal-cross"!==t&&"esriSFSDiagonalCross"!==t&&"esriSFSForwardDiagonal"!==t||(n.moveTo(-s,-s),n.lineTo(a+s,a+s),n.moveTo(a-s,-s),n.lineTo(a+s,s),n.moveTo(-s,a-s),n.lineTo(s,a+s)),"backward-diagonal"!==t&&"diagonal-cross"!==t&&"esriSFSBackwardDiagonal"!==t&&"esriSFSDiagonalCross"!==t||(n.moveTo(a+s,-s),n.lineTo(-s,a+s),n.moveTo(s,-s),n.lineTo(-s,s),n.moveTo(a+s,a-s),n.lineTo(a-s,a+s)),n.stroke();const l=n.getImageData(0,0,e.width,e.height),c=new Uint8Array(l.data);let m;for(let i=0;i<c.length;i+=4)m=c[i+3]/255,c[i]=c[i]*m,c[i+1]=c[i+1]*m,c[i+2]=c[i+2]*m;return[c,e.width,e.height]}static rasterizeSimpleLine(e,t){return this.rasterizeDash(e,t)}static rasterizeDash(e,t){const o="Butt"===t,a="Square"===t,i=!o&&!a;e.length%2==1&&(e=[...e,...e]);const s=15.5,n=2*s;let l=0;for(const r of e)l+=r;const c=Math.round(l*s),m=new Float32Array(c*n),f=.5*s;let y=0,h=0,u=.5,p=!0;for(const r of e){for(y=h,h+=r*s;u<=h;){let e=.5;for(;e<n;){const t=(e-.5)*c+u-.5,r=i?(e-s)*(e-s):Math.abs(e-s);m[t]=p?o?Math.max(Math.max(y+f-u,r),Math.max(u-h+f,r)):r:i?Math.min((u-y)*(u-y)+r,(u-h)*(u-h)+r):a?Math.min(Math.max(u-y,r),Math.max(h-u,r)):Math.min(Math.max(u-y+f,r),Math.max(h+f-u,r)),e++}u++}p=!p}const S=m.length,M=new Uint8Array(4*S);for(let d=0;d<S;++d){const e=(i?Math.sqrt(m[d]):m[d])/s;r(e,M,4*d)}return[M,c,n]}}class R{static findApplicableOverrides(e,t,r){if(t){if(e.primitiveName){let o=!1;for(const t of r)if(t.primitiveName===e.primitiveName){o=!0;break}if(!o)for(const a of t)a.primitiveName===e.primitiveName&&r.push(a)}switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":if(e.effects)for(const o of e.effects)R.findApplicableOverrides(o,t,r);if(e.symbolLayers)for(const o of e.symbolLayers)R.findApplicableOverrides(o,t,r);break;case"CIMTextSymbol":break;case"CIMSolidStroke":case"CIMPictureStroke":case"CIMGradientStroke":case"CIMSolidFill":case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":case"CIMVectorMarker":case"CIMCharacterMarker":case"CIMPictureMarker":if(e.effects)for(const o of e.effects)R.findApplicableOverrides(o,t,r);if(e.markerPlacement&&R.findApplicableOverrides(e.markerPlacement,t,r),"CIMVectorMarker"===e.type){if(e.markerGraphics)for(const o of e.markerGraphics)R.findApplicableOverrides(o,t,r),R.findApplicableOverrides(o.symbol,t,r)}else"CIMCharacterMarker"===e.type?R.findApplicableOverrides(e.symbol,t,r):"CIMHatchFill"===e.type&&R.findApplicableOverrides(e.lineSymbol,t,r)}}}static applyOverrides(e,t,r,o){if(!t)return;const a=e=>e?e.charAt(0).toLowerCase()+e.substr(1):e;if(e.primitiveName)for(const i of t)if(i.primitiveName===e.primitiveName){const t=a(i.propertyName);if(o&&o.push({cim:e,nocapPropertyName:t,value:e[t]}),i.expression&&(i.value=R.toValue(i.propertyName,i.expression)),r){let t=!1;for(const o of r)o.primitiveName===e.primitiveName&&(t=!0);t||r.push(i)}e[t]=i.value}switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":if(e.effects)for(const a of e.effects)R.applyOverrides(a,t,r,o);if(e.symbolLayers)for(const a of e.symbolLayers)R.applyOverrides(a,t,r,o);break;case"CIMTextSymbol":break;case"CIMSolidStroke":case"CIMSolidFill":case"CIMVectorMarker":if(e.effects)for(const a of e.effects)R.applyOverrides(a,t,r,o);if("CIMVectorMarker"===e.type&&e.markerGraphics)for(const a of e.markerGraphics)R.applyOverrides(a,t,r,o),R.applyOverrides(a.symbol,t,r,o)}}static restoreOverrides(e){for(const t of e)t.cim[t.nocapPropertyName]=t.value}static buildOverrideKey(e){let t="";for(const r of e)void 0!==r.value&&(t+=`${r.primitiveName}${r.propertyName}${JSON.stringify(r.value)}`);return t}static toValue(t,r){if("DashTemplate"===t)return r.split(" ").map((e=>Number(e)));if("Color"===t){const t=new e(r).toRgba();return t[3]*=255,t}return r}}const V=e=>{if(!e)return"Butt";switch(e){case"butt":return"Butt";case"square":return"Square";case"round":return"Round"}},B=e=>{if(!e)return"Miter";switch(e){case"miter":return"Miter";case"round":return"Round";case"bevel":return"Bevel"}},X=e=>{if(!e)return"Center";switch(e){case"left":return"Left";case"right":return"Right";case"center":return"Center";case"justify":return"Justify"}},Y=e=>{if(!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]},H=(e,t)=>{const r=U(t),o=q(e);return r&&o?`${r}-${o}`:`${r}${o}`},U=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""},W=(e,t)=>{const r="butt"===t;switch(e){case"dash":case"esriSLSDash":return r?[4,3]:[3,4];case"dash-dot":case"esriSLSDashDot":return r?[4,3,1,3]:[3,4,0,4];case"dot":case"esriSLSDot":return r?[1,3]:[0,4];case"long-dash":case"esriSLSLongDash":return r?[8,3]:[7,4];case"long-dash-dot":case"esriSLSLongDashDot":return r?[8,3,1,3]:[7,4,0,4];case"long-dash-dot-dot":case"esriSLSDashDotDot":return r?[8,3,1,3,1,3]:[7,4,0,4,0,4];case"short-dash":case"esriSLSShortDash":return r?[4,1]:[3,2];case"short-dash-dot":case"esriSLSShortDashDot":return r?[4,1,1,1]:[3,2,0,2];case"short-dash-dot-dot":case"esriSLSShortDashDotDot":return r?[4,1,1,1,1,1]:[3,2,0,2,0,2];case"short-dot":case"esriSLSShortDot":return r?[1,1]:[0,2];case"solid":case"esriSLSSolid":case"none":return z.error("Unexpected: style does not require rasterization"),[0,0];default:return z.error(`Tried to rasterize SLS, but found an unexpected style: ${e}!`),[0,0]}};function $(e){return void 0!==e.symbolLayers}const J=e=>{const t=100,r=50;let o,a;const i=e;if("circle"===i||"esriSMSCircle"===i){const e=.25;let t=Math.acos(1-e/r),i=Math.ceil(x/t/4);0===i&&(i=1),t=w/i,i*=4;const s=[];s.push([r,0]);for(let o=1;o<i;o++)s.push([r*Math.cos(o*t),-r*Math.sin(o*t)]);s.push([r,0]),o={rings:[s]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("cross"===i||"esriSMSCross"===i){const e=0;o={rings:[[[e,r],[e,e],[r,e],[r,-e],[e,-e],[e,-r],[-e,-r],[-e,-e],[-r,-e],[-r,e],[-e,e],[-e,r],[e,r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("diamond"===i||"esriSMSDiamond"===i)o={rings:[[[-r,0],[0,r],[r,0],[0,-r],[-r,0]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("square"===i||"esriSMSSquare"===i)o={rings:[[[-r,-r],[-r,r],[r,r],[r,-r],[-r,-r]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r};else if("x"===i||"esriSMSX"===i){const e=0;o={rings:[[[0,e],[r-e,r],[r,r-e],[e,0],[r,e-r],[r-e,-r],[0,-e],[e-r,-r],[-r,e-r],[-e,0],[-r,r-e],[e-r,r],[0,e]]]},a={xmin:-r,ymin:-r,xmax:r,ymax:r}}else if("triangle"===i||"esriSMSTriangle"===i){const e=t*.5773502691896257,r=-e,i=2/3*t,s=i-t;o={rings:[[[r,s],[0,i],[e,s],[r,s]]]},a={xmin:r,ymin:s,xmax:e,ymax:i}}else"arrow"===i&&(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]},K=e=>"vertical"===e||"horizontal"===e||"cross"===e||"esriSFSCross"===e||"esriSFSVertical"===e||"esriSFSHorizontal"===e;export{N as CIMSimbolInflatedSizeHelper,O as CIMSymbolHelper,R as OverrideHelper,j as SymbolHelper,W as slsDashToTemplateArray,D as symbolToCIM};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- import e from"../../Color.js";import t from"../../core/Logger.js";import{isSome as i}from"../../core/maybe.js";import{pt2px as o}from"../../core/screenUtils.js";import{numericHash as r}from"../../core/string.js";import{createRendererExpression as n,ArcadeExpression as a}from"../../support/arcadeOnDemand.js";import{CIMSymbolHelper as l,OverrideHelper as s}from"./CIMSymbolHelper.js";import{getExtent as c,getSDFMetrics as f}from"./SDFHelper.js";import{fromCIMColor as m,getValue as p,toKebabCase as u,_adjustTextCase as h,evaluateValueOrFunction as y}from"./utils.js";import{CIMEffectHelper as g}from"./effects/CIMEffectHelper.js";import d from"../../views/2d/arcade/callExpressionWithFeature.js";const S=t.getLogger("esri.symbols.cim.cimAnalyzer");function v(e){switch(e){case"Butt":return 0;case"Square":return 2;default:return 1}}function N(e){switch(e){case"Bevel":return 0;case"Miter":return 2;default:return 1}}function b(e){switch(e){case"Left":default:return"left";case"Right":return"right";case"Center":return"center";case"Justify":return"justify"}}function k(e){switch(e){case"Top":default:return"top";case"Center":return"middle";case"Baseline":return"baseline";case"Bottom":return"bottom"}}function C(e){let t="",i="";if(e){const o=e.toLowerCase();-1!==o.indexOf("italic")?t="italic":-1!==o.indexOf("oblique")&&(t="oblique"),-1!==o.indexOf("bold")?i="bold":-1!==o.indexOf("light")&&(i="lighter")}return{style:t,weight:i}}function O(e){return e.underline?"underline":e.strikethrough?"line-through":"none"}function P(e,t,i,o){let r;e[t]?r=e[t]:(r={},e[t]=r),r[i]=o}function M(e){const t=e.markerPlacement;return t&&t.angleToLine?1:0}async function I(e,t,i,o,r){const a=null!=o?o:[];if(!e)return a;let l,s;const c={};if("CIMSymbolReference"!==e.type)return S.error("Expect cim type to be 'CIMSymbolReference'"),a;if(l=e.symbol,s=e.primitiveOverrides,s){const e=[];for(const i of s){const o=i.valueExpressionInfo;if(o&&t){const r=o.expression,a=n(r,t.spatialReference,t.fields).then((e=>{e&&P(c,i.primitiveName,i.propertyName,e)}));e.push(a)}else null!=i.value&&P(c,i.primitiveName,i.propertyName,i.value)}e.length>0&&await Promise.all(e)}const f=[];switch(K(l,i,f),f.length>0&&await Promise.all(f),l.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":L(l,s,c,t,a,i,r)}return a}function L(e,t,i,o,r,n,a){if(!e)return;const c=e.symbolLayers;if(!c)return;const f=e.effects;let m;const p=l.getSize(e);"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(m=1);let u=c.length;for(;u--;){const l=c[u];if(!l||!1===l.enable)continue;let h;f&&f.length&&(h=[...f]);const y=l.effects;y&&y.length&&(f?h.push(...y):h=[...y]);const g=[];switch(s.findApplicableOverrides(l,t,g),l.type){case"CIMSolidFill":w(l,h,i,g,o,r);break;case"CIMPictureFill":X(l,h,i,g,o,n,r);break;case"CIMHatchFill":z(l,h,i,g,o,r);break;case"CIMGradientFill":x(l,h,i,g,o,r);break;case"CIMSolidStroke":J(l,h,i,g,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMPictureStroke":H(l,h,i,g,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMGradientStroke":Y(l,h,i,g,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMCharacterMarker":if(R(l,h,i,g,o,r))break;break;case"CIMPictureMarker":if(R(l,h,i,g,o,r))break;"CIMLineSymbol"===e.type&&(m=M(l)),A(l,h,i,g,o,n,r,m,p);break;case"CIMVectorMarker":if(R(l,h,i,g,o,r))break;"CIMLineSymbol"===e.type&&(m=M(l)),$(l,h,i,g,o,r,n,m,p,a);break;default:S.error("Cannot analyze CIM layer",l.type)}}}function w(e,t,i,o,n,a){const l=e.primitiveName,s=m(e.color),[c,f]=V(o,l),p=r(JSON.stringify(e)+f).toString();a.push({type:"fill",templateHash:p,materialHash:c?()=>p:p,cim:e,materialOverrides:null,colorLocked:e.colorLocked,color:U(l,i,"Color",n,s,G),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t})}function X(e,t,o,n,a,l,s){const c=e.primitiveName,f=e.tintColor?m(e.tintColor):{r:255,g:255,b:255,a:1},[u,h]=V(n,c),y=r(JSON.stringify(e)+h).toString(),g=r(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString();let d=p(e.scaleX);if("width"in e){const t=e.width;let o=1;const r=l.getResource(e.url);i(r)&&(o=r.width/r.height),d/=o*(e.height/t)}s.push({type:"fill",templateHash:y,materialHash:u?()=>g:g,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:U(c,o,"TintColor",a,f,G),height:U(c,o,"Height",a,e.height),scaleX:U(c,o,"ScaleX",a,d),angle:U(c,o,"Rotation",a,p(e.rotation)),offsetX:U(c,o,"OffsetX",a,p(e.offsetX)),offsetY:U(c,o,"OffsetY",a,p(e.offsetY)),url:e.url})}function z(e,t,i,o,n,a){const l=["Rotation","OffsetX","OffsetY"],s=o.filter((t=>t.primitiveName!==e.primitiveName&&-1===l.indexOf(t.propertyName))),c=e.primitiveName,[f,m]=V(o,c),u=r(JSON.stringify(e)+m).toString(),h=r(`${e.separation}${JSON.stringify(e.lineSymbol)}`).toString();a.push({type:"fill",templateHash:u,materialHash:f?B(h,i,s,n):h,cim:e,materialOverrides:s,colorLocked:e.colorLocked,effects:t,color:{r:255,g:255,b:255,a:1},height:U(c,i,"Separation",n,e.separation),scaleX:1,angle:U(c,i,"Rotation",n,p(e.rotation)),offsetX:U(c,i,"OffsetX",n,p(e.offsetX)),offsetY:U(c,i,"OffsetY",n,p(e.offsetY))})}function x(e,t,i,o,n,a){const l=e.primitiveName,[s,c]=V(o,l),f=r(JSON.stringify(e)+c).toString();a.push({type:"fill",templateHash:f,materialHash:s?B(f,i,o,n):f,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},height:0,angle:0,offsetX:0,offsetY:0,scaleX:1})}function J(e,t,i,o,n,a,l,s){const c=e.primitiveName,f=m(e.color),p=void 0!==e.width?e.width:4,u=v(e.capStyle),h=N(e.joinStyle),y=e.miterLimit,[g,d]=V(o,c),S=r(JSON.stringify(e)+d).toString();let b,k;if(t&&t.length>0){const i=t[t.length-1];if("CIMGeometricEffectDashes"===i.type&&"NoConstraint"===i.lineDashEnding){const i=(t=[...e.effects]).pop();b=i.dashTemplate,k=i.scaleDash}}a.push({type:"line",templateHash:S,materialHash:g?()=>S:S,cim:e,materialOverrides:null,isOutline:l,colorLocked:e.colorLocked,effects:t,color:U(c,i,"Color",n,f,G),width:U(c,i,"Width",n,p),cap:U(c,i,"CapStyle",n,u),join:U(c,i,"JoinStyle",n,h),miterLimit:U(c,i,"MiterLimit",n,y),referenceWidth:s,zOrder:E(e.name),dashTemplate:b,scaleDash:k})}function H(e,t,i,o,n,a,l,s){const c=r(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString(),f=e.primitiveName,p=m(e.tintColor),u=void 0!==e.width?e.width:4,h=v(e.capStyle),y=N(e.joinStyle),g=e.miterLimit,[d,S]=V(o,f),b=r(JSON.stringify(e)+S).toString();a.push({type:"line",templateHash:b,materialHash:d?()=>c:c,cim:e,materialOverrides:null,isOutline:l,colorLocked:e.colorLocked,effects:t,color:U(f,i,"TintColor",n,p,G),width:U(f,i,"Width",n,u),cap:U(f,i,"CapStyle",n,h),join:U(f,i,"JoinStyle",n,y),miterLimit:U(f,i,"MiterLimit",n,g),referenceWidth:s,zOrder:E(e.name),dashTemplate:null,scaleDash:!1,url:e.url})}function Y(e,t,i,o,n,a,l,s){const c=e.primitiveName,f=void 0!==e.width?e.width:4,m=v(e.capStyle),p=N(e.joinStyle),u=e.miterLimit,[h,y]=V(o,c),g=r(JSON.stringify(e)+y).toString();a.push({type:"line",templateHash:g,materialHash:h?B(g,i,o,n):g,cim:e,materialOverrides:null,isOutline:l,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},width:U(c,i,"Width",n,f),cap:U(c,i,"CapStyle",n,m),join:U(c,i,"JoinStyle",n,p),miterLimit:U(c,i,"MiterLimit",n,u),referenceWidth:s,zOrder:E(e.name),dashTemplate:null,scaleDash:!1})}function R(e,t,i,o,n,a){const l=e.markerPlacement;if(!l||"CIMMarkerPlacementInsidePolygon"!==l.type)return!1;const s=l,c=["Rotation","OffsetX","OffsetY"],f=o.filter((t=>t.primitiveName!==e.primitiveName&&-1===c.indexOf(t.propertyName))),m="url"in e?e.url:null,[u,h]=V(o,s.primitiveName),y=r(JSON.stringify(e)+h).toString();let g=s.stepY,d=null,S=1;return l.shiftOddRows&&(g*=2,d=function(e){return e?2*e:0},S=.5),a.push({type:"fill",templateHash:y,materialHash:u?B(y,i,f,n):y,cim:e,materialOverrides:f,colorLocked:e.colorLocked,effects:t,color:{r:255,g:255,b:255,a:1},height:U(s.primitiveName,i,"StepY",n,g,d),scaleX:S,angle:U(s.primitiveName,i,"GridAngle",n,s.gridAngle),offsetX:U(s.primitiveName,i,"OffsetX",n,p(s.offsetX)),offsetY:U(s.primitiveName,i,"OffsetY",n,p(s.offsetY)),url:m}),!0}function A(e,t,o,n,a,l,s,c,f){var u;const h=e.primitiveName,y=p(e.size);let g=p(e.scaleX);const d=p(e.rotation),S=p(e.offsetX),v=p(e.offsetY),N=e.tintColor?m(e.tintColor):{r:255,g:255,b:255,a:1},b=r(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString(),[k,C]=V(n,h),O=r(JSON.stringify(e)+C).toString(),P=null!=(u=e.anchorPoint)?u:{x:0,y:0};if("width"in e){const t=e.width;let o=1;const r=l.getResource(e.url);i(r)&&(o=r.width/r.height),g/=o*(y/t)}s.push({type:"marker",templateHash:O,materialHash:k?()=>b:b,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:!1,alignment:c,size:U(h,o,"Size",a,y),scaleX:U(h,o,"ScaleX",a,g),rotation:U(h,o,"Rotation",a,d),offsetX:U(h,o,"OffsetX",a,S),offsetY:U(h,o,"OffsetY",a,v),color:U(h,o,"TintColor",a,N,G),anchorPoint:{x:P.x,y:-P.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,frameHeight:0,rotateClockwise:e.rotateClockwise,referenceSize:f,sizeRatio:1,markerPlacement:e.markerPlacement,url:e.url})}function $(e,t,i,o,r,n,a,l,s,c){const f=e.markerGraphics;if(!f)return;let m=0;if(e.scaleSymbolsProportionally){const t=e.frame;t&&(m=t.ymax-t.ymin)}for(const p of f)if(p){const f=p.symbol;if(!f)continue;switch(f.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":j(e,t,p,o,i,r,n,a,l,s,m,c);break;case"CIMTextSymbol":F(e,t,p,i,o,r,n,l,s,m)}}}function F(e,t,i,o,n,a,c,f,g,d){const S=[];s.findApplicableOverrides(i,n,S);const v=i.geometry;if(!("x"in v)||!("y"in v))return;const N=i.symbol,P=O(N),M=C(N.fontStyleName),I=u(N.fontFamilyName);N.font={family:I,decoration:P,...M};const L=e.frame,w=v.x-.5*(L.xmin+L.xmax),X=v.y-.5*(L.ymin+L.ymax),z=e.size/d,x=e.primitiveName,J=p(N.height)*z,H=p(N.angle),Y=(p(N.offsetX)+w)*z,R=(p(N.offsetY)+X)*z,A=m(l.getFillColor(N));let $=m(l.getStrokeColor(N)),F=l.getStrokeWidth(N);F||($=m(l.getFillColor(N.haloSymbol)),F=N.haloSize*z);const[j,W]=V(n,x),T=JSON.stringify(e.effects)+Number(e.colorLocked)+JSON.stringify(e.anchorPoint)+e.anchorPointUnits+JSON.stringify(e.markerPlacement),D=r(JSON.stringify(i)+T+W).toString(),E=r(JSON.stringify(N.font)).toString(),G=U(i.primitiveName,o,"TextString",a,i.textString,h,N.textCase),{fontStyleName:B}=N,q=I+(B?"-"+B.toLowerCase():"-regular");c.push({type:"text",templateHash:D,materialHash:j||"function"==typeof G||G.match(/\[([\w]+)\]/)?(e,t,i)=>E+"-"+y(G,e,t,i):E+"-"+r(G),cim:N,materialOverrides:null,colorLocked:e.colorLocked,effects:t,alignment:f,anchorPoint:{x:e.anchorPoint?e.anchorPoint.x:0,y:e.anchorPoint?e.anchorPoint.y:0},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,fontName:q,decoration:P,weight:U(x,o,"Weight",a,M.weight),style:U(x,o,"Size",a,M.style),size:U(x,o,"Size",a,J),angle:U(x,o,"Rotation",a,H),offsetX:U(x,o,"OffsetX",a,Y),offsetY:U(x,o,"OffsetY",a,R),horizontalAlignment:b(N.horizontalAlignment),verticalAlignment:k(N.verticalAlignment),text:G,color:A,outlineColor:$,outlineSize:F,referenceSize:g,sizeRatio:1,markerPlacement:e.markerPlacement})}function j(e,t,i,o,n,a,s,u,h,y,d,S){const v=i.symbol,N=v.symbolLayers;if(!N)return;if(S)return void T(e,t,i,n,o,a,s,u,h,y,d);let b=N.length;if(_(N))return void W(e,i,N,o,n,a,s,h,y,d);const k=g.applyEffects(v.effects,i.geometry);if(k)for(;b--;){const S=N[b];if(S&&!1!==S.enable)switch(S.type){case"CIMSolidFill":case"CIMSolidStroke":{var C;const u=g.applyEffects(S.effects,k),v=c(u);if(!v)continue;const[N,b,O]=f(v,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),P="CIMSolidFill"===S.type,M={type:"sdf",geom:u,asFill:P},I=e.primitiveName,L=null!=(C=p(e.size))?C:10,w=p(e.rotation),X=p(e.offsetX),z=p(e.offsetY),x=S.path,J=S.primitiveName,H=m(P?l.getFillColor(S):l.getStrokeColor(S)),Y=P?{r:0,g:0,b:0,a:0}:m(l.getStrokeColor(S)),R=l.getStrokeWidth(S);if(!P&&!R)break;let A=!1,$="";for(const e of o)e.primitiveName!==J&&e.primitiveName!==I||(void 0!==e.value?$+=`-${e.primitiveName}-${e.propertyName}-${JSON.stringify(e.value)}`:e.valueExpressionInfo&&(A=!0));const F=JSON.stringify({...e,markerGraphics:null}),j=r(JSON.stringify(M)+x).toString(),W={type:"marker",templateHash:r(JSON.stringify(i)+JSON.stringify(S)+F+$).toString(),materialHash:A?()=>j:j,cim:M,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:h,anchorPoint:{x:b,y:O},isAbsoluteAnchorPoint:!1,size:U(e.primitiveName,n,"Size",a,L),rotation:U(e.primitiveName,n,"Rotation",a,w),offsetX:U(e.primitiveName,n,"OffsetX",a,X),offsetY:U(e.primitiveName,n,"OffsetY",a,z),scaleX:1,frameHeight:d,rotateClockwise:e.rotateClockwise,referenceSize:y,sizeRatio:N,color:U(J,n,"Color",a,H,G),outlineColor:U(J,n,"Color",a,Y,G),outlineWidth:U(J,n,"Width",a,R),markerPlacement:e.markerPlacement,path:x};s.push(W);break}default:T(e,t,i,n,o,a,s,u,h,y,d)}}}function W(e,t,i,o,n,a,s,u,h,y){const g=t.geometry,d=i[0],S=i[1],v=c(g);if(!v)return;const[N,b,k]=f(v,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),C={type:"sdf",geom:g,asFill:!0},O=e.primitiveName,P=p(e.size),M=p(e.rotation),I=p(e.offsetX),L=p(e.offsetY),w=S.path,X=S.primitiveName,z=d.primitiveName,x=m(l.getFillColor(S)),J=m(l.getStrokeColor(d)),H=l.getStrokeWidth(d);let Y=!1,R="";for(const r of o)r.primitiveName!==X&&r.primitiveName!==z&&r.primitiveName!==O||(void 0!==r.value?R+=`-${r.primitiveName}-${r.propertyName}-${JSON.stringify(r.value)}`:r.valueExpressionInfo&&(Y=!0));const A=JSON.stringify({...e,markerGraphics:null}),$=r(JSON.stringify(C)+w).toString(),F={type:"marker",templateHash:r(JSON.stringify(t)+JSON.stringify(S)+JSON.stringify(d)+A+R).toString(),materialHash:Y?()=>$:$,cim:C,materialOverrides:null,colorLocked:e.colorLocked,effects:e.effects,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:u,anchorPoint:{x:b,y:k},isAbsoluteAnchorPoint:!1,size:U(e.primitiveName,n,"Size",a,P),rotation:U(e.primitiveName,n,"Rotation",a,M),offsetX:U(e.primitiveName,n,"OffsetX",a,I),offsetY:U(e.primitiveName,n,"OffsetY",a,L),scaleX:1,frameHeight:y,rotateClockwise:e.rotateClockwise,referenceSize:h,sizeRatio:N,color:U(X,n,"Color",a,x,G),outlineColor:U(z,n,"Color",a,J,G),outlineWidth:U(z,n,"Width",a,H),markerPlacement:e.markerPlacement,path:w};s.push(F)}function T(e,t,i,n,a,s,c,f,m,u,h){const y=D(e,i);let g=[];const d=["Rotation","OffsetX","OffsetY"];g=a.filter((t=>t.primitiveName!==e.primitiveName||-1===d.indexOf(t.propertyName)));let S="";for(const o of a)void 0!==o.value&&(S+=`-${o.primitiveName}-${o.propertyName}-${JSON.stringify(o.value)}`);const[v,N,b]=l.getTextureAnchor(y,f),k=e.primitiveName,C=p(e.rotation),O=p(e.offsetX),P=p(e.offsetY),M=r(JSON.stringify(y)+S).toString(),I={type:"marker",templateHash:M,materialHash:0===g.length?M:B(M,n,g,s),cim:y,materialOverrides:g,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:m,anchorPoint:{x:v,y:N},isAbsoluteAnchorPoint:!1,size:e.size,rotation:U(k,n,"Rotation",s,C),offsetX:U(k,n,"OffsetX",s,O),offsetY:U(k,n,"OffsetY",s,P),color:{r:255,g:255,b:255,a:1},outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,scaleX:1,frameHeight:h,rotateClockwise:e.rotateClockwise,referenceSize:u,sizeRatio:b/o(e.size),markerPlacement:e.markerPlacement};c.push(I)}function D(e,t){return{type:e.type,enable:!0,name:e.name,colorLocked:e.colorLocked,primitiveName:e.primitiveName,anchorPoint:e.anchorPoint,anchorPointUnits:e.anchorPointUnits,offsetX:0,offsetY:0,rotateClockwise:e.rotateClockwise,rotation:0,size:e.size,billboardMode3D:e.billboardMode3D,depth3D:e.depth3D,frame:e.frame,markerGraphics:[t],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function E(e){if(e&&0===e.indexOf("Level_")){const t=parseInt(e.substr(6),10);if(NaN!==t)return t}return 0}function G(t){if(!t||0===t.length)return null;const i=new e(t).toRgba();return{r:i[0],g:i[1],b:i[2],a:i[3]}}function U(e,t,i,o,r,n,l){const s=t[e];if(s){const e=s[i];if("string"==typeof e||"number"==typeof e||e instanceof Array)return n?n.call(null,e,l):e;if(null!=e&&e instanceof a)return(t,i,a)=>{let s=d(e,t,{$view:a},o.geometryType,i);return null!==s&&n&&(s=n.call(null,s,l)),null!==s?s:r}}return r}function B(e,t,i,o){for(const r of i){if(r.valueExpressionInfo){const e=t[r.primitiveName]&&t[r.primitiveName][r.propertyName];e instanceof a&&(r.fn=(t,i,r)=>d(e,t,{$view:r},o.geometryType,i))}}return(t,o,n)=>{for(const e of i)e.fn&&(e.value=e.fn(t,o,n));return r(e+s.buildOverrideKey(i)).toString()}}function q(e,t){if(!t||0===t.length)return e;const i=JSON.parse(JSON.stringify(e));return s.applyOverrides(i,t),i}function V(e,t){let i=!1,o="";for(const r of e)r.primitiveName===t&&(void 0!==r.value?o+=`-${r.primitiveName}-${r.propertyName}-${JSON.stringify(r.value)}`:r.valueExpressionInfo&&(i=!0));return[i,o]}function K(e,t,i){if(e&&t)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const o=e.symbolLayers;if(!o)return;for(const e of o)switch(e.type){case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":case"CIMPictureStroke":case"CIMGradientStroke":case"CIMCharacterMarker":case"CIMPictureMarker":"url"in e&&e.url&&i.push(t.fetchResource(e.url,null));break;case"CIMVectorMarker":{const o=e.markerGraphics;if(!o)continue;for(const e of o)if(e){const o=e.symbol;o&&K(o,t,i)}}}}}}const _=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&!e[0].effects&&!e[1].effects;export{q as analyzeCIMResource,I as analyzeCIMSymbol};
5
+ import e from"../../Color.js";import t from"../../core/Logger.js";import{isSome as i}from"../../core/maybe.js";import{pt2px as o}from"../../core/screenUtils.js";import{numericHash as r}from"../../core/string.js";import{createRendererExpression as n,ArcadeExpression as a}from"../../support/arcadeOnDemand.js";import{CIMSymbolHelper as l,OverrideHelper as s}from"./CIMSymbolHelper.js";import{getExtent as c,getSDFMetrics as f}from"./SDFHelper.js";import{fromCIMColor as m,getValue as p,toKebabCase as u,_adjustTextCase as h,evaluateValueOrFunction as y}from"./utils.js";import{CIMEffectHelper as g}from"./effects/CIMEffectHelper.js";import d from"../../views/2d/arcade/callExpressionWithFeature.js";const S=t.getLogger("esri.symbols.cim.cimAnalyzer");function v(e){switch(e){case"Butt":return 0;case"Square":return 2;default:return 1}}function N(e){switch(e){case"Bevel":return 0;case"Miter":return 2;default:return 1}}function b(e){switch(e){case"Left":default:return"left";case"Right":return"right";case"Center":return"center";case"Justify":return"justify"}}function k(e){switch(e){case"Top":default:return"top";case"Center":return"middle";case"Baseline":return"baseline";case"Bottom":return"bottom"}}function C(e){let t="",i="";if(e){const o=e.toLowerCase();-1!==o.indexOf("italic")?t="italic":-1!==o.indexOf("oblique")&&(t="oblique"),-1!==o.indexOf("bold")?i="bold":-1!==o.indexOf("light")&&(i="lighter")}return{style:t,weight:i}}function O(e){return e.underline?"underline":e.strikethrough?"line-through":"none"}function P(e,t,i,o){let r;e[t]?r=e[t]:(r={},e[t]=r),r[i]=o}function M(e){const t=e.markerPlacement;return t&&t.angleToLine?1:0}async function I(e,t,i,o,r){const a=null!=o?o:[];if(!e)return a;let l,s;const c={};if("CIMSymbolReference"!==e.type)return S.error("Expect cim type to be 'CIMSymbolReference'"),a;if(l=e.symbol,s=e.primitiveOverrides,s){const e=[];for(const i of s){const o=i.valueExpressionInfo;if(o&&t){const r=o.expression,a=n(r,t.spatialReference,t.fields).then((e=>{e&&P(c,i.primitiveName,i.propertyName,e)}));e.push(a)}else null!=i.value&&P(c,i.primitiveName,i.propertyName,i.value)}e.length>0&&await Promise.all(e)}const f=[];switch(K(l,i,f),f.length>0&&await Promise.all(f),l.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":L(l,s,c,t,a,i,r)}return a}function L(e,t,i,o,r,n,a){if(!e)return;const c=e.symbolLayers;if(!c)return;const f=e.effects;let m;const p=l.getSize(e);"CIMPointSymbol"===e.type&&"Map"===e.angleAlignment&&(m=1);let u=c.length;for(;u--;){const l=c[u];if(!l||!1===l.enable)continue;let h;f&&f.length&&(h=[...f]);const y=l.effects;y&&y.length&&(f?h.push(...y):h=[...y]);const g=[];switch(s.findApplicableOverrides(l,t,g),l.type){case"CIMSolidFill":w(l,h,i,g,o,r);break;case"CIMPictureFill":X(l,h,i,g,o,n,r);break;case"CIMHatchFill":z(l,h,i,g,o,r);break;case"CIMGradientFill":x(l,h,i,g,o,r);break;case"CIMSolidStroke":J(l,h,i,g,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMPictureStroke":H(l,h,i,g,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMGradientStroke":Y(l,h,i,g,o,r,"CIMPolygonSymbol"===e.type,p);break;case"CIMCharacterMarker":if(R(l,h,i,g,o,r))break;break;case"CIMPictureMarker":if(R(l,h,i,g,o,r))break;"CIMLineSymbol"===e.type&&(m=M(l)),A(l,h,i,g,o,n,r,m,p);break;case"CIMVectorMarker":if(R(l,h,i,g,o,r))break;"CIMLineSymbol"===e.type&&(m=M(l)),$(l,h,i,g,o,r,n,m,p,a);break;default:S.error("Cannot analyze CIM layer",l.type)}}}function w(e,t,i,o,n,a){const l=e.primitiveName,s=m(e.color),[c,f]=V(o,l),p=r(JSON.stringify(e)+f).toString();a.push({type:"fill",templateHash:p,materialHash:c?()=>p:p,cim:e,materialOverrides:null,colorLocked:e.colorLocked,color:U(l,i,"Color",n,s,G),height:0,angle:0,offsetX:0,offsetY:0,scaleX:1,effects:t})}function X(e,t,o,n,a,l,s){const c=e.primitiveName,f=e.tintColor?m(e.tintColor):{r:255,g:255,b:255,a:1},[u,h]=V(n,c),y=r(JSON.stringify(e)+h).toString(),g=r(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString();let d=p(e.scaleX);if("width"in e){const t=e.width;let o=1;const r=l.getResource(e.url);i(r)&&(o=r.width/r.height),d/=o*(e.height/t)}s.push({type:"fill",templateHash:y,materialHash:u?()=>g:g,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:U(c,o,"TintColor",a,f,G),height:U(c,o,"Height",a,e.height),scaleX:U(c,o,"ScaleX",a,d),angle:U(c,o,"Rotation",a,p(e.rotation)),offsetX:U(c,o,"OffsetX",a,p(e.offsetX)),offsetY:U(c,o,"OffsetY",a,p(e.offsetY)),url:e.url})}function z(e,t,i,o,n,a){const l=["Rotation","OffsetX","OffsetY"],s=o.filter((t=>t.primitiveName!==e.primitiveName&&-1===l.indexOf(t.propertyName))),c=e.primitiveName,[f,m]=V(o,c),u=r(JSON.stringify(e)+m).toString(),h=r(`${e.separation}${JSON.stringify(e.lineSymbol)}`).toString();a.push({type:"fill",templateHash:u,materialHash:f?B(h,i,s,n):h,cim:e,materialOverrides:s,colorLocked:e.colorLocked,effects:t,color:{r:255,g:255,b:255,a:1},height:U(c,i,"Separation",n,e.separation),scaleX:1,angle:U(c,i,"Rotation",n,p(e.rotation)),offsetX:U(c,i,"OffsetX",n,p(e.offsetX)),offsetY:U(c,i,"OffsetY",n,p(e.offsetY))})}function x(e,t,i,o,n,a){const l=e.primitiveName,[s,c]=V(o,l),f=r(JSON.stringify(e)+c).toString();a.push({type:"fill",templateHash:f,materialHash:s?B(f,i,o,n):f,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},height:0,angle:0,offsetX:0,offsetY:0,scaleX:1})}function J(e,t,i,o,n,a,l,s){const c=e.primitiveName,f=m(e.color),p=void 0!==e.width?e.width:4,u=v(e.capStyle),h=N(e.joinStyle),y=e.miterLimit,[g,d]=V(o,c),S=r(JSON.stringify(e)+d).toString();let b,k;if(t&&t.length>0){const i=t[t.length-1];if("CIMGeometricEffectDashes"===i.type&&"NoConstraint"===i.lineDashEnding){const i=(t=[...e.effects]).pop();b=i.dashTemplate,k=i.scaleDash}}a.push({type:"line",templateHash:S,materialHash:g?()=>S:S,cim:e,materialOverrides:null,isOutline:l,colorLocked:e.colorLocked,effects:t,color:U(c,i,"Color",n,f,G),width:U(c,i,"Width",n,p),cap:U(c,i,"CapStyle",n,u),join:U(c,i,"JoinStyle",n,h),miterLimit:U(c,i,"MiterLimit",n,y),referenceWidth:s,zOrder:E(e.name),dashTemplate:b,scaleDash:k})}function H(e,t,i,o,n,a,l,s){const c=r(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString(),f=e.primitiveName,p=m(e.tintColor),u=void 0!==e.width?e.width:4,h=v(e.capStyle),y=N(e.joinStyle),g=e.miterLimit,[d,S]=V(o,f),b=r(JSON.stringify(e)+S).toString();a.push({type:"line",templateHash:b,materialHash:d?()=>c:c,cim:e,materialOverrides:null,isOutline:l,colorLocked:e.colorLocked,effects:t,color:U(f,i,"TintColor",n,p,G),width:U(f,i,"Width",n,u),cap:U(f,i,"CapStyle",n,h),join:U(f,i,"JoinStyle",n,y),miterLimit:U(f,i,"MiterLimit",n,g),referenceWidth:s,zOrder:E(e.name),dashTemplate:null,scaleDash:!1,url:e.url})}function Y(e,t,i,o,n,a,l,s){const c=e.primitiveName,f=void 0!==e.width?e.width:4,m=v(e.capStyle),p=N(e.joinStyle),u=e.miterLimit,[h,y]=V(o,c),g=r(JSON.stringify(e)+y).toString();a.push({type:"line",templateHash:g,materialHash:h?B(g,i,o,n):g,cim:e,materialOverrides:null,isOutline:l,colorLocked:e.colorLocked,effects:t,color:{r:128,g:128,b:128,a:1},width:U(c,i,"Width",n,f),cap:U(c,i,"CapStyle",n,m),join:U(c,i,"JoinStyle",n,p),miterLimit:U(c,i,"MiterLimit",n,u),referenceWidth:s,zOrder:E(e.name),dashTemplate:null,scaleDash:!1})}function R(e,t,i,o,n,a){const l=e.markerPlacement;if(!l||"CIMMarkerPlacementInsidePolygon"!==l.type)return!1;const s=l,c=["Rotation","OffsetX","OffsetY"],f=o.filter((t=>t.primitiveName!==e.primitiveName&&-1===c.indexOf(t.propertyName))),m="url"in e?e.url:null,[u,h]=V(o,s.primitiveName),y=r(JSON.stringify(e)+h).toString();let g=s.stepY,d=null,S=1;return l.shiftOddRows&&(g*=2,d=function(e){return e?2*e:0},S=.5),a.push({type:"fill",templateHash:y,materialHash:u?B(y,i,f,n):y,cim:e,materialOverrides:f,colorLocked:e.colorLocked,effects:t,color:{r:255,g:255,b:255,a:1},height:U(s.primitiveName,i,"StepY",n,g,d),scaleX:S,angle:U(s.primitiveName,i,"GridAngle",n,s.gridAngle),offsetX:U(s.primitiveName,i,"OffsetX",n,p(s.offsetX)),offsetY:U(s.primitiveName,i,"OffsetY",n,p(s.offsetY)),url:m}),!0}function A(e,t,o,n,a,l,s,c,f){var u;const h=e.primitiveName,y=p(e.size);let g=p(e.scaleX);const d=p(e.rotation),S=p(e.offsetX),v=p(e.offsetY),N=e.tintColor?m(e.tintColor):{r:255,g:255,b:255,a:1},b=r(`${e.url}${JSON.stringify(e.colorSubstitutions)}`).toString(),[k,C]=V(n,h),O=r(JSON.stringify(e)+C).toString(),P=null!=(u=e.anchorPoint)?u:{x:0,y:0};if("width"in e){const t=e.width;let o=1;const r=l.getResource(e.url);i(r)&&(o=r.width/r.height),g/=o*(y/t)}s.push({type:"marker",templateHash:O,materialHash:k?()=>b:b,cim:e,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:!1,alignment:c,size:U(h,o,"Size",a,y),scaleX:U(h,o,"ScaleX",a,g),rotation:U(h,o,"Rotation",a,d),offsetX:U(h,o,"OffsetX",a,S),offsetY:U(h,o,"OffsetY",a,v),color:U(h,o,"TintColor",a,N,G),anchorPoint:{x:P.x,y:-P.y},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,frameHeight:0,rotateClockwise:e.rotateClockwise,referenceSize:f,sizeRatio:1,markerPlacement:e.markerPlacement,url:e.url})}function $(e,t,i,o,r,n,a,l,s,c){const f=e.markerGraphics;if(!f)return;let m=0;if(e.scaleSymbolsProportionally){const t=e.frame;t&&(m=t.ymax-t.ymin)}for(const p of f)if(p){const f=p.symbol;if(!f)continue;switch(f.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":j(e,t,p,o,i,r,n,a,l,s,m,c);break;case"CIMTextSymbol":F(e,t,p,i,o,r,n,l,s,m)}}}function F(e,t,i,o,n,a,c,f,g,d){const S=[];s.findApplicableOverrides(i,n,S);const v=i.geometry;if(!("x"in v)||!("y"in v))return;const N=i.symbol,P=O(N),M=C(N.fontStyleName),I=u(N.fontFamilyName);N.font={family:I,decoration:P,...M};const L=e.frame,w=v.x-.5*(L.xmin+L.xmax),X=v.y-.5*(L.ymin+L.ymax),z=e.size/d,x=e.primitiveName,J=p(N.height)*z,H=p(N.angle),Y=(p(N.offsetX)+w)*z,R=(p(N.offsetY)+X)*z,A=m(l.getFillColor(N));let $=m(l.getStrokeColor(N)),F=l.getStrokeWidth(N);F||($=m(l.getFillColor(N.haloSymbol)),F=N.haloSize*z);const[j,W]=V(n,x),T=JSON.stringify(e.effects)+Number(e.colorLocked)+JSON.stringify(e.anchorPoint)+e.anchorPointUnits+JSON.stringify(e.markerPlacement),D=r(JSON.stringify(i)+T+W).toString(),E=U(i.primitiveName,o,"TextString",a,i.textString,h,N.textCase),{fontStyleName:G}=N,B=I+(G?"-"+G.toLowerCase():"-regular"),q=B;c.push({type:"text",templateHash:D,materialHash:j||"function"==typeof E||E.match(/\[(.*?)\]/)?(e,t,i)=>q+"-"+y(E,e,t,i):q+"-"+r(E),cim:N,materialOverrides:null,colorLocked:e.colorLocked,effects:t,alignment:f,anchorPoint:{x:e.anchorPoint?e.anchorPoint.x:0,y:e.anchorPoint?e.anchorPoint.y:0},isAbsoluteAnchorPoint:"Relative"!==e.anchorPointUnits,fontName:B,decoration:P,weight:U(x,o,"Weight",a,M.weight),style:U(x,o,"Size",a,M.style),size:U(x,o,"Size",a,J),angle:U(x,o,"Rotation",a,H),offsetX:U(x,o,"OffsetX",a,Y),offsetY:U(x,o,"OffsetY",a,R),horizontalAlignment:b(N.horizontalAlignment),verticalAlignment:k(N.verticalAlignment),text:E,color:A,outlineColor:$,outlineSize:F,referenceSize:g,sizeRatio:1,markerPlacement:e.markerPlacement})}function j(e,t,i,o,n,a,s,u,h,y,d,S){const v=i.symbol,N=v.symbolLayers;if(!N)return;if(S)return void T(e,t,i,n,o,a,s,u,h,y,d);let b=N.length;if(_(N))return void W(e,i,N,o,n,a,s,h,y,d);const k=g.applyEffects(v.effects,i.geometry);if(k)for(;b--;){const S=N[b];if(S&&!1!==S.enable)switch(S.type){case"CIMSolidFill":case"CIMSolidStroke":{var C;const u=g.applyEffects(S.effects,k),v=c(u);if(!v)continue;const[N,b,O]=f(v,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),P="CIMSolidFill"===S.type,M={type:"sdf",geom:u,asFill:P},I=e.primitiveName,L=null!=(C=p(e.size))?C:10,w=p(e.rotation),X=p(e.offsetX),z=p(e.offsetY),x=S.path,J=S.primitiveName,H=m(P?l.getFillColor(S):l.getStrokeColor(S)),Y=P?{r:0,g:0,b:0,a:0}:m(l.getStrokeColor(S)),R=l.getStrokeWidth(S);if(!P&&!R)break;let A=!1,$="";for(const e of o)e.primitiveName!==J&&e.primitiveName!==I||(void 0!==e.value?$+=`-${e.primitiveName}-${e.propertyName}-${JSON.stringify(e.value)}`:e.valueExpressionInfo&&(A=!0));const F=JSON.stringify({...e,markerGraphics:null}),j=r(JSON.stringify(M)+x).toString(),W={type:"marker",templateHash:r(JSON.stringify(i)+JSON.stringify(S)+F+$).toString(),materialHash:A?()=>j:j,cim:M,materialOverrides:null,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:h,anchorPoint:{x:b,y:O},isAbsoluteAnchorPoint:!1,size:U(e.primitiveName,n,"Size",a,L),rotation:U(e.primitiveName,n,"Rotation",a,w),offsetX:U(e.primitiveName,n,"OffsetX",a,X),offsetY:U(e.primitiveName,n,"OffsetY",a,z),scaleX:1,frameHeight:d,rotateClockwise:e.rotateClockwise,referenceSize:y,sizeRatio:N,color:U(J,n,"Color",a,H,G),outlineColor:U(J,n,"Color",a,Y,G),outlineWidth:U(J,n,"Width",a,R),markerPlacement:e.markerPlacement,path:x};s.push(W);break}default:T(e,t,i,n,o,a,s,u,h,y,d)}}}function W(e,t,i,o,n,a,s,u,h,y){const g=t.geometry,d=i[0],S=i[1],v=c(g);if(!v)return;const[N,b,k]=f(v,e.frame,e.size,e.anchorPoint,"Relative"!==e.anchorPointUnits),C={type:"sdf",geom:g,asFill:!0},O=e.primitiveName,P=p(e.size),M=p(e.rotation),I=p(e.offsetX),L=p(e.offsetY),w=S.path,X=S.primitiveName,z=d.primitiveName,x=m(l.getFillColor(S)),J=m(l.getStrokeColor(d)),H=l.getStrokeWidth(d);let Y=!1,R="";for(const r of o)r.primitiveName!==X&&r.primitiveName!==z&&r.primitiveName!==O||(void 0!==r.value?R+=`-${r.primitiveName}-${r.propertyName}-${JSON.stringify(r.value)}`:r.valueExpressionInfo&&(Y=!0));const A=JSON.stringify({...e,markerGraphics:null}),$=r(JSON.stringify(C)+w).toString(),F={type:"marker",templateHash:r(JSON.stringify(t)+JSON.stringify(S)+JSON.stringify(d)+A+R).toString(),materialHash:Y?()=>$:$,cim:C,materialOverrides:null,colorLocked:e.colorLocked,effects:e.effects,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:u,anchorPoint:{x:b,y:k},isAbsoluteAnchorPoint:!1,size:U(e.primitiveName,n,"Size",a,P),rotation:U(e.primitiveName,n,"Rotation",a,M),offsetX:U(e.primitiveName,n,"OffsetX",a,I),offsetY:U(e.primitiveName,n,"OffsetY",a,L),scaleX:1,frameHeight:y,rotateClockwise:e.rotateClockwise,referenceSize:h,sizeRatio:N,color:U(X,n,"Color",a,x,G),outlineColor:U(z,n,"Color",a,J,G),outlineWidth:U(z,n,"Width",a,H),markerPlacement:e.markerPlacement,path:w};s.push(F)}function T(e,t,i,n,a,s,c,f,m,u,h){const y=D(e,i);let g=[];const d=["Rotation","OffsetX","OffsetY"];g=a.filter((t=>t.primitiveName!==e.primitiveName||-1===d.indexOf(t.propertyName)));let S="";for(const o of a)void 0!==o.value&&(S+=`-${o.primitiveName}-${o.propertyName}-${JSON.stringify(o.value)}`);const[v,N,b]=l.getTextureAnchor(y,f),k=e.primitiveName,C=p(e.rotation),O=p(e.offsetX),P=p(e.offsetY),M=r(JSON.stringify(y)+S).toString(),I={type:"marker",templateHash:M,materialHash:0===g.length?M:B(M,n,g,s),cim:y,materialOverrides:g,colorLocked:e.colorLocked,effects:t,scaleSymbolsProportionally:e.scaleSymbolsProportionally,alignment:m,anchorPoint:{x:v,y:N},isAbsoluteAnchorPoint:!1,size:e.size,rotation:U(k,n,"Rotation",s,C),offsetX:U(k,n,"OffsetX",s,O),offsetY:U(k,n,"OffsetY",s,P),color:{r:255,g:255,b:255,a:1},outlineColor:{r:0,g:0,b:0,a:0},outlineWidth:0,scaleX:1,frameHeight:h,rotateClockwise:e.rotateClockwise,referenceSize:u,sizeRatio:b/o(e.size),markerPlacement:e.markerPlacement};c.push(I)}function D(e,t){return{type:e.type,enable:!0,name:e.name,colorLocked:e.colorLocked,primitiveName:e.primitiveName,anchorPoint:e.anchorPoint,anchorPointUnits:e.anchorPointUnits,offsetX:0,offsetY:0,rotateClockwise:e.rotateClockwise,rotation:0,size:e.size,billboardMode3D:e.billboardMode3D,depth3D:e.depth3D,frame:e.frame,markerGraphics:[t],scaleSymbolsProportionally:e.scaleSymbolsProportionally,respectFrame:e.respectFrame,clippingPath:e.clippingPath}}function E(e){if(e&&0===e.indexOf("Level_")){const t=parseInt(e.substr(6),10);if(NaN!==t)return t}return 0}function G(t){if(!t||0===t.length)return null;const i=new e(t).toRgba();return{r:i[0],g:i[1],b:i[2],a:i[3]}}function U(e,t,i,o,r,n,l){const s=t[e];if(s){const e=s[i];if("string"==typeof e||"number"==typeof e||e instanceof Array)return n?n.call(null,e,l):e;if(null!=e&&e instanceof a)return(t,i,a)=>{let s=d(e,t,{$view:a},o.geometryType,i);return null!==s&&n&&(s=n.call(null,s,l)),null!==s?s:r}}return r}function B(e,t,i,o){for(const r of i){if(r.valueExpressionInfo){const e=t[r.primitiveName]&&t[r.primitiveName][r.propertyName];e instanceof a&&(r.fn=(t,i,r)=>d(e,t,{$view:r},o.geometryType,i))}}return(t,o,n)=>{for(const e of i)e.fn&&(e.value=e.fn(t,o,n));return r(e+s.buildOverrideKey(i)).toString()}}function q(e,t){if(!t||0===t.length)return e;const i=JSON.parse(JSON.stringify(e));return s.applyOverrides(i,t),i}function V(e,t){let i=!1,o="";for(const r of e)r.primitiveName===t&&(void 0!==r.value?o+=`-${r.primitiveName}-${r.propertyName}-${JSON.stringify(r.value)}`:r.valueExpressionInfo&&(i=!0));return[i,o]}function K(e,t,i){if(e&&t)switch(e.type){case"CIMPointSymbol":case"CIMLineSymbol":case"CIMPolygonSymbol":{const o=e.symbolLayers;if(!o)return;for(const e of o)switch(e.type){case"CIMPictureFill":case"CIMHatchFill":case"CIMGradientFill":case"CIMPictureStroke":case"CIMGradientStroke":case"CIMCharacterMarker":case"CIMPictureMarker":"url"in e&&e.url&&i.push(t.fetchResource(e.url,null));break;case"CIMVectorMarker":{const o=e.markerGraphics;if(!o)continue;for(const e of o)if(e){const o=e.symbol;o&&K(o,t,i)}}}}}}const _=e=>e&&2===e.length&&e[0].enable&&e[1].enable&&"CIMSolidStroke"===e[0].type&&"CIMSolidFill"===e[1].type&&!e[0].effects&&!e[1].effects;export{q as analyzeCIMResource,I as analyzeCIMSymbol};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- import{_ as o}from"../../chunks/tslib.es6.js";import"../../geometry.js";import t from"../../core/Evented.js";import{property as e}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import"../../core/has.js";import"../../core/accessorSupport/ensureType.js";import{subclass as r}from"../../core/accessorSupport/decorators/subclass.js";import s from"../../layers/support/LOD.js";import{GeometryConstraint as i}from"./constraints/GeometryConstraint.js";import a from"./constraints/RotationConstraint.js";import n from"./constraints/ZoomConstraint.js";import m from"../../geometry/Extent.js";import l from"../../geometry/Polygon.js";const p={base:null,key:"type",typeMap:{extent:m,polygon:l}};let c=class extends t.EventedAccessor{constructor(){super(...arguments),this.lods=null,this.minScale=0,this.maxScale=0,this.minZoom=-1,this.maxZoom=-1,this.rotationEnabled=!0,this.snapToZoom=!0}initialize(){this.watch(["_zoom","_rotation"],this.emit.bind(this,"update"),!0)}destroy(){this.view=null,this._set("_zoom",null),this._set("_rotation",null)}set geometry(o){o?this._set("geometry",o):this._set("geometry",null)}get _defaultLODs(){const o=this.get("view.defaultsFromMap.tileInfo"),t=this.get("view.spatialReference");return o&&t&&o.spatialReference.equals(t)?o.lods:null}get _geometry(){return new i({geometry:this.geometry,spatialReference:this.view.spatialReference})}get _rotation(){return new a({rotationEnabled:this.rotationEnabled})}get _zoom(){return new n({lods:this.lods||this._defaultLODs,minZoom:this.minZoom,maxZoom:this.maxZoom,minScale:this.minScale,maxScale:this.maxScale,snapToZoom:this.snapToZoom})}canZoomInTo(o){const t=this.effectiveMaxScale;return 0===t||o>=t}canZoomOutTo(o){const t=this.effectiveMinScale;return 0===t||o<=t}constrain(o,t){return this._zoom.constrain(o,t),this._rotation.constrain(o,t),this._geometry.constrain(o,t),o}constrainByGeometry(o){return this._geometry.constrain(o)}fit(o){return this._zoom.fit(o)}zoomToScale(o){return this._zoom.zoomToScale(o)}scaleToZoom(o){return this._zoom.scaleToZoom(o)}snapScale(o){return this._zoom.snapToClosestScale(o)}snapToNextScale(o){return this._zoom.snapToNextScale(o)}snapToPreviousScale(o){return this._zoom.snapToPreviousScale(o)}};o([e({readOnly:!0,aliasOf:"_zoom.effectiveLODs"})],c.prototype,"effectiveLODs",void 0),o([e({readOnly:!0,aliasOf:"_zoom.effectiveMinScale"})],c.prototype,"effectiveMinScale",void 0),o([e({readOnly:!0,aliasOf:"_zoom.effectiveMaxScale"})],c.prototype,"effectiveMaxScale",void 0),o([e({readOnly:!0,aliasOf:"_zoom.effectiveMinZoom"})],c.prototype,"effectiveMinZoom",void 0),o([e({readOnly:!0,aliasOf:"_zoom.effectiveMaxZoom"})],c.prototype,"effectiveMaxZoom",void 0),o([e({types:p,value:null})],c.prototype,"geometry",null),o([e({type:[s]})],c.prototype,"lods",void 0),o([e()],c.prototype,"minScale",void 0),o([e()],c.prototype,"maxScale",void 0),o([e()],c.prototype,"minZoom",void 0),o([e()],c.prototype,"maxZoom",void 0),o([e()],c.prototype,"rotationEnabled",void 0),o([e()],c.prototype,"snapToZoom",void 0),o([e()],c.prototype,"view",void 0),o([e()],c.prototype,"_defaultLODs",null),o([e({type:i})],c.prototype,"_geometry",null),o([e({type:a})],c.prototype,"_rotation",null),o([e({readOnly:!0,type:n})],c.prototype,"_zoom",null),c=o([r("esri.views.2d.MapViewConstraints")],c);const y=c;export{y as default};
5
+ import{_ as o}from"../../chunks/tslib.es6.js";import"../../geometry.js";import t from"../../core/Evented.js";import{property as e}from"../../core/accessorSupport/decorators/property.js";import"../../core/arrayUtils.js";import"../../core/has.js";import"../../core/accessorSupport/ensureType.js";import{subclass as s}from"../../core/accessorSupport/decorators/subclass.js";import r from"../../layers/support/LOD.js";import{GeometryConstraint as i}from"./constraints/GeometryConstraint.js";import a from"./constraints/RotationConstraint.js";import n from"./constraints/ZoomConstraint.js";import m from"../../geometry/Extent.js";import l from"../../geometry/Polygon.js";const p={base:null,key:"type",typeMap:{extent:m,polygon:l}};let c=class extends t.EventedAccessor{constructor(){super(...arguments),this.lods=null,this.minScale=0,this.maxScale=0,this.minZoom=-1,this.maxZoom=-1,this.rotationEnabled=!0,this.snapToZoom=!0}initialize(){this.watch(["_zoom","_rotation"],this.emit.bind(this,"update"),!0)}destroy(){this.view=null,this._set("_zoom",null),this._set("_rotation",null)}set geometry(o){o?this._set("geometry",o):this._set("geometry",null)}get _defaultLODs(){var o,t,e;const s=null==(o=this.view)||null==(t=o.defaultsFromMap)?void 0:t.tileInfo,r=null==(e=this.view)?void 0:e.spatialReference;return s&&r&&s.spatialReference.equals(r)?s.lods:null}get _geometry(){return new i({geometry:this.geometry,spatialReference:this.view.spatialReference})}get _rotation(){return new a({rotationEnabled:this.rotationEnabled})}get _zoom(){const o=this._get("_zoom"),t=this.lods||this._defaultLODs,e=this.minZoom,s=this.maxZoom,r=this.minScale,i=this.maxScale,a=this.snapToZoom;return o&&o.lods===t&&o.minZoom===e&&o.maxZoom===s&&o.minScale===r&&o.maxScale===i&&o.snapToZoom===a?o:new n({lods:t,minZoom:e,maxZoom:s,minScale:r,maxScale:i,snapToZoom:a})}canZoomInTo(o){const t=this.effectiveMaxScale;return 0===t||o>=t}canZoomOutTo(o){const t=this.effectiveMinScale;return 0===t||o<=t}constrain(o,t){return this._zoom.constrain(o,t),this._rotation.constrain(o,t),this._geometry.constrain(o,t),o}constrainByGeometry(o){return this._geometry.constrain(o)}fit(o){return this._zoom.fit(o)}zoomToScale(o){return this._zoom.zoomToScale(o)}scaleToZoom(o){return this._zoom.scaleToZoom(o)}snapScale(o){return this._zoom.snapToClosestScale(o)}snapToNextScale(o){return this._zoom.snapToNextScale(o)}snapToPreviousScale(o){return this._zoom.snapToPreviousScale(o)}};o([e({readOnly:!0,aliasOf:"_zoom.effectiveLODs"})],c.prototype,"effectiveLODs",void 0),o([e({readOnly:!0,aliasOf:"_zoom.effectiveMinScale"})],c.prototype,"effectiveMinScale",void 0),o([e({readOnly:!0,aliasOf:"_zoom.effectiveMaxScale"})],c.prototype,"effectiveMaxScale",void 0),o([e({readOnly:!0,aliasOf:"_zoom.effectiveMinZoom"})],c.prototype,"effectiveMinZoom",void 0),o([e({readOnly:!0,aliasOf:"_zoom.effectiveMaxZoom"})],c.prototype,"effectiveMaxZoom",void 0),o([e({types:p,value:null})],c.prototype,"geometry",null),o([e({type:[r]})],c.prototype,"lods",void 0),o([e()],c.prototype,"minScale",void 0),o([e()],c.prototype,"maxScale",void 0),o([e()],c.prototype,"minZoom",void 0),o([e()],c.prototype,"maxZoom",void 0),o([e()],c.prototype,"rotationEnabled",void 0),o([e()],c.prototype,"snapToZoom",void 0),o([e()],c.prototype,"view",void 0),o([e()],c.prototype,"_defaultLODs",null),o([e({type:i})],c.prototype,"_geometry",null),o([e({type:a})],c.prototype,"_rotation",null),o([e({readOnly:!0,type:n})],c.prototype,"_zoom",null),c=o([s("esri.views.2d.MapViewConstraints")],c);const y=c;export{y as default};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Accessor.js";import{property as o}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as s}from"../../../core/accessorSupport/decorators/subclass.js";import i from"../../../layers/support/LOD.js";var a;let c=a=class extends t{constructor(e){super(e),this._lodByScale={},this._scales=[],this.effectiveLODs=null,this.effectiveMinZoom=-1,this.effectiveMaxZoom=-1,this.effectiveMinScale=0,this.effectiveMaxScale=0,this.lods=null,this.minZoom=-1,this.maxZoom=-1,this.minScale=0,this.maxScale=0,this.snapToZoom=!0}initialize(){let e,{lods:t,minScale:o,maxScale:s,minZoom:i,maxZoom:a}=this,c=-1,r=-1,l=!1,n=!1;if(0!==o&&0!==s&&o<s&&([o,s]=[s,o]),!t||!t.length)return this._set("effectiveMinScale",o),void this._set("effectiveMaxScale",s);t=t.map((e=>e.clone())),t.sort(((e,t)=>t.scale-e.scale)),t.forEach(((e,t)=>e.level=t));for(const f of t)!l&&o>0&&o>=f.scale&&(c=f.level,l=!0),!n&&s>0&&s>=f.scale&&(r=e?e.level:-1,n=!0),e=f;-1===i&&(i=0===o?0:c),-1===a&&(a=0===s?t.length-1:r),i=Math.max(i,0),i=Math.min(i,t.length-1),a=Math.max(a,0),a=Math.min(a,t.length-1),i>a&&([i,a]=[a,i]),o=t[i].scale,s=t[a].scale,t.splice(0,i),t.splice(a-i+1,t.length),t.forEach(((e,t)=>{this._lodByScale[e.scale]=e,this._scales[t]=e.scale})),this._set("effectiveLODs",t),this._set("effectiveMinZoom",i),this._set("effectiveMaxZoom",a),this._set("effectiveMinScale",o),this._set("effectiveMaxScale",s)}constrain(e,t){if(t&&e.scale===t.scale)return e;const o=this.effectiveMinScale,s=this.effectiveMaxScale,i=e.targetGeometry,a=t&&t.targetGeometry,c=0!==s&&e.scale<s,r=0!==o&&e.scale>o;if(c||r){const c=r?o:s;if(a){const o=(c-t.scale)/(e.scale-t.scale);i.x=a.x+(i.x-a.x)*o,i.y=a.y+(i.y-a.y)*o}e.scale=c}return this.snapToZoom&&this.effectiveLODs&&(e.scale=this._getClosestScale(e.scale)),e}fit(e){if(!this.effectiveLODs||!this.snapToZoom)return this.constrain(e,null);const t=this.scaleToZoom(e.scale),o=Math.abs(t-Math.floor(t));return e.scale=this.zoomToScale(o>.99?Math.round(t):Math.floor(t)),e}zoomToScale(e){if(!this.effectiveLODs)return 0;e-=this.effectiveMinZoom,e=Math.max(0,e);const t=this._scales;if(e<=0)return t[0];if(e>=t.length)return t[t.length-1];const o=Math.round(e-.5),s=Math.round(e);return t[s]+(s-e)*(t[o]-t[s])}scaleToZoom(e){if(!this.effectiveLODs)return-1;const t=this._scales;let o,s;if(e>=t[0])return this.effectiveMinZoom;if(e<=t[t.length-1])return this.effectiveMaxZoom;for(let i=0;i<t.length-1;i++){if(o=t[i],s=t[i+1],s===e){return i+this.effectiveMinZoom+1}if(o>e&&s<e){return i+this.effectiveMinZoom+1-(e-s)/(o-s)}}}snapToClosestScale(e){if(!this.effectiveLODs)return e;const t=this.scaleToZoom(e);return this.zoomToScale(Math.round(t))}snapToNextScale(e,t=.5){if(!this.effectiveLODs)return e*t;const o=Math.round(this.scaleToZoom(e));return this.zoomToScale(o+1)}snapToPreviousScale(e,t=2){if(!this.effectiveLODs)return e*t;const o=Math.round(this.scaleToZoom(e));return this.zoomToScale(o-1)}clone(){return new a({lods:this.lods,minZoom:this.minZoom,maxZoom:this.maxZoom,minScale:this.minScale,maxScale:this.maxScale})}_getClosestScale(e){return this._lodByScale[e]||(e=this._scales.reduce(((t,o)=>Math.abs(o-e)<=Math.abs(t-e)?o:t),this._scales[0])),this._lodByScale[e].scale}};e([o({readOnly:!0})],c.prototype,"effectiveLODs",void 0),e([o({readOnly:!0})],c.prototype,"effectiveMinZoom",void 0),e([o({readOnly:!0})],c.prototype,"effectiveMaxZoom",void 0),e([o({readOnly:!0})],c.prototype,"effectiveMinScale",void 0),e([o({readOnly:!0})],c.prototype,"effectiveMaxScale",void 0),e([o({type:[i]})],c.prototype,"lods",void 0),e([o()],c.prototype,"minZoom",void 0),e([o()],c.prototype,"maxZoom",void 0),e([o()],c.prototype,"minScale",void 0),e([o()],c.prototype,"maxScale",void 0),e([o()],c.prototype,"snapToZoom",void 0),c=a=e([s("esri.views.2d.constraints.ZoomConstraint")],c);const r=c;export{r as default};
5
+ import{_ as e}from"../../../chunks/tslib.es6.js";import t from"../../../core/Accessor.js";import{property as o}from"../../../core/accessorSupport/decorators/property.js";import"../../../core/arrayUtils.js";import"../../../core/has.js";import"../../../core/accessorSupport/ensureType.js";import{subclass as s}from"../../../core/accessorSupport/decorators/subclass.js";var i;let a=i=class extends t{constructor(e){super(e),this._lodByScale={},this._scales=[],this.effectiveLODs=null,this.effectiveMinZoom=-1,this.effectiveMaxZoom=-1,this.effectiveMinScale=0,this.effectiveMaxScale=0,this.lods=null,this.minZoom=-1,this.maxZoom=-1,this.minScale=0,this.maxScale=0,this.snapToZoom=!0}initialize(){let e,{lods:t,minScale:o,maxScale:s,minZoom:i,maxZoom:a}=this,c=-1,r=-1,l=!1,n=!1;if(0!==o&&0!==s&&o<s&&([o,s]=[s,o]),!t||!t.length)return this._set("effectiveMinScale",o),void this._set("effectiveMaxScale",s);t=t.map((e=>e.clone())),t.sort(((e,t)=>t.scale-e.scale)),t.forEach(((e,t)=>e.level=t));for(const f of t)!l&&o>0&&o>=f.scale&&(c=f.level,l=!0),!n&&s>0&&s>=f.scale&&(r=e?e.level:-1,n=!0),e=f;-1===i&&(i=0===o?0:c),-1===a&&(a=0===s?t.length-1:r),i=Math.max(i,0),i=Math.min(i,t.length-1),a=Math.max(a,0),a=Math.min(a,t.length-1),i>a&&([i,a]=[a,i]),o=t[i].scale,s=t[a].scale,t.splice(0,i),t.splice(a-i+1,t.length),t.forEach(((e,t)=>{this._lodByScale[e.scale]=e,this._scales[t]=e.scale})),this._set("effectiveLODs",t),this._set("effectiveMinZoom",i),this._set("effectiveMaxZoom",a),this._set("effectiveMinScale",o),this._set("effectiveMaxScale",s)}constrain(e,t){if(t&&e.scale===t.scale)return e;const o=this.effectiveMinScale,s=this.effectiveMaxScale,i=e.targetGeometry,a=t&&t.targetGeometry,c=0!==s&&e.scale<s,r=0!==o&&e.scale>o;if(c||r){const c=r?o:s;if(a){const o=(c-t.scale)/(e.scale-t.scale);i.x=a.x+(i.x-a.x)*o,i.y=a.y+(i.y-a.y)*o}e.scale=c}return this.snapToZoom&&this.effectiveLODs&&(e.scale=this._getClosestScale(e.scale)),e}fit(e){if(!this.effectiveLODs||!this.snapToZoom)return this.constrain(e,null);const t=this.scaleToZoom(e.scale),o=Math.abs(t-Math.floor(t));return e.scale=this.zoomToScale(o>.99?Math.round(t):Math.floor(t)),e}zoomToScale(e){if(!this.effectiveLODs)return 0;e-=this.effectiveMinZoom,e=Math.max(0,e);const t=this._scales;if(e<=0)return t[0];if(e>=t.length)return t[t.length-1];const o=Math.round(e-.5),s=Math.round(e);return t[s]+(s-e)*(t[o]-t[s])}scaleToZoom(e){if(!this.effectiveLODs)return-1;const t=this._scales;let o,s;if(e>=t[0])return this.effectiveMinZoom;if(e<=t[t.length-1])return this.effectiveMaxZoom;for(let i=0;i<t.length-1;i++){if(o=t[i],s=t[i+1],s===e){return i+this.effectiveMinZoom+1}if(o>e&&s<e){return i+this.effectiveMinZoom+1-(e-s)/(o-s)}}}snapToClosestScale(e){if(!this.effectiveLODs)return e;const t=this.scaleToZoom(e);return this.zoomToScale(Math.round(t))}snapToNextScale(e,t=.5){if(!this.effectiveLODs)return e*t;const o=Math.round(this.scaleToZoom(e));return this.zoomToScale(o+1)}snapToPreviousScale(e,t=2){if(!this.effectiveLODs)return e*t;const o=Math.round(this.scaleToZoom(e));return this.zoomToScale(o-1)}clone(){return new i({lods:this.lods,minZoom:this.minZoom,maxZoom:this.maxZoom,minScale:this.minScale,maxScale:this.maxScale})}_getClosestScale(e){return this._lodByScale[e]||(e=this._scales.reduce(((t,o)=>Math.abs(o-e)<=Math.abs(t-e)?o:t),this._scales[0])),this._lodByScale[e].scale}};e([o({readOnly:!0})],a.prototype,"effectiveLODs",void 0),e([o({readOnly:!0})],a.prototype,"effectiveMinZoom",void 0),e([o({readOnly:!0})],a.prototype,"effectiveMaxZoom",void 0),e([o({readOnly:!0})],a.prototype,"effectiveMinScale",void 0),e([o({readOnly:!0})],a.prototype,"effectiveMaxScale",void 0),e([o()],a.prototype,"lods",void 0),e([o()],a.prototype,"minZoom",void 0),e([o()],a.prototype,"maxZoom",void 0),e([o()],a.prototype,"minScale",void 0),e([o()],a.prototype,"maxScale",void 0),e([o()],a.prototype,"snapToZoom",void 0),a=i=e([s("esri.views.2d.constraints.ZoomConstraint")],a);const c=a;export{c as default};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- import e from"../../../core/Error.js";import{on as t}from"../../../core/events.js";import i from"../../../core/has.js";import{isSome as r}from"../../../core/maybe.js";import{addFrameTask as s}from"../../../core/scheduling.js";import{init as n}from"../../../core/watchUtils.js";import{t as a}from"../../../chunks/common.js";import{i as o,t as h,r as l}from"../../../chunks/mat2d.js";import{c as d}from"../../../chunks/mat2df64.js";import{c}from"../../../chunks/mat3f32.js";import{s as p,t as m}from"../../../chunks/vec2.js";import{a as u}from"../../../chunks/vec2f64.js";import _ from"../../../symbols/cim/CIMResourceManager.js";import g from"../../webgl/BufferObject.js";import f from"../../webgl/FramebufferObject.js";import"../../webgl/checkWebGLError.js";import"../../webgl/enums.js";import"../../../chunks/builtins.js";import{createProgram as b}from"../../webgl/programUtils.js";import"../../webgl/Texture.js";import R from"../../webgl/VertexArrayObject.js";import{createContextOrErrorHTML as w}from"../../webgl/context-util.js";import{Container as O}from"./Container.js";import{WGLDrawPhase as y}from"./webgl/enums.js";import F from"./webgl/Painter.js";import{Profiler as x}from"./webgl/Profiler.js";import{stencil as C}from"./webgl/shaders/StencilPrograms.js";import{Timeline as T}from"../support/Timeline.js";import{resampleHermite as j,encodeResult as B,createEmptyImageData as P}from"../../support/screenshotUtils.js";import{RenderingContext as v}from"../../webgl/RenderingContext.js";const k=2e3;class S extends O{constructor(n,a){super(),this._trash=new Set,this._clipData=new Float32Array(8),this._upperLeft=u(),this._upperRight=u(),this._lowerLeft=u(),this._lowerRight=u(),this._mat2=d(),this._clipRendererInitialized=!1,this._renderRemainingTime=0,this._lastFrameRenderTime=0,this.renderRequested=!1,this.stage=this,this._stationary=!0;const{canvas:o=document.createElement("canvas"),alpha:h=!0,stencil:l=!0,contextOptions:c={}}=a;this._canvas=o;const p=w(o,1,{alpha:h,antialias:!1,depth:!0,stencil:l});this.context=new v(r(p)?p:null,c),this.resourceManager=new _,this.painter=new F(this.context,this,this.resourceManager),i("esri-2d-profiler")&&(this._debugOutput=document.createElement("div"),this._debugOutput.setAttribute("style","margin: 24px 64px; position: absolute; color: red;"),n.appendChild(this._debugOutput)),this._renderParameters={drawPhase:0,state:this.state,pixelRatio:window.devicePixelRatio,stationary:!1,globalOpacity:1,blendMode:null,deltaTime:-1,time:0,inFadeTransition:!1,effects:null,context:this.context,painter:this.painter,timeline:a.timeline||new T,renderingOptions:a.renderingOptions,requireFBO:!1,profiler:new x(this.context,this._debugOutput),dataUploadCounter:0},this._taskHandle=s({render:e=>this.renderFrame(e)}),this._taskHandle.pause(),this._lostWebGLContextHandle=t(o,"webglcontextlost",(()=>{this.emit("webgl-error",{error:new e("webgl-context-lost")})})),o.setAttribute("style","width: 100%; height:100%; display:block;"),n.appendChild(o)}destroy(){this.removeAllChildren(),this._emptyTrash(),this._taskHandle.remove(),this._taskHandle=null,this._boundFBO=null,this._clipFBO&&(this._clipFBO.dispose(),this._clipFBO=null),this._clipVAO&&(this._clipVAO.dispose(),this._clipVAO=null,this._clipVBO=null),this._clipStencilProgram&&(this._clipStencilProgram.dispose(),this._clipStencilProgram=null),this._lostWebGLContextHandle&&(this._lostWebGLContextHandle.remove(),this._lostWebGLContextHandle=null),this._canvas.parentNode&&this._canvas.parentNode.removeChild(this._canvas),this._debugOutput&&this._debugOutput.parentNode&&this._debugOutput.parentNode.removeChild(this._debugOutput),this.highlightOptions=null,this.resourceManager.destroy(),this.painter.dispose(),this.context.dispose(),this._canvas=null}get background(){return this._background}set background(e){this._background=e,this.requestRender()}get highlightOptions(){return this._highlightOptions}set highlightOptions(e){this._highlightOptionsHandle&&(this._highlightOptionsHandle.remove(),this._highlightOptionsHandle=null),this._highlightOptions=e,this._highlightOptions&&(this._highlightOptionsHandle=n(this._highlightOptions,"version",(()=>{this.painter.setHighlightOptions(e),this.requestRender()})))}get renderingOptions(){return this._renderingOptions}set renderingOptions(e){this._renderingOptions=e,this.requestRender()}get state(){return this._state}set state(e){this._state=e,this.requestRender()}get stationary(){return this._stationary}set stationary(e){this._stationary!==e&&(this._stationary=e,this.requestRender())}trashDisplayObject(e){this._trash.add(e),this.requestRender()}untrashDisplayObject(e){return this._trash.delete(e)}requestRender(){this._renderRemainingTime=k,this.renderRequested||(this.renderRequested=!0,this.emit("will-render"),this._taskHandle.resume())}renderFrame(e){const t=this._lastFrameRenderTime?e.time-this._lastFrameRenderTime:0;this._renderRemainingTime-=t,this._renderRemainingTime<=0&&this._taskHandle.pause(),this._lastFrameRenderTime=e.time,this.renderRequested=!1,this._renderParameters.state=this._state,this._renderParameters.stationary=this.stationary,this._renderParameters.pixelRatio=window.devicePixelRatio,this._renderParameters.globalOpacity=1,this._renderParameters.time=e.time,this._renderParameters.deltaTime=e.deltaTime,this._renderParameters.effects=null,this.processRender(this._renderParameters),this._emptyTrash(),this.emit("post-render")}_createTransforms(){return{dvs:c()}}renderChildren(e){for(const t of this.children)t.beforeRender(e);this._renderChildren(this.children,e);for(const t of this.children)t.afterRender(e)}_renderChildren(e,t){const r=this.context;t.profiler.recordStart("drawLayers"),t.dataUploadCounter=0,this._beforeRenderChildren(t),t.drawPhase=y.MAP,this.painter.beforeRenderLayers(r,this.background);for(const i of e)i.processRender(t);this.painter.renderLayers(r),t.drawPhase=y.HIGHLIGHT,this.painter.beforeRenderLayers(r);for(const i of e)i.processRender(t);this.painter.renderLayers(r);if(this._isLabelDrawPhaseRequired(e)){t.drawPhase=y.LABEL,this.painter.beforeRenderLayers(r);for(const i of e)i.processRender(t);this.painter.renderLayers(r)}if(i("esri-tiles-debug")){t.drawPhase=y.DEBUG,this.painter.beforeRenderLayers(r);for(const i of e)i.processRender(t);this.painter.renderLayers(r)}t.profiler.recordEnd("drawLayers"),this._afterRenderChildren()}_beforeRenderChildren(e){const{context:t}=this,{state:i,pixelRatio:r}=e;t.enforceState(),t.setClearDepth(1),t.setClearColor(0,0,0,0),t.clear(t.gl.COLOR_BUFFER_BIT|t.gl.DEPTH_BUFFER_BIT);const{size:s,rotation:n}=i,d=Math.round(s[0]*r),c=Math.round(s[1]*r);this._boundFBO=t.getBoundFramebufferObject();if(!(i.spatialReference&&(i.spatialReference._isWrappable?i.spatialReference._isWrappable():i.spatialReference.isWrappable)))return void(this._clipFrame=!1);const u=a(n),_=Math.abs(Math.cos(u)),g=Math.abs(Math.sin(u)),b=Math.round(d*_+c*g),R=Math.round(i.worldScreenWidth);if(b<=R)return void(this._clipFrame=!1);this._clipFBO&&this._clipFBO.width===d&&this._clipFBO.height===c||(this._clipFBO=new f(t,{colorTarget:0,depthStencilTarget:3,width:d,height:c}));const w=(this.state.padding.left-this.state.padding.right)/2,O=(this.state.padding.bottom-this.state.padding.top)/2,y=.5*d,F=.5*c,x=1/d,C=1/c,T=R*r*.5,j=.5*(d*g+c*_),B=this._upperLeft,P=this._upperRight,v=this._lowerLeft,k=this._lowerRight;p(B,-T,-j),p(P,T,-j),p(v,-T,j),p(k,T,j),o(this._mat2),h(this._mat2,this._mat2,[y+w,F+O]),0!==n&&l(this._mat2,this._mat2,u),m(B,B,this._mat2),m(P,P,this._mat2),m(v,v,this._mat2),m(k,k,this._mat2);const S=this._clipData;S.set([2*v[0]*x-1,2*(c-v[1])*C-1,2*k[0]*x-1,2*(c-k[1])*C-1,2*B[0]*x-1,2*(c-B[1])*C-1,2*P[0]*x-1,2*(c-P[1])*C-1]),this._clipRendererInitialized||this._initializeClipRenderer(t),this._clipVBO.setData(S),this._boundFBO=t.getBoundFramebufferObject(),t.bindFramebuffer(this._clipFBO),t.setDepthWriteEnabled(!0),t.setStencilWriteMask(255),t.setClearColor(0,0,0,0),t.setClearDepth(1),t.setClearStencil(0),t.clear(t.gl.COLOR_BUFFER_BIT|t.gl.DEPTH_BUFFER_BIT|t.gl.STENCIL_BUFFER_BIT),t.setDepthWriteEnabled(!1),this._clipFrame=!0}_afterRenderChildren(){const e=this.context;if(e.logIno(),this._clipFrame&&this._clipRendererInitialized){if(e.bindFramebuffer(this._boundFBO),this._boundFBO=null,e.bindVAO(this._clipVAO),e.useProgram(this._clipStencilProgram),e.setDepthWriteEnabled(!1),e.setDepthTestEnabled(!1),e.setStencilTestEnabled(!0),e.setBlendingEnabled(!1),e.setColorMask(!1,!1,!1,!1),e.setStencilOp(7680,7680,7681),e.setStencilWriteMask(255),e.setStencilFunction(519,1,255),e.drawElements(4,6,5123,0),e.bindVAO(),e.setColorMask(!0,!0,!0,!0),null!=this.background){const{r:t,g:i,b:r,a:s}=this.background.color;e.setClearColor(s*t/255,s*i/255,s*r/255,s)}else e.setClearColor(0,0,0,0);e.clear(e.gl.COLOR_BUFFER_BIT),e.setBlendingEnabled(!0),e.setStencilFunction(514,1,255),this.painter.blitTexture(e,this._clipFBO.colorTexture,9728,1),e.setStencilTestEnabled(!1)}}doRender(e){const t=this.context,{state:i,pixelRatio:r}=e;this._resizeCanvas(e),this.context.enforceState(),t.setViewport(0,0,r*i.size[0],r*i.size[1]),t.setDepthWriteEnabled(!0),t.setStencilWriteMask(255),super.doRender(e)}async takeScreenshot(e){const{framebufferWidth:t,framebufferHeight:i}={framebufferWidth:Math.round(this._renderParameters.state.size[0]*e.resolutionScale),framebufferHeight:Math.round(this._renderParameters.state.size[1]*e.resolutionScale)},r=1,s=this.context,n=this._state.clone();if(null!=e.rotation){const t=n.viewpoint;n.viewpoint.rotation=e.rotation,n.viewpoint=t}const a={...this._renderParameters,drawPhase:null,globalOpacity:1,stationary:!0,state:n,pixelRatio:r,time:Date.now(),deltaTime:0,blendMode:null,effects:null,inFadeTransition:!1},o=new f(s,{colorTarget:0,depthStencilTarget:3,width:t,height:i}),h=s.getBoundFramebufferObject(),l=s.getViewport();s.bindFramebuffer(o),s.setViewport(0,0,t,i),this._renderChildren(e.children,a);const d=this._readbackScreenshot({...e.cropArea,y:i-(e.cropArea.y+e.cropArea.height)});let c;s.bindFramebuffer(h),s.setViewport(l.x,l.y,l.width,l.height),this.requestRender(),1===e.outputScale?c=d:(c=new ImageData(Math.round(d.width*e.outputScale),Math.round(d.height*e.outputScale)),j(d,c,!0));return B(c,{format:e.format,quality:e.quality,rotation:0,disableDecorations:!1},document.createElement("canvas"),{flipY:!0,premultipliedAlpha:!0})}_readbackScreenshot(e){const t=this.context.gl,i=P(e.width,e.height,document.createElement("canvas"));return t.readPixels(e.x,e.y,e.width,e.height,6408,5121,new Uint8Array(i.data.buffer)),i}_resizeCanvas(e){const t=this._canvas,i=t.style,{state:{size:r},pixelRatio:s}=e,n=r[0],a=r[1],o=Math.round(n*s),h=Math.round(a*s);t.width===o&&t.height===h||(t.width=o,t.height=h),i.width=n+"px",i.height=a+"px"}_initializeClipRenderer(e){if(this._clipRendererInitialized)return!0;const t=C.attributes,i=b(e,C);if(!i)return!1;const r=g.createVertex(e,35040,32),s=new Uint16Array([0,1,2,2,1,3]),n=g.createIndex(e,35044,s),a=new R(e,t,{geometry:[{name:"a_pos",count:2,type:5126,offset:0,stride:8,normalized:!1,divisor:0}]},{geometry:r},n);return this._clipStencilProgram=i,this._clipVBO=r,this._clipVAO=a,this._clipRendererInitialized=!0,!0}_emptyTrash(){for(;this._trash.size>0;){const e=Array.from(this._trash);this._trash.clear();for(const t of e)t.processDetach()}}_isLabelDrawPhaseRequired(e){let t=!1;for(const i of e){if(!(i instanceof O)){t=t||!1;break}if(i.hasLabels)return!0;t=t||this._isLabelDrawPhaseRequired(i.children)}return t}}export{k as EXTRA_RENDER_TIME,S as Stage};
5
+ import e from"../../../core/Error.js";import{on as t}from"../../../core/events.js";import i from"../../../core/has.js";import{isSome as r}from"../../../core/maybe.js";import{addFrameTask as s}from"../../../core/scheduling.js";import{init as n}from"../../../core/watchUtils.js";import{t as a}from"../../../chunks/common.js";import{i as o,t as h,r as l}from"../../../chunks/mat2d.js";import{c as d}from"../../../chunks/mat2df64.js";import{c}from"../../../chunks/mat3f32.js";import{s as p,t as m}from"../../../chunks/vec2.js";import{a as u}from"../../../chunks/vec2f64.js";import _ from"../../../symbols/cim/CIMResourceManager.js";import g from"../../webgl/BufferObject.js";import f from"../../webgl/FramebufferObject.js";import"../../webgl/checkWebGLError.js";import"../../webgl/enums.js";import"../../../chunks/builtins.js";import{createProgram as b}from"../../webgl/programUtils.js";import"../../webgl/Texture.js";import R from"../../webgl/VertexArrayObject.js";import{createContextOrErrorHTML as w}from"../../webgl/context-util.js";import{Container as O}from"./Container.js";import{WGLDrawPhase as y}from"./webgl/enums.js";import F from"./webgl/Painter.js";import{Profiler as x}from"./webgl/Profiler.js";import{stencil as C}from"./webgl/shaders/StencilPrograms.js";import{Timeline as T}from"../support/Timeline.js";import{resampleHermite as j,encodeResult as B,createEmptyImageData as P}from"../../support/screenshotUtils.js";import{RenderingContext as v}from"../../webgl/RenderingContext.js";const k=2e3;class S extends O{constructor(n,a){super(),this._trash=new Set,this._clipData=new Float32Array(8),this._upperLeft=u(),this._upperRight=u(),this._lowerLeft=u(),this._lowerRight=u(),this._mat2=d(),this._clipRendererInitialized=!1,this._renderRemainingTime=0,this._lastFrameRenderTime=0,this.renderRequested=!1,this.stage=this,this._stationary=!0;const{canvas:o=document.createElement("canvas"),alpha:h=!0,stencil:l=!0,contextOptions:c={}}=a;this._canvas=o;const p=w(o,1,{alpha:h,antialias:!1,depth:!0,stencil:l});this.context=new v(r(p)?p:null,c),this.resourceManager=new _,this.painter=new F(this.context,this,this.resourceManager),i("esri-2d-profiler")&&(this._debugOutput=document.createElement("div"),this._debugOutput.setAttribute("style","margin: 24px 64px; position: absolute; color: red;"),n.appendChild(this._debugOutput)),this._renderParameters={drawPhase:0,state:this.state,pixelRatio:window.devicePixelRatio,stationary:!1,globalOpacity:1,blendMode:null,deltaTime:-1,time:0,inFadeTransition:!1,effects:null,context:this.context,painter:this.painter,timeline:a.timeline||new T,renderingOptions:a.renderingOptions,requireFBO:!1,profiler:new x(this.context,this._debugOutput),dataUploadCounter:0},this._taskHandle=s({render:e=>this.renderFrame(e)}),this._taskHandle.pause(),this._lostWebGLContextHandle=t(o,"webglcontextlost",(()=>{this.emit("webgl-error",{error:new e("webgl-context-lost")})})),o.setAttribute("style","width: 100%; height:100%; display:block;"),n.appendChild(o)}destroy(){this.removeAllChildren(),this._emptyTrash(),this._taskHandle.remove(),this._taskHandle=null,this._boundFBO=null,this._clipFBO&&(this._clipFBO.dispose(),this._clipFBO=null),this._clipVAO&&(this._clipVAO.dispose(),this._clipVAO=null,this._clipVBO=null),this._clipStencilProgram&&(this._clipStencilProgram.dispose(),this._clipStencilProgram=null),this._lostWebGLContextHandle&&(this._lostWebGLContextHandle.remove(),this._lostWebGLContextHandle=null),this._canvas.parentNode&&this._canvas.parentNode.removeChild(this._canvas),this._debugOutput&&this._debugOutput.parentNode&&this._debugOutput.parentNode.removeChild(this._debugOutput),this.highlightOptions=null,this.resourceManager.destroy(),this.painter.dispose(),this.context.dispose(),this._canvas=null}get background(){return this._background}set background(e){this._background=e,this.requestRender()}get highlightOptions(){return this._highlightOptions}set highlightOptions(e){this._highlightOptionsHandle&&(this._highlightOptionsHandle.remove(),this._highlightOptionsHandle=null),this._highlightOptions=e,this._highlightOptions&&(this._highlightOptionsHandle=n(this._highlightOptions,"version",(()=>{this.painter.setHighlightOptions(e),this.requestRender()})))}get renderingOptions(){return this._renderingOptions}set renderingOptions(e){this._renderingOptions=e,this.requestRender()}get state(){return this._state}set state(e){this._state=e,this.requestRender()}get stationary(){return this._stationary}set stationary(e){this._stationary!==e&&(this._stationary=e,this.requestRender())}trashDisplayObject(e){this._trash.add(e),this.requestRender()}untrashDisplayObject(e){return this._trash.delete(e)}requestRender(){this._renderRemainingTime=k,this.renderRequested||(this.renderRequested=!0,this.emit("will-render"),this._taskHandle.resume())}renderFrame(e){const t=this._lastFrameRenderTime?e.time-this._lastFrameRenderTime:0;this._renderRemainingTime-=t,this._renderRemainingTime<=0&&this._taskHandle.pause(),this._lastFrameRenderTime=e.time,this.renderRequested=!1,this._renderParameters.state=this._state,this._renderParameters.stationary=this.stationary,this._renderParameters.pixelRatio=window.devicePixelRatio,this._renderParameters.globalOpacity=1,this._renderParameters.time=e.time,this._renderParameters.deltaTime=e.deltaTime,this._renderParameters.effects=null,this.processRender(this._renderParameters),this._emptyTrash(),this.emit("post-render")}_createTransforms(){return{dvs:c()}}renderChildren(e){for(const t of this.children)t.beforeRender(e);this._renderChildren(this.children,e);for(const t of this.children)t.afterRender(e)}_renderChildren(e,t){const r=this.context;t.profiler.recordStart("drawLayers"),t.dataUploadCounter=0,this._beforeRenderChildren(t),t.drawPhase=y.MAP,this.painter.beforeRenderLayers(r,this.background);for(const i of e)i.processRender(t);this.painter.renderLayers(r),t.drawPhase=y.HIGHLIGHT,this.painter.beforeRenderLayers(r);for(const i of e)i.processRender(t);this.painter.renderLayers(r);if(this._isLabelDrawPhaseRequired(e)){t.drawPhase=y.LABEL,this.painter.beforeRenderLayers(r);for(const i of e)i.processRender(t);this.painter.renderLayers(r)}if(i("esri-tiles-debug")){t.drawPhase=y.DEBUG,this.painter.beforeRenderLayers(r);for(const i of e)i.processRender(t);this.painter.renderLayers(r)}t.profiler.recordEnd("drawLayers"),this._afterRenderChildren()}_beforeRenderChildren(e){const{context:t}=this,{state:i,pixelRatio:r}=e;t.enforceState(),t.setClearDepth(1),t.setClearColor(0,0,0,0),t.clear(t.gl.COLOR_BUFFER_BIT|t.gl.DEPTH_BUFFER_BIT);const{size:s,rotation:n}=i,d=Math.round(s[0]*r),c=Math.round(s[1]*r);this._boundFBO=t.getBoundFramebufferObject();if(!(i.spatialReference&&(i.spatialReference._isWrappable?i.spatialReference._isWrappable():i.spatialReference.isWrappable)))return void(this._clipFrame=!1);const u=a(n),_=Math.abs(Math.cos(u)),g=Math.abs(Math.sin(u)),b=Math.round(d*_+c*g),R=Math.round(i.worldScreenWidth);if(b<=R)return void(this._clipFrame=!1);this._clipFBO&&this._clipFBO.width===d&&this._clipFBO.height===c||(this._clipFBO=new f(t,{colorTarget:0,depthStencilTarget:3,width:d,height:c}));const w=(this.state.padding.left-this.state.padding.right)/2,O=(this.state.padding.bottom-this.state.padding.top)/2,y=.5*d,F=.5*c,x=1/d,C=1/c,T=R*r*.5,j=.5*(d*g+c*_),B=this._upperLeft,P=this._upperRight,v=this._lowerLeft,k=this._lowerRight;p(B,-T,-j),p(P,T,-j),p(v,-T,j),p(k,T,j),o(this._mat2),h(this._mat2,this._mat2,[y+w,F-O]),0!==n&&l(this._mat2,this._mat2,u),m(B,B,this._mat2),m(P,P,this._mat2),m(v,v,this._mat2),m(k,k,this._mat2);const S=this._clipData;S.set([2*v[0]*x-1,2*(c-v[1])*C-1,2*k[0]*x-1,2*(c-k[1])*C-1,2*B[0]*x-1,2*(c-B[1])*C-1,2*P[0]*x-1,2*(c-P[1])*C-1]),this._clipRendererInitialized||this._initializeClipRenderer(t),this._clipVBO.setData(S),this._boundFBO=t.getBoundFramebufferObject(),t.bindFramebuffer(this._clipFBO),t.setDepthWriteEnabled(!0),t.setStencilWriteMask(255),t.setClearColor(0,0,0,0),t.setClearDepth(1),t.setClearStencil(0),t.clear(t.gl.COLOR_BUFFER_BIT|t.gl.DEPTH_BUFFER_BIT|t.gl.STENCIL_BUFFER_BIT),t.setDepthWriteEnabled(!1),this._clipFrame=!0}_afterRenderChildren(){const e=this.context;if(e.logIno(),this._clipFrame&&this._clipRendererInitialized){if(e.bindFramebuffer(this._boundFBO),this._boundFBO=null,e.bindVAO(this._clipVAO),e.useProgram(this._clipStencilProgram),e.setDepthWriteEnabled(!1),e.setDepthTestEnabled(!1),e.setStencilTestEnabled(!0),e.setBlendingEnabled(!1),e.setColorMask(!1,!1,!1,!1),e.setStencilOp(7680,7680,7681),e.setStencilWriteMask(255),e.setStencilFunction(519,1,255),e.drawElements(4,6,5123,0),e.bindVAO(),e.setColorMask(!0,!0,!0,!0),null!=this.background){const{r:t,g:i,b:r,a:s}=this.background.color;e.setClearColor(s*t/255,s*i/255,s*r/255,s)}else e.setClearColor(0,0,0,0);e.clear(e.gl.COLOR_BUFFER_BIT),e.setBlendingEnabled(!0),e.setStencilFunction(514,1,255),this.painter.blitTexture(e,this._clipFBO.colorTexture,9728,1),e.setStencilTestEnabled(!1)}}doRender(e){const t=this.context,{state:i,pixelRatio:r}=e;this._resizeCanvas(e),this.context.enforceState(),t.setViewport(0,0,r*i.size[0],r*i.size[1]),t.setDepthWriteEnabled(!0),t.setStencilWriteMask(255),super.doRender(e)}async takeScreenshot(e){const{framebufferWidth:t,framebufferHeight:i}={framebufferWidth:Math.round(this._renderParameters.state.size[0]*e.resolutionScale),framebufferHeight:Math.round(this._renderParameters.state.size[1]*e.resolutionScale)},r=1,s=this.context,n=this._state.clone();if(null!=e.rotation){const t=n.viewpoint;n.viewpoint.rotation=e.rotation,n.viewpoint=t}const a={...this._renderParameters,drawPhase:null,globalOpacity:1,stationary:!0,state:n,pixelRatio:r,time:Date.now(),deltaTime:0,blendMode:null,effects:null,inFadeTransition:!1},o=new f(s,{colorTarget:0,depthStencilTarget:3,width:t,height:i}),h=s.getBoundFramebufferObject(),l=s.getViewport();s.bindFramebuffer(o),s.setViewport(0,0,t,i),this._renderChildren(e.children,a);const d=this._readbackScreenshot({...e.cropArea,y:i-(e.cropArea.y+e.cropArea.height)});let c;s.bindFramebuffer(h),s.setViewport(l.x,l.y,l.width,l.height),this.requestRender(),1===e.outputScale?c=d:(c=new ImageData(Math.round(d.width*e.outputScale),Math.round(d.height*e.outputScale)),j(d,c,!0));return B(c,{format:e.format,quality:e.quality,rotation:0,disableDecorations:!1},document.createElement("canvas"),{flipY:!0,premultipliedAlpha:!0})}_readbackScreenshot(e){const t=this.context.gl,i=P(e.width,e.height,document.createElement("canvas"));return t.readPixels(e.x,e.y,e.width,e.height,6408,5121,new Uint8Array(i.data.buffer)),i}_resizeCanvas(e){const t=this._canvas,i=t.style,{state:{size:r},pixelRatio:s}=e,n=r[0],a=r[1],o=Math.round(n*s),h=Math.round(a*s);t.width===o&&t.height===h||(t.width=o,t.height=h),i.width=n+"px",i.height=a+"px"}_initializeClipRenderer(e){if(this._clipRendererInitialized)return!0;const t=C.attributes,i=b(e,C);if(!i)return!1;const r=g.createVertex(e,35040,32),s=new Uint16Array([0,1,2,2,1,3]),n=g.createIndex(e,35044,s),a=new R(e,t,{geometry:[{name:"a_pos",count:2,type:5126,offset:0,stride:8,normalized:!1,divisor:0}]},{geometry:r},n);return this._clipStencilProgram=i,this._clipVBO=r,this._clipVAO=a,this._clipRendererInitialized=!0,!0}_emptyTrash(){for(;this._trash.size>0;){const e=Array.from(this._trash);this._trash.clear();for(const t of e)t.processDetach()}}_isLabelDrawPhaseRequired(e){let t=!1;for(const i of e){if(!(i instanceof O)){t=t||!1;break}if(i.hasLabels)return!0;t=t||this._isLabelDrawPhaseRequired(i.children)}return t}}export{k as EXTRA_RENDER_TIME,S as Stage};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- import{isSome as e,isNone as t}from"../../../../../core/maybe.js";import{pt2px as i}from"../../../../../core/screenUtils.js";import{FILTER_FLAG_0 as o,EFFECT_FLAG_0 as r}from"../definitions.js";import{CollisionBitsetGrid as n,NONE as s,HAS_COLLISION as a,OUTSIDE_EXTENT as l}from"./CollisionGrid.js";import{getSizeForValueSimple as c}from"./visualVariableSimpleUtils.js";const d=254,u=255,f=0;function b(t,i){const o=[];t.forEachTile((e=>o.push(e))),o.sort(((e,t)=>e.instanceId-t.instanceId)),o.forEach((t=>{e(t.labelMetrics)&&t.isReady&&i(t,t.labelMetrics.getCursor())}))}function y(e){return"feature"===e.layer.type||"csv"===e.layer.type||"geojson"===e.layer.type||"ogc-feature"===e.layer.type||"stream"===e.layer.type||"subtype-group"===e.layer.type||"wfs"===e.layer.type}function p(e){return t=>i(c(t,e))}function m(e){const t="visualVariables"in e&&e.visualVariables;if(!t)return null;for(const i of t)if("size"===i.type)return p(i);return null}function h(e){for(const i of e){var t;const e="featureReduction"in i&&"cluster"===(null==(t=i.featureReduction)?void 0:t.type)&&i.featureReduction,o=[...i.labelingInfo||[],...e.labelingInfo||[]];if(!i.labelsVisible||!o.length)continue;if(o.some((e=>"none"===e.deconflictionStrategy)))return!0}return!1}function M(e,i){if(!y(i))return;const o="subtype-group"===i.layer.type?i.layer.sublayers.items:[i.layer],r=i.layer.geometryType,n=!h(o),s={};if("subtype-group"!==i.layer.type){if("heatmap"===i.layer.renderer.type)return;const e=m(i.layer.renderer);s[0]=e}const a=i.tileRenderer;if(t(a))return;const l=i.layer.visible&&!i.suspended;e.push({tileRenderer:a,vvEvaluators:s,deconflictionEnabled:n,geometryType:r,visible:l})}class g{run(e,t,i){const o=[];for(let r=e.length-1;r>=0;r--){M(o,e[r])}this._transformMetrics(o,t),this._runCollision(o,t,i)}_runCollision(e,t,i){const[o,r]=t.state.size,s=new n(o*t.pixelRatio,r*t.pixelRatio);for(const{tileRenderer:n,deconflictionEnabled:a,visible:l,geometryType:c}of e){const e=n.featuresView.attributeView;if(!a){b(n,((t,i)=>{for(;i.nextId();)e.setLabelMinZoom(i.id,f)}));continue}if(!l){b(n,((t,i)=>{for(;i.nextId();)e.setLabelMinZoom(i.id,u)}));continue}const t="polyline"===c;this._prepare(n),this._collideVisible(s,n,i,t),this._collideInvisible(s,n,t)}}_isFiltered(t,i,n){const s=i.getFilterFlags(t),a=!n.hasFilter||!!(s&o),l=!e(n.featureEffect)||n.featureEffect.excludedLabelsVisible||!!(s&r);return!(a&&l)}_prepare(e){const t=e.featuresView.attributeView,i=new Set;b(e,((o,r)=>{for(;r.nextId();){if(i.has(r.id))continue;if(i.add(r.id),this._isFiltered(r.id,t,e.layerView)){t.setLabelMinZoom(r.id,d);continue}t.getLabelMinZoom(r.id)!==f?t.setLabelMinZoom(r.id,u):t.setLabelMinZoom(r.id,f)}}))}_collideVisible(e,t,i,o){const r=t.featuresView.attributeView,n=new Set;b(t,((t,c)=>{for(;c.nextId();)if(!n.has(c.id))if(t.key.level===i){if(0===r.getLabelMinZoom(c.id)){switch(e.insertMetrics(c,o)){case l:break;case a:r.setLabelMinZoom(c.id,d),n.add(c.id);break;case s:r.setLabelMinZoom(c.id,f),n.add(c.id)}}}else r.setLabelMinZoom(c.id,d)}))}_collideInvisible(e,t,i){const o=t.featuresView.attributeView,r=new Set;b(t,((t,n)=>{for(;n.nextId();)if(!r.has(n.id)&&o.getLabelMinZoom(n.id)===u){switch(e.insertMetrics(n,i)){case l:break;case a:o.setLabelMinZoom(n.id,u),r.add(n.id);break;case s:o.setLabelMinZoom(n.id,f),r.add(n.id)}}}))}_transformMetrics(t,i){for(const{tileRenderer:o,geometryType:r,vvEvaluators:n}of t)b(o,((t,s)=>{const a=o.featuresView.attributeView,l=t.transforms.labelMat2d;l[4]=Math.round(l[4]),l[5]=Math.round(l[5]);const c=l[4],d=l[5],u="polyline"===r;for(;s.next();){const t=s.boundsCount,o=s.anchorX,r=s.anchorY;let f=s.size;const b=n[0];if(e(b)){const e=b(a.getVVSize(s.id));f=isNaN(e)||null==e||e===1/0?f:e}const y=s.directionX*(f/2),p=s.directionY*(f/2);for(let e=0;e<t;e++){let t=o,n=s.anchorY;if(u){let o=t+s.boundsX(e)+y,r=n+s.boundsY(e)+p;i.state.rotation?(o=l[0]*o+l[2]*r+l[4],r=l[1]*o+l[3]*r+l[5]):(o+=c,r+=d),s.setBoundsComputedAnchorX(e,Math.floor(o)),s.setBoundsComputedAnchorY(e,Math.floor(r))}else{i.state.rotation?(t=l[0]*o+l[2]*r+l[4],n=l[1]*o+l[3]*r+l[5]):(t+=c,n+=d);const a=t+s.boundsX(e)+y,u=n+s.boundsY(e)+p;s.setBoundsComputedAnchorX(e,a),s.setBoundsComputedAnchorY(e,u)}}}}))}}export{g as CollisionEngine};
5
+ import{isSome as e,isNone as t}from"../../../../../core/maybe.js";import{pt2px as i}from"../../../../../core/screenUtils.js";import{FILTER_FLAG_0 as o,EFFECT_FLAG_0 as r}from"../definitions.js";import{CollisionBitsetGrid as n,NONE as s,HAS_COLLISION as a,OUTSIDE_EXTENT as l}from"./CollisionGrid.js";import{getSizeForValueSimple as d}from"./visualVariableSimpleUtils.js";const c=254,u=255,f=0;function b(t,i){const o=[];t.forEachTile((e=>o.push(e))),o.sort(((e,t)=>e.instanceId-t.instanceId)),o.forEach((t=>{e(t.labelMetrics)&&t.isReady&&i(t,t.labelMetrics.getCursor())}))}function p(e){return"feature"===e.layer.type||"csv"===e.layer.type||"geojson"===e.layer.type||"ogc-feature"===e.layer.type||"stream"===e.layer.type||"subtype-group"===e.layer.type||"wfs"===e.layer.type}function y(e){return t=>i(d(t,e))}function m(e){const t="visualVariables"in e&&e.visualVariables;if(!t)return null;for(const i of t)if("size"===i.type)return y(i);return null}function h(e){for(const i of e){var t;const e="featureReduction"in i&&"cluster"===(null==(t=i.featureReduction)?void 0:t.type)&&i.featureReduction,o=[...i.labelingInfo||[],...e.labelingInfo||[]];if(!i.labelsVisible||!o.length)continue;if(o.some((e=>"none"===e.deconflictionStrategy)))return!0}return!1}function M(e,i){if(!p(i))return;const o="subtype-group"===i.layer.type?i.layer.sublayers.items:[i.layer],r=i.layer.geometryType,n=!h(o),s={};if("subtype-group"!==i.layer.type){if("heatmap"===i.layer.renderer.type)return;const e=m(i.layer.renderer);s[0]=e}const a=i.tileRenderer;if(t(a))return;const l=i.layer.visible&&!i.suspended;e.push({tileRenderer:a,vvEvaluators:s,deconflictionEnabled:n,geometryType:r,visible:l})}class g{run(e,t,i){const o=[];for(let r=e.length-1;r>=0;r--){M(o,e[r])}this._transformMetrics(o,t),this._runCollision(o,t,i)}_runCollision(e,t,i){const[o,r]=t.state.size,s=new n(o*t.pixelRatio,r*t.pixelRatio);for(const{tileRenderer:n,deconflictionEnabled:a,visible:l}of e){const e=n.featuresView.attributeView;a?l?(this._prepare(n),this._collideVisible(s,n,i),this._collideInvisible(s,n)):b(n,((t,i)=>{for(;i.nextId();)e.setLabelMinZoom(i.id,u)})):b(n,((t,i)=>{for(;i.nextId();)e.setLabelMinZoom(i.id,f)}))}}_isFiltered(t,i,n){const s=i.getFilterFlags(t),a=!n.hasFilter||!!(s&o),l=!e(n.featureEffect)||n.featureEffect.excludedLabelsVisible||!!(s&r);return!(a&&l)}_prepare(e){const t=e.featuresView.attributeView,i=new Set;b(e,((o,r)=>{for(;r.nextId();){if(i.has(r.id))continue;if(i.add(r.id),this._isFiltered(r.id,t,e.layerView)){t.setLabelMinZoom(r.id,c);continue}t.getLabelMinZoom(r.id)!==f?t.setLabelMinZoom(r.id,u):t.setLabelMinZoom(r.id,f)}}))}_collideVisible(e,t,i){const o=t.featuresView.attributeView,r=new Set;b(t,((t,n)=>{for(;n.nextId();)if(!r.has(n.id))if(t.key.level===i){if(0===o.getLabelMinZoom(n.id)){switch(e.insertMetrics(n)){case l:break;case a:o.setLabelMinZoom(n.id,c),r.add(n.id);break;case s:o.setLabelMinZoom(n.id,f),r.add(n.id)}}}else o.setLabelMinZoom(n.id,c)}))}_collideInvisible(e,t){const i=t.featuresView.attributeView,o=new Set;b(t,((t,r)=>{for(;r.nextId();)if(!o.has(r.id)&&i.getLabelMinZoom(r.id)===u){switch(e.insertMetrics(r)){case l:break;case a:i.setLabelMinZoom(r.id,u),o.add(r.id);break;case s:i.setLabelMinZoom(r.id,f),o.add(r.id)}}}))}_transformMetrics(t,i){for(const{tileRenderer:o,geometryType:r,vvEvaluators:n}of t)b(o,((t,s)=>{const a=o.featuresView.attributeView,l=t.transforms.labelMat2d;l[4]=Math.round(l[4]),l[5]=Math.round(l[5]);const d=l[4],c=l[5],u="polyline"===r;for(;s.next();){const t=s.boundsCount,o=s.anchorX,r=s.anchorY;let f=s.size;const b=n[0];if(e(b)){const e=b(a.getVVSize(s.id));f=isNaN(e)||null==e||e===1/0?f:e}const p=s.directionX*(f/2),y=s.directionY*(f/2);for(let e=0;e<t;e++){let t=o,n=s.anchorY;if(u){let o=t+s.boundsX(e)+p,r=n+s.boundsY(e)+y;i.state.rotation?(o=l[0]*o+l[2]*r+l[4],r=l[1]*o+l[3]*r+l[5]):(o+=d,r+=c),s.setBoundsComputedAnchorX(e,Math.floor(o)),s.setBoundsComputedAnchorY(e,Math.floor(r))}else{i.state.rotation?(t=l[0]*o+l[2]*r+l[4],n=l[1]*o+l[3]*r+l[5]):(t+=d,n+=c);const a=t+s.boundsX(e)+p,u=n+s.boundsY(e)+y;s.setBoundsComputedAnchorX(e,a),s.setBoundsComputedAnchorY(e,u)}}}}))}}export{g as CollisionEngine};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- import{clamp as t}from"../../../../../core/mathUtils.js";import{TILE_SIZE as s}from"../definitions.js";import{StaticBitSet as e}from"../../../layers/features/support/StaticBitSet.js";const i=2,o=1,h=0,r=1,n=2;class c{constructor(t,s){this.width=t,this.height=s;const i=Math.ceil(t/o),h=Math.ceil(s/o);this._cols=i,this._rows=h,this._cells=e.create(i*h)}insertMetrics(t,s){if(s)return this._markMetrics(t),h;const e=this._hasCollision(t);return e===h&&this._markMetrics(t),e}getCellId(t,s){return t+s*this._cols}has(t){return this._cells.has(t)}hasRange(t,s){return this._cells.hasRange(t,s)}set(t){this._cells.set(t)}setRange(t,s){this._cells.setRange(t,s)}_hasCollision(t){const s=t.id;let e=0,o=0;t.save();do{const s=t.boundsCount;e+=s;for(let e=0;e<s;e++){const s=t.boundsComputedAnchorX(e),h=t.boundsComputedAnchorY(e),c=t.boundsWidth(e)+i,l=t.boundsHeight(e)+i;switch(this._collide(s,h,c,l)){case n:return n;case r:o++}}}while(t.peekId()===s&&t.next());return t.restore(),e===o?r:h}_collide(s,e,i,c){const l=s-i/2,_=e-c/2,a=l+i,u=_+c;if(a<0||u<0||l>this.width||_>this.height)return r;const d=t(Math.floor(l/o),0,this._cols),g=t(Math.floor(_/o),0,this._rows),f=t(Math.ceil(a/o),0,this._cols),m=t(Math.ceil(u/o),0,this._rows);for(let t=g;t<=m;t++)for(let s=d;s<=f;s++){const e=this.getCellId(s,t);if(this.has(e))return n}return h}_mark(s,e,i,h){const r=s-i/2,n=e-h/2,c=r+i,l=n+h,_=t(Math.floor(r/o),0,this._cols),a=t(Math.floor(n/o),0,this._rows),u=t(Math.ceil(c/o),0,this._cols),d=t(Math.ceil(l/o),0,this._rows);for(let t=a;t<=d;t++)for(let s=_;s<=u;s++){const e=this.getCellId(s,t);this.set(e)}return!1}_markMetrics(t){const s=t.id;do{const s=t.boundsCount;for(let e=0;e<s;e++){const s=t.boundsComputedAnchorX(e),o=t.boundsComputedAnchorY(e),h=t.boundsWidth(e)+i,r=t.boundsHeight(e)+i;this._mark(s,o,h,r)}}while(t.peekId()===s&&t.next())}}class l{constructor(t,e=2){this._bucketSize=t,this._rowsLength=s/t,this._colsLength=s/t,this._elementsPerBucket=e,this._grid=this._initGrid()}checkOverlap(t,s){const e=Math.floor(t/this._bucketSize),i=Math.floor(s/this._bucketSize);return e<0||e>=this._rowsLength||i<0||i>=this._colsLength||this._grid[i*this._colsLength+e]>=this._elementsPerBucket}markUsed(t,s){const e=Math.floor(t/this._bucketSize),i=Math.floor(s/this._bucketSize);this._grid[i*this._colsLength+e]+=1}reset(){this._grid=this._initGrid()}_initGrid(){return new Uint8Array(this._rowsLength*this._colsLength)}}export{c as CollisionBitsetGrid,l as CollisionGrid,n as HAS_COLLISION,h as NONE,r as OUTSIDE_EXTENT};
5
+ import{clamp as t}from"../../../../../core/mathUtils.js";import{TILE_SIZE as s}from"../definitions.js";import{StaticBitSet as e}from"../../../layers/features/support/StaticBitSet.js";const i=2,o=1,h=0,r=1,n=2;class c{constructor(t,s){this.width=t,this.height=s;const i=Math.ceil(t/o),h=Math.ceil(s/o);this._cols=i,this._rows=h,this._cells=e.create(i*h)}insertMetrics(t){const s=this._hasCollision(t);return s===h&&this._markMetrics(t),s}getCellId(t,s){return t+s*this._cols}has(t){return this._cells.has(t)}hasRange(t,s){return this._cells.hasRange(t,s)}set(t){this._cells.set(t)}setRange(t,s){this._cells.setRange(t,s)}_hasCollision(t){const s=t.id;let e=0,o=0;t.save();do{const s=t.boundsCount;e+=s;for(let e=0;e<s;e++){const s=t.boundsComputedAnchorX(e),h=t.boundsComputedAnchorY(e),c=t.boundsWidth(e)+i,l=t.boundsHeight(e)+i;switch(this._collide(s,h,c,l)){case n:return n;case r:o++}}}while(t.peekId()===s&&t.next());return t.restore(),e===o?r:h}_collide(s,e,i,c){const l=s-i/2,_=e-c/2,a=l+i,u=_+c;if(a<0||u<0||l>this.width||_>this.height)return r;const d=t(Math.floor(l/o),0,this._cols),g=t(Math.floor(_/o),0,this._rows),f=t(Math.ceil(a/o),0,this._cols),m=t(Math.ceil(u/o),0,this._rows);for(let t=g;t<=m;t++)for(let s=d;s<=f;s++){const e=this.getCellId(s,t);if(this.has(e))return n}return h}_mark(s,e,i,h){const r=s-i/2,n=e-h/2,c=r+i,l=n+h,_=t(Math.floor(r/o),0,this._cols),a=t(Math.floor(n/o),0,this._rows),u=t(Math.ceil(c/o),0,this._cols),d=t(Math.ceil(l/o),0,this._rows);for(let t=a;t<=d;t++)for(let s=_;s<=u;s++){const e=this.getCellId(s,t);this.set(e)}return!1}_markMetrics(t){const s=t.id;do{const s=t.boundsCount;for(let e=0;e<s;e++){const s=t.boundsComputedAnchorX(e),o=t.boundsComputedAnchorY(e),h=t.boundsWidth(e)+i,r=t.boundsHeight(e)+i;this._mark(s,o,h,r)}}while(t.peekId()===s&&t.next())}}class l{constructor(t,e=2){this._bucketSize=t,this._rowsLength=s/t,this._colsLength=s/t,this._elementsPerBucket=e,this._grid=this._initGrid()}checkOverlap(t,s){const e=Math.floor(t/this._bucketSize),i=Math.floor(s/this._bucketSize);return e<0||e>=this._rowsLength||i<0||i>=this._colsLength||this._grid[i*this._colsLength+e]>=this._elementsPerBucket}markUsed(t,s){const e=Math.floor(t/this._bucketSize),i=Math.floor(s/this._bucketSize);this._grid[i*this._colsLength+e]+=1}reset(){this._grid=this._initGrid()}_initGrid(){return new Uint8Array(this._rowsLength*this._colsLength)}}export{c as CollisionBitsetGrid,l as CollisionGrid,n as HAS_COLLISION,h as NONE,r as OUTSIDE_EXTENT};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- import e from"../../../../../../core/Logger.js";import{analyzeCIMResource as t}from"../../../../../../symbols/cim/cimAnalyzer.js";import{evaluateValueOrFunction as a}from"../../../../../../symbols/cim/utils.js";import s from"./WGLMeshTemplate.js";const i=e.getLogger("esri.views.2d.engine.webgl.WGLDynamicMeshTemplate");class r extends s{constructor(e){super(),this._ongoingMaterialRequestMap=new Map,this._materialCache=new Map,this._dynamicPropertyMap=new Map,this._cimLayer=e}analyze(e,s,r,n,o){const l=s.readLegacyFeature(),m=this._materialCache,c=this._cimLayer.materialHash;if(!c)return i.error("A Dynamic mesh template must have a material hash value or function!"),Promise.reject(null);const h="function"==typeof c?c(l,r,n):c;if(m.has(h)){const e=m.get(h);return Promise.resolve(e)}if(this._ongoingMaterialRequestMap.has(h))return this._ongoingMaterialRequestMap.get(h);const u=this._cimLayer,p=t(u.cim,this._cimLayer.materialOverrides),{type:g,url:M}=u,y={cim:p,type:g,mosaicHash:h,url:M,size:null,dashTemplate:null,text:null,fontName:null};switch(g){case"marker":y.size=a(u.size,l,r,n);break;case"line":y.dashTemplate=u.dashTemplate;break;case"text":y.text=a(u.text,l,r,n),y.fontName=a(u.fontName,l,r,n)}const f=e.getMosaicItem(y,o).then((e=>(this._ongoingMaterialRequestMap.delete(h),m.set(h,e),e))).catch((e=>(this._ongoingMaterialRequestMap.delete(h),i.error(".analyze()",e.message),null)));return this._ongoingMaterialRequestMap.set(h,f),f}}export{r as default};
5
+ import e from"../../../../../../core/Logger.js";import{analyzeCIMResource as t}from"../../../../../../symbols/cim/cimAnalyzer.js";import{evaluateValueOrFunction as a}from"../../../../../../symbols/cim/utils.js";import s from"./WGLMeshTemplate.js";const i=e.getLogger("esri.views.2d.engine.webgl.WGLDynamicMeshTemplate");class r extends s{constructor(e){super(),this._ongoingMaterialRequestMap=new Map,this._materialCache=new Map,this._dynamicPropertyMap=new Map,this._cimLayer=e}analyze(e,s,r,n,o){if(o&&0===o.length)return null;const l=o&&o.length>0,m=s.readLegacyFeature(),c=this._materialCache,h=this._cimLayer.materialHash;if(!h)return i.error("A Dynamic mesh template must have a material hash value or function!"),Promise.reject(null);const u="function"==typeof h?h(m,r,n):h;if(c.has(u)){const e=c.get(u);return Promise.resolve(e)}const p=this._ongoingMaterialRequestMap.get(u);if(p)return p;const g=this._cimLayer,y=t(g.cim,this._cimLayer.materialOverrides);y.mosaicHash=u;const{type:M,url:f}=g,_={cim:y,type:M,mosaicHash:u,url:f,size:null,dashTemplate:null,text:null,fontName:null};switch(M){case"marker":_.size=a(g.size,m,r,n);break;case"line":_.dashTemplate=g.dashTemplate;break;case"text":_.text=a(g.text,m,r,n),_.fontName=a(g.fontName,m,r,n)}const d=e.getMosaicItem(_,o).then((e=>(l||(this._ongoingMaterialRequestMap.delete(u),c.set(u,e)),e))).catch((e=>(this._ongoingMaterialRequestMap.delete(u),i.error(".analyze()",e.message),null)));return l||this._ongoingMaterialRequestMap.set(u,d),d}}export{r as default};
@@ -2,4 +2,4 @@
2
2
  All material copyright ESRI, All Rights Reserved, unless otherwise specified.
3
3
  See https://js.arcgis.com/4.22/esri/copyright.txt for details.
4
4
  */
5
- import{pt2px as t}from"../../../../../../core/screenUtils.js";import{getXAnchorDirection as e,getYAnchorDirection as i}from"../../alignmentUtils.js";import{premultiplyAlphaRGBA as s}from"../../color.js";import{MIN_MAX_ZOOM_PRECISION_FACTOR as o,GLYPH_SIZE as a}from"../../definitions.js";import{i1616to32 as n}from"../../number.js";import{TextMaterialKey as r}from"../../materialKey/MaterialKey.js";import{isFunction as l,getMinMaxZoom as h}from"./util.js";import c from"./WGLBaseTextTemplate.js";import m from"./WGLDynamicMeshTemplate.js";import{codepoints as _}from"../../../../layers/features/textUtils.js";const f=5;function y(t,e,i,s){return"string"==typeof t.text?t.text:"function"==typeof t.text?t.text(e,i,s):""}class p extends(c(m)){constructor(e,i,a){super(e),this._horizontalAlignment="center",this._verticalAlignment="middle",this._textToGlyphs=new Map,this._minMaxZoom=n(Math.round(i*o),Math.round(a*o));const h=e.scaleFactor||1;if(this._cimTextLayer=e,l(e.color)){const t=(t,i,o)=>s(e.color(t,i,o));this._dynamicPropertyMap.set("_color",t)}else this._color=s(e.color);if(l(e.color)){const t=(t,i,o)=>s(e.outlineColor(t,i,o));this._dynamicPropertyMap.set("_haloColor",t)}else this._haloColor=s(e.outlineColor);let c;l(e.size)||(c=Math.min(Math.round(t(e.size*e.sizeRatio)),127));const m=(i,s,o)=>l(e.size)?Math.min(Math.round(t(e.size(i,s,o)*e.sizeRatio)),127):c;if(this._dynamicPropertyMap.set("_size",m),l(e.outlineSize)){const i=(i,s,o)=>Math.min(Math.floor(f*t(e.outlineSize(i,s,o)*e.sizeRatio)),127);this._dynamicPropertyMap.set("_haloSize",i)}else this._haloSize=Math.min(Math.floor(f*t(e.outlineSize*e.sizeRatio)),127);let _;l(e.offsetX)||(_=Math.round(t(e.offsetX*e.sizeRatio)));const y=(i,s,o)=>l(e.offsetX)?Math.round(t(e.offsetX(i,s,o)*e.sizeRatio)):_;let p;this._dynamicPropertyMap.set("_xOffset",y),l(e.offsetY)||(p=Math.round(t(e.offsetY*e.sizeRatio)));const d=(i,s,o)=>l(e.offsetY)?Math.round(t(e.offsetY(i,s,o)*e.sizeRatio)):p;this._dynamicPropertyMap.set("_yOffset",d),l(e.angle)?this._dynamicPropertyMap.set("_angle",e.angle):this._angle=e.angle,l(e.horizontalAlignment)?this._dynamicPropertyMap.set("_horizontalAlignment",e.horizontalAlignment):this._horizontalAlignment=e.horizontalAlignment,l(e.verticalAlignment)?this._dynamicPropertyMap.set("_verticalAlignment",e.verticalAlignment):this._verticalAlignment=e.verticalAlignment,this._scaleFactor=h,l(e.text)?this._dynamicPropertyMap.set("_text",e.text):this._text=e.text;const M=Math.min(Math.round(t(e.referenceSize*e.sizeRatio)),127);this._referenceSize=Math.round(Math.sqrt(256*M)),this._materialKey=e.materialKey;const u=r.load(this._materialKey);u.sdf=!0,this._bitset=(1===e.alignment?1:0)|(e.colorLocked?1:0)<<1,this._materialKey=u.data,this._decoration="none",this._lineHeight=1,this._lineWidth=512,this._textPlacement=e.markerPlacement,this._effects=e.effects,this._isCIM=!0}static fromCIMText(t,e){const[i,s]=h(t.scaleInfo,e);return new p(t,i,s)}async analyze(t,e,i,s){const o=e.readLegacyFeature(),a=y(this._cimTextLayer,o,i,s),n=await super.analyze(t,e,i,s,_(a));return this._textToGlyphs.set(a,n.glyphMosaicItems),n}bindFeature(t,s,o){const n=t.readLegacyFeature();if(this._dynamicPropertyMap.forEach(((t,e)=>{this[e]=t(n,s,o)})),!this._text||0===this._text.length)return void(this._shapingInfo=null);this._size*=this._scaleFactor,this._scale=this._size/a,this._xOffset*=this._scaleFactor,this._yOffset*=this._scaleFactor,this._xAlignD=e(this._horizontalAlignment||"center"),this._yAlignD=i(this._verticalAlignment||"baseline");const r=this._textToGlyphs.get(this._text);this.bindTextInfo(r,!1)}}export{p as default};
5
+ import{pt2px as t}from"../../../../../../core/screenUtils.js";import{getXAnchorDirection as e,getYAnchorDirection as i}from"../../alignmentUtils.js";import{premultiplyAlphaRGBA as s}from"../../color.js";import{MIN_MAX_ZOOM_PRECISION_FACTOR as o,GLYPH_SIZE as a}from"../../definitions.js";import{i1616to32 as n}from"../../number.js";import{TextMaterialKey as r}from"../../materialKey/MaterialKey.js";import{isFunction as l,getMinMaxZoom as h}from"./util.js";import c from"./WGLBaseTextTemplate.js";import m from"./WGLDynamicMeshTemplate.js";import{codepoints as _}from"../../../../layers/features/textUtils.js";const f=5;function y(t,e,i,s){return"string"==typeof t.text?t.text:"function"==typeof t.text?t.text(e,i,s):""}class p extends(c(m)){constructor(e,i,a){super(e),this._horizontalAlignment="center",this._verticalAlignment="middle",this._textToGlyphs=new Map,this._minMaxZoom=n(Math.round(i*o),Math.round(a*o));const h=e.scaleFactor||1;if(this._cimTextLayer=e,l(e.color)){const t=(t,i,o)=>s(e.color(t,i,o));this._dynamicPropertyMap.set("_color",t)}else this._color=s(e.color);if(l(e.color)){const t=(t,i,o)=>s(e.outlineColor(t,i,o));this._dynamicPropertyMap.set("_haloColor",t)}else this._haloColor=s(e.outlineColor);let c;l(e.size)||(c=Math.min(Math.round(t(e.size*e.sizeRatio)),127));const m=(i,s,o)=>l(e.size)?Math.min(Math.round(t(e.size(i,s,o)*e.sizeRatio)),127):c;if(this._dynamicPropertyMap.set("_size",m),l(e.outlineSize)){const i=(i,s,o)=>Math.min(Math.floor(f*t(e.outlineSize(i,s,o)*e.sizeRatio)),127);this._dynamicPropertyMap.set("_haloSize",i)}else this._haloSize=Math.min(Math.floor(f*t(e.outlineSize*e.sizeRatio)),127);let _;l(e.offsetX)||(_=Math.round(t(e.offsetX*e.sizeRatio)));const y=(i,s,o)=>l(e.offsetX)?Math.round(t(e.offsetX(i,s,o)*e.sizeRatio)):_;let p;this._dynamicPropertyMap.set("_xOffset",y),l(e.offsetY)||(p=Math.round(t(e.offsetY*e.sizeRatio)));const d=(i,s,o)=>l(e.offsetY)?Math.round(t(e.offsetY(i,s,o)*e.sizeRatio)):p;this._dynamicPropertyMap.set("_yOffset",d),l(e.angle)?this._dynamicPropertyMap.set("_angle",e.angle):this._angle=e.angle,l(e.horizontalAlignment)?this._dynamicPropertyMap.set("_horizontalAlignment",e.horizontalAlignment):this._horizontalAlignment=e.horizontalAlignment,l(e.verticalAlignment)?this._dynamicPropertyMap.set("_verticalAlignment",e.verticalAlignment):this._verticalAlignment=e.verticalAlignment,this._scaleFactor=h,l(e.text)?this._dynamicPropertyMap.set("_text",e.text):this._text=e.text;const M=Math.min(Math.round(t(e.referenceSize*e.sizeRatio)),127);this._referenceSize=Math.round(Math.sqrt(256*M)),this._materialKey=e.materialKey;const g=r.load(this._materialKey);g.sdf=!0,this._bitset=(1===e.alignment?1:0)|(e.colorLocked?1:0)<<1,this._materialKey=g.data,this._decoration="none",this._lineHeight=1,this._lineWidth=512,this._textPlacement=e.markerPlacement,this._effects=e.effects,this._isCIM=!0}static fromCIMText(t,e){const[i,s]=h(t.scaleInfo,e);return new p(t,i,s)}async analyze(t,e,i,s){const o=e.readLegacyFeature(),a=y(this._cimTextLayer,o,i,s),n=await super.analyze(t,e,i,s,_(a));return n&&n.glyphMosaicItems&&this._textToGlyphs.set(a,n.glyphMosaicItems),n}bindFeature(t,s,o){const n=t.readLegacyFeature();if(this._dynamicPropertyMap.forEach(((t,e)=>{this[e]=t(n,s,o)})),!this._text||0===this._text.length)return void(this._shapingInfo=null);this._size*=this._scaleFactor,this._scale=this._size/a,this._xOffset*=this._scaleFactor,this._yOffset*=this._scaleFactor,this._xAlignD=e(this._horizontalAlignment||"center"),this._yAlignD=i(this._verticalAlignment||"baseline");const r=this._textToGlyphs.get(this._text);this.bindTextInfo(r,!1)}}export{p as default};