@gis_victory/gismap 2.0.63 → 2.0.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/gismap.css +1 -1
- package/dist/index-BM_uMd_q.js +1 -0
- package/dist/index-BjrDGKVu.js +12 -0
- package/dist/index-CT43Zem8.js +1 -0
- package/dist/index.d.ts +161 -0
- package/dist/index.es.js +1 -12
- package/dist/index.umd.js +1 -1
- package/dist/webgl-developer-tools-XiIH8Rtv.js +1 -0
- package/dist/webgl-device-Ck4EhfeB.js +1 -0
- package/package.json +11 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ab as t,aQ as e,aR as i,aw as s,aS as n,aT as r,T as o,aU as a,aV as h,aW as c,aX as l,aY as d,aZ as p,a_ as u,a$ as g,b0 as m,b1 as f,b2 as w,b3 as v,W as _,a8 as y,b4 as b,b5 as P,af as k,O as E,b6 as S,b7 as M,a6 as C,S as x,as as R,ah as L,b8 as T,at as A,aq as I,ak as V,ae as D,aB as z,ac as F,aC as O,ai as j,b9 as B,aO as N,ay as U,av as W,$ as G,a4 as Z,U as H,ba as q,bb as $,bc as X,bd as Y,a9 as K,be as J,bf as Q,bg as tt,bh as et,bi as it}from"./webgl-developer-tools-XiIH8Rtv.js";const st={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};const nt=function(){const n="9.3.2",r=globalThis.deck&&globalThis.deck.VERSION;if(r&&r!==n)throw new Error(`deck.gl - multiple versions detected: ${r} vs ${n}`);return r||(t.log(1,`deck.gl ${n}`)(),globalThis.deck={...globalThis.deck,VERSION:n,version:n,log:t,_registerLoggers:e},i([st,[s,{imagebitmap:{premultiplyAlpha:"none"}}]])),n}(),rt="No matching device found. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.";class ot{static defaultProps={...n.defaultProps,type:"best-available",adapters:void 0,waitForPageLoad:!0};stats=r;log=o;VERSION="9.3.3";spector;preregisteredAdapters=/* @__PURE__ */new Map;constructor(){if(globalThis.luma){if(globalThis.luma.VERSION!==this.VERSION)throw o.error(`Found luma.gl ${globalThis.luma.VERSION} while initialzing ${this.VERSION}`)(),o.error("'yarn why @luma.gl/core' can help identify the source of the conflict")(),new Error("luma.gl - multiple versions detected: see console log");o.error("This version of luma.gl has already been initialized")()}o.log(1,`${this.VERSION} - set luma.log.level=1 (or higher) to trace rendering`)(),globalThis.luma=this}async createDevice(t={}){const e={...ot.defaultProps,...t},i=this.selectAdapter(e.type,e.adapters);if(!i)throw new Error(rt);return e.waitForPageLoad&&await i.pageLoaded,await i.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(rt);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,e=[]){const i=this._getAdapterMap(e).get("webgl");i||o.warn("enforceWebGL2: webgl adapter not found")(),i?.enforceWebGL2?.(t)}setDefaultDeviceProps(t){Object.assign(ot.defaultProps,t)}_getAdapterMap(t=[]){const e=new Map(this.preregisteredAdapters);for(const i of t)e.set(i.type,i);return e}_getTypeFromHandle(t,e=[]){return t instanceof WebGL2RenderingContext?"webgl":"undefined"!=typeof GPUDevice&&t instanceof GPUDevice||t?.queue?"webgpu":null===t?"null":(t instanceof WebGLRenderingContext?o.warn("WebGL1 is not supported",t)():o.warn("Unknown handle type",t)(),null)}}const at=new ot;class ht{get pageLoaded(){return function(){dt||(dt=lt()||"undefined"==typeof window?Promise.resolve():new Promise(t=>window.addEventListener("load",()=>t())));return dt}()}}const ct=a()&&"undefined"!=typeof document,lt=()=>ct&&"complete"===document.readyState;let dt=null;const pt="layout(std140) uniform layerUniforms {\n uniform float opacity;\n} layer;\n",ut={name:"layer",source:"struct LayerUniforms {\n opacity: f32,\n};\n\n@group(0) @binding(auto)\nvar<uniform> layer: LayerUniforms;\n",vs:pt,fs:pt,getUniforms:t=>({opacity:Math.pow(t.opacity,1/2.2)}),uniformTypes:{opacity:"f32"}};class gt{constructor(t,e){this.actions="",this.manager=t,this.set(e)}set(t){t===u&&(t=this.compute()),this.manager.element&&(this.manager.element.style.touchAction=t,this.actions=t)}update(){this.set(this.manager.options.touchAction)}compute(){let t=[];for(const e of this.manager.recognizers)e.options.enable&&(t=t.concat(e.getTouchAction()));return function(t){if(t.includes(h))return h;const e=t.includes(c),i=t.includes(l);return e&&i?h:e||i?e?c:l:t.includes(d)?d:p}(t.join(" "))}}const mt=["","webkit","Moz","MS","ms","o"];function ft(t,e){const i=e[0].toUpperCase()+e.slice(1);for(const s of mt){const n=s?s+i:e;if(n in t)return n}}const wt={touchAction:"compute",enable:!0,inputTarget:null,cssProps:{userSelect:"none",userDrag:"none",touchCallout:"none",tapHighlightColor:"rgba(0,0,0,0)"}};class vt{constructor(t,e){this.options={...wt,...e,cssProps:{...wt.cssProps,...e.cssProps},inputTarget:e.inputTarget||t},this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new g(this),this.touchAction=new gt(this,this.options.touchAction),this.toggleCssProps(!0)}set(t){return Object.assign(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this}stop(t){this.session.stopped=t?2:1}recognize(t){const{session:e}=this;if(e.stopped)return;let i;this.session.prevented&&t.srcEvent.preventDefault();const{recognizers:s}=this;let{curRecognizer:n}=e;(!n||n&&n.state&m.Recognized)&&(n=e.curRecognizer=null);let r=0;for(;r<s.length;)i=s[r],2===e.stopped||n&&i!==n&&!i.canRecognizeWith(n)?i.reset():i.recognize(t),!n&&i.state&(m.Began|m.Changed|m.Ended)&&(n=e.curRecognizer=i),r++}get(t){const{recognizers:e}=this;for(let i=0;i<e.length;i++)if(e[i].options.event===t)return e[i];return null}add(t){if(Array.isArray(t)){for(const e of t)this.add(e);return this}const e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t}remove(t){if(Array.isArray(t)){for(const e of t)this.remove(e);return this}const e="string"==typeof t?this.get(t):t;if(e){const{recognizers:t}=this,i=t.indexOf(e);-1!==i&&(t.splice(i,1),this.touchAction.update())}return this}on(t,e){if(!t||!e)return;const{handlers:i}=this;for(const s of f(t))i[s]=i[s]||[],i[s].push(e)}off(t,e){if(!t)return;const{handlers:i}=this;for(const s of f(t))e?i[s]&&i[s].splice(i[s].indexOf(e),1):delete i[s]}emit(t,e){const i=this.handlers[t]&&this.handlers[t].slice();if(!i||!i.length)return;const s=e;s.type=t,s.preventDefault=function(){e.srcEvent.preventDefault()};let n=0;for(;n<i.length;)i[n](s),n++}destroy(){this.toggleCssProps(!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}toggleCssProps(t){const{element:e}=this;if(e){for(const[i,s]of Object.entries(this.options.cssProps)){const n=ft(e.style,i);t?(this.oldCssProps[n]=e.style[n],e.style[n]=s):e.style[n]=this.oldCssProps[n]||""}t||(this.oldCssProps={})}}}const _t=["mousedown","mousemove","mouseup","mouseover","mouseout","mouseleave"];class yt extends w{constructor(t,e,i){super(t,e,{enable:!0,...i}),this.handleEvent=t=>{this.handleOverEvent(t),this.handleOutEvent(t),this.handleEnterEvent(t),this.handleLeaveEvent(t),this.handleMoveEvent(t)},this.pressed=!1;const{enable:s}=this.options;this.enableMoveEvent=s,this.enableLeaveEvent=s,this.enableEnterEvent=s,this.enableOutEvent=s,this.enableOverEvent=s,_t.forEach(e=>t.addEventListener(e,this.handleEvent))}destroy(){_t.forEach(t=>this.element.removeEventListener(t,this.handleEvent))}enableEventType(t,e){switch(t){case"pointermove":this.enableMoveEvent=e;break;case"pointerover":this.enableOverEvent=e;break;case"pointerout":this.enableOutEvent=e;break;case"pointerenter":this.enableEnterEvent=e;break;case"pointerleave":this.enableLeaveEvent=e}}handleOverEvent(t){this.enableOverEvent&&"mouseover"===t.type&&this._emit("pointerover",t)}handleOutEvent(t){this.enableOutEvent&&"mouseout"===t.type&&this._emit("pointerout",t)}handleEnterEvent(t){this.enableEnterEvent&&"mouseenter"===t.type&&this._emit("pointerenter",t)}handleLeaveEvent(t){this.enableLeaveEvent&&"mouseleave"===t.type&&this._emit("pointerleave",t)}handleMoveEvent(t){if(this.enableMoveEvent)switch(t.type){case"mousedown":t.button>=0&&(this.pressed=!0);break;case"mousemove":0===t.buttons&&(this.pressed=!1),this.pressed||this._emit("pointermove",t);break;case"mouseup":this.pressed=!1}}_emit(t,e){this.callback({type:t,center:{x:e.clientX,y:e.clientY},srcEvent:e,pointerType:"mouse",target:e.target})}}const bt=["keydown","keyup"];class Pt extends w{constructor(t,e,i){super(t,e,{enable:!0,tabIndex:0,...i}),this.handleEvent=t=>{const e=t.target||t.srcElement;"INPUT"===e.tagName&&"text"===e.type||"TEXTAREA"===e.tagName||(this.enableDownEvent&&"keydown"===t.type&&this.callback({type:"keydown",srcEvent:t,key:t.key,target:t.target}),this.enableUpEvent&&"keyup"===t.type&&this.callback({type:"keyup",srcEvent:t,key:t.key,target:t.target}))},this.enableDownEvent=this.options.enable,this.enableUpEvent=this.options.enable,t.tabIndex=this.options.tabIndex,t.style.outline="none",bt.forEach(e=>t.addEventListener(e,this.handleEvent))}destroy(){bt.forEach(t=>this.element.removeEventListener(t,this.handleEvent))}enableEventType(t,e){"keydown"===t&&(this.enableDownEvent=e),"keyup"===t&&(this.enableUpEvent=e)}}class kt extends w{constructor(t,e,i){super(t,e,i),this.handleEvent=t=>{this.options.enable&&this.callback({type:"contextmenu",center:{x:t.clientX,y:t.clientY},srcEvent:t,pointerType:"mouse",target:t.target})},t.addEventListener("contextmenu",this.handleEvent)}destroy(){this.element.removeEventListener("contextmenu",this.handleEvent)}enableEventType(t,e){"contextmenu"===t&&(this.options.enable=e)}}const Et={pointerdown:1,pointermove:2,pointerup:4,mousedown:1,mousemove:2,mouseup:4};function St(t){const e=Et[t.srcEvent.type];if(!e)return null;const{buttons:i,button:s}=t.srcEvent;let n=!1,r=!1,o=!1;return 2===e?(n=Boolean(1&i),r=Boolean(4&i),o=Boolean(2&i)):(n=0===s,r=1===s,o=2===s),{leftButton:n,middleButton:r,rightButton:o}}function Mt(t,e){const i=t.center;if(!i)return null;const s=e.getBoundingClientRect(),n=s.width/e.offsetWidth||1,r=s.height/e.offsetHeight||1;return{center:i,offsetCenter:{x:(i.x-s.left-e.clientLeft)/n,y:(i.y-s.top-e.clientTop)/r}}}const Ct={srcElement:"root",priority:0};class xt{constructor(t,e){this.handleEvent=t=>{if(this.isEmpty())return;const e=this._normalizeEvent(t);let i=t.srcEvent.target;for(;i&&i!==e.rootElement;){if(this._emit(e,i),e.handled)return;i=i.parentNode}this._emit(e,"root")},this.eventManager=t,this.recognizerName=e,this.handlers=[],this.handlersByElement=/* @__PURE__ */new Map,this._active=!1}isEmpty(){return!this._active}add(t,e,i,s=!1,n=!1){const{handlers:r,handlersByElement:o}=this,a={...Ct,...i};let h=o.get(a.srcElement);h||(h=[],o.set(a.srcElement,h));const c={type:t,handler:e,srcElement:a.srcElement,priority:a.priority};s&&(c.once=!0),n&&(c.passive=!0),r.push(c),this._active=this._active||!c.passive;let l=h.length-1;for(;l>=0&&!(h[l].priority>=c.priority);)l--;h.splice(l+1,0,c)}remove(t,e){const{handlers:i,handlersByElement:s}=this;for(let n=i.length-1;n>=0;n--){const r=i[n];if(r.type===t&&r.handler===e){i.splice(n,1);const t=s.get(r.srcElement);t.splice(t.indexOf(r),1),0===t.length&&s.delete(r.srcElement)}}this._active=i.some(t=>!t.passive)}_emit(t,e){const i=this.handlersByElement.get(e);if(i){let e=!1;const s=()=>{t.handled=!0},n=()=>{t.handled=!0,e=!0},r=[];for(let o=0;o<i.length;o++){const{type:a,handler:h,once:c}=i[o];if(h({...t,type:a,stopPropagation:s,stopImmediatePropagation:n}),c&&r.push(i[o]),e)break}for(let t=0;t<r.length;t++){const{type:e,handler:i}=r[t];this.remove(e,i)}}}_normalizeEvent(t){const e=this.eventManager.getElement();return{...t,...St(t),...Mt(t,e),preventDefault:()=>{t.srcEvent.preventDefault()},stopImmediatePropagation:null,stopPropagation:null,handled:!1,rootElement:e}}}function Rt(t){if("recognizer"in t)return t;let e;const i=Array.isArray(t)?[...t]:[t];if("function"==typeof i[0]){e=new(i.shift())(i.shift()||{})}else e=i.shift();return{recognizer:e,recognizeWith:"string"==typeof i[0]?[i[0]]:i[0],requireFailure:"string"==typeof i[1]?[i[1]]:i[1]}}class Lt{constructor(t=null,e={}){if(this._onBasicInput=t=>{this.manager.emit(t.srcEvent.type,t)},this._onOtherEvent=t=>{this.manager.emit(t.type,t)},this.options={recognizers:[],events:{},touchAction:"compute",tabIndex:0,cssProps:{},...e},this.events=/* @__PURE__ */new Map,this.element=t,t){this.manager=new vt(t,this.options);for(const t of this.options.recognizers){const{recognizer:e,recognizeWith:i,requireFailure:s}=Rt(t);this.manager.add(e),i&&e.recognizeWith(i),s&&e.requireFailure(s)}this.manager.on("hammer.input",this._onBasicInput),this.wheelInput=new v(t,this._onOtherEvent,{enable:!1}),this.moveInput=new yt(t,this._onOtherEvent,{enable:!1}),this.keyInput=new Pt(t,this._onOtherEvent,{enable:!1,tabIndex:e.tabIndex}),this.contextmenuInput=new kt(t,this._onOtherEvent,{enable:!1}),this.on(this.options.events)}}getElement(){return this.element}destroy(){this.element&&(this.wheelInput.destroy(),this.moveInput.destroy(),this.keyInput.destroy(),this.contextmenuInput.destroy(),this.manager.destroy())}on(t,e,i){this._addEventHandler(t,e,i,!1)}once(t,e,i){this._addEventHandler(t,e,i,!0)}watch(t,e,i){this._addEventHandler(t,e,i,!1,!0)}off(t,e){this._removeEventHandler(t,e)}_toggleRecognizer(t,e){const{manager:i}=this;if(!i)return;const s=i.get(t);s&&(s.set({enable:e}),i.touchAction.update()),this.wheelInput?.enableEventType(t,e),this.moveInput?.enableEventType(t,e),this.keyInput?.enableEventType(t,e),this.contextmenuInput?.enableEventType(t,e)}_addEventHandler(t,e,i,s,n){if("string"!=typeof t){i=e;for(const[e,r]of Object.entries(t))this._addEventHandler(e,r,i,s,n);return}const{manager:r,events:o}=this;if(!r)return;let a=o.get(t);if(!a){const e=this._getRecognizerName(t)||t;a=new xt(this,e),o.set(t,a),r&&r.on(t,a.handleEvent)}a.add(t,e,i,s,n),a.isEmpty()||this._toggleRecognizer(a.recognizerName,!0)}_removeEventHandler(t,e){if("string"!=typeof t){for(const[e,i]of Object.entries(t))this._removeEventHandler(e,i);return}const{events:i}=this,s=i.get(t);if(s&&(s.remove(t,e),s.isEmpty())){const{recognizerName:t}=s;let e=!1;for(const s of i.values())if(s.recognizerName===t&&!s.isEmpty()){e=!0;break}e||this._toggleRecognizer(t,!1)}}_getRecognizerName(t){return this.manager.recognizers.find(e=>e.getEventNames().includes(t))?.options.event}}const Tt="\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",At=`\n${Tt}\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`,It=`\n${Tt}\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`,Vt=k(function({viewport:t,center:e}){return new E(t.viewProjectionMatrix).invert().transform(e)}),Dt=k(function({viewport:t,shadowMatrices:e}){const i=[],s=t.pixelUnprojectionMatrix,n=t.isGeospatial?void 0:1,r=[[0,0,n],[t.width,0,n],[0,t.height,n],[t.width,t.height,n],[0,0,-1],[t.width,0,-1],[0,t.height,-1],[t.width,t.height,-1]].map(t=>function(t,e){const[i,s,n]=t,r=S([i,s,n],e);if(Number.isFinite(n))return r;return[r[0],r[1],0]}(t,s));for(const o of e){const e=o.clone().translate(new y(t.center).negate()),s=r.map(t=>e.transform(t)),n=(new E).ortho({left:Math.min(...s.map(t=>t[0])),right:Math.max(...s.map(t=>t[0])),bottom:Math.min(...s.map(t=>t[1])),top:Math.max(...s.map(t=>t[1])),near:Math.min(...s.map(t=>-t[2])),far:Math.max(...s.map(t=>-t[2]))});i.push(n.multiplyRight(o))}return i}),zt=[0,0,0,1],Ft=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0];const Ot={name:"shadow",dependencies:[_],vs:At,fs:It,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(t){const{shadowEnabled:e=!0,project:i}=t;if(!(e&&i&&t.shadowMatrices&&t.shadowMatrices.length))return{drawShadowMap:!1,useShadowMap:!1,shadow_uShadowMap0:t.dummyShadowMap,shadow_uShadowMap1:t.dummyShadowMap};const s=_.getUniforms(i),n=Vt({viewport:i.viewport,center:s.center}),r=[],o=Dt({shadowMatrices:t.shadowMatrices,viewport:i.viewport}).slice();for(let h=0;h<t.shadowMatrices.length;h++){const t=o[h],e=t.clone().translate(new y(i.viewport.center).negate());s.coordinateSystem===b("lnglat")&&s.projectionMode===P.WEB_MERCATOR?(o[h]=e,r[h]=n):(o[h]=t.clone().multiplyRight(Ft),r[h]=e.transform(n))}const a={drawShadowMap:Boolean(t.drawToShadowMap),useShadowMap:!!t.shadowMaps&&t.shadowMaps.length>0,color:t.shadowColor||zt,lightId:t.shadowLightId||0,lightCount:t.shadowMatrices.length,shadow_uShadowMap0:t.dummyShadowMap,shadow_uShadowMap1:t.dummyShadowMap};for(let h=0;h<o.length;h++)a[`viewProjectionMatrix${h}`]=o[h],a[`projectCenter${h}`]=r[h];for(let h=0;h<2;h++)a[`shadow_uShadowMap${h}`]=t.shadowMaps&&t.shadowMaps[h]||t.dummyShadowMap;return a},uniformTypes:{drawShadowMap:"f32",useShadowMap:"f32",color:"vec4<f32>",lightId:"i32",lightCount:"f32",viewProjectionMatrix0:"mat4x4<f32>",viewProjectionMatrix1:"mat4x4<f32>",projectCenter0:"vec4<f32>",projectCenter1:"vec4<f32>"}},jt=[M],Bt=["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)"],Nt=[];function Ut(t){const e=C.getDefaultShaderAssembler();for(const s of jt)e.addDefaultModule(s);e._hookFunctions.length=0;const i="glsl"===t?Bt:Nt;for(const s of i)e.addShaderHook(s);return e}const Wt=[255,255,255],Gt=1;let Zt=0;class Ht{constructor(t={}){this.type="ambient";const{color:e=Wt}=t,{intensity:i=Gt}=t;this.id=t.id||"ambient-"+Zt++,this.color=e,this.intensity=i}}const qt=[255,255,255],$t=1,Xt=[0,0,-1];let Yt=0;class Kt{constructor(t={}){this.type="directional";const{color:e=qt}=t,{intensity:i=$t}=t,{direction:s=Xt}=t,{_shadow:n=!1}=t;this.id=t.id||"directional-"+Yt++,this.color=e,this.intensity=i,this.type="directional",this.direction=new y(s).normalize().toArray(),this.shadow=n}getProjectedLight(t){return this}}class Jt{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(){}}const Qt={depthWriteEnabled:!0,depthCompare:"less-equal",blendColorOperation:"add",blendColorSrcFactor:"src-alpha",blendColorDstFactor:"one",blendAlphaOperation:"add",blendAlphaSrcFactor:"one-minus-dst-alpha",blendAlphaDstFactor:"one"};class te extends Jt{constructor(){super(...arguments),this._lastRenderIndex=-1}render(t){this._render(t)}_render(t){const e=this.device.canvasContext,i=t.target??e.getCurrentFramebuffer(),[s,n]=e.getDrawingBufferSize(),r=t.clearCanvas??!0,o=t.clearColor??(!!r&&[0,0,0,0]),a=!!r&&1,h=!!r&&0,c=t.colorMask??15,l={viewport:[0,0,s,n]};t.colorMask&&(l.colorMask=c),t.scissorRect&&(l.scissorRect=t.scissorRect);const d=this.device.beginRenderPass({framebuffer:i,parameters:l,clearColor:o,clearDepth:a,clearStencil:h});try{return this._drawLayers(d,t)}finally{d.end(),this.device.submit()}}_drawLayers(t,e){const{target:i,shaderModuleProps:s,viewports:n,views:r,onViewportActive:o,clearStack:a=!0}=e;e.pass=e.pass||"unknown",a&&(this._lastRenderIndex=-1);const h=[];for(const c of n){const n=r&&r[c.id];o?.(c);const a=this._getDrawLayerParams(c,e),l=c.subViewports||[c];for(const r of l){const o=this._drawLayersInViewport(t,{target:i,shaderModuleProps:s,viewport:r,view:n,pass:e.pass,layers:e.layers},a);h.push(o)}}return h}_getDrawLayerParams(t,{layers:e,pass:i,isPicking:s=!1,layerFilter:n,cullRect:r,effects:o,shaderModuleProps:a},h=!1){const c=[],l=ee(this._lastRenderIndex+1),d={layer:e[0],viewport:t,isPicking:s,renderPass:i,cullRect:r},p={};for(let u=0;u<e.length;u++){const s=e[u],r=this._shouldDrawLayer(s,d,n,p),g={shouldDrawLayer:r};if(r&&!h){g.shouldDrawLayer=!0,g.layerRenderIndex=l(s,r),g.shaderModuleProps=this._getShaderModuleProps(s,o,i,a);const e="webgpu"===s.context.device.type?Qt:null;g.layerParameters={...e,...s.context.deck?.props.parameters,...this.getLayerParameters(s,u,t)}}c[u]=g}return c}_drawLayersInViewport(t,{layers:e,shaderModuleProps:i,pass:s,target:n,viewport:r,view:o},a){const h=function(t,{shaderModuleProps:e,target:i,viewport:s}){const n=e?.project?.devicePixelRatio??t.canvasContext.cssToDeviceRatio(),[,r]=t.canvasContext.getDrawingBufferSize(),o=i?i.height:r,a=s;return[a.x*n,o-(a.y+a.height)*n,a.width*n,a.height*n]}(this.device,{shaderModuleProps:i,target:n,viewport:r});if(o){const{clear:t,clearColor:e,clearDepth:i,clearStencil:s}=o.props;if(t){let t=[0,0,0,0],r=1,o=0;Array.isArray(e)?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:h,scissorRect:h},clearColor:t,clearDepth:r,clearStencil:o}).end()}}const c={totalCount:e.length,visibleCount:0,compositeCount:0,pickableCount:0};t.setParameters({viewport:h});for(let d=0;d<e.length;d++){const i=e[d],n=a[d],{shouldDrawLayer:o}=n;if(o&&i.props.pickable&&c.pickableCount++,i.isComposite&&c.compositeCount++,i.isDrawable&&n.shouldDrawLayer){const{layerRenderIndex:e,shaderModuleProps:o,layerParameters:a}=n;c.visibleCount++,this._lastRenderIndex=Math.max(this._lastRenderIndex,e),o.project&&(o.project.viewport=r),i.context.renderPass=t;try{i._drawLayer({renderPass:t,shaderModuleProps:o,uniforms:{layerIndex:e},parameters:a})}catch(l){i.raiseError(l,`drawing ${i} to ${s}`)}}}return c}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){const n=this.device.canvasContext.cssToDeviceRatio(),r=t.internalState?.propsInTransition||t.props,o={layer:r,picking:{isActive:!1},project:{viewport:t.context.viewport,devicePixelRatio:n,modelMatrix:r.modelMatrix,coordinateSystem:r.coordinateSystem,coordinateOrigin:r.coordinateOrigin,autoWrapLongitude:t.wrapLongitude}};if(e)for(const a of e)ie(o,a.getShaderModuleProps?.(t,o));return ie(o,this.getShaderModuleProps(t,e,o),s)}}function ee(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]||ee(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 ie(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}class se extends te{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"}}shouldDrawLayer(t){return!1!==t.props.shadowEnabled}getShaderModuleProps(t,e,i){return{shadow:{project:i.project,drawToShadowMap:!0}}}}const ne={color:[255,255,255],intensity:1},re=[{color:[255,255,255],intensity:1,direction:[-1,3,-1]},{color:[255,255,255],intensity:.9,direction:[1,-8,-2.5]}],oe=[0,0,0,200/255];class ae{constructor(t={}){this.id="lighting-effect",this.shadowColor=oe,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(Ot),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.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(Ot))}_calculateMatrices(){const t=[];for(const e of this.directionalLights){const i=(new E).lookAt({eye:new y(e.direction).negate()});t.push(i)}return t}_createShadowPasses(t){for(let e=0;e<this.directionalLights.length;e++){const i=new se(t);this.shadowPasses[e]=i}}_applyDefaultLights(){const{ambientLight:t,pointLights:e,directionalLights:i}=this;t||0!==e.length||0!==i.length||(this.ambientLight=new Ht(ne),this.directionalLights.push(new Kt(re[0]),new Kt(re[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}}let he=1,ce=1;class le{time=0;channels=/* @__PURE__ */new Map;animations=/* @__PURE__ */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=he++,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=ce++;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)}}let de=0;class pe{static defaultAnimationLoopProps={device:null,onAddHTML:()=>"",onInitialize:async()=>null,onRender:()=>{},onFinalize:()=>{},onError:t=>{},stats:void 0,autoResizeViewport:!1};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(t){if(this.props={...pe.defaultAnimationLoopProps,...t},!(t=this.props).device)throw new Error("No device provided");this.stats=t.stats||new x({id:"animation-loop-"+de++}),this.sharedStats=at.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:t.autoResizeViewport}),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.props.onError(t),this._error=t}setNeedsRedraw(t){return this._needsRedraw=this._needsRedraw||t,this}needsRedraw(){const t=this._needsRedraw;return this._needsRedraw=!1,t}setProps(t){return"autoResizeViewport"in t&&(this.props.autoResizeViewport=t.autoResizeViewport||!1),this}async start(){if(this._running)return this;this._running=!0;try{let t;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?(!1!==t&&(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(){return this._running&&(this.animationProps&&!this._error&&this.props.onFinalize(this.animationProps),this._cancelAnimationFrame(),this._nextFramePromise=null,this._resolveNextFrame=null,this._running=!1,this._lastFrameTime=0),this}redraw(t){return this.device?.isLost||this._error||(this._beginFrameTimers(t),this._setupFrame(),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=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)}(this._animationFrame.bind(this)))}_cancelAnimationFrame(){null!==this._animationFrameId&&(!function(t){const e="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame:null;e?e.call(window,t):clearTimeout(t)}(this._animationFrameId),this._animationFrameId=null)}_animationFrame(t){this._running&&(this.redraw(t),this._requestAnimationFrame())}_renderFrame(t){this.display?this.display._renderFrame(t):(this.props.onRender(this._getAnimationProps()),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,_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}}const ue={blendColorOperation:"add",blendColorSrcFactor:"one",blendColorDstFactor:"zero",blendAlphaOperation:"add",blendAlphaSrcFactor:"constant",blendAlphaDstFactor:"zero"};class ge extends te{constructor(){super(...arguments),this._colorEncoderState=null}render(t){if("pickingFBO"in t)return this._drawPickingBuffer(t);return{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:l,effects:d,pass:p="picking",pickZ:u,shaderModuleProps:g,clearColor:m}){this.pickZ=u;const f=this._resetColorEncoder(u),w=[o,a,h,c],v=super._render({target:r,layers:t,layerFilter:e,views:i,viewports:s,onViewportActive:n,cullRect:l,effects:d?.filter(t=>t.useInPicking),pass:p,isPicking:!0,shaderModuleProps:g,clearColor:m??[0,0,0,0],colorMask:15,scissorRect:w});this._colorEncoderState=null;return{decodePickingColor:f&&fe.bind(null,f),stats:v}}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},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,ue),s.blend=!0,"webgpu"===this.device.type?s.blendConstant=me(this._colorEncoderState,t,i):s.blendColor=me(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:/* @__PURE__ */new Map,byAlpha:[]},this._colorEncoderState}}function me(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.warn("Too many pickable layers, only picking the first 255")(),o=0)),[0,0,0,o/255]}function fe(t,e){const i=t.byAlpha[e[3]];return i&&{pickedLayer:i.layer,pickedViewports:i.viewports,pickedObjectIndex:i.layer.decodePickingColor(e)}}class we{constructor(t,e,i){this._loadCount=0,this._subscribers=/* @__PURE__ */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(t,e){if(t===this._data&&!e)return;this._data=t;const i=++this._loadCount;let s=t;"string"==typeof t&&(s=R(t)),s instanceof Promise?(this.isLoaded=!1,this._loader=s.then(t=>{this._loadCount===i&&(this.isLoaded=!0,this._error=void 0,this._content=t)}).catch(t=>{this._loadCount===i&&(this.isLoaded=!0,this._error=t||!0)})):(this.isLoaded=!0,this._error=void 0,this._content=t);for(const n of this._subscribers)n.onChange(this.getData())}}class ve{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 we(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])}}}class _e{constructor(t,e){this._lastRenderedLayers=[],this._needsRedraw=!1,this._needsUpdate=!1,this._nextLayers=null,this._debug=!1,this._defaultShaderModulesChanged=!1,this.activateViewport=t=>{L("layerManager.activateViewport",this,t),t&&(this.context.viewport=t)};const{deck:i,stats:s,viewport:n,timeline:r}=e||{};this.layers=[],this.resourceManager=new ve({device:t,protocol:"deck://"}),this.context={mousePosition:null,userData:{},layerManager:this,device:t,gl:t?.gl,deck:i,shaderAssembler:Ut(t?.info?.shadingLanguage||"glsl"),defaultShaderModules:[ut],renderPass:void 0,stats:s||new x({id:"deck.gl"}),viewport:n||new T({id:"DEFAULT-INITIAL-VIEWPORT"}),timeline:r||new le,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(t,e){L("layerManager.setLayers",this,e,t),this._lastRenderedLayers=t;const i=A(t,Boolean);for(const s of i)s.context=this.context;this._updateLayers(this.layers,i)}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.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.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(t){try{t._initialize(),t.lifecycle=I.INITIALIZED}catch(e){this._handleError("initialization",e,t)}}_transferLayerState(t,e){e._transferState(t),e.lifecycle=I.MATCHED,e!==t&&(t.lifecycle=I.AWAITING_GC)}_updateLayer(t){try{t._update()}catch(e){this._handleError("update",e,t)}}_finalizeLayer(t){this._needsRedraw=this._needsRedraw||`finalized ${t}`,t.lifecycle=I.AWAITING_FINALIZATION;try{t._finalize(),t.lifecycle=I.FINALIZED}catch(e){this._handleError("finalization",e,t)}}}class ye{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._eventCallbacks={onViewStateChange:t.onViewStateChange,onInteractionStateChange:t.onInteractionStateChange},this._pickPosition=t.pickPosition,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=>e.containsPixel(t)):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]}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),this._isUpdating||this._update()}_update(){this._isUpdating=!0,this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports()),this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports()),this._isUpdating=!1}_setSize(t,e){t===this.width&&e===this.height||(this.width=t,this.height=e,this.setNeedsUpdate("Size changed"))}_setViews(t){t=A(t,Boolean);this._diffViews(t,this.views)&&this.setNeedsUpdate("views changed"),this.views=t}_setViewState(e){if(e){!V(e,this.viewState,3)&&this.setNeedsUpdate("viewState changed"),this.viewState=e}else t.warn("missing `viewState` or `initialViewState`")()}_createController(t,e){return new(0,e.type)({timeline:this.timeline,eventManager:this._eventManager,onViewStateChange:this._eventCallbacks.onViewStateChange,onStateChange:this._eventCallbacks.onInteractionStateChange,makeViewport:e=>this.getView(t.id)?.makeViewport({viewState:e,width:this.width,height:this.height}),pickPosition:this._pickPosition})}_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,e=this.controllers;this._viewports=[],this.controllers={};let i=!1;for(let s=t.length;s--;){const n=t[s],r=this.getViewState(n),o=n.makeViewport({viewState:r,width:this.width,height:this.height});let a=e[n.id];const h=Boolean(n.controller);h&&!a&&(i=!0),!i&&h||!a||(a.finalize(),a=null),this.controllers[n.id]=this._updateController(n,r,o,a),o&&this._viewports.unshift(o)}for(const s in e){const t=e[s];t&&!this.controllers[s]&&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]))}}const be=/^(?:\d+\.?\d*|\.\d+)$/;function Pe(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(Me(s)||"."===s){const n=i;let r="."===s;for(i++;i<t.length;){const e=t[i];if(Me(e))i++;else{if("."!==e||r)break;r=!0,i++}}const o=t.slice(n,i);if(!be.test(o))throw new Error("Invalid number token");e.push({type:"number",value:parseFloat(o)});continue}if(Ce(s)){const s=i;for(;i<t.length&&Ce(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 Se(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 ke(t,e){switch(t.type){case"literal":return t.value;case"percentage":return Math.round(t.value*e);case"binary":const i=ke(t.left,e),s=ke(t.right,e);return"+"===t.operator?i+s:i-s;default:throw new Error("Unknown layout expression type")}}function Ee(t,e){return ke(t,e)}class Se{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(;xe(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){this.index++;return{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 Me(t){return t>="0"&&t<="9"}function Ce(t){return t>="a"&&t<="z"||t>="A"&&t<="Z"}function xe(t){return Boolean(t&&"symbol"===t.type&&("+"===t.value||"-"===t.value))}function Re(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}class Le{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=Pe(i),this._y=Pe(s),this._width=Pe(n),this._height=Pe(r),this._padding=o&&{left:Pe(o.left||0),right:Pe(o.right||0),top:Pe(o.top||0),bottom:Pe(o.bottom||0)},this.equals=this.equals.bind(this),Object.seal(this)}equals(t){return this===t||this.constructor===t.constructor&&V(this.props,t.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});if(!s.height||!s.width)return null;return new(this.getViewportType(i))({...i,...this.props,...s})}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]=Re(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:Ee(this._x,t),y:Ee(this._y,e),width:Ee(this._width,t),height:Ee(this._height,e)};return this._padding&&(i.padding={left:Ee(this._padding.left,t),top:Ee(this._padding.top,e),right:Ee(this._padding.right,t),bottom:Ee(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}}const Te=()=>{},Ae=2,Ie=3,Ve=t=>t,De=1;class ze{constructor(t){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}).getViewportProps(),this.onViewStateChange({viewState:this.propsInTransition,oldViewState:this.props})},this.getControllerState=t.getControllerState,this.propsInTransition=null,this.transition=new D(t.timeline),this.onViewStateChange=t.onViewStateChange||Te,this.onStateChange=t.onStateChange||Te}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===Ae?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){if(this.transition.inProgress){return this.transition.settings.interruption===Ie||this._isUpdateDueToCurrentTransition(e)}return!this._isTransitionEnabled(e)||e.transitionInterpolator.arePropsEqual(t,e)}_triggerTransition(t,e){const i=this.getControllerState(t),s=this.getControllerState(e).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||Ve,interpolator:n,interruption:e.transitionInterruption||De,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)}}}class Fe{constructor(t){const{compare:e,extract:i,required:s}=t;this._propsToCompare=e,this._propsToExtract=i||e,this._requiredProps=s}arePropsEqual(t,e){for(const i of this._propsToCompare)if(!(i in t)||!(i in e)||!z(t[i],e[i]))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(t){this._requiredProps&&this._requiredProps.forEach(e=>{const i=t[e];F(Number.isFinite(i)||Array.isArray(i),`${e} is required for transition`)})}}const Oe=["longitude","latitude","zoom","bearing","pitch"],je=["longitude","latitude","zoom"];class Be extends Fe{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:Oe,required:je},super(i.transitionProps),this.opts=i}initializeProps(e,i){const s=super.initializeProps(e,i),{makeViewport:n,around:r}=this.opts;if(n&&r){if(n(e)instanceof O)t.warn("around not supported in GlobeView")();else{const t=n(e),o=n(i),a=t.unproject(r);s.start.around=r,Object.assign(s.end,{around:o.project(a),aroundPosition:a,width:i.width,height:i.height})}}return s}interpolateProps(t,e,i){const s={};for(const n of this._propsToExtract)s[n]=j(t[n]||0,e[n]||0,i);if(e.aroundPosition&&this.opts.makeViewport){const n=this.opts.makeViewport({...e,...s});Object.assign(s,n.panByPosition(e.aroundPosition,j(t.around,e.around,i)))}return s}}const Ne={transitionDuration:0},Ue=t=>1-(1-t)*(1-t),We=["wheel"],Ge=["panstart","panmove","panend"],Ze=["pinchstart","pinchmove","pinchend"],He=["multipanstart","multipanmove","multipanend"],qe=["dblclick"],$e=["keydown"],Xe={};class Ye{constructor(t){this.state={},this._events={},this._interactionState={isDragging:!1},this._customEvents=[],this._eventStartBlocked=null,this._panMove=!1,this.invertPan=!1,this.dragMode="rotate",this.inertia=0,this.scrollZoom=!0,this.dragPan=!0,this.dragRotate=!0,this.doubleClickZoom=!0,this.touchZoom=!0,this.touchRotate=!1,this.keyboard=!0,this.transitionManager=new ze({...t,getControllerState:t=>new this.ControllerState(t),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._onPinchStart(t);case"pinchmove":return this._onPinch(t);case"pinchend":return 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"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]}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(t){t.dragMode&&(this.dragMode=t.dragMode);const e=this.props;this.props=t,"transitionInterpolator"in t||(t.transitionInterpolator=this._getTransitionProps().transitionInterpolator),this.transitionManager.processViewStateChange(t);const{inertia:i}=t;this.inertia=Number.isFinite(i)?i:!0===i?300:0;const{scrollZoom:s=!0,dragPan:n=!0,dragRotate:r=!0,doubleClickZoom:o=!0,touchZoom:a=!0,touchRotate:h=!1,keyboard:c=!0}=t,l=Boolean(this.onViewStateChange);this.toggleEvents(We,l&&s),this.toggleEvents(Ge,l),this.toggleEvents(Ze,l&&(a||h)),this.toggleEvents(He,l&&h),this.toggleEvents(qe,l&&o),this.toggleEvents($e,l&&c),this.scrollZoom=s,this.dragPan=n,this.dragRotate=r,this.doubleClickZoom=o,this.touchZoom=a,this.touchRotate=h,this.keyboard=c;if((!e||e.height!==t.height||e.width!==t.width||e.maxBounds!==t.maxBounds)&&t.maxBounds){const e=new this.ControllerState({...t,makeViewport:this.makeViewport}),i=e.getViewportProps();Object.keys(i).some(e=>!V(i[e],t[e],1))&&this.updateViewport(e)}}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)}_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=this.controllerState[i?"panStart":"rotateStart"]({pos:e});return this._panMove=i,this.updateViewport(s,Ne,{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});return this.updateViewport(i,Ne,{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:Ue},{isDragging:!1,isPanning:!0})}else{const t=this.controllerState.panEnd();this.updateViewport(t,null,{isDragging:!1,isPanning:!1})}return!0}_onPanRotate(t){if(!this.dragRotate)return!1;const e=this.getCenter(t),i=this.controllerState.rotate({pos:e});return this.updateViewport(i,Ne,{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:Ue},{isDragging:!1,isRotating:!0})}else{const t=this.controllerState.rotateEnd();this.updateViewport(t,null,{isDragging:!1,isRotating:!1})}return!0}_onWheel(t){if(!this.scrollZoom)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=s?{...this._getTransitionProps({around:e}),transitionDuration:250}:Ne,a=this.controllerState.zoom({pos:e,scale:r});return this.updateViewport(a,o,{isZooming:!0,isPanning:!0}),s||this._setInteractionState({isZooming:!1,isPanning:!1}),!0}_onMultiPanStart(t){const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;const i=this.controllerState.rotateStart({pos:e});return this.updateViewport(i,Ne,{isDragging:!0}),!0}_onMultiPan(t){if(!this.touchRotate)return!1;if(!this.isDragging())return!1;const e=this.getCenter(t);e[0]-=t.deltaX;const i=this.controllerState.rotate({pos:e});return this.updateViewport(i,Ne,{isDragging:!0,isRotating:!0}),!0}_onMultiPanEnd(t){if(!this.isDragging())return!1;const{inertia:e}=this;if(this.touchRotate&&e&&t.velocityY){const i=this.getCenter(t),s=[i[0],i[1]+=t.velocityY*e/2],n=this.controllerState.rotate({pos:s});this.updateViewport(n,{...this._getTransitionProps(),transitionDuration:e,transitionEasing:Ue},{isDragging:!1,isRotating:!0}),this.blockEvents(e)}else{const t=this.controllerState.rotateEnd();this.updateViewport(t,null,{isDragging:!1,isRotating:!1})}return!0}_onPinchStart(t){const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;const i=this.controllerState.zoomStart({pos:e}).rotateStart({pos:e});return Xe._startPinchRotation=t.rotation,Xe._lastPinchEvent=t,this.updateViewport(i,Ne,{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:s,scale:i})}if(this.touchRotate){const{rotation:i}=t;e=e.rotate({deltaAngleX:Xe._startPinchRotation-i})}return this.updateViewport(e,Ne,{isDragging:!0,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:this.touchRotate}),Xe._lastPinchEvent=t,!0}_onPinchEnd(t){if(!this.isDragging())return!1;const{inertia:e}=this,{_lastPinchEvent:i}=Xe;if(this.touchZoom&&e&&i&&t.scale!==i.scale){const s=this.getCenter(t);let n=this.controllerState.rotateEnd();const r=Math.log2(t.scale),o=(r-Math.log2(i.scale))/(t.deltaTime-i.deltaTime),a=Math.pow(2,r+o*e/2);n=n.zoom({pos:s,scale:a}).zoomEnd(),this.updateViewport(n,{...this._getTransitionProps({around:s}),transitionDuration:e,transitionEasing:Ue},{isDragging:!1,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:!1}),this.blockEvents(e)}else{const t=this.controllerState.zoomEnd().rotateEnd();this.updateViewport(t,null,{isDragging:!1,isPanning:!1,isZooming:!1,isRotating:!1})}return Xe._startPinchRotation=null,Xe._lastPinchEvent=null,!0}_onDoubleClick(t){if(!this.doubleClickZoom)return!1;const e=this.getCenter(t);if(!this.isPointInBounds(e,t))return!1;const i=this.isFunctionKeyPressed(t),s=this.controllerState.zoom({pos:e,scale:i?.5:2});return this.updateViewport(s,this._getTransitionProps({around:e}),{isZooming:!0,isPanning:!0}),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 Be({...t,...e.transitionInterpolator.opts,makeViewport:this.controllerState.makeViewport})}:e:Ne}}class Ke{constructor(t,e,i){this.makeViewport=i,this._viewportProps=this.applyConstraints(t),this._state=e}getViewportProps(){return this._viewportProps}getState(){return this._state}}const Je=[[-1/0,-90],[1/0,90]];function Qe([t,e]){if(Math.abs(e)>90&&(e=90*Math.sign(e)),Number.isFinite(t)){const[i,s]=W([t,e]);return[i,N(s,0,512)]}const[,i]=W([0,e]);return[t,N(i,0,512)]}class ti extends Ke{constructor(t){const{width:e,height:i,latitude:s,longitude:n,zoom:r,bearing:o=0,pitch:a=0,altitude:h=1.5,position:c=[0,0,0],maxZoom:l=20,minZoom:d=0,maxPitch:p=60,minPitch:u=0,startPanLngLat:g,startZoomLngLat:m,startRotatePos:f,startRotateLngLat:w,startBearing:v,startPitch:_,startZoom:y,normalize:b=!0}=t;F(Number.isFinite(n)),F(Number.isFinite(s)),F(Number.isFinite(r));super({width:e,height:i,latitude:s,longitude:n,zoom:r,bearing:o,pitch:a,altitude:h,maxZoom:l,minZoom:d,maxPitch:p,minPitch:u,normalize:b,position:c,maxBounds:t.maxBounds||(b?Je:null)},{startPanLngLat:g,startZoomLngLat:m,startRotatePos:f,startRotateLngLat:w,startBearing:v,startPitch:_,startZoom:y},t.makeViewport),this.getAltitude=t.getAltitude}panStart({pos:t}){return this._getUpdatedState({startPanLngLat:this._unproject(t)})}pan({pos:t,startPos:e}){const i=this.getState().startPanLngLat||this._unproject(e);if(!i)return this;const s=this.makeViewport(this.getViewportProps()).panByPosition(i,t);return this._getUpdatedState(s)}panEnd(){return this._getUpdatedState({startPanLngLat:null})}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}){return this._getUpdatedState({startZoomLngLat:this._unproject(t),startZoom:this.getViewportProps().zoom})}zoom({pos:t,startPos:e,scale:i}){let{startZoom:s,startZoomLngLat:n}=this.getState();if(n||(s=this.getViewportProps().zoom,n=this._unproject(e)||this._unproject(t)),!n)return this;const r=this._constrainZoom(s+Math.log2(i)),o=this.makeViewport({...this.getViewportProps(),zoom:r});return this._getUpdatedState({zoom:r,...o.panByPosition(n,t)})}zoomEnd(){return this._getUpdatedState({startZoomLngLat:null,startZoom:null})}zoomIn(t=2){return this._zoomFromCenter(t)}zoomOut(t=2){return this._zoomFromCenter(1/t)}moveLeft(t=100){return this._panFromCenter([t,0])}moveRight(t=100){return this._panFromCenter([-t,0])}moveUp(t=100){return this._panFromCenter([0,t])}moveDown(t=100){return this._panFromCenter([0,-t])}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(t){const{maxPitch:e,minPitch:i,pitch:s,longitude:n,bearing:r,normalize:o,maxBounds:a}=t;if(o&&((n<-180||n>180)&&(t.longitude=B(n+180,360)-180),(r<-180||r>180)&&(t.bearing=B(r+180,360)-180)),t.pitch=N(s,i,e),t.zoom=this._constrainZoom(t.zoom,t),a){const e=Qe(a[0]),i=Qe(a[1]),s=2**t.zoom,n=t.width/2/s,r=t.height/2/s,[o,h]=U([e[0]+n,e[1]+r]),[c,l]=U([i[0]-n,i[1]-r]);t.longitude=N(t.longitude,o,c),t.latitude=N(t.latitude,h,l)}return t}_constrainZoom(t,e){e||(e=this.getViewportProps());const{maxZoom:i,maxBounds:s}=e,n=null!==s&&e.width>0&&e.height>0;let{minZoom:r}=e;if(n){const t=Qe(s[0]),n=Qe(s[1]),o=n[0]-t[0],a=n[1]-t[1];Number.isFinite(o)&&o>0&&(r=Math.max(r,Math.log2(e.width/o))),Number.isFinite(a)&&a>0&&(r=Math.max(r,Math.log2(e.height/a))),r>i&&(r=i)}return N(t,r,i)}_zoomFromCenter(t){const{width:e,height:i}=this.getViewportProps();return this.zoom({pos:[e/2,i/2],scale:t})}_panFromCenter(t){const{width:e,height:i}=this.getViewportProps();return this.pan({startPos:[e/2,i/2],pos:[e/2+t[0],i/2+t[1]]})}_getUpdatedState(t){return new this.constructor({makeViewport:this.makeViewport,...this.getViewportProps(),...this.getState(),...t})}_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(t,e,i,s){const n=t[0]-e[0],r=t[1]-e[1],o=t[1],a=e[1],{width:h,height:c}=this.getViewportProps(),l=n/h;let d=0;r>0?Math.abs(c-a)>5&&(d=r/(a-c)*1.2):r<0&&a>5&&(d=1-o/a),d=N(d,-1,1);const{minPitch:p,maxPitch:u}=this.getViewportProps();let g=i;return d>0?g=i+d*(u-i):d<0&&(g=i-d*(p-i)),{pitch:g,bearing:s+180*l}}}class ei extends Ye{constructor(){super(...arguments),this.ControllerState=ti,this.transition={transitionDuration:300,transitionInterpolator:new Be({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:Je),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)}}class ii extends Le{constructor(t={}){super(t)}getViewportType(){return G}get ControllerType(){return ei}}ii.displayName="MapView";const si=new ae;class ni{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(t){"effects"in t&&(V(t.effects,this.effects,1)||this._setEffects(t.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 ae)||this._resolvedEffects.push(si),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}}class ri extends te{shouldDrawLayer(t){const{operation:e}=t.props;return e.includes("draw")||e.includes("terrain")}render(t){return this._render(t)}}class oi{constructor(t,e={}){this.device=t,this.stats=e.stats,this.layerFilter=null,this.drawPickingColors=!1,this.drawLayersPass=new ri(t),this.pickLayersPass=new ge(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(t){if(!t.viewports.length)return;const e=this.drawPickingColors?this.pickLayersPass:this.drawLayersPass,i={layerFilter:this.layerFilter,isPicking:this.drawPickingColors,...t};i.effects&&this._preRender(i.effects,i);const s=this.lastPostProcessEffect?this.renderBuffers[0]:i.target;this.lastPostProcessEffect&&(i.clearColor=[0,0,0,0],i.clearCanvas=!0);const n=e.render({...i,target:s}),r="stats"in n?n.stats:n;i.effects&&(this.lastPostProcessEffect&&(i.clearCanvas=void 0===t.clearCanvas||t.clearCanvas),this._postRender(i.effects,i)),this.renderCount++,L("deckRenderer.renderLayers",this,r,t),this._updateStats(r)}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()}_resizeRenderBuffers(){const{renderBuffers:t}=this,e=this.device.canvasContext.getDrawingBufferSize(),[i,s]=e;0===t.length&&[0,1].map(e=>{const n=this.device.createTexture({sampler:{minFilter:"linear",magFilter:"linear"},width:i,height:s});t.push(this.device.createFramebuffer({id:`deck-renderbuffer-${e}`,colorAttachments:[n]}))});for(const n of t)n.resize(e)}_postRender(t,e){const{renderBuffers:i}=this,s={...e,inputBuffer:i[0],swapBuffer:i[1]};for(const n of t)if(n.postRender){s.target=n.id===this.lastPostProcessEffect?e.target:void 0;const t=n.postRender(s);s.inputBuffer=t,s.swapBuffer=t===i[0]?i[1]:i[0]}}}const ai={pickedColor:null,pickedObjectIndex:-1};function hi({pickedColors:e,decodePickingColor:i,deviceX:s,deviceY:n,deviceRadius:r,deviceRect:o}){const{x:a,y:h,width:c,height:l}=o;let d=r*r,p=-1,u=0;for(let t=0;t<l;t++){const i=t+h-n,r=i*i;if(r>d)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<=d&&(d=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.error("Picked non-existent layer. Is picking buffer corrupt?")()}return ai}function ci({pickedColors:e,decodePickingColor:i}){const s=/* @__PURE__ */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.error("Picked non-existent layer. Is picking buffer corrupt?")()}}}return Array.from(s.values())}function li({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 di(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=li(t),l=/* @__PURE__ */new Map;return l.set(null,c),h.forEach(t=>{let e={...c};t===o&&(e.color=r,e.index=a,e.picked=!0),e=pi({layer:t,info:e,mode:s});const n=e.layer;t===o&&"hover"===s&&(i.info=e),l.set(n.id,e),"hover"===s&&n.updateAutoHighlight(e)}),l}function pi({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}class ui{constructor(t,e={}){this._pickable=!0,this.device=t,this.stats=e.stats,this.pickLayersPass=new ge(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=h&&h.unproject([t-h.x,e-h.y]),l={x:t,y:e,viewport:h,coordinate:c,layer:a};return{...n,...l}}_resizeBuffer(){if(!this.pickingFBO){const t=this.device.createTexture({format:"rgba8unorm",width:1,height:1,usage:Z.RENDER_ATTACHMENT|Z.COPY_SRC});if(this.pickingFBO=this.device.createFramebuffer({colorAttachments:[t],depthStencilAttachment:"depth16unorm"}),this.device.isTextureFormatRenderable("rgba32float")){const t=this.device.createTexture({format:"rgba32float",width:1,height:1,usage:Z.RENDER_ATTACHMENT|Z.COPY_SRC}),e=this.device.createFramebuffer({colorAttachments:[t],depthStencilAttachment:"depth16unorm"});this.depthFBO=e}}const{canvas:t}=this.device.getDefaultCanvasContext();this.pickingFBO?.resize({width:t.width,height:t.height}),this.depthFBO?.resize({width:t.width,height:t.height})}_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,onViewportActive:c,effects:l}){const d=this.device.canvasContext.cssToDeviceRatio(),p=this._getPickable(t);if(!p||0===i.length)return{result:[],emptyInfo:li({viewports:i,x:s,y:n,pixelRatio:d})};this._resizeBuffer();const u=this.device.canvasContext.cssToDevicePixels([s,n],!0),g=[u.x+Math.floor(u.width/2),u.y+Math.floor(u.height/2)],m=Math.round(r*d),{width:f,height:w}=this.pickingFBO,v=this._getPickingRect({deviceX:g[0],deviceY:g[1],deviceRadius:m,deviceWidth:f,deviceHeight:w}),_={x:s-r,y:n-r,width:2*r+1,height:2*r+1};let y;const b=[],P=/* @__PURE__ */new Set;for(let k=0;k<o;k++){let t,r;if(v){t=hi({...await this._drawAndSampleAsync({layers:p,views:e,viewports:i,onViewportActive:c,deviceRect:v,cullRect:_,effects:l,pass:`picking:${a}`}),deviceX:g[0],deviceY:g[1],deviceRadius:m,deviceRect:v})}else t={pickedColor:null,pickedObjectIndex:-1};const u=this._getDepthLayers(t,p,h);if(u.length>0){const{pickedColors:s}=await this._drawAndSampleAsync({layers:u,views:e,viewports:i,onViewportActive:c,deviceRect:{x:t.pickedX??g[0],y:t.pickedY??g[1],width:1,height:1},cullRect:_,effects:l,pass:`picking:${a}:z`},!0);s[3]&&(r=s[0])}t.pickedLayer&&k+1<o&&(P.add(t.pickedLayer),t.pickedLayer.disablePickingIndex(t.pickedObjectIndex)),y=di({pickInfo:t,lastPickedInfo:this.lastPickedInfo,mode:a,layers:p,viewports:i,x:s,y:n,z:r,pixelRatio:d});for(const e of y.values())e.layer&&b.push(e);if(!t.pickedColor)break}for(const k of P)k.restorePickingColors();return{result:b,emptyInfo:y.get(null)}}_pickClosestObject({layers:t,views:e,viewports:i,x:s,y:n,radius:r=0,depth:o=1,mode:a="query",unproject3D:h,onViewportActive:c,effects:l}){const d=this.device.canvasContext.cssToDeviceRatio(),p=this._getPickable(t);if(!p||0===i.length)return{result:[],emptyInfo:li({viewports:i,x:s,y:n,pixelRatio:d})};this._resizeBuffer();const u=this.device.canvasContext.cssToDevicePixels([s,n],!0),g=[u.x+Math.floor(u.width/2),u.y+Math.floor(u.height/2)],m=Math.round(r*d),{width:f,height:w}=this.pickingFBO,v=this._getPickingRect({deviceX:g[0],deviceY:g[1],deviceRadius:m,deviceWidth:f,deviceHeight:w}),_={x:s-r,y:n-r,width:2*r+1,height:2*r+1};let y;const b=[],P=/* @__PURE__ */new Set;for(let k=0;k<o;k++){let t,r;if(v){t=hi({...this._drawAndSample({layers:p,views:e,viewports:i,onViewportActive:c,deviceRect:v,cullRect:_,effects:l,pass:`picking:${a}`}),deviceX:g[0],deviceY:g[1],deviceRadius:m,deviceRect:v})}else t={pickedColor:null,pickedObjectIndex:-1};const u=this._getDepthLayers(t,p,h);if(u.length>0){const{pickedColors:s}=this._drawAndSample({layers:u,views:e,viewports:i,onViewportActive:c,deviceRect:{x:t.pickedX??g[0],y:t.pickedY??g[1],width:1,height:1},cullRect:_,effects:l,pass:`picking:${a}:z`},!0);s[3]&&(r=s[0])}t.pickedLayer&&k+1<o&&(P.add(t.pickedLayer),t.pickedLayer.disablePickingIndex(t.pickedObjectIndex)),y=di({pickInfo:t,lastPickedInfo:this.lastPickedInfo,mode:a,layers:p,viewports:i,x:s,y:n,z:r,pixelRatio:d});for(const e of y.values())e.layer&&b.push(e);if(!t.pickedColor)break}for(const k of P)k.restorePickingColors();return{result:b,emptyInfo:y.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,onViewportActive:c,effects:l}){const d=this._getPickable(t);if(!d||0===i.length)return[];this._resizeBuffer();const p=this.device.canvasContext.cssToDeviceRatio(),u=this.device.canvasContext.cssToDevicePixels([s,n],!0),g=u.x,m=u.y+u.height,f=this.device.canvasContext.cssToDevicePixels([s+r,n+o],!0),w=f.x+f.width,v=f.y,_={x:g,y:v,width:w-g,height:m-v},y=ci(await this._drawAndSampleAsync({layers:d,views:e,viewports:i,onViewportActive:c,deviceRect:_,cullRect:{x:s,y:n,width:r,height:o},effects:l,pass:`picking:${a}`})),b=/* @__PURE__ */new Map,P=[],k=Number.isFinite(h);for(let E=0;E<y.length&&!(k&&P.length>=h);E++){const t=y[E];let e={color:t.pickedColor,layer:null,index:t.pickedObjectIndex,picked:!0,x:s,y:n,pixelRatio:p};e=pi({layer:t.pickedLayer,info:e,mode:a});const i=e.layer.id;b.has(i)||b.set(i,/* @__PURE__ */new Set);const r=b.get(i),o=e.object??e.index;r.has(o)||(r.add(o),P.push(e))}return P}_pickVisibleObjects({layers:t,views:e,viewports:i,x:s,y:n,width:r=1,height:o=1,mode:a="query",maxObjects:h=null,onViewportActive:c,effects:l}){const d=this._getPickable(t);if(!d||0===i.length)return[];this._resizeBuffer();const p=this.device.canvasContext.cssToDeviceRatio(),u=this.device.canvasContext.cssToDevicePixels([s,n],!0),g=u.x,m=u.y+u.height,f=this.device.canvasContext.cssToDevicePixels([s+r,n+o],!0),w=f.x+f.width,v=f.y,_={x:g,y:v,width:w-g,height:m-v},y=ci(this._drawAndSample({layers:d,views:e,viewports:i,onViewportActive:c,deviceRect:_,cullRect:{x:s,y:n,width:r,height:o},effects:l,pass:`picking:${a}`})),b=/* @__PURE__ */new Map,P=[],k=Number.isFinite(h);for(let E=0;E<y.length&&!(k&&P.length>=h);E++){const t=y[E];let e={color:t.pickedColor,layer:null,index:t.pickedObjectIndex,picked:!0,x:s,y:n,pixelRatio:p};e=pi({layer:t.pickedLayer,info:e,mode:a});const i=e.layer.id;b.has(i)||b.set(i,/* @__PURE__ */new Set);const r=b.get(i),o=e.object??e.index;r.has(o)||(r.add(o),P.push(e))}return P}async _drawAndSampleAsync({layers:e,views:i,viewports:s,onViewportActive:n,deviceRect:r,cullRect:o,effects:a,pass:h},c=!1){const l=c?this.depthFBO:this.pickingFBO,d={layers:e,layerFilter:this.layerFilter,views:i,viewports:s,onViewportActive:n,pickingFBO:l,deviceRect:r,cullRect:o,effects:a,pass:h,pickZ:c,preRenderStats:{},isPicking:!0};for(const t of a)t.useInPicking&&(d.preRenderStats[t.id]=t.preRender(d));const{decodePickingColor:p,stats:u}=this.pickLayersPass.render(d);this._updateStats(u);const{x:g,y:m,width:f,height:w}=r,v=l.colorAttachments[0]?.texture;if(!v)throw new Error("Picking framebuffer color attachment is missing");const _=await this._readTextureDataAsync(v,{x:g,y:m,width:f,height:w},c?Float32Array:Uint8Array);if(!c){let e=!1;for(let t=3;t<_.length;t+=4)if(0!==_[t]){e=!0;break}!e&&_.length>0&&t.warn("Async pick readback returned only zero alpha values",{deviceRect:r,bytes:Array.from(_.subarray(0,Math.min(_.length,16)))})()}return{pickedColors:_,decodePickingColor:p}}async _readTextureDataAsync(t,e,i){const{width:s,height:n}=e,r=t.computeMemoryLayout(e),o=this.device.createBuffer({byteLength:r.byteLength,usage:H.COPY_DST|H.MAP_READ});try{t.readBuffer(e,o);const a=await o.readAsync(0,r.byteLength),h=i.BYTES_PER_ELEMENT;if(r.bytesPerRow%h!==0)throw new Error(`Texture readback row stride ${r.bytesPerRow} is not aligned to ${h}-byte elements.`);const c=new i(a.buffer,a.byteOffset,r.byteLength/h),l=4*s,d=r.bytesPerRow/h;if(d<l)throw new Error(`Texture readback row stride ${d} is smaller than packed row length ${l}.`);const p=new i(s*n*4);for(let t=0;t<n;t++){const e=t*d;p.set(c.subarray(e,e+l),t*l)}return p}finally{o.destroy()}}_drawAndSample({layers:t,views:e,viewports:i,onViewportActive:s,deviceRect:n,cullRect:r,effects:o,pass:a},h=!1){const c=h?this.depthFBO:this.pickingFBO,l={layers:t,layerFilter:this.layerFilter,views:e,viewports:i,onViewportActive:s,pickingFBO:c,deviceRect:n,cullRect:r,effects:o,pass:a,pickZ:h,preRenderStats:{},isPicking:!0};for(const v of o)v.useInPicking&&(l.preRenderStats[v.id]=v.preRender(l));const{decodePickingColor:d,stats:p}=this.pickLayersPass.render(l);this._updateStats(p);const{x:u,y:g,width:m,height:f}=n,w=new(h?Float32Array:Uint8Array)(m*f*4);return this.device.readPixelsToArrayWebGL(c,{sourceX:u,sourceY:g,sourceWidth:m,sourceHeight:f,target:w}),{pickedColors:w,decodePickingColor:d}}_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}}}const gi={"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}},mi="top-left",fi="root";class wi{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(t){if(t.widgets&&!V(t.widgets,this.widgets,1)){const e=t.widgets.filter(Boolean);this._setWidgets(e)}}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)}}onEvent(t,e){const i=q[e.type];if(i)for(const s of this.getWidgets()){const{viewId:n}=s;n&&n!==t.viewport?.id||s[i]?.(t,e)}}_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=mi}=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||fi;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,gi[e]),s.append(n)),n}_updateContainers(){const t=this.deck.width,e=this.deck.height;for(const i in this.containers){const s=this.lastViewports[i]||null,n=i===fi||s,r=this.containers[i];n?(r.style.display="block",r.style.left=`${s?s.x:0}px`,r.style.top=`${s?s.y:0}px`,r.style.width=`${s?s.width:t}px`,r.style.height=`${s?s.height:e}px`):r.style.display="none"}}}function vi(t,e){e&&Object.entries(e).map(([e,i])=>{e.startsWith("--")?t.style.setProperty(e,i):t.style[e]=i})}class _i{constructor(t){this.viewId=null,this.props={...this.constructor.defaultProps,...t},this.id=this.props.id}setProps(t){const e=this.props,i=this.rootElement;var s,n;i&&e.className!==t.className&&(e.className&&i.classList.remove(e.className),t.className&&i.classList.add(t.className)),i&&!V(e.style,t.style,1)&&(s=i,(n=e.style)&&Object.keys(n).map(t=>{t.startsWith("--")?s.style.removeProperty(t):s.style[t]=""}),vi(i,t.style)),Object.assign(this.props,t),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)),vi(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){}}_i.defaultProps={id:"widget",style:{},_container:null,className:""};const yi={zIndex:"1",position:"absolute",pointerEvents:"none",color:"#a0a7b4",backgroundColor:"#29323c",padding:"10px",top:"0",left:"0",display:"none"};class bi extends _i{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,yi),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);this.setTooltip(s,t.x,t.y)}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)}}}bi.defaultProps={..._i.defaultProps};const Pi={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:{}},ki=t=>({drawBuffersWEBGL:e=>t.drawBuffers(e),COLOR_ATTACHMENT0_WEBGL:36064,COLOR_ATTACHMENT1_WEBGL:36065,COLOR_ATTACHMENT2_WEBGL:36066,COLOR_ATTACHMENT3_WEBGL:36067}),Ei=t=>({VERTEX_ARRAY_BINDING_OES:34229,createVertexArrayOES:()=>t.createVertexArray(),deleteVertexArrayOES:e=>t.deleteVertexArray(e),isVertexArrayOES:e=>t.isVertexArray(e),bindVertexArrayOES:e=>t.bindVertexArray(e)}),Si=t=>({VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:35070,drawArraysInstancedANGLE:(...e)=>t.drawArraysInstanced(...e),drawElementsInstancedANGLE:(...e)=>t.drawElementsInstanced(...e),vertexAttribDivisorANGLE:(...e)=>t.vertexAttribDivisor(...e)});function Mi(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={...Pi,WEBGL_disjoint_timer_query:t.getExtension("EXT_disjoint_timer_query_webgl2"),WEBGL_draw_buffers:ki(t),OES_vertex_array_object:Ei(t),ANGLE_instanced_arrays:Si(t)},i=t.getExtension;t.getExtension=function(s){const n=i.call(t,s);return n||(s in e?e[s]:null)};const s=t.getSupportedExtensions;t.getSupportedExtensions=function(){const i=s.apply(t)||[];return i?.concat(Object.keys(e))}}(t),t}return this.originalGetContext(t,e)}}const Ci=new class extends ht{type="webgl";constructor(){super(),n.defaultProps={...n.defaultProps,...$}}enforceWebGL2(t){Mi(t)}isSupported(){return"undefined"!=typeof WebGL2RenderingContext}isDeviceHandle(t){return"undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||("undefined"!=typeof WebGLRenderingContext&&t instanceof WebGLRenderingContext&&o.warn("WebGL1 is not supported",t)(),!1)}async attach(t,e={}){const{WebGLDevice:i}=await import("./webgl-device-Ck4EhfeB.js").then(t=>t.w);if(t instanceof i)return t;const s=i.getDeviceFromContext(t);if(s)return s;if(!function(t){if("undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext)return!0;return Boolean(t&&"function"==typeof t.createVertexArray)}(t))throw new Error("Invalid WebGL2RenderingContext");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:e}=await import("./webgl-device-Ck4EhfeB.js").then(t=>t.w),i=[];(t.debugWebGL||t.debug)&&i.push(X()),t.debugSpectorJS&&i.push(Y(t));const s=await Promise.allSettled(i);for(const n of s)"rejected"===n.status&&o.error(`Failed to initialize debug libraries ${n.reason}`)();try{const i=new e(t);o.groupCollapsed(1,`WebGLDevice ${i.id} created`)();const s=`${i._reused?"Reusing":"Created"} device with WebGL2 ${i.props.debug?"debug ":""}context: ${i.info.vendor}, ${i.info.renderer} for canvas: ${i.canvasContext.id}`;return o.probe(1,s)(),o.table(1,i.info)(),i}finally{o.groupEnd(1)(),o.info(1,"%cWebGL call tracing: luma.log.set('debug-webgl') ","color: white; background: blue; padding: 2px 6px; border-radius: 3px;")()}}};function xi(){}const Ri={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,layers:[],effects:[],views:null,controller:null,useDevicePixels:!0,touchAction:"none",eventRecognizerOptions:{},_framebuffer:null,_animate:!1,_pickable:!0,_typedArrayManagerProps:{},_customRender:null,widgets:[],onDeviceInitialized:xi,onWebGLInitialized:xi,onResize:xi,onViewStateChange:xi,onInteractionStateChange:xi,onBeforeRender:xi,onAfterRender:xi,onLoad:xi,onError:e=>t.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};class Li{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.widgetManager=null,this.tooltip=null,this.animationLoop=null,this.cursorState={isHovering:!1,isDragging:!1},this.stats=new x({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._pickRequest={mode:"hover",x:-1,y:-1,radius:0,event:null,unproject3D:!1},this._lastPointerDownInfo=null,this._lastPointerDownInfoPromise=null,this._onPointerMove=t=>{const{_pickRequest:e}=this;if("pointerleave"===t.type)e.x=-1,e.y=-1,e.radius=0;else{if(t.leftButton||t.rightButton)return;{const i=t.offsetCenter;if(!i)return;e.x=i.x,e.y=i.y,e.radius=this.props.pickingRadius}}this.layerManager&&(this.layerManager.context.mousePosition={x:e.x,y:e.y}),e.event=t},this._onEvent=t=>{const e=q[t.type],i=t.offsetCenter;if(!e||!i||!this.layerManager)return;const s=this.layerManager.getLayers(),n=this._getInternalPickingMode();if(!n)return;if("sync"===n){const e="click"===t.type&&this._shouldUnproject3D(s)?this._getFirstPickedInfo(this._pickPointSync(this._getPointPickOptions(i.x,i.y,{unproject3D:!0},s))):this._getLastPointerDownPickingInfo(i.x,i.y,s);return void this._dispatchPickingEvent(e,t)}(this._lastPointerDownInfoPromise||Promise.resolve(this._getLastPointerDownPickingInfo(i.x,i.y,s))).then(e=>{this._dispatchPickingEvent(e,t)}).catch(t=>this.props.onError?.(t))},this._onPointerDown=t=>{const e=t.offsetCenter;if(!e)return;const i=this._getInternalPickingMode();if(!i)return;const s=this.layerManager?.getLayers()||[],n=++this._pointerDownPickSequence;if("sync"===i){const t=this._pickPointSync({x:e.x,y:e.y,radius:this.props.pickingRadius}),i=this._getFirstPickedInfo(t);return this._lastPointerDownInfo=i,void(this._lastPointerDownInfoPromise=Promise.resolve(i))}const r=this._pickPointAsync(this._getPointPickOptions(e.x,e.y,{},s)).then(t=>this._getFirstPickedInfo(t)).then(t=>(n===this._pointerDownPickSequence&&(this._lastPointerDownInfo=t),t)).catch(t=>{this.props.onError?.(t);const i=this.deckPicker&&this.viewManager?this._getLastPointerDownPickingInfo(e.x,e.y,s):{};return n===this._pointerDownPickSequence&&(this._lastPointerDownInfo=i),i});this._lastPointerDownInfo=null,this._lastPointerDownInfoPromise=r},this.props={...Ri,...e},(e=this.props).viewState&&e.initialViewState&&t.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);let i=this.device;if(!i&&e.gl){e.gl instanceof WebGLRenderingContext&&t.error("WebGL1 context not supported.")();const s=this.props.deviceProps?.onResize;i=Ci.attach(e.gl,{_cacheShaders:!0,_cachePipelines:!0,...this.props.deviceProps,onResize:(t,e)=>{const{width:i,height:n}=t.canvas;t.setDrawingBufferSize(i,n),this._needsRedraw="Canvas resized",s?.(t,e)}})}i||(i=this._createDevice(e)),this.animationLoop=this._createAnimationLoop(i,e),this.setProps(e),e._typedArrayManagerProps&&K.setOptions(e._typedArrayManagerProps),this.animationLoop.start()}finalize(){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,this.eventManager?.destroy(),this.eventManager=null,this.widgetManager?.finalize(),this.widgetManager=null,this.props.canvas||this.props.device||this.props.gl||!this.canvas||(this.canvas.parentElement?.removeChild(this.canvas),this.canvas=null)}setProps(e){this.stats.get("setProps Time").timeStart(),"onLayerHover"in e&&t.removed("onLayerHover","onHover")(),"onLayerClick"in e&&t.removed("onLayerClick","onClick")(),e.initialViewState&&!V(this.props.initialViewState,e.initialViewState,3)&&(this.viewState=e.initialViewState),Object.assign(this.props,e),this._validateInternalPickingMode(),this._setCanvasSize(this.props);const i=Object.create(this.props);Object.assign(i,{views:this._getViews(),width:this.width,height:this.height,viewState:this._getViewState()}),e.device&&e.device.id!==this.device?.id&&(this.animationLoop?.stop(),this.canvas!==e.device.canvasContext?.canvas&&(this.canvas?.remove(),this.eventManager?.destroy(),this.canvas=null),t.log(`recreating animation loop for new device! id=${e.device.id}`)(),this.animationLoop=this._createAnimationLoop(e.device,e),this.animationLoop.start()),this.animationLoop?.setProps(i),void 0!==e.useDevicePixels&&this.device?.canvasContext?.setProps&&this.device.canvasContext.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 F(this.viewManager),this.viewManager.views}getView(t){return F(this.viewManager),this.viewManager.getView(t)}getViewports(t){return F(this.viewManager),this.viewManager.getViewports(t)}getCanvas(){return this.canvas}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){return"sync"!==this._getInternalPickingMode()?null:this.pickObject({x:t,y:e,radius:0,unproject3D:!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,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=this.layerManager?.getLayers()||[]){return this.deckPicker.getLastPickedObject({x:t,y:e,layers:i,viewports:this.getViewports({x:t,y:e})},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(t,e){if(!this.layerManager||!this.widgetManager)return;const i=q[e.type];if(!i)return;const{layer:s}=t,n=s&&(s[i]||s.props[i]),r=this.props[i];let o=!1;n&&(o=n.call(s,t,e)),o||(r?.(t,e),this.widgetManager.onEvent(t,e))}_pickAsync(t,e,i){F(this.deckPicker);const{stats:s}=this;s.get("Pick Count").incrementCount(),s.get(e).timeStart();const n=this.deckPicker[t]({layers:this.layerManager.getLayers(i),views:this.viewManager.getViews(),viewports:this.getViewports(i),onViewportActive:this.layerManager.activateViewport,effects:this.effectManager.getEffects(),...i});return s.get(e).timeEnd(),n}_pick(t,e,i){F(this.deckPicker);const{stats:s}=this;s.get("Pick Count").incrementCount(),s.get(e).timeStart();const n=this.deckPicker[t]({layers:this.layerManager.getLayers(i),views:this.viewManager.getViews(),viewports:this.getViewports(i),onViewportActive:this.layerManager.activateViewport,effects:this.effectManager.getEffects(),...i});return s.get(e).timeEnd(),n}_createCanvas(t){let e=t.canvas;if("string"==typeof e&&(e=document.getElementById(e),F(e)),!e){e=document.createElement("canvas"),e.id=t.id||"deckgl-overlay",t.width&&"number"==typeof t.width&&(e.width=t.width),t.height&&"number"==typeof t.height&&(e.height=t.height);(t.parent||document.body).appendChild(e)}return Object.assign(e.style,t.style),e}_setCanvasSize(t){if(!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}}_updateCanvasSize(){const{canvas:t}=this;if(!t)return;const e=t.clientWidth??t.width,i=t.clientHeight??t.height;e===this.width&&i===this.height||(this.width=e,this.height=i,this.viewManager?.setProps({width:e,height:i}),this.layerManager?.activateViewport(this.getViewports()[0]),this.props.onResize({width:e,height:i}))}_createAnimationLoop(t,e){const{gl:i,onError:s}=e;return new pe({device:t,autoResizeDrawingBuffer:!i,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};s.adapters.includes(Ci)||s.adapters.push(Ci);const n={alphaMode:"webgpu"===this.props.deviceProps?.type?"premultiplied":void 0},r=this.props.deviceProps?.onResize;return at.createDevice({_reuseDevices:!0,type:"webgl",...s,createCanvasContext:{...n,...i,canvas:this._createCanvas(t),useDevicePixels:this.props.useDevicePixels,autoResize:!0},onResize:(t,e)=>{this._needsRedraw="Canvas resized",r?.(t,e)}})}_getViewState(){return this.props.viewState||this.viewState}_getViews(){const{views:t}=this.props,e=Array.isArray(t)?t:t?[t]:[new ii({id:"default-view"})];return e.length&&this.props.controller&&(e[0].props.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,{radius:t.radius,mode:t.mode},i),n=this._getInternalPickingMode(),r=++this._hoverPickSequence;if(t.event=null,!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.parent||this.canvas;t&&(t.style.cursor=this.props.getCursor(this.cursorState))}_setDevice(t){if(this.device=t,this._validateInternalPickingMode(),!this.animationLoop)return;this.canvas||(this.canvas=this.device.canvasContext?.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 e=new le;e.play(),this.animationLoop.attachTimeline(e);const i=this.props.parent?.querySelector(".deck-events-root")||this.canvas;this.eventManager=new Lt(i,{touchAction:this.props.touchAction,recognizers:Object.keys(J).map(t=>{const[e,i,s,n]=J[t],r=this.props.eventRecognizerOptions?.[t];return{recognizer:new e({...i,...r,event:t}),recognizeWith:s,requestFailure:n}}),events:{pointerdown:this._onPointerDown,pointermove:this._onPointerMove,pointerleave:this._onPointerMove}});for(const r in q)this.eventManager.on(r,this._onEvent);this.viewManager=new ye({timeline:e,eventManager:this.eventManager,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 _e(this.device,{deck:this,stats:this.stats,viewport:s,timeline:e}),this.effectManager=new ni({deck:this,device:this.device}),this.deckRenderer=new oi(this.device,{stats:this.stats}),this.deckPicker=new ui(this.device,{stats:this.stats});const n=this.props.parent?.querySelector(".deck-widgets-root")||this.canvas?.parentElement;this.widgetManager=new wi({deck:this,parentElement:n}),this.widgetManager.addDefault(new bi),this.setProps(this.props),this._updateCanvasSize(),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};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.table(4,this.metrics)(),this.props._onMetrics&&this.props._onMetrics(this.metrics)),this._updateCanvasSize(),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.updateAttributesCount=e.get("Layers updated").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=at.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}}Li.defaultProps=Ri,Li.VERSION=nt;const Ti=Math.PI/180,Ai=180/Math.PI;function Ii(t,e=0){const i=Math.min(180,t)*Ti;return 2*et*Math.sin(i/2)*Math.pow(2,e)}function Vi(t,e=0){const i=t/Math.pow(2,e);return 2*Math.asin(Math.min(1,i/et/2))*Ai}class Di extends ti{constructor(t){const{startPanPos:e,...i}=t;i.normalize=!1,super(i),void 0!==e&&(this._state.startPanPos=e)}panStart({pos:t}){const{latitude:e,longitude:i,zoom:s}=this.getViewportProps();return this._getUpdatedState({startPanLngLat:[i,e],startPanPos:t,startZoom:s})}pan({pos:t,startPos:e}){const i=this.getState(),s=i.startPanLngLat||this._unproject(e);if(!s)return this;const n=i.startZoom??this.getViewportProps().zoom,r=i.startPanPos||e,o=[s[0],s[1],n],a=this.makeViewport(this.getViewportProps()).panByPosition(o,t,r);return this._getUpdatedState(a)}panEnd(){return this._getUpdatedState({startPanLngLat:null,startPanPos:null,startZoom:null})}zoom({scale:t}){const e=(this.getState().startZoom||this.getViewportProps().zoom)+Math.log2(t);return this._getUpdatedState({zoom:e})}applyConstraints(t){const{longitude:e,latitude:i,maxBounds:s}=t;if(t.zoom=this._constrainZoom(t.zoom,t),(e<-180||e>180)&&(t.longitude=B(e+180,360)-180),t.latitude=N(i,-tt,tt),s&&(t.longitude=N(t.longitude,s[0][0],s[1][0]),t.latitude=N(t.latitude,s[0][1],s[1][1])),s){const e=t.zoom-Q(i),n=s[1][0]-s[0][0],r=s[1][1]-s[0][1];if(r>0&&r<2*tt){const i=Math.min(Vi(t.height,e),r)/2;t.latitude=N(t.latitude,s[0][1]+i,s[1][1]-i)}if(n>0&&n<360){const i=Math.min(Vi(t.width/Math.cos(t.latitude*Ti),e),n)/2;t.longitude=N(t.longitude,s[0][0]+i,s[1][0]-i)}}return t.latitude!==i&&(t.zoom+=Q(t.latitude)-Q(i)),t}_constrainZoom(t,e){e||(e=this.getViewportProps());const{latitude:i,maxZoom:s,maxBounds:n}=e;let{minZoom:r}=e;const o=Q(0),a=Q(i)-o;if(null!==n&&e.width>0&&e.height>0){const t=n[0][1],i=n[1][1],a=Math.sign(t)===Math.sign(i)?Math.min(Math.abs(t),Math.abs(i)):0,h=Ii(n[1][0]-n[0][0])*Math.cos(a*Ti),c=Ii(n[1][1]-n[0][1]);h>0&&(r=Math.max(r,Math.log2(e.width/h)+o)),c>0&&(r=Math.max(r,Math.log2(e.height/c)+o)),r>s&&(r=s)}return N(t,r+a,s+a)}}class zi extends Ye{constructor(){super(...arguments),this.ControllerState=Di,this.transition={transitionDuration:300,transitionInterpolator:new Be(["longitude","latitude","zoom"])},this.dragMode="pan"}setProps(t){super.setProps(t),this.dragRotate=!1,this.touchRotate=!1}}class Fi extends Le{constructor(t={}){super(t)}getViewportType(t){return t.zoom>12?G:O}get ControllerType(){return zi}}Fi.displayName="GlobeView";class Oi{constructor(t){F(t.id,"id is required"),this.id=t.id,this.type="custom",this.renderingMode=t.renderingMode||"3d",this.slot=t.slot,this.beforeId=t.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=Yi(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)}}const ji="__UNDEFINED__";function Bi(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"}const Ni="mapbox",Ui=512,Wi=Math.PI/180;function Gi({map:t,deck:e}){if(t.__deck)return t.__deck;const i=e.props._customRender,s=e.props.onLoad,n={...e.props,_customRender:()=>{t.triggerRepaint(),i?.("")}};return n.views||(n.views=$i(t)),Object.assign(n,{width:null,height:null,touchAction:"unset",viewState:Xi(t)}),e.isInitialized?Zi(e,t):n.onLoad=()=>{s?.(),Zi(e,t)},e.setProps(n),t.__deck=e,t.on("render",()=>{e.isInitialized&&function(t,e){const i=A(t.props.layers,Boolean),s=i.some(t=>t&&!e.getLayer(Bi(t)));let n=t.getViewports();const r=n.findIndex(t=>t.id===Ni),o=n.length>1||r<0;if(s||o){if(r>=0){n=n.slice();const i=Yi(t,e);i?n[r]=i:n.splice(r,1)}t._drawLayers("mapbox-repaint",{viewports:n,layerFilter:i=>(!t.props.layerFilter||t.props.layerFilter(i))&&(i.viewport.id!==Ni||!e.getLayer(Bi(i.layer))),clearCanvas:!1})}else{const e=t.device,i=e?.gl;t.props.onBeforeRender?.({device:e,gl:i}),t.props.onAfterRender?.({device:e,gl:i})}t.userData.currentViewport=null}(e,t)}),e}function Zi(t,e){const i=()=>{t.isInitialized?function(t,e){t.setProps({viewState:Xi(e)}),t.needsRedraw({clearRedrawFlags:!0})}(t,e):e.off("move",i)};e.on("move",i)}function Hi(t,e){const i=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"}:{};return"globe"===qi(t)&&(i.cullMode="back"),i}function qi(t){const e=t.getProjection?.(),i=e?.type||e?.name;if("globe"===i)return"globe";if(i&&"mercator"!==i)throw new Error("Unsupported projection");return"mercator"}function $i(t){return"globe"===qi(t)?new Fi({id:Ni}):new ii({id:Ni})}function Xi(t){const{lng:e,lat:i}=t.getCenter(),s={longitude:(e+540)%360-180,latitude:i,zoom:t.getZoom(),bearing:t.getBearing(),pitch:t.getPitch(),padding:t.getPadding(),repeat:t.getRenderWorldCopies()};return t.getTerrain?.()&&function(t,e){if(t.getFreeCameraOptions){const{position:i}=t.getFreeCameraOptions();if(!i||void 0===i.z)return;const s=t.transform.height,{longitude:n,latitude:r,pitch:o}=e,a=i.x*Ui,h=(1-i.y)*Ui,c=i.z*Ui,l=W([n,r]),d=a-l[0],p=h-l[1],u=Math.sqrt(d*d+p*p),g=o*Wi,m=1.5*s,f=g<.001?m*Math.cos(g)/c:m*Math.sin(g)/u;e.zoom=Math.log2(f);const w=c-m*Math.cos(g)/f;e.position=[0,0,w/it(r)]}else"number"==typeof t.transform.elevation&&(e.position=[0,0,t.transform.elevation])}(t,s),s}function Yi(t,e,i){const s=Xi(e),n=t.getView(Ni)||$i(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})}class Ki{constructor(t){this._handleStyleChange=()=>{if(this._resolveLayers(this._map,this._deck,this._props.layers,this._props.layers),!this._map)return;qi(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:Xi(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=!1,useDevicePixels:i,...s}=t;return e||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:{...Hi(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 Li({...this._props,parent:e,parameters:{...Hi(t,!1),...this._props.parameters},views:this._getViews(t),viewState:Xi(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.warn("Incompatible basemap library. See: https://deck.gl/docs/api-reference/mapbox/overview#compatibility")(),this._deck=Gi({map:e,deck:new Li({...this._props,views:this._getViews(e),gl:i,parameters:{...Hi(e,!0),...this._props.parameters}})}),e.on("styledata",this._handleStyleChange),this._resolveLayers(e,this._deck,[],this._props.layers),document.createElement("div")}_resolveLayers(t,e,i,s){!function(t,e,i){if(!t||!t.style||!t.style._loaded)return;const s=A(i,Boolean);if(e!==i){const i=A(e,Boolean),n=new Set(i.map(t=>Bi(t))),r=new Set(s.map(t=>Bi(t)));for(const e of n)r.has(e)||t.getLayer(e)&&t.removeLayer(e)}const n={};for(const o of s){const e=Bi(o),i=t.getLayer(e);if(i){const t=i.implementation||i;n[e]=t}else{const i=new Oi({id:e,slot:o.props.slot,beforeId:o.props.beforeId});n[e]=i,t.addLayer(i,o.props.beforeId)}}const r=t.style._order;for(const[o,a]of Object.entries(n)){const e=a.beforeId||ji,i=e===ji?r.length:r.indexOf(e);if(r.indexOf(o)!==i-1){const i=e===ji?void 0:e;t.moveLayer(o,i)}}}(t,i,s)}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()}_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(t){return F(this._deck),this._deck.pickObject(t)}pickMultipleObjects(t){return F(this._deck),this._deck.pickMultipleObjects(t)}pickObjects(t){return F(this._deck),this._deck.pickObjects(t)}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 $i(t);const e=Array.isArray(this._props.views)?this._props.views:[this._props.views];return e.some(t=>t.id===Ni)?this._props.views:[$i(t),...e]}}export{Ki as MapboxOverlay};
|