1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="9fdba884-0877-4516-aaac-6d777211b7bc",e._sentryDebugIdIdentifier="sentry-dbid-9fdba884-0877-4516-aaac-6d777211b7bc")}catch(e){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8786],{38786:function(e,t,i){i.r(t),i.d(t,{Animation:function(){return t8},AttributionControl:function(){return og},ContourLayer:function(){return nc},DATETIME:function(){return tU},DEFAULT_ICON_COLOR:function(){return t5},DEFAULT_ICON_SIZE:function(){return t4},DEFAULT_LINE_COLOR:function(){return tX},DEFAULT_LINE_WIDTH:function(){return tH},DEFAULT_TEXT_COLOR:function(){return t0},DEFAULT_TEXT_FONT_FAMILY:function(){return tY},DEFAULT_TEXT_FORMAT_FUNCTION:function(){return t3},DEFAULT_TEXT_OUTLINE_COLOR:function(){return t2},DEFAULT_TEXT_OUTLINE_WIDTH:function(){return t1},DEFAULT_TEXT_SIZE:function(){return t$},DirectionFormat:function(){return tJ},DirectionType:function(){return tW},FrontLayer:function(){return nT},FrontType:function(){return nx},GridLayer:function(){return nR},GridStyle:function(){return nS},HighLowLayer:function(){return nI},ImageInterpolation:function(){return iu},ImageType:function(){return id},LegendControl:function(){return nX},LogoControl:function(){return ou},ParticleLayer:function(){return nZ},Placement:function(){return ih},RasterLayer:function(){return nn},TimelineControl:function(){return oA},TooltipControl:function(){return n3},UnitSystem:function(){return ip},VERSION:function(){return tF},colorRampCanvas:function(){return a.w},ensureDefaultProps:function(){return t6},formatDatetime:function(){return ig},formatDirection:function(){return tK},formatUnit:function(){return tq},formatValue:function(){return tZ},formatValueWithUnit:function(){return tj},getClosestEndDatetime:function(){return il},getClosestStartDatetime:function(){return is},getDatetimeWeight:function(){return ir},getRasterMagnitudeData:function(){return ik},getRasterPoints:function(){return iR},interpolateDatetime:function(){return ia},loadJson:function(){return io},loadTextureData:function(){return ii},offsetDatetime:function(){return ic},offsetDatetimeRange:function(){return iA},parsePalette:function(){return a.H},setLibrary:function(){return tV}});var n,o,a=i(14817),r=i(85294),s=i(24958),l=i(79814),c=i(41569),A=i(71718),g=i(81840),u=i(22334),d=i(96424);let p=new Uint32Array([0,2,1,0,3,2]),h=new Float32Array([0,1,0,0,1,0,1,1]),f=`\ 2layout(std140) uniform bitmapUniforms { 3 vec4 bounds; 4 float coordinateConversion; 5 float desaturate; 6 vec3 tintColor; 7 vec4 transparentColor; 8} bitmap; 9`,m={name:"bitmap",vs:f,fs:f,uniformTypes:{bounds:"vec4<f32>",coordinateConversion:"f32",desaturate:"f32",tintColor:"vec3<f32>",transparentColor:"vec4<f32>"}};var v=`\ 10#version 300 es 11#define SHADER_NAME bitmap-layer-vertex-shader 12 13in vec2 texCoords; 14in vec3 positions; 15in vec3 positions64Low; 16 17out vec2 vTexCoord; 18out vec2 vTexPos; 19 20const vec3 pickingColor = vec3(1.0, 0.0, 0.0); 21 22void main(void) { 23 geometry.worldPosition = positions; 24 geometry.uv = texCoords; 25 geometry.pickingColor = pickingColor; 26 27 gl_Position = project_position_to_clipspace(positions, positions64Low, vec3(0.0), geometry.position); 28 DECKGL_FILTER_GL_POSITION(gl_Position, geometry); 29 30 vTexCoord = texCoords; 31 32 if (bitmap.coordinateConversion < -0.5) { 33 vTexPos = geometry.position.xy + project.commonOrigin.xy; 34 } else if (bitmap.coordinateConversion > 0.5) { 35 vTexPos = geometry.worldPosition.xy; 36 } 37 38 vec4 color = vec4(0.0); 39 DECKGL_FILTER_COLOR(color, geometry); 40} 41`;let C=` 42vec3 packUVsIntoRGB(vec2 uv) { 43 // Extract the top 8 bits. We want values to be truncated down so we can add a fraction 44 vec2 uv8bit = floor(uv * 256.); 45 46 // Calculate the normalized remainders of u and v parts that do not fit into 8 bits 47 // Scale and clamp to 0-1 range 48 vec2 uvFraction = fract(uv * 256.); 49 vec2 uvFraction4bit = floor(uvFraction * 16.); 50 51 // Remainder can be encoded in blue channel, encode as 4 bits for pixel coordinates 52 float fractions = uvFraction4bit.x + uvFraction4bit.y * 16.; 53
54 return vec3(uv8bit, fractions) / 255.; 55} 56`;var y=`\ 57#version 300 es 58#define SHADER_NAME bitmap-layer-fragment-shader 59 60#ifdef GL_ES 61precision highp float; 62#endif 63 64uniform sampler2D bitmapTexture; 65 66in vec2 vTexCoord; 67in vec2 vTexPos; 68 69out vec4 fragColor; 70 71/* projection utils */ 72const float TILE_SIZE = 512.0; 73const float PI = 3.1415926536; 74const float WORLD_SCALE = TILE_SIZE / PI / 2.0; 75 76// from degrees to Web Mercator 77vec2 lnglat_to_mercator(vec2 lnglat) { 78 float x = lnglat.x; 79 float y = clamp(lnglat.y, -89.9, 89.9); 80 return vec2( 81 radians(x) + PI, 82 PI + log(tan(PI * 0.25 + radians(y) * 0.5)) 83 ) * WORLD_SCALE; 84} 85 86// from Web Mercator to degrees 87vec2 mercator_to_lnglat(vec2 xy) { 88 xy /= WORLD_SCALE; 89 return degrees(vec2( 90 xy.x - PI, 91 atan(exp(xy.y - PI)) * 2.0 - PI * 0.5 92 )); 93} 94/* End projection utils */ 95 96// apply desaturation 97vec3 color_desaturate(vec3 color) { 98 float luminance = (color.r + color.g + color.b) * 0.333333333; 99 return mix(color, vec3(luminance), bitmap.desaturate); 100} 101 102// apply tint 103vec3 color_tint(vec3 color) { 104 return color * bitmap.tintColor; 105} 106 107// blend with background color 108vec4 apply_opacity(vec3 color, float alpha) { 109 if (bitmap.transparentColor.a == 0.0) { 110 return vec4(color, alpha); 111 } 112 float blendedAlpha = alpha + bitmap.transparentColor.a * (1.0 - alpha); 113 float highLightRatio = alpha / blendedAlpha; 114 vec3 blendedRGB = mix(bitmap.transparentColor.rgb, color, highLightRatio); 115 return vec4(blendedRGB, blendedAlpha); 116} 117 118vec2 getUV(vec2 pos) { 119 return vec2( 120 (pos.x - bitmap.bounds[0]) / (bitmap.bounds[2] - bitmap.bounds[0]), 121 (pos.y - bitmap.bounds[3]) / (bitmap.bounds[1] - bitmap.bounds[3]) 122 ); 123} 124 125${C} 126 127void main(void) { 128 vec2 uv = vTexCoord; 129 if (bitmap.coordinateConversion < -0.5) { 130 vec2 lnglat = mercator_to_lnglat(vTexPos); 131 uv = getUV(lnglat); 132 } else if (bitmap.coordinateConversion > 0.5) { 133 vec2 commonPos = lnglat_to_mercator(vTexPos); 134 uv = getUV(commonPos); 135 } 136 vec4 bitmapColor = texture(bitmapTexture, uv); 137 138 fragColor = apply_opacity(color_tint(color_desaturate(bitmapColor.rgb)), bitmapColor.a * layer.opacity); 139 140 geometry.uv = uv; 141 DECKGL_FILTER_COLOR(fragColor, geometry); 142 143 if (bool(picking.isActive) && !bool(picking.isAttribute)) { 144 // Since instance information is not used, we can use picking color for pixel index 145 fragColor.rgb = packUVsIntoRGB(uv); 146 } 147} 148`;class I extends l.Z{getShaders(){return super.getShaders({vs:v,fs:y,modules:[c.Z,A.Z,m]})}initializeState(){let e=this.getAttributeManager();e.remove(["instancePickingColors"]),e.add({indices:{size:1,isIndexed:!0,update:e=>e.value=this.state.mesh.indices,noAlloc:!0},positions:{size:3,type:"float64",fp64:this.use64bitPositions(),update:e=>e.value=this.state.mesh.positions,noAlloc:!0},texCoords:{size:2,update:e=>e.value=this.state.mesh.texCoords,noAlloc:!0}})}updateState({props:e,oldProps:t,changeFlags:i}){let n=this.getAttributeManager();if(i.extensionsChanged&&(this.state.model?.destroy(),this.state.model=this._getModel(),n.invalidateAll()),e.bounds!==t.bounds){let e=this.state.mesh,t=this._createMesh();for(let i in this.state.model.setVertexCount(t.vertexCount),t)e&&e[i]!==t[i]&&n.invalidate(i);this.setState({mesh:t,...this._getCoordinateUniforms()})}else e._imageCoordinateSystem!==t._imageCoordinateSystem&&this.setState(this._getCoordinateUniforms())}getPickingInfo(e){let{image:t}=this.props,i=e.info;if(!i.color||!t)return i.bitmap=null,i;let{width:n,height:o}=t;i.index=0;let a=function(e){let[t,i,n]=e;return[(t+(15&n)/16)/256,(i+(240&n)/256)/256]}(i.color);return i.bitmap={size:{width:n,height:o},uv:a,pixel:[Math.floor(a[0]*n),Math.floor(a[1]*o)]},i}disablePickingIndex(){this.setState({disablePicking:!0})}restorePickingColors(){this.setState({disablePicking:!1})}_updateAutoHighlight(e){super._updateAutoHighlight({...e,color:this.encodePickingColor(0)})}_createMesh(){let{bounds:e}=this.props,t=e;return E(e)&&(t=[[e[0],e[1]],[e[0],e[3]],[e[2],e[3]],[e[2],e[1]]]),function(e,t){if(!t)return function(e){let t=new Float64Array(12);for(let i=0;i<e.length;i++)t[3*i+0]=e[i][0],t[3*i+1]=e[i][1],t[3*i+2]=e[i][2]||0;return{vertexCount:6,positions:t,indices:p,texCoords:h}}(e);let i=Math.max(Math.abs(e[0][0]-e[3][0]),Math.abs(e[1][0]-e[2][0])),n=Math.max(Math.abs(e[1][1]-e[0][1]),Math.abs(e[2][1]-e[3][1])),o=Math.ceil(i/t)+1,a=Math.ceil(n/t)+1,r=(o-1)*(a-1)*6,s=new Uint32Array(r),l=new Float32Array(o*a*2),c=new Float64Array(o*a*3),A=0,g=0;for(let t=0;t<o;t++){let i=t/(o-1);for(let n=0;n<a;n++){let o=n/(a-1),r=(0,d.t7)((0,d.t7)(e[0],e[1],o),(0,d.t7)(e[3],e[2],o),i);c[3*A+0]=r[0],c[3*A+1]=r[1],c[3*A+2]=r[2]||0,l[2*A+0]=i,l[2*A+1]=1-o,t>0&&n>0&&(s[g++]=A-a,s[g++]=A-a-1,s[g++]=A-1,s[g++]=A-a,s[g++]=A-1,s[g++]=A),A++}}return{vertexCount:r,positions:c,indices:s,texCoords:l}}(t,this.context.viewport.resolution)}
148_getModel(){return new g.H(this.context.device,{...this.getShaders(),id:this.props.id,bufferLayout:this.getAttributeManager().getBufferLayouts(),topology:"triangle-list",isInstanced:!1})}draw(e){let{shaderModuleProps:t}=e,{model:i,coordinateConversion:n,bounds:o,disablePicking:a}=this.state,{image:r,desaturate:s,transparentColor:l,tintColor:c}=this.props;if((!t.picking.isActive||!a)&&r&&i){let e={bitmapTexture:r,bounds:o,coordinateConversion:n,desaturate:s,tintColor:c.slice(0,3).map(e=>e/255),transparentColor:l.map(e=>e/255)};i.shaderInputs.setProps({bitmap:e}),i.draw(this.context.renderPass)}}_getCoordinateUniforms(){let{_imageCoordinateSystem:e}=this.props;if("default"!==e){let{bounds:t}=this.props;if(!E(t))throw Error("_imageCoordinateSystem only supports rectangular bounds");let i=this.context.viewport.resolution?"lnglat":"cartesian";if("lnglat"==(e="lnglat"===e?"lnglat":"cartesian")&&"cartesian"===i)return{coordinateConversion:-1,bounds:t};if("cartesian"===e&&"lnglat"===i){let e=(0,u.w5)([t[0],t[1]]),i=(0,u.w5)([t[2],t[3]]);return{coordinateConversion:1,bounds:[e[0],e[1],i[0],i[1]]}}}return{coordinateConversion:0,bounds:[0,0,0,0]}}}I.layerName="BitmapLayer",I.defaultProps={image:{type:"image",value:null,async:!0},bounds:{type:"array",value:[1,0,0,1],compare:!0},_imageCoordinateSystem:"default",desaturate:{type:"number",min:0,max:1,value:0},transparentColor:{type:"color",value:[0,0,0,0]},tintColor:{type:"color",value:[255,255,255]},textureParameters:{type:"object",ignore:!0,value:null}};var x=I;function E(e){return Number.isFinite(e[0])}var b=i(12051),w=i(88789),B=i(5964),P=i(78882);let T=`\ 149layout(std140) uniform iconUniforms { 150 float sizeScale; 151 vec2 iconsTextureDim; 152 float sizeBasis; 153 float sizeMinPixels; 154 float sizeMaxPixels; 155 bool billboard; 156 highp int sizeUnits; 157 float alphaCutoff; 158} icon; 159`,Q={name:"icon",vs:T,fs:T,uniformTypes:{sizeScale:"f32",iconsTextureDim:"vec2<f32>",sizeBasis:"f32",sizeMinPixels:"f32",sizeMaxPixels:"f32",billboard:"f32",sizeUnits:"i32",alphaCutoff:"f32"}};var _=`\ 160#version 300 es 161#define SHADER_NAME icon-layer-vertex-shader 162in vec2 positions; 163in vec3 instancePositions; 164in vec3 instancePositions64Low; 165in float instanceSizes; 166in float instanceAngles; 167in vec4 instanceColors; 168in vec3 instancePickingColors; 169in vec4 instanceIconFrames; 170in float instanceColorModes; 171in vec2 instanceOffsets; 172in vec2 instancePixelOffset; 173out float vColorMode; 174out vec4 vColor; 175out vec2 vTextureCoords; 176out vec2 uv; 177vec2 rotate_by_angle(vec2 vertex, float angle) { 178float angle_radian = angle * PI / 180.0; 179float cos_angle = cos(angle_radian); 180float sin_angle = sin(angle_radian); 181mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle); 182return rotationMatrix * vertex; 183} 184void main(void) { 185geometry.worldPosition = instancePositions; 186geometry.uv = positions; 187geometry.pickingColor = instancePickingColors; 188uv = positions; 189vec2 iconSize = instanceIconFrames.zw; 190float sizePixels = clamp( 191project_size_to_pixel(instanceSizes * icon.sizeScale, icon.sizeUnits),
192icon.sizeMinPixels, icon.sizeMaxPixels 193); 194float iconConstraint = icon.sizeBasis == 0.0 ? iconSize.x : iconSize.y; 195float instanceScale = iconConstraint == 0.0 ? 0.0 : sizePixels / iconConstraint; 196vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets; 197pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) * instanceScale; 198pixelOffset += instancePixelOffset; 199pixelOffset.y *= -1.0; 200if (icon.billboard) { 201gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position); 202DECKGL_FILTER_GL_POSITION(gl_Position, geometry); 203vec3 offset = vec3(pixelOffset, 0.0); 204DECKGL_FILTER_SIZE(offset, geometry); 205gl_Position.xy += project_pixel_size_to_clipspace(offset.xy); 206} else { 207vec3 offset_common = vec3(project_pixel_size(pixelOffset), 0.0); 208DECKGL_FILTER_SIZE(offset_common, geometry); 209gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset_common, geometry.position); 210DECKGL_FILTER_GL_POSITION(gl_Position, geometry); 211} 212vTextureCoords = mix( 213instanceIconFrames.xy, 214instanceIconFrames.xy + iconSize, 215(positions.xy + 1.0) / 2.0 216) / icon.iconsTextureDim; 217vColor = instanceColors; 218DECKGL_FILTER_COLOR(vColor, geometry); 219vColorMode = instanceColorModes; 220} 221`,S=`\ 222#version 300 es 223#define SHADER_NAME icon-layer-fragment-shader 224precision highp float; 225uniform sampler2D iconsTexture; 226in float vColorMode; 227in vec4 vColor; 228in vec2 vTextureCoords; 229in vec2 uv; 230out vec4 fragColor; 231void main(void) { 232geometry.uv = uv; 233vec4 texColor = texture(iconsTexture, vTextureCoords); 234vec3 color = mix(texColor.rgb, vColor.rgb, vColorMode); 235float a = texColor.a * layer.opacity * vColor.a; 236if (a < icon.alphaCutoff) { 237discard; 238} 239fragColor = vec4(color, a); 240DECKGL_FILTER_COLOR(fragColor, geometry); 241} 242`;let M=`\ 243struct IconUniforms { 244 sizeScale: f32, 245 iconsTextureDim: vec2<f32>, 246 sizeBasis: f32, 247 sizeMinPixels: f32, 248 sizeMaxPixels: f32, 249 billboard: i32, 250 sizeUnits: i32, 251 alphaCutoff: f32 252}; 253 254@group(0) @binding(auto) var<uniform> icon: IconUniforms; 255@group(0) @binding(auto) var iconsTexture : texture_2d<f32>; 256@group(0) @binding(auto) var iconsTextureSampler : sampler; 257 258fn rotate_by_angle(vertex: vec2<f32>, angle_deg: f32) -> vec2<f32> { 259 let angle_radian = angle_deg * PI / 180.0; 260 let c = cos(angle_radian); 261 let s = sin(angle_radian); 262 let rotation = mat2x2<f32>(vec2<f32>(c, s), vec2<f32>(-s, c)); 263 return rotation * vertex; 264} 265 266struct Attributes { 267 @location(0) positions: vec2<f32>, 268 269 @location(1) instancePositions: vec3<f32>, 270 @location(2) instancePositions64Low: vec3<f32>, 271 @location(3) instanceSizes: f32, 272 @location(4) instanceAngles: f32, 273 @location(5) instanceColors: vec4<f32>, 274 @location(6) instancePickingColors: vec3<f32>, 275 @location(7) instanceIconFrames: vec4<f32>, 276 @location(8) instanceColorModes: f32, 277 @location(9) instanceOffsets: vec2<f32>, 278 @location(10) instancePixelOffset: vec2<f32>, 279}; 280 281struct Varyings { 282 @builtin(position) position: vec4<f32>, 283 284 @location(0) vColorMode: f32, 285 @location(1) vColor: vec4<f32>, 286 @location(2) vTextureCoords: vec2<f32>, 287 @location(3) uv: vec2<f32>, 288 @location(4) pickingColor: vec3<f32>, 289}; 290 291@vertex 292fn vertexMain(inp: Attributes) -> Varyings { 293 // write geometry fields used by filters + FS 294 geometry.worldPosition = inp.instancePositions; 295 geometry.uv = inp.positions; 296 geometry.pickingColor = inp.instancePickingColors; 297 298 var outp: Varyings; 299 outp.uv = inp.positions; 300 301 let iconSize = inp.instanceIconFrames.zw; 302 303 // convert size in meters to pixels, then clamp 304 let sizePixels = clamp( 305 project_unit_size_to_pixel(inp.instanceSizes * icon.sizeScale, icon.sizeUnits),
306 icon.sizeMinPixels, icon.sizeMaxPixels 307 ); 308 309 // scale icon height to match instanceSize 310 let iconConstraint = select(iconSize.y, iconSize.x, icon.sizeBasis == 0.0); 311 let instanceScale = select(sizePixels / iconConstraint, 0.0, iconConstraint == 0.0); 312 313 // scale and rotate vertex in "pixel" units; then add per-instance pixel offset 314 var pixelOffset = inp.positions / 2.0 * iconSize + inp.instanceOffsets; 315 pixelOffset = rotate_by_angle(pixelOffset, inp.instanceAngles) * instanceScale; 316 pixelOffset = pixelOffset + inp.instancePixelOffset; 317 pixelOffset.y = pixelOffset.y * -1.0; 318 319 if (icon.billboard != 0) { 320 var pos = project_position_to_clipspace(inp.instancePositions, inp.instancePositions64Low, vec3<f32>(0.0)); // TODO, &geometry.position); 321 // DECKGL_FILTER_GL_POSITION(pos, geometry); 322 323 var offset = vec3<f32>(pixelOffset, 0.0); 324 // DECKGL_FILTER_SIZE(offset, geometry); 325 let clipOffset = project_pixel_size_to_clipspace(offset.xy); 326 pos = vec4<f32>(pos.x + clipOffset.x, pos.y + clipOffset.y, pos.z, pos.w); 327 outp.position = pos; 328 } else { 329 var offset_common = vec3<f32>(project_pixel_size_vec2(pixelOffset), 0.0); 330 // DECKGL_FILTER_SIZE(offset_common, geometry); 331 var pos = project_position_to_clipspace(inp.instancePositions, inp.instancePositions64Low, offset_common); // TODO, &geometry.position); 332 // DECKGL_FILTER_GL_POSITION(pos, geometry); 333 outp.position = pos; 334 } 335 336 let uvMix = (inp.positions.xy + vec2<f32>(1.0, 1.0)) * 0.5; 337 outp.vTextureCoords = mix(inp.instanceIconFrames.xy, inp.instanceIconFrames.xy + iconSize, uvMix) / icon.iconsTextureDim; 338 339 outp.vColor = inp.instanceColors; 340 // DECKGL_FILTER_COLOR(outp.vColor, geometry); 341 342 outp.vColorMode = inp.instanceColorModes; 343 outp.pickingColor = inp.instancePickingColors; 344 345 return outp; 346} 347 348@fragment 349fn fragmentMain(inp: Varyings) -> @location(0) vec4<f32> { 350 // expose to deck.gl filter hooks 351 geometry.uv = inp.uv; 352 353 let texColor = textureSample(iconsTexture, iconsTextureSampler, inp.vTextureCoords); 354 355 // if colorMode == 0, use pixel color from the texture 356 // if colorMode == 1 (or picking), use texture as transparency mask 357 let rgb = mix(texColor.rgb, inp.vColor.rgb, inp.vColorMode); 358 let a = texColor.a * layer.opacity * inp.vColor.a; 359 360 if (a < icon.alphaCutoff) { 361 discard; 362 } 363 364 if (picking.isActive > 0.5) { 365 if (!picking_isColorValid(inp.pickingColor)) { 366 discard; 367 } 368 return vec4<f32>(inp.pickingColor, 1.0); 369 } 370 371 var fragColor = deckgl_premultiplied_alpha(vec4<f32>(rgb, a)); 372 373 if (picking.isHighlightActive > 0.5) { 374 let highlightedObjectColor = picking_normalizeColor(picking.highlightedObjectColor); 375 if (picking_isColorZero(abs(inp.pickingColor - highlightedObjectColor))) { 376 let highLightAlpha = picking.highlightColor.a; 377 let blendedAlpha = highLightAlpha + fragColor.a * (1.0 - highLightAlpha); 378 if (blendedAlpha > 0.0) { 379 let highLightRatio = highLightAlpha / blendedAlpha; 380 fragColor = vec4<f32>( 381 mix(fragColor.rgb, picking.highlightColor.rgb, highLightRatio), 382 blendedAlpha 383 ); 384 } else { 385 fragColor = vec4<f32>(fragColor.rgb, 0.0); 386 } 387 } 388 } 389 390 return fragColor; 391} 392`;var L=i(33657);let O=()=>{},D={minFilter:"linear",mipmapFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},R={x:0,y:0,width:0,height:0};function k(e){return e&&(e.id||e.url)}function z(e){let{device:t}=e;"webgl"===t.type?e.generateMipmapsWebGL():"webgpu"===t.type&&t.generateMipmapsWebGPU(e)}function F(e,t,i){for(let n=0;n<t.length;n++){let{icon:o,xOffset:a}=t[n];e[k(o)]={...o,x:a,y:i}}}class U{constructor(e,{onUpdate:t=O,onError:i=O}){this._loadOptions=null,this._texture=null,this._externalTexture=null,this._mapping={},this._samplerParameters=null,this._pendingCount=0,this._autoPacking=!1,this._xOffset=0,this._yOffset=0,this._rowHeight=0,this._buffer=4,this._canvasWidth=1024,this._canvasHeight=0,this._canvas=null,this.device=e,this.onUpdate=t,this.onError=i}finalize(){this._texture?.delete()}getTexture(){return this._texture||this._externalTexture}getIconMapping(e){let t=this._autoPacking?k(e):e;return this._mapping[t]||R}setProps({loadOptions:e,autoPacking:t,iconAtlas:i,iconMapping:n,textureParameters:o}){e&&(this._loadOptions=e),void 0!==t&&(this._autoPacking=t),n&&(this._mapping=n),i&&(this._texture?.delete(),this._texture=null,this._externalTexture=i),o&&(this._samplerParameters=o)}
392get isLoaded(){return 0===this._pendingCount}packIcons(e,t){if(!this._autoPacking||"undefined"==typeof document)return;let i=Object.values(function(e,t,i){if(!e||!t)return null;i=i||{};let n={},{iterable:o,objectInfo:a}=(0,w.jB)(e);for(let e of o){a.index++;let o=t(e,a),r=k(o);if(!o)throw Error("Icon is missing.");if(!o.url)throw Error("Icon url is missing.");n[r]||i[r]&&o.url===i[r].url||(n[r]={...o,source:e,sourceIndex:a.index})}return n}(e,t,this._mapping)||{});if(i.length>0){let{mapping:e,xOffset:t,yOffset:n,rowHeight:o,canvasHeight:a}=function({icons:e,buffer:t,mapping:i={},xOffset:n=0,yOffset:o=0,rowHeight:a=0,canvasWidth:r}){let s=[];for(let l=0;l<e.length;l++){let c=e[l];if(!i[k(c)]){let{height:e,width:l}=c;n+l+t>r&&(F(i,s,o),n=0,o=a+o+t,a=0,s=[]),s.push({icon:c,xOffset:n}),n=n+l+t,a=Math.max(a,e)}}return s.length>0&&F(i,s,o),{mapping:i,rowHeight:a,xOffset:n,yOffset:o,canvasWidth:r,canvasHeight:Math.pow(2,Math.ceil(Math.log2(a+o+t)))}}({icons:i,buffer:this._buffer,canvasWidth:this._canvasWidth,mapping:this._mapping,rowHeight:this._rowHeight,xOffset:this._xOffset,yOffset:this._yOffset});this._rowHeight=o,this._mapping=e,this._xOffset=t,this._yOffset=n,this._canvasHeight=a,this._texture||(this._texture=this.device.createTexture({format:"rgba8unorm",data:null,width:this._canvasWidth,height:this._canvasHeight,sampler:this._samplerParameters||D,mipLevels:this.device.getMipLevelCount(this._canvasWidth,this._canvasHeight)})),this._texture.height!==this._canvasHeight&&(this._texture=function(e,t,i,n){let{width:o,height:a,device:r}=e,s=r.createTexture({format:"rgba8unorm",width:t,height:i,sampler:n,mipLevels:r.getMipLevelCount(t,i)}),l=r.createCommandEncoder();l.copyTextureToTexture({sourceTexture:e,destinationTexture:s,width:o,height:a});let c=l.finish();return r.submit(c),z(s),e.destroy(),s}(this._texture,this._canvasWidth,this._canvasHeight,this._samplerParameters||D)),this.onUpdate(!0),this._canvas=this._canvas||document.createElement("canvas"),this._loadIcons(i)}}_loadIcons(e){let t=this._canvas.getContext("2d",{willReadFrequently:!0});for(let i of e)this._pendingCount++,(0,L.z)(i.url,this._loadOptions).then(e=>{let n=k(i),o=this._mapping[n],{x:a,y:r,width:s,height:l}=o,{image:c,width:A,height:g}=function(e,t,i,n){let o=Math.min(i/t.width,n/t.height),a=Math.floor(t.width*o),r=Math.floor(t.height*o);return 1===o?{image:t,width:a,height:r}:(e.canvas.height=r,e.canvas.width=a,e.clearRect(0,0,a,r),e.drawImage(t,0,0,t.width,t.height,0,0,a,r),{image:e.canvas,width:a,height:r})}(t,e,s,l),u=a+(s-A)/2,d=r+(l-g)/2;this._texture?.copyExternalImage({image:c,x:u,y:d,width:A,height:g}),o.x=u,o.y=d,o.width=A,o.height=g,this._texture&&z(this._texture),this.onUpdate(A!==s||g!==l)}).catch(e=>{this.onError({url:i.url,source:i.source,sourceIndex:i.sourceIndex,loadOptions:this._loadOptions,error:e})}).finally(()=>{this._pendingCount--})}}let N=[0,0,0,255],V={iconAtlas:{type:"image",value:null,async:!0},iconMapping:{type:"object",value:{},async:!0},sizeScale:{type:"number",value:1,min:0},billboard:!0,sizeUnits:"pixels",sizeBasis:"height",sizeMinPixels:{type:"number",min:0,value:0},sizeMaxPixels:{type:"number",min:0,value:Number.MAX_SAFE_INTEGER},alphaCutoff:{type:"number",value:.05,min:0,max:1},getPosition:{type:"accessor",value:e=>e.position},getIcon:{type:"accessor",value:e=>e.icon},getColor:{type:"accessor",value:N},getSize:{type:"accessor",value:1},getAngle:{type:"accessor",value:0},getPixelOffset:{type:"accessor",value:[0,0]},onIconError:{type:"function",value:null,optional:!0},textureParameters:{type:"object",ignore:!0,value:null}};class W extends l.Z{getShaders(){return super.getShaders({vs:_,fs:S,source:M,modules:[c.Z,B.Z,A.Z,Q]})}initializeState(){this.state={iconManager:new U(this.context.device,{onUpdate:this._onUpdate.bind(this),onError:this._onError.bind(this)})},this.getAttributeManager().addInstanced({instancePositions:{size:3,type:"float64",fp64:this.use64bitPositions(),transition:!0,accessor:"getPosition"},instanceSizes:{size:1,transition:!0,accessor:"getSize",defaultValue:1},instanceIconDefs:{size:7,accessor:"getIcon",transform:this.getInstanceIconDef,shaderAttributes:{instanceOffsets:{size:2,elementOffset:0},instanceIconFrames:{size:4,elementOffset:2},instanceColorModes:{size:1,elementOffset:6}}},instanceColors:{size:this.props.colorFormat.length,type:"unorm8",transition:!0,accessor:"getColor",defaultValue:N},instanceAngles:{size:1,transition:!0,accessor:"getAngle"},instancePixelOffset:{size:2,transition:!0,accessor:"getPixelOffset"}})}updateState(e){super.updateState(e);let{props:t,oldProps:i,changeFlags:n}=e,o=this.getAttributeManager(),{iconAtlas:a,iconMapping:r,data:s,getIcon:l,textureParameters:c}=t,{iconManager:A}=this.state;if("string"==typeof a)return;let g=a||this.internalState.isAsyncPropLoading("iconAtlas");A.setProps({loadOptions:t.loadOptions,autoPacking:!g,iconAtlas:a,iconMapping:g?r:null,textureParameters:c}),g?i.iconMapping!==t.iconMapping&&o.invalidate("getIcon"):(n.dataChanged||n.updateTriggersChanged&&(n.updateTriggersChanged.all||n.updateTriggersChanged.getIcon))&&A.packIcons(s,l),n.extensionsChanged&&(this.state.model?.destroy(),this.state.model=this._getModel(),o.invalidateAll())}get isLoaded(){return super.isLoaded&&this.state.iconManager.isLoaded}finalizeState(e){super.finalizeState(e),this.state.iconManager.finalize()}draw({uniforms:e}
392){let{sizeScale:t,sizeBasis:i,sizeMinPixels:n,sizeMaxPixels:o,sizeUnits:a,billboard:s,alphaCutoff:l}=this.props,{iconManager:c}=this.state,A=c.getTexture();if(A){let e=this.state.model,c={iconsTexture:A,iconsTextureDim:[A.width,A.height],sizeUnits:r.iI[a],sizeScale:t,sizeBasis:"height"===i?1:0,sizeMinPixels:n,sizeMaxPixels:o,billboard:s,alphaCutoff:l};e.shaderInputs.setProps({icon:c}),e.draw(this.context.renderPass)}}_getModel(){return new g.H(this.context.device,{...this.getShaders(),id:this.props.id,bufferLayout:this.getAttributeManager().getBufferLayouts(),geometry:new P.Z({topology:"triangle-strip",attributes:{positions:{size:2,value:new Float32Array([-1,-1,1,-1,-1,1,1,1])}}}),isInstanced:!0})}_onUpdate(e){e?(this.getAttributeManager()?.invalidate("getIcon"),this.setNeedsUpdate()):this.setNeedsRedraw()}_onError(e){let t=this.getCurrentLayer()?.props.onIconError;t?t(e):b.Z.error(e.error.message)()}getInstanceIconDef(e){let{x:t,y:i,width:n,height:o,mask:a,anchorX:r=n/2,anchorY:s=o/2}=this.state.iconManager.getIconMapping(e);return[n/2-r,o/2-s,t,i,n,o,a?1:0]}}W.defaultProps=V,W.layerName="IconLayer";var J=W;let G=`\ 393layout(std140) uniform sdfUniforms { 394 float gamma; 395 bool enabled; 396 float buffer; 397 float outlineBuffer; 398 vec4 outlineColor; 399} sdf; 400`,Z={name:"sdf",vs:G,fs:G,uniformTypes:{gamma:"f32",enabled:"f32",buffer:"f32",outlineBuffer:"f32",outlineColor:"vec4<f32>"}},q={none:0,start:1,center:2,end:3},j={name:"text",vs:`\ 401layout(std140) uniform textUniforms {
402 highp vec2 cutoffPixels; 403 highp ivec2 align; 404 highp float fontSize; 405 bool flipY; 406} text; 407 408#define ALIGN_MODE_START ${q.start} 409#define ALIGN_MODE_CENTER ${q.center} 410#define ALIGN_MODE_END ${q.end} 411`,getUniforms:({contentCutoffPixels:e=[0,0],contentAlignHorizontal:t="none",contentAlignVertical:i="none",fontSize:n,viewport:o})=>({cutoffPixels:e,align:[q[t],q[i]],fontSize:n,flipY:o?.flipY??!1}),uniformTypes:{cutoffPixels:"vec2<f32>",align:"vec2<i32>",fontSize:"f32",flipY:"f32"}};var K=`\ 412#version 300 es 413#define SHADER_NAME multi-icon-layer-vertex-shader 414in vec2 positions; 415in vec3 instancePositions; 416in vec3 instancePositions64Low; 417in float instanceSizes; 418in float instanceAngles; 419in vec4 instanceColors; 420in vec3 instancePickingColors; 421in vec4 instanceIconFrames; 422in float instanceColorModes; 423in vec2 instanceOffsets; 424in vec2 instancePixelOffset; 425in vec4 instanceClipRect; 426out float vColorMode; 427out vec4 vColor; 428out vec2 vTextureCoords; 429out vec2 uv; 430vec2 rotate_by_angle(vec2 vertex, float angle) { 431float angle_radian = angle * PI / 180.0; 432float cos_angle = cos(angle_radian); 433float sin_angle = sin(angle_radian); 434mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle); 435return rotationMatrix * vertex; 436} 437float getPixelOffsetFromAlignment(float anchor, float extent, float clipStart, float clipEnd, int mode) { 438if (clipEnd < clipStart) return 0.0; 439if (mode == ALIGN_MODE_START) { 440return max(- (anchor + clipStart), 0.0); 441} 442if (mode == ALIGN_MODE_CENTER) { 443float _min = max(0., anchor + clipStart); 444float _max = min(extent, anchor + clipEnd); 445return _min < _max ? (_min + _max) / 2.0 - anchor : 0.0; 446} 447if (mode == ALIGN_MODE_END) { 448return min(extent - (anchor + clipEnd), 0.); 449} 450return 0.0; 451} 452void main(void) { 453geometry.worldPosition = instancePositions; 454geometry.uv = positions; 455geometry.pickingColor = instancePickingColors; 456uv = positions; 457vec2 iconSize = instanceIconFrames.zw; 458float sizePixels = clamp( 459project_size_to_pixel(instanceSizes * icon.sizeScale, icon.sizeUnits),
460icon.sizeMinPixels, icon.sizeMaxPixels 461); 462float instanceScale = sizePixels / text.fontSize; 463vec2 pixelOffset = positions / 2.0 * iconSize + instanceOffsets; 464pixelOffset = rotate_by_angle(pixelOffset, instanceAngles) * instanceScale; 465pixelOffset += instancePixelOffset; 466pixelOffset.y *= -1.0; 467vec2 anchorPosScreen; 468if (icon.billboard) { 469gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position); 470anchorPosScreen = gl_Position.xy / gl_Position.w; 471DECKGL_FILTER_GL_POSITION(gl_Position, geometry); 472vec3 offset = vec3(pixelOffset, 0.0); 473DECKGL_FILTER_SIZE(offset, geometry); 474gl_Position.xy += project_pixel_size_to_clipspace(offset.xy); 475} else { 476vec3 offset_common = vec3(project_pixel_size(pixelOffset), 0.0); 477if (text.flipY) { 478offset_common.y *= -1.; 479} 480DECKGL_FILTER_SIZE(offset_common, geometry); 481vec4 anchorPos = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0)); 482anchorPosScreen = anchorPos.xy / anchorPos.w; 483gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset_common, geometry.position); 484DECKGL_FILTER_GL_POSITION(gl_Position, geometry); 485} 486anchorPosScreen = vec2(anchorPosScreen.x + 1.0, 1.0 - anchorPosScreen.y) / 2.0 * project.viewportSize / project.devicePixelRatio; 487vec2 xy = project_size_to_pixel(instanceClipRect.xy); 488vec2 wh = project_size_to_pixel(instanceClipRect.zw); 489if (text.flipY) { 490xy.y = -xy.y - wh.y; 491} 492if (text.align.x > 0 || text.align.y > 0) { 493vec2 viewportPixels = project.viewportSize / project.devicePixelRatio; 494vec2 scrollPixels = vec2( 495getPixelOffsetFromAlignment(anchorPosScreen.x, viewportPixels.x, xy.x, xy.x + wh.x, text.align.x), 496-getPixelOffsetFromAlignment(anchorPosScreen.y, viewportPixels.y, -xy.y - wh.y, -xy.y, text.align.y) 497); 498pixelOffset += scrollPixels; 499gl_Position.xy += project_pixel_size_to_clipspace(scrollPixels); 500} 501if (instanceClipRect.z >= 0.) { 502if (pixelOffset.x < xy.x || pixelOffset.x > xy.x + wh.x) { 503gl_Position = vec4(0.0); 504} 505else if (text.cutoffPixels.x > 0.) { 506float vpWidth = project.viewportSize.x / project.devicePixelRatio; 507float l = max(anchorPosScreen.x + xy.x, 0.0); 508float r = min(anchorPosScreen.x + xy.x + wh.x, vpWidth); 509if (r - l < text.cutoffPixels.x) { 510gl_Position = vec4(0.0); 511} 512} 513} 514if (instanceClipRect.w >= 0.) { 515if (pixelOffset.y < xy.y || pixelOffset.y > xy.y + wh.y) { 516gl_Position = vec4(0.0); 517} 518else if (text.cutoffPixels.y > 0.) { 519float vpHeight = project.viewportSize.y / project.devicePixelRatio; 520float t = max(anchorPosScreen.y - xy.y - wh.y, 0.0); 521float b = min(anchorPosScreen.y - xy.y, vpHeight); 522if (b - t < text.cutoffPixels.y) { 523gl_Position = vec4(0.0); 524} 525} 526} 527vTextureCoords = mix( 528instanceIconFrames.xy, 529instanceIconFrames.xy + iconSize, 530(positions.xy + 1.0) / 2.0 531) / icon.iconsTextureDim; 532vColor = instanceColors; 533DECKGL_FILTER_COLOR(vColor, geometry); 534vColorMode = instanceColorModes; 535} 536`,H=`\ 537#version 300 es 538#define SHADER_NAME multi-icon-layer-fragment-shader 539precision highp float; 540uniform sampler2D iconsTexture; 541in vec4 vColor; 542in vec2 vTextureCoords; 543in vec2 uv; 544out vec4 fragColor; 545void main(void) { 546geometry.uv = uv; 547if (!bool(picking.isActive)) { 548float alpha = texture(iconsTexture, vTextureCoords).a; 549vec4 color = vColor; 550if (sdf.enabled) { 551float distance = alpha; 552alpha = smoothstep(sdf.buffer - sdf.gamma, sdf.buffer + sdf.gamma, distance); 553if (sdf.outlineBuffer > 0.0) { 554float inFill = alpha; 555float inBorder = smoothstep(sdf.outlineBuffer - sdf.gamma, sdf.outlineBuffer + sdf.gamma, distance); 556color = mix(sdf.outlineColor, vColor, inFill); 557alpha = inBorder; 558} 559} 560float a = alpha * color.a; 561if (a < icon.alphaCutoff) { 562discard; 563} 564fragColor = vec4(color.rgb, a * layer.opacity); 565} 566DECKGL_FILTER_COLOR(fragColor, geometry); 567} 568`;class X extends J{getShaders(){let e=super.getShaders();return{...e,modules:[...e.modules,j,Z],vs:K,fs:H}}initializeState(){super.initializeState();let e=this.getAttributeManager();e.attributes.instanceIconDefs.settings.update=this.calculateInstanceIconDefs,e.addInstanced({instancePickingColors:{type:"uint8",size:4,accessor:(e,{index:t,target:i})=>this.encodePickingColor(t,i)},instanceClipRect:{size:4,accessor:"getContentBox",defaultValue:[0,0,-1,-1]}})}updateState(e){super.updateState(e);let{props:t,oldProps:i,changeFlags:n}=e,{outlineColor:o}=t;if(n.updateTriggersChanged&&(n.updateTriggersChanged.getIcon||n.updateTriggersChanged.getIconOffsets)&&this.getAttributeManager().invalidate("instanceIconDefs"),o!==i.outlineColor){let e=[o[0]/255,o[1]/255,o[2]/255,(o[3]??255)/255];this.setState({outlineColor:e})}!t.sdf&&t.outlineWidth&&b.Z.warn(`${this.id}: fontSettings.sdf is required to render outline`)()}draw(e){let{sdf:t,smoothing:i,fontSize:n,outlineWidth:o,contentCutoffPixels:a,contentAlignHorizontal:r,contentAlignVertical:s}=this.props,{outlineColor:l}=this.state,c=o?Math.max(i,.75*(1-o)):-1,A=this.state.model,g={buffer:.75,outlineBuffer:c,gamma:i,enabled:!!t,outlineColor:l},u={contentCutoffPixels:a,contentAlignHorizontal:r,contentAlignVertical:s,fontSize:n,viewport:this.context.viewport};if(A.shaderInputs.setProps({sdf:g,text:u}),super.draw(e),t&&o){let{iconManager:e}=this.state;
568e.getTexture()&&(A.shaderInputs.setProps({sdf:{...g,outlineBuffer:.75}}),A.draw(this.context.renderPass))}}calculateInstanceIconDefs(e,{startRow:t,endRow:i}){let{data:n,getIcon:o,getIconOffsets:a}=this.props,r=e.getVertexOffset(t),s=e.value,{iterable:l,objectInfo:c}=(0,w.jB)(n,t,i);for(let t of l){c.index++;let i=o(t,c),n=a(t,c);if(i){let t=0;for(let o of Array.from(i)){let i=super.getInstanceIconDef(o);i[0]=n[2*t],i[1]+=n[2*t+1],i[6]=1,s.set(i,r),r+=e.size,t++}}}}}X.defaultProps={getIconOffsets:{type:"accessor",value:e=>e.offsets},getContentBox:{type:"accessor",value:[0,0,-1,-1]},fontSize:1,alphaCutoff:.001,smoothing:.1,outlineWidth:0,outlineColor:{type:"color",value:[0,0,0,255]},contentCutoffPixels:{type:"array",value:[0,0]},contentAlignHorizontal:"none",contentAlignVertical:"none"},X.layerName="MultiIconLayer";class Y{constructor({fontSize:e=24,buffer:t=3,radius:i=8,cutoff:n=.25,fontFamily:o="sans-serif",fontWeight:a="normal",fontStyle:r="normal",lang:s=null}={}){this.buffer=t,this.cutoff=n,this.radius=i,this.lang=s;let l=this.size=e+4*t,c=this._createCanvas(l),A=this.ctx=c.getContext("2d",{willReadFrequently:!0});A.font=`${r} ${a} ${e}px ${o}`,A.textBaseline="alphabetic",A.textAlign="left",A.fillStyle="black",this.gridOuter=new Float64Array(l*l),this.gridInner=new Float64Array(l*l),this.f=new Float64Array(l),this.z=new Float64Array(l+1),this.v=new Uint16Array(l)}_createCanvas(e){let t=document.createElement("canvas");return t.width=t.height=e,t}draw(e){let{width:t,actualBoundingBoxAscent:i,actualBoundingBoxDescent:n,actualBoundingBoxLeft:o,actualBoundingBoxRight:a}=this.ctx.measureText(e),r=Math.ceil(i),s=Math.max(0,Math.min(this.size-this.buffer,Math.ceil(a-o))),l=Math.min(this.size-this.buffer,r+Math.ceil(n)),c=s+2*this.buffer,A=l+2*this.buffer,g=Math.max(c*A,0),u=new Uint8ClampedArray(g),d={data:u,width:c,height:A,glyphWidth:s,glyphHeight:l,glyphTop:r,glyphLeft:0,glyphAdvance:t};if(0===s||0===l)return d;let{ctx:p,buffer:h,gridInner:f,gridOuter:m}=this;this.lang&&(p.lang=this.lang),p.clearRect(h,h,s,l),p.fillText(e,h,h+r);let v=p.getImageData(h,h,s,l);m.fill(1e20,0,g),f.fill(0,0,g);for(let e=0;e<l;e++)for(let t=0;t<s;t++){let i=v.data[4*(e*s+t)+3]/255;if(0===i)continue;let n=(e+h)*c+t+h;if(1===i)m[n]=0,f[n]=1e20;else{let e=.5-i;m[n]=e>0?e*e:0,f[n]=e<0?e*e:0}}$(m,0,0,c,A,c,this.f,this.v,this.z),$(f,h,h,s,l,c,this.f,this.v,this.z);for(let e=0;e<g;e++){let t=Math.sqrt(m[e])-Math.sqrt(f[e]);u[e]=Math.round(255-255*(t/this.radius+this.cutoff))}return d}}function $(e,t,i,n,o,a,r,s,l){for(let c=t;c<t+n;c++)ee(e,i*a+c,a,o,r,s,l);for(let c=i;c<i+o;c++)ee(e,c*a+t,1,n,r,s,l)}function ee(e,t,i,n,o,a,r){a[0]=0,r[0]=-1e20,r[1]=1e20,o[0]=e[t];for(let s=1,l=0,c=0;s<n;s++){o[s]=e[t+s*i];let n=s*s;do{let e=a[l];c=(o[s]-o[e]+n-e*e)/(s-e)/2}while(c<=r[l]&&--l>-1);a[++l]=s,r[l]=c,r[l+1]=1e20}for(let s=0,l=0;s<n;s++){for(;r[l+1]<s;)l++;let n=a[l],c=s-n;e[t+s*i]=o[n]+c*c}}let et=[];function ei(e,t,i,n){let o=0;for(let a=t;a<i;a++){let t=e[a];o+=n[t]?.advance||0}return o}function en(e,t,i,n,o,a){let r=t,s=0;for(let l=t;l<i;l++){let t=ei(e,l,l+1,o);s+t>n&&(r<l&&a.push(l),r=l,s=0),s+=t}return s}class eo{constructor(e=5){this._cache={},this._order=[],this.limit=e}get(e){let t=this._cache[e];return t&&(this._deleteOrder(e),this._appendOrder(e)),t}set(e,t){this._cache[e]?this.delete(e):Object.keys(this._cache).length===this.limit&&this.delete(this._order[0]),this._cache[e]=t,this._appendOrder(e)}delete(e){this._cache[e]&&(delete this._cache[e],this._deleteOrder(e))}_deleteOrder(e){let t=this._order.indexOf(e);t>=0&&this._order.splice(t,1)}_appendOrder(e){this._order.push(e)}}let ea={fontFamily:"Monaco, monospace",fontWeight:"normal",characterSet:function(){let e=[];for(let t=32;t<128;t++)e.push(String.fromCharCode(t));return e}(),fontSize:64,buffer:4,sdf:!1,cutoff:.25,radius:12,smoothing:.1},er=new eo(3);function es(e,t,i,n){e.font=`${n} ${i}px ${t}`,e.fillStyle="#000",e.textBaseline="alphabetic",e.textAlign="left"}class el{constructor(){this.props={...ea}}get atlas(){return this._atlas}get mapping(){return this._atlas&&this._atlas.mapping}setProps(e={}){Object.assign(this.props,e),e._getFontRenderer&&(this._getFontRenderer=e._getFontRenderer),this._key=this._getKey();let t=function(e,t){let i;i=new Set("string"==typeof t?Array.from(t):t);let n=er.get(e);if(!n)return i;for(let e in n.mapping)i.has(e)&&i.delete(e);return i}(this._key,this.props.characterSet),i=er.get(this._key);if(i&&0===t.size){this._atlas!==i&&(this._atlas=i);return}let n=this._generateFontAtlas(t,i);this._atlas=n,er.set(this._key,n)}_generateFontAtlas(e,t){let i;let{fontFamily:n,fontWeight:o,fontSize:a,buffer:r,sdf:s,radius:l,cutoff:c}=this.props,A=t&&t.data;A||((A=document.createElement("canvas")).width=1024);let g=A.getContext("2d",{willReadFrequently:!0});es(g,n,a,o);let u=e=>(function(e,t,i){if(void 0===i){let i=e.measureText("A");return i.fontBoundingBoxAscent?{advance:0,width:0,ascent:Math.ceil(i.fontBoundingBoxAscent),descent:Math.ceil(i.fontBoundingBoxDescent)}:{advance:0,width:0,ascent:.9*t,descent:.3*t}}let n=e.measureText(i);return n.actualBoundingBoxAscent?{advance:n.width,width:Math.ceil(n.actualBoundingBoxRight-n.actualBoundingBoxLeft),ascent:Math.ceil(n.actualBoundingBoxAscent),descent:Math.ceil(n.actualBoundingBoxDescent)}:{advance:n.width,width:n.width,ascent:.9*t,descent:.3*t}}
568)(g,a,e);this._getFontRenderer?i=this._getFontRenderer(this.props):s&&(i={measure:u,draw:function({fontSize:e,buffer:t,radius:i,cutoff:n,fontFamily:o,fontWeight:a}){let r=new Y({fontSize:e,buffer:t,radius:i,cutoff:n,fontFamily:o,fontWeight:`${a}`});return e=>{let{data:i,width:n,height:o}=r.draw(e),a=new ImageData(n,o);return!function(e,t){for(let i=0;i<e.length;i++)t.data[4*i+3]=e[i]}(i,a),{data:a,left:t,top:t}}}(this.props)});let{mapping:d,canvasHeight:p,xOffset:h,yOffsetMin:f,yOffsetMax:m}=function({characterSet:e,measureText:t,buffer:i,maxCanvasWidth:n,mapping:o={},xOffset:a=0,yOffsetMin:r=0,yOffsetMax:s=0}){let l=a,c=r,A=s;for(let a of e)if(!o[a]){let{advance:e,width:r,ascent:s,descent:g}=t(a),u=s+g;l+r+2*i>n&&(l=0,c=A),o[a]={x:l+i,y:c+i,width:r,height:u,advance:e,anchorX:r/2,anchorY:s},l+=r+2*i,A=Math.max(A,c+u+2*i)}return{mapping:o,xOffset:l,yOffsetMin:c,yOffsetMax:A,canvasHeight:Math.pow(2,Math.ceil(Math.log2(A)))}}({measureText:e=>i?i.measure(e):u(e),buffer:r,characterSet:e,maxCanvasWidth:1024,...t&&{mapping:t.mapping,xOffset:t.xOffset,yOffsetMin:t.yOffsetMin,yOffsetMax:t.yOffsetMax}});if(A.height!==p){let e=A.height>0?g.getImageData(0,0,A.width,A.height):null;A.height=p,e&&g.putImageData(e,0,0)}if(es(g,n,a,o),i)for(let t of e){let e=d[t],{data:n,left:o=0,top:a=0}=i.draw(t),r=e.x-o,s=e.y-a,l=Math.max(0,Math.round(r)),c=Math.max(0,Math.round(s)),u=Math.min(n.width,A.width-l),p=Math.min(n.height,A.height-c);g.putImageData(n,l,c,0,0,u,p),e.x+=l-r,e.y+=c-s}else for(let t of e){let e=d[t];g.fillText(t,e.x,e.y+e.anchorY)}let v=i?i.measure():u();return{baselineOffset:(v.ascent-v.descent)/2,xOffset:h,yOffsetMin:f,yOffsetMax:m,mapping:d,data:A,width:A.width,height:A.height}}_getKey(){let{fontFamily:e,fontWeight:t,fontSize:i,buffer:n,sdf:o,radius:a,cutoff:r}=this.props;return o?`${e} ${t} ${i} ${n} ${a} ${r}`:`${e} ${t} ${i} ${n}`}}let ec=`\ 569layout(std140) uniform textBackgroundUniforms { 570 bool billboard; 571 float sizeScale; 572 float sizeMinPixels; 573 float sizeMaxPixels; 574 vec4 borderRadius; 575 vec4 padding; 576 highp int sizeUnits; 577 bool stroked; 578} textBackground; 579`,eA={name:"textBackground",vs:ec,fs:ec,uniformTypes:{billboard:"f32",sizeScale:"f32",sizeMinPixels:"f32",sizeMaxPixels:"f32",borderRadius:"vec4<f32>",padding:"vec4<f32>",sizeUnits:"i32",stroked:"f32"}};var eg=`\ 580#version 300 es 581#define SHADER_NAME text-background-layer-vertex-shader 582in vec2 positions; 583in vec3 instancePositions; 584in vec3 instancePositions64Low; 585in vec4 instanceRects; 586in vec4 instanceClipRect; 587in float instanceSizes; 588in float instanceAngles; 589in vec2 instancePixelOffsets; 590in float instanceLineWidths; 591in vec4 instanceFillColors; 592in vec4 instanceLineColors; 593in vec3 instancePickingColors; 594out vec4 vFillColor; 595out vec4 vLineColor; 596out float vLineWidth; 597out vec2 uv; 598out vec2 dimensions; 599vec2 rotate_by_angle(vec2 vertex, float angle) { 600float angle_radian = radians(angle); 601float cos_angle = cos(angle_radian); 602float sin_angle = sin(angle_radian); 603mat2 rotationMatrix = mat2(cos_angle, -sin_angle, sin_angle, cos_angle); 604return rotationMatrix * vertex; 605} 606void main(void) { 607geometry.worldPosition = instancePositions; 608geometry.uv = positions; 609geometry.pickingColor = instancePickingColors; 610uv = positions; 611vLineWidth = instanceLineWidths; 612float sizePixels = clamp( 613project_size_to_pixel(instanceSizes * textBackground.sizeScale, textBackground.sizeUnits), 614textBackground.sizeMinPixels, textBackground.sizeMaxPixels 615); 616float instanceScale = sizePixels / text.fontSize; 617dimensions = instanceRects.zw * instanceScale + textBackground.padding.xy + textBackground.padding.zw; 618vec2 pixelOffset = (positions * instanceRects.zw + instanceRects.xy) * instanceScale + mix(-textBackground.padding.xy, textBackground.padding.zw, positions); 619pixelOffset = rotate_by_angle(pixelOffset, instanceAngles); 620pixelOffset += instancePixelOffsets; 621pixelOffset.y *= -1.0; 622vec2 xy = project_size_to_pixel(instanceClipRect.xy); 623vec2 wh = project_size_to_pixel(instanceClipRect.zw); 624if (text.flipY) { 625xy.y = -xy.y - wh.y; 626} 627if (instanceClipRect.z >= 0.0) { 628dimensions.x = wh.x;
629pixelOffset.x = xy.x + uv.x * wh.x + mix(-textBackground.padding.x, textBackground.padding.z, uv.x); 630} 631if (instanceClipRect.w >= 0.0) { 632dimensions.y = wh.y; 633pixelOffset.y = xy.y + uv.y * wh.y + mix(-textBackground.padding.y, textBackground.padding.w, uv.y); 634} 635if (textBackground.billboard) { 636gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, vec3(0.0), geometry.position); 637DECKGL_FILTER_GL_POSITION(gl_Position, geometry); 638vec3 offset = vec3(pixelOffset, 0.0); 639DECKGL_FILTER_SIZE(offset, geometry); 640gl_Position.xy += project_pixel_size_to_clipspace(offset.xy); 641} else { 642vec3 offset_common = vec3(project_pixel_size(pixelOffset), 0.0); 643if (text.flipY) { 644offset_common.y *= -1.; 645} 646DECKGL_FILTER_SIZE(offset_common, geometry); 647gl_Position = project_position_to_clipspace(instancePositions, instancePositions64Low, offset_common, geometry.position); 648DECKGL_FILTER_GL_POSITION(gl_Position, geometry); 649} 650vFillColor = vec4(instanceFillColors.rgb, instanceFillColors.a * layer.opacity); 651DECKGL_FILTER_COLOR(vFillColor, geometry); 652vLineColor = vec4(instanceLineColors.rgb, instanceLineColors.a * layer.opacity); 653DECKGL_FILTER_COLOR(vLineColor, geometry); 654} 655`,eu=`\ 656#version 300 es 657#define SHADER_NAME text-background-layer-fragment-shader 658precision highp float; 659in vec4 vFillColor; 660in vec4 vLineColor; 661in float vLineWidth; 662in vec2 uv; 663in vec2 dimensions; 664out vec4 fragColor; 665float round_rect(vec2 p, vec2 size, vec4 radii) { 666vec2 pixelPositionCB = (p - 0.5) * size; 667vec2 sizeCB = size * 0.5; 668float maxBorderRadius = min(size.x, size.y) * 0.5; 669vec4 borderRadius = vec4(min(radii, maxBorderRadius)); 670borderRadius.xy = 671(pixelPositionCB.x > 0.0) ? borderRadius.xy : borderRadius.zw; 672borderRadius.x = (pixelPositionCB.y > 0.0) ? borderRadius.x : borderRadius.y; 673vec2 q = abs(pixelPositionCB) - sizeCB + borderRadius.x; 674return -(min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - borderRadius.x); 675} 676float rect(vec2 p, vec2 size) { 677vec2 pixelPosition = p * size; 678return min(min(pixelPosition.x, size.x - pixelPosition.x), 679min(pixelPosition.y, size.y - pixelPosition.y)); 680} 681vec4 get_stroked_fragColor(float dist) { 682float isBorder = smoothedge(dist, vLineWidth); 683return mix(vFillColor, vLineColor, isBorder); 684} 685void main(void) { 686geometry.uv = uv; 687if (textBackground.borderRadius != vec4(0.0)) { 688float distToEdge = round_rect(uv, dimensions, textBackground.borderRadius); 689float shapeAlpha = smoothedge(-distToEdge, 0.0); 690if (shapeAlpha == 0.0) { 691discard; 692} 693if (textBackground.stroked) { 694fragColor = get_stroked_fragColor(distToEdge); 695} else { 696fragColor = vFillColor; 697} 698fragColor.a *= shapeAlpha; 699} else { 700if (textBackground.stroked) { 701float distToEdge = rect(uv, dimensions); 702fragColor = get_stroked_fragColor(distToEdge); 703} else { 704fragColor = vFillColor; 705} 706} 707DECKGL_FILTER_COLOR(fragColor, geometry); 708} 709`;let ed={billboard:!0,sizeScale:1,sizeUnits:"pixels",sizeMinPixels:0,sizeMaxPixels:Number.MAX_SAFE_INTEGER,fontSize:1,borderRadius:{type:"object",value:0},padding:{type:"array",value:[0,0,0,0]},getPosition:{type:"accessor",value:e=>e.position},getSize:{type:"accessor",value:1},getAngle:{type:"accessor",value:0},getPixelOffset:{type:"accessor",value:[0,0]},getBoundingRect:{type:"accessor",value:[0,0,0,0]},getClipRect:{type:"accessor",value:[0,0,-1,-1]},getFillColor:{type:"accessor",value:[0,0,0,255]},getLineColor:{type:"accessor",value:[0,0,0,255]},getLineWidth:{type:"accessor",value:1}};class ep extends l.Z{getShaders(){return super.getShaders({vs:eg,fs:eu,modules:[c.Z,A.Z,eA,j]})}initializeState(){this.getAttributeManager().addInstanced({instancePositions:{size:3,type:"float64",fp64:this.use64bitPositions(),transition:!0,accessor:"getPosition"},instanceSizes:{size:1,transition:!0,accessor:"getSize",defaultValue:1},instanceAngles:{size:1,transition:!0,accessor:"getAngle"},instanceRects:{size:4,accessor:"getBoundingRect"},instanceClipRect:{size:4,accessor:"getClipRect",defaultValue:[0,0,-1,-1]},instancePixelOffsets:{size:2,transition:!0,accessor:"getPixelOffset"},instanceFillColors:{size:4,transition:!0,type:"unorm8",accessor:"getFillColor",defaultValue:[0,0,0,255]},instanceLineColors:{size:4,transition:!0,type:"unorm8",accessor:"getLineColor",defaultValue:[0,0,0,255]},instanceLineWidths:{size:1,transition:!0,accessor:"getLineWidth",defaultValue:1}})}updateState(e){super.updateState(e);let{changeFlags:t}=e;t.extensionsChanged&&(this.state.model?.destroy(),this.state.model=this._getModel(),this.getAttributeManager().invalidateAll())}draw({uniforms:e}
709){let{billboard:t,sizeScale:i,sizeUnits:n,sizeMinPixels:o,sizeMaxPixels:a,getLineWidth:s,fontSize:l}=this.props,{padding:c,borderRadius:A}=this.props;c.length<4&&(c=[c[0],c[1],c[0],c[1]]),Array.isArray(A)||(A=[A,A,A,A]);let g=this.state.model,u={billboard:t,stroked:!!s,borderRadius:A,padding:c,sizeUnits:r.iI[n],sizeScale:i,sizeMinPixels:o,sizeMaxPixels:a},d={fontSize:l,viewport:this.context.viewport};g.shaderInputs.setProps({textBackground:u,text:d}),g.draw(this.context.renderPass)}_getModel(){return new g.H(this.context.device,{...this.getShaders(),id:this.props.id,bufferLayout:this.getAttributeManager().getBufferLayouts(),geometry:new P.Z({topology:"triangle-strip",vertexCount:4,attributes:{positions:{size:2,value:new Float32Array([0,0,1,0,0,1,1,1])}}}),isInstanced:!0})}}ep.defaultProps=ed,ep.layerName="TextBackgroundLayer";let eh={start:1,middle:0,end:-1},ef={top:1,center:0,bottom:-1},em=[0,0,0,255],ev={billboard:!0,sizeScale:1,sizeUnits:"pixels",sizeMinPixels:0,sizeMaxPixels:Number.MAX_SAFE_INTEGER,background:!1,getBackgroundColor:{type:"accessor",value:[255,255,255,255]},getBorderColor:{type:"accessor",value:em},getBorderWidth:{type:"accessor",value:0},backgroundBorderRadius:{type:"object",value:0},backgroundPadding:{type:"array",value:[0,0,0,0]},characterSet:{type:"object",value:ea.characterSet},fontFamily:ea.fontFamily,fontWeight:ea.fontWeight,lineHeight:1,outlineWidth:{type:"number",value:0,min:0},outlineColor:{type:"color",value:em},fontSettings:{type:"object",value:{},compare:1},wordBreak:"break-word",maxWidth:{type:"number",value:-1},contentCutoffPixels:{type:"array",value:[0,0]},contentAlignHorizontal:"none",contentAlignVertical:"none",getText:{type:"accessor",value:e=>e.text},getPosition:{type:"accessor",value:e=>e.position},getColor:{type:"accessor",value:em},getSize:{type:"accessor",value:32},getAngle:{type:"accessor",value:0},getTextAnchor:{type:"accessor",value:"middle"},getAlignmentBaseline:{type:"accessor",value:"center"},getPixelOffset:{type:"accessor",value:[0,0]},getContentBox:{type:"accessor",value:[0,0,-1,-1]},backgroundColor:{deprecatedFor:["background","getBackgroundColor"]}};class eC extends s.Z{constructor(){super(...arguments),this.getBoundingRect=(e,t)=>{let{size:[i,n]}=this.transformParagraph(e,t),{getTextAnchor:o,getAlignmentBaseline:a}=this.props;return[(eh["function"==typeof o?o(e,t):o]-1)*i/2,(ef["function"==typeof a?a(e,t):a]-1)*n/2,i,n]},this.getIconOffsets=(e,t)=>{let{getTextAnchor:i,getAlignmentBaseline:n}=this.props,{x:o,y:a,rowWidth:r,size:[,s]}=this.transformParagraph(e,t),l=eh["function"==typeof i?i(e,t):i],c=ef["function"==typeof n?n(e,t):n],A=o.length,g=Array(2*A),u=0;for(let e=0;e<A;e++)g[u++]=(l-1)*r[e]/2+o[e],g[u++]=(c-1)*s/2+a[e];return g}}initializeState(){this.state={styleVersion:0,fontAtlasManager:new el},this.props.maxWidth>0&&b.Z.once(1,"v8.9 breaking change: TextLayer maxWidth is now relative to text size")()}updateState(e){let{props:t,oldProps:i,changeFlags:n}=e;(n.dataChanged||n.updateTriggersChanged&&(n.updateTriggersChanged.all||n.updateTriggersChanged.getText))&&this._updateText(),(this._updateFontAtlas()||t.lineHeight!==i.lineHeight||t.wordBreak!==i.wordBreak||t.maxWidth!==i.maxWidth)&&this.setState({styleVersion:this.state.styleVersion+1})}getPickingInfo({info:e}){return e.object=e.index>=0?this.props.data[e.index]:null,e}_updateFontAtlas(){let{fontSettings:e,fontFamily:t,fontWeight:i,_getFontRenderer:n}=this.props,{fontAtlasManager:o,characterSet:a}=this.state,r={...e,characterSet:a,fontFamily:t,fontWeight:i,_getFontRenderer:n};if(!o.mapping)return o.setProps(r),!0;for(let e in r)if(r[e]!==o.props[e])return o.setProps(r),!0;return!1}_updateText(){let e;let{data:t,characterSet:i}=this.props,n=t.attributes?.getText,{getText:o}=this.props,a=t.startIndices,r="auto"===i&&new Set;if(n&&a){let{texts:i,characterCount:s}=function({value:e,length:t,stride:i,offset:n,startIndices:o,characterSet:a}){let r=e.BYTES_PER_ELEMENT,s=i?i/r:1,l=n?n/r:0,c=o[t]||Math.ceil((e.length-l)/s),A=a&&new Set,g=Array(t),u=e;if(s>1||l>0){u=new e.constructor(c);for(let t=0;t<c;t++)u[t]=e[t*s+l]}for(let e=0;e<t;
709e++){let t=o[e],i=o[e+1]||c,n=u.subarray(t,i);g[e]=String.fromCodePoint.apply(null,n),A&&n.forEach(A.add,A)}if(A)for(let e of A)a.add(String.fromCodePoint(e));return{texts:g,characterCount:c}}({...ArrayBuffer.isView(n)?{value:n}:n,length:t.length,startIndices:a,characterSet:r});e=s,o=(e,{index:t})=>i[t]}else{let{iterable:i,objectInfo:n}=(0,w.jB)(t);for(let t of(a=[0],e=0,i)){n.index++;let i=Array.from(o(t,n)||"");r&&i.forEach(r.add,r),e+=i.length,a.push(e)}}this.setState({getText:o,startIndices:a,numInstances:e,characterSet:r||i})}transformParagraph(e,t){let{fontAtlasManager:i}=this.state,n=i.mapping,{baselineOffset:o}=i.atlas,{fontSize:a}=i.props,r=this.state.getText,{wordBreak:s,lineHeight:l,maxWidth:c}=this.props;return function(e,t,i,n,o,a){let r=Array.from(e),s=r.length,l=Array(s),c=Array(s),A=Array(s),g=("break-word"===n||"break-all"===n)&&isFinite(o)&&o>0,u=[0,0],d=[0,0],p=0,h=t+i/2,f=0,m=0;for(let e=0;e<=s;e++){let t=r[e];if(("\n"===t||e===s)&&(m=e),m>f){let e=g?function(e,t,i,n,o=0,a){void 0===a&&(a=e.length);let r=[];return"break-all"===t?en(e,o,a,i,n,r):function(e,t,i,n,o,a){let r=t,s=t,l=t,c=0;for(let A=t;A<i;A++)if(" "===e[A]?l=A+1:(" "===e[A+1]||A+1===i)&&(l=A+1),l>s){let t=ei(e,s,l,o);c+t>n&&(r<s&&(a.push(s),r=s,c=0),t>n&&(t=en(e,s,l,n,o,a),r=a[a.length-1])),s=l,c+=t}return c}(e,o,a,i,n,r),r}(r,n,o,a,f,m):et;for(let t=0;t<=e.length;t++){let n=0===t?f:e[t-1],o=t<e.length?e[t]:m;!function(e,t,i,n,o,a){let r=0,s=0;for(let o=t;o<i;o++){let t=n[e[o]];t&&(s=Math.max(s,t.height))}for(let a=t;a<i;a++){let t=e[a],i=n[t];i?(o[a]=r+i.anchorX,r+=i.advance):(b.Z.warn(`Missing character: ${t} (${t.codePointAt(0)})`)(),o[a]=r,r+=32)}a[0]=r,a[1]=s}(r,n,o,a,l,d);for(let e=n;e<o;e++)c[e]=h,A[e]=d[0];p++,h+=i,u[0]=Math.max(u[0],d[0])}f=m}"\n"===t&&(l[f]=0,c[f]=0,A[f]=0,f++)}return u[1]=p*i,{x:l,y:c,rowWidth:A,size:u}}(r(e,t)||"",o,l*a,s,c*a,n)}renderLayers(){let{startIndices:e,numInstances:t,getText:i,fontAtlasManager:{atlas:n,mapping:o},styleVersion:a}=this.state,{data:r,_dataDiff:s,getPosition:l,getColor:c,getSize:A,getAngle:g,getPixelOffset:u,getBackgroundColor:d,getBorderColor:p,getBorderWidth:h,getContentBox:f,backgroundBorderRadius:m,backgroundPadding:v,background:C,billboard:y,fontSettings:I,outlineWidth:x,outlineColor:E,sizeScale:b,sizeUnits:w,sizeMinPi
vendor: 1,527 bytes, line 709
709xels:B,sizeMaxPixels:P,contentCutoffPixels:T,contentAlignHorizontal:Q,contentAlignVertical:_,transitions:S,updateTriggers:M}=this.props,L=this.getSubLayerClass("characters",X),O=this.getSubLayerClass("background",ep),{fontSize:D}=this.state.fontAtlasManager.props;return[C&&new O({getFillColor:d,getLineColor:p,getLineWidth:h,borderRadius:m,padding:v,getPosition:l,getSize:A,getAngle:g,getPixelOffset:u,getClipRect:f,billboard:y,sizeScale:b,sizeUnits:w,sizeMinPixels:B,sizeMaxPixels:P,fontSize:D,transitions:S&&{getPosition:S.getPosition,getAngle:S.getAngle,getSize:S.getSize,getFillColor:S.getBackgroundColor,getLineColor:S.getBorderColor,getLineWidth:S.getBorderWidth,getPixelOffset:S.getPixelOffset}},this.getSubLayerProps({id:"background",updateTriggers:{getPosition:M.getPosition,getAngle:M.getAngle,getSize:M.getSize,getFillColor:M.getBackgroundColor,getLineColor:M.getBorderColor,getLineWidth:M.getBorderWidth,getPixelOffset:M.getPixelOffset,getBoundingRect:{getText:M.getText,getTextAnchor:M.getTextAnchor,getAlignmentBaseline:M.getAlignmentBaseline,styleVersion:a}}}),{data:r.attributes&&r.attributes.background?{length:r.length,attributes:r.attributes.background}:r,_dataDiff:s,autoHighlight:!1,getBoundingRect:this.getBoundingRect}),new L({sdf:I.sdf,smoothing:Number.isFinite(I.smoothing)?I.smoothing:ea.smoothing,outlineWidth:x/(I.radius||ea.radius),outlineColor:E,iconAtlas:n,iconMapping:o,getPosition:l,getColor:c,getSize:A,getAngle:g,getPixelOffset:u,getContentBox:f,billboard:y,sizeScale:b,sizeUnits:w,sizeMinPi
709xels:B,sizeMaxPixels:P,fontSize:D,contentCutoffPixels:T,contentAlignHorizontal:Q,contentAlignVertical:_,transitions:S&&{getPosition:S.getPosition,getAngle:S.getAngle,getColor:S.getColor,getSize:S.getSize,getPixelOffset:S.getPixelOffset,getContentBox:S.getContentBox}},this.getSubLayerProps({id:"characters",updateTriggers:{all:M.getText,getPosition:M.getPosition,getAngle:M.getAngle,getColor:M.getColor,getSize:M.getSize,getPixelOffset:M.getPixelOffset,getContentBox:M.getContentBox,getIconOffsets:{getTextAnchor:M.getTextAnchor,getAlignmentBaseline:M.getAlignmentBaseline,styleVersion:a}}}),{data:r,_dataDiff:s,startIndices:e,numInstances:t,getIconOffsets:this.getIconOffsets,getIcon:i})]}static set fontAtlasCacheLimit(e){b.Z.assert(Number.isFinite(e)&&e>=3,"Invalid cache limit"),er=new eo(e)}}eC.defaultProps=ev,eC.layerName="TextLayer";var ey=i(11411);function eI(e,t,i,n,o=[]){let a,r;if(8&i)a=(n[3]-e[1])/(t[1]-e[1]),r=3;else if(4&i)a=(n[1]-e[1])/(t[1]-e[1]),r=1;else if(2&i)a=(n[2]-e[0])/(t[0]-e[0]),r=2;else{if(!(1&i))return null;a=(n[0]-e[0])/(t[0]-e[0]),r=0}for(let i=0;i<e.length;i++)o[i]=(1&r)===i?n[r]:a*(t[i]-e[i])+e[i];return o}function ex(e,t){let i=0;return e[0]<t[0]?i|=1:e[0]>t[2]&&(i|=2),e[1]<t[1]?i|=4:e[1]>t[3]&&(i|=8),i}function eE(e,t){let i=t.length,n=e.length;if(n>0){let o=!0;for(let a=0;a<i;a++)if(e[n-i+a]!==t[a]){o=!1;break}if(o)return!1}for(let o=0;o<i;o++)e[n+o]=t[o];return!0}function eb(e,t){let i=t.length;for(let n=0;n<i;n++)e[n]=t[n]}function ew(e,t,i,n,o=[]){let a=n+t*i;for(let t=0;t<i;t++)o[t]=e[a+t];return o}function eB(e,t){let i,n;let{size:o=2,broken:a=!1,gridResolution:r=10,gridOffset:s=[0,0],startIndex:l=0,endIndex:c=e.length}=t||{},A=(c-l)/o,g=[],u=[g],d=ew(e,0,o,l),p=function(e,t,i,n){let o=Math.floor((e[0]-i[0])/t)*t+i[0],a=Math.floor((e[1]-i[1])/t)*t+i[1];return n[0]=o,n[1]=a,n[2]=o+t,n[3]=a+t,n}(d,r,s,[]),h=[];eE(g,d);for(let t=1;t<A;t++){for(n=ex(i=ew(e,t,o,l,i),p);n;){var f;eI(d,i,n,p,h);let e=ex(h,p);e&&(eI(d,h,e,p,h),n=e),eE(g,h),eb(d,h),8&(f=n)?(p[1]+=r,p[3]+=r):4&f?(p[1]-=r,p[3]-=r):2&f?(p[0]+=r,p[2]+=r):1&f&&(p[0]-=r,p[2]-=r),a&&g.length>o&&(g=[],u.push(g),eE(g,d)),n=ex(i,p)}eE(g,i),eb(d,i)}return a?u:u[0]}class eP extends ey.Z{constructor(e){super({...e,attributes:{positions:{size:3,padding:18,initialize:!0,type:e.fp64?Float64Array:Float32Array},segmentTypes:{size:1,type:Uint8ClampedArray}}})}get(e){return this.attributes[e]}getGeometryFromBuffer(e){return this.normalize?super.getGeometryFromBuffer(e):null}normalizeGeometry(e){return this.normalize?function(e,t,i,n){let o;if(Array.isArray(e[0])){o=Array(e.length*t);for(let i=0;i<e.length;i++)for(let n=0;n<t;n++)o[i*t+n]=e[i][n]||0}else o=e;return i?eB(o,{size:t,gridResolution:i}):n?function(e,t){let{size:i=2,startIndex:n=0,endIndex:o=e.length,normalize:a=!0}=t||{},r=e.slice(n,o);!function(e,t,i,n){let o,a=e[0];for(let i=0;i<n;i+=t){let t=(o=e[i])-a;(t>180||t<-180)&&(o-=360*Math.round(t/360)),e[i]=a=o}}(r,i,0,o-n);let s=eB(r,{size:i,broken:!0,gridResolution:360,gridOffset:[-180,-180]});if(a)for(let e of s)!function(e,t){let i;let n=e.length/t;for(let o=0;o<n&&((i=e[o*t])+180)%360==0;o++);let o=-(360*Math.round(i/360));if(0!==o)for(let i=0;i<n;i++)e[i*t]+=o}(e,i);return s}(o,{size:t}):o}(e,this.positionSize,this.opts.resolution,this.opts.wrapLongitude):e}getGeometrySize(e){if(eT(e)){let t=0;for(let i of e)t+=this.getGeometrySize(i);return t}let t=this.getPathLength(e);return t<2?0:this.isClosed(e)?t<3?0:t+2:t}updateGeometryAttributes(e,t){if(0!==t.geometrySize){if(e&&eT(e))for(let i of e){let e=this.getGeometrySize(i);t.geometrySize=e,this.updateGeometryAttributes(i,t),t.vertexStart+=e}else this._updateSegmentTypes(e,t),this._updatePositions(e,t)}}_updateSegmentTypes(e,t){let i=this.attributes.segmentTypes,n=!!e&&this.isClosed(e),{vertexStart:o,geometrySize:a}=t;i.fill(0,o,o+a),n?(i[o]=4,i[o+a-2]=4):(i[o]+=1,i[o+a-2]+=2),i[o+a-1]=4}_updatePositions(e,t){let{positions:i}=this.attributes;if(!i||!e)return;let{vertexStart:n,geometrySize:o}=t,a=[,,,];for(let t=n,r=0;r<o;t++,r++)this.getPointOnPath(e,r,a),i[3*t]=a[0],i[3*t+1]=a[1],i[3*t+2]=a[2]}getPathLength(e){return e.length/this.positionSize}getPointOnPath(e,t,i=[]){let{positionSize:n}=this;t*n>=e.length&&(t+=1-e.length/n);let o=t*n;return i[0]=e[o],i[1]=e[o+1],i[2]=3===n&&e[o+2]||0,i}isClosed(e){if(!this.normalize)return!!this.opts.loop;let{positionSize:t}=this,i=e.length-t;return e[0]===e[i]&&e[1]===e[i+1]&&(2===t||e[2]===e[i+2])}}function eT(e){return Array.isArray(e[0])}let eQ=`\ 710layout(std140) uniform pathUniforms { 711 float widthScale; 712 float widthMinPixels; 713 float widthMaxPixels; 714 float jointType; 715 float capType; 716 float miterLimit; 717 bool billboard; 718 highp int widthUnits; 719} path; 720`,e_={name:"path",vs:eQ,fs:eQ,uniformTypes:{widthScale:"f32",widthMinPixels:"f32",widthMaxPixels:"f32",jointType:"f32",capType:"f32",miterLimit:"f32",billboard:"f32",widthUnits:"i32"}};var eS=`\ 721#version 300 es 722#define SHADER_NAME path-layer-vertex-shader 723in vec2 positions; 724in float instanceTypes; 725in vec3 instanceStartPositions; 726in vec3 instanceEndPositions; 727in vec3 instanceLeftPositions; 728in vec3 instanceRightPositions; 729in vec3 instanceLeftPositions64Low; 730in vec3 instanceStartPositions64Low; 731in vec3 instanceEndPositions64Low; 732in vec3 instanceRightPositions64Low; 733in float instanceStrokeWidths; 734in vec4 instanceColors; 735in vec3 instancePickingColors; 736uniform float opacity; 737out vec4 vColor; 738out vec2 vCornerOffset; 739out float vMiterLength; 740out vec2 vPathPosition; 741out float vPathLength; 742out float vJointType; 743const float EPSILON = 0.001; 744const vec3 ZERO_OFFSET = vec3(0.0); 745float flipIfTrue(bool flag) { 746return -(float(flag) * 2. - 1.); 747} 748vec3 getLineJoinOffset( 749vec3 prevPoint, vec3 currPoint, vec3 nextPoint, 750vec2 width 751) { 752bool isEnd = positions.x > 0.0; 753float sideOfPath = positions.y; 754float isJoint = float(sideOfPath == 0.0); 755vec3 deltaA3 = (currPoint - prevPoint); 756vec3 deltaB3 = (nextPoint - currPoint); 757mat3 rotationMatrix; 758bool needsRotation = !path.billboard && project_needs_rotation(currPoint, rotationMatrix); 759if (needsRotation) { 760deltaA3 = deltaA3 * rotationMatrix; 761deltaB3 = deltaB3 * rotationMatrix; 762} 763vec2 deltaA = deltaA3.xy / width; 764vec2 deltaB = deltaB3.xy / width; 765float lenA = length(deltaA); 766float lenB = length(deltaB); 767vec2 dirA = lenA > 0. ? normalize(deltaA) : vec2(0.0, 0.0); 768vec2 dirB = lenB > 0. ? normalize(deltaB) : vec2(0.0, 0.0); 769vec2 perpA = vec2(-dirA.y, dirA.x); 770vec2 perpB = vec2(-dirB.y, dirB.x); 771vec2 tangent = dirA + dirB; 772tangent = length(tangent) > 0. ? normalize(tangent) : perpA; 773vec2 miterVec = vec2(-tangent.y, tangent.x); 774vec2 dir = isEnd ? dirA : dirB; 775vec2 perp = isEnd ? perpA : perpB; 776float L = isEnd ? lenA : lenB; 777float sinHalfA = abs(dot(miterVec, perp));
778float cosHalfA = abs(dot(dirA, miterVec)); 779float turnDirection = flipIfTrue(dirA.x * dirB.y >= dirA.y * dirB.x); 780float cornerPosition = sideOfPath * turnDirection; 781float miterSize = 1.0 / max(sinHalfA, EPSILON); 782miterSize = mix( 783min(miterSize, max(lenA, lenB) / max(cosHalfA, EPSILON)), 784miterSize, 785step(0.0, cornerPosition) 786); 787vec2 offsetVec = mix(miterVec * miterSize, perp, step(0.5, cornerPosition)) 788* (sideOfPath + isJoint * turnDirection); 789bool isStartCap = lenA == 0.0 || (!isEnd && (instanceTypes == 1.0 || instanceTypes == 3.0)); 790bool isEndCap = lenB == 0.0 || (isEnd && (instanceTypes == 2.0 || instanceTypes == 3.0)); 791bool isCap = isStartCap || isEndCap; 792if (isCap) { 793offsetVec = mix(perp * sideOfPath, dir * path.capType * 4.0 * flipIfTrue(isStartCap), isJoint); 794vJointType = path.capType; 795} else { 796vJointType = path.jointType; 797} 798vPathLength = L; 799vCornerOffset = offsetVec; 800vMiterLength = dot(vCornerOffset, miterVec * turnDirection); 801vMiterLength = isCap ? isJoint : vMiterLength; 802vec2 offsetFromStartOfPath = vCornerOffset + deltaA * float(isEnd); 803vPathPosition = vec2( 804dot(offsetFromStartOfPath, perp), 805dot(offsetFromStartOfPath, dir) 806); 807geometry.uv = vPathPosition; 808float isValid = step(instanceTypes, 3.5); 809vec3 offset = vec3(offsetVec * width * isValid, 0.0); 810if (needsRotation) { 811offset = rotationMatrix * offset; 812} 813return offset; 814} 815void clipLine(inout vec4 position, vec4 refPosition) { 816if (position.w < EPSILON) { 817float r = (EPSILON - refPosition.w) / (position.w - refPosition.w); 818position = refPosition + (position - refPosition) * r; 819} 820} 821void main() { 822geometry.pickingColor = instancePickingColors; 823vColor = vec4(instanceColors.rgb, instanceColors.a * layer.opacity); 824float isEnd = positions.x; 825vec3 prevPosition = mix(instanceLeftPositions, instanceStartPositions, isEnd); 826vec3 prevPosition64Low = mix(instanceLeftPositions64Low, instanceStartPositions64Low, isEnd); 827vec3 currPosition = mix(instanceStartPositions, instanceEndPositions, isEnd); 828vec3 currPosition64Low = mix(instanceStartPositions64Low, instanceEndPositions64Low, isEnd); 829vec3 nextPosition = mix(instanceEndPositions, instanceRightPositions, isEnd); 830vec3 nextPosition64Low = mix(instanceEndPositions64Low, instanceRightPositions64Low, isEnd); 831geometry.worldPosition = currPosition; 832vec2 widthPixels = vec2(clamp( 833project_size_to_pixel(instanceStrokeWidths * path.widthScale, path.widthUnits), 834path.widthMinPixels, path.widthMaxPixels) / 2.0); 835vec3 width; 836if (path.billboard) { 837vec4 prevPositionScreen = project_position_to_clipspace(prevPosition, prevPosition64Low, ZERO_OFFSET); 838vec4 currPositionScreen = project_position_to_clipspace(currPosition, currPosition64Low, ZERO_OFFSET, geometry.position); 839vec4 nextPositionScreen = project_position_to_clipspace(nextPosition, nextPosition64Low, ZERO_OFFSET); 840clipLine(prevPositionScreen, currPositionScreen); 841clipLine(nextPositionScreen, currPositionScreen); 842clipLine(currPositionScreen, mix(nextPositionScreen, prevPositionScreen, isEnd)); 843width = vec3(widthPixels, 0.0); 844DECKGL_FILTER_SIZE(width, geometry); 845vec3 offset = getLineJoinOffset( 846prevPositionScreen.xyz / prevPositionScreen.w, 847currPositionScreen.xyz / currPositionScreen.w, 848nextPositionScreen.xyz / nextPositionScreen.w, 849project_pixel_size_to_clipspace(width.xy) 850); 851DECKGL_FILTER_GL_POSITION(currPositionScreen, geometry); 852gl_Position = vec4(currPositionScreen.xyz + offset * currPositionScreen.w, currPositionScreen.w); 853} else { 854prevPosition = project_position(prevPosition, prevPosition64Low); 855currPosition = project_position(currPosition, currPosition64Low); 856nextPosition = project_position(nextPosition, nextPosition64Low); 857width = vec3(project_pixel_size(widthPixels), 0.0); 858DECKGL_FILTER_SIZE(width, geometry); 859vec3 offset = getLineJoinOffset(prevPosition, currPosition, nextPosition, width.xy); 860geometry.position = vec4(currPosition + offset, 1.0); 861gl_Position = project_common_position_to_clipspace(geometry.position); 862DECKGL_FILTER_GL_POSITION(gl_Position, geometry); 863} 864DECKGL_FILTER_COLOR(vColor, geometry); 865} 866`,eM=`\ 867#version 300 es 868#define SHADER_NAME path-layer-fragment-shader 869precision highp float; 870in vec4 vColor; 871in vec2 vCornerOffset; 872in float vMiterLength; 873in vec2 vPathPosition; 874in float vPathLength; 875in float vJointType; 876out vec4 fragColor; 877void main(void) { 878geometry.uv = vPathPosition; 879if (vPathPosition.y < 0.0 || vPathPosition.y > vPathLength) { 880if (vJointType > 0.5 && length(vCornerOffset) > 1.0) { 881discard; 882} 883if (vJointType < 0.5 && vMiterLength > path.miterLimit + 1.0) { 884discard; 885} 886} 887fragColor = vColor; 888DECKGL_FILTER_COLOR(fragColor, geometry); 889} 890`;let eL=[0,0,0,255],eO={widthUnits:"meters",widthScale:{type:"number",min:0,value:1},widthMinPixels:{type:"number",min:0,value:0},widthMaxPixels:{type:"number",min:0,value:Number.MAX_SAFE_INTEGER},jointRounded:!1,capRounded:!1,miterLimit:{type:"number",min:0,value:4},billboard:!1,_pathType:null,getPath:{type:"accessor",value:e=>e.path},getColor:{type:"accessor",value:eL},getWidth:{type:"accessor",value:1}
890,rounded:{deprecatedFor:["jointRounded","capRounded"]}},eD={enter:(e,t)=>t.length?t.subarray(t.length-e.length):e};class eR extends l.Z{getShaders(){return super.getShaders({vs:eS,fs:eM,modules:[c.Z,A.Z,e_]})}get wrapLongitude(){return!1}getBounds(){return this.getAttributeManager()?.getBounds(["vertexPositions"])}initializeState(){this.getAttributeManager().addInstanced({vertexPositions:{size:3,vertexOffset:1,type:"float64",fp64:this.use64bitPositions(),transition:eD,accessor:"getPath",update:this.calculatePositions,noAlloc:!0,shaderAttributes:{instanceLeftPositions:{vertexOffset:0},instanceStartPositions:{vertexOffset:1},instanceEndPositions:{vertexOffset:2},instanceRightPositions:{vertexOffset:3}}},instanceTypes:{size:1,type:"uint8",update:this.calculateSegmentTypes,noAlloc:!0},instanceStrokeWidths:{size:1,accessor:"getWidth",transition:eD,defaultValue:1},instanceColors:{size:this.props.colorFormat.length,type:"unorm8",accessor:"getColor",transition:eD,defaultValue:eL},instancePickingColors:{size:4,type:"uint8",accessor:(e,{index:t,target:i})=>this.encodePickingColor(e&&e.__source?e.__source.index:t,i)}}),this.setState({pathTesselator:new eP({fp64:this.use64bitPositions()})})}updateState(e){super.updateState(e);let{props:t,changeFlags:i}=e,n=this.getAttributeManager();if(i.dataChanged||i.updateTriggersChanged&&(i.updateTriggersChanged.all||i.updateTriggersChanged.getPath)){let{pathTesselator:e}=this.state,o=t.data.attributes||{};e.updateGeometry({data:t.data,geometryBuffer:o.getPath,buffers:o,normalize:!t._pathType,loop:"loop"===t._pathType,getGeometry:t.getPath,positionFormat:t.positionFormat,wrapLongitude:t.wrapLongitude,resolution:this.context.viewport.resolution,dataChanged:i.dataChanged}),this.setState({numInstances:e.instanceCount,startIndices:e.vertexStarts}),i.dataChanged||n.invalidateAll()}i.extensionsChanged&&(this.state.model?.destroy(),this.state.model=this._getModel(),n.invalidateAll())}getPickingInfo(e){let t=super.getPickingInfo(e),{index:i}=t,n=this.props.data;return n[0]&&n[0].__source&&(t.object=n.find(e=>e.__source.index===i)),t}disablePickingIndex(e){let t=this.props.data;if(t[0]&&t[0].__source)for(let i=0;i<t.length;i++)t[i].__source.index===e&&this._disablePickingIndex(i);else super.disablePickingIndex(e)}draw({uniforms:e}){let{jointRounded:t,capRounded:i,billboard:n,miterLimit:o,widthUnits:a,widthScale:s,widthMinPixels:l,widthMaxPixels:c}=this.props,A=this.state.model,g={jointType:Number(t),capType:Number(i),billboard:n,widthUnits:r.iI[a],widthScale:s,miterLimit:o,widthMinPixels:l,widthMaxPixels:c};A.shaderInputs.setProps({path:g}),A.draw(this.context.renderPass)}_getModel(){return new g.H(this.context.device,{...this.getShaders(),id:this.props.id,bufferLayout:this.getAttributeManager().getBufferLayouts(),geometry:new P.Z({topology:"triangle-list",attributes:{indices:new Uint16Array([0,1,2,1,4,2,1,3,4,3,5,4]),positions:{value:new Float32Array([0,0,0,-1,0,1,1,-1,1,1,1,0]),size:2}}}),isInstanced:!0})}calculatePositions(e){let{pathTesselator:t}=this.state;e.startIndices=t.vertexStarts,e.value=t.get("positions")}calculateSegmentTypes(e){let{pathTesselator:t}=this.state;e.startIndices=t.vertexStarts,e.value=t.get("segmentTypes")}}eR.defaultProps=eO,eR.layerName="PathLayer";let ek=`\ 891layout(std140) uniform lineUniforms { 892 float widthScale; 893 float widthMinPixels; 894 float widthMaxPixels; 895 float useShortestPath; 896 highp int widthUnits; 897} line; 898`,ez={name:"line",source:"",vs:ek,fs:ek,uniformTypes:{widthScale:"f32",widthMinPixels:"f32",widthMaxPixels:"f32",useShortestPath:"f32",widthUnits:"i32"}},eF=`\ 899// ---------- Helper Structures & Functions ---------- 900 901// Placeholder filter functions. 902fn deckgl_filter_size(offset: vec3<f32>, geometry: Geometry) -> vec3<f32> { 903 return offset; 904} 905fn deckgl_filter_gl_position(p: vec4<f32>, geometry: Geometry) -> vec4<f32> { 906 if (picking.isAttribute > 0.5) { 907 // For depth picking, write normalized depth into the picking payload. 908 // This mirrors the legacy DECKGL_FILTER_GL_POSITION hook on WebGL. 909 } 910 return p; 911} 912 913// Compute an extrusion offset given a line direction (in clipspace), 914// an offset direction (-1 or 1), and a width in pixels. 915// Assumes a uniform "project" with a viewportSize field is available. 916fn getExtrusionOffset(line_clipspace: vec2<f32>, offset_direction: f32, width: f32) -> vec2<f32> { 917 // project.viewportSize should be provided as a uniform (not shown here) 918 let dir_screenspace = normalize(line_clipspace * project.viewportSize); 919 // Rotate by 90\xb0: (x,y) becomes (-y,x) 920 let rotated = vec2<f32>(-dir_screenspace.y, dir_screenspace.x); 921 return rotated * offset_direction * width / 2.0; 922} 923 924// Splits the line between two points at a given x coordinate. 925// Interpolates the y and z components. 926fn splitLine(a: vec3<f32>, b: vec3<f32>, x: f32) -> vec3<f32> { 927 let t: f32 = (x - a.x) / (b.x - a.x); 928 return vec3<f32>(x, a.yz + t * (b.yz - a.yz)); 929} 930 931// ---------- Uniforms & Global Structures ---------- 932 933struct LineUniforms { 934 widthScale: f32, 935 widthMinPixels: f32, 936 widthMaxPixels: f32, 937 useShortestPath: f32, 938 widthUnits: i32, 939}; 940 941@group(0) @binding(0) 942var<uniform> line: LineUniforms; 943 944 945 946// ---------- Vertex Output Structure ---------- 947
948struct Varyings { 949 @builtin(position) gl_Position: vec4<f32>, 950 @location(0) vColor: vec4<f32>, 951 @location(1) uv: vec2<f32>, 952 @location(2) pickingColor: vec3<f32>, 953}; 954 955// ---------- Vertex Shader Entry Point ---------- 956 957@vertex 958fn vertexMain( 959 @location(0) positions: vec3<f32>, 960 @location(1) instanceSourcePositions: vec3<f32>, 961 @location(2) instanceTargetPositions: vec3<f32>, 962 @location(3) instanceSourcePositions64Low: vec3<f32>, 963 @location(4) instanceTargetPositions64Low: vec3<f32>, 964 @location(5) instanceColors: vec4<f32>, 965 @location(6) instancePickingColors: vec3<f32>, 966 @location(7) instanceWidths: f32 967) -> Varyings { 968 geometry.worldPosition = instanceSourcePositions; 969 geometry.worldPositionAlt = instanceTargetPositions; 970 971 var source_world: vec3<f32> = instanceSourcePositions; 972 var target_world: vec3<f32> = instanceTargetPositions; 973 var source_world_64low: vec3<f32> = instanceSourcePositions64Low; 974 var target_world_64low: vec3<f32> = instanceTargetPositions64Low; 975 976 // Apply shortest-path adjustments if needed. 977 if (line.useShortestPath > 0.5 || line.useShortestPath < -0.5) { 978 source_world.x = (source_world.x + 180.0 % 360.0) - 180.0; 979 target_world.x = (target_world.x + 180.0 % 360.0) - 180.0; 980 let deltaLng: f32 = target_world.x - source_world.x; 981 982 if (deltaLng * line.useShortestPath > 180.0) { 983 source_world.x = source_world.x + 360.0 * line.useShortestPath; 984 source_world = splitLine(source_world, target_world, 180.0 * line.useShortestPath); 985 source_world_64low = vec3<f32>(0.0, 0.0, 0.0); 986 } else if (deltaLng * line.useShortestPath < -180.0) { 987 target_world.x = target_world.x + 360.0 * line.useShortestPath; 988 target_world = splitLine(source_world, target_world, 180.0 * line.useShortestPath); 989 target_world_64low = vec3<f32>(0.0, 0.0, 0.0); 990 } else if (line.useShortestPath < 0.0) { 991 var abortOut: Varyings; 992 abortOut.gl_Position = vec4<f32>(0.0); 993 abortOut.vColor = vec4<f32>(0.0); 994 abortOut.uv = vec2<f32>(0.0); 995 return abortOut; 996 } 997 } 998 999 // Project Pos and target positions to clip space. 1000 let sourceResult = project_position_to_clipspace_and_commonspace(source_world, source_world_64low, vec3<f32>(0.0)); 1001 let targetResult = project_position_to_clipspace_and_commonspace(target_world, target_world_64low, vec3<f32>(0.0)); 1002 let sourcePos: vec4<f32> = sourceResult.clipPosition; 1003 let targetPos: vec4<f32> = targetResult.clipPosition; 1004 let source_commonspace: vec4<f32> = sourceResult.commonPosition; 1005 let target_commonspace: vec4<f32> = targetResult.commonPosition; 1006 1007 // Interpolate along the line segment. 1008 let segmentIndex: f32 = positions.x; 1009 let p: vec4<f32> = sourcePos + segmentIndex * (targetPos - sourcePos); 1010 geometry.position = source_commonspace + segmentIndex * (target_commonspace - source_commonspace); 1011 let uv: vec2<f32> = positions.xy; 1012 geometry.uv = uv; 1013 geometry.pickingColor = instancePickingColors; 1014 1015 // Determine width in pixels. 1016 let widthPixels: f32 = clamp( 1017 project_unit_size_to_pixel(instanceWidths * line.widthScale, line.widthUnits), 1018 line.widthMinPixels, line.widthMaxPixels 1019 ); 1020 1021 // Compute extrusion offset. 1022 let extrusion: vec2<f32> = getExtrusionOffset(targetPos.xy - sourcePos.xy, positions.y, widthPixels); 1023 let offset: vec3<f32> = vec3<f32>(extrusion, 0.0); 1024 1025 // Apply deck.gl filter functions. 1026 let filteredOffset = deckgl_filter_size(offset, geometry); 1027 let filteredP = deckgl_filter_gl_position(p, geometry); 1028 1029 let clipOffset: vec2<f32> = project_pixel_size_to_clipspace(filteredOffset.xy); 1030 let finalPosition: vec4<f32> = filteredP + vec4<f32>(clipOffset, 0.0, 0.0); 1031 1032 // Compute color. 1033 var vColor: vec4<f32> = vec4<f32>(instanceColors.rgb, instanceColors.a * layer.opacity); 1034 // vColor = deckgl_filter_color(vColor, geometry); 1035 1036 var output: Varyings; 1037 output.gl_Position = finalPosition; 1038 output.vColor = vColor; 1039 output.uv = uv; 1040 output.pickingColor = instancePickingColors; 1041 return output; 1042} 1043 1044@fragment 1045fn fragmentMain( 1046 @location(0) vColor: vec4<f32>, 1047 @location(1) uv: vec2<f32>, 1048 @location(2) pickingColor: vec3<f32> 1049) -> @location(0) vec4<f32> { 1050 // Create and initialize geometry with the provided uv. 1051 var geometry: Geometry; 1052 geometry.uv = uv; 1053 1054 // Start with the input color. 1055 var fragColor: vec4<f32> = vColor; 1056 1057 if (picking.isActive > 0.5) { 1058 if (!picking_isColorValid(pickingColor)) { 1059 discard; 1060 } 1061 return vec4<f32>(pickingColor, 1.0); 1062 } 1063 1064 if (picking.isHighlightActive > 0.5) { 1065 let highlightedObjectColor = picking_normalizeColor(picking.highlightedObjectColor); 1066 if (picking_isColorZero(abs(pickingColor - highlightedObjectColor))) { 1067 let highLightAlpha = picking.highlightColor.a; 1068 let blendedAlpha = highLightAlpha + fragColor.a * (1.0 - highLightAlpha); 1069 if (blendedAlpha > 0.0) { 1070 let highLightRatio = highLightAlpha / blendedAlpha; 1071 fragColor = vec4<f32>( 1072 mix(fragColor.rgb, picking.highlightColor.rgb, highLightRatio), 1073 blendedAlpha 1074 ); 1075 } else { 1076 fragColor = vec4<f32>(fragColor.rgb, 0.0); 1077 } 1078 } 1079 } 1080 1081 // Apply premultiplied alpha as required by transparent canvas 1082 fragColor = deckgl_premultiplied_alpha(fragColor); 1083 1084 return fragColor; 1085} 1086`;var eU=`\ 1087#version 300 es 1088#define SHADER_NAME line-layer-vertex-shader 1089in vec3 positions; 1090in vec3 instanceSourcePositions; 1091in vec3 instanceTargetPositions; 1092in vec3 instanceSourcePositions64Low; 1093in vec3 instanceTargetPositions64Low; 1094in vec4 instanceColors; 1095in vec3 instancePickingColors; 1096in float instanceWidths; 1097out vec4 vColor; 1098out vec2 uv; 1099vec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction, float width) {
1100vec2 dir_screenspace = normalize(line_clipspace * project.viewportSize); 1101dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x); 1102return dir_screenspace * offset_direction * width / 2.0; 1103} 1104vec3 splitLine(vec3 a, vec3 b, float x) { 1105float t = (x - a.x) / (b.x - a.x); 1106return vec3(x, mix(a.yz, b.yz, t)); 1107} 1108void main(void) { 1109geometry.worldPosition = instanceSourcePositions; 1110geometry.worldPositionAlt = instanceTargetPositions; 1111vec3 source_world = instanceSourcePositions; 1112vec3 target_world = instanceTargetPositions; 1113vec3 source_world_64low = instanceSourcePositions64Low; 1114vec3 target_world_64low = instanceTargetPositions64Low; 1115if (line.useShortestPath > 0.5 || line.useShortestPath < -0.5) { 1116source_world.x = mod(source_world.x + 180., 360.0) - 180.; 1117target_world.x = mod(target_world.x + 180., 360.0) - 180.; 1118float deltaLng = target_world.x - source_world.x; 1119if (deltaLng * line.useShortestPath > 180.) { 1120source_world.x += 360. * line.useShortestPath; 1121source_world = splitLine(source_world, target_world, 180. * line.useShortestPath); 1122source_world_64low = vec3(0.0); 1123} else if (deltaLng * line.useShortestPath < -180.) { 1124target_world.x += 360. * line.useShortestPath; 1125target_world = splitLine(source_world, target_world, 180. * line.useShortestPath); 1126target_world_64low = vec3(0.0); 1127} else if (line.useShortestPath < 0.) { 1128gl_Position = vec4(0.); 1129return; 1130} 1131} 1132vec4 source_commonspace; 1133vec4 target_commonspace; 1134vec4 source = project_position_to_clipspace(source_world, source_world_64low, vec3(0.), source_commonspace); 1135vec4 target = project_position_to_clipspace(target_world, target_world_64low, vec3(0.), target_commonspace); 1136float segmentIndex = positions.x; 1137vec4 p = mix(source, target, segmentIndex); 1138geometry.position = mix(source_commonspace, target_commonspace, segmentIndex); 1139uv = positions.xy; 1140geometry.uv = uv; 1141geometry.pickingColor = instancePickingColors; 1142float widthPixels = clamp( 1143project_size_to_pixel(instanceWidths * line.widthScale, line.widthUnits), 1144line.widthMinPixels, line.widthMaxPixels 1145); 1146vec3 offset = vec3( 1147getExtrusionOffset(target.xy - source.xy, positions.y, widthPixels), 11480.0); 1149DECKGL_FILTER_SIZE(offset, geometry); 1150DECKGL_FILTER_GL_POSITION(p, geometry); 1151gl_Position = p + vec4(project_pixel_size_to_clipspace(offset.xy), 0.0, 0.0); 1152vColor = vec4(instanceColors.rgb, instanceColors.a * layer.opacity); 1153DECKGL_FILTER_COLOR(vColor, geometry); 1154} 1155`,eN=`\ 1156#version 300 es 1157#define SHADER_NAME line-layer-fragment-shader 1158precision highp float; 1159in vec4 vColor; 1160in vec2 uv; 1161out vec4 fragColor; 1162void main(void) { 1163geometry.uv = uv; 1164fragColor = vColor; 1165DECKGL_FILTER_COLOR(fragColor, geometry); 1166} 1167`;let eV={getSourcePosition:{type:"accessor",value:e=>e.sourcePosition},getTargetPosition:{type:"accessor",value:e=>e.targetPosition},getColor:{type:"accessor",value:[0,0,0,255]},getWidth:{type:"accessor",value:1},widthUnits:"pixels",widthScale:{type:"number",value:1,min:0},widthMinPixels:{type:"number",value:0,min:0},widthMaxPixels:{type:"number",value:Number.MAX_SAFE_INTEGER,min:0}};class eW extends l.Z{getBounds(){return this.getAttributeManager()?.getBounds(["instanceSourcePositions","instanceTargetPositions"])}getShaders(){return super.getShaders({vs:eU,fs:eN,source:eF,modules:[c.Z,B.Z,A.Z,ez]})}get wrapLongitude(){return!1}initializeState(){this.getAttributeManager().addInstanced({instanceSourcePositions:{size:3,type:"float64",fp64:this.use64bitPositions(),transition:!0,accessor:"getSourcePosition"},instanceTargetPositions:{size:3,type:"float64",fp64:this.use64bitPositions(),transition:!0,accessor:"getTargetPosition"},instanceColors:{size:this.props.colorFormat.length,type:"unorm8",transition:!0,accessor:"getColor",defaultValue:[0,0,0,255]},instanceWidths:{size:1,transition:!0,accessor:"getWidth",defaultValue:1}})}updateState(e){super.updateState(e),e.changeFlags.extensionsChanged&&(this.state.model?.destroy(),this.state.model=this._getModel(),this.getAttributeManager().invalidateAll())}draw({uniforms:e}){let{widthUnits:t,widthScale:i,widthMinPixels:n,widthMaxPixels:o,wrapLongitude:a}=this.props,s=this.state.model,l={widthUnits:r.iI[t],widthScale:i,widthMinPixels:n,widthMaxPixels:o,useShortestPath:a?1:0};s.shaderInputs.setProps({line:l}),s.draw(this.context.renderPass),a&&(s.shaderInputs.setProps({line:{...l,useShortestPath:-1}}),s.draw(this.context.renderPass))}
1167_getModel(){return new g.H(this.context.device,{...this.getShaders(),id:this.props.id,bufferLayout:this.getAttributeManager().getBufferLayouts(),geometry:new P.Z({topology:"triangle-strip",attributes:{positions:{size:3,value:new Float32Array([0,-1,0,0,1,0,1,-1,0,1,1,0])}}}),isInstanced:!0})}}eW.layerName="LineLayer",eW.defaultProps=eV;var eJ=eW,eG=i(54073),eZ=i(34729);let eq=` 1168in float collisionPriorities; 1169 1170uniform sampler2D collision_texture; 1171 1172layout(std140) uniform collisionUniforms { 1173 bool sort; 1174 bool enabled; 1175} collision; 1176 1177vec2 collision_getCoords(vec4 position) { 1178 vec4 collision_clipspace = project_common_position_to_clipspace(position); 1179 return (1.0 + collision_clipspace.xy / collision_clipspace.w) / 2.0; 1180} 1181 1182float collision_match(vec2 tex, vec3 pickingColor) { 1183 vec4 collision_pickingColor = texture(collision_texture, tex); 1184 float delta = dot(abs(collision_pickingColor.rgb - pickingColor), vec3(1.0)); 1185 float e = 0.001; 1186 return step(delta, e); 1187} 1188 1189float collision_isVisible(vec2 texCoords, vec3 pickingColor) { 1190 if (!collision.enabled) { 1191 return 1.0; 1192 } 1193 1194 // Visibility test, sample area of 5x5 pixels in order to fade in/out. 1195 // Due to the locality, the lookups will be cached 1196 // This reduces the flicker present when objects are shown/hidden 1197 const int N = 2; 1198 float accumulator = 0.0; 1199 vec2 step = vec2(1.0 / project.viewportSize); 1200 1201 const float floatN = float(N); 1202 vec2 delta = -floatN * step; 1203 for(int i = -N; i <= N; i++) { 1204 delta.x = -step.x * floatN; 1205 for(int j = -N; j <= N; j++) { 1206 accumulator += collision_match(texCoords + delta, pickingColor); 1207 delta.x += step.x; 1208 } 1209 delta.y += step.y; 1210 } 1211 1212 float W = 2.0 * floatN + 1.0; 1213 return pow(accumulator / (W * W), 2.2); 1214} 1215`,ej={"vs:#decl":` 1216 float collision_fade = 1.0; 1217`,"vs:DECKGL_FILTER_GL_POSITION":` 1218 if (collision.sort) { 1219 float collisionPriority = collisionPriorities; 1220 position.z = -0.001 * collisionPriority * position.w;
1220 // Support range -1000 -> 1000 1221 } 1222 1223 if (collision.enabled) { 1224 vec4 collision_common_position = project_position(vec4(geometry.worldPosition, 1.0)); 1225 vec2 collision_texCoords = collision_getCoords(collision_common_position); 1226 collision_fade = collision_isVisible(collision_texCoords, geometry.pickingColor / 255.0); 1227 if (collision_fade < 0.0001) { 1228 // Position outside clip space bounds to discard 1229 position = vec4(0.0, 0.0, 2.0, 1.0); 1230 } 1231 } 1232 `,"vs:DECKGL_FILTER_COLOR":` 1233 color.a *= collision_fade; 1234 `};var eK={name:"collision",dependencies:[eZ.Z],vs:eq,inject:ej,getUniforms:e=>{if(!e||!("dummyCollisionMap"in e))return{};let{enabled:t,collisionFBO:i,drawToCollisionMap:n,dummyCollisionMap:o}=e;return{enabled:t&&!n,sort:!!n,collision_texture:!n&&i?i.colorAttachments[0]:o}},uniformTypes:{sort:"i32",enabled:"i32"}},eH=i(47717),eX=i(66279);class eY extends eX.Z{renderCollisionMap(e,t){let i=[1,1,e.width-2,e.height-2];this.render({...t,clearColor:[0,0,0,0],scissorRect:i,target:e,pass:"collision"})}getLayerParameters(e,t,i){return{...e.props.parameters,blend:!1,depthWriteEnabled:!0,depthCompare:"less-equal"}}getShaderModuleProps(){return{collision:{drawToCollisionMap:!0},picking:{isActive:1,isAttribute:!1},lighting:{enabled:!1}}}}class e${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:t}=e;this.dummyCollisionMap=t.createTexture({width:1,height:1}),this.collisionFilterPass=new eY(t,{id:"default-collision-filter"})}preRender({effects:e,layers:t,layerFilter:i,viewports:n,onViewportActive:o,views:a,isPicking:r,preRenderStats:s={}}){let{device:l}=this.context;if(r)return;let c=t.filter(({props:{visible:e,collisionEnabled:t}})=>e&&t);if(0===c.length){this.channels={};return}let A=e?.filter(e=>e.useInPicking&&s[e.id]),g=s["mask-effect"]?.didRender,u=this._groupByCollisionGroup(l,c),d=n[0],p=!this.lastViewport||!this.lastViewport.equals(d)||g;for(let e in u){let t=this.collisionFBOs[e],n=u[e],[r,s]=l.canvasContext.getPixelSize();t.resize({width:r/2,height:s/2}),this._render(n,{effects:A,layerFilter:i,onViewportActive:o,views:a,viewport:d,viewportChanged:p})}}_render(e,{effects:t,layerFilter:i,onViewportActive:n,views:o,viewport:a,viewportChanged:r}){let{collisionGroup:s}=e,l=this.channels[s];if(!l)return;let c=r||e===l||!(0,eH.v)(l.layers,e.layers,1)||e.layerBounds.some((e,t)=>!(0,d.fS)(e,l.layerBounds[t]))||e.allLayersLoaded!==l.allLayersLoaded||e.layers.some(e=>e.props.transitions);if(this.channels[s]=e,c){this.lastViewport=a;let r=this.collisionFBOs[s];this.collisionFilterPass.renderCollisionMap(r,{pass:"collision-filter",isPicking:!0,layers:e.layers,effects:t,layerFilter:i,viewports:a?[a]:[],onViewportActive:n,views:o,shaderModuleProps:{collision:{enabled:!0,dummyCollisionMap:this.dummyCollisionMap},project:{devicePixelRatio:r.device.canvasContext.getDevicePixelRatio()/2}}})}}_groupByCollisionGroup(e,t){let i={};for(let e of t){let t=e.props.collisionGroup,n=i[t];n||(n={collisionGroup:t,layers:[],layerBounds:[],allLayersLoaded:!0},i[t]=n),n.layers.push(e),n.layerBounds.push(e.getBounds()),e.isLoaded||(n.allLayersLoaded=!1)}for(let t of Object.keys(i))this.collisionFBOs[t]||this.createFBO(e,t),this.channels[t]||(this.channels[t]=i[t]);for(let e of Object.keys(this.collisionFBOs))i[e]||this.destroyFBO(e);return i}getShaderModuleProps(e){let{collisionGroup:t,collisionEnabled:i}=e.props,{collisionFBOs:n,dummyCollisionMap:o}=this,a=n[t];return{collision:{enabled:i&&!!a,collisionFBO:a,dummyCollisionMap:o}}}cleanup(){for(let e of(this.dummyCollisionMap&&(this.dummyCollisionMap.delete(),this.dummyCollisionMap=void 0),this.channels={},Object.keys(this.collisionFBOs)))this.destroyFBO(e);this.collisionFBOs={},this.lastViewport=void 0}createFBO(e,t){let{width:i,height:n}=e.getDefaultCanvasContext().canvas,o=e.createTexture({format:"rgba8unorm",width:i,height:n,sampler:{minFilter:"nearest",magFilter:"nearest",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),a=e.createTexture({format:"depth16unorm",width:i,height:n});
1234this.collisionFBOs[t]=e.createFramebuffer({id:`collision-${t}`,width:i,height:n,colorAttachments:[o],depthStencilAttachment:a})}destroyFBO(e){let t=this.collisionFBOs[e];t.colorAttachments[0]?.destroy(),t.depthStencilAttachment?.destroy(),t.destroy(),delete this.collisionFBOs[e]}}class e0 extends eG.Z{getShaders(){return{modules:[eK]}}draw({shaderModuleProps:e}){e.collision?.drawToCollisionMap&&(this.props=this.clone(this.props.collisionTestProps).props)}initializeState(e,t){null!==this.getAttributeManager()&&(this.context.deck?._addDefaultEffect(new e$),this.getAttributeManager().add({collisionPriorities:{size:1,stepMode:"dynamic",accessor:"getCollisionPriority"}}))}getNeedsPickingBuffer(){return this.props.collisionEnabled}}e0.defaultProps={getCollisionPriority:{type:"accessor",value:0},collisionEnabled:!0,collisionGroup:{type:"string",value:"default"},collisionTestProps:{}},e0.extensionName="CollisionFilterExtension";var e1=i(35427),e2=i(15121);let e3={inject:{"vs:#decl":` 1235in vec2 instanceDashArrays; 1236#ifdef HIGH_PRECISION_DASH 1237in float instanceDashOffsets; 1238#endif 1239out vec2 vDashArray; 1240out float vDashOffset; 1241`,"vs:#main-end":` 1242vDashArray = instanceDashArrays; 1243#ifdef HIGH_PRECISION_DASH 1244vDashOffset = instanceDashOffsets / width.x; 1245#else 1246vDashOffset = 0.0; 1247#endif 1248`,"fs:#decl":` 1249layout(std140) uniform pathStyleUniforms { 1250float dashAlignMode; 1251bool dashGapPickable; 1252} pathStyle; 1253in vec2 vDashArray; 1254in float vDashOffset; 1255`,"fs:#main-start":` 1256float solidLength = vDashArray.x; 1257float gapLength = vDashArray.y; 1258float unitLength = solidLength + gapLength; 1259float offset; 1260if (unitLength > 0.0) { 1261if (pathStyle.dashAlignMode == 0.0) { 1262offset = vDashOffset; 1263} else { 1264unitLength = vPathLength / round(vPathLength / unitLength); 1265offset = solidLength / 2.0; 1266} 1267float unitOffset = mod(vPathPosition.y + offset, unitLength); 1268if (gapLength > 0.0 && unitOffset > solidLength) { 1269if (path.capType <= 0.5) { 1270if (!(pathStyle.dashGapPickable && bool(picking.isActive))) { 1271discard; 1272} 1273} else { 1274float distToEnd = length(vec2( 1275min(unitOffset - solidLength, unitLength - unitOffset), 1276vPathPosition.x 1277)); 1278if (distToEnd > 1.0) { 1279if (!(pathStyle.dashGapPickable && bool(picking.isActive))) { 1280discard; 1281} 1282} 1283} 1284} 1285} 1286`}},e4={inject:{"vs:#decl":` 1287in vec2 instanceDashArrays; 1288out vec2 vDashArray; 1289`,"vs:#main-end":` 1290vDashArray = instanceDashArrays; 1291`,"fs:#decl":` 1292layout(std140) uniform pathStyleUniforms { 1293bool dashGapPickable; 1294} pathStyle; 1295in vec2 vDashArray; 1296#define PI 3.141592653589793 1297`,"fs:#main-start":` 1298bool inDashGap = false; 1299float dashUnitLength = vDashArray.x + vDashArray.y; 1300if (dashUnitLength > 0.0 && scatterplot.stroked > 0.5) { 1301float _distToCenter = length(unitPosition) * outerRadiusPixels; 1302float innerRadius = innerUnitRadius * outerRadiusPixels; 1303if (_distToCenter >= innerRadius) { 1304float strokeWidth = (1.0 - innerUnitRadius) * outerRadiusPixels; 1305float midStrokeRadius = (innerUnitRadius + 1.0) * 0.5 * outerRadiusPixels; 1306float angle = atan(unitPosition.y, unitPosition.x) + PI; 1307float circumference = 2.0 * PI * midStrokeRadius; 1308float posAlongStroke = (angle / (2.0 * PI)) * circumference / strokeWidth; 1309float unitOffset = mod(posAlongStroke, dashUnitLength); 1310if (unitOffset > vDashArray.x) { 1311if (scatterplot.filled > 0.5) { 1312inDashGap = true; 1313} else { 1314if (!(pathStyle.dashGapPickable && bool(picking.isActive))) { 1315discard; 1316} 1317} 1318} 1319} 1320} 1321`,"fs:#main-end":` 1322if (inDashGap) { 1323float alphaFactor = fragColor.a / max(vLineColor.a, 0.001); 1324fragColor = vec4(vFillColor.rgb, vFillColor.a * alphaFactor); 1325fragColor = picking_filterPickingColor(fragColor); 1326fragColor = picking_filterHighlightColor(fragColor); 1327} 1328`}},e5={inject:{"vs:#decl":` 1329in vec2 instanceDashArrays; 1330out vec2 vDashArray; 1331`,"vs:#main-end":` 1332vDashArray = instanceDashArrays; 1333`,"fs:#decl":` 1334layout(std140) uniform pathStyleUniforms { 1335bool dashGapPickable; 1336} pathStyle; 1337in vec2 vDashArray; 1338#define PI 3.141592653589793 1339float getPerimeterPosition(vec2 fragUV, vec2 dims, vec4 radii, float lineWidth) { 1340float width = dims.x; 1341float height = dims.y; 1342float maxRadius = min(width, height) * 0.5; 1343float rBL = min(radii.w, maxRadius); 1344float rTL = min(radii.z, maxRadius); 1345float rTR = min(radii.x, maxRadius); 1346float rBR = min(radii.y, maxRadius);
1347vec2 p = fragUV * dims; 1348float leftLen = height - rBL - rTL; 1349float topLen = width - rTL - rTR; 1350float rightLen = height - rTR - rBR; 1351float bottomLen = width - rBR - rBL; 1352float arcBL = PI * 0.5 * rBL; 1353float arcTL = PI * 0.5 * rTL; 1354float arcTR = PI * 0.5 * rTR; 1355float arcBR = PI * 0.5 * rBR; 1356float pos = 0.0; 1357float distLeft = p.x; 1358float distRight = width - p.x; 1359float distBottom = p.y; 1360float distTop = height - p.y; 1361float minDist = min(min(distLeft, distRight), min(distBottom, distTop)); 1362if (p.x < rBL && p.y < rBL) { 1363vec2 c = vec2(rBL, rBL); 1364vec2 d = p - c; 1365float angle = atan(-d.x, -d.y); 1366pos = angle / (PI * 0.5) * arcBL; 1367} else if (p.x < rTL && p.y > height - rTL) { 1368vec2 c = vec2(rTL, height - rTL); 1369vec2 d = p - c; 1370float angle = atan(d.y, -d.x); 1371pos = arcBL + leftLen + angle / (PI * 0.5) * arcTL; 1372} else if (p.x > width - rTR && p.y > height - rTR) { 1373vec2 c = vec2(width - rTR, height - rTR); 1374vec2 d = p - c; 1375float angle = atan(d.x, d.y); 1376pos = arcBL + leftLen + arcTL + topLen + angle / (PI * 0.5) * arcTR; 1377} else if (p.x > width - rBR && p.y < rBR) { 1378vec2 c = vec2(width - rBR, rBR); 1379vec2 d = p - c; 1380float angle = atan(-d.y, d.x); 1381pos = arcBL + leftLen + arcTL + topLen + arcTR + rightLen + angle / (PI * 0.5) * arcBR; 1382} else if (minDist == distLeft) { 1383pos = arcBL + clamp(p.y - rBL, 0.0, leftLen); 1384} else if (minDist == distTop) { 1385pos = arcBL + leftLen + arcTL + clamp(p.x - rTL, 0.0, topLen); 1386} else if (minDist == distRight) { 1387pos = arcBL + leftLen + arcTL + topLen + arcTR + clamp(height - rTR - p.y, 0.0, rightLen); 1388} else { 1389pos = arcBL + leftLen + arcTL + topLen + arcTR + rightLen + arcBR + clamp(width - rBR - p.x, 0.0, bottomLen); 1390} 1391return pos / lineWidth; 1392} 1393float getRectPerimeterPosition(vec2 fragUV, vec2 dims, float lineWidth) { 1394float width = dims.x; 1395float height = dims.y; 1396float distLeft = fragUV.x * width; 1397float distRight = (1.0 - fragUV.x) * width; 1398float distBottom = fragUV.y * height; 1399float distTop = (1.0 - fragUV.y) * height; 1400float minDist = min(min(distLeft, distRight), min(distBottom, distTop)); 1401float pos = 0.0; 1402if (minDist == distLeft) { 1403pos = fragUV.y * height; 1404} else if (minDist == distTop) { 1405pos = height + fragUV.x * width; 1406} else if (minDist == distRight) { 1407pos = height + width + (1.0 - fragUV.y) * height; 1408} else { 1409pos = 2.0 * height + width + (1.0 - fragUV.x) * width; 1410} 1411return pos / lineWidth; 1412} 1413`,"fs:#main-start":` 1414bool inDashGap = false; 1415float dashUnitLength = vDashArray.x + vDashArray.y; 1416if (dashUnitLength > 0.0 && textBackground.stroked) { 1417float distToEdge; 1418bool hasRoundedCorners = textBackground.borderRadius != vec4(0.0); 1419if (hasRoundedCorners) { 1420distToEdge = round_rect(uv, dimensions, textBackground.borderRadius); 1421} else { 1422distToEdge = rect(uv, dimensions); 1423} 1424if (distToEdge <= vLineWidth && distToEdge >= 0.0) { 1425float posAlongStroke; 1426if (hasRoundedCorners) { 1427posAlongStroke = getPerimeterPosition(uv, dimensions, textBackground.borderRadius, vLineWidth); 1428} else { 1429posAlongStroke = getRectPerimeterPosition(uv, dimensions, vLineWidth); 1430} 1431float unitOffset = mod(posAlongStroke, dashUnitLength); 1432if (unitOffset > vDashArray.x) { 1433if (vFillColor.a > 0.0) { 1434inDashGap = true; 1435} else { 1436if (!(pathStyle.dashGapPickable && bool(picking.isActive))) { 1437discard; 1438} 1439} 1440} 1441} 1442} 1443`,"fs:#main-end":` 1444if (inDashGap) { 1445float alphaFactor = fragColor.a / max(vLineColor.a, 0.001); 1446fragColor = vec4(vFillColor.rgb, vFillColor.a * alphaFactor); 1447fragColor = picking_filterPickingColor(fragColor); 1448fragColor = picking_filterHighlightColor(fragColor); 1449} 1450`}},e6={inject:{"vs:#decl":` 1451in float instanceOffsets; 1452`,"vs:DECKGL_FILTER_SIZE":` 1453float offsetWidth = abs(instanceOffsets * 2.0) + 1.0; 1454size *= offsetWidth; 1455`,"vs:#main-end":` 1456float offsetWidth = abs(instanceOffsets * 2.0) + 1.0; 1457float offsetDir = sign(instanceOffsets); 1458vPathPosition.x = (vPathPosition.x + offsetDir) * offsetWidth - offsetDir; 1459vPathPosition.y *= offsetWidth; 1460vPathLength *= offsetWidth; 1461`,"fs:#main-start":` 1462float isInside; 1463isInside = step(-1.0, vPathPosition.x) * step(vPathPosition.x, 1.0); 1464if (isInside == 0.0) { 1465discard; 1466} 1467`}};class e8 extends eG.Z{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:i=!1}={}){super({dash:e||i,offset:t,highPrecisionDash:i})}getLayerType(e){if("pathTesselator"in e.state)return"path";let t=e.constructor.layerName;
1467return"ScatterplotLayer"===t?"scatterplot":"TextBackgroundLayer"===t?"textBackground":null}isEnabled(e){return null!==this.getLayerType(e)}getShaders(e){let t=e.getLayerType(this);if(!t)return null;if("scatterplot"===t||"textBackground"===t)return e.opts.dash?{modules:[{name:"pathStyle",inject:"scatterplot"===t?e4.inject:e5.inject,uniformTypes:{dashGapPickable:"i32"}}]}:null;let i={},n={};e.opts.dash&&(i=(0,e1.l)(i,e3),e.opts.highPrecisionDash&&(n.HIGH_PRECISION_DASH=!0)),e.opts.offset&&(i=(0,e1.l)(i,e6));let{inject:o}=i;return{modules:[{name:"pathStyle",inject:o,uniformTypes:{dashAlignMode:"f32",dashGapPickable:"i32"}}],defines:n}}initializeState(e,t){let i=this.getAttributeManager(),n=t.getLayerType(this);i&&n&&(t.opts.dash&&i.addInstanced({instanceDashArrays:{size:2,accessor:"getDashArray"},..."path"===n&&t.opts.highPrecisionDash?{instanceDashOffsets:{size:1,accessor:"getPath",transform:t.getDashOffsets.bind(this)}}:{}}),"path"===n&&t.opts.offset&&i.addInstanced({instanceOffsets:{size:1,accessor:"getOffset"}}))}updateState(e,t){if(t.isEnabled(this)&&t.opts.dash){let e=t.getLayerType(this);if("scatterplot"===e||"textBackground"===e){let e={dashGapPickable:!!this.props.dashGapPickable};this.setShaderModuleProps({pathStyle:e})}else{let e={dashAlignMode:this.props.dashJustified?1:0,dashGapPickable:!!this.props.dashGapPickable};this.setShaderModuleProps({pathStyle:e})}}}getDashOffsets(e){let t,i;let n=[0],o="XY"===this.props.positionFormat?2:3,a=Array.isArray(e[0]),r=a?e.length:e.length/o;for(let s=0;s<r-1;s++)t=a?e[s]:e.slice(s*o,s*o+o),t=this.projectPosition(t),s>0&&(n[s]=n[s-1]+e2.TK(i,t)),i=t;return n[r-1]=0,n}}function e9(e){return e/180*Math.PI}function e7(e){return e/Math.PI*180}e8.defaultProps={getDashArray:{type:"accessor",value:[0,0]},getOffset:{type:"accessor",value:0},dashJustified:!1,dashGapPickable:!1},e8.extensionName="PathStyleExtension";let te=Symbol("Comlink.proxy"),tt=Symbol("Comlink.endpoint"),ti=Symbol("Comlink.releaseProxy"),tn=Symbol("Comlink.finalizer"),to=Symbol("Comlink.thrown"),ta=e=>"object"==typeof e&&null!==e||"function"==typeof e,tr=new Map([["proxy",{canHandle:e=>ta(e)&&e[te],serialize(e){let{port1:t,port2:i}=new MessageChannel;return function e(t,i=globalThis,n=["*"]){i.addEventListener("message",function o(a){let r;if(!a||!a.data)return;if(!function(e,t){for(let i of e)if(t===i||"*"===i||i instanceof RegExp&&i.test(t))return!0;return!1}(n,a.origin)){console.warn(`Invalid origin '${a.origin}' for comlink proxy`);return}let{id:s,type:l,path:c}=Object.assign({path:[]},a.data),A=(a.data.argumentList||[]).map(tm);try{let i=c.slice(0,-1).reduce((e,t)=>e[t],t),n=c.reduce((e,t)=>e[t],t);switch(l){case"GET":r=n;break;case"SET":i[c.slice(-1)[0]]=tm(a.data.value),r=!0;break;case"APPLY":r=n.apply(i,A);break;case"CONSTRUCT":var g;g=new n(...A),r=Object.assign(g,{[te]:!0});break;case"ENDPOINT":{let{port1:i,port2:n}=new MessageChannel;e(t,n),r=th(i,[i])}break;case"RELEASE":r=void 0;break;default:return}}catch(e){r={value:e,[to]:0}}Promise.resolve(r).catch(e=>({value:e,[to]:0})).then(e=>{let[n,a]=tf(e);i.postMessage(Object.assign(Object.assign({},n),{id:s}),a),"RELEASE"===l&&(i.removeEventListener("message",o),ts(i),tn in t&&"function"==typeof t[tn]&&t[tn]())}).catch(e=>{let[t,n]=tf({value:TypeError("Unserializable return value"),[to]:0});i.postMessage(Object.assign(Object.assign({},t),{id:s}),n)})}),i.start&&i.start()}(e,t),[i,[i]]},deserialize:e=>(e.start(),tl(e))}],["throw",{canHandle:e=>ta(e)&&to in e,serialize:({value:e})=>[e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[]],deserialize(e){if(e.isError)throw Object.assign(Error(e.value.message),e.value);throw e.value}}]]);function ts(e){"MessagePort"===e.constructor.name&&e.close()}function tl(e,t){let i=new Map;return e.addEventListener("message",function(e){let{data:t}=e;if(!t||!t.id)return;let n=i.get(t.id);if(n)try{n(t)}finally{i.delete(t.id)}}),function e(t,i,n=[],o=function(){}){let a=!1,r=new Proxy(o,{get(o,s){if(tc(a),s===ti)return()=>{tu&&tu.unregister(r),tA(t),i.clear(),a=!0};if("then"===s){if(0===n.length)return{then:()=>r};let e=tv(t,i,{type:"GET",path:n.map(e=>e.toString())}).then(tm);return e.then.bind(e)}return e(t,i,[...n,s])},set(e,o,r){tc(a);let[s,l]=tf(r);return tv(t,i,{type:"SET",path:[...n,o].map(e=>e.toString()),value:s},l).then(tm)},apply(o,r,s){tc(a);let l=n[n.length-1];if(l===tt)return tv(t,i,{type:"ENDPOINT"}).then(tm);if("bind"===l)return e(t,i,n.slice(0,-1));let[c,A]=td(s);
1467return tv(t,i,{type:"APPLY",path:n.map(e=>e.toString()),argumentList:c},A).then(tm)},construct(e,o){tc(a);let[r,s]=td(o);return tv(t,i,{type:"CONSTRUCT",path:n.map(e=>e.toString()),argumentList:r},s).then(tm)}});return function(e,t){let i=(tg.get(t)||0)+1;tg.set(t,i),tu&&tu.register(e,t,e)}(r,t),r}(e,i,[],t)}function tc(e){if(e)throw Error("Proxy has been released and is not useable")}function tA(e){return tv(e,new Map,{type:"RELEASE"}).then(()=>{ts(e)})}let tg=new WeakMap,tu="FinalizationRegistry"in globalThis&&new FinalizationRegistry(e=>{let t=(tg.get(e)||0)-1;tg.set(e,t),0===t&&tA(e)});function td(e){var t;let i=e.map(tf);return[i.map(e=>e[0]),(t=i.map(e=>e[1]),Array.prototype.concat.apply([],t))]}let tp=new WeakMap;function th(e,t){return tp.set(e,t),e}function tf(e){for(let[t,i]of tr)if(i.canHandle(e)){let[n,o]=i.serialize(e);return[{type:"HANDLER",name:t,value:n},o]}return[{type:"RAW",value:e},tp.get(e)||[]]}function tm(e){switch(e.type){case"HANDLER":return tr.get(e.name).deserialize(e.value);case"RAW":return e.value}}function tv(e,t,i,n){return new Promise(o=>{let a=[,,,,].fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-");t.set(a,o),e.start&&e.start(),e.postMessage(Object.assign({id:a},i),n)})}let tC=function(e){return e.on=e.addEventListener,e.off=e.removeEventListener,e},ty=function(e){try{return URL.createObjectURL(new Blob([e],{type:"application/javascript"}))}catch(i){let t=new BlobBuilder;return t.append(e),URL.createObjectURL(t.getBlob())}},tI=Math.PI/180,tx=180/Math.PI,tE="900913",tb={};function tw(e){return Number(e)===e&&e%1!=0}class tB{#e;#t;#i;#n;#o;#a;constructor(e={}){if(this.#e=e.size||256,this.#t=e.antimeridian?2:1,!tb[this.#e]){let e=this.#e,t=tb[this.#e]={};t.Bc=[],t.Cc=[],t.zc=[],t.Ac=[];for(let i=0;i<30;i++)t.Bc.push(e/360),t.Cc.push(e/(2*Math.PI)),t.zc.push(e/2),t.Ac.push(e),e*=2}this.#i=tb[this.#e].Bc,this.#n=tb[this.#e].Cc,this.#o=tb[this.#e].zc,this.#a=tb[this.#e].Ac}px(e,t){if(tw(t)){let i=this.#e*Math.pow(2,t),n=i/2,o=i/(2*Math.PI),a=Math.min(Math.max(Math.sin(tI*e[1]),-.9999),.9999),r=n+e[0]*(i/360),s=n+-(.5*Math.log((1+a)/(1-a))*o);return r>i*this.#t&&(r=i*this.#t),s>i&&(s=i),[r,s]}{let i=this.#o[t],n=Math.min(Math.max(Math.sin(tI*e[1]),-.9999),.9999),o=Math.round(i+e[0]*this.#i[t]),a=Math.round(i+-(.5*Math.log((1+n)/(1-n))*this.#n[t]));return o>this.#a[t]*this.#t&&(o=this.#a[t]*this.#t),a>this.#a[t]&&(a=this.#a[t]),[o,a]}}ll(e,t){if(tw(t)){let i=this.#e*Math.pow(2,t),n=i/(2*Math.PI),o=i/2,a=-((e[1]-o)/n);return[(e[0]-o)/(i/360),tx*(2*Math.atan(Math.exp(a))-.5*Math.PI)]}{let i=-((e[1]-this.#o[t])/this.#n[t]);return[(e[0]-this.#o[t])/this.#i[t],tx*(2*Math.atan(Math.exp(i))-.5*Math.PI)]}}convert(e,t){return t===tE?[...this.forward(e.slice(0,2)),...this.forward(e.slice(2,4))]:[...this.inverse(e.slice(0,2)),...this.inverse(e.slice(2,4))]}inverse(e){return[e[0]*tx/6378137,(.5*Math.PI-2*Math.atan(Math.exp(-e[1]/6378137)))*tx]}forward(e){let t=[6378137*e[0]*tI,6378137*Math.log(Math.tan(.25*Math.PI+.5*e[1]*tI))];return t[0]>20037508.342789244&&(t[0]=20037508.342789244),t[0]<-20037508.342789244&&(t[0]=-20037508.342789244),t[1]>20037508.342789244&&(t[1]=20037508.342789244),t[1]<-20037508.342789244&&(t[1]=-20037508.342789244),t}bbox(e,t,i,n,o){n&&(t=Math.pow(2,i)-1-t);let a=[e*this.#e,(+t+1)*this.#e],r=[(+e+1)*this.#e,t*this.#e],s=[...this.ll(a,i),...this.ll(r,i)];return o===tE?this.convert(s,tE):s}xyz(e,t,i,n){let o=n===tE?this.convert(e,"WGS84"):e,a=[o[0],o[1]],r=[o[2],o[3]],s=this.px(a,t),l=this.px(r,t),c=[Math.floor(s[0]/this.#e),Math.floor((l[0]-1)/this.#e)],A=[Math.floor(l[1]/this.#e),Math.floor((s[1]-1)/this.#e)],g={minX:0>Math.min.apply(Math,c)?0:Math.min.apply(Math,c),minY:0>Math.min.apply(Math,A)?0:Math.min.apply(Math,A),maxX:Math.max.apply(Math,c),maxY:Math.max.apply(Math,A)};if(i){let e={minY:Math.pow(2,t)-1-g.maxY,maxY:Math.pow(2,t)-1-g.minY};g.minY=e.minY,g.maxY=e.maxY}return g}}let tP=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];class tT{static from(e){if(!(e instanceof ArrayBuffer))throw Error("Data must be an instance of ArrayBuffer.");let[t,i]=new Uint8Array(e,0,2);if(219!==t)throw Error("Data does not appear to be in a KDBush format.");let n=i>>4;if(1!==n)throw Error(`Got v${n} data when expected v1.`);let o=tP[15&i];if(!o)throw Error("Unrecognized array type.");let[a]=new Uint16Array(e,2,1),[r]=new Uint32Array(e,4,1);return new tT(r,a,o,e)}constructor(e,t=64,i=Float64Array,n){if(isNaN(e)||e<0)throw Error(`Unpexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.ArrayType=i,this.IndexArrayType=e<65536?Uint16Array:Uint32Array;let o=tP.indexOf(this.ArrayType),a=2*e*this.ArrayType.BYTES_PER_ELEMENT,r=e*this.IndexArrayType.BYTES_PER_ELEMENT,s=(8-r%8)%8;if(o<0)throw Error(`Unexpected typed array class: ${i}.`);n&&n instanceof ArrayBuffer?(this.data=n,this.ids=new this.IndexArrayType(this.data,8,e),this.coords=new this.ArrayType(this.data,8+r+s,2*e),this._pos=2*e,this._finished=!0):(this.data=new ArrayBuffer(8+a+r+s),this.ids=new this.IndexArrayType(this.data,8,e),this.coords=new this.ArrayType(this.data,8+r+s,2*e),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,16+o]),new Uint16Array(this.data,2,1)[0]=t,new Uint32Array(this.data,4,1)[0]=e)}add(e,t){let i=this._pos>>1;return this.ids[i]=i,this.coords[this._pos++]=e,this.coords[this._pos++]=t,i}finish(){let e=this._pos>>1;if(e!==this.numItems)throw Error(`Added ${e} items when expected ${this.numItems}.`);return function e(t,i,n,o,a,r){if(a-o<=n)return;let s=o+a>>1;(function e(t,i,n,o,a,r){for(;a>o;){if(a-o>600){let s=a-o+1,l=n-o+1,c=Math.log(s),A=.5*Math.exp(2*c/3),g=.5*Math.sqrt(c*A*(s-A)/s)*(l-s/2<0?-1:1),u=Math.max(o,Math.floor(n-l*A/s+g)),d=Math.min(a,Math.floor(n+(s-l)*A/s+g));e(t,i,n,u,d,r)}let s=i[2*n+r],l=o,c=a;for(tQ(t,i,o,n),i[2*a+r]>s&&tQ(t,i,o,a);l<c;){for(tQ(t,i,l,c),l++,c--;i[2*l+r]<s;)l++;for(;i[2*c+r]>s;)c--}i[2*o+r]===s?tQ(t,i,o,c):tQ(t,i,++c,a),c<=n&&(o=c+1),n<=c&&(a=c-1)}})(t,i,s,o,a,r),e(t,i,n,o,s-1,1-r),e(t,i,n,s+1,a,1-r)}(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(e,t,i,n){if(!this._finished)throw Error("Data not yet indexed - call index.finish().");let{ids:o,coords:a,nodeSize:r}=this,s=[0,o.length-1,0],l=[];for(;s.length;){let c=s.pop()||0,A=s.pop()||0,g=s.pop()||0;if(A-g<=r){for(let r=g;r<=A;r++){let s=a[2*r],c=a[2*r+1];s>=e&&s<=i&&c>=t&&c<=n&&l.push(o[r])}continue}let u=g+A>>1,d=a[2*u],p=a[2*u+1];d>=e&&d<=i&&p>=t&&p<=n&&l.push(o[u]),(0===c?e<=d:t<=p)&&(s.push(g),s.push(u-1),s.push(1-c)),(0===c?i>=d:n>=p)&&(s.push(u+1),s.push(A),s.push(1-c))}return l}within(e,t,i){if(!this._finished)throw Error("Data not yet indexed - call index.finish().");let{ids:n,coords:o,nodeSize:a}=this,r=[0,n.length-1,0],s=[],l=i*i;for(;r.length;){let c=r.pop()||0,A=r.pop()||0,g=r.pop()||0;if(A-g<=a){for(let i=g;i<=A;i++)tS(o[2*i],o[2*i+1],e,t)<=l&&s.push(n[i]);continue}let u=g+A>>1,d=o[2*u],p=o[2*u+1];tS(d,p,e,t)<=l&&s.push(n[u]),(0===c?e-i<=d:t-i<=p)&&(r.push(g),r.push(u-1),r.push(1-c)),(0===c?e+i>=d:t+i>=p)&&(r.push(u+1),r.push(A),r.push(1-c))}return s}}function tQ(e,t,i,n){t_(e,i,n),t_(t,2*i,2*n),t_(t,2*i+1,2*n+1)}function t_(e,t,i){let n=e[t];e[t]=e[i],e[i]=n}function tS(e,t,i,n){let o=e-i,a=t-n;return o*o+a*a}class tM{constructor(e=[],t=(e,t)=>e<t?-1:e>t?1:0){if(this.data=e,this.length=this.data.length,this.compare=t,this.length>0)for(let e=(this.length>>1)-1;e>=0;e--)this._down(e)}push(e){this.data.push(e),this._up(this.length++)}pop(){if(0===this.length)return;let e=this.data[0],t=this.data.pop();return--this.length>0&&(this.data[0]=t,this._down(0)),e}peek(){return this.data[0]}_up(e){let{data:t,compare:i}=this,n=t[e];for(;e>0;){let o=e-1>>1,a=t[o];if(i(n,a)>=0)break;t[e]=a,e=o}t[e]=n}_down(e){let{data:t,compare:i}=this,n=this.length>>1,o=t[e];for(;e<n;){let n=(e<<1)+1,a=n+1;if(a<this.length&&0>i(t[a],t[n])&&(n=a),i(t[n],o)>=0)break;t[e]=t[n],e=n}t[e]=o}}let tL=Math.PI/180;function tO(e,t,i,n){let o=n.minLng,a=n.maxLng,r=n.minLat,s=n.maxLat;if(e>=o&&e<=a)return t<r?tR((t-r)*tL):t>s?tR((t-s)*tL):0;
1467let l=Math.min(tR((e-o)*tL),tR((e-a)*tL)),c=function(e,t){let i=1-2*t;return i<=0?e>0?90:-90:Math.atan(Math.tan(e*tL)/i)/tL}(t,l);return c>r&&c<s?tk(l,i,t,c):Math.min(tk(l,i,t,r),tk(l,i,t,s))}function tD(e,t){return e.dist-t.dist}function tR(e){let t=Math.sin(e/2);return t*t}function tk(e,t,i,n){return t*Math.cos(n*tL)*e+tR((i-n)*tL)}var tz=i(38074);let tF="2026.5.2",tU="2026-05-24T18:47:49.070Z",tN=new Map;function tV(e,t){tN.set(e,t)}let tW={INWARD:"INWARD",OUTWARD:"OUTWARD"},tJ={VALUE:"VALUE",CARDINAL:"CARDINAL",CARDINAL2:"CARDINAL2",CARDINAL3:"CARDINAL3"},tG={[tJ.CARDINAL]:["N","E","S","W"],[tJ.CARDINAL2]:["N","NE","E","SE","S","SW","W","NW"],[tJ.CARDINAL3]:["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW"]};function tZ(e,t){if(!t)return`${Math.round(e)}`;let{scale:i=1,offset:n=0,decimals:o=0}=t,a=i*e+n;return`${o?Math.round(a*10**o)/10**o:Math.round(a)}`}function tq(e){return e.unit.replace("^2","\xb2").replace("^3","\xb3")}function tj(e,t){return`${tZ(e,t)}\xa0${tq(t)}`}function tK(e,t,i){if(t===tW.OUTWARD&&(e+=180),i===tJ.VALUE)return`${Math.round(e%360)}\xb0`;if(i===tJ.CARDINAL||i===tJ.CARDINAL2||i===tJ.CARDINAL3){let t=tG[i],n=360/t.length;return t[Math.floor((e%360+n/2)/n)%t.length]}throw Error("Invalid state")}let tH=1,tX=[255,255,255],tY='"Helvetica Neue", Arial, Helvetica, sans-serif',t$=12,t0=[255,255,255],t1=1,t2=[13,13,13],t3=tZ,t4=40,t5=[255,255,255];function t6(e,t){let i={};for(let n in e)if(void 0===e[n]&&n in t){let e=t[n];e&&("value"in e?e.value&&(i[n]=e.value):i[n]=e)}return Object.freeze({...e,...i})}class t8{constructor(e){this._running=!1,this._raf=void 0,this._lastFrameTime=0,this._config=e}getConfig(){return{...this._config}}setConfig(e){this._config=e}updateConfig(e){this.setConfig({...this._config,...e})}get running(){return this._running}toggle(e=!this._running){e?this.start():this.stop()}start(){this._running||(this._running=!0,this._raf=window.requestAnimationFrame(()=>this.step()))}stop(){this._running&&(this._running=!1,this._raf&&(window.cancelAnimationFrame(this._raf),this._raf=void 0))}step(){let e=1e3/(this._config.fps??30),t=Date.now(),i=t-this._lastFrameTime;i>e&&(this._lastFrameTime=t-i%e,this._config.onUpdate()),this._running&&(this._raf=window.requestAnimationFrame(()=>this.step()))}}let t9=new Map,t7=new class{constructor(){this.queue=Promise.resolve()}async run(e){let t;let i=this.queue;this.queue=new Promise(e=>{t=e});try{return await i,await e()}finally{t()}}};async function ie(e,t){let n;let o=await async function(e){if(tN.has(e))return tN.get(e);try{if("geotiff"===e)return await Promise.all([i.e(6845),i.e(7768),i.e(4666)]).then(i.bind(i,52391))}catch(t){throw Error(`Optional dependency '${e}' is missing, install it with a package manager or provide with \`setLibrary('${e}', library)\``,{cause:t})}}("geotiff");try{n=await o.fromUrl(e,{allowFullFile:!0,blockSize:Number.MAX_SAFE_INTEGER,fetch:(e,i)=>fetch(e,{...i,headers:{...i?.headers,...t?.headers}})},t?.signal)}catch(t){throw Error(`Image ${e} can't be decoded.`,{cause:t})}let a=await n.getImage(0),r=await a.readRasters({interleave:!0,signal:t?.signal});if(!(r instanceof Uint8Array||r instanceof Uint8ClampedArray||r instanceof Float32Array))throw Error("Unsupported data format");return{data:function(e,t){if(null==t)return e;let i=e.slice(0);for(let e=0;e<i.length;e++)Math.abs(i[e]-t)<2*Number.EPSILON&&(i[e]=NaN);return i}(r,a.getGDALNoData()),width:a.getWidth(),height:a.getHeight()}}function it(e){return async(t,i)=>{if(!1===i?.cache)return e(t);let n=i?.cache??t9,o=t+(i?.headers?":"+JSON.stringify(i?.headers):""),a=n.get(o);if(a)return a;let r=e(t,{...i,cache:void 0});return n.set(o,r),r.then(e=>{n.set(o,e)}),r}}let ii=it(async(e,t)=>{if(e.includes(".png")||e.includes(".webp")||e.includes("image/png")||e.includes("image/webp"))return async function(e,t){let i;if(t?.headers||t?.signal){let n=await fetch(e,{headers:t.headers,signal:t.signal});if(!n.ok)throw Error(`URL ${e} can't be loaded. Status: ${n.status}`);let o=await n.blob();i=URL.createObjectURL(o)}let n=new Image;try{await new Promise((t,o)=>{n.addEventListener("load",t),n.addEventListener("error",o),n.crossOrigin="anonymous",n.src=i??e})}catch(t){throw Error(`URL ${e} can't be loaded.`,{cause:t})}finally{i&&URL.revokeObjectURL(i)}try{await t7.run(()=>n.decode())}catch(t){throw Error(`Image ${e} can't be decoded.`,{cause:t})}let o=document.createElement("canvas");o.width=n.width,o.height=n.height;let a=o.getContext("2d");
1467a.drawImage(n,0,0);let{data:r,width:s,height:l}=a.getImageData(0,0,o.width,o.height);return{data:r,width:s,height:l}}(e,t);if(e.includes(".tif")||e.includes("image/tif"))return ie(e,t);throw Error("Unsupported data format")}),io=it(async(e,t)=>{let i=await fetch(e,{headers:t?.headers});if(!i.ok)throw Error(`URL ${e} can't be loaded. Status: ${i.status}`);return i.json()});function ia(e,t,i){if(!t){if(0===i)return e;throw Error("Invalid state")}if(i<=0)return e;if(i>=1)return t;{let n=new Date(e),o=new Date(t);return new Date(n.getTime()+(o.getTime()-n.getTime())*i).toISOString()}}function ir(e,t,i){if(!t){if(e===i)return 0;throw Error("Invalid state")}if(i<=e)return 0;if(i>=t)return 1;{let n=new Date(e),o=new Date(t);return(new Date(i).getTime()-n.getTime())/(o.getTime()-n.getTime())}}function is(e,t){return[...e].reverse().find(e=>e<=t)}function il(e,t){return e.find(e=>e>=t)}function ic(e,t){return new Date(new Date(e).getTime()+1e3*t*3600).toISOString()}function iA(e,t,i){return[ic(e,t),ic(e,i)]}function ig(e){if(!e)return e;let t=new Date(e);return t.getDate()?`${t.getUTCFullYear()}/${`${t.getUTCMonth()+1}`.padStart(2,"0")}/${`${t.getUTCDate()}`.padStart(2,"0")} ${`${t.getUTCHours()}`.padStart(2,"0")}:${`${t.getUTCMinutes()}`.padStart(2,"0")}\xa0UTC`:e}let iu={NEAREST:"NEAREST",LINEAR:"LINEAR",CUBIC:"CUBIC"},id={SCALAR:"SCALAR",VECTOR:"VECTOR"},ip={METRIC:"METRIC",METRIC_KILOMETERS:"METRIC_KILOMETERS",IMPERIAL:"IMPERIAL",NAUTICAL:"NAUTICAL"},ih={BOTTOM:"BOTTOM",TOP:"TOP",RIGHT:"RIGHT",LEFT:"LEFT"};function im(e,t){return e.map((i,n)=>e[n]+t[n])}function iv(e,t){return e.map((i,n)=>e[n]*t)}function iC(e,t){return e.map((i,n)=>e[n]*t[n]).reduce((e,t)=>e+t)}function iy(e,t,i){return e===t?e:e*(1-i)+t*i}function iI(e,t,i){return e.map((n,o)=>iy(e[o],t[o],i))}function ix(e,t){return t?e[3]>=255:!isNaN(e[0])}function iE(e,t,i){return t===id.VECTOR?i?[iy(i[0],i[1],e[0]/255),iy(i[0],i[1],e[1]/255)]:[e[0],e[1]]:[NaN,NaN]}function ib(e,t,i){if(t===id.VECTOR){let n=iE(e,t,i);return Math.hypot(n[0],n[1])}return t===id.VECTOR?0:i?iy(i[0],i[1],e[0]/255):e[0]}function iw(e,t,i,n,o,a){let{data:r,width:s,height:l}=e,c=r.length/(s*l),A=(i+o+.5)/t[0],g=(n+a+.5)/t[1],u=Math.max(0,Math.min(s-1,Math.floor(A*s))),d=Math.max(0,Math.min(l-1,Math.floor(g*l)));return Array(c).fill(void 0).map((e,t)=>r[(u+d*s)*c+t])}let iB=[3,-6,0,4].map(e=>e/6),iP=[-1,6,-12,8].map(e=>e/6);function iT(e){return[e*e*e,e*e,e,1]}function iQ(e,t,i,n,o){let a=im(im(im(iv(e,iC(iP,iT(o+1))),iv(t,iC(iB,iT(o)))),iv(i,iC(iB,iT(1-o)))),iv(n,iC(iP,iT(2-o))));return a[3]=e[3]>0&&t[3]>0&&i[3]>0&&n[3]>0?Math.max(Math.max(Math.max(e[3],t[3]),i[3]),n[3]):0,a}
1467function i_(e,t,i,n,o){return i===iu.CUBIC?function(e,t,i,n){let o=i*t[0]-.5,a=n*t[1]-.5,r=Math.floor(o),s=Math.floor(a),l=o%1,c=a%1;return iQ(iQ(iw(e,t,r,s,-1,-1),iw(e,t,r,s,0,-1),iw(e,t,r,s,1,-1),iw(e,t,r,s,2,-1),l),iQ(iw(e,t,r,s,-1,0),iw(e,t,r,s,0,0),iw(e,t,r,s,1,0),iw(e,t,r,s,2,0),l),iQ(iw(e,t,r,s,-1,1),iw(e,t,r,s,0,1),iw(e,t,r,s,1,1),iw(e,t,r,s,2,1),l),iQ(iw(e,t,r,s,-1,2),iw(e,t,r,s,0,2),iw(e,t,r,s,1,2),iw(e,t,r,s,2,2),l),c)}(e,t,n,o):i===iu.LINEAR?function(e,t,i,n){let o=i*t[0]-.5,a=n*t[1]-.5,r=Math.floor(o),s=Math.floor(a),l=o%1,c=a%1;return iI(iI(iw(e,t,r,s,0,0),iw(e,t,r,s,1,0),l),iI(iw(e,t,r,s,0,1),iw(e,t,r,s,1,1),l),c)}(e,t,n,o):function(e,t,i,n){let o=i*t[0]-.5,a=n*t[1]-.5;return iw(e,t,Math.round(o),Math.round(a),0,0)}(e,t,n,o)}function iS(e,t,i,n,o,a,r,s){let l=a?r+.5/i[0]:iy(0+.5/i[0],1-.5/i[0],r),c=iy(0+.5/i[1],1-.5/i[1],s);return t&&o>0?iI(i_(e,i,n,l,c),i_(t,i,n,l,c),o):i_(e,i,n,l,c)}function iM(e,t,i){let n=1+Math.max(0,i);return[e/n,t/n]}function iL(e,t){let i=((e+180)%360+360)%360-180;return"number"==typeof t&&i<t&&(i+=360),i}function iO(e){return e[2]-e[0]==360}function iD(e,t){return{type:"Feature",geometry:{type:"Point",coordinates:e},properties:t}}function iR(e,t,i){let{image:n,image2:o,imageSmoothing:a,imageInterpolation:r,imageWeight:s,imageType:l,imageUnscale:c,imageMinValue:A,imageMaxValue:g}=e,{width:u,height:d}=n,p=function(e,t,i){let n=[i[0],i[3]],o=(i[2]-i[0])/e,a=(i[3]-i[1])/t;return e=>{let[t,i]=e;return[(t-n[0])/o,(n[1]-i)/a]}}(u,d,t),h=iM(u,d,a),f=iO(t);return{type:"FeatureCollection",features:i.map(e=>{if(!(e[0]>=t[0])||!(e[0]<=t[2])||!(e[1]>=t[1])||!(e[1]<=t[3]))return iD(e,{value:NaN});let i=p(e),a=iS(n,o,h,r,s,f,i[0]/u,i[1]/d);if(!ix(a,c))return iD(e,{value:NaN});let m=ib(a,l,c);return"number"==typeof A&&!isNaN(A)&&m<A||"number"==typeof g&&!isNaN(g)&&m>g?iD(e,{value:NaN}):l===id.VECTOR?iD(e,{value:m,direction:function(e,t,i){if(t===id.VECTOR){let n=iE(e,t,i);return(360-(Math.atan2(n[1],n[0])/Math.PI*180+180)-270)%360}return NaN}(a,l,c)}):iD(e,{value:m})})}}function ik(e,t){let{image:i,image2:n,imageSmoothing:o,imageInterpolation:a,imageWeight:r,imageType:s,imageUnscale:l,imageMinValue:c,imageMaxValue:A}=e,{width:g,height:u}=i,d=a!==iu.NEAREST?iu.NEAREST:a,p=iM(g,u,o),h=iO(t),f=new Float32Array(g*u);for(let e=0;e<u;e++)for(let t=0;t<g;t++){let o=t+e*g,a=iS(i,n,p,d,r,h,t/g,e/u);if(!ix(a,l)){f[o]=NaN;continue}let m=ib(a,s,l);"number"==typeof c&&!isNaN(c)&&m<c||"number"==typeof A&&!isNaN(A)&&m>A?f[o]=NaN:f[o]=m}return{data:f,width:g,height:u}}let iz=new WeakMap,iF=new WeakMap;function iU(e,t,i=!1){let n=i?iz:iF,o=n.get(e)??(()=>{let t=new WeakMap;return n.set(e,t),t})();return o.get(t)??(()=>{let n=e.createTexture({format:function(e,t){let{data:i,width:n,height:o}=t,a=i.length/(n*o);if(i instanceof Uint8Array||i instanceof Uint8ClampedArray){if(4===a)return"rgba8unorm";if(2===a)return"rg8unorm";if(1===a)return"r8unorm";throw Error("Unsupported data format")}if(i instanceof Float32Array){if(!e.features.has("float32-renderable-webgl"))throw Error("Float textures are required");if(2===a)return"rg32float";if(1===a)return"r32float"}throw Error("Unsupported data format")}(e,t),width:t.width,height:t.height,mipLevels:1,sampler:{magFilter:"nearest",minFilter:"nearest",addressModeU:i?"repeat":"clamp-to-edge",addressModeV:"clamp-to-edge",lodMaxClamp:0}});return n.copyImageData({data:t.data}),o.set(t,n),n})()}let iN=null;function iV(e){return iN||(iN=e.createTexture({width:1,height:1,mipLevels:1})).copyImageData({data:new Uint8Array([0,0,0,0])}),iN}function iW(e,t){return function(e,t,i=6371e3){let n=e9(e[1]),o=e9(e[0]),a=e9(t[1]),r=e9(t[0]),s=a-n,l=r-o,c=Math.sin(s/2)*Math.sin(s/2)+Math.cos(n)*Math.cos(a)*Math.sin(l/2)*Math.sin(l/2);return 2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))*i}(e,t,6370972)}function iJ(e){return!!e.resolution}function iG(e,t,i){return!(null!=t&&e.zoom<t)&&!(null!=i&&e.zoom>i)}function iZ(e){return[e.longitude,e.latitude]}function iq(e){let t=iZ(e);return Math.max(iW(t,e.unproject([e.width/2,0])),iW(t,e.unproject([0,e.height/2])),...e.width>e.height?[iW(t,e.unproject([e.width/2-e.height/4*1,e.height/2])),iW(t,e.unproject([e.width/2-e.height/2*1,e.height/2])),iW(t,e.unproject([e.width/2-e.height/4*3,e.height/2])),iW(t,e.unproject([e.width/2-e.height,e.height/2]))]:[iW(t,e.unproject([e.width/2,e.height/2-e.width/4*1])),iW(t,e.unproject([e.width/2,e.height/2-e.width/2*1])),iW(t,e.unproject([e.width/2,e.height/2-e.width/4*3])),iW(t,e.unproject([e.width/2,e.height/2-e.width]))])}function ij(e){return function(e){let t=e[2]-e[0]<360?iL(e[0]):-180,i=e[2]-e[0]<360?iL(e[2],t):180;return[t,Math.max(e[1],-85.051129),i,Math.min(e[3],85.051129)]}(e.getBounds())}function iK(e){return iJ(e)?Math.log2(e.scale):e.zoom}function iH(e,t){return t+(iJ(e)?180:0)}function iX(e,t){let i=t.domain(),n=[i[0],i[i.length-1]],o=(0,a.w)(t),r=e.createTexture({width:o.width,height:o.height,mipLevels:1,sampler:{magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}});return r.copyExternalImage({image:o}),{paletteBounds:n,paletteTexture:r}}function iY(e){return[e[0]/255,e[1]/255,e[2]/255,(e[3]??255)/255]}function i$(e){return[e[0],e[1],e[2],255*e[3]]}let i0="layout(std140)uniform bitmap2Uniforms{\nvec4 A;\nbool B;\nfloat C;\nvec4 D;\n}\nbitmap2;
1467\nconst float E=512.;\nconst float F=3.1415926536;\nconst float G=E/F/2.;\nvec2 H(vec2 I){\nfloat J=I.x;\nfloat K=clamp(I.y,-89.9,89.9);\nreturn vec2(radians(J)+F,F+log(tan(F*0.25+radians(K)*0.5)))*G;\n}\nvec2 L(vec2 M){\nM/=G;\nreturn degrees(vec2(M.x-F,atan(exp(M.y-F))*2.-F*0.5));\n}\nvec4 N(vec3 O,float P){\nreturn mix(bitmap2.D,vec4(O,1.),P);\n}\nvec2 Q(vec2 R){\nreturn vec2((R.x-bitmap2.A[0])/(bitmap2.A[2]-bitmap2.A[0]),(R.y-bitmap2.A[3])/(bitmap2.A[1]-bitmap2.A[3]));\n}\nvec2 S(vec2 T,vec2 U){\nvec2 uv=T;\nif(bitmap2.C<-0.5){\nvec2 I=L(U);\nuv=Q(I);\n}\nelse if(bitmap2.C>0.5){\nvec2 V=H(U);\nuv=Q(V);\n}\nreturn uv;\n}\n",i1=Math.PI,i2=i1/4,i3=i1/180;function i4(e){let[t,i]=e;return[512*(t*i3+i1)/(2*i1),512*(i1+Math.log(Math.tan(i2+i*i3*.5)))/(2*i1)]}let i5={name:"bitmap2",vs:i0,fs:i0,uniformTypes:{A:"vec4<f32>",B:"f32",C:"f32",D:"vec4<f32>"},getUniforms:function(e={}){let{bounds:t,coordinateConversion:i}=function(e={}){let{LNGLAT:t,CARTESIAN:i,DEFAULT:n}=r.COORDINATE_SYSTEM,{viewportGlobe:o,bounds:a,_imageCoordinateSystem:s}=e;if(!Number.isFinite(a[0]))throw Error("_imageCoordinateSystem only supports rectangular bounds");if(s!==n){let e=o?t:i;if((s=s===t?t:i)===t&&e===i)return{coordinateConversion:-1,bounds:a};if(s===i&&e===t){let e=i4([a[0],a[1]]),t=i4([a[2],a[3]]);return{coordinateConversion:1,bounds:[e[0],e[1],t[0],t[1]]}}}return{coordinateConversion:0,bounds:a}}(e);return{A:t,B:iO(t)?1:0,C:i,D:e.transparentColor?iY(e.transparentColor):[0,0,0,0]}}},i6="uniform sampler2D W;\nuniform sampler2D X;\nlayout(std140)uniform rasterUniforms{\nvec2 Y;\nfloat Z;\nfloat a;\nfloat b;\nfloat c;\nvec2 d;\nfloat e;\nfloat f;\nfloat g;\nfloat h;\nvec4 i;\nfloat j;\nfloat k;\nvec4 l;\n}\nraster;\n",i8={name:"raster",vs:i6,fs:i6,uniformTypes:{Y:"vec2<f32>",Z:"f32",a:"f32",b:"f32",c:"f32",d:"vec2<f32>",e:"f32",f:"f32",g:"f32",h:"f32",i:"vec4<f32>",j:"f32",k:"f32",l:"vec4<f32>"},getUniforms:function(e={}){return{W:e.imageTexture,X:e.imageTexture2,Y:e.imageTexture?[e.imageTexture.width,e.imageTexture.height]:[0,0],Z:e.imageSmoothing??0,a:Object.values(iu).indexOf(e.imageInterpolation??iu.NEAREST),b:e.imageTexture2!==e.imageTexture&&e.imageWeight?e.imageWeight:0,c:Object.values(id).indexOf(e.imageType??id.SCALAR),d:e.imageUnscale??[0,0],e:e.imageMinValue??Number.MIN_SAFE_INTEGER,f:e.imageMaxValue??Number.MAX_SAFE_INTEGER,g:e.borderEnabled?1:0,h:e.borderWidth??0,i:e.borderColor?iY(e.borderColor):[0,0,0,0],j:e.gridEnabled?1:0,k:e.gridSize??0,l:e.gridColor?iY(e.gridColor):[0,0,0,0]}}},i9="uniform sampler2D m;\nlayout(std140)uniform paletteUniforms{\nvec2 n;\nvec4 o;\n}\npalette;\nfloat p(float min,float max,float q){\nreturn(q-min)/(max-min);\n}\nvec4 r(sampler2D m,vec2 n,vec4 o,float q){\nif(n[0]<n[1]){\nfloat s=p(n[0],n[1],q);\nreturn texture(m,vec2(s,0.));\n}\nelse{\nreturn o;\n}\n}\n",i7={name:"palette",vs:i9,fs:i9,uniformTypes:{n:"vec2<f32>",o:"vec4<f32>"},getUniforms:function(e={}){return{m:e.paletteTexture,n:e.paletteBounds??[0,0],o:e.paletteColor?iY(e.paletteColor):[0,0,0,0]}}},ne={imageTexture:{type:"object",value:null},imageTexture2:{type:"object",value:null},imageSmoothing:{type:"number",value:0},imageInterpolation:{type:"object",value:iu.CUBIC},imageWeight:{type:"number",value:0},imageType:{type:"object",value:id.SCALAR},imageUnscale:{type:"array",value:null},imageMinValue:{type:"object",value:null},imageMaxValue:{type:"object",value:null},bounds:{type:"array",value:[-180,-90,180,90],compare:!0},minZoom:{type:"object",value:null},maxZoom:{type:"object",value:null},palette:{type:"object",value:null},borderEnabled:{type:"boolean",value:!1},borderWidth:{type:"number",value:1},borderColor:{type:"color",value:tX},gridEnabled:{type:"boolean",value:!1},gridSize:{type:"number",value:1},gridColor:{type:"color",value:tX}};class nt extends x{getShaders(){let e=super.getShaders();return{...e,vs:e.vs.replaceAll("bitmap.coordinateConversion","bitmap2.C"),fs:"#version 300 es\n#define SHADER_NAME raster-bitmap-layer-fragment-shader\n#ifdef GL_ES\nprecision highp float;\n#endif\nvec4 AG(sampler2D AH,vec2 AI,vec2 AJ,vec2 AK){\nvec2 uv=(AJ+AK+0.5)/AI;\nreturn texture(AH,uv);\n}\nconst vec4 AL=vec4(3.,-6.,0.,4.)/6.;\nconst vec4 AM=vec4(-1.,6.,-12.,8.)/6.;\nvec4 AN(float J){\nreturn vec4(J*J*J,J*J,J,1.);\n}\nvec4 AO(vec4 AP,vec4 AQ,vec4 AR,vec4 AS,float AT){\nvec4 O=AP*dot(AM,AN(AT+1.))+AQ*dot(AL,AN(AT))+AR*dot(AL,AN(1.-AT))+AS*dot(AM,AN(2.-AT));\nO.a=(AP.a>0.&&AQ.a>0.&&AR.a>0.&&AS.a>0.)?max(max(max(AP.a,AQ.a),AR.a),AS.a):0.;\nreturn O;\n}\nvec4 AU(sampler2D AH,vec2 AI,vec2 uv){\nvec2 AV=uv*AI-0.5;\nvec2 AJ=floor(AV);\nvec2 AW=fract(AV);\nreturn AO(AO(AG(AH,AI,AJ,vec2(-1,-1)),AG(AH,AI,AJ,vec2(0,-1)),AG(AH,AI,AJ,vec2(1,-1)),AG(AH,AI,AJ,vec2(2,-1)),AW.x),AO(AG(AH,AI,AJ,vec2(-1,0)),AG(AH,AI,AJ,vec2(0,0)),AG(AH,AI,AJ,vec2(1,0)),AG(AH,AI,AJ,vec2(2,0)),AW.x),AO(AG(AH,AI,AJ,vec2(-1,1)),AG(AH,AI,AJ,vec2(0,1)),AG(AH,AI,AJ,vec2(1,1)),AG(AH,AI,AJ,vec2(2,1)),AW.x),AO(AG(AH,AI,AJ,vec2(-1,2)),AG(AH,AI,AJ,vec2(0,2)),AG(AH,AI,AJ,vec2(1,2)),AG(AH,AI,AJ,vec2(2,2)),AW.x),AW.y);\n}\nvec4 AX(sampler2D AH,vec2 AI,vec2 uv){\nvec2 AV=uv*AI-0.5;\nvec2 AJ=floor(AV);\nvec2 AW=fract(AV);\nreturn mix(mix(AG(AH,AI,AJ,vec2(0,0)),AG(AH,AI,AJ,vec2(1,0)),AW.x),mix(AG(AH,AI,AJ,vec2(0,1)),AG(AH,AI,AJ,vec2(1,1)),AW.x),AW.y);\n}\nvec4 AY(sampler2D AH,vec2 AI,vec2 uv){\nvec2 AV=uv*AI-0.5;\nvec2 AJ=floor(AV+0.5);\nreturn AG(AH,AI,AJ,vec2(0,0));\n}\nvec4 AZ(sampler2D AH,vec2 AI,float a,vec2 uv){\nif(a==2.){\nreturn AU(AH,AI,uv);\n}\nif(a==1.){\nreturn AX(AH,AI,uv);\n}\nelse{\nreturn AY(AH,AI,uv);\n}\n}\nvec4 Aa(sampler2D AH,sampler2D Ab,vec2 AI,float a,float b,bool B,vec2 uv){\nvec2 Ac;\nAc.x=B?uv.x+0.5/AI.x:mix(0.+0.5/AI.x,1.-0.5/AI.x,uv.x);\nAc.y=mix(0.+0.5/AI.y,1.-0.5/AI.y,uv.y);\nif(b>0.){\nvec4 Ad=AZ(AH,AI,a,Ac);
1467\nvec4 Ae=AZ(Ab,AI,a,Ac);\nreturn mix(Ad,Ae,b);\n}\nelse{\nreturn AZ(AH,AI,a,Ac);\n}\n}\nvec4 Af(sampler2D AH,sampler2D Ab,vec2 Y,float Z,float a,float b,bool B,vec2 uv){\nfloat Ag=1.+max(0.,Z);\nvec2 AI=Y/Ag;\nreturn Aa(AH,Ab,AI,a,b,B,uv);\n}\nconst float Ah=3.1415926536;\nfloat Ai(float K,float J){\nreturn J==0.?sign(K)*Ah/2.:atan(K,J);\n}\nbool Aj(float q){\nuint Ak=floatBitsToUint(q);\nreturn(Ak&0x7fffffffu)>0x7f800000u;\n}\nbool Al(vec4 Ad,vec2 d){\nif(d[0]<d[1]){\nreturn Ad.a>=1.;\n}\nelse{\nreturn!Aj(Ad.x);\n}\n}\nfloat Am(vec4 Ad,float c,vec2 d){\nif(c==1.){\nreturn 0.;\n}\nelse{\nif(d[0]<d[1]){\nreturn mix(d[0],d[1],Ad.x);\n}\nelse{\nreturn Ad.x;\n}\n}\n}\nvec2 An(vec4 Ad,float c,vec2 d){\nif(c==1.){\nif(d[0]<d[1]){\nreturn mix(vec2(d[0]),vec2(d[1]),Ad.xy);\n}\nelse{\nreturn Ad.xy;\n}\n}\nelse{\nreturn vec2(0.);\n}\n}\nfloat Ao(vec4 Ad,float c,vec2 d){\nif(c==1.){\nvec2 q=An(Ad,c,d);\nreturn length(q);\n}\nelse{\nreturn Am(Ad,c,d);\n}\n}\nfloat Ap(vec4 Ad,float c,vec2 d){\nif(c==1.){\nvec2 q=An(Ad,c,d);\nreturn mod((360.-(Ai(q.y,q.x)/Ah*180.+180.))-270.,360.)/360.;\n}\nelse{\nreturn 0.;\n}\n}\nin vec2 vTexCoord;\nin vec2 vTexPos;\nout vec4 fragColor;\nvoid main(void){\nvec2 uv=S(vTexCoord,vTexPos);\nvec4 Ad=Af(W,X,raster.Y,raster.Z,raster.a,raster.b,bitmap2.B,uv);\nif(!Al(Ad,raster.d)){\ndiscard;\n}\nfloat q=Ao(Ad,raster.c,raster.d);\nif((!Aj(raster.e)&&q<raster.e)||(!Aj(raster.f)&&q>raster.f)){\ndiscard;\n}\nvec4 Aq=r(m,palette.n,palette.o,q);\nfragColor=N(Aq.rgb,Aq.a*layer.opacity);\nif(bool(raster.g)){\nvec2 Ar=vec2(length(dFdx(uv)),length(dFdy(uv)));\nvec2 h=raster.h/2.*Ar;\nif((uv.x<h.x||uv.x>1.-h.x)||(uv.y<h.y||uv.y>1.-h.y)){\nfragColor=N(raster.i.rgb,raster.i.a*layer.opacity*2.);\n}\n}\nif(bool(raster.j)){\nfloat Ag=1.+max(0.,raster.Z);\nvec2 AI=raster.Y/Ag;\nvec2 Ac;\nAc.x=bitmap2.B?uv.x+0.5/AI.x:mix(0.+0.5/AI.x,1.-0.5/AI.x,uv.x);\nAc.y=mix(0.+0.5/AI.y,1.-0.5/AI.y,uv.y);\nvec2 AV=Ac*AI-0.5;\nvec2 AW=fract(AV);\nvec2 Ar=vec2(length(dFdx(uv)),length(dFdy(uv)));\nvec2 k=raster.k/2.*Ar*raster.Y;\nif((AW.x<k.x||AW.x>1.-k.x)&&(AW.y<k.y||AW.y>1.-k.y)){\nfragColor=N(raster.l.rgb,raster.l.a*layer.opacity*2.);\n}\n}\ngeometry.uv=uv;\nDECKGL_FILTER_COLOR(fragColor,geometry);\nif(bool(picking.isActive)&&!bool(picking.isAttribute)){\nfloat s=p(palette.n[0],palette.n[1],q);\nfloat As=Ap(Ad,raster.c,raster.d);\nfragColor=vec4(s,As,0,1);\n}\n}\n",modules:[...e.modules.filter(e=>"bitmap"!==e.name),i5,i8,i7]}}updateState(e){let{palette:t}=e.props;super.updateState(e),t!==e.oldProps.palette&&this._updatePalette()}draw(e){let{device:t,viewport:i}=this.context,{model:n}=this.state,{imageTexture:o,imageTexture2:a,imageSmoothing:r,imageInterpolation:s,imageWeight:l,imageType:c,imageUnscale:A,imageMinValue:g,imageMaxValue:u,bounds:d,_imageCoordinateSystem:p,transparentColor:h,minZoom:f,maxZoom:m,borderEnabled:v,borderWidth:C,borderColor:y,gridEnabled:I,gridSize:x,gridColor:E}=t6(this.props,ne),{paletteTexture:b,paletteBounds:w}=this.state;if(!o)return;let B=iJ(i);n&&iG(i,f,m)&&(n.shaderInputs.setProps({[i5.name]:{viewportGlobe:B,bounds:d,_imageCoordinateSystem:p,transparentColor:h},[i8.name]:{imageTexture:o??iV(t),imageTexture2:a??iV(t),imageSmoothing:r,imageInterpolation:s,imageWeight:l,imageType:c,imageUnscale:A,imageMinValue:g,imageMaxValue:u,borderEnabled:v,borderWidth:C,borderColor:y,gridEnabled:I,gridSize:x,gridColor:E},[i7.name]:{paletteTexture:b??iV(t),paletteBounds:w}}),this.props.image=o,super.draw(e),this.props.image=null)}_updatePalette(){let{device:e}=this.context,{palette:t}=t6(this.props,ne);if(!t)return void this.setState({paletteTexture:void 0,paletteBounds:void 0});let{paletteBounds:i,paletteTexture:n}=iX(e,(0,a.H)(t));this.setState({paletteTexture:n,paletteBounds:i})}_getRasterMagnitudeValue(e,t){return t[0]+e[0]/255*(t[1]-t[0])}_getRasterDirectionValue(e){let{imageType:t}=t6(this.props,ne);return t===id.VECTOR?e[1]/255*360:NaN}getPickingInfo(e){let t;let i=super.getPickingInfo(e),{imageType:n}=t6(this.props,ne),{paletteBounds:o}=this.state;if(!i.color)return i;let a=this._getRasterMagnitudeValue(i.color,o??[0,0]);return t=n===id.VECTOR?{value:a,direction:this._getRasterDirectionValue(i.color)}:{value:a},i.raster=t,i}}nt.layerName="RasterBitmapLayer",nt.defaultProps=ne;let ni={...nt.defaultProps,imageTexture:void 0,imageTexture2:void 0,image:{type:"object",value:null},image2:{type:"object",value:null},bounds:{type:"array",value:[-180,-90,180,90],compare:!0}};
1467class nn extends s.Z{renderLayers(){let{device:e}=this.context,{props:t,imageTexture:i,imageTexture2:n}=this.state;return t&&i?[new nt(this.props,this.getSubLayerProps({id:"bitmap",imageTexture:i,imageTexture2:n,_imageCoordinateSystem:r.COORDINATE_SYSTEM.LNGLAT,parameters:{cullMode:"back",depthCompare:"always",...this.props.parameters},image:iV(e),image2:iV(e)}))]:[]}updateState(e){let{image:t,image2:i,imageUnscale:n,bounds:o}=e.props;if(super.updateState(e),t&&n&&!(t.data instanceof Uint8Array||t.data instanceof Uint8ClampedArray))throw Error("imageUnscale can be applied to Uint8 data only");if(t!==e.oldProps.image||i!==e.oldProps.image2){let{device:e}=this.context,{image:t,image2:i}=this.props,n=t?iU(e,t,iO(o)):null,a=i?iU(e,i,iO(o)):null;this.setState({imageTexture:n,imageTexture2:a})}this.setState({props:e.props})}}nn.layerName="RasterLayer",nn.defaultProps=ni;let no="layout(std140)uniform contourUniforms{\nfloat t;\nfloat u;\nfloat v;\n}\ncontour;\n",na={name:"contour",vs:no,fs:no,uniformTypes:{t:"f32",u:"f32",v:"f32"},getUniforms:function(e={}){return{t:e.interval,u:e.majorInterval,v:e.width}}},nr={imageTexture:{type:"object",value:null},imageTexture2:{type:"object",value:null},imageSmoothing:{type:"number",value:0},imageInterpolation:{type:"object",value:iu.CUBIC},imageWeight:{type:"number",value:0},imageType:{type:"object",value:id.SCALAR},imageUnscale:{type:"object",value:null},imageMinValue:{type:"object",value:null},imageMaxValue:{type:"object",value:null},bounds:{type:"array",value:[-180,-90,180,90],compare:!0},minZoom:{type:"object",value:null},maxZoom:{type:"object",value:10},palette:{type:"object",value:null},color:{type:"color",value:tX},interval:{type:"number",value:0},majorInterval:{type:"number",value:0},width:{type:"number",value:1}};class ns extends x{getShaders(){let e=super.getShaders();return{...e,vs:e.vs.replaceAll("bitmap.coordinateConversion","bitmap2.C"),fs:"#version 300 es\n#define SHADER_NAME contour-bitmap-layer-fragment-shader\n#ifdef GL_ES\nprecision highp float;\n#endif\nvec4 AG(sampler2D AH,vec2 AI,vec2 AJ,vec2 AK){\nvec2 uv=(AJ+AK+0.5)/AI;\nreturn texture(AH,uv);\n}\nconst vec4 AL=vec4(3.,-6.,0.,4.)/6.;\nconst vec4 AM=vec4(-1.,6.,-12.,8.)/6.;\nvec4 AN(float J){\nreturn vec4(J*J*J,J*J,J,1.);\n}\nvec4 AO(vec4 AP,vec4 AQ,vec4 AR,vec4 AS,float AT){\nvec4 O=AP*dot(AM,AN(AT+1.))+AQ*dot(AL,AN(AT))+AR*dot(AL,AN(1.-AT))+AS*dot(AM,AN(2.-AT));\nO.a=(AP.a>0.&&AQ.a>0.&&AR.a>0.&&AS.a>0.)?max(max(max(AP.a,AQ.a),AR.a),AS.a):0.;\nreturn O;\n}\nvec4 AU(sampler2D AH,vec2 AI,vec2 uv){\nvec2 AV=uv*AI-0.5;\nvec2 AJ=floor(AV);\nvec2 AW=fract(AV);\nreturn AO(AO(AG(AH,AI,AJ,vec2(-1,-1)),AG(AH,AI,AJ,vec2(0,-1)),AG(AH,AI,AJ,vec2(1,-1)),AG(AH,AI,AJ,vec2(2,-1)),AW.x),AO(AG(AH,AI,AJ,vec2(-1,0)),AG(AH,AI,AJ,vec2(0,0)),AG(AH,AI,AJ,vec2(1,0)),AG(AH,AI,AJ,vec2(2,0)),AW.x),AO(AG(AH,AI,AJ,vec2(-1,1)),AG(AH,AI,AJ,vec2(0,1)),AG(AH,AI,AJ,vec2(1,1)),AG(AH,AI,AJ,vec2(2,1)),AW.x),AO(AG(AH,AI,AJ,vec2(-1,2)),AG(AH,AI,AJ,vec2(0,2)),AG(AH,AI,AJ,vec2(1,2)),AG(AH,AI,AJ,vec2(2,2)),AW.x),AW.y);\n}\nvec4 AX(sampler2D AH,vec2 AI,vec2 uv){\nvec2 AV=uv*AI-0.5;\nvec2 AJ=floor(AV);\nvec2 AW=fract(AV);\nreturn mix(mix(AG(AH,AI,AJ,vec2(0,0)),AG(AH,AI,AJ,vec2(1,0)),AW.x),mix(AG(AH,AI,AJ,vec2(0,1)),AG(AH,AI,AJ,vec2(1,1)),AW.x),AW.y);\n}\nvec4 AY(sampler2D AH,vec2 AI,vec2 uv){\nvec2 AV=uv*AI-0.5;\nvec2 AJ=floor(AV+0.5);\nreturn AG(AH,AI,AJ,vec2(0,0));\n}\nvec4 AZ(sampler2D AH,vec2 AI,float a,vec2 uv){\nif(a==2.){\nreturn AU(AH,AI,uv);\n}\nif(a==1.){\nreturn AX(AH,AI,uv);\n}\nelse{\nreturn AY(AH,AI,uv);\n}\n}\nvec4 Aa(sampler2D AH,sampler2D Ab,vec2 AI,float a,float b,bool B,vec2 uv){\nvec2 Ac;\nAc.x=B?uv.x+0.5/AI.x:mix(0.+0.5/AI.x,1.-0.5/AI.x,uv.x);\nAc.y=mix(0.+0.5/AI.y,1.-0.5/AI.y,uv.y);\nif(b>0.){\nvec4 Ad=AZ(AH,AI,a,Ac);\nvec4 Ae=AZ(Ab,AI,a,Ac);\nreturn mix(Ad,Ae,b);\n}\nelse{\nreturn AZ(AH,AI,a,Ac);\n}\n}\nvec4 Af(sampler2D AH,sampler2D Ab,vec2 Y,float Z,float a,float b,bool B,vec2 uv){\nfloat Ag=1.+max(0.,Z);\nvec2 AI=Y/Ag;\nreturn Aa(AH,Ab,AI,a,b,B,uv);\n}\nconst float Ah=3.1415926536;\nfloat Ai(float K,float J){\nreturn J==0.?sign(K)*Ah/2.:atan(K,J);\n}\nbool Aj(float q){\nuint Ak=floatBitsToUint(q);\nreturn(Ak&0x7fffffffu)>0x7f800000u;\n}\nbool Al(vec4 Ad,vec2 d){\nif(d[0]<d[1]){\nreturn Ad.a>=1.;\n}\nelse{\nreturn!Aj(Ad.x);\n}\n}\nfloat Am(vec4 Ad,float c,vec2 d){\nif(c==1.){\nreturn 0.;\n}\nelse{\nif(d[0]<d[1]){\nreturn mix(d[0],d[1],Ad.x);\n}\nelse{\nreturn Ad.x;\n}\n}\n}\nvec2 An(vec4 Ad,float c,vec2 d){\nif(c==1.){\nif(d[0]<d[1]){\nreturn mix(vec2(d[0]),vec2(
1467d[1]),Ad.xy);\n}\nelse{\nreturn Ad.xy;\n}\n}\nelse{\nreturn vec2(0.);\n}\n}\nfloat Ao(vec4 Ad,float c,vec2 d){\nif(c==1.){\nvec2 q=An(Ad,c,d);\nreturn length(q);\n}\nelse{\nreturn Am(Ad,c,d);\n}\n}\nfloat Ap(vec4 Ad,float c,vec2 d){\nif(c==1.){\nvec2 q=An(Ad,c,d);\nreturn mod((360.-(Ai(q.y,q.x)/Ah*180.+180.))-270.,360.)/360.;\n}\nelse{\nreturn 0.;\n}\n}\nin vec2 vTexCoord;\nin vec2 vTexPos;\nout vec4 fragColor;\nvoid main(void){\nvec2 uv=S(vTexCoord,vTexPos);\nvec4 Ad=Af(W,X,raster.Y,raster.Z,raster.a,raster.b,bitmap2.B,uv);\nif(!Al(Ad,raster.d)){\ndiscard;\n}\nfloat q=Ao(Ad,raster.c,raster.d);\nif((!Aj(raster.e)&&q<raster.e)||(!Aj(raster.f)&&q>raster.f)){\ndiscard;\n}\nfloat Aq=contour.u>contour.t?floor(contour.u/contour.t):1.;\nfloat Ar=q/contour.t;\nfloat As=(step(fract(Ar/Aq),0.1)+1.)/2.;\nfloat At=contour.v*As;\nfloat Au=abs(fract(Ar+0.5)-0.5);\nfloat Av=length(vec2(dFdx(Ar),dFdy(Ar)));\nfloat Aw=1.-clamp((Au/Av)+0.5-At,0.,1.);\nif(Av==0.){\nAw=0.;\n}\nfloat Ax=Aw*As;\nvec4 Ay=r(m,palette.n,palette.o,q);\nfragColor=vec4(Ay.rgb,Ay.a*Ax*layer.opacity);\ngeometry.uv=uv;\nDECKGL_FILTER_COLOR(fragColor,geometry);\n}\n",modules:[...e.modules.filter(e=>"bitmap"!==e.name),i5,i8,i7,na]}}updateState(e){let{palette:t}=e.props;super.updateState(e),t!==e.oldProps.palette&&this._updatePalette()}draw(e){let{device:t,viewport:i}=this.context,{model:n}=this.state,{imageTexture:o,imageTexture2:a,imageSmoothing:r,imageInterpolation:s,imageWeight:l,imageType:c,imageUnscale:A,imageMinValue:g,imageMaxValue:u,bounds:d,_imageCoordinateSystem:p,transparentColor:h,minZoom:f,maxZoom:m,color:v,interval:C,majorInterval:y,width:I}=t6(this.props,nr),{paletteTexture:x,paletteBounds:E}=this.state;if(!o)return;let b=iJ(i);n&&iG(i,f,m)&&(n.shaderInputs.setProps({[i5.name]:{viewportGlobe:b,bounds:d,_imageCoordinateSystem:p,transparentColor:h},[i8.name]:{imageTexture:o??iV(t),imageTexture2:a??iV(t),imageSmoothing:r,imageInterpolation:s,imageWeight:l,imageType:c,imageUnscale:A,imageMinValue:g,imageMaxValue:u},[i7.name]:{paletteTexture:x??iV(t),paletteBounds:E,paletteColor:v},[na.name]:{interval:C,majorInterval:y,width:I}}),this.props.image=o,super.draw(e),this.props.image=null)}_updatePalette(){let{device:e}=this.context,{palette:t}=t6(this.props,nr);if(!t)return void this.setState({paletteTexture:void 0,paletteBounds:void 0});let{paletteBounds:i,paletteTexture:n}=iX(e,(0,a.H)(t));this.setState({paletteTexture:n,paletteBounds:i})}}ns.layerName="ContourBitmapLayer",ns.defaultProps=nr;let nl={...ns.defaultProps,imageTexture:void 0,imageTexture2:void 0,image:{type:"object",value:null},image2:{type:"object",value:null}};class nc extends s.Z{renderLayers(){let{device:e}=this.context,{props:t,imageTexture:i,imageTexture2:n}=this.state;return t&&i?[new ns(this.props,this.getSubLayerProps({id:"bitmap",imageTexture:i,imageTexture2:n,_imageCoordinateSystem:r.COORDINATE_SYSTEM.LNGLAT,parameters:{cullMode:"back",depthCompare:"always",...this.props.parameters},image:iV(e),image2:iV(e)}))]:[]}updateState(e){let{image:t,image2:i,imageUnscale:n,bounds:o}=e.props;if(super.updateState(e),t&&n&&!(t.data instanceof Uint8Array||t.data instanceof Uint8ClampedArray))throw Error("imageUnscale can be applied to Uint8 data only");if(t!==e.oldProps.image||i!==e.oldProps.image2){let{device:e}=this.context,{image:t,image2:i}=this.props,n=t?iU(e,t,iO(o)):null,a=i?iU(e,i,iO(o)):null;this.setState({imageTexture:n,imageTexture2:a})}this.setState({props:e.props})}}function nA(e=20){return Array(e).fill(void 0).map(()=>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".charAt(Math.floor(62*Math.random()))).join("")}nc.layerName="ContourLayer",nc.defaultProps=nl;var ng=(n=(function(){let e=Symbol("Comlink.proxy"),t=Symbol("Comlink.endpoint"),i=Symbol("Comlink.releaseProxy"),n=Symbol("Comlink.finalizer"),o=Symbol("Comlink.thrown"),a=e=>"object"==typeof e&&null!==e||"function"==typeof e,r=new Map([["proxy",{canHandle:t=>a(t)&&t[e],serialize(e){let{port1:t,port2:i}=new MessageChannel;return s(e,t),[i,[i]]},deserialize:e=>(e.start(),function(e,n){let o=new Map;return e.addEventListener("message",function(e){let{data:t}=e;if(!t||!t.id)return;let i=o.get(t.id);if(i)try{i(t)}finally{o.delete(t.id)}}),function e(n,o,a=[],r=function(){}){let s=!1,l=new Proxy(r,{get(t,r){if(c(s),r===i)return()=>{u&&u.unregister(l),A(n),o.clear(),s=!0};if("then"===r){if(0===a.length)return{then:()=>l};let e=m(n,o,{type:"GET",path:a.map(e=>e.toString())}).then(f);return e.then.bind(e)}return e(n,o,[...a,r])},set(e,t,i){c(s);let[r,l]=h(i);return m(n,o,{type:"SET",path:[...a,t].map(e=>e.toString()),value:r},l).then(f)},apply(i,r,l){c(s);let A=a[a.length-1];if(A===t)return m(n,o,{type:"ENDPOINT"}).then(f);if("bind"===A)return e(n,o,a.slice(0,-1));let[g,u]=d(l);
1467return m(n,o,{type:"APPLY",path:a.map(e=>e.toString()),argumentList:g},u).then(f)},construct(e,t){c(s);let[i,r]=d(t);return m(n,o,{type:"CONSTRUCT",path:a.map(e=>e.toString()),argumentList:i},r).then(f)}});return function(e,t){let i=(g.get(t)||0)+1;g.set(t,i),u&&u.register(e,t,e)}(l,n),l}(e,o,[],void 0)}(e))}],["throw",{canHandle:e=>a(e)&&o in e,serialize:({value:e})=>[e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[]],deserialize(e){if(e.isError)throw Object.assign(Error(e.value.message),e.value);throw e.value}}]]);function s(t,i=globalThis,a=["*"]){i.addEventListener("message",function r(c){let A;if(!c||!c.data)return;if(!function(e,t){for(let i of e)if(t===i||"*"===i||i instanceof RegExp&&i.test(t))return!0;return!1}(a,c.origin))return void console.warn(`Invalid origin '${c.origin}' for comlink proxy`);let{id:g,type:u,path:d}=Object.assign({path:[]},c.data),m=(c.data.argumentList||[]).map(f);try{var v,C;let i=d.slice(0,-1).reduce((e,t)=>e[t],t),n=d.reduce((e,t)=>e[t],t);switch(u){case"GET":A=n;break;case"SET":i[d.slice(-1)[0]]=f(c.data.value),A=!0;break;case"APPLY":A=n.apply(i,m);break;case"CONSTRUCT":v=new n(...m),A=Object.assign(v,{[e]:!0});break;case"ENDPOINT":{let{port1:e,port2:i}=new MessageChannel;s(t,i),C=[e],p.set(e,C),A=e}break;case"RELEASE":A=void 0;break;default:return}}catch(e){A={value:e,[o]:0}}Promise.resolve(A).catch(e=>({value:e,[o]:0})).then(e=>{let[o,a]=h(e);i.postMessage(Object.assign(Object.assign({},o),{id:g}),a),"RELEASE"===u&&(i.removeEventListener("message",r),l(i),n in t&&"function"==typeof t[n]&&t[n]())}).catch(e=>{let[t,n]=h({value:TypeError("Unserializable return value"),[o]:0});i.postMessage(Object.assign(Object.assign({},t),{id:g}),n)})}),i.start&&i.start()}function l(e){"MessagePort"===e.constructor.name&&e.close()}function c(e){if(e)throw Error("Proxy has been released and is not useable")}function A(e){return m(e,new Map,{type:"RELEASE"}).then(()=>{l(e)})}let g=new WeakMap,u="FinalizationRegistry"in globalThis&&new FinalizationRegistry(e=>{let t=(g.get(e)||0)-1;g.set(e,t),0===t&&A(e)});function d(e){var t;let i=e.map(h);return[i.map(e=>e[0]),(t=i.map(e=>e[1]),Array.prototype.concat.apply([],t))]}let p=new WeakMap;function h(e){for(let[t,i]of r)if(i.canHandle(e)){let[n,o]=i.serialize(e);return[{type:"HANDLER",name:t,value:n},o]}return[{type:"RAW",value:e},p.get(e)||[]]}function f(e){switch(e.type){case"HANDLER":return r.get(e.name).deserialize(e.value);case"RAW":return e.value}}function m(e,t,i,n){return new Promise(o=>{let a=[,,,,].fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-");t.set(a,o),e.start&&e.start(),e.postMessage(Object.assign({id:a},i),n)})}function v(e){return e/180*Math.PI}function C(e,t){return function(e,t,i=6371e3){let n=v(e[1]),o=v(e[0]),a=v(t[1]),r=a-n,s=v(t[0])-o,l=Math.sin(r/2)*Math.sin(r/2)+Math.cos(n)*Math.cos(a)*Math.sin(s/2)*Math.sin(s/2);return 2*Math.atan2(Math.sqrt(l),Math.sqrt(1-l))*i}(e,t,6370972)}let y={NEAREST:"NEAREST",LINEAR:"LINEAR",CUBIC:"CUBIC"},I={VECTOR:"VECTOR"};function x(e,t){return e.map((i,n)=>e[n]+t[n])}function E(e,t){return e.map((i,n)=>e[n]*t)}function b(e,t){return e.map((i,n)=>e[n]*t[n]).reduce((e,t)=>e+t)}function w(e,t,i){return e===t?e:e*(1-i)+t*i}function B(e,t,i){return e.map((n,o)=>w(e[o],t[o],i))}function P(e,t,i,n,o,a){let{data:r,width:s,height:l}=e,c=r.length/(s*l),A=(i+o+.5)/t[0],g=(n+a+.5)/t[1],u=Math.max(0,Math.min(s-1,Math.floor(A*s))),d=Math.max(0,Math.min(l-1,Math.floor(g*l)));return Array(c).fill(void 0).map((e,t)=>r[(u+d*s)*c+t])}let T=[3,-6,0,4].map(e=>e/6),Q=[-1,6,-12,8].map(e=>e/6);function _(e){return[e*e*e,e*e,e,1]}function S(e,t,i,n,o){let a=x(x(x(E(e,b(Q,_(o+1))),E(t,b(T,_(o)))),E(i,b(T,_(1-o)))),E(n,b(Q,_(2-o))));return a[3]=e[3]>0&&t[3]>0&&i[3]>0&&n[3]>0?Math.max(Math.max(Math.max(e[3],t[3]),i[3]),n[3]):0,a}
1467function M(e,t,i,n,o){return i===y.CUBIC?function(e,t,i,n){let o=i*t[0]-.5,a=n*t[1]-.5,r=Math.floor(o),s=Math.floor(a),l=o%1,c=a%1;return S(S(P(e,t,r,s,-1,-1),P(e,t,r,s,0,-1),P(e,t,r,s,1,-1),P(e,t,r,s,2,-1),l),S(P(e,t,r,s,-1,0),P(e,t,r,s,0,0),P(e,t,r,s,1,0),P(e,t,r,s,2,0),l),S(P(e,t,r,s,-1,1),P(e,t,r,s,0,1),P(e,t,r,s,1,1),P(e,t,r,s,2,1),l),S(P(e,t,r,s,-1,2),P(e,t,r,s,0,2),P(e,t,r,s,1,2),P(e,t,r,s,2,2),l),c)}(e,t,n,o):i===y.LINEAR?function(e,t,i,n){let o=i*t[0]-.5,a=n*t[1]-.5,r=Math.floor(o),s=Math.floor(a),l=o%1,c=a%1;return B(B(P(e,t,r,s,0,0),P(e,t,r,s,1,0),l),B(P(e,t,r,s,0,1),P(e,t,r,s,1,1),l),c)}(e,t,n,o):function(e,t,i,n){let o=i*t[0]-.5,a=n*t[1]-.5;return P(e,t,Math.round(o),Math.round(a),0,0)}(e,t,n,o)}s({getHighLowPointData(e,t,i,n,o,a,r,s,l,c,A,g,u,d,h){var f;let m=function(e,t,i){let{data:n,width:o,height:a}=e,r=1e3*i,s=function(e,t,i){let n=[i[0],i[3]],o=(i[2]-i[0])/e,a=(i[3]-i[1])/t;return e=>{let[t,i]=e;return[n[0]+t*o,n[1]-i*a]}}(o,a,t);n=function(e,t,i){let n=new Float32Array(e.length);for(let o=0;o<i;o++)for(let a=0;a<t;a++){let r=a+o*t;if(a>=1&&a<=t-2&&o>=1&&o<=i-2){let i=[e[a-1+(o-1)*t],e[a+(o-1)*t],e[a+1+(o-1)*t],e[a-1+o*t],e[a+o*t],e[a+1+o*t],e[a-1+(o+1)*t],e[a+(o+1)*t],e[a+1+(o-1)*t]];n[r]=i.reduce((e,t)=>e+t,0)/i.length}else n[r]=e[r]}return n}(n,o,a);let l=[],c=[];for(let e=1;e<a-1;e++)for(let t=1;t<o-1;t++){let i=n[t+e*o];if(!isNaN(i)&&i>=n[t+1+e*o]&&i>=n[t+1+(e+1)*o]&&i>=n[t+(e+1)*o]&&i>=n[t-1+(e+1)*o]&&i>n[t-1+e*o]&&i>n[t-1+(e-1)*o]&&i>n[t+(e-1)*o]&&i>n[t+1+(e-1)*o]){let n=s([t,e]);l.push({position:n,value:i})}if(!isNaN(i)&&i<=n[t+1+e*o]&&i<=n[t+1+(e+1)*o]&&i<=n[t+(e+1)*o]&&i<=n[t-1+(e+1)*o]&&i<n[t-1+e*o]&&i<n[t-1+(e-1)*o]&&i<n[t+(e-1)*o]&&i<n[t+1+(e-1)*o]){let n=s([t,e]);c.push({position:n,value:i})}}l=l.sort((e,t)=>t.value-e.value),c=c.sort((e,t)=>e.value-t.value);let A=[...l];for(let e=0;e<A.length;e++){let t=A[e];if(t)for(let i=e+1;i<A.length;i++){let e=A[i];e&&C(t.position,e.position)<r&&(A[i]=void 0)}}l=A.filter(e=>!!e);let g=[...c];for(let e=0;e<g.length;e++){let t=g[e];if(t)for(let i=e+1;i<g.length;i++){let e=g[i];e&&C(t.position,e.position)<r&&(g[i]=void 0)}}return c=g.filter(e=>!!e),new Float32Array([l.length,...l.map(e=>[...e.position,e.value]).flat(),c.length,...c.map(e=>[...e.position,e.value]).flat()])}(function(e,t){let{image:i,image2:n,imageSmoothing:o,imageInterpolation:a,imageWeight:r,imageType:s,imageUnscale:l,imageMinValue:c,imageMaxValue:A}=e,{width:g,height:u}=i,d=a!==y.NEAREST?y.NEAREST:a,p=function(e,t,i){let n=1+Math.max(0,i);return[e/n,t/n]}(g,u,o),h=t[2]-t[0]==360,f=new Float32Array(g*u);for(let e=0;e<u;e++)for(let t=0;t<g;t++){let o=t+e*g,a=function(e,t,i,n,o,a,r,s){let l=a?r+.5/i[0]:w(0+.5/i[0],1-.5/i[0],r),c=w(0+.5/i[1],1-.5/i[1],s);return t&&o>0?B(M(e,i,n,l,c),M(t,i,n,l,c),o):M(e,i,n,l,c)}(i,n,p,d,r,h,t/g,e/u);if(l?!(a[3]>=255):!!isNaN(a[0])){f[o]=NaN;continue}let m=function(e,t,i){if(t===I.VECTOR){let n=t===I.VECTOR?i?[w(i[0],i[1],e[0]/255),w(i[0],i[1],e[1]/255)]:[e[0],e[1]]:[NaN,NaN];return Math.hypot(n[0],n[1])}return t===I.VECTOR?0:i?w(i[0],i[1],e[0]/255):e[0]}(a,s,l);"number"==typeof c&&!isNaN(c)&&m<c||"number"==typeof A&&!isNaN(A)&&m>A?f[o]=NaN:f[o]=m}return{data:f,width:g,height:u}}({image:{data:e,width:t,height:i},image2:n?{data:n,width:o,height:a}:null,imageSmoothing:r,imageInterpolation:s,imageWeight:l,imageType:c,imageUnscale:A,imageMinValue:g,imageMaxValue:u},d),d,h);return f=[m.buffer],p.set(m,f),m}})}).toString().replace(/^function.+?{/,"").slice(0,-1),o=`var browserWorkerPolyFill = ${tC.toString()}; 1468browserWorkerPolyFill(self); 1469`+n,function(){let e=ty(o),t=tC(new Worker(e));t.objURL=e;let i=t.terminate;return t.on=t.addEventListener,t.off=t.removeEventListener,t.terminate=function(){return URL.revokeObjectURL(e),i.call(this)},t});let nu={LOW:"L",HIGH:"H"},nd=tl(ng());function np(e,t){return{type:"Feature",geometry:{type:"Point",coordinates:e},properties:t}}async function nh(e,t,i){let{image:n,image2:o,imageSmoothing:a,imageInterpolation:r,imageWeight:s,imageType:l,imageUnscale:c,imageMinValue:A,imageMaxValue:g}=e,{data:u,width:d,height:p}=n,{data:h=null,width:f=null,height:m=null}=o||{},v=u.slice(0),C=h?h.slice(0):null;return{type:"FeatureCollection",features:function(e){let t=0,i=[],n=e[t++];for(let o=0;o<n;o++){let n=[e[t++],e[t++]],o=e[t++];i.push(np(n,{type:nu.HIGH,value:o}))}let o=e[t++];for(let n=0;n<o;n++){let n=[e[t++],e[t++]],o=e[t++];i.push(np(n,{type:nu.LOW,value:o}))}return i}(await nd.getHighLowPointData(th(v,[v.buffer]),d,p,C?th(C,[C.buffer]):null,f,m,a,r,s,l,c,A,g,t,i))}}let nf="high-low-label";function nm(e,t,i){return e.properties.type===nu.HIGH?Math.round((e.properties.value-i)/i*100):Math.round((t-e.properties.value)/t*100)}let nv={image:{type:"object",value:null},image2:{type:"object",value:null},imageSmoothing:{type:"number",value:0},imageInterpolation:{type:"object",value:iu.CUBIC},imageWeight:{type:"number",value:0},imageType:{type:"object",value:id.SCALAR},imageUnscale:{type:"array",value:null},imageMinValue:{type:"object",value:null},imageMaxValue:{type:"object",value:null},bounds:{type:"array",value:[-180,-90,180,90],compare:!0},minZoom:{type:"object",value:null},maxZoom:{type:"object",value:null},radius:{type:"number",value:0},unitFormat:{type:"object",value:null},textFormatFunction:{type:"function",value:t3},textFontFamily:{type:"object",value:tY},textSize:{type:"number",value:12},textColor:{type:"color",value:t0},textOutlineWidth:{type:"number",value:1},textOutlineColor:{type:"color",value:t2},palette:{type:"object",value:null}};
1469class nC extends s.Z{renderLayers(){let{viewport:e}=this.context,{props:t,points:i,minValue:n,maxValue:o}=this.state;if(!t||!i||"number"!=typeof n||"number"!=typeof o)return[];let{unitFormat:a,textFormatFunction:r,textFontFamily:s,textSize:l,textColor:c,textOutlineWidth:A,textOutlineColor:g}=t6(t,nv),{paletteScale:u}=this.state;return[new eC(this.getSubLayerProps({id:"type",data:i,getPixelOffset:[0,-(1.2*l/2*(iJ(e)?-1:1))],getPosition:e=>e.geometry.coordinates,getText:e=>e.properties.type,getSize:1.2*l,getColor:e=>u?i$(u(e.properties.value).rgba()):c,getAngle:iH(e,0),outlineWidth:A,outlineColor:g,fontFamily:s,fontSettings:{sdf:!0},billboard:!1,extensions:[new e0],collisionEnabled:!0,collisionGroup:nf,collisionTestProps:{sizeScale:5},getCollisionPriority:e=>nm(e,n,o),parameters:{cullMode:"front",depthCompare:"always",...this.props.parameters}})),new eC(this.getSubLayerProps({id:"value",data:i,getPixelOffset:[0,1.2*l/2*(iJ(e)?-1:1)],getPosition:e=>e.geometry.coordinates,getText:e=>r(e.properties.value,a),getSize:l,getColor:e=>u?i$(u(e.properties.value).rgba()):c,getAngle:iH(e,0),outlineWidth:A,outlineColor:g,fontFamily:s,fontSettings:{sdf:!0},billboard:!1,extensions:[new e0],collisionEnabled:!0,collisionGroup:nf,collisionTestProps:{sizeScale:5},getCollisionPriority:e=>nm(e,n,o),parameters:{cullMode:"front",depthCompare:"always",...this.props.parameters}}))]}filterSubLayer(e){let{viewport:t}=e,{minZoom:i,maxZoom:n}=t6(this.props,nv);return iG(t,i,n)}updateState(e){let{image:t,image2:i,imageSmoothing:n,imageInterpolation:o,imageWeight:a,imageType:r,imageUnscale:s,imageMinValue:l,imageMaxValue:c,radius:A,unitFormat:g,textFormatFunction:u,textFontFamily:d,textSize:p,textColor:h,textOutlineWidth:f,textOutlineColor:m,palette:v,visible:C}=e.props;super.updateState(e),A&&C?(t===e.oldProps.image&&i===e.oldProps.image2&&n===e.oldProps.imageSmoothing&&o===e.oldProps.imageInterpolation&&a===e.oldProps.imageWeight&&r===e.oldProps.imageType&&s===e.oldProps.imageUnscale&&l===e.oldProps.imageMinValue&&c===e.oldProps.imageMaxValue&&A===e.oldProps.radius&&C===e.oldProps.visible||this._updateFeatures(),v!==e.oldProps.palette&&this._updatePalette(),g===e.oldProps.unitFormat&&u===e.oldProps.textFormatFunction&&d===e.oldProps.textFontFamily&&p===e.oldProps.textSize&&h===e.oldProps.textColor&&f===e.oldProps.textOutlineWidth&&m===e.oldProps.textOutlineColor||this._redrawVisibleFeatures(),this.setState({props:e.props})):this.setState({points:void 0,minValue:void 0,maxValue:void 0})}async _updateFeatures(){let{image:e,image2:t,imageSmoothing:i,imageInterpolation:n,imageType:o,imageUnscale:a,imageMinValue:r,imageMaxValue:s,imageWeight:l,bounds:c,radius:A}=t6(this.props,nv);if(!e)return;let g=nA();this.state.requestId=g;let u=(await nh({image:e,image2:t,imageSmoothing:i,imageInterpolation:n,imageWeight:l,imageType:o,imageUnscale:a,imageMinValue:r,imageMaxValue:s},c,A)).features;if(this.state.requestId!==g)return;let d=u.map(e=>e.properties.value),p=Math.min(...d),h=Math.max(...d);this.setState({points:u,minValue:p,maxValue:h})}_updatePalette(){let{palette:e}=t6(this.props,nv);if(!e)return this.setState({paletteScale:void 0}),void this._redrawVisibleFeatures();let t=(0,a.H)(e);this.setState({paletteScale:t}),this._redrawVisibleFeatures()}_redrawVisibleFeatures(){this.setState({points:Array.isArray(this.state.points)?Array.from(this.state.points):this.state.points})}}nC.layerName="HighLowCompositeLayer",nC.defaultProps=nv;let ny={...nC.defaultProps};class nI extends s.Z{renderLayers(){let{props:e}=this.state;return e?[new nC(this.props,this.getSubLayerProps({id:"composite"}))]:[]}updateState(e){let{image:t,imageUnscale:i}=e.props;if(super.updateState(e),t&&i&&!(t.data instanceof Uint8Array||t.data instanceof Uint8ClampedArray))throw Error("imageUnscale can be applied to Uint8 data only");this.setState({props:e.props})}}nI.layerName="HighLowLayer",nI.defaultProps=ny;let nx={COLD:"COLD",WARM:"WARM",OCCLUDED:"OCCLUDED",STATIONARY:"STATIONARY"},nE={iconAtlas:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGoAAAAqCAYAAABbec77AAAFsmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjA
1469iPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDMtMTBUMTQ6NDI6NTYrMDEwMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjMtMDMtMjVUMDk6MDY6NTgrMDE6MDAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjMtMDMtMjVUMDk6MDY6NTgrMDE6MDAiCiAgIHBob3Rvc2hvcDpEYXRlQ3JlYXRlZD0iMjAyMy0wMy0xMFQxNDo0Mjo1NiswMTAwIgogICBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIgogICBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiCiAgIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMDYiCiAgIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSI0MiIKICAgZXhpZjpDb2xvclNwYWNlPSIxIgogICB0aWZmOkltYWdlV2lkdGg9IjEwNiIKICAgdGlmZjpJbWFnZUxlbmd0aD0iNDIiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29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",iconMapping:{COLD:{x:2,y:2,width:50,height:38,anchorY:35,mask:!0},WARM:{x:54,y:2,width:50,height:38,anchorY:35,mask:!0}}};function nb(e,t){for(let i=e.length-1;i>=0;i--)if(t.call(e,e[i],i,e))return i;return -1}let nw={data:{type:"array",value:[]},minZoom:{type:"object",value:null},maxZoom:{type:"object",value:null},getType:{type:"function",value:null},getPath:{type:"function",value:null},width:{type:"number",value:2},coldColor:{type:"color",value:[0,0,255]},warmColor:{type:"color",value:[255,0,0]},occludedColor:{type:"color",value:[148,0,211]},iconSize:{type:"number",value:15},_debug:{type:"boolean",value:!1}};class nB extends s.Z{renderLayers(){let{viewport:e}=this.context,{props:t,frontLines:i,debugFrontPoints:n}=this.state;if(!t||!i||!n)return[];let{getType:o,getPath:a,width:r,coldColor:s,warmColor:l,occludedColor:c,iconSize:A,_debug:g}=t6(t,nw);if(!o||!a)return[];let{iconStyle:u,iconAtlasTexture:d}=this.state;if(!u||!d)return[];let p={[nx.COLD]:s,[nx.WARM]:l,[nx.OCCLUDED]:c,[nx.STATIONARY]:s};return[new eR(this.getSubLayerProps({id:"path",data:i,getPath:e=>[e.startPosition,...e.icons.map(e=>e.position),e.endPosition],getColor:e=>p[o(e.d)],getWidth:r,widthUnits:"pixels"})),new eR(this.getSubLayerProps({id:"path-stationary-warm",data:i.filter(e=>o(e.d)===nx.STATIONARY),getPath:e=>[e.startPosition,...e.icons.map(e=>e.position),e.endPosition],getColor:l,getWidth:r,widthUnits:"pixels",extensions:[new e8({dash:!0,highPrecisionDash:!0})],getDashArray:[45,45]})),new J(this.getSubLayerProps({id:"icon",data:i.flatMap(e=>e.icons),getPosition:e=>e.position,getIcon:e=>o(e.d)===nx.OCCLUDED||o(e.d)===nx.STATIONARY?e.alternate?nx.COLD:nx.WARM:o(e.d),getSize:A,getColor:e=>o(e.d)===nx.STATIONARY?e.alternate?p[nx.COLD]:p[nx.WARM]:p[o(e.d)],getAngle:t=>o(t.d)===nx.STATIONARY?t.alternate?iH(e,t.direction):iH(e,t.direction+180):iH(e,t.direction),iconAtlas:d,iconMapping:u.iconMapping,sizeBasis:"height",b
1469illboard:!1,extensions:[new e0],collisionEnabled:!0,collisionGroup:"front-icon",collisionTestProps:{sizeScale:5},getCollisionPriority:e=>e.priority})),...g?[new eC(this.getSubLayerProps({id:"text",data:n,getPosition:e=>e.position,getText:e=>`${e.index}`,getSize:12,getColor:t0,getAngle:iH(e,0),outlineWidth:1,outlineColor:t2,fontFamily:tY,fontSettings:{sdf:!0},billboard:!1}))]:[]]}filterSubLayer(e){let{viewport:t}=e,{minZoom:i,maxZoom:n}=t6(this.props,nw);return iG(t,i,n)}updateState(e){let{data:t,getType:i,getPath:n}=e.props;super.updateState(e),t&&i&&n?(this.state.iconStyle||this._updateIconStyle(),t===e.oldProps.data&&n===e.oldProps.getPath||this._updateFeatures(),this.setState({props:e.props})):this.setState({features:void 0,debugFeatures:void 0})}async _updateIconStyle(){let{device:e}=this.context;this.setState({iconStyle:nE});let t=iU(e,await ii(nE.iconAtlas));this.setState({iconAtlasTexture:t})}_updateFeatures(){let{data:e,getPath:t}=t6(this.props,nw);if(!t)return;let i=e.map(e=>(function(e,t){let i=t.slice(0,-1).map((e,i)=>iW(t[i],t[i+1])).reduce((e,t)=>[...e,e[e.length-1]+t],[0]),n=[];for(let e=1,o=i[i.length-1]/3;o>5e3;e++,o/=3){let a=3**e;for(let r=1;r<a;r++){if(e>1&&r%3==0)continue;let a=r*o,s=nb(i,e=>e<=a);if(-1===s||s===t.length-1)throw Error("Invalid state");let l=s+1,c=t[s],A=t[l],g=i[s],u=function(e,t){if(!(Math.abs(e[0]-t[0])>Number.EPSILON||Math.abs(e[1]-t[1])>Number.EPSILON))return NaN;let i=e9(e[1]),n=e9(t[1]),o=e9(t[0]-e[0]),a=Math.cos(i)*Math.sin(n)-Math.sin(i)*Math.cos(n)*Math.cos(o);return(e7(Math.atan2(Math.sin(o)*Math.cos(n),a))+360)%360}(c,A),d=function(e,t,i,n=6371e3){let o=t/n,a=e9(i),r=e9(e[1]),s=e9(e[0]),l=Math.sin(r)*Math.cos(o)+Math.cos(r)*Math.sin(o)*Math.cos(a),c=Math.asin(l),A=s+Math.atan2(Math.sin(a)*Math.sin(o)*Math.cos(r),Math.cos(o)-Math.sin(r)*l),g=e7(c);return[e7(A),g]}(c,a-g,u,6370972),p=90-u,h=100-e;n.push({distance:a,position:d,direction:p,priority:h})}}let o=(n=n.sort((e,t)=>e.distance-t.distance)).map((t,i)=>({d:e,...t,alternate:i%2==0}));return{d:e,startPosition:t[0],endPosition:t[t.length-1],icons:o}})(e,t(e))),n=e.flatMap(e=>t(e).map((t,i)=>({d:e,position:t,index:i})));this.setState({frontLines:i,debugFrontPoints:n})}}nB.layerName="FrontCompositeLayer",nB.defaultProps=nw;let nP={...nB.defaultProps};class nT extends s.Z{renderLayers(){return[new nB(this.props,this.getSubLayerProps({id:"composite"}))]}}nT.layerName="FrontLayer",nT.defaultProps=nP;let nQ=new Map,n_=new Map,nS={VALUE:"VALUE",ARROW:"ARROW",WIND_BARB:"WIND_BARB"},nM=new Map([[nS.ARROW,{iconAtlas:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAFtGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgeG1wOkNyZWF0ZURhdGU9IjIwMjMtMDMtMTBUMTQ6NDE6MjYrMDEwMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjQtMDItMTFUMjM6Mzc6NTErMDE6MDAiCiAgIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMDItMTFUMjM6Mzc6NTErMDE6MDAiCiAgIHBob3Rvc2hvcDpEYXRlQ3JlYXRlZD0iMjAyMy0wMy0xMFQxNDo0MToyNiswMTAwIgogICBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIgogICBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiCiAgIGV4aWY6UGl4ZWxYRGltZW5zaW9uPSIxMDAiCiAgIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMDAiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIxMDAiCiAgIHRpZmY6SW1hZ2VMZW5ndGg9IjEwMCIKICAgdGlmZjpSZXNvbHV0aW9uVW5pdD0iMiIKICAgdGlmZjpYUmVzb2x1dGlvbj0iNzIvMSIKICAgdGlmZjpZUmVzb2x1dGlvbj0iNzIvMSI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+YXJyb3c8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgI
1469HN0RXZ0OmFjdGlvbj0icHJvZHVjZWQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFmZmluaXR5IERlc2lnbmVyIDIgMi4zLjEiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDItMTFUMjM6Mzc6NTErMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PkD+OBEAAAGAaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRz0tCQRDHP1phpGFQRIcOEtbJwgykLkFGWCAhZpDVRZ+/ArXHe0ZE16BrUBB16deh/oK6Bp2DoCiC6Oy5qEvFa54KSuQss/PZ7+4Mu7NgjeaUvN7shXyhqEWCAddCbNFlK2HFTjduLHFFVyfC4RAN7fMRixnvB81ajc/9a/ZkSlfA0io8rqhaUXhaOLReVE3eE+5SsvGk8IWwR5MLCj+YeqLCJZMzFf42WYtGJsHaIezK1HGijpWslheWl+PO59aU6n3MlzhShfk5iX3ivehECBLAxQxTTOJnmDGZ/QziY0hWNMj3lvNnWZVcRWaVDTRWyJCliEfUNamekpgWPSUjx4bZ/7991dMjvkp1RwBaXg3jvR9su/CzYxhfJ4bxcwpNL3BdqOWvHsPoh+g7Nc19BM4tuLypaYl9uNqGnmc1rsXLUpO4NZ2Gt3Noj0HnHbQtVXpW3efsCaKb8lW3cHAIA3LeufwLGtZnw2AleGQAAAAJcEhZcwAACxMAAAsTAQCanBgAAAOKSURBVHic7Zy9j01BGIcfSyHZRKmyye21iOpq9CJ6NfEPqMU/oKZeEVHZFQUqraBHoyBUhFwF9yjO3rh7nTtnZs58vO+575NMssXOmY8nM3ve/e1dMAxjfMyApqfNqs1uAFu1J2AcxoQIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIw4QIo4aQYxXGjKX4XGsIuQBMK4wbyhQ4U3sSJdgGvjJMSu6PI0yBd8DRAc9QxT7wg3gpOYVMD+Z2J7K/Sq7RblqslFxCFjIa4HxEf7Wc4t/GxUjJIWRZxgfgSGB/9bwmXkpqIcsyGuB2QN/RcIvDGxgiJaWQVRkNcNqz76g4y/+b6CsllZAuGW9DFjEmtoBPxElJIaRLRgPcDF/KeLhL92b2SRkqZJ2MBpjELmYMXGL9hrqkDBHikvFy6IK0sw38IlxKrBCXjAa4kWZZutnHvbFdUmKE9Mn4DZxMujKlLKr2ECmhQvpkNMDTHIvTyA79m7sqJUSIj4wGuJpvifpYrtp9pPgK8ZUxA05kX6UiVqv2Pilzj++b4yejAR7mX6Iuuqr2ku1y/iXqYl3VXqJ9A47nX6IfUv7IYU77+luDR7S1kAikCAF4XGnc3Urjiqevas/RPiMsN5d0Qn4CzwuP+QD4U3hMJ5KEQPlr637h8dThW7WnaCJzc2kn5CPwptBYu7RiRCFNCJS7tuy68qRE1S42N5d4Ql7Rvo7mxE5HIPfIe0ImxVYyElxZ+9C28bl5DDmrdsvNI+nL2mOa+Nxc4g/1BXsZnvkM+JLhuRtBjqrdcvOB+GbtPk1Fbi75yoK0Vfse8D3h8zaSlFW75eYJSJW1i8rNXUi/slJl7aJyc+2kqNovFp/1iBlatYvLzV1Iv7JgeNYuLjd3oUEIDKva7VftGYit2kXm5i60nJDYrF1kbu5CixCIq9rtuspIaNUuNjcfC6FV+0Z/3rwUIVn7pM4UNwvfqt1y80L4Vu2WmxfkCW4Z4nNzF5peexf0vf5abl6YvqrdcvMKrMvaVeTmLjReWbD+2rLcvBLn6D4hlptXoqtqV5Obu9B6ZXVl7ZabV2a1arfcvDLLVbuq3NyF1isL2qz9xcHXqnLzMXOd9oRs1P9pl8wO8B5lufnYuVJ7AoZhlOIvaGdhp4AP+qMAAAAASUVORK5CYII=",iconMapping:{0:{x:0,y:0,width:100,height:100,mask:!0}}}],[nS.WIND_BARB,{iconAtlas:"data:image/png;base64,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AQJ2Agb/OVmUCBAgQIECAAAECBAgQILCZgIF/M3oXJkCAAAECBAgQIECAAAECdQIG/jpblQkQIECAAAECBAgQIECAwGYCBv7N6F2YAAECBAgQIECAAAECBAjUCRj462xVJkCAAAECBAgQIECAAAECmwkY+Dejd2ECBAgQIECAAAECBAgQIFAnYOCvs1WZAAECBAgQIECAAAECBAhsJmDg34zehQkQIECAAAECBAgQIECAQJ2Agb/OVmUCBAgQIECAAAECBAgQILCZgIF/M3oXJkCAAAECBAgQIECAAAECdQIG/jpblQkQIECAAAECBAgQIECAwGYCBv7N6F2YAAECBAgQIECAAAECBAjUCRj462xVJkCAAAECBAgQIECAAAECmwkY+Dejd2ECBAgQIECAAAECBAgQIFAnYOCvs1WZAAECBAgQIECAAAECBAhsJmDg34zehQkQIECAAAECBAgQIECAQJ2Agb/OVmUCBAgQIECAAAECBAgQILCZgIF/M3oXJkCAAAECBAgQIECAAAECdQIG/jpblQkQIECAAAECBAgQIECAwGYCBv7N6F2YAAECBAgQIECAAAECBAjUCRj462xVJkCAAAECBAgQIECAAAECmwkY+Dejd2ECBAgQIECAAAECBAgQIFAnYOCvs1WZAAECBAgQIECAAAECBAhsJmDg34zehQkQIECAAAECBAgQIECAQJ2Agb/OVmUCBAgQIECAAAECBAgQILCZgIF/M3oXJkCAAAECBAgQIECAAAECdQIG/jpblQkQIECAAAECBAgQIECAwGYCBv7N6F2YAAECBAgQIECAAAECBAjUCRj462xVJkCAAAECBAgQIECAAAECmwkY+Dejd2ECBAgQIECAAAECBAgQIFAnYOCvs1WZAAECBAgQIECAAAECBAhsJmDg34zehQkQIECAAAECBAgQIECAQJ2Agb/OVmUCBAgQIECAAAECBAgQILCZgIF/M3oXJkCAAAECBAgQIECAAAECdQIG/jpblQkQIECAAAECBAgQIECAwGYCBv7N6F2YAAECBAgQIECAAAECBAjUCRj462xVJkCAAAECBAgQIECAAAECmwkY+Dejd2ECBAgQIECAAAECBAgQIFAnYOCvs1WZAAECBAgQIECAAAECBAhsJmDg34zehQkQIECAAAECBAgQIECAQJ2Agb/OVmUCBAgQIEC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F/4ObbOgECBAgQIECAAAECBAj0K2Dg77e3dkaAAAECBAgQIECAAAECAwsY+Aduvq0TIECAAAECBAgQIECAQL8CBv5+e2tnBAgQIECAAAECBAgQIDCwgIF/4ObbOgECBAgQIECAAAECBAj0K2Dg77e3dkaAAAECBAgQIECAAAECAwsY+Aduvq0TIECAAAECBAgQIECAQL8CBv5+e2tnBAgQIECAAAECBAgQIDCwgIF/4ObbOgECBAgQIECAAAECBAj0K2Dg77e3dkaAAAECBAgQIECAAAECAwsY+Aduvq0TIECAAAECBAgQIECAQL8CBv5+e2tnBAgQIECAAAECBAgQIDCwgIF/4ObbOgECBAgQIECAAAECBAj0K2Dg77e3dkaAAAECBAgQIECAAAECAwsY+Aduvq0TIECAAAECBAgQIECAQL8CBv5+e2tnBAgQIECAAAECBAgQIDCwgIF/4ObbOgECBAgQIECAAAECBAj0K2Dg77e3dkaAAAECBAgQIECAAAECAwsY+Aduvq0TIECAAAECBAgQIECAQL8CBv5+e2tnBAgQIECAAAECBAgQIPD/t1/HBAAAAAjC+re2hyyC8yIsIPjD55tOgAABAgQIECBAgAABAr8Cgv/3W8sIECBAgAABAgQIECBAICwg+MPnm06AAAECBAgQIECAAAECvwKC//dbywgQIECAAAECBAgQIEAgLCD4w+ebToAAAQIECBAgQIAAAQK/AoL/91vLCBAgQIAAAQIECBAgQCA
1469sIPjD55tOgAABAgQIECBAgAABAr8Cgv/3W8sIECBAgAABAgQIECBAICwg+MPnm06AAAECBAgQIECAAAECvwKC//dbywgQIECAAAECBAgQIEAgLCD4w+ebToAAAQIECBAgQIAAAQK/AgOYR34g/YMI8gAAAABJRU5ErkJggg==",iconMapping:{0:{x:0,y:0,width:170,height:170,anchorX:85,anchorY:133,mask:!0},1:{x:170,y:0,width:170,height:170,anchorX:85,anchorY:133,mask:!0},2:{x:340,y:0,width:170,height:170,anchorX:85,anchorY:133,mask:!0},3:{x:510,y:0,width:170,height:170,anchorX:85,anchorY:133,mask:!0},4:{x:680,y:0,width:170,height:170,anchorX:85,anchorY:133,mask:!0},5:{x:850,y:0,width:170,height:170,anchorX:85,anchorY:133,mask:!0},6:{x:0,y:170,width:170,height:170,anchorX:85,anchorY:133,mask:!0},7:{x:170,y:170,width:170,height:170,anchorX:85,anchorY:133,mask:!0},8:{x:340,y:170,width:170,height:170,anchorX:85,anchorY:133,mask:!0},9:{x:510,y:170,width:170,height:170,anchorX:85,anchorY:133,mask:!0},10:{x:680,y:170,width:170,height:170,anchorX:85,anchorY:133,mask:!0},11:{x:850,y:170,width:170,height:170,anchorX:85,anchorY:133,mask:!0},12:{x:0,y:340,width:170,height:170,anchorX:85,anchorY:133,mask:!0}
1469,13:{x:170,y:340,width:170,height:170,anchorX:85,anchorY:133,mask:!0},14:{x:340,y:340,width:170,height:170,anchorX:85,anchorY:133,mask:!0},15:{x:510,y:340,width:170,height:170,anchorX:85,anchorY:133,mask:!0},16:{x:680,y:340,width:170,height:170,anchorX:85,anchorY:133,mask:!0},17:{x:850,y:340,width:170,height:170,anchorX:85,anchorY:133,mask:!0},18:{x:0,y:510,width:170,height:170,anchorX:85,anchorY:133,mask:!0},19:{x:170,y:510,width:170,height:170,anchorX:85,anchorY:133,mask:!0},20:{x:340,y:510,width:170,height:170,anchorX:85,anchorY:133,mask:!0}},iconBounds:[0,51.444]}]]),nL={image:{type:"object",value:null},image2:{type:"object",value:null},imageSmoothing:{type:"number",value:0},imageInterpolation:{type:"object",value:iu.CUBIC},imageWeight:{type:"number",value:0},imageType:{type:"object",value:id.SCALAR},imageUnscale:{type:"array",value:null},imageMinValue:{type:"object",value:null},imageMaxValue:{type:"object",value:null},bounds:{type:"array",value:[-180,-90,180,90],compare:!0},minZoom:{type:"object",value:null},maxZoom:{type:"object",value:null},style:{type:"object",value:nS.VALUE},density:{type:"number",value:0},unitFormat:{type:"object",value:null},textFormatFunction:{type:"function",value:t3},textFontFamily:{type:"object",value:tY},textSize:{type:"number",value:12},textColor:{type:"color",value:t0},textOutlineWidth:{type:"number",value:1},textOutlineColor:{type:"color",value:t2},iconBounds:{type:"array",value:null},iconSize:{type:"object",value:40},iconColor:{type:"color",value:t5},palette:{type:"object",value:null}};class nO extends s.Z{renderLayers(){let{viewport:e}=this.context,{props:t,points:i}=this.state;if(!t||!i)return[];let{style:n,unitFormat:o,textFormatFunction:a,textFontFamily:r,textSize:s,textColor:l,textOutlineWidth:c,textOutlineColor:A,iconSize:g,iconColor:u}=t6(t,nL),{paletteScale:d}=this.state;if(nM.has(n)){let{iconStyle:n,iconAtlasTexture:o}=this.state;if(!n||!o)return[];let a=Object.keys(n.iconMapping).length,r=t.iconBounds??n.iconBounds??[0,0],s=r[1]-r[0],l=e=>(e-r[0])/s,c=Array.isArray(g)?g[1]-g[0]:0;return[new J(this.getSubLayerProps({id:"icon",data:i,getPosition:e=>e.geometry.coordinates,getIcon:e=>`${Math.min(Math.max(Math.floor(l(e.properties.value)*a),0),a-1)}`,getSize:e=>Array.isArray(g)?g[0]+l(e.properties.value)*c:g,getColor:e=>d?i$(d(e.properties.value).rgba()):u,getAngle:t=>iH(e,t.properties.direction?360-t.properties.direction:0),iconAtlas:o,iconMapping:n.iconMapping,sizeBasis:"height",billboard:!1,parameters:{cullMode:"front",depthCompare:"always",...this.props.parameters}}))]}return[new eC(this.getSubLayerProps({id:"text",data:i,getPosition:e=>e.geometry.coordinates,getText:e=>a(e.properties.value,o),getSize:s,getColor:e=>d?i$(d(e.properties.value).rgba()):l,getAngle:iH(e,0),outlineWidth:c,outlineColor:A,fontFamily:r,fontSettings:{sdf:!0},billboard:!1,parameters:{cullMode:"front",depthCompare:"always",...this.props.parameters}}))]}filterSubLayer(e){let{viewport:t}=e,{minZoom:i,maxZoom:n}=t6(this.props,nL);return iG(t,i,n)}shouldUpdateState(e){return super.shouldUpdateState(e)||e.changeFlags.viewportChanged}updateState(e){let{image:t,image2:i,imageSmoothing:n,imageInterpolation:o,imageWeight:a,imageType:r,imageUnscale:s,imageMinValue:l,imageMaxValue:c,style:A,density:g,unitFormat:u,textFormatFunction:d,textFontFamily:p,textSize:h,textColor:f,textOutlineWidth:m,textOutlineColor:v,iconSize:C,iconColor:y,palette:I,visible:x}=e.props;super.updateState(e),x?(this.state.iconStyle&&A===e.oldProps.style||this._updateIconStyle(),(g!==e.oldProps.density||e.changeFlags.viewportChanged)&&this._updatePositions(),t===e.oldProps.image&&i===e.oldProps.image2&&n===e.oldProps.imageSmoothing&&o===e.oldProps.imageInterpolation&&a===e.oldProps.imageWeight&&r===e.oldProps.imageType&&s===e.oldProps.imageUnscale&&l===e.oldProps.imageMinValue&&c===e.oldProps.imageMaxValue&&x===e.oldProps.visible||this._updateFeatures(),I!==e.oldProps.palette&&this._updatePalette(),u===e.oldProps.unitFormat&&d===e.oldProps.textFormatFunction&&p===e.oldProps.textFontFamily&&h===e.oldProps.textSize&&f===e.oldProps.textColor&&m===e.oldProps.textOutlineWidth&&v===e.oldProps.textOutlineColor&&C===e.oldProps.iconSize&&y===e.oldProps.iconColor||this._redrawVisibleFeatures(),this.setState({props:e.props})):this.setState({points:void 0})}async _updateIconStyle(){let{device:e}=this.context,{style:t}=t6(this.props,nL),i=nM.get(t);if(!i)return void this.setState({iconStyle:void 0,iconAtlasTexture:void 0});this.setState({iconStyle:i});let n=iU(e,await ii(i.iconAtlas));this.setState({iconAtlasTexture:n})}_updatePositions(){let{viewport:e}=this.context,{density:t}=t6(this.props,nL),i=function(e,t=0){let i;if(iJ(e))i=function(e,t,i){i=Math.min(Math.max(i-2,0),7);let n=nQ.get(i)??(()=>{let{uv:e}=function(e=4,t=!1){if(e>10)throw Error(`Max order is 10, but given ${e}.`);let i=(1+Math.sqrt(5))/2,n=10*Math.pow(4,e)+2,o=t?0===e?3:3*Math.pow(2,e)+9:0,a=new Float32Array((n+o)*3);a.set(Float32Array.of(-1,i,0,1,i,0,-1,-i,0,1,-i,0,0,-1,i,0,1,i,0,-1,-i,0,1,-i,i,0,-1,i,0,1,-i,0,-1,-i,0,1));let r=Uint16Array.of(0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,11,10,2,5,11,4,1,5,9,7,1,8,10,7,6,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,9,8,1,4,9,5,2,4,11,6,2,10,8,6,7),s=12,l=e?new Map:null;function c(e,t){let i=Math.floor((e+t)*(e+t+1)/2+Math.min(e,t)),n=l.get(i);return void 0!==n?(l.delete(i),n):(l.set(i,s),a[3*s+0]=(a[3*e+0]+a[3*t+0])*.5,a[3*s+1]=(a[3*e+1]+a[3*t+1])*.5,a[3*s+2]=(a[3*e+2]+a[3*t+2])*.5,s++)}let A=r,g=e>5?Uint32Array:Uint16Array;for(let t=0;t<e;t++){let e=A.length;r=new g(4*e);for(let t=0;t<e;t+=3){let e=A[t+0],i=A[t+1],n=A[t+2],o=c(e,i),a=c(i,n),s=c(n,e),l=4*t;r[l++]=e,r[l++]=o,r[l++]=s,r[l++]=i,r[l++]=a,r[l++]=o,r[l++]=n,r[l++]=s,r[l++]=a,r[l++]=o,r[l++]=a,r[l++]=s}A=r}for(let e=0;e<3*n;e+=3){let t=a[e+0],i=a[e+1],n=a[e+2],o=1/Math.sqrt(t*t+i*i+n*n);a[e+0]*=o,a[e+1]*=o,a[e+2]*=o}if(!t)return{vertices:a,triangles:r};let u=new Float32Array((n+o)*2);for(let e=0;e<n;e++)u[2*e+0]=Math.atan2(a[3*e+2],a[3*e])/(2*Math.PI)+.5,u[2*e+1]=Math.asin(a[3*e+1])/Math.PI+.5;let d=new Map;function p(e,t,i,n){if(n){let t=d.get(e);if(void 0!==t)return t}return a[3*s+0]=a[3*e+0],a[3*s+1]=a[3*e+1],a[3*s+2]=a[3*e+2],u[2*s+0]=t,u[2*s+1]=i,n&&d.set(e,s),s++}for(let e=0;e<r.length;e+=3){let t=r[e+0],i=r[e+1],n=r[e+2],o=u[2*t],a=u[2*i],s=u[2*n],l=u[2*t+1],c=u[2*i+1],A=u[2*n+1];a-o>=.5&&1!==l&&(a-=1),s-a>.5&&(s-=1),(o>.5&&o-s>.5||1===o&&0===A)&&(o-=1),a>.5&&a-o>.5&&(a-=1),0===l||1===l?(o=(a+s)/2,l===a?u[2*t]=o:r[e+0]=p(t,o,l,!1)):0===c||1===c?(a=(o+s)/2,c===o?u[2*i]=a:r[e+1]=p(i,a,c,!1)):(0===A||1===A)&&(s=(o+a)/2,A===o?u[2*n]=s:r[e+2]=p(n,s,A,!1)),o!==u[2*t]&&0!==l&&1!==l&&(r[e+0]=p(t,o,l,!0)),a!==u[2*i]&&0!==c&&1!==c&&(r[e+1]=p(i,a,c,!0)),s!==u[2*n]&&0!==A&&1!==A&&(r[e+2]=p(n,s,A,!0))}return{vertices:a,triangles:r,uv:u}}(i,!0),t=[];for(let i=0;i<e.length;i+=2){let n=e[i],o=e[i+1];if(0===n||o<=0||o>=1)continue;let a=360*n-180,r=180*o-90;t.push([a,r])}return t.push([0,-90]),t.push([0,90]),t})();return(function(e,t,i,n=1/0,o=1/0,a){let r=1,s=[];void 0===n&&(n=1/0),void 0!==o&&(r=tR(o/6371));let l=new tM([],tD),c={left:0,right:e.ids.length-1,axis:0,dist:0,minLng:-180,minLat:-90,maxLng:180,maxLat:90},A=Math.cos(i*tL);for(;c;){var g,u;let o;let a=c.right,d=c.left;if(a-d<=e.nodeSize)for(let n=d;n<=a;n++){let o=e.ids[n];{let a=(g=e.coords[2*n],u=e.coords[2*n+1],tk(tR((t-g)*tL),A,i,u));l.push({id:o,dist:a})}}else{let n=d+a>>1,o=e.coords[2*n],r=e.coords[2*n+1],s=e.ids[n];{let e=tk(tR((t-o)*tL),A,i,r);l.push({id:s,dist:e})}let g=(c.axis+1)%2,u={left:d,right:n-1,axis:g,minLng:c.minLng,minLat:c.minLat,maxLng:0===c.axis?o:c.maxLng,maxLat:1===c.axis?r:c.maxLat,dist:0},p={left:n+1,right:a,axis:g,minLng:0===c.axis?o:c.minLng,minLat:1===c.axis?r:c.minLat,maxLng:c.maxLng,maxLat:c.maxLat,dist:0};
1469u.dist=tO(t,i,A,u),p.dist=tO(t,i,A,p),l.push(u),l.push(p)}for(;(o=l.pop())&&("id"in o);)if(o.dist>r||(s.push(o.id),s.length===n))return s;c=o}return s})(n_.get(i)??(()=>{let e=new tT(n.length,void 0,Float32Array);for(let t=0;t<n.length;t++){let i=n[t];e.add(i[0],i[1])}return e.finish(),e})(),e[0],e[1],void 0,t/1e3).map(e=>n[e])}(iZ(e),iq(e),Math.floor(iK(e)+t+1));else{if(iJ(e))throw Error("Invalid state");i=function(e,t){let i=new tB({size:1,antimeridian:!0}),n=[...i.px([e[0],e[1]],t),...i.px([e[2],e[3]],t)];[n[1],n[3]]=[n[3],n[1]];let o=2**t,a=n[2]-n[0]+1,r=n[3]-n[1]+1,s=[];for(let e=0;e<r;e++)for(let r=0;r<a;r++){let a=n[0]+r,l=[a,n[1]+e+(a%2==1?.5:0)];if(0===l[0]||l[1]<=0||l[1]>=o)continue;let c=i.ll([l[0],l[1]],t);c[0]=iL(c[0]),s.push(c)}return s}(ij(e),Math.floor(iK(e)+t))}return i}(e,t+3);this.setState({positions:i}),this._updateFeatures()}_updateFeatures(){let{image:e,image2:t,imageSmoothing:i,imageInterpolation:n,imageWeight:o,imageType:a,imageUnscale:r,imageMinValue:s,imageMaxValue:l,bounds:c}=t6(this.props,nL),{positions:A}=this.state;if(!e||!A)return;let g=iR({image:e,image2:t,imageSmoothing:i,imageInterpolation:n,imageWeight:o,imageType:a,imageUnscale:r,imageMinValue:s,imageMaxValue:l},c,A).features.filter(e=>!isNaN(e.properties.value));this.setState({points:g})}_updatePalette(){let{palette:e}=t6(this.props,nL);if(!e)return this.setState({paletteScale:void 0}),void this._redrawVisibleFeatures();let t=(0,a.H)(e);this.setState({paletteScale:t}),this._redrawVisibleFeatures()}_redrawVisibleFeatures(){this.setState({points:Array.isArray(this.state.points)?Array.from(this.state.points):this.state.points})}}nO.layerName="GridCompositeLayer",nO.defaultProps=nL;let nD={...nO.defaultProps};class nR extends s.Z{renderLayers(){let{props:e}=this.state;return e?[new nO(this.props,this.getSubLayerProps({id:"composite"}))]:[]}updateState(e){let{image:t,imageUnscale:i}=e.props;if(super.updateState(e),t&&i&&!(t.data instanceof Uint8Array||t.data instanceof Uint8ClampedArray))throw Error("imageUnscale can be applied to Uint8 data only");this.setState({props:e.props})}}nR.layerName="GridLayer",nR.defaultProps=nD;let nk="layout(std140)uniform particleUniforms{\nfloat w;\nvec2 x;\nfloat y;\nvec4 z;\nfloat AA;\nfloat AB;\nfloat AC;\nfloat AD;\nfloat AE;\nfloat AF;\n}\nparticle;\n",nz={name:"particle",vs:nk,fs:nk,uniformTypes:{w:"f32",x:"vec2<f32>",y:"f32",z:"vec4<f32>",AA:"f32",AB:"f32",AC:"f32",AD:"f32",AE:"f32",AF:"f32"},getUniforms:function(e={}){return{w:e.viewportGlobe?1:0,x:e.viewportGlobeCenter??[0,0],y:e.viewportGlobeRadius??0,z:e.viewportBounds??[0,0,0,0],AA:e.viewportZoomChangeFactor??0,AB:e.numParticles,AC:e.maxAge,AD:e.speedFactor,AE:e.time,AF:e.seed}}},nF="sourcePosition",nU="targetPosition",nN="sourceColor",nV="targetColor",nW={imageTexture:{type:"object",value:null},imageTexture2:{type:"object",value:null},imageSmoothing:{type:"number",value:0},imageInterpolation:{type:"object",value:iu.CUBIC},imageWeight:{type:"number",value:0},imageType:{type:"object",value:id.VECTOR},imageUnscale:{type:"array",value:null},imageMinValue:{type:"object",value:null},imageMaxValue:{type:"object",value:null},bounds:{type:"array",value:[-180,-90,180,90],compare:!0},minZoom:{type:"object",value:null},maxZoom:{type:"object",value:15},palette:{type:"object",value:null},color:{type:"color",value:tX},numParticles:{type:"number",min:1,max:1e6,value:5e3},maxAge:{type:"number",min:1,max:255,value:10},speedFactor:{type:"number",min:0,max:50,value:1},width:{type:"number",value:1},animate:!0,wrapLongitude:!0};class nJ extends eJ{getShaders(){let e=super.getShaders();return{...e,inject:{...e.inject,"vs:#decl":(e.inject?.["vs:#decl"]||"")+"\n in float instanceOpacities;\n out float drop;\n const float DROP_POSITION_Z = -1.;\n ","vs:#main-start":(e.inject?.["vs:#main-start"]||"")+"\n drop = float(instanceSourcePositions.z == DROP_POSITION_Z || instanceTargetPositions.z == DROP_POSITION_Z);\n ","vs:DECKGL_FILTER_COLOR":(e.inject?.["vs:DECKGL_FILTER_COLOR"]||"")+"\n color.a = color.a * instanceOpacities;
1469\n ","fs:#decl":(e.inject?.["fs:#decl"]||"")+"\n in float drop;\n ","fs:#main-start":(e.inject?.["fs:#main-start"]||"")+"\n if (drop > 0.5) discard;\n "}}}initializeState(){super.initializeState();let e=this.getAttributeManager();e.remove(["instanceSourcePositions","instanceTargetPositions","instanceColors","instanceWidths"]),e.addInstanced({instanceSourcePositions:{size:3,type:"float32",noAlloc:!0},instanceTargetPositions:{size:3,type:"float32",noAlloc:!0},instanceColors:{size:4,type:"float32",noAlloc:!0},instanceOpacities:{size:1,type:"float32",noAlloc:!0}})}updateState(e){let{imageType:t,numParticles:i,maxAge:n,width:o,palette:a,visible:r}=e.props;super.updateState(e),r&&t===id.VECTOR&&i&&n&&o?(t===e.oldProps.imageType&&i===e.oldProps.numParticles&&n===e.oldProps.maxAge&&o===e.oldProps.width&&r===e.oldProps.visible||this._setupTransformFeedback(),a!==e.oldProps.palette&&this._updatePalette()):this._deleteTransformFeedback()}finalizeState(e){this._deleteTransformFeedback(),super.finalizeState(e)}draw(e){let{initialized:t}=this.state;if(!t)return;let{viewport:i}=this.context,{model:n}=this.state,{minZoom:o,maxZoom:a,width:r,animate:s}=t6(this.props,nW),{sourcePositions:l,targetPositions:c,sourceColors:A,opacities:g,transform:u}=this.state;l&&c&&A&&g&&u&&n&&iG(i,o,a)&&(n.setAttributes({instanceSourcePositions:l,instanceTargetPositions:c,instanceColors:A,instanceOpacities:g}),n.setConstantAttributes({instanceSourcePositions64Low:new Float32Array([0,0,0]),instanceTargetPositions64Low:new Float32Array([0,0,0]),instanceWidths:new Float32Array([r])}),super.draw(e),s&&this.step())}_setupTransformFeedback(){let{device:e}=this.context,{initialized:t}=this.state;t&&this._deleteTransformFeedback();let{numParticles:i,maxAge:n}=t6(this.props,nW),o=Math.max(4,4*Math.floor(i/4)),a=o*n,r=o*(n-1),s=e.createBuffer(new Float32Array(3*a)),l=e.createBuffer(new Float32Array(3*a)),c=e.createBuffer(new Float32Array(4*a)),A=e.createBuffer(new Float32Array(4*a)),g=e.createBuffer(new Float32Array(Array(a).fill(void 0).map((e,t)=>1-Math.floor(t/o)/n))),u=new tz.H(e,{vs:"#version 300 es\n#define SHADER_NAME particle-line-layer-update-vertex-shader\n#ifdef GL_ES\nprecision highp float;\n#endif\nvec4 AG(sampler2D AH,vec2 AI,vec2 AJ,vec2 AK){\nvec2 uv=(AJ+AK+0.5)/AI;\nreturn texture(AH,uv);\n}\nconst vec4 AL=vec4(3.,-6.,0.,4.)/6.;\nconst vec4 AM=vec4(-1.,6.,-12.,8.)/6.;\nvec4 AN(float J){\nreturn vec4(J*J*J,J*J,J,1.);\n}\nvec4 AO(vec4 AP,vec4 AQ,vec4 AR,vec4 AS,float AT){\nvec4 O=AP*dot(AM,AN(AT+1.))+AQ*dot(AL,AN(AT))+AR*dot(AL,AN(1.-AT))+AS*dot(AM,AN(2.-AT));\nO.a=(AP.a>0.&&AQ.a>0.&&AR.a>0.&&AS.a>0.)?max(max(max(AP.a,AQ.a),AR.a),AS.a):0.;\nreturn O;\n}\nvec4 AU(sampler2D AH,vec2 AI,vec2 uv){\nvec2 AV=uv*AI-0.5;\nvec2 AJ=floor(AV);\nvec2 AW=fract(AV);\nreturn AO(AO(AG(AH,AI,AJ,vec2(-1,-1)),AG(AH,AI,AJ,vec2(0,-1)),AG(AH,AI,AJ,vec2(1,-1)),AG(AH,AI,AJ,vec2(2,-1)),AW.x),AO(AG(AH,AI,AJ,vec2(-1,0)),AG(AH,AI,AJ,vec2(0,0)),AG(AH,AI,AJ,vec2(1,0)),AG(AH,AI,AJ,vec2(2,0)),AW.x),AO(AG(AH,AI,AJ,vec2(-1,1)),AG(AH,AI,AJ,vec2(0,1)),AG(AH,AI,AJ,vec2(1,1)),AG(AH,AI,AJ,vec2(2,1)),AW.x),AO(AG(AH,AI,AJ,vec2(-1,2)),AG(AH,AI,AJ,vec2(0,2)),AG(AH,AI,AJ,vec2(1,2)),AG(AH,AI,AJ,vec2(2,2)),AW.x),AW.y);\n}\nvec4 AX(sampler2D AH,vec2 AI,vec2 uv){\nvec2 AV=uv*AI-0.5;\nvec2 AJ=floor(AV);\nvec2 AW=fract(AV);\nreturn mix(mix(AG(AH,AI,AJ,vec2(0,0)),AG(AH,AI,AJ,vec2(1,0)),AW.x),mix(AG(AH,AI,AJ,vec2(0,1)),AG(AH,AI,AJ,vec2(1,1)),AW.x),AW.y);\n}\nvec4 AY(sampler2D AH,vec2 AI,vec2 uv){\nvec2 AV=uv*AI-0.5;\nvec2 AJ=floor(AV+0.5);\nreturn AG(AH,AI,AJ,vec2(0,0));\n}\nvec4 AZ(sampler2D AH,vec2 AI,float a,vec2 uv){\nif(a==2.){\nreturn AU(AH,AI,uv);\n}\nif(a==1.){\nreturn AX(AH,AI,uv);\n}\nelse{\nreturn AY(AH,AI,uv);\n}\n}\nvec4 Aa(sampler2D AH,sampler2D Ab,vec2 AI,float a,float b,bool B,vec2 uv){\nvec2 Ac;\nAc.x=B?uv.x+0.5/AI.x:mix(0.+0.5/AI.x,1.-0.5/AI.x,uv.x);\nAc.y=mix(0.+0.5/AI.y,1.-0.5/AI.y,uv.y);\nif(b>0.){\nvec4 Ad=AZ(AH,AI,a,Ac);\nvec4 Ae=AZ(Ab,AI,a,Ac);\nreturn mix(Ad,Ae,b);\n}\nelse{\nreturn AZ(AH,AI,a,Ac);\n}\n}\nvec4 Af(sampler2D AH,sampler2D Ab,vec2 Y,float Z,float a,float b,bool B,vec2 uv){\nfloat Ag=1.+max(0.,Z);
1469\nvec2 AI=Y/Ag;\nreturn Aa(AH,Ab,AI,a,b,B,uv);\n}\nconst float Ah=3.1415926536;\nfloat Ai(float K,float J){\nreturn J==0.?sign(K)*Ah/2.:atan(K,J);\n}\nbool Aj(float q){\nuint Ak=floatBitsToUint(q);\nreturn(Ak&0x7fffffffu)>0x7f800000u;\n}\nbool Al(vec4 Ad,vec2 d){\nif(d[0]<d[1]){\nreturn Ad.a>=1.;\n}\nelse{\nreturn!Aj(Ad.x);\n}\n}\nfloat Am(vec4 Ad,float c,vec2 d){\nif(c==1.){\nreturn 0.;\n}\nelse{\nif(d[0]<d[1]){\nreturn mix(d[0],d[1],Ad.x);\n}\nelse{\nreturn Ad.x;\n}\n}\n}\nvec2 An(vec4 Ad,float c,vec2 d){\nif(c==1.){\nif(d[0]<d[1]){\nreturn mix(vec2(d[0]),vec2(d[1]),Ad.xy);\n}\nelse{\nreturn Ad.xy;\n}\n}\nelse{\nreturn vec2(0.);\n}\n}\nfloat Ao(vec4 Ad,float c,vec2 d){\nif(c==1.){\nvec2 q=An(Ad,c,d);\nreturn length(q);\n}\nelse{\nreturn Am(Ad,c,d);\n}\n}\nfloat Ap(vec4 Ad,float c,vec2 d){\nif(c==1.){\nvec2 q=An(Ad,c,d);\nreturn mod((360.-(Ai(q.y,q.x)/Ah*180.+180.))-270.,360.)/360.;\n}\nelse{\nreturn 0.;\n}\n}\nin vec3 sourcePosition;\nin vec4 sourceColor;\nout vec3 targetPosition;\nout vec4 targetColor;\nconst float Aq=-1.;\nconst vec4 Ar=vec4(0);\nconst float As=6370972.;\nvec2 At(vec2 Au,float Av,float Aw){\nfloat Ax=Av/As;\nfloat Ay=radians(Aw);\nfloat Az=radians(Au.y);\nfloat BA=radians(Au.x);\nfloat BB=sin(Az)*cos(Ax)+cos(Az)*sin(Ax)*cos(Ay);\nfloat BC=asin(BB);\nfloat K=sin(Ay)*sin(Ax)*cos(Az);\nfloat J=cos(Ax)-sin(Az)*BB;\nfloat BD=BA+Ai(K,J);\nfloat BE=degrees(BC);\nfloat BF=degrees(BD);\nreturn vec2(BF,BE);\n}\nfloat BG(float BH){\nfloat BI=mod(BH+180.,360.)-180.;\nreturn BI;\n}\nfloat BG(float BH,float BJ){\nfloat BI=BG(BH);\nif(BI<BJ){\nBI+=360.;\n}\nreturn BI;\n}\nfloat BK(vec2 AF){\nreturn fract(sin(dot(AF.xy,vec2(12.9898,78.233)))*43758.5453);\n}\nvec2 BL(vec2 AF){\nreturn vec2(BK(AF+1.3),BK(AF+2.1));\n}\nvec2 BM(vec2 BN){\nif(particle.w==1.){\nBN.x+=0.0001;\nBN.x=sqrt(BN.x);\nfloat Av=BN.x*particle.y;\nfloat Aw=BN.y*360.;\nreturn At(particle.x,Av,Aw);\n}\nelse{\nBN.y=smoothstep(0.,1.,BN.y);\nvec2 BO=particle.z.xy;\nvec2 BP=particle.z.zw;\nreturn mix(BO,BP,BN);\n}\n}\nvec2 BQ(vec2 BR,vec2 BS){\nfloat BT=cos(radians(BR.y));\nvec2 AK;\nif(particle.w==1.){\nAK=vec2(BS.x/BT,BS.y);\n}\nelse{\nAK=vec2(BS.x,BS.y*BT);\n}\nreturn BR+AK;\n}\nbool BU(vec2 BR,vec4 A){\nvec2 BV=A.xy;\nvec2 BW=A.zw;\nfloat BH=BG(BR.x,BV.x);\nfloat BE=BR.y;\nreturn(BV.x<=BH&&BH<=BW.x&&BV.y<=BE&&BE<=BW.y);\n}\nvoid main(){\nfloat BX=mod(float(gl_VertexID),particle.AB);\nfloat BY=floor(float(gl_VertexID)/particle.AB);\nif(BY>0.){\nreturn;\n}\nif(sourcePosition.z==Aq){\nvec2 BZ=vec2(BX*particle.AF/particle.AB);\nvec2 BN=BL(BZ);\nvec2 BR=BM(BN);\ntargetPosition.xy=BR;\ntargetPosition.x=BG(targetPosition.x);\ntargetColor=Ar;\nreturn;\n}\nif(particle.AA>1.&&mod(BX,particle.AA)>=1.){\ntargetPosition.xy=sourcePosition.xy;\ntargetPosition.z=Aq;\ntargetColor=Ar;\nreturn;\n}\nif(abs(mod(BX,particle.AC+2.)-mod(particle.AE,particle.AC+2.))<1.){\ntargetPosition.xy=sourcePosition.xy;\ntargetPosition.z=Aq;\ntargetColor=Ar;\nreturn;\n}\nif(!BU(sourcePosition.xy,bitmap2.A)){\ntargetPosition.xy=sourcePosition.xy;\ntargetColor=Ar;\nreturn;\n}\nvec2 uv=Q(sourcePosition.xy);\nvec4 Ad=Af(W,X,raster.Y,raster.Z,raster.a,raster.b,bitmap2.B,uv);\nif(!Al(Ad,raster.d)){\ntargetPosition.xy=sourcePosition.xy;\ntargetColor=Ar;\nreturn;\n}\nfloat q=Ao(Ad,raster.c,raster.d);\nif((!Aj(raster.e)&&q<raster.e)||(!Aj(raster.f)&&q>raster.f)){\ntargetPosition.xy=sourcePosition.xy;\ntargetColor=Ar;\nreturn;\n}\nvec2 BS=An(Ad,raster.c,raster.d)*particle.AD;\ntargetPosition.xy=BQ(sourcePosition.xy,BS);\ntargetPosition.x=BG(targetPosition.x);\ntargetColor=sourceColor;\ntargetColor=r(m,palette.n,palette.o,q);\n}\n",modules:[i5,i8,i7,nz],vertexCount:o,attributes:{[nF]:s,[nN]:c},bufferLayout:[{name:nF,format:"float32x3"},{name:nN,format:"float32x4"}],feedbackBuffers:{[nU]:l,[nV]:A},varyings:[nU,nV]});this.setState({initialized:!0,currentNumParticles:o,numInstances:a,numAgedInstances:r,sourcePositions:s,targetPositions:l,sourceColors:c,targetColors:A,opacities:g,transform:u,previousViewportZoom:0,previousTime:0})}_runTransformFeedback(){let{initialized:e}=this.state;if(!e)return;let{device:t,viewport:i,timeline:n}=this.context,{imageTexture:o,imageTexture2:a,imageSmoothing:s,imageInterpolation:l,imageWeight:c,imageType:A,imageUnscale:g,imageMinValue:u,imageMaxValue:d,bounds:p,color:h,maxAge:f,speedFactor:m}=t6(this.props,nW),{paletteTexture:v,paletteBounds:C,currentNumParticles:y,numAgedInstances:I,sourcePositions:x,targetPositions:E,sourceColors:b,targetColors:w,transform:B,previousViewportZoom:P,previousTime:T}=this.state;if(!(o&&"number"==typeof y&&"number"==typeof I&&x&&E&&b&&w&&B))return;let Q=n.getTime();if("number"==typeof T&&Q<T+1e3/30)return;let _=iJ(i),S=iJ(i)?iZ(i):void 0,M=iJ(i)?iq(i):void 0,L=iJ(i)?void 0:ij(i),O=2**(4*("number"==typeof P?P-iK(i):0)),D=m/2**(iK(i)+7);B.model.shaderInputs.setProps({[i5.name]:{viewportGlobe:_,bounds:p,_imageCoordinateSystem:r.COORDINATE_SYSTEM.LNGLAT},[i8.name]:{imageTexture:o??iV(t),imageTexture2:a??iV(t),imageSmoothing:s,imageInterpolation:l,imageWeight:c,imageType:A,imageUnscale:g,imageMinValue:u,imageMaxValue:d},[i7.name]:{paletteTexture:v??iV(t),paletteBounds:C,paletteColor:h},[nz.name]:{viewportGlobe:_,viewportGlobeCenter:S,viewportGlobeRadius:M,viewportBounds:L,viewportZoomChangeFactor:O,numParticles:y,maxAge:f,speedFactor:D,time:Q,seed:Math.random()}}),B.run({clearColor:!1,clearDepth:!1,clearStencil:!1,depthReadOnly:!0,stencilReadOnly:!0});let R=t.createCommandEncoder();R.copyBufferToBuffer({sourceBuffer:x,sourceOffset:0,destinationBuffer:E,destinationOffset:4*y*3,size:4*I*3}),R.copyBufferToBuffer({sourceBuffer:b,sourceOffset:0,destinationBuffer:w,destinationOffset:4*y*4,size:4*I*4});let k=R.finish();t.submit(k),R.destroy(),this._swapTransformFeedback(),this.state.previousViewportZoom=iK(i),this.state.previousTime=Q}_swapTransformFeedback(){let{sourcePositions:e,targetPositions:t,sourceColors:i,targetColors:n,transform:o}=this.state;e&&t&&i&&n&&o&&(this.state.sourcePositions=t,this.state.targetPositions=e,this.state.sourceColors=n,this.state.targetColors=i,o.model.setAttributes({[nF]:t,[nN]:n}),o.transformFeedback.setBuffers({[nU]:e,[nV]:i}))}_resetTransformFeedback(){let{initialized:e}=this.state;if(!e)return;let{numInstances:t,sourcePositions:i,targetPositions:n,sourceColors:o,targetColors:a}=this.state;"number"==typeof t&&i&&n&&o&&a&&(i.write(new Float32Array(3*t)),n.write(new Float32Array(3*t)),o.write(new Float32Array(4*t)),a.write(new Float32Array(4*t)))}_deleteTransformFeedback(){let{initialized:e}=this.state;if(!e)return;let{sourcePositions:t,targetPositions:i,sourceColors:n,targetColors:o,opacities:a,transform:r}=this.state;t&&i&&n&&o&&a&&r&&(t.destroy(),i.destroy(),n.destroy(),o.destroy(),a.destroy(),r.destroy(),this.setState({initialized:!1,currentNumParticles:void 0,sourcePositions:void 0,targetPositions:void 0,sourceColors:void 0,targetColors:void 0,opacities:void 0,transform:void 0}))}
1469_updatePalette(){let{device:e}=this.context,{palette:t}=t6(this.props,nW);if(!t)return void this.setState({paletteTexture:void 0,paletteBounds:void 0});let{paletteBounds:i,paletteTexture:n}=iX(e,(0,a.H)(t));this.setState({paletteTexture:n,paletteBounds:i})}step(){this._runTransformFeedback(),this.setNeedsRedraw()}clear(){this._resetTransformFeedback(),this.setNeedsRedraw()}}nJ.layerName="ParticleLineLayer",nJ.defaultProps=nW;let nG={...nJ.defaultProps,imageTexture:void 0,imageTexture2:void 0,image:{type:"object",value:null},image2:{type:"object",value:null}};class nZ extends s.Z{renderLayers(){let{device:e}=this.context,{props:t,imageTexture:i,imageTexture2:n}=this.state;return t&&i?[new nJ(this.props,this.getSubLayerProps({id:"line",data:[],imageTexture:i,imageTexture2:n,parameters:{cullMode:"front",depthCompare:"always",...this.props.parameters},image:iV(e),image2:iV(e)}))]:[]}updateState(e){let{image:t,image2:i,imageUnscale:n,bounds:o}=e.props;if(super.updateState(e),t&&n&&!(t.data instanceof Uint8Array||t.data instanceof Uint8ClampedArray))throw Error("imageUnscale can be applied to Uint8 data only");if(t!==e.oldProps.image||i!==e.oldProps.image2){let{device:e}=this.context,{image:t,image2:i}=this.props,n=t?iU(e,t,iO(o)):null,a=i?iU(e,i,iO(o)):null;this.setState({imageTexture:n,imageTexture2:a})}this.setState({props:e.props})}}nZ.layerName="ParticleLayer",nZ.defaultProps=nG;class nq{addTo(e){e.appendChild(this.onAdd())}prependTo(e){e.prepend(this.onAdd())}remove(){this.onRemove()}updateConfig(e){this.setConfig({...this.getConfig(),...e})}}function nj(e,t){void 0===t&&(t={});var i=t.insertAt;if(e&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===i&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(document.createTextNode(e))}}nj(".weatherlayers-legend-control{margin:10px;pointer-events:auto}.weatherlayers-legend-control>div{background:hsla(0,0%,100%,.5);color:rgba(0,0,0,.75);display:inline-block;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;line-height:14px;width:100%}.weatherlayers-legend-control header,.weatherlayers-legend-control main{margin:5px 10px}.weatherlayers-legend-control header{font-weight:700}.weatherlayers-legend-control__legend{margin-top:5px;vertical-align:middle;width:100%}");let nK="weatherlayers-legend-control",nH=`${nK}__text`;class nX extends nq{constructor(e={}){super(),this._container=void 0,this._config=e}onAdd(){return this._container=document.createElement("div"),this._container.classList.add(nK),this.setConfig(this._config),this._container}onRemove(){this._container&&this._container.parentNode&&(this._container.parentNode.removeChild(this._container),this._container=void 0)}getConfig(){return{...this._config}}setConfig(e){if(!this._container||!e.title||!e.unitFormat||!e.palette||this._container.children.length>0&&this._config.width===e.width&&this._config.ticksCount===e.ticksCount&&this._config.title===e.title&&this._config.unitFormat===e.unitFormat&&this._config.palette===e.palette)return;this._config=e;let t=this._config.width??300,i=this._config.ticksCount??6,n=this._config.title,o=this._config.unitFormat,r=this._config.palette,s=(0,a.H)(r),l=s.domain(),c=[l[0],l[l.length-1]],A=(0,a.w)(s).toDataURL();this._container.innerHTML="",this._container.style.width=`${t}px`;let g=document.createElement("div");this._container.appendChild(g);let u=document.createElement("header");g.appendChild(u);let d=document.createElement("span");d.classList.add(nH),d.innerHTML=`${n} [${tq(o)}]`,u.appendChild(d);let p=document.createElement("main");g.appendChild(p);let h="http://www.w3.org/2000/svg",f=document.createElementNS(h,"svg");f.setAttribute("height","24px"),f.setAttribute("class","weatherlayers-legend-control__legend"),p.appendChild(f);let m=document.createElementNS(h,"image");m.setAttribute("href",A),m.setAttribute("width","100%"),m.setAttribute("height","5"),m.setAttribute("preserveAspectRatio","none"),f.appendChild(m);let v=(c[1]-c[0])/(i-1);for(let e=0;e<i;e++){let t=c[0]+e*v,n=tZ(t,o),a=document.createElementNS(h,"g");a.style.transform=`translate(${(t-c[0])/(c[1]-c[0])*100}%, 0)`,f.appendChild(a);let r=document.createElementNS(h,"line");r.setAttribute("y1","0"),r.setAttribute("y2","10"),r.style.stroke="currentColor",0===e?r.style.transform="translate(0.5px, 0)":e===i-1&&(r.style.transform="translate(-0.5px, 0)"),a.appendChild(r);let s=document.createElementNS(h,"text");s.innerHTML=n,s.setAttribute("x","0"),s.setAttribute("y","22"),s.style.textAnchor=0===e?"start":e===i-1?"end":"middle",a.appendChild(s)}}}nj(".weatherlayers-tooltip-control{margin:10px;pointer-events:auto}.weatherlayers-tooltip-control>
1469div{align-items:center;background:hsla(0,0%,100%,.5);color:rgba(0,0,0,.75);display:inline-flex;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;line-height:20px;padding:0 5px;white-space:nowrap}.weatherlayers-tooltip-control.follow-cursor{margin:0;pointer-events:none;position:absolute;z-index:1}.weatherlayers-tooltip-control.follow-cursor>div{position:absolute}.leaflet-map-pane .weatherlayers-tooltip-control.follow-cursor{z-index:101}.weatherlayers-tooltip-control.follow-cursor:before{content:\"\";height:0;position:absolute;width:0}.weatherlayers-tooltip-control.follow-cursor[data-follow-cursor-placement=BOTTOM]:before{border-bottom:5px solid hsla(0,0%,100%,.5);border-left:5px solid transparent;border-right:5px solid transparent;left:calc(50% - 5px);top:-5px}.weatherlayers-tooltip-control.follow-cursor[data-follow-cursor-placement=TOP]:before{border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid hsla(0,0%,100%,.5);left:calc(50% - 5px);top:0}.weatherlayers-tooltip-control.follow-cursor[data-follow-cursor-placement=RIGHT]:before{border-bottom:5px solid transparent;border-right:5px solid hsla(0,0%,100%,.5);border-top:5px solid transparent;left:-5px;top:calc(50% - 5px)}.weatherlayers-tooltip-control.follow-cursor[data-follow-cursor-placement=LEFT]:before{border-bottom:5px solid transparent;border-left:5px solid hsla(0,0%,100%,.5);border-top:5px solid transparent;left:0;top:calc(50% - 5px)}.weatherlayers-tooltip-control .weatherlayers-tooltip-control__direction{align-items:center;display:inline-flex;margin-left:4px}.weatherlayers-tooltip-control .weatherlayers-tooltip-control__direction-icon{background:no-repeat 50%/contain;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30' style='enable-background:new 0 0 30 30' xml:space='preserve'%3E%3Cpath d='M3.74 14.5c0-2.04.51-3.93 1.52-5.66s2.38-3.1 4.11-4.11 3.61-1.51 5.64-1.51c1.52 0 2.98.3 4.37.89s2.58 1.4 3.59 2.4 1.81 2.2 2.4 3.6.89 2.85.89 4.39c0 1.52-.3 2.98-.89 4.37s-1.4 2.59-2.4 3.59-2.2 1.8-3.59 2.39-2.84.89-4.37.89c-1.53 0-3-.3-4.39-.89s-2.59-1.4-3.6-2.4-1.8-2.2-2.4-3.58-.88-2.84-.88-4.37zm2.48 0c0 2.37.86 4.43 2.59 6.18 1.73 1.73 3.79 2.59 6.2 2.59 1.58 0 3.05-.39 4.39-1.18s2.42-1.85 3.21-3.2 1.19-2.81 1.19-4.39-.4-3.05-1.19-4.4-1.86-2.42-3.21-3.21-2.81-1.18-4.39-1.18-3.05.39-4.39 1.18S8.2 8.75 7.4 10.1s-1.18 2.82-1.18 4.4zm4.89 5.85 3.75-13.11c.01-.1.06-.15.15-.15s.14.05.15.15l3.74 13.11c.04.11.03.19-.02.25s-.13.06-.24 0l-3.47-1.3c-.1-.04-.2-.04-.29 0l-3.5 1.3c-.1.06-.17.06-.21 0s-.08-.15-.06-.25z'/%3E%3C/svg%3E\");display:inline-block;height:20px;opacity:.75;vertical-align:middle;width:20px}.weatherlayers-tooltip-control .weatherlayers-tooltip-control__direction-text{margin-left:2px}.weatherlayers-tooltip-control:not(.has-direction) .weatherlayers-tooltip-control__direction,.weatherlayers-tooltip-control:not(.has-value){display:none}");let nY="weatherlayers-tooltip-control",n$=`${nY}__value`,n0=`${nY}__direction`,n1=`${nY}__direction-icon`,n2=`${nY}__direction-text`;class n3 extends nq{constructor(e={}){super(),this._container=void 0,this._value=void 0,this._direction=void 0,this._directionIcon=void 0,this._directionText=void 0,this._config=e}onAdd(){return this._container=document.createElement("div"),this._container.classList.add(nY),this.setConfig(this._config),this._container}onRemove(){this._container&&this._container.parentNode&&(this._container.parentNode.removeChild(this._container),this._container=void 0)}getConfig(){return{...this._config}}setConfig(e){if(!this._container||!e.unitFormat||this._container.children.length>0&&this._config.directionType===e.directionType&&this._config.directionFormat===e.directionFormat&&this._config.unitFormat===e.unitFormat&&this._config.followCursor===e.followCursor&&this._config.followCursorOffset===e.followCursorOffset&&this._config.followCursorPlacement===e.followCursorPlacement)return;this._config=e,this._container.innerHTML="";let t=document.createElement("div");
1469this._container.appendChild(t),this._value=document.createElement("span"),this._value.classList.add(n$),t.appendChild(this._value),this._direction=document.createElement("span"),this._direction.classList.add(n0),t.appendChild(this._direction),this._directionIcon=document.createElement("span"),this._directionIcon.classList.add(n1),this._direction.appendChild(this._directionIcon),this._directionText=document.createElement("span"),this._directionText.classList.add(n2),this._direction.appendChild(this._directionText)}update(e){if(!(this._container&&this._value&&this._directionIcon&&this._directionText))return;let{value:t,direction:i}=e??{};this._container.classList.toggle("follow-cursor",this._config.followCursor??!1),this._container.setAttribute("data-follow-cursor-placement",this._config.followCursorPlacement??ih.BOTTOM),this._container.classList.toggle("has-value",void 0!==t),this._container.classList.toggle("has-direction",void 0!==i),this._value.innerHTML=void 0!==t?tj(t,this._config.unitFormat):"",void 0!==i?(this._directionIcon.style.transform=`rotate(${(i+180)%360}deg)`,this._directionText.innerHTML=tK(i,this._config.directionType??tW.INWARD,this._config.directionFormat??tJ.VALUE)):(this._directionIcon.style.transform="",this._directionText.innerHTML="")}updatePickingInfo(e){if(!this._container||!this._value||!this._direction)return;if(!e)return void this.update(void 0);this.update(e.raster);let t=void 0!==e.raster?.direction,i=this._container.firstChild;if(this._config.followCursor){let n=i.getBoundingClientRect(),o=this._value.getBoundingClientRect(),a=this._config.followCursorOffset??16,r=this._config.followCursorPlacement??ih.BOTTOM,s=e.x,l=e.y;if(r===ih.BOTTOM)l+=a;else if(r===ih.TOP)l-=a;else if(r===ih.RIGHT)s+=a;else{if(r!==ih.LEFT)throw Error(`Invalid placement ${r}`);s-=a}if(this._container.style.left=`${s}px`,this._container.style.top=`${l}px`,r===ih.BOTTOM||r===ih.TOP){let e=parseFloat(window.getComputedStyle(i).paddingLeft),n=parseFloat(window.getComputedStyle(this._direction).marginLeft),a=-(e+(t?o.width+n:o.width/2));i.style.left=`${a}px`}if(r===ih.RIGHT||r===ih.LEFT){let e=-n.height/2;i.style.top=`${e}px`}if(r===ih.TOP){let e=-n.height;i.style.top=`${e}px`}if(r===ih.LEFT){let e=-n.width;i.style.left=`${e}px`}document.addEventListener("mousedown",()=>this.update(void 0),{once:!0})}else this._container.style.left="",this._container.style.top="",i.style.left="",i.style.top=""}}nj(".weatherlayers-timeline-control{margin:10px;pointer-events:auto}.weatherlayers-timeline-control>div{background:hsla(0,0%,100%,.5);color:rgba(0,0,0,.75);display:inline-block;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;line-height:14px;width:100%}.weatherlayers-timeline-control footer,.weatherlayers-timeline-control header,.weatherlayers-timeline-control main{margin:5px 10px;text-align:center}.weatherlayers-timeline-control header{font-weight:700}.weatherlayers-timeline-control footer{display:flex;gap:10px}.weatherlayers-timeline-control__progress-input{margin:-2px 0 2px;vertical-align:middle;width:100%}.weatherlayers-timeline-control__end-datetime,.weatherlayers-timeline-control__start-datetime{flex:0 0}.weatherlayers-timeline-control__buttons{flex:1 0}.weatherlayers-timeline-control__start-datetime{text-align:left}.weatherlayers-timeline-control__end-datetime{text-align:right}.weatherlayers-timeline-control__button{background:no-repeat 50%/contain;display:inline-block;height:16px;vertical-align:middle;width:16px}.weatherlayers-timeline-control__button+.weatherlayers-timeline-control__button{margin-left:5px}.weatherlayers-timeline-control__play-button{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1576 927 248 1665q-23 13-39.5 3t-16.5-36V160q0-26 16.5-36t39.5 3l1328 738q23 13 23 31t-23 31z'/%3E%3C/svg%3E\")}.weatherlayers-timeline-control__pause-button{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1664 192v1408q0 26-19 45t-45 19h-512q-26 0-45-19t-19-45V192q0-26 19-45t45-19h512q26 0 45 19t19 45zm-896 0v1408q0 26-19 45t-45 19H192q-26 0-45-19t-19-45V192q0-26 19-45t45-19h512q26 0 45 19t19 45z'/%3E%3C/svg%3E\")}.weatherlayers-timeline-control__step-backward-button{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1363 141q19-19 32-13t13 32v1472q0 26-13 32t-32-13L653 941q-9-9-13-19v678q0 26-19 45t-45 19H448q-26 0-45-19t-19-45V192q0-26 19-45t45-19h128q26 0 45 19t19 45v678q4-10 13-19z'/%3E%3C/svg%3E\")}.weatherlayers-timeline-control__step-forward-button{background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='1792' height='1792' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M429 1651q-19 19-32 13t-13-32V160q0-26 13-32t32 13l710 710q9 9 13 19V192q0-26 19-45t45-19h128q26 0 45 19t19 45v1408q0 26-19 45t-45 19h-128q-26 0-45-19t-19-45V922q-4 10-13 19z'/%3E%3C/svg%3E\")}.weatherlayers-timeline-control__loader{display:block;margin-top:2px}.weatherlayers-timeline-control__loader-icon{background:no-repeat 50%/contain;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' style='margin:auto;background:0 0;display:block;
1469shape-rendering:auto' width='16' height='16' viewBox='0 0 100 100' preserveAspectRatio='xMidYMid'%3E%3Ccircle cx='50' cy='50' fill='none' stroke='rgba(0, 0, 0, 0.4)' stroke-width='10' r='25' stroke-dasharray='117.80972450961724 41.269908169872416'%3E%3CanimateTransform attributeName='transform' type='rotate' repeatCount='indefinite' dur='1s' values='0 50 50;360 50 50' keyTimes='0;1'/%3E%3C/circle%3E%3C/svg%3E\");display:inline-block;height:16px;vertical-align:middle;width:16px}.weatherlayers-timeline-control__loader-text{color:rgba(0,0,0,.4);margin-left:2px;vertical-align:middle}.weatherlayers-timeline-control.loading *{pointer-events:none}.weatherlayers-timeline-control.running .weatherlayers-timeline-control__play-button,.weatherlayers-timeline-control:not(.running) .weatherlayers-timeline-control__pause-button{display:none}.weatherlayers-timeline-control:not(.loading) .weatherlayers-timeline-control__loader{visibility:hidden}");let n4="weatherlayers-timeline-control",n5=`${n4}__current-datetime`,n6=`${n4}__progress-input`,n8=`${n4}__start-datetime`,n9=`${n4}__buttons`,n7=`${n4}__end-datetime`,oe=`${n4}__button`,ot=`${n4}__step-backward-button`,oi=`${n4}__play-button`,on=`${n4}__pause-button`,oo=`${n4}__step-forward-button`,oa=`${n4}__loader`,or=`${n4}__loader-icon`,os=`${n4}__loader-text`,ol="loading",oc="running";class oA extends nq{constructor(e={}){super(),this._container=void 0,this._currentDatetime=void 0,this._progressInput=void 0,this._loaderText=void 0,this._loading=!1,this._config=e,this._animation=new t8({onUpdate:()=>this._animationUpdated(),fps:this._config.fps??15})}onAdd(){return this._container=document.createElement("div"),this._container.classList.add(n4),this.setConfig(this._config),this._container}onRemove(){this._container&&this._container.parentNode&&(this._container.parentNode.removeChild(this._container),this._container=void 0,this._currentDatetime=void 0,this._progressInput=void 0)}get loading(){return this._loading}get running(){return this._running}get _running(){return this._animation.running}async toggle(e=!this._running){return e?await this.start():this.pause()}async start(){!this._container||this._loading||this._running||(await this._preload(this._config.datetimes),this._animation.start(),this._container.classList.add(oc),this._updateProgress())}pause(){this._container&&!this._loading&&this._running&&(this._animation.stop(),this._container.classList.remove(oc),this._updateProgress())}stop(){this._container&&this._progressInput&&!this._loading&&this._running&&(this._animation.stop(),this._container.classList.remove(oc),this._progressInput.valueAsNumber=0,this._updateProgress())}reset(){!this._progressInput||this._loading||this._running||(this._progressInput.valueAsNumber=0,this._updateProgress())}async stepBackward(){!this._progressInput||this._loading||this._running||(this._progressInput.value!==this._progressInput.min?this._progressInput.stepDown():this._progressInput.value=this._progressInput.max,await this._preload(this._startEndDatetimes),this._updateProgress())}async stepForward(){!this._progressInput||this._loading||this._running||(this._progressInput.value!==this._progressInput.max?this._progressInput.stepUp():this._progressInput.value=this._progressInput.min,await this._preload(this._startEndDatetimes),this._updateProgress())}get _startEndDatetimes(){if(!this._progressInput)return[];let e=this._config.datetimes[Math.floor(this._progressInput.valueAsNumber)],t=this._config.datetimes[Math.ceil(this._progressInput.valueAsNumber)];return e===t?[e]:[e,t]}_updateProgress(){if(!this._progressInput||!this._currentDatetime)return;let e=ia(this._config.datetimes[Math.floor(this._progressInput.valueAsNumber)],this._config.datetimes[Math.ceil(this._progressInput.valueAsNumber)],this._progressInput.valueAsNumber%1);this._config.datetime=e;let t=this._config.datetimeFormatFunction??ig;this._currentDatetime.innerHTML=t(e),this._config.onUpdate&&this._config.onUpdate(e)}async _progressInputClicked(){this._loading||this._running||(await this._preload(this._startEndDatetimes),this._updateProgress())}_animationUpdated(){this._progressInput&&!this._loading&&this._running&&(this._progressInput.value!==this._progressInput.max?this._progressInput.stepUp():this._progressInput.value=this._progressInput.min,this._updateProgress())}async _preload(e){if(!this._container||!this._loaderText||!this._config.onPreload)return;this._loading=!0,this._container.classList.add(ol);let t=this._config.onPreload(e);if(Array.isArray(t)){let e=0,i=()=>{this._loaderText.innerHTML=`Loading... ${e}/${t.length}`};for(let n of(i(),t))n.then(()=>{e++,i()});await Promise.all(t),this._loaderText.innerHTML=""}else this._loaderText.innerHTML="Loading...",await t,this._loaderText.innerHTML="";this._loading=!1,this._container.classList.remove(ol)}getConfig(){return{...this._config}}setConfig(e){if(!this._container||!e.datetimes||e.datetimes.length<2||!e.datetime||e.datetime<e.datetimes[0]||e.datetime>e.datetimes[e.datetimes.length-1]||this._container.children.length>0&&this._config.width===e.width&&this._config.datetimes.length===e.datetimes.length&&this._config.datetimes.every((t,i)=>t===e.datetimes[i])&&this._config.datetime===e.datetime&&this._config.datetimeInterpolate===e.datetimeInterpolate&&this._config.datetimeFormatFunction===e.datetimeFormatFunction&&this._config.onPreload===e.onPreload&&this._config.onUpdate===e.onUpdate)return;this._config=e;let t=this._config.width??300,i=this._config.datetimes,n=this._config.datetime,o=this._config.datetimeInterpolate??!1,a=this._config.datetimeFormatFunction??ig,r=nb(i,e=>e<=n);if(r<0)throw Error("Invalid state");let s=r<i.length-1?r+1:null,l=ir(i[r],"number"==typeof s?i[r+1]:null,n),c=o?.25:1,A=r+Math.floor(l/c)*c;this._container.innerHTML="",this._container.style.width=`${t}px`;let g=document.createElement("div");this._container.appendChild(g);let u=document.createElement("header");g.appendChild(u),this._currentDatetime=document.createElement("span"),this._currentDatetime.classList.add(n5),this._currentDatetime.innerHTML=a(n),u.appendChild(this._currentDatetime);let d=document.createElement("main");g.appendChild(d);let p=`${n6}-ticks-${nA()}`;this._progressInput=document.createElement("input"),this._progressInput.classList.add(n6),this._progressInput.type="range",this._progressInput.min="0",this._progressInput.max=""+(i.length-1),this._progressInput.step=`${c}`,this._progressInput.valueAsNumber=A,this._progressInput.setAttribute("list",p),this._progressInput.addEventListener("input",()=>this._progressInputClicked()),d.appendChild(this._progressInput);let h=document.createElement("datalist");h.id=p,d.appendChild(h);for(let e=0;e<i.length;e++){let t=document.createElement("option");t.innerHTML=`${e}`,h.appendChild(t)}let f=document.createElement("footer");g.appendChild(f);let m=document.createElement("span");m.classList.add(n8),m.innerHTML=a(i[0]),f.appendChild(m);
1469let v=document.createElement("span");v.classList.add(n9),f.appendChild(v);let C=document.createElement("span");C.classList.add(n7),C.innerHTML=a(i[i.length-1]),f.appendChild(C);let y=document.createElement("a");y.href="javascript:void(0)",y.classList.add(oe),y.classList.add(ot),y.addEventListener("click",()=>this.stepBackward()),v.appendChild(y);let I=document.createElement("a");I.href="javascript:void(0)",I.classList.add(oe),I.classList.add(oi),I.addEventListener("click",()=>this.start()),v.appendChild(I);let x=document.createElement("a");x.href="javascript:void(0)",x.classList.add(oe),x.classList.add(on),x.addEventListener("click",()=>this.pause()),v.appendChild(x);let E=document.createElement("a");E.href="javascript:void(0)",E.classList.add(oe),E.classList.add(oo),E.addEventListener("click",()=>this.stepForward()),v.appendChild(E);let b=document.createElement("span");b.classList.add(oa),v.appendChild(b);let w=document.createElement("span");w.classList.add(or),b.appendChild(w),this._loaderText=document.createElement("span"),this._loaderText.classList.add(os),b.appendChild(this._loaderText)}}nj(".weatherlayers-attribution-control{margin-top:2px;pointer-events:auto}.weatherlayers-attribution-control>div{background:hsla(0,0%,100%,.5);color:rgba(0,0,0,.75);display:inline-block;font-family:Helvetica Neue,Arial,Helvetica,sans-serif;font-size:12px;line-height:20px;padding:0 5px}.weatherlayers-attribution-control a{color:rgba(0,0,0,.75);text-decoration:none}.weatherlayers-attribution-control a:hover{text-decoration:underline}");class og extends nq{constructor(e={}){super(),this._container=void 0,this._config=e}onAdd(){return this._container=document.createElement("div"),this._container.classList.add("weatherlayers-attribution-control"),this.setConfig(this._config),this._container}onRemove(){this._container&&this._container.parentNode&&(this._container.parentNode.removeChild(this._container),this._container=void 0)}getConfig(){return{...this._config}}setConfig(e){if(!this._container||!e.attribution||this._container.children.length>0&&this._config.attribution===e.attribution)return;this._config=e;let t=this._config.attribution;this._container.innerHTML=`<div>${t}</div>`}}nj(".weatherlayers-logo-control{margin:10px;pointer-events:auto}.weatherlayers-logo-control a{background:no-repeat 50%/contain;background-image:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' xml:space='preserve' style='fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:2' viewBox='0 0 131 23'%3E%3Cg opacity='.9'%3E%3Cpath d='M27.391 17.706h2.534l1.736-6.475h.132l1.765 6.475h2.52l2.761-10.569H36.07l-1.384 7.009h-.132l-1.75-7.009H30.65l-1.692 7.009h-.131L27.42 7.137h-2.79l2.761 10.569Zm15.092.19c2.615 0 3.611-1.53 3.846-2.504l.022-.088-2.373.007-.015.029c-.117.213-.564.711-1.428.711-.996 0-1.597-.674-1.619-1.839h5.486v-.747c0-2.49-1.56-4.101-4.014-4.101-2.461 0-4.021 1.633-4.021 4.262v.008c0 2.644 1.56 4.262 4.116 4.262Zm-.036-6.687c.805 0 1.377.52 1.501 1.495h-3.003c.125-.96.703-1.495 1.502-1.495Zm7.028 6.622c1.04 0 1.912-.44 2.271-1.136h.139v1.011h2.549v-5.559c0-1.758-1.282-2.783-3.531-2.783-2.204 0-3.611.989-3.757 2.49l-.007.088h2.351l.014-.037c.154-.41.572-.637 1.253-.637.718 0 1.128.33 1.128.879v.637l-1.78.103c-2.102.132-3.259.988-3.259 2.468v.015c0 1.486 1.069 2.461 2.629 2.461Zm-.132-2.644v-.015c0-.484.403-.791 1.172-.842l1.37-.088v.534c0 .703-.637 1.245-1.458 1.245-.652 0-1.084-.322-1.084-.834Zm9.944 2.534c.49 0 .966-.044 1.237-.103v-1.853a5.19 5.19 0 0 1-.651.029c-.674 0-.982-.293-.982-.908v-3.428h1.633V9.554h-1.
1469633V7.687h-2.6v1.867h-1.245v1.904h1.245v4.014c0 1.597.85 2.249 2.996 2.249Zm2.267-.015h2.593v-4.658c0-.938.498-1.575 1.34-1.575.879 0 1.282.557 1.282 1.546v4.687h2.593V12.44c0-1.956-.945-3.076-2.754-3.076-1.15 0-1.97.571-2.322 1.465h-.139V6.5h-2.593v11.206Zm12.719.19c2.615 0 3.611-1.53 3.846-2.504l.022-.088-2.373.007-.015.029c-.117.213-.564.711-1.428.711-.996 0-1.597-.674-1.619-1.839h5.486v-.747c0-2.49-1.56-4.101-4.014-4.101-2.461 0-4.021 1.633-4.021 4.262v.008c0 2.644 1.56 4.262 4.116 4.262Zm-.036-6.687c.805 0 1.377.52 1.501 1.495h-3.003c.125-.96.703-1.495 1.502-1.495Zm4.816 6.497h2.593v-4.314c0-1.128.71-1.78 1.926-1.78.366 0 .74.052 1.084.139V9.562a2.733 2.733 0 0 0-.879-.132c-1.04 0-1.757.52-1.992 1.421h-.139V9.554h-2.593v8.152Zm6.443 0h7.177v-2.161h-4.489V7.137h-2.688v10.569Zm10.36.125c1.04 0 1.912-.44 2.271-1.136h.139v1.011h2.549v-5.559c0-1.758-1.282-2.783-3.53-2.783-2.205 0-3.611.989-3.758 2.49l-.007.088h2.351l.015-.037c.154-.41.571-.637 1.252-.637.718 0 1.128.33 1.128.879v.637l-1.78.103c-2.102.132-3.259.988-3.259 2.468v.015c0 1.486 1.069 2.461 2.629 2.461Zm-.131-2.644v-.015c0-.484.402-.791 1.171-.842l1.37-.088v.534c0 .703-.637 1.245-1.457 1.245-.652 0-1.084-.322-1.084-.834Zm7.233 5.397c2.3 0 3.589-.82 4.336-3.142l2.571-7.888h-2.74l-1.45 5.911h-.154l-1.45-5.911h-2.863l2.783 8.152-.037.227c-.08.476-.527.747-1.304.747-.212 0-.424 0-.571-.007v1.904c.293.007.586.007.879.007Zm10.896-2.688c2.614 0 3.61-1.53 3.845-2.504l.022-.088-2.373.007-.015.029c-.117.213-.564.711-1.428.711-.996 0-1.597-.674-1.619-1.839h5.486v-.747c0-2.49-1.56-4.101-4.014-4.101-2.461 0-4.021 1.633-4.021 4.262v.008c0 2.644 1.56 4.262 4.117 4.262Zm-.037-6.687c.806 0 1.377.52 1.501 1.495h-3.003c.125-.96.704-1.495 1.502-1.495Zm4.816 6.497h2.593v-4.314c0-1.128.711-1.78 1.926-1.78.367 0 .74.052 1.084.139V9.562a2.733 2.733 0 0 0-.879-.132c-1.04 0-1.757.52-1.992 1.421h-.139V9.554h-2.593v8.152Zm9.468.19c2.212 0 3.735-1.083 3.735-2.775v-.008c0-1.223-.769-1.911-2.454-2.248l-1.406-.279c-.776-.161-1.025-.373-1.025-.739v-.015c0-.454.432-.725 1.076-.725.718 0 1.121.381 1.202.718l.014.051h2.373v-.037c-.044-1.303-1.23-2.475-3.589-2.475-2.19 0-3.581 1.018-3.581 2.644v.007c0 1.245.805 2.066 2.38 2.381l1.406.278c.74.154 1.018.373 1.018.754v.008c0 .439-.446.71-1.142.71-.754 0-1.165-.315-1.318-.732l-.015-.044h-2.52v.051c.162 1.421 1.429 2.475 3.846 2.475Z' style='fill:none;fill-rule:nonzero;stroke:%23000;stroke-opacity:.3;stroke-width:3px' transform='translate(-2.33)'/%3E%3Cpath d='M27.391 17.706h2.534l1.736-6.475h.132l1.765 6.475h2.52l2.761-10.569H36.07l-1.384 7.009h-.132l-1.75-7.009H30.65l-1.692 7.009h-.131L27.42 7.137h-2.79l2.761 10.569Zm15.092.19c2.615 0 3.611-1.53 3.846-2.504l.022-.088-2.373.007-.015.029c-.117.213-.564.711-1.428.711-.996 0-1.597-.674-1.619-1.839h5.486v-.747c0-2.49-1.56-4.101-4.014-4.101-2.461 0-4.021 1.633-4.021 4.262v.008c0 2.644 1.56 4.262 4.116 4.262Zm-.036-6.687c.805 0 1.377.52 1.501 1.495h-3.003c.125-.96.703-1.495 1.502-1.495Zm7.028 6.622c1.04 0 1.912-.44 2.271-1.136h.139v1.011h2.549v-5.559c0-1.758-1.282-2.783-3.531-2.783-2.204 0-3.611.989-3.757 2.49l-.007.088h2.351l.014-.037c.154-.41.572-.637 1.253-.637.718 0 1.128.33 1.128.879v.637l-1.78.103c-2.102.132-3.259.988-3.259 2.468v.015c0 1.486 1.069 2.461 2.629 2.461Zm-.132-2.644v-.015c0-.484.403-.791 1.172-.842l1.37-.088v.534c0 .703-.637 1.245-1.458 1.245-.652 0-1.084-.322-1.084-.834Zm9.944 2.534c.49 0 .966-.044 1.237-.103v-1.853a5.19 5.19 0 0 1-.651.029c-.674 0-.982-.293-.982-.908v-3.428h1.633V9.554h-1.
1469633V7.687h-2.6v1.867h-1.245v1.904h1.245v4.014c0 1.597.85 2.249 2.996 2.249Zm2.267-.015h2.593v-4.658c0-.938.498-1.575 1.34-1.575.879 0 1.282.557 1.282 1.546v4.687h2.593V12.44c0-1.956-.945-3.076-2.754-3.076-1.15 0-1.97.571-2.322 1.465h-.139V6.5h-2.593v11.206Zm12.719.19c2.615 0 3.611-1.53 3.846-2.504l.022-.088-2.373.007-.015.029c-.117.213-.564.711-1.428.711-.996 0-1.597-.674-1.619-1.839h5.486v-.747c0-2.49-1.56-4.101-4.014-4.101-2.461 0-4.021 1.633-4.021 4.262v.008c0 2.644 1.56 4.262 4.116 4.262Zm-.036-6.687c.805 0 1.377.52 1.501 1.495h-3.003c.125-.96.703-1.495 1.502-1.495Zm4.816 6.497h2.593v-4.314c0-1.128.71-1.78 1.926-1.78.366 0 .74.052 1.084.139V9.562a2.733 2.733 0 0 0-.879-.132c-1.04 0-1.757.52-1.992 1.421h-.139V9.554h-2.593v8.152Zm6.443 0h7.177v-2.161h-4.489V7.137h-2.688v10.569Zm10.36.125c1.04 0 1.912-.44 2.271-1.136h.139v1.011h2.549v-5.559c0-1.758-1.282-2.783-3.53-2.783-2.205 0-3.611.989-3.758 2.49l-.007.088h2.351l.015-.037c.154-.41.571-.637 1.252-.637.718 0 1.128.33 1.128.879v.637l-1.78.103c-2.102.132-3.259.988-3.259 2.468v.015c0 1.486 1.069 2.461 2.629 2.461Zm-.131-2.644v-.015c0-.484.402-.791 1.171-.842l1.37-.088v.534c0 .703-.637 1.245-1.457 1.245-.652 0-1.084-.322-1.084-.834Zm7.233 5.397c2.3 0 3.589-.82 4.336-3.142l2.571-7.888h-2.74l-1.45 5.911h-.154l-1.45-5.911h-2.863l2.783 8.152-.037.227c-.08.476-.527.747-1.304.747-.212 0-.424 0-.571-.007v1.904c.293.007.586.007.879.007Zm10.896-2.688c2.614 0 3.61-1.53 3.845-2.504l.022-.088-2.373.007-.015.029c-.117.213-.564.711-1.428.711-.996 0-1.597-.674-1.619-1.839h5.486v-.747c0-2.49-1.56-4.101-4.014-4.101-2.461 0-4.021 1.633-4.021 4.262v.008c0 2.644 1.56 4.262 4.117 4.262Zm-.037-6.687c.806 0 1.377.52 1.501 1.495h-3.003c.125-.96.704-1.495 1.502-1.495Zm4.816 6.497h2.593v-4.314c0-1.128.711-1.78 1.926-1.78.367 0 .74.052 1.084.139V9.562a2.733 2.733 0 0 0-.879-.132c-1.04 0-1.757.52-1.992 1.421h-.139V9.554h-2.593v8.152Zm9.468.19c2.212 0 3.735-1.083 3.735-2.775v-.008c0-1.223-.769-1.911-2.454-2.248l-1.406-.279c-.776-.161-1.025-.373-1.025-.739v-.015c0-.454.432-.725 1.076-.725.718 0 1.121.381 1.202.718l.014.051h2.373v-.037c-.044-1.303-1.23-2.475-3.589-2.475-2.19 0-3.581 1.018-3.581 2.644v.007c0 1.245.805 2.066 2.38 2.381l1.406.278c.74.154 1.018.373 1.018.754v.008c0 .439-.446.71-1.142.71-.754 0-1.165-.315-1.318-.732l-.015-.044h-2.52v.051c.162 1.421 1.429 2.475 3.846 2.475Z' style='fill:%23fff;fill-rule:nonzero' transform='translate(-2.33)'/%3E%3Cpath d='m6.107 9.12-2.749 1.193a.68.68 0 0 0-.408.628c0 .275.16.522.407.629l2.75 1.193-2.749 1.192a.684.684 0 0 0-.408.63c0 .275.16.521.407.628l6.213 2.696a1.103 1.103 0 0 0 .877 0l6.212-2.695a.683.683 0 0 0 .408-.629.682.682 0 0 0-.407-.629l-2.75-1.193 2.749-1.193a.683.683 0 0 0 .409-.629.68.68 0 0 0-.408-.628l-2.75-1.194-1.144.497 3.054 1.326-5.736 2.488a.181.181 0 0 1-.151 0l-5.736-2.489 3.054-1.325-1.144-.496Zm9.713 5.465-5.736 2.489a.189.189 0 0 1-.151 0l-5.736-2.49 3.054-1.325 2.319 1.006a1.09 1.09 0 0 0 .877 0l2.319-1.006 3.054 1.326Zm-2.289-7.966c-.011.04-.039.066-.083.079l-1.207.378v1.206a.122.122 0 0 1-.054.103.128.128 0 0 1-.12.016L10.86 8.03l-.744.978a.13.13 0 0 1-.107.051.134.134 0 0 1-.108-.051l-.744-.978-1.207.371c-.038.015-.078.01-.12-.016a.121.121 0 0 1-.053-.103V7.076l-1.208-.378c-.044-.013-.071-.039-.082-.079-.014-.045-.008-.083.016-.114l.744-.978-.744-.977a.121.121 0 0 1-.016-.114c.011-.04.038-.066.082-.079l1.208-.378V2.773c0-.042.017-.077.053-.103.042-.026.082-.032.12-.016l1.207.371.744-.978A.131.131 0 0 1 10.009 2c.047 0 .083.016.107.047l.744.978 1.207-.371c.039-.016.079-.01.12.016a.122.122 0 0 1 .054.103v1.206l1.207.378c.044.013.072.039.083.079a.119.119 0 0 1-.017.114l-.744.977.744.978c.025.031.031.069.017.114M12.39 5.527c0-.307-.063-.601-.188-.88a2.287 2.287 0 0 0-1.269-1.21 2.422 2.422 0 0 0-.924-.18c-.323 0-.631.06-.924.18a2.284 2.284 0 0 0-1.269 1.21 2.115 2.115 0 0 0-.188.88c0 .308.062.602.188.881a2.284 2.284 0 0 0 1.269 1.21c.293.12.601.18.924.18.322 0 .63-.06.924-.18a2.287 2.287 0 0 0 1.269-1.21c.125-.279.188-.573.188-.881' style='fill:none;fill-rule:nonzero;stroke:%23000;stroke-opacity:.3;stroke-width:2.4px' transform='matrix(1.25 0 0 1.25 -2.188 -1)'/%3E%3Cpath d='m6.107 9.12-2.749 1.193a.68.68 0 0 0-.408.628c0 .275.16.522.407.629l2.75 1.193-2.749 1.192a.684.684 0 0 0-.408.63c0 .275.16.521.407.628l6.213 2.696a1.103 1.103 0 0 0 .877 0l6.212-2.695a.683.683 0 0 0 .408-.629.682.682 0 0 0-.407-.629l-2.75-1.193 2.749-1.193a.683.683 0 0 0 .409-.629.68.68 0 0 0-.408-.628l-2.75-1.194-1.144.497 3.054 1.326-5.736 2.488a.181.181 0 0 1-.151 0l-5.736-2.489 3.054-1.325-1.144-.496Zm9.713 5.465-5.736 2.489a.189.189 0 0 1-.151 0l-5.736-2.49 3.054-1.325 2.319 1.006a1.09 1.09 0 0 0 .877 0l2.319-1.006 3.054 1.326Zm-2.289-7.966c-.011.04-.039.066-.083.079l-1.207.378v1.206a.122.122 0 0 1-.054.103.128.128 0 0 1-.12.016L10.86 8.03l-.744.978a.13.13 0 0 1-.107.051.134.134 0 0 1-.108-.051l-.744-.978-1.207.371c-.038.015-.078.01-.12-.016a.121.121 0 0 1-.053-.103V7.076l-1.208-.378c-.044-.013-.071-.039-.082-.079-.014-.045-.008-.083.016-.114l.744-.978-.744-.977a.121.121 0 0 1-.016-.114c.011-.04.038-.066.082-.079l1.208-.378V2.773c0-.042.017-.077.053-.103.042-.026.082-.032.12-.016l1.207.371.744-.978A.131.131 0 0 1 10.009 2c.047 0 .083.016.107.047l.744.978 1.207-.371c.039-.016.079-.01.12.016a.122.122 0 0 1 .054.103v1.206l1.207.378c.044.013.072.039.083.079a.119.119 0 0 1-.017.114l-.744.977.744.978c.025.031.031.069.017.114M12.39 5.527c0-.307-.063-.601-.188-.88a2.287 2.287 0 0 0-1.269-1.21 2.422 2.422 0 0 0-.924-.18c-.323 0-.631.06-.924.18a2.284 2.284 0 0 0-1.269 1.21 2.115 2.115 0 0 0-.188.88c0 .308.062.602.188.881a2.284 2.284 0 0 0 1.269 1.21c.293.12.601.18.924.18.322 0 .63-.06.924-.18a2.287 2.287 0 0 0 1.269-1.21c.125-.279.188-.573.188-.881' style='fill:%23fff;fill-rule:nonzero' transform='matrix(1.25 0 0 1.25 -2.188 -1)'/%3E%3C/g%3E%3C/svg%3E\");display:inline-block;height:23px;margin:-1.5px;vertical-align:middle;width:131px}");class ou extends nq{constructor(e={}){super(),this._container=void 0,this._config=e}onAdd(){return this._container=document.createElement("div"),this._container.classList.add("weatherlayers-logo-control"),this.setConfig(this._config),this._container}onRemove(){this._container&&this._container.parentNode&&(this._container.parentNode.removeChild(this._container),this._container=void 0)}getConfig(){return{...this._config}}setConfig(e){if(!this._container)return;this._config=e,this._container.innerHTML="";let t=document.createElement("a");t.href="https://weatherlayers.com",t.target="_blank",t.ariaLabel="WeatherLayers",this._container.appendChild(t)}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.