@arcgis/core 5.2.3 → 5.2.4

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.
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../Color.js";import{addTokenParameter as n}from"../kernel.js";import r from"../request.js";import i from"../core/Accessor.js";import{isSome as a}from"../core/arrayUtils.js";import o from"../core/Collection.js";import{getColorWithEmissiveStrength as s}from"../core/colorUtils.js";import{JSONMap as c}from"../core/jsonMap.js";import l from"../core/Logger.js";import{clamp as u}from"../core/mathUtils.js";import{debounce as d}from"../core/promiseUtils.js";import{on as f,watch as p,initial as m,whenOnce as h}from"../core/reactiveUtils.js";import{px2pt as g}from"../core/screenUtils.js";import{parseWhereClause as _,sqlName as v,sqlLiteral as y}from"../core/sql.js";import{addQueryParameters as ee}from"../core/urlUtils.js";import{property as b,subclass as te}from"../core/accessorSupport/decorators.js";import{runUntracked as x}from"../core/accessorSupport/tracking.js";import{EffectView as ne}from"../layers/effects/EffectView.js";import{getPixelValueRange as re}from"../layers/raster/formats/pixelRangeUtils.js";import{getEffectiveDisplayFilter as ie}from"../layers/support/displayFilterUtils.js";import{ExportImageParameters as ae}from"../layers/support/ExportImageParameters.js";import{collectFields as oe,collectArcadeFieldNames as se}from"../layers/support/fieldUtils.js";import{isFeatureLayer as ce,getFieldConfigurationsContainer as le}from"../layers/support/layerUtils.js";import{getEffectiveClusterSizeVariable as ue}from"./support/clusterUtils.js";import{getColorFromPointCloudStops as de,getRampStopsForPointCloud as fe,getStretchRampStops as pe,getRampStops as S}from"./support/colorRampUtils.js";import{getHeatmapRampStops as me}from"./support/heatmapRampUtils.js";import{getRelationshipRampElement as he,getRotationAngleForFocus as ge}from"./support/relationshipRampUtils.js";import{getRampStops as _e,realWorldMaxSize as ve,realWorldMinSize as ye}from"./support/sizeRampUtils.js";import{specialCharsLessThan as be,specialCharsGreaterThan as xe,getAuthoringInfoVisualVariableByTheme as C,getSymbolForFlowRenderer as Se,formatValue as w,getFormatOptions as T,mergeWhereClauses as Ce,getMedianColor as E,rgbImgSource as we,getFormatOptionsForVisualVariable as Te}from"./support/utils.js";import{fromJSON as Ee}from"../renderers/support/jsonUtils.js";import{isSupportedRenderer3D as De}from"../renderers/support/rendererConversion.js";import{getScaleDependentSymbol as D}from"../renderers/support/scaleDependentSymbolUtils.js";import Oe from"../renderers/visualVariables/SizeVariable.js";import ke from"../renderers/visualVariables/support/SizeVariableLegendOptions.js";import{updateReferenceSizeSymbol as Ae}from"../smartMapping/renderers/support/referenceSizeUtils.js";import O from"../symbols/SimpleFillSymbol.js";import k from"../symbols/SimpleMarkerSymbol.js";import{applyCIMSymbolColor as je}from"../symbols/support/cimSymbolUtils.js";import{renderSymbol as Me}from"../symbols/support/renderUtils.js";import{renderColorRampPreviewHTML as A,renderDotDensityPreviewHTML as Ne,renderPieChartPreviewHTML as Pe,renderPreviewHTML as Fe,getEmissiveFromSymbol as j}from"../symbols/support/symbolUtils.js";import{getCSSFilterFromEffectList as Ie,isVolumetricSymbol as Le}from"../symbols/support/utils.js";import{formatNumberLabel as Re}from"../widgets/smartMapping/support/utils.js";const M=/^\s*(return\s+)?\$view\.scale\s*(;)?\s*$/i,ze=new c({esriGeometryPoint:`point`,esriGeometryMultipoint:`multipoint`,esriGeometryPolyline:`polyline`,esriGeometryPolygon:`polygon`,esriGeometryMultiPatch:`multipatch`}),N=new k({size:6,outline:{color:[128,128,128,.5],width:.5}}),Be=new O({style:`solid`});function P(e){return e.type===`flow`}function F(e){return e.type===`vector-field`}function I(e){return e.type===`raster-colormap`}function L(e){return e.type===`raster-stretch`}function R(e){return e.type===`raster-shaded-relief`}function z(e){return e.declaredClass===`esri.renderers.SimpleRenderer`}function B(e){return e.declaredClass===`esri.renderers.ClassBreaksRenderer`}function V(e){return e.declaredClass===`esri.renderers.UniqueValueRenderer`}function H(e){return e.declaredClass===`esri.renderers.HeatmapRenderer`}function Ve(e){return U(e)||W(e)||G(e)||He(e)}function He(e){return e.declaredClass===`esri.renderers.PointCloudRGBRenderer`}function U(e){return e.declaredClass===`esri.renderers.PointCloudClassBreaksRenderer`}function W(e){return e.declaredClass===`esri.renderers.PointCloudStretchRenderer`}function G(e){return e.declaredClass===`esri.renderers.PointCloudUniqueValueRenderer`}function Ue(e){return e.declaredClass===`esri.renderers.DotDensityRenderer`}function We(e){return e.declaredClass===`esri.renderers.PieChartRenderer`}function Ge(e,t){return z(e)||B(e)||V(e)||H(e)||Ue(e)||We(e)?t.type===`2d`||De(e):L(e)||I(e)||R(e)||U(e)||W(e)||G(e)||F(e)||P(e)}function Ke(e){return e.declaredClass===`esri.layers.BuildingSceneLayer`}function K(e){return e.declaredClass===`esri.layers.SubtypeGroupLayer`}function qe(e){return e.declaredClass===`esri.layers.VoxelLayer`}function Je(e){return e.declaredClass===`esri.layers.WMSLayer`}function Ye(e){return e.declaredClass===`esri.layers.WMTSLayer`}function q(e){return e.declaredClass===`esri.layers.MapImageLayer`}function Xe(e){return e.declaredClass===`esri.layers.TileLayer`}function J(e){return e.declaredClass===`esri.layers.ImageryLayer`}function Y(e){return e.declaredClass===`esri.layers.ImageryTileLayer`}function Ze(e){return e.declaredClass===`esri.layers.WCSLayer`}function Qe(e){return e.type===`stretch-ramp`}function $e(e){return(`authoringInfo`in e?e?.authoringInfo:null)?.type===`univariate-color-size`}function et(e){let t=`authoringInfo`in e?e?.authoringInfo:null;return t?.type===`univariate-color-size`&&t?.univariateTheme===`above-and-below`}function tt(e){return`sublayers`in e}function nt(e){return e&&`symbol`in e}function rt(e,t){let{field:n,field2:r,field3:i,fieldDelimiter:a,valueExpression:o}=e,s=!(!n&&!o||!r&&!i);if(!n)return null;let c=s?t?.toString().split(a||``):[t],l=n?{[n]:c?.[0]}:null;return l&&(r&&(l[r]=c?.[1]),i&&(l[i]=c?.[2])),l}const it=new k({style:`path`,path:`M10,5 L5,0 0,5 M5,0 L5,15`,size:15,outline:{width:1,color:[85,85,85,1]}});let X={},Z={};const Q=new WeakMap;let $=class extends i{constructor(e){super(e),this._hasColorRamp=!1,this._hasOpacityRamp=!1,this._hasSizeRamp=!1,this._loading=!1,this._dotDensityUrlCache=new Map,this._scaleDrivenSizeVariable=null,this._clusterSizeVariable=null,this._layerDefinitionExpression=null,this._layerDefinitionExpressionClause=null,this._layerDisplayFilter=null,this._layerDisplayFilterClause=null,this.children=new o,this.hideLayersNotInCurrentView=!1,this.keepCacheOnDestroy=!1,this.layer=null,this.layerView=null,this.legendElements=[],this.parent=null,this.respectLayerDefinitionExpression=!1,this.respectLayerVisibility=!0,this.sublayerIds=[],this.title=null,this.view=null}initialize(){let e=()=>this.notifyChange(`ready`);this.addHandles([f(()=>this.children,`change`,t=>{let{added:n,removed:r}=t;n.forEach(t=>{let n=`activeLayerInfo-ready-watcher-${t.layer.uid}`;this.addHandles(p(()=>t.ready,e,m),n)}),r.forEach(e=>this.removeHandles(e.layer.uid)),e()})]),this.keepCacheOnDestroy||(X={},Z={})}destroy(){this._dotDensityUrlCache=null,this._scaleDrivenSizeVariable=null,this.keepCacheOnDestroy||(X=null,Z=null),this._layerDefinitionExpressionClause=null}get cssEffectFilter(){let{layer:e,scale:t}=this,n=`effect`in e?e.effect:null;if(!n)return null;let r=new ne({effect:n});return r.endTransition(),r.scale=t,Ie(r,!0)}get isScaleDriven(){let e=this.layer;if(e===null)return!1;if(`effect`in e&&e.effect&&Array.isArray(e.effect))return!0;if(`featureReduction`in e&&e.featureReduction){if(e.featureReduction.type===`cluster`)return!0;if(e.featureReduction.type===`binning`&&`renderer`in e.featureReduction&&e.featureReduction.renderer)return this._isRendererScaleDriven(e.featureReduction.renderer)}return`renderer`in e&&e.renderer?`displayFilterInfo`in e&&e.displayFilterInfo&&V(e.renderer)?!0:this._isRendererScaleDriven(e.renderer):this._isLayerScaleDriven(this.layer)}get loading(){return this.children.length>0?this.children.some(e=>e.loading):this._loading}get opacity(){let e=this.layer.opacity,t=this.parent?.opacity,n=this.layer.parent,r=n&&`uid`in n?this._getParentLayerOpacity(n):null;return t==null?r==null?e:r*e:t*e}get ready(){return x(()=>this.layer===null?!0:this.children.length>0?this._isGroupActive():this.legendElements.length>0)}get scale(){return this.view?.scale??0}get version(){return this.commitProperty(`ready`),x(()=>this._get(`version`)+1)}async buildLegendElementsForFeatureCollections(e){if(this._loading=!0,this.hideLayersNotInCurrentView&&!await this._isLayerInCurrentView()){this.legendElements=[],this._loading=!1,this.notifyChange(`ready`);return}let t=Array.from(e,e=>{if(ce(e))return this._getRendererLegendElements(e.renderer,{title:e.title});if(e.featureSet?.features.length){let t=e.layerDefinition,n=t?.drawingInfo,r=n&&Ee(n.renderer),i=ze.read(t.geometryType);return r?this._getRendererLegendElements(r,{title:e.name,geometryType:i}):(l.getLogger(this).warn(`drawingInfo not available!`),null)}return null});try{let e=[],n=await Promise.allSettled(t);for(let t of n)if(t.status===`fulfilled`)for(let n of t.value??[])e.push(n);this.legendElements=e}catch(e){l.getLogger(this).warn(`error while building legend for layer!`,e)}finally{this._loading=!1,this.notifyChange(`ready`)}}async buildLegendElementsForRenderer(e){try{this._loading=!0;let t=!this.hideLayersNotInCurrentView||await this._isLayerInCurrentView();this.legendElements=t?await this._getRendererLegendElements(e):[]}catch(e){l.getLogger(this).warn(`error while building legend for layer!`,e)}finally{this._loading=!1,this.notifyChange(`ready`)}}async buildLegendElementsForFeatureReduction(e){try{this._loading=!0,await this._waitForLayerViewUpdate(this.layerView);let t=!this.hideLayersNotInCurrentView||await this._isLayerInCurrentView();this.legendElements=t?await this._getLegendElementsForFeatureReduction(e):[]}catch(e){l.getLogger(this).warn(`error while building legend for layer!`,e)}finally{this._loading=!1,this.notifyChange(`ready`)}}async buildLegendElementsForTools(){this._loading=!0;let e=this.layer;if(qe(e))await this._constructLegendElementsForVoxelLayer();else if(Ye(e))this._constructLegendElementsForWMTSlayer();else if(Je(e))await this._constructLegendElementsForWMSSublayers();else if(Ke(e))await this._constructLegendElementsForBuildingSceneLayer();else if(q(e)||Xe(e)||K(e))await this._constructLegendElementsForSublayers();else{this.removeHandles(`imageryLayers-watcher`);let t=`default`;if(J(e)){let n=e?.rasterFunction?.functionName||`default`,r=e.bandIds?.length?e.bandIds.join(``):`###`;t=n+`_`+r}if(Y(e)||e.type===`link-chart`)return;await this._getLegendLayers(`${e.uid}-${t}`).then(async t=>{this.legendElements=[];let n=t.map(async t=>{if(J(e)){let t=p(()=>[e.rasterFunction,e.bandIds],()=>d(async()=>{X.default=null,e.renderer?await this.buildLegendElementsForRenderer(e.renderer):await this.buildLegendElementsForTools()})());this.addHandles(t,`imageryLayers-watcher`)}let n=this._generateSymbolTableElementForLegendLayer(t);n?.infos.length&&(J(e)&&(n.title=e.title),this.legendElements.push(n))});await Promise.allSettled(n)}).catch(e=>{l.getLogger(this).warn(`Request to server for legend has failed!`,e)})}this._loading=!1,this.notifyChange(`ready`)}async _isLayerInCurrentView(e){return this._checkFeatureCountForExpression(e,this.view.extent)}_getParentLayerOpacity(e){let t=1,n=e.parent;return n&&`uid`in n&&(t=this._getParentLayerOpacity(n)),e.opacity*t}_isGroupActive(){return this.children.some(e=>e.ready)}_isRendererScaleDriven(e){if(e.type===`dot-density`)return!0;let t=`valueExpression`in e?e.valueExpression:null;return M.test(t)||(`visualVariables`in e?e.visualVariables:null)?.some(e=>this._isScaleDrivenSizeVariable(e))?!0:this._hasScaleDrivenSymbols(e)}_hasScaleDrivenSymbols(e){switch(e.type){case`simple`:return this._isScaleDrivenSymbol(e.symbol);case`class-breaks`:return this._isScaleDrivenSymbol(e.defaultSymbol)||e.classBreakInfos.some(e=>this._isScaleDrivenSymbol(e.symbol));case`unique-value`:return this._isScaleDrivenSymbol(e.defaultSymbol)||!!e.uniqueValueInfos?.some(e=>this._isScaleDrivenSymbol(e.symbol))}return!1}_isScaleDrivenSymbol(e){if(e?.type===`cim`){let{primitiveOverrides:t,minScale:n,maxScale:r}=e.data,i=t?.some(e=>(e.valueExpressionInfo?.expression||``).includes(`$view.scale`))??!1;return n!=null||r!=null||i}return!1}_isScaleDrivenSizeVariable(e){if(e&&e.type!==`size`)return!1;let t=e,n=t.minSize,r=t.maxSize;return typeof n==`object`&&n&&this._isScaleDrivenSizeVariable(n)||typeof r==`object`&&r&&this._isScaleDrivenSizeVariable(r)?!0:M.test(t.valueExpression)}_isLayerScaleDriven(e){if(`minScale`in e&&e.minScale>0||`maxScale`in e&&e.maxScale>0)return!0;if(`sublayers`in e&&e.sublayers)return e.sublayers.some(e=>this._isLayerScaleDriven(e));let t=e.parent;if(e.loaded===!1&&t&&q(t)&&`source`in e&&e.source&&e.source.type===`map-layer`){for(let n of t.sourceJSON.layers??[])if(n.id===e.source.mapLayerId&&(n.minScale>0||n.maxScale>0))return!0}return!1}async _constructLegendElementsForVoxelLayer(){this._loading=!0,this.legendElements=[],this.removeHandles(`voxel-style-watcher`),this.removeHandles(`voxel-current-variable`);let e=this.layer;this.addHandles(p(()=>e.currentVariableId,()=>this._constructLegendElementsForVoxelLayer()),`voxel-current-variable`),this.addHandles(p(()=>e.getVariableStyles(),()=>this._constructLegendElementsForVoxelLayer()),`voxel-style-watcher`);let t=e.getVariableStyle(null),n=[];if(t){if(t.uniqueValues?.length){let e=[];t.uniqueValues.forEach(t=>{t.enabled&&e.push({label:t.label||`${t.value}`,value:t.value,symbol:new O({color:t.color,outline:null})})}),e.length&&n.push({type:`symbol-table`,title:t.label,infos:e})}else if(t.transferFunction){let{colorStops:e,stretchRange:r}=t.transferFunction,i=e.toArray().reverse(),a=r.map((e,t)=>`${t===0?be:xe} ${Re(e)}`).reverse(),o=i.map(e=>({color:e.color,value:null,label:null}));o[0].label=a[0],o[o.length-1].label=a[1],n.push({type:`color-ramp`,title:t.label,infos:o,preview:A(i.map(e=>e.color))})}}await this._generatePreviewsForLegendElements(n,{opacity:e.opacity}),this.legendElements=n,this._loading=!1,this.notifyChange(`ready`)}_constructLegendElementsForWMTSlayer(){this._loading=!0,this.legendElements=[],this.removeHandles(`wmts-activeLayer-watcher`);let e=this.layer.activeLayer;this.addHandles(p(()=>{let{layer:e}=this;return e&&`activeLayer`in e&&e.activeLayer},()=>this._constructLegendElementsForWMTSlayer()),`wmts-activeLayer-watcher`);let t=e.styleId?e.styles?.find(({id:t})=>t===e.styleId)?.legendUrl:void 0;t&&(this.legendElements=[{type:`symbol-table`,title:e.title,infos:[{src:t,opacity:this.opacity}]}]),this._loading=!1,this.notifyChange(`ready`)}async _constructLegendElementsForWMSSublayers(){this._loading=!0,this.legendElements=[],this.removeHandles(`wms-sublayers-watcher`);let e=this.layer,t=null;(e.customParameters||e.customLayerParameters)&&(t={...e.customParameters,...e.customLayerParameters}),this.addHandles(p(()=>{let{layer:e}=this;return e&&`sublayers`in e&&e.sublayers},()=>this._constructLegendElementsForWMSSublayers()),`wms-sublayers-watcher`),this.legendElements=await this._generateLegendElementsForWMSSublayers(e.sublayers,t),this._loading=!1,this.notifyChange(`ready`)}async _generateLegendElementsForWMSSublayers(e,t){let n=this.layer,r=[];this.addHandles(e.on(`change`,()=>this._constructLegendElementsForWMSSublayers()),`wms-sublayers-watcher`);let i=this.sublayerIds?.map(e=>n.findSublayerById(e))?.filter(a)??[],o=i.length?i:e.toArray();for(let e of o){let n=p(()=>[e.title,e.visible,e.legendEnabled],()=>this._constructLegendElementsForWMSSublayers());if(this.addHandles(n,`wms-sublayers-watcher`),!this.respectLayerVisibility||e.visible&&e.legendEnabled){let n=await this._generateSymbolTableElementForWMSSublayer(e,t);n?.infos.length&&r.unshift(n)}}return r}async _generateSymbolTableElementForWMSSublayer(e,t){if(!e.legendUrl&&e.sublayers){let n=(await this._generateLegendElementsForWMSSublayers(e.sublayers,t)).filter(e=>e);return{type:`symbol-table`,title:e.title,infos:n}}return this._generateSymbolTableElementForLegendUrl(e,t)}async _generateSymbolTableElementForLegendUrl(e,t){let n=e.legendUrl;if(!n)return;let i={type:`symbol-table`,title:e.title||e.name||String(e.id??``),infos:[]};t&&(n=ee(n,t));let a=null,o=e.layer?.opacity;try{a=(await r(n,{responseType:`image`})).data,a&&(a.style.opacity=o)}catch{}return i.infos.push({src:n,preview:a,opacity:o}),i}_getLegendLayers(e,t){let n=X&&X[e];if(n)return Promise.resolve(n);let r=Z?.[e];if(r!=null)return r;let i=this._legendRequest(t).then(t=>{let n=t.layers;return X&&(X[e]=n),n}).finally(()=>{Z&&delete Z[e]});return Z[e]=i,i}_legendRequest(e){let t=this.layer,n={f:`json`,dynamicLayers:e};if(J(t)){let e=t.exportImageServiceParameters.rasterFunction;if(e&&(n.renderingRule=JSON.stringify(e.functionDefinition?.toJSON()||e.toJSON())),t.bandIds&&(n.bandIds=t.bandIds.join()),t.raster||t.viewId||t.customParameters){let{raster:e,viewId:r,customParameters:i}=t;n={raster:e,viewId:r,...n,...i}}}let i=t.url.replace(/(\/)+$/,``);if(`version`in t&&+t.version>=10.01){let e=i.indexOf(`?`);e>-1?i=i.slice(0,e)+`/legend`+i.slice(e):i+=`/legend`}else{let e=i.toLowerCase().indexOf(`/rest/`),t=e===-1?i:i.slice(0,e)+i.slice(e+5);i=`https://utility.arcgis.com/sharing/tools/legend?soapUrl=`+encodeURI(t)+`&returnbytes=true`}return r(i,{query:n}).then(e=>e.data)}async _constructLegendElementsForBuildingSceneLayer(){this._loading=!0,this.legendElements=[],this.removeHandles(`sublayers-watcher`);let e=this.layer;this.addHandles(p(()=>e.sublayers,()=>this._constructLegendElementsForBuildingSceneLayer()),`sublayers-watcher`);try{this.legendElements=await this._generateLegendElementsForBuildingSublayers(e.sublayers,this.opacity)}catch(e){l.getLogger(this).warn(`Request to server for legend has failed!`,e)}finally{this._loading=!1,this.notifyChange(`ready`)}}async _generateLegendElementsForBuildingSublayers(e,t){let n=[];this.addHandles(e.on(`change`,()=>this._constructLegendElementsForBuildingSceneLayer()),`sublayers-watcher`);let r=e.toArray();for(let e of r){let r=p(()=>[`renderer`in e&&e.renderer,e.opacity,e.title,e.visible],()=>this._constructLegendElementsForBuildingSceneLayer());if(this.addHandles(r,`sublayers-watcher`),!this.respectLayerVisibility||e.visible){let r=e?.opacity==null?null:e.opacity,i=r==null?t:r*t;if(e.type===`building-group`){let t={type:`symbol-table`,title:e.title,infos:[]},r=await this._generateLegendElementsForBuildingSublayers(e.sublayers,i);t.infos.push(...r),n=[t,...n]}else e.renderer&&(n=[...await this._getRendererLegendElements(e.renderer,{title:e.title,opacity:i,sublayer:e}),...n])}}return n.filter(e=>!!e&&(`infos`in e&&e.infos?e.infos.length>0:!0))}async _constructLegendElementsForSublayers(){this._loading=!0,this.removeHandles(`sublayers-watcher`);let e=this.layer;if(!(q(e)||Xe(e)||K(e))||this.hideLayersNotInCurrentView&&!await this._isLayerInCurrentView()){this.legendElements=[],this._loading=!1,this.notifyChange(`ready`);return}this.addHandles(p(()=>e.sublayers,()=>this._constructLegendElementsForSublayers),`sublayers-watcher`);try{this.legendElements=await this._generateLegendElementsForSublayers(e.sublayers,this.opacity)}catch(e){l.getLogger(this).warn(`Request to server for legend has failed!`,e)}finally{this._loading=!1,this.notifyChange(`ready`)}}async _generateLegendElementsForSublayers(e,t,n){let r=this.layer,i=[];this.addHandles(e.on(`change`,()=>this._constructLegendElementsForSublayers()),`sublayers-watcher`);let o=e.toArray();!n&&this.sublayerIds&&this.sublayerIds.length&&(o=K(r)?this.sublayerIds.map(e=>r.findSublayerForSubtypeCode(e)).filter(a):this.sublayerIds.map(e=>r.findSublayerById(e)).filter(a));for(let e of o){let r=p(()=>[e.renderer,e.opacity,e.title,e.visible,e.legendEnabled],()=>this._constructLegendElementsForSublayers());this.addHandles(r,`sublayers-watcher`);let a=e.createQuery().where,o=!this.hideLayersNotInCurrentView||await this._isLayerInCurrentView(a),s=!this.respectLayerVisibility||e.visible&&e.legendEnabled&&this._isSublayerInScale(e);if(o&&s){let r=e?.opacity==null?null:e.opacity,a=r==null?t:r*t,o=!tt(e)||e.originIdOf(`renderer`)>2&&!e.sublayers;if(e.renderer&&o)await e.load(),i=[...await this._getRendererLegendElements(e.renderer,{title:e.title,opacity:a,sublayer:e}),...i];else if(tt(e)){let t=await this._generateSymbolTableElementForSublayer(e,a,n);t&&i.unshift(t)}}}return i.filter(e=>!!e&&(`infos`in e&&e.infos?e.infos.length>0:!0))}async _generateSymbolTableElementForSublayer(e,t,n){if(!n){n=new Map;let t=this.layer,r=e.source,i=!(!r||r.type===`map-layer`&&r.mapLayerId===e.id&&(!r.gdbVersion||r.gdbVersion===(`gdbVersion`in t&&t.gdbVersion)))||e.originIdOf(`renderer`)>2||e.originIdOf(`labelingInfo`)>2||e.originIdOf(`labelsVisible`)>2,a=null;if(i){let e=new ae({layer:this.layer});a=e.hasDynamicLayers?e.dynamicLayers:null,e.destroy()}let o=a||`${t.uid}-default`;(await this._getLegendLayers(o,a)).forEach(e=>n.set(e.layerId,e))}let r=n.get(e.id);if((!r||r?.subLayerIds&&r.defaultVisibility)&&e.sublayers){let r=await this._generateLegendElementsForSublayers(e.sublayers,t,n);return{type:`symbol-table`,title:e.title,infos:r}}return this._generateSymbolTableElementForLegendLayer(r,e,t)}_generateSymbolTableElementForLegendLayer(e,t,n){if(!e?.legend||this.respectLayerVisibility&&!this._isLegendLayerInScale(e,t))return null;let r=t?.renderer,i=t?.title||e.layerName;if(r&&(!t||t?.originIdOf(`renderer`)>2)){let e=t?.title||this._getRendererTitle(r,t);e&&(i&&typeof e!=`string`&&`title`in e&&(e.title=i),i=e)}let a={type:`symbol-table`,title:i,legendType:e.legendType||null,infos:[]},o=t?this._sanitizeLegendForSublayer(e.legend.slice(),t):e.legend;return e.legendGroups&&e.legendGroups.length>0?e.legendGroups.forEach(r=>{let i={type:`symbol-table`,title:r.heading,legendType:e.legendType||null,infos:this._generateSymbolTableElementInfosForLegendLayer(o.filter(e=>e.groupId===r.id),e.layerId,r.heading||a.title||t?.title,n)};i.infos?.length>0&&a.infos.push(i)}):a.infos=this._generateSymbolTableElementInfosForLegendLayer(o,e.layerId,a.title||t?.title,n),a.infos.length>0?a:null}_generateSymbolTableElementInfosForLegendLayer(e,t,r,i){return e.map(e=>{let a=e.url;if(e.imageData&&e.imageData.length>0)a=`data:image/png;base64,${e.imageData}`;else if(!a.startsWith(`http`))a=n(`${this.layer.url}/${t}/images/${a}`);else return null;let o=e.label;return{previewAriaLabel:o||r,label:o,src:a,opacity:i??this.opacity,width:e.width,height:e.height}}).filter(a)}_isSublayerInScale(e){let t=e.minScale||0,n=e.maxScale||0;return!(t>0&&t<this.scale||n>this.scale)}_isLegendLayerInScale(e,t){let n=t||this.layer,r=null,i=null,a=!0;return!n.minScale&&n.minScale!==0||!n.maxScale&&n.maxScale!==0?(e.minScale===0&&n.tileInfo&&(r=n.tileInfo.lods[0].scale),e.maxScale===0&&n.tileInfo&&(i=n.tileInfo.lods[n.tileInfo.lods.length-1].scale)):(r=Math.min(n.minScale,e.minScale)||n.minScale||e.minScale,i=Math.max(n.maxScale,e.maxScale)),(r>0&&r<this.scale||i>this.scale)&&(a=!1),a}_sanitizeLegendForSublayer(e,t){if(`version`in this.layer&&+this.layer.version<10.1||e.length===0)return e;let n=t.renderer,r=e.some(e=>e.values),i=0,a=null;return r&&e.some((e,t)=>(e.values||(i=t,a=e,a.label||(a.label=`others`)),a!=null)),n?n.type===`unique-value`?a&&(e.splice(i,1),e.push(a)):n.type===`class-breaks`&&(a&&e.splice(i,1),n.legendOptions?.order||e.reverse(),a&&e.push(a)):a&&(e.splice(i,1),e.push(a)),e}async _getRendererLegendElements(e,t={}){if(!Ge(e,this.view))return l.getLogger(this).warn(`Renderer of type '${e.type}' not supported!`),[];if(Ve(e))return this._constructPointCloudRendererLegendElements(e,t);if(Ue(e))return this._constructDotDensityRendererLegendElements(e);let n=await this._loadRenderer(e);return We(n)?this._constructPieChartRendererLegendElements(n):this._constructRendererLegendElements(n,t)}async _getLegendElementsForFeatureReduction(e){let t=null;return e.type===`binning`?t=e.renderer:e.type===`cluster`&&(t=this._getClusterRenderer(e)),t?this._getRendererLegendElements(t,{isFeatureReductionRenderer:!0}):[]}_getPointCloudRendererTitle(e){return(e.legendOptions?.title||e.field)??``}async _constructPointCloudRendererLegendElements(e,t={}){let n=t.title,r=[],i=null,a=null;if(U(e))i={type:`symbol-table`,title:n||this._getPointCloudRendererTitle(e),infos:[]},e.colorClassBreakInfos.forEach(e=>{i.infos.unshift({label:e.label||e.minValue+` - `+e.maxValue,value:[e.minValue,e.maxValue],symbol:this._getAppliedCloneSymbol(N,e.color)})});else if(W(e)){let t=e.stops,r=null;if(t?.length&&(t.length===1&&(r=t[0].color),!r)){let e=t[0].value,n=t[t.length-1].value;if(e!=null&&n!=null){let i=e+(n-e)/2;r=de(i,t)}}i={type:`symbol-table`,title:null,infos:[{label:null,value:null,symbol:this._getAppliedCloneSymbol(N,r||N.color)}]};let o=fe(e.stops??[])??[];a={type:`color-ramp`,title:n||this._getPointCloudRendererTitle(e),infos:o,preview:A(o.map(e=>e.color))}}else G(e)&&(i={type:`symbol-table`,title:n||this._getPointCloudRendererTitle(e),infos:[]},e.colorUniqueValueInfos?.forEach(e=>{i.infos.push({label:e.label||e.values.join(`, `),value:e.values.join(`, `),symbol:this._getAppliedCloneSymbol(N,e.color)})}));return i?.infos.length&&r.push(i),a?.infos.length&&r.push(a),await this._generatePreviewsForLegendElements(r,{opacity:this.opacity,symbolConfig:{applyColorModulation:!!e.colorModulation}}),r}async _getElementInfoForDotDensity(e,t){let{color:n,label:r,valueExpressionTitle:i}=t,{backgroundColor:a,outline:o,dotSize:s}=e,c=this.cssEffectFilter,l=s+`-`+n+`-`+a+`-`+(o&&JSON.stringify(o.toJSON()))+`-`+c,u=this._dotDensityUrlCache,d=u.has(l)?u.get(l):Ne(e,n);u.set(l,d);let f={shape:{type:`image`,x:0,y:0,width:d.width,height:d.height,src:d.src},fill:null,stroke:null,offset:[0,0]},p=Me([[f]],[d.width,d.height],{cssEffectFilter:this.cssEffectFilter});return{opacity:1,src:d.src,preview:p,width:d.width,height:d.height,previewAriaLabel:r||i}}async _constructDotDensityRendererLegendElements(e){let t=e.calculateDotValue(this.view.scale),n=e.legendOptions?.unit,r={type:`symbol-table`,title:{value:t&&Math.round(t),unit:n||``},infos:[]};for(let t of e.attributes){let n=await this._getElementInfoForDotDensity(e,t);n.label=t.label||t.valueExpressionTitle||t.field,r.infos.push(n)}return[r]}async _constructPieChartRendererLegendElements(e){let t=[],n=null,r=e.outline;e.attributes.forEach(e=>{let n=new k({color:e.color,outline:r}),i=e.label||e.valueExpressionTitle||e.field;t.push({label:i,symbol:n})});let i=t.length?[...t]:[];if(e.othersCategory?.color&&e.othersCategory?.threshold!==0){let i=new k({color:e.othersCategory.color,outline:r});n=e.othersCategory.label||`Other`,t.push({label:n,symbol:i})}if(e.defaultColor?.a){let n=new k({color:e.defaultColor,outline:r});t.push({label:e.defaultLabel,symbol:n})}let a=await this._getVisualVariableLegendElements(e,this.layer)||[];if(t.length){a.unshift({type:`symbol-table`,title:null,infos:t});let o=i.filter(e=>e.label!==n).map(e=>e.symbol.color).filter(Boolean),s=Pe(o,{holePercentage:e.holePercentage,backgroundColor:e.backgroundFillSymbol?.color,cssEffectFilter:this.cssEffectFilter,outline:r});a.unshift({type:`pie-chart-ramp`,title:this._getRendererTitle(e,this.layer),infos:t,preview:s})}return await this._generatePreviewsForLegendElements(a,{opacity:this.layer.opacity,cssEffectFilter:this.cssEffectFilter}),a}async _getWhereClause(e,t,n){let r=await _(e,n),i=new Set,{field:a,field2:o,field3:s}=t;oe(i,n,[a,o,s]),await se(i,n,null,t.valueExpression);let c=new Set(Array.from(i,e=>e.toLowerCase()));return(r?.fieldNames.map(e=>e.toLowerCase()))?.some(e=>!c.has(e))?null:r}async _processDefinitionExpression(e,t){if(!(`definitionExpression`in e))return;let n=e.definitionExpression;n&&this.respectLayerDefinitionExpression?this._layerDefinitionExpression!==n&&(this._layerDefinitionExpressionClause=await this._getWhereClause(n,t,e.fieldsIndex)):this._layerDefinitionExpressionClause=null,this._layerDefinitionExpression=n}async _processDisplayFilter(e,t){if(!(`displayFilterInfo`in e))return;let n=e.displayFilterInfo?ie(e.displayFilterInfo,this.view):null;return n?.where?this._layerDisplayFilter?.id!==n?.id&&(this._layerDisplayFilterClause=await this._getWhereClause(n.where,t,e.fieldsIndex)):this._layerDisplayFilterClause=null,this._layerDisplayFilter=n,n}async _constructRendererLegendElements(e,t={}){let{title:n,sublayer:r,isFeatureReductionRenderer:i}=t,a=r||this.layer,o=C(e,`reference-size`),s=C(e,`spike`),c=i&&`renderer`in a&&a.renderer?a.renderer:e,l=null;V(c)&&(await this._processDefinitionExpression(a,c),l=await this._processDisplayFilter(a,c)),this._hasColorRamp=!1,this._hasOpacityRamp=!1,this._hasSizeRamp=!1,this._scaleDrivenSizeVariable=null;let u=await this._getVisualVariableLegendElements(e,a)||[],d={type:`symbol-table`,title:n||this._getRendererTitle(e,a),infos:[]},f=null,p=!1,m=new Set;if(P(e)&&!this._hasSizeRamp){let t=await Se(e);d.infos.push({label:null,symbol:t})}else if($e(e)){let t=n,r=et(e)?`univariate-above-and-below-ramp`:`univariate-color-size-ramp`,i=u.findIndex(e=>e.type===`color-ramp`),a=i===-1?null:u.splice(i,1)[0],o=u.findIndex(e=>e.type===`size-ramp`),s=o===-1?null:u.splice(o,1)[0],c=[];a&&(t=a.title,c.push(a)),s&&(t=s.title,c.push(s)),c.length>0&&u.push({type:r,title:t,infos:c})}else if(H(e)){let t=me(e);u.push({type:`heatmap-ramp`,title:n||this._getRendererTitle(e,a),infos:t,preview:A(t.map(e=>e.color),{cssEffectFilter:this.cssEffectFilter})})}else if(V(e)){let t=e.authoringInfo;if(t?.type===`relationship`){let{numClasses:n,field1:r,field2:i}=t,o=t.focus;if(n&&r&&i){let t=[r,i],s=ge(o)||0;for(let e of t){let{field:t,normalizationField:n,label:r}=e,i=r||{field:this._getFieldAlias(t,a),normField:n&&this._getFieldAlias(n,a)},o=it.clone();o.angle=s,d.infos.push({label:i,symbol:o}),m.add(o),s+=90}let c=he({focus:o,numClasses:n,infos:e.uniqueValueInfos??[]});u.unshift(c)}}else if(J(this.layer)||Y(this.layer)){let{uniqueValueInfos:t}=e;if(t)for(let e of t)e.symbol&&await this._checkClausesForUVR(c,e.value,a)&&d.infos.push({label:e.label||e.value,value:e.value,symbol:e.symbol})}else{let{field:t,field2:r,field3:i,fieldDelimiter:s,valueExpression:u,defaultSymbol:f}=e,m=!(!t&&!u||!r&&!i),h=l?.title?.trim(),g=[],{uniqueValueGroups:_}=e;if(_)for(let e of _){let n={type:`symbol-table`,title:e.heading,infos:[]},{classes:l}=e;if(l)for(let e of l){let{symbol:l,values:d}=e;if(l){let f=[],p=[];for(let e of d??[]){let{value:n,value2:o,value3:c}=e,l=[],d=[];(t||u)&&(l.push(n),d.push(this._getDomainName(t,n,a)??w(n,T(a,t,this.view.timeZone)))),r&&(l.push(o),d.push(this._getDomainName(r,o,a)??w(o,T(a,r,this.view.timeZone)))),i&&(l.push(c),d.push(this._getDomainName(i,c,a)??w(c,T(a,i,this.view.timeZone)))),f.push(m?l.join(s||``):l[0]),p.push(d.join(` - `))}let h=f.join(`, `),g=e.label;if(!g){let e=p.filter(Boolean);g=e.length?e.join(`, `):h}let _=D(e,this.view.scale)??l;_.type===`cim`&&o&&(_=_.clone(),Ae(_,{innerDotSize:8,outerRingSize:16}));let v=!1;for(let e of f)if(v=await this._checkClausesForUVR(c,e,a),v)break;v&&n.infos.push({label:g,value:h,symbol:_})}}n.infos.length&&g.push(n)}if(g.length){let t=g[0];if(g.length===1&&`title`in t&&!t.title){let e=t.infos?.filter(nt)??[];d.infos.push(...e)}else f&&(g.push({type:`symbol-table`,infos:[{label:e.defaultLabel||`others`,symbol:f}]}),p=!0),d.infos.push(...g);!n&&!e.legendOptions?.title&&!e.valueExpressionTitle?d.title=h:h&&(d.title=`${d.title} (${h})`)}}e.defaultSymbol&&!p&&(d.infos.push({label:e.defaultLabel||`others`,symbol:e.defaultSymbol}),p=!0)}else if(B(e)){if(!o&&!s){if(f=this._isUnclassedRenderer(e),!f||!this._hasSizeRamp){let t=e.classBreakInfos.filter(({symbol:e})=>e),n=e.legendOptions?.order===`ascending-values`;for(let e of t){let{label:t,minValue:r,maxValue:i}=e,o=D(e,this.view.scale)??e.symbol,s=t||(f?null:`${r} - ${i}`),c={previewAriaLabel:s||d.title||a.title,label:s,value:[r,i],symbol:o};n?d.infos.push(c):d.infos.unshift(c)}f&&(d.title=null),this._updateInfosForClassedSizeRenderer(e,d.infos)}e.defaultSymbol&&!f&&(d.infos.push({label:e.defaultLabel||`others`,symbol:e.defaultSymbol}),p=!0)}}else if(L(e)){if(Y(this.layer)||Ze(this.layer)){let t=await this._constructTileImageryStretchRendererElements(e);Qe(t)?u.push(t):d.infos=t}else{let t=this.layer,n,r;e.customStatistics?.length&&({min:n,max:r}=e.customStatistics[0]);let i=[],a=t.serviceRasterInfo;if(t.rasterFunction)try{a=await t.generateRasterInfo(t.rasterFunction)}catch{}let o=re(a.pixelType);if(a.bandCount===1){let i=t.bandIds?.[0]||0;n??=a.statistics?a.statistics[i].min:o[0],r??=a.statistics?a.statistics[i].max:o[1],n||r?u.push(await this._getStretchLegendElements(e,{min:n,max:r})):this._getServerSideLegend()}else if(t.bandIds?.length===1)n??=a.statistics?a.statistics[t.bandIds[0]].min:o[0],r??=a.statistics?a.statistics[t.bandIds[0]].max:o[1],n||r?u.push(await this._getStretchLegendElements(e,{min:n,max:r})):this._getServerSideLegend();else if(a.bandCount>=3){let{bandInfos:e}=a,{bandIds:n}=t;e.length>=a.bandCount?n?.length===3?(i=n.map(t=>e[t].name),d.infos=this._createSymbolTableElementMultiBand(i)):t.format===`lerc`?(i=[0,1,2].map(t=>e[t].name),d.infos=this._createSymbolTableElementMultiBand(i)):this._getServerSideLegend():t.format===`lerc`?(i=[`band1`,`band2`,`band3`],d.infos=this._createSymbolTableElementMultiBand(i)):this._getServerSideLegend()}else this._getServerSideLegend()}}else if(I(e))e.colormapInfos.forEach(e=>{d.infos.push({label:e.label,value:e.value,symbol:this._getAppliedCloneSymbol(Be,e.color)})});else if(z(e)){let n=e.symbol;switch(t.geometryType){case`point`:n=`pointSymbol`in a?a.pointSymbol:null;break;case`polyline`:n=`lineSymbol`in a?a.lineSymbol:null;break;case`polygon`:n=`polygonSymbol`in a?a.polygonSymbol:null}let r=this._clusterSizeVariable&&this._getClusterSymbol()||!this._hasSizeRamp;e.symbol&&r&&d.infos.push({previewAriaLabel:e.label||d.title||a.title,label:e.label,symbol:n})}else if(F(e)){e.outputUnit&&(this.title=`(`+e.toJSON().outputUnit+`)`),d.title=e.attributeField;let t=e.getClassBreakInfos();t?.length?t.forEach(e=>{d.infos.push({label:e.minValue+` - `+e.maxValue,symbol:e.symbol})}):d.infos.push({label:e.attributeField,symbol:e.getDefaultSymbol()})}else R(e)&&u.push(await this._getStretchLegendElements(e,{min:0,max:255}));let h=e.defaultSymbol;h&&!p&&!z(e)&&(!f||this._hasColorRamp||this._hasSizeRamp||this._hasOpacityRamp)&&u.push({type:`symbol-table`,infos:[{label:e.defaultLabel||`others`,symbol:h}]}),d.infos.length&&u.unshift(d);let g=t.opacity==null?this.opacity:t.opacity,_=this._isTallSymbol(`visualVariables`in e?e.visualVariables:null),v=J(this.layer)||Y(this.layer);return await this._generatePreviewsForLegendElements(u,{opacity:g,symbolConfig:{isTall:_,isSquareFill:v},cssEffectFilter:this.cssEffectFilter},{arrowMarkerSymbols:m}),e=null,u}async _waitForLayerViewUpdate(e){await h(()=>!e.updating)}async _checkFeatureCountForExpression(e,t){let n=this.layerView;if(!(n&&`createQuery`in n&&`queryFeatureCount`in n))return!0;try{await this._waitForLayerViewUpdate(n);let r=n.createQuery();return e&&(r.where=Ce(r.where,e)),t&&(r.geometry=t),await n.queryFeatureCount(r)>0}catch{return!0}}_getUVRFeatureCountExpression(e,t){return Object.entries(e).map(([e,n])=>{let r=`getField`in t&&t.getField?t.getField(e):null,i=v(e);if(n==null)return`${i} IS NULL`;try{return`${i} = ${y(n,null,r?{type:r.type}:null)}`}catch{return`${i} = ${y(n)}`}}).join(` AND `)}async _checkClausesForUVR(e,t,n){let r=rt(e,t);if(!r)return!0;let i=!!(!this._layerDefinitionExpressionClause&&this._layerDefinitionExpression&&this.respectLayerDefinitionExpression||!this._layerDisplayFilterClause&&this._layerDisplayFilter?.where),a=this._getUVRFeatureCountExpression(r,n);return(i&&a?await this._checkFeatureCountForExpression(a):!0)&&(this._layerDefinitionExpressionClause?.testFeature(r)??!0)&&(this._layerDisplayFilterClause?.testFeature(r)??!0)}_getServerSideLegend(){setTimeout(()=>this.buildLegendElementsForTools(),0)}_getAllInfos(e){let t=e?.infos;return t?t.reduce((e,t)=>e.concat(this._getAllInfos(t)),[]):[e]}async _constructTileImageryStretchRendererElements(e){let t=this.layer,n=t.symbolizer.rasterInfo??t.raster.rasterInfo,r,i,a=e?.customStatistics?.length?e.customStatistics:n?.statistics;if(a)({min:r,max:i}=a[0]);else{let e=re(n.pixelType);r=e[0],i=e[1]}if(t.hasStandardTime()&&(r=t.getStandardTimeValue(r),i=t.getStandardTimeValue(i)),n.bandCount===1||t.bandIds?.length===1)return this._getStretchLegendElements(e,{min:r,max:i});let o=(t?.bandIds?.length?t.bandIds:Array.from(Array(Math.min(n.bandCount,3)).keys())).map(e=>n.bandInfos[e].name);return o.length<3?o.push(o[1]):o.length>3&&o.splice(3),this._createSymbolTableElementMultiBand(o)}async _getStretchLegendElements(e,t){let n=e.colorRamp?.toJSON(),r=pe(n,t);return{type:`stretch-ramp`,title:``,infos:r,preview:A(r.map(e=>e.color))}}_getClusterSymbol(){let e=this.layer,t=`featureReduction`in e&&e.featureReduction,n=t&&`symbol`in t&&t.renderer;return(!n||n?.authoringInfo?.isAutoGenerated===!0)&&t&&`symbol`in t?t.symbol:null}async _getSizeLegendElement(e,t,n,r){return{type:`size-ramp`,title:this._clusterSizeVariable?this._getClusterTitle(t):e,infos:await _e(n,t,await E(n),this.scale,this.view,r,this._clusterSizeVariable?this._getClusterSymbol():null)}}_createSymbolTableElementMultiBand(e){let t=[],n=[`red`,`green`,`blue`];return e.forEach((e,r)=>{t.push({label:{colorName:n[r],bandName:e},src:we[r],opacity:this.opacity??1})}),t}_updateInfosForClassedSizeRenderer(e,t){let n=e.authoringInfo?.type===`class-breaks-size`,r=e.classBreakInfos.some(e=>Le(e.symbol));if(n&&r){let n=ve,r=ye,i=e.classBreakInfos.length,a=(n-r)/(i>1?i-1:i);t.forEach((e,t)=>{e.size=n-a*t})}}_isTallSymbol(e){let t=!1,n=!1;if(e)for(let r=0;r<e.length&&!(t&&n);r++){let i=e[r];i.type===`size`&&(i.axis===`height`&&(t=!0),i.axis===`width-and-depth`&&(n=!0))}return t&&n}async _generatePreviewsForLegendElements(e,t,n){let r=[];for(let i of e)for(let e of i.infos??[])if(`infos`in e&&e.infos&&r.push(this._generatePreviewsForLegendElements([e],t,n)),nt(e)&&e.symbol&&!e.preview){let a=!0;if(e.symbol.type===`cim`){let{minScale:t,maxScale:n}=e.symbol.data;(t&&t<this.scale||n&&n>this.scale)&&(a=!1)}a&&r.push(this._generateSymbolPreviewForInfo(e,{...t,clipBloomEffect:`theme`in i&&i.theme===`spike`,cssEffectFilter:n?.arrowMarkerSymbols?.has(e.symbol)?null:t.cssEffectFilter},n?{applyScaleDrivenSize:!n.arrowMarkerSymbols?.has(e.symbol)}:void 0))}await Promise.all(r)}async _getSize(e,t){let n=e.size==null&&this._hasSizeRamp?g(22):e.size;if(this._scaleDrivenSizeVariable&&t?.applyScaleDrivenSize){let{getSize:t}=await import(`../renderers/visualVariables/support/visualVariableUtils.js`);n=t(this._scaleDrivenSizeVariable,null,{view:this.view.type,scale:this.scale,shape:e.symbol.type===`simple-marker`?e.symbol.style:null})}return n}_getPreviewCIMOptions(e){return{style:`legend`,cimOptions:{allowScalingUp:this._hasSizeRamp||!!(this._scaleDrivenSizeVariable&&e?.applyScaleDrivenSize),viewParams:this.isScaleDriven?{viewingMode:this.view?.type===`2d`?`map`:this.view?.viewingMode,scale:this.view?.scale}:null}}}async _generateSymbolPreviewForInfo(e,t={},n){let{symbol:r}=e;try{if(t.size=await this._getSize(e,n),t.scale=!1,r.type===`cim`){let e=this._getPreviewCIMOptions(n);t={...t,...e}}e.preview=await Fe(r,t)}catch{e.preview=null,l.getLogger(this).warn(`Generating symbol preview failed for symbol type: ${r?.type}`)}}_getClusterRenderer(e){this._clusterSizeVariable=null;let t=`renderer`in this.layer?this.layer.renderer:null,n=e.renderer?.clone()||t?.clone(),r=ue(e,this.layerView,this.view);if(r&&n!=null&&`visualVariables`in n&&!n.visualVariables?.some(e=>e.type===`size`&&e.target!==`outline`&&!M.test(e.valueExpression))){if(`clusterMinSize`in e&&`clusterMaxSize`in e){let{clusterMinSize:t,clusterMaxSize:n}=e;r.legendOptions=new ke({showLegend:t!==n})}n.visualVariables=(n.visualVariables||[]).concat([r]),this._clusterSizeVariable=r}return n}async _loadRenderer(e){if(Q.has(e))return Q.get(e);let t=[],n=e.clone(),r=await E(n);if(B(n)||V(n)){let e=(n.classBreakInfos||n.uniqueValueInfos).map(e=>this._fetchSymbol(e.symbol,r).then(t=>{e.symbol=t}).catch(()=>{e.symbol=null}));Array.prototype.push.apply(t,e)}return t.push(this._fetchSymbol(n.symbol||n.defaultSymbol,n.defaultSymbol?null:r).then(e=>{this._applySymbolToRenderer(n,e,z(n))}).catch(()=>{this._applySymbolToRenderer(n,null,z(n))})),await Promise.allSettled(t),Q.set(e,n),n}_applySymbolToRenderer(e,t,n){n?e.symbol=t:e.defaultSymbol=t}async _fetchSymbol(e,t){if(!e)throw Error();if(e.type===`web-style`)try{let n=await e.fetchSymbol();return this._getAppliedCloneSymbol(n,t)}catch{throw l.getLogger(this).warn(`Fetching web-style failed!`),Error()}return this._getAppliedCloneSymbol(e,t)}_getAppliedCloneSymbol(e,n){if(!e||!n)return e;let r=e.clone(),i=n&&n.toRgba();return r.type.includes(`3d`)?this._applyColorTo3dSymbol(r,i):r.type===`cim`?je(r,n):r.color&&=new t(i||r.color),r}_applyColorTo3dSymbol(e,n){n&&e.symbolLayers.forEach(e=>{e&&(e.material||={},e.material.color=new t(n))})}async _getVisualVariableLegendElements(e,t){if(!(`visualVariables`in e)||e.type===`vector-field`)return null;let n=e.visualVariables??[],r=[],i=[],o=[],s=C(e,`reference-size`)??C(e,`spike`),c,l=this._clusterSizeVariable;if(s?.sizeStops?.length===2&&(B(e)||V(e))){let[e,t]=s.sizeStops,n=l?l.minDataValue:e.value,r=l?l.maxDataValue:t.value;c=new Oe({field:s.field??void 0,normalizationField:s.normalizationField,minSize:u(e.size,10,100),maxSize:u(t.size,50,150),minDataValue:n,maxDataValue:r}),i.push(c)}for(let e of n)if(e.type===`color`)r.push(e);else if(e.type===`size`){if(e.field===`cluster_count`&&c)continue;i.push(e)}else e.type===`opacity`&&o.push(e);let d=[...r,...i,...o],f,p;if(r.length===0&&B(e)&&e.classBreakInfos&&e.classBreakInfos.length===1){let t=e.classBreakInfos[0];f=t&&t.symbol}r.length===0&&z(e)&&(f=e.symbol);let m=null;if(f){if(f.type.includes(`3d`)){let e=f.symbolLayers.at(0);e.type===`water`?e.color!=null&&(p=e.color):e.material?.color!=null&&(p=e.material.color)}else f.url||(p=f.color);m=j(f)}let h=this.cssEffectFilter;return(await Promise.all(d.map(async n=>{if(n.legendOptions?.showLegend!==!1){let r=P(e)?n.field:this._getRampTitle(n,t),i=null,a=Te(t,n,this.view.timeZone);if(n.type===`color`){let t=await S(n,null,a)??[],o=this._getColorRampInfosWithEmissiveColors(t,e,m);i={type:`color-ramp`,title:r,infos:o,preview:A(o.map(e=>e.color),{cssEffectFilter:h})},this._hasColorRamp||=t.length>0}else if(n.type===`size`&&n.target!==`outline`)M.test(n.valueExpression)?this._clusterSizeVariable||(this._scaleDrivenSizeVariable=n):(i=await this._getSizeLegendElement(r,n,e,a),c===n&&s?.theme===`spike`&&(i.theme=s.theme),this._hasSizeRamp||=!!(i.infos!=null&&i.infos.length));else if(n.type===`opacity`){let t=await S(n,p,a)??[],o=this._getColorRampPreviewColors(t,e,m);i={type:`opacity-ramp`,title:r,infos:t,preview:A(o,{cssEffectFilter:h})},this._hasOpacityRamp||=t.length>0}return i?.infos?i:null}}))).filter(a)}_getColorRampPreviewColors(e,t,n){return this._getColorRampInfosWithEmissiveColors(e,t,n).map(e=>e.color)}_getColorRampInfosWithEmissiveColors(e,t,n){return e.map(e=>{let r=B(t)?this._getStopEmissiveForColorRampInfo(e,t):n;return r===void 0?e:{...e,color:s(e.color,r)}})}_getStopEmissiveForColorRampInfo(e,t){if(!e.value)return;let n=t.getBreakIndexfromInfos(e.value),r=n===-1?null:t.classBreakInfos[n];return j(r?.symbol??t.defaultSymbol??null)}_getDomainName(e,t,n){if(e&&typeof e!=`function`){let r=`getField`in n&&n.getField?.(e),i=r&&`getFieldDomain`in n&&n.getFieldDomain?n.getFieldDomain(r.name):null;return i?.type===`coded-value`?i.getName(t):null}return null}_getClusterTitle(e){let t=this.layer,n=e.field;if(`featureReduction`in t&&t.featureReduction?.type===`cluster`){let e=t.featureReduction,r=`popupTemplate`in e&&e.popupTemplate,i=r&&r.fieldInfos;if(i){for(let e of i)if(e.fieldName===n)return n===`cluster_count`?e.label||{showCount:!0}:e.label}}return{showCount:!0}}_getRampTitle(e,t){let n=e.field,r=e.normalizationField,i=!1,a=!1,o=!1,s=null;n=typeof n==`function`?null:n,r=typeof r==`function`?null:r;let c=e.legendOptions?.title;if(c!=null)s=c;else if(e.valueExpressionTitle)s=e.valueExpressionTitle;else{if(`renderer`in t&&t.renderer&&`authoringInfo`in t.renderer&&t.renderer.authoringInfo?.visualVariables){let e=t.renderer.authoringInfo.visualVariables;for(let t=0;t<e.length;t++){let n=e[t];if(n.type===`color`){if(n.style===`ratio`){i=!0;break}if(n.style===`percent`){a=!0;break}if(n.style===`percent-of-total`){o=!0;break}}}}s={field:n&&this._getFieldAlias(n,t),normField:r&&this._getFieldAlias(r,t),ratio:i,ratioPercent:a,ratioPercentTotal:o}}return s}_getRendererTitle(e,t){let n=e;if(n.legendOptions?.title)return n.legendOptions.title;if(n.valueExpressionTitle)return n.valueExpressionTitle;let r=n.field,i=null,a=null;if(B(n)&&(i=n.normalizationField,a=n.normalizationType===`percent-of-total`),r=typeof r==`function`?null:r,i=typeof i==`function`?null:i,V(n)){let{field2:e,field3:i,fieldDelimiter:a}=n,o=r&&this._getFieldAlias(r,t);return e&&(o=`<${o}>${a}<${this._getFieldAlias(e,t)}>`,i&&(o=`${o}${a}<${this._getFieldAlias(i,t)}>`)),o}let o=null;return(r||i)&&(o={field:r&&this._getFieldAlias(r,t),normField:i&&this._getFieldAlias(i,t),normByPct:a}),o}_getFieldAlias(e,t){let n=le(t,{checkFeatureReduction:!0});if(n)return n.getFieldAlias(e)||e;let r=((`popupTemplate`in t?t.popupTemplate:null)?.fieldInfos)?.find(t=>e===t.fieldName),i=null;`getField`in t&&t.getField?i=t.getField(e):`fieldsIndex`in t&&t.fieldsIndex&&(i=t.fieldsIndex.get(e));let a=null,o=`featureReduction`in t&&t.featureReduction;o&&(r??=`popupTemplate`in o?o.popupTemplate?.fieldInfos?.find(t=>e?.toLowerCase()===t.fieldName?.toLowerCase()):void 0,`fields`in o&&o.fields&&(a=o.fields.find(t=>t.name?.toLowerCase()===e?.toLowerCase())));let s=r||i||a,c=null;return s&&(c=r?.label||i?.alias||a?.alias||`name`in s&&s.name||`fieldName`in s&&s.fieldName||null),c}_isUnclassedRenderer(e){let t=e.visualVariables,n=B(e)&&e.classBreakInfos&&e.classBreakInfos.length===1,r=!1;return n&&t&&(r=e.field?t.some(t=>!(!t||e.field!==t.field||(e.normalizationField||t.normalizationField)&&e.normalizationField!==t.normalizationField)):!!t.length),r}};e([b()],$.prototype,`_loading`,void 0),e([b()],$.prototype,`children`,void 0),e([b({readOnly:!0})],$.prototype,`cssEffectFilter`,null),e([b()],$.prototype,`hideLayersNotInCurrentView`,void 0),e([b({readOnly:!0})],$.prototype,`isScaleDriven`,null),e([b()],$.prototype,`keepCacheOnDestroy`,void 0),e([b()],$.prototype,`layer`,void 0),e([b()],$.prototype,`layerView`,void 0),e([b()],$.prototype,`legendElements`,void 0),e([b({readOnly:!0})],$.prototype,`loading`,null),e([b({readOnly:!0})],$.prototype,`opacity`,null),e([b()],$.prototype,`parent`,void 0),e([b({readOnly:!0})],$.prototype,`ready`,null),e([b()],$.prototype,`respectLayerDefinitionExpression`,void 0),e([b()],$.prototype,`respectLayerVisibility`,void 0),e([b({readOnly:!0})],$.prototype,`scale`,null),e([b()],$.prototype,`sublayerIds`,void 0),e([b()],$.prototype,`title`,void 0),e([b({readOnly:!0,value:0})],$.prototype,`version`,null),e([b()],$.prototype,`view`,void 0),$=e([te(`esri.legend.ActiveLayerInfo`)],$);const at=$;export{at as default};
2
+ import{__decorate as e}from"tslib";import t from"../Color.js";import{addTokenParameter as n}from"../kernel.js";import r from"../request.js";import i from"../core/Accessor.js";import{isSome as a}from"../core/arrayUtils.js";import o from"../core/Collection.js";import{getColorWithEmissiveStrength as s}from"../core/colorUtils.js";import{JSONMap as c}from"../core/jsonMap.js";import l from"../core/Logger.js";import{clamp as u}from"../core/mathUtils.js";import{debounce as d}from"../core/promiseUtils.js";import{on as f,watch as p,initial as m,whenOnce as h}from"../core/reactiveUtils.js";import{px2pt as g}from"../core/screenUtils.js";import{parseWhereClause as _,sqlName as v,sqlLiteral as y}from"../core/sql.js";import{addQueryParameters as ee}from"../core/urlUtils.js";import{property as b,subclass as te}from"../core/accessorSupport/decorators.js";import{runUntracked as x}from"../core/accessorSupport/tracking.js";import{EffectView as ne}from"../layers/effects/EffectView.js";import{getPixelValueRange as re}from"../layers/raster/formats/pixelRangeUtils.js";import{getEffectiveDisplayFilter as ie}from"../layers/support/displayFilterUtils.js";import{ExportImageParameters as ae}from"../layers/support/ExportImageParameters.js";import{collectFields as oe,collectArcadeFieldNames as se}from"../layers/support/fieldUtils.js";import{isFeatureLayer as ce,getFieldConfigurationsContainer as le}from"../layers/support/layerUtils.js";import{getEffectiveClusterSizeVariable as ue}from"./support/clusterUtils.js";import{getColorFromPointCloudStops as de,getRampStopsForPointCloud as fe,getStretchRampStops as pe,getRampStops as S}from"./support/colorRampUtils.js";import{getHeatmapRampStops as me}from"./support/heatmapRampUtils.js";import{getRelationshipRampElement as he,getRotationAngleForFocus as ge}from"./support/relationshipRampUtils.js";import{getRampStops as _e,realWorldMaxSize as ve,realWorldMinSize as ye}from"./support/sizeRampUtils.js";import{specialCharsLessThan as be,specialCharsGreaterThan as xe,getAuthoringInfoVisualVariableByTheme as C,getSymbolForFlowRenderer as Se,formatValue as w,getFormatOptions as T,mergeWhereClauses as Ce,getMedianColor as E,rgbImgSource as we,getFormatOptionsForVisualVariable as Te}from"./support/utils.js";import{fromJSON as Ee}from"../renderers/support/jsonUtils.js";import{isSupportedRenderer3D as De}from"../renderers/support/rendererConversion.js";import{getScaleDependentSymbol as D}from"../renderers/support/scaleDependentSymbolUtils.js";import Oe from"../renderers/visualVariables/SizeVariable.js";import ke from"../renderers/visualVariables/support/SizeVariableLegendOptions.js";import{updateReferenceSizeSymbol as Ae}from"../smartMapping/renderers/support/referenceSizeUtils.js";import O from"../symbols/SimpleFillSymbol.js";import k from"../symbols/SimpleMarkerSymbol.js";import{applyCIMSymbolColor as je}from"../symbols/support/cimSymbolUtils.js";import{renderSymbol as Me}from"../symbols/support/renderUtils.js";import{renderColorRampPreviewHTML as A,renderDotDensityPreviewHTML as Ne,renderPieChartPreviewHTML as Pe,renderPreviewHTML as Fe,getEmissiveFromSymbol as j}from"../symbols/support/symbolUtils.js";import{getCSSFilterFromEffectList as Ie,isVolumetricSymbol as Le}from"../symbols/support/utils.js";import{formatNumberLabel as Re}from"../widgets/smartMapping/support/utils.js";const M=/^\s*(return\s+)?\$view\.scale\s*(;)?\s*$/i,ze=new c({esriGeometryPoint:`point`,esriGeometryMultipoint:`multipoint`,esriGeometryPolyline:`polyline`,esriGeometryPolygon:`polygon`,esriGeometryMultiPatch:`multipatch`}),N=new k({size:6,outline:{color:[128,128,128,.5],width:.5}}),Be=new O({style:`solid`});function P(e){return e.type===`flow`}function F(e){return e.type===`vector-field`}function I(e){return e.type===`raster-colormap`}function L(e){return e.type===`raster-stretch`}function R(e){return e.type===`raster-shaded-relief`}function z(e){return e.declaredClass===`esri.renderers.SimpleRenderer`}function B(e){return e.declaredClass===`esri.renderers.ClassBreaksRenderer`}function V(e){return e.declaredClass===`esri.renderers.UniqueValueRenderer`}function H(e){return e.declaredClass===`esri.renderers.HeatmapRenderer`}function Ve(e){return U(e)||W(e)||G(e)||He(e)}function He(e){return e.declaredClass===`esri.renderers.PointCloudRGBRenderer`}function U(e){return e.declaredClass===`esri.renderers.PointCloudClassBreaksRenderer`}function W(e){return e.declaredClass===`esri.renderers.PointCloudStretchRenderer`}function G(e){return e.declaredClass===`esri.renderers.PointCloudUniqueValueRenderer`}function Ue(e){return e.declaredClass===`esri.renderers.DotDensityRenderer`}function We(e){return e.declaredClass===`esri.renderers.PieChartRenderer`}function Ge(e,t){return z(e)||B(e)||V(e)||H(e)||Ue(e)||We(e)?t.type===`2d`||De(e):L(e)||I(e)||R(e)||U(e)||W(e)||G(e)||F(e)||P(e)}function Ke(e){return e.declaredClass===`esri.layers.BuildingSceneLayer`}function K(e){return e.declaredClass===`esri.layers.SubtypeGroupLayer`}function qe(e){return e.declaredClass===`esri.layers.VoxelLayer`}function Je(e){return e.declaredClass===`esri.layers.WMSLayer`}function Ye(e){return e.declaredClass===`esri.layers.WMTSLayer`}function q(e){return e.declaredClass===`esri.layers.MapImageLayer`}function Xe(e){return e.declaredClass===`esri.layers.TileLayer`}function J(e){return e.declaredClass===`esri.layers.ImageryLayer`}function Y(e){return e.declaredClass===`esri.layers.ImageryTileLayer`}function Ze(e){return e.declaredClass===`esri.layers.WCSLayer`}function Qe(e){return e.type===`stretch-ramp`}function $e(e){return(`authoringInfo`in e?e?.authoringInfo:null)?.type===`univariate-color-size`}function et(e){let t=`authoringInfo`in e?e?.authoringInfo:null;return t?.type===`univariate-color-size`&&t?.univariateTheme===`above-and-below`}function tt(e){return`sublayers`in e}function nt(e){return e&&`symbol`in e}function rt(e,t){let{field:n,field2:r,field3:i,fieldDelimiter:a,valueExpression:o}=e,s=!(!n&&!o||!r&&!i);if(!n)return null;let c=s?t?.toString().split(a||``):[t],l=n?{[n]:c?.[0]}:null;return l&&(r&&(l[r]=c?.[1]),i&&(l[i]=c?.[2])),l}const it=new k({style:`path`,path:`M10,5 L5,0 0,5 M5,0 L5,15`,size:15,outline:{width:1,color:[85,85,85,1]}});let X={},Z={};const Q=new WeakMap;let $=class extends i{constructor(e){super(e),this._hasColorRamp=!1,this._hasOpacityRamp=!1,this._hasSizeRamp=!1,this._loading=!1,this._dotDensityUrlCache=new Map,this._scaleDrivenSizeVariable=null,this._clusterSizeVariable=null,this._layerDefinitionExpression=null,this._layerDefinitionExpressionClause=null,this._layerDisplayFilter=null,this._layerDisplayFilterClause=null,this.children=new o,this.hideLayersNotInCurrentView=!1,this.keepCacheOnDestroy=!1,this.layer=null,this.layerView=null,this.legendElements=[],this.parent=null,this.respectLayerDefinitionExpression=!1,this.respectLayerVisibility=!0,this.scale=0,this.sublayerIds=[],this.title=null,this.view=null}initialize(){let e=()=>this.notifyChange(`ready`);this.addHandles([f(()=>this.children,`change`,t=>{let{added:n,removed:r}=t;n.forEach(t=>{let n=`activeLayerInfo-ready-watcher-${t.layer.uid}`;this.addHandles(p(()=>t.ready,e,m),n)}),r.forEach(e=>this.removeHandles(e.layer.uid)),e()}),p(()=>({stationary:this.view?.stationary??!0,scale:this.view?.scale??0}),e=>{e.stationary&&this.scale!==e.scale&&this._set(`scale`,e.scale)},m)]),this.keepCacheOnDestroy||(X={},Z={})}destroy(){this._dotDensityUrlCache=null,this._scaleDrivenSizeVariable=null,this.keepCacheOnDestroy||(X=null,Z=null),this._layerDefinitionExpressionClause=null}get cssEffectFilter(){let e=this.cssEffectView;return e?(e.scale=this.scale,Ie(e,!0)):null}get cssEffectView(){let{layer:e}=this,t=`effect`in e?e.effect:null;if(!t)return null;let n=this._get(`cssEffectView`);if(n&&n.effect===t)return n;let r=new ne({effect:t});return r.endTransition(),r}get isScaleDriven(){let e=this.layer;if(e===null)return!1;if(`effect`in e&&e.effect&&Array.isArray(e.effect))return!0;if(`featureReduction`in e&&e.featureReduction){if(e.featureReduction.type===`cluster`)return!0;if(e.featureReduction.type===`binning`&&`renderer`in e.featureReduction&&e.featureReduction.renderer)return this._isRendererScaleDriven(e.featureReduction.renderer)}return`renderer`in e&&e.renderer?`displayFilterInfo`in e&&e.displayFilterInfo&&V(e.renderer)?!0:this._isRendererScaleDriven(e.renderer):this._isLayerScaleDriven(this.layer)}get loading(){return this.children.length>0?this.children.some(e=>e.loading):this._loading}get opacity(){let e=this.layer.opacity,t=this.parent?.opacity,n=this.layer.parent,r=n&&`uid`in n?this._getParentLayerOpacity(n):null;return t==null?r==null?e:r*e:t*e}get ready(){return x(()=>this.layer===null?!0:this.children.length>0?this._isGroupActive():this.legendElements.length>0)}get version(){return this.commitProperty(`ready`),x(()=>this._get(`version`)+1)}async buildLegendElementsForFeatureCollections(e){if(this._loading=!0,this.hideLayersNotInCurrentView&&!await this._isLayerInCurrentView()){this.legendElements=[],this._loading=!1,this.notifyChange(`ready`);return}let t=Array.from(e,e=>{if(ce(e))return this._getRendererLegendElements(e.renderer,{title:e.title});if(e.featureSet?.features.length){let t=e.layerDefinition,n=t?.drawingInfo,r=n&&Ee(n.renderer),i=ze.read(t.geometryType);return r?this._getRendererLegendElements(r,{title:e.name,geometryType:i}):(l.getLogger(this).warn(`drawingInfo not available!`),null)}return null});try{let e=[],n=await Promise.allSettled(t);for(let t of n)if(t.status===`fulfilled`)for(let n of t.value??[])e.push(n);this.legendElements=e}catch(e){l.getLogger(this).warn(`error while building legend for layer!`,e)}finally{this._loading=!1,this.notifyChange(`ready`)}}async buildLegendElementsForRenderer(e){try{this._loading=!0;let t=!this.hideLayersNotInCurrentView||await this._isLayerInCurrentView();this.legendElements=t?await this._getRendererLegendElements(e):[]}catch(e){l.getLogger(this).warn(`error while building legend for layer!`,e)}finally{this._loading=!1,this.notifyChange(`ready`)}}async buildLegendElementsForFeatureReduction(e){try{this._loading=!0,await this._waitForLayerViewUpdate(this.layerView);let t=!this.hideLayersNotInCurrentView||await this._isLayerInCurrentView();this.legendElements=t?await this._getLegendElementsForFeatureReduction(e):[]}catch(e){l.getLogger(this).warn(`error while building legend for layer!`,e)}finally{this._loading=!1,this.notifyChange(`ready`)}}async buildLegendElementsForTools(){this._loading=!0;let e=this.layer;if(qe(e))await this._constructLegendElementsForVoxelLayer();else if(Ye(e))this._constructLegendElementsForWMTSlayer();else if(Je(e))await this._constructLegendElementsForWMSSublayers();else if(Ke(e))await this._constructLegendElementsForBuildingSceneLayer();else if(q(e)||Xe(e)||K(e))await this._constructLegendElementsForSublayers();else{this.removeHandles(`imageryLayers-watcher`);let t=`default`;if(J(e)){let n=e?.rasterFunction?.functionName||`default`,r=e.bandIds?.length?e.bandIds.join(``):`###`;t=n+`_`+r}if(Y(e)||e.type===`link-chart`)return;await this._getLegendLayers(`${e.uid}-${t}`).then(async t=>{this.legendElements=[];let n=t.map(async t=>{if(J(e)){let t=p(()=>[e.rasterFunction,e.bandIds],()=>d(async()=>{X.default=null,e.renderer?await this.buildLegendElementsForRenderer(e.renderer):await this.buildLegendElementsForTools()})());this.addHandles(t,`imageryLayers-watcher`)}let n=this._generateSymbolTableElementForLegendLayer(t);n?.infos.length&&(J(e)&&(n.title=e.title),this.legendElements.push(n))});await Promise.allSettled(n)}).catch(e=>{l.getLogger(this).warn(`Request to server for legend has failed!`,e)})}this._loading=!1,this.notifyChange(`ready`)}async _isLayerInCurrentView(e){return this._checkFeatureCountForExpression(e,this.view.extent)}_getParentLayerOpacity(e){let t=1,n=e.parent;return n&&`uid`in n&&(t=this._getParentLayerOpacity(n)),e.opacity*t}_isGroupActive(){return this.children.some(e=>e.ready)}_isRendererScaleDriven(e){if(e.type===`dot-density`)return!0;let t=`valueExpression`in e?e.valueExpression:null;return M.test(t)||(`visualVariables`in e?e.visualVariables:null)?.some(e=>this._isScaleDrivenSizeVariable(e))?!0:this._hasScaleDrivenSymbols(e)}_hasScaleDrivenSymbols(e){switch(e.type){case`simple`:return this._isScaleDrivenSymbol(e.symbol);case`class-breaks`:return this._isScaleDrivenSymbol(e.defaultSymbol)||e.classBreakInfos.some(e=>this._isScaleDrivenSymbol(e.symbol));case`unique-value`:return this._isScaleDrivenSymbol(e.defaultSymbol)||!!e.uniqueValueInfos?.some(e=>this._isScaleDrivenSymbol(e.symbol))}return!1}_isScaleDrivenSymbol(e){if(e?.type===`cim`){let{primitiveOverrides:t,minScale:n,maxScale:r}=e.data,i=t?.some(e=>(e.valueExpressionInfo?.expression||``).includes(`$view.scale`))??!1;return n!=null||r!=null||i}return!1}_isScaleDrivenSizeVariable(e){if(e&&e.type!==`size`)return!1;let t=e,n=t.minSize,r=t.maxSize;return typeof n==`object`&&n&&this._isScaleDrivenSizeVariable(n)||typeof r==`object`&&r&&this._isScaleDrivenSizeVariable(r)?!0:M.test(t.valueExpression)}_isLayerScaleDriven(e){if(`minScale`in e&&e.minScale>0||`maxScale`in e&&e.maxScale>0)return!0;if(`sublayers`in e&&e.sublayers)return e.sublayers.some(e=>this._isLayerScaleDriven(e));let t=e.parent;if(e.loaded===!1&&t&&q(t)&&`source`in e&&e.source&&e.source.type===`map-layer`){for(let n of t.sourceJSON.layers??[])if(n.id===e.source.mapLayerId&&(n.minScale>0||n.maxScale>0))return!0}return!1}async _constructLegendElementsForVoxelLayer(){this._loading=!0,this.legendElements=[],this.removeHandles(`voxel-style-watcher`),this.removeHandles(`voxel-current-variable`);let e=this.layer;this.addHandles(p(()=>e.currentVariableId,()=>this._constructLegendElementsForVoxelLayer()),`voxel-current-variable`),this.addHandles(p(()=>e.getVariableStyles(),()=>this._constructLegendElementsForVoxelLayer()),`voxel-style-watcher`);let t=e.getVariableStyle(null),n=[];if(t){if(t.uniqueValues?.length){let e=[];t.uniqueValues.forEach(t=>{t.enabled&&e.push({label:t.label||`${t.value}`,value:t.value,symbol:new O({color:t.color,outline:null})})}),e.length&&n.push({type:`symbol-table`,title:t.label,infos:e})}else if(t.transferFunction){let{colorStops:e,stretchRange:r}=t.transferFunction,i=e.toArray().reverse(),a=r.map((e,t)=>`${t===0?be:xe} ${Re(e)}`).reverse(),o=i.map(e=>({color:e.color,value:null,label:null}));o[0].label=a[0],o[o.length-1].label=a[1],n.push({type:`color-ramp`,title:t.label,infos:o,preview:A(i.map(e=>e.color))})}}await this._generatePreviewsForLegendElements(n,{opacity:e.opacity}),this.legendElements=n,this._loading=!1,this.notifyChange(`ready`)}_constructLegendElementsForWMTSlayer(){this._loading=!0,this.legendElements=[],this.removeHandles(`wmts-activeLayer-watcher`);let e=this.layer.activeLayer;this.addHandles(p(()=>{let{layer:e}=this;return e&&`activeLayer`in e&&e.activeLayer},()=>this._constructLegendElementsForWMTSlayer()),`wmts-activeLayer-watcher`);let t=e.styleId?e.styles?.find(({id:t})=>t===e.styleId)?.legendUrl:void 0;t&&(this.legendElements=[{type:`symbol-table`,title:e.title,infos:[{src:t,opacity:this.opacity}]}]),this._loading=!1,this.notifyChange(`ready`)}async _constructLegendElementsForWMSSublayers(){this._loading=!0,this.legendElements=[],this.removeHandles(`wms-sublayers-watcher`);let e=this.layer,t=null;(e.customParameters||e.customLayerParameters)&&(t={...e.customParameters,...e.customLayerParameters}),this.addHandles(p(()=>{let{layer:e}=this;return e&&`sublayers`in e&&e.sublayers},()=>this._constructLegendElementsForWMSSublayers()),`wms-sublayers-watcher`),this.legendElements=await this._generateLegendElementsForWMSSublayers(e.sublayers,t),this._loading=!1,this.notifyChange(`ready`)}async _generateLegendElementsForWMSSublayers(e,t){let n=this.layer,r=[];this.addHandles(e.on(`change`,()=>this._constructLegendElementsForWMSSublayers()),`wms-sublayers-watcher`);let i=this.sublayerIds?.map(e=>n.findSublayerById(e))?.filter(a)??[],o=i.length?i:e.toArray();for(let e of o){let n=p(()=>[e.title,e.visible,e.legendEnabled],()=>this._constructLegendElementsForWMSSublayers());if(this.addHandles(n,`wms-sublayers-watcher`),!this.respectLayerVisibility||e.visible&&e.legendEnabled){let n=await this._generateSymbolTableElementForWMSSublayer(e,t);n?.infos.length&&r.unshift(n)}}return r}async _generateSymbolTableElementForWMSSublayer(e,t){if(!e.legendUrl&&e.sublayers){let n=(await this._generateLegendElementsForWMSSublayers(e.sublayers,t)).filter(e=>e);return{type:`symbol-table`,title:e.title,infos:n}}return this._generateSymbolTableElementForLegendUrl(e,t)}async _generateSymbolTableElementForLegendUrl(e,t){let n=e.legendUrl;if(!n)return;let i={type:`symbol-table`,title:e.title||e.name||String(e.id??``),infos:[]};t&&(n=ee(n,t));let a=null,o=e.layer?.opacity;try{a=(await r(n,{responseType:`image`})).data,a&&(a.style.opacity=o)}catch{}return i.infos.push({src:n,preview:a,opacity:o}),i}_getLegendLayers(e,t){let n=X&&X[e];if(n)return Promise.resolve(n);let r=Z?.[e];if(r!=null)return r;let i=this._legendRequest(t).then(t=>{let n=t.layers;return X&&(X[e]=n),n}).finally(()=>{Z&&delete Z[e]});return Z[e]=i,i}_legendRequest(e){let t=this.layer,n={f:`json`,dynamicLayers:e};if(J(t)){let e=t.exportImageServiceParameters.rasterFunction;if(e&&(n.renderingRule=JSON.stringify(e.functionDefinition?.toJSON()||e.toJSON())),t.bandIds&&(n.bandIds=t.bandIds.join()),t.raster||t.viewId||t.customParameters){let{raster:e,viewId:r,customParameters:i}=t;n={raster:e,viewId:r,...n,...i}}}let i=t.url.replace(/(\/)+$/,``);if(`version`in t&&+t.version>=10.01){let e=i.indexOf(`?`);e>-1?i=i.slice(0,e)+`/legend`+i.slice(e):i+=`/legend`}else{let e=i.toLowerCase().indexOf(`/rest/`),t=e===-1?i:i.slice(0,e)+i.slice(e+5);i=`https://utility.arcgis.com/sharing/tools/legend?soapUrl=`+encodeURI(t)+`&returnbytes=true`}return r(i,{query:n}).then(e=>e.data)}async _constructLegendElementsForBuildingSceneLayer(){this._loading=!0,this.legendElements=[],this.removeHandles(`sublayers-watcher`);let e=this.layer;this.addHandles(p(()=>e.sublayers,()=>this._constructLegendElementsForBuildingSceneLayer()),`sublayers-watcher`);try{this.legendElements=await this._generateLegendElementsForBuildingSublayers(e.sublayers,this.opacity)}catch(e){l.getLogger(this).warn(`Request to server for legend has failed!`,e)}finally{this._loading=!1,this.notifyChange(`ready`)}}async _generateLegendElementsForBuildingSublayers(e,t){let n=[];this.addHandles(e.on(`change`,()=>this._constructLegendElementsForBuildingSceneLayer()),`sublayers-watcher`);let r=e.toArray();for(let e of r){let r=p(()=>[`renderer`in e&&e.renderer,e.opacity,e.title,e.visible],()=>this._constructLegendElementsForBuildingSceneLayer());if(this.addHandles(r,`sublayers-watcher`),!this.respectLayerVisibility||e.visible){let r=e?.opacity==null?null:e.opacity,i=r==null?t:r*t;if(e.type===`building-group`){let t={type:`symbol-table`,title:e.title,infos:[]},r=await this._generateLegendElementsForBuildingSublayers(e.sublayers,i);t.infos.push(...r),n=[t,...n]}else e.renderer&&(n=[...await this._getRendererLegendElements(e.renderer,{title:e.title,opacity:i,sublayer:e}),...n])}}return n.filter(e=>!!e&&(`infos`in e&&e.infos?e.infos.length>0:!0))}async _constructLegendElementsForSublayers(){this._loading=!0,this.removeHandles(`sublayers-watcher`);let e=this.layer;if(!(q(e)||Xe(e)||K(e))||this.hideLayersNotInCurrentView&&!await this._isLayerInCurrentView()){this.legendElements=[],this._loading=!1,this.notifyChange(`ready`);return}this.addHandles(p(()=>e.sublayers,()=>this._constructLegendElementsForSublayers),`sublayers-watcher`);try{this.legendElements=await this._generateLegendElementsForSublayers(e.sublayers,this.opacity)}catch(e){l.getLogger(this).warn(`Request to server for legend has failed!`,e)}finally{this._loading=!1,this.notifyChange(`ready`)}}async _generateLegendElementsForSublayers(e,t,n){let r=this.layer,i=[];this.addHandles(e.on(`change`,()=>this._constructLegendElementsForSublayers()),`sublayers-watcher`);let o=e.toArray();!n&&this.sublayerIds&&this.sublayerIds.length&&(o=K(r)?this.sublayerIds.map(e=>r.findSublayerForSubtypeCode(e)).filter(a):this.sublayerIds.map(e=>r.findSublayerById(e)).filter(a));for(let e of o){let r=p(()=>[e.renderer,e.opacity,e.title,e.visible,e.legendEnabled],()=>this._constructLegendElementsForSublayers());this.addHandles(r,`sublayers-watcher`);let a=e.createQuery().where,o=!this.hideLayersNotInCurrentView||await this._isLayerInCurrentView(a),s=!this.respectLayerVisibility||e.visible&&e.legendEnabled&&this._isSublayerInScale(e);if(o&&s){let r=e?.opacity==null?null:e.opacity,a=r==null?t:r*t,o=!tt(e)||e.originIdOf(`renderer`)>2&&!e.sublayers;if(e.renderer&&o)await e.load(),i=[...await this._getRendererLegendElements(e.renderer,{title:e.title,opacity:a,sublayer:e}),...i];else if(tt(e)){let t=await this._generateSymbolTableElementForSublayer(e,a,n);t&&i.unshift(t)}}}return i.filter(e=>!!e&&(`infos`in e&&e.infos?e.infos.length>0:!0))}async _generateSymbolTableElementForSublayer(e,t,n){if(!n){n=new Map;let t=this.layer,r=e.source,i=!(!r||r.type===`map-layer`&&r.mapLayerId===e.id&&(!r.gdbVersion||r.gdbVersion===(`gdbVersion`in t&&t.gdbVersion)))||e.originIdOf(`renderer`)>2||e.originIdOf(`labelingInfo`)>2||e.originIdOf(`labelsVisible`)>2,a=null;if(i){let e=new ae({layer:this.layer});a=e.hasDynamicLayers?e.dynamicLayers:null,e.destroy()}let o=a||`${t.uid}-default`;(await this._getLegendLayers(o,a)).forEach(e=>n.set(e.layerId,e))}let r=n.get(e.id);if((!r||r?.subLayerIds&&r.defaultVisibility)&&e.sublayers){let r=await this._generateLegendElementsForSublayers(e.sublayers,t,n);return{type:`symbol-table`,title:e.title,infos:r}}return this._generateSymbolTableElementForLegendLayer(r,e,t)}_generateSymbolTableElementForLegendLayer(e,t,n){if(!e?.legend||this.respectLayerVisibility&&!this._isLegendLayerInScale(e,t))return null;let r=t?.renderer,i=t?.title||e.layerName;if(r&&(!t||t?.originIdOf(`renderer`)>2)){let e=t?.title||this._getRendererTitle(r,t);e&&(i&&typeof e!=`string`&&`title`in e&&(e.title=i),i=e)}let a={type:`symbol-table`,title:i,legendType:e.legendType||null,infos:[]},o=t?this._sanitizeLegendForSublayer(e.legend.slice(),t):e.legend;return e.legendGroups&&e.legendGroups.length>0?e.legendGroups.forEach(r=>{let i={type:`symbol-table`,title:r.heading,legendType:e.legendType||null,infos:this._generateSymbolTableElementInfosForLegendLayer(o.filter(e=>e.groupId===r.id),e.layerId,r.heading||a.title||t?.title,n)};i.infos?.length>0&&a.infos.push(i)}):a.infos=this._generateSymbolTableElementInfosForLegendLayer(o,e.layerId,a.title||t?.title,n),a.infos.length>0?a:null}_generateSymbolTableElementInfosForLegendLayer(e,t,r,i){return e.map(e=>{let a=e.url;if(e.imageData&&e.imageData.length>0)a=`data:image/png;base64,${e.imageData}`;else if(!a.startsWith(`http`))a=n(`${this.layer.url}/${t}/images/${a}`);else return null;let o=e.label;return{previewAriaLabel:o||r,label:o,src:a,opacity:i??this.opacity,width:e.width,height:e.height}}).filter(a)}_isSublayerInScale(e){let t=e.minScale||0,n=e.maxScale||0;return!(t>0&&t<this.scale||n>this.scale)}_isLegendLayerInScale(e,t){let n=t||this.layer,r=null,i=null,a=!0;return!n.minScale&&n.minScale!==0||!n.maxScale&&n.maxScale!==0?(e.minScale===0&&n.tileInfo&&(r=n.tileInfo.lods[0].scale),e.maxScale===0&&n.tileInfo&&(i=n.tileInfo.lods[n.tileInfo.lods.length-1].scale)):(r=Math.min(n.minScale,e.minScale)||n.minScale||e.minScale,i=Math.max(n.maxScale,e.maxScale)),(r>0&&r<this.scale||i>this.scale)&&(a=!1),a}_sanitizeLegendForSublayer(e,t){if(`version`in this.layer&&+this.layer.version<10.1||e.length===0)return e;let n=t.renderer,r=e.some(e=>e.values),i=0,a=null;return r&&e.some((e,t)=>(e.values||(i=t,a=e,a.label||(a.label=`others`)),a!=null)),n?n.type===`unique-value`?a&&(e.splice(i,1),e.push(a)):n.type===`class-breaks`&&(a&&e.splice(i,1),n.legendOptions?.order||e.reverse(),a&&e.push(a)):a&&(e.splice(i,1),e.push(a)),e}async _getRendererLegendElements(e,t={}){if(!Ge(e,this.view))return l.getLogger(this).warn(`Renderer of type '${e.type}' not supported!`),[];if(Ve(e))return this._constructPointCloudRendererLegendElements(e,t);if(Ue(e))return this._constructDotDensityRendererLegendElements(e);let n=await this._loadRenderer(e);return We(n)?this._constructPieChartRendererLegendElements(n):this._constructRendererLegendElements(n,t)}async _getLegendElementsForFeatureReduction(e){let t=null;return e.type===`binning`?t=e.renderer:e.type===`cluster`&&(t=this._getClusterRenderer(e)),t?this._getRendererLegendElements(t,{isFeatureReductionRenderer:!0}):[]}_getPointCloudRendererTitle(e){return(e.legendOptions?.title||e.field)??``}async _constructPointCloudRendererLegendElements(e,t={}){let n=t.title,r=[],i=null,a=null;if(U(e))i={type:`symbol-table`,title:n||this._getPointCloudRendererTitle(e),infos:[]},e.colorClassBreakInfos.forEach(e=>{i.infos.unshift({label:e.label||e.minValue+` - `+e.maxValue,value:[e.minValue,e.maxValue],symbol:this._getAppliedCloneSymbol(N,e.color)})});else if(W(e)){let t=e.stops,r=null;if(t?.length&&(t.length===1&&(r=t[0].color),!r)){let e=t[0].value,n=t[t.length-1].value;if(e!=null&&n!=null){let i=e+(n-e)/2;r=de(i,t)}}i={type:`symbol-table`,title:null,infos:[{label:null,value:null,symbol:this._getAppliedCloneSymbol(N,r||N.color)}]};let o=fe(e.stops??[])??[];a={type:`color-ramp`,title:n||this._getPointCloudRendererTitle(e),infos:o,preview:A(o.map(e=>e.color))}}else G(e)&&(i={type:`symbol-table`,title:n||this._getPointCloudRendererTitle(e),infos:[]},e.colorUniqueValueInfos?.forEach(e=>{i.infos.push({label:e.label||e.values.join(`, `),value:e.values.join(`, `),symbol:this._getAppliedCloneSymbol(N,e.color)})}));return i?.infos.length&&r.push(i),a?.infos.length&&r.push(a),await this._generatePreviewsForLegendElements(r,{opacity:this.opacity,symbolConfig:{applyColorModulation:!!e.colorModulation}}),r}async _getElementInfoForDotDensity(e,t){let{color:n,label:r,valueExpressionTitle:i}=t,{backgroundColor:a,outline:o,dotSize:s}=e,c=this.cssEffectFilter,l=s+`-`+n+`-`+a+`-`+(o&&JSON.stringify(o.toJSON()))+`-`+c,u=this._dotDensityUrlCache,d=u.has(l)?u.get(l):Ne(e,n);u.set(l,d);let f={shape:{type:`image`,x:0,y:0,width:d.width,height:d.height,src:d.src},fill:null,stroke:null,offset:[0,0]},p=Me([[f]],[d.width,d.height],{cssEffectFilter:this.cssEffectFilter});return{opacity:1,src:d.src,preview:p,width:d.width,height:d.height,previewAriaLabel:r||i}}async _constructDotDensityRendererLegendElements(e){let t=e.calculateDotValue(this.view.scale),n=e.legendOptions?.unit,r={type:`symbol-table`,title:{value:t&&Math.round(t),unit:n||``},infos:[]};for(let t of e.attributes){let n=await this._getElementInfoForDotDensity(e,t);n.label=t.label||t.valueExpressionTitle||t.field,r.infos.push(n)}return[r]}async _constructPieChartRendererLegendElements(e){let t=[],n=null,r=e.outline;e.attributes.forEach(e=>{let n=new k({color:e.color,outline:r}),i=e.label||e.valueExpressionTitle||e.field;t.push({label:i,symbol:n})});let i=t.length?[...t]:[];if(e.othersCategory?.color&&e.othersCategory?.threshold!==0){let i=new k({color:e.othersCategory.color,outline:r});n=e.othersCategory.label||`Other`,t.push({label:n,symbol:i})}if(e.defaultColor?.a){let n=new k({color:e.defaultColor,outline:r});t.push({label:e.defaultLabel,symbol:n})}let a=await this._getVisualVariableLegendElements(e,this.layer)||[];if(t.length){a.unshift({type:`symbol-table`,title:null,infos:t});let o=i.filter(e=>e.label!==n).map(e=>e.symbol.color).filter(Boolean),s=Pe(o,{holePercentage:e.holePercentage,backgroundColor:e.backgroundFillSymbol?.color,cssEffectFilter:this.cssEffectFilter,outline:r});a.unshift({type:`pie-chart-ramp`,title:this._getRendererTitle(e,this.layer),infos:t,preview:s})}return await this._generatePreviewsForLegendElements(a,{opacity:this.layer.opacity,cssEffectFilter:this.cssEffectFilter}),a}async _getWhereClause(e,t,n){let r=await _(e,n),i=new Set,{field:a,field2:o,field3:s}=t;oe(i,n,[a,o,s]),await se(i,n,null,t.valueExpression);let c=new Set(Array.from(i,e=>e.toLowerCase()));return(r?.fieldNames.map(e=>e.toLowerCase()))?.some(e=>!c.has(e))?null:r}async _processDefinitionExpression(e,t){if(!(`definitionExpression`in e))return;let n=e.definitionExpression;n&&this.respectLayerDefinitionExpression?this._layerDefinitionExpression!==n&&(this._layerDefinitionExpressionClause=await this._getWhereClause(n,t,e.fieldsIndex)):this._layerDefinitionExpressionClause=null,this._layerDefinitionExpression=n}async _processDisplayFilter(e,t){if(!(`displayFilterInfo`in e))return;let n=e.displayFilterInfo?ie(e.displayFilterInfo,this.view):null;return n?.where?this._layerDisplayFilter?.id!==n?.id&&(this._layerDisplayFilterClause=await this._getWhereClause(n.where,t,e.fieldsIndex)):this._layerDisplayFilterClause=null,this._layerDisplayFilter=n,n}async _constructRendererLegendElements(e,t={}){let{title:n,sublayer:r,isFeatureReductionRenderer:i}=t,a=r||this.layer,o=C(e,`reference-size`),s=C(e,`spike`),c=i&&`renderer`in a&&a.renderer?a.renderer:e,l=null;V(c)&&(await this._processDefinitionExpression(a,c),l=await this._processDisplayFilter(a,c)),this._hasColorRamp=!1,this._hasOpacityRamp=!1,this._hasSizeRamp=!1,this._scaleDrivenSizeVariable=null;let u=await this._getVisualVariableLegendElements(e,a)||[],d={type:`symbol-table`,title:n||this._getRendererTitle(e,a),infos:[]},f=null,p=!1,m=new Set;if(P(e)&&!this._hasSizeRamp){let t=await Se(e);d.infos.push({label:null,symbol:t})}else if($e(e)){let t=n,r=et(e)?`univariate-above-and-below-ramp`:`univariate-color-size-ramp`,i=u.findIndex(e=>e.type===`color-ramp`),a=i===-1?null:u.splice(i,1)[0],o=u.findIndex(e=>e.type===`size-ramp`),s=o===-1?null:u.splice(o,1)[0],c=[];a&&(t=a.title,c.push(a)),s&&(t=s.title,c.push(s)),c.length>0&&u.push({type:r,title:t,infos:c})}else if(H(e)){let t=me(e);u.push({type:`heatmap-ramp`,title:n||this._getRendererTitle(e,a),infos:t,preview:A(t.map(e=>e.color),{cssEffectFilter:this.cssEffectFilter})})}else if(V(e)){let t=e.authoringInfo;if(t?.type===`relationship`){let{numClasses:n,field1:r,field2:i}=t,o=t.focus;if(n&&r&&i){let t=[r,i],s=ge(o)||0;for(let e of t){let{field:t,normalizationField:n,label:r}=e,i=r||{field:this._getFieldAlias(t,a),normField:n&&this._getFieldAlias(n,a)},o=it.clone();o.angle=s,d.infos.push({label:i,symbol:o}),m.add(o),s+=90}let c=he({focus:o,numClasses:n,infos:e.uniqueValueInfos??[]});u.unshift(c)}}else if(J(this.layer)||Y(this.layer)){let{uniqueValueInfos:t}=e;if(t)for(let e of t)e.symbol&&await this._checkClausesForUVR(c,e.value,a)&&d.infos.push({label:e.label||e.value,value:e.value,symbol:e.symbol})}else{let{field:t,field2:r,field3:i,fieldDelimiter:s,valueExpression:u,defaultSymbol:f}=e,m=!(!t&&!u||!r&&!i),h=l?.title?.trim(),g=[],{uniqueValueGroups:_}=e;if(_)for(let e of _){let n={type:`symbol-table`,title:e.heading,infos:[]},{classes:l}=e;if(l)for(let e of l){let{symbol:l,values:d}=e;if(l){let f=[],p=[];for(let e of d??[]){let{value:n,value2:o,value3:c}=e,l=[],d=[];(t||u)&&(l.push(n),d.push(this._getDomainName(t,n,a)??w(n,T(a,t,this.view.timeZone)))),r&&(l.push(o),d.push(this._getDomainName(r,o,a)??w(o,T(a,r,this.view.timeZone)))),i&&(l.push(c),d.push(this._getDomainName(i,c,a)??w(c,T(a,i,this.view.timeZone)))),f.push(m?l.join(s||``):l[0]),p.push(d.join(` - `))}let h=f.join(`, `),g=e.label;if(!g){let e=p.filter(Boolean);g=e.length?e.join(`, `):h}let _=D(e,this.view.scale)??l;_.type===`cim`&&o&&(_=_.clone(),Ae(_,{innerDotSize:8,outerRingSize:16}));let v=!1;for(let e of f)if(v=await this._checkClausesForUVR(c,e,a),v)break;v&&n.infos.push({label:g,value:h,symbol:_})}}n.infos.length&&g.push(n)}if(g.length){let t=g[0];if(g.length===1&&`title`in t&&!t.title){let e=t.infos?.filter(nt)??[];d.infos.push(...e)}else f&&(g.push({type:`symbol-table`,infos:[{label:e.defaultLabel||`others`,symbol:f}]}),p=!0),d.infos.push(...g);!n&&!e.legendOptions?.title&&!e.valueExpressionTitle?d.title=h:h&&(d.title=`${d.title} (${h})`)}}e.defaultSymbol&&!p&&(d.infos.push({label:e.defaultLabel||`others`,symbol:e.defaultSymbol}),p=!0)}else if(B(e)){if(!o&&!s){if(f=this._isUnclassedRenderer(e),!f||!this._hasSizeRamp){let t=e.classBreakInfos.filter(({symbol:e})=>e),n=e.legendOptions?.order===`ascending-values`;for(let e of t){let{label:t,minValue:r,maxValue:i}=e,o=D(e,this.view.scale)??e.symbol,s=t||(f?null:`${r} - ${i}`),c={previewAriaLabel:s||d.title||a.title,label:s,value:[r,i],symbol:o};n?d.infos.push(c):d.infos.unshift(c)}f&&(d.title=null),this._updateInfosForClassedSizeRenderer(e,d.infos)}e.defaultSymbol&&!f&&(d.infos.push({label:e.defaultLabel||`others`,symbol:e.defaultSymbol}),p=!0)}}else if(L(e)){if(Y(this.layer)||Ze(this.layer)){let t=await this._constructTileImageryStretchRendererElements(e);Qe(t)?u.push(t):d.infos=t}else{let t=this.layer,n,r;e.customStatistics?.length&&({min:n,max:r}=e.customStatistics[0]);let i=[],a=t.serviceRasterInfo;if(t.rasterFunction)try{a=await t.generateRasterInfo(t.rasterFunction)}catch{}let o=re(a.pixelType);if(a.bandCount===1){let i=t.bandIds?.[0]||0;n??=a.statistics?a.statistics[i].min:o[0],r??=a.statistics?a.statistics[i].max:o[1],n||r?u.push(await this._getStretchLegendElements(e,{min:n,max:r})):this._getServerSideLegend()}else if(t.bandIds?.length===1)n??=a.statistics?a.statistics[t.bandIds[0]].min:o[0],r??=a.statistics?a.statistics[t.bandIds[0]].max:o[1],n||r?u.push(await this._getStretchLegendElements(e,{min:n,max:r})):this._getServerSideLegend();else if(a.bandCount>=3){let{bandInfos:e}=a,{bandIds:n}=t;e.length>=a.bandCount?n?.length===3?(i=n.map(t=>e[t].name),d.infos=this._createSymbolTableElementMultiBand(i)):t.format===`lerc`?(i=[0,1,2].map(t=>e[t].name),d.infos=this._createSymbolTableElementMultiBand(i)):this._getServerSideLegend():t.format===`lerc`?(i=[`band1`,`band2`,`band3`],d.infos=this._createSymbolTableElementMultiBand(i)):this._getServerSideLegend()}else this._getServerSideLegend()}}else if(I(e))e.colormapInfos.forEach(e=>{d.infos.push({label:e.label,value:e.value,symbol:this._getAppliedCloneSymbol(Be,e.color)})});else if(z(e)){let n=e.symbol;switch(t.geometryType){case`point`:n=`pointSymbol`in a?a.pointSymbol:null;break;case`polyline`:n=`lineSymbol`in a?a.lineSymbol:null;break;case`polygon`:n=`polygonSymbol`in a?a.polygonSymbol:null}let r=this._clusterSizeVariable&&this._getClusterSymbol()||!this._hasSizeRamp;e.symbol&&r&&d.infos.push({previewAriaLabel:e.label||d.title||a.title,label:e.label,symbol:n})}else if(F(e)){e.outputUnit&&(this.title=`(`+e.toJSON().outputUnit+`)`),d.title=e.attributeField;let t=e.getClassBreakInfos();t?.length?t.forEach(e=>{d.infos.push({label:e.minValue+` - `+e.maxValue,symbol:e.symbol})}):d.infos.push({label:e.attributeField,symbol:e.getDefaultSymbol()})}else R(e)&&u.push(await this._getStretchLegendElements(e,{min:0,max:255}));let h=e.defaultSymbol;h&&!p&&!z(e)&&(!f||this._hasColorRamp||this._hasSizeRamp||this._hasOpacityRamp)&&u.push({type:`symbol-table`,infos:[{label:e.defaultLabel||`others`,symbol:h}]}),d.infos.length&&u.unshift(d);let g=t.opacity==null?this.opacity:t.opacity,_=this._isTallSymbol(`visualVariables`in e?e.visualVariables:null),v=J(this.layer)||Y(this.layer);return await this._generatePreviewsForLegendElements(u,{opacity:g,symbolConfig:{isTall:_,isSquareFill:v},cssEffectFilter:this.cssEffectFilter},{arrowMarkerSymbols:m}),e=null,u}async _waitForLayerViewUpdate(e){await h(()=>!e.updating)}async _checkFeatureCountForExpression(e,t){let n=this.layerView;if(!(n&&`createQuery`in n&&`queryFeatureCount`in n))return!0;try{await this._waitForLayerViewUpdate(n);let r=n.createQuery();return e&&(r.where=Ce(r.where,e)),t&&(r.geometry=t),await n.queryFeatureCount(r)>0}catch{return!0}}_getUVRFeatureCountExpression(e,t){return Object.entries(e).map(([e,n])=>{let r=`getField`in t&&t.getField?t.getField(e):null,i=v(e);if(n==null)return`${i} IS NULL`;try{return`${i} = ${y(n,null,r?{type:r.type}:null)}`}catch{return`${i} = ${y(n)}`}}).join(` AND `)}async _checkClausesForUVR(e,t,n){let r=rt(e,t);if(!r)return!0;let i=!!(!this._layerDefinitionExpressionClause&&this._layerDefinitionExpression&&this.respectLayerDefinitionExpression||!this._layerDisplayFilterClause&&this._layerDisplayFilter?.where),a=this._getUVRFeatureCountExpression(r,n);return(i&&a?await this._checkFeatureCountForExpression(a):!0)&&(this._layerDefinitionExpressionClause?.testFeature(r)??!0)&&(this._layerDisplayFilterClause?.testFeature(r)??!0)}_getServerSideLegend(){setTimeout(()=>this.buildLegendElementsForTools(),0)}_getAllInfos(e){let t=e?.infos;return t?t.reduce((e,t)=>e.concat(this._getAllInfos(t)),[]):[e]}async _constructTileImageryStretchRendererElements(e){let t=this.layer,n=t.symbolizer.rasterInfo??t.raster.rasterInfo,r,i,a=e?.customStatistics?.length?e.customStatistics:n?.statistics;if(a)({min:r,max:i}=a[0]);else{let e=re(n.pixelType);r=e[0],i=e[1]}if(t.hasStandardTime()&&(r=t.getStandardTimeValue(r),i=t.getStandardTimeValue(i)),n.bandCount===1||t.bandIds?.length===1)return this._getStretchLegendElements(e,{min:r,max:i});let o=(t?.bandIds?.length?t.bandIds:Array.from(Array(Math.min(n.bandCount,3)).keys())).map(e=>n.bandInfos[e].name);return o.length<3?o.push(o[1]):o.length>3&&o.splice(3),this._createSymbolTableElementMultiBand(o)}async _getStretchLegendElements(e,t){let n=e.colorRamp?.toJSON(),r=pe(n,t);return{type:`stretch-ramp`,title:``,infos:r,preview:A(r.map(e=>e.color))}}_getClusterSymbol(){let e=this.layer,t=`featureReduction`in e&&e.featureReduction,n=t&&`symbol`in t&&t.renderer;return(!n||n?.authoringInfo?.isAutoGenerated===!0)&&t&&`symbol`in t?t.symbol:null}async _getSizeLegendElement(e,t,n,r){return{type:`size-ramp`,title:this._clusterSizeVariable?this._getClusterTitle(t):e,infos:await _e(n,t,await E(n),this.scale,this.view,r,this._clusterSizeVariable?this._getClusterSymbol():null)}}_createSymbolTableElementMultiBand(e){let t=[],n=[`red`,`green`,`blue`];return e.forEach((e,r)=>{t.push({label:{colorName:n[r],bandName:e},src:we[r],opacity:this.opacity??1})}),t}_updateInfosForClassedSizeRenderer(e,t){let n=e.authoringInfo?.type===`class-breaks-size`,r=e.classBreakInfos.some(e=>Le(e.symbol));if(n&&r){let n=ve,r=ye,i=e.classBreakInfos.length,a=(n-r)/(i>1?i-1:i);t.forEach((e,t)=>{e.size=n-a*t})}}_isTallSymbol(e){let t=!1,n=!1;if(e)for(let r=0;r<e.length&&!(t&&n);r++){let i=e[r];i.type===`size`&&(i.axis===`height`&&(t=!0),i.axis===`width-and-depth`&&(n=!0))}return t&&n}async _generatePreviewsForLegendElements(e,t,n){let r=[];for(let i of e)for(let e of i.infos??[])if(`infos`in e&&e.infos&&r.push(this._generatePreviewsForLegendElements([e],t,n)),nt(e)&&e.symbol&&!e.preview){let a=!0;if(e.symbol.type===`cim`){let{minScale:t,maxScale:n}=e.symbol.data;(t&&t<this.scale||n&&n>this.scale)&&(a=!1)}a&&r.push(this._generateSymbolPreviewForInfo(e,{...t,clipBloomEffect:`theme`in i&&i.theme===`spike`,cssEffectFilter:n?.arrowMarkerSymbols?.has(e.symbol)?null:t.cssEffectFilter},n?{applyScaleDrivenSize:!n.arrowMarkerSymbols?.has(e.symbol)}:void 0))}await Promise.all(r)}async _getSize(e,t){let n=e.size==null&&this._hasSizeRamp?g(22):e.size;if(this._scaleDrivenSizeVariable&&t?.applyScaleDrivenSize){let{getSize:t}=await import(`../renderers/visualVariables/support/visualVariableUtils.js`);n=t(this._scaleDrivenSizeVariable,null,{view:this.view.type,scale:this.scale,shape:e.symbol.type===`simple-marker`?e.symbol.style:null})}return n}_getPreviewCIMOptions(e){return{style:`legend`,cimOptions:{allowScalingUp:this._hasSizeRamp||!!(this._scaleDrivenSizeVariable&&e?.applyScaleDrivenSize),viewParams:this.isScaleDriven?{viewingMode:this.view?.type===`2d`?`map`:this.view?.viewingMode,scale:this.view?.scale}:null}}}async _generateSymbolPreviewForInfo(e,t={},n){let{symbol:r}=e;try{if(t.size=await this._getSize(e,n),t.scale=!1,r.type===`cim`){let e=this._getPreviewCIMOptions(n);t={...t,...e}}e.preview=await Fe(r,t)}catch{e.preview=null,l.getLogger(this).warn(`Generating symbol preview failed for symbol type: ${r?.type}`)}}_getClusterRenderer(e){this._clusterSizeVariable=null;let t=`renderer`in this.layer?this.layer.renderer:null,n=e.renderer?.clone()||t?.clone(),r=ue(e,this.layerView,this.view);if(r&&n!=null&&`visualVariables`in n&&!n.visualVariables?.some(e=>e.type===`size`&&e.target!==`outline`&&!M.test(e.valueExpression))){if(`clusterMinSize`in e&&`clusterMaxSize`in e){let{clusterMinSize:t,clusterMaxSize:n}=e;r.legendOptions=new ke({showLegend:t!==n})}n.visualVariables=(n.visualVariables||[]).concat([r]),this._clusterSizeVariable=r}return n}async _loadRenderer(e){if(Q.has(e))return Q.get(e);let t=[],n=e.clone(),r=await E(n);if(B(n)||V(n)){let e=(n.classBreakInfos||n.uniqueValueInfos).map(e=>this._fetchSymbol(e.symbol,r).then(t=>{e.symbol=t}).catch(()=>{e.symbol=null}));Array.prototype.push.apply(t,e)}return t.push(this._fetchSymbol(n.symbol||n.defaultSymbol,n.defaultSymbol?null:r).then(e=>{this._applySymbolToRenderer(n,e,z(n))}).catch(()=>{this._applySymbolToRenderer(n,null,z(n))})),await Promise.allSettled(t),Q.set(e,n),n}_applySymbolToRenderer(e,t,n){n?e.symbol=t:e.defaultSymbol=t}async _fetchSymbol(e,t){if(!e)throw Error();if(e.type===`web-style`)try{let n=await e.fetchSymbol();return this._getAppliedCloneSymbol(n,t)}catch{throw l.getLogger(this).warn(`Fetching web-style failed!`),Error()}return this._getAppliedCloneSymbol(e,t)}_getAppliedCloneSymbol(e,n){if(!e||!n)return e;let r=e.clone(),i=n&&n.toRgba();return r.type.includes(`3d`)?this._applyColorTo3dSymbol(r,i):r.type===`cim`?je(r,n):r.color&&=new t(i||r.color),r}_applyColorTo3dSymbol(e,n){n&&e.symbolLayers.forEach(e=>{e&&(e.material||={},e.material.color=new t(n))})}async _getVisualVariableLegendElements(e,t){if(!(`visualVariables`in e)||e.type===`vector-field`)return null;let n=e.visualVariables??[],r=[],i=[],o=[],s=C(e,`reference-size`)??C(e,`spike`),c,l=this._clusterSizeVariable;if(s?.sizeStops?.length===2&&(B(e)||V(e))){let[e,t]=s.sizeStops,n=l?l.minDataValue:e.value,r=l?l.maxDataValue:t.value;c=new Oe({field:s.field??void 0,normalizationField:s.normalizationField,minSize:u(e.size,10,100),maxSize:u(t.size,50,150),minDataValue:n,maxDataValue:r}),i.push(c)}for(let e of n)if(e.type===`color`)r.push(e);else if(e.type===`size`){if(e.field===`cluster_count`&&c)continue;i.push(e)}else e.type===`opacity`&&o.push(e);let d=[...r,...i,...o],f,p;if(r.length===0&&B(e)&&e.classBreakInfos&&e.classBreakInfos.length===1){let t=e.classBreakInfos[0];f=t&&t.symbol}r.length===0&&z(e)&&(f=e.symbol);let m=null;if(f){if(f.type.includes(`3d`)){let e=f.symbolLayers.at(0);e.type===`water`?e.color!=null&&(p=e.color):e.material?.color!=null&&(p=e.material.color)}else f.url||(p=f.color);m=j(f)}let h=this.cssEffectFilter;return(await Promise.all(d.map(async n=>{if(n.legendOptions?.showLegend!==!1){let r=P(e)?n.field:this._getRampTitle(n,t),i=null,a=Te(t,n,this.view.timeZone);if(n.type===`color`){let t=await S(n,null,a)??[],o=this._getColorRampInfosWithEmissiveColors(t,e,m);i={type:`color-ramp`,title:r,infos:o,preview:A(o.map(e=>e.color),{cssEffectFilter:h})},this._hasColorRamp||=t.length>0}else if(n.type===`size`&&n.target!==`outline`)M.test(n.valueExpression)?this._clusterSizeVariable||(this._scaleDrivenSizeVariable=n):(i=await this._getSizeLegendElement(r,n,e,a),c===n&&s?.theme===`spike`&&(i.theme=s.theme),this._hasSizeRamp||=!!(i.infos!=null&&i.infos.length));else if(n.type===`opacity`){let t=await S(n,p,a)??[],o=this._getColorRampPreviewColors(t,e,m);i={type:`opacity-ramp`,title:r,infos:t,preview:A(o,{cssEffectFilter:h})},this._hasOpacityRamp||=t.length>0}return i?.infos?i:null}}))).filter(a)}_getColorRampPreviewColors(e,t,n){return this._getColorRampInfosWithEmissiveColors(e,t,n).map(e=>e.color)}_getColorRampInfosWithEmissiveColors(e,t,n){return e.map(e=>{let r=B(t)?this._getStopEmissiveForColorRampInfo(e,t):n;return r===void 0?e:{...e,color:s(e.color,r)}})}_getStopEmissiveForColorRampInfo(e,t){if(!e.value)return;let n=t.getBreakIndexfromInfos(e.value),r=n===-1?null:t.classBreakInfos[n];return j(r?.symbol??t.defaultSymbol??null)}_getDomainName(e,t,n){if(e&&typeof e!=`function`){let r=`getField`in n&&n.getField?.(e),i=r&&`getFieldDomain`in n&&n.getFieldDomain?n.getFieldDomain(r.name):null;return i?.type===`coded-value`?i.getName(t):null}return null}_getClusterTitle(e){let t=this.layer,n=e.field;if(`featureReduction`in t&&t.featureReduction?.type===`cluster`){let e=t.featureReduction,r=`popupTemplate`in e&&e.popupTemplate,i=r&&r.fieldInfos;if(i){for(let e of i)if(e.fieldName===n)return n===`cluster_count`?e.label||{showCount:!0}:e.label}}return{showCount:!0}}_getRampTitle(e,t){let n=e.field,r=e.normalizationField,i=!1,a=!1,o=!1,s=null;n=typeof n==`function`?null:n,r=typeof r==`function`?null:r;let c=e.legendOptions?.title;if(c!=null)s=c;else if(e.valueExpressionTitle)s=e.valueExpressionTitle;else{if(`renderer`in t&&t.renderer&&`authoringInfo`in t.renderer&&t.renderer.authoringInfo?.visualVariables){let e=t.renderer.authoringInfo.visualVariables;for(let t=0;t<e.length;t++){let n=e[t];if(n.type===`color`){if(n.style===`ratio`){i=!0;break}if(n.style===`percent`){a=!0;break}if(n.style===`percent-of-total`){o=!0;break}}}}s={field:n&&this._getFieldAlias(n,t),normField:r&&this._getFieldAlias(r,t),ratio:i,ratioPercent:a,ratioPercentTotal:o}}return s}_getRendererTitle(e,t){let n=e;if(n.legendOptions?.title)return n.legendOptions.title;if(n.valueExpressionTitle)return n.valueExpressionTitle;let r=n.field,i=null,a=null;if(B(n)&&(i=n.normalizationField,a=n.normalizationType===`percent-of-total`),r=typeof r==`function`?null:r,i=typeof i==`function`?null:i,V(n)){let{field2:e,field3:i,fieldDelimiter:a}=n,o=r&&this._getFieldAlias(r,t);return e&&(o=`<${o}>${a}<${this._getFieldAlias(e,t)}>`,i&&(o=`${o}${a}<${this._getFieldAlias(i,t)}>`)),o}let o=null;return(r||i)&&(o={field:r&&this._getFieldAlias(r,t),normField:i&&this._getFieldAlias(i,t),normByPct:a}),o}_getFieldAlias(e,t){let n=le(t,{checkFeatureReduction:!0});if(n)return n.getFieldAlias(e)||e;let r=((`popupTemplate`in t?t.popupTemplate:null)?.fieldInfos)?.find(t=>e===t.fieldName),i=null;`getField`in t&&t.getField?i=t.getField(e):`fieldsIndex`in t&&t.fieldsIndex&&(i=t.fieldsIndex.get(e));let a=null,o=`featureReduction`in t&&t.featureReduction;o&&(r??=`popupTemplate`in o?o.popupTemplate?.fieldInfos?.find(t=>e?.toLowerCase()===t.fieldName?.toLowerCase()):void 0,`fields`in o&&o.fields&&(a=o.fields.find(t=>t.name?.toLowerCase()===e?.toLowerCase())));let s=r||i||a,c=null;return s&&(c=r?.label||i?.alias||a?.alias||`name`in s&&s.name||`fieldName`in s&&s.fieldName||null),c}_isUnclassedRenderer(e){let t=e.visualVariables,n=B(e)&&e.classBreakInfos&&e.classBreakInfos.length===1,r=!1;return n&&t&&(r=e.field?t.some(t=>!(!t||e.field!==t.field||(e.normalizationField||t.normalizationField)&&e.normalizationField!==t.normalizationField)):!!t.length),r}};e([b()],$.prototype,`_loading`,void 0),e([b()],$.prototype,`children`,void 0),e([b({readOnly:!0})],$.prototype,`cssEffectFilter`,null),e([b({readOnly:!0})],$.prototype,`cssEffectView`,null),e([b()],$.prototype,`hideLayersNotInCurrentView`,void 0),e([b({readOnly:!0})],$.prototype,`isScaleDriven`,null),e([b()],$.prototype,`keepCacheOnDestroy`,void 0),e([b()],$.prototype,`layer`,void 0),e([b()],$.prototype,`layerView`,void 0),e([b()],$.prototype,`legendElements`,void 0),e([b({readOnly:!0})],$.prototype,`loading`,null),e([b({readOnly:!0})],$.prototype,`opacity`,null),e([b()],$.prototype,`parent`,void 0),e([b({readOnly:!0})],$.prototype,`ready`,null),e([b()],$.prototype,`respectLayerDefinitionExpression`,void 0),e([b()],$.prototype,`respectLayerVisibility`,void 0),e([b({readOnly:!0})],$.prototype,`scale`,void 0),e([b()],$.prototype,`sublayerIds`,void 0),e([b()],$.prototype,`title`,void 0),e([b({readOnly:!0,value:0})],$.prototype,`version`,null),e([b()],$.prototype,`view`,void 0),$=e([te(`esri.legend.ActiveLayerInfo`)],$);const at=$;export{at as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcgis/core",
3
- "version": "5.2.3",
3
+ "version": "5.2.4",
4
4
  "description": "ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API",
5
5
  "keywords": [
6
6
  "ArcGIS",
@@ -20,7 +20,7 @@
20
20
  "license": "SEE LICENSE IN LICENSE.md",
21
21
  "dependencies": {
22
22
  "@amcharts/amcharts5": "~5.20.8",
23
- "@arcgis/toolkit": "5.2.3",
23
+ "@arcgis/toolkit": "5.2.4",
24
24
  "@esri/arcgis-html-sanitizer": "~4.2.0",
25
25
  "@esri/calcite-components": "^5.2.1",
26
26
  "@vaadin/grid": "~25.3.2",
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import e from"../../../../request.js";import{bidiText as t}from"../../../../core/BidiText.js";import{getFullyQualifiedFontName as n}from"../../../../core/fontUtils.js";import has from"../../../../core/has.js";import r from"../../../../core/Logger.js";import{ignoreAbortErrors as i,throwIfNotAbortError as a}from"../../../../core/promiseUtils.js";import{loadTextModule as o}from"../../../../libs/librust-text/loadTextModule.js";import{parseRichTextRuns as s}from"../../../../symbols/cim/richTextUtils.js";import{decorGlyphRect as c}from"./decorGlyphRect.js";import{sdfRadiusComplex as l,sdfBufferGlyphSDFCreator as u,sdfSizeComplex as d,sdfBufferServer as f,sdfRadiusSimple as p,sdfSizeSimple as m}from"./definitions.js";import{GlyphSDFCreator as h}from"./GlyphSDFCreator.js";import g from"./GlyphSource.js";import{hashMosaic as _}from"./hashMosaic.js";import v from"./Rect.js";import y from"./RectangleBinPack.js";const b=`arial-unicode-ms-regular`,x=/[\u0695\u0698\u06a9\u06af\u06b5\u06be\u06c6\u06cc\u06ce\u06d5\u06ca]|\p{Script=Thai}|\p{Script=Lao}|\p{Script=Tamil}|\p{Script=Khmer}/u,S=new Set([`Noto Sans Khmer`,`Noto Sans Lao`,`Noto Sans Myanmar`,`Noto Sans Thai`]),C=()=>r.getLogger(`esri.views.MapView`),w=(e,t=``)=>C().warnOnce(e,t);class T{constructor(){this._glyphSources=new Map,this._snapCoords=!0,this._currentPage=0,this._faces=new Map,this._facePromises=new Map,this._pbfRangePromises=new Map,this._glyphCache=new Map,this._pbfGlyphCache=new Map,this._invalidFonts=new Set,this._preloadCache={},this._glyphSDFCreator=new h({sdfSizePx:d,sdfBufferPx:u,radius:l,cutoff:.25})}set remoteClient(e){this._client=e.createInvokeProxy();let t=i(this._client.getOptions());this._inited=this._init(t)}async rasterizeText(e,t,n){await this._inited;let r=t.symbol?s(t):null;return r?{type:`rich-glyphs`,runs:(await Promise.all(r.map(async t=>({fontSize:t.fontSize,characterSpacing:t.characterSpacing,decoration:t.font.decoration,color:t.color,glyphs:await this._rasterizeTextRun(e,t.font,t.text,n)})))).filter(e=>e.glyphs!=null)}:this._rasterizeTextRun(e,t.font,t.textString,n)}async _rasterizeTextRun(e,t,r,i){let a=n(t),o=this._invalidFonts.has(a),s=!!has(`esri-2d-force-complex-shaping`),c=!!has(`esri-2d-complex-shaping`)&&x.test(r),l=S.has(t.family),u=s||c||l,d=o?b:a,f=await this.getGlyphItems(r,u,e,d,!1,i);return f||=(w(`Font ${a} is not available on the web, using "Arial Unicode MS Regular"`),this._invalidFonts.add(a),await this.getGlyphItems(r,u,e,b,!1,i)),f}async getGlyphItems(e,n,r,i,a,o){await this._inited;let s=this._getSource(r),c=n?d:m,h=n?l:p,g=n?u:f,_,v,y;if(has(`esri-2d-stabilize-glyphs`)&&await this.preloadASCIIGlyphCache(s,i).catch(()=>{}),n){let t=await this._getFace(s,i);if(!t)return null;let n=this._glyphCache.get(i);n||(n=new Map,this._glyphCache.set(i,n));let{shaping:r,isRTL:a}=this._shape(t,e);y=a,_=r.map(e=>this._getShapedGlyph(t,n,e)),v={baseline:t.baseline()/c,midline:t.midline()/c}}else{let n=this._pbfGlyphCache.get(i);n||(n=new Map,this._pbfGlyphCache.set(i,n));let[r,c,l]=t(e),u=k(r);try{await this._fetchRanges(s,i,u,o)}catch{return null}y=c,_=u.map(e=>this._getPBFGlyph(n,s,i,e,a)).filter(e=>!!e)}let b=_.filter(e=>e.needsRecord);return b.length>0&&await this._client.recordGlyphs(b),{type:`glyphs`,glyphs:_,faceInfo:v,isRightToLeft:y,sdfSize:c,sdfRadius:h,sdfPadding:g}}async _init(e){let t=await e;if(!t)return;let{width:n,height:r,snapCoords:i}=t;this._glyphCache=new Map,this._pbfGlyphCache=new Map,this._binPack=new y(n,r),this._snapCoords=i,this._currentPage=0,this._initDecorationGlyphs()}_getShapedGlyph(e,t,n){let r,i,a=t.get(n.glyphId);if(!a){r=this._glyphSDFCreator.draw(e,n.glyphId);let o=this._glyphSDFCreator.sdfBufferPx;a={mosaicItem:{rect:this._recordGlyph(r?.rect,o),page:this._currentPage,sdf:!0,textureBinding:_(1,this._currentPage,!0)},glyphRect:r?.rect??{width:0,height:0,top:0,left:0}},t.set(n.glyphId,a),i=!0}return{mosaicItem:a.mosaicItem,rect:a.glyphRect,shaping:{xAdvance:n.xAdvance,yAdvance:n.yAdvance,xOffset:n.xOffset,yOffset:n.yOffset},code:n.isNewline?10:n.isWhitespace?32:NaN,sdf:r,needsRecord:i}}_getPBFGlyph(e,t,n,r,i=!1){let a,o,s=e.get(r);if(!s){let c=t.getRange(n,r),l=c?.getRect(r),d=c?.getShaping(r),f=c?.getBitmap(r);if(i&&(!l||!d))return;if(!l||!d)return O(r);let p={rect:f?this._recordGlyph(l,u):new v(0,0,0,0),sdf:!0,page:this._currentPage,textureBinding:_(1,this._currentPage,!0)};a=f&&{buffer:f,rect:l},s={mosaicItem:p,rect:l,shaping:d,code:r},o=!0,e.set(r,s)}let{mosaicItem:c,rect:l,shaping:d}=s;return{mosaicItem:c,rect:l,shaping:d,code:r,sdf:a,needsRecord:o}}_shape(e,n){let r=this._glyphSDFCreator.sdfSizePx,[i,a,o]=t(n,!1),s=new Uint32Array(Array.from(i).map((e,t)=>o.levels[o.targetToSource[t]]));return{shaping:e.shape(i,s,r),isRTL:a}}async _getFace(t,n,r){if(this._faces.has(n))return this._faces.get(n);let i=t.woffURL(n);return await D(this._facePromises,n,async()=>{let t=await e(i,{responseType:`array-buffer`,...r}),a=(await o()).Face.parseWoff2(new Uint8Array(t.data));this._faces.set(n,a)}),this._faces.get(n)}_getSource(e){return this._glyphSources.has(e)||this._glyphSources.set(e,new g(e)),this._glyphSources.get(e)}async _fetchRanges(e,t,n,r){let i=E(n),a=[];i.forEach(n=>{a.push(this._fetchRange(e,t,n,r))}),await Promise.all(a)}async _fetchRange(e,t,n,r){if(n>256)return;let i=t+n;return D(this._pbfRangePromises,i,()=>e.fetchRange(t,n,r))}_allocNewPage(){this._currentPage++,this._binPack=new y(this._binPack.width,this._binPack.height),this._initDecorationGlyphs()}_recordGlyph(e,t){let n=this._binPack;if(!e||e.width===0)return new v;let r=e.width+t*2,i=e.height+t*2,a=r,o=i;if(this._snapCoords){let e=r%4?4-r%4:4,t=i%4?4-i%4:4;a+=e,o+=t}let s=n.allocate(a,o);return s.isEmpty?(this._allocNewPage(),n.allocate(a,o)):s}_initDecorationGlyphs(){this._recordGlyph(c,f),this._recordGlyph(c,f)}preloadASCIIGlyphCache(e,t){let n=this._preloadCache[t];if(n!=null)return n;let r=e.preloadASCIIRange(t).then(async()=>{let n=this._pbfGlyphCache.get(t);n||(n=new Map,this._pbfGlyphCache.set(t,n));let r=[];for(let i=0;i<256;i++){let a=this._getPBFGlyph(n,e,t,i);a?.needsRecord&&r.push(a)}await this._client.recordGlyphs(r)},e=>{throw delete this._preloadCache[t],e});return this._preloadCache[t]=r,r}}function E(e){let t=new Set;for(let n of e)t.add(Math.floor(n/256));return t}function D(e,t,n){return e.has(t)||e.set(t,n().finally(()=>{e.delete(t)}).catch(e=>{a(e)})),e.get(t)}const O=e=>({mosaicItem:{rect:new v(0,0,0,0),sdf:!0,page:0,textureBinding:_(1,0,!0)},rect:{left:0,width:0,height:0,top:0},shaping:{xAdvance:0,yAdvance:0,xOffset:0,yOffset:0},code:e,needsRecord:!0});function k(e){let t=[];for(let n=0;n<e.length;n++)t.push(e.charCodeAt(n));return t}export{T as default};
2
+ import e from"../../../../request.js";import{bidiText as t}from"../../../../core/BidiText.js";import{getFullyQualifiedFontName as n}from"../../../../core/fontUtils.js";import has from"../../../../core/has.js";import r from"../../../../core/Logger.js";import{ignoreAbortErrors as i,throwIfNotAbortError as a}from"../../../../core/promiseUtils.js";import{loadTextModule as o}from"../../../../libs/librust-text/loadTextModule.js";import{parseRichTextRuns as s}from"../../../../symbols/cim/richTextUtils.js";import{decorGlyphRect as c}from"./decorGlyphRect.js";import{sdfRadiusComplex as l,sdfBufferGlyphSDFCreator as u,sdfSizeComplex as d,sdfBufferServer as f,sdfRadiusSimple as p,sdfSizeSimple as m}from"./definitions.js";import{GlyphSDFCreator as h}from"./GlyphSDFCreator.js";import g from"./GlyphSource.js";import{hashMosaic as _}from"./hashMosaic.js";import v from"./Rect.js";import y from"./RectangleBinPack.js";const b=`arial-unicode-ms-regular`,x=/[\u0695\u0698\u06a9\u06af\u06b5\u06be\u06c6\u06cc\u06ce\u06d5\u06ca]|\p{Script=Thai}|\p{Script=Lao}|\p{Script=Tamil}|\p{Script=Khmer}/u,S=new Set([`Noto Sans Khmer`,`Noto Sans Lao`,`Noto Sans Myanmar`,`Noto Sans Thai`]),C=()=>r.getLogger(`esri.views.MapView`),w=(e,t=``)=>C().warnOnce(e,t);class T{constructor(){this._glyphSources=new Map,this._snapCoords=!0,this._currentPage=0,this._faces=new Map,this._facePromises=new Map,this._pbfRangePromises=new Map,this._glyphCache=new Map,this._pbfGlyphCache=new Map,this._invalidFonts=new Set,this._preloadCache={},this._glyphSDFCreator=new h({sdfSizePx:d,sdfBufferPx:u,radius:l,cutoff:.25})}set remoteClient(e){this._client=e.createInvokeProxy();let t=i(this._client.getOptions());this._inited=this._init(t)}async rasterizeText(e,t,n){await this._inited;let r=t.symbol?s(t):null;return r?{type:`rich-glyphs`,runs:(await Promise.all(r.map(async t=>({fontSize:t.fontSize,characterSpacing:t.characterSpacing,decoration:t.font.decoration,color:t.color,glyphs:await this._rasterizeTextRun(e,t.font,t.text,n)})))).filter(e=>e.glyphs!=null)}:this._rasterizeTextRun(e,t.font,t.textString,n)}async _rasterizeTextRun(e,t,r,i){let a=n(t),o=this._invalidFonts.has(a),s=!!has(`esri-2d-force-complex-shaping`),c=!!has(`esri-2d-complex-shaping`)&&x.test(r),l=S.has(t.family),u=s||c||l,d=o?b:a,f=await this.getGlyphItems(r,u,e,d,!1,i);return f||=(w(`Font ${a} is not available on the web, using "Arial Unicode MS Regular"`),this._invalidFonts.add(a),await this.getGlyphItems(r,u,e,b,!1,i)),f}async getGlyphItems(e,n,r,i,a,o){await this._inited;let s=this._getSource(r),c=n?d:m,h=n?l:p,g=n?u:f,_,v,y;if(has(`esri-2d-stabilize-glyphs`)&&await this.preloadASCIIGlyphCache(s,i).catch(()=>{}),n){let t=await this._getFace(s,i);if(!t)return null;let n=this._glyphCache.get(i);n||(n=new Map,this._glyphCache.set(i,n));let{shaping:r,isRTL:a}=this._shape(t,e);y=a,_=r.map(e=>this._getShapedGlyph(t,n,e)),v={baseline:t.baseline()/c,midline:t.midline()/c}}else{let n=this._pbfGlyphCache.get(i);n||(n=new Map,this._pbfGlyphCache.set(i,n));let[r,c,l]=t(e),u=k(r);try{await this._fetchRanges(s,i,u,o)}catch{return null}y=c,_=u.map(e=>this._getPBFGlyph(n,s,i,e,a)).filter(e=>!!e)}let b=_.filter(e=>e.needsRecord);return b.length>0&&await this._client.recordGlyphs(b),{type:`glyphs`,glyphs:_,faceInfo:v,isRightToLeft:y,sdfSize:c,sdfRadius:h,sdfPadding:g}}async _init(e){let t=await e;if(!t)return;let{width:n,height:r,snapCoords:i}=t,a=i?4:0;this._glyphCache=new Map,this._pbfGlyphCache=new Map,this._binPack=new y(n-a,r-a),this._snapCoords=i,this._currentPage=0,this._initDecorationGlyphs()}_getShapedGlyph(e,t,n){let r,i,a=t.get(n.glyphId);if(!a){r=this._glyphSDFCreator.draw(e,n.glyphId);let o=this._glyphSDFCreator.sdfBufferPx;a={mosaicItem:{rect:this._recordGlyph(r?.rect,o),page:this._currentPage,sdf:!0,textureBinding:_(1,this._currentPage,!0)},glyphRect:r?.rect??{width:0,height:0,top:0,left:0}},t.set(n.glyphId,a),i=!0}return{mosaicItem:a.mosaicItem,rect:a.glyphRect,shaping:{xAdvance:n.xAdvance,yAdvance:n.yAdvance,xOffset:n.xOffset,yOffset:n.yOffset},code:n.isNewline?10:n.isWhitespace?32:NaN,sdf:r,needsRecord:i}}_getPBFGlyph(e,t,n,r,i=!1){let a,o,s=e.get(r);if(!s){let c=t.getRange(n,r),l=c?.getRect(r),d=c?.getShaping(r),f=c?.getBitmap(r);if(i&&(!l||!d))return;if(!l||!d)return O(r);let p={rect:f?this._recordGlyph(l,u):new v(0,0,0,0),sdf:!0,page:this._currentPage,textureBinding:_(1,this._currentPage,!0)};a=f&&{buffer:f,rect:l},s={mosaicItem:p,rect:l,shaping:d,code:r},o=!0,e.set(r,s)}let{mosaicItem:c,rect:l,shaping:d}=s;return{mosaicItem:c,rect:l,shaping:d,code:r,sdf:a,needsRecord:o}}_shape(e,n){let r=this._glyphSDFCreator.sdfSizePx,[i,a,o]=t(n,!1),s=new Uint32Array(Array.from(i).map((e,t)=>o.levels[o.targetToSource[t]]));return{shaping:e.shape(i,s,r),isRTL:a}}async _getFace(t,n,r){if(this._faces.has(n))return this._faces.get(n);let i=t.woffURL(n);return await D(this._facePromises,n,async()=>{let t=await e(i,{responseType:`array-buffer`,...r}),a=(await o()).Face.parseWoff2(new Uint8Array(t.data));this._faces.set(n,a)}),this._faces.get(n)}_getSource(e){return this._glyphSources.has(e)||this._glyphSources.set(e,new g(e)),this._glyphSources.get(e)}async _fetchRanges(e,t,n,r){let i=E(n),a=[];i.forEach(n=>{a.push(this._fetchRange(e,t,n,r))}),await Promise.all(a)}async _fetchRange(e,t,n,r){if(n>256)return;let i=t+n;return D(this._pbfRangePromises,i,()=>e.fetchRange(t,n,r))}_allocNewPage(){this._currentPage++,this._binPack=new y(this._binPack.width,this._binPack.height),this._initDecorationGlyphs()}_recordGlyph(e,t){let n=this._binPack;if(!e||e.width===0)return new v;let r=e.width+t*2,i=e.height+t*2,a=r,o=i;if(this._snapCoords){let e=r%4?4-r%4:4,t=i%4?4-i%4:4;a+=e,o+=t}let s=n.allocate(a,o);return s.isEmpty?(this._allocNewPage(),n.allocate(a,o)):s}_initDecorationGlyphs(){this._recordGlyph(c,f),this._recordGlyph(c,f)}preloadASCIIGlyphCache(e,t){let n=this._preloadCache[t];if(n!=null)return n;let r=e.preloadASCIIRange(t).then(async()=>{let n=this._pbfGlyphCache.get(t);n||(n=new Map,this._pbfGlyphCache.set(t,n));let r=[];for(let i=0;i<256;i++){let a=this._getPBFGlyph(n,e,t,i);a?.needsRecord&&r.push(a)}await this._client.recordGlyphs(r)},e=>{throw delete this._preloadCache[t],e});return this._preloadCache[t]=r,r}}function E(e){let t=new Set;for(let n of e)t.add(Math.floor(n/256));return t}function D(e,t,n){return e.has(t)||e.set(t,n().finally(()=>{e.delete(t)}).catch(e=>{a(e)})),e.get(t)}const O=e=>({mosaicItem:{rect:new v(0,0,0,0),sdf:!0,page:0,textureBinding:_(1,0,!0)},rect:{left:0,width:0,height:0,top:0},shaping:{xAdvance:0,yAdvance:0,xOffset:0,yOffset:0},code:e,needsRecord:!0});function k(e){let t=[];for(let n=0;n<e.length;n++)t.push(e.charCodeAt(n));return t}export{T as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../core/Collection.js";import{referenceSetter as n}from"../../../core/collectionUtils.js";import{deprecatedFunction as r}from"../../../core/deprecate.js";import i from"../../../core/Error.js";import"../../../core/has.js";import a from"../../../core/Logger.js";import{watch as o,syncAndInitial as s,sync as c}from"../../../core/reactiveUtils.js";import{property as l,subclass as u}from"../../../core/accessorSupport/decorators.js";import{isInEffectiveScaleRange as d}from"../../../geometry/support/scaleUtils.js";import{isLinkChartView as f}from"../../../linkChart/guards.js";import{Container as p}from"../engine/Container.js";import{ClipMesh as m}from"../engine/webgl/ClipMesh.js";import{maxHighlightGroups as h}from"../engine/webgl/definitions.js";import{HighlightRegistry as g}from"./support/HighlightRegistry.js";import{createOrReuseHighlightGradient as _}from"./support/util.js";import v from"../../layers/support/ClipRect.js";import y from"../../layers/support/GeometryClipArea.js";import b from"../../layers/support/Path.js";import{defaultHighlightName as x}from"../../support/HighlightDefaults.js";import S from"../../support/HighlightOptions.js";const C=t.ofType({key:`type`,base:null,typeMap:{rect:v,path:b,geometry:y}}),w=new(t.ofType(S)),T=v=>{let y=v,b=class extends y{constructor(){super(...arguments),this._highlightRegistry=new g,this.attached=!1,this.clips=new C,this.highlights=null,this.lastUpdateId=-1,this.moving=!1,this.updateRequested=!1,this._visibleAtCurrentScale=!0}initialize(){let e=this.view?.spatialReferenceLocked??!0;if(this.view?.spatialReference&&e&&!this.spatialReferenceSupported){this.addResolvingPromise(Promise.reject(new i(`layerview:spatial-reference-incompatible`,`The spatial reference of this layer does not meet the requirements of the view`,{layer:this.layer})));return}this.container||=new p,this.container.fadeTransitionEnabled=!0,this.container.visible=!1,this.container.endTransitions(),this.addHandles([o(()=>this.suspended,e=>{this.container&&(this.container.visible=!e)},s),o(()=>this.updateSuspended,e=>{this.view&&!e&&this.updateRequested&&this.view.requestUpdate()},s),o(()=>this.layer?.opacity??1,e=>{this.container&&(this.container.opacity=e)},s),o(()=>this.layer&&`blendMode`in this.layer?this.layer.blendMode:`normal`,e=>{this.container&&(this.container.blendMode=e)},s),o(()=>this.layer&&`effect`in this.layer?this.layer.effect:null,e=>{this.container&&(this.container.effect=e)},s),o(()=>this._effectiveHighlightOptions.items.map(e=>({name:e.name,options:{fillColor:e.color,haloColor:e.haloColor,fillOpacity:e.fillOpacity,haloOpacity:e.haloOpacity,haloWidth:e.haloWidth,haloBlur:e.haloBlur}})),()=>{this.container.highlightGradient=_(this.container.highlightGradient,this._effectiveHighlightOptions.items)},s),o(()=>this._getHighlightFilterGroups(),()=>this._onHighlightChange(),c),o(()=>this.clips.map(e=>e.version),async()=>{if(this.container&&this.view?.spatialReference){let e=this.view.featuresTilingScheme,t=await this._updatingHandles.addPromise(Promise.all(this.clips.items.map(t=>m.create(t,e))));for(let e of this.container.clips)e.destroy();this.container.clips=t.filter(e=>!!e)}},s),o(()=>({scale:this.view?.scale,scaleRange:this.layer&&`effectiveScaleRange`in this.layer?this.layer.effectiveScaleRange:null}),({scale:e,scaleRange:t})=>{let n=d(t,e);n!==this._visibleAtCurrentScale&&(this._visibleAtCurrentScale=n)},s),o(()=>this.layer?.effectiveVisible,async e=>{this.container.requestDeclutter()})],`constructor`),this.view?.whenLayerView?this.view.whenLayerView(this.layer).then(e=>{e===this&&this.processAttach()},()=>{}):this.when().then(()=>{this.processAttach()},()=>{})}destroy(){this.processDetach(),this.updateRequested=!1;for(let e of this.container?.clips??[])e.destroy()}get highlightOptions(){return this._logHighlightOptionsDeprecation(),this.highlights?.find(({name:e})=>e===x)}set highlightOptions(e){if(this._logHighlightOptionsDeprecation(),!this.highlights){if(!e)return;this.highlights=new t([new S])}let n=this.highlights.find(({name:e})=>e===x);e?n?.assignFrom(e):(this.highlights.remove(n),this.highlights.length===0&&(this.highlights=null))}_logHighlightOptionsDeprecation(){r(a.getLogger(this),"`LayerView.highlightOptions` is deprecated in favor of View.highlights",{replacement:`View.highlights`,version:`4.34`,see:`https://arcg.is/inbTa1#highlights`,warnOnce:!0})}get hasHighlight(){return this._highlightRegistry.size>0}get _effectiveHighlightOptions(){if(!this.view)return w;if(!this.highlights)return this.view.highlights;let e=this.view.highlights.clone();for(let t of this.highlights){let n=e.find(e=>e.name===t.name);n&&n.assignFrom(t)}return e}get highlightIds(){return this._highlightRegistry.highlightIds}get scheduler(){return this.view.scheduler}get spatialReferenceSupported(){let e=this.view?.spatialReference;return e==null||this.supportsSpatialReference(e)}get updating(){return this.spatialReferenceSupported?this.attached?this.suspended?!1:this.updateRequested||this.isUpdating()||this._updatingHandles?.updating||this.container.transitioning:!0:!1}get visibleAtCurrentScale(){return this._visibleAtCurrentScale}processAttach(){this.isResolved()&&!this.attached&&!this.destroyed&&this.spatialReferenceSupported&&(this.attach(),this.attached=!0,this.requestUpdate())}processDetach(){this.attached&&(this.attached=!1,this.removeHandles(`attach`),this.detach(),this.updateRequested=!1)}requestUpdate(){this.destroyed||this.updateRequested||(this.updateRequested=!0,this.updateSuspended||this.view.requestUpdate())}processUpdate(e){if(this.isFulfilled()&&!this.isResolved()){this.updateRequested=!1;return}this._set(`updateParameters`,e),this.updateRequested&&!this.updateSuspended&&(this.updateRequested=!1,this.update(e))}hitTest(e,t,n){return Promise.resolve(null)}supportsSpatialReference(e){return!0}canResume(){if(!this.spatialReferenceSupported)return!1;switch(this.layer?.type){case`link-chart`:case`knowledge-graph-sublayer`:case`graphics`:break;default:if(f(this.view)&&!this.view.inGeographicLayout)return!1}return super.canResume()?this.visibleAtCurrentScale:!1}getSuspendInfo(){let e=super.getSuspendInfo(),t=!this.spatialReferenceSupported;return t&&(e.spatialReferenceNotSupported=t),e}addAttachHandles(e){this.addHandles(e,`attach`)}_addHighlightFilter(e,t){return this._highlightRegistry.register(t,e)}_removeHighlight(e){this._highlightRegistry.unregister(e)}_onHighlightChange(){}_getHighlightFilterGroups(){let e=[];for(let{name:t,filters:n}of this._highlightRegistry.highlightGroups){let r=this._effectiveHighlightOptions.findIndex(e=>e.name===t);r<0||r>=h||e.push({order:r,filters:n})}return e}};return e([l()],b.prototype,`attached`,void 0),e([l({type:C,set(e){let t=n(e,this._get(`clips`),C);this._set(`clips`,t)}})],b.prototype,`clips`,void 0),e([l()],b.prototype,`container`,void 0),e([l({type:S})],b.prototype,`highlightOptions`,null),e([l({type:t.ofType(S)})],b.prototype,`highlights`,void 0),e([l()],b.prototype,`_effectiveHighlightOptions`,null),e([l()],b.prototype,`moving`,void 0),e([l({readOnly:!0})],b.prototype,`spatialReferenceSupported`,null),e([l({readOnly:!0})],b.prototype,`updateParameters`,void 0),e([l()],b.prototype,`updateRequested`,void 0),e([l()],b.prototype,`updating`,null),e([l()],b.prototype,`view`,void 0),e([l()],b.prototype,`_visibleAtCurrentScale`,void 0),e([l({readOnly:!0})],b.prototype,`visibleAtCurrentScale`,null),b=e([u(`esri.views.2d.layers.LayerView2D`)],b),b};export{T as LayerView2D};
2
+ import{__decorate as e}from"tslib";import t from"../../../core/Collection.js";import{referenceSetter as n}from"../../../core/collectionUtils.js";import{deprecatedFunction as r}from"../../../core/deprecate.js";import i from"../../../core/Error.js";import"../../../core/has.js";import a from"../../../core/Logger.js";import{watch as o,syncAndInitial as s,sync as c}from"../../../core/reactiveUtils.js";import{property as l,subclass as u}from"../../../core/accessorSupport/decorators.js";import{isInEffectiveScaleRange as d}from"../../../geometry/support/scaleUtils.js";import{isLinkChartView as f}from"../../../linkChart/guards.js";import{Container as p}from"../engine/Container.js";import{ClipMesh as m}from"../engine/webgl/ClipMesh.js";import{maxHighlightGroups as h}from"../engine/webgl/definitions.js";import{HighlightRegistry as g}from"./support/HighlightRegistry.js";import{createOrReuseHighlightGradient as _}from"./support/util.js";import v from"../../layers/support/ClipRect.js";import y from"../../layers/support/GeometryClipArea.js";import b from"../../layers/support/Path.js";import{defaultHighlightName as x}from"../../support/HighlightDefaults.js";import S from"../../support/HighlightOptions.js";const C=t.ofType({key:`type`,base:null,typeMap:{rect:v,path:b,geometry:y}}),w=new(t.ofType(S)),T=v=>{let y=v,b=class extends y{constructor(){super(...arguments),this._clipUpdateId=0,this._highlightRegistry=new g,this.attached=!1,this.clips=new C,this.highlights=null,this.lastUpdateId=-1,this.moving=!1,this.updateRequested=!1,this._visibleAtCurrentScale=!0}initialize(){let e=this.view?.spatialReferenceLocked??!0;if(this.view?.spatialReference&&e&&!this.spatialReferenceSupported){this.addResolvingPromise(Promise.reject(new i(`layerview:spatial-reference-incompatible`,`The spatial reference of this layer does not meet the requirements of the view`,{layer:this.layer})));return}this.container||=new p,this.container.fadeTransitionEnabled=!0,this.container.visible=!1,this.container.endTransitions(),this.addHandles([o(()=>this.suspended,e=>{this.container&&(this.container.visible=!e)},s),o(()=>this.updateSuspended,e=>{this.view&&!e&&this.updateRequested&&this.view.requestUpdate()},s),o(()=>this.layer?.opacity??1,e=>{this.container&&(this.container.opacity=e)},s),o(()=>this.layer&&`blendMode`in this.layer?this.layer.blendMode:`normal`,e=>{this.container&&(this.container.blendMode=e)},s),o(()=>this.layer&&`effect`in this.layer?this.layer.effect:null,e=>{this.container&&(this.container.effect=e)},s),o(()=>this._effectiveHighlightOptions.items.map(e=>({name:e.name,options:{fillColor:e.color,haloColor:e.haloColor,fillOpacity:e.fillOpacity,haloOpacity:e.haloOpacity,haloWidth:e.haloWidth,haloBlur:e.haloBlur}})),()=>{this.container.highlightGradient=_(this.container.highlightGradient,this._effectiveHighlightOptions.items)},s),o(()=>this._getHighlightFilterGroups(),()=>this._onHighlightChange(),c),o(()=>this.clips.map(e=>e.version),async()=>{let e=++this._clipUpdateId;if(this.container&&this.view?.spatialReference){let t=this.view.featuresTilingScheme,n=await this._updatingHandles.addPromise(Promise.all(this.clips.items.map(e=>m.create(e,t))));if(this.destroyed||e!==this._clipUpdateId){for(let e of n)e?.destroy();return}for(let e of this.container.clips)e.destroy();this.container.clips=n.filter(e=>!!e)}},s),o(()=>({scale:this.view?.scale,scaleRange:this.layer&&`effectiveScaleRange`in this.layer?this.layer.effectiveScaleRange:null}),({scale:e,scaleRange:t})=>{let n=d(t,e);n!==this._visibleAtCurrentScale&&(this._visibleAtCurrentScale=n)},s),o(()=>this.layer?.effectiveVisible,async e=>{this.container.requestDeclutter()})],`constructor`),this.view?.whenLayerView?this.view.whenLayerView(this.layer).then(e=>{e===this&&this.processAttach()},()=>{}):this.when().then(()=>{this.processAttach()},()=>{})}destroy(){this.processDetach(),this.updateRequested=!1;for(let e of this.container?.clips??[])e.destroy()}get highlightOptions(){return this._logHighlightOptionsDeprecation(),this.highlights?.find(({name:e})=>e===x)}set highlightOptions(e){if(this._logHighlightOptionsDeprecation(),!this.highlights){if(!e)return;this.highlights=new t([new S])}let n=this.highlights.find(({name:e})=>e===x);e?n?.assignFrom(e):(this.highlights.remove(n),this.highlights.length===0&&(this.highlights=null))}_logHighlightOptionsDeprecation(){r(a.getLogger(this),"`LayerView.highlightOptions` is deprecated in favor of View.highlights",{replacement:`View.highlights`,version:`4.34`,see:`https://arcg.is/inbTa1#highlights`,warnOnce:!0})}get hasHighlight(){return this._highlightRegistry.size>0}get _effectiveHighlightOptions(){if(!this.view)return w;if(!this.highlights)return this.view.highlights;let e=this.view.highlights.clone();for(let t of this.highlights){let n=e.find(e=>e.name===t.name);n&&n.assignFrom(t)}return e}get highlightIds(){return this._highlightRegistry.highlightIds}get scheduler(){return this.view.scheduler}get spatialReferenceSupported(){let e=this.view?.spatialReference;return e==null||this.supportsSpatialReference(e)}get updating(){return this.spatialReferenceSupported?this.attached?this.suspended?!1:this.updateRequested||this.isUpdating()||this._updatingHandles?.updating||this.container.transitioning:!0:!1}get visibleAtCurrentScale(){return this._visibleAtCurrentScale}processAttach(){this.isResolved()&&!this.attached&&!this.destroyed&&this.spatialReferenceSupported&&(this.attach(),this.attached=!0,this.requestUpdate())}processDetach(){this.attached&&(this.attached=!1,this.removeHandles(`attach`),this.detach(),this.updateRequested=!1)}requestUpdate(){this.destroyed||this.updateRequested||(this.updateRequested=!0,this.updateSuspended||this.view.requestUpdate())}processUpdate(e){if(this.isFulfilled()&&!this.isResolved()){this.updateRequested=!1;return}this._set(`updateParameters`,e),this.updateRequested&&!this.updateSuspended&&(this.updateRequested=!1,this.update(e))}hitTest(e,t,n){return Promise.resolve(null)}supportsSpatialReference(e){return!0}canResume(){if(!this.spatialReferenceSupported)return!1;switch(this.layer?.type){case`link-chart`:case`knowledge-graph-sublayer`:case`graphics`:break;default:if(f(this.view)&&!this.view.inGeographicLayout)return!1}return super.canResume()?this.visibleAtCurrentScale:!1}getSuspendInfo(){let e=super.getSuspendInfo(),t=!this.spatialReferenceSupported;return t&&(e.spatialReferenceNotSupported=t),e}addAttachHandles(e){this.addHandles(e,`attach`)}_addHighlightFilter(e,t){return this._highlightRegistry.register(t,e)}_removeHighlight(e){this._highlightRegistry.unregister(e)}_onHighlightChange(){}_getHighlightFilterGroups(){let e=[];for(let{name:t,filters:n}of this._highlightRegistry.highlightGroups){let r=this._effectiveHighlightOptions.findIndex(e=>e.name===t);r<0||r>=h||e.push({order:r,filters:n})}return e}};return e([l()],b.prototype,`attached`,void 0),e([l({type:C,set(e){let t=n(e,this._get(`clips`),C);this._set(`clips`,t)}})],b.prototype,`clips`,void 0),e([l()],b.prototype,`container`,void 0),e([l({type:S})],b.prototype,`highlightOptions`,null),e([l({type:t.ofType(S)})],b.prototype,`highlights`,void 0),e([l()],b.prototype,`_effectiveHighlightOptions`,null),e([l()],b.prototype,`moving`,void 0),e([l({readOnly:!0})],b.prototype,`spatialReferenceSupported`,null),e([l({readOnly:!0})],b.prototype,`updateParameters`,void 0),e([l()],b.prototype,`updateRequested`,void 0),e([l()],b.prototype,`updating`,null),e([l()],b.prototype,`view`,void 0),e([l()],b.prototype,`_visibleAtCurrentScale`,void 0),e([l({readOnly:!0})],b.prototype,`visibleAtCurrentScale`,null),b=e([u(`esri.views.2d.layers.LayerView2D`)],b),b};export{T as LayerView2D};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import"@vaadin/grid/vaadin-grid.js";import"@vaadin/grid/vaadin-grid-column-group.js";import"@vaadin/grid/vaadin-grid-selection-column.js";import"@vaadin/grid/vaadin-grid-sorter.js";import{isSome as t}from"../../../core/arrayUtils.js";import{on as n}from"../../../core/events.js";import{assertIsSome as r}from"../../../core/maybe.js";import{on as i,sync as a,watch as o}from"../../../core/reactiveUtils.js";import{renderingSanitizer as s}from"../../../core/sanitizerUtils.js";import{property as c,subclass as l}from"../../../core/accessorSupport/decorators.js";import u from"../../Widget.js";import d from"./GridViewModel.js";import{globalCss as f}from"../../support/globalCss.js";import{messageBundle as p,tsx as m}from"../../support/widget.js";const h=`esri-grid`,g={base:h,content:`${h}__content`,grid:`${h}__grid`,noDataMessage:`${h}__no-data-message`},_={sort:[`Enter`,` `]};let v=class extends u{constructor(e,t){super(e,t),this._columnElements=[],this._grid=null,this.itemIdPath=`objectId`,this.messages=null,this.selectionColumnEnabled=!0,this.viewModel=new d,this._onSelectedItemsChange=this._onSelectedItemsChange.bind(this)}initialize(){this.addHandles([this.columns.on(`before-changes`,()=>this.renderNow()),this.columns.on(`change`,()=>this.onColumnChange()),i(()=>this.highlightIds,`before-add`,({target:e})=>{!this.effectiveMultipleSelectionEnabled&&e.length&&e.removeAll()},a),this.rowHighlightIds.on(`change`,()=>this.generateCellPartNames()),o(()=>this.effectiveSize,()=>this._updateGridSize()),o(()=>[this.isEditing,this.store?.hasPendingEdits],()=>{this.generateCellPartNames(),this.requestContentUpdate()}),o(()=>this.store?.state,(e,t)=>{e===`ready`&&(t===`loaded`||t===`error`)&&this.refreshPageCache()}),i(()=>this._table,`scroll`,()=>this.viewModel.closeColumnMenus()),n(window,`resize`,()=>this._updateColumnBorderStyles()),i(()=>this._table,`scrollend`,()=>{this.paginationEnabled||(this.pageIndex=this.getVirtualPageIndex()),this._updateColumnBorderStyles()}),o(()=>this.effectiveMultipleSelectionEnabled,e=>{!e&&this.highlightIds.length>1&&this.highlightIds.removeAll()},a)])}destroy(){this.resetColumns(),this.columns.destroyed||this.columns.destroy()}resetColumns(){this.columns.drain(e=>!e.destroyed&&e.destroy())}get _columnRendering(){return this.columnPerformanceModeEnabled?`lazy`:`eager`}get _selectedItems(){let{highlightIds:e,store:t}=this;return e.toArray().map(e=>t?.getItemByObjectId(e)??{objectId:e})}get _gridIsDisabled(){return this.viewModel.allVisibleColumns.length===0||this.hasInvalidColumnConfiguration}get _noDataMessage(){return s.sanitize(this.noDataMessage)}get _table(){return this._grid?.$?.table}get cellPartNameGenerator(){return this.viewModel.cellPartNameGenerator}set cellPartNameGenerator(e){this.viewModel.cellPartNameGenerator=e}get columns(){return this.viewModel.columns}set columns(e){this.viewModel.columns=e}get columnPerformanceModeEnabled(){return this.viewModel.columnPerformanceModeEnabled}set columnPerformanceModeEnabled(e){this.viewModel.columnPerformanceModeEnabled=e}get columnReorderingEnabled(){return this.viewModel.columnReorderingEnabled}set columnReorderingEnabled(e){this.viewModel.columnReorderingEnabled=e}get dataProvider(){return this.viewModel.dataProvider}set dataProvider(e){this.viewModel.dataProvider=e}get direction(){return this.viewModel.direction}set direction(e){this.viewModel.direction=e}get editingEnabled(){return this.viewModel.editingEnabled}set editingEnabled(e){this.viewModel.editingEnabled=e}get effectiveMultipleSelectionEnabled(){return this.viewModel.effectiveMultipleSelectionEnabled}get effectiveSize(){return this.viewModel.effectiveSize}get groupColumns(){return this.viewModel.groupColumns}get hasInvalidColumnConfiguration(){return this.viewModel.hasInvalidColumnConfiguration}get highlightIds(){return this.viewModel.highlightIds}set highlightIds(e){this.viewModel.highlightIds=e}get temporaryHighlightId(){return this.viewModel.temporaryHighlightId}set temporaryHighlightId(e){this.viewModel.temporaryHighlightId=e}get isEditing(){return this.viewModel.isEditing}get isReady(){return!!this._grid}get label(){return this.messages?.widgetLabel??``}set label(e){this._overrideIfSome(`label`,e)}get multipleSelectionEnabled(){return this.viewModel.multipleSelectionEnabled}set multipleSelectionEnabled(e){this.viewModel.multipleSelectionEnabled=e}get multipleSelectionEnabledOverride(){return this.viewModel.multipleSelectionEnabledOverride}set multipleSelectionEnabledOverride(e){this.viewModel.multipleSelectionEnabledOverride=e}get multiSortEnabled(){return this.viewModel.multiSortEnabled}set multiSortEnabled(e){this.viewModel.multiSortEnabled=e}get noDataMessage(){return this.viewModel.noDataMessage}set noDataMessage(e){this.viewModel.noDataMessage=e}get pageIndex(){return this.viewModel.pageIndex}set pageIndex(e){this.viewModel.pageIndex=e}get multipleSortPriority(){return this.viewModel.multipleSortPriority}set multipleSortPriority(e){this.viewModel.multipleSortPriority=e}get pageSize(){return this.viewModel.pageSize}set pageSize(e){this.viewModel.pageSize=e}get paginationEnabled(){return this.viewModel.paginationEnabled}set paginationEnabled(e){this.viewModel.paginationEnabled=e}get rowDetailsRenderer(){return this.viewModel.rowDetailsRenderer}set rowDetailsRenderer(e){this.viewModel.rowDetailsRenderer=e}get rowHighlightIds(){return this.viewModel.rowHighlightIds}set rowHighlightIds(e){this.viewModel.rowHighlightIds=e}get size(){return this.viewModel.size}get sortOrders(){return this._grid?._sorters?this._grid._sorters.filter(e=>!!e&&e.path).map(({direction:e,path:t})=>({direction:e,path:t})):[]}get store(){return this.viewModel.store}get state(){return this.viewModel.state}addSorter(e){this._grid?.__updateSorter(e,!1,!1),this.notifyChange(`sortOrders`)}getColumnProps(e,t){let{id:n}=this,{autoWidth:r,direction:i,fieldName:a,flexGrow:o,frozen:s,frozenToEnd:c,hidden:l,label:u,resizable:d,textAlign:f,width:p}=e,m=`${n}_${a}_${t}`,{renderFunction:h,footerRenderFunction:g,headerRenderFunction:_}=e,v=g?(e,t)=>g({root:e,column:t}):void 0,y=_?(e,t)=>_({root:e,column:t}):void 0,b=h?(e,t,n)=>h({root:e,column:t,rowData:n}):void 0,x=``;return e.direction&&(x+=` direction`),e.invalid&&(x+=` invalid`),{footerRenderer:v,headerRenderer:y,renderer:b,autoWidth:r,direction:i,flexGrow:o,frozen:s,frozenToEnd:c,headerPartName:x,key:m,resizable:d,bind:this,"data-fieldName":a,header:u,hidden:this.hasInvalidColumnConfiguration||l,path:a,"text-align":f,width:typeof p==`number`?`${p}px`:p,afterCreate:this._afterColumnCreate,afterRemoved:this._afterColumnRemoved}}clearSelection(){this._clearSelection(),this.scheduleRender()}clearSort(){let e=!1;this._grid&&(this._grid._sorters?.length&&(this._grid._sorters.forEach(e=>{e._order=null,e.direction=null}),e=!0),this.columns.length&&this.columns.some(e=>!!e.direction)&&(this.columns.forEach(e=>e.direction=null),e=!0),e&&(this.notifyChange(`sortOrders`),this.scheduleRender()))}findColumn(e){return this.viewModel.findColumn(e)}generateCellPartNames(){this._grid?.generateCellPartNames()}getFirstVisibleRowIndex(){return this._grid?._firstVisibleIndex||0}getVirtualPageIndex(){return Math.floor(this.getFirstVisibleRowIndex()/this.pageSize)}getLastVisibleRowIndex(){return this._grid?._lastVisibleIndex||0}getVisibleItemsCount(){return this._grid?._visibleItemsCount||0}getRowContainingNode(e){try{return this._grid?._getRowContainingNode(e)}catch{return null}}getSlotElementByName(e){return this._grid?.shadowRoot?.querySelector(`slot[name='${e}']`)??null}hasSorter(e){return this._grid?._sorters?.includes(e)||!1}hideColumn(e){this.viewModel.hideColumn(e)}recalculateColumnWidths(){this._grid?.recalculateColumnWidths()}async reset(){this._clearSelection(),this.store?.reset(),this.scrollToTop()}refreshPageCache(){this._grid?.clearCache(),this.temporaryHighlightId=void 0}requestContentUpdate(){this._grid?.requestContentUpdate(),this.temporaryHighlightId=void 0}selectRows(e){let{itemIdPath:t}=this,n=(e?.filter(e=>!this.highlightIds.includes(e[t]))).map(e=>e[t]);n.length&&(this.effectiveMultipleSelectionEnabled||(this.highlightIds.removeAll(),n.splice(1)),this.highlightIds.addMany(n))}deselectRows(e){let{itemIdPath:t}=this,n=e?.map(e=>e[t])||[];n.length&&this.highlightIds.removeMany(n)}showColumn(e){this.viewModel.showColumn(e)}sort({path:e,direction:t}){this.viewModel.sortColumn(e,t),this.notifyChange(`sortOrders`)}scrollToIndex(e){this.size!==0&&(this._grid?.isConnected&&this._grid?.scrollToIndex(e),this.temporaryHighlightId=void 0)}scrollToTop(){this.scrollToIndex(0)}scrollToBottom(){this.scrollToIndex(1/0)}scrollLeft(e){let{_table:t}=this;t&&(t.scrollLeft=e)}toggleColumnVisibility(e){this.viewModel.toggleColumnVisibility(e)}onColumnChange(){this._columnElements.forEach(e=>this._applyRenderersToColumnElement(e)),this.requestContentUpdate()}render(){return m(`div`,{bind:this,class:this.classes(g.base,f.widget)},m(`div`,{bind:this,class:g.content},this._renderGrid()))}_renderGrid(){return m(`vaadin-grid`,{afterCreate:this._afterGridCreate,afterUpdate:this._afterGridUpdate,bind:this,cellPartNameGenerator:this.cellPartNameGenerator,class:g.grid,columnRendering:this._columnRendering,columnReorderingAllowed:this.columnReorderingEnabled,dataProvider:this.dataProvider,dir:this.direction,disabled:this._gridIsDisabled,id:`${this.id}_grid`,itemIdPath:this.itemIdPath,multiSort:this.multiSortEnabled,multiSortPriority:this.multipleSortPriority,pageSize:this.pageSize,ref:`grid`,rowDetailsRenderer:this.rowDetailsRenderer,selectedItems:this._selectedItems,size:this.effectiveSize},this._renderAllColumns(),this._renderEmptyState())}_renderAllColumns(){return this.state===`disabled`||!this.columns.length?null:[this._renderSelectionColumn(),this._renderColumns()]}_renderSelectionColumn(){return m(`vaadin-grid-selection-column`,{_selectAllHidden:!0,autoWidth:!1,bind:this,dragSelect:!0,frozen:!0,hidden:this.hasInvalidColumnConfiguration||!this.selectionColumnEnabled,selectAll:!1,sortable:!1,textAlign:`center`})}_renderColumns(){return this.columns.toArray().map((e,t)=>`columns`in e?this._renderGroupColumn(e,t):this._renderColumn(e,t)).filter(t)}_renderColumn(e,t){let n=this.getColumnProps(e,t);if(!n.hidden)return m(`vaadin-grid-column`,{...n})}_renderGroupColumn(e,t){let n=this.getColumnProps(e,t);return n.hidden||!e.effectiveVisible?null:m(`vaadin-grid-column-group`,{...n},e.visibleChildColumns.map(e=>m(`vaadin-grid-column`,{...this.getColumnProps(e,t)})))}_renderEmptyState(){let e=this.viewModel;if(!(e.state!==`loaded`||e.isQueryingOrSyncing))return m(`div`,{class:g.noDataMessage,slot:`empty-state`},this._noDataMessage??this.messages.noDataFound)}_afterGridCreate(e){let t=this._grid=e;customElements.whenDefined(`vaadin-grid`).then(()=>{this._addGridEventListeners()}),t.__updateSorter=(e,n,r)=>{let i=t._sorters,a=!i.includes(e),{multiSort:o,multiSortOnShiftClick:s,multiSortPriority:c}=t,l=i.filter(t=>t!==e),u=o&&(!s||!r)||s&&n;if(e._order=null,!e.direction){a||(t._sorters=[...l]);return}u?e._initialOrder==null?c===`append`&&a?t._sorters=[...l,e]:c===`prepend`&&(t._sorters=[e,...l]):(a?i[e._initialOrder]=e:i.splice(e._initialOrder,0,e),e._initialOrder=null):(e.direction||s)&&(t._sorters=e.direction?[e]:[],l.forEach(e=>{e._order=null,e.direction=null}))},t.__removeSorters=e=>{if(e.length===0)return;let n=new Set(e.filter(e=>!e.direction));t._sorters=t._sorters.filter(e=>!n.has(e)),t.__applySorters()}}_afterGridUpdate(e){this._grid||=e}_afterColumnCreate(e){this._columnElements.push(e)}_afterColumnRemoved(e){let t=this._columnElements.indexOf(e,0);t>-1&&this._columnElements.splice(t,1)}_updateGridSize(){this._grid&&(this._grid.size=this.effectiveSize,this.scheduleRender())}_addGridEventListeners(){let e=this._grid;r(e),this.addHandles([n(e,[`click`,`dblclick`,`keydown`,`pointerover`,`pointerout`],e=>this._onGridInteraction(e)),n(e,[`pointerover`,`pointerout`,`cell-focus`],e=>this._onTransientGridInteraction(e)),n(e,`selected-items-changed`,this._onSelectedItemsChange),n(e,`sorter-changed`,()=>{this.notifyChange(`sortOrders`),this._updateColumnBorderStyles()}),n(e,`column-resize`,e=>{let t=e.detail.resizedColumn,n=t.getAttribute(`data-fieldName`);this.findColumn(n)?.set({width:t.width}),this._updateColumnBorderStyles()}),n(e,`column-reorder`,()=>this._onColumnOrderChange())])}_onGridInteraction(e){let t=this._grid;if(r(t),(e.type===`pointerover`||e.type===`pointerout`)&&e.relatedTarget!==t){let{target:t,relatedTarget:n}=e;if(!(this._isGridCellContentNode(t)&&this._isGridCellContentNode(n)))return}let n=null;try{n=t.getEventContext(e)}catch{}if(!n)return;let{column:i,index:a,item:o,section:s}=n;if(!s)return;if(s===`header`&&e.type===`keydown`&&i?.path){let t=e.key;_.sort.includes(t)&&this.findColumn(i.path)?.sort()}let c=`cell-${e.type}`;this.emit(c,{type:c,context:n,index:a,item:o,native:e,path:i?.path??void 0})}_onTransientGridInteraction(e){if(e.type===`pointerout`){this.temporaryHighlightId=void 0;return}let t=this._grid;if(t)try{this.temporaryHighlightId=t.getEventContext(e)?.item?.objectId??void 0}catch{this.temporaryHighlightId=void 0}}_isGridCellContentNode(e){return!!(e&&e instanceof HTMLElement&&e.localName===`vaadin-grid-cell-content`)}_onColumnOrderChange(){let e=this._grid;r(e);let t=e._getColumnsInOrder(0),n=[],i=(this.viewModel.groupColumns.length?e._getColumnsInOrder(1):t).map(e=>e.getAttribute(`data-fieldName`));t?.forEach(e=>{let t=e.getAttribute(`data-fieldName`);if(t!=null){let e=this.findColumn(t);n.push(t),e&&`columns`in e&&e.columns?.length&&e.columns.sort((e,t)=>i.indexOf(e.fieldName)>i.indexOf(t.fieldName)?1:-1)}}),this.columns.sort((e,t)=>n.indexOf(e.fieldName)>n.indexOf(t.fieldName)?1:-1),this.notifyChange(`sortOrders`),this.emit(`column-reorder`,{type:`column-reorder`})}_clearSelection(){this.highlightIds.removeAll(),this.temporaryHighlightId=void 0}_onSelectedItemsChange(e){let{highlightIds:t,itemIdPath:n}=this,r=e.detail.value.map(e=>e[n]),i=r.filter(e=>!t.includes(e));if(!this.effectiveMultipleSelectionEnabled&&i.length&&t.length)t.removeAll(),t.add(i[0]);else{let e=t.filter(e=>!r.includes(e));t.removeMany(e),t.addMany(i)}}_applyRenderersToColumnElement(e){let t=e?.path,n=t==null?void 0:this.findColumn(t);if(n)try{let{renderFunction:t,footerRenderFunction:r,headerRenderFunction:i}=n;t&&`renderer`in e&&(e.renderer=(e,n,r)=>t({root:e,column:n,rowData:r})),r&&(e.footerRenderer=(e,t)=>r({root:e,column:t})),i&&(e.headerRenderer=(e,t)=>i({root:e,column:t}))}catch{}}_updateColumnBorderStyles(){try{this._grid?._updateFirstAndLastColumn()}catch{}}};e([c()],v.prototype,`_columnElements`,void 0),e([c()],v.prototype,`_columnRendering`,null),e([c()],v.prototype,`_selectedItems`,null),e([c()],v.prototype,`_grid`,void 0),e([c()],v.prototype,`_gridIsDisabled`,null),e([c()],v.prototype,`_noDataMessage`,null),e([c()],v.prototype,`_table`,null),e([c()],v.prototype,`cellPartNameGenerator`,null),e([c()],v.prototype,`columns`,null),e([c()],v.prototype,`columnPerformanceModeEnabled`,null),e([c()],v.prototype,`columnReorderingEnabled`,null),e([c()],v.prototype,`dataProvider`,null),e([c()],v.prototype,`direction`,null),e([c()],v.prototype,`editingEnabled`,null),e([c()],v.prototype,`effectiveMultipleSelectionEnabled`,null),e([c()],v.prototype,`effectiveSize`,null),e([c()],v.prototype,`groupColumns`,null),e([c()],v.prototype,`hasInvalidColumnConfiguration`,null),e([c()],v.prototype,`highlightIds`,null),e([c()],v.prototype,`temporaryHighlightId`,null),e([c()],v.prototype,`isEditing`,null),e([c()],v.prototype,`isReady`,null),e([c()],v.prototype,`itemIdPath`,void 0),e([c()],v.prototype,`label`,null),e([c(),p(`esri/widgets/FeatureTable/t9n/FeatureTable`)],v.prototype,`messages`,void 0),e([c()],v.prototype,`multipleSelectionEnabled`,null),e([c()],v.prototype,`multipleSelectionEnabledOverride`,null),e([c()],v.prototype,`multiSortEnabled`,null),e([c()],v.prototype,`noDataMessage`,null),e([c()],v.prototype,`pageIndex`,null),e([c()],v.prototype,`multipleSortPriority`,null),e([c()],v.prototype,`pageSize`,null),e([c()],v.prototype,`paginationEnabled`,null),e([c()],v.prototype,`rowDetailsRenderer`,null),e([c()],v.prototype,`rowHighlightIds`,null),e([c()],v.prototype,`selectionColumnEnabled`,void 0),e([c()],v.prototype,`size`,null),e([c({readOnly:!0})],v.prototype,`sortOrders`,null),e([c()],v.prototype,`store`,null),e([c()],v.prototype,`state`,null),e([c()],v.prototype,`viewModel`,void 0),v=e([l(`esri.widgets.FeatureTable.Grid.Grid`)],v);const y=v;export{y as default};
2
+ import{__decorate as e}from"tslib";import"@vaadin/grid/vaadin-grid.js";import"@vaadin/grid/vaadin-grid-column-group.js";import"@vaadin/grid/vaadin-grid-selection-column.js";import"@vaadin/grid/vaadin-grid-sorter.js";import{isSome as t}from"../../../core/arrayUtils.js";import{on as n}from"../../../core/events.js";import{assertIsSome as r}from"../../../core/maybe.js";import{on as i,sync as a,watch as o}from"../../../core/reactiveUtils.js";import{renderingSanitizer as s}from"../../../core/sanitizerUtils.js";import{property as c,subclass as l}from"../../../core/accessorSupport/decorators.js";import u from"../../Widget.js";import d from"./GridViewModel.js";import{globalCss as f}from"../../support/globalCss.js";import{messageBundle as p,tsx as m}from"../../support/widget.js";const h=`esri-grid`,g={base:h,content:`${h}__content`,grid:`${h}__grid`,noDataMessage:`${h}__no-data-message`},_={sort:[`Enter`,` `]};let v=class extends u{constructor(e,t){super(e,t),this._columnElements=[],this._grid=null,this.itemIdPath=`objectId`,this.messages=null,this.selectionColumnEnabled=!0,this.viewModel=new d,this._onSelectedItemsChange=this._onSelectedItemsChange.bind(this)}initialize(){this.addHandles([this.columns.on(`before-changes`,()=>this.renderNow()),this.columns.on(`change`,()=>this.onColumnChange()),i(()=>this.highlightIds,`before-add`,({target:e})=>{!this.effectiveMultipleSelectionEnabled&&e.length&&e.removeAll()},a),this.rowHighlightIds.on(`change`,()=>this.generateCellPartNames()),o(()=>this.effectiveSize,()=>this._updateGridSize()),o(()=>[this.isEditing,this.store?.hasPendingEdits],()=>{this.generateCellPartNames(),this.requestContentUpdate()}),o(()=>this.store?.state,(e,t)=>{e===`ready`&&(t===`loaded`||t===`error`)&&this.refreshPageCache()}),i(()=>this._table,`scroll`,()=>this.viewModel.closeColumnMenus()),n(window,`resize`,()=>this._updateColumnBorderStyles()),i(()=>this._table,`scrollend`,()=>{this.paginationEnabled||(this.pageIndex=this.getVirtualPageIndex()),this._updateColumnBorderStyles()}),o(()=>this.effectiveMultipleSelectionEnabled,e=>{!e&&this.highlightIds.length>1&&this.highlightIds.removeAll()},a)])}destroy(){this.resetColumns(),this.columns.destroyed||this.columns.destroy()}resetColumns(){this.columns.drain(e=>!e.destroyed&&e.destroy())}get _columnRendering(){return this.columnPerformanceModeEnabled?`lazy`:`eager`}get _selectedItems(){let{highlightIds:e,store:t}=this;return e.toArray().map(e=>t?.getItemByObjectId(e)??{objectId:e})}get _gridIsDisabled(){return this.viewModel.allVisibleColumns.length===0||this.hasInvalidColumnConfiguration}get _noDataMessage(){return s.sanitize(this.noDataMessage)}get _table(){return this._grid?.$?.table}get cellPartNameGenerator(){return this.viewModel.cellPartNameGenerator}set cellPartNameGenerator(e){this.viewModel.cellPartNameGenerator=e}get columns(){return this.viewModel.columns}set columns(e){this.viewModel.columns=e}get columnPerformanceModeEnabled(){return this.viewModel.columnPerformanceModeEnabled}set columnPerformanceModeEnabled(e){this.viewModel.columnPerformanceModeEnabled=e}get columnReorderingEnabled(){return this.viewModel.columnReorderingEnabled}set columnReorderingEnabled(e){this.viewModel.columnReorderingEnabled=e}get dataProvider(){return this.viewModel.dataProvider}set dataProvider(e){this.viewModel.dataProvider=e}get direction(){return this.viewModel.direction}set direction(e){this.viewModel.direction=e}get editingEnabled(){return this.viewModel.editingEnabled}set editingEnabled(e){this.viewModel.editingEnabled=e}get effectiveMultipleSelectionEnabled(){return this.viewModel.effectiveMultipleSelectionEnabled}get effectiveSize(){return this.viewModel.effectiveSize}get groupColumns(){return this.viewModel.groupColumns}get hasInvalidColumnConfiguration(){return this.viewModel.hasInvalidColumnConfiguration}get highlightIds(){return this.viewModel.highlightIds}set highlightIds(e){this.viewModel.highlightIds=e}get temporaryHighlightId(){return this.viewModel.temporaryHighlightId}set temporaryHighlightId(e){this.viewModel.temporaryHighlightId=e}get isEditing(){return this.viewModel.isEditing}get isReady(){return!!this._grid}get label(){return this.messages?.widgetLabel??``}set label(e){this._overrideIfSome(`label`,e)}get multipleSelectionEnabled(){return this.viewModel.multipleSelectionEnabled}set multipleSelectionEnabled(e){this.viewModel.multipleSelectionEnabled=e}get multipleSelectionEnabledOverride(){return this.viewModel.multipleSelectionEnabledOverride}set multipleSelectionEnabledOverride(e){this.viewModel.multipleSelectionEnabledOverride=e}get multiSortEnabled(){return this.viewModel.multiSortEnabled}set multiSortEnabled(e){this.viewModel.multiSortEnabled=e}get noDataMessage(){return this.viewModel.noDataMessage}set noDataMessage(e){this.viewModel.noDataMessage=e}get pageIndex(){return this.viewModel.pageIndex}set pageIndex(e){this.viewModel.pageIndex=e}get multipleSortPriority(){return this.viewModel.multipleSortPriority}set multipleSortPriority(e){this.viewModel.multipleSortPriority=e}get pageSize(){return this.viewModel.pageSize}set pageSize(e){this.viewModel.pageSize=e}get paginationEnabled(){return this.viewModel.paginationEnabled}set paginationEnabled(e){this.viewModel.paginationEnabled=e}get rowDetailsRenderer(){return this.viewModel.rowDetailsRenderer}set rowDetailsRenderer(e){this.viewModel.rowDetailsRenderer=e}get rowHighlightIds(){return this.viewModel.rowHighlightIds}set rowHighlightIds(e){this.viewModel.rowHighlightIds=e}get size(){return this.viewModel.size}get sortOrders(){return this._grid?._sorters?this._grid._sorters.filter(e=>!!e&&e.path).map(({direction:e,path:t})=>({direction:e,path:t})):[]}get store(){return this.viewModel.store}get state(){return this.viewModel.state}addSorter(e){this._grid?.__updateSorter(e,!1,!1),this.notifyChange(`sortOrders`)}getColumnProps(e,t){let{id:n}=this,{autoWidth:r,direction:i,fieldName:a,flexGrow:o,frozen:s,frozenToEnd:c,hidden:l,label:u,resizable:d,textAlign:f,width:p}=e,m=`${n}_${a}_${t}`,{renderFunction:h,footerRenderFunction:g,headerRenderFunction:_}=e,v=g?(e,t)=>g({root:e,column:t}):void 0,y=_?(e,t)=>_({root:e,column:t}):void 0,b=h?(e,t,n)=>h({root:e,column:t,rowData:n}):void 0,x=``;return e.direction&&(x+=` direction`),e.invalid&&(x+=` invalid`),{footerRenderer:v,headerRenderer:y,renderer:b,autoWidth:r,direction:i,flexGrow:o,frozen:s,frozenToEnd:c,headerPartName:x,key:m,resizable:d,bind:this,"data-fieldName":a,header:u,hidden:this.hasInvalidColumnConfiguration||l,path:a,"text-align":f,width:typeof p==`number`?`${p}px`:p,afterCreate:this._afterColumnCreate,afterRemoved:this._afterColumnRemoved}}clearSelection(){this._clearSelection(),this.scheduleRender()}clearSort(){let e=!1;this._grid&&(this._grid._sorters?.length&&(this._grid._sorters.forEach(e=>{e._order=null,e.direction=null}),e=!0),this.columns.length&&this.columns.some(e=>!!e.direction)&&(this.columns.forEach(e=>e.direction=null),e=!0),e&&(this.notifyChange(`sortOrders`),this.scheduleRender()))}findColumn(e){return this.viewModel.findColumn(e)}generateCellPartNames(){this._grid?.generateCellPartNames()}getFirstVisibleRowIndex(){return this._grid?._firstVisibleIndex||0}getVirtualPageIndex(){return Math.floor(this.getFirstVisibleRowIndex()/this.pageSize)}getLastVisibleRowIndex(){return this._grid?._lastVisibleIndex||0}getVisibleItemsCount(){return this._grid?._visibleItemsCount||0}getRowContainingNode(e){try{return this._grid?._getRowContainingNode(e)}catch{return null}}getSlotElementByName(e){return this._grid?.shadowRoot?.querySelector(`slot[name='${e}']`)??null}hasSorter(e){return this._grid?._sorters?.includes(e)||!1}hideColumn(e){this.viewModel.hideColumn(e)}recalculateColumnWidths(){this._grid?.recalculateColumnWidths()}async reset(){this._clearSelection(),this.store?.reset(),this.scrollToTop()}refreshPageCache(){this._grid?.clearCache(),this.temporaryHighlightId=void 0}requestContentUpdate(){this._grid?.requestContentUpdate(),this.temporaryHighlightId=void 0}selectRows(e){let{itemIdPath:t}=this,n=(e?.filter(e=>!this.highlightIds.includes(e[t]))).map(e=>e[t]);n.length&&(this.effectiveMultipleSelectionEnabled||(this.highlightIds.removeAll(),n.splice(1)),this.highlightIds.addMany(n))}deselectRows(e){let{itemIdPath:t}=this,n=e?.map(e=>e[t])||[];n.length&&this.highlightIds.removeMany(n)}showColumn(e){this.viewModel.showColumn(e)}sort({path:e,direction:t}){this.viewModel.sortColumn(e,t),this.notifyChange(`sortOrders`)}scrollToIndex(e){this.size!==0&&(this._grid?.isConnected&&this._grid?.scrollToIndex(e),this.temporaryHighlightId=void 0)}scrollToTop(){this.scrollToIndex(0)}scrollToBottom(){this.scrollToIndex(1/0)}scrollLeft(e){let{_table:t}=this;t&&(t.scrollLeft=e)}toggleColumnVisibility(e){this.viewModel.toggleColumnVisibility(e)}onColumnChange(){this._columnElements.forEach(e=>this._applyRenderersToColumnElement(e)),this.requestContentUpdate()}render(){return m(`div`,{bind:this,class:this.classes(g.base,f.widget)},m(`div`,{bind:this,class:g.content},this._renderGrid()))}_renderGrid(){return m(`vaadin-grid`,{afterCreate:this._afterGridCreate,afterUpdate:this._afterGridUpdate,bind:this,cellPartNameGenerator:this.cellPartNameGenerator,class:g.grid,columnRendering:this._columnRendering,columnReorderingAllowed:this.columnReorderingEnabled,dataProvider:this.dataProvider,dir:this.direction,disabled:this._gridIsDisabled,id:`${this.id}_grid`,itemIdPath:this.itemIdPath,multiSort:this.multiSortEnabled,multiSortPriority:this.multipleSortPriority,pageSize:this.pageSize,ref:`grid`,rowDetailsRenderer:this.rowDetailsRenderer,selectedItems:this._selectedItems,size:this.effectiveSize},this._renderAllColumns(),this._renderEmptyState())}_renderAllColumns(){return this.state===`disabled`||!this.columns.length?null:[this._renderSelectionColumn(),this._renderColumns()]}_renderSelectionColumn(){return m(`vaadin-grid-selection-column`,{_selectAllHidden:!0,autoWidth:!1,bind:this,dragSelect:!0,frozen:!0,hidden:this.hasInvalidColumnConfiguration||!this.selectionColumnEnabled,selectAll:!1,sortable:!1,textAlign:`center`})}_renderColumns(){return this.columns.toArray().map((e,t)=>`columns`in e?this._renderGroupColumn(e,t):this._renderColumn(e,t)).filter(t)}_renderColumn(e,t){let n=this.getColumnProps(e,t);if(!n.hidden)return m(`vaadin-grid-column`,{...n})}_renderGroupColumn(e,t){let n=this.getColumnProps(e,t);return n.hidden||!e.effectiveVisible?null:m(`vaadin-grid-column-group`,{...n},e.visibleChildColumns.map(e=>m(`vaadin-grid-column`,{...this.getColumnProps(e,t)})))}_renderEmptyState(){let e=this.viewModel;if(!(e.state!==`loaded`||e.isQueryingOrSyncing))return m(`div`,{class:g.noDataMessage,slot:`empty-state`},this._noDataMessage??this.messages.noDataFound)}_afterGridCreate(e){let t=this._grid=e;customElements.whenDefined(`vaadin-grid`).then(()=>{this._addGridEventListeners()}),t.__updateSorter=(e,n,r)=>{let{multiSort:i,multiSortOnShiftClick:a,multiSortPriority:o}=t,s=e._initialOrder,c=t._sorters.find(t=>t.path===e.path),l=t._sorters.filter(t=>t.path!==e.path),u=i&&(!a||!r)||a&&n;if(e._order=null,!e.direction){c&&(t._sorters=[...l]);return}u?s==null?o===`append`&&!c?t._sorters=[...l,e]:o===`prepend`&&(t._sorters=[e,...l]):(l.splice(s,0,e),t._sorters=[...l],e._initialOrder=null):(e.direction||a)&&(t._sorters=e.direction?[e]:[],l.forEach(e=>{e._order=null,e.direction=null}))},t.__removeSorters=e=>{if(e.length===0)return;let n=new Set(e.filter(e=>!e.direction));t._sorters=t._sorters.filter(e=>!n.has(e)),t.__applySorters()}}_afterGridUpdate(e){this._grid||=e}_afterColumnCreate(e){this._columnElements.push(e)}_afterColumnRemoved(e){let t=this._columnElements.indexOf(e,0);t>-1&&this._columnElements.splice(t,1)}_updateGridSize(){this._grid&&(this._grid.size=this.effectiveSize,this.scheduleRender())}_addGridEventListeners(){let e=this._grid;r(e),this.addHandles([n(e,[`click`,`dblclick`,`keydown`,`pointerover`,`pointerout`],e=>this._onGridInteraction(e)),n(e,[`pointerover`,`pointerout`,`cell-focus`],e=>this._onTransientGridInteraction(e)),n(e,`selected-items-changed`,this._onSelectedItemsChange),n(e,`sorter-changed`,()=>{this.notifyChange(`sortOrders`),this._updateColumnBorderStyles()}),n(e,`column-resize`,e=>{let t=e.detail.resizedColumn,n=t.getAttribute(`data-fieldName`);this.findColumn(n)?.set({width:t.width}),this._updateColumnBorderStyles()}),n(e,`column-reorder`,()=>this._onColumnOrderChange())])}_onGridInteraction(e){let t=this._grid;if(r(t),(e.type===`pointerover`||e.type===`pointerout`)&&e.relatedTarget!==t){let{target:t,relatedTarget:n}=e;if(!(this._isGridCellContentNode(t)&&this._isGridCellContentNode(n)))return}let n=null;try{n=t.getEventContext(e)}catch{}if(!n)return;let{column:i,index:a,item:o,section:s}=n;if(!s)return;if(s===`header`&&e.type===`keydown`&&i?.path){let t=e.key;_.sort.includes(t)&&this.findColumn(i.path)?.sort()}let c=`cell-${e.type}`;this.emit(c,{type:c,context:n,index:a,item:o,native:e,path:i?.path??void 0})}_onTransientGridInteraction(e){if(e.type===`pointerout`){this.temporaryHighlightId=void 0;return}let t=this._grid;if(t)try{this.temporaryHighlightId=t.getEventContext(e)?.item?.objectId??void 0}catch{this.temporaryHighlightId=void 0}}_isGridCellContentNode(e){return!!(e&&e instanceof HTMLElement&&e.localName===`vaadin-grid-cell-content`)}_onColumnOrderChange(){let e=this._grid;r(e);let t=e._getColumnsInOrder(0),n=[],i=(this.viewModel.groupColumns.length?e._getColumnsInOrder(1):t).map(e=>e.getAttribute(`data-fieldName`));t?.forEach(e=>{let t=e.getAttribute(`data-fieldName`);if(t!=null){let e=this.findColumn(t);n.push(t),e&&`columns`in e&&e.columns?.length&&e.columns.sort((e,t)=>i.indexOf(e.fieldName)>i.indexOf(t.fieldName)?1:-1)}}),this.columns.sort((e,t)=>n.indexOf(e.fieldName)>n.indexOf(t.fieldName)?1:-1),this.notifyChange(`sortOrders`),this.emit(`column-reorder`,{type:`column-reorder`})}_clearSelection(){this.highlightIds.removeAll(),this.temporaryHighlightId=void 0}_onSelectedItemsChange(e){let{highlightIds:t,itemIdPath:n}=this,r=e.detail.value.map(e=>e[n]),i=r.filter(e=>!t.includes(e));if(!this.effectiveMultipleSelectionEnabled&&i.length&&t.length)t.removeAll(),t.add(i[0]);else{let e=t.filter(e=>!r.includes(e));t.removeMany(e),t.addMany(i)}}_applyRenderersToColumnElement(e){let t=e?.path,n=t==null?void 0:this.findColumn(t);if(n)try{let{renderFunction:t,footerRenderFunction:r,headerRenderFunction:i}=n;t&&`renderer`in e&&(e.renderer=(e,n,r)=>t({root:e,column:n,rowData:r})),r&&(e.footerRenderer=(e,t)=>r({root:e,column:t})),i&&(e.headerRenderer=(e,t)=>i({root:e,column:t}))}catch{}}_updateColumnBorderStyles(){try{this._grid?._updateFirstAndLastColumn()}catch{}}};e([c()],v.prototype,`_columnElements`,void 0),e([c()],v.prototype,`_columnRendering`,null),e([c()],v.prototype,`_selectedItems`,null),e([c()],v.prototype,`_grid`,void 0),e([c()],v.prototype,`_gridIsDisabled`,null),e([c()],v.prototype,`_noDataMessage`,null),e([c()],v.prototype,`_table`,null),e([c()],v.prototype,`cellPartNameGenerator`,null),e([c()],v.prototype,`columns`,null),e([c()],v.prototype,`columnPerformanceModeEnabled`,null),e([c()],v.prototype,`columnReorderingEnabled`,null),e([c()],v.prototype,`dataProvider`,null),e([c()],v.prototype,`direction`,null),e([c()],v.prototype,`editingEnabled`,null),e([c()],v.prototype,`effectiveMultipleSelectionEnabled`,null),e([c()],v.prototype,`effectiveSize`,null),e([c()],v.prototype,`groupColumns`,null),e([c()],v.prototype,`hasInvalidColumnConfiguration`,null),e([c()],v.prototype,`highlightIds`,null),e([c()],v.prototype,`temporaryHighlightId`,null),e([c()],v.prototype,`isEditing`,null),e([c()],v.prototype,`isReady`,null),e([c()],v.prototype,`itemIdPath`,void 0),e([c()],v.prototype,`label`,null),e([c(),p(`esri/widgets/FeatureTable/t9n/FeatureTable`)],v.prototype,`messages`,void 0),e([c()],v.prototype,`multipleSelectionEnabled`,null),e([c()],v.prototype,`multipleSelectionEnabledOverride`,null),e([c()],v.prototype,`multiSortEnabled`,null),e([c()],v.prototype,`noDataMessage`,null),e([c()],v.prototype,`pageIndex`,null),e([c()],v.prototype,`multipleSortPriority`,null),e([c()],v.prototype,`pageSize`,null),e([c()],v.prototype,`paginationEnabled`,null),e([c()],v.prototype,`rowDetailsRenderer`,null),e([c()],v.prototype,`rowHighlightIds`,null),e([c()],v.prototype,`selectionColumnEnabled`,void 0),e([c()],v.prototype,`size`,null),e([c({readOnly:!0})],v.prototype,`sortOrders`,null),e([c()],v.prototype,`store`,null),e([c()],v.prototype,`state`,null),e([c()],v.prototype,`viewModel`,void 0),v=e([l(`esri.widgets.FeatureTable.Grid.Grid`)],v);const y=v;export{y as default};