@deck.gl/extensions 9.4.0-beta.4 → 9.4.1

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.
package/dist.min.js CHANGED
@@ -4,13 +4,13 @@
4
4
  else if (typeof define === 'function' && define.amd) define([], factory);
5
5
  else if (typeof exports === 'object') exports['deck'] = factory();
6
6
  else root['deck'] = factory();})(globalThis, function () {
7
- "use strict";var __exports__=(()=>{var Ai=Object.create;var de=Object.defineProperty;var Ti=Object.getOwnPropertyDescriptor;var Si=Object.getOwnPropertyNames;var Li=Object.getPrototypeOf,Fi=Object.prototype.hasOwnProperty;var Ge=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(i){throw e=0,i}},Le=(t,e)=>{for(var i in e)de(t,i,{get:e[i],enumerable:!0})},ue=(t,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Si(e))!Fi.call(t,n)&&n!==i&&de(t,n,{get:()=>e[n],enumerable:!(r=Ti(e,n))||r.enumerable});return t},B=(t,e,i)=>(ue(t,e,"default"),i&&ue(i,e,"default")),_=(t,e,i)=>(i=t!=null?Ai(Li(t)):{},ue(e||!t||!t.__esModule?de(i,"default",{value:t,enumerable:!0}):i,t)),Oi=t=>ue(de({},"__esModule",{value:!0}),t);var h=Ge((po,qe)=>{qe.exports=globalThis.deck});var st=Ge((xo,at)=>{at.exports=globalThis.luma});var ce={};Le(ce,{BrushingExtension:()=>Xe,ClipExtension:()=>ei,CollisionFilterExtension:()=>ai,DataFilterExtension:()=>pt,FillStyleExtension:()=>Xt,Fp64Extension:()=>Nt,MaskExtension:()=>ui,PathStyleExtension:()=>Ht,_TerrainExtension:()=>yi,project64:()=>ge});var E={},We=_(h(),1);B(E,_(h(),1));if(!We.Layer)throw new Error("@deck.gl/core is not found");B(ce,E);var $e=_(h(),1);var Ye=_(h(),1),Ke=`layout(std140) uniform brushingUniforms {
7
+ "use strict";var __exports__=(()=>{var Ti=Object.create;var de=Object.defineProperty;var Si=Object.getOwnPropertyDescriptor;var Li=Object.getOwnPropertyNames;var Fi=Object.getPrototypeOf,Oi=Object.prototype.hasOwnProperty;var Ge=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(i){throw e=0,i}},Le=(t,e)=>{for(var i in e)de(t,i,{get:e[i],enumerable:!0})},ue=(t,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Li(e))!Oi.call(t,n)&&n!==i&&de(t,n,{get:()=>e[n],enumerable:!(r=Si(e,n))||r.enumerable});return t},B=(t,e,i)=>(ue(t,e,"default"),i&&ue(i,e,"default")),_=(t,e,i)=>(i=t!=null?Ti(Fi(t)):{},ue(e||!t||!t.__esModule?de(i,"default",{value:t,enumerable:!0}):i,t)),Bi=t=>ue(de({},"__esModule",{value:!0}),t);var h=Ge((ho,qe)=>{qe.exports=globalThis.deck});var st=Ge((yo,at)=>{at.exports=globalThis.luma});var ce={};Le(ce,{BrushingExtension:()=>Xe,ClipExtension:()=>ti,CollisionFilterExtension:()=>si,DataFilterExtension:()=>pt,FillStyleExtension:()=>Qt,Fp64Extension:()=>Nt,MaskExtension:()=>di,PathStyleExtension:()=>Gt,_TerrainExtension:()=>Pi,project64:()=>ge});var E={},We=_(h(),1);B(E,_(h(),1));if(!We.Layer)throw new Error("@deck.gl/core is not found");B(ce,E);var $e=_(h(),1);var Ye=_(h(),1),Ke=`layout(std140) uniform brushingUniforms {
8
8
  bool enabled;
9
9
  highp int target;
10
10
  vec2 mousePos;
11
11
  float radius;
12
12
  } brushing;
13
- `,Bi=`
13
+ `,wi=`
14
14
  in vec2 brushingTargets;
15
15
 
16
16
  out float brushing_isVisible;
@@ -33,15 +33,15 @@
33
33
  void brushing_setVisible(bool visible) {
34
34
  brushing_isVisible = float(visible);
35
35
  }
36
- `,wi=`
36
+ `,Ci=`
37
37
  ${Ke}
38
- ${Bi}
38
+ ${wi}
39
39
  `,Ii=`
40
40
  in float brushing_isVisible;
41
- `,Ci=`
41
+ `,Ri=`
42
42
  ${Ke}
43
43
  ${Ii}
44
- `,Ri={source:0,target:1,custom:2,source_target:3},ki={"vs:DECKGL_FILTER_GL_POSITION":`
44
+ `,ki={source:0,target:1,custom:2,source_target:3},Ni={"vs:DECKGL_FILTER_GL_POSITION":`
45
45
  vec2 brushingTarget;
46
46
  vec2 brushingSource;
47
47
  if (brushing.target == 3) {
@@ -65,7 +65,7 @@ ${Ii}
65
65
  if (brushing.enabled && brushing_isVisible < 0.5) {
66
66
  discard;
67
67
  }
68
- `},Ze={name:"brushing",dependencies:[Ye.project],vs:wi,fs:Ci,inject:ki,getUniforms:t=>{if(!t||!("viewport"in t))return{};let{brushingEnabled:e=!0,brushingRadius:i=1e4,brushingTarget:r="source",mousePosition:n,viewport:o}=t;return{enabled:!!(e&&n&&o.containsPixel(n)),radius:i,target:Ri[r]||0,mousePos:n?o.unproject([n.x-o.x,n.y-o.y]):[0,0]}},uniformTypes:{enabled:"i32",target:"i32",mousePos:"vec2<f32>",radius:"f32"}};var Ni={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},q=class extends $e.LayerExtension{getShaders(){return{modules:[Ze]}}initializeState(e,i){let r=this.getAttributeManager();r&&r.add({brushingTargets:{size:2,stepMode:"dynamic",accessor:"getBrushingTarget"}});let n=()=>{this.getCurrentLayer()?.setNeedsRedraw()};this.state.onMouseMove=n,e.deck&&e.deck.eventManager.on({pointermove:n,pointerleave:n})}finalizeState(e,i){if(e.deck){let r=this.state.onMouseMove;e.deck.eventManager.off({pointermove:r,pointerleave:r})}}draw(e,i){let{viewport:r,mousePosition:n}=e.context,{brushingEnabled:o,brushingRadius:a,brushingTarget:s}=this.props,l={viewport:r,mousePosition:n,brushingEnabled:o,brushingRadius:a,brushingTarget:s};this.setShaderModuleProps({brushing:l})}};q.defaultProps=Ni;q.extensionName="BrushingExtension";var Xe=q;var D=_(h(),1);var Qe=`layout(std140) uniform dataFilterUniforms {
68
+ `},Ze={name:"brushing",dependencies:[Ye.project],vs:Ci,fs:Ri,inject:Ni,getUniforms:t=>{if(!t||!("viewport"in t))return{};let{brushingEnabled:e=!0,brushingRadius:i=1e4,brushingTarget:r="source",mousePosition:n,viewport:o}=t;return{enabled:!!(e&&n&&o.containsPixel(n)),radius:i,target:ki[r]||0,mousePos:n?o.unproject([n.x-o.x,n.y-o.y]):[0,0]}},uniformTypes:{enabled:"i32",target:"i32",mousePos:"vec2<f32>",radius:"f32"}};var Di={getBrushingTarget:{type:"accessor",value:[0,0]},brushingTarget:"source",brushingEnabled:!0,brushingRadius:1e4},W=class extends $e.LayerExtension{getShaders(){return{modules:[Ze]}}initializeState(e,i){let r=this.getAttributeManager();r&&r.add({brushingTargets:{size:2,stepMode:"dynamic",accessor:"getBrushingTarget"}});let n=()=>{this.getCurrentLayer()?.setNeedsRedraw()};this.state.onMouseMove=n,e.deck&&e.deck.eventManager.on({pointermove:n,pointerleave:n})}finalizeState(e,i){if(e.deck){let r=this.state.onMouseMove;e.deck.eventManager.off({pointermove:r,pointerleave:r})}}draw(e,i){let{viewport:r,mousePosition:n}=e.context,{brushingEnabled:o,brushingRadius:a,brushingTarget:s}=this.props,l={viewport:r,mousePosition:n,brushingEnabled:o,brushingRadius:a,brushingTarget:s};this.setShaderModuleProps({brushing:l})}};W.defaultProps=Di;W.extensionName="BrushingExtension";var Xe=W;var z=_(h(),1);var Qe=`layout(std140) uniform dataFilterUniforms {
69
69
  bool useSoftMargin;
70
70
  bool enabled;
71
71
  bool transformSize;
@@ -78,7 +78,7 @@ ${Ii}
78
78
  vec4 max64High;
79
79
  highp uvec4 categoryBitMask;
80
80
  } dataFilter;
81
- `,Di=`
81
+ `,zi=`
82
82
  #ifdef DATAFILTER_TYPE
83
83
  in DATAFILTER_TYPE filterValues;
84
84
  #ifdef DATAFILTER_DOUBLE
@@ -241,13 +241,13 @@ float dataFilter_reduceValue(vec4 value) {
241
241
  #endif
242
242
  `,Je=`
243
243
  ${Qe}
244
- ${Di}
245
- `,zi=`
244
+ ${zi}
245
+ `,Ui=`
246
246
  in float dataFilter_value;
247
247
  `,et=`
248
248
  ${Qe}
249
- ${zi}
250
- `;function tt(t){if(!t||!("extensions"in t))return{};let{filterRange:e=[-1,1],filterEnabled:i=!0,filterTransformSize:r=!0,filterTransformColor:n=!0,categoryBitMask:o}=t,a=t.filterSoftRange||e,s=l=>Array.isArray(l)?[l[0]||0,l[1]||0,l[2]||0,l[3]||0]:[l,0,0,0];return{...Number.isFinite(e[0])?{min:s(e[0]),softMin:s(a[0]),softMax:s(a[1]),max:s(e[1])}:{min:s(e.map(l=>l[0])),softMin:s(a.map(l=>l[0])),softMax:s(a.map(l=>l[1])),max:s(e.map(l=>l[1]))},enabled:i,useSoftMargin:!!t.filterSoftRange,transformSize:i&&r,transformColor:i&&n,...o&&{categoryBitMask:o}}}function Ui(t){if(!t||!("extensions"in t))return{};let e=tt(t),i=e.min.map(Math.fround);e.min=e.min.map((n,o)=>n-i[o]),e.softMin=e.softMin.map((n,o)=>n-i[o]),e.min64High=i;let r=e.max.map(Math.fround);return e.max=e.max.map((n,o)=>n-r[o]),e.softMax=e.softMax.map((n,o)=>n-r[o]),e.max64High=r,e}var it={"vs:#main-start":`
249
+ ${Ui}
250
+ `;function tt(t){if(!t||!("extensions"in t))return{};let{filterRange:e=[-1,1],filterEnabled:i=!0,filterTransformSize:r=!0,filterTransformColor:n=!0,categoryBitMask:o}=t,a=t.filterSoftRange||e,s=l=>Array.isArray(l)?[l[0]||0,l[1]||0,l[2]||0,l[3]||0]:[l,0,0,0];return{...Number.isFinite(e[0])?{min:s(e[0]),softMin:s(a[0]),softMax:s(a[1]),max:s(e[1])}:{min:s(e.map(l=>l[0])),softMin:s(a.map(l=>l[0])),softMax:s(a.map(l=>l[1])),max:s(e.map(l=>l[1]))},enabled:i,useSoftMargin:!!t.filterSoftRange,transformSize:i&&r,transformColor:i&&n,...o&&{categoryBitMask:o}}}function Vi(t){if(!t||!("extensions"in t))return{};let e=tt(t),i=e.min.map(Math.fround);e.min=e.min.map((n,o)=>n-i[o]),e.softMin=e.softMin.map((n,o)=>n-i[o]),e.min64High=i;let r=e.max.map(Math.fround);return e.max=e.max.map((n,o)=>n-r[o]),e.softMax=e.softMax.map((n,o)=>n-r[o]),e.max64High=r,e}var it={"vs:#main-start":`
251
251
  dataFilter_value = 1.0;
252
252
  if (dataFilter.enabled) {
253
253
  #ifdef DATAFILTER_TYPE
@@ -278,7 +278,7 @@ ${zi}
278
278
  if (dataFilter.transformColor) {
279
279
  color.a *= dataFilter_value;
280
280
  }
281
- `};function rt(t){return{useSoftMargin:"i32",enabled:"i32",transformSize:"i32",transformColor:"i32",min:"vec4<f32>",softMin:"vec4<f32>",softMax:"vec4<f32>",max:"vec4<f32>",min64High:"vec4<f32>",max64High:"vec4<f32>",categoryBitMask:"vec4<u32>"}}var nt={name:"dataFilter",vs:Je,fs:et,inject:it,getUniforms:tt,uniformTypesFromOptions:rt},ot={name:"dataFilter",vs:Je,fs:et,inject:it,getUniforms:Ui,uniformTypesFromOptions:rt};var lt=_(st(),1),Vi=`#version 300 es
281
+ `};function rt(t){return{useSoftMargin:"i32",enabled:"i32",transformSize:"i32",transformColor:"i32",min:"vec4<f32>",softMin:"vec4<f32>",softMax:"vec4<f32>",max:"vec4<f32>",min64High:"vec4<f32>",max64High:"vec4<f32>",categoryBitMask:"vec4<u32>"}}var nt={name:"dataFilter",vs:Je,fs:et,inject:it,getUniforms:tt,uniformTypesFromOptions:rt},ot={name:"dataFilter",vs:Je,fs:et,inject:it,getUniforms:Vi,uniformTypesFromOptions:rt};var lt=_(st(),1),ji=`#version 300 es
282
282
  #define SHADER_NAME data-filter-vertex-shader
283
283
 
284
284
  #ifdef FLOAT_TARGET
@@ -309,7 +309,7 @@ void main() {
309
309
  #endif
310
310
  gl_PointSize = 1.0;
311
311
  }
312
- `,ji=`#version 300 es
312
+ `,Hi=`#version 300 es
313
313
  #define SHADER_NAME data-filter-fragment-shader
314
314
  precision highp float;
315
315
 
@@ -323,7 +323,7 @@ void main() {
323
323
  }
324
324
  fragColor = vColor;
325
325
  }
326
- `,Hi=["float32-renderable-webgl","texture-blend-float-webgl"];function ft(t){return Hi.every(e=>t.features.has(e))}function ct(t,e){return e?t.createFramebuffer({width:1,height:1,colorAttachments:[t.createTexture({format:"rgba32float",dimension:"2d",width:1,height:1})]}):t.createFramebuffer({width:256,height:64,colorAttachments:[t.createTexture({format:"rgba8unorm",dimension:"2d",width:256,height:64})]})}function ut(t,e,i,r){return i.defines.NON_INSTANCED_MODEL=1,r&&(i.defines.FLOAT_TARGET=1),new lt.Model(t,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,topology:"point-list",disableWarnings:!0,vs:Vi,fs:ji,bufferLayout:e,...i})}var dt={blend:!0,blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one",blendColorOperation:"add",blendAlphaOperation:"add",depthCompare:"never"};var qi={getFilterValue:{type:"accessor",value:0},getFilterCategory:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,optional:!0},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterCategories:[0],filterTransformSize:!0,filterTransformColor:!0},Wi={categorySize:0,filterSize:1,fp64:!1,countItems:!1},Yi={1:"uint",2:"uvec2",3:"uvec3",4:"uvec4"},Ki={1:"float",2:"vec2",3:"vec3",4:"vec4"},W=class extends D.LayerExtension{constructor(e={}){super({...Wi,...e})}getShaders(e){let{categorySize:i,filterSize:r,fp64:n}=e.opts,o={};i&&(o.DATACATEGORY_TYPE=Yi[i],o.DATACATEGORY_CHANNELS=i),r&&(o.DATAFILTER_TYPE=Ki[r],o.DATAFILTER_DOUBLE=!!n);let a=n?ot:nt;return a.uniformTypes=a.uniformTypesFromOptions(e.opts),{modules:[a],defines:o}}initializeState(e,i){let r=this.getAttributeManager(),{categorySize:n,filterSize:o,fp64:a}=i.opts;r&&(o&&r.add({filterValues:{size:o,type:a?"float64":"float32",stepMode:"dynamic",accessor:"getFilterValue"}}),n&&r.add({filterCategoryValues:{size:n,stepMode:"dynamic",accessor:"getFilterCategory",type:"uint32",transform:n===1?l=>i._getCategoryKey.call(this,l,0):l=>l.map((f,c)=>i._getCategoryKey.call(this,f,c))}}));let{device:s}=this.context;if(r&&i.opts.countItems){let l=ft(s);r.add({filterVertexIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(u,{index:d})=>{let p=u&&u.__source?u.__source.index:d;return l?(p+1)%255:[(p+1)%255,Math.floor(p/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let f=ct(s,l),c=ut(s,r.getBufferLayouts({isInstanced:!1}),i.getShaders.call(this,i),l);this.setState({filterFBO:f,filterModel:c})}}updateState({props:e,oldProps:i,changeFlags:r},n){let o=this.getAttributeManager(),{categorySize:a}=n.opts;if(this.state.filterModel){let s=o.attributes.filterValues?.needsUpdate()||o.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==i.filterEnabled||e.filterRange!==i.filterRange||e.filterSoftRange!==i.filterSoftRange||e.filterCategories!==i.filterCategories;s&&this.setState({filterNeedsUpdate:s})}o?.attributes.filterCategoryValues&&((o.attributes.filterCategoryValues.needsUpdate()||!(0,D._deepEqual)(e.filterCategories,i.filterCategories,2))&&this.setState({categoryBitMask:null}),r.dataChanged&&(this.setState({categoryMap:Array(a).fill(0).map(()=>({}))}),o.attributes.filterCategoryValues.setNeedsUpdate("categoryMap")))}draw(e,i){let r=this.state.filterFBO,n=this.state.filterModel,o=this.state.filterNeedsUpdate;this.state.categoryBitMask||i._updateCategoryBitMask.call(this,e,i);let{onFilteredItemsChange:a,extensions:s,filterEnabled:l,filterRange:f,filterSoftRange:c,filterTransformSize:u,filterTransformColor:d,filterCategories:p}=this.props,m={extensions:s,filterEnabled:l,filterRange:f,filterSoftRange:c,filterTransformSize:u,filterTransformColor:d,filterCategories:p};if(this.state.categoryBitMask&&(m.categoryBitMask=this.state.categoryBitMask),this.setShaderModuleProps({dataFilter:m}),o&&a&&n){let F=this.getAttributeManager(),{attributes:{filterValues:v,filterCategoryValues:O,filterVertexIndices:R}}=F;n.setVertexCount(this.getNumInstances());let P={...v?.getValue(),...O?.getValue(),...R?.getValue()};n.setAttributes(P),n.shaderInputs.setProps({dataFilter:m});let k=[0,0,r.width,r.height],G=n.device.beginRenderPass({id:"data-filter-aggregation",framebuffer:r,parameters:{viewport:k},clearColor:[0,0,0,0]});n.setParameters(dt),n.draw(G),G.end();let x=n.device.readPixelsToArrayWebGL(r),A=0;for(let N=0;N<x.length;N++)A+=x[N];a({id:this.id,count:A}),this.state.filterNeedsUpdate=!1}}finalizeState(){let e=this.state.filterFBO,i=this.state.filterModel;e?.destroy(),i?.destroy()}_updateCategoryBitMask(e,i){let{categorySize:r}=i.opts;if(!r)return;let{filterCategories:n}=this.props,o=new Uint32Array([0,0,0,0]),a=r===1?[n]:n,s=r===1?128:r===2?64:32;for(let l=0;l<a.length;l++){let f=a[l];for(let c of f){let u=i._getCategoryKey.call(this,c,l);if(u<s){let d=l*(s/32)+Math.floor(u/32);o[d]+=Math.pow(2,u%32)}else D.log.warn(`Exceeded maximum number of categories (${s})`)()}}this.state.categoryBitMask=o}_getCategoryKey(e,i){let r=this.state.categoryMap[i];return e in r||(r[e]=Object.keys(r).length),r[e]}};W.defaultProps=qi;W.extensionName="DataFilterExtension";var pt=W;var kt=_(h(),1);var Po=1/Math.PI*180,Eo=1/180*Math.PI,Zi={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...Zi}};var Y=globalThis.mathgl.config;function Fe(t){return Array.isArray(t)||ArrayBuffer.isView(t)&&!(t instanceof DataView)}function z(t,e,i){let r=Y.EPSILON;i&&(Y.EPSILON=i);try{if(t===e)return!0;if(Fe(t)&&Fe(e)){if(t.length!==e.length)return!1;for(let n=0;n<t.length;++n)if(!z(t[n],e[n]))return!1;return!0}return t&&t.equals?t.equals(e):e&&e.equals?e.equals(t):typeof t=="number"&&typeof e=="number"?Math.abs(t-e)<=Y.EPSILON*Math.max(1,Math.abs(t),Math.abs(e)):!1}finally{Y.EPSILON=r}}var M=typeof Float32Array<"u"?Float32Array:Array,w=Math.random;function S(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var Ao=Math.PI/180;var L={};Le(L,{add:()=>er,angle:()=>Er,bezier:()=>hr,ceil:()=>tr,clone:()=>$i,copy:()=>Qi,create:()=>ht,cross:()=>ur,dist:()=>Br,distance:()=>bt,div:()=>Or,divide:()=>xt,dot:()=>Oe,equals:()=>Sr,exactEquals:()=>Tr,floor:()=>ir,forEach:()=>Rr,fromValues:()=>Xi,hermite:()=>_r,inverse:()=>fr,len:()=>Ir,length:()=>mt,lerp:()=>dr,max:()=>nr,min:()=>rr,mul:()=>Fr,multiply:()=>vt,negate:()=>lr,normalize:()=>cr,random:()=>mr,rotateX:()=>br,rotateY:()=>yr,rotateZ:()=>Pr,round:()=>or,scale:()=>ar,scaleAndAdd:()=>sr,set:()=>Ji,slerp:()=>pr,sqrDist:()=>wr,sqrLen:()=>Cr,squaredDistance:()=>yt,squaredLength:()=>Pt,str:()=>Ar,sub:()=>Lr,subtract:()=>gt,transformMat3:()=>vr,transformMat4:()=>gr,transformQuat:()=>xr,zero:()=>Mr});function ht(){let t=new M(3);return M!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function $i(t){let e=new M(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function mt(t){let e=t[0],i=t[1],r=t[2];return Math.sqrt(e*e+i*i+r*r)}function Xi(t,e,i){let r=new M(3);return r[0]=t,r[1]=e,r[2]=i,r}function Qi(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function Ji(t,e,i,r){return t[0]=e,t[1]=i,t[2]=r,t}function er(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t}function gt(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t}function vt(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t[2]=e[2]*i[2],t}function xt(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t[2]=e[2]/i[2],t}function tr(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function ir(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function rr(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t[2]=Math.min(e[2],i[2]),t}function nr(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t[2]=Math.max(e[2],i[2]),t}function or(t,e){return t[0]=S(e[0]),t[1]=S(e[1]),t[2]=S(e[2]),t}function ar(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t}function sr(t,e,i,r){return t[0]=e[0]+i[0]*r,t[1]=e[1]+i[1]*r,t[2]=e[2]+i[2]*r,t}function bt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2];return Math.sqrt(i*i+r*r+n*n)}function yt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2];return i*i+r*r+n*n}function Pt(t){let e=t[0],i=t[1],r=t[2];return e*e+i*i+r*r}function lr(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function fr(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function cr(t,e){let i=e[0],r=e[1],n=e[2],o=i*i+r*r+n*n;return o>0&&(o=1/Math.sqrt(o)),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t}function Oe(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ur(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[0],s=i[1],l=i[2];return t[0]=n*l-o*s,t[1]=o*a-r*l,t[2]=r*s-n*a,t}function dr(t,e,i,r){let n=e[0],o=e[1],a=e[2];return t[0]=n+r*(i[0]-n),t[1]=o+r*(i[1]-o),t[2]=a+r*(i[2]-a),t}function pr(t,e,i,r){let n=Math.acos(Math.min(Math.max(Oe(e,i),-1),1)),o=Math.sin(n),a=Math.sin((1-r)*n)/o,s=Math.sin(r*n)/o;return t[0]=a*e[0]+s*i[0],t[1]=a*e[1]+s*i[1],t[2]=a*e[2]+s*i[2],t}function _r(t,e,i,r,n,o){let a=o*o,s=a*(2*o-3)+1,l=a*(o-2)+o,f=a*(o-1),c=a*(3-2*o);return t[0]=e[0]*s+i[0]*l+r[0]*f+n[0]*c,t[1]=e[1]*s+i[1]*l+r[1]*f+n[1]*c,t[2]=e[2]*s+i[2]*l+r[2]*f+n[2]*c,t}function hr(t,e,i,r,n,o){let a=1-o,s=a*a,l=o*o,f=s*a,c=3*o*s,u=3*l*a,d=l*o;return t[0]=e[0]*f+i[0]*c+r[0]*u+n[0]*d,t[1]=e[1]*f+i[1]*c+r[1]*u+n[1]*d,t[2]=e[2]*f+i[2]*c+r[2]*u+n[2]*d,t}function mr(t,e){e=e===void 0?1:e;let i=w()*2*Math.PI,r=w()*2-1,n=Math.sqrt(1-r*r)*e;return t[0]=Math.cos(i)*n,t[1]=Math.sin(i)*n,t[2]=r*e,t}function gr(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[3]*r+i[7]*n+i[11]*o+i[15];return a=a||1,t[0]=(i[0]*r+i[4]*n+i[8]*o+i[12])/a,t[1]=(i[1]*r+i[5]*n+i[9]*o+i[13])/a,t[2]=(i[2]*r+i[6]*n+i[10]*o+i[14])/a,t}function vr(t,e,i){let r=e[0],n=e[1],o=e[2];return t[0]=r*i[0]+n*i[3]+o*i[6],t[1]=r*i[1]+n*i[4]+o*i[7],t[2]=r*i[2]+n*i[5]+o*i[8],t}function xr(t,e,i){let r=i[0],n=i[1],o=i[2],a=i[3],s=e[0],l=e[1],f=e[2],c=n*f-o*l,u=o*s-r*f,d=r*l-n*s,p=n*d-o*u,m=o*c-r*d,F=r*u-n*c,v=a*2;return c*=v,u*=v,d*=v,p*=2,m*=2,F*=2,t[0]=s+c+p,t[1]=l+u+m,t[2]=f+d+F,t}function br(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[0],o[1]=n[1]*Math.cos(r)-n[2]*Math.sin(r),o[2]=n[1]*Math.sin(r)+n[2]*Math.cos(r),t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function yr(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[2]*Math.sin(r)+n[0]*Math.cos(r),o[1]=n[1],o[2]=n[2]*Math.cos(r)-n[0]*Math.sin(r),t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function Pr(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[0]*Math.cos(r)-n[1]*Math.sin(r),o[1]=n[0]*Math.sin(r)+n[1]*Math.cos(r),o[2]=n[2],t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function Er(t,e){let i=t[0],r=t[1],n=t[2],o=e[0],a=e[1],s=e[2],l=Math.sqrt((i*i+r*r+n*n)*(o*o+a*a+s*s)),f=l&&Oe(t,e)/l;return Math.acos(Math.min(Math.max(f,-1),1))}function Mr(t){return t[0]=0,t[1]=0,t[2]=0,t}function Ar(t){return`vec3(${t[0]}, ${t[1]}, ${t[2]})`}function Tr(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function Sr(t,e){let i=t[0],r=t[1],n=t[2],o=e[0],a=e[1],s=e[2];return Math.abs(i-o)<=1e-6*Math.max(1,Math.abs(i),Math.abs(o))&&Math.abs(r-a)<=1e-6*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(n-s)<=1e-6*Math.max(1,Math.abs(n),Math.abs(s))}var Lr=gt,Fr=vt,Or=xt,Br=bt,wr=yt,Ir=mt,Cr=Pt,Rr=(function(){let t=ht();return function(e,i,r,n,o,a){let s,l;for(i||(i=3),r||(r=0),n?l=Math.min(n*i+r,e.length):l=e.length,s=r;s<l;s+=i)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],o(t,t,a),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2];return e}})();var pe={};Le(pe,{add:()=>Ur,ceil:()=>Vr,clone:()=>kr,copy:()=>Dr,create:()=>Et,cross:()=>Qr,dist:()=>un,distance:()=>St,div:()=>cn,divide:()=>Tt,dot:()=>Xr,equals:()=>sn,exactEquals:()=>an,floor:()=>jr,forEach:()=>hn,fromValues:()=>Nr,inverse:()=>Zr,len:()=>pn,length:()=>Ft,lerp:()=>Jr,max:()=>Gr,min:()=>Hr,mul:()=>fn,multiply:()=>At,negate:()=>Kr,normalize:()=>$r,random:()=>en,round:()=>qr,scale:()=>Wr,scaleAndAdd:()=>Yr,set:()=>zr,sqrDist:()=>dn,sqrLen:()=>_n,squaredDistance:()=>Lt,squaredLength:()=>Ot,str:()=>on,sub:()=>ln,subtract:()=>Mt,transformMat4:()=>tn,transformQuat:()=>rn,zero:()=>nn});function Et(){let t=new M(4);return M!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function kr(t){let e=new M(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function Nr(t,e,i,r){let n=new M(4);return n[0]=t,n[1]=e,n[2]=i,n[3]=r,n}function Dr(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function zr(t,e,i,r,n){return t[0]=e,t[1]=i,t[2]=r,t[3]=n,t}function Ur(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t[3]=e[3]+i[3],t}function Mt(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t[3]=e[3]-i[3],t}function At(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t[2]=e[2]*i[2],t[3]=e[3]*i[3],t}function Tt(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t[2]=e[2]/i[2],t[3]=e[3]/i[3],t}function Vr(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t[3]=Math.ceil(e[3]),t}function jr(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t[3]=Math.floor(e[3]),t}function Hr(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t[2]=Math.min(e[2],i[2]),t[3]=Math.min(e[3],i[3]),t}function Gr(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t[2]=Math.max(e[2],i[2]),t[3]=Math.max(e[3],i[3]),t}function qr(t,e){return t[0]=S(e[0]),t[1]=S(e[1]),t[2]=S(e[2]),t[3]=S(e[3]),t}function Wr(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t[3]=e[3]*i,t}function Yr(t,e,i,r){return t[0]=e[0]+i[0]*r,t[1]=e[1]+i[1]*r,t[2]=e[2]+i[2]*r,t[3]=e[3]+i[3]*r,t}function St(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2],o=e[3]-t[3];return Math.sqrt(i*i+r*r+n*n+o*o)}function Lt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2],o=e[3]-t[3];return i*i+r*r+n*n+o*o}function Ft(t){let e=t[0],i=t[1],r=t[2],n=t[3];return Math.sqrt(e*e+i*i+r*r+n*n)}function Ot(t){let e=t[0],i=t[1],r=t[2],n=t[3];return e*e+i*i+r*r+n*n}function Kr(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}function Zr(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}function $r(t,e){let i=e[0],r=e[1],n=e[2],o=e[3],a=i*i+r*r+n*n+o*o;return a>0&&(a=1/Math.sqrt(a)),t[0]=i*a,t[1]=r*a,t[2]=n*a,t[3]=o*a,t}function Xr(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function Qr(t,e,i,r){let n=i[0]*r[1]-i[1]*r[0],o=i[0]*r[2]-i[2]*r[0],a=i[0]*r[3]-i[3]*r[0],s=i[1]*r[2]-i[2]*r[1],l=i[1]*r[3]-i[3]*r[1],f=i[2]*r[3]-i[3]*r[2],c=e[0],u=e[1],d=e[2],p=e[3];return t[0]=u*f-d*l+p*s,t[1]=-(c*f)+d*a-p*o,t[2]=c*l-u*a+p*n,t[3]=-(c*s)+u*o-d*n,t}function Jr(t,e,i,r){let n=e[0],o=e[1],a=e[2],s=e[3];return t[0]=n+r*(i[0]-n),t[1]=o+r*(i[1]-o),t[2]=a+r*(i[2]-a),t[3]=s+r*(i[3]-s),t}function en(t,e){e=e===void 0?1:e;let i,r,n,o,a,s;do i=w()*2-1,r=w()*2-1,a=i*i+r*r;while(a>=1);do n=w()*2-1,o=w()*2-1,s=n*n+o*o;while(s>=1);let l=Math.sqrt((1-a)/s);return t[0]=e*i,t[1]=e*r,t[2]=e*n*l,t[3]=e*o*l,t}function tn(t,e,i){let r=e[0],n=e[1],o=e[2],a=e[3];return t[0]=i[0]*r+i[4]*n+i[8]*o+i[12]*a,t[1]=i[1]*r+i[5]*n+i[9]*o+i[13]*a,t[2]=i[2]*r+i[6]*n+i[10]*o+i[14]*a,t[3]=i[3]*r+i[7]*n+i[11]*o+i[15]*a,t}function rn(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[0],s=i[1],l=i[2],f=i[3],c=f*r+s*o-l*n,u=f*n+l*r-a*o,d=f*o+a*n-s*r,p=-a*r-s*n-l*o;return t[0]=c*f+p*-a+u*-l-d*-s,t[1]=u*f+p*-s+d*-a-c*-l,t[2]=d*f+p*-l+c*-s-u*-a,t[3]=e[3],t}function nn(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}function on(t){return`vec4(${t[0]}, ${t[1]}, ${t[2]}, ${t[3]})`}function an(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]}function sn(t,e){let i=t[0],r=t[1],n=t[2],o=t[3],a=e[0],s=e[1],l=e[2],f=e[3];return Math.abs(i-a)<=1e-6*Math.max(1,Math.abs(i),Math.abs(a))&&Math.abs(r-s)<=1e-6*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-l)<=1e-6*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(o-f)<=1e-6*Math.max(1,Math.abs(o),Math.abs(f))}var ln=Mt,fn=At,cn=Tt,un=St,dn=Lt,pn=Ft,_n=Ot,hn=(function(){let t=Et();return function(e,i,r,n,o,a){let s,l;for(i||(i=4),r||(r=0),n?l=Math.min(n*i+r,e.length):l=e.length,s=r;s<l;s+=i)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],t[3]=e[s+3],o(t,t,a),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2],e[s+3]=t[3];return e}})();function _e(t,e=[],i=0){let r=Math.fround(t),n=t-r;return e[i]=r,e[i+1]=n,e}function Be(t){return t-Math.fround(t)}function we(t){let e=new Float32Array(32);for(let i=0;i<4;++i)for(let r=0;r<4;++r){let n=i*4+r;_e(t[r*4+i],e,n*2)}return e}var Ie=`
326
+ `,Gi=["float32-renderable-webgl","texture-blend-float-webgl"];function ft(t){return Gi.every(e=>t.features.has(e))}function ct(t,e){return e?t.createFramebuffer({width:1,height:1,colorAttachments:[t.createTexture({format:"rgba32float",dimension:"2d",width:1,height:1})]}):t.createFramebuffer({width:256,height:64,colorAttachments:[t.createTexture({format:"rgba8unorm",dimension:"2d",width:256,height:64})]})}function ut(t,e,i,r){return i.defines.NON_INSTANCED_MODEL=1,r&&(i.defines.FLOAT_TARGET=1),new lt.Model(t,{id:"data-filter-aggregation-model",vertexCount:1,isInstanced:!1,topology:"point-list",disableWarnings:!0,vs:ji,fs:Hi,bufferLayout:e,...i})}var dt={blend:!0,blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one",blendColorOperation:"add",blendAlphaOperation:"add",depthCompare:"never"};var Wi={getFilterValue:{type:"accessor",value:0},getFilterCategory:{type:"accessor",value:0},onFilteredItemsChange:{type:"function",value:null,optional:!0},filterEnabled:!0,filterRange:[-1,1],filterSoftRange:null,filterCategories:[0],filterTransformSize:!0,filterTransformColor:!0},Yi={categorySize:0,filterSize:1,fp64:!1,countItems:!1},Ki={1:"uint",2:"uvec2",3:"uvec3",4:"uvec4"},Zi={1:"float",2:"vec2",3:"vec3",4:"vec4"},Y=class extends z.LayerExtension{constructor(e={}){super({...Yi,...e})}getShaders(e){let{categorySize:i,filterSize:r,fp64:n}=e.opts,o={};i&&(o.DATACATEGORY_TYPE=Ki[i],o.DATACATEGORY_CHANNELS=i),r&&(o.DATAFILTER_TYPE=Zi[r],o.DATAFILTER_DOUBLE=!!n);let a=n?ot:nt;return a.uniformTypes=a.uniformTypesFromOptions(e.opts),{modules:[a],defines:o}}initializeState(e,i){let r=this.getAttributeManager(),{categorySize:n,filterSize:o,fp64:a}=i.opts;r&&(o&&r.add({filterValues:{size:o,type:a?"float64":"float32",stepMode:"dynamic",accessor:"getFilterValue"}}),n&&r.add({filterCategoryValues:{size:n,stepMode:"dynamic",accessor:"getFilterCategory",type:"uint32",transform:n===1?l=>i._getCategoryKey.call(this,l,0):l=>l.map((f,c)=>i._getCategoryKey.call(this,f,c))}}));let{device:s}=this.context;if(r&&i.opts.countItems){let l=ft(s);r.add({filterVertexIndices:{size:l?1:2,vertexOffset:1,type:"unorm8",accessor:(u,{index:d})=>{let p=u&&u.__source?u.__source.index:d;return l?(p+1)%255:[(p+1)%255,Math.floor(p/255)%255]},shaderAttributes:{filterPrevIndices:{vertexOffset:0},filterIndices:{vertexOffset:1}}}});let f=ct(s,l),c=ut(s,r.getBufferLayouts({isInstanced:!1}),i.getShaders.call(this,i),l);this.setState({filterFBO:f,filterModel:c})}}updateState({props:e,oldProps:i,changeFlags:r},n){let o=this.getAttributeManager(),{categorySize:a}=n.opts;if(this.state.filterModel){let s=o.attributes.filterValues?.needsUpdate()||o.attributes.filterCategoryValues?.needsUpdate()||e.filterEnabled!==i.filterEnabled||e.filterRange!==i.filterRange||e.filterSoftRange!==i.filterSoftRange||e.filterCategories!==i.filterCategories;s&&this.setState({filterNeedsUpdate:s})}o?.attributes.filterCategoryValues&&((o.attributes.filterCategoryValues.needsUpdate()||!(0,z._deepEqual)(e.filterCategories,i.filterCategories,2))&&this.setState({categoryBitMask:null}),r.dataChanged&&(this.setState({categoryMap:Array(a).fill(0).map(()=>({}))}),o.attributes.filterCategoryValues.setNeedsUpdate("categoryMap")))}draw(e,i){let r=this.state.filterFBO,n=this.state.filterModel,o=this.state.filterNeedsUpdate;this.state.categoryBitMask||i._updateCategoryBitMask.call(this,e,i);let{onFilteredItemsChange:a,extensions:s,filterEnabled:l,filterRange:f,filterSoftRange:c,filterTransformSize:u,filterTransformColor:d,filterCategories:p}=this.props,m={extensions:s,filterEnabled:l,filterRange:f,filterSoftRange:c,filterTransformSize:u,filterTransformColor:d,filterCategories:p};if(this.state.categoryBitMask&&(m.categoryBitMask=this.state.categoryBitMask),this.setShaderModuleProps({dataFilter:m}),o&&a&&n){let F=this.getAttributeManager(),{attributes:{filterValues:v,filterCategoryValues:O,filterVertexIndices:k}}=F;n.setVertexCount(this.getNumInstances());let P={...v?.getValue(),...O?.getValue(),...k?.getValue()};n.setAttributes(P),n.shaderInputs.setProps({dataFilter:m});let N=[0,0,r.width,r.height],q=n.device.beginRenderPass({id:"data-filter-aggregation",framebuffer:r,parameters:{viewport:N},clearColor:[0,0,0,0]});n.setParameters(dt),n.draw(q),q.end();let x=n.device.readPixelsToArrayWebGL(r),A=0;for(let D=0;D<x.length;D++)A+=x[D];a({id:this.id,count:A}),this.state.filterNeedsUpdate=!1}}finalizeState(){let e=this.state.filterFBO,i=this.state.filterModel;e?.destroy(),i?.destroy()}_updateCategoryBitMask(e,i){let{categorySize:r}=i.opts;if(!r)return;let{filterCategories:n}=this.props,o=new Uint32Array([0,0,0,0]),a=r===1?[n]:n,s=r===1?128:r===2?64:32;for(let l=0;l<a.length;l++){let f=a[l];for(let c of f){let u=i._getCategoryKey.call(this,c,l);if(u<s){let d=l*(s/32)+Math.floor(u/32);o[d]+=Math.pow(2,u%32)}else z.log.warn(`Exceeded maximum number of categories (${s})`)()}}this.state.categoryBitMask=o}_getCategoryKey(e,i){let r=this.state.categoryMap[i];return e in r||(r[e]=Object.keys(r).length),r[e]}};Y.defaultProps=Wi;Y.extensionName="DataFilterExtension";var pt=Y;var kt=_(h(),1);var Mo=1/Math.PI*180,Ao=1/180*Math.PI,$i={EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1};globalThis.mathgl=globalThis.mathgl||{config:{...$i}};var K=globalThis.mathgl.config;function Fe(t){return Array.isArray(t)||ArrayBuffer.isView(t)&&!(t instanceof DataView)}function U(t,e,i){let r=K.EPSILON;i&&(K.EPSILON=i);try{if(t===e)return!0;if(Fe(t)&&Fe(e)){if(t.length!==e.length)return!1;for(let n=0;n<t.length;++n)if(!U(t[n],e[n]))return!1;return!0}return t&&t.equals?t.equals(e):e&&e.equals?e.equals(t):typeof t=="number"&&typeof e=="number"?Math.abs(t-e)<=K.EPSILON*Math.max(1,Math.abs(t),Math.abs(e)):!1}finally{K.EPSILON=r}}var M=typeof Float32Array<"u"?Float32Array:Array,w=Math.random;function S(t){return t>=0?Math.round(t):t%.5===0?Math.floor(t):Math.round(t)}var So=Math.PI/180;var L={};Le(L,{add:()=>tr,angle:()=>Mr,bezier:()=>mr,ceil:()=>ir,clone:()=>Xi,copy:()=>Ji,create:()=>ht,cross:()=>dr,dist:()=>wr,distance:()=>bt,div:()=>Br,divide:()=>xt,dot:()=>Oe,equals:()=>Lr,exactEquals:()=>Sr,floor:()=>rr,forEach:()=>kr,fromValues:()=>Qi,hermite:()=>hr,inverse:()=>cr,len:()=>Ir,length:()=>mt,lerp:()=>pr,max:()=>or,min:()=>nr,mul:()=>Or,multiply:()=>vt,negate:()=>fr,normalize:()=>ur,random:()=>gr,rotateX:()=>yr,rotateY:()=>Pr,rotateZ:()=>Er,round:()=>ar,scale:()=>sr,scaleAndAdd:()=>lr,set:()=>er,slerp:()=>_r,sqrDist:()=>Cr,sqrLen:()=>Rr,squaredDistance:()=>yt,squaredLength:()=>Pt,str:()=>Tr,sub:()=>Fr,subtract:()=>gt,transformMat3:()=>xr,transformMat4:()=>vr,transformQuat:()=>br,zero:()=>Ar});function ht(){let t=new M(3);return M!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function Xi(t){let e=new M(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}function mt(t){let e=t[0],i=t[1],r=t[2];return Math.sqrt(e*e+i*i+r*r)}function Qi(t,e,i){let r=new M(3);return r[0]=t,r[1]=e,r[2]=i,r}function Ji(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function er(t,e,i,r){return t[0]=e,t[1]=i,t[2]=r,t}function tr(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t}function gt(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t}function vt(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t[2]=e[2]*i[2],t}function xt(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t[2]=e[2]/i[2],t}function ir(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}function rr(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}function nr(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t[2]=Math.min(e[2],i[2]),t}function or(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t[2]=Math.max(e[2],i[2]),t}function ar(t,e){return t[0]=S(e[0]),t[1]=S(e[1]),t[2]=S(e[2]),t}function sr(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t}function lr(t,e,i,r){return t[0]=e[0]+i[0]*r,t[1]=e[1]+i[1]*r,t[2]=e[2]+i[2]*r,t}function bt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2];return Math.sqrt(i*i+r*r+n*n)}function yt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2];return i*i+r*r+n*n}function Pt(t){let e=t[0],i=t[1],r=t[2];return e*e+i*i+r*r}function fr(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}function cr(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}function ur(t,e){let i=e[0],r=e[1],n=e[2],o=i*i+r*r+n*n;return o>0&&(o=1/Math.sqrt(o)),t[0]=e[0]*o,t[1]=e[1]*o,t[2]=e[2]*o,t}function Oe(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function dr(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[0],s=i[1],l=i[2];return t[0]=n*l-o*s,t[1]=o*a-r*l,t[2]=r*s-n*a,t}function pr(t,e,i,r){let n=e[0],o=e[1],a=e[2];return t[0]=n+r*(i[0]-n),t[1]=o+r*(i[1]-o),t[2]=a+r*(i[2]-a),t}function _r(t,e,i,r){let n=Math.acos(Math.min(Math.max(Oe(e,i),-1),1)),o=Math.sin(n),a=Math.sin((1-r)*n)/o,s=Math.sin(r*n)/o;return t[0]=a*e[0]+s*i[0],t[1]=a*e[1]+s*i[1],t[2]=a*e[2]+s*i[2],t}function hr(t,e,i,r,n,o){let a=o*o,s=a*(2*o-3)+1,l=a*(o-2)+o,f=a*(o-1),c=a*(3-2*o);return t[0]=e[0]*s+i[0]*l+r[0]*f+n[0]*c,t[1]=e[1]*s+i[1]*l+r[1]*f+n[1]*c,t[2]=e[2]*s+i[2]*l+r[2]*f+n[2]*c,t}function mr(t,e,i,r,n,o){let a=1-o,s=a*a,l=o*o,f=s*a,c=3*o*s,u=3*l*a,d=l*o;return t[0]=e[0]*f+i[0]*c+r[0]*u+n[0]*d,t[1]=e[1]*f+i[1]*c+r[1]*u+n[1]*d,t[2]=e[2]*f+i[2]*c+r[2]*u+n[2]*d,t}function gr(t,e){e=e===void 0?1:e;let i=w()*2*Math.PI,r=w()*2-1,n=Math.sqrt(1-r*r)*e;return t[0]=Math.cos(i)*n,t[1]=Math.sin(i)*n,t[2]=r*e,t}function vr(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[3]*r+i[7]*n+i[11]*o+i[15];return a=a||1,t[0]=(i[0]*r+i[4]*n+i[8]*o+i[12])/a,t[1]=(i[1]*r+i[5]*n+i[9]*o+i[13])/a,t[2]=(i[2]*r+i[6]*n+i[10]*o+i[14])/a,t}function xr(t,e,i){let r=e[0],n=e[1],o=e[2];return t[0]=r*i[0]+n*i[3]+o*i[6],t[1]=r*i[1]+n*i[4]+o*i[7],t[2]=r*i[2]+n*i[5]+o*i[8],t}function br(t,e,i){let r=i[0],n=i[1],o=i[2],a=i[3],s=e[0],l=e[1],f=e[2],c=n*f-o*l,u=o*s-r*f,d=r*l-n*s,p=n*d-o*u,m=o*c-r*d,F=r*u-n*c,v=a*2;return c*=v,u*=v,d*=v,p*=2,m*=2,F*=2,t[0]=s+c+p,t[1]=l+u+m,t[2]=f+d+F,t}function yr(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[0],o[1]=n[1]*Math.cos(r)-n[2]*Math.sin(r),o[2]=n[1]*Math.sin(r)+n[2]*Math.cos(r),t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function Pr(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[2]*Math.sin(r)+n[0]*Math.cos(r),o[1]=n[1],o[2]=n[2]*Math.cos(r)-n[0]*Math.sin(r),t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function Er(t,e,i,r){let n=[],o=[];return n[0]=e[0]-i[0],n[1]=e[1]-i[1],n[2]=e[2]-i[2],o[0]=n[0]*Math.cos(r)-n[1]*Math.sin(r),o[1]=n[0]*Math.sin(r)+n[1]*Math.cos(r),o[2]=n[2],t[0]=o[0]+i[0],t[1]=o[1]+i[1],t[2]=o[2]+i[2],t}function Mr(t,e){let i=t[0],r=t[1],n=t[2],o=e[0],a=e[1],s=e[2],l=Math.sqrt((i*i+r*r+n*n)*(o*o+a*a+s*s)),f=l&&Oe(t,e)/l;return Math.acos(Math.min(Math.max(f,-1),1))}function Ar(t){return t[0]=0,t[1]=0,t[2]=0,t}function Tr(t){return`vec3(${t[0]}, ${t[1]}, ${t[2]})`}function Sr(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}function Lr(t,e){let i=t[0],r=t[1],n=t[2],o=e[0],a=e[1],s=e[2];return Math.abs(i-o)<=1e-6*Math.max(1,Math.abs(i),Math.abs(o))&&Math.abs(r-a)<=1e-6*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(n-s)<=1e-6*Math.max(1,Math.abs(n),Math.abs(s))}var Fr=gt,Or=vt,Br=xt,wr=bt,Cr=yt,Ir=mt,Rr=Pt,kr=(function(){let t=ht();return function(e,i,r,n,o,a){let s,l;for(i||(i=3),r||(r=0),n?l=Math.min(n*i+r,e.length):l=e.length,s=r;s<l;s+=i)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],o(t,t,a),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2];return e}})();var pe={};Le(pe,{add:()=>Vr,ceil:()=>jr,clone:()=>Nr,copy:()=>zr,create:()=>Et,cross:()=>Jr,dist:()=>dn,distance:()=>St,div:()=>un,divide:()=>Tt,dot:()=>Qr,equals:()=>ln,exactEquals:()=>sn,floor:()=>Hr,forEach:()=>mn,fromValues:()=>Dr,inverse:()=>$r,len:()=>_n,length:()=>Ft,lerp:()=>en,max:()=>qr,min:()=>Gr,mul:()=>cn,multiply:()=>At,negate:()=>Zr,normalize:()=>Xr,random:()=>tn,round:()=>Wr,scale:()=>Yr,scaleAndAdd:()=>Kr,set:()=>Ur,sqrDist:()=>pn,sqrLen:()=>hn,squaredDistance:()=>Lt,squaredLength:()=>Ot,str:()=>an,sub:()=>fn,subtract:()=>Mt,transformMat4:()=>rn,transformQuat:()=>nn,zero:()=>on});function Et(){let t=new M(4);return M!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function Nr(t){let e=new M(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}function Dr(t,e,i,r){let n=new M(4);return n[0]=t,n[1]=e,n[2]=i,n[3]=r,n}function zr(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}function Ur(t,e,i,r,n){return t[0]=e,t[1]=i,t[2]=r,t[3]=n,t}function Vr(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t[3]=e[3]+i[3],t}function Mt(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t[3]=e[3]-i[3],t}function At(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t[2]=e[2]*i[2],t[3]=e[3]*i[3],t}function Tt(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t[2]=e[2]/i[2],t[3]=e[3]/i[3],t}function jr(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t[3]=Math.ceil(e[3]),t}function Hr(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t[3]=Math.floor(e[3]),t}function Gr(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t[2]=Math.min(e[2],i[2]),t[3]=Math.min(e[3],i[3]),t}function qr(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t[2]=Math.max(e[2],i[2]),t[3]=Math.max(e[3],i[3]),t}function Wr(t,e){return t[0]=S(e[0]),t[1]=S(e[1]),t[2]=S(e[2]),t[3]=S(e[3]),t}function Yr(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t[3]=e[3]*i,t}function Kr(t,e,i,r){return t[0]=e[0]+i[0]*r,t[1]=e[1]+i[1]*r,t[2]=e[2]+i[2]*r,t[3]=e[3]+i[3]*r,t}function St(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2],o=e[3]-t[3];return Math.sqrt(i*i+r*r+n*n+o*o)}function Lt(t,e){let i=e[0]-t[0],r=e[1]-t[1],n=e[2]-t[2],o=e[3]-t[3];return i*i+r*r+n*n+o*o}function Ft(t){let e=t[0],i=t[1],r=t[2],n=t[3];return Math.sqrt(e*e+i*i+r*r+n*n)}function Ot(t){let e=t[0],i=t[1],r=t[2],n=t[3];return e*e+i*i+r*r+n*n}function Zr(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}function $r(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}function Xr(t,e){let i=e[0],r=e[1],n=e[2],o=e[3],a=i*i+r*r+n*n+o*o;return a>0&&(a=1/Math.sqrt(a)),t[0]=i*a,t[1]=r*a,t[2]=n*a,t[3]=o*a,t}function Qr(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function Jr(t,e,i,r){let n=i[0]*r[1]-i[1]*r[0],o=i[0]*r[2]-i[2]*r[0],a=i[0]*r[3]-i[3]*r[0],s=i[1]*r[2]-i[2]*r[1],l=i[1]*r[3]-i[3]*r[1],f=i[2]*r[3]-i[3]*r[2],c=e[0],u=e[1],d=e[2],p=e[3];return t[0]=u*f-d*l+p*s,t[1]=-(c*f)+d*a-p*o,t[2]=c*l-u*a+p*n,t[3]=-(c*s)+u*o-d*n,t}function en(t,e,i,r){let n=e[0],o=e[1],a=e[2],s=e[3];return t[0]=n+r*(i[0]-n),t[1]=o+r*(i[1]-o),t[2]=a+r*(i[2]-a),t[3]=s+r*(i[3]-s),t}function tn(t,e){e=e===void 0?1:e;let i,r,n,o,a,s;do i=w()*2-1,r=w()*2-1,a=i*i+r*r;while(a>=1);do n=w()*2-1,o=w()*2-1,s=n*n+o*o;while(s>=1);let l=Math.sqrt((1-a)/s);return t[0]=e*i,t[1]=e*r,t[2]=e*n*l,t[3]=e*o*l,t}function rn(t,e,i){let r=e[0],n=e[1],o=e[2],a=e[3];return t[0]=i[0]*r+i[4]*n+i[8]*o+i[12]*a,t[1]=i[1]*r+i[5]*n+i[9]*o+i[13]*a,t[2]=i[2]*r+i[6]*n+i[10]*o+i[14]*a,t[3]=i[3]*r+i[7]*n+i[11]*o+i[15]*a,t}function nn(t,e,i){let r=e[0],n=e[1],o=e[2],a=i[0],s=i[1],l=i[2],f=i[3],c=f*r+s*o-l*n,u=f*n+l*r-a*o,d=f*o+a*n-s*r,p=-a*r-s*n-l*o;return t[0]=c*f+p*-a+u*-l-d*-s,t[1]=u*f+p*-s+d*-a-c*-l,t[2]=d*f+p*-l+c*-s-u*-a,t[3]=e[3],t}function on(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}function an(t){return`vec4(${t[0]}, ${t[1]}, ${t[2]}, ${t[3]})`}function sn(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]}function ln(t,e){let i=t[0],r=t[1],n=t[2],o=t[3],a=e[0],s=e[1],l=e[2],f=e[3];return Math.abs(i-a)<=1e-6*Math.max(1,Math.abs(i),Math.abs(a))&&Math.abs(r-s)<=1e-6*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(n-l)<=1e-6*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(o-f)<=1e-6*Math.max(1,Math.abs(o),Math.abs(f))}var fn=Mt,cn=At,un=Tt,dn=St,pn=Lt,_n=Ft,hn=Ot,mn=(function(){let t=Et();return function(e,i,r,n,o,a){let s,l;for(i||(i=4),r||(r=0),n?l=Math.min(n*i+r,e.length):l=e.length,s=r;s<l;s+=i)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],t[3]=e[s+3],o(t,t,a),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2],e[s+3]=t[3];return e}})();function _e(t,e=[],i=0){let r=Math.fround(t),n=t-r;return e[i]=r,e[i+1]=n,e}function Be(t){return t-Math.fround(t)}function we(t){let e=new Float32Array(32);for(let i=0;i<4;++i)for(let r=0;r<4;++r){let n=i*4+r;_e(t[r*4+i],e,n*2)}return e}var Ce=`
327
327
  layout(std140) uniform fp64arithmeticUniforms {
328
328
  uniform float ONE;
329
329
  uniform float SPLIT;
@@ -1871,7 +1871,7 @@ fn compare_fp64(a: vec2f, b: vec2f) -> i32 {
1871
1871
  return fp64_compare_f32_bits(aLowBits, bLowBits);
1872
1872
  }
1873
1873
  #endif
1874
- `;var It=`const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
1874
+ `;var Ct=`const vec2 E_FP64 = vec2(2.7182817459106445e+00, 8.254840366817007e-08);
1875
1875
  const vec2 LOG2_FP64 = vec2(0.6931471824645996e+00, -1.9046542121259336e-09);
1876
1876
  const vec2 PI_FP64 = vec2(3.1415927410125732, -8.742278012618954e-8);
1877
1877
  const vec2 TWO_PI_FP64 = vec2(6.2831854820251465, -1.7484556025237907e-7);
@@ -2540,7 +2540,7 @@ void mat4_vec4_mul_fp64(vec2 b[16], vec2 a[4], out vec2 out_val[4]) {
2540
2540
  vec4_dot_fp64(a, tmp, out_val[i]);
2541
2541
  }
2542
2542
  }
2543
- `;var mn={ONE:1,SPLIT:4097},Ct={name:"fp64arithmetic",source:wt,fs:Ie,vs:Ie,defaultUniforms:mn,uniformTypes:{ONE:"f32",SPLIT:"f32"},fp64ify:_e,fp64LowPart:Be,fp64ifyMatrix4:we},he={name:"fp64",vs:It,dependencies:[Ct],fp64ify:_e,fp64LowPart:Be,fp64ifyMatrix4:we};var me=_(h(),1);var Rt=`const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
2543
+ `;var gn={ONE:1,SPLIT:4097},It={name:"fp64arithmetic",source:wt,fs:Ce,vs:Ce,defaultUniforms:gn,uniformTypes:{ONE:"f32",SPLIT:"f32"},fp64ify:_e,fp64LowPart:Be,fp64ifyMatrix4:we},he={name:"fp64",vs:Ct,dependencies:[It],fp64ify:_e,fp64LowPart:Be,fp64ifyMatrix4:we};var me=_(h(),1);var Rt=`const vec2 WORLD_SCALE_FP64 = vec2(81.4873275756836, 0.0000032873668232014097);
2544
2544
  layout(std140) uniform project64Uniforms {
2545
2545
  vec2 scale;
2546
2546
  mat4 viewProjectionMatrix;
@@ -2613,24 +2613,28 @@ return project_position_to_clipspace(
2613
2613
  position, position64xyLow, offset, commonPosition
2614
2614
  );
2615
2615
  }
2616
- `;var{fp64ify:gn,fp64ifyMatrix4:vn}=he,ge={name:"project64",dependencies:[me.project,he],vs:Rt,getUniforms:bn,uniformTypes:{scale:"vec2<f32>",viewProjectionMatrix:"mat4x4<f32>",viewProjectionMatrix64Low:"mat4x4<f32>"}},xn=(0,me._memoize)(yn);function bn(t){if(t&&"viewport"in t){let{viewProjectionMatrix:e,scale:i}=t.viewport;return xn({viewProjectionMatrix:e,scale:i})}return{}}function yn({viewProjectionMatrix:t,scale:e}){let i=vn(t),r=new Float32Array(16),n=new Float32Array(16);for(let o=0;o<4;o++)for(let a=0;a<4;a++){let s=4*o+a,l=4*a+o;r[l]=i[2*s],n[l]=i[2*s+1]}return{scale:gn(e),viewProjectionMatrix:[...r],viewProjectionMatrix64Low:[...n]}}var ve=class extends kt.LayerExtension{getShaders(){let{coordinateSystem:e}=this.props;if(e!=="lnglat"&&e!=="default")throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[ge]}}draw(e,i){let{viewport:r}=e.context;this.setShaderModuleProps({project64:{viewport:r}})}};ve.extensionName="Fp64Extension";var Nt=ve;var b=_(h(),1);var Dt={inject:{"vs:#decl":`
2617
- in vec2 instanceDashArrays;
2618
- #ifdef HIGH_PRECISION_DASH
2619
- in vec2 instanceDashOffsets;
2616
+ `;var{fp64ify:vn,fp64ifyMatrix4:xn}=he,ge={name:"project64",dependencies:[me.project,he],vs:Rt,getUniforms:yn,uniformTypes:{scale:"vec2<f32>",viewProjectionMatrix:"mat4x4<f32>",viewProjectionMatrix64Low:"mat4x4<f32>"}},bn=(0,me._memoize)(Pn);function yn(t){if(t&&"viewport"in t){let{viewProjectionMatrix:e,scale:i}=t.viewport;return bn({viewProjectionMatrix:e,scale:i})}return{}}function Pn({viewProjectionMatrix:t,scale:e}){let i=xn(t),r=new Float32Array(16),n=new Float32Array(16);for(let o=0;o<4;o++)for(let a=0;a<4;a++){let s=4*o+a,l=4*a+o;r[l]=i[2*s],n[l]=i[2*s+1]}return{scale:vn(e),viewProjectionMatrix:[...r],viewProjectionMatrix64Low:[...n]}}var ve=class extends kt.LayerExtension{getShaders(){let{coordinateSystem:e}=this.props;if(e!=="lnglat"&&e!=="default")throw new Error("fp64: coordinateSystem must be LNGLAT");return{modules:[ge]}}draw(e,i){let{viewport:r}=e.context;this.setShaderModuleProps({project64:{viewport:r}})}};ve.extensionName="Fp64Extension";var Nt=ve;var b=_(h(),1);var Dt={inject:{"vs:#main-end":`
2617
+ #ifdef PATH_STYLE_OFFSET
2618
+ float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;
2619
+ float offsetDir = sign(instanceOffsets);
2620
+ vPathPosition.x = (vPathPosition.x + offsetDir) * offsetWidth - offsetDir;
2621
+ vPathPosition.y *= offsetWidth;
2622
+ vPathLength *= offsetWidth;
2623
+ #ifdef DASH_ENABLED
2624
+ vPathBounds *= offsetWidth;
2625
+ #endif
2626
+ #endif
2627
+ #ifdef DASH_ENABLED
2628
+ float strokeHalfWidth = width.x;
2629
+ #ifdef PATH_STYLE_OFFSET
2630
+ strokeHalfWidth /= offsetWidth;
2620
2631
  #endif
2621
- out vec2 vDashArray;
2622
- out float vDashOffset;
2623
- out float vDashPathLength;
2624
- layout(std140) uniform pathStyleUniforms {
2625
- float dashAlignMode;
2626
- bool dashGapPickable;
2627
- highp int dashUnits;
2628
- } pathStyle;
2629
- `,"vs:#main-end":`
2630
2632
  float dashWidthPixels = path.billboard
2631
- ? width.x * project.focalDistance
2632
- : width.x * project.scale;
2633
- float strokeHalfWidthPixels = path.billboard ? width.x : width.x * project.scale;
2633
+ ? strokeHalfWidth * project.focalDistance
2634
+ : strokeHalfWidth * project.scale;
2635
+ float strokeHalfWidthPixels = path.billboard
2636
+ ? strokeHalfWidth
2637
+ : strokeHalfWidth * project.scale;
2634
2638
  float dashUnitPixels = strokeHalfWidthPixels;
2635
2639
  if (pathStyle.dashUnits == 1) {
2636
2640
  dashUnitPixels = 1.0;
@@ -2652,6 +2656,46 @@ vDashOffset = dashPeriod > 0.0 ? mod(dashOffsetAndLength.x, dashPeriod) : 0.0;
2652
2656
  vDashOffset = 0.0;
2653
2657
  vDashPathLength = 0.0;
2654
2658
  #endif
2659
+ #endif
2660
+ `,"fs:#main-end":`
2661
+ #ifdef DASH_ENABLED
2662
+ #ifdef ANTIALIASING
2663
+ if (inRoundedDashGap) {
2664
+ float pathCoverage = smoothedge(0.0, edgePixels);
2665
+ float resolvedCapMultiplier =
2666
+ min(pathCoverage, roundedDashResolvedCoverage) / max(pathCoverage, 1e-6);
2667
+ dashCoverage = mix(
2668
+ resolvedCapMultiplier,
2669
+ roundedDashDutyCycle,
2670
+ roundedDashSubPixelBlend
2671
+ );
2672
+ }
2673
+ #endif
2674
+ if (shouldDiscardDash) {
2675
+ discard;
2676
+ }
2677
+ fragColor.a *= dashCoverage;
2678
+ #endif
2679
+ #ifdef PATH_STYLE_OFFSET
2680
+ #ifndef ANTIALIASING
2681
+ if (abs(vPathPosition.x) > 1.0) {
2682
+ discard;
2683
+ }
2684
+ #endif
2685
+ #endif
2686
+ `}},zt={inject:{"vs:#decl":`
2687
+ in vec2 instanceDashArrays;
2688
+ #ifdef HIGH_PRECISION_DASH
2689
+ in vec2 instanceDashOffsets;
2690
+ #endif
2691
+ out vec2 vDashArray;
2692
+ out float vDashOffset;
2693
+ out float vDashPathLength;
2694
+ layout(std140) uniform pathStyleUniforms {
2695
+ float dashAlignMode;
2696
+ bool dashGapPickable;
2697
+ highp int dashUnits;
2698
+ } pathStyle;
2655
2699
  `,"fs:#decl":`
2656
2700
  layout(std140) uniform pathStyleUniforms {
2657
2701
  float dashAlignMode;
@@ -2743,24 +2787,7 @@ dashCoverage = mix(dashCoverage, roundedDutyCycle, subPixelBlend);
2743
2787
  dashCoverage = clamp(dashCoverage, 0.0, 1.0);
2744
2788
  shouldDiscardDash = shouldDiscardDash || dashCoverage <= 0.0;
2745
2789
  }
2746
- `,"fs:#main-end":`
2747
- #ifdef ANTIALIASING
2748
- if (inRoundedDashGap) {
2749
- float pathCoverage = smoothedge(0.0, edgePixels);
2750
- float resolvedCapMultiplier =
2751
- min(pathCoverage, roundedDashResolvedCoverage) / max(pathCoverage, 1e-6);
2752
- dashCoverage = mix(
2753
- resolvedCapMultiplier,
2754
- roundedDashDutyCycle,
2755
- roundedDashSubPixelBlend
2756
- );
2757
- }
2758
- #endif
2759
- if (shouldDiscardDash) {
2760
- discard;
2761
- }
2762
- fragColor.a *= dashCoverage;
2763
- `}},zt={inject:{"vs:#decl":`
2790
+ `}},Ut={inject:{"vs:#decl":`
2764
2791
  in vec2 instanceDashArrays;
2765
2792
  out vec2 vDashArray;
2766
2793
  `,"vs:#main-end":`
@@ -2802,7 +2829,7 @@ fragColor = vec4(vFillColor.rgb, vFillColor.a * alphaFactor);
2802
2829
  fragColor = picking_filterPickingColor(fragColor);
2803
2830
  fragColor = picking_filterHighlightColor(fragColor);
2804
2831
  }
2805
- `}},Ut={inject:{"vs:#decl":`
2832
+ `}},Vt={inject:{"vs:#decl":`
2806
2833
  in vec2 instanceDashArrays;
2807
2834
  out vec2 vDashArray;
2808
2835
  `,"vs:#main-end":`
@@ -2924,43 +2951,12 @@ fragColor = vec4(vFillColor.rgb, vFillColor.a * alphaFactor);
2924
2951
  fragColor = picking_filterPickingColor(fragColor);
2925
2952
  fragColor = picking_filterHighlightColor(fragColor);
2926
2953
  }
2927
- `}},Vt={inject:{"vs:#decl":`
2954
+ `}},jt={inject:{"vs:#decl":`
2928
2955
  in float instanceOffsets;
2929
2956
  `,"vs:DECKGL_FILTER_SIZE":`
2930
2957
  float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;
2931
2958
  size *= offsetWidth;
2932
- `,"vs:#main-end":`
2933
- float offsetWidth = abs(instanceOffsets * 2.0) + 1.0;
2934
- float offsetDir = sign(instanceOffsets);
2935
- vPathPosition.x = (vPathPosition.x + offsetDir) * offsetWidth - offsetDir;
2936
- vPathPosition.y *= offsetWidth;
2937
- vPathLength *= offsetWidth;
2938
- #ifdef DASH_ENABLED
2939
- if (pathStyle.dashUnits != 0) {
2940
- vDashArray *= offsetWidth;
2941
- }
2942
- vPathBounds *= offsetWidth;
2943
- #ifdef HIGH_PRECISION_DASH
2944
- vDashPathLength *= offsetWidth;
2945
- float restoredDashUnitLength = vDashArray.x + vDashArray.y;
2946
- float restoredDashPeriod = pathStyle.dashAlignMode == 0.0
2947
- ? restoredDashUnitLength
2948
- : vDashPathLength /
2949
- max(round(vDashPathLength / max(restoredDashUnitLength, 0.0001)), 1.0);
2950
- vDashOffset = restoredDashPeriod > 0.0
2951
- ? mod(dashOffsetAndLength.x * offsetWidth, restoredDashPeriod)
2952
- : 0.0;
2953
- #else
2954
- vDashOffset *= offsetWidth;
2955
- #endif
2956
- #endif
2957
- `,"fs:#main-end":`
2958
- #ifndef ANTIALIASING
2959
- if (abs(vPathPosition.x) > 1.0) {
2960
- discard;
2961
- }
2962
- #endif
2963
- `}};var Pn={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1,dashUnits:"widths"},En={widths:0,pixels:1,meters:2,common:3},Mn=["instanceDashArrays","instanceDashOffsets","instanceOffsets"];function An({props:t,oldProps:e}){return!(0,b._deepEqual)(t.modelMatrix,e.modelMatrix,2)||t.coordinateSystem!==e.coordinateSystem||!(0,b._deepEqual)(t.coordinateOrigin,e.coordinateOrigin,1)}function jt(t,e,i){let r=t.context.viewport;if(!(r instanceof b.WebMercatorViewport)||r.zoom<12)return t.projectPosition(e,{autoOffset:!1});let n=pe.transformMat4([],[e[0],e[1],e[2]||0,1],i.modelMatrix),o=t.props.coordinateSystem==="default"?"lnglat":t.props.coordinateSystem;if(o==="lnglat"){if(Math.abs(n[1]-i.coordinateOrigin[1])>.25){let l=n[0];i.wrapLongitude&&(l=((l+180)%360+360)%360-180);let f=r.projectPosition([l,n[1],0]);return[f[0]-i.commonOrigin[0],f[1]-i.commonOrigin[1],n[2]*i.commonUnitsPerMeter[2]]}L.sub(n,n,i.coordinateOrigin)}else o==="cartesian"&&L.sub(n,n,i.coordinateOrigin);let a=n[1],s=L.scaleAndAdd([],i.commonUnitsPerWorldUnit,i.commonUnitsPerWorldUnit2,a);return L.multiply([],n,s)}var K=class extends b.LayerExtension{constructor({dash:e=!1,offset:i=!1,dashMode:r,highPrecisionDash:n=!1}={}){let o=r??(n?"path":"segment");super({dash:e||n||r!==void 0,offset:i,dashMode:o,highPrecisionDash:o==="path"})}getLayerType(e){if("pathTesselator"in e.state)return"path";let i=e.constructor.layerName;return i==="ScatterplotLayer"?"scatterplot":i==="TextBackgroundLayer"?"textBackground":null}synchronizeAttributes(e){let i=e.getAttributeManager(),r=this.getLayerType(e);if(!i||!r)return!1;let n=i.getAttributes(),o=new Set;this.opts.dash&&o.add("instanceDashArrays"),r==="path"&&this.opts.dash&&this.opts.dashMode==="path"&&o.add("instanceDashOffsets"),r==="path"&&this.opts.offset&&o.add("instanceOffsets");let a=!1;for(let s of Mn)n[s]&&!o.has(s)&&(i.remove([s]),a=!0);return o.has("instanceDashArrays")&&!n.instanceDashArrays&&(i.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"}}),a=!0),o.has("instanceDashOffsets")&&!n.instanceDashOffsets&&(i.addInstanced({instanceDashOffsets:{size:2,accessor:["getPath"],update:this.calculateDashMetrics}}),a=!0),o.has("instanceOffsets")&&!n.instanceOffsets&&(i.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}),a=!0),a}isEnabled(e){return this.getLayerType(e)!==null}getShaders(e){let i=e.getLayerType(this);if(!i)return null;if(i==="scatterplot"||i==="textBackground")return e.opts.dash?{modules:[{name:"pathStyle",inject:i==="scatterplot"?zt.inject:Ut.inject,uniformTypes:{dashGapPickable:"i32"}}]}:null;let r={},n={};e.opts.dash&&(r=(0,b._mergeShaders)(r,Dt),n.DASH_ENABLED=!0,e.opts.dashMode==="path"&&(n.HIGH_PRECISION_DASH=!0)),e.opts.offset&&(r=(0,b._mergeShaders)(r,Vt),n.PATH_STYLE_OFFSET=!0);let{inject:o}=r,a={name:"pathStyle",inject:o};return e.opts.dash&&(a.uniformTypes={dashAlignMode:"f32",dashGapPickable:"i32",dashUnits:"i32"}),{modules:[a],defines:n}}initializeState(e,i){i.synchronizeAttributes(this)}updateState(e,i){if(i.isEnabled(this)){if(e.changeFlags.extensionsChanged){let r=i.synchronizeAttributes(this),n=this.getAttributeManager();if(n&&r){n.invalidateAll();for(let o of this.getModels())o.setBufferLayout(n.getBufferLayouts(o))}}if(i.opts.dash){let r=i.getLayerType(this);if(r==="path"&&i.opts.dashMode==="path"&&An(e)&&this.getAttributeManager()?.invalidate("instanceDashOffsets"),r==="scatterplot"||r==="textBackground"){let n={dashGapPickable:!!this.props.dashGapPickable};this.setShaderModuleProps({pathStyle:n})}else{let n={dashAlignMode:this.props.dashJustified?1:0,dashGapPickable:!!this.props.dashGapPickable,dashUnits:En[this.props.dashUnits??"widths"]};this.setShaderModuleProps({pathStyle:n})}}}}calculateDashMetrics(e,{startRow:i,endRow:r}){let n=this.state.pathTesselator,o=n?.vertexStarts,a=n?.instanceCount,s=n?.get("positions");if(!o||a===void 0||typeof n?.getPathSegmentIndices!="function")throw new Error("PathStyleExtension requires PathLayer tessellation data for path dashes.");let l=this.props.data?.attributes?.getPath,f=ArrayBuffer.isView(l)?l:l?.value,c=ArrayBuffer.isView(f),u=s&&(!l||n.normalize||n.opts?.isWebGPU);if(l&&!c||!u&&!c)throw new Error("PathStyleExtension cannot calculate whole-path dash metrics from GPU-only getPath data; supply data.attributes.instanceDashOffsets.");let d=e.value,p=e.size,m=Math.max(0,i),F=Math.min(r,o.length-1),v=3,O=3,R=0;if(!u){let x=f.BYTES_PER_ELEMENT;v=l?.size||(this.props.positionFormat==="XY"?2:3),O=l?.stride?l.stride/x:v,R=l?.offset?l.offset/x:0}let P=new Array(3),k=b.project.getUniforms({viewport:this.context.viewport,modelMatrix:this.props.modelMatrix,coordinateSystem:this.props.coordinateSystem,coordinateOrigin:this.props.coordinateOrigin,autoWrapLongitude:this.wrapLongitude}),G=x=>{if(u)P[0]=s[x*3],P[1]=s[x*3+1],P[2]=s[x*3+2];else{let A=R+x*O;P[0]=f[A],P[1]=f[A+1],P[2]=v===3?f[A+2]:0}return P};e.startIndices=o;for(let x=m;x<F;x++){let A=o[x],N=Math.min(o[x+1]??a,a);d.fill(0,A*p,N*p);let Pi=n.getPathSegmentIndices(x),Te=0,je=-2,Se=null;for(let T of Pi){let Ei=T*p;d[Ei]=Te;let Mi=T===je+1&&Se?Se:jt(this,G(T),k),He=jt(this,G(T+1),k);Te+=L.dist(Mi,He),je=T,Se=He}if(p>1)for(let T=A;T<N;T++)d[T*p+1]=Te}}getDashOffsets(e){let i=[0],r=this.props.positionFormat==="XY"?2:3,n=Array.isArray(e[0]),o=n?e.length:e.length/r,a,s;for(let l=0;l<o-1;l++)a=n?e[l]:e.slice(l*r,l*r+r),a=this.projectPosition(a,{autoOffset:!1}),l>0&&(i[l]=i[l-1]+L.dist(s,a)),s=a;return i[o-1]=0,i}};K.defaultProps=Pn;K.extensionName="PathStyleExtension";var Ht=K;var $t=_(h(),1);var U=_(h(),1),Tn=512/4e7;function Sn(t,e){switch(t){case"pixels":return 2**-Math.round(e.zoom);case"common":return 1;default:return Tn}}var Gt=`layout(std140) uniform fillUniforms {
2959
+ `}};var En={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1,dashUnits:"widths"},Mn={widths:0,pixels:1,meters:2,common:3},An=["instanceDashArrays","instanceDashOffsets","instanceOffsets"];function Tn({props:t,oldProps:e}){return!(0,b._deepEqual)(t.modelMatrix,e.modelMatrix,2)||t.coordinateSystem!==e.coordinateSystem||!(0,b._deepEqual)(t.coordinateOrigin,e.coordinateOrigin,1)}function Ht(t,e,i){let r=t.context.viewport;if(!(r instanceof b.WebMercatorViewport)||r.zoom<12)return t.projectPosition(e,{autoOffset:!1});let n=pe.transformMat4([],[e[0],e[1],e[2]||0,1],i.modelMatrix),o=t.props.coordinateSystem==="default"?"lnglat":t.props.coordinateSystem;if(o==="lnglat"){if(Math.abs(n[1]-i.coordinateOrigin[1])>.25){let l=n[0];i.wrapLongitude&&(l=((l+180)%360+360)%360-180);let f=r.projectPosition([l,n[1],0]);return[f[0]-i.commonOrigin[0],f[1]-i.commonOrigin[1],n[2]*i.commonUnitsPerMeter[2]]}L.sub(n,n,i.coordinateOrigin)}else o==="cartesian"&&L.sub(n,n,i.coordinateOrigin);let a=n[1],s=L.scaleAndAdd([],i.commonUnitsPerWorldUnit,i.commonUnitsPerWorldUnit2,a);return L.multiply([],n,s)}var Z=class extends b.LayerExtension{constructor({dash:e=!1,offset:i=!1,dashMode:r,highPrecisionDash:n=!1}={}){let o=r??(n?"path":"segment");super({dash:e||n||r!==void 0,offset:i,dashMode:o,highPrecisionDash:o==="path"})}getLayerType(e){if("pathTesselator"in e.state)return"path";let i=e.constructor.layerName;return i==="ScatterplotLayer"?"scatterplot":i==="TextBackgroundLayer"?"textBackground":null}synchronizeAttributes(e){let i=e.getAttributeManager(),r=this.getLayerType(e);if(!i||!r)return!1;let n=i.getAttributes(),o=new Set;this.opts.dash&&o.add("instanceDashArrays"),r==="path"&&this.opts.dash&&this.opts.dashMode==="path"&&o.add("instanceDashOffsets"),r==="path"&&this.opts.offset&&o.add("instanceOffsets");let a=!1;for(let s of An)n[s]&&!o.has(s)&&(i.remove([s]),a=!0);return o.has("instanceDashArrays")&&!n.instanceDashArrays&&(i.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"}}),a=!0),o.has("instanceDashOffsets")&&!n.instanceDashOffsets&&(i.addInstanced({instanceDashOffsets:{size:2,accessor:["getPath"],update:this.calculateDashMetrics}}),a=!0),o.has("instanceOffsets")&&!n.instanceOffsets&&(i.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}),a=!0),a}isEnabled(e){return this.getLayerType(e)!==null}getShaders(e){let i=e.getLayerType(this);if(!i)return null;if(i==="scatterplot"||i==="textBackground")return e.opts.dash?{modules:[{name:"pathStyle",inject:i==="scatterplot"?Ut.inject:Vt.inject,uniformTypes:{dashGapPickable:"i32"}}]}:null;let r={};(e.opts.dash||e.opts.offset)&&(r=(0,b._mergeShaders)(r,Dt));let n={};e.opts.dash&&(r=(0,b._mergeShaders)(r,zt),n.DASH_ENABLED=!0,e.opts.dashMode==="path"&&(n.HIGH_PRECISION_DASH=!0)),e.opts.offset&&(r=(0,b._mergeShaders)(r,jt),n.PATH_STYLE_OFFSET=!0);let{inject:o}=r,a={name:"pathStyle",inject:o};return e.opts.dash&&(a.uniformTypes={dashAlignMode:"f32",dashGapPickable:"i32",dashUnits:"i32"}),{modules:[a],defines:n}}initializeState(e,i){i.synchronizeAttributes(this)}updateState(e,i){if(i.isEnabled(this)){if(e.changeFlags.extensionsChanged){let r=i.synchronizeAttributes(this),n=this.getAttributeManager();if(n&&r){n.invalidateAll();for(let o of this.getModels())o.setBufferLayout(n.getBufferLayouts(o))}}if(i.opts.dash){let r=i.getLayerType(this);if(r==="path"&&i.opts.dashMode==="path"&&Tn(e)&&this.getAttributeManager()?.invalidate("instanceDashOffsets"),r==="scatterplot"||r==="textBackground"){let n={dashGapPickable:!!this.props.dashGapPickable};this.setShaderModuleProps({pathStyle:n})}else{let n={dashAlignMode:this.props.dashJustified?1:0,dashGapPickable:!!this.props.dashGapPickable,dashUnits:Mn[this.props.dashUnits??"widths"]};this.setShaderModuleProps({pathStyle:n})}}}}calculateDashMetrics(e,{startRow:i,endRow:r}){let n=this.state.pathTesselator,o=n?.vertexStarts,a=n?.instanceCount,s=n?.get("positions");if(!o||a===void 0||typeof n?.getPathSegmentIndices!="function")throw new Error("PathStyleExtension requires PathLayer tessellation data for path dashes.");let l=this.props.data?.attributes?.getPath,f=ArrayBuffer.isView(l)?l:l?.value,c=ArrayBuffer.isView(f),u=s&&(!l||n.normalize||n.opts?.isWebGPU);if(l&&!c||!u&&!c)throw new Error("PathStyleExtension cannot calculate whole-path dash metrics from GPU-only getPath data; supply data.attributes.instanceDashOffsets.");let d=e.value,p=e.size,m=Math.max(0,i),F=Math.min(r,o.length-1),v=3,O=3,k=0;if(!u){let x=f.BYTES_PER_ELEMENT;v=l?.size||(this.props.positionFormat==="XY"?2:3),O=l?.stride?l.stride/x:v,k=l?.offset?l.offset/x:0}let P=new Array(3),N=b.project.getUniforms({viewport:this.context.viewport,modelMatrix:this.props.modelMatrix,coordinateSystem:this.props.coordinateSystem,coordinateOrigin:this.props.coordinateOrigin,autoWrapLongitude:this.wrapLongitude}),q=x=>{if(u)P[0]=s[x*3],P[1]=s[x*3+1],P[2]=s[x*3+2];else{let A=k+x*O;P[0]=f[A],P[1]=f[A+1],P[2]=v===3?f[A+2]:0}return P};e.startIndices=o;for(let x=m;x<F;x++){let A=o[x],D=Math.min(o[x+1]??a,a);d.fill(0,A*p,D*p);let Ei=n.getPathSegmentIndices(x),Te=0,je=-2,Se=null;for(let T of Ei){let Mi=T*p;d[Mi]=Te;let Ai=T===je+1&&Se?Se:Ht(this,q(T),N),He=Ht(this,q(T+1),N);Te+=L.dist(Ai,He),je=T,Se=He}if(p>1)for(let T=A;T<D;T++)d[T*p+1]=Te}}getDashOffsets(e){let i=[0],r=this.props.positionFormat==="XY"?2:3,n=Array.isArray(e[0]),o=n?e.length:e.length/r,a,s;for(let l=0;l<o-1;l++)a=n?e[l]:e.slice(l*r,l*r+r),a=this.projectPosition(a,{autoOffset:!1}),l>0&&(i[l]=i[l-1]+L.dist(s,a)),s=a;return i[o-1]=0,i}};Z.defaultProps=En;Z.extensionName="PathStyleExtension";var Gt=Z;var Xt=_(h(),1);var V=_(h(),1),Sn=512/4e7;function Ln(t,e){switch(t){case"pixels":return 2**-Math.round(e.zoom);case"common":return 1;default:return Sn}}var qt=`layout(std140) uniform fillUniforms {
2964
2960
  vec2 patternTextureSize;
2965
2961
  float patternUnitScale;
2966
2962
  bool patternEnabled;
@@ -2970,7 +2966,7 @@ discard;
2970
2966
  vec2 uvCoordinateOrigin;
2971
2967
  vec2 uvCoordinateOrigin64Low;
2972
2968
  } fill;
2973
- `,Ln=`
2969
+ `,Fn=`
2974
2970
  uniform sampler2D fill_patternTexture;
2975
2971
 
2976
2972
  in vec4 fillPatternFrames;
@@ -2985,10 +2981,10 @@ out vec4 fill_backgroundColor;
2985
2981
  out float fill_patternCoordinateScale;
2986
2982
  flat out vec4 fill_patternParams0;
2987
2983
  flat out vec4 fill_patternParams1;
2988
- `,Fn=`
2989
- ${Gt}
2990
- ${Ln}
2991
2984
  `,On=`
2985
+ ${qt}
2986
+ ${Fn}
2987
+ `,Bn=`
2992
2988
  uniform sampler2D fill_patternTexture;
2993
2989
 
2994
2990
  in vec4 fill_patternBounds;
@@ -3123,10 +3119,10 @@ vec4 fill_blendOverBackground(vec4 pattern, vec4 background) {
3123
3119
  vec3 blendedRGB = mix(background.rgb, pattern.rgb, patternAlpha / blendedAlpha);
3124
3120
  return vec4(blendedRGB, blendedAlpha * layer.opacity);
3125
3121
  }
3126
- `,Bn=`
3127
- ${Gt}
3128
- ${On}
3129
- `,wn={"vs:DECKGL_FILTER_GL_POSITION":`
3122
+ `,wn=`
3123
+ ${qt}
3124
+ ${Bn}
3125
+ `,Cn={"vs:DECKGL_FILTER_GL_POSITION":`
3130
3126
  if (fill.patternEnabled) {
3131
3127
  fill_patternPlacement.xy = fillPatternOffsets;
3132
3128
  fill_backgroundColor = fillPatternBackgroundColors;
@@ -3176,7 +3172,7 @@ ${On}
3176
3172
  }
3177
3173
  color = fill_blendOverBackground(color, fill_backgroundColor);
3178
3174
  }
3179
- `};function In(t){if(!t)return{};let e={};if("fillPatternTexture"in t){let{fillPatternTexture:i}=t;e.fill_patternTexture=i,e.patternTextureSize=[i.width,i.height]}if("project"in t){let{fillPatternMask:i=!0,fillPatternEnabled:r=!0,fillPatternSizeUnits:n="meters",fillPatternCommonFrame:o=null,procedural:a=!1}=t,s=U.project.getUniforms(t.project),{commonOrigin:l}=s,f=Sn(n,t.project.viewport),c=[l[0],l[1]];o&&(c[0]%=f*o[0],c[1]%=f*o[1]),e.uvCoordinateOrigin=c,e.uvCoordinateOrigin64Low=[(0,U.fp64LowPart)(c[0]),(0,U.fp64LowPart)(c[1])],e.patternUnitScale=f,e.patternMask=i,e.patternEnabled=r,e.procedural=a,e.flipY=t.project.viewport?.flipY??!1}return e}var qt={name:"fill",vs:Fn,fs:Bn,inject:wn,dependencies:[U.project],getUniforms:In,uniformTypes:{patternTextureSize:"vec2<f32>",patternUnitScale:"f32",patternEnabled:"i32",patternMask:"i32",procedural:"i32",flipY:"i32",uvCoordinateOrigin:"vec2<f32>",uvCoordinateOrigin64Low:"vec2<f32>"}};var Yt="rg32float";var Ce={none:0,hatch:1,crossHatch:2,dots:3},g={type:0,size:1,gap0:2,gap1:3,angle0:4,angle1:5,elementCount:6},Wt=8,Z=Math.PI/180,Re=1,ke=1,Cn=0,Rn=[45,135],kn=0,Nn=0;function Kt(t){let e=Object.entries(t),i=new Float32Array((e.length+1)*Wt),r=new Map;return e.forEach(([n,o],a)=>{let s=a+1,l=s*Wt;switch(r.set(n,s),o.type){case"hatch":{let f=o.gap===void 0?ke:o.gap,c=o.strokeWidth===void 0?Re:o.strokeWidth,u=o.angle===void 0?Cn:o.angle;if(Array.isArray(f)&&f.length!==2)throw new Error(`${n}.gap must be a number or a two-element array`);let d=Array.isArray(f)?f:[f,f];Ne(c,`${n}.strokeWidth`),xe(d[0],`${n}.gap[0]`),xe(d[1],`${n}.gap[1]`),be(u,`${n}.angle`),i[l+g.type]=Ce.hatch,i[l+g.size]=c,i[l+g.gap0]=d[0],i[l+g.gap1]=d[1],i[l+g.angle0]=u*Z,i[l+g.elementCount]=Array.isArray(f)?2:1;break}case"cross-hatch":{let f=o.angles===void 0?Rn:o.angles,c=o.strokeWidth===void 0?Re:o.strokeWidth,u=o.gap===void 0?ke:o.gap;if(!Array.isArray(f)||f.length!==2)throw new Error(`${n}.angles must be a two-element array`);Ne(c,`${n}.strokeWidth`),xe(u,`${n}.gap`),be(f[0],`${n}.angles[0]`),be(f[1],`${n}.angles[1]`),i[l+g.type]=Ce.crossHatch,i[l+g.size]=c,i[l+g.gap0]=u,i[l+g.gap1]=u,i[l+g.angle0]=f[0]*Z,i[l+g.angle1]=f[1]*Z,i[l+g.elementCount]=2;break}case"dots":{let f=o.radius===void 0?Re:o.radius,c=o.gap===void 0?ke:o.gap,u=o.angle===void 0?kn:o.angle,d=o.skew===void 0?Nn:o.skew;Ne(f,`${n}.radius`),xe(c,`${n}.gap`),be(u,`${n}.angle`),Dn(d,`${n}.skew`),i[l+g.type]=Ce.dots,i[l+g.size]=f,i[l+g.gap0]=c,i[l+g.gap1]=c,i[l+g.angle0]=u*Z,i[l+g.angle1]=d*Z,i[l+g.elementCount]=2;break}default:throw new Error(`${n}.type is not a supported procedural pattern type`)}}),{data:i,width:i.length/2,height:1,patternIndices:r}}function Ne(t,e){if(!Number.isFinite(t)||t<=0)throw new Error(`${e} must be a finite number greater than 0`)}function xe(t,e){if(!Number.isFinite(t)||t<0)throw new Error(`${e} must be a finite number greater than or equal to 0`)}function be(t,e){if(!Number.isFinite(t))throw new Error(`${e} must be a finite number`)}function Dn(t,e){if(!Number.isFinite(t)||t<=-90||t>=90)throw new Error(`${e} must be a finite number greater than -90 and less than 90`)}function Zt(t,e){if(!Number.isInteger(e)||e<=0)return 0;if(t===0)return e;let[i,r]=[t,e];for(;r>0;)[i,r]=[r,i%r];return t/i*e}var zn={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0},fillPatternMapping:{type:"object",value:{},async:!0},fillPatternMask:!0,fillPatternSizeUnits:"meters",getFillPattern:{type:"accessor",value:t=>t.pattern},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]},getFillPatternBackgroundColor:{type:"accessor",value:[0,0,0,0]}},$=class extends $t.LayerExtension{constructor({pattern:e=!1,proceduralPattern:i=!1}={}){super({pattern:e||i,proceduralPattern:i})}isEnabled(e){return e.getAttributeManager()!==null&&!("pathTesselator"in e.state)}getShaders(e){return e.isEnabled(this)?{modules:[e.opts.pattern&&qt].filter(Boolean)}:null}initializeState(e,i){if(!i.isEnabled(this))return;let r=this.getAttributeManager();i.opts.pattern&&r.add({fillPatternFrames:{size:4,stepMode:"dynamic",accessor:"getFillPattern",transform:i.opts.proceduralPattern?i.getProceduralPatternIndex.bind(this):i.getPatternFrame.bind(this)},fillPatternScales:{size:1,stepMode:"dynamic",accessor:"getFillPatternScale",defaultValue:1},fillPatternOffsets:{size:2,stepMode:"dynamic",accessor:"getFillPatternOffset"},fillPatternBackgroundColors:{size:4,type:"unorm8",stepMode:"dynamic",accessor:"getFillPatternBackgroundColor",defaultValue:[0,0,0,255]}}),this.setState({emptyTexture:this.context.device.createTexture({data:new Uint8Array(4),width:1,height:1}),...i.opts.proceduralPattern&&i.createProceduralPatternTexture.call(this,{})})}updateState({props:e,oldProps:i},r){if(r.isEnabled(this)){if(e.fillPatternMapping&&e.fillPatternMapping!==i.fillPatternMapping){if(r.opts.proceduralPattern&&typeof e.fillPatternMapping!="string"){let n=this.state.proceduralPatternTexture;this.setState(r.createProceduralPatternTexture.call(this,e.fillPatternMapping)),n?.delete()}this.getAttributeManager().invalidate("getFillPattern")}(e.fillPatternMapping!==i.fillPatternMapping||e.getFillPatternScale!==i.getFillPatternScale)&&this.setState({commonFrame:r.getCommonFrame(e)})}}draw(e,i){if(!i.isEnabled(this))return;let{fillPatternAtlas:r,fillPatternEnabled:n,fillPatternMask:o,fillPatternSizeUnits:a}=this.props,s={project:e.shaderModuleProps.project,fillPatternEnabled:n,fillPatternMask:o,fillPatternSizeUnits:a,procedural:i.opts.proceduralPattern,fillPatternTexture:i.opts.proceduralPattern?this.state.proceduralPatternTexture||this.state.emptyTexture:r||this.state.emptyTexture,fillPatternCommonFrame:this.state.commonFrame};this.setShaderModuleProps({fill:s})}finalizeState(){this.state.emptyTexture?.delete(),this.state.proceduralPatternTexture?.delete()}getPatternFrame(e){let{fillPatternMapping:i}=this.getCurrentLayer().props,r=i&&i[e];return r&&"x"in r?[r.x,r.y,r.width,r.height]:[0,0,0,0]}getCommonFrame(e){let{fillPatternMapping:i,getFillPatternScale:r}=e;if(typeof r!="number"||!(r>0)||typeof i!="object")return null;let n=0,o=0;for(let a in i){let s=i[a];if(!("width"in s)||(n=Zt(n,s.width),o=Zt(o,s.height),!n||!o))return null}return n?[r*n,r*o]:null}getProceduralPatternIndex(e){return[this.state.proceduralPatternIndices?.get(e)??0,0,0,0]}createProceduralPatternTexture(e){let i=Kt(e);return{proceduralPatternIndices:i.patternIndices,proceduralPatternTexture:this.context.device.createTexture({data:i.data,width:i.width,height:i.height,format:Yt,sampler:{minFilter:"nearest",magFilter:"nearest"}})}}};$.defaultProps=zn;$.extensionName="FillStyleExtension";var Xt=$;var Qt=_(h(),1),Un={clipBounds:[0,0,1,1],clipByInstance:void 0},Jt=`
3175
+ `};function In(t){if(!t)return{};let e={};if("fillPatternTexture"in t){let{fillPatternTexture:i}=t;e.fill_patternTexture=i,e.patternTextureSize=[i.width,i.height]}if("project"in t){let{fillPatternMask:i=!0,fillPatternEnabled:r=!0,fillPatternSizeUnits:n="meters",fillPatternCommonFrame:o=null,procedural:a=!1}=t,s=V.project.getUniforms(t.project),{commonOrigin:l}=s,f=Ln(n,t.project.viewport),c=[l[0],l[1]];o&&(c[0]%=f*o[0],c[1]%=f*o[1]),e.uvCoordinateOrigin=c,e.uvCoordinateOrigin64Low=[(0,V.fp64LowPart)(c[0]),(0,V.fp64LowPart)(c[1])],e.patternUnitScale=f,e.patternMask=i,e.patternEnabled=r,e.procedural=a,e.flipY=t.project.viewport?.flipY??!1}return e}var Wt={name:"fill",vs:On,fs:wn,inject:Cn,dependencies:[V.project],getUniforms:In,uniformTypes:{patternTextureSize:"vec2<f32>",patternUnitScale:"f32",patternEnabled:"i32",patternMask:"i32",procedural:"i32",flipY:"i32",uvCoordinateOrigin:"vec2<f32>",uvCoordinateOrigin64Low:"vec2<f32>"}};var Kt="rg32float";var Ie={none:0,hatch:1,crossHatch:2,dots:3},g={type:0,size:1,gap0:2,gap1:3,angle0:4,angle1:5,elementCount:6},Yt=8,$=Math.PI/180,Re=1,ke=1,Rn=0,kn=[45,135],Nn=0,Dn=0;function Zt(t){let e=Object.entries(t),i=new Float32Array((e.length+1)*Yt),r=new Map;return e.forEach(([n,o],a)=>{let s=a+1,l=s*Yt;switch(r.set(n,s),o.type){case"hatch":{let f=o.gap===void 0?ke:o.gap,c=o.strokeWidth===void 0?Re:o.strokeWidth,u=o.angle===void 0?Rn:o.angle;if(Array.isArray(f)&&f.length!==2)throw new Error(`${n}.gap must be a number or a two-element array`);let d=Array.isArray(f)?f:[f,f];Ne(c,`${n}.strokeWidth`),xe(d[0],`${n}.gap[0]`),xe(d[1],`${n}.gap[1]`),be(u,`${n}.angle`),i[l+g.type]=Ie.hatch,i[l+g.size]=c,i[l+g.gap0]=d[0],i[l+g.gap1]=d[1],i[l+g.angle0]=u*$,i[l+g.elementCount]=Array.isArray(f)?2:1;break}case"cross-hatch":{let f=o.angles===void 0?kn:o.angles,c=o.strokeWidth===void 0?Re:o.strokeWidth,u=o.gap===void 0?ke:o.gap;if(!Array.isArray(f)||f.length!==2)throw new Error(`${n}.angles must be a two-element array`);Ne(c,`${n}.strokeWidth`),xe(u,`${n}.gap`),be(f[0],`${n}.angles[0]`),be(f[1],`${n}.angles[1]`),i[l+g.type]=Ie.crossHatch,i[l+g.size]=c,i[l+g.gap0]=u,i[l+g.gap1]=u,i[l+g.angle0]=f[0]*$,i[l+g.angle1]=f[1]*$,i[l+g.elementCount]=2;break}case"dots":{let f=o.radius===void 0?Re:o.radius,c=o.gap===void 0?ke:o.gap,u=o.angle===void 0?Nn:o.angle,d=o.skew===void 0?Dn:o.skew;Ne(f,`${n}.radius`),xe(c,`${n}.gap`),be(u,`${n}.angle`),zn(d,`${n}.skew`),i[l+g.type]=Ie.dots,i[l+g.size]=f,i[l+g.gap0]=c,i[l+g.gap1]=c,i[l+g.angle0]=u*$,i[l+g.angle1]=d*$,i[l+g.elementCount]=2;break}default:throw new Error(`${n}.type is not a supported procedural pattern type`)}}),{data:i,width:i.length/2,height:1,patternIndices:r}}function Ne(t,e){if(!Number.isFinite(t)||t<=0)throw new Error(`${e} must be a finite number greater than 0`)}function xe(t,e){if(!Number.isFinite(t)||t<0)throw new Error(`${e} must be a finite number greater than or equal to 0`)}function be(t,e){if(!Number.isFinite(t))throw new Error(`${e} must be a finite number`)}function zn(t,e){if(!Number.isFinite(t)||t<=-90||t>=90)throw new Error(`${e} must be a finite number greater than -90 and less than 90`)}function $t(t,e){if(!Number.isInteger(e)||e<=0)return 0;if(t===0)return e;let[i,r]=[t,e];for(;r>0;)[i,r]=[r,i%r];return t/i*e}var Un={fillPatternEnabled:!0,fillPatternAtlas:{type:"image",value:null,async:!0},fillPatternMapping:{type:"object",value:{},async:!0},fillPatternMask:!0,fillPatternSizeUnits:"meters",getFillPattern:{type:"accessor",value:t=>t.pattern},getFillPatternScale:{type:"accessor",value:1},getFillPatternOffset:{type:"accessor",value:[0,0]},getFillPatternBackgroundColor:{type:"accessor",value:[0,0,0,0]}},X=class extends Xt.LayerExtension{constructor({pattern:e=!1,proceduralPattern:i=!1}={}){super({pattern:e||i,proceduralPattern:i})}isEnabled(e){return e.getAttributeManager()!==null&&!("pathTesselator"in e.state)}getShaders(e){return e.isEnabled(this)?{modules:[e.opts.pattern&&Wt].filter(Boolean)}:null}initializeState(e,i){if(!i.isEnabled(this))return;let r=this.getAttributeManager();i.opts.pattern&&r.add({fillPatternFrames:{size:4,stepMode:"dynamic",accessor:"getFillPattern",transform:i.opts.proceduralPattern?i.getProceduralPatternIndex.bind(this):i.getPatternFrame.bind(this)},fillPatternScales:{size:1,stepMode:"dynamic",accessor:"getFillPatternScale",defaultValue:1},fillPatternOffsets:{size:2,stepMode:"dynamic",accessor:"getFillPatternOffset"},fillPatternBackgroundColors:{size:4,type:"unorm8",stepMode:"dynamic",accessor:"getFillPatternBackgroundColor",defaultValue:[0,0,0,255]}}),this.setState({emptyTexture:this.context.device.createTexture({data:new Uint8Array(4),width:1,height:1}),...i.opts.proceduralPattern&&i.createProceduralPatternTexture.call(this,{})})}updateState({props:e,oldProps:i},r){if(r.isEnabled(this)){if(e.fillPatternMapping&&e.fillPatternMapping!==i.fillPatternMapping){if(r.opts.proceduralPattern&&typeof e.fillPatternMapping!="string"){let n=this.state.proceduralPatternTexture;this.setState(r.createProceduralPatternTexture.call(this,e.fillPatternMapping)),n?.delete()}this.getAttributeManager().invalidate("getFillPattern")}(e.fillPatternMapping!==i.fillPatternMapping||e.getFillPatternScale!==i.getFillPatternScale)&&this.setState({commonFrame:r.getCommonFrame(e)})}}draw(e,i){if(!i.isEnabled(this))return;let{fillPatternAtlas:r,fillPatternEnabled:n,fillPatternMask:o,fillPatternSizeUnits:a}=this.props,s={project:e.shaderModuleProps.project,fillPatternEnabled:n,fillPatternMask:o,fillPatternSizeUnits:a,procedural:i.opts.proceduralPattern,fillPatternTexture:i.opts.proceduralPattern?this.state.proceduralPatternTexture||this.state.emptyTexture:r||this.state.emptyTexture,fillPatternCommonFrame:this.state.commonFrame};this.setShaderModuleProps({fill:s})}finalizeState(){this.state.emptyTexture?.delete(),this.state.proceduralPatternTexture?.delete()}getPatternFrame(e){let{fillPatternMapping:i}=this.getCurrentLayer().props,r=i&&i[e];return r&&"x"in r?[r.x,r.y,r.width,r.height]:[0,0,0,0]}getCommonFrame(e){let{fillPatternMapping:i,getFillPatternScale:r}=e;if(typeof r!="number"||!(r>0)||typeof i!="object")return null;let n=0,o=0;for(let a in i){let s=i[a];if(!("width"in s)||(n=$t(n,s.width),o=$t(o,s.height),!n||!o))return null}return n?[r*n,r*o]:null}getProceduralPatternIndex(e){return[this.state.proceduralPatternIndices?.get(e)??0,0,0,0]}createProceduralPatternTexture(e){let i=Zt(e);return{proceduralPatternIndices:i.patternIndices,proceduralPatternTexture:this.context.device.createTexture({data:i.data,width:i.width,height:i.height,format:Kt,sampler:{minFilter:"nearest",magFilter:"nearest"}})}}};X.defaultProps=Un;X.extensionName="FillStyleExtension";var Qt=X;var Jt=_(h(),1),Vn={clipBounds:[0,0,1,1],clipByInstance:void 0},ei=`
3180
3176
  layout(std140) uniform clipUniforms {
3181
3177
  vec4 bounds;
3182
3178
  } clip;
@@ -3184,7 +3180,7 @@ layout(std140) uniform clipUniforms {
3184
3180
  bool clip_isInBounds(vec2 position) {
3185
3181
  return position.x >= clip.bounds[0] && position.y >= clip.bounds[1] && position.x < clip.bounds[2] && position.y < clip.bounds[3];
3186
3182
  }
3187
- `,Vn={name:"clip",vs:Jt,uniformTypes:{bounds:"vec4<f32>"}},jn={"vs:#decl":`
3183
+ `,jn={name:"clip",vs:ei,uniformTypes:{bounds:"vec4<f32>"}},Hn={"vs:#decl":`
3188
3184
  out float clip_isVisible;
3189
3185
  `,"vs:DECKGL_FILTER_GL_POSITION":`
3190
3186
  clip_isVisible = float(clip_isInBounds(geometry.worldPosition.xy));
@@ -3192,7 +3188,7 @@ out float clip_isVisible;
3192
3188
  in float clip_isVisible;
3193
3189
  `,"fs:DECKGL_FILTER_COLOR":`
3194
3190
  if (clip_isVisible < 0.5) discard;
3195
- `},Hn={name:"clip",fs:Jt,uniformTypes:{bounds:"vec4<f32>"}},Gn={"vs:#decl":`
3191
+ `},Gn={name:"clip",fs:ei,uniformTypes:{bounds:"vec4<f32>"}},qn={"vs:#decl":`
3196
3192
  out vec2 clip_commonPosition;
3197
3193
  `,"vs:DECKGL_FILTER_GL_POSITION":`
3198
3194
  clip_commonPosition = geometry.position.xy;
@@ -3200,7 +3196,7 @@ out vec2 clip_commonPosition;
3200
3196
  in vec2 clip_commonPosition;
3201
3197
  `,"fs:DECKGL_FILTER_COLOR":`
3202
3198
  if (!clip_isInBounds(clip_commonPosition)) discard;
3203
- `},X=class extends Qt.LayerExtension{getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.clipByInstance!==void 0&&(e=!!this.props.clipByInstance),this.state.clipByInstance=e,this.context.device.type==="webgpu"?{}:e?{modules:[Vn],inject:jn}:{modules:[Hn],inject:Gn}}draw(){let{clipBounds:e}=this.props,i={};if(this.state.clipByInstance)i.bounds=e;else{let r=this.projectPosition([e[0],e[1],0]),n=this.projectPosition([e[2],e[3],0]);i.bounds=[Math.min(r[0],n[0]),Math.min(r[1],n[1]),Math.max(r[0],n[0]),Math.max(r[1],n[1])]}this.context.device.type==="webgpu"&&(i.enabled=!0,i.mode=this.state.clipByInstance?"instance":"geometry"),this.setShaderModuleProps({clip:i})}};X.defaultProps=Un;X.extensionName="ClipExtension";var ei=X;var oi=_(h(),1);var ti=_(h(),1),qn=`
3199
+ `},Q=class extends Jt.LayerExtension{getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.clipByInstance!==void 0&&(e=!!this.props.clipByInstance),this.state.clipByInstance=e,this.context.device.type==="webgpu"?{}:e?{modules:[jn],inject:Hn}:{modules:[Gn],inject:qn}}draw(){let{clipBounds:e}=this.props,i={};if(this.state.clipByInstance)i.bounds=e;else{let r=this.projectPosition([e[0],e[1],0]),n=this.projectPosition([e[2],e[3],0]);i.bounds=[Math.min(r[0],n[0]),Math.min(r[1],n[1]),Math.max(r[0],n[0]),Math.max(r[1],n[1])]}this.context.device.type==="webgpu"&&(i.enabled=!0,i.mode=this.state.clipByInstance?"instance":"geometry"),this.setShaderModuleProps({clip:i})}};Q.defaultProps=Vn;Q.extensionName="ClipExtension";var ti=Q;var ai=_(h(),1);var ii=_(h(),1),Wn=`
3204
3200
  in float collisionPriorities;
3205
3201
 
3206
3202
  uniform sampler2D collision_texture;
@@ -3248,7 +3244,7 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
3248
3244
  float W = 2.0 * floatN + 1.0;
3249
3245
  return pow(accumulator / (W * W), 2.2);
3250
3246
  }
3251
- `,Wn={"vs:#decl":`
3247
+ `,Yn={"vs:#decl":`
3252
3248
  float collision_fade = 1.0;
3253
3249
  `,"vs:DECKGL_FILTER_GL_POSITION":`
3254
3250
  if (collision.sort) {
@@ -3267,21 +3263,21 @@ float collision_isVisible(vec2 texCoords, vec3 pickingColor) {
3267
3263
  }
3268
3264
  `,"vs:DECKGL_FILTER_COLOR":`
3269
3265
  color.a *= collision_fade;
3270
- `},Yn=t=>{if(!t||!("dummyCollisionMap"in t))return{};let{enabled:e,collisionFBO:i,drawToCollisionMap:r,dummyCollisionMap:n}=t;return{enabled:e&&!r,sort:!!r,collision_texture:!r&&i?i.colorAttachments[0]:n}},ii={name:"collision",dependencies:[ti.project],vs:qn,inject:Wn,getUniforms:Yn,uniformTypes:{sort:"i32",enabled:"i32"}};var ni=_(h(),1);var ri=_(h(),1),Q=class extends ri._LayersPass{renderCollisionMap(e,i){let n=[0,0,0,0],o=[1,1,e.width-2,e.height-2];this.render({...i,clearColor:n,scissorRect:o,target:e,pass:"collision"})}getLayerParameters(e,i,r){return{...e.props.parameters,blend:!1,depthWriteEnabled:!0,depthCompare:"less-equal"}}getShaderModuleProps(){return{collision:{drawToCollisionMap:!0},picking:{isActive:1,isAttribute:!1},lighting:{enabled:!1}}}};var De=2,J=class{constructor(){this.id="collision-filter-effect",this.props=null,this.useInPicking=!0,this.order=1,this.channels={},this.collisionFBOs={}}setup(e){this.context=e;let{device:i}=e;this.dummyCollisionMap=i.createTexture({width:1,height:1}),this.collisionFilterPass=new Q(i,{id:"default-collision-filter"})}preRender({effects:e,layers:i,layerFilter:r,viewports:n,onViewportActive:o,views:a,isPicking:s,preRenderStats:l={}}){let{device:f}=this.context;if(s)return;let c=i.filter(({props:{visible:v,collisionEnabled:O}})=>v&&O);if(c.length===0){this.channels={};return}let u=e?.filter(v=>v.useInPicking&&l[v.id]),d=l["mask-effect"]?.didRender,p=this._groupByCollisionGroup(f,c),m=n[0],F=!this.lastViewport||!this.lastViewport.equals(m)||d;for(let v in p){let O=this.collisionFBOs[v],R=p[v],[P,k]=f.canvasContext.getPixelSize();O.resize({width:P/De,height:k/De}),this._render(R,{effects:u,layerFilter:r,onViewportActive:o,views:a,viewport:m,viewportChanged:F})}}_render(e,{effects:i,layerFilter:r,onViewportActive:n,views:o,viewport:a,viewportChanged:s}){let{collisionGroup:l}=e,f=this.channels[l];if(!f)return;let c=s||e===f||!(0,ni._deepEqual)(f.layers,e.layers,1)||e.layerBounds.some((u,d)=>!z(u,f.layerBounds[d]))||e.allLayersLoaded!==f.allLayersLoaded||e.layers.some(u=>u.props.transitions);if(this.channels[l]=e,c){this.lastViewport=a;let u=this.collisionFBOs[l];this.collisionFilterPass.renderCollisionMap(u,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:i,layerFilter:r,viewports:a?[a]:[],onViewportActive:n,views:o,shaderModuleProps:{collision:{enabled:!0,dummyCollisionMap:this.dummyCollisionMap},project:{devicePixelRatio:u.device.canvasContext.getDevicePixelRatio()/De}}})}}_groupByCollisionGroup(e,i){let r={};for(let n of i){let o=n.props.collisionGroup,a=r[o];a||(a={collisionGroup:o,layers:[],layerBounds:[],allLayersLoaded:!0},r[o]=a),a.layers.push(n),a.layerBounds.push(n.getBounds()),n.isLoaded||(a.allLayersLoaded=!1)}for(let n of Object.keys(r))this.collisionFBOs[n]||this.createFBO(e,n),this.channels[n]||(this.channels[n]=r[n]);for(let n of Object.keys(this.collisionFBOs))r[n]||this.destroyFBO(n);return r}getShaderModuleProps(e){let{collisionGroup:i,collisionEnabled:r}=e.props,{collisionFBOs:n,dummyCollisionMap:o}=this,a=n[i];return{collision:{enabled:r&&!!a,collisionFBO:a,dummyCollisionMap:o}}}cleanup(){this.dummyCollisionMap&&(this.dummyCollisionMap.delete(),this.dummyCollisionMap=void 0),this.channels={};for(let e of Object.keys(this.collisionFBOs))this.destroyFBO(e);this.collisionFBOs={},this.lastViewport=void 0}createFBO(e,i){let{width:r,height:n}=e.getDefaultCanvasContext().canvas,o=e.createTexture({format:"rgba8unorm",width:r,height:n,sampler:{minFilter:"nearest",magFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),a=e.createTexture({format:"depth16unorm",width:r,height:n});this.collisionFBOs[i]=e.createFramebuffer({id:`collision-${i}`,width:r,height:n,colorAttachments:[o],depthStencilAttachment:a})}destroyFBO(e){let i=this.collisionFBOs[e];i.colorAttachments[0]?.destroy(),i.depthStencilAttachment?.destroy(),i.destroy(),delete this.collisionFBOs[e]}};var Kn={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},ee=class extends oi.LayerExtension{getShaders(){return{modules:[ii]}}draw({shaderModuleProps:e}){e.collision?.drawToCollisionMap&&(this.props=this.clone(this.props.collisionTestProps).props)}initializeState(e,i){if(this.getAttributeManager()===null)return;this.context.deck?._addDefaultEffect(new J),this.getAttributeManager().add({collisionPriorities:{size:1,stepMode:"dynamic",accessor:"getCollisionPriority"}})}getNeedsPickingBuffer(){return this.props.collisionEnabled}};ee.defaultProps=Kn;ee.extensionName="CollisionFilterExtension";var ai=ee;var C=_(h(),1);var si=_(h(),1),li=`layout(std140) uniform maskUniforms {
3266
+ `},Kn=t=>{if(!t||!("dummyCollisionMap"in t))return{};let{enabled:e,collisionFBO:i,drawToCollisionMap:r,dummyCollisionMap:n}=t;return{enabled:e&&!r,sort:!!r,collision_texture:!r&&i?i.colorAttachments[0]:n}},ri={name:"collision",dependencies:[ii.project],vs:Wn,inject:Yn,getUniforms:Kn,uniformTypes:{sort:"i32",enabled:"i32"}};var oi=_(h(),1);var ni=_(h(),1),J=class extends ni._LayersPass{renderCollisionMap(e,i){let n=[0,0,0,0],o=[1,1,e.width-2,e.height-2];this.render({...i,clearColor:n,scissorRect:o,target:e,pass:"collision"})}getLayerParameters(e,i,r){return{...e.props.parameters,blend:!1,depthWriteEnabled:!0,depthCompare:"less-equal"}}getShaderModuleProps(){return{collision:{drawToCollisionMap:!0},picking:{isActive:1,isAttribute:!1},lighting:{enabled:!1}}}};var De=2,ee=class{constructor(){this.id="collision-filter-effect",this.props=null,this.useInPicking=!0,this.order=1,this.channels={},this.collisionFBOs={}}setup(e){this.context=e;let{device:i}=e;this.dummyCollisionMap=i.createTexture({width:1,height:1}),this.collisionFilterPass=new J(i,{id:"default-collision-filter"})}preRender({effects:e,layers:i,layerFilter:r,viewports:n,onViewportActive:o,views:a,isPicking:s,preRenderStats:l={}}){let{device:f}=this.context;if(s)return;let c=i.filter(({props:{visible:v,collisionEnabled:O}})=>v&&O);if(c.length===0){this.channels={};return}let u=e?.filter(v=>v.useInPicking&&l[v.id]),d=l["mask-effect"]?.didRender,p=this._groupByCollisionGroup(f,c),m=n[0],F=!this.lastViewport||!this.lastViewport.equals(m)||d;for(let v in p){let O=this.collisionFBOs[v],k=p[v],[P,N]=f.canvasContext.getPixelSize();O.resize({width:P/De,height:N/De}),this._render(k,{effects:u,layerFilter:r,onViewportActive:o,views:a,viewport:m,viewportChanged:F})}}_render(e,{effects:i,layerFilter:r,onViewportActive:n,views:o,viewport:a,viewportChanged:s}){let{collisionGroup:l}=e,f=this.channels[l];if(!f)return;let c=s||e===f||!(0,oi._deepEqual)(f.layers,e.layers,1)||e.layerBounds.some((u,d)=>!U(u,f.layerBounds[d]))||e.allLayersLoaded!==f.allLayersLoaded||e.layers.some(u=>u.props.transitions);if(this.channels[l]=e,c){this.lastViewport=a;let u=this.collisionFBOs[l];this.collisionFilterPass.renderCollisionMap(u,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:i,layerFilter:r,viewports:a?[a]:[],onViewportActive:n,views:o,shaderModuleProps:{collision:{enabled:!0,dummyCollisionMap:this.dummyCollisionMap},project:{devicePixelRatio:u.device.canvasContext.getDevicePixelRatio()/De}}})}}_groupByCollisionGroup(e,i){let r={};for(let n of i){let o=n.props.collisionGroup,a=r[o];a||(a={collisionGroup:o,layers:[],layerBounds:[],allLayersLoaded:!0},r[o]=a),a.layers.push(n),a.layerBounds.push(n.getBounds()),n.isLoaded||(a.allLayersLoaded=!1)}for(let n of Object.keys(r))this.collisionFBOs[n]||this.createFBO(e,n),this.channels[n]||(this.channels[n]=r[n]);for(let n of Object.keys(this.collisionFBOs))r[n]||this.destroyFBO(n);return r}getShaderModuleProps(e){let{collisionGroup:i,collisionEnabled:r}=e.props,{collisionFBOs:n,dummyCollisionMap:o}=this,a=n[i];return{collision:{enabled:r&&!!a,collisionFBO:a,dummyCollisionMap:o}}}cleanup(){this.dummyCollisionMap&&(this.dummyCollisionMap.delete(),this.dummyCollisionMap=void 0),this.channels={};for(let e of Object.keys(this.collisionFBOs))this.destroyFBO(e);this.collisionFBOs={},this.lastViewport=void 0}createFBO(e,i){let{width:r,height:n}=e.getDefaultCanvasContext().canvas,o=e.createTexture({format:"rgba8unorm",width:r,height:n,sampler:{minFilter:"nearest",magFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),a=e.createTexture({format:"depth16unorm",width:r,height:n});this.collisionFBOs[i]=e.createFramebuffer({id:`collision-${i}`,width:r,height:n,colorAttachments:[o],depthStencilAttachment:a})}destroyFBO(e){let i=this.collisionFBOs[e];i.colorAttachments[0]?.destroy(),i.depthStencilAttachment?.destroy(),i.destroy(),delete this.collisionFBOs[e]}};var Zn={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},te=class extends ai.LayerExtension{getShaders(){return{modules:[ri]}}draw({shaderModuleProps:e}){e.collision?.drawToCollisionMap&&(this.props=this.clone(this.props.collisionTestProps).props)}initializeState(e,i){if(this.getAttributeManager()===null)return;this.context.deck?._addDefaultEffect(new ee),this.getAttributeManager().add({collisionPriorities:{size:1,stepMode:"dynamic",accessor:"getCollisionPriority"}})}getNeedsPickingBuffer(){return this.props.collisionEnabled}};te.defaultProps=Zn;te.extensionName="CollisionFilterExtension";var si=te;var I=_(h(),1);var li=_(h(),1),fi=`layout(std140) uniform maskUniforms {
3271
3267
  vec4 bounds;
3272
3268
  highp int channel;
3273
3269
  bool enabled;
3274
3270
  bool inverted;
3275
3271
  bool maskByInstance;
3276
3272
  } mask;
3277
- `,Zn=`
3273
+ `,$n=`
3278
3274
  vec2 mask_getCoords(vec4 position) {
3279
3275
  return (position.xy - mask.bounds.xy) / (mask.bounds.zw - mask.bounds.xy);
3280
3276
  }
3281
- `,$n=`
3282
- ${li}
3283
- ${Zn}
3284
3277
  `,Xn=`
3278
+ ${fi}
3279
+ ${$n}
3280
+ `,Qn=`
3285
3281
  uniform sampler2D mask_texture;
3286
3282
 
3287
3283
  bool mask_isInBounds(vec2 texCoords) {
@@ -3306,10 +3302,10 @@ bool mask_isInBounds(vec2 texCoords) {
3306
3302
  return maskValue < 0.5;
3307
3303
  }
3308
3304
  }
3309
- `,Qn=`
3310
- ${li}
3311
- ${Xn}
3312
- `,Jn={"vs:#decl":`
3305
+ `,Jn=`
3306
+ ${fi}
3307
+ ${Qn}
3308
+ `,eo={"vs:#decl":`
3313
3309
  out vec2 mask_texCoords;
3314
3310
  `,"vs:#main-end":`
3315
3311
  vec4 mask_common_position;
@@ -3331,15 +3327,15 @@ in vec2 mask_texCoords;
3331
3327
 
3332
3328
  if (!mask) discard;
3333
3329
  }
3334
- `},eo=t=>t&&"maskMap"in t?{mask_texture:t.maskMap}:t||{},fi={name:"mask",dependencies:[si.project],vs:$n,fs:Qn,inject:Jn,getUniforms:eo,uniformTypes:{bounds:"vec4<f32>",channel:"i32",enabled:"i32",inverted:"i32",maskByInstance:"i32"}};var Ue=_(h(),1);var ci=_(h(),1),to={blendColorOperation:"subtract",blendColorSrcFactor:"zero",blendColorDstFactor:"one",blendAlphaOperation:"subtract",blendAlphaSrcFactor:"zero",blendAlphaDstFactor:"one"},te=class extends ci._LayersPass{constructor(e,i){super(e,i);let{mapSize:r=2048}=i;this.maskMap=e.createTexture({format:"rgba8unorm",width:r,height:r,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),this.fbo=e.createFramebuffer({id:"maskmap",width:r,height:r,colorAttachments:[this.maskMap]})}render(e){let i=2**e.channel,r=[255,255,255,255];super.render({...e,clearColor:r,colorMask:i,target:this.fbo,pass:"mask"})}getLayerParameters(e,i,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...to}}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var ie=_(h(),1),ze=new ie.WebMercatorViewport({width:1,height:1,longitude:0,latitude:0,zoom:0});function re(t){let[e,i]=ze.projectPosition(t);return[e,i]}function ye(t){return t.isGeospatial?ze:t}function V(t,e){let i=[1/0,1/0,-1/0,-1/0];for(let r of t){let n=r.getBounds();if(n){let o=r.projectPosition(n[0],{viewport:e,autoOffset:!1}),a=r.projectPosition(n[1],{viewport:e,autoOffset:!1});i[0]=Math.min(i[0],o[0]),i[1]=Math.min(i[1],o[1]),i[2]=Math.max(i[2],a[0]),i[3]=Math.max(i[3],a[1])}}return Number.isFinite(i[0])?i:null}var io=2048;function j(t){let{bounds:e,viewport:i,border:r=0}=t,{isGeospatial:n}=i;if(e[2]<=e[0]||e[3]<=e[1])return null;let o=n?ze.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]):i.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:a,height:s,zoom:l}=t;if(l===void 0){a=a-r*2,s=s-r*2;let f=Math.min(a/(e[2]-e[0]),s/(e[3]-e[1]));l=Math.min(Math.log2(f),20)}else if(!a||!s){let f=2**l;a=Math.round(Math.abs(e[2]-e[0])*f),s=Math.round(Math.abs(e[3]-e[1])*f);let c=io-r*2;if(a>c||s>c){let u=c/Math.max(a,s);a=Math.round(a*u),s=Math.round(s*u),l+=Math.log2(u)}}return n?new ie.WebMercatorViewport({id:i.id,x:r,y:r,width:a,height:s,longitude:o[0],latitude:o[1],zoom:l,orthographic:!0}):new ie.OrthographicViewport({id:i.id,x:r,y:r,width:a,height:s,target:o,zoom:l,flipY:!1})}function ro(t,e){let i;if(e&&e.length===2){let[o,a]=e,s=t.getBounds({z:o}),l=t.getBounds({z:a});i=[Math.min(s[0],l[0]),Math.min(s[1],l[1]),Math.max(s[2],l[2]),Math.max(s[3],l[3])]}else i=t.getBounds();let r=t.projectPosition(i.slice(0,2)),n=t.projectPosition(i.slice(2,4));return[r[0],r[1],n[0],n[1]]}function H(t,e,i){if(!t)return[0,0,1,1];let r=ro(e,i),n=no(r);return t[2]-t[0]<=n[2]-n[0]&&t[3]-t[1]<=n[3]-n[1]?t:[Math.max(t[0],n[0]),Math.max(t[1],n[1]),Math.min(t[2],n[2]),Math.min(t[3],n[3])]}function no(t){let e=t[2]-t[0],i=t[3]-t[1],r=(t[0]+t[2])/2,n=(t[1]+t[3])/2;return[r-e,n-i,r+e,n+i]}var ne=class{constructor(){this.id="mask-effect",this.props=null,this.useInPicking=!0,this.order=0,this.channels=[],this.masks=null}setup({device:e}){this.dummyMaskMap=e.createTexture({width:1,height:1}),this.maskPass=new te(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap}preRender({layers:e,layerFilter:i,viewports:r,onViewportActive:n,views:o,effects:a,isPicking:s}){let l=!1;if(s)return{didRender:l};let f=e.filter(p=>p.props.visible&&p.props.operation.includes("mask"));if(f.length===0)return this.masks=null,this.channels.length=0,{didRender:l};this.masks={};let c=this._sortMaskChannels(f),u=r[0],d=!this.lastViewport||!this.lastViewport.equals(u);if(u.resolution!==void 0)return Ue.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:l};for(let p in c){let m=this._renderChannel(c[p],{layerFilter:i,onViewportActive:n,views:o,effects:a,viewport:u,viewportChanged:d});l||(l=m)}return{didRender:l}}_renderChannel(e,{layerFilter:i,onViewportActive:r,views:n,effects:o,viewport:a,viewportChanged:s}){let l=!1,f=this.channels[e.index];if(!f)return l;let c=e===f||e.layers.length!==f.layers.length||e.layers.some((u,d)=>u!==f.layers[d]||u.props.transitions)||e.layerBounds.some((u,d)=>u!==f.layerBounds[d]);if(e.bounds=f.bounds,e.maskBounds=f.maskBounds,this.channels[e.index]=e,c||s){this.lastViewport=a;let u=V(e.layers,a);if(e.bounds=u&&H(u,a),c||!z(e.bounds,f.bounds)){let{maskPass:d,maskMap:p}=this,m=u&&j({bounds:e.bounds,viewport:a,width:p.width,height:p.height,border:1});e.maskBounds=m?m.getBounds():[0,0,1,1],d.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:i,viewports:m?[m]:[],onViewportActive:r,views:n,effects:o,shaderModuleProps:{project:{devicePixelRatio:1}}}),l=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},l}_sortMaskChannels(e){let i={},r=0;for(let n of e){let{id:o}=n.root,a=i[o];if(!a){if(++r>4){Ue.log.warn("Too many mask layers. The max supported is 4")();continue}a={id:o,index:this.channels.findIndex(s=>s?.id===o),layers:[],layerBounds:[],coordinateOrigin:n.root.props.coordinateOrigin,coordinateSystem:n.root.props.coordinateSystem},i[o]=a}a.layers.push(n),a.layerBounds.push(n.getBounds())}for(let n=0;n<4;n++){let o=this.channels[n];(!o||!(o.id in i))&&(this.channels[n]=null)}for(let n in i){let o=i[n];o.index<0&&(o.index=this.channels.findIndex(a=>!a),this.channels[o.index]=o)}return i}getShaderModuleProps(){return{mask:{maskMap:this.masks?this.maskMap:this.dummyMaskMap,maskChannels:this.masks}}}cleanup(){this.dummyMaskMap&&(this.dummyMaskMap.delete(),this.dummyMaskMap=void 0),this.maskPass&&(this.maskPass.delete(),this.maskPass=void 0,this.maskMap=void 0),this.lastViewport=void 0,this.masks=null,this.channels.length=0}};var oo={maskId:"",maskByInstance:void 0,maskInverted:!1},oe=class extends C.LayerExtension{initializeState(){this.context.deck?._addDefaultEffect(new ne)}getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(e=!!this.props.maskByInstance),this.state.maskByInstance=e,{modules:[fi]}}draw({context:e,shaderModuleProps:i}){let r={};r.maskByInstance=!!this.state.maskByInstance;let{maskId:n,maskInverted:o}=this.props,{maskChannels:a}=i.mask||{},{viewport:s}=e;if(a&&a[n]){let{index:l,bounds:f,coordinateOrigin:c}=a[n],{coordinateSystem:u}=a[n];r.enabled=!0,r.channel=l,r.inverted=o,u===C.COORDINATE_SYSTEM.DEFAULT&&(u=s.isGeospatial?C.COORDINATE_SYSTEM.LNGLAT:C.COORDINATE_SYSTEM.CARTESIAN);let d={modelMatrix:null,fromCoordinateOrigin:c,fromCoordinateSystem:u},p=this.projectPosition([f[0],f[1],0],d),m=this.projectPosition([f[2],f[3],0],d);r.bounds=[p[0],p[1],m[0],m[1]]}else n&&C.log.warn(`Could not find a mask layer with id: ${n}`)(),r.enabled=!1;this.setShaderModuleProps({mask:r})}};oe.defaultProps=oo;oe.extensionName="MaskExtension";var ui=oe;var bi=_(h(),1);var xi=_(h(),1);var Ve=_(h(),1),y={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},ao=Object.keys(y).map(t=>`const float TERRAIN_MODE_${t} = ${y[t]}.0;`).join(`
3335
- `),di=ao+`
3330
+ `},to=t=>t&&"maskMap"in t?{mask_texture:t.maskMap}:t||{},ci={name:"mask",dependencies:[li.project],vs:Xn,fs:Jn,inject:eo,getUniforms:to,uniformTypes:{bounds:"vec4<f32>",channel:"i32",enabled:"i32",inverted:"i32",maskByInstance:"i32"}};var Ue=_(h(),1);var ui=_(h(),1),io={blendColorOperation:"subtract",blendColorSrcFactor:"zero",blendColorDstFactor:"one",blendAlphaOperation:"subtract",blendAlphaSrcFactor:"zero",blendAlphaDstFactor:"one"},ie=class extends ui._LayersPass{constructor(e,i){super(e,i);let{mapSize:r=2048}=i;this.maskMap=e.createTexture({format:"rgba8unorm",width:r,height:r,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),this.fbo=e.createFramebuffer({id:"maskmap",width:r,height:r,colorAttachments:[this.maskMap]})}render(e){let i=2**e.channel,r=[255,255,255,255];super.render({...e,clearColor:r,colorMask:i,target:this.fbo,pass:"mask"})}getLayerParameters(e,i,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...io}}shouldDrawLayer(e){return e.props.operation.includes("mask")}delete(){this.fbo.delete(),this.maskMap.delete()}};var R=_(h(),1);var Na=256/6370972,ze=new R.WebMercatorViewport({width:1,height:1,longitude:0,latitude:0,zoom:0});function re(t){let[e,i]=ze.projectPosition(t);return[e,i]}function ye(t){return t.isGeospatial?ze:t}function ro(t){return!(t instanceof R._GlobeViewport)}function j(t,e){let i=[1/0,1/0,-1/0,-1/0];for(let r of t){let n=r.getBounds();if(n){let o=r.projectPosition(n[0],{viewport:e,autoOffset:!1}),a=r.projectPosition(n[1],{viewport:e,autoOffset:!1});i[0]=Math.min(i[0],o[0]),i[1]=Math.min(i[1],o[1]),i[2]=Math.max(i[2],a[0]),i[3]=Math.max(i[3],a[1])}}return Number.isFinite(i[0])?i:null}var no=2048;function H(t){let{bounds:e,viewport:i,border:r=0}=t,{isGeospatial:n}=i;if(e[2]<=e[0]||e[3]<=e[1])return null;let o=n?ze.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]):i.unprojectPosition([(e[0]+e[2])/2,(e[1]+e[3])/2,0]),{width:a,height:s,zoom:l}=t;if(l===void 0){a=a-r*2,s=s-r*2;let f=Math.min(a/(e[2]-e[0]),s/(e[3]-e[1]));l=Math.min(Math.log2(f),20)}else if(!a||!s){let f=2**l;a=Math.round(Math.abs(e[2]-e[0])*f),s=Math.round(Math.abs(e[3]-e[1])*f);let c=no-r*2;if(a>c||s>c){let u=c/Math.max(a,s);a=Math.round(a*u),s=Math.round(s*u),l+=Math.log2(u)}}return n?new R.WebMercatorViewport({id:i.id,x:r,y:r,width:a,height:s,longitude:o[0],latitude:o[1],zoom:l,orthographic:!0}):new R.OrthographicViewport({id:i.id,x:r,y:r,width:a,height:s,target:o,zoom:l,flipY:!1})}function oo(t,e){let i;if(e&&e.length===2){let[o,a]=e,s=t.getBounds({z:o}),l=t.getBounds({z:a});i=[Math.min(s[0],l[0]),Math.min(s[1],l[1]),Math.max(s[2],l[2]),Math.max(s[3],l[3])]}else i=t.getBounds();let r=t.projectPosition(i.slice(0,2)),n=t.projectPosition(i.slice(2,4));return[r[0],r[1],n[0],n[1]]}function G(t,e,i){if(!t)return[0,0,1,1];if(!ro(e))return t;let r=oo(e,i),n=ao(r);return t[2]-t[0]<=n[2]-n[0]&&t[3]-t[1]<=n[3]-n[1]?t:[Math.max(t[0],n[0]),Math.max(t[1],n[1]),Math.min(t[2],n[2]),Math.min(t[3],n[3])]}function ao(t){let e=t[2]-t[0],i=t[3]-t[1],r=(t[0]+t[2])/2,n=(t[1]+t[3])/2;return[r-e,n-i,r+e,n+i]}var ne=class{constructor(){this.id="mask-effect",this.props=null,this.useInPicking=!0,this.order=0,this.channels=[],this.masks=null}setup({device:e}){this.dummyMaskMap=e.createTexture({width:1,height:1}),this.maskPass=new ie(e,{id:"default-mask"}),this.maskMap=this.maskPass.maskMap}preRender({layers:e,layerFilter:i,viewports:r,onViewportActive:n,views:o,effects:a,isPicking:s}){let l=!1;if(s)return{didRender:l};let f=e.filter(p=>p.props.visible&&p.props.operation.includes("mask"));if(f.length===0)return this.masks=null,this.channels.length=0,{didRender:l};this.masks={};let c=this._sortMaskChannels(f),u=r[0],d=!this.lastViewport||!this.lastViewport.equals(u);if(u.resolution!==void 0)return Ue.log.warn("MaskExtension is not supported in GlobeView")(),{didRender:l};for(let p in c){let m=this._renderChannel(c[p],{layerFilter:i,onViewportActive:n,views:o,effects:a,viewport:u,viewportChanged:d});l||(l=m)}return{didRender:l}}_renderChannel(e,{layerFilter:i,onViewportActive:r,views:n,effects:o,viewport:a,viewportChanged:s}){let l=!1,f=this.channels[e.index];if(!f)return l;let c=e===f||e.layers.length!==f.layers.length||e.layers.some((u,d)=>u!==f.layers[d]||u.props.transitions)||e.layerBounds.some((u,d)=>u!==f.layerBounds[d]);if(e.bounds=f.bounds,e.maskBounds=f.maskBounds,this.channels[e.index]=e,c||s){this.lastViewport=a;let u=j(e.layers,a);if(e.bounds=u&&G(u,a),c||!U(e.bounds,f.bounds)){let{maskPass:d,maskMap:p}=this,m=u&&H({bounds:e.bounds,viewport:a,width:p.width,height:p.height,border:1});e.maskBounds=m?m.getBounds():[0,0,1,1],d.render({pass:"mask",channel:e.index,layers:e.layers,layerFilter:i,viewports:m?[m]:[],onViewportActive:r,views:n,effects:o,shaderModuleProps:{project:{devicePixelRatio:1}}}),l=!0}}return this.masks[e.id]={index:e.index,bounds:e.maskBounds,coordinateOrigin:e.coordinateOrigin,coordinateSystem:e.coordinateSystem},l}_sortMaskChannels(e){let i={},r=0;for(let n of e){let{id:o}=n.root,a=i[o];if(!a){if(++r>4){Ue.log.warn("Too many mask layers. The max supported is 4")();continue}a={id:o,index:this.channels.findIndex(s=>s?.id===o),layers:[],layerBounds:[],coordinateOrigin:n.root.props.coordinateOrigin,coordinateSystem:n.root.props.coordinateSystem},i[o]=a}a.layers.push(n),a.layerBounds.push(n.getBounds())}for(let n=0;n<4;n++){let o=this.channels[n];(!o||!(o.id in i))&&(this.channels[n]=null)}for(let n in i){let o=i[n];o.index<0&&(o.index=this.channels.findIndex(a=>!a),this.channels[o.index]=o)}return i}getShaderModuleProps(){return{mask:{maskMap:this.masks?this.maskMap:this.dummyMaskMap,maskChannels:this.masks}}}cleanup(){this.dummyMaskMap&&(this.dummyMaskMap.delete(),this.dummyMaskMap=void 0),this.maskPass&&(this.maskPass.delete(),this.maskPass=void 0,this.maskMap=void 0),this.lastViewport=void 0,this.masks=null,this.channels.length=0}};var so={maskId:"",maskByInstance:void 0,maskInverted:!1},oe=class extends I.LayerExtension{initializeState(){this.context.deck?._addDefaultEffect(new ne)}getShaders(){let e="instancePositions"in this.getAttributeManager().attributes;return this.props.maskByInstance!==void 0&&(e=!!this.props.maskByInstance),this.state.maskByInstance=e,{modules:[ci]}}draw({context:e,shaderModuleProps:i}){let r={};r.maskByInstance=!!this.state.maskByInstance;let{maskId:n,maskInverted:o}=this.props,{maskChannels:a}=i.mask||{},{viewport:s}=e;if(a&&a[n]){let{index:l,bounds:f,coordinateOrigin:c}=a[n],{coordinateSystem:u}=a[n];r.enabled=!0,r.channel=l,r.inverted=o,u===I.COORDINATE_SYSTEM.DEFAULT&&(u=s.isGeospatial?I.COORDINATE_SYSTEM.LNGLAT:I.COORDINATE_SYSTEM.CARTESIAN);let d={modelMatrix:null,fromCoordinateOrigin:c,fromCoordinateSystem:u},p=this.projectPosition([f[0],f[1],0],d),m=this.projectPosition([f[2],f[3],0],d);r.bounds=[p[0],p[1],m[0],m[1]]}else n&&I.log.warn(`Could not find a mask layer with id: ${n}`)(),r.enabled=!1;this.setShaderModuleProps({mask:r})}};oe.defaultProps=so;oe.extensionName="MaskExtension";var di=oe;var yi=_(h(),1);var bi=_(h(),1);var Ve=_(h(),1),y={NONE:0,WRITE_HEIGHT_MAP:1,USE_HEIGHT_MAP:2,USE_COVER:3,USE_COVER_ONLY:4,SKIP:5},lo=Object.keys(y).map(t=>`const float TERRAIN_MODE_${t} = ${y[t]}.0;`).join(`
3331
+ `),pi=lo+`
3336
3332
  layout(std140) uniform terrainUniforms {
3337
3333
  float mode;
3338
3334
  vec4 bounds;
3339
3335
  } terrain;
3340
3336
 
3341
3337
  uniform sampler2D terrain_map;
3342
- `,ae={name:"terrain",dependencies:[Ve.project],vs:`${di}
3338
+ `,ae={name:"terrain",dependencies:[Ve.project],vs:`${pi}
3343
3339
  out vec3 commonPos;
3344
3340
  // In globe mode, absolute Mercator position for terrain FBO UV lookups
3345
3341
  out vec2 terrainMercPos;
@@ -3352,7 +3348,7 @@ vec2 terrain_globe_to_mercator(vec3 globePosition) {
3352
3348
  float y = atanh(sinLat);
3353
3349
  return (vec2(x, y) + PI) * WORLD_SCALE;
3354
3350
  }
3355
- `,fs:`${di}in vec2 terrainMercPos;
3351
+ `,fs:`${pi}in vec2 terrainMercPos;
3356
3352
  in float terrainHeight;`,inject:{"vs:#main-start":`
3357
3353
  if (terrain.mode == TERRAIN_MODE_SKIP) {
3358
3354
  gl_Position = vec4(0.0);
@@ -3409,6 +3405,6 @@ if ((terrain.mode == TERRAIN_MODE_USE_COVER) || (terrain.mode == TERRAIN_MODE_US
3409
3405
  }
3410
3406
  return;
3411
3407
  }
3412
- `},getUniforms:(t={})=>{if(!t.dummyHeightMap)return{};if("terrainSkipRender"in t||"drawToTerrainHeightMap"in t){let{drawToTerrainHeightMap:e,heightMap:i,heightMapBounds:r,dummyHeightMap:n,terrainCover:o,useTerrainHeightMap:a,terrainSkipRender:s}=t,l=Ve.project.getUniforms(t.project),{commonOrigin:f}=l,c=s?y.SKIP:y.NONE,u=n,d=null;if(e)c=y.WRITE_HEIGHT_MAP,d=r;else if(a&&i)c=y.USE_HEIGHT_MAP,u=i,d=r;else if(o){let m=(t.isPicking?o.getPickingFramebuffer():o.getRenderFramebuffer())?.colorAttachments[0].texture;t.isPicking&&(c=y.SKIP),m?(u=m,c=c===y.SKIP?y.USE_COVER_ONLY:y.USE_COVER,d=o.bounds):t.isPicking&&!s&&(c=y.NONE)}return{mode:c,terrain_map:u,bounds:d?[d[0]-f[0],d[1]-f[1],d[2]-d[0],d[3]-d[1]]:[0,0,0,0]}}return{mode:y.NONE,terrain_map:t.dummyHeightMap,bounds:[0,0,0,0]}},uniformTypes:{mode:"f32",bounds:"vec4<f32>"}};var pi=_(h(),1);function se(t,e){return t.createFramebuffer({id:e.id,colorAttachments:[t.createTexture({id:e.id,...e.float&&{format:"rgba32float",type:5126},dimension:"2d",width:1,height:1,sampler:e.interpolate===!1?{minFilter:"nearest",magFilter:"nearest"}:{minFilter:"linear",magFilter:"linear"}})]})}var Pe=class{constructor(e){this.isDirty=!0,this.renderViewport=null,this.bounds=null,this.layers=[],this.targetBounds=null,this.targetBoundsCommon=null,this.targetLayer=e,this.tile=_i(e)}get id(){return this.targetLayer.id}get isActive(){return!!this.targetLayer.getCurrentLayer()}shouldUpdate({targetLayer:e,viewport:i,layers:r,layerNeedsRedraw:n}){e&&(this.targetLayer=e);let o=i?this._updateViewport(i):!1,a=r?this._updateLayers(r):!1;if(n){for(let s of this.layers)if(n[s]){a=!0;break}}return a||o}_updateLayers(e){let i=!1;if(e=this.tile?so(this.tile,e):e,e.length!==this.layers.length)i=!0;else for(let r=0;r<e.length;r++)if(e[r].id!==this.layers[r]){i=!0;break}return i&&(this.layers=e.map(r=>r.id)),i}_updateViewport(e){let i=this.targetLayer,r=!1;if(this.tile&&"boundingBox"in this.tile){if(!this.targetBounds){r=!0,this.targetBounds=this.tile.boundingBox;let o=re(this.targetBounds[0]),a=re(this.targetBounds[1]);this.targetBoundsCommon=[o[0],o[1],a[0],a[1]]}}else this.targetBounds!==i.getBounds()&&(r=!0,this.targetBounds=i.getBounds(),this.targetBoundsCommon=V([i],ye(e)));if(!this.targetBoundsCommon)return!1;let n=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let o=this.renderViewport?.zoom;r=r||n!==o;let a=e instanceof pi._GlobeViewport?this.targetBoundsCommon:H(this.targetBoundsCommon,e),s=this.bounds;r=r||!s||a.some((l,f)=>l!==s[f]),this.bounds=a}return r&&(this.renderViewport=j({bounds:this.bounds,zoom:n,viewport:e})),r}getRenderFramebuffer(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=se(this.targetLayer.context.device,{id:this.id})),this.fbo)}getPickingFramebuffer(){return!this.renderViewport||this.layers.length===0&&!this.targetLayer.props.pickable?null:(this.pickingFbo||(this.pickingFbo=se(this.targetLayer.context.device,{id:`${this.id}-picking`,interpolate:!1})),this.pickingFbo)}filterLayers(e){return e.filter(({id:i})=>this.layers.includes(i))}delete(){let{fbo:e,pickingFbo:i}=this;e&&(e.colorAttachments[0].destroy(),e.destroy()),i&&(i.colorAttachments[0].destroy(),i.destroy())}};function so(t,e){return e.filter(i=>{let r=_i(i);return r?lo(t.boundingBox,r.boundingBox):!0})}function _i(t){for(;t;){let{tile:e}=t.props;if(e)return e;t=t.parent}return null}function lo(t,e){return t&&e?t[0][0]<e[1][0]&&e[0][0]<t[1][0]&&t[0][1]<e[1][1]&&e[0][1]<t[1][1]:!1}var hi=_(h(),1),fo={blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"},Ee=class extends hi._LayersPass{getRenderableLayers(e,i){let{layers:r}=i,n=[],o=this._getDrawLayerParams(e,i,!0);for(let a=0;a<r.length;a++){let s=r[a];!s.isComposite&&o[a].shouldDrawLayer&&n.push(s)}return n}renderHeightMap(e,i){let r=e.getRenderFramebuffer(),n=e.renderViewport;!r||!n||(r.resize(n),this.render({...i,target:r,pass:"terrain-height-map",layers:i.layers,viewports:[n],effects:[],clearColor:[0,0,0,0]}))}renderTerrainCover(e,i){let r=e.getRenderFramebuffer(),n=e.renderViewport;if(!r||!n)return;let o=e.filterLayers(i.layers);r.resize(n),this.render({...i,target:r,pass:`terrain-cover-${e.id}`,layers:o,viewports:[n],clearColor:[0,0,0,0]})}getLayerParameters(e,i,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...e.props.operation.includes("terrain")&&fo}}getShaderModuleProps(e,i,r){return{terrain:{project:r.project}}}};var mi=_(h(),1),Me=class extends mi._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,i){let{layers:r}=i,n=[];this.drawParameters={},this._resetColorEncoder(i.pickZ);let o=this._getDrawLayerParams(e,i);for(let a=0;a<r.length;a++){let s=r[a];!s.isComposite&&o[a].shouldDrawLayer&&(n.push(s),this.drawParameters[s.id]=o[a].layerParameters)}return n}renderTerrainCover(e,i){let r=e.getPickingFramebuffer(),n=e.renderViewport;if(!r||!n)return;let o=e.filterLayers(i.layers),a=e.targetLayer;a.props.pickable&&o.unshift(a),r.resize(n);let l=this.drawParameters[a.id]?.blendColor?.[3]??0;this.render({...i,pickingFBO:r,pass:`terrain-cover-picking-${e.id}`,layers:o,viewports:[n],cullRect:void 0,deviceRect:n,pickZ:!1,clearColor:[0,0,0,l]})}getLayerParameters(e,i,r){let n;return this.drawParameters[e.id]?n=this.drawParameters[e.id]:(n=super.getLayerParameters(e,i,r),n.blend=!0),{...n,depthCompare:"always",blendAlphaSrcFactor:"constant"}}getShaderModuleProps(e,i,r){return{...super.getShaderModuleProps(e,i,r),terrain:{project:r.project}}}};var vi=_(h(),1),gi=2048,le=class{static isSupported(e){return e.isTextureFormatRenderable("rgba32float")}constructor(e){this.renderViewport=null,this.bounds=null,this.layers=[],this.layersBounds=[],this.layersBoundsCommon=null,this.lastViewport=null,this.device=e}getRenderFramebuffer(){return this.renderViewport?(this.fbo||(this.fbo=se(this.device,{id:"height-map",float:!0})),this.fbo):null}shouldUpdate({layers:e,viewport:i}){let r=e.length!==this.layers.length||e.some((o,a)=>o!==this.layers[a]||o.props.transitions||o.getBounds()!==this.layersBounds[a]);r&&(this.layers=e,this.layersBounds=e.map(o=>o.getBounds()),this.layersBoundsCommon=V(e,ye(i)));let n=!this.lastViewport||!i.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(r||n){let o=i instanceof vi._GlobeViewport?this.layersBoundsCommon:H(this.layersBoundsCommon,i);if(o[2]<=o[0]||o[3]<=o[1])return this.renderViewport=null,!1;this.bounds=o,this.lastViewport=i;let a=i.scale,s=(o[2]-o[0])*a,l=(o[3]-o[1])*a,f=i.isGeospatial?re([i.longitude??0,i.latitude??0]):[i.center[0],i.center[1]];return this.renderViewport=s>0||l>0?j({bounds:[f[0]-1,f[1]-1,f[0]+1,f[1]+1],zoom:i.zoom,width:Math.min(s,gi),height:Math.min(l,gi),viewport:i}):null,!0}return!1}delete(){this.fbo&&(this.fbo.colorAttachments[0].delete(),this.fbo.delete())}};var Ae=class{constructor(){this.id="terrain-effect",this.props=null,this.useInPicking=!0,this.isPicking=!1,this.isDrapingEnabled=!1,this.terrainCovers=new Map}setup({device:e,deck:i}){this.dummyHeightMap=e.createTexture({width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new Ee(e,{id:"terrain"}),this.terrainPickingPass=new Me(e,{id:"terrain-picking"}),le.isSupported(e)?this.heightMap=new le(e):xi.log.warn("Terrain offset mode is not supported by this browser")(),i._addDefaultShaderModule(ae)}preRender(e){if(e.pickZ){this.isDrapingEnabled=!1;return}let{viewports:i}=e,r=e.pass.startsWith("picking");this.isPicking=r,this.isDrapingEnabled=!0;let n=i[0],o=(r?this.terrainPickingPass:this.terrainPass).getRenderableLayers(n,e),a=o.filter(f=>f.props.operation.includes("terrain"));if(a.length===0)return;r||o.filter(c=>c.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(a,n,e);let s=o.filter(f=>f.state.terrainDrawMode==="drape"),l=e.effects?.filter(f=>f!==this);this._updateTerrainCovers(a,s,n,{...e,effects:l})}getShaderModuleProps(e,i){if(e.props.operation.includes("mask"))return{terrain:{dummyHeightMap:this.dummyHeightMap}};let{terrainDrawMode:r}=e.state,n=this.isDrapingEnabled?this.terrainCovers.get(e.id)??null:null;return this.isPicking&&e.props.operation.includes("terrain")&&(e.state._hasPickingCover=!!n?.getPickingFramebuffer()),{terrain:{project:i.project,isPicking:this.isPicking,heightMap:this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture||null,heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:n,useTerrainHeightMap:r==="offset",terrainSkipRender:r==="drape"||!e.props.operation.includes("draw")}}}cleanup({deck:e}){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);for(let i of this.terrainCovers.values())i.delete();this.terrainCovers.clear(),e._removeDefaultShaderModule(ae)}_updateHeightMap(e,i,r){!this.heightMap||!this.heightMap.shouldUpdate({layers:e,viewport:i})||this.terrainPass.renderHeightMap(this.heightMap,{...r,layers:e,shaderModuleProps:{terrain:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,drawToTerrainHeightMap:!0},project:{devicePixelRatio:1}}})}_updateTerrainCovers(e,i,r,n){let o={};for(let a of i)a.state.terrainCoverNeedsRedraw&&(o[a.id]=!0,a.state.terrainCoverNeedsRedraw=!1);for(let a of this.terrainCovers.values())a.isDirty=a.isDirty||a.shouldUpdate({layerNeedsRedraw:o});for(let a of e)this._updateTerrainCover(a,i,r,n);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,i,r,n){let o=this.isPicking?this.terrainPickingPass:this.terrainPass,a=this.terrainCovers.get(e.id);a||(a=new Pe(e),this.terrainCovers.set(e.id,a));try{let s=a.shouldUpdate({targetLayer:e,viewport:r,layers:i});(this.isPicking||a.isDirty||s)&&(o.renderTerrainCover(a,{...n,layers:i,shaderModuleProps:{terrain:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1},project:{devicePixelRatio:1}}}),this.isPicking||(a.isDirty=!1))}catch(s){e.raiseError(s,`Error rendering terrain cover ${a.id}`)}}_pruneTerrainCovers(){let e=[];for(let[i,r]of this.terrainCovers)r.isActive||e.push(i);for(let i of e)this.terrainCovers.delete(i)}};var co={terrainDrawMode:void 0},fe=class extends bi.LayerExtension{getShaders(){return{modules:[ae]}}initializeState(){this.context.deck?._addDefaultEffect(new Ae)}updateState(e){let{props:i,oldProps:r}=e;if(this.state.terrainDrawMode&&i.terrainDrawMode===r.terrainDrawMode&&i.extruded===r.extruded)return;let{terrainDrawMode:n}=i;if(!n){let o=this.props.extruded,a=this.getAttributeManager()?.attributes,s=a&&"instancePositions"in a;n=o||s?"offset":"drape"}this.setState({terrainDrawMode:n})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}};fe.defaultProps=co;fe.extensionName="TerrainExtension";var yi=fe;return Oi(ce);})();
3408
+ `},getUniforms:(t={})=>{if(!t.dummyHeightMap)return{};if("terrainSkipRender"in t||"drawToTerrainHeightMap"in t){let{drawToTerrainHeightMap:e,heightMap:i,heightMapBounds:r,dummyHeightMap:n,terrainCover:o,useTerrainHeightMap:a,terrainSkipRender:s}=t,l=Ve.project.getUniforms(t.project),{commonOrigin:f}=l,c=s?y.SKIP:y.NONE,u=n,d=null;if(e)c=y.WRITE_HEIGHT_MAP,d=r;else if(a&&i)c=y.USE_HEIGHT_MAP,u=i,d=r;else if(o){let m=(t.isPicking?o.getPickingFramebuffer():o.getRenderFramebuffer())?.colorAttachments[0].texture;t.isPicking&&(c=y.SKIP),m?(u=m,c=c===y.SKIP?y.USE_COVER_ONLY:y.USE_COVER,d=o.bounds):t.isPicking&&!s&&(c=y.NONE)}return{mode:c,terrain_map:u,bounds:d?[d[0]-f[0],d[1]-f[1],d[2]-d[0],d[3]-d[1]]:[0,0,0,0]}}return{mode:y.NONE,terrain_map:t.dummyHeightMap,bounds:[0,0,0,0]}},uniformTypes:{mode:"f32",bounds:"vec4<f32>"}};var _i=_(h(),1);function se(t,e){return t.createFramebuffer({id:e.id,colorAttachments:[t.createTexture({id:e.id,...e.float&&{format:"rgba32float",type:5126},dimension:"2d",width:1,height:1,sampler:e.interpolate===!1?{minFilter:"nearest",magFilter:"nearest"}:{minFilter:"linear",magFilter:"linear"}})]})}var Pe=class{constructor(e){this.isDirty=!0,this.renderViewport=null,this.bounds=null,this.layers=[],this.targetBounds=null,this.targetBoundsCommon=null,this.targetLayer=e,this.tile=hi(e)}get id(){return this.targetLayer.id}get isActive(){return!!this.targetLayer.getCurrentLayer()}shouldUpdate({targetLayer:e,viewport:i,layers:r,layerNeedsRedraw:n}){e&&(this.targetLayer=e);let o=i?this._updateViewport(i):!1,a=r?this._updateLayers(r):!1;if(n){for(let s of this.layers)if(n[s]){a=!0;break}}return a||o}_updateLayers(e){let i=!1;if(e=this.tile?fo(this.tile,e):e,e.length!==this.layers.length)i=!0;else for(let r=0;r<e.length;r++)if(e[r].id!==this.layers[r]){i=!0;break}return i&&(this.layers=e.map(r=>r.id)),i}_updateViewport(e){let i=this.targetLayer,r=!1;if(this.tile&&"boundingBox"in this.tile){if(!this.targetBounds){r=!0,this.targetBounds=this.tile.boundingBox;let o=re(this.targetBounds[0]),a=re(this.targetBounds[1]);this.targetBoundsCommon=[o[0],o[1],a[0],a[1]]}}else this.targetBounds!==i.getBounds()&&(r=!0,this.targetBounds=i.getBounds(),this.targetBoundsCommon=j([i],ye(e)));if(!this.targetBoundsCommon)return!1;let n=Math.ceil(e.zoom+.5);if(this.tile)this.bounds=this.targetBoundsCommon;else{let o=this.renderViewport?.zoom;r=r||n!==o;let a=e instanceof _i._GlobeViewport?this.targetBoundsCommon:G(this.targetBoundsCommon,e),s=this.bounds;r=r||!s||a.some((l,f)=>l!==s[f]),this.bounds=a}return r&&(this.renderViewport=H({bounds:this.bounds,zoom:n,viewport:e})),r}getRenderFramebuffer(){return!this.renderViewport||this.layers.length===0?null:(this.fbo||(this.fbo=se(this.targetLayer.context.device,{id:this.id})),this.fbo)}getPickingFramebuffer(){return!this.renderViewport||this.layers.length===0&&!this.targetLayer.props.pickable?null:(this.pickingFbo||(this.pickingFbo=se(this.targetLayer.context.device,{id:`${this.id}-picking`,interpolate:!1})),this.pickingFbo)}filterLayers(e){return e.filter(({id:i})=>this.layers.includes(i))}delete(){let{fbo:e,pickingFbo:i}=this;e&&(e.colorAttachments[0].destroy(),e.destroy()),i&&(i.colorAttachments[0].destroy(),i.destroy())}};function fo(t,e){return e.filter(i=>{let r=hi(i);return r?co(t.boundingBox,r.boundingBox):!0})}function hi(t){for(;t;){let{tile:e}=t.props;if(e)return e;t=t.parent}return null}function co(t,e){return t&&e?t[0][0]<e[1][0]&&e[0][0]<t[1][0]&&t[0][1]<e[1][1]&&e[0][1]<t[1][1]:!1}var mi=_(h(),1),uo={blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"},Ee=class extends mi._LayersPass{getRenderableLayers(e,i){let{layers:r}=i,n=[],o=this._getDrawLayerParams(e,i,!0);for(let a=0;a<r.length;a++){let s=r[a];!s.isComposite&&o[a].shouldDrawLayer&&n.push(s)}return n}renderHeightMap(e,i){let r=e.getRenderFramebuffer(),n=e.renderViewport;!r||!n||(r.resize(n),this.render({...i,target:r,pass:"terrain-height-map",layers:i.layers,viewports:[n],effects:[],clearColor:[0,0,0,0]}))}renderTerrainCover(e,i){let r=e.getRenderFramebuffer(),n=e.renderViewport;if(!r||!n)return;let o=e.filterLayers(i.layers);r.resize(n),this.render({...i,target:r,pass:`terrain-cover-${e.id}`,layers:o,viewports:[n],clearColor:[0,0,0,0]})}getLayerParameters(e,i,r){return{...e.props.parameters,blend:!0,depthCompare:"always",...e.props.operation.includes("terrain")&&uo}}getShaderModuleProps(e,i,r){return{terrain:{project:r.project}}}};var gi=_(h(),1),Me=class extends gi._PickLayersPass{constructor(){super(...arguments),this.drawParameters={}}getRenderableLayers(e,i){let{layers:r}=i,n=[];this.drawParameters={},this._resetColorEncoder(i.pickZ);let o=this._getDrawLayerParams(e,i);for(let a=0;a<r.length;a++){let s=r[a];!s.isComposite&&o[a].shouldDrawLayer&&(n.push(s),this.drawParameters[s.id]=o[a].layerParameters)}return n}renderTerrainCover(e,i){let r=e.getPickingFramebuffer(),n=e.renderViewport;if(!r||!n)return;let o=e.filterLayers(i.layers),a=e.targetLayer;a.props.pickable&&o.unshift(a),r.resize(n);let l=this.drawParameters[a.id]?.blendColor?.[3]??0;this.render({...i,pickingFBO:r,pass:`terrain-cover-picking-${e.id}`,layers:o,viewports:[n],cullRect:void 0,deviceRect:n,pickZ:!1,clearColor:[0,0,0,l]})}getLayerParameters(e,i,r){let n;return this.drawParameters[e.id]?n=this.drawParameters[e.id]:(n=super.getLayerParameters(e,i,r),n.blend=!0),{...n,depthCompare:"always",blendAlphaSrcFactor:"constant"}}getShaderModuleProps(e,i,r){return{...super.getShaderModuleProps(e,i,r),terrain:{project:r.project}}}};var xi=_(h(),1),vi=2048,le=class{static isSupported(e){return e.isTextureFormatRenderable("rgba32float")}constructor(e){this.renderViewport=null,this.bounds=null,this.layers=[],this.layersBounds=[],this.layersBoundsCommon=null,this.lastViewport=null,this.device=e}getRenderFramebuffer(){return this.renderViewport?(this.fbo||(this.fbo=se(this.device,{id:"height-map",float:!0})),this.fbo):null}shouldUpdate({layers:e,viewport:i}){let r=e.length!==this.layers.length||e.some((o,a)=>o!==this.layers[a]||o.props.transitions||o.getBounds()!==this.layersBounds[a]);r&&(this.layers=e,this.layersBounds=e.map(o=>o.getBounds()),this.layersBoundsCommon=j(e,ye(i)));let n=!this.lastViewport||!i.equals(this.lastViewport);if(!this.layersBoundsCommon)this.renderViewport=null;else if(r||n){let o=i instanceof xi._GlobeViewport?this.layersBoundsCommon:G(this.layersBoundsCommon,i);if(o[2]<=o[0]||o[3]<=o[1])return this.renderViewport=null,!1;this.bounds=o,this.lastViewport=i;let a=i.scale,s=(o[2]-o[0])*a,l=(o[3]-o[1])*a,f=i.isGeospatial?re([i.longitude??0,i.latitude??0]):[i.center[0],i.center[1]];return this.renderViewport=s>0||l>0?H({bounds:[f[0]-1,f[1]-1,f[0]+1,f[1]+1],zoom:i.zoom,width:Math.min(s,vi),height:Math.min(l,vi),viewport:i}):null,!0}return!1}delete(){this.fbo&&(this.fbo.colorAttachments[0].delete(),this.fbo.delete())}};var Ae=class{constructor(){this.id="terrain-effect",this.props=null,this.useInPicking=!0,this.isPicking=!1,this.isDrapingEnabled=!1,this.terrainCovers=new Map}setup({device:e,deck:i}){this.dummyHeightMap=e.createTexture({width:1,height:1,data:new Uint8Array([0,0,0,0])}),this.terrainPass=new Ee(e,{id:"terrain"}),this.terrainPickingPass=new Me(e,{id:"terrain-picking"}),le.isSupported(e)?this.heightMap=new le(e):bi.log.warn("Terrain offset mode is not supported by this browser")(),i._addDefaultShaderModule(ae)}preRender(e){if(e.pickZ){this.isDrapingEnabled=!1;return}let{viewports:i}=e,r=e.pass.startsWith("picking");this.isPicking=r,this.isDrapingEnabled=!0;let n=i[0],o=(r?this.terrainPickingPass:this.terrainPass).getRenderableLayers(n,e),a=o.filter(f=>f.props.operation.includes("terrain"));if(a.length===0)return;r||o.filter(c=>c.state.terrainDrawMode==="offset").length>0&&this._updateHeightMap(a,n,e);let s=o.filter(f=>f.state.terrainDrawMode==="drape"),l=e.effects?.filter(f=>f!==this);this._updateTerrainCovers(a,s,n,{...e,effects:l})}getShaderModuleProps(e,i){if(e.props.operation.includes("mask"))return{terrain:{dummyHeightMap:this.dummyHeightMap}};let{terrainDrawMode:r}=e.state,n=this.isDrapingEnabled?this.terrainCovers.get(e.id)??null:null;return this.isPicking&&e.props.operation.includes("terrain")&&(e.state._hasPickingCover=!!n?.getPickingFramebuffer()),{terrain:{project:i.project,isPicking:this.isPicking,heightMap:this.heightMap?.getRenderFramebuffer()?.colorAttachments[0].texture||null,heightMapBounds:this.heightMap?.bounds,dummyHeightMap:this.dummyHeightMap,terrainCover:n,useTerrainHeightMap:r==="offset",terrainSkipRender:r==="drape"||!e.props.operation.includes("draw")}}}cleanup({deck:e}){this.dummyHeightMap&&(this.dummyHeightMap.delete(),this.dummyHeightMap=void 0),this.heightMap&&(this.heightMap.delete(),this.heightMap=void 0);for(let i of this.terrainCovers.values())i.delete();this.terrainCovers.clear(),e._removeDefaultShaderModule(ae)}_updateHeightMap(e,i,r){!this.heightMap||!this.heightMap.shouldUpdate({layers:e,viewport:i})||this.terrainPass.renderHeightMap(this.heightMap,{...r,layers:e,shaderModuleProps:{terrain:{heightMapBounds:this.heightMap.bounds,dummyHeightMap:this.dummyHeightMap,drawToTerrainHeightMap:!0},project:{devicePixelRatio:1}}})}_updateTerrainCovers(e,i,r,n){let o={};for(let a of i)a.state.terrainCoverNeedsRedraw&&(o[a.id]=!0,a.state.terrainCoverNeedsRedraw=!1);for(let a of this.terrainCovers.values())a.isDirty=a.isDirty||a.shouldUpdate({layerNeedsRedraw:o});for(let a of e)this._updateTerrainCover(a,i,r,n);this.isPicking||this._pruneTerrainCovers()}_updateTerrainCover(e,i,r,n){let o=this.isPicking?this.terrainPickingPass:this.terrainPass,a=this.terrainCovers.get(e.id);a||(a=new Pe(e),this.terrainCovers.set(e.id,a));try{let s=a.shouldUpdate({targetLayer:e,viewport:r,layers:i});(this.isPicking||a.isDirty||s)&&(o.renderTerrainCover(a,{...n,layers:i,shaderModuleProps:{terrain:{dummyHeightMap:this.dummyHeightMap,terrainSkipRender:!1},project:{devicePixelRatio:1}}}),this.isPicking||(a.isDirty=!1))}catch(s){e.raiseError(s,`Error rendering terrain cover ${a.id}`)}}_pruneTerrainCovers(){let e=[];for(let[i,r]of this.terrainCovers)r.isActive||e.push(i);for(let i of e)this.terrainCovers.delete(i)}};var po={terrainDrawMode:void 0},fe=class extends yi.LayerExtension{getShaders(){return{modules:[ae]}}initializeState(){this.context.deck?._addDefaultEffect(new Ae)}updateState(e){let{props:i,oldProps:r}=e;if(this.state.terrainDrawMode&&i.terrainDrawMode===r.terrainDrawMode&&i.extruded===r.extruded)return;let{terrainDrawMode:n}=i;if(!n){let o=this.props.extruded,a=this.getAttributeManager()?.attributes,s=a&&"instancePositions"in a;n=o||s?"offset":"drape"}this.setState({terrainDrawMode:n})}onNeedsRedraw(){let e=this.state;e.terrainDrawMode==="drape"&&(e.terrainCoverNeedsRedraw=!0)}};fe.defaultProps=po;fe.extensionName="TerrainExtension";var Pi=fe;return Bi(ce);})();
3413
3409
  return __exports__;
3414
3410
  });