@mapvx/web-kit 1.2.0-develop.12 → 1.2.0-develop.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/cjs/chunks/{DRACOLoader-B7myelzS.cjs → DRACOLoader-B1Y7vbrj.cjs} +2 -2
  2. package/dist/cjs/chunks/{GLTFLoader-Bhlg-PN9.cjs → GLTFLoader-DrrfQ0_F.cjs} +2 -2
  3. package/dist/cjs/chunks/{KTX2Loader-8oVInPCY.cjs → KTX2Loader-BoLi8knA.cjs} +2 -2
  4. package/dist/cjs/chunks/{accessibility-DQMGPqEF.cjs → accessibility-Djzp33ox.cjs} +2 -2
  5. package/dist/cjs/chunks/{back_arrow-BT38PaNs.cjs → back_arrow-BPoJQerl.cjs} +2 -2
  6. package/dist/cjs/chunks/{debug-hooks-DDHLlDXD.cjs → debug-hooks-CMF1BR-2.cjs} +2 -2
  7. package/dist/cjs/chunks/{dist-Dqt88Zla.cjs → dist-B06OgE5W.cjs} +2 -2
  8. package/dist/cjs/chunks/{dist-BsZPOLf6.cjs → dist-DII2Jcfe.cjs} +2 -2
  9. package/dist/cjs/chunks/{dist-CdHuaZdF.cjs → dist-_3MDeFq6.cjs} +2 -2
  10. package/dist/cjs/chunks/{expression-DOSBosTT.cjs → expression-Dq2zVyIz.cjs} +2 -2
  11. package/dist/cjs/chunks/{globe-viewport-CTph-zTi.cjs → globe-viewport-s9VMxxMl.cjs} +2 -2
  12. package/dist/cjs/chunks/{icon-origin-point-BQq_v8fl.cjs → icon-origin-point-B07J_RrC.cjs} +2 -2
  13. package/dist/cjs/chunks/{meshopt_decoder.module-Xc0iTpWr.cjs → meshopt_decoder.module-CedN2Fs4.cjs} +2 -2
  14. package/dist/cjs/chunks/{repeat_icon-DgZwJHQn.cjs → repeat_icon-BwwtBUqw.cjs} +2 -2
  15. package/dist/cjs/chunks/{rolldown-runtime-DCHM1mdG.cjs → rolldown-runtime-S4XI6pHy.cjs} +2 -2
  16. package/dist/cjs/chunks/{shader-type-decoder-ClUxS2uC.cjs → shader-type-decoder-CplMa6Zn.cjs} +2 -2
  17. package/dist/cjs/chunks/{styles-ap7q_oUC.cjs → styles-eVk3as0O.cjs} +2 -2
  18. package/dist/cjs/chunks/{three.module-CZrl_ZUv.cjs → three.module-TyjyfRuV.cjs} +2 -2
  19. package/dist/cjs/chunks/{walking-zHHQi5LZ.cjs → walking-BXmnNjav.cjs} +2 -2
  20. package/dist/cjs/chunks/{webgl-CmboLkDs.cjs → webgl-C3A9O7UB.cjs} +2 -2
  21. package/dist/cjs/chunks/{webgl-device-BXkaCOiH.cjs → webgl-device-CR_IOS1K.cjs} +2 -2
  22. package/dist/cjs/web-kit.cjs +5 -5
  23. package/dist/es/chunks/{DRACOLoader-CNpxxqVh.js → DRACOLoader-D0vU8-Oo.js} +2 -2
  24. package/dist/es/chunks/{GLTFLoader-CbnWtZLU.js → GLTFLoader-DQ80Aq6X.js} +2 -2
  25. package/dist/es/chunks/{KTX2Loader-DA7PMnUh.js → KTX2Loader-Dh9k32r5.js} +2 -2
  26. package/dist/es/chunks/{accessibility-D1G0e3jm.js → accessibility-BG8JCwcH.js} +2 -2
  27. package/dist/es/chunks/{back_arrow-DOtCNdHS.js → back_arrow-CF2VEGV0.js} +2 -2
  28. package/dist/es/chunks/{debug-hooks-Cd_b4Bki.js → debug-hooks-D_XQuFlb.js} +2 -2
  29. package/dist/es/chunks/{dist-DXAjwVD1.js → dist-B7VX6I_c.js} +2 -2
  30. package/dist/es/chunks/{dist-DXRF-lm8.js → dist-CQzG76mh.js} +2 -2
  31. package/dist/es/chunks/{dist-CrKfguaO.js → dist-CcWEArpE.js} +2 -2
  32. package/dist/es/chunks/{expression-6f6kc1i6.js → expression-C7yC7-03.js} +2 -2
  33. package/dist/es/chunks/{globe-viewport-Brth2aT0.js → globe-viewport-D0Ev9_5m.js} +2 -2
  34. package/dist/es/chunks/{icon-origin-point-DWIRQVPT.js → icon-origin-point-C23InZ8B.js} +2 -2
  35. package/dist/es/chunks/{meshopt_decoder.module-Ch7mmZHA.js → meshopt_decoder.module-CrrPmGGq.js} +2 -2
  36. package/dist/es/chunks/{repeat_icon-D5mfHUaL.js → repeat_icon-BIa50JSA.js} +2 -2
  37. package/dist/es/chunks/{rolldown-runtime-BptZgroH.js → rolldown-runtime-CDBfnOLQ.js} +2 -2
  38. package/dist/es/chunks/{shader-type-decoder-CQKC8yW9.js → shader-type-decoder-CmsRL_mF.js} +2 -2
  39. package/dist/es/chunks/{styles-Be_VFWZ4.js → styles-CU6-Ggto.js} +2 -2
  40. package/dist/es/chunks/{three.module-CrfgWCl8.js → three.module-Df6wkceO.js} +2 -2
  41. package/dist/es/chunks/{walking-BRSMxmlG.js → walking-BY9QNI9o.js} +2 -2
  42. package/dist/es/chunks/{webgl-device-6J3R62SY.js → webgl-device-CjfmtXLr.js} +2 -2
  43. package/dist/es/chunks/{webgl-ClUuONJn.js → webgl-y_Wz0lFW.js} +2 -2
  44. package/dist/es/web-kit.mjs +5 -5
  45. package/dist/iife/web-kit.iife.js +3 -3
  46. package/dist/sw/mvx-tiles-sw.js +82 -49
  47. package/dist/types/index.d.ts +22 -22
  48. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- /*! Web-kit v1.2.0-develop.12 | (c) 2026 MapVX */
2
- !function(){try{var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e=(new t.Error).stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="521577a3-8ae2-4368-895f-42f9c0d5c5ed",t._sentryDebugIdIdentifier="sentry-dbid-521577a3-8ae2-4368-895f-42f9c0d5c5ed")}catch(t){}}();const t=require("./debug-hooks-DDHLlDXD.cjs"),e=require("./shader-type-decoder-ClUxS2uC.cjs"),i=require("./globe-viewport-CTph-zTi.cjs");var s={dataType:null,batchType:null,id:"JSON",name:"JSON",module:"",version:"",options:{},extensions:["json","geojson"],mimeTypes:["application/json","application/geo+json"],testText:function(t){const e=t[0],i=t[t.length-1];return"{"===e&&"}"===i||"["===e&&"]"===i},parseTextSync:JSON.parse};var n=function(){const e="9.4.1",n=globalThis.deck&&globalThis.deck.VERSION;if(n&&n!==e)throw new Error(`deck.gl - multiple versions detected: ${n} vs ${e}`);return n||(t.defaultLogger.log(1,`deck.gl ${e}`)(),globalThis.deck={...globalThis.deck,VERSION:e,version:e,log:t.defaultLogger,_registerLoggers:t.register},t.registerLoaders([s,[i.ImageLoader,{imagebitmap:{premultiplyAlpha:"none"}}]])),e}(),r="No matching device found. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.",o=class i{static defaultProps={...t.DEVICE_DEFAULT_PROPS,type:"best-available",adapters:void 0,waitForPageLoad:!0};stats=t.lumaStats;log=e.log;VERSION="9.4.2";spector;preregisteredAdapters=new Map;constructor(){if(globalThis.luma){if(globalThis.luma.VERSION!==this.VERSION)throw e.log.error(`Found luma.gl ${globalThis.luma.VERSION} while initialzing ${this.VERSION}`)(),e.log.error("'yarn why @luma.gl/core' can help identify the source of the conflict")(),new Error("luma.gl - multiple versions detected: see console log");e.log.error("This version of luma.gl has already been initialized")()}e.log.log(1,`${this.VERSION} - set luma.log.level=1 (or higher) to trace rendering`)(),globalThis.luma=this}async createDevice(t={}){const e={...i.defaultProps,...t},s=this.selectAdapter(e.type,e.adapters);if(!s)throw new Error(r);return e.waitForPageLoad&&await s.pageLoaded,await s.create(e)}async attachDevice(t,e){const i=this._getTypeFromHandle(t,e.adapters),s=i&&this.selectAdapter(i,e.adapters);if(!s)throw new Error(r);return await(s?.attach?.(t,e))}registerAdapters(t){for(const e of t)this.preregisteredAdapters.set(e.type,e)}getSupportedAdapters(t=[]){const e=this._getAdapterMap(t);return Array.from(e).map(([,t])=>t).filter(t=>t.isSupported?.()).map(t=>t.type)}getBestAvailableAdapterType(t=[]){const e=["webgpu","webgl","null"],i=this._getAdapterMap(t);for(const s of e)if(i.get(s)?.isSupported?.())return s;return null}selectAdapter(t,e=[]){let i=t;"best-available"===t&&(i=this.getBestAvailableAdapterType(e));const s=this._getAdapterMap(e);return i&&s.get(i)||null}enforceWebGL2(t=!0,i=[]){const s=this._getAdapterMap(i).get("webgl");s||e.log.warn("enforceWebGL2: webgl adapter not found")(),s?.enforceWebGL2?.(t)}setDefaultDeviceProps(t){Object.assign(i.defaultProps,t)}_getAdapterMap(t=[]){const e=new Map(this.preregisteredAdapters);for(const i of t)e.set(i.type,i);return e}_getTypeFromHandle(t,i=[]){return t instanceof WebGL2RenderingContext?"webgl":"undefined"!=typeof GPUDevice&&t instanceof GPUDevice||t?.queue?"webgpu":null===t?"null":(t instanceof WebGLRenderingContext?e.log.warn("WebGL1 is not supported",t)():e.log.warn("Unknown handle type",t)(),null)}},a=new o,h=class{get pageLoaded(){return function(){l||(l=d()||"undefined"==typeof window?Promise.resolve():new Promise(t=>window.addEventListener("load",()=>t())));return l}()}},c=e.isBrowser()&&"undefined"!=typeof document,d=()=>c&&"complete"===document.readyState,l=null;var p="layout(std140) uniform layerUniforms {\n uniform float opacity;\n} layer;\n",u={name:"layer",source:"struct LayerUniforms {\n opacity: f32,\n};\n\n@group(0) @binding(auto)\nvar<uniform> layer: LayerUniforms;\n",vs:p,fs:p,getUniforms:t=>({opacity:Math.pow(t.opacity,1/2.2)}),uniformTypes:{opacity:"f32"}},g="\nlayout(std140) uniform shadowUniforms {\n bool drawShadowMap;\n bool useShadowMap;\n vec4 color;\n highp int lightId;\n float lightCount;\n mat4 viewProjectionMatrix0;\n mat4 viewProjectionMatrix1;\n vec4 projectCenter0;\n vec4 projectCenter1;\n} shadow;\n",v=`\n${g}\n\nconst int max_lights = 2;\n\nout vec3 shadow_vPosition[max_lights];\n\nvec4 shadow_setVertexPosition(vec4 position_commonspace) {\n mat4 viewProjectionMatrices[max_lights];\n viewProjectionMatrices[0] = shadow.viewProjectionMatrix0;\n viewProjectionMatrices[1] = shadow.viewProjectionMatrix1;\n vec4 projectCenters[max_lights];\n projectCenters[0] = shadow.projectCenter0;\n projectCenters[1] = shadow.projectCenter1;\n\n if (shadow.drawShadowMap) {\n return project_common_position_to_clipspace(position_commonspace, viewProjectionMatrices[shadow.lightId], projectCenters[shadow.lightId]);\n }\n if (shadow.useShadowMap) {\n for (int i = 0; i < max_lights; i++) {\n if(i < int(shadow.lightCount)) {\n vec4 shadowMap_position = project_common_position_to_clipspace(position_commonspace, viewProjectionMatrices[i], projectCenters[i]);\n shadow_vPosition[i] = (shadowMap_position.xyz / shadowMap_position.w + 1.0) / 2.0;\n }\n }\n }\n return gl_Position;\n}\n\n`,m=`\n${g}\n\nconst int max_lights = 2;\nuniform sampler2D shadow_uShadowMap0;\nuniform sampler2D shadow_uShadowMap1;\n\nin vec3 shadow_vPosition[max_lights];\n\nconst vec4 bitPackShift = vec4(1.0, 255.0, 65025.0, 16581375.0);\nconst vec4 bitUnpackShift = 1.0 / bitPackShift;\nconst vec4 bitMask = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n\nfloat shadow_getShadowWeight(vec3 position, sampler2D shadowMap) {\n vec4 rgbaDepth = texture(shadowMap, position.xy);\n\n float z = dot(rgbaDepth, bitUnpackShift);\n return smoothstep(0.001, 0.01, position.z - z);\n}\n\nvec4 shadow_filterShadowColor(vec4 color) {\n if (shadow.drawShadowMap) {\n vec4 rgbaDepth = fract(gl_FragCoord.z * bitPackShift);\n rgbaDepth -= rgbaDepth.gbaa * bitMask;\n return rgbaDepth;\n }\n if (shadow.useShadowMap) {\n float shadowAlpha = 0.0;\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[0], shadow_uShadowMap0);\n if(shadow.lightCount > 1.0) {\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[1], shadow_uShadowMap1);\n }\n shadowAlpha *= shadow.color.a / shadow.lightCount;\n float blendedAlpha = shadowAlpha + color.a * (1.0 - shadowAlpha);\n\n return vec4(\n mix(color.rgb, shadow.color.rgb, shadowAlpha / blendedAlpha),\n blendedAlpha\n );\n }\n return color;\n}\n\n`,f=t.memoize(function({viewport:e,center:i}){return new t.Matrix4(e.viewProjectionMatrix).invert().transform(i)}),w=t.memoize(function({viewport:e,shadowMatrices:i}){const s=[],n=function(e){const{width:i,height:s,pixelUnprojectionMatrix:n}=e,r=[[0,0],[i,0],[i,s],[0,s]],o=r.map(([e,i])=>t.pixelsToWorld([e,i,-1],n)),a=r.map(([e,i])=>t.pixelsToWorld([e,i,1],n));if(!e.isGeospatial)return o.concat(a);const h=o.concat(a).filter(t=>t[2]>=0);for(let t=0;t<4;t++){const e=(t+1)%4;for(const[i,s]of[[o[t],a[t]],[o[t],o[e]],[a[t],a[e]]])if(i[2]<0!=s[2]<0){const t=i[2]/(i[2]-s[2]);h.push([i[0]+(s[0]-i[0])*t,i[1]+(s[1]-i[1])*t,0])}}return h.length>0?h:o.concat(a)}(e);for(const r of i){const i=r.clone().translate(new t.Vector3(e.center).negate()),o=n.map(t=>i.transform(t)),a=(new t.Matrix4).ortho({left:Math.min(...o.map(t=>t[0])),right:Math.max(...o.map(t=>t[0])),bottom:Math.min(...o.map(t=>t[1])),top:Math.max(...o.map(t=>t[1])),near:Math.min(...o.map(t=>-t[2])),far:Math.max(...o.map(t=>-t[2]))});s.push(a.multiplyRight(r))}return s}),_=[0,0,0,1],y=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0];var P={name:"shadow",dependencies:[t.project_default],vs:v,fs:m,inject:{"vs:DECKGL_FILTER_GL_POSITION":"\n position = shadow_setVertexPosition(geometry.position);\n ","fs:DECKGL_FILTER_COLOR":"\n color = shadow_filterShadowColor(color);\n "},getUniforms:function(e){const{shadowEnabled:i=!0,project:s}=e;if(!(i&&s&&e.shadowMatrices&&e.shadowMatrices.length))return{drawShadowMap:!1,useShadowMap:!1,shadow_uShadowMap0:e.dummyShadowMap,shadow_uShadowMap1:e.dummyShadowMap};const n=t.project_default.getUniforms(s),r=f({viewport:s.viewport,center:n.center}),o=[],a=w({shadowMatrices:e.shadowMatrices,viewport:s.viewport}).slice();for(let c=0;c<e.shadowMatrices.length;c++){const e=a[c],i=e.clone().translate(new t.Vector3(s.viewport.center).negate());n.coordinateSystem===t.getShaderCoordinateSystem("lnglat")&&n.projectionMode===t.PROJECTION_MODE.WEB_MERCATOR?(a[c]=i,o[c]=r):(a[c]=e.clone().multiplyRight(y),o[c]=i.transform(r))}const h={drawShadowMap:Boolean(e.drawToShadowMap),useShadowMap:!!e.shadowMaps&&e.shadowMaps.length>0,color:e.shadowColor||_,lightId:e.shadowLightId||0,lightCount:e.shadowMatrices.length,shadow_uShadowMap0:e.dummyShadowMap,shadow_uShadowMap1:e.dummyShadowMap};for(let t=0;t<a.length;t++)h[`viewProjectionMatrix${t}`]=a[t],h[`projectCenter${t}`]=o[t];for(let t=0;t<2;t++)h[`shadow_uShadowMap${t}`]=e.shadowMaps&&e.shadowMaps[t]||e.dummyShadowMap;return h},uniformTypes:{drawShadowMap:"f32",useShadowMap:"f32",color:"vec4<f32>",lightId:"i32",lightCount:"f32",viewProjectionMatrix0:"mat4x4<f32>",viewProjectionMatrix1:"mat4x4<f32>",projectCenter0:"vec4<f32>",projectCenter1:"vec4<f32>"}},b=[t.geometry_default],C=["vs:DECKGL_FILTER_SIZE(inout vec3 size, VertexGeometry geometry)","vs:DECKGL_FILTER_GL_POSITION(inout vec4 position, VertexGeometry geometry)","vs:DECKGL_FILTER_COLOR(inout vec4 color, VertexGeometry geometry)","fs:DECKGL_FILTER_COLOR(inout vec4 color, FragmentGeometry geometry)"],M=[];function k(e){const i=t.ShaderAssembler.getDefaultShaderAssembler(e);for(const t of b)i.addDefaultModule(t);i._hookFunctions.length=0;const s="glsl"===e?C:M;for(const t of s)i.addShaderHook(t);return i}var x=[255,255,255],S=1,E=0,R=class{constructor(t={}){this.type="ambient";const{color:e=x}=t,{intensity:i=S}=t;this.id=t.id||"ambient-"+E++,this.color=e,this.intensity=i}},L=[255,255,255],D=1,T=[0,0,-1],A=0,I=class{constructor(e={}){this.type="directional";const{color:i=L}=e,{intensity:s=D}=e,{direction:n=T}=e,{_shadow:r=!1}=e;this.id=e.id||"directional-"+A++,this.color=i,this.intensity=s,this.type="directional",this.direction=new t.Vector3(n).normalize().toArray(),this.shadow=r}getProjectedLight(t){return this}},V=class{constructor(t,e={id:"pass"}){const{id:i}=e;this.id=i,this.device=t,this.props={...e}}setProps(t){Object.assign(this.props,t)}render(t){}cleanup(){}},z={depthWriteEnabled:!0,depthCompare:"less-equal",blendColorOperation:"add",blendColorSrcFactor:"one",blendColorDstFactor:"one-minus-src-alpha",blendAlphaOperation:"add",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one-minus-src-alpha"},F=class extends V{constructor(){super(...arguments),this._lastRenderIndex=-1}render(t){this._render(t)}_render(t){const{canvasContext:e=this.device.canvasContext}=t,i=t.target??e.getCurrentFramebuffer(),[s,n]=e.getDrawingBufferSize(),r=t.clearCanvas??!0;let o=t.clearColor??(!!r&&[0,0,0,0]),a=!!r&&1,h=!!r&&0;const c=t.colorMask??15,d={viewport:[0,0,s,n]};t.colorMask&&(d.colorMask=c),t.scissorRect&&(d.scissorRect=t.scissorRect);const{shaderModuleProps:l,viewports:p,views:u,onViewportActive:g,clearStack:v=!0}=t,m=t.pass||"unknown",f="webgpu"===this.device.type;v&&(this._lastRenderIndex=-1);const w=[];if(!p.length)return this.device.beginRenderPass({framebuffer:i,parameters:d,clearColor:o,clearDepth:a,clearStencil:h}).end(),this.device.submit(),w;try{for(const s of p){g?.(s);const n=this._getDrawLayerParams(s,t),r=u&&u[s.id],c=s.subViewports||[s],p=f?c.map(t=>[t]):[c];for(const s of p){const c=this.device.beginRenderPass({framebuffer:i,parameters:d,clearColor:o,clearDepth:a,clearStencil:h});try{for(const o of s){const s=this._drawLayersInViewport(c,{target:i,canvasContext:e,shaderModuleProps:l,viewport:o,view:r,pass:m,layers:t.layers,isPicking:t.isPicking},n);w.push(s)}}finally{c.end(),f&&this.device.submit()}o=!1,a=!1,h=!1}}return w}finally{f||this.device.submit()}}_getDrawLayerParams(t,{layers:e,pass:i,isPicking:s=!1,layerFilter:n,cullRect:r,views:o,effects:a,canvasContext:h=this.device.canvasContext,shaderModuleProps:c},d=!1){const l=[],p=O(this._lastRenderIndex+1),u={layer:e[0],viewport:t,isPicking:s,renderPass:i,cullRect:r},g={};for(let v=0;v<e.length;v++){const s=e[v],r=this._shouldDrawLayer(s,u,n,g),m={shouldDrawLayer:r};r&&!d&&(m.shouldDrawLayer=!0,m.layerRenderIndex=p(s,r),m.shaderModuleProps=this._getShaderModuleProps(s,a,i,h,c),m.layerParameters={..."webgpu"===s.context.device.type?z:null,...s.context.deck?.props.parameters,...o?.[t.id]?.props.parameters,...this.getLayerParameters(s,v,t)}),l[v]=m}return l}_drawLayersInViewport(t,{layers:e,shaderModuleProps:i,pass:s,target:n,canvasContext:r,viewport:o,view:a,isPicking:h},c){const d=function(t,{canvasContext:e=t.canvasContext,shaderModuleProps:i,target:s,viewport:n}){const r=i?.project?.devicePixelRatio??e.cssToDeviceRatio(),[,o]=e.getDrawingBufferSize(),a=s?s.height:o,h=n;return[h.x*r,a-(h.y+h.height)*r,h.width*r,h.height*r]}(this.device,{canvasContext:r,shaderModuleProps:i,target:n,viewport:o});if(a){const{clear:t,clearColor:e,clearDepth:i,clearStencil:s}=a.props;if(t){let t=[0,0,0,0],r=1,o=0;Array.isArray(e)&&!h?t=[...e.slice(0,3),e[3]||255].map(t=>t/255):!1===e&&(t=!1),void 0!==i&&(r=i),void 0!==s&&(o=s),this.device.beginRenderPass({framebuffer:n,parameters:{viewport:d,scissorRect:d},clearColor:t,clearDepth:r,clearStencil:o}).end()}}const l={totalCount:e.length,visibleCount:0,compositeCount:0,pickableCount:0};t.setParameters({viewport:d});for(let u=0;u<e.length;u++){const i=e[u],n=c[u],{shouldDrawLayer:r}=n;if(r&&i.props.pickable&&l.pickableCount++,i.isComposite&&l.compositeCount++,i.isDrawable&&n.shouldDrawLayer){const{layerRenderIndex:e,shaderModuleProps:r,layerParameters:a}=n;l.visibleCount++,this._lastRenderIndex=Math.max(this._lastRenderIndex,e),r.project&&(r.project.viewport=o),i.context.renderPass=t;try{i._drawLayer({renderPass:t,shaderModuleProps:r,uniforms:{layerIndex:e},parameters:a})}catch(p){i.raiseError(p,`drawing ${i} to ${s}`)}}}return l}shouldDrawLayer(t){return!0}getShaderModuleProps(t,e,i){return null}getLayerParameters(t,e,i){return t.props.parameters}_shouldDrawLayer(t,e,i,s){if(!t.props.visible||!this.shouldDrawLayer(t))return!1;e.layer=t;let n=t.parent;for(;n;){if(!n.props.visible||!n.filterSubLayer(e))return!1;e.layer=n,n=n.parent}if(i){const t=e.layer.id;if(t in s||(s[t]=i(e)),!s[t])return!1}return t.activateViewport(e.viewport),!0}_getShaderModuleProps(t,e,i,s,n){const r=s.cssToDeviceRatio(),o=t.internalState?.propsInTransition||t.props,a={layer:o,picking:{isActive:!1},project:{viewport:t.context.viewport,devicePixelRatio:r,modelMatrix:o.modelMatrix,coordinateSystem:o.coordinateSystem,coordinateOrigin:o.coordinateOrigin,autoWrapLongitude:t.wrapLongitude}};if(e)for(const h of e)j(a,h.getShaderModuleProps?.(t,a));for(const h of t.context.defaultShaderModules)h.name in a||(a[h.name]={});return j(a,this.getShaderModuleProps(t,e,a),n)}};function O(t=0,e={}){const i={},s=(n,r)=>{const o=n.props._offset,a=n.id,h=n.parent&&n.parent.id;let c;if(h&&!(h in e)&&s(n.parent,!1),h in i){const t=i[h]=i[h]||O(e[h],e);c=t(n,r),i[a]=t}else Number.isFinite(o)?(c=o+(e[h]||0),i[a]=null):c=t;return r&&c>=t&&(t=c+1),e[a]=c,c};return s}function j(t,...e){for(const i of e)if(i)for(const e in i)t[e]?Object.assign(t[e],i[e]):t[e]=i[e];return t}var B=class extends F{constructor(t,e){super(t,e);const i=t.createTexture({format:"rgba8unorm",width:1,height:1,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),s=t.createTexture({format:"depth16unorm",width:1,height:1});this.fbo=t.createFramebuffer({id:"shadowmap",width:1,height:1,colorAttachments:[i],depthStencilAttachment:s})}delete(){this.fbo&&(this.fbo.destroy(),this.fbo=null)}getShadowMap(){return this.fbo.colorAttachments[0].texture}render(t){const e=this.fbo,i=this.device.canvasContext.cssToDeviceRatio(),s=t.viewports[0],n=s.width*i,r=s.height*i;n===e.width&&r===e.height||e.resize({width:n,height:r}),super.render({...t,clearColor:[1,1,1,1],target:e,pass:"shadow"})}getLayerParameters(t,e,i){return{...t.props.parameters,blend:!1,depthWriteEnabled:!0,depthCompare:"less-equal",depthBias:0}}shouldDrawLayer(t){return!1!==t.props.shadowEnabled}getShaderModuleProps(t,e,i){return{shadow:{project:i.project,drawToShadowMap:!0},lighting:{enabled:!1}}}},N={color:[255,255,255],intensity:1},U=[{color:[255,255,255],intensity:1,direction:[-1,3,-1]},{color:[255,255,255],intensity:.9,direction:[1,-8,-2.5]}],W=[0,0,0,200/255],G=class{constructor(t={}){this.id="lighting-effect",this.shadowColor=W,this.shadow=!1,this.directionalLights=[],this.pointLights=[],this.shadowPasses=[],this.dummyShadowMap=null,this.setProps(t)}setup(t){this.context=t;const{device:e,deck:i}=t;this.shadow&&!this.dummyShadowMap&&(this._createShadowPasses(e),i._addDefaultShaderModule(P),this.dummyShadowMap=e.createTexture({width:1,height:1}))}setProps(t){this.ambientLight=void 0,this.directionalLights=[],this.pointLights=[];for(const e in t){const i=t[e];switch(i.type){case"ambient":this.ambientLight=i;break;case"directional":this.directionalLights.push(i);break;case"point":this.pointLights.push(i)}}this._applyDefaultLights(),this.shadow=this.directionalLights.some(t=>t.shadow),this.context&&(this.shadow||this.cleanup(this.context),this.setup(this.context)),this.props=t}preRender({layers:t,layerFilter:e,viewports:i,onViewportActive:s,views:n}){if(this.shadow){this.shadowMatrices=this._calculateMatrices();for(let r=0;r<this.shadowPasses.length;r++)this.shadowPasses[r].render({layers:t,layerFilter:e,viewports:i,onViewportActive:s,views:n,shaderModuleProps:{shadow:{shadowLightId:r,dummyShadowMap:this.dummyShadowMap,shadowMatrices:this.shadowMatrices}}})}}getShaderModuleProps(t,e){const i=this.shadow?{project:e.project,shadowMaps:this.shadowPasses.map(t=>t.getShadowMap()),dummyShadowMap:this.dummyShadowMap,shadowColor:this.shadowColor,shadowMatrices:this.shadowMatrices}:{},s={enabled:!0,lights:this._getLights(t)},n=t.props.material;return{shadow:i,lighting:s,phongMaterial:n,gouraudMaterial:n}}cleanup(t){for(const e of this.shadowPasses)e.delete();this.shadowPasses.length=0,this.dummyShadowMap&&(this.dummyShadowMap.destroy(),this.dummyShadowMap=null,t.deck._removeDefaultShaderModule(P))}_calculateMatrices(){const e=[];for(const i of this.directionalLights){const s=(new t.Matrix4).lookAt({eye:new t.Vector3(i.direction).negate()});e.push(s)}return e}_createShadowPasses(t){for(let e=0;e<this.directionalLights.length;e++){const i=new B(t);this.shadowPasses[e]=i}}_applyDefaultLights(){const{ambientLight:t,pointLights:e,directionalLights:i}=this;t||0!==e.length||0!==i.length||(this.ambientLight=new R(N),this.directionalLights.push(new I(U[0]),new I(U[1])))}_getLights(t){const e=[];this.ambientLight&&e.push(this.ambientLight);for(const i of this.pointLights)e.push(i.getProjectedLight({layer:t}));for(const i of this.directionalLights)e.push(i.getProjectedLight({layer:t}));return e}},Z=1,H=1,q=class{time=0;channels=new Map;animations=new Map;playing=!1;lastEngineTime=-1;constructor(){}addChannel(t){const{delay:e=0,duration:i=Number.POSITIVE_INFINITY,rate:s=1,repeat:n=1}=t,r=Z++,o={time:0,delay:e,duration:i,rate:s,repeat:n};return this._setChannelTime(o,this.time),this.channels.set(r,o),r}removeChannel(t){this.channels.delete(t);for(const[e,i]of this.animations)i.channel===t&&this.detachAnimation(e)}isFinished(t){const e=this.channels.get(t);return void 0!==e&&this.time>=e.delay+e.duration*e.repeat}getTime(t){if(void 0===t)return this.time;const e=this.channels.get(t);return void 0===e?-1:e.time}setTime(t){this.time=Math.max(0,t);const e=this.channels.values();for(const s of e)this._setChannelTime(s,this.time);const i=this.animations.values();for(const s of i){const{animation:t,channel:e}=s;t.setTime(this.getTime(e))}}play(){this.playing=!0}pause(){this.playing=!1,this.lastEngineTime=-1}reset(){this.setTime(0)}attachAnimation(t,e){const i=H++;return this.animations.set(i,{animation:t,channel:e}),t.setTime(this.getTime(e)),i}detachAnimation(t){this.animations.delete(t)}update(t){this.playing&&(-1===this.lastEngineTime&&(this.lastEngineTime=t),this.setTime(this.time+(t-this.lastEngineTime)),this.lastEngineTime=t)}_setChannelTime(t,e){const i=e-t.delay;i>=t.duration*t.repeat?t.time=t.duration*t.rate:(t.time=Math.max(0,i)%t.duration,t.time*=t.rate)}};var $=0,X={requestAnimationFrame:t=>function(t){const e="undefined"!=typeof window?window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame:null;return e?e.call(window,t):setTimeout(()=>t("undefined"!=typeof performance?performance.now():Date.now()),1e3/60)}(t),cancelAnimationFrame:t=>function(t){const e="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame:null;e?e.call(window,t):clearTimeout(t)}(t)},Y=class e{static defaultAnimationLoopProps={device:null,onAddHTML:()=>"",onInitialize:async()=>null,onRender:()=>{},onFinalize:()=>{},onError:t=>{console.error(t)},stats:void 0,autoResizeViewport:!1,animationFrameProvider:X};device=null;canvas=null;props;animationProps=null;timeline=null;stats;sharedStats;cpuTime;gpuTime;frameRate;display;_needsRedraw="initialized";_initialized=!1;_running=!1;_animationFrameId=null;_nextFramePromise=null;_resolveNextFrame=null;_cpuStartTime=0;_error=null;_lastFrameTime=0;constructor(i){if(this.props={...e.defaultAnimationLoopProps,...i},!(i=this.props).device)throw new Error("No device provided");this.stats=i.stats||new t.Stats({id:"animation-loop-"+$++}),this.sharedStats=a.stats.get("Animation Loop"),this.frameRate=this.stats.get("Frame Rate"),this.frameRate.setSampleSize(1),this.cpuTime=this.stats.get("CPU Time"),this.gpuTime=this.stats.get("GPU Time"),this.setProps({autoResizeViewport:i.autoResizeViewport,animationFrameProvider:i.animationFrameProvider}),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this._onMousemove=this._onMousemove.bind(this),this._onMouseleave=this._onMouseleave.bind(this)}destroy(){this.stop(),this._setDisplay(null),this.device?._disableDebugGPUTime()}delete(){this.destroy()}reportError(t){this._error=t,this.props.onError(t),this.props.onError===e.defaultAnimationLoopProps.onError&&"undefined"!=typeof window&&"undefined"!=typeof ErrorEvent&&window.dispatchEvent(new ErrorEvent("error",{error:t,message:t.message}))}setNeedsRedraw(t){return this._needsRedraw=this._needsRedraw||t,this}needsRedraw(){const t=this._needsRedraw;return this._needsRedraw=!1,t}setProps(t){if("autoResizeViewport"in t&&(this.props.autoResizeViewport=t.autoResizeViewport||!1),"animationFrameProvider"in t){const e=t.animationFrameProvider||X;if(e!==this.props.animationFrameProvider){const t=null!==this._animationFrameId;t&&this._cancelAnimationFrame(),this.props.animationFrameProvider=e,t&&this._requestAnimationFrame()}}return this}async start(){if(this._running)return this;this._running=!0;try{if(!this._initialized){if(this._initialized=!0,await this._initDevice(),this._initialize(),!this._running)return null;await this.props.onInitialize(this._getAnimationProps())}return this._running?(this._cancelAnimationFrame(),this._requestAnimationFrame(),this):null}catch(t){const e=t instanceof Error?t:new Error("Unknown error");throw this.props.onError(e),e}}stop(){if(this._running){const t=this.animationProps;this._cancelAnimationFrame(),this._nextFramePromise=null,this._resolveNextFrame=null,this._running=!1,this._lastFrameTime=0,t&&this.props.onFinalize(t)}return this}redraw(t,e=null){return this.device?.isLost||this._error||(this._beginFrameTimers(t),this._setupFrame(),this.animationProps&&(this.animationProps.animationFrame=e),this._updateAnimationProps(),this._renderFrame(this._getAnimationProps()),this._clearNeedsRedraw(),this._resolveNextFrame&&(this._resolveNextFrame(this),this._nextFramePromise=null,this._resolveNextFrame=null),this._endFrameTimers()),this}attachTimeline(t){return this.timeline=t,this.timeline}detachTimeline(){this.timeline=null}waitForRender(){return this.setNeedsRedraw("waitForRender"),this._nextFramePromise||(this._nextFramePromise=new Promise(t=>{this._resolveNextFrame=t})),this._nextFramePromise}async toDataURL(){if(this.setNeedsRedraw("toDataURL"),await this.waitForRender(),this.canvas instanceof HTMLCanvasElement)return this.canvas.toDataURL();throw new Error("OffscreenCanvas")}_initialize(){this._startEventHandling(),this._initializeAnimationProps(),this._updateAnimationProps(),this._resizeViewport(),this.device?._enableDebugGPUTime()}_setDisplay(t){this.display&&(this.display.destroy(),this.display.animationLoop=null),t&&(t.animationLoop=this),this.display=t}_requestAnimationFrame(){this._running&&(this._animationFrameId=this.props.animationFrameProvider.requestAnimationFrame(this._animationFrame.bind(this)))}_cancelAnimationFrame(){null!==this._animationFrameId&&(this.props.animationFrameProvider.cancelAnimationFrame(this._animationFrameId),this._animationFrameId=null)}_animationFrame(t,e){if(this._running)try{this.redraw(t,e??null),this._requestAnimationFrame()}catch(i){const t=i instanceof Error?i:new Error(String(i));this.reportError(t),this.stop()}}_renderFrame(t){if(this.display)return void this.display._renderFrame(t);const e=this.props.onRender(this._getAnimationProps());this.device&&!1!==e&&this.device.submit()}_clearNeedsRedraw(){this._needsRedraw=!1}_setupFrame(){this._resizeViewport()}_initializeAnimationProps(){const t=this.device?.getDefaultCanvasContext();if(!this.device||!t)throw new Error("loop");const e=t?.canvas,i=t.props.useDevicePixels;this.animationProps={animationLoop:this,device:this.device,canvasContext:t,canvas:e,useDevicePixels:i,timeline:this.timeline,needsRedraw:!1,width:1,height:1,aspect:1,time:0,startTime:Date.now(),engineTime:0,tick:0,tock:0,animationFrame:null,_mousePosition:null}}_getAnimationProps(){if(!this.animationProps)throw new Error("animationProps");return this.animationProps}_updateAnimationProps(){if(!this.animationProps)return;const{width:t,height:e,aspect:i}=this._getSizeAndAspect();t===this.animationProps.width&&e===this.animationProps.height||this.setNeedsRedraw("drawing buffer resized"),i!==this.animationProps.aspect&&this.setNeedsRedraw("drawing buffer aspect changed"),this.animationProps.width=t,this.animationProps.height=e,this.animationProps.aspect=i,this.animationProps.needsRedraw=this._needsRedraw,this.animationProps.engineTime=Date.now()-this.animationProps.startTime,this.timeline&&this.timeline.update(this.animationProps.engineTime),this.animationProps.tick=Math.floor(this.animationProps.time/1e3*60),this.animationProps.tock++,this.animationProps.time=this.timeline?this.timeline.getTime():this.animationProps.engineTime}async _initDevice(){if(this.device=await this.props.device,!this.device)throw new Error("No device provided");this.canvas=this.device.getDefaultCanvasContext().canvas||null}_createInfoDiv(){if(this.canvas&&this.props.onAddHTML){const t=document.createElement("div");document.body.appendChild(t),t.style.position="relative";const e=document.createElement("div");e.style.position="absolute",e.style.left="10px",e.style.bottom="10px",e.style.width="300px",e.style.background="white",this.canvas instanceof HTMLCanvasElement&&t.appendChild(this.canvas),t.appendChild(e);const i=this.props.onAddHTML(e);i&&(e.innerHTML=i)}}_getSizeAndAspect(){if(!this.device)return{width:1,height:1,aspect:1};const[t,e]=this.device.getDefaultCanvasContext().getDrawingBufferSize();return{width:t,height:e,aspect:t>0&&e>0?t/e:1}}_resizeViewport(){this.props.autoResizeViewport&&this.device.gl&&this.device.gl.viewport(0,0,this.device.gl.drawingBufferWidth,this.device.gl.drawingBufferHeight)}_beginFrameTimers(t){const e=t??("undefined"!=typeof performance?performance.now():Date.now());if(this._lastFrameTime){const t=e-this._lastFrameTime;t>0&&this.frameRate.addTime(t)}this._lastFrameTime=e,this.device?._isDebugGPUTimeEnabled()&&this._consumeEncodedGpuTime(),this.cpuTime.timeStart()}_endFrameTimers(){this.device?._isDebugGPUTimeEnabled()&&this._consumeEncodedGpuTime(),this.cpuTime.timeEnd(),this._updateSharedStats()}_consumeEncodedGpuTime(){if(!this.device)return;const t=this.device.commandEncoder._gpuTimeMs;void 0!==t&&(this.gpuTime.addTime(t),this.device.commandEncoder._gpuTimeMs=void 0)}_updateSharedStats(){if(this.stats!==this.sharedStats){for(const t of Object.keys(this.sharedStats.stats))this.stats.stats[t]||delete this.sharedStats.stats[t];this.stats.forEach(t=>{const e=this.sharedStats.get(t.name,t.type);e.sampleSize=t.sampleSize,e.time=t.time,e.count=t.count,e.samples=t.samples,e.lastTiming=t.lastTiming,e.lastSampleTime=t.lastSampleTime,e.lastSampleCount=t.lastSampleCount,e._count=t._count,e._time=t._time,e._samples=t._samples,e._startTime=t._startTime,e._timerPending=t._timerPending})}}_startEventHandling(){this.canvas&&(this.canvas.addEventListener("mousemove",this._onMousemove.bind(this)),this.canvas.addEventListener("mouseleave",this._onMouseleave.bind(this)))}_onMousemove(t){t instanceof MouseEvent&&(this._getAnimationProps()._mousePosition=[t.offsetX,t.offsetY])}_onMouseleave(t){this._getAnimationProps()._mousePosition=null}},K={blendColorOperation:"add",blendColorSrcFactor:"one",blendColorDstFactor:"zero",blendAlphaOperation:"add",blendAlphaSrcFactor:"constant",blendAlphaDstFactor:"zero"},J=class extends F{constructor(){super(...arguments),this._colorEncoderState=null}render(t){return"pickingFBO"in t?this._drawPickingBuffer(t):{decodePickingColor:null,stats:super._render(t)}}_drawPickingBuffer({layers:t,layerFilter:e,views:i,viewports:s,onViewportActive:n,pickingFBO:r,deviceRect:{x:o,y:a,width:h,height:c},cullRect:d,effects:l,pass:p="picking",pickZ:u,canvasContext:g,shaderModuleProps:v,clearColor:m}){this.pickZ=u;const f=this._resetColorEncoder(u),w=[o,a,h,c],_=super._render({target:r,layers:t,layerFilter:e,views:i,viewports:s,onViewportActive:n,cullRect:d,effects:l?.filter(t=>t.useInPicking),pass:p,canvasContext:g,isPicking:!0,shaderModuleProps:v,clearColor:m??[0,0,0,0],colorMask:15,scissorRect:w});return this._colorEncoderState=null,{decodePickingColor:f&&tt.bind(null,f),stats:_}}shouldDrawLayer(t){const{pickable:e,operation:i}=t.props;return e&&i.includes("draw")||i.includes("terrain")||i.includes("mask")}getShaderModuleProps(t,e,i){return{picking:{isActive:1,isAttribute:this.pickZ,disabledPickingIndices:t.internalState?.disabledPickingIndices},lighting:{enabled:!1}}}getLayerParameters(t,e,i){const s={...t.props.parameters},{pickable:n,operation:r}=t.props;return this._colorEncoderState?n&&r.includes("draw")?(Object.assign(s,K),s.blend=!0,"webgpu"===this.device.type?s.blendConstant=Q(this._colorEncoderState,t,i):s.blendColor=Q(this._colorEncoderState,t,i),r.includes("terrain")&&t.state?._hasPickingCover&&(s.blendAlphaSrcFactor="one")):r.includes("terrain")&&(s.blend=!1):s.blend=!1,s}_resetColorEncoder(t){return this._colorEncoderState=t?null:{byLayer:new Map,byAlpha:[]},this._colorEncoderState}};function Q(e,i,s){const{byLayer:n,byAlpha:r}=e;let o,a=n.get(i);return a?(a.viewports.push(s),o=a.a):(o=n.size+1,o<=255?(a={a:o,layer:i,viewports:[s]},n.set(i,a),r[o]=a):(t.defaultLogger.warn("Too many pickable layers, only picking the first 255")(),o=0)),[0,0,0,o/255]}function tt(t,e){const i=t.byAlpha[e[3]];return i&&{pickedLayer:i.layer,pickedViewports:i.viewports,pickedObjectIndex:i.layer.decodePickingColor(e)}}var et=class{constructor(t,e,i){this._loadCount=0,this._subscribers=new Set,this.id=t,this.context=i,this.setData(e)}subscribe(t){this._subscribers.add(t)}unsubscribe(t){this._subscribers.delete(t)}inUse(){return this._subscribers.size>0}delete(){}getData(){return this.isLoaded?this._error?Promise.reject(this._error):this._content:this._loader.then(()=>this.getData())}setData(e,i){if(e===this._data&&!i)return;this._data=e;const s=++this._loadCount;let n=e;"string"==typeof e&&(n=t.load(e)),n instanceof Promise?(this.isLoaded=!1,this._loader=n.then(t=>{this._loadCount===s&&(this.isLoaded=!0,this._error=void 0,this._content=t)}).catch(t=>{this._loadCount===s&&(this.isLoaded=!0,this._error=t||!0)})):(this.isLoaded=!0,this._error=void 0,this._content=e);for(const t of this._subscribers)t.onChange(this.getData())}},it=class{constructor(t){this.protocol=t.protocol||"resource://",this._context={device:t.device,gl:t.device?.gl,resourceManager:this},this._resources={},this._consumers={},this._pruneRequest=null}contains(t){return!!t.startsWith(this.protocol)||t in this._resources}add({resourceId:t,data:e,forceUpdate:i=!1,persistent:s=!0}){let n=this._resources[t];n?n.setData(e,i):(n=new et(t,e,this._context),this._resources[t]=n),n.persistent=s}remove(t){const e=this._resources[t];e&&(e.delete(),delete this._resources[t])}unsubscribe({consumerId:t}){const e=this._consumers[t];if(e){for(const t in e){const i=e[t],s=this._resources[i.resourceId];s&&s.unsubscribe(i)}delete this._consumers[t],this.prune()}}subscribe({resourceId:t,onChange:e,consumerId:i,requestId:s="default"}){const{_resources:n,protocol:r}=this;t.startsWith(r)&&(n[t=t.replace(r,"")]||this.add({resourceId:t,data:null,persistent:!1}));const o=n[t];if(this._track(i,s,o,e),o)return o.getData()}prune(){this._pruneRequest||(this._pruneRequest=setTimeout(()=>this._prune(),0))}finalize(){for(const t in this._resources)this._resources[t].delete()}_track(t,e,i,s){const n=this._consumers,r=n[t]=n[t]||{};let o=r[e];const a=o&&o.resourceId&&this._resources[o.resourceId];a&&(a.unsubscribe(o),this.prune()),i&&(o?(o.onChange=s,o.resourceId=i.id):o={onChange:s,resourceId:i.id},r[e]=o,i.subscribe(o))}_prune(){this._pruneRequest=null;for(const t of Object.keys(this._resources)){const e=this._resources[t];e.persistent||e.inUse()||(e.delete(),delete this._resources[t])}}},st=class{constructor(e,i){this._lastRenderedLayers=[],this._needsRedraw=!1,this._needsUpdate=!1,this._nextLayers=null,this._debug=!1,this._defaultShaderModulesChanged=!1,this.activateViewport=e=>{t.debug("layerManager.activateViewport",this,e),e&&(this.context.viewport=e)};const{deck:s,stats:n,viewport:r,timeline:o}=i||{};this.layers=[],this.resourceManager=new it({device:e,protocol:"deck://"}),this.context={mousePosition:null,userData:{},layerManager:this,device:e,gl:e?.gl,deck:s,shaderAssembler:k(e?.info?.shadingLanguage||"glsl"),defaultShaderModules:[u],renderPass:void 0,stats:n||new t.Stats({id:"deck.gl"}),viewport:r||new t.Viewport({id:"DEFAULT-INITIAL-VIEWPORT"}),timeline:o||new q,resourceManager:this.resourceManager,onError:void 0},Object.seal(this)}finalize(){this.resourceManager.finalize();for(const t of this.layers)this._finalizeLayer(t)}needsRedraw(t={clearRedrawFlags:!1}){let e=this._needsRedraw;t.clearRedrawFlags&&(this._needsRedraw=!1);for(const i of this.layers){const s=i.getNeedsRedraw(t);e=e||s}return e}needsUpdate(){return this._nextLayers&&this._nextLayers!==this._lastRenderedLayers?"layers changed":this._defaultShaderModulesChanged?"shader modules changed":this._needsUpdate}setNeedsRedraw(t){this._needsRedraw=this._needsRedraw||t}setNeedsUpdate(t){this._needsUpdate=this._needsUpdate||t}getLayers({layerIds:t}={}){return t?this.layers.filter(e=>t.find(t=>0===e.id.indexOf(t))):this.layers}setProps(t){"debug"in t&&(this._debug=t.debug),"userData"in t&&(this.context.userData=t.userData),"layers"in t&&(this._nextLayers=t.layers),"onError"in t&&(this.context.onError=t.onError)}setLayers(e,i){t.debug("layerManager.setLayers",this,i,e),this._lastRenderedLayers=e;const s=t.flatten(e,Boolean);for(const t of s)t.context=this.context;this._updateLayers(this.layers,s)}updateLayers(){const t=this.needsUpdate();t&&(this.setNeedsRedraw(`updating layers: ${t}`),this.setLayers(this._nextLayers||this._lastRenderedLayers,t)),this._nextLayers=null}addDefaultShaderModule(t){const{defaultShaderModules:e}=this.context;e.find(e=>e.name===t.name)||(e.push(t),this._defaultShaderModulesChanged=!0)}removeDefaultShaderModule(t){const{defaultShaderModules:e}=this.context,i=e.findIndex(e=>e.name===t.name);i>=0&&(e.splice(i,1),this._defaultShaderModulesChanged=!0)}_handleError(t,e,i){i.raiseError(e,`${t} of ${i}`)}_updateLayers(e,i){const s={};for(const o of e)s[o.id]?t.defaultLogger.warn(`Multiple old layers with same id ${o.id}`)():s[o.id]=o;if(this._defaultShaderModulesChanged){for(const t of e)t.setNeedsUpdate(),t.setChangeFlags({extensionsChanged:!0});this._defaultShaderModulesChanged=!1}const n=[];this._updateSublayersRecursively(i,s,n),this._finalizeOldLayers(s);let r=!1;for(const t of n)if(t.hasUniformTransition()){r=`Uniform transition in ${t}`;break}this._needsUpdate=r,this.layers=n}_updateSublayersRecursively(e,i,s){for(const r of e){r.context=this.context;const e=i[r.id];null===e&&t.defaultLogger.warn(`Multiple new layers with same id ${r.id}`)(),i[r.id]=null;let o=null;try{this._debug&&e!==r&&r.validateProps(),e?(this._transferLayerState(e,r),this._updateLayer(r)):this._initializeLayer(r),s.push(r),o=r.isComposite?r.getSubLayers():null}catch(n){this._handleError("matching",n,r)}o&&this._updateSublayersRecursively(o,i,s)}}_finalizeOldLayers(t){for(const e in t){const i=t[e];i&&this._finalizeLayer(i)}}_initializeLayer(e){try{e._initialize(),e.lifecycle=t.LIFECYCLE.INITIALIZED}catch(i){this._handleError("initialization",i,e)}}_transferLayerState(e,i){i._transferState(e),i.lifecycle=t.LIFECYCLE.MATCHED,i!==e&&(e.lifecycle=t.LIFECYCLE.AWAITING_GC)}_updateLayer(t){try{t._update()}catch(e){this._handleError("update",e,t)}}_finalizeLayer(e){this._needsRedraw=this._needsRedraw||`finalized ${e}`,e.lifecycle=t.LIFECYCLE.AWAITING_FINALIZATION;try{e._finalize(),e.lifecycle=t.LIFECYCLE.FINALIZED}catch(i){this._handleError("finalization",i,e)}}},nt="default-canvas",rt=class{constructor(t){this.views=[],this.width=100,this.height=100,this.viewState={},this.controllers={},this.timeline=t.timeline,this._viewports=[],this._viewportMap={},this._isUpdating=!1,this._needsRedraw="First render",this._needsUpdate="Initialize",this._eventManager=t.eventManager,this._eventManagers=t.eventManagers||{},this._viewEventManagers={},this._eventCallbacks={onViewStateChange:t.onViewStateChange,onInteractionStateChange:t.onInteractionStateChange},this._pickPosition=t.pickPosition,this._getCanvasContext=t.getCanvasContext,Object.seal(this),this.setProps(t)}finalize(){for(const t in this.controllers){const e=this.controllers[t];e&&e.finalize()}this.controllers={}}needsRedraw(t={clearRedrawFlags:!1}){const e=this._needsRedraw;return t.clearRedrawFlags&&(this._needsRedraw=!1),e}setNeedsUpdate(t){this._needsUpdate=this._needsUpdate||t,this._needsRedraw=this._needsRedraw||t}updateViewStates(){for(const t in this.controllers){const e=this.controllers[t];e&&e.updateTransition()}}getViewports(t){return t?this._viewports.filter(e=>{const i=!t.canvasId||this.getCanvasId(e.id)===t.canvasId,s=!("x"in t)||e.containsPixel(t);return i&&s}):this._viewports}getViews(){const t={};return this.views.forEach(e=>{t[e.id]=e}),t}getView(t){return this.views.find(e=>e.id===t)}getViewState(t){const e="string"==typeof t?this.getView(t):t,i=e&&this.viewState[e.getViewStateId()]||this.viewState;return e?e.filterViewState(i):i}getViewport(t){return this._viewportMap[t]}getCanvasId(t){const e="string"==typeof t?this.getView(t):t;return e?this._viewEventManagers[e.id]?.canvasId||this._getCanvasIdFromView(e):void 0}unproject(t,e){const i=this.getViewports(),s={x:t[0],y:t[1]};for(let n=i.length-1;n>=0;--n){const r=i[n];if(r.containsPixel(s)){const i=t.slice();return i[0]-=r.x,i[1]-=r.y,r.unproject(i,e)}}return null}setProps(t){t.views&&this._setViews(t.views),t.viewState&&this._setViewState(t.viewState),("width"in t||"height"in t)&&this._setSize(t.width,t.height),"pickPosition"in t&&(this._pickPosition=t.pickPosition),"eventManagers"in t&&this._setEventManagers(t.eventManagers||{}),this._isUpdating||this._update()}_update(){this._isUpdating=!0;try{this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports()),this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports())}finally{this._isUpdating=!1}}_hasViewState(t){const e=t.props.viewState;if(e&&"object"==typeof e&&!e.id)return!0;if(this.viewState[t.getViewStateId()])return!0;const i=Object.values(this.viewState);return 0===i.length||i.some(t=>!t||"object"!=typeof t||Array.isArray(t))}_setSize(t,e){t===this.width&&e===this.height||(this.width=t,this.height=e,this.setNeedsUpdate("Size changed"))}_setViews(e){e=t.flatten(e,Boolean),this._diffViews(e,this.views)&&this.setNeedsUpdate("views changed"),this.views=e}_setViewState(e){e?(t.deepEqual(e,this.viewState,3)||this.setNeedsUpdate("viewState changed"),this.viewState=e):t.defaultLogger.warn("missing `viewState` or `initialViewState`")()}_setEventManagers(t){this._eventManagers!==t&&(this._eventManagers=t,this.setNeedsUpdate("eventManagers changed"))}_getCanvasIdFromView(t){return t.props.canvasId||this._getCanvasContext?.(t.id)?.id||"default-canvas"}_getCanvasDimensions(t){const[e,i]=(this._getCanvasContext?.(t.id))?.getCSSSize()||[this.width,this.height];return{width:e,height:i}}_getViewEventManager(t){const e=this.getCanvasId(t)||"default-canvas";return{canvasId:e,eventManager:this._eventManagers[e]||this._eventManager}}_startViewportRebuild(){const t=this.controllers,e=this._viewEventManagers;return this._viewports=[],this.controllers={},this._viewEventManagers={},{oldControllers:t,oldViewEventManagers:e}}_getReusableController(t,e,i){return!t||e?.canvasId===i.canvasId&&e?.eventManager===i.eventManager?t:(t.finalize(),null)}_createController(t,e){return new(0,e.type)({timeline:this.timeline,eventManager:this._getViewEventManager(t).eventManager,onViewStateChange:this._eventCallbacks.onViewStateChange,onStateChange:this._eventCallbacks.onInteractionStateChange,makeViewport:e=>this.getView(t.id)?.makeViewport({viewState:e,...this._getCanvasDimensions(t)}),pickPosition:(e,i)=>this._pickPosition?.(e,i,t.id)})}_updateController(t,e,i,s){const n=t.controller;if(n&&i){const r={...e,...n,id:t.id,x:i.x,y:i.y,width:i.width,height:i.height};return s&&s.constructor===n.type||(s=this._createController(t,r)),s&&s.setProps(r),s}return null}_rebuildViewports(){const{views:t}=this,{oldControllers:e,oldViewEventManagers:i}=this._startViewportRebuild();let s=!1;for(let n=t.length;n--;){const r=t[n],{width:o,height:a}=this._getCanvasDimensions(r),h=this._getViewEventManager(r);this._viewEventManagers[r.id]=h;const c=this.getViewState(r),d=r.makeViewport({viewState:c,width:o,height:a});let l=this._getReusableController(e[r.id],i[r.id],h),p=Boolean(r.controller);p&&!this._hasViewState(r)&&(p=!1),p&&!l&&(s=!0),!s&&p||!l||(l.finalize(),l=null),this.controllers[r.id]=p?this._updateController(r,c,d,l):null,d&&this._viewports.unshift(d)}for(const n in e){const t=e[n];t&&!this.controllers[n]&&t.finalize()}this._buildViewportMap()}_buildViewportMap(){this._viewportMap={},this._viewports.forEach(t=>{t.id&&(this._viewportMap[t.id]=this._viewportMap[t.id]||t)})}_diffViews(t,e){return t.length!==e.length||t.some((i,s)=>!t[s].equals(e[s]))}},ot=/^(?:\d+\.?\d*|\.\d+)$/;function at(t){switch(typeof t){case"number":if(!Number.isFinite(t))throw new Error(`Could not parse position string ${t}`);return{type:"literal",value:t};case"string":try{const e=function(t){const e=[];let i=0;for(;i<t.length;){const s=t[i];if(/\s/.test(s))i++;else{if("+"!==s&&"-"!==s&&"("!==s&&")"!==s&&"%"!==s){if(lt(s)||"."===s){const n=i;let r="."===s;for(i++;i<t.length;){const e=t[i];if(lt(e))i++;else{if("."!==e||r)break;r=!0,i++}}const o=t.slice(n,i);if(!ot.test(o))throw new Error("Invalid number token");e.push({type:"number",value:parseFloat(o)});continue}if(pt(s)){const s=i;for(;i<t.length&&pt(t[i]);)i++;const n=t.slice(s,i).toLowerCase();e.push({type:"word",value:n});continue}throw new Error("Invalid token in position string")}e.push({type:"symbol",value:s}),i++}}return e}(t);return new dt(e).parseExpression()}catch(e){const i=e instanceof Error?e.message:String(e);throw new Error(`Could not parse position string ${t}: ${i}`)}default:throw new Error(`Could not parse position string ${t}`)}}function ht(t,e){switch(t.type){case"literal":return t.value;case"percentage":return Math.round(t.value*e);case"binary":const i=ht(t.left,e),s=ht(t.right,e);return"+"===t.operator?i+s:i-s;default:throw new Error("Unknown layout expression type")}}function ct(t,e){return ht(t,e)}var dt=class{constructor(t){this.index=0,this.tokens=t}parseExpression(){const t=this.parseBinaryExpression();if(this.index<this.tokens.length)throw new Error("Unexpected token at end of expression");return t}parseBinaryExpression(){let t=this.parseFactor(),e=this.peek();for(;ut(e);){this.index++;const i=this.parseFactor();t={type:"binary",operator:e.value,left:t,right:i},e=this.peek()}return t}parseFactor(){const t=this.peek();if(!t)throw new Error("Unexpected end of expression");if("symbol"===t.type&&"+"===t.value)return this.index++,this.parseFactor();if("symbol"===t.type&&"-"===t.value)return this.index++,{type:"binary",operator:"-",left:{type:"literal",value:0},right:this.parseFactor()};if("symbol"===t.type&&"("===t.value){this.index++;const t=this.parseBinaryExpression();if(!this.consumeSymbol(")"))throw new Error("Missing closing parenthesis");return t}if("word"===t.type&&"calc"===t.value){if(this.index++,!this.consumeSymbol("("))throw new Error("Missing opening parenthesis after calc");const t=this.parseBinaryExpression();if(!this.consumeSymbol(")"))throw new Error("Missing closing parenthesis");return t}if("number"===t.type){this.index++;const e=t.value,i=this.peek();return i&&"symbol"===i.type&&"%"===i.value?(this.index++,{type:"percentage",value:e/100}):i&&"word"===i.type&&"px"===i.value?(this.index++,{type:"literal",value:e}):{type:"literal",value:e}}throw new Error("Unexpected token in expression")}consumeSymbol(t){const e=this.peek();return!(!e||"symbol"!==e.type||e.value!==t)&&(this.index++,!0)}peek(){return this.tokens[this.index]||null}};function lt(t){return t>="0"&&t<="9"}function pt(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"}function ut(t){return Boolean(t&&"symbol"===t.type&&("+"===t.value||"-"===t.value))}function gt(t,e){t=t.slice();for(let i=0;i<e.length;i++){const s=e[i];Number.isFinite(s)&&(t[i]=s)}return t}var vt=class{constructor(t){const{id:e,x:i=0,y:s=0,width:n="100%",height:r="100%",padding:o=null}=t;this.id=e||this.constructor.displayName||"view",this.props={...t,id:this.id},this._x=at(i),this._y=at(s),this._width=at(n),this._height=at(r),this._padding=o&&{left:at(o.left||0),right:at(o.right||0),top:at(o.top||0),bottom:at(o.bottom||0)},this.equals=this.equals.bind(this),Object.seal(this)}equals(e){return this===e||this.constructor===e.constructor&&t.deepEqual(this.props,e.props,2)}clone(t){return new(0,this.constructor)({...this.props,...t})}makeViewport({width:t,height:e,viewState:i}){i=this.filterViewState(i);const s=this.getDimensions({width:t,height:e});return s.height&&s.width?new(this.getViewportType(i))({...i,...this.props,...s}):null}getViewStateId(){const{viewState:t}=this.props;return"string"==typeof t?t:t?.id||this.id}filterViewState(t){return this.props.viewState&&"object"==typeof this.props.viewState?this.props.viewState.id?function(t,e){const i={...t};for(const s in e)"id"!==s&&(Array.isArray(i[s])&&Array.isArray(e[s])?i[s]=gt(i[s],e[s]):i[s]=e[s]);return i}(t,this.props.viewState):this.props.viewState:t}getDimensions({width:t,height:e}){const i={x:ct(this._x,t),y:ct(this._y,e),width:ct(this._width,t),height:ct(this._height,e)};return this._padding&&(i.padding={left:ct(this._padding.left,t),top:ct(this._padding.top,e),right:ct(this._padding.right,t),bottom:ct(this._padding.bottom,e)}),i}get controller(){const t=this.props.controller;return t?!0===t?{type:this.ControllerType}:"function"==typeof t?{type:t}:{type:this.ControllerType,...t}:null}},mt=()=>{},ft={mode:"preserve"},wt={mode:"hard"},_t=2,yt=3,Pt=t=>t,bt=1,Ct=class{constructor(e){this._onTransitionUpdate=t=>{const{time:e,settings:{interpolator:i,startProps:s,endProps:n,duration:r,easing:o}}=t,a=o(e/r),h=i.interpolateProps(s,n,a);this.propsInTransition=this.getControllerState({...this.props,...h},ft).getViewportProps(),this.onViewStateChange({viewState:this.propsInTransition,oldViewState:this.props})},this.getControllerState=e.getControllerState,this.propsInTransition=null,this.transition=new t.Transition(e.timeline),this.onViewStateChange=e.onViewStateChange||mt,this.onStateChange=e.onStateChange||mt}finalize(){this.transition.cancel()}getViewportInTransition(){return this.propsInTransition}processViewStateChange(t){let e=!1;const i=this.props;if(this.props=t,!i||this._shouldIgnoreViewportChange(i,t))return!1;if(this._isTransitionEnabled(t)){let s=i;if(this.transition.inProgress){const{interruption:t,endProps:e}=this.transition.settings;s={...i,...t===_t?e:this.propsInTransition||i}}this._triggerTransition(s,t),e=!0}else this.transition.cancel();return e}updateTransition(){this.transition.update()}_isTransitionEnabled(t){const{transitionDuration:e,transitionInterpolator:i}=t;return(e>0||"auto"===e)&&Boolean(i)}_isUpdateDueToCurrentTransition(t){return!(!this.transition.inProgress||!this.propsInTransition)&&this.transition.settings.interpolator.arePropsEqual(t,this.propsInTransition)}_shouldIgnoreViewportChange(t,e){return this.transition.inProgress?this.transition.settings.interruption===yt||this._isUpdateDueToCurrentTransition(e):!this._isTransitionEnabled(e)||e.transitionInterpolator.arePropsEqual(t,e)}_triggerTransition(t,e){const i=this.getControllerState(t,ft),s=this.getControllerState(e,wt).shortestPathFrom(i),n=e.transitionInterpolator,r=n.getDuration?n.getDuration(t,e):e.transitionDuration;if(0===r)return;const o=n.initializeProps(t,s);this.propsInTransition={};const a={duration:r,easing:e.transitionEasing||Pt,interpolator:n,interruption:e.transitionInterruption||bt,startProps:o.start,endProps:o.end,onStart:e.onTransitionStart,onUpdate:this._onTransitionUpdate,onInterrupt:this._onTransitionEnd(e.onTransitionInterrupt),onEnd:this._onTransitionEnd(e.onTransitionEnd)};this.transition.start(a),this.onStateChange({inTransition:!0}),this.updateTransition()}_onTransitionEnd(t){return e=>{this.propsInTransition=null,this.onStateChange({inTransition:!1,isZooming:!1,isPanning:!1,isRotating:!1}),t?.(e)}}},Mt=class{constructor(t){const{compare:e,extract:i,required:s}=t;this._propsToCompare=e,this._propsToExtract=i||e,this._requiredProps=s}arePropsEqual(e,i){for(const s of this._propsToCompare)if(!(s in e)||!(s in i)||!t.equals(e[s],i[s]))return!1;return!0}initializeProps(t,e){const i={},s={};for(const n of this._propsToExtract)(n in t||n in e)&&(i[n]=t[n],s[n]=e[n]);return this._checkRequiredProps(i),this._checkRequiredProps(s),{start:i,end:s}}getDuration(t,e){return e.transitionDuration}_checkRequiredProps(e){this._requiredProps&&this._requiredProps.forEach(i=>{const s=e[i];t.assert(Number.isFinite(s)||Array.isArray(s),`${i} is required for transition`)})}},kt=["longitude","latitude","zoom","bearing","pitch"],xt=["longitude","latitude","zoom"],St=class extends Mt{constructor(t={}){const e=Array.isArray(t)?t:t.transitionProps,i=Array.isArray(t)?{}:t;i.transitionProps=Array.isArray(e)?{compare:e,required:e}:e||{compare:kt,required:xt},super(i.transitionProps),this.opts=i}initializeProps(t,e){const i=super.initializeProps(t,e),{makeViewport:s,around:n}=this.opts;if(s&&n){const r=s(t),o=s(e),a=r.unproject(n);i.start.around=n,Object.assign(i.end,{around:o.project(a),aroundPosition:a,width:e.width,height:e.height})}return i}interpolateProps(e,i,s){const n={};for(const r of this._propsToExtract)n[r]=t.lerp$2(e[r]||0,i[r]||0,s);if(i.aroundPosition&&this.opts.makeViewport){const r=this.opts.makeViewport({...i,...n});Object.assign(n,r.panByPosition(i.aroundPosition,t.lerp$2(e.around,i.around,s)))}return n}},Et={transitionDuration:0},Rt=t=>1-(1-t)*(1-t),Lt=t=>1===t?1:1-Math.pow(2,-10*t),Dt=["wheel"],Tt=["panstart","panmove","panend"],At=["pinchstart","pinchmove","pinchend"],It=["multipanstart","multipanmove","multipanend"],Vt=["dblclick"],zt=["dblclickdragstart","dblclickdragmove","dblclickdragend","dblclickdragcancel"],Ft=["keydown"],Ot={},jt=class{constructor(t){this.state={},this._events={},this._interactionState={isDragging:!1},this._customEvents=[],this._eventStartBlocked=null,this._panMove=!1,this._multiPanMode=null,this._multiPanStartCenter=null,this._doubleClickDragAnchor=null,this._suppressDoubleClickUntil=0,this.invertPan=!1,this.dragMode="rotate",this.inertia=0,this.scrollZoom=!0,this.dragPan=!0,this.dragRotate=!0,this.doubleClickZoom=!0,this.doubleClickDragZoom=!0,this.touchZoom=!0,this.touchRotate=!1,this.multiTouchDrag=null,this.trackpadGesture=!1,this.zoomAround="pointer",this.keyboard=!0,this.transitionManager=new Ct({...t,getControllerState:(e,i)=>new this.ControllerState({...e,constraintContext:i,makeViewport:t.makeViewport}),onViewStateChange:this._onTransition.bind(this),onStateChange:this._setInteractionState.bind(this)}),this.handleEvent=this.handleEvent.bind(this),this.eventManager=t.eventManager,this.onViewStateChange=t.onViewStateChange||(()=>{}),this.onStateChange=t.onStateChange||(()=>{}),this.makeViewport=t.makeViewport,this.pickPosition=t.pickPosition}set events(t){this.toggleEvents(this._customEvents,!1),this.toggleEvents(t,!0),this._customEvents=t,this.props&&this.setProps(this.props)}finalize(){for(const t in this._events)this._events[t]&&this.eventManager?.off(t,this.handleEvent);this.transitionManager.finalize()}handleEvent(t){this._controllerState=void 0;const e=this._eventStartBlocked;switch(t.type){case"panstart":return!e&&this._onPanStart(t);case"panmove":return this._onPan(t);case"panend":return this._onPanEnd(t);case"pinchstart":return!(e||!this._isTrackpadGestureAllowed(t))&&this._onPinchStart(t);case"pinchmove":return!!this._isTrackpadGestureAllowed(t)&&this._onPinch(t);case"pinchend":return!!this._isTrackpadGestureAllowed(t)&&this._onPinchEnd(t);case"multipanstart":return!e&&this._onMultiPanStart(t);case"multipanmove":return this._onMultiPan(t);case"multipanend":return this._onMultiPanEnd(t);case"dblclick":return this._onDoubleClick(t);case"dblclickdragstart":return!e&&this._onDoubleClickDragStart(t);case"dblclickdragmove":return this._onDoubleClickDrag(t);case"dblclickdragend":case"dblclickdragcancel":return this._onDoubleClickDragEnd(t);case"wheel":return this._onWheel(t);case"keydown":return this._onKeyDown(t);default:return!1}}get controllerState(){return this._controllerState=this._controllerState||new this.ControllerState({makeViewport:this.makeViewport,...this.props,...this.state}),this._controllerState}getCenter(t){const{x:e,y:i}=this.props,{offsetCenter:s}=t;return[s.x-e,s.y-i]}getZoomPosition(e){if("pointer"===this.zoomAround)return e;const i=this.makeViewport(this.controllerState.getViewportProps()),[s,n]=t.worldToPixels(i.center,i.pixelProjectionMatrix);return[s,n]}isPointInBounds(t,e){const{width:i,height:s}=this.props;if(e&&e.handled)return!1;const n=t[0]>=0&&t[0]<=i&&t[1]>=0&&t[1]<=s;return n&&e&&e.stopPropagation(),n}isFunctionKeyPressed(t){const{srcEvent:e}=t;return Boolean(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}isDragging(){return this._interactionState.isDragging||!1}blockEvents(t){const e=setTimeout(()=>{this._eventStartBlocked===e&&(this._eventStartBlocked=null)},t);this._eventStartBlocked=e}setProps(e){void 0===e.maxBoundsPadding&&(e.maxBoundsPadding=null),e.dragMode&&(this.dragMode=e.dragMode);const i=this.props;this.props=e,"transitionInterpolator"in e||(e.transitionInterpolator=this._getTransitionProps().transitionInterpolator),this.transitionManager.processViewStateChange(e);const{inertia:s}=e;this.inertia=Number.isFinite(s)?s:!0===s?300:0;const{scrollZoom:n=!0,dragPan:r=!0,dragRotate:o=!0,doubleClickZoom:a=!0,doubleClickDragZoom:h=!1,touchZoom:c=!0,touchRotate:d=!1,multiTouchDrag:l=(d?"rotate":null),trackpadGesture:p=!1,zoomAround:u="pointer",keyboard:g=!0}=e,v=Boolean(this.onViewStateChange);if(this.toggleEvents(Dt,v&&n),this.toggleEvents(Tt,v),this.toggleEvents(At,v&&(c||"rotate"===l)),this.toggleEvents(It,v&&Boolean(l)),this.toggleEvents(Vt,v&&a),this.toggleEvents(zt,v&&h),this.toggleEvents(Ft,v&&g),this.scrollZoom=n,this.dragPan=r,this.dragRotate=o,this.doubleClickZoom=a,this.doubleClickDragZoom=h,this.touchZoom=c,this.touchRotate="rotate"===l,this.multiTouchDrag=l,this.trackpadGesture=p,this.zoomAround=u,this.keyboard=g,(!i||i.height!==e.height||i.width!==e.width||i.maxBounds!==e.maxBounds||i.maxBoundsPadding!==e.maxBoundsPadding)&&e.maxBounds){const i=new this.ControllerState({...e,makeViewport:this.makeViewport}),s=i.getViewportProps();Object.keys(s).some(i=>!t.deepEqual(s[i],e[i],1))&&this.updateViewport(i)}}updateTransition(){this.transitionManager.updateTransition()}toggleEvents(t,e){this.eventManager&&t.forEach(t=>{this._events[t]!==e&&(this._events[t]=e,e?this.eventManager.on(t,this.handleEvent):this.eventManager.off(t,this.handleEvent))})}updateViewport(t,e=null,i={}){const s={...t.getViewportProps(),...e},n=this.controllerState!==t;if(this.state=t.getState(),this._setInteractionState(i),n){const t=this.controllerState&&this.controllerState.getViewportProps();this.onViewStateChange&&this.onViewStateChange({viewState:s,interactionState:this._interactionState,oldViewState:t,viewId:this.props.id})}}_onTransition(t){this.onViewStateChange({...t,interactionState:this._interactionState,viewId:this.props.id})}_setInteractionState(t){Object.assign(this._interactionState,t),this.onStateChange(this._interactionState)}_getConstraintContext(t,e){return this.props.rubberBand?{mode:"update"===e?"elastic":"end"===e?"rebound":"hard"}:{mode:"hard"}}_getReboundTransition(e,i){if("rebound"!==e.mode)return null;const s=i.getViewportProps();return Object.keys(s).some(e=>!t.deepEqual(this.props[e],s[e],1))?{...this._getTransitionProps(),transitionDuration:300,transitionEasing:Lt}:null}_onPanStart(t){const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;let i=this.isFunctionKeyPressed(t)||t.rightButton||!1;(this.invertPan||"pan"===this.dragMode)&&(i=!i);const s=i?"pan":"rotate",n=this._getConstraintContext(s,"start"),r=i?this.controllerState.panStart({pos:e},n):this.controllerState.rotateStart({pos:e},n);return this._panMove=i,this.updateViewport(r,Et,{isDragging:!0}),!0}_onPan(t){return!!this.isDragging()&&(this._panMove?this._onPanMove(t):this._onPanRotate(t))}_onPanEnd(t){return!!this.isDragging()&&(this._panMove?this._onPanMoveEnd(t):this._onPanRotateEnd(t))}_onPanMove(t){if(!this.dragPan)return!1;const e=this.getCenter(t),i=this.controllerState.pan({pos:e},this._getConstraintContext("pan","update"));return this.updateViewport(i,Et,{isDragging:!0,isPanning:!0}),!0}_onPanMoveEnd(t){const{inertia:e}=this;if(this.dragPan&&e&&t.velocity){const i=this.getCenter(t),s=[i[0]+t.velocityX*e/2,i[1]+t.velocityY*e/2],n=this.controllerState.pan({pos:s}).panEnd();this.updateViewport(n,{...this._getTransitionProps(),transitionDuration:e,transitionEasing:Rt},{isDragging:!1,isPanning:!0})}else{const t=this.controllerState,e=this._getConstraintContext("pan","end"),i=t.panEnd(e),s=this._getReboundTransition(e,i);this.updateViewport(i,s,{isDragging:!1,isPanning:Boolean(s)})}return!0}_onPanRotate(t){if(!this.dragRotate)return!1;const e=this.getCenter(t),i=this.controllerState.rotate({pos:e},this._getConstraintContext("rotate","update"));return this.updateViewport(i,Et,{isDragging:!0,isRotating:!0}),!0}_onPanRotateEnd(t){const{inertia:e}=this;if(this.dragRotate&&e&&t.velocity){const i=this.getCenter(t),s=[i[0]+t.velocityX*e/2,i[1]+t.velocityY*e/2],n=this.controllerState.rotate({pos:s}).rotateEnd();this.updateViewport(n,{...this._getTransitionProps(),transitionDuration:e,transitionEasing:Rt},{isDragging:!1,isRotating:!0})}else{const t=this.controllerState,e=this._getConstraintContext("rotate","end"),i=t.rotateEnd(e),s=this._getReboundTransition(e,i);this.updateViewport(i,s,{isDragging:!1,isRotating:Boolean(s)})}return!0}_onWheel(t){if(!this.scrollZoom)return!1;if(this.trackpadGesture&&"mouse"!==t.device)return!1;const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;t.srcEvent.preventDefault();const{speed:i=.01,smooth:s=!1}=!0===this.scrollZoom?{}:this.scrollZoom,{delta:n}=t;let r=2/(1+Math.exp(-Math.abs(n*i)));n<0&&0!==r&&(r=1/r);const o=this.getZoomPosition(e),a=s?{...this._getTransitionProps({around:o}),transitionDuration:250}:Et,h=this.controllerState.zoom({pos:o,scale:r});return this.updateViewport(h,a,{isZooming:!0,isPanning:!0}),s||this._setInteractionState({isZooming:!1,isPanning:!1}),!0}_onMultiPanStart(t){const{multiTouchDrag:e}=this;if(!e||!this._isMultiPanEventAllowed(t,e))return!1;const i=t.offsetCenter;if(!this.isPointInBounds(this.getCenter(t),t))return!1;const s="trackpad"===t.pointerType,n={x:i.x-(s?0:t.deltaX),y:i.y-(s?0:t.deltaY)},r={...t,offsetCenter:n},o=this.getCenter(r),a="pan"===e?this.controllerState.panStart({pos:o},this._getConstraintContext("pan","start")):this.controllerState.rotateStart({pos:o},this._getConstraintContext("rotate","start"));return this._multiPanMode=e,this._multiPanStartCenter=n,this.updateViewport(a,Et,{isDragging:!0}),!0}_onMultiPan(t){const{mode:e,event:i}=this._getMultiPanEvent(t);return!!(e&&i&&this.isDragging())&&("pan"===e?this._onPanMove(i):this._onPanRotate(i))}_onMultiPanEnd(t){const{mode:e,event:i}=this._getMultiPanEvent(t);if(!e||!i||!this.isDragging())return this._resetMultiPan(),!1;const s="pan"===e?this._onPanMoveEnd(i):this._onPanRotateEnd(i);return this._resetMultiPan(),s}_isTrackpadGestureAllowed(t){return"trackpad"!==t.pointerType||this.trackpadGesture}_isMultiPanEventAllowed(t,e){return"trackpad"===t.pointerType?this.trackpadGesture&&("pan"===e?this.dragPan:this.dragRotate):"touch"===t.pointerType&&("pan"===e?this.dragPan:this.dragRotate)}_getMultiPanEvent(t){const e=this._multiPanMode,i=this._multiPanStartCenter;return e&&i?{mode:e,event:{...t,offsetCenter:{x:i.x+t.deltaX,y:i.y+t.deltaY}}}:{mode:null,event:null}}_resetMultiPan(){this._multiPanMode=null,this._multiPanStartCenter=null}_onPinchStart(t){this._doubleClickDragAnchor=null;const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;const i=this.controllerState.zoomStart({pos:this.getZoomPosition(e)},this._getConstraintContext("zoom","start")).rotateStart({pos:e},this._getConstraintContext("rotate","start"));return Ot._startPinchRotation=t.rotation,Ot._lastPinchEvent=t,this.updateViewport(i,Et,{isDragging:!0}),!0}_onPinch(t){if(!this.touchZoom&&!this.touchRotate)return!1;if(!this.isDragging())return!1;let e=this.controllerState;if(this.touchZoom){const{scale:i}=t,s=this.getCenter(t);e=e.zoom({pos:this.getZoomPosition(s),scale:i},this._getConstraintContext("zoom","update"))}if(this.touchRotate){const{rotation:i}=t;e=e.rotate({deltaAngleX:Ot._startPinchRotation-i},this._getConstraintContext("rotate","update"))}return this.updateViewport(e,Et,{isDragging:!0,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:this.touchRotate}),Ot._lastPinchEvent=t,!0}_onPinchEnd(t){if(!this.isDragging())return!1;const{inertia:e}=this,{_lastPinchEvent:i}=Ot;if(this.touchZoom&&e&&i&&t.scale!==i.scale){const s=this.getCenter(t),n=this.getZoomPosition(s);let r=this.controllerState.rotateEnd();const o=Math.log2(t.scale),a=(o-Math.log2(i.scale))/(t.deltaTime-i.deltaTime),h=Math.pow(2,o+a*e/2);r=r.zoom({pos:n,scale:h}).zoomEnd(),this.updateViewport(r,{...this._getTransitionProps({around:n}),transitionDuration:e,transitionEasing:Rt},{isDragging:!1,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:!1}),this.blockEvents(e)}else{const t=this.controllerState,e=this._getConstraintContext("zoom","end"),i=this._getConstraintContext("rotate","end"),s=t.zoomEnd(e).rotateEnd(i),n=this._getReboundTransition(this.touchZoom?e:i,s);this.updateViewport(s,n,{isDragging:!1,isPanning:Boolean(n)&&this.touchZoom,isZooming:Boolean(n)&&this.touchZoom,isRotating:Boolean(n)&&this.touchRotate})}return Ot._startPinchRotation=null,Ot._lastPinchEvent=null,!0}_onDoubleClick(t){if(!this.doubleClickZoom)return!1;if(Date.now()<this._suppressDoubleClickUntil)return!1;const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;const i=this.isFunctionKeyPressed(t),s=this.getZoomPosition(e),n=this.controllerState.zoom({pos:s,scale:i?.5:2});return this.updateViewport(n,this._getTransitionProps({around:s}),{isZooming:!0,isPanning:!0}),this.blockEvents(100),!0}_onDoubleClickDragStart(t){if(!this.doubleClickDragZoom)return this._doubleClickDragAnchor=null,!1;const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return this._doubleClickDragAnchor=null,!1;this._doubleClickDragAnchor=this.getZoomPosition(e);let i=this.controllerState.zoomStart({pos:this._doubleClickDragAnchor},this._getConstraintContext("zoom","start"));return 1!==t.scale&&(i=i.zoom({pos:this._doubleClickDragAnchor,scale:t.scale},this._getConstraintContext("zoom","update"))),this.updateViewport(i,Et,{isDragging:!0,isPanning:!0,isZooming:!0}),!0}_onDoubleClickDrag(t){const e=this._doubleClickDragAnchor;if(!e)return!1;const i=this.controllerState.zoom({pos:e,scale:t.scale},this._getConstraintContext("zoom","update"));return this.updateViewport(i,Et,{isDragging:!0,isPanning:!0,isZooming:!0}),!0}_onDoubleClickDragEnd(t){if(!this._doubleClickDragAnchor)return!1;this._doubleClickDragAnchor=null;const e=this.controllerState,i=this._getConstraintContext("zoom","end"),s=e.zoomEnd(i),n=this._getReboundTransition(i,s);return this.updateViewport(s,n,{isDragging:!1,isPanning:Boolean(n),isZooming:Boolean(n)}),this._suppressDoubleClickUntil=Date.now()+100,this.blockEvents(100),!0}_onKeyDown(t){if(!this.keyboard)return!1;const e=this.isFunctionKeyPressed(t),{zoomSpeed:i,moveSpeed:s,rotateSpeedX:n,rotateSpeedY:r}=!0===this.keyboard?{}:this.keyboard,{controllerState:o}=this;let a;const h={};switch(t.srcEvent.code){case"Minus":a=e?o.zoomOut(i).zoomOut(i):o.zoomOut(i),h.isZooming=!0;break;case"Equal":a=e?o.zoomIn(i).zoomIn(i):o.zoomIn(i),h.isZooming=!0;break;case"ArrowLeft":e?(a=o.rotateLeft(n),h.isRotating=!0):(a=o.moveLeft(s),h.isPanning=!0);break;case"ArrowRight":e?(a=o.rotateRight(n),h.isRotating=!0):(a=o.moveRight(s),h.isPanning=!0);break;case"ArrowUp":e?(a=o.rotateUp(r),h.isRotating=!0):(a=o.moveUp(s),h.isPanning=!0);break;case"ArrowDown":e?(a=o.rotateDown(r),h.isRotating=!0):(a=o.moveDown(s),h.isPanning=!0);break;default:return!1}return this.updateViewport(a,this._getTransitionProps(),h),!0}_getTransitionProps(t){const{transition:e}=this;return e&&e.transitionInterpolator?t?{...e,transitionInterpolator:new St({...t,...e.transitionInterpolator.opts,makeViewport:this.controllerState.makeViewport})}:e:Et}},Bt=Symbol("constraintAround"),Nt=class{constructor(t,e,i,s){this.makeViewport=i,this._viewportProps=this.applyConstraints(t,s),this._state=e}getViewportProps(){return this._viewportProps}getState(){return this._state}};function Ut(t,e,i){const s=t-e;return s&&Number.isFinite(s)?e+s*i/(i+Math.abs(s)):e}function Wt(t,e,i){const s=ct(at(i?.left??0),t),n=ct(at(i?.right??0),t),r=ct(at(i?.top??0),e);return{x:s,y:r,width:t-s-n,height:e-r-ct(at(i?.bottom??0),e)}}function Gt(t,e,i){let[s,n]=t.project(e);return s=Number.isFinite(s)?s:t.width/2,n=Number.isFinite(n)?n:t.height/2,{left:s-i.x,right:i.x+i.width-s,top:n-i.y,bottom:i.y+i.height-n}}var Zt=[[-1/0,-90],[1/0,90]];function Ht([e,i]){if(Math.abs(i)>90&&(i=90*Math.sign(i)),Number.isFinite(e)){const[s,n]=t.lngLatToWorld([e,i]);return[s,t.clamp(n,0,512)]}const[,s]=t.lngLatToWorld([0,i]);return[e,t.clamp(s,0,512)]}var qt=class extends Nt{constructor(e){const{width:i,height:s,latitude:n,longitude:r,zoom:o,bearing:a=0,pitch:h=0,altitude:c=1.5,position:d=[0,0,0],maxZoom:l=20,minZoom:p=0,maxPitch:u=60,minPitch:g=0,startPanLngLat:v,startZoomLngLat:m,startRotatePos:f,startRotateLngLat:w,startBearing:_,startPitch:y,startZoom:P,normalize:b=!0,rubberBand:C=!1}=e,{[Bt]:M}=e;t.assert(Number.isFinite(r)),t.assert(Number.isFinite(n)),t.assert(Number.isFinite(o));super({width:i,height:s,latitude:n,longitude:r,zoom:o,bearing:a,pitch:h,altitude:c,maxZoom:l,minZoom:p,maxPitch:u,minPitch:g,normalize:b,position:d,maxBounds:e.maxBounds||(b?Zt:null),maxBoundsPadding:e.maxBoundsPadding||null,rubberBand:C,[Bt]:M},{startPanLngLat:v,startZoomLngLat:m,startRotatePos:f,startRotateLngLat:w,startBearing:_,startPitch:y,startZoom:P},e.makeViewport,e.constraintContext),this.getAltitude=e.getAltitude}panStart({pos:t},e){return this._getUpdatedState({startPanLngLat:this._unproject(t)},e)}pan({pos:t,startPos:e},i){const s=this.getState().startPanLngLat||this._unproject(e);if(!s)return this;const n=this.makeViewport(this.getViewportProps()).panByPosition(s,t);return this._getUpdatedState(n,i)}panEnd(t){return this._getUpdatedState({startPanLngLat:null},t)}rotateStart({pos:t}){const e=this.getAltitude?.(t);return this._getUpdatedState({startRotatePos:t,startRotateLngLat:void 0!==e?this._unproject3D(t,e):void 0,startBearing:this.getViewportProps().bearing,startPitch:this.getViewportProps().pitch})}rotate({pos:t,deltaAngleX:e=0,deltaAngleY:i=0}){const{startRotatePos:s,startRotateLngLat:n,startBearing:r,startPitch:o}=this.getState();if(!s||void 0===r||void 0===o)return this;let a;if(a=t?this._getNewRotation(t,s,o,r):{bearing:r+e,pitch:o+i},n){const t=this.makeViewport({...this.getViewportProps(),...a}),e="panByPosition3D"in t?"panByPosition3D":"panByPosition";return this._getUpdatedState({...a,...t[e](n,s)})}return this._getUpdatedState(a)}rotateEnd(){return this._getUpdatedState({startRotatePos:null,startRotateLngLat:null,startBearing:null,startPitch:null})}zoomStart({pos:t},e){return this._getUpdatedState({startZoomLngLat:this._unproject(t),startZoom:this.getViewportProps().zoom},e)}zoom({pos:t,startPos:e,scale:i},s){let{startZoom:n,startZoomLngLat:r}=this.getState();return r||(n=this.getViewportProps().zoom,r=this._unproject(e)||this._unproject(t)),r?this._getUpdatedState({zoom:n+Math.log2(i),[Bt]:{position:r,screenPosition:t}},s):this}zoomEnd(t){return this._getUpdatedState({startZoomLngLat:null,startZoom:null},t)}zoomIn(t=2,e){return this._zoomFromCenter(t,e)}zoomOut(t=2,e){return this._zoomFromCenter(1/t,e)}moveLeft(t=100,e){return this._panFromCenter([t,0],e)}moveRight(t=100,e){return this._panFromCenter([-t,0],e)}moveUp(t=100,e){return this._panFromCenter([0,t],e)}moveDown(t=100,e){return this._panFromCenter([0,-t],e)}rotateLeft(t=15){return this._getUpdatedState({bearing:this.getViewportProps().bearing-t})}rotateRight(t=15){return this._getUpdatedState({bearing:this.getViewportProps().bearing+t})}rotateUp(t=10){return this._getUpdatedState({pitch:this.getViewportProps().pitch+t})}rotateDown(t=10){return this._getUpdatedState({pitch:this.getViewportProps().pitch-t})}shortestPathFrom(t){const e=t.getViewportProps(),i={...this.getViewportProps()},{bearing:s,longitude:n}=i;return Math.abs(s-e.bearing)>180&&(i.bearing=s<0?s+360:s-360),Math.abs(n-e.longitude)>180&&(i.longitude=n<0?n+360:n-360),i}applyConstraints(e,i){const s=e,n=s[Bt];delete s[Bt];const{maxPitch:r,minPitch:o,pitch:a,bearing:h,normalize:c,maxBounds:d,rubberBand:l}=e;c&&(h<-180||h>180)&&(e.bearing=t.mod(h+180,360)-180),e.pitch=t.clamp(a,o,r);const p=this._constrainZoom(e.zoom,e),u=l&&"elastic"===i?.mode;if(e.zoom="preserve"===i?.mode?e.zoom:u?Ut(e.zoom,p,1):p,n){const t=this.makeViewport(e);Object.assign(e,t.panByPosition(n.position,n.screenPosition))}if(c&&(e.longitude<-180||e.longitude>180)&&(e.longitude=t.mod(e.longitude+180,360)-180),d){const s=Wt(e.width,e.height,e.maxBoundsPadding),n=Gt(this.makeViewport({...e,bearing:0,pitch:0}),[e.longitude,e.latitude],s),r=Ht(d[0]),o=Ht(d[1]),a=2**e.zoom,h=[r[0]+n.left/a,r[1]+n.bottom/a],c=[o[0]-n.right/a,o[1]-n.top/a],l=Ht([e.longitude,e.latitude]),p=[t.clamp(l[0],h[0],c[0]),t.clamp(l[1],h[1],c[1])],g=l.slice();if(s.width>=0&&(g[0]="preserve"===i?.mode?l[0]:u?Ut(l[0],p[0],s.width/2/a):p[0]),s.height>=0&&(g[1]="preserve"===i?.mode?l[1]:u?Ut(l[1],p[1],s.height/2/a):p[1]),g[0]!==l[0]||g[1]!==l[1]){const[i,s]=t.worldToLngLat(g);g[0]!==l[0]&&(e.longitude=i),g[1]!==l[1]&&(e.latitude=s)}}return e}_constrainZoom(e,i){i||(i=this.getViewportProps());const{maxZoom:s,maxBounds:n}=i,r=null!==n&&i.width>0&&i.height>0;let{minZoom:o}=i;if(r){const t=Wt(i.width,i.height,i.maxBoundsPadding),e=Ht(n[0]),r=Ht(n[1]),a=r[0]-e[0],h=r[1]-e[1];t.width>0&&Number.isFinite(a)&&a>0&&(o=Math.max(o,Math.log2(t.width/a))),t.height>0&&Number.isFinite(h)&&h>0&&(o=Math.max(o,Math.log2(t.height/h))),o>s&&(o=s)}return t.clamp(e,o,s)}_zoomFromCenter(t,e){const{width:i,height:s}=this.getViewportProps();return this.zoom({pos:[i/2,s/2],scale:t},e)}_panFromCenter(t,e){const{width:i,height:s}=this.getViewportProps();return this.pan({startPos:[i/2,s/2],pos:[i/2+t[0],s/2+t[1]]},e)}_getUpdatedState(t,e){return new this.constructor({makeViewport:this.makeViewport,...this.getViewportProps(),...this.getState(),...t,constraintContext:e})}_unproject(t){const e=this.makeViewport(this.getViewportProps());return t&&e.unproject(t)}_unproject3D(t,e){return this.makeViewport(this.getViewportProps()).unproject(t,{targetZ:e})}_getNewRotation(e,i,s,n){const r=e[0]-i[0],o=e[1]-i[1],a=e[1],h=i[1],{width:c,height:d}=this.getViewportProps(),l=r/c;let p=0;o>0?Math.abs(d-h)>5&&(p=o/(h-d)*1.2):o<0&&h>5&&(p=1-a/h),p=t.clamp(p,-1,1);const{minPitch:u,maxPitch:g}=this.getViewportProps();let v=s;return p>0?v=s+p*(g-s):p<0&&(v=s-p*(u-s)),{pitch:v,bearing:n+180*l}}},$t=class extends jt{constructor(){super(...arguments),this.ControllerState=qt,this.transition={transitionDuration:300,transitionInterpolator:new St({transitionProps:{compare:["longitude","latitude","zoom","bearing","pitch","position"],required:["longitude","latitude","zoom"]}})},this.dragMode="pan",this.rotationPivot="center",this._getAltitude=t=>{if("2d"===this.rotationPivot)return 0;if("3d"===this.rotationPivot&&this.pickPosition){const{x:e,y:i}=this.props,s=this.pickPosition(e+t[0],i+t[1]);if(s&&s.coordinate&&s.coordinate.length>=3)return s.coordinate[2]}}}setProps(t){"rotationPivot"in t&&(this.rotationPivot=t.rotationPivot||"center"),t.getAltitude=this._getAltitude,t.position=t.position||[0,0,0],t.maxBounds=t.maxBounds||(!1===t.normalize?null:Zt),super.setProps(t)}updateViewport(t,e=null,i={}){const s=t.getState();i.isDragging&&s.startRotateLngLat?i={...i,rotationPivotPosition:s.startRotateLngLat}:!1===i.isDragging&&(i={...i,rotationPivotPosition:void 0}),super.updateViewport(t,e,i)}},Xt=class extends vt{constructor(t={}){super(t)}getViewportType(){return t.WebMercatorViewport}get ControllerType(){return $t}};Xt.displayName="MapView";var Yt=new G;var Kt=class{constructor(t){this._resolvedEffects=[],this._defaultEffects=[],this.effects=[],this._context=t,this._needsRedraw="Initial render",this._setEffects([])}addDefaultEffect(t){const e=this._defaultEffects;if(!e.find(e=>e.id===t.id)){const i=e.findIndex(e=>{return i=t,(e.order??1/0)-(i.order??1/0)>0;var i});i<0?e.push(t):e.splice(i,0,t),t.setup(this._context),this._setEffects(this.effects)}}setProps(e){"effects"in e&&(t.deepEqual(e.effects,this.effects,1)||this._setEffects(e.effects))}needsRedraw(t={clearRedrawFlags:!1}){const e=this._needsRedraw;return t.clearRedrawFlags&&(this._needsRedraw=!1),e}getEffects(){return this._resolvedEffects}_setEffects(t){const e={};for(const s of this.effects)e[s.id]=s;const i=[];for(const s of t){const t=e[s.id];let n=s;t&&t!==s?t.setProps?(t.setProps(s.props),n=t):t.cleanup(this._context):t||s.setup(this._context),i.push(n),delete e[s.id]}for(const s in e)e[s].cleanup(this._context);this.effects=i,this._resolvedEffects=i.concat(this._defaultEffects),t.some(t=>t instanceof G)||this._resolvedEffects.push(Yt),this._needsRedraw="effects changed"}finalize(){for(const t of this._resolvedEffects)t.cleanup(this._context);this.effects.length=0,this._resolvedEffects.length=0,this._defaultEffects.length=0}},Jt=class extends F{shouldDrawLayer(t){const{operation:e}=t.props;return e.includes("draw")||e.includes("terrain")}render(t){return this._render(t)}},Qt=class{constructor(t,e={}){this.device=t,this.stats=e.stats,this.layerFilter=null,this.drawPickingColors=!1,this.drawLayersPass=new Jt(t),this.pickLayersPass=new J(t),this.renderCount=0,this._needsRedraw="Initial render",this.renderBuffers=[],this.lastPostProcessEffect=null}setProps(t){this.layerFilter!==t.layerFilter&&(this.layerFilter=t.layerFilter,this._needsRedraw="layerFilter changed"),this.drawPickingColors!==t.drawPickingColors&&(this.drawPickingColors=t.drawPickingColors,this._needsRedraw="drawPickingColors changed")}renderLayers(e){const i=this.drawPickingColors?this.pickLayersPass:this.drawLayersPass,s={layerFilter:this.layerFilter,isPicking:this.drawPickingColors,...e};if(!e.viewports.length){const t=i.render(s),e="stats"in t?t.stats:t;return void this._updateStats(e)}s.effects&&this._preRender(s.effects,s);const n=this.lastPostProcessEffect?this.renderBuffers[0]:s.target;this.lastPostProcessEffect&&(s.clearColor=[0,0,0,0],s.clearCanvas=!0);const r=i.render({...s,target:n}),o="stats"in r?r.stats:r;s.effects&&(this.lastPostProcessEffect&&(s.clearCanvas=void 0===e.clearCanvas||e.clearCanvas),this._postRender(s.effects,s)),this.renderCount++,t.debug("deckRenderer.renderLayers",this,o,e),this._updateStats(o)}needsRedraw(t={clearRedrawFlags:!1}){const e=this._needsRedraw;return t.clearRedrawFlags&&(this._needsRedraw=!1),e}finalize(){const{renderBuffers:t}=this;for(const e of t)e.delete();t.length=0}_updateStats(t){if(!this.stats)return;let e=0;for(const{visibleCount:i}of t)e+=i;this.stats.get("Layers rendered").addCount(e)}_preRender(t,e){this.lastPostProcessEffect=null,e.preRenderStats=e.preRenderStats||{};for(const i of t)e.preRenderStats[i.id]=i.preRender(e),i.postRender&&(this.lastPostProcessEffect=i.id);this.lastPostProcessEffect&&this._resizeRenderBuffers(e.canvasContext)}_resizeRenderBuffers(t=this.device.canvasContext){const{renderBuffers:e}=this,i=t.getDrawingBufferSize(),[s,n]=i;0===e.length&&[0,1].map(t=>{const i=this.device.createTexture({sampler:{minFilter:"linear",magFilter:"linear"},width:s,height:n});e.push(this.device.createFramebuffer({id:`deck-renderbuffer-${t}`,colorAttachments:[i]}))});for(const r of e)r.resize(i)}_postRender(t,e){const{renderBuffers:i}=this,s=e.target??e.canvasContext?.getCurrentFramebuffer()??e.target,n={...e,inputBuffer:i[0],swapBuffer:i[1]};for(const r of t)if(r.postRender){n.target=r.id===this.lastPostProcessEffect?s:void 0;const t=r.postRender(n);n.inputBuffer=t,n.swapBuffer=t===i[0]?i[1]:i[0]}}},te={pickedColor:null,pickedObjectIndex:-1};function ee({pickedColors:e,decodePickingColor:i,deviceX:s,deviceY:n,deviceRadius:r,deviceRect:o}){const{x:a,y:h,width:c,height:d}=o;let l=r*r,p=-1,u=0;for(let t=0;t<d;t++){const i=t+h-n,r=i*i;if(r>l)u+=4*c;else for(let t=0;t<c;t++){if(e[u+3]-1>=0){const e=t+a-s,i=e*e+r;i<=l&&(l=i,p=u)}u+=4}}if(p>=0){const s=e.slice(p,p+4),n=i(s);if(n){const t=Math.floor(p/4/c),e=p/4-t*c;return{...n,pickedColor:s,pickedX:a+e,pickedY:h+t}}t.defaultLogger.error("Picked non-existent layer. Is picking buffer corrupt?")()}return te}function ie({pickedColors:e,decodePickingColor:i}){const s=new Map;if(e)for(let n=0;n<e.length;n+=4)if(e[n+3]-1>=0){const r=e.slice(n,n+4),o=r.join(",");if(!s.has(o)){const e=i(r);e?s.set(o,{...e,color:r}):t.defaultLogger.error("Picked non-existent layer. Is picking buffer corrupt?")()}}return Array.from(s.values())}function se({pickInfo:t,viewports:e,pixelRatio:i,x:s,y:n,z:r}){let o,a=e[0];if(e.length>1&&(a=function(t,e){for(let i=t.length-1;i>=0;i--){const s=t[i];if(s.containsPixel(e))return s}return t[0]}(t?.pickedViewports||e,{x:s,y:n})),a){const t=[s-a.x,n-a.y];void 0!==r&&(t[2]=r),o=a.unproject(t)}return{color:null,layer:null,viewport:a,index:-1,picked:!1,x:s,y:n,pixel:[s,n],coordinate:o,devicePixel:t&&"pickedX"in t?[t.pickedX,t.pickedY]:void 0,pixelRatio:i}}function ne(t){const{pickInfo:e,lastPickedInfo:i,mode:s,layers:n}=t,{pickedColor:r,pickedLayer:o,pickedObjectIndex:a}=e,h=o?[o]:[];if("hover"===s){const t=i.index,e=i.layerId,s=o?o.props.id:null;if(s!==e||a!==t){if(s!==e){const t=n.find(t=>t.props.id===e);t&&h.unshift(t)}i.layerId=s,i.index=a,i.info=null}}const c=se(t),d=new Map;return d.set(null,c),h.forEach(t=>{let e={...c};t===o&&(e.color=r,e.index=a,e.picked=!0),e=re({layer:t,info:e,mode:s});const n=e.layer;t===o&&"hover"===s&&(i.info=e),d.set(n.id,e),"hover"===s&&n.updateAutoHighlight(e)}),d}function re({layer:t,info:e,mode:i}){for(;t&&e;){const s=e.layer||null;e.sourceLayer=s,e.layer=t,e=t.getPickingInfo({info:e,mode:i,sourceLayer:s}),t=t.parent}return e}var oe=class{constructor(t,e={}){this._pickable=!0,this.device=t,this.stats=e.stats,this.pickLayersPass=new J(t),this.lastPickedInfo={index:-1,layerId:null,info:null}}setProps(t){"layerFilter"in t&&(this.layerFilter=t.layerFilter),"_pickable"in t&&(this._pickable=t._pickable)}finalize(){this.pickingFBO&&this.pickingFBO.destroy(),this.depthFBO&&this.depthFBO.destroy()}pickObjectAsync(t){return this._pickClosestObjectAsync(t)}pickObjectsAsync(t){return this._pickVisibleObjectsAsync(t)}pickObject(t){return this._pickClosestObject(t)}pickObjects(t){return this._pickVisibleObjects(t)}getLastPickedObject({x:t,y:e,layers:i,viewports:s},n=this.lastPickedInfo.info){const r=n&&n.layer&&n.layer.id,o=n&&n.viewport&&n.viewport.id,a=r?i.find(t=>t.id===r):null,h=o&&s.find(t=>t.id===o)||s[0],c={x:t,y:e,viewport:h,coordinate:h&&h.unproject([t-h.x,e-h.y]),layer:a};return{...n,...c}}_resizeBuffer(e=this.device.getDefaultCanvasContext()){if(!this.pickingFBO){const e=this.device.createTexture({format:"rgba8unorm",width:1,height:1,usage:t.Texture.RENDER_ATTACHMENT|t.Texture.COPY_SRC});if(this.pickingFBO=this.device.createFramebuffer({colorAttachments:[e],depthStencilAttachment:"depth16unorm"}),this.device.isTextureFormatRenderable("rgba32float")){const e=this.device.createTexture({format:"rgba32float",width:1,height:1,usage:t.Texture.RENDER_ATTACHMENT|t.Texture.COPY_SRC}),i=this.device.createFramebuffer({colorAttachments:[e],depthStencilAttachment:"depth16unorm"});this.depthFBO=i}}const[i,s]=e.getDrawingBufferSize();this.pickingFBO?.resize({width:i,height:s}),this.depthFBO?.resize({width:i,height:s})}_getPickable(t){if(!1===this._pickable)return null;const e=t.filter(t=>this.pickLayersPass.shouldDrawLayer(t)&&!t.isComposite);return e.length?e:null}async _pickClosestObjectAsync({layers:t,views:e,viewports:i,x:s,y:n,radius:r=0,depth:o=1,mode:a="query",unproject3D:h,canvasContext:c=this.device.getDefaultCanvasContext(),onViewportActive:d,effects:l}){const p=c.cssToDeviceRatio(),u=this._getPickable(t);if(!u||0===i.length)return{result:[],emptyInfo:se({viewports:i,x:s,y:n,pixelRatio:p})};this._resizeBuffer(c);const g=c.cssToDevicePixels([s,n],!0),v=[g.x+Math.floor(g.width/2),g.y+Math.floor(g.height/2)],m=Math.round(r*p),{width:f,height:w}=this.pickingFBO,_=this._getPickingRect({deviceX:v[0],deviceY:v[1],deviceRadius:m,deviceWidth:f,deviceHeight:w}),y={x:s-r,y:n-r,width:2*r+1,height:2*r+1};let P;const b=[],C=new Set;for(let M=0;M<o;M++){let t,r;if(_){t=ee({...await this._drawAndSampleAsync({layers:u,views:e,viewports:i,onViewportActive:d,deviceRect:_,cullRect:y,effects:l,pass:`picking:${a}`,canvasContext:c}),deviceX:v[0],deviceY:v[1],deviceRadius:m,deviceRect:_})}else t={pickedColor:null,pickedObjectIndex:-1};const g=this._getDepthLayers(t,u,h);if(g.length>0){const{pickedColors:s}=await this._drawAndSampleAsync({layers:g,views:e,viewports:i,onViewportActive:d,deviceRect:{x:t.pickedX??v[0],y:t.pickedY??v[1],width:1,height:1},cullRect:y,effects:l,pass:`picking:${a}:z`,canvasContext:c},!0);s[3]&&(r=s[0])}t.pickedLayer&&M+1<o&&(C.add(t.pickedLayer),t.pickedLayer.disablePickingIndex(t.pickedObjectIndex)),P=ne({pickInfo:t,lastPickedInfo:this.lastPickedInfo,mode:a,layers:u,viewports:i,x:s,y:n,z:r,pixelRatio:p});for(const e of P.values())e.layer&&b.push(e);if(!t.pickedColor)break}for(const M of C)M.restorePickingColors();return{result:b,emptyInfo:P.get(null)}}_pickClosestObject({layers:t,views:e,viewports:i,x:s,y:n,radius:r=0,depth:o=1,mode:a="query",unproject3D:h,canvasContext:c=this.device.getDefaultCanvasContext(),onViewportActive:d,effects:l}){const p=c.cssToDeviceRatio(),u=this._getPickable(t);if(!u||0===i.length)return{result:[],emptyInfo:se({viewports:i,x:s,y:n,pixelRatio:p})};this._resizeBuffer(c);const g=c.cssToDevicePixels([s,n],!0),v=[g.x+Math.floor(g.width/2),g.y+Math.floor(g.height/2)],m=Math.round(r*p),{width:f,height:w}=this.pickingFBO,_=this._getPickingRect({deviceX:v[0],deviceY:v[1],deviceRadius:m,deviceWidth:f,deviceHeight:w}),y={x:s-r,y:n-r,width:2*r+1,height:2*r+1};let P;const b=[],C=new Set;for(let M=0;M<o;M++){let t,r;if(_){t=ee({...this._drawAndSample({layers:u,views:e,viewports:i,onViewportActive:d,deviceRect:_,cullRect:y,effects:l,pass:`picking:${a}`,canvasContext:c}),deviceX:v[0],deviceY:v[1],deviceRadius:m,deviceRect:_})}else t={pickedColor:null,pickedObjectIndex:-1};const g=this._getDepthLayers(t,u,h);if(g.length>0){const{pickedColors:s}=this._drawAndSample({layers:g,views:e,viewports:i,onViewportActive:d,deviceRect:{x:t.pickedX??v[0],y:t.pickedY??v[1],width:1,height:1},cullRect:y,effects:l,pass:`picking:${a}:z`,canvasContext:c},!0);s[3]&&(r=s[0])}t.pickedLayer&&M+1<o&&(C.add(t.pickedLayer),t.pickedLayer.disablePickingIndex(t.pickedObjectIndex)),P=ne({pickInfo:t,lastPickedInfo:this.lastPickedInfo,mode:a,layers:u,viewports:i,x:s,y:n,z:r,pixelRatio:p});for(const e of P.values())e.layer&&b.push(e);if(!t.pickedColor)break}for(const M of C)M.restorePickingColors();return{result:b,emptyInfo:P.get(null)}}async _pickVisibleObjectsAsync({layers:t,views:e,viewports:i,x:s,y:n,width:r=1,height:o=1,mode:a="query",maxObjects:h=null,canvasContext:c=this.device.getDefaultCanvasContext(),onViewportActive:d,effects:l}){const p=this._getPickable(t);if(!p||0===i.length)return[];this._resizeBuffer(c);const u=c.cssToDeviceRatio(),g=c.cssToDevicePixels([s,n],!0),v=g.x,m=g.y+g.height,f=c.cssToDevicePixels([s+r,n+o],!0),w=f.x+f.width,_=f.y,y={x:v,y:_,width:w-v,height:m-_},P=ie(await this._drawAndSampleAsync({layers:p,views:e,viewports:i,onViewportActive:d,deviceRect:y,cullRect:{x:s,y:n,width:r,height:o},effects:l,pass:`picking:${a}`,canvasContext:c})),b=new Map,C=[],M=Number.isFinite(h);for(let k=0;k<P.length&&!(M&&C.length>=h);k++){const t=P[k];let e={color:t.pickedColor,layer:null,index:t.pickedObjectIndex,picked:!0,x:s,y:n,pixelRatio:u};e=re({layer:t.pickedLayer,info:e,mode:a});const i=e.layer.id;b.has(i)||b.set(i,new Set);const r=b.get(i),o=e.object??e.index;r.has(o)||(r.add(o),C.push(e))}return C}_pickVisibleObjects({layers:t,views:e,viewports:i,x:s,y:n,width:r=1,height:o=1,mode:a="query",maxObjects:h=null,canvasContext:c=this.device.getDefaultCanvasContext(),onViewportActive:d,effects:l}){const p=this._getPickable(t);if(!p||0===i.length)return[];this._resizeBuffer(c);const u=c.cssToDeviceRatio(),g=c.cssToDevicePixels([s,n],!0),v=g.x,m=g.y+g.height,f=c.cssToDevicePixels([s+r,n+o],!0),w=f.x+f.width,_=f.y,y={x:v,y:_,width:w-v,height:m-_},P=ie(this._drawAndSample({layers:p,views:e,viewports:i,onViewportActive:d,deviceRect:y,cullRect:{x:s,y:n,width:r,height:o},effects:l,pass:`picking:${a}`,canvasContext:c})),b=new Map,C=[],M=Number.isFinite(h);for(let k=0;k<P.length&&!(M&&C.length>=h);k++){const t=P[k];let e={color:t.pickedColor,layer:null,index:t.pickedObjectIndex,picked:!0,x:s,y:n,pixelRatio:u};e=re({layer:t.pickedLayer,info:e,mode:a});const i=e.layer.id;b.has(i)||b.set(i,new Set);const r=b.get(i),o=e.object??e.index;r.has(o)||(r.add(o),C.push(e))}return C}async _drawAndSampleAsync({layers:e,views:i,viewports:s,onViewportActive:n,deviceRect:r,cullRect:o,effects:a,pass:h,canvasContext:c},d=!1){const l=d?this.depthFBO:this.pickingFBO,p={layers:e,layerFilter:this.layerFilter,views:i,viewports:s,onViewportActive:n,pickingFBO:l,deviceRect:r,cullRect:o,effects:a,pass:h,canvasContext:c,pickZ:d,preRenderStats:{},isPicking:!0};for(const t of a)t.useInPicking&&(p.preRenderStats[t.id]=t.preRender(p));const{decodePickingColor:u,stats:g}=this.pickLayersPass.render(p);this._updateStats(g);const{x:v,y:m,width:f,height:w}=r,_=l.colorAttachments[0]?.texture;if(!_)throw new Error("Picking framebuffer color attachment is missing");const y=await this._readTextureDataAsync(_,{x:v,y:m,width:f,height:w},d?Float32Array:Uint8Array);if(!d){let e=!1;for(let t=3;t<y.length;t+=4)if(0!==y[t]){e=!0;break}!e&&y.length>0&&t.defaultLogger.warn("Async pick readback returned only zero alpha values",{deviceRect:r,bytes:Array.from(y.subarray(0,Math.min(y.length,16)))})()}return{pickedColors:y,decodePickingColor:u}}async _readTextureDataAsync(t,i,s){const{width:n,height:r}=i,o=t.computeMemoryLayout(i),a=this.device.createBuffer({byteLength:o.byteLength,usage:e.Buffer.COPY_DST|e.Buffer.MAP_READ});try{t.readBuffer(i,a);const e=await a.readAsync(0,o.byteLength),h=s.BYTES_PER_ELEMENT;if(o.bytesPerRow%h!==0)throw new Error(`Texture readback row stride ${o.bytesPerRow} is not aligned to ${h}-byte elements.`);const c=new s(e.buffer,e.byteOffset,o.byteLength/h),d=4*n,l=o.bytesPerRow/h;if(l<d)throw new Error(`Texture readback row stride ${l} is smaller than packed row length ${d}.`);const p=new s(n*r*4);for(let t=0;t<r;t++){const e=t*l;p.set(c.subarray(e,e+d),t*d)}return p}finally{a.destroy()}}_drawAndSample({layers:t,views:e,viewports:i,onViewportActive:s,deviceRect:n,cullRect:r,effects:o,pass:a,canvasContext:h},c=!1){const d=c?this.depthFBO:this.pickingFBO,l={layers:t,layerFilter:this.layerFilter,views:e,viewports:i,onViewportActive:s,pickingFBO:d,deviceRect:n,cullRect:r,effects:o,pass:a,canvasContext:h,pickZ:c,preRenderStats:{},isPicking:!0};for(const _ of o)_.useInPicking&&(l.preRenderStats[_.id]=_.preRender(l));const{decodePickingColor:p,stats:u}=this.pickLayersPass.render(l);this._updateStats(u);const{x:g,y:v,width:m,height:f}=n,w=new(c?Float32Array:Uint8Array)(m*f*4);return this.device.readPixelsToArrayWebGL(d,{sourceX:g,sourceY:v,sourceWidth:m,sourceHeight:f,target:w}),{pickedColors:w,decodePickingColor:p}}_updateStats(t){if(!this.stats)return;let e=0;for(const{visibleCount:i}of t)e+=i;this.stats.get("Layers picked").addCount(e)}_getDepthLayers(t,e,i){if(!i||!this.depthFBO)return[];const{pickedLayer:s}=t;return s&&!("drape"===s?.state?.terrainDrawMode)?[s]:e.filter(t=>t.props.operation.includes("terrain"))}_getPickingRect({deviceX:t,deviceY:e,deviceRadius:i,deviceWidth:s,deviceHeight:n}){const r=Math.max(0,t-i),o=Math.max(0,e-i),a=Math.min(s,t+i+1)-r,h=Math.min(n,e+i+1)-o;return a<=0||h<=0?null:{x:r,y:o,width:a,height:h}}},ae={"top-left":{top:0,left:0},"top-right":{top:0,right:0},"bottom-left":{bottom:0,left:0},"bottom-right":{bottom:0,right:0},fill:{top:0,left:0,bottom:0,right:0}},he="top-left",ce="root",de=class{constructor({deck:t,parentElement:e}){this.defaultWidgets=[],this.widgets=[],this.resolvedWidgets=[],this.containers={},this.lastViewports={},this.deck=t,e?.classList.add("deck-widget-container"),this.parentElement=e}getWidgets(){return this.resolvedWidgets}setProps(e){if(e.widgets&&!t.deepEqual(e.widgets,this.widgets,1)){const t=e.widgets.filter(Boolean);this._setWidgets(t)}}finalize(){for(const t of this.getWidgets())this._removeWidget(t);this.defaultWidgets.length=0,this.resolvedWidgets.length=0;for(const t in this.containers)this.containers[t].remove()}addDefault(t){this.defaultWidgets.find(e=>e.id===t.id)||(this._addWidget(t),this.defaultWidgets.push(t),this._setWidgets(this.widgets))}onRedraw({viewports:t,layers:e}){const i=t.reduce((t,e)=>(t[e.id]=e,t),{});for(const s of this.getWidgets()){const{viewId:n}=s;if(n){const t=i[n];t&&(s.onViewportChange&&s.onViewportChange(t),s.onRedraw?.({viewports:[t],layers:e}))}else{if(s.onViewportChange)for(const e of t)s.onViewportChange(e);s.onRedraw?.({viewports:t,layers:e})}}this.lastViewports=i,this._updateContainers()}onHover(t,e){for(const i of this.getWidgets()){const{viewId:s}=i;s&&s!==t.viewport?.id||i.onHover?.(t,e)}}getCanvasBounds(t){const e=(this.deck?.getCanvas?.())?.getBoundingClientRect(),i=this.parentElement?.getBoundingClientRect(),s=this.deck?.getCanvasContext?.(t?.id);if(s&&i){s.updatePosition();const[t,e]=s.getPosition(),[n,r]=s.getCSSSize();return{x:t-i.left,y:e-i.top,width:n,height:r}}return{x:e&&i?e.left-i.left:0,y:e&&i?e.top-i.top:0,width:e?.width||this.deck?.width||0,height:e?.height||this.deck?.height||0}}onEvent(e,i){const s=t.EVENT_HANDLERS[i.type];if(s)for(const t of this.getWidgets()){const{viewId:n}=t;n&&n!==e.viewport?.id||t[s]?.(e,i)}}_setWidgets(t){const e={};for(const i of this.resolvedWidgets)e[i.id]=i;this.resolvedWidgets.length=0;for(const i of this.defaultWidgets)e[i.id]=null,this.resolvedWidgets.push(i);for(let i of t){const t=e[i.id];t?t.viewId!==i.viewId||t.placement!==i.placement?(this._removeWidget(t),this._addWidget(i)):i!==t&&(t.setProps(i.props),i=t):this._addWidget(i),e[i.id]=null,this.resolvedWidgets.push(i)}for(const i in e){const t=e[i];t&&this._removeWidget(t)}this.widgets=t}_addWidget(t){const{viewId:e=null,placement:i=he}=t,s=t.props._container??e;t.widgetManager=this,t.deck=this.deck,t.rootElement=t._onAdd({deck:this.deck,viewId:e}),t.rootElement&&this._getContainer(s,i).append(t.rootElement),t.updateHTML()}_removeWidget(t){t.onRemove?.(),t.rootElement&&t.rootElement.remove(),t.rootElement=void 0,t.deck=void 0,t.widgetManager=void 0}_getContainer(t,e){if(t&&"string"!=typeof t)return t;const i=t||ce;let s=this.containers[i];s||(s=document.createElement("div"),s.style.pointerEvents="none",s.style.position="absolute",s.style.overflow="hidden",this.parentElement?.append(s),this.containers[i]=s);let n=s.querySelector(`.${e}`);return n||(n=globalThis.document.createElement("div"),n.className=e,n.style.position="absolute",n.style.zIndex="2",Object.assign(n.style,ae[e]),s.append(n)),n}_updateContainers(){for(const t in this.containers){const e=this.lastViewports[t]||null,i=t===ce||e,s=this.containers[t];if(i){const t=this._getContainerBounds(e);s.style.display="block",s.style.left=`${t.x}px`,s.style.top=`${t.y}px`,s.style.width=`${t.width}px`,s.style.height=`${t.height}px`}else s.style.display="none"}}_getContainerBounds(t){if(!t)return{x:0,y:0,width:this.parentElement?.clientWidth||this.deck.width,height:this.parentElement?.clientHeight||this.deck.height};const e=this.getCanvasBounds(t);return{x:e.x+t.x,y:e.y+t.y,width:t.width,height:t.height}}};function le(t,e){e&&Object.entries(e).map(([e,i])=>{e.startsWith("--")?t.style.setProperty(e,i):t.style[e]=i})}var pe=class{constructor(t){this.viewId=null,this.props={...this.constructor.defaultProps,...t},this.id=this.props.id}setProps(e){const i=this.props,s=this.rootElement;var n,r;s&&i.className!==e.className&&(i.className&&s.classList.remove(i.className),e.className&&s.classList.add(e.className)),s&&!t.deepEqual(i.style,e.style,1)&&(n=s,(r=i.style)&&Object.keys(r).map(t=>{t.startsWith("--")?n.style.removeProperty(t):n.style[t]=""}),le(s,e.style)),Object.assign(this.props,e),this.updateHTML()}updateHTML(){this.rootElement&&this.onRenderHTML(this.rootElement)}get viewIds(){return this.viewId?[this.viewId]:this.deck?.getViews().map(t=>t.id)??[]}getViewState(t){return this.deck?.viewManager?.getViewState(t)||{}}setViewState(t,e){this.deck?._onViewStateChange({viewId:t,viewState:e,interactionState:{}})}onCreateRootElement(){const t=["deck-widget",this.className,this.props.className],e=document.createElement("div");return t.filter(t=>"string"==typeof t&&t.length>0).forEach(t=>e.classList.add(t)),le(e,this.props.style),e}_onAdd(t){return this.onAdd(t)??this.onCreateRootElement()}onAdd(t){}onRemove(){}onViewportChange(t){}onRedraw(t){}onHover(t,e){}onClick(t,e){}onDrag(t,e){}onDragStart(t,e){}onDragEnd(t,e){}};pe.defaultProps={id:"widget",style:{},_container:null,className:""};var ue={zIndex:"1",position:"absolute",pointerEvents:"none",color:"#a0a7b4",backgroundColor:"#29323c",padding:"10px",top:"0",left:"0",display:"none"},ge=class extends pe{constructor(t={}){super(t),this.id="default-tooltip",this.placement="fill",this.className="deck-tooltip",this.isVisible=!1,this.setProps(t)}onCreateRootElement(){const t=document.createElement("div");return t.className=this.className,Object.assign(t.style,ue),t}onRenderHTML(t){}onViewportChange(t){this.isVisible&&t.id===this.lastViewport?.id&&!t.equals(this.lastViewport)&&this.setTooltip(null),this.lastViewport=t}onHover(t){const{deck:e}=this,i=e&&e.props.getTooltip;if(!i)return;const s=i(t),n=this.widgetManager?.getCanvasBounds(t.viewport),r=t.x+(n?.x||0),o=t.y+(n?.y||0);this.setTooltip(s,r,o)}setTooltip(t,e,i){const s=this.rootElement;if(s){if("string"==typeof t)s.innerText=t;else{if(!t)return this.isVisible=!1,void(s.style.display="none");t.text&&(s.innerText=t.text),t.html&&(s.innerHTML=t.html),t.className&&(s.className=t.className)}this.isVisible=!0,s.style.display="block",s.style.transform=`translate(${e}px, ${i}px)`,t&&"object"==typeof t&&"style"in t&&Object.assign(s.style,t.style)}}};ge.defaultProps={...pe.defaultProps};var ve=class{constructor(t){this.targets={},this.order=[],this.eventManagers={},this._eventRootToCanvasId=new WeakMap,this._createEventManager=t.createEventManager,this._getEventRoot=t.getEventRoot}finalize(){for(const t of Object.values(this.targets))t.eventManager.destroy(),t.presentationContext.destroy();this.targets={},this.order=[],this.eventManagers={},this._eventRootToCanvasId=new WeakMap}syncCanvasEntries(t){const e=this._normalizeCanvasList(t.canvases),i={},s=[],n=new Map;for(const{canvas:o}of e){const t=this._getEventRoot(o);n.set(t,(n.get(t)||0)+1)}for(const{id:o,canvas:a}of e){const e=this._getEventRoot(a),r=1===n.get(e)?e:a;let h=this.targets[o];if(!h||h.device!==t.device||h.canvas!==a||h.eventRoot!==r){h?.eventManager.destroy(),h?.presentationContext.destroy();const e=t.device.createPresentationContext({id:o,canvas:a,useDevicePixels:t.useDevicePixels,autoResize:!0});h={id:o,device:t.device,canvas:a,eventRoot:r,presentationContext:e,eventManager:this._createEventManager(r)}}this._eventRootToCanvasId.set(r,o),this._eventRootToCanvasId.set(a,o),i[o]=h,s.push(o)}for(const[o,a]of Object.entries(this.targets))i[o]||(a.eventManager.destroy(),a.presentationContext.destroy());this.targets=i,this.order=s;const r=Object.fromEntries(Object.entries(i).map(([t,e])=>[t,e.eventManager]));this._haveSameEventManagers(r)||(this.eventManagers=r)}getCanvasIdFromEvent(t){return t?this._eventRootToCanvasId.get(t):void 0}getTarget(t){return this.targets[t||this.order[0]||"default-canvas"]||null}_normalizeCanvasList(e=[]){const i=new Set;return e.map((e,s)=>{let n,r;return"string"==typeof e?(n=document.getElementById(e),t.assert(n,`Canvas with id ${e} not found`),r=e):(n=e,r=n.id||`deckgl-canvas-${s}`),t.assert(!i.has(r),`Duplicate canvas id ${r}`),i.add(r),{id:r,canvas:n}})}_haveSameEventManagers(t){const e=Object.keys(t),i=Object.keys(this.eventManagers);return e.length===i.length&&e.every(e=>t[e]===this.eventManagers[e])}},me={WEBGL_depth_texture:{UNSIGNED_INT_24_8_WEBGL:34042},OES_element_index_uint:{},OES_texture_float:{},OES_texture_half_float:{HALF_FLOAT_OES:5131},EXT_color_buffer_float:{},OES_standard_derivatives:{FRAGMENT_SHADER_DERIVATIVE_HINT_OES:35723},EXT_frag_depth:{},EXT_blend_minmax:{MIN_EXT:32775,MAX_EXT:32776},EXT_shader_texture_lod:{}},fe=t=>({drawBuffersWEBGL:e=>t.drawBuffers(e),COLOR_ATTACHMENT0_WEBGL:36064,COLOR_ATTACHMENT1_WEBGL:36065,COLOR_ATTACHMENT2_WEBGL:36066,COLOR_ATTACHMENT3_WEBGL:36067}),we=t=>({VERTEX_ARRAY_BINDING_OES:34229,createVertexArrayOES:()=>t.createVertexArray(),deleteVertexArrayOES:e=>t.deleteVertexArray(e),isVertexArrayOES:e=>t.isVertexArray(e),bindVertexArrayOES:e=>t.bindVertexArray(e)}),_e=t=>({VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:35070,drawArraysInstancedANGLE:(...e)=>t.drawArraysInstanced(...e),drawElementsInstancedANGLE:(...e)=>t.drawElementsInstanced(...e),vertexAttribDivisorANGLE:(...e)=>t.vertexAttribDivisor(...e)});function ye(t=!0){const e=HTMLCanvasElement.prototype;if(!t&&e.originalGetContext)return e.getContext=e.originalGetContext,void(e.originalGetContext=void 0);e.originalGetContext=e.getContext,e.getContext=function(t,e){if("webgl"===t||"experimental-webgl"===t){const t=this.originalGetContext("webgl2",e);return t instanceof HTMLElement&&function(t){t.getExtension("EXT_color_buffer_float");const e={...me,WEBGL_disjoint_timer_query:t.getExtension("EXT_disjoint_timer_query_webgl2"),WEBGL_draw_buffers:fe(t),OES_vertex_array_object:we(t),ANGLE_instanced_arrays:_e(t)},i=t.getExtension.bind(t);t.getExtension=function(t){const s=i(t);return s||(t in e?e[t]:null)};const s=t.getSupportedExtensions;t.getSupportedExtensions=function(){return(s.apply(t)||[])?.concat(Object.keys(e))}}(t),t}return this.originalGetContext(t,e)}}var Pe=new class extends h{type="webgl";enforceWebGL2(t){ye(t)}isSupported(){return"undefined"!=typeof WebGL2RenderingContext}isDeviceHandle(t){return"undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||("undefined"!=typeof WebGLRenderingContext&&t instanceof WebGLRenderingContext&&e.log.warn("WebGL1 is not supported",t)(),!1)}async attach(t,e={}){const{WebGLDevice:i}=await Promise.resolve().then(()=>require("./webgl-device-BXkaCOiH.cjs")).then(t=>t.webgl_device_exports);if(t instanceof i)return t;const s=i.getDeviceFromContext(t);if(s)return s;if(!function(t){return"undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||Boolean(t&&"function"==typeof t.createVertexArray)}(t))throw new Error("Invalid WebGL2RenderingContext");e=be(e),await Ce(e);const n=!0===e.createCanvasContext?{}:e.createCanvasContext;return new i({...e,_handle:t,createCanvasContext:{canvas:t.canvas,autoResize:!1,...n}})}async create(t={}){const{WebGLDevice:i}=await Promise.resolve().then(()=>require("./webgl-device-BXkaCOiH.cjs")).then(t=>t.webgl_device_exports);t=be(t),await Ce(t);try{const s=new i(t);e.log.groupCollapsed(1,`WebGLDevice ${s.id} created`)();const n=`${s._reused?"Reusing":"Created"} device with WebGL2 ${s.props.debug?"debug ":""}context: ${s.info.vendor}, ${s.info.renderer} for canvas: ${s.canvasContext.id}`;return e.log.probe(1,n)(),e.log.table(1,s.info)(),s}finally{e.log.groupEnd(1)(),e.log.info(1,"%cWebGL call tracing: luma.log.set('debug-webgl') ","color: white; background: blue; padding: 2px 6px; border-radius: 3px;")()}}};function be(i){return{...i,debug:i.debug??t.Device.defaultProps.debug,debugWebGL:i.debugWebGL??t.Device.defaultProps.debugWebGL,debugSpectorJS:i.debugSpectorJS??Boolean(e.log.get("debug-spectorjs"))}}async function Ce(i){const s=[];(i.debugWebGL||i.debug)&&s.push(t.loadRegisteredWebGLDeveloperTools()),i.debugSpectorJS&&s.push(t.loadRegisteredSpectorJS(i));const n=await Promise.allSettled(s);for(const t of n)"rejected"===t.status&&e.log.error(`Failed to initialize debug libraries ${t.reason}`)()}function Me(){}function ke(t){return t.deviceProps?.debug??t.debug}var xe={id:"",width:"100%",height:"100%",style:null,viewState:null,initialViewState:null,pickingRadius:0,pickAsync:"auto",layerFilter:null,parameters:{},parent:null,device:null,deviceProps:{},gl:null,canvas:null,_canvases:null,layers:[],effects:[],views:null,controller:null,useDevicePixels:!0,touchAction:"none",eventRecognizerOptions:{},_framebuffer:null,_animate:!1,_pickable:!0,_typedArrayManagerProps:{},_customRender:null,widgets:[],onDeviceInitialized:Me,onWebGLInitialized:Me,onResize:Me,onViewStateChange:Me,onInteractionStateChange:Me,onBeforeRender:Me,onAfterRender:Me,onLoad:Me,onError:e=>t.defaultLogger.error(e.message,e.cause)(),onHover:null,onClick:null,onDragStart:null,onDrag:null,onDragEnd:null,_onMetrics:null,getCursor:({isDragging:t})=>t?"grabbing":"grab",getTooltip:null,debug:!1,drawPickingColors:!1},Se=class{constructor(e){this.width=0,this.height=0,this.userData={},this.device=null,this.canvas=null,this.viewManager=null,this.layerManager=null,this.effectManager=null,this.deckRenderer=null,this.deckPicker=null,this.eventManager=null,this.eventManagers={},this.widgetManager=null,this.tooltip=null,this.animationLoop=null,this._canvasContext=null,this._deviceResizeHandler=null,this.cursorState={isHovering:!1,isDragging:!1},this.stats=new t.Stats({id:"deck.gl"}),this.metrics={fps:0,setPropsTime:0,layersCount:0,drawLayersCount:0,updateLayersCount:0,updateAttributesCount:0,updateAttributesTime:0,framesRedrawn:0,pickTime:0,pickCount:0,pickLayersCount:0,gpuTime:0,gpuTimePerFrame:0,cpuTime:0,cpuTimePerFrame:0,bufferMemory:0,textureMemory:0,renderbufferMemory:0,gpuMemory:0},this._metricsCounter=0,this._hoverPickSequence=0,this._pointerDownPickSequence=0,this._needsRedraw="Initial render",this._canvasManager=new ve({createEventManager:t=>this._createEventManager(t),getEventRoot:t=>this._getEventRoot(t)}),this._ownedCanvas=null,this._pickRequest={mode:"hover",x:-1,y:-1,radius:0,canvasId:void 0,event:null,unproject3D:!1},this._lastPointerDownInfo=null,this._lastPointerDownInfoPromise=null,this._onPointerMove=t=>{const{_pickRequest:e}=this,i=this._getCanvasIdFromEvent(t);if("pointerleave"===t.type)e.x=-1,e.y=-1,e.radius=0,e.canvasId=i;else{if(t.leftButton||t.rightButton)return;{const s=t.offsetCenter;if(!s)return;e.x=s.x,e.y=s.y,e.radius=this.props.pickingRadius,e.canvasId=i}}this.layerManager&&(this.layerManager.context.mousePosition={x:e.x,y:e.y}),e.event=t},this._onEvent=e=>{const i=t.EVENT_HANDLERS[e.type],s=e.offsetCenter,n=this._getCanvasIdFromEvent(e);if(!i||!s||!this.layerManager)return;const r=this.layerManager.getLayers(),o=this._getInternalPickingMode();if(o){if("sync"===o){const t="click"===e.type&&this._shouldUnproject3D(r)?this._getFirstPickedInfo(this._pickPointSync(this._getPointPickOptions(s.x,s.y,{unproject3D:!0,canvasId:n},r))):this._getLastPointerDownPickingInfo(s.x,s.y,n,r);return void this._dispatchPickingEvent(t,e)}(this._lastPointerDownInfoPromise||Promise.resolve(this._getLastPointerDownPickingInfo(s.x,s.y,n,r))).then(t=>{this._dispatchPickingEvent(t,e)}).catch(t=>this.props.onError?.(t))}},this._onPointerDown=t=>{const e=t.offsetCenter,i=this._getCanvasIdFromEvent(t);if(!e)return;const s=this._getInternalPickingMode();if(!s)return;const n=this.layerManager?.getLayers()||[],r=++this._pointerDownPickSequence;if("sync"===s){const t=this._pickPointSync({x:e.x,y:e.y,canvasId:i,radius:this.props.pickingRadius}),s=this._getFirstPickedInfo(t);return this._lastPointerDownInfo=s,void(this._lastPointerDownInfoPromise=Promise.resolve(s))}const o=this._pickPointAsync(this._getPointPickOptions(e.x,e.y,{canvasId:i},n)).then(t=>this._getFirstPickedInfo(t)).then(t=>(r===this._pointerDownPickSequence&&(this._lastPointerDownInfo=t),t)).catch(t=>{this.props.onError?.(t);const s=this.deckPicker&&this.viewManager?this._getLastPointerDownPickingInfo(e.x,e.y,i,n):{};return r===this._pointerDownPickSequence&&(this._lastPointerDownInfo=s),s});this._lastPointerDownInfo=null,this._lastPointerDownInfoPromise=o};const i=e;this.props={...xe,...e},e=this.props,this._validateCanvasConfiguration(e),e.viewState&&e.initialViewState&&t.defaultLogger.warn("View state tracking is disabled. Use either `initialViewState` for auto update or `viewState` for manual update.")(),this.viewState=this.props.initialViewState,e.device&&(this.device=e.device,this._setDeviceCanvasContext(e.device));let s=this.device;!s&&e.gl&&(e.gl instanceof WebGLRenderingContext&&t.defaultLogger.error("WebGL1 context not supported.")(),s=Pe.attach(e.gl,{_cacheShaders:!0,_cachePipelines:!0,...e.deviceProps,debug:ke(e)})),s||(s=this._createDevice(e)),this.animationLoop=this._createAnimationLoop(s,e),this.setProps(i),e._typedArrayManagerProps&&t.typed_array_manager_default.setOptions(e._typedArrayManagerProps),this.animationLoop.start()}finalize(){this._restoreDeviceResizeHandler(),this.animationLoop?.stop(),this.animationLoop?.destroy(),this.animationLoop=null,this._hoverPickSequence++,this._pointerDownPickSequence++,this._lastPointerDownInfo=null,this._lastPointerDownInfoPromise=null,this.layerManager?.finalize(),this.layerManager=null,this.viewManager?.finalize(),this.viewManager=null,this.effectManager?.finalize(),this.effectManager=null,this.deckRenderer?.finalize(),this.deckRenderer=null,this.deckPicker?.finalize(),this.deckPicker=null,Object.keys(this._canvasManager.targets).length||this.eventManager?.destroy(),this.eventManager=null,this.eventManagers={},this.widgetManager?.finalize(),this.widgetManager=null,this._canvasManager.finalize(),this._isMultiCanvasMode()?this.canvas=null:this.canvas&&this.canvas===this._ownedCanvas&&(this.canvas.parentElement?.removeChild(this.canvas),this.canvas=null,this._ownedCanvas=null),this._canvasContext=null}setProps(e){this.stats.get("setProps Time").timeStart(),"onLayerHover"in e&&t.defaultLogger.removed("onLayerHover","onHover")(),"onLayerClick"in e&&t.defaultLogger.removed("onLayerClick","onClick")(),e.initialViewState&&!t.deepEqual(this.props.initialViewState,e.initialViewState,3)&&(this.viewState=e.initialViewState),t.assert(!("_canvases"in e)||Array.isArray(e._canvases)===this._isMultiCanvasMode()),Object.assign(this.props,e),this._validateCanvasConfiguration(this.props),this._validateInternalPickingMode(),this.device&&this._isMultiCanvasMode()&&this._syncCanvasTargets(),this._setCanvasSize(this.props);const i=Object.create(this.props);if(Object.assign(i,{views:this._getViews(),width:this.width,height:this.height,viewState:this._getViewState(),eventManagers:this.eventManagers}),e.device&&e.device.id!==this.device?.id){const i=e.device.getDefaultCanvasContext();this.animationLoop?.stop(),this._isMultiCanvasMode()||this.canvas===i.canvas||(this.canvas?.remove(),this.eventManager?.destroy(),this.canvas=null),this._setDeviceCanvasContext(e.device),t.defaultLogger.log(`recreating animation loop for new device! id=${e.device.id}`)(),this.animationLoop=this._createAnimationLoop(e.device,e),this.animationLoop.start()}if(this.animationLoop?.setProps(i),void 0!==e.useDevicePixels&&this._canvasContext?.setProps){this._canvasContext.setProps({useDevicePixels:e.useDevicePixels});for(const t of Object.values(this._canvasManager.targets))t.presentationContext.setProps({useDevicePixels:e.useDevicePixels})}this.layerManager&&(this.viewManager.setProps(i),this.layerManager.activateViewport(this.getViewports()[0]),this.layerManager.setProps(i),this.effectManager.setProps(i),this.deckRenderer.setProps(i),this.deckPicker.setProps(i),this.widgetManager.setProps(i)),this.stats.get("setProps Time").timeEnd()}needsRedraw(t={clearRedrawFlags:!1}){if(!this.layerManager)return!1;if(this.props._animate)return"Deck._animate";let e=this._needsRedraw;t.clearRedrawFlags&&(this._needsRedraw=!1);const i=this.viewManager.needsRedraw(t),s=this.layerManager.needsRedraw(t),n=this.effectManager.needsRedraw(t),r=this.deckRenderer.needsRedraw(t);return e=e||i||s||n||r,e}redraw(t){if(!this.layerManager)return;let e=this.needsRedraw({clearRedrawFlags:!0});e=t||e,e&&(this.stats.get("Redraw Count").incrementCount(),this.props._customRender?this.props._customRender(e):this._drawLayers(e))}get isInitialized(){return null!==this.viewManager}getViews(){return t.assert(this.viewManager),this.viewManager.views}getView(e){return t.assert(this.viewManager),this.viewManager.getView(e)}getViewports(e){return t.assert(this.viewManager),this.viewManager.getViewports(e)}getCanvas(){return this.canvas}getCanvasContext(t){const e=t?this.viewManager?.getView(t)?.props.canvasId:void 0;return this._getCanvasContext(e)}getEventManager(t){if(!t||!this.viewManager)return this.eventManager;const e=this.viewManager.getCanvasId(t)||"default-canvas";return this.eventManagers[e]||this.eventManager}async pickObjectAsync(t){const e=(await this._pickAsync("pickObjectAsync","pickObject Time",t)).result;return e.length?e[0]:null}async pickObjectsAsync(t){return await this._pickAsync("pickObjectsAsync","pickObjects Time",t)}pickObject(t){const e=this._pick("pickObject","pickObject Time",t).result;return e.length?e[0]:null}pickMultipleObjects(t){return t.depth=t.depth||10,this._pick("pickObject","pickMultipleObjects Time",t).result}pickObjects(t){return this._pick("pickObjects","pickObjects Time",t)}_pickPositionForController(t,e,i){return"sync"!==this._getInternalPickingMode()?null:this.pickObject({x:t,y:e,radius:0,unproject3D:!0,canvasId:i?this.viewManager?.getCanvasId(i):void 0})}_addResources(t,e=!1){for(const i in t)this.layerManager.resourceManager.add({resourceId:i,data:t[i],forceUpdate:e})}_removeResources(t){for(const e of t)this.layerManager.resourceManager.remove(e)}_addDefaultEffect(t){this.effectManager.addDefaultEffect(t)}_addDefaultShaderModule(t){this.layerManager.addDefaultShaderModule(t)}_removeDefaultShaderModule(t){this.layerManager?.removeDefaultShaderModule(t)}_resolveInternalPickingMode(){const{pickAsync:t}=this.props,e=this.device?.type||this.props.deviceProps?.type;if("auto"===t)return"webgpu"===e?"async":"sync";if("sync"===t&&"webgpu"===e)throw new Error('`pickAsync: "sync"` is not supported when Deck is using a WebGPU device.');return t}_getInternalPickingMode(){try{return this._resolveInternalPickingMode()}catch(t){return this.props.onError?.(t),null}}_validateInternalPickingMode(){this._getInternalPickingMode()}_getFirstPickedInfo({result:t,emptyInfo:e}){return t[0]||e}_shouldUnproject3D(t=this.layerManager?.getLayers()||[]){return t.some(t=>"3d"===t.props.pickable)}_getPointPickOptions(t,e,i={},s=this.layerManager?.getLayers()||[]){return{x:t,y:e,canvasId:i.canvasId,radius:this.props.pickingRadius,unproject3D:this._shouldUnproject3D(s),...i}}_pickPointSync(t){return this._pick("pickObject","pickObject Time",t)}_pickPointAsync(t){return this._pickAsync("pickObjectAsync","pickObject Time",t)}_getLastPointerDownPickingInfo(t,e,i,s=this.layerManager?.getLayers()||[]){return this.deckPicker.getLastPickedObject({x:t,y:e,layers:s,viewports:this.getViewports({x:t,y:e,canvasId:i})},this._lastPointerDownInfo)}_applyHoverCallbacks({result:t,emptyInfo:e},i){if(!this.widgetManager)return;this.cursorState.isHovering=t.length>0;let s=e,n=!1;for(const r of t)s=r,n=r.layer?.onHover(r,i)||n;n||(this.props.onHover?.(s,i),this.widgetManager.onHover(s,i))}_dispatchPickingEvent(e,i){if(!this.layerManager||!this.widgetManager)return;const s=t.EVENT_HANDLERS[i.type];if(!s)return;const{layer:n}=e,r=n&&(n[s]||n.props[s]),o=this.props[s];let a=!1;r&&(a=r.call(n,e,i)),a||(o?.(e,i),this.widgetManager.onEvent(e,i))}_pickAsync(e,i,s){t.assert(this.deckPicker);const{stats:n}=this,r=this._isMultiCanvasMode()?s.canvasId||this._getDefaultCanvasId():s.canvasId,o=this._getCanvasContext(r)||void 0;n.get("Pick Count").incrementCount(),n.get(i).timeStart(),this._resizeForCanvasTarget(r);const a=this.deckPicker[e]({layers:this.layerManager.getLayers(s),views:this.viewManager.getViews(),viewports:this.getViewports({...s,canvasId:r}),onViewportActive:this.layerManager.activateViewport,effects:this.effectManager.getEffects(),...s,canvasId:r,canvasContext:o});return n.get(i).timeEnd(),a}_pick(e,i,s){t.assert(this.deckPicker);const{stats:n}=this,r=this._isMultiCanvasMode()?s.canvasId||this._getDefaultCanvasId():s.canvasId,o=this._getCanvasContext(r)||void 0;n.get("Pick Count").incrementCount(),n.get(i).timeStart(),this._resizeForCanvasTarget(r);const a=this.deckPicker[e]({layers:this.layerManager.getLayers(s),views:this.viewManager.getViews(),viewports:this.getViewports({...s,canvasId:r}),onViewportActive:this.layerManager.activateViewport,effects:this.effectManager.getEffects(),...s,canvasId:r,canvasContext:o});return n.get(i).timeEnd(),a}_createCanvas(e){let i=e.canvas;return"string"==typeof i&&(i=document.getElementById(i),t.assert(i)),i?this._ownedCanvas=null:(i=document.createElement("canvas"),i.id=e.id||"deckgl-overlay",e.width&&"number"==typeof e.width&&(i.width=e.width),e.height&&"number"==typeof e.height&&(i.height=e.height),(e.parent||document.body).appendChild(i),this._ownedCanvas=i),Object.assign(i.style,e.style),i}_isMultiCanvasMode(){return Array.isArray(this.props._canvases)}_getDefaultCanvasId(){return this._canvasManager.order[0]||"default-canvas"}_validateCanvasConfiguration(e){Array.isArray(e._canvases)&&(t.assert(!e.canvas),t.assert(!e.gl),t.assert(!e.device?.canvasContext||e.device.getDefaultCanvasContext().offscreenCanvas))}_createEventManager(e){const i=new t.EventManager(e,{touchAction:this.props.touchAction,recognizers:Object.keys(t.RECOGNIZERS).map(e=>{const[i,s,n,r]=t.RECOGNIZERS[e],o=this.props.eventRecognizerOptions?.[e];return{recognizer:new i({...s,...o,event:e}),recognizeWith:n,requireFailure:r}}),events:{pointerdown:this._onPointerDown,pointermove:this._onPointerMove,pointerleave:this._onPointerMove}});for(const s in t.EVENT_HANDLERS)"dblclick"===s?i.watch(s,this._onEvent):i.on(s,this._onEvent);return i}_getEventRoot(t){return t.closest(".deck-events-root")||this.props.parent?.querySelector(".deck-events-root")||t}_syncCanvasTargets(){if(!this.device||!this._isMultiCanvasMode())return;this._canvasManager.syncCanvasEntries({device:this.device,canvases:this.props._canvases||[],useDevicePixels:this.props.useDevicePixels}),this.eventManagers=this._canvasManager.eventManagers;const t=this._getDefaultCanvasId();this.eventManager=this.eventManagers[t]||null,this.canvas=this._canvasManager.targets[t]?.canvas||null}_setCanvasContext(t){this._canvasContext=t,"style"in t.canvas&&(this.canvas=t.canvas)}_setDeviceCanvasContext(t,e={}){const i=t.getDefaultCanvasContext();this._setCanvasContext(i),this._setDeviceResizeHandler(t,e)}_setDeviceResizeHandler(t,e={}){const i=Boolean(e.syncDrawingBuffer);if(this._deviceResizeHandler?.device===t)return void(this._deviceResizeHandler.syncDrawingBuffer=i);this._restoreDeviceResizeHandler();const s=t=>{this._isMultiCanvasMode()?this._updateMultiCanvasDimensions():t===this._canvasContext&&this._canvasContext&&this._onCanvasContextResize(this._canvasContext,{syncDrawingBuffer:this._deviceResizeHandler?.syncDrawingBuffer})};t.props.onResize=s,this._deviceResizeHandler={device:t,onResize:s,syncDrawingBuffer:i}}_restoreDeviceResizeHandler(){const t=this._deviceResizeHandler;t&&t.device.props?.onResize===t.onResize&&(t.device.props.onResize=Me),this._deviceResizeHandler=null}_setCanvasSize(t){if(this._isMultiCanvasMode()||!this.canvas)return;const{width:e,height:i}=t;if(e||0===e){const t=Number.isFinite(e)?`${e}px`:e;this.canvas.style.width=t}if(i||0===i){const e=Number.isFinite(i)?`${i}px`:i;this.canvas.style.position=t.style?.position||"absolute",this.canvas.style.height=e}}_getCanvasIdFromEvent(t){return this._canvasManager.getCanvasIdFromEvent(t?.rootElement)}_getCanvasContext(t){return this._canvasManager.getTarget(t)?.presentationContext||this._canvasContext}_resizeForCanvasTarget(t){const e=this._canvasManager.getTarget(t);if(!e||!this.device?.canvasContext)return;const[i,s]=e.presentationContext.getDrawingBufferSize();this.device.canvasContext.setDrawingBufferSize(i,s)}_createDeviceCanvas(t){if(this._isMultiCanvasMode()){const e=globalThis.OffscreenCanvas;if(!e)throw new Error("`_canvases` requires OffscreenCanvas support.");return new e("number"==typeof t.width&&Number.isFinite(t.width)?t.width:1,"number"==typeof t.height&&Number.isFinite(t.height)?t.height:1)}return this._createCanvas(t)}_updateCanvasSize(t=this._canvasContext){if(this._isMultiCanvasMode())return void this._updateMultiCanvasDimensions();const{canvas:e}=this,[i,s]=t?t.getCSSSize():[e?.clientWidth??e?.width??0,e?.clientHeight??e?.height??0];i===this.width&&s===this.height||(this.width=i,this.height=s,this.viewManager?.setProps({width:i,height:s}),this.layerManager?.activateViewport(this.getViewports()[0]),this.props.onResize({width:i,height:s},t||void 0))}_onCanvasContextResize(t,e={}){if(e.syncDrawingBuffer){const{width:e,height:i}=t.canvas;t.setDrawingBufferSize(e,i)}this._needsRedraw="Canvas resized",this._updateCanvasSize(t)}_updateMultiCanvasDimensions(){const[t,e]=this._getCanvasContext()?.getCSSSize()||[0,0];t===this.width&&e===this.height||(this.width=t,this.height=e,this.props.onResize({width:t,height:e})),this._needsRedraw="Canvas resized",this.viewManager?.setNeedsUpdate("Canvas resized"),this.viewManager?.setProps({width:this.width,height:this.height})}_createAnimationLoop(t,e){const{gl:i,onError:s}=e;return new Y({device:t,autoResizeDrawingBuffer:!i&&!Array.isArray(e._canvases),autoResizeViewport:!1,onInitialize:t=>this._setDevice(t.device),onRender:this._onRenderFrame.bind(this),onError:s})}_createDevice(t){const e=this.props.deviceProps?.createCanvasContext,i="object"==typeof e?e:void 0,s={adapters:[],_cacheShaders:!0,_cachePipelines:!0,...t.deviceProps,debug:ke(t)};s.adapters.includes(Pe)||s.adapters.push(Pe);const n={alphaMode:"webgpu"===this.props.deviceProps?.type?"premultiplied":void 0};return a.createDevice({_reuseDevices:!0,type:"webgl",...s,createCanvasContext:{...n,...i,canvas:this._createDeviceCanvas(t),useDevicePixels:this.props.useDevicePixels,autoResize:!0}})}_getViewState(){return this.props.viewState||this.viewState}_getViews(){const{views:t}=this.props,e=Array.isArray(t)?t:t?[t]:[new Xt({id:"default-view"})];return e.length&&this.props.controller&&(e[0]=e[0].clone({controller:this.props.controller})),e}_onContextLost(){const{onError:t}=this.props;this.animationLoop&&t&&t(new Error("WebGL context is lost"))}_pickAndCallback(){const{_pickRequest:t}=this;if(t.event){const e=t.event,i=this.layerManager?.getLayers()||[],s=this._getPointPickOptions(t.x,t.y,{canvasId:t.canvasId,radius:t.radius,mode:t.mode},i),n=this._getInternalPickingMode(),r=++this._hoverPickSequence;if(t.event=null,t.canvasId=void 0,!n)return;if("sync"===n)return void this._applyHoverCallbacks(this._pickPointSync(s),e);this._pickPointAsync(s).then(({result:t,emptyInfo:i})=>{r===this._hoverPickSequence&&this._applyHoverCallbacks({result:t,emptyInfo:i},e)}).catch(t=>this.props.onError?.(t))}}_updateCursor(){const t=this.props.getCursor(this.cursorState);if(this._isMultiCanvasMode()){for(const e of Object.values(this._canvasManager.targets))e.canvas.style.cursor=t;return}const e=this.props.parent||this.canvas;e&&(e.style.cursor=t)}_setDevice(e){if(this.device=e,this._validateInternalPickingMode(),!this.animationLoop)return;this._setDeviceCanvasContext(e,{syncDrawingBuffer:Boolean(this.props.gl&&this.props.device!==e)}),this._isMultiCanvasMode()?this._syncCanvasTargets():this.canvas&&!this.canvas.isConnected&&this.props.parent&&this.props.parent.insertBefore(this.canvas,this.props.parent.firstChild),"webgl"===this.device.type&&this.device.setParametersWebGL({blend:!0,blendFunc:[770,771,1,771],polygonOffsetFill:!0,depthTest:!0,depthFunc:515}),this.props.onDeviceInitialized(this.device),"webgl"===this.device.type&&this.props.onWebGLInitialized(this.device.gl);const i=new q;if(i.play(),this.animationLoop.attachTimeline(i),!this._isMultiCanvasMode()){const e=this.canvas&&this._getEventRoot(this.canvas);t.assert(e),this.eventManager=this._createEventManager(e),this.eventManagers={[nt]:this.eventManager}}this.viewManager=new rt({timeline:i,eventManager:this.eventManager,eventManagers:this.eventManagers,getCanvasContext:this._isMultiCanvasMode()?this.getCanvasContext.bind(this):void 0,onViewStateChange:this._onViewStateChange.bind(this),onInteractionStateChange:this._onInteractionStateChange.bind(this),pickPosition:this._pickPositionForController.bind(this),views:this._getViews(),viewState:this._getViewState(),width:this.width,height:this.height});const s=this.viewManager.getViewports()[0];this.layerManager=new st(this.device,{deck:this,stats:this.stats,viewport:s,timeline:i}),this.effectManager=new Kt({deck:this,device:this.device}),this.deckRenderer=new Qt(this.device,{stats:this.stats}),this.deckPicker=new oe(this.device,{stats:this.stats});const n=this.props.parent?.querySelector(".deck-widgets-root")||(this._isMultiCanvasMode()?this.props.parent||this.canvas?.parentElement:null)||this.canvas?.parentElement;this.widgetManager=new de({deck:this,parentElement:n}),this.widgetManager.addDefault(new ge),this.setProps({}),this._updateCanvasSize(this._canvasContext),this.props.onLoad()}_drawLayers(t,e){const{device:i,gl:s}=this.layerManager.context;this.props.onBeforeRender({device:i,gl:s});const n={target:this.props._framebuffer,layers:this.layerManager.getLayers(),viewports:this.viewManager.getViewports(),onViewportActive:this.layerManager.activateViewport,views:this.viewManager.getViews(),pass:"screen",effects:this.effectManager.getEffects(),...e};if(this._isMultiCanvasMode()&&"screen"===n.pass&&!n.target&&this._canvasManager.order.length)for(const r of this._canvasManager.order){const t=n.viewports.filter(t=>this.viewManager.getCanvasId(t.id)===r);if(!t.length){const t=this._canvasManager.targets[r];this._resizeForCanvasTarget(r),this.deckRenderer?.renderLayers({...n,canvasContext:t.presentationContext,target:t.presentationContext.getCurrentFramebuffer(),viewports:[],clearCanvas:!0}),t.presentationContext.present();continue}const e=this._canvasManager.targets[r];this._resizeForCanvasTarget(r);const i=e.presentationContext.getCurrentFramebuffer();this.deckRenderer?.renderLayers({...n,canvasContext:e.presentationContext,target:i,viewports:t}),e.presentationContext.present()}else this.deckRenderer?.renderLayers(n);"screen"===n.pass&&this.widgetManager.onRedraw({viewports:n.viewports,layers:n.layers}),this.props.onAfterRender({device:i,gl:s})}_onRenderFrame(){this._getFrameStats(),this._metricsCounter++%60==0&&(this._getMetrics(),this.stats.reset(),t.defaultLogger.table(4,this.metrics)(),this.props._onMetrics&&this.props._onMetrics(this.metrics)),this._updateCursor(),this.layerManager.updateLayers(),this._pickAndCallback(),this.redraw(),this.viewManager&&this.viewManager.updateViewStates()}_onViewStateChange(t){const e=this.props.onViewStateChange(t)||t.viewState;this.viewState&&(this.viewState={...this.viewState,[t.viewId]:e},this.props.viewState||this.viewManager&&this.viewManager.setProps({viewState:this.viewState}))}_onInteractionStateChange(t){this.cursorState.isDragging=t.isDragging||!1,this.props.onInteractionStateChange(t)}_getFrameStats(){const{stats:t}=this;t.get("frameRate").timeEnd(),t.get("frameRate").timeStart();const e=this.animationLoop.stats;t.get("GPU Time").addTime(e.get("GPU Time").lastTiming),t.get("CPU Time").addTime(e.get("CPU Time").lastTiming)}_getMetrics(){const{metrics:t,stats:e}=this;t.fps=e.get("frameRate").getHz(),t.setPropsTime=e.get("setProps Time").time,t.updateAttributesTime=e.get("Update Attributes").time,t.framesRedrawn=e.get("Redraw Count").count,t.pickTime=e.get("pickObject Time").time+e.get("pickMultipleObjects Time").time+e.get("pickObjects Time").time,t.pickCount=e.get("Pick Count").count,t.layersCount=this.layerManager?.layers.length??0,t.drawLayersCount=e.get("Layers rendered").lastSampleCount,t.pickLayersCount=e.get("Layers picked").lastSampleCount,t.updateLayersCount=e.get("Layer updates").count,t.updateAttributesCount=e.get("Attributes updated").count,t.gpuTime=e.get("GPU Time").time,t.cpuTime=e.get("CPU Time").time,t.gpuTimePerFrame=e.get("GPU Time").getAverageTime(),t.cpuTimePerFrame=e.get("CPU Time").getAverageTime();const i=a.stats.get("GPU Time and Memory");t.bufferMemory=i.get("Buffer Memory").count,t.textureMemory=i.get("Texture Memory").count,t.renderbufferMemory=i.get("Renderbuffer Memory").count,t.gpuMemory=i.get("GPU Memory").count}};Se.defaultProps=xe,Se.VERSION=n;var Ee=Math.PI/180,Re=180/Math.PI,Le=class e{static toPosition(t,e){const i=e*Ee,s=t*Ee,n=Math.cos(i);return[n*Math.cos(s),n*Math.sin(s),Math.sin(i)]}static toLngLat(e){return[Math.atan2(e[1],e[0])*Re,Math.asin(t.clamp(e[2],-1,1))*Re]}static tangentBasis(t,e){const i=e*Ee,s=t*Ee,n=Math.sin(i),r=Math.cos(i),o=Math.sin(s),a=Math.cos(s);return{N:[-n*a,-n*o,r],E:[-o,a,0]}}static upVector(t,i,s){const{N:n,E:r}=e.tangentBasis(t,i),o=s*Ee,a=Math.cos(o),h=Math.sin(o);return[n[0]*a+r[0]*h,n[1]*a+r[1]*h,n[2]*a+r[2]*h]}static bearing(i,s,n){const{N:r,E:o}=e.tangentBasis(s,n);return Math.atan2(t.dot$1(i,o),t.dot$1(i,r))*Re}static cameraFrame(i,s,n){const r=e.toPosition(i,s),o=e.upVector(i,s,n),{N:a,E:h}=e.tangentBasis(i,s),c=n*Ee,d=Math.cos(c),l=Math.sin(c),p=[h[0]*d-a[0]*l,h[1]*d-a[1]*l,h[2]*d-a[2]*l];return{position:r,up:o,axisHorizontal:t.cross([],r,p),axisVertical:t.cross([],r,o),longitude:i,latitude:s,bearing:n}}static angularDistance(i,s){const n=e.toPosition(i.longitude,i.latitude),r=e.toPosition(s.longitude,s.latitude);return Math.acos(t.clamp(t.dot$1(n,r),-1,1))}static greatCircleAxis(i,s){const n=e.toPosition(i.longitude,i.latitude),r=e.toPosition(s.longitude,s.latitude);return t.normalize$1([],t.cross([],n,r))}static rotate(e,s,n){const r=(new i.Quaternion).fromAxisRotation(s,n);return t.transformQuat$1([],e,r)}static rotateFrame(t,i,s,n){let r=e.rotate(t.position,t.axisHorizontal,i);r=e.rotate(r,t.axisVertical,s);let o=e.rotate(t.up,t.axisHorizontal,i);o=e.rotate(o,t.axisVertical,s);const[a,h]=e.toLngLat(r),c=n?0:e.bearing(o,a,h);return{...t,position:r,up:o,longitude:a,latitude:h,bearing:c}}},De=1/(1-Math.exp(-5)),Te=t=>(1-Math.exp(-5*t))*De,Ae=class extends Mt{constructor(t){const e="axis"in t;super({compare:["longitude","latitude"],extract:e?["longitude","latitude","zoom","bearing"]:["longitude","latitude","zoom"],required:["longitude","latitude"]}),e?(this._mode="rotation",this._axis=t.axis,this._totalAngle=t.totalAngle):(this._mode="linear",this._targetLongitude=t.targetLongitude)}initializeProps(t,e){const i=super.initializeProps(t,e);return this._startZoom=t.zoom,"rotation"===this._mode?this._startFrame={...Le.cameraFrame(t.longitude,t.latitude,t.bearing||0),axisHorizontal:this._axis}:i.end.longitude=this._targetLongitude,i}interpolateProps(t,e,s){if("rotation"===this._mode){const{longitude:t,latitude:e,bearing:n}=Le.rotateFrame(this._startFrame,this._totalAngle*s,0);return{bearing:n,longitude:t,latitude:e,zoom:this._startZoom+i.zoomAdjust(e,!0)-i.zoomAdjust(this._startFrame.latitude,!0)}}const n=t.longitude+(e.longitude-t.longitude)*s,r=t.latitude+(e.latitude-t.latitude)*s;return{longitude:n,latitude:r,zoom:this._startZoom+i.zoomAdjust(r,!0)-i.zoomAdjust(t.latitude,!0)}}},Ie=Math.PI/180,Ve=180/Math.PI;function ze(t,e=0){const i=Math.min(180,t)*Ie;return 512*Math.sin(i/2)*Math.pow(2,e)}function Fe(t,e=0){const i=t/Math.pow(2,e);return 2*Math.asin(Math.min(1,i/256/2))*Ve}var Oe=class extends qt{constructor(t){const{startPanPos:e,startPanCameraFrame:i,startPanAngularRate:s,startPanLockBearing:n,...r}=t;r.normalize=!1,super(r);const o=this._state;void 0!==e&&(o.startPanPos=e),void 0!==i&&(o.startPanCameraFrame=i),void 0!==s&&(o.startPanAngularRate=s),void 0!==n&&(o.startPanLockBearing=n)}panStart({pos:t}){const{latitude:e,longitude:s,zoom:n,bearing:r=0}=this.getViewportProps(),o=Le.cameraFrame(s,e,r),a=Math.abs(r)<1;a&&(o.axisHorizontal=[0,0,1]);const h=.25/Math.pow(2,n-i.zoomAdjust(e,!0))*Ie;return this._getUpdatedState({startPanPos:t,startPanCameraFrame:o,startPanAngularRate:h,startPanLockBearing:a,startZoom:n})}pan({pos:e,startPos:s}){const n=this.getState(),r=n.startPanPos||s;if(!r)return this;const o=n.startPanCameraFrame,a=n.startPanAngularRate,h=n.startZoom??this.getViewportProps().zoom;if(!o||!a)return this;const c=r[0]-e[0];let d=c*a,l=-(r[1]-e[1])*a;const p=n.startPanLockBearing;if(p){const e=Math.cos(o.latitude*Ie);d=c*a/Math.max(e,.25);const i=(t.MAX_LATITUDE-o.latitude)*Ie,s=-(t.MAX_LATITUDE+o.latitude)*Ie;l=t.clamp(l,s,i)}const u=Le.rotateFrame(o,d,l,p),g=h+i.zoomAdjust(u.latitude,!0)-i.zoomAdjust(o.latitude,!0);return this._getUpdatedState({longitude:u.longitude,latitude:u.latitude,bearing:u.bearing,zoom:g})}panEnd(){return this._getUpdatedState({startPanPos:null,startPanCameraFrame:null,startPanAngularRate:null,startPanLockBearing:null,startZoom:null})}_panFromCenter(t){const{width:e,height:i}=this.getViewportProps(),s=[e/2,i/2];return this.panStart({pos:s}).pan({pos:[s[0]+t[0],s[1]+t[1]]}).panEnd()}applyConstraints(e){const s=e,n=s[Bt];delete s[Bt];const{latitude:r,maxBounds:o}=e;if(e.zoom=this._constrainZoom(e.zoom,e),n){const t=this.makeViewport(e);Object.assign(e,t.panByPosition(n.position,n.screenPosition))}(e.longitude<-180||e.longitude>180)&&(e.longitude=t.mod(e.longitude+180,360)-180),e.latitude=t.clamp(e.latitude,-90,90),(e.bearing<-180||e.bearing>180)&&(e.bearing=t.mod(e.bearing+180,360)-180),e.pitch=t.clamp(e.pitch,e.minPitch,e.maxPitch);const a=o?Wt(e.width,e.height,e.maxBoundsPadding):null;if(o&&a&&(a.width>=0&&(e.longitude=t.clamp(e.longitude,o[0][0],o[1][0])),a.height>=0&&(e.latitude=t.clamp(e.latitude,o[0][1],o[1][1]))),o&&a){const s=Gt(this.makeViewport({...e,bearing:0,pitch:0}),[e.longitude,e.latitude],a),n=e.zoom-i.zoomAdjust(r),h=o[1][0]-o[0][0],c=o[1][1]-o[0][1];if(a.height>=0&&c>0&&c<180){const i=Math.min(Fe(a.height,n),c),r=a.height?i*s.bottom/a.height:Fe(s.bottom,n),h=a.height?i*s.top/a.height:Fe(s.top,n);e.latitude=t.clamp(e.latitude,o[0][1]+r,o[1][1]-h)}if(a.width>=0&&h>0&&h<360){const i=Math.min(Fe(a.width/Math.cos(e.latitude*Ie),n),h),r=a.width?i*s.left/a.width:Fe(s.left/Math.cos(e.latitude*Ie),n),c=a.width?i*s.right/a.width:Fe(s.right/Math.cos(e.latitude*Ie),n);e.longitude=t.clamp(e.longitude,o[0][0]+r,o[1][0]-c)}}return e.latitude!==r&&(e.zoom+=i.zoomAdjust(e.latitude,!0)-i.zoomAdjust(r,!0)),e}_constrainZoom(e,s){s||(s=this.getViewportProps());const{maxZoom:n,maxBounds:r}=s;let{minZoom:o}=s;if(null!==r&&s.width>0&&s.height>0){const t=Wt(s.width,s.height,s.maxBoundsPadding),e=r[0][1],a=r[1][1],h=Math.sign(e)===Math.sign(a)?Math.min(Math.abs(e),Math.abs(a)):0,c=i.zoomAdjust(0),d=ze(r[1][0]-r[0][0])*Math.cos(h*Ie),l=ze(r[1][1]-r[0][1]);t.width>0&&d>0&&(o=Math.max(o,Math.log2(t.width/d)+c)),t.height>0&&l>0&&(o=Math.max(o,Math.log2(t.height/l)+c)),o>n&&(o=n)}const a=i.zoomAdjust(s.latitude,!0)-i.zoomAdjust(0,!0);return t.clamp(e,o+a,n+a)}},je=class extends jt{constructor(){super(...arguments),this.ControllerState=Oe,this.transition={transitionDuration:300,transitionInterpolator:new St({transitionProps:{compare:["longitude","latitude","zoom","bearing","pitch"],required:["longitude","latitude","zoom"]}})},this.dragMode="pan",this._panHistory=[]}getZoomPosition(t){const e=super.getZoomPosition(t),s=this.makeViewport(this.controllerState.getViewportProps());return!(s instanceof i.GlobeViewport)||s.getZoomAnchorStrength(e)>0?e:s.project([s.longitude,s.latitude])}_onPanStart(t){return this._panHistory=[],super._onPanStart(t)}_onMultiPanStart(t){return this._panHistory=[],super._onMultiPanStart(t)}_onPanMove(t){if(!this.dragPan)return!1;const e=this.getCenter(t),i=this.controllerState.pan({pos:e});this.updateViewport(i,{transitionDuration:0},{isDragging:!0,isPanning:!0});const{longitude:s,latitude:n}=i.getViewportProps();return this._panHistory.push({longitude:s,latitude:n,timestamp:Date.now()}),this._panHistory.length>5&&this._panHistory.shift(),!0}_onPanMoveEnd(e){const{inertia:i}=this;if(this.dragPan&&i&&this._panHistory.length>=2){const e=this._panHistory[0],s=this._panHistory[this._panHistory.length-1],n=s.timestamp-e.timestamp;if(n>0){const r=this.controllerState.getViewportProps(),o=this.controllerState.getState(),a=Le.angularDistance(e,s)/n;if(a>1e-6){const h=a*i/2;let c,d,l;if(o.startPanLockBearing){let o=s.longitude-e.longitude;o>180?o-=360:o<-180&&(o+=360);const a=o/n,h=(s.latitude-e.latitude)/n;d=r.longitude+a*i/2,l=t.clamp(r.latitude+h*i/2,-90,90),c=new Ae({targetLongitude:d})}else{const i=Le.greatCircleAxis(e,s),n=Le.cameraFrame(r.longitude,r.latitude,r.bearing||0),o=Le.rotateFrame({...n,axisHorizontal:i},h,0);d=o.longitude,l=t.clamp(o.latitude,-90,90),c=new Ae({axis:i,totalAngle:h})}const p=this.controllerState.panEnd();return this.updateViewport(p,{transitionInterpolator:c,transitionDuration:i,transitionEasing:Te,longitude:d,latitude:l},{isDragging:!1,isPanning:!0}),this._panHistory=[],!0}}}this._panHistory=[];const s=this.controllerState.panEnd();return this.updateViewport(s,null,{isDragging:!1,isPanning:!1}),!0}},Be={cullMode:"back"},Ne=class extends vt{constructor(t={}){super({...t,parameters:{...Be,...t.parameters}})}getViewportType(e){return e.zoom>12?t.WebMercatorViewport:i.GlobeViewport}get ControllerType(){return je}};Ne.displayName="GlobeView";var Ue=class{constructor(e){t.assert(e.id,"id is required"),this.id=e.id,this.type="custom",this.renderingMode=e.renderingMode||"3d",this.slot=e.slot,this.beforeId=e.beforeId,this.map=null}onAdd(t,e){this.map=t}render(t,e){this.map&&function(t,e,i,s){if(!t.isInitialized)return;let{currentViewport:n}=t.userData,r=!1;n||(n=ti(t,e,s),t.userData.currentViewport=n,r=!0);if(!n)return;t._drawLayers("mapbox-repaint",{viewports:[n],layerFilter:e=>{if(t.props.layerFilter&&!t.props.layerFilter(e))return!1;const s=e.layer;return s.props.beforeId===i.beforeId&&s.props.slot===i.slot},clearStack:r,clearCanvas:!1})}(this.map.__deck,this.map,this,e)}},We="__UNDEFINED__";function Ge(t){return t.props.beforeId?`deck-layer-group-before:${t.props.beforeId}`:t.props.slot?`deck-layer-group-slot:${t.props.slot}`:"deck-layer-group-last"}var Ze="mapbox",He=512,qe=Math.PI/180;function $e({map:e,deck:i}){if(e.__deck)return e.__deck;const s=i.props._customRender,n=i.props.onLoad,r={...i.props,_customRender:()=>{e.triggerRepaint(),s?.("")}};return r.views||(r.views=Je(e)),Object.assign(r,{width:null,height:null,touchAction:"unset",viewState:Qe(e)}),i.isInitialized?Xe(i,e):r.onLoad=()=>{Xe(i,e),ei(i,e),n?.()},i.setProps(r),e.__deck=i,e.on("render",()=>{i.isInitialized&&function(e,i){const s=t.flatten(e.props.layers,Boolean).some(t=>t&&!i.getLayer(Ge(t)));let n=e.getViewports();const r=n.findIndex(t=>t.id===Ze),o=n.length>1||r<0;if(s||o){if(r>=0){n=n.slice();const t=ti(e,i);t?n[r]=t:n.splice(r,1)}e._drawLayers("mapbox-repaint",{viewports:n,layerFilter:t=>(!e.props.layerFilter||e.props.layerFilter(t))&&("mapbox"!==t.viewport.id||!i.getLayer(Ge(t.layer))),clearCanvas:!1})}else{const t=e.device,i=t?.gl;e.props.onBeforeRender?.({device:t,gl:i}),e.props.onAfterRender?.({device:t,gl:i})}e.userData.currentViewport=null}(i,e)}),i}function Xe(t,e){const i=()=>{t.isInitialized?ei(t,e):e.off("move",i)};e.on("move",i)}function Ye(t,e){return e?{depthWriteEnabled:!0,depthCompare:"less-equal",depthBias:0,blend:!0,blendColorSrcFactor:"src-alpha",blendColorDstFactor:"one-minus-src-alpha",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one-minus-src-alpha",blendColorOperation:"add",blendAlphaOperation:"add"}:{}}function Ke(t){let e;try{e=t.getProjection?.()}catch{return"mercator"}const i=e?.type||e?.name;if("globe"===i)return"globe";if(i&&"mercator"!==i)throw new Error("Unsupported projection");return"mercator"}function Je(t){return"globe"===Ke(t)?new Ne({id:Ze}):new Xt({id:Ze})}function Qe(e){const{lng:i,lat:s}=e.getCenter(),n={longitude:(i+540)%360-180,latitude:s,zoom:e.getZoom(),bearing:e.getBearing(),pitch:e.getPitch(),padding:e.getPadding(),repeat:e.getRenderWorldCopies()};return e.getTerrain?.()&&function(e,i){if(e.getFreeCameraOptions){const{position:s}=e.getFreeCameraOptions();if(!s||void 0===s.z)return;const n=e.transform.height,{longitude:r,latitude:o,pitch:a}=i,h=s.x*He,c=(1-s.y)*He,d=s.z*He,l=t.lngLatToWorld([r,o]),p=h-l[0],u=c-l[1],g=Math.sqrt(p*p+u*u),v=a*qe,m=1.5*n,f=v<.001?m*Math.cos(v)/d:m*Math.sin(v)/g;i.zoom=Math.log2(f),i.position=[0,0,(d-m*Math.cos(v)/f)/t.unitsPerMeter(o)]}else"number"==typeof e.transform.elevation&&(i.position=[0,0,e.transform.elevation])}(e,n),n}function ti(t,e,i){const s=Qe(e),n=t.getView("mapbox")||Je(e);i&&(n.props.nearZMultiplier=.2);const r=i?.nearZ??e.transform._nearZ,o=i?.farZ??e.transform._farZ;return Number.isFinite(r)&&(s.nearZ=r/e.transform.height,s.farZ=o/e.transform.height),n.makeViewport({width:t.width,height:t.height,viewState:s})}function ei(t,e){t.setProps({viewState:Qe(e)}),t.needsRedraw({clearRedrawFlags:!0})}exports.MapboxOverlay=class{constructor(t){this._handleStyleChange=()=>{this._resolveLayers(this._map,this._deck,this._props.layers,this._props.layers),this._map&&Ke(this._map)&&this._deck?.setProps({views:this._getViews(this._map)})},this._updateContainerSize=()=>{if(this._map&&this._container){const{clientWidth:t,clientHeight:e}=this._map.getContainer();Object.assign(this._container.style,{width:`${t}px`,height:`${e}px`})}},this._updateViewState=()=>{const t=this._deck,e=this._map;t&&e&&(t.setProps({views:this._getViews(e),viewState:Qe(e)}),t.isInitialized&&t.redraw())},this._handleMouseEvent=t=>{const e=this._deck;if(!e||!e.isInitialized)return;const i={type:t.type,offsetCenter:t.point,srcEvent:t},s=this._lastMouseDownPoint;switch(!t.point&&s&&(i.deltaX=t.originalEvent.clientX-s.clientX,i.deltaY=t.originalEvent.clientY-s.clientY,i.offsetCenter={x:s.x+i.deltaX,y:s.y+i.deltaY}),i.type){case"mousedown":e._onPointerDown(i),this._lastMouseDownPoint={...t.point,clientX:t.originalEvent.clientX,clientY:t.originalEvent.clientY};break;case"dragstart":i.type="panstart",e._onEvent(i);break;case"drag":i.type="panmove",e._onEvent(i);break;case"dragend":i.type="panend",e._onEvent(i);break;case"click":i.tapCount=1,e._onEvent(i);break;case"dblclick":i.type="click",i.tapCount=2,e._onEvent(i);break;case"mousemove":i.type="pointermove",e._onPointerMove(i);break;case"mouseout":i.type="pointerleave",e._onPointerMove(i);break;default:return}};const{interleaved:e=!1}=t;this._interleaved=e,this._props=this.filterProps(t)}filterProps(t){const{interleaved:e,useDevicePixels:i,...s}=t;return this._interleaved||void 0===i||(s.useDevicePixels=i),s}setProps(t){this._interleaved&&t.layers&&this._resolveLayers(this._map,this._deck,this._props.layers,t.layers),Object.assign(this._props,this.filterProps(t)),this._deck&&this._map&&this._deck.setProps({...this._props,views:this._getViews(this._map),parameters:{...Ye(this._map,this._interleaved),...this._props.parameters}})}onAdd(t){return this._map=t,this._interleaved?this._onAddInterleaved(t):this._onAddOverlaid(t)}_onAddOverlaid(t){const e=document.createElement("div");return Object.assign(e.style,{position:"absolute",left:0,top:0,textAlign:"initial",pointerEvents:"none"}),this._container=e,this._deck=new Se({...this._props,parent:e,deviceProps:{...this._props.deviceProps,createCanvasContext:{..."object"==typeof this._props.deviceProps?.createCanvasContext?this._props.deviceProps.createCanvasContext:void 0,pixelSizeSource:"css-dpr"}},parameters:{...Ye(0,!1),...this._props.parameters},views:this._getViews(t),viewState:Qe(t)}),t.on("resize",this._updateContainerSize),t.on("render",this._updateViewState),t.on("mousedown",this._handleMouseEvent),t.on("dragstart",this._handleMouseEvent),t.on("drag",this._handleMouseEvent),t.on("dragend",this._handleMouseEvent),t.on("mousemove",this._handleMouseEvent),t.on("mouseout",this._handleMouseEvent),t.on("click",this._handleMouseEvent),t.on("dblclick",this._handleMouseEvent),this._updateContainerSize(),e}_onAddInterleaved(e){const i=e.painter.context.gl;return i instanceof WebGLRenderingContext&&t.defaultLogger.warn("Incompatible basemap library. See: https://deck.gl/docs/api-reference/mapbox/overview#compatibility")(),this._deck=$e({map:e,deck:new Se({...this._props,views:this._getViews(e),gl:i,parameters:{...Ye(0,!0),...this._props.parameters}})}),e.on("styledata",this._handleStyleChange),this._resolveLayers(e,this._deck,[],this._props.layers),document.createElement("div")}_resolveLayers(e,i,s,n){!function(e,i,s){if(!e||!e.style||!e.style._loaded)return;const n=t.flatten(s,Boolean);if(i!==s){const s=t.flatten(i,Boolean),r=new Set(s.map(t=>Ge(t))),o=new Set(n.map(t=>Ge(t)));for(const t of r)o.has(t)||e.getLayer(t)&&e.removeLayer(t)}const r={};for(const t of n){const i=Ge(t),s=e.getLayer(i);if(s)r[i]=s.implementation||s;else{const s=new Ue({id:i,slot:t.props.slot,beforeId:t.props.beforeId});r[i]=s,e.addLayer(s,t.props.beforeId)}}const o=e.style._order;for(const[t,a]of Object.entries(r)){const i=a.beforeId||We,s=i===We?o.length:o.indexOf(i);if(-1!==s&&o.indexOf(t)!==s-1){const s=i===We?void 0:i;e.moveLayer(t,s)}}}(e,s,n)}onRemove(){const t=this._map;t&&(this._interleaved?this._onRemoveInterleaved(t):this._onRemoveOverlaid(t)),this._deck=void 0,this._map=void 0,this._container=void 0}_onRemoveOverlaid(t){t.off("resize",this._updateContainerSize),t.off("render",this._updateViewState),t.off("mousedown",this._handleMouseEvent),t.off("dragstart",this._handleMouseEvent),t.off("drag",this._handleMouseEvent),t.off("dragend",this._handleMouseEvent),t.off("mousemove",this._handleMouseEvent),t.off("mouseout",this._handleMouseEvent),t.off("click",this._handleMouseEvent),t.off("dblclick",this._handleMouseEvent),this._deck?.finalize(),this._container?.remove()}_onRemoveInterleaved(t){t.off("styledata",this._handleStyleChange),this._resolveLayers(t,this._deck,this._props.layers,[]),function(t){t.__deck?.finalize(),t.__deck=null}(t)}getDefaultPosition(){return"top-left"}pickObject(e){return t.assert(this._deck),this._deck.pickObject(e)}pickMultipleObjects(e){return t.assert(this._deck),this._deck.pickMultipleObjects(e)}pickObjects(e){return t.assert(this._deck),this._deck.pickObjects(e)}finalize(){this._map&&this._map.removeControl(this)}getCanvas(){return this._map?this._interleaved?this._map.getCanvas():this._deck.getCanvas():null}_getViews(t){if(!this._props.views)return Je(t);const e=Array.isArray(this._props.views)?this._props.views:[this._props.views];return e.some(t=>"mapbox"===t.id)?this._props.views:[Je(t),...e]}};
1
+ /*! Web-kit v1.2.0-develop.14 | (c) 2026 MapVX */
2
+ !function(){try{var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},e=(new t.Error).stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="a91b4133-ce89-45b0-a1d2-fd72c288ed9f",t._sentryDebugIdIdentifier="sentry-dbid-a91b4133-ce89-45b0-a1d2-fd72c288ed9f")}catch(t){}}();const t=require("./debug-hooks-CMF1BR-2.cjs"),e=require("./shader-type-decoder-CplMa6Zn.cjs"),i=require("./globe-viewport-s9VMxxMl.cjs");var s={dataType:null,batchType:null,id:"JSON",name:"JSON",module:"",version:"",options:{},extensions:["json","geojson"],mimeTypes:["application/json","application/geo+json"],testText:function(t){const e=t[0],i=t[t.length-1];return"{"===e&&"}"===i||"["===e&&"]"===i},parseTextSync:JSON.parse};var n=function(){const e="9.4.1",n=globalThis.deck&&globalThis.deck.VERSION;if(n&&n!==e)throw new Error(`deck.gl - multiple versions detected: ${n} vs ${e}`);return n||(t.defaultLogger.log(1,`deck.gl ${e}`)(),globalThis.deck={...globalThis.deck,VERSION:e,version:e,log:t.defaultLogger,_registerLoggers:t.register},t.registerLoaders([s,[i.ImageLoader,{imagebitmap:{premultiplyAlpha:"none"}}]])),e}(),r="No matching device found. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.",o=class i{static defaultProps={...t.DEVICE_DEFAULT_PROPS,type:"best-available",adapters:void 0,waitForPageLoad:!0};stats=t.lumaStats;log=e.log;VERSION="9.4.2";spector;preregisteredAdapters=new Map;constructor(){if(globalThis.luma){if(globalThis.luma.VERSION!==this.VERSION)throw e.log.error(`Found luma.gl ${globalThis.luma.VERSION} while initialzing ${this.VERSION}`)(),e.log.error("'yarn why @luma.gl/core' can help identify the source of the conflict")(),new Error("luma.gl - multiple versions detected: see console log");e.log.error("This version of luma.gl has already been initialized")()}e.log.log(1,`${this.VERSION} - set luma.log.level=1 (or higher) to trace rendering`)(),globalThis.luma=this}async createDevice(t={}){const e={...i.defaultProps,...t},s=this.selectAdapter(e.type,e.adapters);if(!s)throw new Error(r);return e.waitForPageLoad&&await s.pageLoaded,await s.create(e)}async attachDevice(t,e){const i=this._getTypeFromHandle(t,e.adapters),s=i&&this.selectAdapter(i,e.adapters);if(!s)throw new Error(r);return await(s?.attach?.(t,e))}registerAdapters(t){for(const e of t)this.preregisteredAdapters.set(e.type,e)}getSupportedAdapters(t=[]){const e=this._getAdapterMap(t);return Array.from(e).map(([,t])=>t).filter(t=>t.isSupported?.()).map(t=>t.type)}getBestAvailableAdapterType(t=[]){const e=["webgpu","webgl","null"],i=this._getAdapterMap(t);for(const s of e)if(i.get(s)?.isSupported?.())return s;return null}selectAdapter(t,e=[]){let i=t;"best-available"===t&&(i=this.getBestAvailableAdapterType(e));const s=this._getAdapterMap(e);return i&&s.get(i)||null}enforceWebGL2(t=!0,i=[]){const s=this._getAdapterMap(i).get("webgl");s||e.log.warn("enforceWebGL2: webgl adapter not found")(),s?.enforceWebGL2?.(t)}setDefaultDeviceProps(t){Object.assign(i.defaultProps,t)}_getAdapterMap(t=[]){const e=new Map(this.preregisteredAdapters);for(const i of t)e.set(i.type,i);return e}_getTypeFromHandle(t,i=[]){return t instanceof WebGL2RenderingContext?"webgl":"undefined"!=typeof GPUDevice&&t instanceof GPUDevice||t?.queue?"webgpu":null===t?"null":(t instanceof WebGLRenderingContext?e.log.warn("WebGL1 is not supported",t)():e.log.warn("Unknown handle type",t)(),null)}},a=new o,h=class{get pageLoaded(){return function(){l||(l=d()||"undefined"==typeof window?Promise.resolve():new Promise(t=>window.addEventListener("load",()=>t())));return l}()}},c=e.isBrowser()&&"undefined"!=typeof document,d=()=>c&&"complete"===document.readyState,l=null;var p="layout(std140) uniform layerUniforms {\n uniform float opacity;\n} layer;\n",u={name:"layer",source:"struct LayerUniforms {\n opacity: f32,\n};\n\n@group(0) @binding(auto)\nvar<uniform> layer: LayerUniforms;\n",vs:p,fs:p,getUniforms:t=>({opacity:Math.pow(t.opacity,1/2.2)}),uniformTypes:{opacity:"f32"}},g="\nlayout(std140) uniform shadowUniforms {\n bool drawShadowMap;\n bool useShadowMap;\n vec4 color;\n highp int lightId;\n float lightCount;\n mat4 viewProjectionMatrix0;\n mat4 viewProjectionMatrix1;\n vec4 projectCenter0;\n vec4 projectCenter1;\n} shadow;\n",v=`\n${g}\n\nconst int max_lights = 2;\n\nout vec3 shadow_vPosition[max_lights];\n\nvec4 shadow_setVertexPosition(vec4 position_commonspace) {\n mat4 viewProjectionMatrices[max_lights];\n viewProjectionMatrices[0] = shadow.viewProjectionMatrix0;\n viewProjectionMatrices[1] = shadow.viewProjectionMatrix1;\n vec4 projectCenters[max_lights];\n projectCenters[0] = shadow.projectCenter0;\n projectCenters[1] = shadow.projectCenter1;\n\n if (shadow.drawShadowMap) {\n return project_common_position_to_clipspace(position_commonspace, viewProjectionMatrices[shadow.lightId], projectCenters[shadow.lightId]);\n }\n if (shadow.useShadowMap) {\n for (int i = 0; i < max_lights; i++) {\n if(i < int(shadow.lightCount)) {\n vec4 shadowMap_position = project_common_position_to_clipspace(position_commonspace, viewProjectionMatrices[i], projectCenters[i]);\n shadow_vPosition[i] = (shadowMap_position.xyz / shadowMap_position.w + 1.0) / 2.0;\n }\n }\n }\n return gl_Position;\n}\n\n`,m=`\n${g}\n\nconst int max_lights = 2;\nuniform sampler2D shadow_uShadowMap0;\nuniform sampler2D shadow_uShadowMap1;\n\nin vec3 shadow_vPosition[max_lights];\n\nconst vec4 bitPackShift = vec4(1.0, 255.0, 65025.0, 16581375.0);\nconst vec4 bitUnpackShift = 1.0 / bitPackShift;\nconst vec4 bitMask = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n\nfloat shadow_getShadowWeight(vec3 position, sampler2D shadowMap) {\n vec4 rgbaDepth = texture(shadowMap, position.xy);\n\n float z = dot(rgbaDepth, bitUnpackShift);\n return smoothstep(0.001, 0.01, position.z - z);\n}\n\nvec4 shadow_filterShadowColor(vec4 color) {\n if (shadow.drawShadowMap) {\n vec4 rgbaDepth = fract(gl_FragCoord.z * bitPackShift);\n rgbaDepth -= rgbaDepth.gbaa * bitMask;\n return rgbaDepth;\n }\n if (shadow.useShadowMap) {\n float shadowAlpha = 0.0;\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[0], shadow_uShadowMap0);\n if(shadow.lightCount > 1.0) {\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[1], shadow_uShadowMap1);\n }\n shadowAlpha *= shadow.color.a / shadow.lightCount;\n float blendedAlpha = shadowAlpha + color.a * (1.0 - shadowAlpha);\n\n return vec4(\n mix(color.rgb, shadow.color.rgb, shadowAlpha / blendedAlpha),\n blendedAlpha\n );\n }\n return color;\n}\n\n`,f=t.memoize(function({viewport:e,center:i}){return new t.Matrix4(e.viewProjectionMatrix).invert().transform(i)}),w=t.memoize(function({viewport:e,shadowMatrices:i}){const s=[],n=function(e){const{width:i,height:s,pixelUnprojectionMatrix:n}=e,r=[[0,0],[i,0],[i,s],[0,s]],o=r.map(([e,i])=>t.pixelsToWorld([e,i,-1],n)),a=r.map(([e,i])=>t.pixelsToWorld([e,i,1],n));if(!e.isGeospatial)return o.concat(a);const h=o.concat(a).filter(t=>t[2]>=0);for(let t=0;t<4;t++){const e=(t+1)%4;for(const[i,s]of[[o[t],a[t]],[o[t],o[e]],[a[t],a[e]]])if(i[2]<0!=s[2]<0){const t=i[2]/(i[2]-s[2]);h.push([i[0]+(s[0]-i[0])*t,i[1]+(s[1]-i[1])*t,0])}}return h.length>0?h:o.concat(a)}(e);for(const r of i){const i=r.clone().translate(new t.Vector3(e.center).negate()),o=n.map(t=>i.transform(t)),a=(new t.Matrix4).ortho({left:Math.min(...o.map(t=>t[0])),right:Math.max(...o.map(t=>t[0])),bottom:Math.min(...o.map(t=>t[1])),top:Math.max(...o.map(t=>t[1])),near:Math.min(...o.map(t=>-t[2])),far:Math.max(...o.map(t=>-t[2]))});s.push(a.multiplyRight(r))}return s}),_=[0,0,0,1],y=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0];var P={name:"shadow",dependencies:[t.project_default],vs:v,fs:m,inject:{"vs:DECKGL_FILTER_GL_POSITION":"\n position = shadow_setVertexPosition(geometry.position);\n ","fs:DECKGL_FILTER_COLOR":"\n color = shadow_filterShadowColor(color);\n "},getUniforms:function(e){const{shadowEnabled:i=!0,project:s}=e;if(!(i&&s&&e.shadowMatrices&&e.shadowMatrices.length))return{drawShadowMap:!1,useShadowMap:!1,shadow_uShadowMap0:e.dummyShadowMap,shadow_uShadowMap1:e.dummyShadowMap};const n=t.project_default.getUniforms(s),r=f({viewport:s.viewport,center:n.center}),o=[],a=w({shadowMatrices:e.shadowMatrices,viewport:s.viewport}).slice();for(let c=0;c<e.shadowMatrices.length;c++){const e=a[c],i=e.clone().translate(new t.Vector3(s.viewport.center).negate());n.coordinateSystem===t.getShaderCoordinateSystem("lnglat")&&n.projectionMode===t.PROJECTION_MODE.WEB_MERCATOR?(a[c]=i,o[c]=r):(a[c]=e.clone().multiplyRight(y),o[c]=i.transform(r))}const h={drawShadowMap:Boolean(e.drawToShadowMap),useShadowMap:!!e.shadowMaps&&e.shadowMaps.length>0,color:e.shadowColor||_,lightId:e.shadowLightId||0,lightCount:e.shadowMatrices.length,shadow_uShadowMap0:e.dummyShadowMap,shadow_uShadowMap1:e.dummyShadowMap};for(let t=0;t<a.length;t++)h[`viewProjectionMatrix${t}`]=a[t],h[`projectCenter${t}`]=o[t];for(let t=0;t<2;t++)h[`shadow_uShadowMap${t}`]=e.shadowMaps&&e.shadowMaps[t]||e.dummyShadowMap;return h},uniformTypes:{drawShadowMap:"f32",useShadowMap:"f32",color:"vec4<f32>",lightId:"i32",lightCount:"f32",viewProjectionMatrix0:"mat4x4<f32>",viewProjectionMatrix1:"mat4x4<f32>",projectCenter0:"vec4<f32>",projectCenter1:"vec4<f32>"}},b=[t.geometry_default],C=["vs:DECKGL_FILTER_SIZE(inout vec3 size, VertexGeometry geometry)","vs:DECKGL_FILTER_GL_POSITION(inout vec4 position, VertexGeometry geometry)","vs:DECKGL_FILTER_COLOR(inout vec4 color, VertexGeometry geometry)","fs:DECKGL_FILTER_COLOR(inout vec4 color, FragmentGeometry geometry)"],M=[];function k(e){const i=t.ShaderAssembler.getDefaultShaderAssembler(e);for(const t of b)i.addDefaultModule(t);i._hookFunctions.length=0;const s="glsl"===e?C:M;for(const t of s)i.addShaderHook(t);return i}var x=[255,255,255],S=1,E=0,R=class{constructor(t={}){this.type="ambient";const{color:e=x}=t,{intensity:i=S}=t;this.id=t.id||"ambient-"+E++,this.color=e,this.intensity=i}},L=[255,255,255],D=1,T=[0,0,-1],A=0,I=class{constructor(e={}){this.type="directional";const{color:i=L}=e,{intensity:s=D}=e,{direction:n=T}=e,{_shadow:r=!1}=e;this.id=e.id||"directional-"+A++,this.color=i,this.intensity=s,this.type="directional",this.direction=new t.Vector3(n).normalize().toArray(),this.shadow=r}getProjectedLight(t){return this}},V=class{constructor(t,e={id:"pass"}){const{id:i}=e;this.id=i,this.device=t,this.props={...e}}setProps(t){Object.assign(this.props,t)}render(t){}cleanup(){}},z={depthWriteEnabled:!0,depthCompare:"less-equal",blendColorOperation:"add",blendColorSrcFactor:"one",blendColorDstFactor:"one-minus-src-alpha",blendAlphaOperation:"add",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one-minus-src-alpha"},F=class extends V{constructor(){super(...arguments),this._lastRenderIndex=-1}render(t){this._render(t)}_render(t){const{canvasContext:e=this.device.canvasContext}=t,i=t.target??e.getCurrentFramebuffer(),[s,n]=e.getDrawingBufferSize(),r=t.clearCanvas??!0;let o=t.clearColor??(!!r&&[0,0,0,0]),a=!!r&&1,h=!!r&&0;const c=t.colorMask??15,d={viewport:[0,0,s,n]};t.colorMask&&(d.colorMask=c),t.scissorRect&&(d.scissorRect=t.scissorRect);const{shaderModuleProps:l,viewports:p,views:u,onViewportActive:g,clearStack:v=!0}=t,m=t.pass||"unknown",f="webgpu"===this.device.type;v&&(this._lastRenderIndex=-1);const w=[];if(!p.length)return this.device.beginRenderPass({framebuffer:i,parameters:d,clearColor:o,clearDepth:a,clearStencil:h}).end(),this.device.submit(),w;try{for(const s of p){g?.(s);const n=this._getDrawLayerParams(s,t),r=u&&u[s.id],c=s.subViewports||[s],p=f?c.map(t=>[t]):[c];for(const s of p){const c=this.device.beginRenderPass({framebuffer:i,parameters:d,clearColor:o,clearDepth:a,clearStencil:h});try{for(const o of s){const s=this._drawLayersInViewport(c,{target:i,canvasContext:e,shaderModuleProps:l,viewport:o,view:r,pass:m,layers:t.layers,isPicking:t.isPicking},n);w.push(s)}}finally{c.end(),f&&this.device.submit()}o=!1,a=!1,h=!1}}return w}finally{f||this.device.submit()}}_getDrawLayerParams(t,{layers:e,pass:i,isPicking:s=!1,layerFilter:n,cullRect:r,views:o,effects:a,canvasContext:h=this.device.canvasContext,shaderModuleProps:c},d=!1){const l=[],p=O(this._lastRenderIndex+1),u={layer:e[0],viewport:t,isPicking:s,renderPass:i,cullRect:r},g={};for(let v=0;v<e.length;v++){const s=e[v],r=this._shouldDrawLayer(s,u,n,g),m={shouldDrawLayer:r};r&&!d&&(m.shouldDrawLayer=!0,m.layerRenderIndex=p(s,r),m.shaderModuleProps=this._getShaderModuleProps(s,a,i,h,c),m.layerParameters={..."webgpu"===s.context.device.type?z:null,...s.context.deck?.props.parameters,...o?.[t.id]?.props.parameters,...this.getLayerParameters(s,v,t)}),l[v]=m}return l}_drawLayersInViewport(t,{layers:e,shaderModuleProps:i,pass:s,target:n,canvasContext:r,viewport:o,view:a,isPicking:h},c){const d=function(t,{canvasContext:e=t.canvasContext,shaderModuleProps:i,target:s,viewport:n}){const r=i?.project?.devicePixelRatio??e.cssToDeviceRatio(),[,o]=e.getDrawingBufferSize(),a=s?s.height:o,h=n;return[h.x*r,a-(h.y+h.height)*r,h.width*r,h.height*r]}(this.device,{canvasContext:r,shaderModuleProps:i,target:n,viewport:o});if(a){const{clear:t,clearColor:e,clearDepth:i,clearStencil:s}=a.props;if(t){let t=[0,0,0,0],r=1,o=0;Array.isArray(e)&&!h?t=[...e.slice(0,3),e[3]||255].map(t=>t/255):!1===e&&(t=!1),void 0!==i&&(r=i),void 0!==s&&(o=s),this.device.beginRenderPass({framebuffer:n,parameters:{viewport:d,scissorRect:d},clearColor:t,clearDepth:r,clearStencil:o}).end()}}const l={totalCount:e.length,visibleCount:0,compositeCount:0,pickableCount:0};t.setParameters({viewport:d});for(let u=0;u<e.length;u++){const i=e[u],n=c[u],{shouldDrawLayer:r}=n;if(r&&i.props.pickable&&l.pickableCount++,i.isComposite&&l.compositeCount++,i.isDrawable&&n.shouldDrawLayer){const{layerRenderIndex:e,shaderModuleProps:r,layerParameters:a}=n;l.visibleCount++,this._lastRenderIndex=Math.max(this._lastRenderIndex,e),r.project&&(r.project.viewport=o),i.context.renderPass=t;try{i._drawLayer({renderPass:t,shaderModuleProps:r,uniforms:{layerIndex:e},parameters:a})}catch(p){i.raiseError(p,`drawing ${i} to ${s}`)}}}return l}shouldDrawLayer(t){return!0}getShaderModuleProps(t,e,i){return null}getLayerParameters(t,e,i){return t.props.parameters}_shouldDrawLayer(t,e,i,s){if(!t.props.visible||!this.shouldDrawLayer(t))return!1;e.layer=t;let n=t.parent;for(;n;){if(!n.props.visible||!n.filterSubLayer(e))return!1;e.layer=n,n=n.parent}if(i){const t=e.layer.id;if(t in s||(s[t]=i(e)),!s[t])return!1}return t.activateViewport(e.viewport),!0}_getShaderModuleProps(t,e,i,s,n){const r=s.cssToDeviceRatio(),o=t.internalState?.propsInTransition||t.props,a={layer:o,picking:{isActive:!1},project:{viewport:t.context.viewport,devicePixelRatio:r,modelMatrix:o.modelMatrix,coordinateSystem:o.coordinateSystem,coordinateOrigin:o.coordinateOrigin,autoWrapLongitude:t.wrapLongitude}};if(e)for(const h of e)j(a,h.getShaderModuleProps?.(t,a));for(const h of t.context.defaultShaderModules)h.name in a||(a[h.name]={});return j(a,this.getShaderModuleProps(t,e,a),n)}};function O(t=0,e={}){const i={},s=(n,r)=>{const o=n.props._offset,a=n.id,h=n.parent&&n.parent.id;let c;if(h&&!(h in e)&&s(n.parent,!1),h in i){const t=i[h]=i[h]||O(e[h],e);c=t(n,r),i[a]=t}else Number.isFinite(o)?(c=o+(e[h]||0),i[a]=null):c=t;return r&&c>=t&&(t=c+1),e[a]=c,c};return s}function j(t,...e){for(const i of e)if(i)for(const e in i)t[e]?Object.assign(t[e],i[e]):t[e]=i[e];return t}var B=class extends F{constructor(t,e){super(t,e);const i=t.createTexture({format:"rgba8unorm",width:1,height:1,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),s=t.createTexture({format:"depth16unorm",width:1,height:1});this.fbo=t.createFramebuffer({id:"shadowmap",width:1,height:1,colorAttachments:[i],depthStencilAttachment:s})}delete(){this.fbo&&(this.fbo.destroy(),this.fbo=null)}getShadowMap(){return this.fbo.colorAttachments[0].texture}render(t){const e=this.fbo,i=this.device.canvasContext.cssToDeviceRatio(),s=t.viewports[0],n=s.width*i,r=s.height*i;n===e.width&&r===e.height||e.resize({width:n,height:r}),super.render({...t,clearColor:[1,1,1,1],target:e,pass:"shadow"})}getLayerParameters(t,e,i){return{...t.props.parameters,blend:!1,depthWriteEnabled:!0,depthCompare:"less-equal",depthBias:0}}shouldDrawLayer(t){return!1!==t.props.shadowEnabled}getShaderModuleProps(t,e,i){return{shadow:{project:i.project,drawToShadowMap:!0},lighting:{enabled:!1}}}},N={color:[255,255,255],intensity:1},U=[{color:[255,255,255],intensity:1,direction:[-1,3,-1]},{color:[255,255,255],intensity:.9,direction:[1,-8,-2.5]}],W=[0,0,0,200/255],G=class{constructor(t={}){this.id="lighting-effect",this.shadowColor=W,this.shadow=!1,this.directionalLights=[],this.pointLights=[],this.shadowPasses=[],this.dummyShadowMap=null,this.setProps(t)}setup(t){this.context=t;const{device:e,deck:i}=t;this.shadow&&!this.dummyShadowMap&&(this._createShadowPasses(e),i._addDefaultShaderModule(P),this.dummyShadowMap=e.createTexture({width:1,height:1}))}setProps(t){this.ambientLight=void 0,this.directionalLights=[],this.pointLights=[];for(const e in t){const i=t[e];switch(i.type){case"ambient":this.ambientLight=i;break;case"directional":this.directionalLights.push(i);break;case"point":this.pointLights.push(i)}}this._applyDefaultLights(),this.shadow=this.directionalLights.some(t=>t.shadow),this.context&&(this.shadow||this.cleanup(this.context),this.setup(this.context)),this.props=t}preRender({layers:t,layerFilter:e,viewports:i,onViewportActive:s,views:n}){if(this.shadow){this.shadowMatrices=this._calculateMatrices();for(let r=0;r<this.shadowPasses.length;r++)this.shadowPasses[r].render({layers:t,layerFilter:e,viewports:i,onViewportActive:s,views:n,shaderModuleProps:{shadow:{shadowLightId:r,dummyShadowMap:this.dummyShadowMap,shadowMatrices:this.shadowMatrices}}})}}getShaderModuleProps(t,e){const i=this.shadow?{project:e.project,shadowMaps:this.shadowPasses.map(t=>t.getShadowMap()),dummyShadowMap:this.dummyShadowMap,shadowColor:this.shadowColor,shadowMatrices:this.shadowMatrices}:{},s={enabled:!0,lights:this._getLights(t)},n=t.props.material;return{shadow:i,lighting:s,phongMaterial:n,gouraudMaterial:n}}cleanup(t){for(const e of this.shadowPasses)e.delete();this.shadowPasses.length=0,this.dummyShadowMap&&(this.dummyShadowMap.destroy(),this.dummyShadowMap=null,t.deck._removeDefaultShaderModule(P))}_calculateMatrices(){const e=[];for(const i of this.directionalLights){const s=(new t.Matrix4).lookAt({eye:new t.Vector3(i.direction).negate()});e.push(s)}return e}_createShadowPasses(t){for(let e=0;e<this.directionalLights.length;e++){const i=new B(t);this.shadowPasses[e]=i}}_applyDefaultLights(){const{ambientLight:t,pointLights:e,directionalLights:i}=this;t||0!==e.length||0!==i.length||(this.ambientLight=new R(N),this.directionalLights.push(new I(U[0]),new I(U[1])))}_getLights(t){const e=[];this.ambientLight&&e.push(this.ambientLight);for(const i of this.pointLights)e.push(i.getProjectedLight({layer:t}));for(const i of this.directionalLights)e.push(i.getProjectedLight({layer:t}));return e}},Z=1,H=1,q=class{time=0;channels=new Map;animations=new Map;playing=!1;lastEngineTime=-1;constructor(){}addChannel(t){const{delay:e=0,duration:i=Number.POSITIVE_INFINITY,rate:s=1,repeat:n=1}=t,r=Z++,o={time:0,delay:e,duration:i,rate:s,repeat:n};return this._setChannelTime(o,this.time),this.channels.set(r,o),r}removeChannel(t){this.channels.delete(t);for(const[e,i]of this.animations)i.channel===t&&this.detachAnimation(e)}isFinished(t){const e=this.channels.get(t);return void 0!==e&&this.time>=e.delay+e.duration*e.repeat}getTime(t){if(void 0===t)return this.time;const e=this.channels.get(t);return void 0===e?-1:e.time}setTime(t){this.time=Math.max(0,t);const e=this.channels.values();for(const s of e)this._setChannelTime(s,this.time);const i=this.animations.values();for(const s of i){const{animation:t,channel:e}=s;t.setTime(this.getTime(e))}}play(){this.playing=!0}pause(){this.playing=!1,this.lastEngineTime=-1}reset(){this.setTime(0)}attachAnimation(t,e){const i=H++;return this.animations.set(i,{animation:t,channel:e}),t.setTime(this.getTime(e)),i}detachAnimation(t){this.animations.delete(t)}update(t){this.playing&&(-1===this.lastEngineTime&&(this.lastEngineTime=t),this.setTime(this.time+(t-this.lastEngineTime)),this.lastEngineTime=t)}_setChannelTime(t,e){const i=e-t.delay;i>=t.duration*t.repeat?t.time=t.duration*t.rate:(t.time=Math.max(0,i)%t.duration,t.time*=t.rate)}};var $=0,X={requestAnimationFrame:t=>function(t){const e="undefined"!=typeof window?window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame:null;return e?e.call(window,t):setTimeout(()=>t("undefined"!=typeof performance?performance.now():Date.now()),1e3/60)}(t),cancelAnimationFrame:t=>function(t){const e="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame:null;e?e.call(window,t):clearTimeout(t)}(t)},Y=class e{static defaultAnimationLoopProps={device:null,onAddHTML:()=>"",onInitialize:async()=>null,onRender:()=>{},onFinalize:()=>{},onError:t=>{console.error(t)},stats:void 0,autoResizeViewport:!1,animationFrameProvider:X};device=null;canvas=null;props;animationProps=null;timeline=null;stats;sharedStats;cpuTime;gpuTime;frameRate;display;_needsRedraw="initialized";_initialized=!1;_running=!1;_animationFrameId=null;_nextFramePromise=null;_resolveNextFrame=null;_cpuStartTime=0;_error=null;_lastFrameTime=0;constructor(i){if(this.props={...e.defaultAnimationLoopProps,...i},!(i=this.props).device)throw new Error("No device provided");this.stats=i.stats||new t.Stats({id:"animation-loop-"+$++}),this.sharedStats=a.stats.get("Animation Loop"),this.frameRate=this.stats.get("Frame Rate"),this.frameRate.setSampleSize(1),this.cpuTime=this.stats.get("CPU Time"),this.gpuTime=this.stats.get("GPU Time"),this.setProps({autoResizeViewport:i.autoResizeViewport,animationFrameProvider:i.animationFrameProvider}),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this._onMousemove=this._onMousemove.bind(this),this._onMouseleave=this._onMouseleave.bind(this)}destroy(){this.stop(),this._setDisplay(null),this.device?._disableDebugGPUTime()}delete(){this.destroy()}reportError(t){this._error=t,this.props.onError(t),this.props.onError===e.defaultAnimationLoopProps.onError&&"undefined"!=typeof window&&"undefined"!=typeof ErrorEvent&&window.dispatchEvent(new ErrorEvent("error",{error:t,message:t.message}))}setNeedsRedraw(t){return this._needsRedraw=this._needsRedraw||t,this}needsRedraw(){const t=this._needsRedraw;return this._needsRedraw=!1,t}setProps(t){if("autoResizeViewport"in t&&(this.props.autoResizeViewport=t.autoResizeViewport||!1),"animationFrameProvider"in t){const e=t.animationFrameProvider||X;if(e!==this.props.animationFrameProvider){const t=null!==this._animationFrameId;t&&this._cancelAnimationFrame(),this.props.animationFrameProvider=e,t&&this._requestAnimationFrame()}}return this}async start(){if(this._running)return this;this._running=!0;try{if(!this._initialized){if(this._initialized=!0,await this._initDevice(),this._initialize(),!this._running)return null;await this.props.onInitialize(this._getAnimationProps())}return this._running?(this._cancelAnimationFrame(),this._requestAnimationFrame(),this):null}catch(t){const e=t instanceof Error?t:new Error("Unknown error");throw this.props.onError(e),e}}stop(){if(this._running){const t=this.animationProps;this._cancelAnimationFrame(),this._nextFramePromise=null,this._resolveNextFrame=null,this._running=!1,this._lastFrameTime=0,t&&this.props.onFinalize(t)}return this}redraw(t,e=null){return this.device?.isLost||this._error||(this._beginFrameTimers(t),this._setupFrame(),this.animationProps&&(this.animationProps.animationFrame=e),this._updateAnimationProps(),this._renderFrame(this._getAnimationProps()),this._clearNeedsRedraw(),this._resolveNextFrame&&(this._resolveNextFrame(this),this._nextFramePromise=null,this._resolveNextFrame=null),this._endFrameTimers()),this}attachTimeline(t){return this.timeline=t,this.timeline}detachTimeline(){this.timeline=null}waitForRender(){return this.setNeedsRedraw("waitForRender"),this._nextFramePromise||(this._nextFramePromise=new Promise(t=>{this._resolveNextFrame=t})),this._nextFramePromise}async toDataURL(){if(this.setNeedsRedraw("toDataURL"),await this.waitForRender(),this.canvas instanceof HTMLCanvasElement)return this.canvas.toDataURL();throw new Error("OffscreenCanvas")}_initialize(){this._startEventHandling(),this._initializeAnimationProps(),this._updateAnimationProps(),this._resizeViewport(),this.device?._enableDebugGPUTime()}_setDisplay(t){this.display&&(this.display.destroy(),this.display.animationLoop=null),t&&(t.animationLoop=this),this.display=t}_requestAnimationFrame(){this._running&&(this._animationFrameId=this.props.animationFrameProvider.requestAnimationFrame(this._animationFrame.bind(this)))}_cancelAnimationFrame(){null!==this._animationFrameId&&(this.props.animationFrameProvider.cancelAnimationFrame(this._animationFrameId),this._animationFrameId=null)}_animationFrame(t,e){if(this._running)try{this.redraw(t,e??null),this._requestAnimationFrame()}catch(i){const t=i instanceof Error?i:new Error(String(i));this.reportError(t),this.stop()}}_renderFrame(t){if(this.display)return void this.display._renderFrame(t);const e=this.props.onRender(this._getAnimationProps());this.device&&!1!==e&&this.device.submit()}_clearNeedsRedraw(){this._needsRedraw=!1}_setupFrame(){this._resizeViewport()}_initializeAnimationProps(){const t=this.device?.getDefaultCanvasContext();if(!this.device||!t)throw new Error("loop");const e=t?.canvas,i=t.props.useDevicePixels;this.animationProps={animationLoop:this,device:this.device,canvasContext:t,canvas:e,useDevicePixels:i,timeline:this.timeline,needsRedraw:!1,width:1,height:1,aspect:1,time:0,startTime:Date.now(),engineTime:0,tick:0,tock:0,animationFrame:null,_mousePosition:null}}_getAnimationProps(){if(!this.animationProps)throw new Error("animationProps");return this.animationProps}_updateAnimationProps(){if(!this.animationProps)return;const{width:t,height:e,aspect:i}=this._getSizeAndAspect();t===this.animationProps.width&&e===this.animationProps.height||this.setNeedsRedraw("drawing buffer resized"),i!==this.animationProps.aspect&&this.setNeedsRedraw("drawing buffer aspect changed"),this.animationProps.width=t,this.animationProps.height=e,this.animationProps.aspect=i,this.animationProps.needsRedraw=this._needsRedraw,this.animationProps.engineTime=Date.now()-this.animationProps.startTime,this.timeline&&this.timeline.update(this.animationProps.engineTime),this.animationProps.tick=Math.floor(this.animationProps.time/1e3*60),this.animationProps.tock++,this.animationProps.time=this.timeline?this.timeline.getTime():this.animationProps.engineTime}async _initDevice(){if(this.device=await this.props.device,!this.device)throw new Error("No device provided");this.canvas=this.device.getDefaultCanvasContext().canvas||null}_createInfoDiv(){if(this.canvas&&this.props.onAddHTML){const t=document.createElement("div");document.body.appendChild(t),t.style.position="relative";const e=document.createElement("div");e.style.position="absolute",e.style.left="10px",e.style.bottom="10px",e.style.width="300px",e.style.background="white",this.canvas instanceof HTMLCanvasElement&&t.appendChild(this.canvas),t.appendChild(e);const i=this.props.onAddHTML(e);i&&(e.innerHTML=i)}}_getSizeAndAspect(){if(!this.device)return{width:1,height:1,aspect:1};const[t,e]=this.device.getDefaultCanvasContext().getDrawingBufferSize();return{width:t,height:e,aspect:t>0&&e>0?t/e:1}}_resizeViewport(){this.props.autoResizeViewport&&this.device.gl&&this.device.gl.viewport(0,0,this.device.gl.drawingBufferWidth,this.device.gl.drawingBufferHeight)}_beginFrameTimers(t){const e=t??("undefined"!=typeof performance?performance.now():Date.now());if(this._lastFrameTime){const t=e-this._lastFrameTime;t>0&&this.frameRate.addTime(t)}this._lastFrameTime=e,this.device?._isDebugGPUTimeEnabled()&&this._consumeEncodedGpuTime(),this.cpuTime.timeStart()}_endFrameTimers(){this.device?._isDebugGPUTimeEnabled()&&this._consumeEncodedGpuTime(),this.cpuTime.timeEnd(),this._updateSharedStats()}_consumeEncodedGpuTime(){if(!this.device)return;const t=this.device.commandEncoder._gpuTimeMs;void 0!==t&&(this.gpuTime.addTime(t),this.device.commandEncoder._gpuTimeMs=void 0)}_updateSharedStats(){if(this.stats!==this.sharedStats){for(const t of Object.keys(this.sharedStats.stats))this.stats.stats[t]||delete this.sharedStats.stats[t];this.stats.forEach(t=>{const e=this.sharedStats.get(t.name,t.type);e.sampleSize=t.sampleSize,e.time=t.time,e.count=t.count,e.samples=t.samples,e.lastTiming=t.lastTiming,e.lastSampleTime=t.lastSampleTime,e.lastSampleCount=t.lastSampleCount,e._count=t._count,e._time=t._time,e._samples=t._samples,e._startTime=t._startTime,e._timerPending=t._timerPending})}}_startEventHandling(){this.canvas&&(this.canvas.addEventListener("mousemove",this._onMousemove.bind(this)),this.canvas.addEventListener("mouseleave",this._onMouseleave.bind(this)))}_onMousemove(t){t instanceof MouseEvent&&(this._getAnimationProps()._mousePosition=[t.offsetX,t.offsetY])}_onMouseleave(t){this._getAnimationProps()._mousePosition=null}},K={blendColorOperation:"add",blendColorSrcFactor:"one",blendColorDstFactor:"zero",blendAlphaOperation:"add",blendAlphaSrcFactor:"constant",blendAlphaDstFactor:"zero"},J=class extends F{constructor(){super(...arguments),this._colorEncoderState=null}render(t){return"pickingFBO"in t?this._drawPickingBuffer(t):{decodePickingColor:null,stats:super._render(t)}}_drawPickingBuffer({layers:t,layerFilter:e,views:i,viewports:s,onViewportActive:n,pickingFBO:r,deviceRect:{x:o,y:a,width:h,height:c},cullRect:d,effects:l,pass:p="picking",pickZ:u,canvasContext:g,shaderModuleProps:v,clearColor:m}){this.pickZ=u;const f=this._resetColorEncoder(u),w=[o,a,h,c],_=super._render({target:r,layers:t,layerFilter:e,views:i,viewports:s,onViewportActive:n,cullRect:d,effects:l?.filter(t=>t.useInPicking),pass:p,canvasContext:g,isPicking:!0,shaderModuleProps:v,clearColor:m??[0,0,0,0],colorMask:15,scissorRect:w});return this._colorEncoderState=null,{decodePickingColor:f&&tt.bind(null,f),stats:_}}shouldDrawLayer(t){const{pickable:e,operation:i}=t.props;return e&&i.includes("draw")||i.includes("terrain")||i.includes("mask")}getShaderModuleProps(t,e,i){return{picking:{isActive:1,isAttribute:this.pickZ,disabledPickingIndices:t.internalState?.disabledPickingIndices},lighting:{enabled:!1}}}getLayerParameters(t,e,i){const s={...t.props.parameters},{pickable:n,operation:r}=t.props;return this._colorEncoderState?n&&r.includes("draw")?(Object.assign(s,K),s.blend=!0,"webgpu"===this.device.type?s.blendConstant=Q(this._colorEncoderState,t,i):s.blendColor=Q(this._colorEncoderState,t,i),r.includes("terrain")&&t.state?._hasPickingCover&&(s.blendAlphaSrcFactor="one")):r.includes("terrain")&&(s.blend=!1):s.blend=!1,s}_resetColorEncoder(t){return this._colorEncoderState=t?null:{byLayer:new Map,byAlpha:[]},this._colorEncoderState}};function Q(e,i,s){const{byLayer:n,byAlpha:r}=e;let o,a=n.get(i);return a?(a.viewports.push(s),o=a.a):(o=n.size+1,o<=255?(a={a:o,layer:i,viewports:[s]},n.set(i,a),r[o]=a):(t.defaultLogger.warn("Too many pickable layers, only picking the first 255")(),o=0)),[0,0,0,o/255]}function tt(t,e){const i=t.byAlpha[e[3]];return i&&{pickedLayer:i.layer,pickedViewports:i.viewports,pickedObjectIndex:i.layer.decodePickingColor(e)}}var et=class{constructor(t,e,i){this._loadCount=0,this._subscribers=new Set,this.id=t,this.context=i,this.setData(e)}subscribe(t){this._subscribers.add(t)}unsubscribe(t){this._subscribers.delete(t)}inUse(){return this._subscribers.size>0}delete(){}getData(){return this.isLoaded?this._error?Promise.reject(this._error):this._content:this._loader.then(()=>this.getData())}setData(e,i){if(e===this._data&&!i)return;this._data=e;const s=++this._loadCount;let n=e;"string"==typeof e&&(n=t.load(e)),n instanceof Promise?(this.isLoaded=!1,this._loader=n.then(t=>{this._loadCount===s&&(this.isLoaded=!0,this._error=void 0,this._content=t)}).catch(t=>{this._loadCount===s&&(this.isLoaded=!0,this._error=t||!0)})):(this.isLoaded=!0,this._error=void 0,this._content=e);for(const t of this._subscribers)t.onChange(this.getData())}},it=class{constructor(t){this.protocol=t.protocol||"resource://",this._context={device:t.device,gl:t.device?.gl,resourceManager:this},this._resources={},this._consumers={},this._pruneRequest=null}contains(t){return!!t.startsWith(this.protocol)||t in this._resources}add({resourceId:t,data:e,forceUpdate:i=!1,persistent:s=!0}){let n=this._resources[t];n?n.setData(e,i):(n=new et(t,e,this._context),this._resources[t]=n),n.persistent=s}remove(t){const e=this._resources[t];e&&(e.delete(),delete this._resources[t])}unsubscribe({consumerId:t}){const e=this._consumers[t];if(e){for(const t in e){const i=e[t],s=this._resources[i.resourceId];s&&s.unsubscribe(i)}delete this._consumers[t],this.prune()}}subscribe({resourceId:t,onChange:e,consumerId:i,requestId:s="default"}){const{_resources:n,protocol:r}=this;t.startsWith(r)&&(n[t=t.replace(r,"")]||this.add({resourceId:t,data:null,persistent:!1}));const o=n[t];if(this._track(i,s,o,e),o)return o.getData()}prune(){this._pruneRequest||(this._pruneRequest=setTimeout(()=>this._prune(),0))}finalize(){for(const t in this._resources)this._resources[t].delete()}_track(t,e,i,s){const n=this._consumers,r=n[t]=n[t]||{};let o=r[e];const a=o&&o.resourceId&&this._resources[o.resourceId];a&&(a.unsubscribe(o),this.prune()),i&&(o?(o.onChange=s,o.resourceId=i.id):o={onChange:s,resourceId:i.id},r[e]=o,i.subscribe(o))}_prune(){this._pruneRequest=null;for(const t of Object.keys(this._resources)){const e=this._resources[t];e.persistent||e.inUse()||(e.delete(),delete this._resources[t])}}},st=class{constructor(e,i){this._lastRenderedLayers=[],this._needsRedraw=!1,this._needsUpdate=!1,this._nextLayers=null,this._debug=!1,this._defaultShaderModulesChanged=!1,this.activateViewport=e=>{t.debug("layerManager.activateViewport",this,e),e&&(this.context.viewport=e)};const{deck:s,stats:n,viewport:r,timeline:o}=i||{};this.layers=[],this.resourceManager=new it({device:e,protocol:"deck://"}),this.context={mousePosition:null,userData:{},layerManager:this,device:e,gl:e?.gl,deck:s,shaderAssembler:k(e?.info?.shadingLanguage||"glsl"),defaultShaderModules:[u],renderPass:void 0,stats:n||new t.Stats({id:"deck.gl"}),viewport:r||new t.Viewport({id:"DEFAULT-INITIAL-VIEWPORT"}),timeline:o||new q,resourceManager:this.resourceManager,onError:void 0},Object.seal(this)}finalize(){this.resourceManager.finalize();for(const t of this.layers)this._finalizeLayer(t)}needsRedraw(t={clearRedrawFlags:!1}){let e=this._needsRedraw;t.clearRedrawFlags&&(this._needsRedraw=!1);for(const i of this.layers){const s=i.getNeedsRedraw(t);e=e||s}return e}needsUpdate(){return this._nextLayers&&this._nextLayers!==this._lastRenderedLayers?"layers changed":this._defaultShaderModulesChanged?"shader modules changed":this._needsUpdate}setNeedsRedraw(t){this._needsRedraw=this._needsRedraw||t}setNeedsUpdate(t){this._needsUpdate=this._needsUpdate||t}getLayers({layerIds:t}={}){return t?this.layers.filter(e=>t.find(t=>0===e.id.indexOf(t))):this.layers}setProps(t){"debug"in t&&(this._debug=t.debug),"userData"in t&&(this.context.userData=t.userData),"layers"in t&&(this._nextLayers=t.layers),"onError"in t&&(this.context.onError=t.onError)}setLayers(e,i){t.debug("layerManager.setLayers",this,i,e),this._lastRenderedLayers=e;const s=t.flatten(e,Boolean);for(const t of s)t.context=this.context;this._updateLayers(this.layers,s)}updateLayers(){const t=this.needsUpdate();t&&(this.setNeedsRedraw(`updating layers: ${t}`),this.setLayers(this._nextLayers||this._lastRenderedLayers,t)),this._nextLayers=null}addDefaultShaderModule(t){const{defaultShaderModules:e}=this.context;e.find(e=>e.name===t.name)||(e.push(t),this._defaultShaderModulesChanged=!0)}removeDefaultShaderModule(t){const{defaultShaderModules:e}=this.context,i=e.findIndex(e=>e.name===t.name);i>=0&&(e.splice(i,1),this._defaultShaderModulesChanged=!0)}_handleError(t,e,i){i.raiseError(e,`${t} of ${i}`)}_updateLayers(e,i){const s={};for(const o of e)s[o.id]?t.defaultLogger.warn(`Multiple old layers with same id ${o.id}`)():s[o.id]=o;if(this._defaultShaderModulesChanged){for(const t of e)t.setNeedsUpdate(),t.setChangeFlags({extensionsChanged:!0});this._defaultShaderModulesChanged=!1}const n=[];this._updateSublayersRecursively(i,s,n),this._finalizeOldLayers(s);let r=!1;for(const t of n)if(t.hasUniformTransition()){r=`Uniform transition in ${t}`;break}this._needsUpdate=r,this.layers=n}_updateSublayersRecursively(e,i,s){for(const r of e){r.context=this.context;const e=i[r.id];null===e&&t.defaultLogger.warn(`Multiple new layers with same id ${r.id}`)(),i[r.id]=null;let o=null;try{this._debug&&e!==r&&r.validateProps(),e?(this._transferLayerState(e,r),this._updateLayer(r)):this._initializeLayer(r),s.push(r),o=r.isComposite?r.getSubLayers():null}catch(n){this._handleError("matching",n,r)}o&&this._updateSublayersRecursively(o,i,s)}}_finalizeOldLayers(t){for(const e in t){const i=t[e];i&&this._finalizeLayer(i)}}_initializeLayer(e){try{e._initialize(),e.lifecycle=t.LIFECYCLE.INITIALIZED}catch(i){this._handleError("initialization",i,e)}}_transferLayerState(e,i){i._transferState(e),i.lifecycle=t.LIFECYCLE.MATCHED,i!==e&&(e.lifecycle=t.LIFECYCLE.AWAITING_GC)}_updateLayer(t){try{t._update()}catch(e){this._handleError("update",e,t)}}_finalizeLayer(e){this._needsRedraw=this._needsRedraw||`finalized ${e}`,e.lifecycle=t.LIFECYCLE.AWAITING_FINALIZATION;try{e._finalize(),e.lifecycle=t.LIFECYCLE.FINALIZED}catch(i){this._handleError("finalization",i,e)}}},nt="default-canvas",rt=class{constructor(t){this.views=[],this.width=100,this.height=100,this.viewState={},this.controllers={},this.timeline=t.timeline,this._viewports=[],this._viewportMap={},this._isUpdating=!1,this._needsRedraw="First render",this._needsUpdate="Initialize",this._eventManager=t.eventManager,this._eventManagers=t.eventManagers||{},this._viewEventManagers={},this._eventCallbacks={onViewStateChange:t.onViewStateChange,onInteractionStateChange:t.onInteractionStateChange},this._pickPosition=t.pickPosition,this._getCanvasContext=t.getCanvasContext,Object.seal(this),this.setProps(t)}finalize(){for(const t in this.controllers){const e=this.controllers[t];e&&e.finalize()}this.controllers={}}needsRedraw(t={clearRedrawFlags:!1}){const e=this._needsRedraw;return t.clearRedrawFlags&&(this._needsRedraw=!1),e}setNeedsUpdate(t){this._needsUpdate=this._needsUpdate||t,this._needsRedraw=this._needsRedraw||t}updateViewStates(){for(const t in this.controllers){const e=this.controllers[t];e&&e.updateTransition()}}getViewports(t){return t?this._viewports.filter(e=>{const i=!t.canvasId||this.getCanvasId(e.id)===t.canvasId,s=!("x"in t)||e.containsPixel(t);return i&&s}):this._viewports}getViews(){const t={};return this.views.forEach(e=>{t[e.id]=e}),t}getView(t){return this.views.find(e=>e.id===t)}getViewState(t){const e="string"==typeof t?this.getView(t):t,i=e&&this.viewState[e.getViewStateId()]||this.viewState;return e?e.filterViewState(i):i}getViewport(t){return this._viewportMap[t]}getCanvasId(t){const e="string"==typeof t?this.getView(t):t;return e?this._viewEventManagers[e.id]?.canvasId||this._getCanvasIdFromView(e):void 0}unproject(t,e){const i=this.getViewports(),s={x:t[0],y:t[1]};for(let n=i.length-1;n>=0;--n){const r=i[n];if(r.containsPixel(s)){const i=t.slice();return i[0]-=r.x,i[1]-=r.y,r.unproject(i,e)}}return null}setProps(t){t.views&&this._setViews(t.views),t.viewState&&this._setViewState(t.viewState),("width"in t||"height"in t)&&this._setSize(t.width,t.height),"pickPosition"in t&&(this._pickPosition=t.pickPosition),"eventManagers"in t&&this._setEventManagers(t.eventManagers||{}),this._isUpdating||this._update()}_update(){this._isUpdating=!0;try{this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports()),this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports())}finally{this._isUpdating=!1}}_hasViewState(t){const e=t.props.viewState;if(e&&"object"==typeof e&&!e.id)return!0;if(this.viewState[t.getViewStateId()])return!0;const i=Object.values(this.viewState);return 0===i.length||i.some(t=>!t||"object"!=typeof t||Array.isArray(t))}_setSize(t,e){t===this.width&&e===this.height||(this.width=t,this.height=e,this.setNeedsUpdate("Size changed"))}_setViews(e){e=t.flatten(e,Boolean),this._diffViews(e,this.views)&&this.setNeedsUpdate("views changed"),this.views=e}_setViewState(e){e?(t.deepEqual(e,this.viewState,3)||this.setNeedsUpdate("viewState changed"),this.viewState=e):t.defaultLogger.warn("missing `viewState` or `initialViewState`")()}_setEventManagers(t){this._eventManagers!==t&&(this._eventManagers=t,this.setNeedsUpdate("eventManagers changed"))}_getCanvasIdFromView(t){return t.props.canvasId||this._getCanvasContext?.(t.id)?.id||"default-canvas"}_getCanvasDimensions(t){const[e,i]=(this._getCanvasContext?.(t.id))?.getCSSSize()||[this.width,this.height];return{width:e,height:i}}_getViewEventManager(t){const e=this.getCanvasId(t)||"default-canvas";return{canvasId:e,eventManager:this._eventManagers[e]||this._eventManager}}_startViewportRebuild(){const t=this.controllers,e=this._viewEventManagers;return this._viewports=[],this.controllers={},this._viewEventManagers={},{oldControllers:t,oldViewEventManagers:e}}_getReusableController(t,e,i){return!t||e?.canvasId===i.canvasId&&e?.eventManager===i.eventManager?t:(t.finalize(),null)}_createController(t,e){return new(0,e.type)({timeline:this.timeline,eventManager:this._getViewEventManager(t).eventManager,onViewStateChange:this._eventCallbacks.onViewStateChange,onStateChange:this._eventCallbacks.onInteractionStateChange,makeViewport:e=>this.getView(t.id)?.makeViewport({viewState:e,...this._getCanvasDimensions(t)}),pickPosition:(e,i)=>this._pickPosition?.(e,i,t.id)})}_updateController(t,e,i,s){const n=t.controller;if(n&&i){const r={...e,...n,id:t.id,x:i.x,y:i.y,width:i.width,height:i.height};return s&&s.constructor===n.type||(s=this._createController(t,r)),s&&s.setProps(r),s}return null}_rebuildViewports(){const{views:t}=this,{oldControllers:e,oldViewEventManagers:i}=this._startViewportRebuild();let s=!1;for(let n=t.length;n--;){const r=t[n],{width:o,height:a}=this._getCanvasDimensions(r),h=this._getViewEventManager(r);this._viewEventManagers[r.id]=h;const c=this.getViewState(r),d=r.makeViewport({viewState:c,width:o,height:a});let l=this._getReusableController(e[r.id],i[r.id],h),p=Boolean(r.controller);p&&!this._hasViewState(r)&&(p=!1),p&&!l&&(s=!0),!s&&p||!l||(l.finalize(),l=null),this.controllers[r.id]=p?this._updateController(r,c,d,l):null,d&&this._viewports.unshift(d)}for(const n in e){const t=e[n];t&&!this.controllers[n]&&t.finalize()}this._buildViewportMap()}_buildViewportMap(){this._viewportMap={},this._viewports.forEach(t=>{t.id&&(this._viewportMap[t.id]=this._viewportMap[t.id]||t)})}_diffViews(t,e){return t.length!==e.length||t.some((i,s)=>!t[s].equals(e[s]))}},ot=/^(?:\d+\.?\d*|\.\d+)$/;function at(t){switch(typeof t){case"number":if(!Number.isFinite(t))throw new Error(`Could not parse position string ${t}`);return{type:"literal",value:t};case"string":try{const e=function(t){const e=[];let i=0;for(;i<t.length;){const s=t[i];if(/\s/.test(s))i++;else{if("+"!==s&&"-"!==s&&"("!==s&&")"!==s&&"%"!==s){if(lt(s)||"."===s){const n=i;let r="."===s;for(i++;i<t.length;){const e=t[i];if(lt(e))i++;else{if("."!==e||r)break;r=!0,i++}}const o=t.slice(n,i);if(!ot.test(o))throw new Error("Invalid number token");e.push({type:"number",value:parseFloat(o)});continue}if(pt(s)){const s=i;for(;i<t.length&&pt(t[i]);)i++;const n=t.slice(s,i).toLowerCase();e.push({type:"word",value:n});continue}throw new Error("Invalid token in position string")}e.push({type:"symbol",value:s}),i++}}return e}(t);return new dt(e).parseExpression()}catch(e){const i=e instanceof Error?e.message:String(e);throw new Error(`Could not parse position string ${t}: ${i}`)}default:throw new Error(`Could not parse position string ${t}`)}}function ht(t,e){switch(t.type){case"literal":return t.value;case"percentage":return Math.round(t.value*e);case"binary":const i=ht(t.left,e),s=ht(t.right,e);return"+"===t.operator?i+s:i-s;default:throw new Error("Unknown layout expression type")}}function ct(t,e){return ht(t,e)}var dt=class{constructor(t){this.index=0,this.tokens=t}parseExpression(){const t=this.parseBinaryExpression();if(this.index<this.tokens.length)throw new Error("Unexpected token at end of expression");return t}parseBinaryExpression(){let t=this.parseFactor(),e=this.peek();for(;ut(e);){this.index++;const i=this.parseFactor();t={type:"binary",operator:e.value,left:t,right:i},e=this.peek()}return t}parseFactor(){const t=this.peek();if(!t)throw new Error("Unexpected end of expression");if("symbol"===t.type&&"+"===t.value)return this.index++,this.parseFactor();if("symbol"===t.type&&"-"===t.value)return this.index++,{type:"binary",operator:"-",left:{type:"literal",value:0},right:this.parseFactor()};if("symbol"===t.type&&"("===t.value){this.index++;const t=this.parseBinaryExpression();if(!this.consumeSymbol(")"))throw new Error("Missing closing parenthesis");return t}if("word"===t.type&&"calc"===t.value){if(this.index++,!this.consumeSymbol("("))throw new Error("Missing opening parenthesis after calc");const t=this.parseBinaryExpression();if(!this.consumeSymbol(")"))throw new Error("Missing closing parenthesis");return t}if("number"===t.type){this.index++;const e=t.value,i=this.peek();return i&&"symbol"===i.type&&"%"===i.value?(this.index++,{type:"percentage",value:e/100}):i&&"word"===i.type&&"px"===i.value?(this.index++,{type:"literal",value:e}):{type:"literal",value:e}}throw new Error("Unexpected token in expression")}consumeSymbol(t){const e=this.peek();return!(!e||"symbol"!==e.type||e.value!==t)&&(this.index++,!0)}peek(){return this.tokens[this.index]||null}};function lt(t){return t>="0"&&t<="9"}function pt(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"}function ut(t){return Boolean(t&&"symbol"===t.type&&("+"===t.value||"-"===t.value))}function gt(t,e){t=t.slice();for(let i=0;i<e.length;i++){const s=e[i];Number.isFinite(s)&&(t[i]=s)}return t}var vt=class{constructor(t){const{id:e,x:i=0,y:s=0,width:n="100%",height:r="100%",padding:o=null}=t;this.id=e||this.constructor.displayName||"view",this.props={...t,id:this.id},this._x=at(i),this._y=at(s),this._width=at(n),this._height=at(r),this._padding=o&&{left:at(o.left||0),right:at(o.right||0),top:at(o.top||0),bottom:at(o.bottom||0)},this.equals=this.equals.bind(this),Object.seal(this)}equals(e){return this===e||this.constructor===e.constructor&&t.deepEqual(this.props,e.props,2)}clone(t){return new(0,this.constructor)({...this.props,...t})}makeViewport({width:t,height:e,viewState:i}){i=this.filterViewState(i);const s=this.getDimensions({width:t,height:e});return s.height&&s.width?new(this.getViewportType(i))({...i,...this.props,...s}):null}getViewStateId(){const{viewState:t}=this.props;return"string"==typeof t?t:t?.id||this.id}filterViewState(t){return this.props.viewState&&"object"==typeof this.props.viewState?this.props.viewState.id?function(t,e){const i={...t};for(const s in e)"id"!==s&&(Array.isArray(i[s])&&Array.isArray(e[s])?i[s]=gt(i[s],e[s]):i[s]=e[s]);return i}(t,this.props.viewState):this.props.viewState:t}getDimensions({width:t,height:e}){const i={x:ct(this._x,t),y:ct(this._y,e),width:ct(this._width,t),height:ct(this._height,e)};return this._padding&&(i.padding={left:ct(this._padding.left,t),top:ct(this._padding.top,e),right:ct(this._padding.right,t),bottom:ct(this._padding.bottom,e)}),i}get controller(){const t=this.props.controller;return t?!0===t?{type:this.ControllerType}:"function"==typeof t?{type:t}:{type:this.ControllerType,...t}:null}},mt=()=>{},ft={mode:"preserve"},wt={mode:"hard"},_t=2,yt=3,Pt=t=>t,bt=1,Ct=class{constructor(e){this._onTransitionUpdate=t=>{const{time:e,settings:{interpolator:i,startProps:s,endProps:n,duration:r,easing:o}}=t,a=o(e/r),h=i.interpolateProps(s,n,a);this.propsInTransition=this.getControllerState({...this.props,...h},ft).getViewportProps(),this.onViewStateChange({viewState:this.propsInTransition,oldViewState:this.props})},this.getControllerState=e.getControllerState,this.propsInTransition=null,this.transition=new t.Transition(e.timeline),this.onViewStateChange=e.onViewStateChange||mt,this.onStateChange=e.onStateChange||mt}finalize(){this.transition.cancel()}getViewportInTransition(){return this.propsInTransition}processViewStateChange(t){let e=!1;const i=this.props;if(this.props=t,!i||this._shouldIgnoreViewportChange(i,t))return!1;if(this._isTransitionEnabled(t)){let s=i;if(this.transition.inProgress){const{interruption:t,endProps:e}=this.transition.settings;s={...i,...t===_t?e:this.propsInTransition||i}}this._triggerTransition(s,t),e=!0}else this.transition.cancel();return e}updateTransition(){this.transition.update()}_isTransitionEnabled(t){const{transitionDuration:e,transitionInterpolator:i}=t;return(e>0||"auto"===e)&&Boolean(i)}_isUpdateDueToCurrentTransition(t){return!(!this.transition.inProgress||!this.propsInTransition)&&this.transition.settings.interpolator.arePropsEqual(t,this.propsInTransition)}_shouldIgnoreViewportChange(t,e){return this.transition.inProgress?this.transition.settings.interruption===yt||this._isUpdateDueToCurrentTransition(e):!this._isTransitionEnabled(e)||e.transitionInterpolator.arePropsEqual(t,e)}_triggerTransition(t,e){const i=this.getControllerState(t,ft),s=this.getControllerState(e,wt).shortestPathFrom(i),n=e.transitionInterpolator,r=n.getDuration?n.getDuration(t,e):e.transitionDuration;if(0===r)return;const o=n.initializeProps(t,s);this.propsInTransition={};const a={duration:r,easing:e.transitionEasing||Pt,interpolator:n,interruption:e.transitionInterruption||bt,startProps:o.start,endProps:o.end,onStart:e.onTransitionStart,onUpdate:this._onTransitionUpdate,onInterrupt:this._onTransitionEnd(e.onTransitionInterrupt),onEnd:this._onTransitionEnd(e.onTransitionEnd)};this.transition.start(a),this.onStateChange({inTransition:!0}),this.updateTransition()}_onTransitionEnd(t){return e=>{this.propsInTransition=null,this.onStateChange({inTransition:!1,isZooming:!1,isPanning:!1,isRotating:!1}),t?.(e)}}},Mt=class{constructor(t){const{compare:e,extract:i,required:s}=t;this._propsToCompare=e,this._propsToExtract=i||e,this._requiredProps=s}arePropsEqual(e,i){for(const s of this._propsToCompare)if(!(s in e)||!(s in i)||!t.equals(e[s],i[s]))return!1;return!0}initializeProps(t,e){const i={},s={};for(const n of this._propsToExtract)(n in t||n in e)&&(i[n]=t[n],s[n]=e[n]);return this._checkRequiredProps(i),this._checkRequiredProps(s),{start:i,end:s}}getDuration(t,e){return e.transitionDuration}_checkRequiredProps(e){this._requiredProps&&this._requiredProps.forEach(i=>{const s=e[i];t.assert(Number.isFinite(s)||Array.isArray(s),`${i} is required for transition`)})}},kt=["longitude","latitude","zoom","bearing","pitch"],xt=["longitude","latitude","zoom"],St=class extends Mt{constructor(t={}){const e=Array.isArray(t)?t:t.transitionProps,i=Array.isArray(t)?{}:t;i.transitionProps=Array.isArray(e)?{compare:e,required:e}:e||{compare:kt,required:xt},super(i.transitionProps),this.opts=i}initializeProps(t,e){const i=super.initializeProps(t,e),{makeViewport:s,around:n}=this.opts;if(s&&n){const r=s(t),o=s(e),a=r.unproject(n);i.start.around=n,Object.assign(i.end,{around:o.project(a),aroundPosition:a,width:e.width,height:e.height})}return i}interpolateProps(e,i,s){const n={};for(const r of this._propsToExtract)n[r]=t.lerp$2(e[r]||0,i[r]||0,s);if(i.aroundPosition&&this.opts.makeViewport){const r=this.opts.makeViewport({...i,...n});Object.assign(n,r.panByPosition(i.aroundPosition,t.lerp$2(e.around,i.around,s)))}return n}},Et={transitionDuration:0},Rt=t=>1-(1-t)*(1-t),Lt=t=>1===t?1:1-Math.pow(2,-10*t),Dt=["wheel"],Tt=["panstart","panmove","panend"],At=["pinchstart","pinchmove","pinchend"],It=["multipanstart","multipanmove","multipanend"],Vt=["dblclick"],zt=["dblclickdragstart","dblclickdragmove","dblclickdragend","dblclickdragcancel"],Ft=["keydown"],Ot={},jt=class{constructor(t){this.state={},this._events={},this._interactionState={isDragging:!1},this._customEvents=[],this._eventStartBlocked=null,this._panMove=!1,this._multiPanMode=null,this._multiPanStartCenter=null,this._doubleClickDragAnchor=null,this._suppressDoubleClickUntil=0,this.invertPan=!1,this.dragMode="rotate",this.inertia=0,this.scrollZoom=!0,this.dragPan=!0,this.dragRotate=!0,this.doubleClickZoom=!0,this.doubleClickDragZoom=!0,this.touchZoom=!0,this.touchRotate=!1,this.multiTouchDrag=null,this.trackpadGesture=!1,this.zoomAround="pointer",this.keyboard=!0,this.transitionManager=new Ct({...t,getControllerState:(e,i)=>new this.ControllerState({...e,constraintContext:i,makeViewport:t.makeViewport}),onViewStateChange:this._onTransition.bind(this),onStateChange:this._setInteractionState.bind(this)}),this.handleEvent=this.handleEvent.bind(this),this.eventManager=t.eventManager,this.onViewStateChange=t.onViewStateChange||(()=>{}),this.onStateChange=t.onStateChange||(()=>{}),this.makeViewport=t.makeViewport,this.pickPosition=t.pickPosition}set events(t){this.toggleEvents(this._customEvents,!1),this.toggleEvents(t,!0),this._customEvents=t,this.props&&this.setProps(this.props)}finalize(){for(const t in this._events)this._events[t]&&this.eventManager?.off(t,this.handleEvent);this.transitionManager.finalize()}handleEvent(t){this._controllerState=void 0;const e=this._eventStartBlocked;switch(t.type){case"panstart":return!e&&this._onPanStart(t);case"panmove":return this._onPan(t);case"panend":return this._onPanEnd(t);case"pinchstart":return!(e||!this._isTrackpadGestureAllowed(t))&&this._onPinchStart(t);case"pinchmove":return!!this._isTrackpadGestureAllowed(t)&&this._onPinch(t);case"pinchend":return!!this._isTrackpadGestureAllowed(t)&&this._onPinchEnd(t);case"multipanstart":return!e&&this._onMultiPanStart(t);case"multipanmove":return this._onMultiPan(t);case"multipanend":return this._onMultiPanEnd(t);case"dblclick":return this._onDoubleClick(t);case"dblclickdragstart":return!e&&this._onDoubleClickDragStart(t);case"dblclickdragmove":return this._onDoubleClickDrag(t);case"dblclickdragend":case"dblclickdragcancel":return this._onDoubleClickDragEnd(t);case"wheel":return this._onWheel(t);case"keydown":return this._onKeyDown(t);default:return!1}}get controllerState(){return this._controllerState=this._controllerState||new this.ControllerState({makeViewport:this.makeViewport,...this.props,...this.state}),this._controllerState}getCenter(t){const{x:e,y:i}=this.props,{offsetCenter:s}=t;return[s.x-e,s.y-i]}getZoomPosition(e){if("pointer"===this.zoomAround)return e;const i=this.makeViewport(this.controllerState.getViewportProps()),[s,n]=t.worldToPixels(i.center,i.pixelProjectionMatrix);return[s,n]}isPointInBounds(t,e){const{width:i,height:s}=this.props;if(e&&e.handled)return!1;const n=t[0]>=0&&t[0]<=i&&t[1]>=0&&t[1]<=s;return n&&e&&e.stopPropagation(),n}isFunctionKeyPressed(t){const{srcEvent:e}=t;return Boolean(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}isDragging(){return this._interactionState.isDragging||!1}blockEvents(t){const e=setTimeout(()=>{this._eventStartBlocked===e&&(this._eventStartBlocked=null)},t);this._eventStartBlocked=e}setProps(e){void 0===e.maxBoundsPadding&&(e.maxBoundsPadding=null),e.dragMode&&(this.dragMode=e.dragMode);const i=this.props;this.props=e,"transitionInterpolator"in e||(e.transitionInterpolator=this._getTransitionProps().transitionInterpolator),this.transitionManager.processViewStateChange(e);const{inertia:s}=e;this.inertia=Number.isFinite(s)?s:!0===s?300:0;const{scrollZoom:n=!0,dragPan:r=!0,dragRotate:o=!0,doubleClickZoom:a=!0,doubleClickDragZoom:h=!1,touchZoom:c=!0,touchRotate:d=!1,multiTouchDrag:l=(d?"rotate":null),trackpadGesture:p=!1,zoomAround:u="pointer",keyboard:g=!0}=e,v=Boolean(this.onViewStateChange);if(this.toggleEvents(Dt,v&&n),this.toggleEvents(Tt,v),this.toggleEvents(At,v&&(c||"rotate"===l)),this.toggleEvents(It,v&&Boolean(l)),this.toggleEvents(Vt,v&&a),this.toggleEvents(zt,v&&h),this.toggleEvents(Ft,v&&g),this.scrollZoom=n,this.dragPan=r,this.dragRotate=o,this.doubleClickZoom=a,this.doubleClickDragZoom=h,this.touchZoom=c,this.touchRotate="rotate"===l,this.multiTouchDrag=l,this.trackpadGesture=p,this.zoomAround=u,this.keyboard=g,(!i||i.height!==e.height||i.width!==e.width||i.maxBounds!==e.maxBounds||i.maxBoundsPadding!==e.maxBoundsPadding)&&e.maxBounds){const i=new this.ControllerState({...e,makeViewport:this.makeViewport}),s=i.getViewportProps();Object.keys(s).some(i=>!t.deepEqual(s[i],e[i],1))&&this.updateViewport(i)}}updateTransition(){this.transitionManager.updateTransition()}toggleEvents(t,e){this.eventManager&&t.forEach(t=>{this._events[t]!==e&&(this._events[t]=e,e?this.eventManager.on(t,this.handleEvent):this.eventManager.off(t,this.handleEvent))})}updateViewport(t,e=null,i={}){const s={...t.getViewportProps(),...e},n=this.controllerState!==t;if(this.state=t.getState(),this._setInteractionState(i),n){const t=this.controllerState&&this.controllerState.getViewportProps();this.onViewStateChange&&this.onViewStateChange({viewState:s,interactionState:this._interactionState,oldViewState:t,viewId:this.props.id})}}_onTransition(t){this.onViewStateChange({...t,interactionState:this._interactionState,viewId:this.props.id})}_setInteractionState(t){Object.assign(this._interactionState,t),this.onStateChange(this._interactionState)}_getConstraintContext(t,e){return this.props.rubberBand?{mode:"update"===e?"elastic":"end"===e?"rebound":"hard"}:{mode:"hard"}}_getReboundTransition(e,i){if("rebound"!==e.mode)return null;const s=i.getViewportProps();return Object.keys(s).some(e=>!t.deepEqual(this.props[e],s[e],1))?{...this._getTransitionProps(),transitionDuration:300,transitionEasing:Lt}:null}_onPanStart(t){const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;let i=this.isFunctionKeyPressed(t)||t.rightButton||!1;(this.invertPan||"pan"===this.dragMode)&&(i=!i);const s=i?"pan":"rotate",n=this._getConstraintContext(s,"start"),r=i?this.controllerState.panStart({pos:e},n):this.controllerState.rotateStart({pos:e},n);return this._panMove=i,this.updateViewport(r,Et,{isDragging:!0}),!0}_onPan(t){return!!this.isDragging()&&(this._panMove?this._onPanMove(t):this._onPanRotate(t))}_onPanEnd(t){return!!this.isDragging()&&(this._panMove?this._onPanMoveEnd(t):this._onPanRotateEnd(t))}_onPanMove(t){if(!this.dragPan)return!1;const e=this.getCenter(t),i=this.controllerState.pan({pos:e},this._getConstraintContext("pan","update"));return this.updateViewport(i,Et,{isDragging:!0,isPanning:!0}),!0}_onPanMoveEnd(t){const{inertia:e}=this;if(this.dragPan&&e&&t.velocity){const i=this.getCenter(t),s=[i[0]+t.velocityX*e/2,i[1]+t.velocityY*e/2],n=this.controllerState.pan({pos:s}).panEnd();this.updateViewport(n,{...this._getTransitionProps(),transitionDuration:e,transitionEasing:Rt},{isDragging:!1,isPanning:!0})}else{const t=this.controllerState,e=this._getConstraintContext("pan","end"),i=t.panEnd(e),s=this._getReboundTransition(e,i);this.updateViewport(i,s,{isDragging:!1,isPanning:Boolean(s)})}return!0}_onPanRotate(t){if(!this.dragRotate)return!1;const e=this.getCenter(t),i=this.controllerState.rotate({pos:e},this._getConstraintContext("rotate","update"));return this.updateViewport(i,Et,{isDragging:!0,isRotating:!0}),!0}_onPanRotateEnd(t){const{inertia:e}=this;if(this.dragRotate&&e&&t.velocity){const i=this.getCenter(t),s=[i[0]+t.velocityX*e/2,i[1]+t.velocityY*e/2],n=this.controllerState.rotate({pos:s}).rotateEnd();this.updateViewport(n,{...this._getTransitionProps(),transitionDuration:e,transitionEasing:Rt},{isDragging:!1,isRotating:!0})}else{const t=this.controllerState,e=this._getConstraintContext("rotate","end"),i=t.rotateEnd(e),s=this._getReboundTransition(e,i);this.updateViewport(i,s,{isDragging:!1,isRotating:Boolean(s)})}return!0}_onWheel(t){if(!this.scrollZoom)return!1;if(this.trackpadGesture&&"mouse"!==t.device)return!1;const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;t.srcEvent.preventDefault();const{speed:i=.01,smooth:s=!1}=!0===this.scrollZoom?{}:this.scrollZoom,{delta:n}=t;let r=2/(1+Math.exp(-Math.abs(n*i)));n<0&&0!==r&&(r=1/r);const o=this.getZoomPosition(e),a=s?{...this._getTransitionProps({around:o}),transitionDuration:250}:Et,h=this.controllerState.zoom({pos:o,scale:r});return this.updateViewport(h,a,{isZooming:!0,isPanning:!0}),s||this._setInteractionState({isZooming:!1,isPanning:!1}),!0}_onMultiPanStart(t){const{multiTouchDrag:e}=this;if(!e||!this._isMultiPanEventAllowed(t,e))return!1;const i=t.offsetCenter;if(!this.isPointInBounds(this.getCenter(t),t))return!1;const s="trackpad"===t.pointerType,n={x:i.x-(s?0:t.deltaX),y:i.y-(s?0:t.deltaY)},r={...t,offsetCenter:n},o=this.getCenter(r),a="pan"===e?this.controllerState.panStart({pos:o},this._getConstraintContext("pan","start")):this.controllerState.rotateStart({pos:o},this._getConstraintContext("rotate","start"));return this._multiPanMode=e,this._multiPanStartCenter=n,this.updateViewport(a,Et,{isDragging:!0}),!0}_onMultiPan(t){const{mode:e,event:i}=this._getMultiPanEvent(t);return!!(e&&i&&this.isDragging())&&("pan"===e?this._onPanMove(i):this._onPanRotate(i))}_onMultiPanEnd(t){const{mode:e,event:i}=this._getMultiPanEvent(t);if(!e||!i||!this.isDragging())return this._resetMultiPan(),!1;const s="pan"===e?this._onPanMoveEnd(i):this._onPanRotateEnd(i);return this._resetMultiPan(),s}_isTrackpadGestureAllowed(t){return"trackpad"!==t.pointerType||this.trackpadGesture}_isMultiPanEventAllowed(t,e){return"trackpad"===t.pointerType?this.trackpadGesture&&("pan"===e?this.dragPan:this.dragRotate):"touch"===t.pointerType&&("pan"===e?this.dragPan:this.dragRotate)}_getMultiPanEvent(t){const e=this._multiPanMode,i=this._multiPanStartCenter;return e&&i?{mode:e,event:{...t,offsetCenter:{x:i.x+t.deltaX,y:i.y+t.deltaY}}}:{mode:null,event:null}}_resetMultiPan(){this._multiPanMode=null,this._multiPanStartCenter=null}_onPinchStart(t){this._doubleClickDragAnchor=null;const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;const i=this.controllerState.zoomStart({pos:this.getZoomPosition(e)},this._getConstraintContext("zoom","start")).rotateStart({pos:e},this._getConstraintContext("rotate","start"));return Ot._startPinchRotation=t.rotation,Ot._lastPinchEvent=t,this.updateViewport(i,Et,{isDragging:!0}),!0}_onPinch(t){if(!this.touchZoom&&!this.touchRotate)return!1;if(!this.isDragging())return!1;let e=this.controllerState;if(this.touchZoom){const{scale:i}=t,s=this.getCenter(t);e=e.zoom({pos:this.getZoomPosition(s),scale:i},this._getConstraintContext("zoom","update"))}if(this.touchRotate){const{rotation:i}=t;e=e.rotate({deltaAngleX:Ot._startPinchRotation-i},this._getConstraintContext("rotate","update"))}return this.updateViewport(e,Et,{isDragging:!0,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:this.touchRotate}),Ot._lastPinchEvent=t,!0}_onPinchEnd(t){if(!this.isDragging())return!1;const{inertia:e}=this,{_lastPinchEvent:i}=Ot;if(this.touchZoom&&e&&i&&t.scale!==i.scale){const s=this.getCenter(t),n=this.getZoomPosition(s);let r=this.controllerState.rotateEnd();const o=Math.log2(t.scale),a=(o-Math.log2(i.scale))/(t.deltaTime-i.deltaTime),h=Math.pow(2,o+a*e/2);r=r.zoom({pos:n,scale:h}).zoomEnd(),this.updateViewport(r,{...this._getTransitionProps({around:n}),transitionDuration:e,transitionEasing:Rt},{isDragging:!1,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:!1}),this.blockEvents(e)}else{const t=this.controllerState,e=this._getConstraintContext("zoom","end"),i=this._getConstraintContext("rotate","end"),s=t.zoomEnd(e).rotateEnd(i),n=this._getReboundTransition(this.touchZoom?e:i,s);this.updateViewport(s,n,{isDragging:!1,isPanning:Boolean(n)&&this.touchZoom,isZooming:Boolean(n)&&this.touchZoom,isRotating:Boolean(n)&&this.touchRotate})}return Ot._startPinchRotation=null,Ot._lastPinchEvent=null,!0}_onDoubleClick(t){if(!this.doubleClickZoom)return!1;if(Date.now()<this._suppressDoubleClickUntil)return!1;const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;const i=this.isFunctionKeyPressed(t),s=this.getZoomPosition(e),n=this.controllerState.zoom({pos:s,scale:i?.5:2});return this.updateViewport(n,this._getTransitionProps({around:s}),{isZooming:!0,isPanning:!0}),this.blockEvents(100),!0}_onDoubleClickDragStart(t){if(!this.doubleClickDragZoom)return this._doubleClickDragAnchor=null,!1;const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return this._doubleClickDragAnchor=null,!1;this._doubleClickDragAnchor=this.getZoomPosition(e);let i=this.controllerState.zoomStart({pos:this._doubleClickDragAnchor},this._getConstraintContext("zoom","start"));return 1!==t.scale&&(i=i.zoom({pos:this._doubleClickDragAnchor,scale:t.scale},this._getConstraintContext("zoom","update"))),this.updateViewport(i,Et,{isDragging:!0,isPanning:!0,isZooming:!0}),!0}_onDoubleClickDrag(t){const e=this._doubleClickDragAnchor;if(!e)return!1;const i=this.controllerState.zoom({pos:e,scale:t.scale},this._getConstraintContext("zoom","update"));return this.updateViewport(i,Et,{isDragging:!0,isPanning:!0,isZooming:!0}),!0}_onDoubleClickDragEnd(t){if(!this._doubleClickDragAnchor)return!1;this._doubleClickDragAnchor=null;const e=this.controllerState,i=this._getConstraintContext("zoom","end"),s=e.zoomEnd(i),n=this._getReboundTransition(i,s);return this.updateViewport(s,n,{isDragging:!1,isPanning:Boolean(n),isZooming:Boolean(n)}),this._suppressDoubleClickUntil=Date.now()+100,this.blockEvents(100),!0}_onKeyDown(t){if(!this.keyboard)return!1;const e=this.isFunctionKeyPressed(t),{zoomSpeed:i,moveSpeed:s,rotateSpeedX:n,rotateSpeedY:r}=!0===this.keyboard?{}:this.keyboard,{controllerState:o}=this;let a;const h={};switch(t.srcEvent.code){case"Minus":a=e?o.zoomOut(i).zoomOut(i):o.zoomOut(i),h.isZooming=!0;break;case"Equal":a=e?o.zoomIn(i).zoomIn(i):o.zoomIn(i),h.isZooming=!0;break;case"ArrowLeft":e?(a=o.rotateLeft(n),h.isRotating=!0):(a=o.moveLeft(s),h.isPanning=!0);break;case"ArrowRight":e?(a=o.rotateRight(n),h.isRotating=!0):(a=o.moveRight(s),h.isPanning=!0);break;case"ArrowUp":e?(a=o.rotateUp(r),h.isRotating=!0):(a=o.moveUp(s),h.isPanning=!0);break;case"ArrowDown":e?(a=o.rotateDown(r),h.isRotating=!0):(a=o.moveDown(s),h.isPanning=!0);break;default:return!1}return this.updateViewport(a,this._getTransitionProps(),h),!0}_getTransitionProps(t){const{transition:e}=this;return e&&e.transitionInterpolator?t?{...e,transitionInterpolator:new St({...t,...e.transitionInterpolator.opts,makeViewport:this.controllerState.makeViewport})}:e:Et}},Bt=Symbol("constraintAround"),Nt=class{constructor(t,e,i,s){this.makeViewport=i,this._viewportProps=this.applyConstraints(t,s),this._state=e}getViewportProps(){return this._viewportProps}getState(){return this._state}};function Ut(t,e,i){const s=t-e;return s&&Number.isFinite(s)?e+s*i/(i+Math.abs(s)):e}function Wt(t,e,i){const s=ct(at(i?.left??0),t),n=ct(at(i?.right??0),t),r=ct(at(i?.top??0),e);return{x:s,y:r,width:t-s-n,height:e-r-ct(at(i?.bottom??0),e)}}function Gt(t,e,i){let[s,n]=t.project(e);return s=Number.isFinite(s)?s:t.width/2,n=Number.isFinite(n)?n:t.height/2,{left:s-i.x,right:i.x+i.width-s,top:n-i.y,bottom:i.y+i.height-n}}var Zt=[[-1/0,-90],[1/0,90]];function Ht([e,i]){if(Math.abs(i)>90&&(i=90*Math.sign(i)),Number.isFinite(e)){const[s,n]=t.lngLatToWorld([e,i]);return[s,t.clamp(n,0,512)]}const[,s]=t.lngLatToWorld([0,i]);return[e,t.clamp(s,0,512)]}var qt=class extends Nt{constructor(e){const{width:i,height:s,latitude:n,longitude:r,zoom:o,bearing:a=0,pitch:h=0,altitude:c=1.5,position:d=[0,0,0],maxZoom:l=20,minZoom:p=0,maxPitch:u=60,minPitch:g=0,startPanLngLat:v,startZoomLngLat:m,startRotatePos:f,startRotateLngLat:w,startBearing:_,startPitch:y,startZoom:P,normalize:b=!0,rubberBand:C=!1}=e,{[Bt]:M}=e;t.assert(Number.isFinite(r)),t.assert(Number.isFinite(n)),t.assert(Number.isFinite(o));super({width:i,height:s,latitude:n,longitude:r,zoom:o,bearing:a,pitch:h,altitude:c,maxZoom:l,minZoom:p,maxPitch:u,minPitch:g,normalize:b,position:d,maxBounds:e.maxBounds||(b?Zt:null),maxBoundsPadding:e.maxBoundsPadding||null,rubberBand:C,[Bt]:M},{startPanLngLat:v,startZoomLngLat:m,startRotatePos:f,startRotateLngLat:w,startBearing:_,startPitch:y,startZoom:P},e.makeViewport,e.constraintContext),this.getAltitude=e.getAltitude}panStart({pos:t},e){return this._getUpdatedState({startPanLngLat:this._unproject(t)},e)}pan({pos:t,startPos:e},i){const s=this.getState().startPanLngLat||this._unproject(e);if(!s)return this;const n=this.makeViewport(this.getViewportProps()).panByPosition(s,t);return this._getUpdatedState(n,i)}panEnd(t){return this._getUpdatedState({startPanLngLat:null},t)}rotateStart({pos:t}){const e=this.getAltitude?.(t);return this._getUpdatedState({startRotatePos:t,startRotateLngLat:void 0!==e?this._unproject3D(t,e):void 0,startBearing:this.getViewportProps().bearing,startPitch:this.getViewportProps().pitch})}rotate({pos:t,deltaAngleX:e=0,deltaAngleY:i=0}){const{startRotatePos:s,startRotateLngLat:n,startBearing:r,startPitch:o}=this.getState();if(!s||void 0===r||void 0===o)return this;let a;if(a=t?this._getNewRotation(t,s,o,r):{bearing:r+e,pitch:o+i},n){const t=this.makeViewport({...this.getViewportProps(),...a}),e="panByPosition3D"in t?"panByPosition3D":"panByPosition";return this._getUpdatedState({...a,...t[e](n,s)})}return this._getUpdatedState(a)}rotateEnd(){return this._getUpdatedState({startRotatePos:null,startRotateLngLat:null,startBearing:null,startPitch:null})}zoomStart({pos:t},e){return this._getUpdatedState({startZoomLngLat:this._unproject(t),startZoom:this.getViewportProps().zoom},e)}zoom({pos:t,startPos:e,scale:i},s){let{startZoom:n,startZoomLngLat:r}=this.getState();return r||(n=this.getViewportProps().zoom,r=this._unproject(e)||this._unproject(t)),r?this._getUpdatedState({zoom:n+Math.log2(i),[Bt]:{position:r,screenPosition:t}},s):this}zoomEnd(t){return this._getUpdatedState({startZoomLngLat:null,startZoom:null},t)}zoomIn(t=2,e){return this._zoomFromCenter(t,e)}zoomOut(t=2,e){return this._zoomFromCenter(1/t,e)}moveLeft(t=100,e){return this._panFromCenter([t,0],e)}moveRight(t=100,e){return this._panFromCenter([-t,0],e)}moveUp(t=100,e){return this._panFromCenter([0,t],e)}moveDown(t=100,e){return this._panFromCenter([0,-t],e)}rotateLeft(t=15){return this._getUpdatedState({bearing:this.getViewportProps().bearing-t})}rotateRight(t=15){return this._getUpdatedState({bearing:this.getViewportProps().bearing+t})}rotateUp(t=10){return this._getUpdatedState({pitch:this.getViewportProps().pitch+t})}rotateDown(t=10){return this._getUpdatedState({pitch:this.getViewportProps().pitch-t})}shortestPathFrom(t){const e=t.getViewportProps(),i={...this.getViewportProps()},{bearing:s,longitude:n}=i;return Math.abs(s-e.bearing)>180&&(i.bearing=s<0?s+360:s-360),Math.abs(n-e.longitude)>180&&(i.longitude=n<0?n+360:n-360),i}applyConstraints(e,i){const s=e,n=s[Bt];delete s[Bt];const{maxPitch:r,minPitch:o,pitch:a,bearing:h,normalize:c,maxBounds:d,rubberBand:l}=e;c&&(h<-180||h>180)&&(e.bearing=t.mod(h+180,360)-180),e.pitch=t.clamp(a,o,r);const p=this._constrainZoom(e.zoom,e),u=l&&"elastic"===i?.mode;if(e.zoom="preserve"===i?.mode?e.zoom:u?Ut(e.zoom,p,1):p,n){const t=this.makeViewport(e);Object.assign(e,t.panByPosition(n.position,n.screenPosition))}if(c&&(e.longitude<-180||e.longitude>180)&&(e.longitude=t.mod(e.longitude+180,360)-180),d){const s=Wt(e.width,e.height,e.maxBoundsPadding),n=Gt(this.makeViewport({...e,bearing:0,pitch:0}),[e.longitude,e.latitude],s),r=Ht(d[0]),o=Ht(d[1]),a=2**e.zoom,h=[r[0]+n.left/a,r[1]+n.bottom/a],c=[o[0]-n.right/a,o[1]-n.top/a],l=Ht([e.longitude,e.latitude]),p=[t.clamp(l[0],h[0],c[0]),t.clamp(l[1],h[1],c[1])],g=l.slice();if(s.width>=0&&(g[0]="preserve"===i?.mode?l[0]:u?Ut(l[0],p[0],s.width/2/a):p[0]),s.height>=0&&(g[1]="preserve"===i?.mode?l[1]:u?Ut(l[1],p[1],s.height/2/a):p[1]),g[0]!==l[0]||g[1]!==l[1]){const[i,s]=t.worldToLngLat(g);g[0]!==l[0]&&(e.longitude=i),g[1]!==l[1]&&(e.latitude=s)}}return e}_constrainZoom(e,i){i||(i=this.getViewportProps());const{maxZoom:s,maxBounds:n}=i,r=null!==n&&i.width>0&&i.height>0;let{minZoom:o}=i;if(r){const t=Wt(i.width,i.height,i.maxBoundsPadding),e=Ht(n[0]),r=Ht(n[1]),a=r[0]-e[0],h=r[1]-e[1];t.width>0&&Number.isFinite(a)&&a>0&&(o=Math.max(o,Math.log2(t.width/a))),t.height>0&&Number.isFinite(h)&&h>0&&(o=Math.max(o,Math.log2(t.height/h))),o>s&&(o=s)}return t.clamp(e,o,s)}_zoomFromCenter(t,e){const{width:i,height:s}=this.getViewportProps();return this.zoom({pos:[i/2,s/2],scale:t},e)}_panFromCenter(t,e){const{width:i,height:s}=this.getViewportProps();return this.pan({startPos:[i/2,s/2],pos:[i/2+t[0],s/2+t[1]]},e)}_getUpdatedState(t,e){return new this.constructor({makeViewport:this.makeViewport,...this.getViewportProps(),...this.getState(),...t,constraintContext:e})}_unproject(t){const e=this.makeViewport(this.getViewportProps());return t&&e.unproject(t)}_unproject3D(t,e){return this.makeViewport(this.getViewportProps()).unproject(t,{targetZ:e})}_getNewRotation(e,i,s,n){const r=e[0]-i[0],o=e[1]-i[1],a=e[1],h=i[1],{width:c,height:d}=this.getViewportProps(),l=r/c;let p=0;o>0?Math.abs(d-h)>5&&(p=o/(h-d)*1.2):o<0&&h>5&&(p=1-a/h),p=t.clamp(p,-1,1);const{minPitch:u,maxPitch:g}=this.getViewportProps();let v=s;return p>0?v=s+p*(g-s):p<0&&(v=s-p*(u-s)),{pitch:v,bearing:n+180*l}}},$t=class extends jt{constructor(){super(...arguments),this.ControllerState=qt,this.transition={transitionDuration:300,transitionInterpolator:new St({transitionProps:{compare:["longitude","latitude","zoom","bearing","pitch","position"],required:["longitude","latitude","zoom"]}})},this.dragMode="pan",this.rotationPivot="center",this._getAltitude=t=>{if("2d"===this.rotationPivot)return 0;if("3d"===this.rotationPivot&&this.pickPosition){const{x:e,y:i}=this.props,s=this.pickPosition(e+t[0],i+t[1]);if(s&&s.coordinate&&s.coordinate.length>=3)return s.coordinate[2]}}}setProps(t){"rotationPivot"in t&&(this.rotationPivot=t.rotationPivot||"center"),t.getAltitude=this._getAltitude,t.position=t.position||[0,0,0],t.maxBounds=t.maxBounds||(!1===t.normalize?null:Zt),super.setProps(t)}updateViewport(t,e=null,i={}){const s=t.getState();i.isDragging&&s.startRotateLngLat?i={...i,rotationPivotPosition:s.startRotateLngLat}:!1===i.isDragging&&(i={...i,rotationPivotPosition:void 0}),super.updateViewport(t,e,i)}},Xt=class extends vt{constructor(t={}){super(t)}getViewportType(){return t.WebMercatorViewport}get ControllerType(){return $t}};Xt.displayName="MapView";var Yt=new G;var Kt=class{constructor(t){this._resolvedEffects=[],this._defaultEffects=[],this.effects=[],this._context=t,this._needsRedraw="Initial render",this._setEffects([])}addDefaultEffect(t){const e=this._defaultEffects;if(!e.find(e=>e.id===t.id)){const i=e.findIndex(e=>{return i=t,(e.order??1/0)-(i.order??1/0)>0;var i});i<0?e.push(t):e.splice(i,0,t),t.setup(this._context),this._setEffects(this.effects)}}setProps(e){"effects"in e&&(t.deepEqual(e.effects,this.effects,1)||this._setEffects(e.effects))}needsRedraw(t={clearRedrawFlags:!1}){const e=this._needsRedraw;return t.clearRedrawFlags&&(this._needsRedraw=!1),e}getEffects(){return this._resolvedEffects}_setEffects(t){const e={};for(const s of this.effects)e[s.id]=s;const i=[];for(const s of t){const t=e[s.id];let n=s;t&&t!==s?t.setProps?(t.setProps(s.props),n=t):t.cleanup(this._context):t||s.setup(this._context),i.push(n),delete e[s.id]}for(const s in e)e[s].cleanup(this._context);this.effects=i,this._resolvedEffects=i.concat(this._defaultEffects),t.some(t=>t instanceof G)||this._resolvedEffects.push(Yt),this._needsRedraw="effects changed"}finalize(){for(const t of this._resolvedEffects)t.cleanup(this._context);this.effects.length=0,this._resolvedEffects.length=0,this._defaultEffects.length=0}},Jt=class extends F{shouldDrawLayer(t){const{operation:e}=t.props;return e.includes("draw")||e.includes("terrain")}render(t){return this._render(t)}},Qt=class{constructor(t,e={}){this.device=t,this.stats=e.stats,this.layerFilter=null,this.drawPickingColors=!1,this.drawLayersPass=new Jt(t),this.pickLayersPass=new J(t),this.renderCount=0,this._needsRedraw="Initial render",this.renderBuffers=[],this.lastPostProcessEffect=null}setProps(t){this.layerFilter!==t.layerFilter&&(this.layerFilter=t.layerFilter,this._needsRedraw="layerFilter changed"),this.drawPickingColors!==t.drawPickingColors&&(this.drawPickingColors=t.drawPickingColors,this._needsRedraw="drawPickingColors changed")}renderLayers(e){const i=this.drawPickingColors?this.pickLayersPass:this.drawLayersPass,s={layerFilter:this.layerFilter,isPicking:this.drawPickingColors,...e};if(!e.viewports.length){const t=i.render(s),e="stats"in t?t.stats:t;return void this._updateStats(e)}s.effects&&this._preRender(s.effects,s);const n=this.lastPostProcessEffect?this.renderBuffers[0]:s.target;this.lastPostProcessEffect&&(s.clearColor=[0,0,0,0],s.clearCanvas=!0);const r=i.render({...s,target:n}),o="stats"in r?r.stats:r;s.effects&&(this.lastPostProcessEffect&&(s.clearCanvas=void 0===e.clearCanvas||e.clearCanvas),this._postRender(s.effects,s)),this.renderCount++,t.debug("deckRenderer.renderLayers",this,o,e),this._updateStats(o)}needsRedraw(t={clearRedrawFlags:!1}){const e=this._needsRedraw;return t.clearRedrawFlags&&(this._needsRedraw=!1),e}finalize(){const{renderBuffers:t}=this;for(const e of t)e.delete();t.length=0}_updateStats(t){if(!this.stats)return;let e=0;for(const{visibleCount:i}of t)e+=i;this.stats.get("Layers rendered").addCount(e)}_preRender(t,e){this.lastPostProcessEffect=null,e.preRenderStats=e.preRenderStats||{};for(const i of t)e.preRenderStats[i.id]=i.preRender(e),i.postRender&&(this.lastPostProcessEffect=i.id);this.lastPostProcessEffect&&this._resizeRenderBuffers(e.canvasContext)}_resizeRenderBuffers(t=this.device.canvasContext){const{renderBuffers:e}=this,i=t.getDrawingBufferSize(),[s,n]=i;0===e.length&&[0,1].map(t=>{const i=this.device.createTexture({sampler:{minFilter:"linear",magFilter:"linear"},width:s,height:n});e.push(this.device.createFramebuffer({id:`deck-renderbuffer-${t}`,colorAttachments:[i]}))});for(const r of e)r.resize(i)}_postRender(t,e){const{renderBuffers:i}=this,s=e.target??e.canvasContext?.getCurrentFramebuffer()??e.target,n={...e,inputBuffer:i[0],swapBuffer:i[1]};for(const r of t)if(r.postRender){n.target=r.id===this.lastPostProcessEffect?s:void 0;const t=r.postRender(n);n.inputBuffer=t,n.swapBuffer=t===i[0]?i[1]:i[0]}}},te={pickedColor:null,pickedObjectIndex:-1};function ee({pickedColors:e,decodePickingColor:i,deviceX:s,deviceY:n,deviceRadius:r,deviceRect:o}){const{x:a,y:h,width:c,height:d}=o;let l=r*r,p=-1,u=0;for(let t=0;t<d;t++){const i=t+h-n,r=i*i;if(r>l)u+=4*c;else for(let t=0;t<c;t++){if(e[u+3]-1>=0){const e=t+a-s,i=e*e+r;i<=l&&(l=i,p=u)}u+=4}}if(p>=0){const s=e.slice(p,p+4),n=i(s);if(n){const t=Math.floor(p/4/c),e=p/4-t*c;return{...n,pickedColor:s,pickedX:a+e,pickedY:h+t}}t.defaultLogger.error("Picked non-existent layer. Is picking buffer corrupt?")()}return te}function ie({pickedColors:e,decodePickingColor:i}){const s=new Map;if(e)for(let n=0;n<e.length;n+=4)if(e[n+3]-1>=0){const r=e.slice(n,n+4),o=r.join(",");if(!s.has(o)){const e=i(r);e?s.set(o,{...e,color:r}):t.defaultLogger.error("Picked non-existent layer. Is picking buffer corrupt?")()}}return Array.from(s.values())}function se({pickInfo:t,viewports:e,pixelRatio:i,x:s,y:n,z:r}){let o,a=e[0];if(e.length>1&&(a=function(t,e){for(let i=t.length-1;i>=0;i--){const s=t[i];if(s.containsPixel(e))return s}return t[0]}(t?.pickedViewports||e,{x:s,y:n})),a){const t=[s-a.x,n-a.y];void 0!==r&&(t[2]=r),o=a.unproject(t)}return{color:null,layer:null,viewport:a,index:-1,picked:!1,x:s,y:n,pixel:[s,n],coordinate:o,devicePixel:t&&"pickedX"in t?[t.pickedX,t.pickedY]:void 0,pixelRatio:i}}function ne(t){const{pickInfo:e,lastPickedInfo:i,mode:s,layers:n}=t,{pickedColor:r,pickedLayer:o,pickedObjectIndex:a}=e,h=o?[o]:[];if("hover"===s){const t=i.index,e=i.layerId,s=o?o.props.id:null;if(s!==e||a!==t){if(s!==e){const t=n.find(t=>t.props.id===e);t&&h.unshift(t)}i.layerId=s,i.index=a,i.info=null}}const c=se(t),d=new Map;return d.set(null,c),h.forEach(t=>{let e={...c};t===o&&(e.color=r,e.index=a,e.picked=!0),e=re({layer:t,info:e,mode:s});const n=e.layer;t===o&&"hover"===s&&(i.info=e),d.set(n.id,e),"hover"===s&&n.updateAutoHighlight(e)}),d}function re({layer:t,info:e,mode:i}){for(;t&&e;){const s=e.layer||null;e.sourceLayer=s,e.layer=t,e=t.getPickingInfo({info:e,mode:i,sourceLayer:s}),t=t.parent}return e}var oe=class{constructor(t,e={}){this._pickable=!0,this.device=t,this.stats=e.stats,this.pickLayersPass=new J(t),this.lastPickedInfo={index:-1,layerId:null,info:null}}setProps(t){"layerFilter"in t&&(this.layerFilter=t.layerFilter),"_pickable"in t&&(this._pickable=t._pickable)}finalize(){this.pickingFBO&&this.pickingFBO.destroy(),this.depthFBO&&this.depthFBO.destroy()}pickObjectAsync(t){return this._pickClosestObjectAsync(t)}pickObjectsAsync(t){return this._pickVisibleObjectsAsync(t)}pickObject(t){return this._pickClosestObject(t)}pickObjects(t){return this._pickVisibleObjects(t)}getLastPickedObject({x:t,y:e,layers:i,viewports:s},n=this.lastPickedInfo.info){const r=n&&n.layer&&n.layer.id,o=n&&n.viewport&&n.viewport.id,a=r?i.find(t=>t.id===r):null,h=o&&s.find(t=>t.id===o)||s[0],c={x:t,y:e,viewport:h,coordinate:h&&h.unproject([t-h.x,e-h.y]),layer:a};return{...n,...c}}_resizeBuffer(e=this.device.getDefaultCanvasContext()){if(!this.pickingFBO){const e=this.device.createTexture({format:"rgba8unorm",width:1,height:1,usage:t.Texture.RENDER_ATTACHMENT|t.Texture.COPY_SRC});if(this.pickingFBO=this.device.createFramebuffer({colorAttachments:[e],depthStencilAttachment:"depth16unorm"}),this.device.isTextureFormatRenderable("rgba32float")){const e=this.device.createTexture({format:"rgba32float",width:1,height:1,usage:t.Texture.RENDER_ATTACHMENT|t.Texture.COPY_SRC}),i=this.device.createFramebuffer({colorAttachments:[e],depthStencilAttachment:"depth16unorm"});this.depthFBO=i}}const[i,s]=e.getDrawingBufferSize();this.pickingFBO?.resize({width:i,height:s}),this.depthFBO?.resize({width:i,height:s})}_getPickable(t){if(!1===this._pickable)return null;const e=t.filter(t=>this.pickLayersPass.shouldDrawLayer(t)&&!t.isComposite);return e.length?e:null}async _pickClosestObjectAsync({layers:t,views:e,viewports:i,x:s,y:n,radius:r=0,depth:o=1,mode:a="query",unproject3D:h,canvasContext:c=this.device.getDefaultCanvasContext(),onViewportActive:d,effects:l}){const p=c.cssToDeviceRatio(),u=this._getPickable(t);if(!u||0===i.length)return{result:[],emptyInfo:se({viewports:i,x:s,y:n,pixelRatio:p})};this._resizeBuffer(c);const g=c.cssToDevicePixels([s,n],!0),v=[g.x+Math.floor(g.width/2),g.y+Math.floor(g.height/2)],m=Math.round(r*p),{width:f,height:w}=this.pickingFBO,_=this._getPickingRect({deviceX:v[0],deviceY:v[1],deviceRadius:m,deviceWidth:f,deviceHeight:w}),y={x:s-r,y:n-r,width:2*r+1,height:2*r+1};let P;const b=[],C=new Set;for(let M=0;M<o;M++){let t,r;if(_){t=ee({...await this._drawAndSampleAsync({layers:u,views:e,viewports:i,onViewportActive:d,deviceRect:_,cullRect:y,effects:l,pass:`picking:${a}`,canvasContext:c}),deviceX:v[0],deviceY:v[1],deviceRadius:m,deviceRect:_})}else t={pickedColor:null,pickedObjectIndex:-1};const g=this._getDepthLayers(t,u,h);if(g.length>0){const{pickedColors:s}=await this._drawAndSampleAsync({layers:g,views:e,viewports:i,onViewportActive:d,deviceRect:{x:t.pickedX??v[0],y:t.pickedY??v[1],width:1,height:1},cullRect:y,effects:l,pass:`picking:${a}:z`,canvasContext:c},!0);s[3]&&(r=s[0])}t.pickedLayer&&M+1<o&&(C.add(t.pickedLayer),t.pickedLayer.disablePickingIndex(t.pickedObjectIndex)),P=ne({pickInfo:t,lastPickedInfo:this.lastPickedInfo,mode:a,layers:u,viewports:i,x:s,y:n,z:r,pixelRatio:p});for(const e of P.values())e.layer&&b.push(e);if(!t.pickedColor)break}for(const M of C)M.restorePickingColors();return{result:b,emptyInfo:P.get(null)}}_pickClosestObject({layers:t,views:e,viewports:i,x:s,y:n,radius:r=0,depth:o=1,mode:a="query",unproject3D:h,canvasContext:c=this.device.getDefaultCanvasContext(),onViewportActive:d,effects:l}){const p=c.cssToDeviceRatio(),u=this._getPickable(t);if(!u||0===i.length)return{result:[],emptyInfo:se({viewports:i,x:s,y:n,pixelRatio:p})};this._resizeBuffer(c);const g=c.cssToDevicePixels([s,n],!0),v=[g.x+Math.floor(g.width/2),g.y+Math.floor(g.height/2)],m=Math.round(r*p),{width:f,height:w}=this.pickingFBO,_=this._getPickingRect({deviceX:v[0],deviceY:v[1],deviceRadius:m,deviceWidth:f,deviceHeight:w}),y={x:s-r,y:n-r,width:2*r+1,height:2*r+1};let P;const b=[],C=new Set;for(let M=0;M<o;M++){let t,r;if(_){t=ee({...this._drawAndSample({layers:u,views:e,viewports:i,onViewportActive:d,deviceRect:_,cullRect:y,effects:l,pass:`picking:${a}`,canvasContext:c}),deviceX:v[0],deviceY:v[1],deviceRadius:m,deviceRect:_})}else t={pickedColor:null,pickedObjectIndex:-1};const g=this._getDepthLayers(t,u,h);if(g.length>0){const{pickedColors:s}=this._drawAndSample({layers:g,views:e,viewports:i,onViewportActive:d,deviceRect:{x:t.pickedX??v[0],y:t.pickedY??v[1],width:1,height:1},cullRect:y,effects:l,pass:`picking:${a}:z`,canvasContext:c},!0);s[3]&&(r=s[0])}t.pickedLayer&&M+1<o&&(C.add(t.pickedLayer),t.pickedLayer.disablePickingIndex(t.pickedObjectIndex)),P=ne({pickInfo:t,lastPickedInfo:this.lastPickedInfo,mode:a,layers:u,viewports:i,x:s,y:n,z:r,pixelRatio:p});for(const e of P.values())e.layer&&b.push(e);if(!t.pickedColor)break}for(const M of C)M.restorePickingColors();return{result:b,emptyInfo:P.get(null)}}async _pickVisibleObjectsAsync({layers:t,views:e,viewports:i,x:s,y:n,width:r=1,height:o=1,mode:a="query",maxObjects:h=null,canvasContext:c=this.device.getDefaultCanvasContext(),onViewportActive:d,effects:l}){const p=this._getPickable(t);if(!p||0===i.length)return[];this._resizeBuffer(c);const u=c.cssToDeviceRatio(),g=c.cssToDevicePixels([s,n],!0),v=g.x,m=g.y+g.height,f=c.cssToDevicePixels([s+r,n+o],!0),w=f.x+f.width,_=f.y,y={x:v,y:_,width:w-v,height:m-_},P=ie(await this._drawAndSampleAsync({layers:p,views:e,viewports:i,onViewportActive:d,deviceRect:y,cullRect:{x:s,y:n,width:r,height:o},effects:l,pass:`picking:${a}`,canvasContext:c})),b=new Map,C=[],M=Number.isFinite(h);for(let k=0;k<P.length&&!(M&&C.length>=h);k++){const t=P[k];let e={color:t.pickedColor,layer:null,index:t.pickedObjectIndex,picked:!0,x:s,y:n,pixelRatio:u};e=re({layer:t.pickedLayer,info:e,mode:a});const i=e.layer.id;b.has(i)||b.set(i,new Set);const r=b.get(i),o=e.object??e.index;r.has(o)||(r.add(o),C.push(e))}return C}_pickVisibleObjects({layers:t,views:e,viewports:i,x:s,y:n,width:r=1,height:o=1,mode:a="query",maxObjects:h=null,canvasContext:c=this.device.getDefaultCanvasContext(),onViewportActive:d,effects:l}){const p=this._getPickable(t);if(!p||0===i.length)return[];this._resizeBuffer(c);const u=c.cssToDeviceRatio(),g=c.cssToDevicePixels([s,n],!0),v=g.x,m=g.y+g.height,f=c.cssToDevicePixels([s+r,n+o],!0),w=f.x+f.width,_=f.y,y={x:v,y:_,width:w-v,height:m-_},P=ie(this._drawAndSample({layers:p,views:e,viewports:i,onViewportActive:d,deviceRect:y,cullRect:{x:s,y:n,width:r,height:o},effects:l,pass:`picking:${a}`,canvasContext:c})),b=new Map,C=[],M=Number.isFinite(h);for(let k=0;k<P.length&&!(M&&C.length>=h);k++){const t=P[k];let e={color:t.pickedColor,layer:null,index:t.pickedObjectIndex,picked:!0,x:s,y:n,pixelRatio:u};e=re({layer:t.pickedLayer,info:e,mode:a});const i=e.layer.id;b.has(i)||b.set(i,new Set);const r=b.get(i),o=e.object??e.index;r.has(o)||(r.add(o),C.push(e))}return C}async _drawAndSampleAsync({layers:e,views:i,viewports:s,onViewportActive:n,deviceRect:r,cullRect:o,effects:a,pass:h,canvasContext:c},d=!1){const l=d?this.depthFBO:this.pickingFBO,p={layers:e,layerFilter:this.layerFilter,views:i,viewports:s,onViewportActive:n,pickingFBO:l,deviceRect:r,cullRect:o,effects:a,pass:h,canvasContext:c,pickZ:d,preRenderStats:{},isPicking:!0};for(const t of a)t.useInPicking&&(p.preRenderStats[t.id]=t.preRender(p));const{decodePickingColor:u,stats:g}=this.pickLayersPass.render(p);this._updateStats(g);const{x:v,y:m,width:f,height:w}=r,_=l.colorAttachments[0]?.texture;if(!_)throw new Error("Picking framebuffer color attachment is missing");const y=await this._readTextureDataAsync(_,{x:v,y:m,width:f,height:w},d?Float32Array:Uint8Array);if(!d){let e=!1;for(let t=3;t<y.length;t+=4)if(0!==y[t]){e=!0;break}!e&&y.length>0&&t.defaultLogger.warn("Async pick readback returned only zero alpha values",{deviceRect:r,bytes:Array.from(y.subarray(0,Math.min(y.length,16)))})()}return{pickedColors:y,decodePickingColor:u}}async _readTextureDataAsync(t,i,s){const{width:n,height:r}=i,o=t.computeMemoryLayout(i),a=this.device.createBuffer({byteLength:o.byteLength,usage:e.Buffer.COPY_DST|e.Buffer.MAP_READ});try{t.readBuffer(i,a);const e=await a.readAsync(0,o.byteLength),h=s.BYTES_PER_ELEMENT;if(o.bytesPerRow%h!==0)throw new Error(`Texture readback row stride ${o.bytesPerRow} is not aligned to ${h}-byte elements.`);const c=new s(e.buffer,e.byteOffset,o.byteLength/h),d=4*n,l=o.bytesPerRow/h;if(l<d)throw new Error(`Texture readback row stride ${l} is smaller than packed row length ${d}.`);const p=new s(n*r*4);for(let t=0;t<r;t++){const e=t*l;p.set(c.subarray(e,e+d),t*d)}return p}finally{a.destroy()}}_drawAndSample({layers:t,views:e,viewports:i,onViewportActive:s,deviceRect:n,cullRect:r,effects:o,pass:a,canvasContext:h},c=!1){const d=c?this.depthFBO:this.pickingFBO,l={layers:t,layerFilter:this.layerFilter,views:e,viewports:i,onViewportActive:s,pickingFBO:d,deviceRect:n,cullRect:r,effects:o,pass:a,canvasContext:h,pickZ:c,preRenderStats:{},isPicking:!0};for(const _ of o)_.useInPicking&&(l.preRenderStats[_.id]=_.preRender(l));const{decodePickingColor:p,stats:u}=this.pickLayersPass.render(l);this._updateStats(u);const{x:g,y:v,width:m,height:f}=n,w=new(c?Float32Array:Uint8Array)(m*f*4);return this.device.readPixelsToArrayWebGL(d,{sourceX:g,sourceY:v,sourceWidth:m,sourceHeight:f,target:w}),{pickedColors:w,decodePickingColor:p}}_updateStats(t){if(!this.stats)return;let e=0;for(const{visibleCount:i}of t)e+=i;this.stats.get("Layers picked").addCount(e)}_getDepthLayers(t,e,i){if(!i||!this.depthFBO)return[];const{pickedLayer:s}=t;return s&&!("drape"===s?.state?.terrainDrawMode)?[s]:e.filter(t=>t.props.operation.includes("terrain"))}_getPickingRect({deviceX:t,deviceY:e,deviceRadius:i,deviceWidth:s,deviceHeight:n}){const r=Math.max(0,t-i),o=Math.max(0,e-i),a=Math.min(s,t+i+1)-r,h=Math.min(n,e+i+1)-o;return a<=0||h<=0?null:{x:r,y:o,width:a,height:h}}},ae={"top-left":{top:0,left:0},"top-right":{top:0,right:0},"bottom-left":{bottom:0,left:0},"bottom-right":{bottom:0,right:0},fill:{top:0,left:0,bottom:0,right:0}},he="top-left",ce="root",de=class{constructor({deck:t,parentElement:e}){this.defaultWidgets=[],this.widgets=[],this.resolvedWidgets=[],this.containers={},this.lastViewports={},this.deck=t,e?.classList.add("deck-widget-container"),this.parentElement=e}getWidgets(){return this.resolvedWidgets}setProps(e){if(e.widgets&&!t.deepEqual(e.widgets,this.widgets,1)){const t=e.widgets.filter(Boolean);this._setWidgets(t)}}finalize(){for(const t of this.getWidgets())this._removeWidget(t);this.defaultWidgets.length=0,this.resolvedWidgets.length=0;for(const t in this.containers)this.containers[t].remove()}addDefault(t){this.defaultWidgets.find(e=>e.id===t.id)||(this._addWidget(t),this.defaultWidgets.push(t),this._setWidgets(this.widgets))}onRedraw({viewports:t,layers:e}){const i=t.reduce((t,e)=>(t[e.id]=e,t),{});for(const s of this.getWidgets()){const{viewId:n}=s;if(n){const t=i[n];t&&(s.onViewportChange&&s.onViewportChange(t),s.onRedraw?.({viewports:[t],layers:e}))}else{if(s.onViewportChange)for(const e of t)s.onViewportChange(e);s.onRedraw?.({viewports:t,layers:e})}}this.lastViewports=i,this._updateContainers()}onHover(t,e){for(const i of this.getWidgets()){const{viewId:s}=i;s&&s!==t.viewport?.id||i.onHover?.(t,e)}}getCanvasBounds(t){const e=(this.deck?.getCanvas?.())?.getBoundingClientRect(),i=this.parentElement?.getBoundingClientRect(),s=this.deck?.getCanvasContext?.(t?.id);if(s&&i){s.updatePosition();const[t,e]=s.getPosition(),[n,r]=s.getCSSSize();return{x:t-i.left,y:e-i.top,width:n,height:r}}return{x:e&&i?e.left-i.left:0,y:e&&i?e.top-i.top:0,width:e?.width||this.deck?.width||0,height:e?.height||this.deck?.height||0}}onEvent(e,i){const s=t.EVENT_HANDLERS[i.type];if(s)for(const t of this.getWidgets()){const{viewId:n}=t;n&&n!==e.viewport?.id||t[s]?.(e,i)}}_setWidgets(t){const e={};for(const i of this.resolvedWidgets)e[i.id]=i;this.resolvedWidgets.length=0;for(const i of this.defaultWidgets)e[i.id]=null,this.resolvedWidgets.push(i);for(let i of t){const t=e[i.id];t?t.viewId!==i.viewId||t.placement!==i.placement?(this._removeWidget(t),this._addWidget(i)):i!==t&&(t.setProps(i.props),i=t):this._addWidget(i),e[i.id]=null,this.resolvedWidgets.push(i)}for(const i in e){const t=e[i];t&&this._removeWidget(t)}this.widgets=t}_addWidget(t){const{viewId:e=null,placement:i=he}=t,s=t.props._container??e;t.widgetManager=this,t.deck=this.deck,t.rootElement=t._onAdd({deck:this.deck,viewId:e}),t.rootElement&&this._getContainer(s,i).append(t.rootElement),t.updateHTML()}_removeWidget(t){t.onRemove?.(),t.rootElement&&t.rootElement.remove(),t.rootElement=void 0,t.deck=void 0,t.widgetManager=void 0}_getContainer(t,e){if(t&&"string"!=typeof t)return t;const i=t||ce;let s=this.containers[i];s||(s=document.createElement("div"),s.style.pointerEvents="none",s.style.position="absolute",s.style.overflow="hidden",this.parentElement?.append(s),this.containers[i]=s);let n=s.querySelector(`.${e}`);return n||(n=globalThis.document.createElement("div"),n.className=e,n.style.position="absolute",n.style.zIndex="2",Object.assign(n.style,ae[e]),s.append(n)),n}_updateContainers(){for(const t in this.containers){const e=this.lastViewports[t]||null,i=t===ce||e,s=this.containers[t];if(i){const t=this._getContainerBounds(e);s.style.display="block",s.style.left=`${t.x}px`,s.style.top=`${t.y}px`,s.style.width=`${t.width}px`,s.style.height=`${t.height}px`}else s.style.display="none"}}_getContainerBounds(t){if(!t)return{x:0,y:0,width:this.parentElement?.clientWidth||this.deck.width,height:this.parentElement?.clientHeight||this.deck.height};const e=this.getCanvasBounds(t);return{x:e.x+t.x,y:e.y+t.y,width:t.width,height:t.height}}};function le(t,e){e&&Object.entries(e).map(([e,i])=>{e.startsWith("--")?t.style.setProperty(e,i):t.style[e]=i})}var pe=class{constructor(t){this.viewId=null,this.props={...this.constructor.defaultProps,...t},this.id=this.props.id}setProps(e){const i=this.props,s=this.rootElement;var n,r;s&&i.className!==e.className&&(i.className&&s.classList.remove(i.className),e.className&&s.classList.add(e.className)),s&&!t.deepEqual(i.style,e.style,1)&&(n=s,(r=i.style)&&Object.keys(r).map(t=>{t.startsWith("--")?n.style.removeProperty(t):n.style[t]=""}),le(s,e.style)),Object.assign(this.props,e),this.updateHTML()}updateHTML(){this.rootElement&&this.onRenderHTML(this.rootElement)}get viewIds(){return this.viewId?[this.viewId]:this.deck?.getViews().map(t=>t.id)??[]}getViewState(t){return this.deck?.viewManager?.getViewState(t)||{}}setViewState(t,e){this.deck?._onViewStateChange({viewId:t,viewState:e,interactionState:{}})}onCreateRootElement(){const t=["deck-widget",this.className,this.props.className],e=document.createElement("div");return t.filter(t=>"string"==typeof t&&t.length>0).forEach(t=>e.classList.add(t)),le(e,this.props.style),e}_onAdd(t){return this.onAdd(t)??this.onCreateRootElement()}onAdd(t){}onRemove(){}onViewportChange(t){}onRedraw(t){}onHover(t,e){}onClick(t,e){}onDrag(t,e){}onDragStart(t,e){}onDragEnd(t,e){}};pe.defaultProps={id:"widget",style:{},_container:null,className:""};var ue={zIndex:"1",position:"absolute",pointerEvents:"none",color:"#a0a7b4",backgroundColor:"#29323c",padding:"10px",top:"0",left:"0",display:"none"},ge=class extends pe{constructor(t={}){super(t),this.id="default-tooltip",this.placement="fill",this.className="deck-tooltip",this.isVisible=!1,this.setProps(t)}onCreateRootElement(){const t=document.createElement("div");return t.className=this.className,Object.assign(t.style,ue),t}onRenderHTML(t){}onViewportChange(t){this.isVisible&&t.id===this.lastViewport?.id&&!t.equals(this.lastViewport)&&this.setTooltip(null),this.lastViewport=t}onHover(t){const{deck:e}=this,i=e&&e.props.getTooltip;if(!i)return;const s=i(t),n=this.widgetManager?.getCanvasBounds(t.viewport),r=t.x+(n?.x||0),o=t.y+(n?.y||0);this.setTooltip(s,r,o)}setTooltip(t,e,i){const s=this.rootElement;if(s){if("string"==typeof t)s.innerText=t;else{if(!t)return this.isVisible=!1,void(s.style.display="none");t.text&&(s.innerText=t.text),t.html&&(s.innerHTML=t.html),t.className&&(s.className=t.className)}this.isVisible=!0,s.style.display="block",s.style.transform=`translate(${e}px, ${i}px)`,t&&"object"==typeof t&&"style"in t&&Object.assign(s.style,t.style)}}};ge.defaultProps={...pe.defaultProps};var ve=class{constructor(t){this.targets={},this.order=[],this.eventManagers={},this._eventRootToCanvasId=new WeakMap,this._createEventManager=t.createEventManager,this._getEventRoot=t.getEventRoot}finalize(){for(const t of Object.values(this.targets))t.eventManager.destroy(),t.presentationContext.destroy();this.targets={},this.order=[],this.eventManagers={},this._eventRootToCanvasId=new WeakMap}syncCanvasEntries(t){const e=this._normalizeCanvasList(t.canvases),i={},s=[],n=new Map;for(const{canvas:o}of e){const t=this._getEventRoot(o);n.set(t,(n.get(t)||0)+1)}for(const{id:o,canvas:a}of e){const e=this._getEventRoot(a),r=1===n.get(e)?e:a;let h=this.targets[o];if(!h||h.device!==t.device||h.canvas!==a||h.eventRoot!==r){h?.eventManager.destroy(),h?.presentationContext.destroy();const e=t.device.createPresentationContext({id:o,canvas:a,useDevicePixels:t.useDevicePixels,autoResize:!0});h={id:o,device:t.device,canvas:a,eventRoot:r,presentationContext:e,eventManager:this._createEventManager(r)}}this._eventRootToCanvasId.set(r,o),this._eventRootToCanvasId.set(a,o),i[o]=h,s.push(o)}for(const[o,a]of Object.entries(this.targets))i[o]||(a.eventManager.destroy(),a.presentationContext.destroy());this.targets=i,this.order=s;const r=Object.fromEntries(Object.entries(i).map(([t,e])=>[t,e.eventManager]));this._haveSameEventManagers(r)||(this.eventManagers=r)}getCanvasIdFromEvent(t){return t?this._eventRootToCanvasId.get(t):void 0}getTarget(t){return this.targets[t||this.order[0]||"default-canvas"]||null}_normalizeCanvasList(e=[]){const i=new Set;return e.map((e,s)=>{let n,r;return"string"==typeof e?(n=document.getElementById(e),t.assert(n,`Canvas with id ${e} not found`),r=e):(n=e,r=n.id||`deckgl-canvas-${s}`),t.assert(!i.has(r),`Duplicate canvas id ${r}`),i.add(r),{id:r,canvas:n}})}_haveSameEventManagers(t){const e=Object.keys(t),i=Object.keys(this.eventManagers);return e.length===i.length&&e.every(e=>t[e]===this.eventManagers[e])}},me={WEBGL_depth_texture:{UNSIGNED_INT_24_8_WEBGL:34042},OES_element_index_uint:{},OES_texture_float:{},OES_texture_half_float:{HALF_FLOAT_OES:5131},EXT_color_buffer_float:{},OES_standard_derivatives:{FRAGMENT_SHADER_DERIVATIVE_HINT_OES:35723},EXT_frag_depth:{},EXT_blend_minmax:{MIN_EXT:32775,MAX_EXT:32776},EXT_shader_texture_lod:{}},fe=t=>({drawBuffersWEBGL:e=>t.drawBuffers(e),COLOR_ATTACHMENT0_WEBGL:36064,COLOR_ATTACHMENT1_WEBGL:36065,COLOR_ATTACHMENT2_WEBGL:36066,COLOR_ATTACHMENT3_WEBGL:36067}),we=t=>({VERTEX_ARRAY_BINDING_OES:34229,createVertexArrayOES:()=>t.createVertexArray(),deleteVertexArrayOES:e=>t.deleteVertexArray(e),isVertexArrayOES:e=>t.isVertexArray(e),bindVertexArrayOES:e=>t.bindVertexArray(e)}),_e=t=>({VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:35070,drawArraysInstancedANGLE:(...e)=>t.drawArraysInstanced(...e),drawElementsInstancedANGLE:(...e)=>t.drawElementsInstanced(...e),vertexAttribDivisorANGLE:(...e)=>t.vertexAttribDivisor(...e)});function ye(t=!0){const e=HTMLCanvasElement.prototype;if(!t&&e.originalGetContext)return e.getContext=e.originalGetContext,void(e.originalGetContext=void 0);e.originalGetContext=e.getContext,e.getContext=function(t,e){if("webgl"===t||"experimental-webgl"===t){const t=this.originalGetContext("webgl2",e);return t instanceof HTMLElement&&function(t){t.getExtension("EXT_color_buffer_float");const e={...me,WEBGL_disjoint_timer_query:t.getExtension("EXT_disjoint_timer_query_webgl2"),WEBGL_draw_buffers:fe(t),OES_vertex_array_object:we(t),ANGLE_instanced_arrays:_e(t)},i=t.getExtension.bind(t);t.getExtension=function(t){const s=i(t);return s||(t in e?e[t]:null)};const s=t.getSupportedExtensions;t.getSupportedExtensions=function(){return(s.apply(t)||[])?.concat(Object.keys(e))}}(t),t}return this.originalGetContext(t,e)}}var Pe=new class extends h{type="webgl";enforceWebGL2(t){ye(t)}isSupported(){return"undefined"!=typeof WebGL2RenderingContext}isDeviceHandle(t){return"undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||("undefined"!=typeof WebGLRenderingContext&&t instanceof WebGLRenderingContext&&e.log.warn("WebGL1 is not supported",t)(),!1)}async attach(t,e={}){const{WebGLDevice:i}=await Promise.resolve().then(()=>require("./webgl-device-CR_IOS1K.cjs")).then(t=>t.webgl_device_exports);if(t instanceof i)return t;const s=i.getDeviceFromContext(t);if(s)return s;if(!function(t){return"undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||Boolean(t&&"function"==typeof t.createVertexArray)}(t))throw new Error("Invalid WebGL2RenderingContext");e=be(e),await Ce(e);const n=!0===e.createCanvasContext?{}:e.createCanvasContext;return new i({...e,_handle:t,createCanvasContext:{canvas:t.canvas,autoResize:!1,...n}})}async create(t={}){const{WebGLDevice:i}=await Promise.resolve().then(()=>require("./webgl-device-CR_IOS1K.cjs")).then(t=>t.webgl_device_exports);t=be(t),await Ce(t);try{const s=new i(t);e.log.groupCollapsed(1,`WebGLDevice ${s.id} created`)();const n=`${s._reused?"Reusing":"Created"} device with WebGL2 ${s.props.debug?"debug ":""}context: ${s.info.vendor}, ${s.info.renderer} for canvas: ${s.canvasContext.id}`;return e.log.probe(1,n)(),e.log.table(1,s.info)(),s}finally{e.log.groupEnd(1)(),e.log.info(1,"%cWebGL call tracing: luma.log.set('debug-webgl') ","color: white; background: blue; padding: 2px 6px; border-radius: 3px;")()}}};function be(i){return{...i,debug:i.debug??t.Device.defaultProps.debug,debugWebGL:i.debugWebGL??t.Device.defaultProps.debugWebGL,debugSpectorJS:i.debugSpectorJS??Boolean(e.log.get("debug-spectorjs"))}}async function Ce(i){const s=[];(i.debugWebGL||i.debug)&&s.push(t.loadRegisteredWebGLDeveloperTools()),i.debugSpectorJS&&s.push(t.loadRegisteredSpectorJS(i));const n=await Promise.allSettled(s);for(const t of n)"rejected"===t.status&&e.log.error(`Failed to initialize debug libraries ${t.reason}`)()}function Me(){}function ke(t){return t.deviceProps?.debug??t.debug}var xe={id:"",width:"100%",height:"100%",style:null,viewState:null,initialViewState:null,pickingRadius:0,pickAsync:"auto",layerFilter:null,parameters:{},parent:null,device:null,deviceProps:{},gl:null,canvas:null,_canvases:null,layers:[],effects:[],views:null,controller:null,useDevicePixels:!0,touchAction:"none",eventRecognizerOptions:{},_framebuffer:null,_animate:!1,_pickable:!0,_typedArrayManagerProps:{},_customRender:null,widgets:[],onDeviceInitialized:Me,onWebGLInitialized:Me,onResize:Me,onViewStateChange:Me,onInteractionStateChange:Me,onBeforeRender:Me,onAfterRender:Me,onLoad:Me,onError:e=>t.defaultLogger.error(e.message,e.cause)(),onHover:null,onClick:null,onDragStart:null,onDrag:null,onDragEnd:null,_onMetrics:null,getCursor:({isDragging:t})=>t?"grabbing":"grab",getTooltip:null,debug:!1,drawPickingColors:!1},Se=class{constructor(e){this.width=0,this.height=0,this.userData={},this.device=null,this.canvas=null,this.viewManager=null,this.layerManager=null,this.effectManager=null,this.deckRenderer=null,this.deckPicker=null,this.eventManager=null,this.eventManagers={},this.widgetManager=null,this.tooltip=null,this.animationLoop=null,this._canvasContext=null,this._deviceResizeHandler=null,this.cursorState={isHovering:!1,isDragging:!1},this.stats=new t.Stats({id:"deck.gl"}),this.metrics={fps:0,setPropsTime:0,layersCount:0,drawLayersCount:0,updateLayersCount:0,updateAttributesCount:0,updateAttributesTime:0,framesRedrawn:0,pickTime:0,pickCount:0,pickLayersCount:0,gpuTime:0,gpuTimePerFrame:0,cpuTime:0,cpuTimePerFrame:0,bufferMemory:0,textureMemory:0,renderbufferMemory:0,gpuMemory:0},this._metricsCounter=0,this._hoverPickSequence=0,this._pointerDownPickSequence=0,this._needsRedraw="Initial render",this._canvasManager=new ve({createEventManager:t=>this._createEventManager(t),getEventRoot:t=>this._getEventRoot(t)}),this._ownedCanvas=null,this._pickRequest={mode:"hover",x:-1,y:-1,radius:0,canvasId:void 0,event:null,unproject3D:!1},this._lastPointerDownInfo=null,this._lastPointerDownInfoPromise=null,this._onPointerMove=t=>{const{_pickRequest:e}=this,i=this._getCanvasIdFromEvent(t);if("pointerleave"===t.type)e.x=-1,e.y=-1,e.radius=0,e.canvasId=i;else{if(t.leftButton||t.rightButton)return;{const s=t.offsetCenter;if(!s)return;e.x=s.x,e.y=s.y,e.radius=this.props.pickingRadius,e.canvasId=i}}this.layerManager&&(this.layerManager.context.mousePosition={x:e.x,y:e.y}),e.event=t},this._onEvent=e=>{const i=t.EVENT_HANDLERS[e.type],s=e.offsetCenter,n=this._getCanvasIdFromEvent(e);if(!i||!s||!this.layerManager)return;const r=this.layerManager.getLayers(),o=this._getInternalPickingMode();if(o){if("sync"===o){const t="click"===e.type&&this._shouldUnproject3D(r)?this._getFirstPickedInfo(this._pickPointSync(this._getPointPickOptions(s.x,s.y,{unproject3D:!0,canvasId:n},r))):this._getLastPointerDownPickingInfo(s.x,s.y,n,r);return void this._dispatchPickingEvent(t,e)}(this._lastPointerDownInfoPromise||Promise.resolve(this._getLastPointerDownPickingInfo(s.x,s.y,n,r))).then(t=>{this._dispatchPickingEvent(t,e)}).catch(t=>this.props.onError?.(t))}},this._onPointerDown=t=>{const e=t.offsetCenter,i=this._getCanvasIdFromEvent(t);if(!e)return;const s=this._getInternalPickingMode();if(!s)return;const n=this.layerManager?.getLayers()||[],r=++this._pointerDownPickSequence;if("sync"===s){const t=this._pickPointSync({x:e.x,y:e.y,canvasId:i,radius:this.props.pickingRadius}),s=this._getFirstPickedInfo(t);return this._lastPointerDownInfo=s,void(this._lastPointerDownInfoPromise=Promise.resolve(s))}const o=this._pickPointAsync(this._getPointPickOptions(e.x,e.y,{canvasId:i},n)).then(t=>this._getFirstPickedInfo(t)).then(t=>(r===this._pointerDownPickSequence&&(this._lastPointerDownInfo=t),t)).catch(t=>{this.props.onError?.(t);const s=this.deckPicker&&this.viewManager?this._getLastPointerDownPickingInfo(e.x,e.y,i,n):{};return r===this._pointerDownPickSequence&&(this._lastPointerDownInfo=s),s});this._lastPointerDownInfo=null,this._lastPointerDownInfoPromise=o};const i=e;this.props={...xe,...e},e=this.props,this._validateCanvasConfiguration(e),e.viewState&&e.initialViewState&&t.defaultLogger.warn("View state tracking is disabled. Use either `initialViewState` for auto update or `viewState` for manual update.")(),this.viewState=this.props.initialViewState,e.device&&(this.device=e.device,this._setDeviceCanvasContext(e.device));let s=this.device;!s&&e.gl&&(e.gl instanceof WebGLRenderingContext&&t.defaultLogger.error("WebGL1 context not supported.")(),s=Pe.attach(e.gl,{_cacheShaders:!0,_cachePipelines:!0,...e.deviceProps,debug:ke(e)})),s||(s=this._createDevice(e)),this.animationLoop=this._createAnimationLoop(s,e),this.setProps(i),e._typedArrayManagerProps&&t.typed_array_manager_default.setOptions(e._typedArrayManagerProps),this.animationLoop.start()}finalize(){this._restoreDeviceResizeHandler(),this.animationLoop?.stop(),this.animationLoop?.destroy(),this.animationLoop=null,this._hoverPickSequence++,this._pointerDownPickSequence++,this._lastPointerDownInfo=null,this._lastPointerDownInfoPromise=null,this.layerManager?.finalize(),this.layerManager=null,this.viewManager?.finalize(),this.viewManager=null,this.effectManager?.finalize(),this.effectManager=null,this.deckRenderer?.finalize(),this.deckRenderer=null,this.deckPicker?.finalize(),this.deckPicker=null,Object.keys(this._canvasManager.targets).length||this.eventManager?.destroy(),this.eventManager=null,this.eventManagers={},this.widgetManager?.finalize(),this.widgetManager=null,this._canvasManager.finalize(),this._isMultiCanvasMode()?this.canvas=null:this.canvas&&this.canvas===this._ownedCanvas&&(this.canvas.parentElement?.removeChild(this.canvas),this.canvas=null,this._ownedCanvas=null),this._canvasContext=null}setProps(e){this.stats.get("setProps Time").timeStart(),"onLayerHover"in e&&t.defaultLogger.removed("onLayerHover","onHover")(),"onLayerClick"in e&&t.defaultLogger.removed("onLayerClick","onClick")(),e.initialViewState&&!t.deepEqual(this.props.initialViewState,e.initialViewState,3)&&(this.viewState=e.initialViewState),t.assert(!("_canvases"in e)||Array.isArray(e._canvases)===this._isMultiCanvasMode()),Object.assign(this.props,e),this._validateCanvasConfiguration(this.props),this._validateInternalPickingMode(),this.device&&this._isMultiCanvasMode()&&this._syncCanvasTargets(),this._setCanvasSize(this.props);const i=Object.create(this.props);if(Object.assign(i,{views:this._getViews(),width:this.width,height:this.height,viewState:this._getViewState(),eventManagers:this.eventManagers}),e.device&&e.device.id!==this.device?.id){const i=e.device.getDefaultCanvasContext();this.animationLoop?.stop(),this._isMultiCanvasMode()||this.canvas===i.canvas||(this.canvas?.remove(),this.eventManager?.destroy(),this.canvas=null),this._setDeviceCanvasContext(e.device),t.defaultLogger.log(`recreating animation loop for new device! id=${e.device.id}`)(),this.animationLoop=this._createAnimationLoop(e.device,e),this.animationLoop.start()}if(this.animationLoop?.setProps(i),void 0!==e.useDevicePixels&&this._canvasContext?.setProps){this._canvasContext.setProps({useDevicePixels:e.useDevicePixels});for(const t of Object.values(this._canvasManager.targets))t.presentationContext.setProps({useDevicePixels:e.useDevicePixels})}this.layerManager&&(this.viewManager.setProps(i),this.layerManager.activateViewport(this.getViewports()[0]),this.layerManager.setProps(i),this.effectManager.setProps(i),this.deckRenderer.setProps(i),this.deckPicker.setProps(i),this.widgetManager.setProps(i)),this.stats.get("setProps Time").timeEnd()}needsRedraw(t={clearRedrawFlags:!1}){if(!this.layerManager)return!1;if(this.props._animate)return"Deck._animate";let e=this._needsRedraw;t.clearRedrawFlags&&(this._needsRedraw=!1);const i=this.viewManager.needsRedraw(t),s=this.layerManager.needsRedraw(t),n=this.effectManager.needsRedraw(t),r=this.deckRenderer.needsRedraw(t);return e=e||i||s||n||r,e}redraw(t){if(!this.layerManager)return;let e=this.needsRedraw({clearRedrawFlags:!0});e=t||e,e&&(this.stats.get("Redraw Count").incrementCount(),this.props._customRender?this.props._customRender(e):this._drawLayers(e))}get isInitialized(){return null!==this.viewManager}getViews(){return t.assert(this.viewManager),this.viewManager.views}getView(e){return t.assert(this.viewManager),this.viewManager.getView(e)}getViewports(e){return t.assert(this.viewManager),this.viewManager.getViewports(e)}getCanvas(){return this.canvas}getCanvasContext(t){const e=t?this.viewManager?.getView(t)?.props.canvasId:void 0;return this._getCanvasContext(e)}getEventManager(t){if(!t||!this.viewManager)return this.eventManager;const e=this.viewManager.getCanvasId(t)||"default-canvas";return this.eventManagers[e]||this.eventManager}async pickObjectAsync(t){const e=(await this._pickAsync("pickObjectAsync","pickObject Time",t)).result;return e.length?e[0]:null}async pickObjectsAsync(t){return await this._pickAsync("pickObjectsAsync","pickObjects Time",t)}pickObject(t){const e=this._pick("pickObject","pickObject Time",t).result;return e.length?e[0]:null}pickMultipleObjects(t){return t.depth=t.depth||10,this._pick("pickObject","pickMultipleObjects Time",t).result}pickObjects(t){return this._pick("pickObjects","pickObjects Time",t)}_pickPositionForController(t,e,i){return"sync"!==this._getInternalPickingMode()?null:this.pickObject({x:t,y:e,radius:0,unproject3D:!0,canvasId:i?this.viewManager?.getCanvasId(i):void 0})}_addResources(t,e=!1){for(const i in t)this.layerManager.resourceManager.add({resourceId:i,data:t[i],forceUpdate:e})}_removeResources(t){for(const e of t)this.layerManager.resourceManager.remove(e)}_addDefaultEffect(t){this.effectManager.addDefaultEffect(t)}_addDefaultShaderModule(t){this.layerManager.addDefaultShaderModule(t)}_removeDefaultShaderModule(t){this.layerManager?.removeDefaultShaderModule(t)}_resolveInternalPickingMode(){const{pickAsync:t}=this.props,e=this.device?.type||this.props.deviceProps?.type;if("auto"===t)return"webgpu"===e?"async":"sync";if("sync"===t&&"webgpu"===e)throw new Error('`pickAsync: "sync"` is not supported when Deck is using a WebGPU device.');return t}_getInternalPickingMode(){try{return this._resolveInternalPickingMode()}catch(t){return this.props.onError?.(t),null}}_validateInternalPickingMode(){this._getInternalPickingMode()}_getFirstPickedInfo({result:t,emptyInfo:e}){return t[0]||e}_shouldUnproject3D(t=this.layerManager?.getLayers()||[]){return t.some(t=>"3d"===t.props.pickable)}_getPointPickOptions(t,e,i={},s=this.layerManager?.getLayers()||[]){return{x:t,y:e,canvasId:i.canvasId,radius:this.props.pickingRadius,unproject3D:this._shouldUnproject3D(s),...i}}_pickPointSync(t){return this._pick("pickObject","pickObject Time",t)}_pickPointAsync(t){return this._pickAsync("pickObjectAsync","pickObject Time",t)}_getLastPointerDownPickingInfo(t,e,i,s=this.layerManager?.getLayers()||[]){return this.deckPicker.getLastPickedObject({x:t,y:e,layers:s,viewports:this.getViewports({x:t,y:e,canvasId:i})},this._lastPointerDownInfo)}_applyHoverCallbacks({result:t,emptyInfo:e},i){if(!this.widgetManager)return;this.cursorState.isHovering=t.length>0;let s=e,n=!1;for(const r of t)s=r,n=r.layer?.onHover(r,i)||n;n||(this.props.onHover?.(s,i),this.widgetManager.onHover(s,i))}_dispatchPickingEvent(e,i){if(!this.layerManager||!this.widgetManager)return;const s=t.EVENT_HANDLERS[i.type];if(!s)return;const{layer:n}=e,r=n&&(n[s]||n.props[s]),o=this.props[s];let a=!1;r&&(a=r.call(n,e,i)),a||(o?.(e,i),this.widgetManager.onEvent(e,i))}_pickAsync(e,i,s){t.assert(this.deckPicker);const{stats:n}=this,r=this._isMultiCanvasMode()?s.canvasId||this._getDefaultCanvasId():s.canvasId,o=this._getCanvasContext(r)||void 0;n.get("Pick Count").incrementCount(),n.get(i).timeStart(),this._resizeForCanvasTarget(r);const a=this.deckPicker[e]({layers:this.layerManager.getLayers(s),views:this.viewManager.getViews(),viewports:this.getViewports({...s,canvasId:r}),onViewportActive:this.layerManager.activateViewport,effects:this.effectManager.getEffects(),...s,canvasId:r,canvasContext:o});return n.get(i).timeEnd(),a}_pick(e,i,s){t.assert(this.deckPicker);const{stats:n}=this,r=this._isMultiCanvasMode()?s.canvasId||this._getDefaultCanvasId():s.canvasId,o=this._getCanvasContext(r)||void 0;n.get("Pick Count").incrementCount(),n.get(i).timeStart(),this._resizeForCanvasTarget(r);const a=this.deckPicker[e]({layers:this.layerManager.getLayers(s),views:this.viewManager.getViews(),viewports:this.getViewports({...s,canvasId:r}),onViewportActive:this.layerManager.activateViewport,effects:this.effectManager.getEffects(),...s,canvasId:r,canvasContext:o});return n.get(i).timeEnd(),a}_createCanvas(e){let i=e.canvas;return"string"==typeof i&&(i=document.getElementById(i),t.assert(i)),i?this._ownedCanvas=null:(i=document.createElement("canvas"),i.id=e.id||"deckgl-overlay",e.width&&"number"==typeof e.width&&(i.width=e.width),e.height&&"number"==typeof e.height&&(i.height=e.height),(e.parent||document.body).appendChild(i),this._ownedCanvas=i),Object.assign(i.style,e.style),i}_isMultiCanvasMode(){return Array.isArray(this.props._canvases)}_getDefaultCanvasId(){return this._canvasManager.order[0]||"default-canvas"}_validateCanvasConfiguration(e){Array.isArray(e._canvases)&&(t.assert(!e.canvas),t.assert(!e.gl),t.assert(!e.device?.canvasContext||e.device.getDefaultCanvasContext().offscreenCanvas))}_createEventManager(e){const i=new t.EventManager(e,{touchAction:this.props.touchAction,recognizers:Object.keys(t.RECOGNIZERS).map(e=>{const[i,s,n,r]=t.RECOGNIZERS[e],o=this.props.eventRecognizerOptions?.[e];return{recognizer:new i({...s,...o,event:e}),recognizeWith:n,requireFailure:r}}),events:{pointerdown:this._onPointerDown,pointermove:this._onPointerMove,pointerleave:this._onPointerMove}});for(const s in t.EVENT_HANDLERS)"dblclick"===s?i.watch(s,this._onEvent):i.on(s,this._onEvent);return i}_getEventRoot(t){return t.closest(".deck-events-root")||this.props.parent?.querySelector(".deck-events-root")||t}_syncCanvasTargets(){if(!this.device||!this._isMultiCanvasMode())return;this._canvasManager.syncCanvasEntries({device:this.device,canvases:this.props._canvases||[],useDevicePixels:this.props.useDevicePixels}),this.eventManagers=this._canvasManager.eventManagers;const t=this._getDefaultCanvasId();this.eventManager=this.eventManagers[t]||null,this.canvas=this._canvasManager.targets[t]?.canvas||null}_setCanvasContext(t){this._canvasContext=t,"style"in t.canvas&&(this.canvas=t.canvas)}_setDeviceCanvasContext(t,e={}){const i=t.getDefaultCanvasContext();this._setCanvasContext(i),this._setDeviceResizeHandler(t,e)}_setDeviceResizeHandler(t,e={}){const i=Boolean(e.syncDrawingBuffer);if(this._deviceResizeHandler?.device===t)return void(this._deviceResizeHandler.syncDrawingBuffer=i);this._restoreDeviceResizeHandler();const s=t=>{this._isMultiCanvasMode()?this._updateMultiCanvasDimensions():t===this._canvasContext&&this._canvasContext&&this._onCanvasContextResize(this._canvasContext,{syncDrawingBuffer:this._deviceResizeHandler?.syncDrawingBuffer})};t.props.onResize=s,this._deviceResizeHandler={device:t,onResize:s,syncDrawingBuffer:i}}_restoreDeviceResizeHandler(){const t=this._deviceResizeHandler;t&&t.device.props?.onResize===t.onResize&&(t.device.props.onResize=Me),this._deviceResizeHandler=null}_setCanvasSize(t){if(this._isMultiCanvasMode()||!this.canvas)return;const{width:e,height:i}=t;if(e||0===e){const t=Number.isFinite(e)?`${e}px`:e;this.canvas.style.width=t}if(i||0===i){const e=Number.isFinite(i)?`${i}px`:i;this.canvas.style.position=t.style?.position||"absolute",this.canvas.style.height=e}}_getCanvasIdFromEvent(t){return this._canvasManager.getCanvasIdFromEvent(t?.rootElement)}_getCanvasContext(t){return this._canvasManager.getTarget(t)?.presentationContext||this._canvasContext}_resizeForCanvasTarget(t){const e=this._canvasManager.getTarget(t);if(!e||!this.device?.canvasContext)return;const[i,s]=e.presentationContext.getDrawingBufferSize();this.device.canvasContext.setDrawingBufferSize(i,s)}_createDeviceCanvas(t){if(this._isMultiCanvasMode()){const e=globalThis.OffscreenCanvas;if(!e)throw new Error("`_canvases` requires OffscreenCanvas support.");return new e("number"==typeof t.width&&Number.isFinite(t.width)?t.width:1,"number"==typeof t.height&&Number.isFinite(t.height)?t.height:1)}return this._createCanvas(t)}_updateCanvasSize(t=this._canvasContext){if(this._isMultiCanvasMode())return void this._updateMultiCanvasDimensions();const{canvas:e}=this,[i,s]=t?t.getCSSSize():[e?.clientWidth??e?.width??0,e?.clientHeight??e?.height??0];i===this.width&&s===this.height||(this.width=i,this.height=s,this.viewManager?.setProps({width:i,height:s}),this.layerManager?.activateViewport(this.getViewports()[0]),this.props.onResize({width:i,height:s},t||void 0))}_onCanvasContextResize(t,e={}){if(e.syncDrawingBuffer){const{width:e,height:i}=t.canvas;t.setDrawingBufferSize(e,i)}this._needsRedraw="Canvas resized",this._updateCanvasSize(t)}_updateMultiCanvasDimensions(){const[t,e]=this._getCanvasContext()?.getCSSSize()||[0,0];t===this.width&&e===this.height||(this.width=t,this.height=e,this.props.onResize({width:t,height:e})),this._needsRedraw="Canvas resized",this.viewManager?.setNeedsUpdate("Canvas resized"),this.viewManager?.setProps({width:this.width,height:this.height})}_createAnimationLoop(t,e){const{gl:i,onError:s}=e;return new Y({device:t,autoResizeDrawingBuffer:!i&&!Array.isArray(e._canvases),autoResizeViewport:!1,onInitialize:t=>this._setDevice(t.device),onRender:this._onRenderFrame.bind(this),onError:s})}_createDevice(t){const e=this.props.deviceProps?.createCanvasContext,i="object"==typeof e?e:void 0,s={adapters:[],_cacheShaders:!0,_cachePipelines:!0,...t.deviceProps,debug:ke(t)};s.adapters.includes(Pe)||s.adapters.push(Pe);const n={alphaMode:"webgpu"===this.props.deviceProps?.type?"premultiplied":void 0};return a.createDevice({_reuseDevices:!0,type:"webgl",...s,createCanvasContext:{...n,...i,canvas:this._createDeviceCanvas(t),useDevicePixels:this.props.useDevicePixels,autoResize:!0}})}_getViewState(){return this.props.viewState||this.viewState}_getViews(){const{views:t}=this.props,e=Array.isArray(t)?t:t?[t]:[new Xt({id:"default-view"})];return e.length&&this.props.controller&&(e[0]=e[0].clone({controller:this.props.controller})),e}_onContextLost(){const{onError:t}=this.props;this.animationLoop&&t&&t(new Error("WebGL context is lost"))}_pickAndCallback(){const{_pickRequest:t}=this;if(t.event){const e=t.event,i=this.layerManager?.getLayers()||[],s=this._getPointPickOptions(t.x,t.y,{canvasId:t.canvasId,radius:t.radius,mode:t.mode},i),n=this._getInternalPickingMode(),r=++this._hoverPickSequence;if(t.event=null,t.canvasId=void 0,!n)return;if("sync"===n)return void this._applyHoverCallbacks(this._pickPointSync(s),e);this._pickPointAsync(s).then(({result:t,emptyInfo:i})=>{r===this._hoverPickSequence&&this._applyHoverCallbacks({result:t,emptyInfo:i},e)}).catch(t=>this.props.onError?.(t))}}_updateCursor(){const t=this.props.getCursor(this.cursorState);if(this._isMultiCanvasMode()){for(const e of Object.values(this._canvasManager.targets))e.canvas.style.cursor=t;return}const e=this.props.parent||this.canvas;e&&(e.style.cursor=t)}_setDevice(e){if(this.device=e,this._validateInternalPickingMode(),!this.animationLoop)return;this._setDeviceCanvasContext(e,{syncDrawingBuffer:Boolean(this.props.gl&&this.props.device!==e)}),this._isMultiCanvasMode()?this._syncCanvasTargets():this.canvas&&!this.canvas.isConnected&&this.props.parent&&this.props.parent.insertBefore(this.canvas,this.props.parent.firstChild),"webgl"===this.device.type&&this.device.setParametersWebGL({blend:!0,blendFunc:[770,771,1,771],polygonOffsetFill:!0,depthTest:!0,depthFunc:515}),this.props.onDeviceInitialized(this.device),"webgl"===this.device.type&&this.props.onWebGLInitialized(this.device.gl);const i=new q;if(i.play(),this.animationLoop.attachTimeline(i),!this._isMultiCanvasMode()){const e=this.canvas&&this._getEventRoot(this.canvas);t.assert(e),this.eventManager=this._createEventManager(e),this.eventManagers={[nt]:this.eventManager}}this.viewManager=new rt({timeline:i,eventManager:this.eventManager,eventManagers:this.eventManagers,getCanvasContext:this._isMultiCanvasMode()?this.getCanvasContext.bind(this):void 0,onViewStateChange:this._onViewStateChange.bind(this),onInteractionStateChange:this._onInteractionStateChange.bind(this),pickPosition:this._pickPositionForController.bind(this),views:this._getViews(),viewState:this._getViewState(),width:this.width,height:this.height});const s=this.viewManager.getViewports()[0];this.layerManager=new st(this.device,{deck:this,stats:this.stats,viewport:s,timeline:i}),this.effectManager=new Kt({deck:this,device:this.device}),this.deckRenderer=new Qt(this.device,{stats:this.stats}),this.deckPicker=new oe(this.device,{stats:this.stats});const n=this.props.parent?.querySelector(".deck-widgets-root")||(this._isMultiCanvasMode()?this.props.parent||this.canvas?.parentElement:null)||this.canvas?.parentElement;this.widgetManager=new de({deck:this,parentElement:n}),this.widgetManager.addDefault(new ge),this.setProps({}),this._updateCanvasSize(this._canvasContext),this.props.onLoad()}_drawLayers(t,e){const{device:i,gl:s}=this.layerManager.context;this.props.onBeforeRender({device:i,gl:s});const n={target:this.props._framebuffer,layers:this.layerManager.getLayers(),viewports:this.viewManager.getViewports(),onViewportActive:this.layerManager.activateViewport,views:this.viewManager.getViews(),pass:"screen",effects:this.effectManager.getEffects(),...e};if(this._isMultiCanvasMode()&&"screen"===n.pass&&!n.target&&this._canvasManager.order.length)for(const r of this._canvasManager.order){const t=n.viewports.filter(t=>this.viewManager.getCanvasId(t.id)===r);if(!t.length){const t=this._canvasManager.targets[r];this._resizeForCanvasTarget(r),this.deckRenderer?.renderLayers({...n,canvasContext:t.presentationContext,target:t.presentationContext.getCurrentFramebuffer(),viewports:[],clearCanvas:!0}),t.presentationContext.present();continue}const e=this._canvasManager.targets[r];this._resizeForCanvasTarget(r);const i=e.presentationContext.getCurrentFramebuffer();this.deckRenderer?.renderLayers({...n,canvasContext:e.presentationContext,target:i,viewports:t}),e.presentationContext.present()}else this.deckRenderer?.renderLayers(n);"screen"===n.pass&&this.widgetManager.onRedraw({viewports:n.viewports,layers:n.layers}),this.props.onAfterRender({device:i,gl:s})}_onRenderFrame(){this._getFrameStats(),this._metricsCounter++%60==0&&(this._getMetrics(),this.stats.reset(),t.defaultLogger.table(4,this.metrics)(),this.props._onMetrics&&this.props._onMetrics(this.metrics)),this._updateCursor(),this.layerManager.updateLayers(),this._pickAndCallback(),this.redraw(),this.viewManager&&this.viewManager.updateViewStates()}_onViewStateChange(t){const e=this.props.onViewStateChange(t)||t.viewState;this.viewState&&(this.viewState={...this.viewState,[t.viewId]:e},this.props.viewState||this.viewManager&&this.viewManager.setProps({viewState:this.viewState}))}_onInteractionStateChange(t){this.cursorState.isDragging=t.isDragging||!1,this.props.onInteractionStateChange(t)}_getFrameStats(){const{stats:t}=this;t.get("frameRate").timeEnd(),t.get("frameRate").timeStart();const e=this.animationLoop.stats;t.get("GPU Time").addTime(e.get("GPU Time").lastTiming),t.get("CPU Time").addTime(e.get("CPU Time").lastTiming)}_getMetrics(){const{metrics:t,stats:e}=this;t.fps=e.get("frameRate").getHz(),t.setPropsTime=e.get("setProps Time").time,t.updateAttributesTime=e.get("Update Attributes").time,t.framesRedrawn=e.get("Redraw Count").count,t.pickTime=e.get("pickObject Time").time+e.get("pickMultipleObjects Time").time+e.get("pickObjects Time").time,t.pickCount=e.get("Pick Count").count,t.layersCount=this.layerManager?.layers.length??0,t.drawLayersCount=e.get("Layers rendered").lastSampleCount,t.pickLayersCount=e.get("Layers picked").lastSampleCount,t.updateLayersCount=e.get("Layer updates").count,t.updateAttributesCount=e.get("Attributes updated").count,t.gpuTime=e.get("GPU Time").time,t.cpuTime=e.get("CPU Time").time,t.gpuTimePerFrame=e.get("GPU Time").getAverageTime(),t.cpuTimePerFrame=e.get("CPU Time").getAverageTime();const i=a.stats.get("GPU Time and Memory");t.bufferMemory=i.get("Buffer Memory").count,t.textureMemory=i.get("Texture Memory").count,t.renderbufferMemory=i.get("Renderbuffer Memory").count,t.gpuMemory=i.get("GPU Memory").count}};Se.defaultProps=xe,Se.VERSION=n;var Ee=Math.PI/180,Re=180/Math.PI,Le=class e{static toPosition(t,e){const i=e*Ee,s=t*Ee,n=Math.cos(i);return[n*Math.cos(s),n*Math.sin(s),Math.sin(i)]}static toLngLat(e){return[Math.atan2(e[1],e[0])*Re,Math.asin(t.clamp(e[2],-1,1))*Re]}static tangentBasis(t,e){const i=e*Ee,s=t*Ee,n=Math.sin(i),r=Math.cos(i),o=Math.sin(s),a=Math.cos(s);return{N:[-n*a,-n*o,r],E:[-o,a,0]}}static upVector(t,i,s){const{N:n,E:r}=e.tangentBasis(t,i),o=s*Ee,a=Math.cos(o),h=Math.sin(o);return[n[0]*a+r[0]*h,n[1]*a+r[1]*h,n[2]*a+r[2]*h]}static bearing(i,s,n){const{N:r,E:o}=e.tangentBasis(s,n);return Math.atan2(t.dot$1(i,o),t.dot$1(i,r))*Re}static cameraFrame(i,s,n){const r=e.toPosition(i,s),o=e.upVector(i,s,n),{N:a,E:h}=e.tangentBasis(i,s),c=n*Ee,d=Math.cos(c),l=Math.sin(c),p=[h[0]*d-a[0]*l,h[1]*d-a[1]*l,h[2]*d-a[2]*l];return{position:r,up:o,axisHorizontal:t.cross([],r,p),axisVertical:t.cross([],r,o),longitude:i,latitude:s,bearing:n}}static angularDistance(i,s){const n=e.toPosition(i.longitude,i.latitude),r=e.toPosition(s.longitude,s.latitude);return Math.acos(t.clamp(t.dot$1(n,r),-1,1))}static greatCircleAxis(i,s){const n=e.toPosition(i.longitude,i.latitude),r=e.toPosition(s.longitude,s.latitude);return t.normalize$1([],t.cross([],n,r))}static rotate(e,s,n){const r=(new i.Quaternion).fromAxisRotation(s,n);return t.transformQuat$1([],e,r)}static rotateFrame(t,i,s,n){let r=e.rotate(t.position,t.axisHorizontal,i);r=e.rotate(r,t.axisVertical,s);let o=e.rotate(t.up,t.axisHorizontal,i);o=e.rotate(o,t.axisVertical,s);const[a,h]=e.toLngLat(r),c=n?0:e.bearing(o,a,h);return{...t,position:r,up:o,longitude:a,latitude:h,bearing:c}}},De=1/(1-Math.exp(-5)),Te=t=>(1-Math.exp(-5*t))*De,Ae=class extends Mt{constructor(t){const e="axis"in t;super({compare:["longitude","latitude"],extract:e?["longitude","latitude","zoom","bearing"]:["longitude","latitude","zoom"],required:["longitude","latitude"]}),e?(this._mode="rotation",this._axis=t.axis,this._totalAngle=t.totalAngle):(this._mode="linear",this._targetLongitude=t.targetLongitude)}initializeProps(t,e){const i=super.initializeProps(t,e);return this._startZoom=t.zoom,"rotation"===this._mode?this._startFrame={...Le.cameraFrame(t.longitude,t.latitude,t.bearing||0),axisHorizontal:this._axis}:i.end.longitude=this._targetLongitude,i}interpolateProps(t,e,s){if("rotation"===this._mode){const{longitude:t,latitude:e,bearing:n}=Le.rotateFrame(this._startFrame,this._totalAngle*s,0);return{bearing:n,longitude:t,latitude:e,zoom:this._startZoom+i.zoomAdjust(e,!0)-i.zoomAdjust(this._startFrame.latitude,!0)}}const n=t.longitude+(e.longitude-t.longitude)*s,r=t.latitude+(e.latitude-t.latitude)*s;return{longitude:n,latitude:r,zoom:this._startZoom+i.zoomAdjust(r,!0)-i.zoomAdjust(t.latitude,!0)}}},Ie=Math.PI/180,Ve=180/Math.PI;function ze(t,e=0){const i=Math.min(180,t)*Ie;return 512*Math.sin(i/2)*Math.pow(2,e)}function Fe(t,e=0){const i=t/Math.pow(2,e);return 2*Math.asin(Math.min(1,i/256/2))*Ve}var Oe=class extends qt{constructor(t){const{startPanPos:e,startPanCameraFrame:i,startPanAngularRate:s,startPanLockBearing:n,...r}=t;r.normalize=!1,super(r);const o=this._state;void 0!==e&&(o.startPanPos=e),void 0!==i&&(o.startPanCameraFrame=i),void 0!==s&&(o.startPanAngularRate=s),void 0!==n&&(o.startPanLockBearing=n)}panStart({pos:t}){const{latitude:e,longitude:s,zoom:n,bearing:r=0}=this.getViewportProps(),o=Le.cameraFrame(s,e,r),a=Math.abs(r)<1;a&&(o.axisHorizontal=[0,0,1]);const h=.25/Math.pow(2,n-i.zoomAdjust(e,!0))*Ie;return this._getUpdatedState({startPanPos:t,startPanCameraFrame:o,startPanAngularRate:h,startPanLockBearing:a,startZoom:n})}pan({pos:e,startPos:s}){const n=this.getState(),r=n.startPanPos||s;if(!r)return this;const o=n.startPanCameraFrame,a=n.startPanAngularRate,h=n.startZoom??this.getViewportProps().zoom;if(!o||!a)return this;const c=r[0]-e[0];let d=c*a,l=-(r[1]-e[1])*a;const p=n.startPanLockBearing;if(p){const e=Math.cos(o.latitude*Ie);d=c*a/Math.max(e,.25);const i=(t.MAX_LATITUDE-o.latitude)*Ie,s=-(t.MAX_LATITUDE+o.latitude)*Ie;l=t.clamp(l,s,i)}const u=Le.rotateFrame(o,d,l,p),g=h+i.zoomAdjust(u.latitude,!0)-i.zoomAdjust(o.latitude,!0);return this._getUpdatedState({longitude:u.longitude,latitude:u.latitude,bearing:u.bearing,zoom:g})}panEnd(){return this._getUpdatedState({startPanPos:null,startPanCameraFrame:null,startPanAngularRate:null,startPanLockBearing:null,startZoom:null})}_panFromCenter(t){const{width:e,height:i}=this.getViewportProps(),s=[e/2,i/2];return this.panStart({pos:s}).pan({pos:[s[0]+t[0],s[1]+t[1]]}).panEnd()}applyConstraints(e){const s=e,n=s[Bt];delete s[Bt];const{latitude:r,maxBounds:o}=e;if(e.zoom=this._constrainZoom(e.zoom,e),n){const t=this.makeViewport(e);Object.assign(e,t.panByPosition(n.position,n.screenPosition))}(e.longitude<-180||e.longitude>180)&&(e.longitude=t.mod(e.longitude+180,360)-180),e.latitude=t.clamp(e.latitude,-90,90),(e.bearing<-180||e.bearing>180)&&(e.bearing=t.mod(e.bearing+180,360)-180),e.pitch=t.clamp(e.pitch,e.minPitch,e.maxPitch);const a=o?Wt(e.width,e.height,e.maxBoundsPadding):null;if(o&&a&&(a.width>=0&&(e.longitude=t.clamp(e.longitude,o[0][0],o[1][0])),a.height>=0&&(e.latitude=t.clamp(e.latitude,o[0][1],o[1][1]))),o&&a){const s=Gt(this.makeViewport({...e,bearing:0,pitch:0}),[e.longitude,e.latitude],a),n=e.zoom-i.zoomAdjust(r),h=o[1][0]-o[0][0],c=o[1][1]-o[0][1];if(a.height>=0&&c>0&&c<180){const i=Math.min(Fe(a.height,n),c),r=a.height?i*s.bottom/a.height:Fe(s.bottom,n),h=a.height?i*s.top/a.height:Fe(s.top,n);e.latitude=t.clamp(e.latitude,o[0][1]+r,o[1][1]-h)}if(a.width>=0&&h>0&&h<360){const i=Math.min(Fe(a.width/Math.cos(e.latitude*Ie),n),h),r=a.width?i*s.left/a.width:Fe(s.left/Math.cos(e.latitude*Ie),n),c=a.width?i*s.right/a.width:Fe(s.right/Math.cos(e.latitude*Ie),n);e.longitude=t.clamp(e.longitude,o[0][0]+r,o[1][0]-c)}}return e.latitude!==r&&(e.zoom+=i.zoomAdjust(e.latitude,!0)-i.zoomAdjust(r,!0)),e}_constrainZoom(e,s){s||(s=this.getViewportProps());const{maxZoom:n,maxBounds:r}=s;let{minZoom:o}=s;if(null!==r&&s.width>0&&s.height>0){const t=Wt(s.width,s.height,s.maxBoundsPadding),e=r[0][1],a=r[1][1],h=Math.sign(e)===Math.sign(a)?Math.min(Math.abs(e),Math.abs(a)):0,c=i.zoomAdjust(0),d=ze(r[1][0]-r[0][0])*Math.cos(h*Ie),l=ze(r[1][1]-r[0][1]);t.width>0&&d>0&&(o=Math.max(o,Math.log2(t.width/d)+c)),t.height>0&&l>0&&(o=Math.max(o,Math.log2(t.height/l)+c)),o>n&&(o=n)}const a=i.zoomAdjust(s.latitude,!0)-i.zoomAdjust(0,!0);return t.clamp(e,o+a,n+a)}},je=class extends jt{constructor(){super(...arguments),this.ControllerState=Oe,this.transition={transitionDuration:300,transitionInterpolator:new St({transitionProps:{compare:["longitude","latitude","zoom","bearing","pitch"],required:["longitude","latitude","zoom"]}})},this.dragMode="pan",this._panHistory=[]}getZoomPosition(t){const e=super.getZoomPosition(t),s=this.makeViewport(this.controllerState.getViewportProps());return!(s instanceof i.GlobeViewport)||s.getZoomAnchorStrength(e)>0?e:s.project([s.longitude,s.latitude])}_onPanStart(t){return this._panHistory=[],super._onPanStart(t)}_onMultiPanStart(t){return this._panHistory=[],super._onMultiPanStart(t)}_onPanMove(t){if(!this.dragPan)return!1;const e=this.getCenter(t),i=this.controllerState.pan({pos:e});this.updateViewport(i,{transitionDuration:0},{isDragging:!0,isPanning:!0});const{longitude:s,latitude:n}=i.getViewportProps();return this._panHistory.push({longitude:s,latitude:n,timestamp:Date.now()}),this._panHistory.length>5&&this._panHistory.shift(),!0}_onPanMoveEnd(e){const{inertia:i}=this;if(this.dragPan&&i&&this._panHistory.length>=2){const e=this._panHistory[0],s=this._panHistory[this._panHistory.length-1],n=s.timestamp-e.timestamp;if(n>0){const r=this.controllerState.getViewportProps(),o=this.controllerState.getState(),a=Le.angularDistance(e,s)/n;if(a>1e-6){const h=a*i/2;let c,d,l;if(o.startPanLockBearing){let o=s.longitude-e.longitude;o>180?o-=360:o<-180&&(o+=360);const a=o/n,h=(s.latitude-e.latitude)/n;d=r.longitude+a*i/2,l=t.clamp(r.latitude+h*i/2,-90,90),c=new Ae({targetLongitude:d})}else{const i=Le.greatCircleAxis(e,s),n=Le.cameraFrame(r.longitude,r.latitude,r.bearing||0),o=Le.rotateFrame({...n,axisHorizontal:i},h,0);d=o.longitude,l=t.clamp(o.latitude,-90,90),c=new Ae({axis:i,totalAngle:h})}const p=this.controllerState.panEnd();return this.updateViewport(p,{transitionInterpolator:c,transitionDuration:i,transitionEasing:Te,longitude:d,latitude:l},{isDragging:!1,isPanning:!0}),this._panHistory=[],!0}}}this._panHistory=[];const s=this.controllerState.panEnd();return this.updateViewport(s,null,{isDragging:!1,isPanning:!1}),!0}},Be={cullMode:"back"},Ne=class extends vt{constructor(t={}){super({...t,parameters:{...Be,...t.parameters}})}getViewportType(e){return e.zoom>12?t.WebMercatorViewport:i.GlobeViewport}get ControllerType(){return je}};Ne.displayName="GlobeView";var Ue=class{constructor(e){t.assert(e.id,"id is required"),this.id=e.id,this.type="custom",this.renderingMode=e.renderingMode||"3d",this.slot=e.slot,this.beforeId=e.beforeId,this.map=null}onAdd(t,e){this.map=t}render(t,e){this.map&&function(t,e,i,s){if(!t.isInitialized)return;let{currentViewport:n}=t.userData,r=!1;n||(n=ti(t,e,s),t.userData.currentViewport=n,r=!0);if(!n)return;t._drawLayers("mapbox-repaint",{viewports:[n],layerFilter:e=>{if(t.props.layerFilter&&!t.props.layerFilter(e))return!1;const s=e.layer;return s.props.beforeId===i.beforeId&&s.props.slot===i.slot},clearStack:r,clearCanvas:!1})}(this.map.__deck,this.map,this,e)}},We="__UNDEFINED__";function Ge(t){return t.props.beforeId?`deck-layer-group-before:${t.props.beforeId}`:t.props.slot?`deck-layer-group-slot:${t.props.slot}`:"deck-layer-group-last"}var Ze="mapbox",He=512,qe=Math.PI/180;function $e({map:e,deck:i}){if(e.__deck)return e.__deck;const s=i.props._customRender,n=i.props.onLoad,r={...i.props,_customRender:()=>{e.triggerRepaint(),s?.("")}};return r.views||(r.views=Je(e)),Object.assign(r,{width:null,height:null,touchAction:"unset",viewState:Qe(e)}),i.isInitialized?Xe(i,e):r.onLoad=()=>{Xe(i,e),ei(i,e),n?.()},i.setProps(r),e.__deck=i,e.on("render",()=>{i.isInitialized&&function(e,i){const s=t.flatten(e.props.layers,Boolean).some(t=>t&&!i.getLayer(Ge(t)));let n=e.getViewports();const r=n.findIndex(t=>t.id===Ze),o=n.length>1||r<0;if(s||o){if(r>=0){n=n.slice();const t=ti(e,i);t?n[r]=t:n.splice(r,1)}e._drawLayers("mapbox-repaint",{viewports:n,layerFilter:t=>(!e.props.layerFilter||e.props.layerFilter(t))&&("mapbox"!==t.viewport.id||!i.getLayer(Ge(t.layer))),clearCanvas:!1})}else{const t=e.device,i=t?.gl;e.props.onBeforeRender?.({device:t,gl:i}),e.props.onAfterRender?.({device:t,gl:i})}e.userData.currentViewport=null}(i,e)}),i}function Xe(t,e){const i=()=>{t.isInitialized?ei(t,e):e.off("move",i)};e.on("move",i)}function Ye(t,e){return e?{depthWriteEnabled:!0,depthCompare:"less-equal",depthBias:0,blend:!0,blendColorSrcFactor:"src-alpha",blendColorDstFactor:"one-minus-src-alpha",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one-minus-src-alpha",blendColorOperation:"add",blendAlphaOperation:"add"}:{}}function Ke(t){let e;try{e=t.getProjection?.()}catch{return"mercator"}const i=e?.type||e?.name;if("globe"===i)return"globe";if(i&&"mercator"!==i)throw new Error("Unsupported projection");return"mercator"}function Je(t){return"globe"===Ke(t)?new Ne({id:Ze}):new Xt({id:Ze})}function Qe(e){const{lng:i,lat:s}=e.getCenter(),n={longitude:(i+540)%360-180,latitude:s,zoom:e.getZoom(),bearing:e.getBearing(),pitch:e.getPitch(),padding:e.getPadding(),repeat:e.getRenderWorldCopies()};return e.getTerrain?.()&&function(e,i){if(e.getFreeCameraOptions){const{position:s}=e.getFreeCameraOptions();if(!s||void 0===s.z)return;const n=e.transform.height,{longitude:r,latitude:o,pitch:a}=i,h=s.x*He,c=(1-s.y)*He,d=s.z*He,l=t.lngLatToWorld([r,o]),p=h-l[0],u=c-l[1],g=Math.sqrt(p*p+u*u),v=a*qe,m=1.5*n,f=v<.001?m*Math.cos(v)/d:m*Math.sin(v)/g;i.zoom=Math.log2(f),i.position=[0,0,(d-m*Math.cos(v)/f)/t.unitsPerMeter(o)]}else"number"==typeof e.transform.elevation&&(i.position=[0,0,e.transform.elevation])}(e,n),n}function ti(t,e,i){const s=Qe(e),n=t.getView("mapbox")||Je(e);i&&(n.props.nearZMultiplier=.2);const r=i?.nearZ??e.transform._nearZ,o=i?.farZ??e.transform._farZ;return Number.isFinite(r)&&(s.nearZ=r/e.transform.height,s.farZ=o/e.transform.height),n.makeViewport({width:t.width,height:t.height,viewState:s})}function ei(t,e){t.setProps({viewState:Qe(e)}),t.needsRedraw({clearRedrawFlags:!0})}exports.MapboxOverlay=class{constructor(t){this._handleStyleChange=()=>{this._resolveLayers(this._map,this._deck,this._props.layers,this._props.layers),this._map&&Ke(this._map)&&this._deck?.setProps({views:this._getViews(this._map)})},this._updateContainerSize=()=>{if(this._map&&this._container){const{clientWidth:t,clientHeight:e}=this._map.getContainer();Object.assign(this._container.style,{width:`${t}px`,height:`${e}px`})}},this._updateViewState=()=>{const t=this._deck,e=this._map;t&&e&&(t.setProps({views:this._getViews(e),viewState:Qe(e)}),t.isInitialized&&t.redraw())},this._handleMouseEvent=t=>{const e=this._deck;if(!e||!e.isInitialized)return;const i={type:t.type,offsetCenter:t.point,srcEvent:t},s=this._lastMouseDownPoint;switch(!t.point&&s&&(i.deltaX=t.originalEvent.clientX-s.clientX,i.deltaY=t.originalEvent.clientY-s.clientY,i.offsetCenter={x:s.x+i.deltaX,y:s.y+i.deltaY}),i.type){case"mousedown":e._onPointerDown(i),this._lastMouseDownPoint={...t.point,clientX:t.originalEvent.clientX,clientY:t.originalEvent.clientY};break;case"dragstart":i.type="panstart",e._onEvent(i);break;case"drag":i.type="panmove",e._onEvent(i);break;case"dragend":i.type="panend",e._onEvent(i);break;case"click":i.tapCount=1,e._onEvent(i);break;case"dblclick":i.type="click",i.tapCount=2,e._onEvent(i);break;case"mousemove":i.type="pointermove",e._onPointerMove(i);break;case"mouseout":i.type="pointerleave",e._onPointerMove(i);break;default:return}};const{interleaved:e=!1}=t;this._interleaved=e,this._props=this.filterProps(t)}filterProps(t){const{interleaved:e,useDevicePixels:i,...s}=t;return this._interleaved||void 0===i||(s.useDevicePixels=i),s}setProps(t){this._interleaved&&t.layers&&this._resolveLayers(this._map,this._deck,this._props.layers,t.layers),Object.assign(this._props,this.filterProps(t)),this._deck&&this._map&&this._deck.setProps({...this._props,views:this._getViews(this._map),parameters:{...Ye(this._map,this._interleaved),...this._props.parameters}})}onAdd(t){return this._map=t,this._interleaved?this._onAddInterleaved(t):this._onAddOverlaid(t)}_onAddOverlaid(t){const e=document.createElement("div");return Object.assign(e.style,{position:"absolute",left:0,top:0,textAlign:"initial",pointerEvents:"none"}),this._container=e,this._deck=new Se({...this._props,parent:e,deviceProps:{...this._props.deviceProps,createCanvasContext:{..."object"==typeof this._props.deviceProps?.createCanvasContext?this._props.deviceProps.createCanvasContext:void 0,pixelSizeSource:"css-dpr"}},parameters:{...Ye(0,!1),...this._props.parameters},views:this._getViews(t),viewState:Qe(t)}),t.on("resize",this._updateContainerSize),t.on("render",this._updateViewState),t.on("mousedown",this._handleMouseEvent),t.on("dragstart",this._handleMouseEvent),t.on("drag",this._handleMouseEvent),t.on("dragend",this._handleMouseEvent),t.on("mousemove",this._handleMouseEvent),t.on("mouseout",this._handleMouseEvent),t.on("click",this._handleMouseEvent),t.on("dblclick",this._handleMouseEvent),this._updateContainerSize(),e}_onAddInterleaved(e){const i=e.painter.context.gl;return i instanceof WebGLRenderingContext&&t.defaultLogger.warn("Incompatible basemap library. See: https://deck.gl/docs/api-reference/mapbox/overview#compatibility")(),this._deck=$e({map:e,deck:new Se({...this._props,views:this._getViews(e),gl:i,parameters:{...Ye(0,!0),...this._props.parameters}})}),e.on("styledata",this._handleStyleChange),this._resolveLayers(e,this._deck,[],this._props.layers),document.createElement("div")}_resolveLayers(e,i,s,n){!function(e,i,s){if(!e||!e.style||!e.style._loaded)return;const n=t.flatten(s,Boolean);if(i!==s){const s=t.flatten(i,Boolean),r=new Set(s.map(t=>Ge(t))),o=new Set(n.map(t=>Ge(t)));for(const t of r)o.has(t)||e.getLayer(t)&&e.removeLayer(t)}const r={};for(const t of n){const i=Ge(t),s=e.getLayer(i);if(s)r[i]=s.implementation||s;else{const s=new Ue({id:i,slot:t.props.slot,beforeId:t.props.beforeId});r[i]=s,e.addLayer(s,t.props.beforeId)}}const o=e.style._order;for(const[t,a]of Object.entries(r)){const i=a.beforeId||We,s=i===We?o.length:o.indexOf(i);if(-1!==s&&o.indexOf(t)!==s-1){const s=i===We?void 0:i;e.moveLayer(t,s)}}}(e,s,n)}onRemove(){const t=this._map;t&&(this._interleaved?this._onRemoveInterleaved(t):this._onRemoveOverlaid(t)),this._deck=void 0,this._map=void 0,this._container=void 0}_onRemoveOverlaid(t){t.off("resize",this._updateContainerSize),t.off("render",this._updateViewState),t.off("mousedown",this._handleMouseEvent),t.off("dragstart",this._handleMouseEvent),t.off("drag",this._handleMouseEvent),t.off("dragend",this._handleMouseEvent),t.off("mousemove",this._handleMouseEvent),t.off("mouseout",this._handleMouseEvent),t.off("click",this._handleMouseEvent),t.off("dblclick",this._handleMouseEvent),this._deck?.finalize(),this._container?.remove()}_onRemoveInterleaved(t){t.off("styledata",this._handleStyleChange),this._resolveLayers(t,this._deck,this._props.layers,[]),function(t){t.__deck?.finalize(),t.__deck=null}(t)}getDefaultPosition(){return"top-left"}pickObject(e){return t.assert(this._deck),this._deck.pickObject(e)}pickMultipleObjects(e){return t.assert(this._deck),this._deck.pickMultipleObjects(e)}pickObjects(e){return t.assert(this._deck),this._deck.pickObjects(e)}finalize(){this._map&&this._map.removeControl(this)}getCanvas(){return this._map?this._interleaved?this._map.getCanvas():this._deck.getCanvas():null}_getViews(t){if(!this._props.views)return Je(t);const e=Array.isArray(this._props.views)?this._props.views:[this._props.views];return e.some(t=>"mapbox"===t.id)?this._props.views:[Je(t),...e]}};