VectorTileLayerView2D.ee54edcc.js 65 KB

1
  1. import{U as Re,u as Ae,dB as re,cO as Pe,q as Me,bF as B,m as Z,cq as ne,bW as Le,cP as pe,t as O,a as p,k,aV as ge,M as me,J as Be,I as be,F as q,e5 as Oe,N as Ue,D as ke,aq as ee,cB as Ve,db as Ee,cJ as ze,R as $e,S as He,bX as Fe,e6 as qe,bC as Ne,s as oe,cC as ae,aY as Qe,_ as N,$ as j,a0 as We}from"./index.6c049565.js";import{I as P,L as v}from"./enums.54326430.js";import{t as M}from"./Rect.95b0fd2e.js";import{P as we,G as xe,D as je,F as I,O as H,I as le,R as F,C as Se,E as Je}from"./enums.2d9e6f64.js";import{E as Te}from"./Texture.8e8dfb11.js";import{e as Ge}from"./rasterizingUtils.b3483176.js";import{E as C,a as z}from"./VertexArrayObject.729879be.js";import{e as J,t as Ye,c as Ke}from"./config.82550349.js";import{r as Ie,i as Xe}from"./TileContainer.282da507.js";import{n as Ze,l as V,r as et,i as te,a as D}from"./StyleDefinition.d56936e4.js";import{I as U}from"./Utils.e8554a0e.js";import{l as he}from"./StyleRepository.43c45b26.js";import{y as tt,u as st}from"./LayerView.7c2db9bf.js";import"./ProgramTemplate.83fdf5b6.js";import{r as it}from"./utils.eb2c3fd5.js";import{t as rt}from"./VertexElementDescriptor.1fdca6da.js";import"./floatRGBA.c5518572.js";import"./WGLContainer.bbd0fcb8.js";import"./pixelUtils.f4eba4af.js";import"./enums.0295eb81.js";import"./MaterialKey.bbaab8f1.js";import"./GeometryUtils.51c4032a.js";import"./earcut.afc1d357.js";import"./colorUtils.bb6424b7.js";import"./GeometryUtils.4f19e772.js";import"./Geometry.d049a63c.js";class Q{constructor(e,s){this._width=0,this._height=0,this._free=[],this._width=e,this._height=s,this._free.push(new M(0,0,e,s))}get width(){return this._width}get height(){return this._height}allocate(e,s){if(e>this._width||s>this._height)return new M;let t=null,i=-1;for(let r=0;r<this._free.length;++r){const n=this._free[r];e<=n.width&&s<=n.height&&(t===null||n.y<=t.y&&n.x<=t.x)&&(t=n,i=r)}return t===null?new M:(this._free.splice(i,1),t.width<t.height?(t.width>e&&this._free.push(new M(t.x+e,t.y,t.width-e,s)),t.height>s&&this._free.push(new M(t.x,t.y+s,t.width,t.height-s))):(t.width>e&&this._free.push(new M(t.x+e,t.y,t.width-e,t.height)),t.height>s&&this._free.push(new M(t.x,t.y+s,e,t.height-s))),new M(t.x,t.y,e,s))}release(e){for(let s=0;s<this._free.length;++s){const t=this._free[s];if(t.y===e.y&&t.height===e.height&&t.x+t.width===e.x)t.width+=e.width;else if(t.x===e.x&&t.width===e.width&&t.y+t.height===e.y)t.height+=e.height;else if(e.y===t.y&&e.height===t.height&&e.x+e.width===t.x)t.x=e.x,t.width+=e.width;else{if(e.x!==t.x||e.width!==t.width||e.y+e.height!==t.y)continue;t.y=e.y,t.height+=e.height}this._free.splice(s,1),this.release(e)}this._free.push(e)}}class ce{constructor(e,s,t){this.width=0,this.height=0,this._dirties=[],this._glyphData=[],this._currentPage=0,this._glyphIndex={},this._textures=[],this._rangePromises=new Map,this.width=e,this.height=s,this._glyphSource=t,this._binPack=new Q(e-4,s-4),this._glyphData.push(new Uint8Array(e*s)),this._dirties.push(!0),this._textures.push(void 0)}getGlyphItems(e,s){const t=[],i=this._glyphSource,r=new Set,n=1/256;for(const a of s){const h=Math.floor(a*n);r.add(h)}const o=[];return r.forEach(a=>{if(a<=256){const h=e+a;if(this._rangePromises.has(h))o.push(this._rangePromises.get(h));else{const y=i.getRange(e,a).then(()=>{this._rangePromises.delete(h)},()=>{this._rangePromises.delete(h)});this._rangePromises.set(h,y),o.push(y)}}}),Promise.all(o).then(()=>{let a=this._glyphIndex[e];a||(a={},this._glyphIndex[e]=a);for(const h of s){const y=a[h];if(y){t[h]={sdf:!0,rect:y.rect,metrics:y.metrics,page:y.page,code:h};continue}const u=i.getGlyph(e,h);if(!u||!u.metrics)continue;const d=u.metrics;let c;if(d.width===0)c=new M(0,0,0,0);else{const f=d.width+6,g=d.height+2*3;let m=f%4?4-f%4:4,w=g%4?4-g%4:4;m===1&&(m=5),w===1&&(w=5),c=this._binPack.allocate(f+m,g+w),c.isEmpty&&(this._dirties[this._currentPage]||(this._glyphData[this._currentPage]=null),this._currentPage=this._glyphData.length,this._glyphData.push(new Uint8Array(this.width*this.height)),this._dirties.push(!0),this._textures.push(void 0),this._binPack=new Q(this.width-4,this.height-4),c=this._binPack.allocate(f+m,g+w));const b=this._glyphData[this._currentPage],x=u.bitmap;let A,S;if(x)for(let R=0;R<g;R++){A=f*R,S=this.width*(c.y+R+1)+c.x;for(let L=0;L<f;L++)b[S+L+1]=x[A+L]}}a[h]={rect:c,metrics:d,tileIDs:null,page:this._currentPage},t[h]={sdf:!0,rect:c,metrics:d,page:this._currentPage,code:h},this._dirties[this._currentPage]=!0}return t})}removeGlyphs(e){for(const s in this._glyphIndex){const t=this._glyphIndex[s];if(!t)continue;let i;for(const r in t)if(i=t[r],i.tileIDs.delete(e),i.tileIDs.size===0){const n=this._glyphData[i.page],o=i.rect;let a,h;for(let y=0;y<o.height;y++)for(a=this.width*(o.y+y)+o.x,h=0;h<o.width;h++)n[a+h]=0;delete t[r],this._dirties[i.page]=!0}}}bind(e,s,t,i=0){this._textures[t]||(this._textures[t]=new Te(e,{pixelFormat:we.ALPHA,dataType:xe.UNSIGNED_BYTE,width:this.width,height:this.height},new Uint8Array(this.width*this.height)));const r=this._textures[t];r.setSamplingMode(s),this._dirties[t]&&r.setData(this._glyphData[t]),e.bindTexture(r,i),this._dirties[t]=!1}dispose(){this._binPack=null;for(const e of this._textures)e&&e.dispose();this._textures.length=0}}class K{constructor(e){if(this._metrics=[],this._bitmaps=[],e)for(;e.next();)switch(e.tag()){case 1:{const s=e.getMessage();for(;s.next();)switch(s.tag()){case 3:{const t=s.getMessage();let i,r,n,o,a,h,y;for(;t.next();)switch(t.tag()){case 1:i=t.getUInt32();break;case 2:r=t.getBytes();break;case 3:n=t.getUInt32();break;case 4:o=t.getUInt32();break;case 5:a=t.getSInt32();break;case 6:h=t.getSInt32();break;case 7:y=t.getUInt32();break;default:t.skip()}t.release(),i&&(this._metrics[i]={width:n,height:o,left:a,top:h,advance:y},this._bitmaps[i]=r);break}default:s.skip()}s.release();break}default:e.skip()}}getMetrics(e){return this._metrics[e]}getBitmap(e){return this._bitmaps[e]}}class nt{constructor(){this._ranges=[]}getRange(e){return this._ranges[e]}addRange(e,s){this._ranges[e]=s}}class ue{constructor(e){this._glyphInfo={},this._baseURL=e}getRange(e,s){const t=this._getFontStack(e);if(t.getRange(s))return Promise.resolve();const i=256*s,r=i+255;if(this._baseURL){const n=this._baseURL.replace("{fontstack}",e).replace("{range}",i+"-"+r);return Re(n,{responseType:"array-buffer"}).then(o=>{t.addRange(s,new K(new Ae(new Uint8Array(o.data),new DataView(o.data))))}).catch(()=>{t.addRange(s,new K)})}return t.addRange(s,new K),Promise.resolve()}getGlyph(e,s){const t=this._getFontStack(e);if(!t)return;const i=Math.floor(s/256);if(i>256)return;const r=t.getRange(i);return r?{metrics:r.getMetrics(s),bitmap:r.getBitmap(s)}:void 0}_getFontStack(e){let s=this._glyphInfo[e];return s||(s=this._glyphInfo[e]=new nt),s}}const ot="dasharray-";class W{constructor(e,s,t=0){this._size=[],this._mosaicsData=[],this._textures=[],this._dirties=[],this._maxItemSize=0,this._currentPage=0,this._pageWidth=0,this._pageHeight=0,this._mosaicRects={},this.pixelRatio=1,(e<=0||s<=0)&&console.error("Sprites mosaic defaultWidth and defaultHeight must be greater than zero!"),this._pageWidth=e,this._pageHeight=s,t>0&&(this._maxItemSize=t),this._binPack=new Q(e-4,s-4)}dispose(){this._binPack=null,this._mosaicRects={};for(const e of this._textures)e&&e.dispose();this._textures.length=0}getWidth(e){return e>=this._size.length?-1:this._size[e][0]}getHeight(e){return e>=this._size.length?-1:this._size[e][1]}getPageSize(e){return e>=this._size.length?null:this._size[e]}setSpriteSource(e){if(this.dispose(),this.pixelRatio=e.devicePixelRatio,this._mosaicsData.length===0){this._binPack=new Q(this._pageWidth-4,this._pageHeight-4);const s=Math.floor(this._pageWidth),t=Math.floor(this._pageHeight),i=new Uint32Array(s*t);this._mosaicsData[0]=i,this._dirties.push(!0),this._size.push([this._pageWidth,this._pageHeight]),this._textures.push(void 0)}this._sprites=e}getSpriteItem(e,s=!1){let t,i,r=this._mosaicRects[e];if(r)return r;if(!this._sprites||this._sprites.loadStatus!=="loaded"||(e&&e.startsWith(ot)?([t,i]=this._rasterizeDash(e),s=!0):t=this._sprites.getSpriteInfo(e),!t||!t.width||!t.height||t.width<0||t.height<0))return null;const n=t.width,o=t.height,[a,h,y]=this._allocateImage(n,o);return a.width<=0?null:(this._copy(a,t,h,y,s,i),r={rect:a,width:n,height:o,sdf:t.sdf,simplePattern:!1,pixelRatio:t.pixelRatio,page:h},this._mosaicRects[e]=r,r)}getSpriteItems(e){const s={};for(const t of e)s[t.name]=this.getSpriteItem(t.name,t.repeat);return s}getMosaicItemPosition(e,s){const t=this.getSpriteItem(e,s),i=t&&t.rect;if(!i)return null;i.width=t.width,i.height=t.height;const r=t.width,n=t.height,o=2;return{tl:[i.x+o,i.y+o],br:[i.x+o+r,i.y+o+n],page:t.page}}bind(e,s,t=0,i=0){if(t>=this._size.length||t>=this._mosaicsData.length)return;this._textures[t]||(this._textures[t]=new Te(e,{pixelFormat:we.RGBA,dataType:xe.UNSIGNED_BYTE,wrapMode:je.CLAMP_TO_EDGE,width:this._size[t][0],height:this._size[t][1]},new Uint8Array(this._mosaicsData[t].buffer)));const r=this._textures[t];r.setSamplingMode(s),this._dirties[t]&&r.setData(new Uint8Array(this._mosaicsData[t].buffer)),e.bindTexture(r,i),this._dirties[t]=!1}static _copyBits(e,s,t,i,r,n,o,a,h,y,u){let d=i*s+t,c=a*n+o;if(u){c-=n;for(let _=-1;_<=y;_++,d=((_+y)%y+i)*s+t,c+=n)for(let f=-1;f<=h;f++)r[c+f]=e[d+(f+h)%h]}else for(let _=0;_<y;_++){for(let f=0;f<h;f++)r[c+f]=e[d+f];d+=s,c+=n}}_copy(e,s,t,i,r,n){if(!this._sprites||this._sprites.loadStatus!=="loaded"||t>=this._mosaicsData.length)return;const o=new Uint32Array(n?n.buffer:this._sprites.image.buffer),a=this._mosaicsData[t];a&&o||console.error("Source or target images are uninitialized!");const h=2,y=n?s.width:this._sprites.width;W._copyBits(o,y,s.x,s.y,a,i[0],e.x+h,e.y+h,s.width,s.height,r),this._dirties[t]=!0}_allocateImage(e,s){e+=2,s+=2;const t=Math.max(e,s);if(this._maxItemSize&&this._maxItemSize<t){const o=new M(0,0,e,s);return this._mosaicsData.push(new Uint32Array(e*s)),this._dirties.push(!0),this._size.push([e,s]),this._textures.push(void 0),[o,this._mosaicsData.length-1,[e,s]]}let i=e%4?4-e%4:4,r=s%4?4-s%4:4;i===1&&(i=5),r===1&&(r=5);const n=this._binPack.allocate(e+i,s+r);return n.width<=0?(this._dirties[this._currentPage]||(this._mosaicsData[this._currentPage]=null),this._currentPage=this._mosaicsData.length,this._mosaicsData.push(new Uint32Array(this._pageWidth*this._pageHeight)),this._dirties.push(!0),this._size.push([this._pageWidth,this._pageHeight]),this._textures.push(void 0),this._binPack=new Q(this._pageWidth-4,this._pageHeight-4),this._allocateImage(e,s)):[n,this._currentPage,[this._pageWidth,this._pageHeight]]}_rasterizeDash(e){const s=/\[(.*?)\]/,t=e.match(s);if(!t)return null;const i=t[1].split(",").map(Number),r=e.slice(e.lastIndexOf("-")+1),[n,o,a]=Ge(i,r);return[{x:0,y:0,width:o,height:a,sdf:!0,pixelRatio:1},new Uint8Array(n.buffer)]}}class at{constructor(e,s,t){this._layer=e,this._styleRepository=s,this.devicePixelRatio=t,this._spriteMosaic=null,this._glyphMosaic=null,this._connection=null}destroy(){this._connection&&(this._connection.close(),this._connection=null),this._styleRepository=null,this._layer=null,this._spriteMosaic&&(this._spriteMosaic=null),this._glyphMosaic&&(this._glyphMosaic=null)}get spriteMosaic(){return this._spriteSourcePromise.then(()=>this._spriteMosaic)}get glyphMosaic(){return this._glyphMosaic}async start(e){this._spriteSourcePromise=this._layer.loadSpriteSource(this.devicePixelRatio,e),this._spriteSourcePromise.then(t=>{this._spriteMosaic=new W(1024,1024,250),this._spriteMosaic.setSpriteSource(t)});const s=new ue(this._layer.currentStyleInfo.glyphsUrl?re(this._layer.currentStyleInfo.glyphsUrl,{...this._layer.customParameters,token:this._layer.apiKey}):null);this._glyphMosaic=new ce(1024,1024,s),this._broadcastPromise=Pe("WorkerTileHandler",{client:this,schedule:e.schedule,signal:e.signal}).then(t=>{if(this._connection=t,this._layer&&!this._connection.closed){const i=t.broadcast("setStyle",this._layer.currentStyleInfo.style,e);Promise.all(i).catch(r=>Me(r))}})}async updateStyle(e){return await this._broadcastPromise,this._broadcastPromise=Promise.all(this._connection.broadcast("updateStyle",e)),this._broadcastPromise}setSpriteSource(e){const s=new W(1024,1024,250);return s.setSpriteSource(e),this._spriteMosaic=s,this._spriteSourcePromise=Promise.resolve(e),s}async setStyle(e,s){await this._broadcastPromise,this._styleRepository=e,this._spriteSourcePromise=this._layer.loadSpriteSource(this.devicePixelRatio,null),this._spriteSourcePromise.then(i=>{this._spriteMosaic=new W(1024,1024,250),this._spriteMosaic.setSpriteSource(i)});const t=new ue(this._layer.currentStyleInfo.glyphsUrl?re(this._layer.currentStyleInfo.glyphsUrl,{...this._layer.customParameters,token:this._layer.apiKey}):null);return this._glyphMosaic=new ce(1024,1024,t),this._broadcastPromise=Promise.all(this._connection.broadcast("setStyle",s)),this._broadcastPromise}fetchTileData(e,s){return this._getRefKeys(e,s).then(t=>{const i=this._layer.sourceNameToSource,r=[];for(const n in i)r.push(n);return this._getSourcesData(r,t,s)})}parseTileData(e,s){const t=e&&e.data;if(!t)return Promise.resolve(null);const{sourceName2DataAndRefKey:i,transferList:r}=t;return Object.keys(i).length===0?Promise.resolve(null):this._broadcastPromise.then(()=>this._connection.invoke("createTileAndParse",{key:e.key.id,sourceName2DataAndRefKey:i,styleLayerUIDs:e.styleLayerUIDs},{...s,transferList:r}))}async getSprites(e){return await this._spriteSourcePromise,this._spriteMosaic.getSpriteItems(e)}getGlyphs(e){return this._glyphMosaic.getGlyphItems(e.font,e.codePoints)}async _getTilePayload(e,s,t){const i=B.pool.acquire(e.id),r=this._layer.sourceNameToSource[s],{level:n,row:o,col:a}=i;B.pool.release(i);try{return{protobuff:await r.requestTile(n,o,a,t),sourceName:s}}catch(h){if(Z(h))throw h;return{protobuff:null,sourceName:s}}}_getRefKeys(e,s){const t=this._layer.sourceNameToSource,i=new Array;for(const r in t){const n=t[r].getRefKey(e,s);i.push(n)}return ne(i)}_getSourcesData(e,s,t){const i=[];for(let r=0;r<s.length;r++)if(s[r].value==null||e[r]==null)i.push(null);else{const n=this._getTilePayload(s[r].value,e[r],t);i.push(n)}return ne(i).then(r=>{const n={},o=[];for(let a=0;a<r.length;a++)if(r[a].value&&r[a].value&&r[a].value.protobuff&&r[a].value.protobuff.byteLength>0){const h=s[a].value.id;n[r[a].value.sourceName]={refKey:h,protobuff:r[a].value.protobuff},o.push(r[a].value.protobuff)}return{sourceName2DataAndRefKey:n,transferList:o}})}}const de=512,lt=1e-6,ht=(l,e)=>l+1/(1<<2*e);class ct{constructor(e,s){this._tiles=new Map,this._tileCache=new Le(40,t=>t.dispose()),this._viewSize=[0,0],this._visibleTiles=new Map,this.acquireTile=e.acquireTile,this.releaseTile=e.releaseTile,this.tileInfoView=e.tileInfoView,this._container=s}destroy(){for(const[e,s]of this._tiles)s.dispose();this._tiles=null,this._tileCache.clear(),this._tileCache=null}update(e){this._updateCacheSize(e);const s=this.tileInfoView,t=s.getTileCoverage(e.state,0,"smallest"),{spans:i,lodInfo:r}=t,{level:n}=r,o=this._tiles,a=new Set,h=new Set;for(const{row:u,colFrom:d,colTo:c}of i)for(let _=d;_<=c;_++){const f=B.getId(n,u,r.normalizeCol(_),r.getWorldForColumn(_)),g=this._getOrAcquireTile(f);a.add(f),g.processed()?this._addToContainer(g):h.add(new B(f))}for(const[u,d]of o)d.isCoverage=a.has(u);for(const u of h)this._findPlaceholdersForMissingTiles(u,a);let y=!1;for(const[u,d]of o)d.neededForCoverage=a.has(u),d.neededForCoverage||d.isHoldingForFade&&s.intersects(t,d.key)&&a.add(u),d.isFading&&(y=!0);for(const[u,d]of this._tiles)a.has(u)||this._releaseTile(u);return pe.pool.release(t),!y}clear(){this._tiles.clear(),this._tileCache.clear(),this._visibleTiles.clear()}clearCache(){this._tileCache.clear()}_findPlaceholdersForMissingTiles(e,s){const t=[];for(const[r,n]of this._tiles)this._addPlaceholderChild(t,n,e,s);const i=t.reduce(ht,0);Math.abs(1-i)<lt||this._addPlaceholderParent(e.id,s)}_addPlaceholderChild(e,s,t,i){s.key.level<=t.level||!s.hasData()||dt(t,s.key)&&(this._addToContainer(s),i.add(s.id),e.push(s.key.level-t.level))}_addPlaceholderParent(e,s){const t=this._tiles;let i=e;for(;;){if(i=ut(i),!i||s.has(i))return;const r=t.get(i);if(r&&r.hasData())return this._addToContainer(r),void s.add(r.id)}}_getOrAcquireTile(e){let s=this._tiles.get(e);return s||(s=this._tileCache.pop(e),s||(s=this.acquireTile(new B(e))),this._tiles.set(e,s),s)}_releaseTile(e){const s=this._tiles.get(e);this.releaseTile(s),this._removeFromContainer(s),this._tiles.delete(e),s.hasData()?this._tileCache.put(e,s,1):s.dispose()}_addToContainer(e){let s;const t=[],i=this._container;if(i.contains(e))return;const r=this._visibleTiles;for(const[n,o]of r)this._canConnectDirectly(e,o)&&t.push(o),O(s)&&this._canConnectDirectly(o,e)&&(s=o);if(p(s)){for(const n of t)s.childrenTiles.delete(n),e.childrenTiles.add(n),n.parentTile=e;s.childrenTiles.add(e),e.parentTile=s}else for(const n of t)e.childrenTiles.add(n),n.parentTile=e;r.set(e.id,e),i.addChild(e)}_removeFromContainer(e){if(this._visibleTiles.delete(e.id),this._container.removeChild(e),p(e.parentTile)){e.parentTile.childrenTiles.delete(e);for(const s of e.childrenTiles)p(e.parentTile)&&e.parentTile.childrenTiles.add(s)}for(const s of e.childrenTiles)s.parentTile=e.parentTile;e.parentTile=null,e.childrenTiles.clear()}_canConnectDirectly(e,s){const t=e.key;let{level:i,row:r,col:n,world:o}=s.key;const a=this._visibleTiles;for(;i>0;){if(i--,r>>=1,n>>=1,t.level===i&&t.row===r&&t.col===n&&t.world===o)return!0;if(a.has(`${i}/${r}/${n}/${o}`))return!1}return!1}_updateCacheSize(e){const s=e.state.size;if(s[0]===this._viewSize[0]&&s[1]===this._viewSize[1])return;const t=Math.ceil(s[0]/de)+1,i=Math.ceil(s[1]/de)+1;this._viewSize[0]=s[0],this._viewSize[1]=s[1],this._tileCache.maxSize=5*t*i}}function ut(l){const[e,s,t,i]=l.split("/"),r=parseInt(e,10);return r===0?null:`${r-1}/${parseInt(s,10)>>1}/${parseInt(t,10)>>1}/${parseInt(i,10)}`}function dt(l,e){const s=e.level-l.level;return l.row===e.row>>s&&l.col===e.col>>s&&l.world===e.world}class yt{constructor(e){this.xTile=0,this.yTile=0,this.hash=0,this.priority=1,this.colliders=[],this.textVertexRanges=[],this.iconVertexRanges=[],this.tile=e}}class ft{constructor(){this.tileSymbols=[],this.parts=[{startTime:0,startOpacity:0,targetOpacity:0,show:!1},{startTime:0,startOpacity:0,targetOpacity:0,show:!1}],this.show=!1}}function ye(l,e,s,t,i,r){const n=s-i;if(n>=0)return(e>>n)+(t-(r<<n))*(l>>n);const o=-n;return e-(r-(t<<o))*(l>>o)<<o}class Ce{constructor(e,s,t){this._rows=Math.ceil(s/t),this._columns=Math.ceil(e/t),this._cellSize=t,this.cells=new Array(this._rows);for(let i=0;i<this._rows;i++){this.cells[i]=new Array(this._columns);for(let r=0;r<this._columns;r++)this.cells[i][r]=[]}}getCell(e,s){const t=Math.min(Math.max(Math.floor(s/this._cellSize),0),this._rows-1),i=Math.min(Math.max(Math.floor(e/this._cellSize),0),this._columns-1);return this.cells[t]&&this.cells[t][i]||null}getCellSpan(e,s,t,i){return[Math.min(Math.max(Math.floor(e/this._cellSize),0),this.columns-1),Math.min(Math.max(Math.floor(s/this._cellSize),0),this.rows-1),Math.min(Math.max(Math.floor(t/this._cellSize),0),this.columns-1),Math.min(Math.max(Math.floor(i/this._cellSize),0),this.rows-1)]}get cellSize(){return this._cellSize}get columns(){return this._columns}get rows(){return this._rows}}function _t(l,e,s,t,i,r){const n=e[t++];for(let o=0;o<n;o++){const a=new yt(r);a.xTile=e[t++],a.yTile=e[t++],a.hash=e[t++],a.priority=e[t++];const h=e[t++];for(let d=0;d<h;d++){const c=e[t++],_=e[t++],f=e[t++],g=e[t++],m=!!e[t++],w=e[t++],b=s[t++],x=s[t++],A=e[t++],S=e[t++];a.colliders.push({xTile:c,yTile:_,dxPixels:f,dyPixels:g,hard:m,partIndex:w,width:A,height:S,minLod:b,maxLod:x})}const y=l[t++];for(let d=0;d<y;d++)a.textVertexRanges.push([l[t++],l[t++]]);const u=l[t++];for(let d=0;d<u;d++)a.iconVertexRanges.push([l[t++],l[t++]]);i.push(a)}return t}function pt(l,e,s){for(const[t,i]of l.symbols)gt(l,e,s,i,t)}function gt(l,e,s,t,i){const r=l.layerData.get(i);if(r.type===P.SYMBOL){for(const n of t){const o=n.unique;let a;if(n.selectedForRendering){const h=o.parts[0],y=h.startOpacity,u=h.targetOpacity;l.allSymbolsFadingOut=l.allSymbolsFadingOut&&u===0;const d=s?Math.floor(127*y)|u<<7:u?255:0;a=d<<24|d<<16|d<<8|d}else a=0;for(const[h,y]of n.iconVertexRanges)for(let u=h;u<h+y;u+=4)r.iconOpacity[u/4]=a;if(n.selectedForRendering){const h=o.parts[1],y=h.startOpacity,u=h.targetOpacity;l.allSymbolsFadingOut=l.allSymbolsFadingOut&&u===0;const d=s?Math.floor(127*y)|u<<7:u?255:0;a=d<<24|d<<16|d<<8|d}else a=0;for(const[h,y]of n.textVertexRanges)for(let u=h;u<h+y;u+=4)r.textOpacity[u/4]=a}r.lastOpacityUpdate=e,r.opacityChanged=!0}}class Y{constructor(e,s){this.layerUIDs=[],this.isDestroyed=!1,this._data=e,this.memoryUsed=e.byteLength;let t=1;const i=new Uint32Array(e);this.layerUIDs=[];const r=i[t++];for(let n=0;n<r;n++)this.layerUIDs[n]=i[t++];this.bufferDataOffset=t,s&&(this.layer=s.getStyleLayerByUID(this.layerUIDs[0]))}get isPreparedForRendering(){return O(this._data)}get offset(){return this.bufferDataOffset}destroy(){this.isDestroyed||(this.doDestroy(),this.isDestroyed=!0)}prepareForRendering(e){O(this._data)||(this.doPrepareForRendering(e,this._data,this.bufferDataOffset),this._data=null)}}class mt extends Y{constructor(e,s){super(e,s),this.type=P.LINE,this.lineIndexStart=0,this.lineIndexCount=0;const t=new Uint32Array(e);let i=this.bufferDataOffset;this.lineIndexStart=t[i++],this.lineIndexCount=t[i++];const r=t[i++];if(r>0){const n=new Map;for(let o=0;o<r;o++){const a=t[i++],h=t[i++],y=t[i++];n.set(a,[h,y])}this.patternMap=n}this.bufferDataOffset=i}hasData(){return this.lineIndexCount>0}triangleCount(){return this.lineIndexCount/3}doDestroy(){p(this.lineVertexArrayObject)&&this.lineVertexArrayObject.dispose(),p(this.lineVertexBuffer)&&this.lineVertexBuffer.dispose(),p(this.lineIndexBuffer)&&this.lineIndexBuffer.dispose(),this.lineVertexArrayObject=null,this.lineVertexBuffer=null,this.lineIndexBuffer=null,this.memoryUsed=0}doPrepareForRendering(e,s,t){const i=new Uint32Array(s),r=new Int32Array(i.buffer),n=i[t++];this.lineVertexBuffer=C.createVertex(e,I.STATIC_DRAW,new Int32Array(r.buffer,4*t,n)),t+=n;const o=i[t++];this.lineIndexBuffer=C.createIndex(e,I.STATIC_DRAW,new Uint32Array(i.buffer,4*t,o)),t+=o;const a=this.layer.lineMaterial;this.lineVertexArrayObject=new z(e,a.getAttributeLocations(),a.getLayoutInfo(),{geometry:this.lineVertexBuffer},this.lineIndexBuffer)}}class bt extends Y{constructor(e,s){super(e,s),this.type=P.FILL,this.fillIndexStart=0,this.fillIndexCount=0,this.outlineIndexStart=0,this.outlineIndexCount=0;const t=new Uint32Array(e);let i=this.bufferDataOffset;this.fillIndexStart=t[i++],this.fillIndexCount=t[i++],this.outlineIndexStart=t[i++],this.outlineIndexCount=t[i++];const r=t[i++];if(r>0){const n=new Map;for(let o=0;o<r;o++){const a=t[i++],h=t[i++],y=t[i++];n.set(a,[h,y])}this.patternMap=n}this.bufferDataOffset=i}hasData(){return this.fillIndexCount>0||this.outlineIndexCount>0}triangleCount(){return(this.fillIndexCount+this.outlineIndexCount)/3}doDestroy(){p(this.fillVertexArrayObject)&&this.fillVertexArrayObject.dispose(),p(this.fillVertexBuffer)&&this.fillVertexBuffer.dispose(),p(this.fillIndexBuffer)&&this.fillIndexBuffer.dispose(),this.fillVertexArrayObject=null,this.fillVertexBuffer=null,this.fillIndexBuffer=null,p(this.outlineVertexArrayObject)&&this.outlineVertexArrayObject.dispose(),p(this.outlineVertexBuffer)&&this.outlineVertexBuffer.dispose(),p(this.outlineIndexBuffer)&&this.outlineIndexBuffer.dispose(),this.outlineVertexArrayObject=null,this.outlineVertexBuffer=null,this.outlineIndexBuffer=null,this.memoryUsed=0}doPrepareForRendering(e,s,t){const i=new Uint32Array(s),r=new Int32Array(i.buffer),n=i[t++];this.fillVertexBuffer=C.createVertex(e,I.STATIC_DRAW,new Int32Array(r.buffer,4*t,n)),t+=n;const o=i[t++];this.fillIndexBuffer=C.createIndex(e,I.STATIC_DRAW,new Uint32Array(i.buffer,4*t,o)),t+=o;const a=i[t++];this.outlineVertexBuffer=C.createVertex(e,I.STATIC_DRAW,new Int32Array(r.buffer,4*t,a)),t+=a;const h=i[t++];this.outlineIndexBuffer=C.createIndex(e,I.STATIC_DRAW,new Uint32Array(i.buffer,4*t,h)),t+=h;const y=this.layer,u=y.fillMaterial,d=y.outlineMaterial;this.fillVertexArrayObject=new z(e,u.getAttributeLocations(),u.getLayoutInfo(),{geometry:this.fillVertexBuffer},this.fillIndexBuffer),this.outlineVertexArrayObject=new z(e,d.getAttributeLocations(),d.getLayoutInfo(),{geometry:this.outlineVertexBuffer},this.outlineIndexBuffer)}}class wt extends Y{constructor(e,s,t){super(e,s),this.type=P.SYMBOL,this.iconPerPageElementsMap=new Map,this.glyphPerPageElementsMap=new Map,this.symbolInstances=[],this.isIconSDF=!1,this.opacityChanged=!1,this.lastOpacityUpdate=0,this.symbols=[];const i=new Uint32Array(e),r=new Int32Array(e),n=new Float32Array(e);let o=this.bufferDataOffset;this.isIconSDF=!!i[o++];const a=i[o++];for(let d=0;d<a;d++){const c=i[o++],_=i[o++],f=i[o++];this.iconPerPageElementsMap.set(c,[_,f])}const h=i[o++];for(let d=0;d<h;d++){const c=i[o++],_=i[o++],f=i[o++];this.glyphPerPageElementsMap.set(c,[_,f])}const y=i[o++],u=i[o++];this.iconOpacity=new Int32Array(y),this.textOpacity=new Int32Array(u),o=_t(i,r,n,o,this.symbols,t),this.bufferDataOffset=o}hasData(){return this.iconPerPageElementsMap.size>0||this.glyphPerPageElementsMap.size>0}triangleCount(){let e=0;for(const[s,t]of this.iconPerPageElementsMap)e+=t[1];for(const[s,t]of this.glyphPerPageElementsMap)e+=t[1];return e/3}doDestroy(){p(this.iconVertexArrayObject)&&this.iconVertexArrayObject.dispose(),p(this.iconVertexBuffer)&&this.iconVertexBuffer.dispose(),p(this.iconOpacityBuffer)&&this.iconOpacityBuffer.dispose(),p(this.iconIndexBuffer)&&this.iconIndexBuffer.dispose(),this.iconVertexArrayObject=null,this.iconVertexBuffer=null,this.iconOpacityBuffer=null,this.iconIndexBuffer=null,p(this.textVertexArrayObject)&&this.textVertexArrayObject.dispose(),p(this.textVertexBuffer)&&this.textVertexBuffer.dispose(),p(this.textOpacityBuffer)&&this.textOpacityBuffer.dispose(),p(this.textIndexBuffer)&&this.textIndexBuffer.dispose(),this.textVertexArrayObject=null,this.textVertexBuffer=null,this.textOpacityBuffer=null,this.textIndexBuffer=null,this.memoryUsed=0}updateOpacityInfo(){if(!this.opacityChanged)return;this.opacityChanged=!1;const e=k(this.iconOpacity),s=k(this.iconOpacityBuffer);e.length>0&&e.byteLength===s.size&&s.setSubData(e,0,0,e.length);const t=k(this.textOpacity),i=k(this.textOpacityBuffer);t.length>0&&t.byteLength===i.size&&i.setSubData(t,0,0,t.length)}doPrepareForRendering(e,s,t){const i=new Uint32Array(s),r=new Int32Array(i.buffer),n=i[t++];this.iconVertexBuffer=C.createVertex(e,I.STATIC_DRAW,new Int32Array(r.buffer,4*t,n)),t+=n;const o=i[t++];this.iconIndexBuffer=C.createIndex(e,I.STATIC_DRAW,new Uint32Array(i.buffer,4*t,o)),t+=o;const a=i[t++];this.textVertexBuffer=C.createVertex(e,I.STATIC_DRAW,new Int32Array(r.buffer,4*t,a)),t+=a;const h=i[t++];this.textIndexBuffer=C.createIndex(e,I.STATIC_DRAW,new Uint32Array(i.buffer,4*t,h)),t+=h,this.iconOpacityBuffer=C.createVertex(e,I.STATIC_DRAW,k(this.iconOpacity).buffer),this.textOpacityBuffer=C.createVertex(e,I.STATIC_DRAW,k(this.textOpacity).buffer);const y=this.layer,u=y.iconMaterial,d=y.textMaterial;this.iconVertexArrayObject=new z(e,u.getAttributeLocations(),u.getLayoutInfo(),{geometry:this.iconVertexBuffer,opacity:this.iconOpacityBuffer},this.iconIndexBuffer),this.textVertexArrayObject=new z(e,d.getAttributeLocations(),d.getLayoutInfo(),{geometry:this.textVertexBuffer,opacity:this.textOpacityBuffer},this.textIndexBuffer)}}class xt extends Y{constructor(e,s){super(e,s),this.type=P.CIRCLE,this.circleIndexStart=0,this.circleIndexCount=0;const t=new Uint32Array(e);let i=this.bufferDataOffset;this.circleIndexStart=t[i++],this.circleIndexCount=t[i++],this.bufferDataOffset=i}hasData(){return this.circleIndexCount>0}triangleCount(){return this.circleIndexCount/3}doDestroy(){p(this.circleVertexArrayObject)&&this.circleVertexArrayObject.dispose(),p(this.circleVertexBuffer)&&this.circleVertexBuffer.dispose(),p(this.circleIndexBuffer)&&this.circleIndexBuffer.dispose(),this.circleVertexArrayObject=null,this.circleVertexBuffer=null,this.circleIndexBuffer=null,this.memoryUsed=0}doPrepareForRendering(e,s,t){const i=new Uint32Array(s),r=new Int32Array(i.buffer),n=i[t++];this.circleVertexBuffer=C.createVertex(e,I.STATIC_DRAW,new Int32Array(r.buffer,4*t,n)),t+=n;const o=i[t++];this.circleIndexBuffer=C.createIndex(e,I.STATIC_DRAW,new Uint32Array(i.buffer,4*t,o)),t+=o;const a=this.layer.circleMaterial;this.circleVertexArrayObject=new z(e,a.getAttributeLocations(),a.getLayoutInfo(),{geometry:this.circleVertexBuffer},this.circleIndexBuffer)}}class se extends Ie{constructor(e,s,t,i,r,n,o,a=null){super(e,s,t,i,r,n,4096,4096),this._memCache=a,this.type="vector-tile",this._referenced=0,this._hasSymbolBuckets=!1,this._memoryUsedByLayerData=0,this.layerData=new Map,this.layerCount=0,this.status="loading",this.allSymbolsFadingOut=!1,this.lastOpacityUpdate=0,this.symbols=new Map,this.isCoverage=!1,this.neededForCoverage=!1,this.decluttered=!1,this.invalidating=!1,this.parentTile=null,this.childrenTiles=new Set,this._processed=!1,this._referenced=1,this.styleRepository=o,this.id=e.id}get hasSymbolBuckets(){return this._hasSymbolBuckets}get isFading(){return this._hasSymbolBuckets&&performance.now()-this.lastOpacityUpdate<J}get isHoldingForFade(){return this._hasSymbolBuckets&&(!this.allSymbolsFadingOut||performance.now()-this.lastOpacityUpdate<J)}get wasRequested(){return this.status==="errored"||this.status==="loaded"||this.status==="reloading"}setData(e){this.changeDataImpl(e),this.requestRender(),this.ready(),this.invalidating=!1,this._processed=!0}deleteLayerData(e){let s=!1;for(const t of e)if(this.layerData.has(t)){const i=this.layerData.get(t);this._memoryUsedByLayerData-=i.memoryUsed,i.type===P.SYMBOL&&this.symbols.has(t)&&(this.symbols.delete(t),s=!0),i.destroy(),this.layerData.delete(t),this.layerCount--}p(this._memCache)&&this._memCache.updateSize(this.key.id,this,this._memoryUsedByLayerData),s&&this.emit("symbols-changed"),this.requestRender()}processed(){return this._processed}hasData(){return this.layerCount>0}dispose(){this.status!=="unloaded"&&(St.delete(this),se._destroyRenderBuckets(this.layerData),this.layerData=null,this.layerCount=0,this._memoryUsedByLayerData=0,this.destroy(),this.status="unloaded")}release(){return--this._referenced==0&&(this.dispose(),this.stage=null,!0)}retain(){++this._referenced}get referenced(){return this._referenced}get memoryUsage(){return(this._memoryUsedByLayerData+256)/(this._referenced||1)}changeDataImpl(e){let s=!1;if(e){const{bucketsWithData:t,emptyBuckets:i}=e,r=this._createRenderBuckets(t);if(i&&i.byteLength>0){const n=new Uint32Array(i);for(const o of n)this._deleteLayerData(o)}for(const[n,o]of r)this._deleteLayerData(n),o.type===P.SYMBOL&&(this.symbols.set(n,o.symbols),s=!0),this._memoryUsedByLayerData+=o.memoryUsed,this.layerData.set(n,o),this.layerCount++;p(this._memCache)&&this._memCache.updateSize(this.key.id,this,this._memoryUsedByLayerData)}this._hasSymbolBuckets=!1;for(const[t,i]of this.layerData)i.type===P.SYMBOL&&(this._hasSymbolBuckets=!0);s&&this.emit("symbols-changed")}attachWithContext(e){this.stage={context:e,trashDisplayObject(s){s.processDetach()},untrashDisplayObject:()=>!1}}setTransform(e){super.setTransform(e);const s=this.resolution/(e.resolution*e.pixelRatio),t=this.width/this.rangeX*s,i=this.height/this.rangeY*s,r=[0,0];e.toScreen(r,[this.x,this.y]);const n=this.transforms.tileUnitsToPixels;ge(n),me(n,n,r),Be(n,n,Math.PI*e.rotation/180),be(n,n,[t,i,1])}_createTransforms(){return{dvs:q(),tileMat3:q(),tileUnitsToPixels:q()}}static _destroyRenderBuckets(e){if(!e)return;const s=new Set;e.forEach(t=>{s.has(t)||(t.destroy(),s.add(t))}),e.clear()}_createRenderBuckets(e){const s=new Map,t=new Map;for(const i of e){const r=this._deserializeBucket(i,t);for(const n of r.layerUIDs)s.set(n,r)}return s}_deserializeBucket(e,s){let t=s.get(e);if(t)return t;switch(new Uint32Array(e)[0]){case P.FILL:t=new bt(e,this.styleRepository);break;case P.LINE:t=new mt(e,this.styleRepository);break;case P.SYMBOL:t=new wt(e,this.styleRepository,this);break;case P.CIRCLE:t=new xt(e,this.styleRepository)}return s.set(e,t),t}_deleteLayerData(e){if(!this.layerData.has(e))return;const s=this.layerData.get(e);this._memoryUsedByLayerData-=s.memoryUsed,s.destroy(),this.layerData.delete(e),this.layerCount--}}const St=new Map;function Tt(l,e,s,t,i,r){const{iconRotationAlignment:n,textRotationAlignment:o,iconTranslate:a,iconTranslateAnchor:h,textTranslate:y,textTranslateAnchor:u}=t;let d=0;for(const c of l.colliders){const[_,f]=c.partIndex===0?a:y,g=c.partIndex===0?h:u,m=c.minLod<=r&&r<=c.maxLod;d+=m?0:1,c.enabled=m,c.xScreen=c.xTile*i[0]+c.yTile*i[3]+i[6],c.yScreen=c.xTile*i[1]+c.yTile*i[4]+i[7],g===et.MAP?(c.xScreen+=s*_-e*f,c.yScreen+=e*_+s*f):(c.xScreen+=_,c.yScreen+=f),V.VIEWPORT===(c.partIndex===0?n:o)?(c.dxScreen=c.dxPixels,c.dyScreen=c.dyPixels):(c.dxScreen=s*(c.dxPixels+c.width/2)-e*(c.dyPixels+c.height/2)-c.width/2,c.dyScreen=e*(c.dxPixels+c.width/2)+s*(c.dyPixels+c.height/2)-c.height/2)}l.colliders.length>0&&d===l.colliders.length&&(l.unique.show=!1)}class It{constructor(e,s,t,i,r,n){this._symbols=e,this._styleRepository=i,this._zoom=r,this._currentLayerCursor=0,this._currentSymbolCursor=0,this._styleProps=new Map,this._allNeededMatrices=new Map,this._gridIndex=new Ce(s,t,Ye),this._si=Math.sin(Math.PI*n/180),this._co=Math.cos(Math.PI*n/180);for(const o of e)for(const a of o.symbols)this._allNeededMatrices.has(a.tile)||this._allNeededMatrices.set(a.tile,Oe(a.tile.transforms.tileUnitsToPixels))}work(e){const s=this._gridIndex;function t(r){const n=r.xScreen+r.dxScreen,o=r.yScreen+r.dyScreen,a=n+r.width,h=o+r.height,[y,u,d,c]=s.getCellSpan(n,o,a,h);for(let _=u;_<=c;_++)for(let f=y;f<=d;f++){const g=s.cells[_][f];for(const m of g){const w=m.xScreen+m.dxScreen,b=m.yScreen+m.dyScreen,x=w+m.width,A=b+m.height;if(!(a<w||n>x||h<b||o>A))return!0}}return!1}const i=performance.now();for(;this._currentLayerCursor<this._symbols.length;this._currentLayerCursor++,this._currentSymbolCursor=0){const r=this._symbols[this._currentLayerCursor],n=this._getProperties(r.styleLayerUID);for(;this._currentSymbolCursor<r.symbols.length;this._currentSymbolCursor++){if(this._currentSymbolCursor%100==99&&performance.now()-i>e)return!1;const o=r.symbols[this._currentSymbolCursor];if(!o.unique.show)continue;Tt(o,this._si,this._co,n,this._allNeededMatrices.get(o.tile),this._zoom);const a=o.unique;if(!a.show)continue;const{iconAllowOverlap:h,iconIgnorePlacement:y,textAllowOverlap:u,textIgnorePlacement:d}=n;for(const c of o.colliders){if(!c.enabled)continue;const _=a.parts[c.partIndex];!_.show||!(c.partIndex?u:h)&&t(c)&&(c.hard?a.show=!1:_.show=!1)}if(a.show)for(const c of o.colliders){if(!c.enabled||(c.partIndex?d:y)||!a.parts[c.partIndex].show)continue;const _=c.xScreen+c.dxScreen,f=c.yScreen+c.dyScreen,g=_+c.width,m=f+c.height,[w,b,x,A]=this._gridIndex.getCellSpan(_,f,g,m);for(let S=b;S<=A;S++)for(let R=w;R<=x;R++)this._gridIndex.cells[S][R].push(c)}}}return!0}_getProperties(e){const s=this._styleProps.get(e);if(s)return s;const t=this._zoom,i=this._styleRepository.getStyleLayerByUID(e),r=i.getLayoutValue("symbol-placement",t)!==Ze.POINT;let n=i.getLayoutValue("icon-rotation-alignment",t);n===V.AUTO&&(n=r?V.MAP:V.VIEWPORT);let o=i.getLayoutValue("text-rotation-alignment",t);o===V.AUTO&&(o=r?V.MAP:V.VIEWPORT);const a=i.getPaintValue("icon-translate",t),h=i.getPaintValue("icon-translate-anchor",t),y=i.getPaintValue("text-translate",t),u=i.getPaintValue("text-translate-anchor",t),d={iconAllowOverlap:i.getLayoutValue("icon-allow-overlap",t),iconIgnorePlacement:i.getLayoutValue("icon-ignore-placement",t),textAllowOverlap:i.getLayoutValue("text-allow-overlap",t),textIgnorePlacement:i.getLayoutValue("text-ignore-placement",t),iconRotationAlignment:n,textRotationAlignment:o,iconTranslateAnchor:h,iconTranslate:a,textTranslateAnchor:u,textTranslate:y};return this._styleProps.set(e,d),d}}function Ct(l,e){if(l.priority-e.priority)return l.priority-e.priority;const s=l.tile.key,t=e.tile.key;return s.world-t.world?s.world-t.world:s.level-t.level?s.level-t.level:s.row-t.row?s.row-t.row:s.col-t.col?s.col-t.col:l.xTile-e.xTile?l.xTile-e.xTile:l.yTile-e.yTile}class vt{constructor(e,s,t,i,r,n){this._visibleTiles=e,this._symbolRepository=s,this._createCollisionJob=t,this._assignTileSymbolsOpacity=i,this._symbolLayerSorter=r,this._isLayerVisible=n,this._selectionJob=null,this._selectionJobCompleted=!1,this._collisionJob=null,this._collisionJobCompleted=!1,this._opacityJob=null,this._opacityJobCompleted=!1,this._running=!0}get running(){return this._running}setScreenSize(e,s){this._screenWidth===e&&this._screenHeight===s||this.restart(),this._screenWidth=e,this._screenHeight=s}restart(){this._selectionJob=null,this._selectionJobCompleted=!1,this._collisionJob=null,this._collisionJobCompleted=!1,this._opacityJob=null,this._opacityJobCompleted=!1,this._running=!0}continue(e){if(this._selectionJob||(this._selectionJob=this._createSelectionJob()),!this._selectionJobCompleted){const s=performance.now();if(!this._selectionJob.work(e)||(this._selectionJobCompleted=!0,(e=Math.max(0,e-(performance.now()-s)))===0))return!1}if(this._collisionJob||(this._collisionJob=this._createCollisionJob(this._selectionJob.sortedSymbols,this._screenWidth,this._screenHeight)),!this._collisionJobCompleted){const s=performance.now();if(!this._collisionJob.work(e)||(this._collisionJobCompleted=!0,(e=Math.max(0,e-(performance.now()-s)))===0))return!1}if(this._opacityJob||(this._opacityJob=this._createOpacityJob()),!this._opacityJobCompleted){const s=performance.now();if(!this._opacityJob.work(e)||(this._opacityJobCompleted=!0,(e=Math.max(0,e-(performance.now()-s)))===0))return!1}return this._running=!1,!0}_createSelectionJob(){const e=this._symbolRepository.uniqueSymbols;for(let a=0;a<e.length;a++){const h=e[a];for(let y=0;y<h.uniqueSymbols.length;y++){const u=h.uniqueSymbols[y];for(const d of u.tileSymbols)d.selectedForRendering=!1}}const s=[];let t=0,i=0;const r=this._isLayerVisible;function n(a){let h;const y=performance.now();for(;i<e.length;i++,t=0){const u=e[i],d=u.styleLayerUID;if(!r(d)){s[i]||(s[i]={styleLayerUID:d,symbols:[]});continue}s[i]=s[i]||{styleLayerUID:d,symbols:[]};const c=s[i];for(;t<u.uniqueSymbols.length;t++){if(h=u.uniqueSymbols[t],t%100==99&&performance.now()-y>a)return!1;let _=null,f=!1,g=!1;for(const m of h.tileSymbols)if(!g||!f){const w=m.tile;(!_||w.isCoverage||w.neededForCoverage&&!f)&&(_=m,(w.neededForCoverage||w.isCoverage)&&(g=!0),w.isCoverage&&(f=!0))}if(_.selectedForRendering=!0,g){c.symbols.push(_),h.show=!0;for(const m of h.parts)m.show=!0}else h.show=!1}}for(const u of s)u.symbols.sort(Ct);return!0}const o=this._symbolLayerSorter;return{work:n,get sortedSymbols(){return s.sort(o)}}}_createOpacityJob(){const e=this._assignTileSymbolsOpacity,s=this._visibleTiles;let t=0;function i(r,n){const o=r.symbols;for(const[a,h]of o)Dt(h,n);e(r,n);for(const a of r.childrenTiles)i(a,n)}return{work(r){const n=performance.now();for(;t<s.length;t++){if(performance.now()-n>r)return!1;const o=s[t];p(o.parentTile)||i(o,performance.now())}return!0}}}}function Dt(l,e){for(const s of l){const t=s.unique;for(const i of t.parts){const r=i.targetOpacity>.5?1:-1;i.startOpacity+=r*((e-i.startTime)/J),i.startOpacity=Math.min(Math.max(i.startOpacity,0),1),i.startTime=e,i.targetOpacity=t.show&&i.show?1:0}}}const Rt=32,At=8,Pt=64;class Mt{constructor(e,s,t){this.tileCoordRange=e,this._visibleTiles=s,this._createUnique=t,this._tiles=new Map,this._uniqueSymbolsReferences=new Map}get uniqueSymbols(){return O(this._uniqueSymbolLayerArray)&&(this._uniqueSymbolLayerArray=this._createUniqueSymbolLayerArray()),this._uniqueSymbolLayerArray}add(e,s){this._uniqueSymbolLayerArray=null;let t=this._tiles.get(e.id);t||(t={symbols:new Map},this._tiles.set(e.id,t));const i=new Map;if(s)for(const o of s)t.symbols.has(o)&&(i.set(o,t.symbols.get(o)),t.symbols.delete(o));else for(const[o,a]of e.layerData)t.symbols.has(o)&&(i.set(o,t.symbols.get(o)),t.symbols.delete(o));this._removeSymbols(i);const r=e.symbols,n=new Map;for(const[o,a]of r){let h=a.length;if(h>=Rt){let y=this.tileCoordRange;do y/=2,h/=4;while(h>At&&y>Pt);const u=new Ce(this.tileCoordRange,this.tileCoordRange,y);n.set(o,{flat:a,index:u}),t.symbols.set(o,{flat:a,index:u});for(const d of a)u.getCell(d.xTile,d.yTile).push(d)}else n.set(o,{flat:a}),t.symbols.set(o,{flat:a})}this._addSymbols(e.key,r)}deleteStyleLayers(e){this._uniqueSymbolLayerArray=null;for(const[s,t]of this._tiles){const i=new Map;for(const r of e)t.symbols.has(r)&&(i.set(r,t.symbols.get(r)),t.symbols.delete(r));this._removeSymbols(i),t.symbols.size===0&&this._tiles.delete(s)}}removeTile(e){this._uniqueSymbolLayerArray=null;const s=this._tiles.get(e.id);if(!s)return;const t=new Map;for(const[i,r]of e.symbols)s.symbols.has(i)&&(t.set(i,s.symbols.get(i)),s.symbols.delete(i));this._removeSymbols(t),s.symbols.size===0&&this._tiles.delete(e.id)}_removeSymbols(e){for(const[s,{flat:t}]of e)for(const i of t){const r=i.unique,n=r.tileSymbols,o=n.length-1;for(let a=0;a<o;a++)if(n[a]===i){n[a]=n[o];break}if(n.length=o,o===0){const a=this._uniqueSymbolsReferences.get(s);a.delete(r),a.size===0&&this._uniqueSymbolsReferences.delete(s)}i.unique=null}}_addSymbols(e,s){if(s.size===0)return;const t=this._visibleTiles;for(const i of t)i.parentTile||i.key.world!==e.world||i.key.level===e.level&&!i.key.equals(e)||this._matchSymbols(i,e,s);for(const[i,r]of s)for(const n of r)if(O(n.unique)){const o=this._createUnique();n.unique=o,o.tileSymbols.push(n);let a=this._uniqueSymbolsReferences.get(i);a||(a=new Set,this._uniqueSymbolsReferences.set(i,a)),a.add(o)}}_matchSymbols(e,s,t){if(e.key.level>s.level){const r=e.key.level-s.level;if(e.key.row>>r!==s.row||e.key.col>>r!==s.col)return}if(s.level>e.key.level){const r=s.level-e.key.level;if(s.row>>r!==e.key.row||s.col>>r!==e.key.col)return}if(s.equals(e.key)){for(const r of e.childrenTiles)this._matchSymbols(r,s,t);return}const i=new Map;for(const[r,n]of t){const o=[];for(const u of n){const d=ye(this.tileCoordRange,u.xTile,s.level,s.col,e.key.level,e.key.col),c=ye(this.tileCoordRange,u.yTile,s.level,s.row,e.key.level,e.key.row);d>=0&&d<this.tileCoordRange&&c>=0&&c<this.tileCoordRange&&o.push({symbol:u,xTransformed:d,yTransformed:c})}const a=[],h=e.key.level<s.level?1:1<<e.key.level-s.level,y=this._tiles.get(e.id).symbols.get(r);if(y){const u=y.flat;for(const d of o){let c,_=!1;const f=d.xTransformed,g=d.yTransformed;c=p(y.index)?y.index.getCell(f,g):u;const m=d.symbol,w=m.hash;for(const b of c)if(w===b.hash&&Math.abs(f-b.xTile)<=h&&Math.abs(g-b.yTile)<=h){const x=b.unique;m.unique=x,x.tileSymbols.push(m),_=!0;break}_||a.push(m)}}a.length>0&&i.set(r,a)}for(const r of e.childrenTiles)this._matchSymbols(r,s,i)}_createUniqueSymbolLayerArray(){const e=this._uniqueSymbolsReferences,s=new Array(e.size);let t,i=0;for(const[r,n]of e){const o=new Array(n.size);t=0;for(const a of n)o[t++]=a;s[i]={styleLayerUID:r,uniqueSymbols:o},i++}return s}}const Lt=.5,fe=1e-6;class Bt extends Ue{constructor(e,s){super(),this.styleRepository=e,this._tileToHandle=new Map,this._viewState={scale:0,rotation:0,center:[0,0],size:[0,0]},this._declutterViewState={scale:0,rotation:0,center:[0,0],size:[0,0]},this._completed=!1,this._symbolRepository=new Mt(4096,s,()=>new ft),this._symbolDeclutterer=new vt(s,this._symbolRepository,(t,i,r)=>new It(t,i,r,this.styleRepository,this._zoom,this._viewState.rotation),(t,i)=>{t.allSymbolsFadingOut=!0,t.lastOpacityUpdate=i,pt(t,i,!0),t.decluttered=!0,t.requestRender()},(t,i)=>this.styleRepository.getStyleLayerByUID(t.styleLayerUID).z-this.styleRepository.getStyleLayerByUID(i.styleLayerUID).z,t=>{const i=this.styleRepository.getStyleLayerByUID(t);if(this._zoom+fe<i.minzoom||this._zoom-fe>=i.maxzoom)return!1;const r=i.getLayoutProperty("visibility");return!r||r.getValue()!==te.NONE})}addTile(e){e.decluttered=!1,this._tileToHandle.set(e,e.on("symbols-changed",()=>{this._symbolRepository.add(e),this.restartDeclutter()})),this._symbolRepository.add(e),this.restartDeclutter()}removeTile(e){const s=this._tileToHandle.get(e);s&&(this._symbolRepository.removeTile(e),this.restartDeclutter(),s.remove(),this._tileToHandle.delete(e))}update(e,s){return this._zoom=e,this._viewState={scale:s.scale,rotation:s.rotation,center:[s.center[0],s.center[1]],size:[s.size[0],s.size[1]]},this._continueDeclutter(),this._completed}restartDeclutter(){this._completed=!1,this._symbolDeclutterer.restart(),this._notifyUnstable()}clear(){this._completed=!1,this._symbolRepository=null,this._symbolDeclutterer.restart(),this._tileToHandle.forEach(e=>e.remove()),this._tileToHandle.clear()}get stale(){return this._zoom!==this._declutterZoom||this._viewState.size[0]!==this._declutterViewState.size[0]||this._viewState.size[1]!==this._declutterViewState.size[1]||this._viewState.scale!==this._declutterViewState.scale||this._viewState.rotation!==this._declutterViewState.rotation}deleteStyleLayers(e){this._symbolRepository.deleteStyleLayers(e)}_continueDeclutter(){this._completed&&!this.stale||(this._symbolDeclutterer.running||(this._declutterZoom=this._zoom,this._declutterViewState.center[0]=this._viewState.center[0],this._declutterViewState.center[1]=this._viewState.center[1],this._declutterViewState.rotation=this._viewState.rotation,this._declutterViewState.scale=this._viewState.scale,this._declutterViewState.size[0]=this._viewState.size[0],this._declutterViewState.size[1]=this._viewState.size[1],this._symbolDeclutterer.restart()),this._symbolDeclutterer.setScreenSize(this._viewState.size[0],this._viewState.size[1]),this._completed=this._symbolDeclutterer.continue(Ke),this._completed&&this._scheduleNotifyStable())}_scheduleNotifyStable(){p(this._stableNotificationHandle)&&clearTimeout(this._stableNotificationHandle),this._stableNotificationHandle=setTimeout(()=>{this._stableNotificationHandle=null,this.emit("fade-complete")},(1+Lt)*J)}_notifyUnstable(){p(this._stableNotificationHandle)&&(clearTimeout(this._stableNotificationHandle),this._stableNotificationHandle=null),this.emit("fade-start")}}class Ot extends Ie{_createTransforms(){return{dvs:q(),tileMat3:q()}}}const G=1e-6;function _e(l,e){if(l){const s=l.getLayoutProperty("visibility");if(!s||s.getValue()!==te.NONE&&(l.minzoom===void 0||l.minzoom<e+G)&&(l.maxzoom===void 0||l.maxzoom>=e-G))return!0}return!1}class Ut extends Xe{constructor(e){super(e),this._backgroundTiles=[],this._pointToCallbacks=new Map}destroy(){this.removeAllChildren(),this._spriteMosaic&&(this._spriteMosaic.dispose(),this._spriteMosaic=null),this._glyphMosaic&&(this._glyphMosaic.dispose(),this._glyphMosaic=null),p(this._symbolFader)&&(this._symbolFader.clear(),this._symbolFader=null),this._styleRepository=null,this._backgroundTiles=[],this._pointToCallbacks.clear()}setStyleResources(e,s,t){if(this._spriteMosaic=e,this._glyphMosaic=s,this._styleRepository=t,O(this._symbolFader)){const i=new Bt(this._styleRepository,this.children);i.on("fade-start",()=>{this.emit("fade-start"),this.requestRender()}),i.on("fade-complete",()=>{this.emit("fade-complete"),this.requestRender()}),this._symbolFader=i}k(this._symbolFader).styleRepository=t}setSpriteMosaic(e){this._spriteMosaic.dispose(),this._spriteMosaic=e}deleteStyleLayers(e){p(this._symbolFader)&&this._symbolFader.deleteStyleLayers(e)}async hitTest(e){const s=ke();return this._pointToCallbacks.set(e,s),this.requestRender(),s.promise}enterTileInvalidation(){for(const e of this.children)e.invalidating=!0}createRenderParams(e){return{...super.createRenderParams(e),renderPass:null,styleLayer:null,styleLayerUID:-1,glyphMosaic:this._glyphMosaic,spriteMosaic:this._spriteMosaic,hasClipping:!!this._clippingInfos}}doRender(e){!this.visible||e.drawPhase!==U.MAP&&e.drawPhase!==U.DEBUG||this._spriteMosaic===void 0||super.doRender(e)}addChild(e){return super.addChild(e),p(this._symbolFader)?this._symbolFader.addTile(e):e.decluttered=!0,this.requestRender(),e}removeChild(e){return p(this._symbolFader)&&this._symbolFader.removeTile(e),this.requestRender(),super.removeChild(e)}renderChildren(e){const{drawPhase:s}=e;if(s!==U.DEBUG){if(this._doRender(e),this._pointToCallbacks.size>0){e.drawPhase=U.HITTEST;const t=e.painter.effects.hittestVTL;t.bind(e),this._doRender(e),t.draw(e,this._pointToCallbacks),t.unbind(e),e.drawPhase=s}}else super.renderChildren(e)}removeAllChildren(){for(let e=0;e<this.children.length;e++){const s=this.children[e];p(this._symbolFader)&&this._symbolFader.removeTile(s),s.dispose()}super.removeAllChildren()}getStencilTarget(){return this.children.filter(e=>e.neededForCoverage&&e.hasData())}restartDeclutter(){p(this._symbolFader)&&this._symbolFader.restartDeclutter()}_doRender(e){const{context:s}=e,t=this._styleRepository;if(!t)return;const i=t.layers;let r=!0;e.drawPhase===U.HITTEST&&(r=!1),t.backgroundBucketIds.length>0&&(e.renderPass="background",this._renderBackgroundLayers(e,t.backgroundBucketIds)),super.renderChildren(e),e.drawPhase===U.MAP&&this._fade(e.displayLevel,e.state);const n=this.children.filter(o=>o.visible&&o.hasData());if(!n||n.length===0)return s.bindVAO(),s.setStencilTestEnabled(!0),void s.setBlendingEnabled(!0);for(const o of n)o.triangleCount=0;s.setStencilWriteMask(0),s.setColorMask(!0,!0,!0,!0),s.setStencilOp(H.KEEP,H.KEEP,H.REPLACE),s.setStencilTestEnabled(!0),s.setBlendingEnabled(!1),s.setDepthTestEnabled(!0),s.setDepthWriteEnabled(!0),s.setDepthFunction(le.LEQUAL),s.setClearDepth(1),s.clear(s.gl.DEPTH_BUFFER_BIT),e.renderPass="opaque";for(let o=i.length-1;o>=0;o--)this._renderStyleLayer(i[o],e,n);s.setDepthWriteEnabled(!1),s.setBlendingEnabled(r),s.setBlendFunctionSeparate(F.ONE,F.ONE_MINUS_SRC_ALPHA,F.ONE,F.ONE_MINUS_SRC_ALPHA),e.renderPass="translucent";for(let o=0;o<i.length;o++)this._renderStyleLayer(i[o],e,n);s.bindVAO(),s.setStencilTestEnabled(!0),s.setBlendingEnabled(!0)}_fade(e,s){p(this._symbolFader)&&(this._symbolFader.update(e,s)||this.requestRender())}_renderStyleLayer(e,s,t){const{painter:i,renderPass:r}=s;if(e===void 0)return;const n=e.getLayoutProperty("visibility");if(n&&n.getValue()===te.NONE)return;let o;switch(e.type){case D.BACKGROUND:return;case D.FILL:if(r!=="opaque"&&s.renderPass!=="translucent")return;o="vtlFill";break;case D.LINE:if(r!=="translucent")return;o="vtlLine";break;case D.CIRCLE:if(r!=="translucent")return;o="vtlCircle";break;case D.SYMBOL:if(r!=="translucent")return;o="vtlSymbol"}if(t=e.type===D.SYMBOL?t.filter(h=>h.decluttered):t.filter(h=>h.neededForCoverage),o!=="vtlSymbol"){const h=s.displayLevel;if(t.length===0||e.minzoom!==void 0&&e.minzoom>=h+G||e.maxzoom!==void 0&&e.maxzoom<h-G)return}const a=e.uid;s.styleLayerUID=a,s.styleLayer=e;for(const h of t)if(h.layerData.has(a)){i.renderObjects(s,t,o);break}}_renderBackgroundLayers(e,s){const{context:t,displayLevel:i,painter:r,state:n}=e,o=this._styleRepository;let a=!1;for(const b of s)if(o.getLayerById(b).type===D.BACKGROUND&&_e(o.getLayerById(b),i)){a=!0;break}if(!a)return;const h=this._tileInfoView.getTileCoverage(e.state,0,"smallest"),{spans:y,lodInfo:u}=h,{level:d}=u,c=ee(),_=[];if(this._renderPasses){const b=this._renderPasses[0];p(this._clippingInfos)&&(b.brushes[0].prepareState(e),b.brushes[0].drawMany(e,this._clippingInfos))}const f=this._backgroundTiles;let g,m=0;for(const{row:b,colFrom:x,colTo:A}of y)for(let S=x;S<=A;S++){if(m<f.length)g=f[m],g.key.set(d,b,u.normalizeCol(S),u.getWorldForColumn(S)),this._tileInfoView.getTileBounds(c,g.key,!1),g.x=c[0],g.y=c[3],g.resolution=this._tileInfoView.getTileResolution(d);else{const R=new B(d,b,u.normalizeCol(S),u.getWorldForColumn(S)),L=this._tileInfoView.getTileBounds(ee(),R),$=this._tileInfoView.getTileResolution(d);g=new Ot(R,$,L[0],L[3],512,512,4096,4096),f.push(g)}g.setTransform(n),_.push(g),m++}t.setStencilWriteMask(0),t.setColorMask(!0,!0,!0,!0),t.setStencilOp(H.KEEP,H.KEEP,H.REPLACE),t.setStencilFunction(le.EQUAL,0,255);let w=!0;e.drawPhase===U.HITTEST&&(w=!1),t.setStencilTestEnabled(w);for(const b of s){const x=o.getLayerById(b);x.type===D.BACKGROUND&&_e(x,i)&&(e.styleLayerUID=x.uid,e.styleLayer=x,r.renderObjects(e,_,"vtlBackground"))}pe.pool.release(h)}}const kt={geometry:[new rt("a_PositionAndFlags",3,Se.SHORT,0,6)]},ie=new Map;ie.set("a_PositionAndFlags",0);const Vt={vsPath:"debug/overlay",fsPath:"debug/overlay",attributes:ie};class X extends it{constructor(e){super(),this._conf=e}static makeFlags(e,s){return e|s<<2}_createTransforms(){return{dvs:q()}}doRender(e){this._updateTransforms(e),this._ensureResources(e);const{context:s}=e;s.useProgram(this._program),this._program.setUniformMatrix3fv("u_dvsMat3",this.transforms.dvs),this._program.setUniform4fv("u_colors",this._conf.getColors(e)),this._program.setUniform1fv("u_opacities",this._conf.getOpacities(e));const{vertexData:t,indexData:i}=this._conf.getMesh(e);this._vertexBuffer.setData(t),this._indexBuffer.setData(i),s.bindVAO(this._vertexArray),s.setBlendingEnabled(!0),s.setBlendFunction(F.ONE,F.ONE_MINUS_SRC_ALPHA),s.setDepthTestEnabled(!1),s.setStencilTestEnabled(!1),s.setColorMask(!0,!0,!0,!0),s.drawElements(Je.TRIANGLES,i.length,Se.UNSIGNED_INT,0)}onDetach(){this._vertexArray&&(this._vertexArray.dispose(),this._vertexArray=null)}_updateTransforms(e){ge(this.transforms.dvs),me(this.transforms.dvs,this.transforms.dvs,[-1,1]),be(this.transforms.dvs,this.transforms.dvs,[2/e.state.size[0],-2/e.state.size[1],1])}_ensureResources(e){const{context:s}=e;this._program||(this._program=e.painter.materialManager.getProgram(Vt)),this._vertexBuffer||(this._vertexBuffer=C.createVertex(s,I.STREAM_DRAW)),this._indexBuffer||(this._indexBuffer=C.createIndex(s,I.STREAM_DRAW)),this._vertexArray||(this._vertexArray=new z(s,ie,kt,{geometry:this._vertexBuffer},this._indexBuffer))}}class Et extends Ve{constructor(){super(...arguments),this._fullCacheLodInfos=null,this._levelByScale={}}getTileParentId(e){const s=B.pool.acquire(e),t=s.level===0?null:B.getId(s.level-1,s.row>>1,s.col>>1,s.world);return B.pool.release(s),t}getTileCoverage(e,s,t){const i=super.getTileCoverage(e,s,t);if(!i)return i;const r=1<<i.lodInfo.level;return i.spans=i.spans.filter(n=>n.row>=0&&n.row<r),i}scaleToLevel(e){if(this._fullCacheLodInfos||this._initializeFullCacheLODs(this._lodInfos),this._levelByScale[e])return this._levelByScale[e];{const s=this._fullCacheLodInfos;if(e>s[0].scale)return s[0].level;let t,i;for(let r=0;r<s.length-1;r++)if(i=s[r+1],e>i.scale)return t=s[r],t.level+(t.scale-e)/(t.scale-i.scale);return s[s.length-1].level}}_initializeFullCacheLODs(e){let s;if(e[0].level===0)s=e.map(t=>({level:t.level,resolution:t.resolution,scale:t.scale}));else{const t=this.tileInfo.size[0],i=this.tileInfo.spatialReference;s=Ee.create({size:t,spatialReference:i}).lods.map(r=>({level:r.level,resolution:r.resolution,scale:r.scale}))}for(let t=0;t<s.length;t++)this._levelByScale[s[t].scale]=s[t].level;this._fullCacheLodInfos=s}}let E=class extends tt(st){constructor(){super(...arguments),this._styleChanges=[],this._fetchQueue=null,this._parseQueue=null,this._isTileHandlerReady=!1,this.fading=!1,this._getCollidersMesh=l=>{const{pixelRatio:e}=l.state;let s=0;const t=[],i=[];for(const r of this._vectorTileContainer.children)if(r.symbols)for(const[n,o]of r.symbols)for(const a of o)for(const h of a.colliders){const y=(h.xScreen+h.dxScreen)*e,u=(h.yScreen+h.dyScreen)*e,d=h.width*e,c=h.height*e,_=a.unique.parts[h.partIndex].targetOpacity>.5;if(!_&&this.layer.showCollisionBoxes!=="all")continue;const f=2,g=0,m=3,w=0,b=3,x=1,A=3,S=0,R=_?f:g,L=_?m:w,$=X.makeFlags(R,L);t.push(y,u,$,y+d,u,$,y,u+c,$,y+d,u+c,$),i.push(s+0,s+1,s+2,s+1,s+3,s+2),s+=4;const ve=_?b:x,De=_?A:S,T=X.makeFlags(ve,De);t.push(y,u,T,y+d,u,T,y,u+1,T,y+d,u+1,T),i.push(s+0,s+1,s+2,s+1,s+3,s+2),s+=4,t.push(y,u+c-1,T,y+d,u+c-1,T,y,u+c,T,y+d,u+c,T),i.push(s+0,s+1,s+2,s+1,s+3,s+2),s+=4,t.push(y,u,T,y+1,u,T,y,u+c,T,y+1,u+c,T),i.push(s+0,s+1,s+2,s+1,s+3,s+2),s+=4,t.push(y+d-1,u,T,y+d,u,T,y+d-1,u+c,T,y+d,u+c,T),i.push(s+0,s+1,s+2,s+1,s+3,s+2),s+=4}return{vertexData:new Int16Array(t),indexData:new Uint32Array(i)}},this._getCollidersColors=()=>[1,.5,0,1,1,0,0,1,0,1,.5,1,0,.5,0,1],this._getCollidersOpacities=()=>[.05,.01,.15,.2]}async hitTest(l,e){if(!this._tileHandlerPromise)return null;await this._tileHandlerPromise;const s=await this._vectorTileContainer.hitTest(e);if(!s||s.length===0)return null;const t=s[0]-1,i=this._styleRepository,r=i.getStyleLayerByUID(t);if(!r)return null;const n=i.getStyleLayerIndex(r.id);return[{type:"graphic",mapPoint:l,layer:this.layer,graphic:new ze({attributes:{layerId:n,layerName:r.id,layerUID:t},layer:this.layer,sourceLayer:this.layer})}]}update(l){if(this._tileHandlerPromise&&this._isTileHandlerReady)return l.pixelRatio!==this._tileHandler.devicePixelRatio?(this._start(),void(this._tileHandler.devicePixelRatio=l.pixelRatio)):void(this._styleChanges.length>0?this._tileHandlerPromise=this._applyStyleChanges():(this._fetchQueue.pause(),this._parseQueue.pause(),this._fetchQueue.state=l.state,this._parseQueue.state=l.state,this._tileManager.update(l)||this.requestUpdate(),this._parseQueue.resume(),this._fetchQueue.resume()))}attach(){const{style:l}=this.layer.currentStyleInfo;this._styleRepository=new he(l),this._tileInfoView=new Et(this.layer.tileInfo,this.layer.fullExtent),this._vectorTileContainer=new Ut(this._tileInfoView),this._tileHandler=new at(this.layer,this._styleRepository,window.devicePixelRatio||1),this.container.addChild(this._vectorTileContainer),this._start(),this.handles.add([this._vectorTileContainer.on("fade-start",()=>{this.fading=!0,this.notifyChange("updating"),this.requestUpdate()}),this._vectorTileContainer.on("fade-complete",()=>{var e;(e=this._collisionOverlay)==null||e.requestRender(),this.fading=!1,this.notifyChange("updating"),this.requestUpdate()}),$e(()=>this.layer.showCollisionBoxes,e=>{e!=="none"?this._collisionOverlay||(this._collisionOverlay=new X({getMesh:this._getCollidersMesh,getColors:this._getCollidersColors,getOpacities:this._getCollidersOpacities}),this.container.addChild(this._collisionOverlay)):(this.container.removeChild(this._collisionOverlay),this._collisionOverlay=null),this.container.requestRender()},He),this.layer.on("paint-change",e=>{if(e.isDataDriven)this._styleChanges.push({type:v.PAINTER_CHANGED,data:e}),this.notifyChange("updating"),this.requestUpdate();else{const s=this._styleRepository,t=s.getLayerById(e.layer);if(!t)return;const i=t.type===D.SYMBOL;s.setPaintProperties(e.layer,e.paint),i&&this._vectorTileContainer.restartDeclutter(),this._vectorTileContainer.requestRender()}}),this.layer.on("layout-change",e=>{const s=this._styleRepository,t=s.getLayerById(e.layer);if(!t)return;const i=Fe(t.layout,e.layout);if(!O(i)){if(qe(i,"visibility")&&zt(i)===1)return s.setLayoutProperties(e.layer,e.layout),t.type===D.SYMBOL&&this._vectorTileContainer.restartDeclutter(),void this._vectorTileContainer.requestRender();this._styleChanges.push({type:v.LAYOUT_CHANGED,data:e}),this.notifyChange("updating"),this.requestUpdate()}}),this.layer.on("style-layer-visibility-change",e=>{const s=this._styleRepository,t=s.getLayerById(e.layer);t&&(s.setStyleLayerVisibility(e.layer,e.visibility),t.type===D.SYMBOL&&this._vectorTileContainer.restartDeclutter(),this._vectorTileContainer.requestRender())}),this.layer.on("style-layer-change",e=>{this._styleChanges.push({type:v.LAYER_CHANGED,data:e}),this.notifyChange("updating"),this.requestUpdate()}),this.layer.on("delete-style-layer",e=>{this._styleChanges.push({type:v.LAYER_REMOVED,data:e}),this.notifyChange("updating"),this.requestUpdate()}),this.layer.on("load-style",()=>this._loadStyle()),this.layer.on("spriteSource-change",e=>{this._newSpriteSource=e.spriteSource,this._styleChanges.push({type:v.SPRITES_CHANGED,data:null});const s=this._styleRepository.layers;for(const t of s)switch(t.type){case D.SYMBOL:t.getLayoutProperty("icon-image")&&this._styleChanges.push({type:v.LAYOUT_CHANGED,data:{layer:t.id,layout:t.layout}});break;case D.LINE:t.getPaintProperty("line-pattern")&&this._styleChanges.push({type:v.PAINTER_CHANGED,data:{layer:t.id,paint:t.paint,isDataDriven:t.isPainterDataDriven()}});break;case D.FILL:t.getLayoutProperty("fill-pattern")&&this._styleChanges.push({type:v.PAINTER_CHANGED,data:{layer:t.id,paint:t.paint,isDataDriven:t.isPainterDataDriven()}})}this.notifyChange("updating"),this.requestUpdate()})],this.declaredClass)}detach(){var l,e;this._stop(),this.container.removeAllChildren(),(l=this._vectorTileContainer)==null||l.destroy(),this._vectorTileContainer=null,(e=this._tileHandler)==null||e.destroy(),this._tileHandler=null,this.handles.remove(this.declaredClass)}moveStart(){this.requestUpdate()}viewChange(){this.requestUpdate()}moveEnd(){this._collisionOverlay&&this._vectorTileContainer.restartDeclutter(),this.requestUpdate()}supportsSpatialReference(l){var e;return Ne((e=this.layer.tileInfo)==null?void 0:e.spatialReference,l)}canResume(){let l=super.canResume();const{currentStyleInfo:e}=this.layer;if(l&&(e==null?void 0:e.layerDefinition)){const s=this.view.scale,{minScale:t,maxScale:i}=e.layerDefinition;e&&e.layerDefinition&&(t&&t<s&&(l=!1),i&&i>s&&(l=!1))}return l}isUpdating(){const l=this._vectorTileContainer.children;return!this._isTileHandlerReady||!this._fetchQueue||!this._parseQueue||this._fetchQueue.updating||this._parseQueue.updating||l.length>0&&l.some(e=>e.invalidating)||this.fading}acquireTile(l){const e=this._createVectorTile(l);return this._tileHandlerPromise.then(()=>{this._fetchQueue.push(e.key).then(s=>this._parseQueue.push({key:e.key,data:s})).then(s=>{e.once("attach",()=>this.requestUpdate()),e.setData(s),this.requestUpdate(),this.notifyChange("updating")}).catch(s=>{this.notifyChange("updating"),Z(s)||oe.getLogger(this.declaredClass).error(s)})}),e}releaseTile(l){const e=l.key.id;this._fetchQueue.abort(e),this._parseQueue.abort(e),this.requestUpdate()}_start(){if(this._stop(),this._tileManager=new ct({acquireTile:s=>this.acquireTile(s),releaseTile:s=>this.releaseTile(s),tileInfoView:this._tileInfoView},this._vectorTileContainer),!this.layer.currentStyleInfo)return;const l=new AbortController,e=this._tileHandler.start({signal:l.signal}).then(()=>{this._fetchQueue=new ae({tileInfoView:this._tileInfoView,process:(s,t)=>this._getTileData(s,t),concurrency:15}),this._parseQueue=new ae({tileInfoView:this._tileInfoView,process:(s,t)=>this._parseTileData(s,t),concurrency:8}),this.requestUpdate(),this._isTileHandlerReady=!0});this._tileHandler.spriteMosaic.then(s=>{this._vectorTileContainer.setStyleResources(s,this._tileHandler.glyphMosaic,this._styleRepository),this.requestUpdate()}),this._tileHandlerAbortController=l,this._tileHandlerPromise=e}_stop(){if(!this._tileHandlerAbortController||!this._vectorTileContainer)return;const l=this._tileHandlerAbortController;l&&l.abort(),this._tileHandlerPromise=null,this._isTileHandlerReady=!1,this._fetchQueue&&(this._fetchQueue.destroy(),this._fetchQueue=null),this._parseQueue&&(this._parseQueue.destroy(),this._parseQueue=null),this._tileManager&&(this._tileManager.destroy(),this._tileManager=null),this._vectorTileContainer.removeAllChildren()}async _getTileData(l,e){const s=await this._tileHandler.fetchTileData(l,e);return this.notifyChange("updating"),s}async _parseTileData(l,e){return this._tileHandler.parseTileData(l,e)}async _applyStyleChanges(){this._isTileHandlerReady=!1,this._fetchQueue.pause(),this._parseQueue.pause(),this._fetchQueue.clear(),this._parseQueue.clear(),this._tileManager.clearCache();const l=this._styleChanges;try{await this._tileHandler.updateStyle(l)}catch(n){oe.getLogger(this.declaredClass).error("error applying vector-tiles style update",n.message),this._fetchQueue.resume(),this._parseQueue.resume(),this._isTileHandlerReady=!0}const e=this._styleRepository,s=[];l.forEach(n=>{if(n.type!==v.LAYER_REMOVED)return;const o=n.data,a=e.getLayerById(o.layer);a&&s.push(a.uid)});const t=[];let i;l.forEach(n=>{const o=n.type,a=n.data;switch(o){case v.PAINTER_CHANGED:e.setPaintProperties(a.layer,a.paint),i=a.layer;break;case v.LAYOUT_CHANGED:e.setLayoutProperties(a.layer,a.layout),i=a.layer;break;case v.LAYER_REMOVED:return void e.deleteStyleLayer(a.layer);case v.LAYER_CHANGED:e.setStyleLayer(a.layer,a.index),i=a.layer.id;break;case v.SPRITES_CHANGED:this._vectorTileContainer.setSpriteMosaic(this._tileHandler.setSpriteSource(this._newSpriteSource)),this._newSpriteSource=null,i=null}const h=e.getLayerById(i);h&&t.push(h.uid)});const r=this._vectorTileContainer.children;if(s.length>0){this._vectorTileContainer.deleteStyleLayers(s);for(const n of r)n.deleteLayerData(s)}if(this._fetchQueue.resume(),this._parseQueue.resume(),t.length>0){const n=[];for(const o of r){const a=this._fetchQueue.push(o.key).then(h=>this._parseQueue.push({key:o.key,data:h,styleLayerUIDs:t})).then(h=>o.setData(h));n.push(a)}await Promise.all(n)}this._styleChanges=[],this._isTileHandlerReady=!0,this.notifyChange("updating"),this.requestUpdate()}async _loadStyle(){const{style:l}=this.layer.currentStyleInfo,e=Qe(l);this._isTileHandlerReady=!1,this._fetchQueue.pause(),this._parseQueue.pause(),this._fetchQueue.clear(),this._parseQueue.clear(),this.notifyChange("updating"),this._styleRepository=new he(e),this._vectorTileContainer.destroy(),this._tileManager.clear(),this._tileHandlerAbortController.abort(),this._tileHandlerAbortController=new AbortController;const{signal:s}=this._tileHandlerAbortController;try{this._tileHandlerPromise=this._tileHandler.setStyle(this._styleRepository,e),await this._tileHandlerPromise}catch(i){if(!Z(i))throw i}if(s.aborted)return this._fetchQueue.resume(),this._parseQueue.resume(),this._isTileHandlerReady=!0,this.notifyChange("updating"),void this.requestUpdate();const t=await this._tileHandler.spriteMosaic;this._vectorTileContainer.setStyleResources(t,this._tileHandler.glyphMosaic,this._styleRepository),this._fetchQueue.resume(),this._parseQueue.resume(),this._isTileHandlerReady=!0,this.notifyChange("updating"),this.requestUpdate()}_createVectorTile(l){const e=this._tileInfoView.getTileBounds(ee(),l),s=this._tileInfoView.getTileResolution(l.level);return new se(l,s,e[0],e[3],512,512,this._styleRepository)}};function zt(l){if(O(l))return 0;switch(l.type){case"partial":return Object.keys(l.diff).length;case"complete":return Math.max(Object.keys(l.oldValue).length,Object.keys(l.newValue).length);case"collection":return Object.keys(l.added).length+Object.keys(l.changed).length+Object.keys(l.removed).length}}N([j()],E.prototype,"_fetchQueue",void 0),N([j()],E.prototype,"_parseQueue",void 0),N([j()],E.prototype,"_isTileHandlerReady",void 0),N([j()],E.prototype,"fading",void 0),E=N([We("esri.views.2d.layers.VectorTileLayerView2D")],E);const ds=E;export{ds as default};