@mapvx/web-kit 1.2.0-develop.8 → 1.2.0-develop.9
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/README.md +8 -0
- package/dist/cjs/chunks/{DRACOLoader-2PTxnG0B.cjs → DRACOLoader-BXWDwLus.cjs} +2 -2
- package/dist/cjs/chunks/{GLTFLoader-Duo42nvB.cjs → GLTFLoader-Ie8s8u8H.cjs} +2 -2
- package/dist/cjs/chunks/{KTX2Loader-BFPRanfV.cjs → KTX2Loader-qXr_kxSW.cjs} +2 -2
- package/dist/cjs/chunks/{accessibility-B8B49hfP.cjs → accessibility--hZFITPu.cjs} +2 -2
- package/dist/cjs/chunks/{back_arrow-xE8LI3kf.cjs → back_arrow-D7QonpvS.cjs} +2 -2
- package/dist/cjs/chunks/{debug-hooks-Dy3VCEnb.cjs → debug-hooks-CUiqwo8b.cjs} +2 -2
- package/dist/cjs/chunks/{dist-CVKbkSUX.cjs → dist-CiVAEX5i.cjs} +2 -2
- package/dist/cjs/chunks/{dist-Dar77TD5.cjs → dist-DDS4P2yt.cjs} +2 -2
- package/dist/cjs/chunks/{dist-B_S2qDE8.cjs → dist-Dh7LsBxq.cjs} +2 -2
- package/dist/cjs/chunks/{expression-CqVJF7Up.cjs → expression-CO3CSbYd.cjs} +2 -2
- package/dist/cjs/chunks/{globe-viewport-Cy7fXEJR.cjs → globe-viewport-D1yIuqYX.cjs} +2 -2
- package/dist/cjs/chunks/{icon-origin-point-Bj3Liz0V.cjs → icon-origin-point-Bt8oX8FA.cjs} +2 -2
- package/dist/cjs/chunks/{meshopt_decoder.module-AyBTxqo4.cjs → meshopt_decoder.module-Bk6j-o8V.cjs} +2 -2
- package/dist/cjs/chunks/{repeat_icon-DzHJ0GL_.cjs → repeat_icon-BEd6gL1X.cjs} +2 -2
- package/dist/cjs/chunks/{rolldown-runtime-q6IekecT.cjs → rolldown-runtime-DJKPJnot.cjs} +2 -2
- package/dist/cjs/chunks/{shader-type-decoder-axsbbPco.cjs → shader-type-decoder-D5AGkPPj.cjs} +2 -2
- package/dist/cjs/chunks/{styles-Di9G-XQi.cjs → styles-DrSaht0q.cjs} +2 -2
- package/dist/cjs/chunks/{three.module-C0_ADYQD.cjs → three.module-Cb7BgQfP.cjs} +2 -2
- package/dist/cjs/chunks/{walking-D-LNDhrw.cjs → walking-ChGLFmdv.cjs} +2 -2
- package/dist/cjs/chunks/{webgl-544JMAWZ.cjs → webgl-C2jh1WTK.cjs} +2 -2
- package/dist/cjs/chunks/{webgl-device-CDnp7hBC.cjs → webgl-device-Dy1ruGCX.cjs} +2 -2
- package/dist/cjs/web-kit.cjs +5 -5
- package/dist/es/chunks/{DRACOLoader-DhHvfwrR.js → DRACOLoader-883EjV8X.js} +2 -2
- package/dist/es/chunks/{GLTFLoader-BXqFbldq.js → GLTFLoader-HXSQaGKT.js} +2 -2
- package/dist/es/chunks/{KTX2Loader-89MZe3TT.js → KTX2Loader-DVOYJ-4Y.js} +2 -2
- package/dist/es/chunks/{accessibility-C3tJdK9R.js → accessibility-D-deEbwV.js} +2 -2
- package/dist/es/chunks/{back_arrow-KlmFvv0H.js → back_arrow-DjhoWjXs.js} +2 -2
- package/dist/es/chunks/{debug-hooks-EAre0eyT.js → debug-hooks-DWy-ovrh.js} +2 -2
- package/dist/es/chunks/{dist-DfkvAQXI.js → dist-47_p4Yxg.js} +2 -2
- package/dist/es/chunks/{dist-CUomzeVc.js → dist-DOZVk2yA.js} +2 -2
- package/dist/es/chunks/{dist-B52Hz0u5.js → dist-DggqP-gQ.js} +2 -2
- package/dist/es/chunks/{expression-BArVovP1.js → expression-XgnkW6Sk.js} +2 -2
- package/dist/es/chunks/{globe-viewport-DSFQ1IgJ.js → globe-viewport-CwpYcu3c.js} +2 -2
- package/dist/es/chunks/{icon-origin-point-9EjzWJfO.js → icon-origin-point-JEEMojyJ.js} +2 -2
- package/dist/es/chunks/{meshopt_decoder.module-DGlvLcRK.js → meshopt_decoder.module-CVnL-WFq.js} +2 -2
- package/dist/es/chunks/{repeat_icon-zufPHs-C.js → repeat_icon-O8PH3s5h.js} +2 -2
- package/dist/es/chunks/{rolldown-runtime-BmU5BQeP.js → rolldown-runtime-Lq6Z3lw4.js} +2 -2
- package/dist/es/chunks/{shader-type-decoder-BgpYT6UO.js → shader-type-decoder-CpvFwfxh.js} +2 -2
- package/dist/es/chunks/{styles-DKa4saDJ.js → styles-CSDlMZd2.js} +2 -2
- package/dist/es/chunks/{three.module-y4zBSx1c.js → three.module-jU3YiRA7.js} +2 -2
- package/dist/es/chunks/{walking-7Vq5kU_k.js → walking-CeG7IOqk.js} +2 -2
- package/dist/es/chunks/{webgl-Cl-M1sFB.js → webgl-CW6td6sd.js} +2 -2
- package/dist/es/chunks/{webgl-device-DF-CxjIt.js → webgl-device-ChYrAvsE.js} +2 -2
- package/dist/es/web-kit.mjs +5 -5
- package/dist/iife/web-kit.iife.js +3 -3
- package/dist/sw/mvx-tiles-sw.js +582 -0
- package/dist/types/index.d.ts +2 -8
- package/package.json +2 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! Web-kit v1.2.0-develop.
|
|
2
|
-
!function(){try{var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="ee0d500b-71ff-413f-8721-1d6d907635e2",e._sentryDebugIdIdentifier="sentry-dbid-ee0d500b-71ff-413f-8721-1d6d907635e2")}catch(e){}}();const e=require("./shader-type-decoder-axsbbPco.cjs");function t(e,t){if(!e)throw new Error(t||"loader assertion failed.")}"undefined"!=typeof self&&self,"undefined"!=typeof window&&window,"undefined"!=typeof global&&global,"undefined"!=typeof document&&document;var n=Boolean("object"!=typeof process||"[object process]"!==String(process)||process.browser),r="undefined"!=typeof process&&process.version&&/v([0-9]*)/.exec(process.version),o=(r&&parseFloat(r[1]),"4.5.4"[0]>="0"&&"4.5.4"[0]<="9"?"v4.5.4":"");var i=function(){const t=new e.ProbeLog({id:"loaders.gl"});return globalThis.loaders||={},globalThis.loaders.log=t,globalThis.loaders.version=o,globalThis.probe||={},globalThis.probe.loaders=t,t}(),s=e=>"function"==typeof e,a=e=>null!==e&&"object"==typeof e,c=e=>a(e)&&e.constructor==={}.constructor,l=e=>"undefined"!=typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer,u=e=>a(e)&&"number"==typeof e.byteLength&&"function"==typeof e.slice,h=e=>"undefined"!=typeof Response&&e instanceof Response||a(e)&&s(e.arrayBuffer)&&s(e.text)&&s(e.json),f=e=>"undefined"!=typeof Blob&&e instanceof Blob,d=e=>(e=>"undefined"!=typeof ReadableStream&&e instanceof ReadableStream||a(e)&&s(e.tee)&&s(e.cancel)&&s(e.getReader))(e)||(e=>a(e)&&s(e.read)&&s(e.pipe)&&(e=>"boolean"==typeof e)(e.readable))(e);function p(e,t){return m(e||{},t)}function m(e,t,n=0){if(n>3)return t;const r={...e};for(const[o,i]of Object.entries(t))i&&"object"==typeof i&&!Array.isArray(i)?r[o]=m(r[o]||{},t[o],n+1):r[o]=t[o];return r}var g=(globalThis._loadersgl_?.version||(globalThis._loadersgl_=globalThis._loadersgl_||{},globalThis._loadersgl_.version="4.5.4"),globalThis._loadersgl_.version);function b(e,t){if(!e)throw new Error(t||"loaders.gl assertion failed.")}"undefined"!=typeof self&&self,"undefined"!=typeof window&&window,"undefined"!=typeof global&&global,"undefined"!=typeof document&&document;var y="object"!=typeof process||"[object process]"!==String(process)||process.browser,_="function"==typeof importScripts,v="undefined"!=typeof window&&void 0!==window.orientation,w="undefined"!=typeof process&&process.version&&/v([0-9]*)/.exec(process.version),E=(w&&parseFloat(w[1]),class{name;workerThread;isRunning=!0;result;_resolve=()=>{};_reject=()=>{};constructor(e,t){this.name=e,this.workerThread=t,this.result=new Promise((e,t)=>{this._resolve=e,this._reject=t})}postMessage(e,t){this.workerThread.postMessage({source:"loaders.gl",type:e,payload:t})}done(e){b(this.isRunning),this.isRunning=!1,this._resolve(e)}error(e){b(this.isRunning),this.isRunning=!1,this._reject(e)}}),x=class{terminate(){}},P=new Map;function O(e){b(e.source&&!e.url||!e.source&&e.url);let t=P.get(e.source||e.url);var n;return t||(e.url&&(t=(n=e.url).startsWith("http")?T(`try {\n importScripts('${n}');\n} catch (error) {\n console.error(error);\n throw error;\n}`):n,P.set(e.url,t)),e.source&&(t=T(e.source),P.set(e.source,t))),b(t),t}function T(e){const t=new Blob([e],{type:"application/javascript"});return URL.createObjectURL(t)}function M(e,t=!0,n){const r=n||new Set;if(e){if(S(e))r.add(e);else if(S(e.buffer))r.add(e.buffer);else if(ArrayBuffer.isView(e));else if(t&&"object"==typeof e)for(const o in e)M(e[o],t,r)}else;return void 0===n?Array.from(r):[]}function S(e){return!!e&&(e instanceof ArrayBuffer||("undefined"!=typeof MessagePort&&e instanceof MessagePort||("undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas)))}var j=()=>{},A=class{name;source;url;terminated=!1;worker;onMessage;onError;_loadableURL="";static isSupported(){return"undefined"!=typeof Worker&&y||void 0!==x&&!y}constructor(e){const{name:t,source:n,url:r}=e;b(n||r),this.name=t,this.source=n,this.url=r,this.onMessage=j,this.onError=e=>console.log(e),this.worker=y?this._createBrowserWorker():this._createNodeWorker()}destroy(){this.onMessage=j,this.onError=j,this.worker.terminate(),this.terminated=!0}get isRunning(){return Boolean(this.onMessage)}postMessage(e,t){t=t||M(e),this.worker.postMessage(e,t)}_getErrorFromErrorEvent(e){let t="Failed to load ";return t+=`worker ${this.name} from ${this.url}. `,e.message&&(t+=`${e.message} in `),e.lineno&&(t+=`:${e.lineno}:${e.colno}`),new Error(t)}_createBrowserWorker(){this._loadableURL=O({source:this.source,url:this.url});const e=new Worker(this._loadableURL,{name:this.name});return e.onmessage=e=>{e.data?this.onMessage(e.data):this.onError(new Error("No data received"))},e.onerror=e=>{this.onError(this._getErrorFromErrorEvent(e)),this.terminated=!0},e.onmessageerror=e=>console.error(e),e}_createNodeWorker(){let e;if(this.url){const t=this.url.includes(":/")||this.url.startsWith("/")?this.url:`./${this.url}`,n=this.url.endsWith(".ts")||this.url.endsWith(".mjs")?"module":"commonjs";e=new x(t,{eval:!1,type:n})}else{if(!this.source)throw new Error("no worker");e=new x(this.source,{eval:!0})}return e.on("message",e=>{this.onMessage(e)}),e.on("error",e=>{this.onError(e)}),e.on("exit",e=>{}),e}},L=class{name="unnamed";source;url;maxConcurrency=1;maxMobileConcurrency=1;onDebug=()=>{};reuseWorkers=!0;props={};jobQueue=[];idleQueue=[];count=0;isDestroyed=!1;static isSupported(){return A.isSupported()}constructor(e){this.source=e.source,this.url=e.url,this.setProps(e)}destroy(){this.idleQueue.forEach(e=>e.destroy()),this.isDestroyed=!0}setProps(e){this.props={...this.props,...e},void 0!==e.name&&(this.name=e.name),void 0!==e.maxConcurrency&&(this.maxConcurrency=e.maxConcurrency),void 0!==e.maxMobileConcurrency&&(this.maxMobileConcurrency=e.maxMobileConcurrency),void 0!==e.reuseWorkers&&(this.reuseWorkers=e.reuseWorkers),void 0!==e.onDebug&&(this.onDebug=e.onDebug)}async startJob(e,t=(e,t,n)=>e.done(n),n=(e,t)=>e.error(t)){const r=new Promise(r=>(this.jobQueue.push({name:e,onMessage:t,onError:n,onStart:r}),this));return this._startQueuedJob(),await r}async _startQueuedJob(){if(!this.jobQueue.length)return;const e=this._getAvailableWorker();if(!e)return;const t=this.jobQueue.shift();if(t){this.onDebug({message:"Starting job",name:t.name,workerThread:e,backlog:this.jobQueue.length});const r=new E(t.name,e);e.onMessage=e=>t.onMessage(r,e.type,e.payload),e.onError=e=>t.onError(r,e),t.onStart(r);try{await r.result}catch(n){console.error(`Worker exception: ${n}`)}finally{this.returnWorkerToQueue(e)}}}returnWorkerToQueue(e){!y||this.isDestroyed||!this.reuseWorkers||this.count>this._getMaxConcurrency()?(e.destroy(),this.count--):this.idleQueue.push(e),this.isDestroyed||this._startQueuedJob()}_getAvailableWorker(){if(this.idleQueue.length>0)return this.idleQueue.shift()||null;if(this.count<this._getMaxConcurrency()){this.count++;const e=`${this.name.toLowerCase()} (#${this.count} of ${this.maxConcurrency})`;return new A({name:e,source:this.source,url:this.url})}return null}_getMaxConcurrency(){return v?this.maxMobileConcurrency:this.maxConcurrency}},I={maxConcurrency:3,maxMobileConcurrency:1,reuseWorkers:!0,onDebug:()=>{}},C=class e{props;workerPools=new Map;static _workerFarm;static isSupported(){return A.isSupported()}static getWorkerFarm(t={}){return e._workerFarm=e._workerFarm||new e({}),e._workerFarm.setProps(t),e._workerFarm}constructor(e){this.props={...I},this.setProps(e),this.workerPools=new Map}destroy(){for(const e of this.workerPools.values())e.destroy();this.workerPools=new Map}setProps(e){this.props={...this.props,...e};for(const t of this.workerPools.values())t.setProps(this._getWorkerPoolProps())}getWorkerPool(e){const{name:t,source:n,url:r}=e;let o=this.workerPools.get(t);return o||(o=new L({name:t,source:n,url:r}),o.setProps(this._getWorkerPoolProps()),this.workerPools.set(t,o)),o}_getWorkerPoolProps(){return{maxConcurrency:this.props.maxConcurrency,maxMobileConcurrency:this.props.maxMobileConcurrency,reuseWorkers:this.props.reuseWorkers,onDebug:this.props.onDebug}}};async function R(e,t,n,r,o){const i=e.id,s=function(e,t={}){const n=t[e.id]||{},r=y?e.workerFile||`${e.id}-worker.js`:`${e.id}-worker-node.js`;let o=n.workerUrl;if(o||"compression"!==e.id||(o=t.workerUrl),"test"===(t._workerType||t?.core?._workerType)&&(o=y?`modules/${e.module}/dist/${r}`:`modules/${e.module}/src/workers/${e.id}-worker-node.ts`),!o){let t=e.version;"latest"===t&&(t="latest");const n=t?`@${t}`:"";o=`https://unpkg.com/@loaders.gl/${e.module}${n}/dist/${r}`}return b(o),o}(e,n),a=C.getWorkerFarm(n?.core).getWorkerPool({name:i,url:s});(n=JSON.parse(JSON.stringify(n||{})))._workerLoaderId=e.id,r=JSON.parse(JSON.stringify(r||{}));const c=await a.startJob("process-on-worker",$.bind(null,o));return c.postMessage("process",{input:t,options:n,context:r}),await(await c.result).result}async function $(e,t,n,r){switch(n){case"done":t.done(r);break;case"error":t.error(new Error(r.error));break;case"process":const{id:i,input:s,options:a}=r;try{const n=await e(s,a);t.postMessage("done",{id:i,result:n})}catch(o){const e=o instanceof Error?o.message:"unknown error";t.postMessage("error",{id:i,error:e})}break;default:console.warn(`parse-with-worker unknown message ${n}`)}}function k(...e){return function(e){const t=e.map(e=>e instanceof ArrayBuffer?new Uint8Array(e):e),n=t.reduce((e,t)=>e+t.byteLength,0),r=new Uint8Array(n);let o=0;for(const i of t)r.set(i,o),o+=i.byteLength;return r.buffer}(e)}function N(e,t,n){const r=void 0!==n?new Uint8Array(e).subarray(t,t+n):new Uint8Array(e).subarray(t);return new Uint8Array(r).buffer}function D(e){if(e instanceof ArrayBuffer)return e;if(ArrayBuffer.isView(e)){const{buffer:t,byteOffset:n,byteLength:r}=e;return z(t,n,r)}return z(e)}function z(e,t=0,n=e.byteLength-t){const r=new Uint8Array(e,t,n),o=new Uint8Array(r.length);return o.set(r),o.buffer}function U(){let e;if("undefined"!=typeof window&&window.performance)e=window.performance.now();else if("undefined"!=typeof process&&process.hrtime){const t=process.hrtime();e=1e3*t[0]+t[1]/1e6}else e=Date.now();return e}var W=class{constructor(e,t){this.sampleSize=1,this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this.name=e,this.type=t,this.reset()}reset(){return this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this}setSampleSize(e){return this.sampleSize=e,this}incrementCount(){return this.addCount(1),this}decrementCount(){return this.subtractCount(1),this}addCount(e){return this._count+=e,this._samples++,this._checkSampling(),this}subtractCount(e){return this._count-=e,this._samples++,this._checkSampling(),this}addTime(e){return this._time+=e,this.lastTiming=e,this._samples++,this._checkSampling(),this}timeStart(){return this._startTime=U(),this._timerPending=!0,this}timeEnd(){return this._timerPending?(this.addTime(U()-this._startTime),this._timerPending=!1,this._checkSampling(),this):this}getSampleAverageCount(){return this.sampleSize>0?this.lastSampleCount/this.sampleSize:0}getSampleAverageTime(){return this.sampleSize>0?this.lastSampleTime/this.sampleSize:0}getSampleHz(){return this.lastSampleTime>0?this.sampleSize/(this.lastSampleTime/1e3):0}getAverageCount(){return this.samples>0?this.count/this.samples:0}getAverageTime(){return this.samples>0?this.time/this.samples:0}getHz(){return this.time>0?this.samples/(this.time/1e3):0}_checkSampling(){this._samples===this.sampleSize&&(this.lastSampleTime=this._time,this.lastSampleCount=this._count,this.count+=this._count,this.time+=this._time,this.samples+=this._samples,this._time=0,this._count=0,this._samples=0)}},F=class{constructor(e){this.stats={},this.id=e.id,this.stats={},this._initializeStats(e.stats),Object.seal(this)}get(e,t="count"){return this._getOrCreate({name:e,type:t})}get size(){return Object.keys(this.stats).length}reset(){for(const e of Object.values(this.stats))e.reset();return this}forEach(e){for(const t of Object.values(this.stats))e(t)}getTable(){const e={};return this.forEach(t=>{e[t.name]={time:t.time||0,count:t.count||0,average:t.getAverageTime()||0,hz:t.getHz()||0}}),e}_initializeStats(e=[]){e.forEach(e=>this._getOrCreate(e))}_getOrCreate(e){const{name:t,type:n}=e;let r=this.stats[t];return r||(r=e instanceof W?e:new W(t,n),this.stats[t]=r),r}},B={};function G(e){for(const t in B)if(e.startsWith(t)){const n=B[t];e=e.replace(t,n)}return e.startsWith("http://")||e.startsWith("https://")||(e=`${e}`),e}function V(e){return e&&"object"==typeof e&&e.isBuffer}function Y(e){if(V(e))return e;if(e instanceof ArrayBuffer)return e;if(l(e))return q(e);if(ArrayBuffer.isView(e)){const t=e.buffer;return 0===e.byteOffset&&e.byteLength===e.buffer.byteLength?t:t.slice(e.byteOffset,e.byteOffset+e.byteLength)}if("string"==typeof e){const t=e;return(new TextEncoder).encode(t).buffer}if(e&&"object"==typeof e&&e._toArrayBuffer)return e._toArrayBuffer();throw new Error("toArrayBuffer")}function X(e){if(e instanceof ArrayBuffer)return e;if(l(e))return q(e);const{buffer:t,byteOffset:n,byteLength:r}=e;return t instanceof ArrayBuffer&&0===n&&r===t.byteLength?t:q(t,n,r)}function q(e,t=0,n=e.byteLength-t){const r=new Uint8Array(e,t,n),o=new Uint8Array(r.length);return o.set(r),o.buffer}function H(){if("undefined"!=typeof process&&void 0!==process.cwd)return process.cwd();const e=window.location?.pathname;return e?.slice(0,e.lastIndexOf("/")+1)||""}function Z(e){const t=e?e.lastIndexOf("/"):-1;return t>=0?e.substr(t+1):e}function K(e){const t=e?e.lastIndexOf("/"):-1;return t>=0?e.substr(0,t):""}function J(...e){const t=[];for(let i=0;i<e.length;i++)t[i]=e[i];let n,r="",o=!1;for(let i=t.length-1;i>=-1&&!o;i--){let e;i>=0?e=t[i]:(void 0===n&&(n=H()),e=n),0!==e.length&&(r=`${e}/${r}`,o=e.charCodeAt(0)===Q)}return r=function(e,t){let n,r="",o=-1,i=0,s=!1;for(let a=0;a<=e.length;++a){if(a<e.length)n=e.charCodeAt(a);else{if(n===Q)break;n=Q}if(n===Q){if(o===a-1||1===i);else if(o!==a-1&&2===i){if(r.length<2||!s||r.charCodeAt(r.length-1)!==ee||r.charCodeAt(r.length-2)!==ee)if(r.length>2){const e=r.length-1;let t=e;for(;t>=0&&r.charCodeAt(t)!==Q;--t);if(t!==e){r=-1===t?"":r.slice(0,t),o=a,i=0,s=!1;continue}}else if(2===r.length||1===r.length){r="",o=a,i=0,s=!1;continue}t&&(r.length>0?r+="/..":r="..",s=!0)}else{const t=e.slice(o+1,a);r.length>0?r+=`/${t}`:r=t,s=!1}o=a,i=0}else n===ee&&-1!==i?++i:i=-1}return r}(r,!o),o?`/${r}`:r.length>0?r:"."}var Q=47,ee=46;var te=class extends Error{constructor(e,t){super(e),this.reason=t.reason,this.url=t.url,this.response=t.response}reason;url;response},ne=/^data:([-\w.]+\/[-\w.+]+)(;|,)/,re=/^([-\w.]+\/[-\w.+]+)/;function oe(e,t){return e.toLowerCase()===t.toLowerCase()}function ie(e){const t=ne.exec(e);return t?t[1]:""}var se=/\?.*/;function ae(e){return e.replace(se,"")}function ce(e){return h(e)?e.url:f(e)?("name"in e?e.name:"")||"":"string"==typeof e?e:""}function le(e){if(h(e)){const t=e.headers.get("content-type")||"",n=ae(e.url);return function(e){const t=re.exec(e);return t?t[1]:e}(t)||ie(n)}return f(e)?e.type||"":"string"==typeof e?ie(e):""}async function ue(e){if(h(e))return e;const t={},n=function(e){return h(e)?e.headers["content-length"]||-1:f(e)?e.size:"string"==typeof e?e.length:e instanceof ArrayBuffer||ArrayBuffer.isView(e)?e.byteLength:-1}(e);n>=0&&(t["content-length"]=String(n));const r=ce(e),o=le(e);o&&(t["content-type"]=o);const i=await async function(e){const t=5;if("string"==typeof e)return`data:,${e.slice(0,t)}`;if(e instanceof Blob){const t=e.slice(0,5);return await new Promise(e=>{const n=new FileReader;n.onload=t=>e(t?.target?.result),n.readAsDataURL(t)})}return e instanceof ArrayBuffer?`data:base64,${function(e){let t="";const n=new Uint8Array(e);for(let r=0;r<n.byteLength;r++)t+=String.fromCharCode(n[r]);return btoa(t)}(e.slice(0,t))}`:null}(e);i&&(t["x-first-bytes"]=i),"string"==typeof e&&(e=(new TextEncoder).encode(e));const s=new Response(e,{headers:t});return Object.defineProperty(s,"url",{value:r}),s}async function he(e){if(!e.ok)throw await async function(e){const t=function(e){if(e.length<50)return e;const t=e.slice(e.length-15);return`${e.substr(0,32)}...${t}`}(e.url);let n=`Failed to fetch resource (${e.status}) ${e.statusText}: ${t}`;n=n.length>100?`${n.slice(0,100)}...`:n;const r={reason:e.statusText,url:e.url,response:e};try{const t=e.headers.get("Content-Type");r.reason=!e.bodyUsed&&t?.includes("application/json")?await e.json():await e.text()}catch(o){}return new te(n,r)}(e)}async function fe(e,t){if("string"==typeof e){const n=G(e);return function(e){return!function(e){return e.startsWith("http:")||e.startsWith("https:")}(e)&&!function(e){return e.startsWith("data:")}(e)}(n)&&globalThis.loaders?.fetchNode?globalThis.loaders?.fetchNode(n,t):await fetch(n,t)}return await ue(e)}var de=new e.ProbeLog({id:"loaders.gl"}),pe=class{log(){return()=>{}}info(){return()=>{}}warn(){return()=>{}}error(){return()=>{}}},me={core:{baseUrl:void 0,fetch:null,mimeType:void 0,fallbackMimeType:void 0,ignoreRegisteredLoaders:void 0,nothrow:!1,log:new class{console;constructor(){this.console=console}log(...e){return this.console.log.bind(this.console,...e)}info(...e){return this.console.info.bind(this.console,...e)}warn(...e){return this.console.warn.bind(this.console,...e)}error(...e){return this.console.error.bind(this.console,...e)}},useLocalLibraries:!1,CDN:"https://unpkg.com/@loaders.gl",worker:!0,maxConcurrency:3,maxMobileConcurrency:1,reuseWorkers:n,_nodeWorkers:!1,_workerType:"",limit:0,_limitMB:0,batchSize:"auto",batchDebounceMs:0,metadata:!1,transforms:[]}},ge={baseUri:"core.baseUrl",fetch:"core.fetch",mimeType:"core.mimeType",fallbackMimeType:"core.fallbackMimeType",ignoreRegisteredLoaders:"core.ignoreRegisteredLoaders",nothrow:"core.nothrow",log:"core.log",useLocalLibraries:"core.useLocalLibraries",CDN:"core.CDN",worker:"core.worker",maxConcurrency:"core.maxConcurrency",maxMobileConcurrency:"core.maxMobileConcurrency",reuseWorkers:"core.reuseWorkers",_nodeWorkers:"core.nodeWorkers",_workerType:"core._workerType",_worker:"core._workerType",limit:"core.limit",_limitMB:"core._limitMB",batchSize:"core.batchSize",batchDebounceMs:"core.batchDebounceMs",metadata:"core.metadata",transforms:"core.transforms",throws:"nothrow",dataType:"(no longer used)",uri:"core.baseUrl",method:"core.fetch.method",headers:"core.fetch.headers",body:"core.fetch.body",mode:"core.fetch.mode",credentials:"core.fetch.credentials",cache:"core.fetch.cache",redirect:"core.fetch.redirect",referrer:"core.fetch.referrer",referrerPolicy:"core.fetch.referrerPolicy",integrity:"core.fetch.integrity",keepalive:"core.fetch.keepalive",signal:"core.fetch.signal"},be=["baseUrl","fetch","mimeType","fallbackMimeType","ignoreRegisteredLoaders","nothrow","log","useLocalLibraries","CDN","worker","maxConcurrency","maxMobileConcurrency","reuseWorkers","_nodeWorkers","_workerType","limit","_limitMB","batchSize","batchDebounceMs","metadata","transforms"];function ye(){globalThis.loaders=globalThis.loaders||{};const{loaders:e}=globalThis;return e._state||(e._state={}),e._state}function _e(){const e=ye();return e.globalOptions=e.globalOptions||{...me,core:{...me.core}},we(e.globalOptions)}function ve(e,t,n,r){return n=n||[],function(e,t){Ee(e,null,me,ge,t);for(const n of t){const r=e&&e[n.id]||{},o=n.options&&n.options[n.id]||{},i=n.deprecatedOptions&&n.deprecatedOptions[n.id]||{};Ee(r,n.id,o,i,t)}}(e,n=Array.isArray(n)?n:[n]),we(function(e,t,n){const r=e.options||{},o={...r};r.core&&(o.core={...r.core});Oe(o),null===o.core?.log&&(o.core={...o.core,log:new pe});return Pe(o,we(_e())),Pe(o,we(t)),function(e,t){if(!t)return;void 0===e.core?.baseUrl&&(e.core||={},e.core.baseUrl=K(ae(t)))}(o,n),function(e){const t=e.core;if(!t)return;for(const n of be)void 0!==t[n]&&(e[n]=t[n])}(o),o}(t,e,r))}function we(e){const t=function(e){const t={...e};e.core&&(t.core={...e.core});return t}(e);Oe(t);for(const n of be)t.core&&void 0!==t.core[n]&&delete t[n];return t.core&&void 0!==t.core._workerType&&delete t._worker,t}function Ee(e,t,n,r,o){const i=t||"Top level",s=t?`${t}.`:"";for(const c in e){const l=!t&&a(e[c]);if(!(c in n)&&!("baseUri"===c&&!t)&&!("workerUrl"===c&&t))if(c in r)de.level>0&&de.warn(`${i} loader option '${s}${c}' no longer supported, use '${r[c]}'`)();else if(!l&&de.level>0){const e=xe(c,o);de.warn(`${i} loader option '${s}${c}' not recognized. ${e}`)()}}}function xe(e,t){const n=e.toLowerCase();let r="";for(const o of t)for(const t in o.options){if(e===t)return`Did you mean '${o.id}.${t}'?`;const i=t.toLowerCase();(n.startsWith(i)||i.startsWith(n))&&(r=r||`Did you mean '${o.id}.${t}'?`)}return r}function Pe(e,t){for(const n in t)if(n in t){const r=t[n];c(r)&&c(e[n])?e[n]={...e[n],...t[n]}:e[n]=t[n]}}function Oe(e){void 0!==e.baseUri&&(e.core||={},void 0===e.core.baseUrl&&(e.core.baseUrl=e.baseUri));for(const n of be)if(void 0!==e[n]){const t=e.core=e.core||{};void 0===t[n]&&(t[n]=e[n])}const t=e._worker;void 0!==t&&(e.core||={},void 0===e.core._workerType&&(e.core._workerType=t))}function Te(e){return!!e&&(Array.isArray(e)&&(e=e[0]),Array.isArray(e?.extensions))}function Me(e){let n;return t(e,"null loader"),t(Te(e),"invalid loader"),Array.isArray(e)&&(n=e[1],e=e[0],e={...e,options:{...e.options,...n}}),(e?.parseTextSync||e?.parseText)&&(e.text=!0),e.text||(e.binary=!0),e}var Se=()=>{const e=ye();return e.loaderRegistry=e.loaderRegistry||[],e.loaderRegistry};function je(e){const t=Se();e=Array.isArray(e)?e:[e];for(const n of e){const e=Me(n);t.find(t=>e===t)||t.unshift(e)}}var Ae=/\.([^.]+)$/;function Le(e){const t=le(e);return Boolean(t&&(t.startsWith("text/")||"application/json"===t||t.endsWith("+json")))}function Ie(e,t=[],n,r){if(!Ce(e))return null;const o=we(n||{});if(o.core||={},t&&!Array.isArray(t))return Me(t);let s=[];t&&(s=s.concat(t)),o.core.ignoreRegisteredLoaders||s.push(...Se()),function(e){for(const t of e)Me(t)}(s);const a=function(e,t,n,r){const o=ce(e),s=le(e),a=ae(o)||r?.url;let c=null,l="";n?.core?.mimeType&&(c=$e(t,n?.core?.mimeType),l=`match forced by supplied MIME type ${n?.core?.mimeType}`);c=c||function(e,t){const n=t&&Ae.exec(t),r=n&&n[1];return r?function(e,t){t=t.toLowerCase();for(const n of e)for(const e of n.extensions)if(e.toLowerCase()===t)return n;return null}(e,r):null}(t,a),l=l||(c?`matched url ${a}`:""),c=c||$e(t,s),l=l||(c?`matched MIME type ${s}`:""),c=c||function(e,t){if(!t)return null;for(const n of e)if("string"==typeof t){if(ke(t,n))return n}else if(ArrayBuffer.isView(t)){if(Ne(t.buffer,t.byteOffset,n))return n}else if(t instanceof ArrayBuffer&&Ne(t,0,n))return n;return null}(t,e),l=l||(c?`matched initial data ${De(e)}`:""),n?.core?.fallbackMimeType&&(c=c||$e(t,n?.core?.fallbackMimeType),l=l||(c?`matched fallback MIME type ${s}`:""));l&&i.log(1,`selectLoader selected ${c?.name}: ${l}.`);return c}(e,s,o,r);if(!a&&!o.core.nothrow)throw new Error(Re(e));return a}function Ce(e){return!(e instanceof Response&&204===e.status)}function Re(e){const t=ce(e),n=le(e);let r="No valid loader found (";r+=t?`${Z(t)}, `:"no url provided, ",r+=`MIME type: ${n?`"${n}"`:"not provided"}, `;const o=e?De(e):"";return r+=o?` first bytes: "${o}"`:"first bytes: not available",r+=")",r}function $e(e,t){for(const n of e){if(n.mimeTypes?.some(e=>oe(t,e)))return n;if(oe(t,`application/x.${n.id}`))return n}return null}function ke(e,t){return t.testText?t.testText(e):(Array.isArray(t.tests)?t.tests:[t.tests]).some(t=>e.startsWith(t))}function Ne(e,t,n){return(Array.isArray(n.tests)?n.tests:[n.tests]).some(n=>function(e,t,n,r){if(u(r))return function(e,t,n){if(n=n||e.byteLength,e.byteLength<n||t.byteLength<n)return!1;const r=new Uint8Array(e),o=new Uint8Array(t);for(let i=0;i<r.length;++i)if(r[i]!==o[i])return!1;return!0}(r,e,r.byteLength);switch(typeof r){case"function":return r(X(e));case"string":return r===ze(e,t,r.length);default:return!1}}(e,t,0,n))}function De(e,t=5){return"string"==typeof e?e.slice(0,t):ArrayBuffer.isView(e)?ze(e.buffer,e.byteOffset,t):e instanceof ArrayBuffer?ze(e,0,t):""}function ze(e,t,n){if(e.byteLength<t+n)return"";const r=new DataView(e);let o="";for(let i=0;i<n;i++)o+=String.fromCharCode(r.getUint8(t+i));return o}var Ue=262144;function We(e,t){return n?async function*(e,t){const n=e.getReader();let r;try{for(;;){const e=r||n.read();t?._streamReadAhead&&(r=n.read());const{done:o,value:i}=await e;if(o)return;yield Y(i)}}catch(o){n.releaseLock()}}(e,t):async function*(e){for await(const t of e)yield Y(t)}(e)}function Fe(e,t){if("string"==typeof e)return function*(e,t){const n=t?.chunkSize||262144;let r=0;const o=new TextEncoder;for(;r<e.length;){const t=Math.min(e.length-r,n),i=e.slice(r,r+t);r+=t,yield X(o.encode(i))}}(e,t);if(e instanceof ArrayBuffer)return function*(e,t={}){const{chunkSize:n=Ue}=t;let r=0;for(;r<e.byteLength;){const t=Math.min(e.byteLength-r,n),o=new ArrayBuffer(t),i=new Uint8Array(e,r,t);new Uint8Array(o).set(i),r+=t,yield o}}(e,t);if(f(e))return async function*(e,t){const n=t?.chunkSize||1048576;let r=0;for(;r<e.size;){const t=r+n,o=await e.slice(r,t).arrayBuffer();r=t,yield o}}(e,t);if(d(e))return We(e,t);if(h(e)){const n=e.body;if(!n)throw new Error("Readable stream not available on Response");return We(n,t)}throw new Error("makeIterator")}var Be="Cannot convert supplied data type";function Ge(e,t,n){if(t.text&&"string"==typeof e)return e;if(V(e)&&(e=e.buffer),u(e)){const n=function(e){return ArrayBuffer.isView(e)?e:new Uint8Array(e)}(e);return t.text&&!t.binary?new TextDecoder("utf8").decode(n):Y(n)}throw new Error(Be)}async function Ve(e,t,n){if("string"==typeof e||u(e))return Ge(e,t);if(f(e)&&(e=await ue(e)),h(e))return await he(e),t.binary?await e.arrayBuffer():await e.text();if(d(e)&&(e=Fe(e,n)),r=e,Boolean(r)&&s(r[Symbol.iterator])||(e=>Boolean(e)&&s(e[Symbol.asyncIterator]))(e))return async function(e){const t=[];for await(const n of e)t.push(D(n));return k(...t)}(e);var r;throw new Error(Be)}function Ye(e,t){const n=_e(),r=e||n,o=r.fetch??r.core?.fetch;return"function"==typeof o?o:a(o)?e=>fe(e,o):t?.fetch?t?.fetch:fe}function Xe(e,t,n){if(n)return n;const r={fetch:Ye(t,e),...e};if(r.url){const e=ae(r.url);r.baseUrl=e,r.queryString=function(e){const t=e.match(se);return t&&t[0]}(r.url),r.filename=Z(e),r.baseUrl=K(e)}return Array.isArray(r.loaders)||(r.loaders=null),r}async function qe(e,t,n,r){!t||Array.isArray(t)||Te(t)||(r=void 0,n=t,t=void 0),n=n||{};const o=ce(e=await e),i=function(e,t){if(e&&!Array.isArray(e))return e;let n;if(e&&(n=Array.isArray(e)?e:[e]),t&&t.loaders){const e=Array.isArray(t.loaders)?t.loaders:[t.loaders];n=n?[...n,...e]:e}return n&&n.length?n:void 0}(t,r),s=await async function(e,t=[],n,r){if(!Ce(e))return null;const o=we(n||{});if(o.core||={},e instanceof Response&&Le(e)){const n=Ie(await e.clone().text(),t,{...o,core:{...o.core,nothrow:!0}},r);if(n)return n}let i=Ie(e,t,{...o,core:{...o.core,nothrow:!0}},r);if(i)return i;if(f(e)&&(i=Ie(e=await e.slice(0,10).arrayBuffer(),t,o,r)),!i&&e instanceof Response&&Le(e)&&(i=Ie(await e.clone().text(),t,o,r)),!i&&!o.core.nothrow)throw new Error(Re(e));return i}(e,i,n);if(!s)return null;const a=ve(n,s,i,o);return r=Xe({url:o,_parse:qe,loaders:i},a,r||null),await async function(e,t,n,r){if(function(e){b(e,"no worker provided");const t=e.version}(e),n=p(e.options,n),h(t)){const{ok:e,redirected:n,status:o,statusText:i,type:s,url:a}=t;r.response={headers:Object.fromEntries(t.headers.entries()),ok:e,redirected:n,status:o,statusText:i,type:s,url:a}}t=await Ve(t,e,n);const o=e;if(o.parseTextSync&&"string"==typeof t)return o.parseTextSync(t,n,r);if(function(e,t){if(!C.isSupported())return!1;if(!y&&!(t?._nodeWorkers??t?.core?._nodeWorkers))return!1;const n=t?.worker??t?.core?.worker;return Boolean(e.worker&&n)}(e,n))return await R(e,t,n,r,qe);if(o.parseText&&"string"==typeof t)return await o.parseText(t,n,r);if(o.parse)return await o.parse(t,n,r);throw b(!o.parseSync),new Error(`${e.id} loader - no parser found and worker is disabled`)}(s,e,a,r)}async function He(e,t,n,r){let o,i;Array.isArray(t)||Te(t)?(o=t,i=n):(o=[],i=t);const s=Ye(i);let a=e;return"string"==typeof e&&(a=await s(e)),f(e)&&(a=await s(e)),"string"==typeof e&&(we(i||{}).core?.baseUrl||(i={...i,core:{...i?.core,baseUrl:e}})),Array.isArray(o),await qe(a,o,i)}var Ze=new e.ProbeLog({id:"deck"}),Ke={attributeUpdateStart:-1,attributeManagerUpdateStart:-1,attributeUpdateMessages:[]},Je={};function Qe(e){Je=e}function et(e,t,n,r){Ze.level>0&&Je[e]&&Je[e].call(null,t,n,r)}"production"!==process.env.NODE_ENV&&(Je=(e=>({"layer.changeFlag":(t,n,r)=>{e.log(3,`${t.id} ${n}: `,r[n])()},"layer.initialize":t=>{e.log(1,`Initializing ${t}`)()},"layer.update":(t,n)=>{if(n){const n=t.getChangeFlags();e.log(2,`Updating ${t} because: ${Object.keys(n).filter(e=>n[e]).join(", ")}`)()}else e.log(4,`${t} does not need update`)()},"layer.matched":(t,n)=>{n&&e.log(4,`Matched ${t}, state transfered`)()},"layer.finalize":t=>{e.log(1,`Finalizing ${t}`)()},"compositeLayer.renderLayers":(t,n,r)=>{n?e.log(2,`Composite layer rendered new subLayers ${t}`,r)():e.log(4,`Composite layer reused subLayers ${t}`,r)()},"layerManager.setLayers":(t,n,r)=>{n&&e.log(2,`Updating ${r.length} deck layers`)()},"layerManager.activateViewport":(t,n)=>{e.log(3,"Viewport changed",n)()},"attributeManager.invalidate":(t,n,r)=>{e.log(1,r?`invalidated attributes ${r} (${n}) for ${t.id}`:`invalidated all attributes for ${t.id}`)()},"attributeManager.updateStart":e=>{Ke.attributeUpdateMessages.length=0,Ke.attributeManagerUpdateStart=Date.now()},"attributeManager.updateEnd":(t,n)=>{const r=Math.round(Date.now()-Ke.attributeManagerUpdateStart);e.groupCollapsed(2,`Updated attributes for ${n} instances in ${t.id} in ${r}ms`)();for(const o of Ke.attributeUpdateMessages)e.log(3,o)();e.groupEnd(2)()},"attribute.updateStart":e=>{Ke.attributeUpdateStart=Date.now()},"attribute.allocate":(e,t)=>{const n=`${e.id} allocated ${t}`;Ke.attributeUpdateMessages.push(n)},"attribute.updateEnd":(e,t)=>{const n=Math.round(Date.now()-Ke.attributeUpdateStart),r=`${e.id} updated ${t} in ${n}ms`;Ke.attributeUpdateMessages.push(r)},"deckRenderer.renderLayers":(t,n,r)=>{const{pass:o,redrawReason:i}=r;for(const s of n){const{totalCount:n,visibleCount:r,compositeCount:a,pickableCount:c}=s,l=n-a-r;e.log(2,`RENDER #${t.renderCount} ${r} (of ${n} layers) to ${o} because ${i} (${l} hidden, ${a} composite ${c} pickable)`)()}}}))(Ze));var tt="(?:var<\\s*(uniform|storage(?:\\s*,\\s*[A-Za-z_][A-Za-z0-9_]*)?)\\s*>|var)\\s+([A-Za-z_][A-Za-z0-9_]*)",nt="\\s*",rt=[new RegExp(`@binding\\(\\s*(auto|\\d+)\\s*\\)${nt}@group\\(\\s*(\\d+)\\s*\\)${nt}${tt}`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)${nt}@binding\\(\\s*(auto|\\d+)\\s*\\)${nt}${tt}`,"g")],ot=[new RegExp(`@binding\\(\\s*(auto|\\d+)\\s*\\)${nt}@group\\(\\s*(\\d+)\\s*\\)${nt}${tt}`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)${nt}@binding\\(\\s*(auto|\\d+)\\s*\\)${nt}${tt}`,"g")],it=[new RegExp(`@binding\\(\\s*(\\d+)\\s*\\)${nt}@group\\(\\s*(\\d+)\\s*\\)${nt}${tt}`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)${nt}@binding\\(\\s*(\\d+)\\s*\\)${nt}${tt}`,"g")],st=[new RegExp(`@binding\\(\\s*(auto)\\s*\\)\\s*@group\\(\\s*(\\d+)\\s*\\)\\s*${tt}`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)\\s*@binding\\(\\s*(auto)\\s*\\)\\s*${tt}`,"g"),new RegExp(`@binding\\(\\s*(auto)\\s*\\)\\s*@group\\(\\s*(\\d+)\\s*\\)(?:[\\s\\n\\r]*@[A-Za-z_][^\\n\\r]*)*[\\s\\n\\r]*${tt}`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)\\s*@binding\\(\\s*(auto)\\s*\\)(?:[\\s\\n\\r]*@[A-Za-z_][^\\n\\r]*)*[\\s\\n\\r]*${tt}`,"g")];function at(e){const t=e.split("");let n=0,r=0,o=!1,i=!1,s=!1;for(;n<e.length;){const a=e[n],c=e[n+1];if(i)s?s=!1:"\\"===a?s=!0:'"'===a&&(i=!1),n++;else if(o)"\n"===a||"\r"===a?o=!1:t[n]=" ",n++;else if(r>0){if("/"===a&&"*"===c){t[n]=" ",t[n+1]=" ",r++,n+=2;continue}if("*"===a&&"/"===c){t[n]=" ",t[n+1]=" ",r--,n+=2;continue}"\n"!==a&&"\r"!==a&&(t[n]=" "),n++}else'"'!==a?"/"!==a||"/"!==c?"/"!==a||"*"!==c?n++:(t[n]=" ",t[n+1]=" ",r=1,n+=2):(t[n]=" ",t[n+1]=" ",o=!0,n+=2):(i=!0,n++)}return t.join("")}function ct(e,t){const n=at(e),r=[];for(const o of t){let i;for(o.lastIndex=0,i=o.exec(n);i;){const s=o===t[0],a=i.index,c=i[0].length;r.push({match:e.slice(a,a+c),index:a,length:c,bindingToken:i[s?1:2],groupToken:i[s?2:1],accessDeclaration:i[3]?.trim(),name:i[4]}),i=o.exec(n)}}return r.sort((e,t)=>e.index-t.index)}function lt(e,t,n){const r=ct(e,t);if(!r.length)return e;let o="",i=0;for(const s of r)o+=e.slice(i,s.index),o+=n(s),i=s.index+s.length;return o+=e.slice(i),o}function ut(e){return/@binding\(\s*auto\s*\)/.test(at(e))}function ht(e,t={}){const n=ft(e),r=function(e){const t=[];let n=0;for(const r of e){if("}"===r.value&&0===n)return null;t.push(n),"{"===r.value?n++:"}"===r.value&&n--}return 0===n?t:null}(n);if(!r)return null;const o=function(e,t){const n=new Map;for(let r=0;r<e.length;r++){if(0!==t[r]||"alias"!==e[r].value)continue;const o=e[r+1]?.value;if(!Ot(o)||"="!==e[r+2]?.value||n.has(o))return null;const i=Et(e,t,r+3,";");if(i<0||i===r+3)return null;n.set(o,Pt(e.slice(r+3,i))),r=i}return n}(n,r);if(!o)return null;const i=function(e,t,n){const r=[],o=new Set,i=new Set;for(let s=0;s<e.length;s++){if(0!==t[s]||"var"!==e[s].value)continue;const a=xt(e,t,s),c=e.slice(a,s),l=bt(c,"group"),u=bt(c,"binding");if(null===l||null===u||void 0===l!=(void 0===u))return null;if(void 0===l||void 0===u)continue;let h=s+1,f=[];if("<"===e[h]?.value){const t=vt(e,h,"<",">");if(t<0)return null;const n=wt(e.slice(h+1,t),",");if(!n)return null;f=n.map(Pt),h=t+1}const d=e[h]?.value;if(!Ot(d)||":"!==e[h+1]?.value)return null;const p=Et(e,t,h+2,";");if(p<0||p===h+2)return null;const m=mt(Pt(e.slice(h+2,p)),n);if(!m)return null;const g=dt({name:d,group:l,location:u,addressSpace:f,resourceType:m}),b=`${l}:${u}`;if(!g||o.has(b)||i.has(d))return null;r.push(g),o.add(b),i.add(d),s=p}return function(e){for(const t of e){if("sampler"!==t.type||t.samplerType||!t.name.endsWith("Sampler"))continue;const n=t.name.slice(0,-7);"depth"===e.find(e=>"texture"===e.type&&e.name===n&&e.group===t.group)?.sampleType&&(t.samplerType="non-filtering")}}(r),r.sort((e,t)=>e.group-t.group||e.location-t.location||e.name.localeCompare(t.name))}(n,r,o);if(!i)return null;if(!1===t.scanVertexAttributes)return{attributes:[],bindings:i};const s=function(e,t){const n=new Map;for(let r=0;r<e.length;r++){if(0!==t[r]||"struct"!==e[r].value)continue;const o=e[r+1]?.value,i=r+2;if(!Ot(o)||n.has(o)||"{"!==e[i]?.value)return null;const s=vt(e,i,"{","}");if(s<0)return null;n.set(o,e.slice(i+1,s)),r=s}return n}(n,r);if(!s)return null;const a=function(e,t,n,r,o){const i=function(e,t){const n=[],r=new Set;for(let o=0;o<e.length;o++){if(0!==t[o]||"fn"!==e[o].value)continue;const i=e[o+1]?.value,s=o+2;if(!Ot(i)||r.has(i)||"("!==e[s]?.value)return null;const a=vt(e,s,"(",")");if(a<0)return null;const c=xt(e,t,o);n.push({name:i,vertex:yt(e.slice(c,o),"vertex"),parameters:e.slice(s+1,a)}),r.add(i),o=a}return n}(e,t);if(!i)return null;const s=i.filter(e=>e.vertex),a=o?s.find(e=>e.name===o):1===s.length?s[0]:void 0;if(!a)return 0!==s.length||o?null:[];const c=wt(a.parameters,",");if(!c)return null;const l=[],u=new Set,h=new Set,f=new Set;for(const d of c)if(d.length>0&&!pt({declaration:d,aliases:n,structures:r,attributes:l,attributeLocations:u,attributeNames:h,visitedStructures:f}))return null;return l.sort((e,t)=>e.location-t.location||e.name.localeCompare(t.name))}(n,r,o,s,t.vertexEntryPoint);return a?{attributes:a,bindings:i}:null}function ft(e){const t=at(e),n=/[A-Za-z_][A-Za-z0-9_]*|(?:0[xX][0-9A-Fa-f]+|\d+)|[@(){}<>\[\]:,;=]/g,r=[];let o=n.exec(t);for(;o;)r.push({value:o[0],index:o.index}),o=n.exec(t);return r}function dt(e){const{name:t,group:n,location:r,addressSpace:o,resourceType:i}=e,s={name:t,group:n,location:r};if("uniform"===o[0]&&1===o.length)return{...s,type:"uniform"};if("storage"===o[0]&&o.length<=2){const e=o[1]||"read";return"read"===e?{...s,type:"read-only-storage"}:"read_write"===e?{...s,type:"storage"}:null}return o.length>0?null:"sampler"===i||"sampler_comparison"===i?{...s,type:"sampler",..."sampler_comparison"===i?{samplerType:"comparison"}:{}}:"texture_external"===i?{...s,type:"external-texture"}:function(e,t){const n=/^texture_storage_(1d|2d|2d_array|3d)<([A-Za-z0-9_]+),(read|write|read_write)>$/.exec(t);if(!n)return null;const r={read:"read-only",write:"write-only",read_write:"read-write"}[n[3]];return{...e,type:"storage",format:n[2],access:r,viewDimension:_t(n[1])}}(s,i)||function(e,t){const n=/^texture_(multisampled_)?(1d|2d|2d_array|cube|cube_array|3d)<(f32|i32|u32)>$/.exec(t);if(n){if(n[1]&&"2d"!==n[2])return null;const t={f32:"float",i32:"sint",u32:"uint"}[n[3]];return{...e,type:"texture",viewDimension:_t(n[2]),sampleType:t,multisampled:Boolean(n[1])}}const r=/^texture_depth_(multisampled_)?(2d|2d_array|cube|cube_array)$/.exec(t);return!r||r[1]&&"2d"!==r[2]?null:{...e,type:"texture",viewDimension:_t(r[2]),sampleType:"depth",multisampled:Boolean(r[1])}}(s,i)}function pt(e){const{declaration:t,aliases:n,structures:r,attributes:o,attributeLocations:i,attributeNames:s,visitedStructures:a}=e,c=function(e,t){const n=wt(e,t);return n&&2===n.length?n[0].length:-1}(t,":");if(c<1||c===t.length-1)return!1;const l=function(e){for(let t=e.length-1;t>=0;t--)if(Ot(e[t].value))return e[t].value;return null}(t.slice(0,c)),u=bt(t.slice(0,c),"location"),h=yt(t.slice(0,c),"builtin"),f=mt(Pt(t.slice(c+1)),n);if(!l||null===u||!f||void 0!==u&&h)return!1;if(void 0!==u){const e=/^(?:i32|u32|f32|f16|vec[234]<(?:i32|u32|f32|f16)>)$/.test(d=f)?d:null;return!(!e||i.has(u)||s.has(l))&&(o.push({name:l,location:u,type:e}),i.add(u),s.add(l),!0)}var d;if(h)return!0;const p=r.get(f);if(!p||a.has(f))return!1;const m=wt(p,",");if(!m)return!1;a.add(f);for(const g of m)if(g.length>0&&!pt({...e,declaration:g}))return!1;return a.delete(f),!0}function mt(e,t,n=new Set){const r=ft(e);let o="";for(const i of r){const e=t.get(i.value);if(!e){o+=gt(i.value);continue}if(n.has(i.value))return null;const r=new Set(n);r.add(i.value);const s=mt(e,t,r);if(!s)return null;o+=s}return o}function gt(e){const t=/^(vec[234]|mat[234]x[234])([fiuh])$/.exec(e);if(!t)return e;const n={f:"f32",i:"i32",u:"u32",h:"f16"}[t[2]];return`${t[1]}<${n}>`}function bt(e,t){let n;for(let r=0;r<e.length;r++)if("@"===e[r].value&&e[r+1]?.value===t){if(void 0!==n||"("!==e[r+2]?.value||!/^\d+$/.test(e[r+3]?.value||"")||")"!==e[r+4]?.value)return null;n=Number(e[r+3].value)}return n}function yt(e,t){return e.some((n,r)=>"@"===n.value&&e[r+1]?.value===t)}function _t(e){return e.replace("_","-")}function vt(e,t,n,r){let o=0;for(let i=t;i<e.length;i++)if(e[i].value===n)o++;else if(e[i].value===r&&0===--o)return i;return-1}function wt(e,t){const n=[];let r=0;const o={"(":0,"<":0,"[":0,"{":0},i=Object.keys(o),s={")":"(",">":"<","]":"[","}":"{"};for(let a=0;a<e.length;a++){const c=e[a].value;if(c===t&&i.every(e=>0===o[e]))n.push(e.slice(r,a)),r=a+1;else if(c in o)o[c]++;else if(c in s){const e=s[c];if(o[e]--,o[e]<0)return null}}return i.every(e=>0===o[e])?(n.push(e.slice(r)),n):null}function Et(e,t,n,r){for(let o=n;o<e.length;o++)if(0===t[o]&&e[o].value===r)return o;return-1}function xt(e,t,n){for(let r=n-1;r>=0;r--)if(";"===e[r].value&&0===t[r]||"}"===e[r].value&&1===t[r])return r+1;return 0}function Pt(e){return e.map(e=>e.value).join("")}function Ot(e){return Boolean(e&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(e))}function Tt(e,t){if(!e){const e=new Error(t||"shadertools: assertion failed.");throw Error.captureStackTrace?.(e,Tt),e}}var Mt={number:{type:"number",validate:(e,t)=>Number.isFinite(e)&&"object"==typeof t&&(void 0===t.max||e<=t.max)&&(void 0===t.min||e>=t.min)},array:{type:"array",validate:(e,t)=>Array.isArray(e)||ArrayBuffer.isView(e)}};function St(e){let t=jt(e);if("object"!==t)return{value:e,...Mt[t],type:t};if("object"==typeof e)return e?void 0!==e.type?{...e,...Mt[e.type],type:e.type}:void 0===e.value?{type:"object",value:e}:(t=jt(e.value),{...e,...Mt[t],type:t}):{type:"object",value:null};throw new Error("props")}function jt(e){return Array.isArray(e)||ArrayBuffer.isView(e)?"array":typeof e}var At={vertex:"#ifdef MODULE_LOGDEPTH\n logdepth_adjustPosition(gl_Position);\n#endif\n",fragment:"#ifdef MODULE_MATERIAL\n fragColor = material_filterColor(fragColor);\n#endif\n\n#ifdef MODULE_LIGHTING\n fragColor = lighting_filterColor(fragColor);\n#endif\n\n#ifdef MODULE_FOG\n fragColor = fog_filterColor(fragColor);\n#endif\n\n#ifdef MODULE_PICKING\n fragColor = picking_filterHighlightColor(fragColor);\n fragColor = picking_filterPickingColor(fragColor);\n#endif\n\n#ifdef MODULE_LOGDEPTH\n logdepth_setFragDepth();\n#endif\n"},Lt=/void\s+main\s*\([^)]*\)\s*\{\n?/,It=/}\n?[^{}]*$/,Ct=[],Rt="__LUMA_INJECT_DECLARATIONS__";function $t(e){const t={vertex:{},fragment:{}};for(const n in e){let r=e[n];"string"==typeof r&&(r={order:0,injection:r}),t[kt(n)][n]=r}return t}function kt(e){const t=e.slice(0,2);switch(t){case"vs":return"vertex";case"fs":return"fragment";default:throw new Error(t)}}function Nt(e,t,n,r=!1,o="glsl",i={}){const s="vertex"===t;for(const a in n){const t=n[a];t.sort((e,t)=>e.order-t.order),Ct.length=t.length;for(let e=0,n=t.length;e<n;++e)Ct[e]=t[e].injection;const r=`${Ct.join("\n")}\n`;switch(a){case"vs:#decl":("wgsl"===o||s)&&(e=e.replace(Rt,r));break;case"vs:#main-start":("wgsl"===o||s)&&(e="wgsl"===o?Dt(e,"vertex",r,"start",i.vertex):e.replace(Lt,e=>e+r));break;case"vs:#main-end":("wgsl"===o||s)&&(e="wgsl"===o?Dt(e,"vertex",r,"end",i.vertex):e.replace(It,e=>r+e));break;case"fs:#decl":"wgsl"!==o&&s||(e=e.replace(Rt,r));break;case"fs:#main-start":"wgsl"!==o&&s||(e="wgsl"===o?Dt(e,"fragment",r,"start",i.fragment):e.replace(Lt,e=>e+r));break;case"fs:#main-end":"wgsl"!==o&&s||(e="wgsl"===o?Dt(e,"fragment",r,"end",i.fragment):e.replace(It,e=>r+e));break;default:e=e.replace(a,e=>e+r)}}return e=e.replace(Rt,""),r&&(e=e.replace(/\}\s*$/,e=>e+At[t])),e}function Dt(e,t,n,r,o){const i=function(e,t,n){const r="vertex"===t?"@vertex":"@fragment",o=e.indexOf(r);if(o<0)return null;const i=n?e.search(new RegExp(`\\bfn\\s+${s=n,s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*\\(`)):e.indexOf("fn",o);var s;if(i<0)return null;const a=e.indexOf("{",i);if(a<0)return null;let c=0;for(let l=a;l<e.length;l++){const t=e[l];if("{"===t)c++;else if("}"===t&&(c--,0===c))return{openBraceIndex:a,closeBraceIndex:l}}return null}(e,t,o);if(!i)return e;if("start"===r){const t=i.openBraceIndex+1;return`${e.slice(0,t)}\n${n}${e.slice(t)}`}return`${e.slice(0,i.closeBraceIndex)}${n}${e.slice(i.closeBraceIndex)}`}function zt(e){e.map(e=>function(e){if(e.instance)return;zt(e.dependencies||[]);const{propTypes:t={},deprecations:n=[],inject:r={}}=e,o={normalizedInjections:$t(r),parsedDeprecations:Wt(n)};t&&(o.propValidators=function(e){const t={};for(const[n,r]of Object.entries(e))t[n]=St(r);return t}(t));e.instance=o;let i={};t&&(i=Object.entries(t).reduce((e,[t,n])=>{const r=n?.value;return r&&(e[t]=r),e},{}));e.defaultUniforms={...e.defaultUniforms,...i}}(e))}function Ut(e,t,n){e.deprecations?.forEach(e=>{e.regex?.test(t)&&(e.deprecated?n.deprecated(e.old,e.new)():n.removed(e.old,e.new)())})}function Wt(e){return e.forEach(e=>{if("function"===e.type)e.regex=new RegExp(`\\b${e.old}\\(`);else e.regex=new RegExp(`${e.type} ${e.old};`)}),e}function Ft(e){zt(e);const t={},n={};Bt({modules:e,level:0,moduleMap:t,moduleDepth:n});const r=Object.keys(n).sort((e,t)=>n[t]-n[e]).map(e=>t[e]);return zt(r),r}function Bt(e){const{modules:t,level:n,moduleMap:r,moduleDepth:o}=e;if(n>=5)throw new Error("Possible loop in shader dependency graph");for(const i of t)r[i.name]=i,(void 0===o[i.name]||o[i.name]<n)&&(o[i.name]=n);for(const i of t)i.dependencies&&Bt({modules:i.dependencies,level:n+1,moduleMap:r,moduleDepth:o})}var Gt,Vt,Yt={id:null,powerPreference:"high-performance",failIfMajorPerformanceCaveat:!1,featureLevel:void 0,optionalFeatures:[],xrCompatible:!1,createCanvasContext:void 0,webgl:{},onError:(e,t)=>{},onResize:(t,n)=>{const[r,o]=t.getDevicePixelSize();e.log.log(1,`${t} resized => ${r}x${o}px`)()},onPositionChange:(t,n)=>{const[r,o]=t.getPosition();e.log.log(1,`${t} repositioned => ${r},${o}`)()},onVisibilityChange:t=>e.log.log(1,`${t} Visibility changed ${t.isVisible}`)(),onDevicePixelRatioChange:(t,n)=>e.log.log(1,`${t} DPR changed ${n.oldRatio} => ${t.devicePixelRatio}`)(),debug:(Gt=e.log.get("debug"),Vt=function(){const e=globalThis.process;if(e?.env)return e.env.NODE_ENV}(),null!=Gt?Boolean(Gt):void 0!==Vt&&"production"!==Vt),debugGPUTime:!1,debugShaders:e.log.get("debug-shaders")||void 0,debugFramebuffers:Boolean(e.log.get("debug-framebuffers")),debugFactories:Boolean(e.log.get("debug-factories")),debugWebGL:Boolean(e.log.get("debug-webgl")),debugSpectorJS:void 0,debugSpectorJSUrl:void 0,_reuseDevices:!1,_cacheShaders:!0,_destroyShaders:!1,_cachePipelines:!0,_sharePipelines:!0,_destroyPipelines:!1,_initializeFeatures:!0,_disabledFeatures:{"compilation-status-async-webgl":!0},_handle:void 0};var Xt=["Adapter","GPU","GPU Type","GPU Backend","Frame Rate","CPU Time","GPU Time","GPU Memory","Buffer Memory","Texture Memory","External Buffer Memory","External Texture Memory","Swap Chain Texture"],qt=new WeakMap,Ht=new WeakMap,Zt=new class{stats=new Map;getStats(e){return this.get(e)}get(e){this.stats.has(e)||this.stats.set(e,new F({id:e}));const t=this.stats.get(e);return"GPU Time and Memory"===e&&function(e,t){const n=e.stats;let r=!1;for(const c of t)n[c]||(e.get(c),r=!0);const o=Object.keys(n).length,i=qt.get(e);if(!r&&i?.orderedStatNames===t&&i.statCount===o)return;const s={};let a=Ht.get(t);a||(a=new Set(t),Ht.set(t,a));for(const c of t)n[c]&&(s[c]=n[c]);for(const[c,l]of Object.entries(n))a.has(c)||(s[c]=l);for(const c of Object.keys(n))delete n[c];Object.assign(n,s),qt.set(e,{orderedStatNames:t,statCount:o})}(t,Xt),t}};var Kt="texture-compression-bc",Jt="texture-compression-astc",Qt="texture-compression-etc2",en="texture-compression-pvrtc-webgl",tn="texture-compression-atc-webgl",nn="float32-renderable-webgl",rn="float16-renderable-webgl",on="snorm8-renderable-webgl",sn="norm16-webgl",an="norm16-renderable-webgl",cn="snorm16-renderable-webgl",ln="float32-filterable",un="float16-filterable-webgl",hn=19,fn=992;function dn(e){const t=pn[e];if(!t)throw new Error(`Unsupported texture format ${e}`);return t}var pn={...{r8unorm:{webgpu:527},rg8unorm:{webgpu:527},"rgb8unorm-webgl":{},rgba8unorm:{webgpu:31},"rgba8unorm-srgb":{webgpu:15},r8snorm:{render:on,webgpu:837},rg8snorm:{render:on,webgpu:837},"rgb8snorm-webgl":{},rgba8snorm:{render:on,webgpu:341},r8uint:{webgpu:515},rg8uint:{webgpu:515},rgba8uint:{webgpu:hn},r8sint:{webgpu:515},rg8sint:{webgpu:515},rgba8sint:{webgpu:hn},bgra8unorm:{webgpu:15},"bgra8unorm-srgb":{webgpu:15360},r16unorm:{f:sn,render:an,webgpu:fn},rg16unorm:{f:sn,render:an,webgpu:fn},"rgb16unorm-webgl":{f:sn,render:!1},rgba16unorm:{f:sn,render:an,webgpu:fn},r16snorm:{f:sn,render:cn,webgpu:fn},rg16snorm:{f:sn,render:cn,webgpu:fn},"rgb16snorm-webgl":{f:sn,render:!1},rgba16snorm:{f:sn,render:cn,webgpu:fn},r16uint:{webgpu:515},rg16uint:{webgpu:515},rgba16uint:{webgpu:hn},r16sint:{webgpu:515},rg16sint:{webgpu:515},rgba16sint:{webgpu:hn},r16float:{render:rn,filter:"float16-filterable-webgl",webgpu:527},rg16float:{render:rn,filter:un,webgpu:527},rgba16float:{render:rn,filter:un,webgpu:31},r32uint:{webgpu:hn},rg32uint:{webgpu:16387},rgba32uint:{webgpu:hn},r32sint:{webgpu:hn},rg32sint:{webgpu:16387},rgba32sint:{webgpu:hn},r32float:{render:nn,filter:ln,webgpu:hn},rg32float:{render:!1,filter:ln,webgpu:16387},"rgb32float-webgl":{render:nn,filter:ln},rgba32float:{render:nn,filter:ln,webgpu:hn},"rgba4unorm-webgl":{channels:"rgba",bitsPerChannel:[4,4,4,4],packed:!0},"rgb565unorm-webgl":{channels:"rgb",bitsPerChannel:[5,6,5,0],packed:!0},"rgb5a1unorm-webgl":{channels:"rgba",bitsPerChannel:[5,5,5,1],packed:!0},rgb9e5ufloat:{channels:"rgb",packed:!0,render:"rgb9e5ufloat-renderable-webgl",webgpu:5},rg11b10ufloat:{channels:"rgb",bitsPerChannel:[11,11,10,0],packed:!0,p:1,render:nn,webgpu:517},rgb10a2unorm:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1,webgpu:527},rgb10a2uint:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1,webgpu:515},stencil8:{attachment:"stencil",bitsPerChannel:[8,0,0,0],dataType:"uint8",webgpu:3},depth16unorm:{attachment:"depth",bitsPerChannel:[16,0,0,0],dataType:"uint16",webgpu:3},depth24plus:{attachment:"depth",bitsPerChannel:[24,0,0,0],dataType:"uint32",webgpu:3},depth32float:{attachment:"depth",bitsPerChannel:[32,0,0,0],dataType:"float32",webgpu:3},"depth24plus-stencil8":{attachment:"depth-stencil",bitsPerChannel:[24,8,0,0],packed:!0,webgpu:3},"depth32float-stencil8":{attachment:"depth-stencil",bitsPerChannel:[32,8,0,0],packed:!0,f:"depth32float-stencil8",webgpu:3}},...{"bc1-rgb-unorm-webgl":{f:Kt},"bc1-rgb-unorm-srgb-webgl":{f:Kt},"bc1-rgba-unorm":{f:Kt},"bc1-rgba-unorm-srgb":{f:Kt},"bc2-rgba-unorm":{f:Kt},"bc2-rgba-unorm-srgb":{f:Kt},"bc3-rgba-unorm":{f:Kt},"bc3-rgba-unorm-srgb":{f:Kt},"bc4-r-unorm":{f:Kt},"bc4-r-snorm":{f:Kt},"bc5-rg-unorm":{f:Kt},"bc5-rg-snorm":{f:Kt},"bc6h-rgb-ufloat":{f:Kt},"bc6h-rgb-float":{f:Kt},"bc7-rgba-unorm":{f:Kt},"bc7-rgba-unorm-srgb":{f:Kt},"etc2-rgb8unorm":{f:Qt},"etc2-rgb8unorm-srgb":{f:Qt},"etc2-rgb8a1unorm":{f:Qt},"etc2-rgb8a1unorm-srgb":{f:Qt},"etc2-rgba8unorm":{f:Qt},"etc2-rgba8unorm-srgb":{f:Qt},"eac-r11unorm":{f:Qt},"eac-r11snorm":{f:Qt},"eac-rg11unorm":{f:Qt},"eac-rg11snorm":{f:Qt},"astc-4x4-unorm":{f:Jt},"astc-4x4-unorm-srgb":{f:Jt},"astc-5x4-unorm":{f:Jt},"astc-5x4-unorm-srgb":{f:Jt},"astc-5x5-unorm":{f:Jt},"astc-5x5-unorm-srgb":{f:Jt},"astc-6x5-unorm":{f:Jt},"astc-6x5-unorm-srgb":{f:Jt},"astc-6x6-unorm":{f:Jt},"astc-6x6-unorm-srgb":{f:Jt},"astc-8x5-unorm":{f:Jt},"astc-8x5-unorm-srgb":{f:Jt},"astc-8x6-unorm":{f:Jt},"astc-8x6-unorm-srgb":{f:Jt},"astc-8x8-unorm":{f:Jt},"astc-8x8-unorm-srgb":{f:Jt},"astc-10x5-unorm":{f:Jt},"astc-10x5-unorm-srgb":{f:Jt},"astc-10x6-unorm":{f:Jt},"astc-10x6-unorm-srgb":{f:Jt},"astc-10x8-unorm":{f:Jt},"astc-10x8-unorm-srgb":{f:Jt},"astc-10x10-unorm":{f:Jt},"astc-10x10-unorm-srgb":{f:Jt},"astc-12x10-unorm":{f:Jt},"astc-12x10-unorm-srgb":{f:Jt},"astc-12x12-unorm":{f:Jt},"astc-12x12-unorm-srgb":{f:Jt},"pvrtc-rgb4unorm-webgl":{f:en},"pvrtc-rgba4unorm-webgl":{f:en},"pvrtc-rgb2unorm-webgl":{f:en},"pvrtc-rgba2unorm-webgl":{f:en},"etc1-rbg-unorm-webgl":{f:"texture-compression-etc1-webgl"},"atc-rgb-unorm-webgl":{f:tn},"atc-rgba-unorm-webgl":{f:tn},"atc-rgbai-unorm-webgl":{f:tn}}},mn=/^(r|rg|rgb|rgba|bgra)([0-9]*)([a-z]*)(-srgb)?(-webgl)?$/,gn=["rgb","rgba","bgra"],bn=["depth","stencil"],yn=["bc1","bc2","bc3","bc4","bc5","bc6","bc7","etc1","etc2","eac","atc","astc","pvrtc"],_n=new class{isColor(e){return gn.some(t=>e.startsWith(t))}isDepthStencil(e){return bn.some(t=>e.startsWith(t))}isCompressed(e){return yn.some(t=>e.startsWith(t))}getInfo(e){return vn(e)}getCapabilities(e){return function(e){const t=dn(e),n={format:e,create:t.f??!0,render:t.render??!0,filter:t.filter??!0,blend:t.blend??!0,store:t.store??!0},r=vn(e),o=e.startsWith("depth")||e.startsWith("stencil"),i=r?.signed,s=r?.integer,a=r?.webgl,c=Boolean(r?.compressed);return n.render&&=!o&&!c,n.filter&&=!(o||i||s||a),n}(e)}getWebGPUCapabilities(e){const t=dn(e);return void 0!==t.webgpu?t.webgpu:this.isCompressed(e)&&!e.endsWith("-webgl")?5:0}computeMemoryLayout(e){return function({format:e,width:t,height:n,depth:r,byteAlignment:o}){const{bytesPerPixel:i,bytesPerBlock:s=i,blockWidth:a=1,blockHeight:c=1,compressed:l=!1}=_n.getInfo(e),u=l?Math.ceil(t/a):t,h=l?Math.ceil(n/c):n,f=u*s,d=Math.ceil(f/o)*o;return{bytesPerPixel:i,bytesPerRow:d,rowsPerImage:h,depthOrArrayLayers:r,bytesPerImage:d*h,byteLength:d*h*r}}(e)}};function vn(t){let n=function(e){const t={...dn(e)},n=t.bytesPerPixel||1,r=t.bitsPerChannel||[8,8,8,8];return delete t.bitsPerChannel,delete t.bytesPerPixel,delete t.f,delete t.render,delete t.filter,delete t.blend,delete t.store,delete t.webgpu,{...t,format:e,attachment:t.attachment||"color",channels:t.channels||"r",components:t.components||t.channels?.length||1,bytesPerPixel:n,bitsPerChannel:r,dataType:t.dataType||"uint8",srgb:t.srgb??!1,packed:t.packed??!1,webgl:t.webgl??!1,integer:t.integer??!1,signed:t.signed??!1,normalized:t.normalized??!1,compressed:t.compressed??!1}}(t);if(_n.isCompressed(t)){n.channels="rgb",n.components=3,n.bytesPerPixel=1,n.srgb=!1,n.compressed=!0,n.bytesPerBlock=function(e){return e.startsWith("bc1")||e.startsWith("bc4")||e.startsWith("etc1")||e.startsWith("etc2-rgb8")||e.startsWith("etc2-rgb8a1")||e.startsWith("eac-r11")||"atc-rgb-unorm-webgl"===e?8:e.startsWith("bc2")||e.startsWith("bc3")||e.startsWith("bc5")||e.startsWith("bc6h")||e.startsWith("bc7")||e.startsWith("etc2-rgba8")||e.startsWith("eac-rg11")||e.startsWith("astc")||"atc-rgba-unorm-webgl"===e||"atc-rgbai-unorm-webgl"===e?16:e.startsWith("pvrtc")?8:16}(t);const e=function(e){const t=/.*-(\d+)x(\d+)-.*/.exec(e);if(t){const[,e,n]=t;return{blockWidth:Number(e),blockHeight:Number(n)}}return e.startsWith("bc")||e.startsWith("etc1")||e.startsWith("etc2")||e.startsWith("eac")||e.startsWith("atc")||e.startsWith("pvrtc-rgb4")||e.startsWith("pvrtc-rgba4")?{blockWidth:4,blockHeight:4}:e.startsWith("pvrtc-rgb2")||e.startsWith("pvrtc-rgba2")?{blockWidth:8,blockHeight:4}:null}(t);e&&(n.blockWidth=e.blockWidth,n.blockHeight=e.blockHeight)}const r=n.packed?null:mn.exec(t);if(r){const[,o,i,s,a,c]=r,l=`${s}${i}`,u=e.dataTypeDecoder.getDataTypeInfo(l),h=8*u.byteLength,f=o?.length??1,d=[h,f>=2?h:0,f>=3?h:0,f>=4?h:0];n={format:t,attachment:n.attachment,dataType:u.signedType,components:f,channels:o,integer:u.integer,signed:u.signed,normalized:u.normalized,bitsPerChannel:d,bytesPerPixel:u.byteLength*f,packed:n.packed,srgb:n.srgb},"-webgl"===c&&(n.webgl=!0),"-srgb"===a&&(n.srgb=!0)}return t.endsWith("-webgl")&&(n.webgl=!0),t.endsWith("-srgb")&&(n.srgb=!0),n}function wn(e){return"undefined"!=typeof ImageData&&e instanceof ImageData||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLVideoElement&&e instanceof HTMLVideoElement||"undefined"!=typeof VideoFrame&&e instanceof VideoFrame||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas}function En(e){if("undefined"!=typeof ImageData&&e instanceof ImageData||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas)return{width:e.width,height:e.height};if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement)return{width:e.naturalWidth,height:e.naturalHeight};if("undefined"!=typeof HTMLVideoElement&&e instanceof HTMLVideoElement)return{width:e.videoWidth,height:e.videoHeight};if("undefined"!=typeof VideoFrame&&e instanceof VideoFrame)return{width:e.displayWidth,height:e.displayHeight};throw new Error("Unknown image type")}var xn=class{};function Pn(e){if(void 0!==e){if(null===e||"string"==typeof e||"number"==typeof e||"boolean"==typeof e)return e;if(e instanceof Error)return e.message;if(Array.isArray(e))return e.map(Pn);if("object"==typeof e){if(function(e){return"toString"in e&&"function"==typeof e.toString&&e.toString!==Object.prototype.toString}(e)){const t=String(e);if("[object Object]"!==t)return t}return function(e){return"message"in e&&"type"in e}(e)?function(e){const t="string"==typeof e.type?e.type:"message",n="string"==typeof e.message?e.message:"",r="number"==typeof e.lineNum?e.lineNum:null,o="number"==typeof e.linePos?e.linePos:null;return`${t}${null!==r&&null!==o?` @ ${r}:${o}`:null!==r?` @ ${r}`:""}: ${n}`.trim()}(e):e.constructor?.name||"Object"}return String(e)}}var On=class{features;disabledFeatures;constructor(e=[],t){this.features=new Set(e),this.disabledFeatures=t||{}}*[Symbol.iterator](){yield*this.features}has(e){return!this.disabledFeatures?.[e]&&this.features.has(e)}};function Tn(){if("undefined"==typeof HTMLCanvasElement)return!1;const e=HTMLCanvasElement.prototype;return"layoutSubtree"in e&&"function"==typeof e.requestPaint}var Mn=class t{static defaultProps={...Yt};get[Symbol.toStringTag](){return"Device"}toString(){return`Device(${this.id})`}toJSON(){return this.toString()}id;props;userData={};statsManager=Zt;_factories={};timestamp=0;_reused=!1;_moduleData={};wgslLanguageFeatures=new Set;_textureCaps={};_debugGPUTimeQuery=null;constructor(n){this.props={...t.defaultProps,...n},this.id=this.props.id||e.uid(this[Symbol.toStringTag].toLowerCase())}getVertexFormatInfo(t){return e.vertexFormatDecoder.getVertexFormatInfo(t)}isVertexFormatSupported(e){return!0}getTextureFormatInfo(e){return _n.getInfo(e)}getTextureFormatCapabilities(e){let t=this._textureCaps[e];if(!t){const n=this._getDeviceTextureFormatCapabilities(e);t=this._getDeviceSpecificTextureFormatCapabilities(n),this._textureCaps[e]=t}return t}getMipLevelCount(e,t,n=1){return 1+Math.floor(Math.log2(Math.max(e,t,n)))}isExternalImage(e){return wn(e)}getExternalImageSize(e){return En(e)}isTextureFormatSupported(e){return this.getTextureFormatCapabilities(e).create}isTextureFormatFilterable(e){return this.getTextureFormatCapabilities(e).filter}isTextureFormatRenderable(e){return this.getTextureFormatCapabilities(e).render}isTextureFormatCompressed(e){return _n.isCompressed(e)}getSupportedCompressedTextureFormats(){const e=[];for(const t of Object.keys(pn))this.isTextureFormatCompressed(t)&&this.isTextureFormatSupported(t)&&e.push(t);return e}pushDebugGroup(e){this.commandEncoder.pushDebugGroup(e)}popDebugGroup(){this.commandEncoder?.popDebugGroup()}insertDebugMarker(e){this.commandEncoder?.insertDebugMarker(e)}loseDevice(){return!1}incrementTimestamp(){return this.timestamp++}reportError(t,n,...r){if(!this.props.onError(t,n)){const o=function(e,t){return[Pn(e),...t.map(Pn).filter(e=>void 0!==e)].filter(e=>void 0!==e)}(n,r);return e.log.error("webgl"===this.type?"%cWebGL":"%cWebGPU","color: white; background: red; padding: 2px 6px; border-radius: 3px;",t.message,...o)}return()=>{}}debug(){this.props.debug||e.log.once(0,"'Type luma.log.set({debug: true}) in console to enable debug breakpoints',\nor create a device with the 'debug: true' prop.")()}getDefaultCanvasContext(){if(!this.canvasContext)throw new Error("Device has no default CanvasContext. See props.createCanvasContext");return this.canvasContext}createFence(){throw new Error("createFence() not implemented")}beginRenderPass(e){return this.commandEncoder.beginRenderPass(e)}beginComputePass(e){return this.commandEncoder.beginComputePass(e)}writeBufferViaCommandEncoder(e,t,n,r=0){throw new Error("writeBufferViaCommandEncoder() not implemented")}generateMipmapsWebGPU(e){throw new Error("not implemented")}_createSharedRenderPipelineWebGL(e){throw new Error("_createSharedRenderPipelineWebGL() not implemented")}_createBindGroupLayoutWebGPU(e,t){throw new Error("_createBindGroupLayoutWebGPU() not implemented")}_createBindGroupWebGPU(e,t,n,r,o){throw new Error("_createBindGroupWebGPU() not implemented")}_supportsDebugGPUTime(){return this.features.has("timestamp-query")&&Boolean(this.props.debug||this.props.debugGPUTime)}_enableDebugGPUTime(e=256){if(!this._supportsDebugGPUTime())return null;if(this._debugGPUTimeQuery)return this._debugGPUTimeQuery;try{this._debugGPUTimeQuery=this.createQuerySet({type:"timestamp",count:e}),this.commandEncoder=this.createCommandEncoder({id:this.commandEncoder.props.id,timeProfilingQuerySet:this._debugGPUTimeQuery})}catch{this._debugGPUTimeQuery=null}return this._debugGPUTimeQuery}_disableDebugGPUTime(){this._debugGPUTimeQuery&&(this.commandEncoder.getTimeProfilingQuerySet()===this._debugGPUTimeQuery&&(this.commandEncoder=this.createCommandEncoder({id:this.commandEncoder.props.id})),this._debugGPUTimeQuery.destroy(),this._debugGPUTimeQuery=null)}_isDebugGPUTimeEnabled(){return null!==this._debugGPUTimeQuery}getCanvasContext(){return this.getDefaultCanvasContext()}readPixelsToArrayWebGL(e,t){throw new Error("not implemented")}readPixelsToBufferWebGL(e,t){throw new Error("not implemented")}setParametersWebGL(e){throw new Error("not implemented")}getParametersWebGL(e){throw new Error("not implemented")}withParametersWebGL(e,t){throw new Error("not implemented")}clearWebGL(e){throw new Error("not implemented")}resetWebGL(){throw new Error("not implemented")}getModuleData(e){return this._moduleData[e]||={},this._moduleData[e]}static _getCanvasContextProps(e){return!0===e.createCanvasContext?{}:e.createCanvasContext}_getDeviceTextureFormatCapabilities(e){const t=_n.getCapabilities(e),n=e=>("string"==typeof e?this.features.has(e):e)??!0,r=n(t.create);return{format:e,create:r,render:r&&n(t.render),filter:r&&n(t.filter),blend:r&&n(t.blend),store:r&&n(t.store)}}_normalizeBufferProps(t){(t instanceof ArrayBuffer||ArrayBuffer.isView(t))&&(t={data:t});const n={...t};if((t.usage||0)&e.Buffer.INDEX&&(t.indexType||(t.data instanceof Uint32Array?n.indexType="uint32":t.data instanceof Uint16Array?n.indexType="uint16":t.data instanceof Uint8Array&&(n.data=new Uint16Array(t.data),n.indexType="uint16")),!n.indexType))throw new Error("indices buffer content must be of type uint16 or uint32");return n}},Sn=class t extends e.Resource{static defaultProps={...e.Resource.defaultProps,type:"color-sampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"none",lodMinClamp:0,lodMaxClamp:32,compare:"less-equal",maxAnisotropy:1};get[Symbol.toStringTag](){return"Sampler"}constructor(e,n){super(e,n=t.normalizeProps(e,n),t.defaultProps)}static normalizeProps(e,t){return t}},jn={"1d":"1d","2d":"2d","2d-array":"2d",cube:"2d","cube-array":"2d","3d":"3d"},An=class t extends e.Resource{static SAMPLE=4;static STORAGE=8;static RENDER=16;static COPY_SRC=1;static COPY_DST=2;static TEXTURE=4;static RENDER_ATTACHMENT=16;dimension;baseDimension;format;width;height;depth;mipLevels;samples;byteAlignment;ready=Promise.resolve(this);isReady=!0;updateTimestamp;get[Symbol.toStringTag](){return"Texture"}toString(){return`Texture(${this.id},${this.format},${this.width}x${this.height})`}constructor(n,r,o){if(super(n,r=t.normalizeProps(n,r),t.defaultProps),this.dimension=this.props.dimension,this.baseDimension=jn[this.dimension],this.format=this.props.format,this.width=this.props.width,this.height=this.props.height,this.depth=this.props.depth,this.mipLevels=this.props.mipLevels,this.samples=this.props.samples||1,"cube"===this.dimension&&(this.depth=6),void 0===this.props.width||void 0===this.props.height)if(n.isExternalImage(r.data)){const e=n.getExternalImageSize(r.data);this.width=e?.width||1,this.height=e?.height||1}else this.width=1,this.height=1,void 0!==this.props.width&&void 0!==this.props.height||e.log.warn(`${this} created with undefined width or height. This is deprecated. Use DynamicTexture instead.`)();this.byteAlignment=o?.byteAlignment||1,this.updateTimestamp=n.incrementTimestamp()}clone(e){return this.device.createTexture({...this.props,...e})}setSampler(e){this.sampler=e instanceof Sn?e:this.device.createSampler(e)}copyImageData(e){const{data:t,depth:n,...r}=e;this.writeData(t,{...r,depthOrArrayLayers:r.depthOrArrayLayers??n})}computeMemoryLayout(e={}){const{width:t=this.width,height:n=this.height,depthOrArrayLayers:r=this.depth}=this._normalizeTextureReadOptions(e),{format:o,byteAlignment:i}=this;return _n.computeMemoryLayout({format:o,width:t,height:n,depth:r,byteAlignment:i})}readBuffer(e,t){throw new Error("readBuffer not implemented")}readDataAsync(e){throw new Error("readBuffer not implemented")}writeBuffer(e,t){throw new Error("readBuffer not implemented")}writeData(e,t){throw new Error("readBuffer not implemented")}readDataSyncWebGL(e){throw new Error("readDataSyncWebGL not available")}generateMipmapsWebGL(){throw new Error("generateMipmapsWebGL not available")}static normalizeProps(e,t){const n={...t},{width:r,height:o}=n;return"number"==typeof r&&(n.width=Math.max(1,Math.ceil(r))),"number"==typeof o&&(n.height=Math.max(1,Math.ceil(o))),n}_initializeData(e){this.device.isExternalImage(e)?this.copyExternalImage({image:e,width:this.width,height:this.height,depth:this.depth,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1}):e&&this.copyImageData({data:e,mipLevel:0,x:0,y:0,z:0,aspect:"all"})}_normalizeCopyImageDataOptions(e){const{data:t,depth:n,...r}=e,o=this._normalizeTextureWriteOptions({...r,depthOrArrayLayers:r.depthOrArrayLayers??n});return{data:t,depth:o.depthOrArrayLayers,...o}}_normalizeCopyExternalImageOptions(e){const n=t._omitUndefined(e),r=n.mipLevel??0,o=this._getMipLevelSize(r),i=this.device.getExternalImageSize(e.image),s={...t.defaultCopyExternalImageOptions,...o,...i,...n};return s.width=Math.min(s.width,o.width-s.x),s.height=Math.min(s.height,o.height-s.y),s.depth=Math.min(s.depth,o.depthOrArrayLayers-s.z),s}_normalizeCopyElementImageOptions(e){const n=t._omitUndefined(e),r=n.mipLevel??0,o=this._getMipLevelSize(r),i={...t.defaultCopyElementImageOptions,...o,...n};return i.width=Math.min(i.width,o.width-i.x),i.height=Math.min(i.height,o.height-i.y),i.depth=Math.min(i.depth,o.depthOrArrayLayers-i.z),i}_normalizeTextureReadOptions(e){const n=t._omitUndefined(e),r=n.mipLevel??0,o=this._getMipLevelSize(r),i={...t.defaultTextureReadOptions,...o,...n};return i.width=Math.min(i.width,o.width-i.x),i.height=Math.min(i.height,o.height-i.y),i.depthOrArrayLayers=Math.min(i.depthOrArrayLayers,o.depthOrArrayLayers-i.z),i}_getSupportedColorReadOptions(e){const t=this._normalizeTextureReadOptions(e),n=_n.getInfo(this.format);switch(this._validateColorReadAspect(t),this._validateColorReadFormat(n),this.dimension){case"2d":case"cube":case"cube-array":case"2d-array":case"3d":return t;default:throw new Error(`${this} color readback does not support ${this.dimension} textures`)}}_validateColorReadAspect(e){if("all"!==e.aspect)throw new Error(`${this} color readback only supports aspect 'all'`)}_validateColorReadFormat(e){if(e.compressed)throw new Error(`${this} color readback does not support compressed formats (${this.format})`);switch(e.attachment){case"color":return;case"depth":throw new Error(`${this} color readback does not support depth formats (${this.format})`);case"stencil":throw new Error(`${this} color readback does not support stencil formats (${this.format})`);case"depth-stencil":throw new Error(`${this} color readback does not support depth-stencil formats (${this.format})`);default:throw new Error(`${this} color readback does not support format ${this.format}`)}}_normalizeTextureWriteOptions(e){const n=t._omitUndefined(e),r=n.mipLevel??0,o=this._getMipLevelSize(r),i={...t.defaultTextureWriteOptions,...o,...n};i.width=Math.min(i.width,o.width-i.x),i.height=Math.min(i.height,o.height-i.y),i.depthOrArrayLayers=Math.min(i.depthOrArrayLayers,o.depthOrArrayLayers-i.z);const s=_n.computeMemoryLayout({format:this.format,width:i.width,height:i.height,depth:i.depthOrArrayLayers,byteAlignment:this.byteAlignment}),a=s.bytesPerPixel*i.width;if(i.bytesPerRow=n.bytesPerRow??s.bytesPerRow,i.rowsPerImage=n.rowsPerImage??i.height,i.bytesPerRow<a)throw new Error(`bytesPerRow (${i.bytesPerRow}) must be at least ${a} for ${this.format}`);if(i.rowsPerImage<i.height)throw new Error(`rowsPerImage (${i.rowsPerImage}) must be at least ${i.height} for ${this.format}`);const c=this.device.getTextureFormatInfo(this.format).bytesPerPixel;if(c&&i.bytesPerRow%c!==0)throw new Error(`bytesPerRow (${i.bytesPerRow}) must be a multiple of bytesPerPixel (${c}) for ${this.format}`);return i}_getMipLevelSize(e){return{width:Math.max(1,this.width>>e),height:"1d"===this.baseDimension?1:Math.max(1,this.height>>e),depthOrArrayLayers:"3d"===this.dimension?Math.max(1,this.depth>>e):this.depth}}getAllocatedByteLength(){let e=0;for(let t=0;t<this.mipLevels;t++){const{width:n,height:r,depthOrArrayLayers:o}=this._getMipLevelSize(t);e+=_n.computeMemoryLayout({format:this.format,width:n,height:r,depth:o,byteAlignment:1}).byteLength}return e*this.samples}static _omitUndefined(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e))}static defaultProps={...e.Resource.defaultProps,data:null,dimension:"2d",format:"rgba8unorm",usage:t.SAMPLE|t.RENDER|t.COPY_DST,width:void 0,height:void 0,depth:1,mipLevels:1,samples:void 0,sampler:{},view:void 0};static defaultCopyDataOptions={data:void 0,byteOffset:0,bytesPerRow:void 0,rowsPerImage:void 0,width:void 0,height:void 0,depthOrArrayLayers:void 0,depth:1,mipLevel:0,x:0,y:0,z:0,aspect:"all"};static defaultCopyExternalImageOptions={image:void 0,sourceX:0,sourceY:0,width:void 0,height:void 0,depth:1,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1};static defaultCopyElementImageOptions={element:void 0,width:void 0,height:void 0,sourceX:0,sourceY:0,sourceWidth:void 0,sourceHeight:void 0,depth:1,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1};static defaultTextureReadOptions={x:0,y:0,z:0,width:void 0,height:void 0,depthOrArrayLayers:1,mipLevel:0,aspect:"all"};static defaultTextureWriteOptions={byteOffset:0,bytesPerRow:void 0,rowsPerImage:void 0,x:0,y:0,z:0,width:void 0,height:void 0,depthOrArrayLayers:1,mipLevel:0,aspect:"all"}},Ln=/^(?:uniform\s+)?(?:(?:lowp|mediump|highp)\s+)?[A-Za-z0-9_]+(?:<[^>]+>)?\s+([A-Za-z0-9_]+)(?:\s*\[[^\]]+\])?\s*;/,In=/((?:layout\s*\([^)]*\)\s*)*)uniform\s+([A-Za-z_][A-Za-z0-9_]*)\s*\{([\s\S]*?)\}\s*([A-Za-z_][A-Za-z0-9_]*)?\s*;/g;function Cn(e){return`${e.name}Uniforms`}function Rn(e,t){const n="wgsl"===t?e.source:"vertex"===t?e.vs:e.fs;if(!n)return null;return function(e,t,n){const r="wgsl"===t?function(e,t){const n=new RegExp(`\\bstruct\\s+${t}\\b`,"m").exec(e);if(!n)return null;const r=e.indexOf("{",n.index);if(r<0)return null;let o=0;for(let i=r;i<e.length;i++){const t=e[i];if("{"!==t){if("}"===t&&(o--,0===o))return e.slice(r+1,i)}else o++}return null}(e,n):function(e,t){return kn(e).find(e=>e.blockName===t)?.body||null}(e,n);if(!r)return null;const o=[];for(const i of r.split("\n")){const e=i.replace(/\/\/.*$/,"").trim();if(!e||e.startsWith("#"))continue;const n="wgsl"===t?e.match(/^([A-Za-z0-9_]+)\s*:/):e.match(Ln);n&&o.push(n[1])}return o}(n,"wgsl"===t?"wgsl":"glsl",Cn(e))}function $n(e,t,n={}){const r=function(e,t){const n=Object.keys(e.uniformTypes||{});if(!n.length)return null;const r=Rn(e,t);return r?{moduleName:e.name,uniformBlockName:Cn(e),stage:t,expectedUniformNames:n,actualUniformNames:r,matches:Nn(n,r)}:null}(e,t);if(!r||r.matches)return r;const o=function(e){const{expectedUniformNames:t,actualUniformNames:n}=e,r=t.filter(e=>!n.includes(e)),o=n.filter(e=>!t.includes(e)),i=[`Expected ${t.length} fields, found ${n.length}.`],s=function(e,t){const n=Math.min(e.length,t.length);for(let r=0;r<n;r++)if(e[r]!==t[r])return`First mismatch at field ${r+1}: expected ${e[r]}, found ${t[r]}.`;return e.length>t.length?`Shader block ends after field ${t.length}; expected next field ${e[t.length]}.`:t.length>e.length?`Shader block has extra field ${t.length}: ${t[e.length]}.`:null}(t,n);s&&i.push(s);r.length&&i.push(`Missing from shader block (${r.length}): ${zn(r)}.`);o.length&&i.push(`Unexpected in shader block (${o.length}): ${zn(o)}.`);t.length<=12&&n.length<=12&&(r.length||o.length)&&(i.push(`Expected: ${t.join(", ")}.`),i.push(`Actual: ${n.join(", ")}.`));return`${e.moduleName}: ${e.stage} shader uniform block ${e.uniformBlockName} does not match module.uniformTypes. ${i.join(" ")}`}(r);return n.log?.error?.(o,r)(),!1!==n.throwOnError&&Tt(!1,o),r}function kn(e){const t=[],n=function(e){return e.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,"")}(e);for(const r of n.matchAll(In)){const e=r[1]?.trim()||null;t.push({blockName:r[2],body:r[3],instanceName:r[4]||null,layoutQualifier:e,hasLayoutQualifier:Boolean(e),isStd140:Boolean(e&&/\blayout\s*\([^)]*\bstd140\b[^)]*\)/.exec(e))})}return t}function Nn(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function Dn(e){return e.replace(/\s+/g," ").trim()}function zn(e,t=8){if(e.length<=t)return e.join(", ");const n=e.length-t;return`${e.slice(0,t).join(", ")}, ... (${n} more)`}var Un=[[/^(#version[ \t]+(100|300[ \t]+es))?[ \t]*\n/,"#version 300 es\n"],[/\btexture(2D|2DProj|Cube)Lod(EXT)?\(/g,"textureLod("],[/\btexture(2D|2DProj|Cube)(EXT)?\(/g,"texture("]],Wn=[...Un,[Gn("attribute"),"in $1"],[Gn("varying"),"out $1"]],Fn=[...Un,[Gn("varying"),"in $1"]];function Bn(e,t){for(const[n,r]of t)e=e.replace(n,r);return e}function Gn(e){return new RegExp(`\\b${e}[ \\t]+(\\w+[ \\t]+\\w+(\\[\\w+\\])?;)`,"g")}function Vn(e,t,n="glsl"){let r="";for(const o in e){const i=e[o];if(r+=`${"wgsl"===n?"fn":"void"} ${i.signature} {\n`,i.header&&(r+=` ${i.header}`),t[o]){const e=t[o];e.sort((e,t)=>e.order-t.order);for(const t of e)r+=` ${t.injection}\n`}i.footer&&(r+=` ${i.footer}`),r+="}\n"}return r}function Yn(e){const t={vertex:{},fragment:{}};for(const n of e){let e,r;"string"!=typeof n?(e=n,r=e.hook):(e={},r=n),r=r.trim();const o=r.indexOf(":"),i=r.slice(0,o),s=r.slice(o+1),a=r.replace(/\(.+/,""),c=Object.assign(e,{signature:s});switch(i){case"vs":t.vertex[a]=c;break;case"fs":t.fragment[a]=c;break;default:throw new Error(i)}}return t}function Xn(e,t="unnamed"){const n=/#define[^\S\r\n]*SHADER_NAME[^\S\r\n]*([A-Za-z0-9_-]+)\s*/.exec(e);return n?n[1]:t}function qn(e){let t=100;const n=e.match(/[^\s]+/g);if(n&&n.length>=2&&"#version"===n[0]){const e=parseInt(n[1],10);Number.isFinite(e)&&(t=e)}if(100!==t&&300!==t)throw new Error(`Invalid GLSL version ${t}`);return t}var Hn=[new RegExp(`@binding\\(\\s*(\\d+)\\s*\\)\\s*@group\\(\\s*(\\d+)\\s*\\)\\s*${tt}\\s*:\\s*([^;]+);`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)\\s*@binding\\(\\s*(\\d+)\\s*\\)\\s*${tt}\\s*:\\s*([^;]+);`,"g")];function Zn(e,t=[]){const n=at(e),r=new Map;for(const i of t)r.set(Jn(i.name,i.group,i.location),i.moduleName);const o=[];for(const i of Hn){let e;for(i.lastIndex=0,e=i.exec(n);e;){const t=i===Hn[0],s=Number(e[t?1:2]),a=Number(e[t?2:1]),c=e[3]?.trim(),l=e[4],u=e[5].trim(),h=r.get(Jn(l,a,s));o.push(Kn({name:l,group:a,binding:s,owner:h?"module":"application",moduleName:h,accessDeclaration:c,resourceType:u})),e=i.exec(n)}}return o.sort((e,t)=>e.group!==t.group?e.group-t.group:e.binding!==t.binding?e.binding-t.binding:e.name.localeCompare(t.name))}function Kn(e){const t={name:e.name,group:e.group,binding:e.binding,owner:e.owner,kind:"unknown",moduleName:e.moduleName,resourceType:e.resourceType};if(e.accessDeclaration){const n=e.accessDeclaration.split(",").map(e=>e.trim());if("uniform"===n[0])return{...t,kind:"uniform",access:"uniform"};if("storage"===n[0]){const e=n[1]||"read_write";return{...t,kind:"read"===e?"read-only-storage":"storage",access:e}}}return"sampler"===e.resourceType||"sampler_comparison"===e.resourceType?{...t,kind:"sampler",samplerKind:"sampler_comparison"===e.resourceType?"comparison":"filtering"}:e.resourceType.startsWith("texture_storage_")?{...t,kind:"storage-texture",access:(n=e.resourceType,/,\s*([A-Za-z_][A-Za-z0-9_]*)\s*>$/.exec(n)?.[1]),viewDimension:Qn(e.resourceType)}:e.resourceType.startsWith("texture_")?{...t,kind:"texture",viewDimension:Qn(e.resourceType),sampleType:er(e.resourceType),multisampled:e.resourceType.startsWith("texture_multisampled_")}:t;var n}function Jn(e,t,n){return`${t}:${n}:${e}`}function Qn(e){return e.includes("cube_array")?"cube-array":e.includes("2d_array")?"2d-array":e.includes("cube")?"cube":e.includes("3d")?"3d":e.includes("2d")?"2d":e.includes("1d")?"1d":void 0}function er(e){return e.startsWith("texture_depth_")?"depth":e.includes("<i32>")?"sint":e.includes("<u32>")?"uint":e.includes("<f32>")?"float":void 0}var tr="([a-zA-Z_][a-zA-Z0-9_]*)",nr=/^\s*\#\s*if\s+(.+?)\s*(?:\/\/.*)?$/,rr=new RegExp(`^\\s*\\#\\s*ifdef\\s*${tr}\\s*$`),or=new RegExp(`^\\s*\\#\\s*ifndef\\s*${tr}\\s*(?:\\/\\/.*)?$`),ir=/^\s*\#\s*else\s*(?:\/\/.*)?$/,sr=/^\s*\#\s*endif\s*$/,ar=new RegExp(`^\\s*\\#\\s*ifdef\\s*${tr}\\s*(?:\\/\\/.*)?$`),cr=/^\s*\#\s*endif\s*(?:\/\/.*)?$/;function lr(e,t){const n=e.split("\n"),r=[],o=[];let i=!0;for(const s of n){const e=s.match(nr),n=s.match(ar)||s.match(rr),a=s.match(or),c=s.match(ir),l=s.match(cr)||s.match(sr);if(e){const n=ur(e[1],t?.defines||{}),r=i&&n;o.push({parentActive:i,branchTaken:n,active:r}),i=r}else if(n||a){const e=(n||a)?.[1],r=Boolean(t?.defines?.[e]),s=n?r:!r,c=i&&s;o.push({parentActive:i,branchTaken:s,active:c}),i=c}else if(c){const e=o[o.length-1];if(!e)throw new Error("Encountered #else without matching #if, #ifdef or #ifndef");e.active=e.parentActive&&!e.branchTaken,e.branchTaken=!0,i=e.active}else l?(o.pop(),i=!o.length||o[o.length-1].active):i&&r.push(s)}if(o.length>0)throw new Error("Unterminated conditional block in shader source");return r.join("\n")}function ur(e,t){const n=e.trim();if(/^[+-]?\d+(?:\.\d+)?$/.test(n))return 0!==Number(n);if("true"===n)return!0;if("false"===n)return!1;const r=n.match(new RegExp(`^!\\s*${tr}$`));if(r)return!Boolean(t[r[1]]);const o=n.match(new RegExp(`^${tr}$`));if(o)return Boolean(t[o[1]]);const i=n.match(new RegExp(`^defined\\s*\\(\\s*${tr}\\s*\\)$`));if(i)return void 0!==t[i[1]];const s=n.match(new RegExp(`^!\\s*defined\\s*\\(\\s*${tr}\\s*\\)$`));if(s)return void 0===t[s[1]];throw new Error(`Unsupported #if expression "${e}"`)}function hr(e,t,n){const r=Object.entries(n);if(0===r.length)return{source:e,declarations:"",initialization:""};const o=function(e,t){const n=new RegExp(`\\bfn\\s+${wr(t)}\\s*\\(`,"g").exec(e);if(!n)throw new Error(`ShaderPlugin vertex inputs require WGSL vertex entry point "${t}"`);const r=e.indexOf("(",n.index),o=_r(e,r,"(",")");if(o<0)throw new Error(`Unable to parse WGSL vertex entry point "${t}" parameters`);return{openParenthesis:r,closeParenthesis:o}}(e,t),i=e.slice(o.openParenthesis+1,o.closeParenthesis),s=function(e,t){const n=pr(t),r=new Set(mr(t)),o=function(e){const t=[],n=/:\s*([A-Za-z_][\w]*)\b/g;let r=n.exec(e);for(;r;)t.push(r[1]),r=n.exec(e);return t}(t);for(const i of o){const t=gr(e,i);if(null!==t){n.push(...pr(t));for(const e of mr(t))r.add(e)}}return{locations:n,names:r}}(e,i),a=new Set(s.locations),c=[],l=[],u=[];for(const[p,m]of r){if(s.names.has(p)||br(e,p))throw new Error(`ShaderPlugin vertex input "${p}" conflicts with an existing WGSL shader input or variable`);const t=yr(a);a.add(t);const n=`_luma_${p}`;c.push(`@location(${t}) ${n}: ${m}`),l.push(`var<private> ${p}: ${m};`),u.push(`${p} = ${n};`)}const h=i.trim()?",\n ":"\n ",f=i.trim()?"":"\n",d=`${i}${h}${c.join(",\n ")}${f}`;return{source:e.slice(0,o.openParenthesis+1)+d+e.slice(o.closeParenthesis),declarations:l.join("\n"),initialization:u.join("\n")}}function fr(t){const{primitiveType:n,components:r}=e.shaderTypeDecoder.getAttributeShaderTypeInfo(t),o="i32"===n?"int":"u32"===n?"uint":"float";return 1===r?o:`${"int"===o?"i":"uint"===o?"u":""}vec${r}`}function dr(e,t){const n=wr(t);if(new RegExp(`\\b(?:in|attribute)\\s+(?:(?:lowp|mediump|highp)\\s+)?[A-Za-z_][A-Za-z0-9_]*\\s+${n}\\s*(?:\\[|;)`).test(e))throw new Error(`ShaderPlugin vertex input "${t}" conflicts with an existing GLSL input`)}function pr(e){const t=[],n=/@location\s*\(\s*(\d+)\s*\)/g;let r=n.exec(e);for(;r;)t.push(Number(r[1])),r=n.exec(e);return t}function mr(e){const t=[],n=/(?:^|,)\s*(?:@[A-Za-z_][\w]*(?:\([^)]*\))?\s*)*([A-Za-z_][\w]*)\s*:/gm;let r=n.exec(e);for(;r;)t.push(r[1]),r=n.exec(e);return t}function gr(e,t){const n=new RegExp(`\\bstruct\\s+${wr(t)}\\s*\\{`,"g").exec(e);if(!n)return null;const r=e.indexOf("{",n.index),o=_r(e,r,"{","}");return o<0?null:e.slice(r+1,o)}function br(e,t){const n=wr(t),r=new RegExp(`\\b(?:var(?:<[^>]+>)?|let|const)\\s+${n}\\b`,"g");let o=r.exec(e);for(;o;){if(0===vr(e,o.index))return!0;o=r.exec(e)}return!1}function yr(e){let t=0;for(;e.has(t);)t++;return t}function _r(e,t,n,r){let o=0,i=0,s=!1;for(let a=t;a<e.length;a++){const t=e[a],c=e[a+1];if(s)"\n"===t&&(s=!1);else if(i>0)"/"===t&&"*"===c?(i++,a++):"*"===t&&"/"===c&&(i--,a++);else if("/"!==t||"/"!==c)if("/"!==t||"*"!==c){if(t===n&&o++,t===r&&0===--o)return a}else i=1,a++;else s=!0,a++}return-1}function vr(e,t){let n=0,r=0,o=!1;for(let i=0;i<t;i++){const t=e[i],s=e[i+1];o?"\n"===t&&(o=!1):r>0?"/"===t&&"*"===s?(r++,i++):"*"===t&&"/"===s&&(r--,i++):"/"===t&&"/"===s?(o=!0,i++):"/"===t&&"*"===s?(r=1,i++):"{"===t?n++:"}"===t&&n--}return n}function wr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Er(e,t,n,r){const o=Object.entries(r);if(0===o.length)return{source:e,declarations:"",vertexInitialization:"",fragmentInitialization:""};let i=e,s=xr(i,t,"vertex");const a=function(e,t){const n=e.slice(t.closeParenthesis+1,t.openBrace),r=/->\s*([A-Za-z_][\w]*)\s*$/.exec(n.trim());if(!r||null===Or(e,r[1]))throw new Error("ShaderPlugin varyings require the WGSL vertex entry point to return a named struct");return r[1]}(i,s);let c=xr(i,n,"fragment");const l=function(e,t){const n=[];for(const r of function(e,t){const n=[];let r=0,o=0,i=0;for(let s=0;s<e.length;s++){const a=e[s];"("===a&&o++,")"===a&&o--,"<"===a&&i++,">"===a&&i--,a===t&&0===o&&0===i&&(n.push(e.slice(r,s)),r=s+1)}return n.push(e.slice(r)),n}(t.parameters,",")){const t=/(?:@[A-Za-z_][\w]*(?:\([^)]*\))?\s*)*([A-Za-z_][\w]*)\s*:\s*([A-Za-z_][\w]*)\s*$/.exec(r.trim());t&&Or(e,t[2])&&n.push({name:t[1],type:t[2]})}if(1!==n.length)throw new Error(`ShaderPlugin varyings require exactly one named WGSL fragment input struct; found ${n.length}`);return n[0]}(i,c),u=Pr(i,a),h=Pr(i,l.type),f=new Set([...jr(s.parameters),...jr(u.body),...jr(c.parameters),...jr(h.body)]),d=new Set([...Sr(u.body),...Sr(h.body)]),p=[],m=[],g=[],b=[];for(const[_,v]of o){if(f.has(_)||Ar(i,_))throw new Error(`ShaderPlugin varying "${_}" conflicts with existing WGSL stage I/O or a module variable`);const e=Lr(d);d.add(e);const t="flat"===v.interpolation?" @interpolate(flat)":"";p.push(` @location(${e})${t} ${_}: ${v.type},`),m.push(`var<private> ${_}: ${v.type};`),g.push(`${_} = ${Cr(v.type)};`),b.push(`${_} = ${l.name}.${_};`)}!function(e,t,n,r){const o=new RegExp(`\\b${Nr(t)}\\s*\\(`,"g");let i=o.exec(e);for(;i;){if(i.index<n||i.index>r)throw new Error(`ShaderPlugin varying output struct "${t}" is constructed outside the selected vertex entry point`);i=o.exec(e)}}(i,a,s.openBrace,s.closeBrace),i=function(e,t,n,r){const o=new RegExp(`\\b${Nr(t)}\\s*\\(`,"g"),i=[];let s=o.exec(e);for(;s;){if(s.index>n.openBrace&&s.index<n.closeBrace){const r=e.indexOf("(",s.index),o=$r(e,r,"(",")");if(o<0||o>n.closeBrace)throw new Error(`Unable to parse WGSL output constructor "${t}"`);i.push({openParenthesis:r,closeParenthesis:o})}s=o.exec(e)}for(const a of i.sort((e,t)=>t.closeParenthesis-e.closeParenthesis)){const t=e.slice(a.openParenthesis+1,a.closeParenthesis).trim()?", ":"";e=e.slice(0,a.closeParenthesis)+t+r.join(", ")+e.slice(a.closeParenthesis)}return e}(i,a,s,o.map(([e])=>e)),s=xr(i,t,"vertex"),i=function(e,t,n){const r=function(e,t,n){const r=[];let o=t;for(;o<n;)if(o=Mr(e,o,n),"return"!==e.slice(o,o+6)||/[A-Za-z0-9_]/.test(e[o+6]||""))o++;else{const t=o+6,i=Tr(e,t,n);if(i<0)throw new Error("Unable to parse WGSL return statement in selected vertex entry point");r.push({start:o,expressionStart:t,semicolon:i}),o=i+1}return r}(e,t.openBrace+1,t.closeBrace);for(let o=r.length-1;o>=0;o--){const t=r[o],i=e.slice(t.expressionStart,t.semicolon).trim();if(!i)throw new Error("ShaderPlugin varying vertex entry point cannot use an empty return");const s=`_luma_vertexOutput${o}`,a=`{\nvar ${s} = ${i};\n${n.map(e=>`${s}.${e} = ${e};`).join("\n")}\nreturn ${s};\n}`;e=e.slice(0,t.start)+a+e.slice(t.semicolon+1)}return e}(i,s,o.map(([e])=>e));const y=(a===l.type?[a]:[a,l.type]).map(e=>Pr(i,e).closeBrace).sort((e,t)=>t-e);for(const _ of y)i=i.slice(0,_)+`${p.join("\n")}\n`+i.slice(_);if(c=xr(i,n,"fragment"),!new RegExp(`\\b${Nr(l.name)}\\s*:`).test(c.parameters))throw new Error(`Unable to preserve WGSL fragment input "${l.name}"`);return{source:i,declarations:m.join("\n"),vertexInitialization:g.join("\n"),fragmentInitialization:b.join("\n")}}function xr(e,t,n){const r=new RegExp(`\\bfn\\s+${Nr(t)}\\s*\\(`,"g").exec(e);if(!r)throw new Error(`ShaderPlugin varyings require WGSL ${n} entry point "${t}"`);const o=e.indexOf("(",r.index),i=$r(e,o,"(",")"),s=e.indexOf("{",i),a=$r(e,s,"{","}");if(i<0||s<0||a<0)throw new Error(`Unable to parse WGSL ${n} entry point "${t}"`);return{openParenthesis:o,closeParenthesis:i,openBrace:s,closeBrace:a,parameters:e.slice(o+1,i)}}function Pr(e,t){const n=Or(e,t);if(!n)throw new Error(`Unable to find WGSL stage I/O struct "${t}"`);return n}function Or(e,t){const n=new RegExp(`\\bstruct\\s+${Nr(t)}\\s*\\{`,"g").exec(e);if(!n)return null;const r=e.indexOf("{",n.index),o=$r(e,r,"{","}");return o<0?null:{openBrace:r,closeBrace:o,body:e.slice(r+1,o)}}function Tr(e,t,n){let r=0,o=0;for(let i=t;i<n;i++){const t=Mr(e,i,n);if(t!==i){i=t-1;continue}const s=e[i];if("("===s&&r++,")"===s&&r--,"["===s&&o++,"]"===s&&o--,";"===s&&0===r&&0===o)return i}return-1}function Mr(e,t,n){let r=t;if("/"===e[r]&&"/"===e[r+1]){const t=e.indexOf("\n",r+2);return t<0||t>n?n:t+1}if("/"===e[r]&&"*"===e[r+1]){let t=1;for(r+=2;r<n&&t>0;)"/"===e[r]&&"*"===e[r+1]?(t++,r+=2):"*"===e[r]&&"/"===e[r+1]?(t--,r+=2):r++}return r}function Sr(e){const t=[],n=/@location\s*\(\s*(\d+)\s*\)/g;let r=n.exec(e);for(;r;)t.push(Number(r[1])),r=n.exec(e);return t}function jr(e){const t=[],n=/(?:^|,)\s*(?:@[A-Za-z_][\w]*(?:\([^)]*\))?\s*)*([A-Za-z_][\w]*)\s*:/gm;let r=n.exec(e);for(;r;)t.push(r[1]),r=n.exec(e);return t}function Ar(e,t){const n=new RegExp(`\\b(?:var(?:<[^>]+>)?|let|const)\\s+${Nr(t)}\\b`,"g");let r=n.exec(e);for(;r;){if(0===kr(e,r.index))return!0;r=n.exec(e)}return!1}function Lr(e){let t=0;for(;e.has(t);)t++;return t}function Ir(t){const{primitiveType:n,components:r}=e.shaderTypeDecoder.getAttributeShaderTypeInfo(t),o="u32"===n?"0u":"i32"===n?"0":"0.0";return 1===r?o:`${fr(t)}(${o})`}function Cr(t){const{primitiveType:n,components:r}=e.shaderTypeDecoder.getAttributeShaderTypeInfo(t),o=`${n}(0)`;return 1===r?o:`${t}(${o})`}function Rr(e,t){if(new RegExp(`\\b(?:flat\\s+|smooth\\s+)?(?:in|out|varying)\\s+(?:(?:lowp|mediump|highp)\\s+)?[A-Za-z_][A-Za-z0-9_]*\\s+${Nr(t)}\\s*(?:\\[|;)`).test(e))throw new Error(`ShaderPlugin varying "${t}" conflicts with existing GLSL stage I/O`)}function $r(e,t,n,r){let o=0,i=0,s=!1;for(let a=t;a<e.length;a++){const t=e[a],c=e[a+1];if(s)"\n"===t&&(s=!1);else if(i>0)"/"===t&&"*"===c?(i++,a++):"*"===t&&"/"===c&&(i--,a++);else if("/"!==t||"/"!==c)if("/"!==t||"*"!==c){if(t===n&&o++,t===r&&0===--o)return a}else i=1,a++;else s=!0,a++}return-1}function kr(e,t){let n=0;for(let r=0;r<t;r++){const o=Mr(e,r,t);o===r?("{"===e[r]&&n++,"}"===e[r]&&n--):r=o-1}return n}function Nr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Dr=`\n\n${Rt}\n`,zr=100;function Ur(e){const t=Ft(e.modules||[]),{source:n,bindingAssignments:r}=function(e,t){const{source:n,stage:r,modules:o,defines:i={},hookFunctions:s=[],inject:a={},pluginInjections:c={},pluginVertexInputs:l={},pluginVaryings:u={},vertexEntryPoint:h="vertexMain",fragmentEntryPoint:f="fragmentMain",log:d}=t;Tt("string"==typeof n,"shader source must be a string");const p=lr(n,{defines:i}),m=hr(p,h,l),g=Er(m.source,h,f,u),b=g.source;let y="";const _=Yn(s),v={},w={},E={};Gr(c,v,w,E);for(const S in a){const e="string"==typeof a[S]?{injection:a[S],order:0}:a[S],t=/^(v|f)s:(#)?([\w-]+)$/.exec(S);if(t){const n=t[2],r=t[3];n?"decl"===r?w[S]=[e]:E[S]=[e]:v[S]=[e]}else E[S]=[e]}(function(e,t,n,r){e&&(n["vs:#decl"]=n["vs:#decl"]||[],n["vs:#decl"].push({injection:e,order:Number.MIN_SAFE_INTEGER}));t&&(r["vs:#main-start"]=r["vs:#main-start"]||[],r["vs:#main-start"].push({injection:t,order:Number.MIN_SAFE_INTEGER}))})(m.declarations,m.initialization,w,E),function(e,t,n){e.declarations&&(t["vs:#decl"]=t["vs:#decl"]||[],t["vs:#decl"].push({injection:e.declarations,order:Number.MIN_SAFE_INTEGER}));e.vertexInitialization&&(n["vs:#main-start"]=n["vs:#main-start"]||[],n["vs:#main-start"].push({injection:e.vertexInitialization,order:Number.MIN_SAFE_INTEGER}));e.fragmentInitialization&&(n["fs:#main-start"]=n["fs:#main-start"]||[],n["fs:#main-start"].push({injection:e.fragmentInitialization,order:Number.MIN_SAFE_INTEGER}))}(g,w,E);const x=o,P=function(e){const t=ct(e,ot),n=new Map;for(const i of t){if("auto"===i.bindingToken)continue;const e=Number(i.bindingToken),t=Number(i.groupToken);Hr(t,e,i.name),Kr(n,t,e,`application binding "${i.name}"`)}const r={sawSupportedBindingDeclaration:t.length>0},o=lt(e,ot,e=>function(e,t,n){const{match:r,bindingToken:o,groupToken:i,name:s}=e,a=Number(i);if("auto"===o){const e=function(e,t){const n=t.get(e)||new Set;let r=0;for(;n.has(r);)r++;return r}(a,t);return Hr(a,e,s),Kr(t,a,e,`application binding "${s}"`),r.replace(/@binding\(\s*auto\s*\)/,`@binding(${e})`)}return n.sawSupportedBindingDeclaration=!0,r}(e,n,r));if(ut(e)&&!r.sawSupportedBindingDeclaration)throw new Error('Unsupported @binding(auto) declaration form in application WGSL. Use adjacent "@group(N)" and "@binding(auto)" decorators followed by a bindable "var" declaration.');return{source:o}}(b),O=function(e){const t=new Map;for(const n of ct(e,it)){const e=Number(n.bindingToken),r=Number(n.groupToken);Hr(r,e,n.name),Kr(t,r,e,`application binding "${n.name}"`)}return t}(P.source),T=function(e,t,n,r){const o=new Map;if(!t)return o;for(const i of e)for(const e of qr(i,r)){const r=Jr(e.group,i.name,e.name),s=t.get(r);if(void 0!==s){const t=o.get(e.group)||new Map,i=t.get(s);if(i&&i!==r)throw new Error(`Duplicate WGSL binding reservation for modules "${i}" and "${r}": group ${e.group}, binding ${s}.`);Kr(n,e.group,s,`registered module binding "${r}"`),t.set(s,r),o.set(e.group,t)}}return o}(x,t._bindingRegistry,O,i),M=[];for(const S of x){d&&Ut(S,b,d);const e=Xr(lr(Yr(S,"wgsl",d),{defines:i}),S,{usedBindingsByGroup:O,bindingRegistry:t._bindingRegistry,reservedBindingKeysByGroup:T});M.push(...e.bindingAssignments);y+=e.source;const n=Vr(S);for(const t in n){const e=/^(v|f)s:#([\w-]+)$/.exec(t);if(e){const r="decl"===e[2]?w:E;r[t]=r[t]||[],r[t].push(n[t])}else v[t]=v[t]||[],v[t].push(n[t])}}return y+=Dr,y=Nt(y,r,function(e){const t=[...e["vs:#decl"]||[],...e["fs:#decl"]||[]];return t.length?{"vs:#decl":t}:{}}(w),!1,"wgsl",{vertex:h,fragment:f}),y+=function(e,t){return Vn(e.vertex,t,"wgsl")+Vn(e.fragment,t,"wgsl")}(_,v),y+=function(e){if(0===e.length)return"";let t="// ----- MODULE WGSL BINDING ASSIGNMENTS ---------------\n";for(const n of e)t+=`// ${n.moduleName}.${n.name} -> @group(${n.group}) @binding(${n.location})\n`;return t+="\n",t}(M),y+=P.source,y=Nt(y,r,E,!1,"wgsl",{vertex:h,fragment:f}),function(e){const t=function(e,t){return ct(e,t===rt||t===ot?st:t).find(e=>"auto"===e.bindingToken)}(e,rt);if(!t)return;const n=function(e,t){const n=/^\/\/ ----- MODULE ([^\n]+) ---------------$/gm;let r,o;o=n.exec(e);for(;o&&o.index<=t;)r=o[1],o=n.exec(e);return r}(e,t.index);if(n)throw new Error(`Unresolved @binding(auto) for module "${n}" binding "${t.name}" remained in assembled WGSL source.`);if(function(e,t){const n=e.indexOf(Dr);return!(n>=0)||t>n}(e,t.index))throw new Error(`Unresolved @binding(auto) for application binding "${t.name}" remained in assembled WGSL source.`);throw new Error(`Unresolved @binding(auto) remained in assembled WGSL source near "${function(e){return e.replace(/\s+/g," ").trim()}(t.match)}".`)}(y),{source:y,bindingAssignments:M}}(e.platformInfo,{...e,source:e.source,stage:"vertex",modules:t});return{source:n,getUniforms:Br(t),bindingAssignments:r,bindingTable:Zn(n,r),shaderLayout:ht(n,{vertexEntryPoint:e.vertexEntryPoint,scanVertexAttributes:e.scanVertexAttributes})}}function Wr(e){const{vs:t,fs:n}=e,r=Ft(e.modules||[]);return{vs:Fr(e.platformInfo,{...e,source:t,stage:"vertex",modules:r}),fs:Fr(e.platformInfo,{...e,source:n,stage:"fragment",modules:r}),getUniforms:Br(r)}}function Fr(e,t){const{source:n,stage:r,language:o="glsl",modules:i,defines:s={},hookFunctions:a=[],inject:c={},pluginInjections:l={},pluginVertexInputs:u={},pluginVaryings:h={},prologue:f=!0,log:d}=t;Tt("string"==typeof n,"shader source must be a string");const p="glsl"===o?function(e,t){return{name:Xn(e,t),language:"glsl",version:qn(e)}}(n).version:-1,m=e.shaderLanguageVersion,g=100===p?"#version 100":"#version 300 es",b=n.split("\n").slice(1).join("\n"),y={};i.forEach(e=>{Object.assign(y,e.defines)}),Object.assign(y,s);let _="";switch(o){case"wgsl":break;case"glsl":_=f?`${g}\n\n// ----- PROLOGUE -------------------------\n#define SHADER_TYPE_${r.toUpperCase()}\n\n${function(e){switch(e?.gpu.toLowerCase()){case"apple":return"#define APPLE_GPU\n// Apple optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n";case"nvidia":return"#define NVIDIA_GPU\n// Nvidia optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n";case"intel":return"#define INTEL_GPU\n// Intel optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n";case"amd":return"#define AMD_GPU\n";default:return"#define DEFAULT_GPU\n// Prevent driver from optimizing away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Headless Chrome's software shader 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// If the GPU doesn't have full 32 bits precision, will causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n"}}(e)}\n${"fragment"===r?"precision highp float;\n":""}\n\n// ----- APPLICATION DEFINES -------------------------\n\n${function(e={}){let t="";for(const n in e){const r=e[n];(r||Number.isFinite(r))&&(t+=`#define ${n.toUpperCase()} ${e[n]}\n`)}return t}(y)}\n\n`:`${g}\n`}const v=Yn(a),w={},E={},x={};Gr(l,w,E,x);for(const O in c){const e="string"==typeof c[O]?{injection:c[O],order:0}:c[O],t=/^(v|f)s:(#)?([\w-]+)$/.exec(O);if(t){const n=t[2],r=t[3];n?"decl"===r?E[O]=[e]:x[O]=[e]:w[O]=[e]}else x[O]=[e]}if("vertex"===r){const e=function(e,t){const n=[];for(const[r,o]of Object.entries(t))dr(e,r),n.push(`in ${fr(o)} ${r};`);return n.join("\n")}(b,u);e&&(E["vs:#decl"]=E["vs:#decl"]||[],E["vs:#decl"].push({injection:e,order:Number.MIN_SAFE_INTEGER}))}const P=function(e,t,n){const r=[],o=[];for(const[i,s]of Object.entries(n)){Rr(e,i);const n="flat"===s.interpolation?"flat ":"",a="vertex"===t?"out":"in";r.push(`${n}${a} ${fr(s.type)} ${i};`),"vertex"===t&&o.push(`${i} = ${Ir(s.type)};`)}return{declarations:r.join("\n"),initialization:o.join("\n")}}(b,r,h);if(P.declarations){const e="vertex"===r?"vs:#decl":"fs:#decl";E[e]=E[e]||[],E[e].push({injection:P.declarations,order:Number.MIN_SAFE_INTEGER})}P.initialization&&(x["vs:#main-start"]=x["vs:#main-start"]||[],x["vs:#main-start"].push({injection:P.initialization,order:Number.MIN_SAFE_INTEGER}));for(const O of i){d&&Ut(O,b,d);_+=Yr(O,r,d);const e=O.instance?.normalizedInjections[r]||{};for(const t in e){const n=/^(v|f)s:#([\w-]+)$/.exec(t);if(n){const r="decl"===n[2]?E:x;r[t]=r[t]||[],r[t].push(e[t])}else w[t]=w[t]||[],w[t].push(e[t])}}return _+="// ----- MAIN SHADER SOURCE -------------------------",_+=Dr,_=Nt(_,r,E),_+=Vn(v[r],w),_+=b,_=Nt(_,r,x),"glsl"===o&&p!==m&&(_=function(e,t){if(300!==Number(e.match(/^#version[ \t]+(\d+)/m)?.[1]||100))throw new Error("luma.gl v9 only supports GLSL 3.00 shader sources");switch(t){case"vertex":return Bn(e,Wn);case"fragment":return Bn(e,Fn);default:throw new Error(t)}}(_,r)),"glsl"===o&&function(e,t,n,r){const o=kn(e).filter(e=>!e.isStd140),i=new Set;for(const s of o){if(i.has(s.blockName))continue;i.add(s.blockName);const e=r?.label?`${r.label} `:"",o=s.hasLayoutQualifier?`declares ${Dn(s.layoutQualifier)} instead of layout(std140)`:"does not declare layout(std140)",a=`${e}${t} shader uniform block ${s.blockName} ${o}. luma.gl host-side shader block packing assumes explicit layout(std140) for GLSL uniform blocks. Add \`layout(std140)\` to the block declaration.`;n?.warn?.(a,s)()}}(_,r,d),_.trim()}function Br(e){return function(t){const n={};for(const r of e){const e=r.getUniforms?.(t,n);Object.assign(n,e)}return n}}function Gr(e,t,n,r){for(const o in e){const i=/^(v|f)s:(#)?([\w-]+)$/.exec(o);if(i){const s=i[2],a=i[3],c=s?"decl"===a?n:r:t;c[o]=c[o]||[],c[o].push(...e[o])}else r[o]=r[o]||[],r[o].push(...e[o])}}function Vr(e){return{...e.instance?.normalizedInjections.vertex||{},...e.instance?.normalizedInjections.fragment||{}}}function Yr(e,t,n){let r;switch(t){case"vertex":r=e.vs||"";break;case"fragment":r=e.fs||"";break;case"wgsl":r=e.source||"";break;default:Tt(!1)}if(!e.name)throw new Error("Shader module must have a name");$n(e,t,{log:n});const o=e.name.toUpperCase().replace(/[^0-9a-z]/gi,"_");let i=`// ----- MODULE ${e.name} ---------------\n\n`;return"wgsl"!==t&&(i+=`#define MODULE_${o}\n`),i+=`${r}\n`,i}function Xr(e,t,n){const r=[],o={sawSupportedBindingDeclaration:ct(e,rt).length>0,nextHintedBindingLocation:"number"==typeof t.firstBindingSlot?t.firstBindingSlot:null},i=lt(e,rt,e=>function(e,t){const{module:n,context:r,bindingAssignments:o,relocationState:i}=t,{match:s,bindingToken:a,groupToken:c,name:l}=e,u=Number(c);if("auto"===a){const e=Jr(u,n.name,l),t=r.bindingRegistry?.get(e),a=void 0!==t?t:function(e,t,n,r,o){const i=t.get(e)||new Set,s=new Set,a=`${e}:`,c=`${a}${n}:`;for(const[u,h]of o||[])u.startsWith(c)&&s.add(h);let l=r??(0===e?zr:i.size>0?Math.max(...i)+1:0);for(;i.has(l)||s.has(l);)l++;for(const[u,h]of o||[])h===l&&u.startsWith(a)&&o?.delete(u);return l}(u,r.usedBindingsByGroup,n.name,i.nextHintedBindingLocation??void 0,r.bindingRegistry);return Zr(n.name,u,a,l),void 0!==t&&function(e,t,n,r){const o=e.get(t);if(!o)return!1;const i=o.get(n);if(!i)return!1;if(i!==r)throw new Error(`Registered module binding "${r}" collided with "${i}": group ${t}, binding ${n}.`);return!0}(r.reservedBindingKeysByGroup,u,a,e)?(o.push({moduleName:n.name,name:l,group:u,location:a}),s.replace(/@binding\(\s*auto\s*\)/,`@binding(${a})`)):(Kr(r.usedBindingsByGroup,u,a,`module "${n.name}" binding "${l}"`),r.bindingRegistry?.set(e,a),o.push({moduleName:n.name,name:l,group:u,location:a}),null!==i.nextHintedBindingLocation&&void 0===t&&(i.nextHintedBindingLocation=a+1),s.replace(/@binding\(\s*auto\s*\)/,`@binding(${a})`))}const h=Number(a);return Zr(n.name,u,h,l),Kr(r.usedBindingsByGroup,u,h,`module "${n.name}" binding "${l}"`),o.push({moduleName:n.name,name:l,group:u,location:h}),s}(e,{module:t,context:n,bindingAssignments:r,relocationState:o}));if(ut(e)&&!o.sawSupportedBindingDeclaration)throw new Error(`Unsupported @binding(auto) declaration form in module "${t.name}". Use adjacent "@group(N)" and "@binding(auto)" decorators followed by a bindable "var" declaration.`);return{source:i,bindingAssignments:r}}function qr(e,t){const n=[],r=lr(e.source||"",{defines:t});for(const o of ct(r,rt))n.push({name:o.name,group:Number(o.groupToken)});return n}function Hr(e,t,n){if(0===e&&t>=zr)throw new Error(`Application binding "${n}" in group 0 uses reserved binding ${t}. Application-owned explicit group-0 bindings must stay below 100.`)}function Zr(e,t,n,r){if(0===t&&n<zr)throw new Error(`Module "${e}" binding "${r}" in group 0 uses reserved application binding ${n}. Module-owned explicit group-0 bindings must be 100 or higher.`)}function Kr(e,t,n,r){const o=e.get(t)||new Set;if(o.has(n))throw new Error(`Duplicate WGSL binding assignment for ${r}: group ${t}, binding ${n}.`);o.add(n),e.set(t,o)}function Jr(e,t,n){return`${e}:${t}:${n}`}var Qr=class e{static defaultShaderAssemblers={};_hookFunctions=[];_defaultModules=[];static getDefaultShaderAssembler(t){return Tt("glsl"===t||"wgsl"===t),"wgsl"===t?(e.defaultShaderAssemblers.wgsl=e.defaultShaderAssemblers.wgsl||new to,e.defaultShaderAssemblers.wgsl):(e.defaultShaderAssemblers.glsl=e.defaultShaderAssemblers.glsl||new eo,e.defaultShaderAssemblers.glsl)}addDefaultModule(e){this._defaultModules.find(t=>t.name===("string"==typeof e?e:e.name))||this._defaultModules.push(e)}removeDefaultModule(e){const t="string"==typeof e?e:e.name;this._defaultModules=this._defaultModules.filter(e=>e.name!==t)}addShaderHook(e,t){t&&(e=Object.assign(t,{hook:e})),this._hookFunctions.push(e)}_getModuleList(e=[]){const t=new Array(this._defaultModules.length+e.length),n={};let r=0;for(let o=0,i=this._defaultModules.length;o<i;++o){const e=this._defaultModules[o],i=e.name;t[r++]=e,n[i]=!0}for(let o=0,i=e.length;o<i;++o){const i=e[o],s=i.name;n[s]||(t[r++]=i,n[s]=!0)}return t.length=r,zt(t),t}},eo=class extends Qr{shaderLanguage="glsl";assembleGLSLShaderPair(e){const t=this._getModuleList(e.modules),n=this._hookFunctions;return{...Wr({...e,vs:e.vs,fs:e.fs,modules:t,hookFunctions:n}),modules:t}}},to=class e extends Qr{shaderLanguage="wgsl";_wgslBindingRegistry=new Map;assembleWGSLShader(t){const n=this._getModuleList(t.modules),r=this._hookFunctions,o=e.getShaderPreprocessorDefines(t,n),i="wgsl"===t.platformInfo.shaderLanguage&&t.source?lr(t.source,{defines:o}):t.source,{source:s,getUniforms:a,bindingAssignments:c}=Ur({...t,source:i,defines:o,_bindingRegistry:this._wgslBindingRegistry,modules:n,hookFunctions:r}),l="wgsl"===t.platformInfo.shaderLanguage?lr(s,{defines:o}):s;return{source:l,getUniforms:a,modules:n,bindingAssignments:c,bindingTable:Zn(l,c),shaderLayout:ht(l,{vertexEntryPoint:t.vertexEntryPoint,scanVertexAttributes:t.scanVertexAttributes})}}static getShaderPreprocessorDefines(t,n){return{...e.getPlatformPreprocessorDefines(t.platformInfo),...n.reduce((e,t)=>(Object.assign(e,t.defines),e),{}),...t.defines}}static getPlatformPreprocessorDefines(e){const t=e.limits||{};return{LUMA_SUPPORTS_VERTEX_STORAGE_BUFFERS:"webgpu"===e.type&&(t.maxStorageBuffersInVertexStage||0)>0,LUMA_FP32_TAN_PRECISION_WORKAROUND:"webgpu"===e.type&&"nvidia"!==e.gpu.toLowerCase()&&"amd"!==e.gpu.toLowerCase(),LUMA_FP64_INTEGER_ARITHMETIC:"webgpu"===e.type&&"apple"===e.gpu.toLowerCase()}}},no=1/Math.PI*180,ro=1/180*Math.PI;globalThis.mathgl=globalThis.mathgl||{config:{EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1}};var oo=globalThis.mathgl.config;function io(e,{precision:t=oo.precision}={}){return e=function(e){return Math.round(e/oo.EPSILON)*oo.EPSILON}(e),`${parseFloat(e.toPrecision(t))}`}function so(e){return Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ao(e){return function(e,t){return po(e,e=>e*ro,t)}(e)}function co(e){return lo(e)}function lo(e,t){return po(e,e=>e*no,t)}function uo(e,t,n){return po(e,e=>Math.max(t,Math.min(n,e)))}function ho(e,t,n){return so(e)?e.map((e,r)=>ho(e,t[r],n)):n*t+(1-n)*e}function fo(e,t,n){const r=oo.EPSILON;n&&(oo.EPSILON=n);try{if(e===t)return!0;if(so(e)&&so(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;++n)if(!fo(e[n],t[n]))return!1;return!0}return e&&e.equals?e.equals(t):t&&t.equals?t.equals(e):"number"==typeof e&&"number"==typeof t&&Math.abs(e-t)<=oo.EPSILON*Math.max(1,Math.abs(e),Math.abs(t))}finally{oo.EPSILON=r}}function po(e,t,n){if(so(e)){const r=e;n=n||function(e){return e.clone?e.clone():new Array(e.length)}(r);for(let o=0;o<n.length&&o<r.length;++o){const r="number"==typeof e?e:e[o];n[o]=t(r,o,n)}return n}return t(e)}var mo=class extends Array{clone(){return(new this.constructor).copy(this)}fromArray(e,t=0){for(let n=0;n<this.ELEMENTS;++n)this[n]=e[n+t];return this.check()}toArray(e=[],t=0){for(let n=0;n<this.ELEMENTS;++n)e[t+n]=this[n];return e}toObject(e){return e}from(e){return Array.isArray(e)?this.copy(e):this.fromObject(e)}to(e){return e===this?this:so(e)?this.toArray(e):this.toObject(e)}toTarget(e){return e?this.to(e):this}toFloat32Array(){return new Float32Array(this)}toString(){return this.formatString(oo)}formatString(e){let t="";for(let n=0;n<this.ELEMENTS;++n)t+=(n>0?", ":"")+io(this[n],e);return`${e.printTypes?this.constructor.name:""}[${t}]`}equals(e){if(!e||this.length!==e.length)return!1;for(let t=0;t<this.ELEMENTS;++t)if(!fo(this[t],e[t]))return!1;return!0}exactEquals(e){if(!e||this.length!==e.length)return!1;for(let t=0;t<this.ELEMENTS;++t)if(this[t]!==e[t])return!1;return!0}negate(){for(let e=0;e<this.ELEMENTS;++e)this[e]=-this[e];return this.check()}lerp(e,t,n){if(void 0===n)return this.lerp(this,e,t);for(let r=0;r<this.ELEMENTS;++r){const o=e[r],i="number"==typeof t?t:t[r];this[r]=o+n*(i-o)}return this.check()}min(e){for(let t=0;t<this.ELEMENTS;++t)this[t]=Math.min(e[t],this[t]);return this.check()}max(e){for(let t=0;t<this.ELEMENTS;++t)this[t]=Math.max(e[t],this[t]);return this.check()}clamp(e,t){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.min(Math.max(this[n],e[n]),t[n]);return this.check()}add(...e){for(const t of e)for(let e=0;e<this.ELEMENTS;++e)this[e]+=t[e];return this.check()}subtract(...e){for(const t of e)for(let e=0;e<this.ELEMENTS;++e)this[e]-=t[e];return this.check()}scale(e){if("number"==typeof e)for(let t=0;t<this.ELEMENTS;++t)this[t]*=e;else for(let t=0;t<this.ELEMENTS&&t<e.length;++t)this[t]*=e[t];return this.check()}multiplyByScalar(e){for(let t=0;t<this.ELEMENTS;++t)this[t]*=e;return this.check()}check(){if(oo.debug&&!this.validate())throw new Error(`math.gl: ${this.constructor.name} some fields set to invalid numbers'`);return this}validate(){let e=this.length===this.ELEMENTS;for(let t=0;t<this.ELEMENTS;++t)e=e&&Number.isFinite(this[t]);return e}sub(e){return this.subtract(e)}setScalar(e){for(let t=0;t<this.ELEMENTS;++t)this[t]=e;return this.check()}addScalar(e){for(let t=0;t<this.ELEMENTS;++t)this[t]+=e;return this.check()}subScalar(e){return this.addScalar(-e)}multiplyScalar(e){for(let t=0;t<this.ELEMENTS;++t)this[t]*=e;return this.check()}divideScalar(e){return this.multiplyByScalar(1/e)}clampScalar(e,t){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.min(Math.max(this[n],e),t);return this.check()}get elements(){return this}};function go(e){if(!Number.isFinite(e))throw new Error(`Invalid number ${JSON.stringify(e)}`);return e}function bo(e,t,n=""){if(oo.debug&&!function(e,t){if(e.length!==t)return!1;for(let n=0;n<e.length;++n)if(!Number.isFinite(e[n]))return!1;return!0}(e,t))throw new Error(`math.gl: ${n} some fields set to invalid numbers'`);return e}function yo(e,t){if(!e)throw new Error(`math.gl assertion ${t}`)}var _o=class extends mo{get x(){return this[0]}set x(e){this[0]=go(e)}get y(){return this[1]}set y(e){this[1]=go(e)}len(){return Math.sqrt(this.lengthSquared())}magnitude(){return this.len()}lengthSquared(){let e=0;for(let t=0;t<this.ELEMENTS;++t)e+=this[t]*this[t];return e}magnitudeSquared(){return this.lengthSquared()}distance(e){return Math.sqrt(this.distanceSquared(e))}distanceSquared(e){let t=0;for(let n=0;n<this.ELEMENTS;++n){const r=this[n]-e[n];t+=r*r}return go(t)}dot(e){let t=0;for(let n=0;n<this.ELEMENTS;++n)t+=this[n]*e[n];return go(t)}normalize(){const e=this.magnitude();if(0!==e)for(let t=0;t<this.ELEMENTS;++t)this[t]/=e;return this.check()}multiply(...e){for(const t of e)for(let e=0;e<this.ELEMENTS;++e)this[e]*=t[e];return this.check()}divide(...e){for(const t of e)for(let e=0;e<this.ELEMENTS;++e)this[e]/=t[e];return this.check()}lengthSq(){return this.lengthSquared()}distanceTo(e){return this.distance(e)}distanceToSquared(e){return this.distanceSquared(e)}getComponent(e){return yo(e>=0&&e<this.ELEMENTS,"index is out of range"),go(this[e])}setComponent(e,t){return yo(e>=0&&e<this.ELEMENTS,"index is out of range"),this[e]=t,this.check()}addVectors(e,t){return this.copy(e).add(t)}subVectors(e,t){return this.copy(e).subtract(t)}multiplyVectors(e,t){return this.copy(e).multiply(t)}addScaledVector(e,t){return this.add(new this.constructor(e).multiplyScalar(t))}},vo="undefined"!=typeof Float32Array?Float32Array:Array;function wo(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e}function Eo(e,t,n,r){const o=t[0],i=t[1];return e[0]=o+r*(n[0]-o),e[1]=i+r*(n[1]-i),e}function xo(e,t,n){const r=t[0],o=t[1];return e[0]=n[0]*r+n[2]*o,e[1]=n[1]*r+n[3]*o,e}function Po(e,t,n){const r=t[0],o=t[1];return e[0]=n[0]*r+n[2]*o+n[4],e[1]=n[1]*r+n[3]*o+n[5],e}function Oo(e,t,n){const r=t[0],o=t[1];return e[0]=n[0]*r+n[3]*o+n[6],e[1]=n[1]*r+n[4]*o+n[7],e}function To(e,t,n){const r=t[0],o=t[1];return e[0]=n[0]*r+n[4]*o+n[12],e[1]=n[1]*r+n[5]*o+n[13],e}var Mo=function(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e};!function(){const e=function(){const e=new vo(2);return vo!=Float32Array&&(e[0]=0,e[1]=0),e}()}();function So(e,t,n){const r=t[0],o=t[1],i=n[3]*r+n[7]*o||1;return e[0]=(n[0]*r+n[4]*o)/i,e[1]=(n[1]*r+n[5]*o)/i,e}function jo(e,t,n){const r=t[0],o=t[1],i=t[2],s=n[3]*r+n[7]*o+n[11]*i||1;return e[0]=(n[0]*r+n[4]*o+n[8]*i)/s,e[1]=(n[1]*r+n[5]*o+n[9]*i)/s,e[2]=(n[2]*r+n[6]*o+n[10]*i)/s,e}function Ao(e,t,n){const r=t[0],o=t[1];return e[0]=n[0]*r+n[2]*o,e[1]=n[1]*r+n[3]*o,e[2]=t[2],e[3]=t[3],e}function Lo(e,t,n){const r=t[0],o=t[1],i=t[2];return e[0]=n[0]*r+n[3]*o+n[6]*i,e[1]=n[1]*r+n[4]*o+n[7]*i,e[2]=n[2]*r+n[5]*o+n[8]*i,e[3]=t[3],e}function Io(){const e=new vo(3);return vo!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function Co(e){const t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function Ro(e,t,n){const r=new vo(3);return r[0]=e,r[1]=t,r[2]=n,r}function $o(e,t){const n=t[0],r=t[1],o=t[2];let i=n*n+r*r+o*o;return i>0&&(i=1/Math.sqrt(i)),e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e}function ko(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function No(e,t,n){const r=t[0],o=t[1],i=t[2],s=n[0],a=n[1],c=n[2];return e[0]=o*c-i*a,e[1]=i*s-r*c,e[2]=r*a-o*s,e}function Do(e,t,n,r){const o=t[0],i=t[1],s=t[2];return e[0]=o+r*(n[0]-o),e[1]=i+r*(n[1]-i),e[2]=s+r*(n[2]-s),e}function zo(e,t,n){const r=t[0],o=t[1],i=t[2];let s=n[3]*r+n[7]*o+n[11]*i+n[15];return s=s||1,e[0]=(n[0]*r+n[4]*o+n[8]*i+n[12])/s,e[1]=(n[1]*r+n[5]*o+n[9]*i+n[13])/s,e[2]=(n[2]*r+n[6]*o+n[10]*i+n[14])/s,e}function Uo(e,t,n){const r=t[0],o=t[1],i=t[2];return e[0]=r*n[0]+o*n[3]+i*n[6],e[1]=r*n[1]+o*n[4]+i*n[7],e[2]=r*n[2]+o*n[5]+i*n[8],e}function Wo(e,t,n){const r=n[0],o=n[1],i=n[2],s=n[3],a=t[0],c=t[1],l=t[2];let u=o*l-i*c,h=i*a-r*l,f=r*c-o*a,d=o*f-i*h,p=i*u-r*f,m=r*h-o*u;const g=2*s;return u*=g,h*=g,f*=g,d*=2,p*=2,m*=2,e[0]=a+u+d,e[1]=c+h+p,e[2]=l+f+m,e}var Fo,Bo=function(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e},Go=Co,Vo=function(e){const t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r},Yo=(function(){const e=Io()}(),[0,0,0]),Xo=class e extends _o{static get ZERO(){return Fo||(Fo=new e(0,0,0),Object.freeze(Fo)),Fo}constructor(e=0,t=0,n=0){super(-0,-0,-0),1===arguments.length&&so(e)?this.copy(e):(oo.debug&&(go(e),go(t),go(n)),this[0]=e,this[1]=t,this[2]=n)}set(e,t,n){return this[0]=e,this[1]=t,this[2]=n,this.check()}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this.check()}fromObject(e){return oo.debug&&(go(e.x),go(e.y),go(e.z)),this[0]=e.x,this[1]=e.y,this[2]=e.z,this.check()}toObject(e){return e.x=this[0],e.y=this[1],e.z=this[2],e}get ELEMENTS(){return 3}get z(){return this[2]}set z(e){this[2]=go(e)}angle(e){return function(e,t){const n=e[0],r=e[1],o=e[2],i=t[0],s=t[1],a=t[2],c=Math.sqrt((n*n+r*r+o*o)*(i*i+s*s+a*a)),l=c&&ko(e,t)/c;return Math.acos(Math.min(Math.max(l,-1),1))}(this,e)}cross(e){return No(this,this,e),this.check()}rotateX({radians:e,origin:t=Yo}){return function(e,t,n,r){const o=[],i=[];o[0]=t[0]-n[0],o[1]=t[1]-n[1],o[2]=t[2]-n[2],i[0]=o[0],i[1]=o[1]*Math.cos(r)-o[2]*Math.sin(r),i[2]=o[1]*Math.sin(r)+o[2]*Math.cos(r),e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2]}(this,this,t,e),this.check()}rotateY({radians:e,origin:t=Yo}){return function(e,t,n,r){const o=[],i=[];o[0]=t[0]-n[0],o[1]=t[1]-n[1],o[2]=t[2]-n[2],i[0]=o[2]*Math.sin(r)+o[0]*Math.cos(r),i[1]=o[1],i[2]=o[2]*Math.cos(r)-o[0]*Math.sin(r),e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2]}(this,this,t,e),this.check()}rotateZ({radians:e,origin:t=Yo}){return function(e,t,n,r){const o=[],i=[];o[0]=t[0]-n[0],o[1]=t[1]-n[1],o[2]=t[2]-n[2],i[0]=o[0]*Math.cos(r)-o[1]*Math.sin(r),i[1]=o[0]*Math.sin(r)+o[1]*Math.cos(r),i[2]=o[2],e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2]}(this,this,t,e),this.check()}transform(e){return this.transformAsPoint(e)}transformAsPoint(e){return zo(this,this,e),this.check()}transformAsVector(e){return jo(this,this,e),this.check()}transformByMatrix3(e){return Uo(this,this,e),this.check()}transformByMatrix2(e){return function(e,t,n){const r=t[0],o=t[1];e[0]=n[0]*r+n[2]*o,e[1]=n[1]*r+n[3]*o,e[2]=t[2]}(this,this,e),this.check()}transformByQuaternion(e){return Wo(this,this,e),this.check()}},qo=class extends mo{toString(){let e="[";if(oo.printRowMajor){e+="row-major:";for(let t=0;t<this.RANK;++t)for(let n=0;n<this.RANK;++n)e+=` ${this[n*this.RANK+t]}`}else{e+="column-major:";for(let t=0;t<this.ELEMENTS;++t)e+=` ${this[t]}`}return e+="]",e}getElementIndex(e,t){return t*this.RANK+e}getElement(e,t){return this[t*this.RANK+e]}setElement(e,t,n){return this[t*this.RANK+e]=go(n),this}getColumn(e,t=new Array(this.RANK).fill(-0)){const n=e*this.RANK;for(let r=0;r<this.RANK;++r)t[r]=this[n+r];return t}setColumn(e,t){const n=e*this.RANK;for(let r=0;r<this.RANK;++r)this[n+r]=t[r];return this}};function Ho(e,t){const n=t[0],r=t[1],o=t[2],i=t[3],s=t[4],a=t[5],c=t[6],l=t[7],u=t[8],h=t[9],f=t[10],d=t[11],p=t[12],m=t[13],g=t[14],b=t[15],y=n*a-r*s,_=n*c-o*s,v=n*l-i*s,w=r*c-o*a,E=r*l-i*a,x=o*l-i*c,P=u*m-h*p,O=u*g-f*p,T=u*b-d*p,M=h*g-f*m,S=h*b-d*m,j=f*b-d*g;let A=y*j-_*S+v*M+w*T-E*O+x*P;return A?(A=1/A,e[0]=(a*j-c*S+l*M)*A,e[1]=(o*S-r*j-i*M)*A,e[2]=(m*x-g*E+b*w)*A,e[3]=(f*E-h*x-d*w)*A,e[4]=(c*T-s*j-l*O)*A,e[5]=(n*j-o*T+i*O)*A,e[6]=(g*v-p*x-b*_)*A,e[7]=(u*x-f*v+d*_)*A,e[8]=(s*S-a*T+l*P)*A,e[9]=(r*T-n*S-i*P)*A,e[10]=(p*E-m*v+b*y)*A,e[11]=(h*v-u*E-d*y)*A,e[12]=(a*O-s*M-c*P)*A,e[13]=(n*M-r*O+o*P)*A,e[14]=(m*_-p*w-g*y)*A,e[15]=(u*w-h*_+f*y)*A,e):null}function Zo(e,t,n){const r=t[0],o=t[1],i=t[2],s=t[3],a=t[4],c=t[5],l=t[6],u=t[7],h=t[8],f=t[9],d=t[10],p=t[11],m=t[12],g=t[13],b=t[14],y=t[15];let _=n[0],v=n[1],w=n[2],E=n[3];return e[0]=_*r+v*a+w*h+E*m,e[1]=_*o+v*c+w*f+E*g,e[2]=_*i+v*l+w*d+E*b,e[3]=_*s+v*u+w*p+E*y,_=n[4],v=n[5],w=n[6],E=n[7],e[4]=_*r+v*a+w*h+E*m,e[5]=_*o+v*c+w*f+E*g,e[6]=_*i+v*l+w*d+E*b,e[7]=_*s+v*u+w*p+E*y,_=n[8],v=n[9],w=n[10],E=n[11],e[8]=_*r+v*a+w*h+E*m,e[9]=_*o+v*c+w*f+E*g,e[10]=_*i+v*l+w*d+E*b,e[11]=_*s+v*u+w*p+E*y,_=n[12],v=n[13],w=n[14],E=n[15],e[12]=_*r+v*a+w*h+E*m,e[13]=_*o+v*c+w*f+E*g,e[14]=_*i+v*l+w*d+E*b,e[15]=_*s+v*u+w*p+E*y,e}function Ko(e,t,n){const r=n[0],o=n[1],i=n[2];let s,a,c,l,u,h,f,d,p,m,g,b;return t===e?(e[12]=t[0]*r+t[4]*o+t[8]*i+t[12],e[13]=t[1]*r+t[5]*o+t[9]*i+t[13],e[14]=t[2]*r+t[6]*o+t[10]*i+t[14],e[15]=t[3]*r+t[7]*o+t[11]*i+t[15]):(s=t[0],a=t[1],c=t[2],l=t[3],u=t[4],h=t[5],f=t[6],d=t[7],p=t[8],m=t[9],g=t[10],b=t[11],e[0]=s,e[1]=a,e[2]=c,e[3]=l,e[4]=u,e[5]=h,e[6]=f,e[7]=d,e[8]=p,e[9]=m,e[10]=g,e[11]=b,e[12]=s*r+u*o+p*i+t[12],e[13]=a*r+h*o+m*i+t[13],e[14]=c*r+f*o+g*i+t[14],e[15]=l*r+d*o+b*i+t[15]),e}function Jo(e,t,n){const r=n[0],o=n[1],i=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*o,e[5]=t[5]*o,e[6]=t[6]*o,e[7]=t[7]*o,e[8]=t[8]*i,e[9]=t[9]*i,e[10]=t[10]*i,e[11]=t[11]*i,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Qo(e,t,n){const r=Math.sin(n),o=Math.cos(n),i=t[4],s=t[5],a=t[6],c=t[7],l=t[8],u=t[9],h=t[10],f=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=i*o+l*r,e[5]=s*o+u*r,e[6]=a*o+h*r,e[7]=c*o+f*r,e[8]=l*o-i*r,e[9]=u*o-s*r,e[10]=h*o-a*r,e[11]=f*o-c*r,e}function ei(e,t,n){const r=Math.sin(n),o=Math.cos(n),i=t[0],s=t[1],a=t[2],c=t[3],l=t[4],u=t[5],h=t[6],f=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=i*o+l*r,e[1]=s*o+u*r,e[2]=a*o+h*r,e[3]=c*o+f*r,e[4]=l*o-i*r,e[5]=u*o-s*r,e[6]=h*o-a*r,e[7]=f*o-c*r,e}function ti(e,t){const n=t[0],r=t[1],o=t[2],i=t[4],s=t[5],a=t[6],c=t[8],l=t[9],u=t[10];return e[0]=Math.sqrt(n*n+r*r+o*o),e[1]=Math.sqrt(i*i+s*s+a*a),e[2]=Math.sqrt(c*c+l*l+u*u),e}var ni=function(e,t,n,r,o){const i=1/Math.tan(t/2);if(e[0]=i/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,null!=o&&o!==1/0){const t=1/(r-o);e[10]=(o+r)*t,e[14]=2*o*r*t}else e[10]=-1,e[14]=-2*r;return e};var ri=function(e,t,n,r,o,i,s){const a=1/(t-n),c=1/(r-o),l=1/(i-s);return e[0]=-2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*l,e[11]=0,e[12]=(t+n)*a,e[13]=(o+r)*c,e[14]=(s+i)*l,e[15]=1,e};function oi(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e}function ii(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e}function si(e){const t=e[0],n=e[1],r=e[2],o=e[3];return Math.sqrt(t*t+n*n+r*r+o*o)}function ai(e){const t=e[0],n=e[1],r=e[2],o=e[3];return t*t+n*n+r*r+o*o}function ci(e,t){const n=t[0],r=t[1],o=t[2],i=t[3];let s=n*n+r*r+o*o+i*i;return s>0&&(s=1/Math.sqrt(s)),e[0]=n*s,e[1]=r*s,e[2]=o*s,e[3]=i*s,e}function li(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]}function ui(e,t,n,r){const o=t[0],i=t[1],s=t[2],a=t[3];return e[0]=o+r*(n[0]-o),e[1]=i+r*(n[1]-i),e[2]=s+r*(n[2]-s),e[3]=a+r*(n[3]-a),e}function hi(e,t,n){const r=t[0],o=t[1],i=t[2],s=t[3];return e[0]=n[0]*r+n[4]*o+n[8]*i+n[12]*s,e[1]=n[1]*r+n[5]*o+n[9]*i+n[13]*s,e[2]=n[2]*r+n[6]*o+n[10]*i+n[14]*s,e[3]=n[3]*r+n[7]*o+n[11]*i+n[15]*s,e}function fi(e,t,n){const r=t[0],o=t[1],i=t[2],s=n[0],a=n[1],c=n[2],l=n[3],u=l*r+a*i-c*o,h=l*o+c*r-s*i,f=l*i+s*o-a*r,d=-s*r-a*o-c*i;return e[0]=u*l+d*-s+h*-c-f*-a,e[1]=h*l+d*-a+f*-s-u*-c,e[2]=f*l+d*-c+u*-a-h*-s,e[3]=t[3],e}var di;!function(){const e=function(){const e=new vo(4);return vo!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e}()}();!function(e){e[e.COL0ROW0=0]="COL0ROW0",e[e.COL0ROW1=1]="COL0ROW1",e[e.COL0ROW2=2]="COL0ROW2",e[e.COL0ROW3=3]="COL0ROW3",e[e.COL1ROW0=4]="COL1ROW0",e[e.COL1ROW1=5]="COL1ROW1",e[e.COL1ROW2=6]="COL1ROW2",e[e.COL1ROW3=7]="COL1ROW3",e[e.COL2ROW0=8]="COL2ROW0",e[e.COL2ROW1=9]="COL2ROW1",e[e.COL2ROW2=10]="COL2ROW2",e[e.COL2ROW3=11]="COL2ROW3",e[e.COL3ROW0=12]="COL3ROW0",e[e.COL3ROW1=13]="COL3ROW1",e[e.COL3ROW2=14]="COL3ROW2",e[e.COL3ROW3=15]="COL3ROW3"}(di||(di={}));var pi,mi,gi=45*Math.PI/180,bi=1,yi=.1,_i=500,vi=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),wi=class extends qo{static get IDENTITY(){return function(){mi||(mi=new wi,Object.freeze(mi));return mi}()}static get ZERO(){return function(){pi||(pi=new wi([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(pi));return pi}()}get ELEMENTS(){return 16}get RANK(){return 4}get INDICES(){return di}constructor(e){super(-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0),1===arguments.length&&Array.isArray(e)?this.copy(e):this.identity()}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this[4]=e[4],this[5]=e[5],this[6]=e[6],this[7]=e[7],this[8]=e[8],this[9]=e[9],this[10]=e[10],this[11]=e[11],this[12]=e[12],this[13]=e[13],this[14]=e[14],this[15]=e[15],this.check()}set(e,t,n,r,o,i,s,a,c,l,u,h,f,d,p,m){return this[0]=e,this[1]=t,this[2]=n,this[3]=r,this[4]=o,this[5]=i,this[6]=s,this[7]=a,this[8]=c,this[9]=l,this[10]=u,this[11]=h,this[12]=f,this[13]=d,this[14]=p,this[15]=m,this.check()}setRowMajor(e,t,n,r,o,i,s,a,c,l,u,h,f,d,p,m){return this[0]=e,this[1]=o,this[2]=c,this[3]=f,this[4]=t,this[5]=i,this[6]=l,this[7]=d,this[8]=n,this[9]=s,this[10]=u,this[11]=p,this[12]=r,this[13]=a,this[14]=h,this[15]=m,this.check()}toRowMajor(e){return e[0]=this[0],e[1]=this[4],e[2]=this[8],e[3]=this[12],e[4]=this[1],e[5]=this[5],e[6]=this[9],e[7]=this[13],e[8]=this[2],e[9]=this[6],e[10]=this[10],e[11]=this[14],e[12]=this[3],e[13]=this[7],e[14]=this[11],e[15]=this[15],e}identity(){return this.copy(vi)}fromObject(e){return this.check()}fromQuaternion(e){return function(e,t){const n=t[0],r=t[1],o=t[2],i=t[3],s=n+n,a=r+r,c=o+o,l=n*s,u=r*s,h=r*a,f=o*s,d=o*a,p=o*c,m=i*s,g=i*a,b=i*c;e[0]=1-h-p,e[1]=u+b,e[2]=f-g,e[3]=0,e[4]=u-b,e[5]=1-l-p,e[6]=d+m,e[7]=0,e[8]=f+g,e[9]=d-m,e[10]=1-l-h,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1}(this,e),this.check()}frustum(e){const{left:t,right:n,bottom:r,top:o,near:i=yi,far:s=_i}=e;return s===1/0?function(e,t,n,r,o,i){const s=2*i/(n-t),a=2*i/(o-r),c=(n+t)/(n-t),l=(o+r)/(o-r),u=-1,h=-1,f=-2*i;e[0]=s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,e[6]=0,e[7]=0,e[8]=c,e[9]=l,e[10]=u,e[11]=h,e[12]=0,e[13]=0,e[14]=f,e[15]=0}(this,t,n,r,o,i):function(e,t,n,r,o,i,s){const a=1/(n-t),c=1/(o-r),l=1/(i-s);e[0]=2*i*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=2*i*c,e[6]=0,e[7]=0,e[8]=(n+t)*a,e[9]=(o+r)*c,e[10]=(s+i)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=s*i*2*l,e[15]=0}(this,t,n,r,o,i,s),this.check()}lookAt(e){const{eye:t,center:n=[0,0,0],up:r=[0,1,0]}=e;return function(e,t,n,r){let o,i,s,a,c,l,u,h,f,d;const p=t[0],m=t[1],g=t[2],b=r[0],y=r[1],_=r[2],v=n[0],w=n[1],E=n[2];Math.abs(p-v)<1e-6&&Math.abs(m-w)<1e-6&&Math.abs(g-E)<1e-6?function(e){e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1}(e):(h=p-v,f=m-w,d=g-E,o=1/Math.sqrt(h*h+f*f+d*d),h*=o,f*=o,d*=o,i=y*d-_*f,s=_*h-b*d,a=b*f-y*h,o=Math.sqrt(i*i+s*s+a*a),o?(o=1/o,i*=o,s*=o,a*=o):(i=0,s=0,a=0),c=f*a-d*s,l=d*i-h*a,u=h*s-f*i,o=Math.sqrt(c*c+l*l+u*u),o?(o=1/o,c*=o,l*=o,u*=o):(c=0,l=0,u=0),e[0]=i,e[1]=c,e[2]=h,e[3]=0,e[4]=s,e[5]=l,e[6]=f,e[7]=0,e[8]=a,e[9]=u,e[10]=d,e[11]=0,e[12]=-(i*p+s*m+a*g),e[13]=-(c*p+l*m+u*g),e[14]=-(h*p+f*m+d*g),e[15]=1)}(this,t,n,r),this.check()}ortho(e){const{left:t,right:n,bottom:r,top:o,near:i=yi,far:s=_i}=e;return ri(this,t,n,r,o,i,s),this.check()}orthographic(e){const{fovy:t=gi,aspect:n=bi,focalDistance:r=1,near:o=yi,far:i=_i}=e;Ei(t);const s=t/2,a=r*Math.tan(s),c=a*n;return this.ortho({left:-c,right:c,bottom:-a,top:a,near:o,far:i})}perspective(e){const{fovy:t=45*Math.PI/180,aspect:n=1,near:r=.1,far:o=500}=e;return Ei(t),ni(this,t,n,r,o),this.check()}determinant(){return function(e){const t=e[0],n=e[1],r=e[2],o=e[3],i=e[4],s=e[5],a=e[6],c=e[7],l=e[8],u=e[9],h=e[10],f=e[11],d=e[12],p=e[13],m=e[14],g=t*s-n*i,b=t*a-r*i,y=n*a-r*s,_=l*p-u*d,v=l*m-h*d,w=u*m-h*p;return c*(t*w-n*v+r*_)-o*(i*w-s*v+a*_)+e[15]*(l*y-u*b+h*g)-f*(d*y-p*b+m*g)}(this)}getScale(e=[-0,-0,-0]){return e[0]=Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2]),e[1]=Math.sqrt(this[4]*this[4]+this[5]*this[5]+this[6]*this[6]),e[2]=Math.sqrt(this[8]*this[8]+this[9]*this[9]+this[10]*this[10]),e}getTranslation(e=[-0,-0,-0]){return e[0]=this[12],e[1]=this[13],e[2]=this[14],e}getRotation(e,t){e=e||[-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0],t=t||[-0,-0,-0];const n=this.getScale(t),r=1/n[0],o=1/n[1],i=1/n[2];return e[0]=this[0]*r,e[1]=this[1]*o,e[2]=this[2]*i,e[3]=0,e[4]=this[4]*r,e[5]=this[5]*o,e[6]=this[6]*i,e[7]=0,e[8]=this[8]*r,e[9]=this[9]*o,e[10]=this[10]*i,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}getRotationMatrix3(e,t){e=e||[-0,-0,-0,-0,-0,-0,-0,-0,-0],t=t||[-0,-0,-0];const n=this.getScale(t),r=1/n[0],o=1/n[1],i=1/n[2];return e[0]=this[0]*r,e[1]=this[1]*o,e[2]=this[2]*i,e[3]=this[4]*r,e[4]=this[5]*o,e[5]=this[6]*i,e[6]=this[8]*r,e[7]=this[9]*o,e[8]=this[10]*i,e}transpose(){return function(e,t){if(e===t){const n=t[1],r=t[2],o=t[3],i=t[6],s=t[7],a=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=r,e[9]=i,e[11]=t[14],e[12]=o,e[13]=s,e[14]=a}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15]}(this,this),this.check()}invert(){return Ho(this,this),this.check()}multiplyLeft(e){return Zo(this,e,this),this.check()}multiplyRight(e){return Zo(this,this,e),this.check()}rotateX(e){return Qo(this,this,e),this.check()}rotateY(e){return function(e,t,n){const r=Math.sin(n),o=Math.cos(n),i=t[0],s=t[1],a=t[2],c=t[3],l=t[8],u=t[9],h=t[10],f=t[11];t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=i*o-l*r,e[1]=s*o-u*r,e[2]=a*o-h*r,e[3]=c*o-f*r,e[8]=i*r+l*o,e[9]=s*r+u*o,e[10]=a*r+h*o,e[11]=c*r+f*o}(this,this,e),this.check()}rotateZ(e){return ei(this,this,e),this.check()}rotateXYZ(e){return this.rotateX(e[0]).rotateY(e[1]).rotateZ(e[2])}rotateAxis(e,t){return function(e,t,n,r){let o,i,s,a,c,l,u,h,f,d,p,m,g,b,y,_,v,w,E,x,P,O,T,M,S=r[0],j=r[1],A=r[2],L=Math.sqrt(S*S+j*j+A*A);L<1e-6||(L=1/L,S*=L,j*=L,A*=L,i=Math.sin(n),o=Math.cos(n),s=1-o,a=t[0],c=t[1],l=t[2],u=t[3],h=t[4],f=t[5],d=t[6],p=t[7],m=t[8],g=t[9],b=t[10],y=t[11],_=S*S*s+o,v=j*S*s+A*i,w=A*S*s-j*i,E=S*j*s-A*i,x=j*j*s+o,P=A*j*s+S*i,O=S*A*s+j*i,T=j*A*s-S*i,M=A*A*s+o,e[0]=a*_+h*v+m*w,e[1]=c*_+f*v+g*w,e[2]=l*_+d*v+b*w,e[3]=u*_+p*v+y*w,e[4]=a*E+h*x+m*P,e[5]=c*E+f*x+g*P,e[6]=l*E+d*x+b*P,e[7]=u*E+p*x+y*P,e[8]=a*O+h*T+m*M,e[9]=c*O+f*T+g*M,e[10]=l*O+d*T+b*M,e[11]=u*O+p*T+y*M,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]))}(this,this,e,t),this.check()}scale(e){return Jo(this,this,Array.isArray(e)?e:[e,e,e]),this.check()}translate(e){return Ko(this,this,e),this.check()}transform(e,t){return 4===e.length?(bo(t=hi(t||[-0,-0,-0,-0],e,this),4),t):this.transformAsPoint(e,t)}transformAsPoint(e,t){const{length:n}=e;let r;switch(n){case 2:r=To(t||[-0,-0],e,this);break;case 3:r=zo(t||[-0,-0,-0],e,this);break;default:throw new Error("Illegal vector")}return bo(r,e.length),r}transformAsVector(e,t){let n;switch(e.length){case 2:n=So(t||[-0,-0],e,this);break;case 3:n=jo(t||[-0,-0,-0],e,this);break;default:throw new Error("Illegal vector")}return bo(n,e.length),n}transformPoint(e,t){return this.transformAsPoint(e,t)}transformVector(e,t){return this.transformAsPoint(e,t)}transformDirection(e,t){return this.transformAsVector(e,t)}makeRotationX(e){return this.identity().rotateX(e)}makeTranslation(e,t,n){return this.identity().translate([e,t,n])}};function Ei(e){if(e>2*Math.PI)throw Error("expected radians")}var xi,Pi,Oi,Ti={name:"fp32",source:"#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\nconst FP32_TWO_PI: f32 = 6.2831854820251465;\nconst FP32_PI_2: f32 = 1.5707963705062866;\nconst FP32_PI_16: f32 = 0.1963495463132858;\n\nconst FP32_SIN_TABLE_0: f32 = 0.19509032368659973;\nconst FP32_SIN_TABLE_1: f32 = 0.3826834261417389;\nconst FP32_SIN_TABLE_2: f32 = 0.5555702447891235;\nconst FP32_SIN_TABLE_3: f32 = 0.7071067690849304;\n\nconst FP32_COS_TABLE_0: f32 = 0.9807852506637573;\nconst FP32_COS_TABLE_1: f32 = 0.9238795042037964;\nconst FP32_COS_TABLE_2: f32 = 0.8314695954322815;\nconst FP32_COS_TABLE_3: f32 = 0.7071067690849304;\n\nconst FP32_INVERSE_FACTORIAL_3: f32 = 1.666666716337204e-01;\nconst FP32_INVERSE_FACTORIAL_5: f32 = 8.333333767950535e-03;\nconst FP32_INVERSE_FACTORIAL_7: f32 = 1.9841270113829523e-04;\nconst FP32_INVERSE_FACTORIAL_9: f32 = 2.75573188446287533e-06;\nconst FP32_OVERFLOW: f32 = 3.402823466e+38;\n\nfn sin_taylor_fp32(a: f32) -> f32 {\n if (a == 0.0) {\n return 0.0;\n }\n\n let x = -a * a;\n var sum = a;\n var term = a;\n\n term = term * x;\n sum = sum + term * FP32_INVERSE_FACTORIAL_3;\n term = term * x;\n sum = sum + term * FP32_INVERSE_FACTORIAL_5;\n term = term * x;\n sum = sum + term * FP32_INVERSE_FACTORIAL_7;\n term = term * x;\n sum = sum + term * FP32_INVERSE_FACTORIAL_9;\n\n return sum;\n}\n\nfn tan_taylor_fp32(a: f32) -> f32 {\n if (a == 0.0) {\n return 0.0;\n }\n\n let z = floor(a / FP32_TWO_PI);\n let reduced = a - FP32_TWO_PI * z;\n\n var quadrantValue = floor(reduced / FP32_PI_2 + 0.5);\n let quadrant = i32(quadrantValue);\n if (quadrant < -2 || quadrant > 2) {\n return FP32_OVERFLOW;\n }\n\n var angle = reduced - FP32_PI_2 * quadrantValue;\n quadrantValue = floor(angle / FP32_PI_16 + 0.5);\n let tableIndex = i32(quadrantValue);\n let absoluteTableIndex = abs(tableIndex);\n if (absoluteTableIndex > 4) {\n return FP32_OVERFLOW;\n }\n\n angle = angle - FP32_PI_16 * quadrantValue;\n let sinAngle = sin_taylor_fp32(angle);\n let cosAngle = sqrt(1.0 - sinAngle * sinAngle);\n\n var tableCos = 0.0;\n var tableSin = 0.0;\n if (absoluteTableIndex == 1) {\n tableCos = FP32_COS_TABLE_0;\n tableSin = FP32_SIN_TABLE_0;\n } else if (absoluteTableIndex == 2) {\n tableCos = FP32_COS_TABLE_1;\n tableSin = FP32_SIN_TABLE_1;\n } else if (absoluteTableIndex == 3) {\n tableCos = FP32_COS_TABLE_2;\n tableSin = FP32_SIN_TABLE_2;\n } else if (absoluteTableIndex == 4) {\n tableCos = FP32_COS_TABLE_3;\n tableSin = FP32_SIN_TABLE_3;\n }\n\n var sinReduced = sinAngle;\n var cosReduced = cosAngle;\n if (tableIndex > 0) {\n sinReduced = tableCos * sinAngle + tableSin * cosAngle;\n cosReduced = tableCos * cosAngle - tableSin * sinAngle;\n } else if (tableIndex < 0) {\n sinReduced = tableCos * sinAngle - tableSin * cosAngle;\n cosReduced = tableCos * cosAngle + tableSin * sinAngle;\n }\n\n var sinValue = 0.0;\n var cosValue = 0.0;\n if (quadrant == 0) {\n sinValue = sinReduced;\n cosValue = cosReduced;\n } else if (quadrant == 1) {\n sinValue = cosReduced;\n cosValue = -sinReduced;\n } else if (quadrant == -1) {\n sinValue = -cosReduced;\n cosValue = sinReduced;\n } else {\n sinValue = -sinReduced;\n cosValue = -cosReduced;\n }\n\n return sinValue / cosValue;\n}\n\nfn tan_fp32(a: f32) -> f32 {\n return tan_taylor_fp32(a);\n}\n#else\nfn tan_fp32(a: f32) -> f32 {\n return tan(a);\n}\n#endif\n",vs:"#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\n\n// All these functions are for substituting tan() function from Intel GPU only\nconst float TWO_PI = 6.2831854820251465;\nconst float PI_2 = 1.5707963705062866;\nconst float PI_16 = 0.1963495463132858;\n\nconst float SIN_TABLE_0 = 0.19509032368659973;\nconst float SIN_TABLE_1 = 0.3826834261417389;\nconst float SIN_TABLE_2 = 0.5555702447891235;\nconst float SIN_TABLE_3 = 0.7071067690849304;\n\nconst float COS_TABLE_0 = 0.9807852506637573;\nconst float COS_TABLE_1 = 0.9238795042037964;\nconst float COS_TABLE_2 = 0.8314695954322815;\nconst float COS_TABLE_3 = 0.7071067690849304;\n\nconst float INVERSE_FACTORIAL_3 = 1.666666716337204e-01; // 1/3!\nconst float INVERSE_FACTORIAL_5 = 8.333333767950535e-03; // 1/5!\nconst float INVERSE_FACTORIAL_7 = 1.9841270113829523e-04; // 1/7!\nconst float INVERSE_FACTORIAL_9 = 2.75573188446287533e-06; // 1/9!\n\nfloat sin_taylor_fp32(float a) {\n float r, s, t, x;\n\n if (a == 0.0) {\n return 0.0;\n }\n\n x = -a * a;\n s = a;\n r = a;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_3;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_5;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_7;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_9;\n s = s + t;\n\n return s;\n}\n\nvoid sincos_taylor_fp32(float a, out float sin_t, out float cos_t) {\n if (a == 0.0) {\n sin_t = 0.0;\n cos_t = 1.0;\n }\n sin_t = sin_taylor_fp32(a);\n cos_t = sqrt(1.0 - sin_t * sin_t);\n}\n\nfloat tan_taylor_fp32(float a) {\n float sin_a;\n float cos_a;\n\n if (a == 0.0) {\n return 0.0;\n }\n\n // 2pi range reduction\n float z = floor(a / TWO_PI);\n float r = a - TWO_PI * z;\n\n float t;\n float q = floor(r / PI_2 + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return 1.0 / 0.0;\n }\n\n t = r - PI_2 * q;\n\n q = floor(t / PI_16 + 0.5);\n int k = int(q);\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return 1.0 / 0.0;\n } else {\n t = t - PI_16 * q;\n }\n\n float u = 0.0;\n float v = 0.0;\n\n float sin_t, cos_t;\n float s, c;\n sincos_taylor_fp32(t, sin_t, cos_t);\n\n if (k == 0) {\n s = sin_t;\n c = cos_t;\n } else {\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0;\n v = SIN_TABLE_0;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1;\n v = SIN_TABLE_1;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2;\n v = SIN_TABLE_2;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3;\n v = SIN_TABLE_3;\n }\n if (k > 0) {\n s = u * sin_t + v * cos_t;\n c = u * cos_t - v * sin_t;\n } else {\n s = u * sin_t - v * cos_t;\n c = u * cos_t + v * sin_t;\n }\n }\n\n if (j == 0) {\n sin_a = s;\n cos_a = c;\n } else if (j == 1) {\n sin_a = c;\n cos_a = -s;\n } else if (j == -1) {\n sin_a = -c;\n cos_a = s;\n } else {\n sin_a = -s;\n cos_a = -c;\n }\n return sin_a / cos_a;\n}\n#endif\n\nfloat tan_fp32(float a) {\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\n return tan_taylor_fp32(a);\n#else\n return tan(a);\n#endif\n}\n"},Mi="#define SMOOTH_EDGE_RADIUS 0.5",Si={name:"geometry",source:"const SMOOTH_EDGE_RADIUS: f32 = 0.5;\n\nstruct VertexGeometry {\n position: vec4<f32>,\n worldPosition: vec3<f32>,\n worldPositionAlt: vec3<f32>,\n normal: vec3<f32>,\n uv: vec2<f32>,\n pickingColor: vec3<f32>,\n};\n\nvar<private> geometry_: VertexGeometry = VertexGeometry(\n vec4<f32>(0.0, 0.0, 1.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec2<f32>(0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0)\n);\n\nstruct FragmentGeometry {\n uv: vec2<f32>,\n};\n\nvar<private> fragmentGeometry: FragmentGeometry;\n\nfn smoothedge(edge: f32, x: f32) -> f32 {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n",vs:`${Mi}\n\nstruct VertexGeometry {\n vec4 position;\n vec3 worldPosition;\n vec3 worldPositionAlt;\n vec3 normal;\n vec2 uv;\n vec3 pickingColor;\n} geometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0),\n vec3(0.0),\n vec3(0.0),\n vec2(0.0),\n vec3(0.0)\n);\n`,fs:`${Mi}\n\nstruct FragmentGeometry {\n vec2 uv;\n};\nFragmentGeometry geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n`};!function(e){e[e.Start=1]="Start",e[e.Move=2]="Move",e[e.End=4]="End",e[e.Cancel=8]="Cancel"}(xi||(xi={})),function(e){e[e.None=0]="None",e[e.Left=1]="Left",e[e.Right=2]="Right",e[e.Up=4]="Up",e[e.Down=8]="Down",e[e.Horizontal=3]="Horizontal",e[e.Vertical=12]="Vertical",e[e.All=15]="All"}(Pi||(Pi={})),function(e){e[e.Possible=1]="Possible",e[e.Began=2]="Began",e[e.Changed=4]="Changed",e[e.Ended=8]="Ended",e[e.Recognized=8]="Recognized",e[e.Cancelled=16]="Cancelled",e[e.Failed=32]="Failed"}(Oi||(Oi={}));var ji="manipulation",Ai="none",Li="pan-x",Ii="pan-y";var Ci=class{constructor(e,t){this.actions="",this.manager=e,this.set(t)}set(e){"compute"===e&&(e=this.compute()),this.manager.element&&(this.manager.element.style.touchAction=e,this.actions=e)}update(){this.set(this.manager.options.touchAction)}compute(){let e=[];for(const t of this.manager.recognizers)t.options.enable&&(e=e.concat(t.getTouchAction()));return function(e){if(e.includes("none"))return Ai;const t=e.includes(Li),n=e.includes(Ii);return t&&n?Ai:t||n?t?Li:Ii:e.includes("manipulation")?ji:"auto"}(e.join(" "))}};function Ri(e){return e.trim().split(/\s+/g)}function $i(e,t,n){if(e)for(const r of Ri(t))e.addEventListener(r,n,!1)}function ki(e,t,n){if(e)for(const r of Ri(t))e.removeEventListener(r,n,!1)}function Ni(e){return(e.ownerDocument||e).defaultView}function Di(e){const t=e.length;if(1===t)return{x:Math.round(e[0].clientX),y:Math.round(e[0].clientY)};let n=0,r=0,o=0;for(;o<t;)n+=e[o].clientX,r+=e[o].clientY,o++;return{x:Math.round(n/t),y:Math.round(r/t)}}function zi(e){const t=[];let n=0;for(;n<e.pointers.length;)t[n]={clientX:Math.round(e.pointers[n].clientX),clientY:Math.round(e.pointers[n].clientY)},n++;return{timeStamp:Date.now(),pointers:t,center:Di(t),deltaX:e.deltaX,deltaY:e.deltaY}}function Ui(e,t){const n=t.x-e.x,r=t.y-e.y;return Math.sqrt(n*n+r*r)}function Wi(e,t){const n=t.clientX-e.clientX,r=t.clientY-e.clientY;return Math.sqrt(n*n+r*r)}function Fi(e,t){const n=t.clientX-e.clientX,r=t.clientY-e.clientY;return 180*Math.atan2(r,n)/Math.PI}function Bi(e,t){return e===t?Pi.None:Math.abs(e)>=Math.abs(t)?e<0?Pi.Left:Pi.Right:t<0?Pi.Up:Pi.Down}function Gi(e,t,n){return{x:t/e||0,y:n/e||0}}function Vi(e,t){return"pointerId"in e?e.pointerId:t}function Yi(e,t){e.movementOrigin=new Map(t.map((e,t)=>[Vi(e,t),{clientX:e.clientX,clientY:e.clientY}])),e.firstMovementTime=void 0}function Xi(e,t){const{session:n}=e,{pointers:r}=t,{length:o}=r;n.firstInput||(n.firstInput=zi(t)),o>1&&!n.firstMultiple?n.firstMultiple=zi(t):1===o&&(n.firstMultiple=!1);const{firstInput:i,firstMultiple:s}=n,a=s?s.center:i.center,c=t.center=Di(r);t.timeStamp=Date.now(),t.deltaTime=t.timeStamp-i.timeStamp,function(e,t){const n=t.pointers.map(Vi);if(e.movementOrigin?.size===n.length&&n.every(t=>e.movementOrigin.has(t))||Yi(e,t.pointers),t.distancePerPointer=t.pointers.map((t,r)=>Wi(e.movementOrigin.get(n[r]),t)),t.eventType&xi.Move&&t.distancePerPointer.some(e=>e>0)&&(e.firstMovementTime??(e.firstMovementTime=t.timeStamp)),t.movementDeltaTime=void 0===e.firstMovementTime?0:t.timeStamp-e.firstMovementTime,t.eventType&(xi.End|xi.Cancel)){const r=t.changedPointers.map(e=>Vi(e,t.pointers.indexOf(e)));Yi(e,t.pointers.filter((e,t)=>!r.includes(n[t])))}}(n,t),t.angle=function(e,t){const n=t.x-e.x,r=t.y-e.y;return 180*Math.atan2(r,n)/Math.PI}(a,c),t.distance=Ui(a,c);const{deltaX:l,deltaY:u}=function(e,t){const n=t.center;let r=e.offsetDelta,o=e.prevDelta;const i=e.prevInput;return t.eventType!==xi.Start&&i?.eventType!==xi.End||(o=e.prevDelta={x:i?.deltaX||0,y:i?.deltaY||0},r=e.offsetDelta={x:n.x,y:n.y}),{deltaX:o.x+(n.x-r.x),deltaY:o.y+(n.y-r.y)}}(n,t);t.deltaX=l,t.deltaY=u,t.offsetDirection=Bi(t.deltaX,t.deltaY);const h=Gi(t.deltaTime,t.deltaX,t.deltaY);var f,d;t.overallVelocityX=h.x,t.overallVelocityY=h.y,t.overallVelocity=Math.abs(h.x)>Math.abs(h.y)?h.x:h.y,t.scale=s?(f=s.pointers,Wi((d=r)[0],d[1])/Wi(f[0],f[1])):1,t.rotation=s?function(e,t){return Fi(t[1],t[0])-Fi(e[1],e[0])}(s.pointers,r):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length;let p=e.element;return function(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentNode}return!1}(t.srcEvent.target,p)&&(p=t.srcEvent.target),t.target=p,function(e,t){const n=e.lastInterval||t,r=t.timeStamp-n.timeStamp;let o,i,s,a;if(t.eventType!==xi.Cancel&&(r>25||void 0===n.velocity)){const c=t.deltaX-n.deltaX,l=t.deltaY-n.deltaY,u=Gi(r,c,l);i=u.x,s=u.y,o=Math.abs(u.x)>Math.abs(u.y)?u.x:u.y,a=Bi(c,l),e.lastInterval=t}else o=n.velocity,i=n.velocityX,s=n.velocityY,a=n.direction;t.velocity=o,t.velocityX=i,t.velocityY=s,t.direction=a}(n,t),t}var qi=class{constructor(e){this.evEl="",this.evWin="",this.evTarget="",this.domHandler=e=>{this.manager.options.enable&&this.handler(e)},this.manager=e,this.element=e.element,this.target=e.options.inputTarget||e.element}callback(e,t){!function(e,t,n){const r=n.pointers.length,o=n.changedPointers.length,i=t&xi.Start&&r-o===0,s=t&(xi.End|xi.Cancel)&&r-o===0;n.isFirst=Boolean(i),n.isFinal=Boolean(s),i&&(e.session={}),n.eventType=t;const a=Xi(e,n);e.emit("hammer.input",a),e.recognize(a),e.session.prevInput=a}(this.manager,e,t)}init(){$i(this.element,this.evEl,this.domHandler),$i(this.target,this.evTarget,this.domHandler),$i(Ni(this.element),this.evWin,this.domHandler)}destroy(){ki(this.element,this.evEl,this.domHandler),ki(this.target,this.evTarget,this.domHandler),ki(Ni(this.element),this.evWin,this.domHandler)}},Hi={pointerdown:xi.Start,pointermove:xi.Move,pointerup:xi.End,pointercancel:xi.Cancel,pointerout:xi.Cancel},Zi=class extends qi{constructor(e){super(e),this.evEl="pointerdown",this.evWin="pointermove pointerup pointercancel",this.store=this.manager.session.pointerEvents=[],this.init()}handler(e){const{store:t}=this;let n=!1;const r=Hi[e.type],o=e.pointerType,i="touch"===o;let s=t.findIndex(t=>t.pointerId===e.pointerId);r&xi.Start&&(e.buttons||i)?s<0&&(t.push(e),s=t.length-1):r&(xi.End|xi.Cancel)&&(n=!0),s<0||(t[s]=e,this.callback(r,{pointers:t,changedPointers:[e],eventType:r,pointerType:o,srcEvent:e}),n&&t.splice(s,1))}},Ki=["","webkit","Moz","MS","ms","o"];function Ji(e,t){const n=t[0].toUpperCase()+t.slice(1);for(const r of Ki){const o=r?r+n:t;if(o in e)return o}}var Qi={touchAction:"compute",enable:!0,inputTarget:null,cssProps:{userSelect:"none",userDrag:"none",touchCallout:"none",tapHighlightColor:"rgba(0,0,0,0)"}},es=class{constructor(e,t){this.options={...Qi,...t,cssProps:{...Qi.cssProps,...t.cssProps},inputTarget:t.inputTarget||e},this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=new Zi(this),this.touchAction=new Ci(this,this.options.touchAction),this.toggleCssProps(!0)}set(e){return Object.assign(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this}stop(e){this.session.stopped=e?2:1}recognize(e){const{session:t}=this;if(t.stopped)return;let n;this.session.prevented&&e.srcEvent.preventDefault();const{recognizers:r}=this;let{curRecognizer:o}=t;(!o||o&&o.state&Oi.Recognized)&&(o=t.curRecognizer=null);let i=0;for(;i<r.length;)n=r[i],2===t.stopped||o&&n!==o&&!n.canRecognizeWith(o)?n.reset():n.recognize(e),!o&&n.state&(Oi.Began|Oi.Changed|Oi.Ended)&&(o=t.curRecognizer=n),i++}get(e){const{recognizers:t}=this;for(let n=0;n<t.length;n++)if(t[n].options.event===e)return t[n];return null}add(e){if(Array.isArray(e)){for(const t of e)this.add(t);return this}const t=this.get(e.options.event);return t&&this.remove(t),this.recognizers.push(e),e.manager=this,this.touchAction.update(),e}remove(e){if(Array.isArray(e)){for(const t of e)this.remove(t);return this}const t="string"==typeof e?this.get(e):e;if(t){const{recognizers:e}=this,n=e.indexOf(t);-1!==n&&(e.splice(n,1),this.touchAction.update())}return this}on(e,t){if(!e||!t)return;const{handlers:n}=this;for(const r of Ri(e))n[r]=n[r]||[],n[r].push(t)}off(e,t){if(!e)return;const{handlers:n}=this;for(const r of Ri(e))t?n[r]&&n[r].splice(n[r].indexOf(t),1):delete n[r]}emit(e,t){const n=this.handlers[e]&&this.handlers[e].slice();if(!n||!n.length)return;const r=t;r.type=e,r.preventDefault=function(){t.srcEvent.preventDefault()};let o=0;for(;o<n.length;)n[o](r),o++}destroy(){this.toggleCssProps(!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}toggleCssProps(e){const{element:t}=this;if(t){for(const[n,r]of Object.entries(this.options.cssProps)){const o=Ji(t.style,n);e?(this.oldCssProps[o]=t.style[o],t.style[o]=r):t.style[o]=this.oldCssProps[o]||""}e||(this.oldCssProps={})}}},ts=1;function ns(e){return e&Oi.Cancelled?"cancel":e&Oi.Ended?"end":e&Oi.Changed?"move":e&Oi.Began?"start":""}var rs=class{constructor(e){this.options=e,this.id=ts++,this.state=Oi.Possible,this.simultaneous={},this.requireFail=[]}set(e){return Object.assign(this.options,e),this.manager.touchAction.update(),this}recognizeWith(e){if(Array.isArray(e)){for(const t of e)this.recognizeWith(t);return this}let t;if("string"==typeof e){if(t=this.manager.get(e),!t)throw new Error(`Cannot find recognizer ${e}`)}else t=e;const{simultaneous:n}=this;return n[t.id]||(n[t.id]=t,t.recognizeWith(this)),this}dropRecognizeWith(e){if(Array.isArray(e)){for(const t of e)this.dropRecognizeWith(t);return this}let t;return t="string"==typeof e?this.manager.get(e):e,t&&delete this.simultaneous[t.id],this}requireFailure(e){if(Array.isArray(e)){for(const t of e)this.requireFailure(t);return this}let t;if("string"==typeof e){if(t=this.manager.get(e),!t)throw new Error(`Cannot find recognizer ${e}`)}else t=e;const{requireFail:n}=this;return-1===n.indexOf(t)&&(n.push(t),t.requireFailure(this)),this}dropRequireFailure(e){if(Array.isArray(e)){for(const t of e)this.dropRequireFailure(t);return this}let t;if(t="string"==typeof e?this.manager.get(e):e,t){const e=this.requireFail.indexOf(t);e>-1&&this.requireFail.splice(e,1)}return this}hasRequireFailures(){return Boolean(this.requireFail.find(e=>e.options.enable))}canRecognizeWith(e){return Boolean(this.simultaneous[e.id])}emit(e){if(!e)return;const{state:t}=this;t<Oi.Ended&&this.manager.emit(this.options.event+ns(t),e),this.manager.emit(this.options.event,e),e.additionalEvent&&this.manager.emit(e.additionalEvent,e),t>=Oi.Ended&&this.manager.emit(this.options.event+ns(t),e)}tryEmit(e){this.canEmit()?this.emit(e):this.state=Oi.Failed}canEmit(){let e=0;for(;e<this.requireFail.length;){if(!(this.requireFail[e].state&(Oi.Failed|Oi.Possible)))return!1;e++}return!0}recognize(e){const t={...e};if(!this.options.enable)return this.reset(),void(this.state=Oi.Failed);this.state&(Oi.Recognized|Oi.Cancelled|Oi.Failed)&&(this.state=Oi.Possible),this.state=this.process(t),this.state&(Oi.Began|Oi.Changed|Oi.Ended|Oi.Cancelled)&&this.tryEmit(t)}getEventNames(){return[this.options.event]}reset(){}};function os(e,t){return(void 0===t.distance||e.distance>=t.distance)&&(void 0===t.distancePerPointer||e.distancePerPointer.length>0&&e.distancePerPointer.every(e=>e>=t.distancePerPointer))&&(void 0===t.movementDeltaTime||e.movementDeltaTime>=t.movementDeltaTime)&&(void 0===t.rotation||(n=e.rotation,Math.abs(((n+180)%360+360)%360-180)>=t.rotation))&&(void 0===t.scale||Math.abs(e.scale-1)>=t.scale);var n}var is=class extends rs{attrTest(e){const t=this.options.pointers;return 0===t||e.pointers.length===t}coherentTest(e){const t=this.options.coherent;return!t?.length||t.some(t=>os(e,t))}process(e){const{state:t}=this,{eventType:n}=e,r=t&(Oi.Began|Oi.Changed),o=this.attrTest(e);return r&&(n&xi.Cancel||!o)?t|Oi.Cancelled:r||o?n&xi.End?t|Oi.Ended:t&Oi.Began?t|Oi.Changed:Oi.Began:Oi.Failed}},ss=["","start","move","end","cancel"],as=class extends rs{constructor(e={}){super({enable:!0,event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10,...e}),this.pTime=null,this.pCenter=null,this._timer=null,this._input=null,this.count=0}getTouchAction(){return[ji]}process(e){const{options:t}=this,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,o=e.deltaTime<t.time;if(this.reset(),e.eventType&xi.Start&&0===this.count)return this.failTimeout();if(r&&o&&n){if(e.eventType!==xi.End)return this.failTimeout();const n=!this.pTime||e.timeStamp-this.pTime<t.interval,r=!this.pCenter||Ui(this.pCenter,e.center)<t.posThreshold;if(this.pTime=e.timeStamp,this.pCenter=e.center,r&&n?this.count+=1:this.count=1,this._input=e,this.count%t.taps===0)return this.hasRequireFailures()?(this._timer=setTimeout(()=>{this.state=Oi.Recognized,this.tryEmit(this._input)},t.interval),Oi.Began):Oi.Recognized}return Oi.Failed}failTimeout(){return this._timer=setTimeout(()=>{this.state=Oi.Failed},this.options.interval),Oi.Failed}reset(){clearTimeout(this._timer)}emit(e){this.state===Oi.Recognized&&(e.tapCount=this.count,this.manager.emit(this.options.event,e))}},cs=class extends is{constructor(){super(...arguments),this.wheelSession=null,this.wheelSessionUnsubscribe=null,this.handleWheelSessionEvent=e=>{"trackpad"===e.device&&this.handleTrackpadEvent(e)}}set(e){const{wheelSession:t,...n}=e;return t&&t!==this.wheelSession&&(this.wheelSessionUnsubscribe?.(),this.wheelSessionUnsubscribe=null,this.wheelSession=t),super.set(n),this.updateWheelSessionSubscription(),this}getTrackpadInput(e,t={}){const{srcEvent:n}=e,r=t.deltaX??e.deltaX,o=t.deltaY??e.deltaY,i=Bi(r,o),s=Math.sqrt(e.deltaX*e.deltaX+e.deltaY*e.deltaY);return{pointers:[n,n],changedPointers:[n,n],pointerType:"trackpad",srcEvent:n,eventType:e.eventType,timeStamp:e.timeStamp,deltaTime:e.deltaTime,center:e.center,deltaX:r,deltaY:o,angle:180*Math.atan2(o,r)/Math.PI,distance:Math.sqrt(r*r+o*o),distancePerPointer:[s,s],movementDeltaTime:e.deltaTime,scale:1,rotation:0,direction:i,offsetDirection:i,velocity:e.velocity,velocityX:e.velocityX,velocityY:e.velocityY,overallVelocity:e.overallVelocity,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,maxPointers:2,target:n.target||this.manager.element,additionalEvent:"",...t}}updateWheelSessionSubscription(){const e=Boolean(this.wheelSession&&this.options.enable&&this.options.trackpad&&2===this.options.pointers);e&&!this.wheelSessionUnsubscribe?this.wheelSessionUnsubscribe=this.wheelSession.on(this.handleWheelSessionEvent):!e&&this.wheelSessionUnsubscribe&&(this.wheelSessionUnsubscribe(),this.wheelSessionUnsubscribe=null)}},ls=["","start","move","end","cancel","up","down","left","right"],us=class extends cs{constructor(e={}){super({enable:!0,pointers:1,event:"pan",threshold:10,direction:Pi.All,trackpad:!1,coherent:[],...e}),this.trackpadGesture=!1,this.pX=null,this.pY=null}getTouchAction(){const{options:{direction:e}}=this,t=[];return e&Pi.Horizontal&&t.push(Ii),e&Pi.Vertical&&t.push(Li),t}getEventNames(){return ls.map(e=>this.options.event+e)}directionTest(e){const{options:t}=this;let n=!0,{distance:r}=e,{direction:o}=e;const i=e.deltaX,s=e.deltaY;return o&t.direction||(t.direction&Pi.Horizontal?(o=0===i?Pi.None:i<0?Pi.Left:Pi.Right,n=i!==this.pX,r=Math.abs(e.deltaX)):(o=0===s?Pi.None:s<0?Pi.Up:Pi.Down,n=s!==this.pY,r=Math.abs(e.deltaY))),e.direction=o,n&&r>t.threshold&&Boolean(o&t.direction)}attrTest(e){const t=Boolean(this.state&Oi.Began),n=!(this.options.coherent?.length&&e.eventType&(xi.End|xi.Cancel));return super.attrTest(e)&&(t||n&&this.coherentTest(e)&&this.directionTest(e))}emit(e){this.pX=e.deltaX,this.pY=e.deltaY;const t=Pi[e.direction].toLowerCase();t&&(e.additionalEvent=this.options.event+t),super.emit(e)}handleTrackpadEvent(e){e.isFirst&&(this.trackpadGesture=!e.srcEvent.ctrlKey,!this.trackpadGesture&&this.state&(Oi.Recognized|Oi.Cancelled|Oi.Failed)&&(this.state=Oi.Possible)),this.trackpadGesture&&(this.recognize(this.getTrackpadInput(e,{deltaX:-e.deltaX,deltaY:-e.deltaY,velocity:-e.velocity,velocityX:-e.velocityX,velocityY:-e.velocityY,overallVelocity:-e.overallVelocity,overallVelocityX:-e.overallVelocityX,overallVelocityY:-e.overallVelocityY})),e.isFinal&&(this.trackpadGesture=!1))}},hs=["","start","move","end","cancel","in","out"],fs=class{constructor(e,t,n){this.element=e,this.callback=t,this.options=n}listen(e,t){t?this.element.addEventListener(e,this.handleEvent,{passive:!1}):this.element.removeEventListener(e,this.handleEvent)}},ds=-1!==("undefined"!=typeof navigator&&navigator.userAgent?navigator.userAgent.toLowerCase():"").indexOf("firefox"),ps=class extends fs{constructor(e,t,n){n.enable=n.enable??!1,super(e,t,n),this.handleEvent=e=>{if(!this.options.enable)return;let t=e.deltaY;globalThis.WheelEvent&&(ds&&e.deltaMode===globalThis.WheelEvent.DOM_DELTA_PIXEL&&(t/=globalThis.devicePixelRatio),e.deltaMode===globalThis.WheelEvent.DOM_DELTA_LINE&&(t*=40)),e.shiftKey&&t&&(t*=.25),this.callback({type:"wheel",center:{x:e.clientX,y:e.clientY},delta:-t,device:this.options.wheelSession?.device??"unknown",srcEvent:e,pointerType:"mouse",target:e.target})},n.enable&&(this.wheelSessionUnsubscribe=this.options.wheelSession?.on(()=>{}),this.listen("wheel",!0))}destroy(){this.listen("wheel",!1),this.wheelSessionUnsubscribe?.(),this.wheelSessionUnsubscribe=void 0}enableEventType(e,t){"wheel"===e&&this.options.enable!==t&&(this.options.enable=t,t&&!this.wheelSessionUnsubscribe&&(this.wheelSessionUnsubscribe=this.options.wheelSession?.on(()=>{})),this.listen("wheel",t),t||(this.wheelSessionUnsubscribe?.(),this.wheelSessionUnsubscribe=void 0))}},ms={classificationDelay:32,endDelay:80},gs=class{constructor(e,t={}){this.subscriptions=new Map,this.session=null,this.classificationTimer=null,this.endTimer=null,this.pressedControlKeys=new Set,this.listeningForControlKeys=!1,this.handleEvent=e=>{if(!this.hasSubscribers)return"unknown";const t=function(e,t){let n=e.deltaX,r=e.deltaY;1===e.deltaMode&&(n*=40,r*=40);return{event:e,timeStamp:e.timeStamp,deltaX:n,deltaY:r,isControlKeyDown:t}}(e,this.pressedControlKeys.size>0);let n=this.session;if(n&&t.timeStamp-n.lastTimeStamp>=this.options.endDelay){if(this.end(),!this.hasSubscribers)return"unknown";n=null}n?(this.scheduleEnd(),this.addSample(n,t)):(n=this.startPendingSession(t),this.scheduleEnd());let{device:r}=n;return"unknown"===r&&(r=bs(n.samples,!1),"unknown"!==r&&this.begin(n,r)),r},this.finishClassification=()=>{if(this.classificationTimer=null,!this.session||"unknown"!==this.session.device)return;const e=this.session,t=bs(e.samples,!0);this.begin(e,"unknown"===t?"mouse":t)},this.end=()=>{if(!this.session)return;if("unknown"===this.session.device){const e=this.session,t=bs(e.samples,!0);this.begin(e,"unknown"===t?"mouse":t)}if(!this.session)return;const e=this.session;this.emit(xi.End,e.lastEvent),this.reset()},this.handleKeyDown=e=>{"Control"===e.key&&this.pressedControlKeys.add(e.code||e.key)},this.handleKeyUp=e=>{"Control"===e.key&&(e.code?this.pressedControlKeys.delete(e.code):this.pressedControlKeys.clear())},this.handleWindowBlur=()=>{this.pressedControlKeys.clear()},this.element=e,this.options={...ms,...t},this.element?.addEventListener("wheel",this.handleEvent,{passive:!0})}get hasSubscribers(){return this.subscriptions.size>0}get device(){return this.session?.device??"unknown"}on(e){const t={listener:e};return this.subscriptions.set(e,t),this.updateControlKeyEventListeners(),()=>{this.subscriptions.get(e)===t&&this.off(e)}}off(e){this.subscriptions.delete(e),this.updateControlKeyEventListeners(),this.hasSubscribers||this.reset()}cancel(){const e=this.session;e&&"unknown"!==e.device&&this.emit(xi.Cancel,e.lastEvent),this.reset()}destroy(){this.cancel(),this.subscriptions.clear(),this.updateControlKeyEventListeners(),this.element?.removeEventListener("wheel",this.handleEvent)}startPendingSession(e){const t={samples:[e],device:"unknown",firstTimeStamp:e.timeStamp,lastTimeStamp:e.timeStamp,totalDeltaX:e.deltaX,totalDeltaY:e.deltaY,velocityX:0,velocityY:0,lastEvent:e.event};return this.session=t,this.classificationTimer=globalThis.setTimeout(this.finishClassification,this.options.classificationDelay),t}addSample(e,t){if(e.samples.push(t),e.lastTimeStamp=t.timeStamp,e.lastEvent=t.event,e.totalDeltaX+=t.deltaX,e.totalDeltaY+=t.deltaY,"unknown"!==e.device){const n=e.samples[e.samples.length-2],r=t.timeStamp-n.timeStamp;e.velocityX=r>0?t.deltaX/r:0,e.velocityY=r>0?t.deltaY/r:0,this.emit(xi.Move,t.event,{velocityX:e.velocityX,velocityY:e.velocityY})}}begin(e,t){e.device=t,this.clearClassificationTimer(),this.emit(xi.Start,e.samples[0].event);const n=e.lastTimeStamp-e.firstTimeStamp;e.velocityX=n>0?e.totalDeltaX/n:0,e.velocityY=n>0?e.totalDeltaY/n:0,this.emit(xi.Move,e.lastEvent,{velocityX:e.velocityX,velocityY:e.velocityY})}scheduleEnd(){this.clearEndTimer(),this.endTimer=globalThis.setTimeout(this.end,this.options.endDelay)}emit(e,t,n){const r=this.session;if(!r||"unknown"===r.device)return;const o=e===xi.Start,i=e===xi.End||e===xi.Cancel,s=o?r.firstTimeStamp:r.lastTimeStamp,a=o?0:Math.max(0,s-r.firstTimeStamp),c=o?0:r.totalDeltaX,l=o?0:r.totalDeltaY,u=a>0?c/a:0,h=a>0?l/a:0,f=o?0:n?.velocityX??r.velocityX,d=o?0:n?.velocityY??r.velocityY,p={eventType:e,device:r.device,srcEvent:t,timeStamp:s,center:{x:t.clientX,y:t.clientY},deltaX:c,deltaY:l,deltaTime:a,velocity:Math.abs(f)>Math.abs(d)?f:d,velocityX:f,velocityY:d,overallVelocity:Math.abs(u)>Math.abs(h)?u:h,overallVelocityX:u,overallVelocityY:h,isFirst:o,isFinal:i};for(const{listener:m}of[...this.subscriptions.values()])m(p)}reset(){this.clearClassificationTimer(),this.clearEndTimer(),this.session=null}clearClassificationTimer(){null!==this.classificationTimer&&(globalThis.clearTimeout(this.classificationTimer),this.classificationTimer=null)}clearEndTimer(){null!==this.endTimer&&(globalThis.clearTimeout(this.endTimer),this.endTimer=null)}updateControlKeyEventListeners(){const e=this.hasSubscribers,t="undefined"!=typeof window?window:globalThis.document?.defaultView;t&&e!==this.listeningForControlKeys&&(this.listeningForControlKeys=e,e?(t.addEventListener("keydown",this.handleKeyDown,!0),t.addEventListener("keyup",this.handleKeyUp,!0),t.addEventListener("blur",this.handleWindowBlur)):(t.removeEventListener("keydown",this.handleKeyDown,!0),t.removeEventListener("keyup",this.handleKeyUp,!0),t.removeEventListener("blur",this.handleWindowBlur),this.pressedControlKeys.clear()))}};function bs(e,t){return e.some(({event:e,isControlKeyDown:t})=>e.ctrlKey&&!t)?"trackpad":e.some(({event:e})=>0!==e.deltaMode)||e.some(ys)||e.every(({event:e})=>{const t=e.wheelDelta;return void 0!==t&&Math.abs(t)%40==0})?"mouse":e.some(({deltaX:e})=>0!==e)||e.length>1&&function(e){for(let t=0;t<e.length;t++){const n=e[t];if(Math.abs(n.deltaX)>40||Math.abs(n.deltaY)>40)return!1;if(t>0&&n.timeStamp-e[t-1].timeStamp>40)return!1}return!0}(e)?"trackpad":t?"mouse":"unknown"}function ys({event:e,deltaX:t,deltaY:n}){if(0!==t||0===n)return!1;const r=Math.abs(n/4.000244140625);if(Number.isInteger(r))return!0;const o=e.wheelDelta;return"number"==typeof o&&0!==o&&o%120==0}var _s=["mousedown","mousemove","mouseup","mouseover","mouseout","mouseenter","mouseleave"],vs=class extends fs{constructor(e,t,n){super(e,t,{enable:!0,...n}),this.handleEvent=e=>{this.handleOverEvent(e),this.handleOutEvent(e),this.handleEnterEvent(e),this.handleLeaveEvent(e),this.handleMoveEvent(e)},this.pressed=!1;const{enable:r=!1}=this.options;this.enableMoveEvent=r,this.enableLeaveEvent=r,this.enableEnterEvent=r,this.enableOutEvent=r,this.enableOverEvent=r,r&&_s.forEach(e=>this.listen(e,!0))}destroy(){_s.forEach(e=>this.listen(e,!1))}enableEventType(e,t){switch(e){case"pointermove":this.enableMoveEvent!==t&&(this.enableMoveEvent=t,this.listen("mousedown",t),this.listen("mousemove",t),this.listen("mouseup",t));break;case"pointerover":this.enableOverEvent!==t&&(this.enableOverEvent=t,this.listen("mouseover",t));break;case"pointerout":this.enableOutEvent!==t&&(this.enableOutEvent=t,this.listen("mouseout",t));break;case"pointerenter":this.enableEnterEvent!==t&&(this.enableEnterEvent=t,this.listen("mouseenter",t));break;case"pointerleave":this.enableLeaveEvent!==t&&(this.enableLeaveEvent=t,this.listen("mouseleave",t))}}handleOverEvent(e){this.enableOverEvent&&"mouseover"===e.type&&this._emit("pointerover",e)}handleOutEvent(e){this.enableOutEvent&&"mouseout"===e.type&&this._emit("pointerout",e)}handleEnterEvent(e){this.enableEnterEvent&&"mouseenter"===e.type&&this._emit("pointerenter",e)}handleLeaveEvent(e){this.enableLeaveEvent&&"mouseleave"===e.type&&this._emit("pointerleave",e)}handleMoveEvent(e){if(this.enableMoveEvent)switch(e.type){case"mousedown":e.button>=0&&(this.pressed=!0);break;case"mousemove":0===e.buttons&&(this.pressed=!1),this.pressed||this._emit("pointermove",e);break;case"mouseup":this.pressed=!1}}_emit(e,t){this.callback({type:e,center:{x:t.clientX,y:t.clientY},srcEvent:t,pointerType:"mouse",target:t.target})}},ws=["keydown","keyup"],Es=class extends fs{constructor(e,t,n){super(e,t,{enable:!0,tabIndex:0,...n}),this.handleEvent=e=>{const t=e.target||e.srcElement;"INPUT"===t.tagName&&"text"===t.type||"TEXTAREA"===t.tagName||(this.enableDownEvent&&"keydown"===e.type&&this.callback({type:"keydown",srcEvent:e,key:e.key,target:e.target}),this.enableUpEvent&&"keyup"===e.type&&this.callback({type:"keyup",srcEvent:e,key:e.key,target:e.target}))};const{enable:r=!1}=this.options;this.enableDownEvent=r,this.enableUpEvent=r,e.tabIndex=this.options.tabIndex,e.style.outline="none",r&&ws.forEach(e=>this.listen(e,!0))}destroy(){ws.forEach(e=>this.listen(e,!1))}enableEventType(e,t){"keydown"===e&&this.enableDownEvent!==t&&(this.enableDownEvent=t,this.listen(e,t)),"keyup"===e&&this.enableUpEvent!==t&&(this.enableUpEvent=t,this.listen(e,t))}},xs=class extends fs{constructor(e,t,n){n.enable=n.enable??!1,super(e,t,n),this.handleEvent=e=>{this.options.enable&&this.callback({type:"contextmenu",center:{x:e.clientX,y:e.clientY},srcEvent:e,pointerType:"mouse",target:e.target})},n.enable&&this.listen("contextmenu",!0)}destroy(){this.listen("contextmenu",!1)}enableEventType(e,t){"contextmenu"===e&&this.options.enable!==t&&(this.options.enable=t,this.listen("contextmenu",t))}},Ps={pointerdown:1,pointermove:2,pointerup:4,mousedown:1,mousemove:2,mouseup:4};function Os(e){const t=Ps[e.srcEvent.type];if(!t)return null;const{buttons:n,button:r}=e.srcEvent;let o=!1,i=!1,s=!1;return 2===t?(o=Boolean(1&n),i=Boolean(4&n),s=Boolean(2&n)):(o=0===r,i=1===r,s=2===r),{leftButton:o,middleButton:i,rightButton:s}}function Ts(e,t){const n=e.center;if(!n)return null;const r=t.getBoundingClientRect(),o=r.width/t.offsetWidth||1,i=r.height/t.offsetHeight||1;return{center:n,offsetCenter:{x:(n.x-r.left-t.clientLeft)/o,y:(n.y-r.top-t.clientTop)/i}}}var Ms={srcElement:"root",priority:0},Ss=class{constructor(e,t){this.handleEvent=e=>{if(this.isEmpty())return;const t=this._normalizeEvent(e);let n=e.srcEvent.target;for(;n&&n!==t.rootElement;){if(this._emit(t,n),t.handled)return;n=n.parentNode}this._emit(t,"root")},this.eventManager=e,this.recognizerName=t,this.handlers=[],this.handlersByElement=new Map,this._active=!1}isEmpty(){return!this._active}add(e,t,n,r=!1,o=!1){const{handlers:i,handlersByElement:s}=this,a={...Ms,...n};let c=s.get(a.srcElement);c||(c=[],s.set(a.srcElement,c));const l={type:e,handler:t,srcElement:a.srcElement,priority:a.priority};r&&(l.once=!0),o&&(l.passive=!0),i.push(l),this._active=this._active||!l.passive;let u=c.length-1;for(;u>=0&&!(c[u].priority>=l.priority);)u--;c.splice(u+1,0,l)}remove(e,t){const{handlers:n,handlersByElement:r}=this;for(let o=n.length-1;o>=0;o--){const i=n[o];if(i.type===e&&i.handler===t){n.splice(o,1);const e=r.get(i.srcElement);e.splice(e.indexOf(i),1),0===e.length&&r.delete(i.srcElement)}}this._active=n.some(e=>!e.passive)}_emit(e,t){const n=this.handlersByElement.get(t);if(n){let t=!1;const r=()=>{e.handled=!0},o=()=>{e.handled=!0,t=!0},i=[];for(let s=0;s<n.length;s++){const{type:a,handler:c,once:l}=n[s];if(c({...e,type:a,stopPropagation:r,stopImmediatePropagation:o}),l&&i.push(n[s]),t)break}for(let e=0;e<i.length;e++){const{type:t,handler:n}=i[e];this.remove(t,n)}}}_normalizeEvent(e){const t=this.eventManager.getElement();return{...e,...Os(e),...Ts(e,t),preventDefault:()=>{e.srcEvent.preventDefault()},stopImmediatePropagation:null,stopPropagation:null,handled:!1,rootElement:t}}};function js(e){if("recognizer"in e)return e;let t;const n=Array.isArray(e)?[...e]:[e];return t="function"==typeof n[0]?new(n.shift())(n.shift()||{}):n.shift(),{recognizer:t,recognizeWith:"string"==typeof n[0]?[n[0]]:n[0],requireFailure:"string"==typeof n[1]?[n[1]]:n[1]}}var As=class{constructor(e=null,t={}){if(this._onBasicInput=e=>{this.manager.emit(e.srcEvent.type,e)},this._onOtherEvent=e=>{this.manager.emit(e.type,e)},this.options={recognizers:[],events:{},touchAction:"compute",tabIndex:0,cssProps:{},...t},this.events=new Map,this.element=e,this.wheelSession=new gs(e),e){this.manager=new es(e,this.options);for(const e of this.options.recognizers){const{recognizer:t,recognizeWith:n,requireFailure:r}=js(e);this.manager.add(t),n&&t.recognizeWith(n),r&&t.requireFailure(r)}this.manager.on("hammer.input",this._onBasicInput),this.wheelInput=new ps(e,this._onOtherEvent,{enable:!1,wheelSession:this.wheelSession}),this.moveInput=new vs(e,this._onOtherEvent,{enable:!1}),this.keyInput=new Es(e,this._onOtherEvent,{enable:!1,tabIndex:t.tabIndex}),this.contextmenuInput=new xs(e,this._onOtherEvent,{enable:!1}),this.on(this.options.events)}}getElement(){return this.element}destroy(){this.element?(this.wheelInput.destroy(),this.wheelSession.destroy(),this.moveInput.destroy(),this.keyInput.destroy(),this.contextmenuInput.destroy(),this.manager.destroy()):this.wheelSession.destroy()}on(e,t,n){this._addEventHandler(e,t,n,!1)}once(e,t,n){this._addEventHandler(e,t,n,!0)}watch(e,t,n){this._addEventHandler(e,t,n,!1,!0)}off(e,t){this._removeEventHandler(e,t)}emit(e){this.manager?.emit(e.type,e)}_toggleRecognizer(e,t){const{manager:n}=this;if(!n)return;const r=n.get(e);r&&(r.set({enable:t,wheelSession:this.wheelSession}),n.touchAction.update()),this.wheelInput?.enableEventType(e,t),this.moveInput?.enableEventType(e,t),this.keyInput?.enableEventType(e,t),this.contextmenuInput?.enableEventType(e,t)}_addEventHandler(e,t,n,r,o){if("string"!=typeof e){n=t;for(const[t,i]of Object.entries(e))this._addEventHandler(t,i,n,r,o);return}const{manager:i,events:s}=this;if(!i)return;let a=s.get(e);if(!a){const t=this._getRecognizerName(e)||e;a=new Ss(this,t),s.set(e,a),i&&i.on(e,a.handleEvent)}a.add(e,t,n,r,o),a.isEmpty()||this._toggleRecognizer(a.recognizerName,!0)}_removeEventHandler(e,t){if("string"!=typeof e){for(const[t,n]of Object.entries(e))this._removeEventHandler(t,n);return}const{events:n}=this,r=n.get(e);if(r&&(r.remove(e,t),r.isEmpty())){const{recognizerName:e}=r;let t=!1;for(const r of n.values())if(r.recognizerName===e&&!r.isEmpty()){t=!0;break}t||this._toggleRecognizer(e,!1)}}_getRecognizerName(e){return this.manager.recognizers.find(t=>t.getEventNames().includes(e))?.options.event}},Ls={DEFAULT:"default",LNGLAT:"lnglat",METER_OFFSETS:"meter-offsets",LNGLAT_OFFSETS:"lnglat-offsets",CARTESIAN:"cartesian"};Object.defineProperty(Ls,"IDENTITY",{get:()=>(Ze.deprecated("COORDINATE_SYSTEM.IDENTITY","COORDINATE_SYSTEM.CARTESIAN")(),Ls.CARTESIAN)});var Is={WEB_MERCATOR:1,GLOBE:2,WEB_MERCATOR_AUTO_OFFSET:4,IDENTITY:0},Cs={common:0,meters:1,pixels:2},Rs={click:"onClick",dblclick:"onClick",panstart:"onDragStart",panmove:"onDrag",panend:"onDragEnd"},$s={multipan:[us,{threshold:10,pointers:2,trackpad:!0}],pinch:[class extends cs{constructor(e={}){super({enable:!0,event:"pinch",threshold:0,pointers:2,trackpad:!1,coherent:[],...e}),this.trackpadGesture=!1}getTouchAction(){return[Ai]}getEventNames(){return hs.map(e=>this.options.event+e)}attrTest(e){const t=Boolean(this.options.coherent?.length),n=Boolean(this.state&Oi.Began),r=!(t&&e.eventType&(xi.End|xi.Cancel));return super.attrTest(e)&&(n||r&&(t?this.coherentTest(e):Math.abs(e.scale-1)>this.options.threshold))}emit(e){if(1!==e.scale){const t=e.scale<1?"in":"out";e.additionalEvent=this.options.event+t}super.emit(e)}handleTrackpadEvent(e){e.isFirst&&(this.trackpadGesture=e.srcEvent.ctrlKey,!this.trackpadGesture&&this.state&(Oi.Recognized|Oi.Cancelled|Oi.Failed)&&(this.state=Oi.Possible)),this.trackpadGesture&&(this.recognize(this.getTrackpadInput(e,{deltaX:0,deltaY:0,velocity:0,velocityX:0,velocityY:0,overallVelocity:0,overallVelocityX:0,overallVelocityY:0,scale:Math.exp(-e.deltaY/100)})),e.isFinal&&(this.trackpadGesture=!1))}},{trackpad:!0},null,["multipan"]],pan:[us,{threshold:1},["pinch"],["multipan"]],dblclick:[as,{event:"dblclick",taps:2,enable:!1}],dblclickdrag:[class extends rs{constructor(e={}){super({enable:!0,event:"doubleclickdrag",pointers:1,interval:500,time:350,threshold:28,dragThreshold:1,pixelsPerScale:120,...e}),this._tapStart=null,this._lastTap=null,this._drag=null,this._emittedStart=!1}getTouchAction(){return[ji]}getEventNames(){return ss.map(e=>this.options.event+e)}process(e){const{options:t}=this;return e.pointers.length!==t.pointers?(this.reset(),Oi.Failed):e.eventType&xi.Start?this._handleStart(e):e.eventType&xi.Move?this._handleMove(e):e.eventType&xi.Cancel?this._handleEnd(e,!0):e.eventType&xi.End?this._handleEnd(e,!1):Oi.Failed}reset(){this._tapStart=null,this._lastTap=null,this._drag=null,this._emittedStart=!1}emit(e){if(e){if(this.state===Oi.Began){if(!this._drag?.active||this._emittedStart)return;return this._emittedStart=!0,this.manager.emit(`${this.options.event}start`,e),void this.manager.emit(this.options.event,e)}if(this.state===Oi.Changed){if(!this._emittedStart)return;return this.manager.emit(`${this.options.event}move`,e),void this.manager.emit(this.options.event,e)}if(this.state===Oi.Ended){if(!this._emittedStart)return;return this.manager.emit(this.options.event,e),this.manager.emit(`${this.options.event}end`,e),void(this._emittedStart=!1)}if(this.state===Oi.Cancelled){if(!this._emittedStart)return;this.manager.emit(this.options.event,e),this.manager.emit(`${this.options.event}cancel`,e),this._emittedStart=!1}}}_handleStart(e){const t=this._getPointerId(e);return this._lastTap&&this._isTapMatch(e,this._lastTap)?(this._tapStart=null,this._lastTap=null,this._drag={startCenter:e.center,pointerId:t,active:!1},this._emittedStart=!1,Oi.Began):(this._tapStart={center:e.center,timeStamp:e.timeStamp,pointerId:t},this._lastTap=null,this._drag=null,this._emittedStart=!1,Oi.Failed)}_handleMove(e){if(!this._drag||!this._isSamePointer(e,this._drag.pointerId))return Oi.Failed;const t=this._drag.startCenter.y-e.center.y;return!this._drag.active&&Math.abs(t)<this.options.dragThreshold?Oi.Began:(this._drag.active=!0,e.scale=Math.pow(2,t/this.options.pixelsPerScale),this._emittedStart?Oi.Changed:Oi.Began)}_handleEnd(e,t){if(this._drag&&this._isSamePointer(e,this._drag.pointerId)){const{active:n,startCenter:r}=this._drag;if(this._drag=null,this._tapStart=null,this._lastTap=null,!n)return this._emittedStart=!1,Oi.Failed;const o=r.y-e.center.y;return e.scale=Math.pow(2,o/this.options.pixelsPerScale),t?Oi.Cancelled:Oi.Ended}return this._tapStart&&this._isSamePointer(e,this._tapStart.pointerId)?(this._isValidTap(e)?this._lastTap={center:e.center,timeStamp:e.timeStamp,pointerId:this._tapStart.pointerId}:this._lastTap=null,this._tapStart=null,Oi.Failed):(t&&this.reset(),Oi.Failed)}_isTapMatch(e,t){return e.timeStamp-t.timeStamp<=this.options.interval&&Ui(e.center,t.center)<=this.options.threshold}_isValidTap(e){return e.deltaTime<=this.options.time&&e.distance<=this.options.threshold}_getPointerId(e){return"pointerId"in e.srcEvent?e.srcEvent.pointerId:null}_isSamePointer(e,t){return null===t||this._getPointerId(e)===t}},{event:"dblclickdrag",enable:!1},["dblclick"],null],click:[as,{event:"click"},["dblclickdrag"],["dblclick","dblclickdrag"]]};function ks(e,t){if(e===t)return!0;if(Array.isArray(e)){const n=e.length;if(!t||t.length!==n)return!1;for(let r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}return!1}function Ns(e){let t,n={};return r=>{for(const o in r)if(!ks(r[o],n[o])){t=e(r),n=r;break}return t}}var Ds=[0,0,0,0],zs=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0],Us=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],Ws=[0,0,0],Fs=[0,0,0],Bs={default:-1,cartesian:0,lnglat:1,"meter-offsets":2,"lnglat-offsets":3};function Gs(e){const t=Bs[e];if(void 0===t)throw new Error(`Invalid coordinateSystem: ${e}`);return t}var Vs=Ns(function({viewport:e,devicePixelRatio:t,coordinateSystem:n,coordinateOrigin:r}){const{projectionCenter:o,viewProjectionMatrix:i,originCommon:s,cameraPosCommon:a,shaderCoordinateOrigin:c,geospatialOrigin:l}=function(e,t,n){const{viewMatrixUncentered:r,projectionMatrix:o}=e;let{viewMatrix:i,viewProjectionMatrix:s}=e,a=Ds,c=Ds,l=e.cameraPosition;const{geospatialOrigin:u,shaderCoordinateOrigin:h,offsetMode:f}=Ys(e,t,n);f&&(c=e.projectPosition(u||h),l=[l[0]-c[0],l[1]-c[1],l[2]-c[2]],c[3]=1,a=hi([],c,s),i=r||i,s=Zo([],o,i),s=Zo([],s,zs));return{viewMatrix:i,viewProjectionMatrix:s,projectionCenter:a,originCommon:c,cameraPosCommon:l,shaderCoordinateOrigin:h,geospatialOrigin:u}}(e,n,r),u=e.getDistanceScales(),h=[e.width*t,e.height*t],f=hi([],[0,0,-e.focalDistance,1],e.projectionMatrix)[3]||1,d={coordinateSystem:Gs(n),projectionMode:e.projectionMode,coordinateOrigin:c,commonOrigin:s.slice(0,3),center:o,pseudoMeters:Boolean(e._pseudoMeters),viewportSize:h,devicePixelRatio:t,focalDistance:f,commonUnitsPerMeter:u.unitsPerMeter,commonUnitsPerWorldUnit:u.unitsPerMeter,commonUnitsPerWorldUnit2:Ws,scale:e.scale,wrapLongitude:!1,viewProjectionMatrix:i,modelMatrix:Us,cameraPosition:a};if(l){const t=e.getDistanceScales(l);switch(n){case"meter-offsets":d.commonUnitsPerWorldUnit=t.unitsPerMeter,d.commonUnitsPerWorldUnit2=t.unitsPerMeter2;break;case"lnglat":case"lnglat-offsets":e._pseudoMeters||(d.commonUnitsPerMeter=t.unitsPerMeter),d.commonUnitsPerWorldUnit=t.unitsPerDegree,d.commonUnitsPerWorldUnit2=t.unitsPerDegree2;break;case"cartesian":d.commonUnitsPerWorldUnit=[1,1,t.unitsPerMeter[2]],d.commonUnitsPerWorldUnit2=[0,0,t.unitsPerMeter2[2]]}}if(e.projectionMode===Is.GLOBE&&"meter-offsets"===n){const e=6370972,t=256,n=r[0]*Math.PI/180,o=r[1]*Math.PI/180,i=Math.cos(o),s=((r[2]||0)/e+1)*t;d.commonOrigin=[Math.sin(n)*i*s,-Math.cos(n)*i*s,Math.sin(o)*s]}return d});function Ys(e,t,n=Fs){n.length<3&&(n=[n[0],n[1],0]);let r,o=n,i=!0;switch(r="lnglat-offsets"===t||"meter-offsets"===t?n:e.isGeospatial?[Math.fround(e.longitude),Math.fround(e.latitude),0]:null,e.projectionMode){case Is.WEB_MERCATOR:"lnglat"===t?(r=[0,0,0],i=!1):"cartesian"===t&&(i=!1,r=e.unprojectPosition([Math.fround(e.center[0]),Math.fround(e.center[1]),0]));break;case Is.WEB_MERCATOR_AUTO_OFFSET:"lnglat"===t?o=r:"cartesian"===t&&(o=[Math.fround(e.center[0]),Math.fround(e.center[1]),0],r=e.unprojectPosition(o),o[0]-=n[0],o[1]-=n[1],o[2]-=n[2]);break;case Is.IDENTITY:o=e.position.map(Math.fround),o[2]=o[2]||0;break;case Is.GLOBE:i=!1,r=null;break;default:i=!1}return{geospatialOrigin:r,shaderCoordinateOrigin:o,offsetMode:i}}var Xs=`${`${["default","lnglat","meter-offsets","lnglat-offsets","cartesian"].map(e=>`const COORDINATE_SYSTEM_${e.toUpperCase().replaceAll("-","_")}: i32 = ${Gs(e)};`).join("")}\n${Object.keys(Is).map(e=>`const PROJECTION_MODE_${e}: i32 = ${Is[e]};`).join("")}\n${Object.keys(Cs).map(e=>`const UNIT_${e.toUpperCase()}: i32 = ${Cs[e]};`).join("")}\n\nconst TILE_SIZE: f32 = 512.0;\nconst PI: f32 = 3.1415926536;\nconst WORLD_SCALE: f32 = TILE_SIZE / (PI * 2.0);\nconst ZERO_64_LOW: vec3<f32> = vec3<f32>(0.0, 0.0, 0.0);\nconst EARTH_RADIUS: f32 = 6370972.0; // meters\nconst GLOBE_RADIUS: f32 = 256.0;\n\n// -----------------------------------------------------------------------------\n// Uniform block (converted from GLSL uniform block)\n// -----------------------------------------------------------------------------\nstruct ProjectUniforms {\n wrapLongitude: i32,\n coordinateSystem: i32,\n commonUnitsPerMeter: vec3<f32>,\n projectionMode: i32,\n scale: f32,\n commonUnitsPerWorldUnit: vec3<f32>,\n commonUnitsPerWorldUnit2: vec3<f32>,\n center: vec4<f32>,\n modelMatrix: mat4x4<f32>,\n viewProjectionMatrix: mat4x4<f32>,\n viewportSize: vec2<f32>,\n devicePixelRatio: f32,\n focalDistance: f32,\n cameraPosition: vec3<f32>,\n coordinateOrigin: vec3<f32>,\n commonOrigin: vec3<f32>,\n pseudoMeters: i32,\n};\n\n@group(0) @binding(auto)\nvar<uniform> project: ProjectUniforms;\n\n// -----------------------------------------------------------------------------\n// Geometry data shared across the project helpers.\n// The active layer shader is responsible for populating this private module\n// state before calling the project functions below.\n// -----------------------------------------------------------------------------\n\n// Structure to carry additional geometry data used by deck.gl filters.\nstruct Geometry {\n worldPosition: vec3<f32>,\n worldPositionAlt: vec3<f32>,\n position: vec4<f32>,\n normal: vec3<f32>,\n uv: vec2<f32>,\n pickingColor: vec3<f32>,\n};\n\nvar<private> geometry: Geometry;\n`}\n\n// -----------------------------------------------------------------------------\n// Functions\n// -----------------------------------------------------------------------------\n\n// Returns an adjustment factor for commonUnitsPerMeter\nfn _project_size_at_latitude(lat: f32) -> f32 {\n let y = clamp(lat, -89.9, 89.9);\n return 1.0 / cos(radians(y));\n}\n\n// Overloaded version: scales a value in meters at a given latitude.\nfn _project_size_at_latitude_m(meters: f32, lat: f32) -> f32 {\n return meters * project.commonUnitsPerMeter.z * _project_size_at_latitude(lat);\n}\n\n// Computes a non-linear scale factor based on geometry.\n// (Note: This function relies on "geometry" being provided.)\nfn project_size() -> f32 {\n if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR &&\n project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT &&\n project.pseudoMeters == 0) {\n if (geometry.position.w == 0.0) {\n return _project_size_at_latitude(geometry.worldPosition.y);\n }\n let y: f32 = geometry.position.y / TILE_SIZE * 2.0 - 1.0;\n let y2 = y * y;\n let y4 = y2 * y2;\n let y6 = y4 * y2;\n return 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;\n }\n return 1.0;\n}\n\n// Overloads to scale offsets (meters to world units)\nfn project_size_float(meters: f32) -> f32 {\n return meters * project.commonUnitsPerMeter.z * project_size();\n}\n\nfn project_size_vec2(meters: vec2<f32>) -> vec2<f32> {\n return meters * project.commonUnitsPerMeter.xy * project_size();\n}\n\nfn project_size_vec3(meters: vec3<f32>) -> vec3<f32> {\n return meters * project.commonUnitsPerMeter * project_size();\n}\n\nfn project_size_vec4(meters: vec4<f32>) -> vec4<f32> {\n return vec4<f32>(meters.xyz * project.commonUnitsPerMeter, meters.w);\n}\n\n// Returns a rotation matrix aligning the z‑axis with the given up vector.\nfn project_get_orientation_matrix(up: vec3<f32>) -> mat3x3<f32> {\n let uz = normalize(up);\n let ux = select(\n vec3<f32>(1.0, 0.0, 0.0),\n normalize(vec3<f32>(uz.y, -uz.x, 0.0)),\n abs(uz.z) == 1.0\n );\n let uy = cross(uz, ux);\n return mat3x3<f32>(ux, uy, uz);\n}\n\n// Since WGSL does not support "out" parameters, we return a struct.\nstruct RotationResult {\n needsRotation: bool,\n transform: mat3x3<f32>,\n};\n\nfn project_needs_rotation(commonPosition: vec3<f32>) -> RotationResult {\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n return RotationResult(true, project_get_orientation_matrix(commonPosition));\n } else {\n return RotationResult(false, mat3x3<f32>()); // identity alternative if needed\n };\n}\n\n// Projects a normal vector from the current coordinate system to world space.\nfn project_normal(vector: vec3<f32>) -> vec3<f32> {\n let normal_modelspace = project.modelMatrix * vec4<f32>(vector, 0.0);\n var n = normalize(normal_modelspace.xyz * project.commonUnitsPerMeter);\n let rotResult = project_needs_rotation(geometry.position.xyz);\n if (rotResult.needsRotation) {\n n = rotResult.transform * n;\n }\n return n;\n}\n\n// Applies a scale offset based on y-offset (dy)\nfn project_offset_(offset: vec4<f32>) -> vec4<f32> {\n let dy: f32 = offset.y;\n let commonUnitsPerWorldUnit = project.commonUnitsPerWorldUnit + project.commonUnitsPerWorldUnit2 * dy;\n return vec4<f32>(offset.xyz * commonUnitsPerWorldUnit, offset.w);\n}\n\n// Projects lng/lat coordinates to a unit tile [0,1]\nfn project_mercator_(lnglat: vec2<f32>) -> vec2<f32> {\n var x = lnglat.x;\n if (project.wrapLongitude != 0) {\n x = ((x + 180.0) % 360.0) - 180.0;\n }\n let y = clamp(lnglat.y, -89.9, 89.9);\n return vec2<f32>(\n radians(x) + PI,\n PI + log(tan_fp32(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\n// Projects lng/lat/z coordinates for a globe projection.\nfn project_globe_(lnglatz: vec3<f32>) -> vec3<f32> {\n let lambda = radians(lnglatz.x);\n let phi = radians(lnglatz.y);\n let cosPhi = cos(phi);\n let D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;\n return vec3<f32>(\n sin(lambda) * cosPhi,\n -cos(lambda) * cosPhi,\n sin(phi)\n ) * D;\n}\n\n// Mercator y of project_mercator_'s latitude clamp: log(tan(PI / 4 + radians(89.9) / 2))\nconst MAX_MERCATOR_Y: f32 = 7.0439589847;\n\n// Inverse of project_globe_ followed by project_mercator_, without forming lat/lng:\n// Mercator y = atanh(sin(lat)) = log((D + |z|) / |xy|), which stays accurate near the poles\nfn project_globe_to_mercator_(spherePos: vec3<f32>) -> vec2<f32> {\n let D = length(spherePos);\n let h = max(length(spherePos.xy), 1e-20);\n let y = sign(spherePos.z) * min(log((D + abs(spherePos.z)) / h), MAX_MERCATOR_Y);\n let x = atan2(spherePos.x, -spherePos.y);\n return (vec2<f32>(x, y) + PI) * WORLD_SCALE;\n}\n\n// Flat common space (Mercator or cartesian) of a common position; identity except under GLOBE.\n// WGSL has no function overloading: pass position.xyz for a vec4. See project.glsl.ts.\nfn project_common_position_to_flat(commonPosition: vec3<f32>) -> vec2<f32> {\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n return project_globe_to_mercator_(commonPosition);\n }\n return commonPosition.xy;\n}\n\n// World copy of a flat x nearest to referenceX\nfn project_wrap_flat_x_(x: f32, referenceX: f32) -> f32 {\n return x - TILE_SIZE * floor((x - referenceX) / TILE_SIZE + 0.5);\n}\n\n// Flat position in the world copy nearest to referenceX (e.g. a bounds centre); geospatial only\nfn project_common_position_to_flat_wrapped(commonPosition: vec3<f32>, referenceX: f32) -> vec2<f32> {\n var flatPosition = project_common_position_to_flat(commonPosition);\n if (project.projectionMode != PROJECTION_MODE_IDENTITY) {\n flatPosition.x = project_wrap_flat_x_(flatPosition.x, referenceX);\n }\n return flatPosition;\n}\n\n// Flat position continuous across the antimeridian under GLOBE (seam moved opposite referenceX,\n// e.g. the camera); identity for flat modes. For periodic patterns.\nfn project_common_position_to_flat_continuous(commonPosition: vec3<f32>, referenceX: f32) -> vec2<f32> {\n var flatPosition = project_common_position_to_flat(commonPosition);\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n flatPosition.x = project_wrap_flat_x_(flatPosition.x, referenceX);\n }\n return flatPosition;\n}\n\n// Projects positions (with an optional 64-bit low part) from the input\n// coordinate system to the common space.\nfn project_position_vec4_f64(position: vec4<f32>, position64Low: vec3<f32>) -> vec4<f32> {\n var position_world = project.modelMatrix * position;\n\n // Work around for a Mac+NVIDIA bug:\n if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR) {\n if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4<f32>(\n project_mercator_(position_world.xy),\n _project_size_at_latitude_m(position_world.z, position_world.y),\n position_world.w\n );\n }\n if (project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {\n position_world = vec4f(position_world.xyz + project.coordinateOrigin, position_world.w);\n }\n }\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4<f32>(\n project_globe_(position_world.xyz),\n position_world.w\n );\n }\n if (project.coordinateSystem == COORDINATE_SYSTEM_METER_OFFSETS) {\n let enuMatrix = project_get_orientation_matrix(project.commonOrigin);\n let metersToCommon = GLOBE_RADIUS / EARTH_RADIUS;\n let offsetCommon = (enuMatrix * vec3<f32>(-position_world.x, -position_world.y, position_world.z)) * metersToCommon;\n return vec4<f32>(project.commonOrigin + offsetCommon, position_world.w);\n }\n }\n if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\n if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n if (abs(position_world.y - project.coordinateOrigin.y) > 0.25) {\n return vec4<f32>(\n project_mercator_(position_world.xy) - project.commonOrigin.xy,\n project_size_float(position_world.z),\n position_world.w\n );\n }\n }\n }\n if (project.projectionMode == PROJECTION_MODE_IDENTITY ||\n (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&\n (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {\n position_world = vec4f(position_world.xyz - project.coordinateOrigin, position_world.w);\n }\n\n return project_offset_(position_world) +\n project_offset_(project.modelMatrix * vec4<f32>(position64Low, 0.0));\n}\n\n// Overloaded versions for different input types.\nfn project_position_vec4_f32(position: vec4<f32>) -> vec4<f32> {\n return project_position_vec4_f64(position, ZERO_64_LOW);\n}\n\nfn project_position_vec3_f64(position: vec3<f32>, position64Low: vec3<f32>) -> vec3<f32> {\n let projected_position = project_position_vec4_f64(vec4<f32>(position, 1.0), position64Low);\n return projected_position.xyz;\n}\n\nfn project_position_vec3_f32(position: vec3<f32>) -> vec3<f32> {\n let projected_position = project_position_vec4_f64(vec4<f32>(position, 1.0), ZERO_64_LOW);\n return projected_position.xyz;\n}\n\nfn project_position_vec2_f32(position: vec2<f32>) -> vec2<f32> {\n let projected_position = project_position_vec4_f64(vec4<f32>(position, 0.0, 1.0), ZERO_64_LOW);\n return projected_position.xy;\n}\n\n// Transforms a common space position to clip space.\nfn project_common_position_to_clipspace_with_projection(position: vec4<f32>, viewProjectionMatrix: mat4x4<f32>, center: vec4<f32>) -> vec4<f32> {\n var clipPosition = viewProjectionMatrix * position + center;\n // deck.gl projection matrices use WebGL's [-w, w] depth range; WebGPU clips z to [0, w].\n clipPosition.z = (clipPosition.z + clipPosition.w) * 0.5;\n return clipPosition;\n}\n\n// Uses the project viewProjectionMatrix and center.\nfn project_common_position_to_clipspace(position: vec4<f32>) -> vec4<f32> {\n return project_common_position_to_clipspace_with_projection(position, project.viewProjectionMatrix, project.center);\n}\n\n// Returns a clip space offset corresponding to a given number of screen pixels.\nfn project_pixel_size_to_clipspace(pixels: vec2<f32>) -> vec2<f32> {\n let offset = pixels / project.viewportSize * project.devicePixelRatio * 2.0;\n return offset * project.focalDistance;\n}\n\nfn project_meter_size_to_pixel(meters: f32) -> f32 {\n return project_size_float(meters) * project.scale;\n}\n\nfn project_unit_size_to_pixel(size: f32, unit: i32) -> f32 {\n if (unit == UNIT_METERS) {\n return project_meter_size_to_pixel(size);\n } else if (unit == UNIT_COMMON) {\n return size * project.scale;\n }\n // UNIT_PIXELS: no scaling applied.\n return size;\n}\n\nfn project_pixel_size_float(pixels: f32) -> f32 {\n return pixels / project.scale;\n}\n\nfn project_pixel_size_vec2(pixels: vec2<f32>) -> vec2<f32> {\n return pixels / project.scale;\n}\n`,qs=["default","lnglat","meter-offsets","lnglat-offsets","cartesian"].map(e=>`const int COORDINATE_SYSTEM_${e.toUpperCase().replaceAll("-","_")} = ${Gs(e)};`).join(""),Hs=Object.keys(Is).map(e=>`const int PROJECTION_MODE_${e} = ${Is[e]};`).join(""),Zs=Object.keys(Cs).map(e=>`const int UNIT_${e.toUpperCase()} = ${Cs[e]};`).join(""),Ks={};var Js={name:"project",dependencies:[Ti,Si],source:Xs,vs:`${qs}\n${Hs}\n${Zs}\nlayout(std140) uniform projectUniforms {\nbool wrapLongitude;\nint coordinateSystem;\nvec3 commonUnitsPerMeter;\nint projectionMode;\nfloat scale;\nvec3 commonUnitsPerWorldUnit;\nvec3 commonUnitsPerWorldUnit2;\nvec4 center;\nmat4 modelMatrix;\nmat4 viewProjectionMatrix;\nvec2 viewportSize;\nfloat devicePixelRatio;\nfloat focalDistance;\nvec3 cameraPosition;\nvec3 coordinateOrigin;\nvec3 commonOrigin;\nbool pseudoMeters;\n} project;\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / (PI * 2.0);\nconst vec3 ZERO_64_LOW = vec3(0.0);\nconst float EARTH_RADIUS = 6370972.0;\nconst float GLOBE_RADIUS = 256.0;\nfloat project_size_at_latitude(float lat) {\nfloat y = clamp(lat, -89.9, 89.9);\nreturn 1.0 / cos(radians(y));\n}\nfloat project_size() {\nif (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR &&\nproject.coordinateSystem == COORDINATE_SYSTEM_LNGLAT &&\nproject.pseudoMeters == false) {\nif (geometry.position.w == 0.0) {\nreturn project_size_at_latitude(geometry.worldPosition.y);\n}\nfloat y = geometry.position.y / TILE_SIZE * 2.0 - 1.0;\nfloat y2 = y * y;\nfloat y4 = y2 * y2;\nfloat y6 = y4 * y2;\nreturn 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;\n}\nreturn 1.0;\n}\nfloat project_size_at_latitude(float meters, float lat) {\nreturn meters * project.commonUnitsPerMeter.z * project_size_at_latitude(lat);\n}\nfloat project_size(float meters) {\nreturn meters * project.commonUnitsPerMeter.z * project_size();\n}\nvec2 project_size(vec2 meters) {\nreturn meters * project.commonUnitsPerMeter.xy * project_size();\n}\nvec3 project_size(vec3 meters) {\nreturn meters * project.commonUnitsPerMeter * project_size();\n}\nvec4 project_size(vec4 meters) {\nreturn vec4(meters.xyz * project.commonUnitsPerMeter, meters.w);\n}\nmat3 project_get_orientation_matrix(vec3 up) {\nvec3 uz = normalize(up);\nvec3 ux = abs(uz.z) == 1.0 ? vec3(1.0, 0.0, 0.0) : normalize(vec3(uz.y, -uz.x, 0));\nvec3 uy = cross(uz, ux);\nreturn mat3(ux, uy, uz);\n}\nbool project_needs_rotation(vec3 commonPosition, out mat3 transform) {\nif (project.projectionMode == PROJECTION_MODE_GLOBE) {\ntransform = project_get_orientation_matrix(commonPosition);\nreturn true;\n}\nreturn false;\n}\nvec3 project_normal(vec3 vector) {\nvec4 normal_modelspace = project.modelMatrix * vec4(vector, 0.0);\nvec3 n = normalize(normal_modelspace.xyz * project.commonUnitsPerMeter);\nmat3 rotation;\nif (project_needs_rotation(geometry.position.xyz, rotation)) {\nn = rotation * n;\n}\nreturn n;\n}\nvec4 project_offset_(vec4 offset) {\nfloat dy = offset.y;\nvec3 commonUnitsPerWorldUnit = project.commonUnitsPerWorldUnit + project.commonUnitsPerWorldUnit2 * dy;\nreturn vec4(offset.xyz * commonUnitsPerWorldUnit, offset.w);\n}\nvec2 project_mercator_(vec2 lnglat) {\nfloat x = lnglat.x;\nif (project.wrapLongitude) {\nx = mod(x + 180., 360.0) - 180.;\n}\nfloat y = clamp(lnglat.y, -89.9, 89.9);\nreturn vec2(\nradians(x) + PI,\nPI + log(tan_fp32(PI * 0.25 + radians(y) * 0.5))\n) * WORLD_SCALE;\n}\nvec3 project_globe_(vec3 lnglatz) {\nfloat lambda = radians(lnglatz.x);\nfloat phi = radians(lnglatz.y);\nfloat cosPhi = cos(phi);\nfloat D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;\nreturn vec3(\nsin(lambda) * cosPhi,\n-cos(lambda) * cosPhi,\nsin(phi)\n) * D;\n}\nconst float MAX_MERCATOR_Y = 7.0439589847;\nvec2 project_globe_to_mercator_(vec3 spherePos) {\nfloat D = length(spherePos);\nfloat h = max(length(spherePos.xy), 1e-20);\nfloat y = sign(spherePos.z) * min(log((D + abs(spherePos.z)) / h), MAX_MERCATOR_Y);\nfloat x = atan(spherePos.x, -spherePos.y);\nreturn (vec2(x, y) + PI) * WORLD_SCALE;\n}\nvec2 project_common_position_to_flat(vec3 commonPosition) {\nif (project.projectionMode == PROJECTION_MODE_GLOBE) {\nreturn project_globe_to_mercator_(commonPosition);\n}\nreturn commonPosition.xy;\n}\nvec2 project_common_position_to_flat(vec4 commonPosition) {\nreturn project_common_position_to_flat(commonPosition.xyz);\n}\nfloat project_wrap_flat_x_(float x, float referenceX) {\nreturn x - TILE_SIZE * floor((x - referenceX) / TILE_SIZE + 0.5);\n}\nvec2 project_common_position_to_flat_wrapped(vec3 commonPosition, float referenceX) {\nvec2 flatPosition = project_common_position_to_flat(commonPosition);\nif (project.projectionMode != PROJECTION_MODE_IDENTITY) {\nflatPosition.x = project_wrap_flat_x_(flatPosition.x, referenceX);\n}\nreturn flatPosition;\n}\nvec2 project_common_position_to_flat_wrapped(vec4 commonPosition, float referenceX) {\nreturn project_common_position_to_flat_wrapped(commonPosition.xyz, referenceX);\n}\nvec2 project_common_position_to_flat_continuous(vec3 commonPosition, float referenceX) {\nvec2 flatPosition = project_common_position_to_flat(commonPosition);\nif (project.projectionMode == PROJECTION_MODE_GLOBE) {\nflatPosition.x = project_wrap_flat_x_(flatPosition.x, referenceX);\n}\nreturn flatPosition;\n}\nvec2 project_common_position_to_flat_continuous(vec4 commonPosition, float referenceX) {\nreturn project_common_position_to_flat_continuous(commonPosition.xyz, referenceX);\n}\nvec4 project_position(vec4 position, vec3 position64Low) {\nvec4 position_world = project.modelMatrix * position;\nif (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR) {\nif (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nreturn vec4(\nproject_mercator_(position_world.xy),\nproject_size_at_latitude(position_world.z, position_world.y),\nposition_world.w\n);\n}\nif (project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {\nposition_world.xyz += project.coordinateOrigin;\n}\n}\nif (project.projectionMode == PROJECTION_MODE_GLOBE) {\nif (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nreturn vec4(\nproject_globe_(position_world.xyz),\nposition_world.w\n);\n}\nif (project.coordinateSystem == COORDINATE_SYSTEM_METER_OFFSETS) {\nmat3 enuMatrix = project_get_orientation_matrix(project.commonOrigin);\nfloat metersToCommon = GLOBE_RADIUS / EARTH_RADIUS;\nvec3 offsetCommon = (enuMatrix * vec3(-position_world.xy, position_world.z)) * metersToCommon;\nreturn vec4(project.commonOrigin + offsetCommon, position_world.w);\n}\n}\nif (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\nif (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nif (abs(position_world.y - project.coordinateOrigin.y) > 0.25) {\nreturn vec4(\nproject_mercator_(position_world.xy) - project.commonOrigin.xy,\nproject_size(position_world.z),\nposition_world.w\n);\n}\n}\n}\nif (project.projectionMode == PROJECTION_MODE_IDENTITY ||\n(project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&\n(project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\nproject.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {\nposition_world.xyz -= project.coordinateOrigin;\n}\nreturn project_offset_(position_world) + project_offset_(project.modelMatrix * vec4(position64Low, 0.0));\n}\nvec4 project_position(vec4 position) {\nreturn project_position(position, ZERO_64_LOW);\n}\nvec3 project_position(vec3 position, vec3 position64Low) {\nvec4 projected_position = project_position(vec4(position, 1.0), position64Low);\nreturn projected_position.xyz;\n}\nvec3 project_position(vec3 position) {\nvec4 projected_position = project_position(vec4(position, 1.0), ZERO_64_LOW);\nreturn projected_position.xyz;\n}\nvec2 project_position(vec2 position) {\nvec4 projected_position = project_position(vec4(position, 0.0, 1.0), ZERO_64_LOW);\nreturn projected_position.xy;\n}\nvec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatrix, vec4 center) {\nreturn viewProjectionMatrix * position + center;\n}\nvec4 project_common_position_to_clipspace(vec4 position) {\nreturn project_common_position_to_clipspace(position, project.viewProjectionMatrix, project.center);\n}\nvec2 project_pixel_size_to_clipspace(vec2 pixels) {\nvec2 offset = pixels / project.viewportSize * project.devicePixelRatio * 2.0;\nreturn offset * project.focalDistance;\n}\nfloat project_size_to_pixel(float meters) {\nreturn project_size(meters) * project.scale;\n}\nvec2 project_size_to_pixel(vec2 meters) {\nreturn project_size(meters) * project.scale;\n}\nfloat project_size_to_pixel(float size, int unit) {\nif (unit == UNIT_METERS) return project_size_to_pixel(size);\nif (unit == UNIT_COMMON) return size * project.scale;\nreturn size;\n}\nfloat project_pixel_size(float pixels) {\nreturn pixels / project.scale;\n}\nvec2 project_pixel_size(vec2 pixels) {\nreturn pixels / project.scale;\n}\n`,getUniforms:function(e=Ks){return"viewport"in e?function({viewport:e,devicePixelRatio:t=1,modelMatrix:n=null,coordinateSystem:r="default",coordinateOrigin:o=Fs,autoWrapLongitude:i=!1}){"default"===r&&(r=e.isGeospatial?"lnglat":"cartesian");const s=Vs({viewport:e,devicePixelRatio:t,coordinateSystem:r,coordinateOrigin:o});return s.wrapLongitude=i,s.modelMatrix=n||Us,s}(e):{}},uniformTypes:{wrapLongitude:"f32",coordinateSystem:"i32",commonUnitsPerMeter:"vec3<f32>",projectionMode:"i32",scale:"f32",commonUnitsPerWorldUnit:"vec3<f32>",commonUnitsPerWorldUnit2:"vec3<f32>",center:"vec4<f32>",modelMatrix:"mat4x4<f32>",viewProjectionMatrix:"mat4x4<f32>",viewportSize:"vec2<f32>",devicePixelRatio:"f32",focalDistance:"f32",cameraPosition:"vec3<f32>",coordinateOrigin:"vec3<f32>",commonOrigin:"vec3<f32>",pseudoMeters:"f32"}};function Qs(e,t){const n=hi([],t,e);return ii(n,n,1/n[3]),n}function ea(e,t,n){return e<t?t:e>n?n:e}var ta=Math.log2||function(e){return Math.log(e)*Math.LOG2E};function na(e,t){if(!e)throw new Error(t||"@math.gl/web-mercator: assertion failed.")}var ra=Math.PI,oa=ra/4,ia=ra/180,sa=180/ra,aa=512,ca=4003e4,la=85.051129,ua=1.5;function ha(e){const[t,n]=e;na(Number.isFinite(t)),na(Number.isFinite(n)&&n>=-90&&n<=90,"invalid latitude");const r=n*ia;return[aa*(t*ia+ra)/(2*ra),aa*(ra+Math.log(Math.tan(oa+.5*r)))/(2*ra)]}function fa(e){const[t,n]=e,r=t/aa*(2*ra)-ra,o=2*(Math.atan(Math.exp(n/aa*(2*ra)-ra))-oa);return[r*sa,o*sa]}function da(e){const{latitude:t}=e;na(Number.isFinite(t));const n=Math.cos(t*ia);return function(e){return ta(e)}(ca*n)-9}function pa(e){return 12790407194604047e-21/Math.cos(e*ia)}function ma(e){const{latitude:t,longitude:n,highPrecision:r=!1}=e;na(Number.isFinite(t)&&Number.isFinite(n));const o=aa,i=Math.cos(t*ia),s=o/360,a=s/i,c=12790407194604047e-21/i,l={unitsPerMeter:[c,c,c],metersPerUnit:[1/c,1/c,1/c],unitsPerDegree:[s,a,c],degreesPerUnit:[.703125,1/a,1/c]};if(r){const e=ia*Math.tan(t*ia)/i,n=s*e/2,r=12790407194604047e-21*e,o=r/a*c;l.unitsPerDegree2=[0,n,r],l.unitsPerMeter2=[o,0,o]}return l}function ga(e,t){const[n,r,o]=e,[i,s,a]=t,{unitsPerMeter:c,unitsPerMeter2:l}=ma({longitude:n,latitude:r,highPrecision:!0}),u=ha(e);u[0]+=i*(c[0]+l[0]*s),u[1]+=s*(c[1]+l[1]*s);const h=fa(u),f=(o||0)+(a||0);return Number.isFinite(o)||Number.isFinite(a)?[h[0],h[1],f]:h}function ba(e){return 2*Math.atan(.5/e)*sa}function ya(e){return.5/Math.tan(.5*e*ia)}function _a(e,t){const[n,r,o=0]=e;return na(Number.isFinite(n)&&Number.isFinite(r)&&Number.isFinite(o)),Qs(t,[n,r,o,1])}function va(e,t,n=0){const[r,o,i]=e;if(na(Number.isFinite(r)&&Number.isFinite(o),"invalid pixel coordinate"),Number.isFinite(i))return Qs(t,[r,o,i,1]);const s=Qs(t,[r,o,0,1]),a=Qs(t,[r,o,1,1]),c=s[2],l=a[2];return Eo([],s,a,c===l?0:((n||0)-c)/(l-c))}function wa(e){const{width:t,height:n,bounds:r,minExtent:o=0,maxZoom:i=24,offset:s=[0,0]}=e,[[a,c],[l,u]]=r,h=function(e=0){return"number"==typeof e?{top:e,bottom:e,left:e,right:e}:(na(Number.isFinite(e.top)&&Number.isFinite(e.bottom)&&Number.isFinite(e.left)&&Number.isFinite(e.right)),e)}(e.padding),f=ha([a,ea(u,-85.051129,la)]),d=ha([l,ea(c,-85.051129,la)]),p=[Math.max(Math.abs(d[0]-f[0]),o),Math.max(Math.abs(d[1]-f[1]),o)],m=[t-h.left-h.right-2*Math.abs(s[0]),n-h.top-h.bottom-2*Math.abs(s[1])];na(m[0]>0&&m[1]>0);const g=m[0]/p[0],b=m[1]/p[1],y=(h.right-h.left)/2/g,_=(h.top-h.bottom)/2/b,v=fa([(d[0]+f[0])/2+y,(d[1]+f[1])/2+_]),w=Math.min(i,ta(Math.abs(Math.min(g,b))));return na(Number.isFinite(w)),{longitude:v[0],latitude:v[1],zoom:w}}var Ea=Math.PI/180;function xa(e,t,n){const{pixelUnprojectionMatrix:r}=e,o=Qs(r,[t,0,1,1]),i=Qs(r,[t,e.height,1,1]),s=fa(Eo([],o,i,(n*e.distanceScales.unitsPerMeter[2]-o[2])/(i[2]-o[2])));return s.push(n),s}var Pa=new class{constructor(e={}){this._pool=[],this.opts={overAlloc:2,poolSize:100},this.setOptions(e)}setOptions(e){Object.assign(this.opts,e)}allocate(e,t,{size:n=1,type:r,padding:o=0,copy:i=!1,initialize:s=!1,maxCount:a}){const c=r||e&&e.constructor||Float32Array,l=t*n+o;if(ArrayBuffer.isView(e)){if(l<=e.length)return e;if(l*e.BYTES_PER_ELEMENT<=e.buffer.byteLength)return new c(e.buffer,0,l)}let u=1/0;a&&(u=a*n+o);const h=this._allocate(c,l,s,u);return e&&i?h.set(e):s||h.fill(0,0,4),this._release(e),h}release(e){this._release(e)}_allocate(e,t,n,r){let o=Math.max(Math.ceil(t*this.opts.overAlloc),1);o>r&&(o=r);const i=this._pool,s=e.BYTES_PER_ELEMENT*o,a=i.findIndex(e=>e.byteLength>=s);if(a>=0){const t=new e(i.splice(a,1)[0],0,o);return n&&t.fill(0),t}return new e(o)}_release(e){if(!ArrayBuffer.isView(e))return;const t=this._pool,{buffer:n}=e,{byteLength:r}=n,o=t.findIndex(e=>e.byteLength>=r);o<0?t.push(n):(o>0||t.length<this.opts.poolSize)&&t.splice(o,0,n),t.length>this.opts.poolSize&&t.shift()}};function Oa(e,t){const n=e%t;return n<0?t+n:n}var Ta,Ma=new Xo;function Sa(e,t,n,r){Ma.set(e,t,n);const o=Ma.len();return{distance:r/o,normal:new Xo(-e/o,-t/o,-n/o)}}function ja(e){return e-Math.fround(e)}function Aa(e,t){const{size:n=1,startIndex:r=0}=t,o=void 0!==t.endIndex?t.endIndex:e.length,i=(o-r)/n;Ta=Pa.allocate(Ta,i,{type:Float32Array,size:2*n});let s=r,a=0;for(;s<o;){for(let t=0;t<n;t++){const r=e[s++];Ta[a+t]=r,Ta[a+t+n]=ja(r)}a+=2*n}return Ta.subarray(0,i*n*2)}function La(e){let t=null,n=!1;for(const r of e)r&&(t?(n||(t=[[t[0][0],t[0][1]],[t[1][0],t[1][1]]],n=!0),t[0][0]=Math.min(t[0][0],r[0][0]),t[0][1]=Math.min(t[0][1],r[0][1]),t[1][0]=Math.max(t[1][0],r[1][0]),t[1][1]=Math.max(t[1][1],r[1][1])):t=r);return t}var Ia=Math.PI/180,Ca=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],Ra=[0,0,0],$a={unitsPerMeter:[1,1,1],metersPerUnit:[1,1,1]};var ka=class e{constructor(e={}){this._frustumPlanes={},this.id=e.id||this.constructor.displayName||"viewport",this.x=e.x||0,this.y=e.y||0,this.width=e.width||1,this.height=e.height||1,this.zoom=e.zoom||0,this.padding=e.padding,this.distanceScales=e.distanceScales||$a,this.focalDistance=e.focalDistance||1,this.position=e.position||Ra,this.modelMatrix=e.modelMatrix||null;const{longitude:t,latitude:n}=e;this.isGeospatial=Number.isFinite(n)&&Number.isFinite(t),this._initProps(e),this._initMatrices(e),this.equals=this.equals.bind(this),this.project=this.project.bind(this),this.unproject=this.unproject.bind(this),this.projectPosition=this.projectPosition.bind(this),this.unprojectPosition=this.unprojectPosition.bind(this),this.projectFlat=this.projectFlat.bind(this),this.unprojectFlat=this.unprojectFlat.bind(this)}get subViewports(){return null}get metersPerPixel(){return this.distanceScales.metersPerUnit[2]/this.scale}get projectionMode(){return this.isGeospatial?this.zoom<12?Is.WEB_MERCATOR:Is.WEB_MERCATOR_AUTO_OFFSET:Is.IDENTITY}equals(t){return t instanceof e&&(this===t||t.width===this.width&&t.height===this.height&&t.scale===this.scale&&t.projectionMode===this.projectionMode&&t.resolution===this.resolution&&fo(t.distanceScales.unitsPerMeter,this.distanceScales.unitsPerMeter)&&fo(t.projectionMatrix,this.projectionMatrix)&&fo(t.viewMatrix,this.viewMatrix))}project(e,{topLeft:t=!0}={}){const n=_a(this.projectPosition(e),this.pixelProjectionMatrix),[r,o]=n,i=t?o:this.height-o;return 2===e.length?[r,i]:[r,i,n[2]]}unproject(e,{topLeft:t=!0,targetZ:n}={}){const[r,o,i]=e,s=t?o:this.height-o,a=n&&n*this.distanceScales.unitsPerMeter[2],c=va([r,s,i],this.pixelUnprojectionMatrix,a),[l,u,h]=this.unprojectPosition(c);return Number.isFinite(i)?[l,u,h]:Number.isFinite(n)?[l,u,n]:[l,u]}projectPosition(e){const[t,n]=this.projectFlat(e);return[t,n,(e[2]||0)*this.distanceScales.unitsPerMeter[2]]}unprojectPosition(e){const[t,n]=this.unprojectFlat(e);return[t,n,(e[2]||0)*this.distanceScales.metersPerUnit[2]]}projectFlat(e){if(this.isGeospatial){const t=ha(e);return t[1]=uo(t[1],-318,830),t}return e}unprojectFlat(e){return this.isGeospatial?fa(e):e}getBounds(e={}){const t={targetZ:e.z||0},n=this.unproject([0,0],t),r=this.unproject([this.width,0],t),o=this.unproject([0,this.height],t),i=this.unproject([this.width,this.height],t);return[Math.min(n[0],r[0],o[0],i[0]),Math.min(n[1],r[1],o[1],i[1]),Math.max(n[0],r[0],o[0],i[0]),Math.max(n[1],r[1],o[1],i[1])]}getDistanceScales(e){return e&&this.isGeospatial?ma({longitude:e[0],latitude:e[1],highPrecision:!0}):this.distanceScales}containsPixel({x:e,y:t,width:n=1,height:r=1}){return e<this.x+this.width&&this.x<e+n&&t<this.y+this.height&&this.y<t+r}getFrustumPlanes(){return this._frustumPlanes.near||Object.assign(this._frustumPlanes,{left:Sa((e=this.viewProjectionMatrix)[3]+e[0],e[7]+e[4],e[11]+e[8],e[15]+e[12]),right:Sa(e[3]-e[0],e[7]-e[4],e[11]-e[8],e[15]-e[12]),bottom:Sa(e[3]+e[1],e[7]+e[5],e[11]+e[9],e[15]+e[13]),top:Sa(e[3]-e[1],e[7]-e[5],e[11]-e[9],e[15]-e[13]),near:Sa(e[3]+e[2],e[7]+e[6],e[11]+e[10],e[15]+e[14]),far:Sa(e[3]-e[2],e[7]-e[6],e[11]-e[10],e[15]-e[14])}),this._frustumPlanes;var e}panByPosition(e,t,n){return null}_initProps(e){const t=e.longitude,n=e.latitude;this.isGeospatial&&(Number.isFinite(e.zoom)||(this.zoom=da({latitude:n})+Math.log2(this.focalDistance)),this.distanceScales=e.distanceScales||ma({latitude:n,longitude:t}));const r=Math.pow(2,this.zoom);this.scale=r;const{position:o,modelMatrix:i}=e;let s=Ra;if(o&&(s=i?new wi(i).transformAsVector(o,[]):o),this.isGeospatial){const e=this.projectPosition([t,n,0]);this.center=new Xo(s).scale(this.distanceScales.unitsPerMeter).add(e)}else this.center=this.projectPosition(s)}_initMatrices(e){const{viewMatrix:t=Ca,projectionMatrix:n=null,orthographic:r=!1,fovyRadians:o,fovy:i=75,near:s=.1,far:a=1e3,padding:c=null,focalDistance:l=1}=e;this.viewMatrixUncentered=t,this.viewMatrix=(new wi).multiplyRight(t).translate(new Xo(this.center).negate()),this.projectionMatrix=n||function({width:e,height:t,orthographic:n,fovyRadians:r,focalDistance:o,padding:i,near:s,far:a}){const c=e/t,l=n?(new wi).orthographic({fovy:r,aspect:c,focalDistance:o,near:s,far:a}):(new wi).perspective({fovy:r,aspect:c,near:s,far:a});if(i){const{left:n=0,right:r=0,top:o=0,bottom:s=0}=i,a=uo((n+e-r)/2,0,e)-e/2,c=uo((o+t-s)/2,0,t)-t/2;l[8]-=2*a/e,l[9]+=2*c/t}return l}({width:this.width,height:this.height,orthographic:r,fovyRadians:o||i*Ia,focalDistance:l,padding:c,near:s,far:a});const u=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];var h;Zo(u,u,this.projectionMatrix),Zo(u,u,this.viewMatrix),this.viewProjectionMatrix=u,this.viewMatrixInverse=Ho([],this.viewMatrix)||this.viewMatrix,this.cameraPosition=[(h=this.viewMatrixInverse)[12],h[13],h[14]];const f=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],d=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];Jo(f,f,[this.width/2,-this.height/2,1]),Ko(f,f,[1,-1,0]),Zo(d,f,this.viewProjectionMatrix),this.pixelProjectionMatrix=d,this.pixelUnprojectionMatrix=Ho([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],this.pixelProjectionMatrix),this.pixelUnprojectionMatrix||Ze.warn("Pixel project matrix not invertible")()}};ka.displayName="Viewport";var Na=class e extends ka{constructor(e={}){const{latitude:t=0,longitude:n=0,zoom:r=0,pitch:o=0,bearing:i=0,nearZMultiplier:s=.1,farZMultiplier:a=1.01,nearZ:c,farZ:l,orthographic:u=!1,projectionMatrix:h,repeat:f=!1,worldOffset:d=0,position:p,padding:m,legacyMeterSizes:g=!1}=e;let{width:b,height:y,altitude:_=1.5}=e;const v=Math.pow(2,r);let w;b=b||1,y=y||1;let E=null;if(h)_=h[5]/2,w=ba(_);else{let n;if(e.fovy?(w=e.fovy,_=ya(w)):w=ba(_),m){const{top:e=0,bottom:t=0}=m;n=[0,uo((e+y-t)/2,0,y)-y/2]}E=function(e){const{width:t,height:n,altitude:r,pitch:o=0,offset:i,center:s,scale:a,nearZMultiplier:c=1,farZMultiplier:l=1}=e;let{fovy:u=ba(ua)}=e;void 0!==r&&(u=ba(r));const h=u*ia,f=o*ia,d=ya(u);let p=d;s&&(p+=s[2]*a/Math.cos(f)/n);const m=h*(.5+(i?i[1]:0)/n),g=Math.sin(m)*p/Math.sin(ea(Math.PI/2-f-m,.01,Math.PI-.01)),b=Math.sin(f)*g+p,y=10*p;return{fov:h,aspect:t/n,focalDistance:d,near:c,far:Math.min(b*l,y)}}({width:b,height:y,scale:v,center:p&&[0,0,p[2]*pa(t)],offset:n,pitch:o,fovy:w,nearZMultiplier:s,farZMultiplier:a}),Number.isFinite(c)&&(E.near=c),Number.isFinite(l)&&(E.far=l)}let x=function(e){const{height:t,pitch:n,bearing:r,altitude:o,scale:i,center:s}=e,a=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];Ko(a,a,[0,0,-o]),Qo(a,a,-n*ia),ei(a,a,r*ia);const c=i/t;var l,u;return Jo(a,a,[c,c,c]),s&&Ko(a,a,((l=[])[0]=-(u=s)[0],l[1]=-u[1],l[2]=-u[2],l)),a}({height:y,pitch:o,bearing:i,scale:v,altitude:_});d&&(x=(new wi).translate([512*d,0,0]).multiplyLeft(x)),super({...e,width:b,height:y,viewMatrix:x,longitude:n,latitude:t,zoom:r,...E,fovy:w,focalDistance:_}),this.latitude=t,this.longitude=n,this.zoom=r,this.pitch=o,this.bearing=i,this.altitude=_,this.fovy=w,this.orthographic=u,this._subViewports=f?[]:null,this._pseudoMeters=g,Object.freeze(this)}get subViewports(){if(this._subViewports&&!this._subViewports.length){const t=this.getBounds(),n=Math.floor((t[0]+180)/360),r=Math.ceil((t[2]-180)/360);for(let o=n;o<=r;o++){const t=o?new e({...this,worldOffset:o}):this;this._subViewports.push(t)}}return this._subViewports}equals(t){return t instanceof e&&t._pseudoMeters===this._pseudoMeters&&super.equals(t)}projectPosition(e){if(this._pseudoMeters)return super.projectPosition(e);const[t,n]=this.projectFlat(e);return[t,n,(e[2]||0)*pa(e[1])]}unprojectPosition(e){if(this._pseudoMeters)return super.unprojectPosition(e);const[t,n]=this.unprojectFlat(e);return[t,n,(e[2]||0)/pa(n)]}addMetersToLngLat(e,t){return ga(e,t)}panByPosition(e,t,n){const r=va(t,this.pixelUnprojectionMatrix),o=wo([],this.projectFlat(e),((i=[])[0]=-(s=r)[0],i[1]=-s[1],i));var i,s;const a=wo([],this.center,o),[c,l]=this.unprojectFlat(a);return{longitude:c,latitude:l}}panByPosition3D(e,t){const n=e[2]||0,r=Mo([],e,this.unproject(t,{targetZ:n}));return{longitude:this.longitude+r[0],latitude:this.latitude+r[1]}}getBounds(e={}){const t=function(e,t=0){const{width:n,height:r,unproject:o}=e,i={targetZ:t},s=o([0,r],i),a=o([n,r],i);let c,l;return(e.fovy?.5*e.fovy*Ea:Math.atan(.5/e.altitude))>(90-e.pitch)*Ea-.01?(c=xa(e,0,t),l=xa(e,n,t)):(c=o([0,0],i),l=o([n,0],i)),[s,a,l,c]}(this,e.z||0);return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1]),Math.max(t[0][0],t[1][0],t[2][0],t[3][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1])]}fitBounds(t,n={}){const{width:r,height:o}=this,{longitude:i,latitude:s,zoom:a}=wa({width:r,height:o,bounds:t,...n});return new e({width:r,height:o,longitude:i,latitude:s,zoom:a})}};Na.displayName="WebMercatorViewport";var Da={NO_STATE:"Awaiting state",MATCHED:"Matched. State transferred from previous layer",INITIALIZED:"Initialized",AWAITING_GC:"Discarded. Awaiting garbage collection",AWAITING_FINALIZATION:"No longer matched. Awaiting garbage collection",FINALIZED:"Finalized! Awaiting garbage collection"},za=Symbol.for("component"),Ua=Symbol.for("propTypes"),Wa=Symbol.for("deprecatedProps"),Fa=Symbol.for("asyncPropDefaults"),Ba=Symbol.for("asyncPropOriginal"),Ga=Symbol.for("asyncPropResolved");function Va(e,t=()=>!0){return Array.isArray(e)?Ya(e,t,[]):t(e)?[e]:[]}function Ya(e,t,n){let r=-1;for(;++r<e.length;){const o=e[r];Array.isArray(o)?Ya(o,t,n):t(o)&&n.push(o)}return n}function Xa({target:e,source:t,start:n=0,count:r=1}){const o=t.length,i=r*o;let s=0;for(let a=n;s<o;s++)e[a++]=t[s];for(;s<i;)s<i-s?(e.copyWithin(n+s,n,n+s),s*=2):(e.copyWithin(n+s,n,n+i-s),s=i);return e}function qa(e,t,n){if(e===t)return!0;if(!n||!e||!t)return!1;if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(!qa(e[r],t[r],n-1))return!1;return!0}if(Array.isArray(t))return!1;if("object"==typeof e&&"object"==typeof t){const r=Object.keys(e),o=Object.keys(t);if(r.length!==o.length)return!1;for(const i of r){if(!t.hasOwnProperty(i))return!1;if(!qa(e[i],t[i],n-1))return!1}return!0}return!1}var Ha=class{constructor(e){this._inProgress=!1,this._handle=null,this.time=0,this.settings={duration:0},this._timeline=e}get inProgress(){return this._inProgress}start(e){this.cancel(),this.settings=e,this._inProgress=!0,this.settings.onStart?.(this)}end(){this._inProgress&&(this._timeline.removeChannel(this._handle),this._handle=null,this._inProgress=!1,this.settings.onEnd?.(this))}cancel(){this._inProgress&&(this.settings.onInterrupt?.(this),this._timeline.removeChannel(this._handle),this._handle=null,this._inProgress=!1)}update(){if(!this._inProgress)return!1;if(null===this._handle){const{_timeline:e,settings:t}=this;this._handle=e.addChannel({delay:e.getTime(),duration:t.duration})}return this.time=this._timeline.getTime(this._handle),this._onUpdate(),this.settings.onUpdate?.(this),this._timeline.isFinished(this._handle)&&this.end(),!0}_onUpdate(){}};function Za(e,t){if(!e)throw new Error(t||"deck.gl: assertion failed.")}var Ka=null,Ja=!1;async function Qa(){rc()}function ec(e,t){return rc(),e}async function tc(e){rc()}function nc(e){return Ka?.initialize(e),null}function rc(){Ja||(Ja=!0,e.log.warn("Import @luma.gl/webgl/debug before enabling WebGL debugging.")())}Object.defineProperty(exports,"ARRAY_TYPE",{enumerable:!0,get:function(){return vo}}),Object.defineProperty(exports,"ASYNC_DEFAULTS_SYMBOL",{enumerable:!0,get:function(){return Fa}}),Object.defineProperty(exports,"ASYNC_ORIGINAL_SYMBOL",{enumerable:!0,get:function(){return Ba}}),Object.defineProperty(exports,"ASYNC_RESOLVED_SYMBOL",{enumerable:!0,get:function(){return Ga}}),Object.defineProperty(exports,"COMPONENT_SYMBOL",{enumerable:!0,get:function(){return za}}),Object.defineProperty(exports,"COORDINATE_SYSTEM",{enumerable:!0,get:function(){return Ls}}),Object.defineProperty(exports,"DEPRECATED_PROPS_SYMBOL",{enumerable:!0,get:function(){return Wa}}),Object.defineProperty(exports,"DEVICE_DEFAULT_PROPS",{enumerable:!0,get:function(){return Yt}}),Object.defineProperty(exports,"Device",{enumerable:!0,get:function(){return Mn}}),Object.defineProperty(exports,"DeviceFeatures",{enumerable:!0,get:function(){return On}}),Object.defineProperty(exports,"DeviceLimits",{enumerable:!0,get:function(){return xn}}),Object.defineProperty(exports,"EPSILON",{enumerable:!0,get:function(){return 1e-6}}),Object.defineProperty(exports,"EVENT_HANDLERS",{enumerable:!0,get:function(){return Rs}}),Object.defineProperty(exports,"EventManager",{enumerable:!0,get:function(){return As}}),Object.defineProperty(exports,"GLSLShaderAssembler",{enumerable:!0,get:function(){return eo}}),Object.defineProperty(exports,"LIFECYCLE",{enumerable:!0,get:function(){return Da}}),Object.defineProperty(exports,"MAX_LATITUDE",{enumerable:!0,get:function(){return la}}),Object.defineProperty(exports,"MathArray",{enumerable:!0,get:function(){return mo}}),Object.defineProperty(exports,"Matrix",{enumerable:!0,get:function(){return qo}}),Object.defineProperty(exports,"Matrix4",{enumerable:!0,get:function(){return wi}}),Object.defineProperty(exports,"PROJECTION_MODE",{enumerable:!0,get:function(){return Is}}),Object.defineProperty(exports,"PROP_TYPES_SYMBOL",{enumerable:!0,get:function(){return Ua}}),Object.defineProperty(exports,"RECOGNIZERS",{enumerable:!0,get:function(){return $s}}),Object.defineProperty(exports,"Sampler",{enumerable:!0,get:function(){return Sn}}),Object.defineProperty(exports,"ShaderAssembler",{enumerable:!0,get:function(){return Qr}}),Object.defineProperty(exports,"Stats",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"Texture",{enumerable:!0,get:function(){return An}}),Object.defineProperty(exports,"Transition",{enumerable:!0,get:function(){return Ha}}),Object.defineProperty(exports,"UNIT",{enumerable:!0,get:function(){return Cs}}),Object.defineProperty(exports,"VERSION",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"Vector",{enumerable:!0,get:function(){return _o}}),Object.defineProperty(exports,"Vector3",{enumerable:!0,get:function(){return Xo}}),Object.defineProperty(exports,"Viewport",{enumerable:!0,get:function(){return ka}}),Object.defineProperty(exports,"WGSLShaderAssembler",{enumerable:!0,get:function(){return to}}),Object.defineProperty(exports,"WebMercatorViewport",{enumerable:!0,get:function(){return Na}}),Object.defineProperty(exports,"add",{enumerable:!0,get:function(){return oi}}),Object.defineProperty(exports,"addMetersToLngLat",{enumerable:!0,get:function(){return ga}}),Object.defineProperty(exports,"altitudeToFovy",{enumerable:!0,get:function(){return ba}}),Object.defineProperty(exports,"assert",{enumerable:!0,get:function(){return Za}}),Object.defineProperty(exports,"assert$1",{enumerable:!0,get:function(){return yo}}),Object.defineProperty(exports,"assert$2",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"assert$3",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"checkNumber",{enumerable:!0,get:function(){return go}}),Object.defineProperty(exports,"checkVector",{enumerable:!0,get:function(){return bo}}),Object.defineProperty(exports,"clamp",{enumerable:!0,get:function(){return uo}}),Object.defineProperty(exports,"config",{enumerable:!0,get:function(){return oo}}),Object.defineProperty(exports,"copyToArrayBuffer",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"create",{enumerable:!0,get:function(){return Io}}),Object.defineProperty(exports,"cross",{enumerable:!0,get:function(){return No}}),Object.defineProperty(exports,"debug",{enumerable:!0,get:function(){return et}}),Object.defineProperty(exports,"deepEqual",{enumerable:!0,get:function(){return qa}}),Object.defineProperty(exports,"defaultLogger",{enumerable:!0,get:function(){return Ze}}),Object.defineProperty(exports,"degrees",{enumerable:!0,get:function(){return lo}}),Object.defineProperty(exports,"dirname",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"dot",{enumerable:!0,get:function(){return li}}),Object.defineProperty(exports,"dot$1",{enumerable:!0,get:function(){return ko}}),Object.defineProperty(exports,"ensureArrayBuffer",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"equals",{enumerable:!0,get:function(){return fo}}),Object.defineProperty(exports,"fillArray",{enumerable:!0,get:function(){return Xa}}),Object.defineProperty(exports,"flatten",{enumerable:!0,get:function(){return Va}}),Object.defineProperty(exports,"fovyToAltitude",{enumerable:!0,get:function(){return ya}}),Object.defineProperty(exports,"fp32",{enumerable:!0,get:function(){return Ti}}),Object.defineProperty(exports,"fromValues",{enumerable:!0,get:function(){return Ro}}),Object.defineProperty(exports,"geometry_default",{enumerable:!0,get:function(){return Si}}),Object.defineProperty(exports,"getExternalImageSize",{enumerable:!0,get:function(){return En}}),Object.defineProperty(exports,"getGLSLUniformBlocks",{enumerable:!0,get:function(){return kn}}),Object.defineProperty(exports,"getOffsetOrigin",{enumerable:!0,get:function(){return Ys}}),Object.defineProperty(exports,"getScaling",{enumerable:!0,get:function(){return ti}}),Object.defineProperty(exports,"getShaderCoordinateSystem",{enumerable:!0,get:function(){return Gs}}),Object.defineProperty(exports,"getShaderModuleDependencies",{enumerable:!0,get:function(){return Ft}}),Object.defineProperty(exports,"getShaderModuleUniformBlockName",{enumerable:!0,get:function(){return Cn}}),Object.defineProperty(exports,"initializeRegisteredSpectorJS",{enumerable:!0,get:function(){return nc}}),Object.defineProperty(exports,"isArray",{enumerable:!0,get:function(){return so}}),Object.defineProperty(exports,"isBrowser",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"isBrowser$1",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"isExternalImage",{enumerable:!0,get:function(){return wn}}),Object.defineProperty(exports,"isHTMLInCanvasSupported",{enumerable:!0,get:function(){return Tn}}),Object.defineProperty(exports,"isWorker",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"len",{enumerable:!0,get:function(){return Go}}),Object.defineProperty(exports,"length",{enumerable:!0,get:function(){return si}}),Object.defineProperty(exports,"length$1",{enumerable:!0,get:function(){return Co}}),Object.defineProperty(exports,"lerp",{enumerable:!0,get:function(){return ui}}),Object.defineProperty(exports,"lerp$1",{enumerable:!0,get:function(){return Do}}),Object.defineProperty(exports,"lerp$2",{enumerable:!0,get:function(){return ho}}),Object.defineProperty(exports,"lngLatToWorld",{enumerable:!0,get:function(){return ha}}),Object.defineProperty(exports,"load",{enumerable:!0,get:function(){return He}}),Object.defineProperty(exports,"loadRegisteredSpectorJS",{enumerable:!0,get:function(){return tc}}),Object.defineProperty(exports,"loadRegisteredWebGLDeveloperTools",{enumerable:!0,get:function(){return Qa}}),Object.defineProperty(exports,"log",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"lumaStats",{enumerable:!0,get:function(){return Zt}}),Object.defineProperty(exports,"makeRegisteredDebugContext",{enumerable:!0,get:function(){return ec}}),Object.defineProperty(exports,"memoize",{enumerable:!0,get:function(){return Ns}}),Object.defineProperty(exports,"mergeBounds",{enumerable:!0,get:function(){return La}}),Object.defineProperty(exports,"mergeOptions",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"mod",{enumerable:!0,get:function(){return Oa}}),Object.defineProperty(exports,"normalize",{enumerable:!0,get:function(){return ci}}),Object.defineProperty(exports,"normalize$1",{enumerable:!0,get:function(){return $o}}),Object.defineProperty(exports,"pixelsToWorld",{enumerable:!0,get:function(){return va}}),Object.defineProperty(exports,"project_default",{enumerable:!0,get:function(){return Js}}),Object.defineProperty(exports,"register",{enumerable:!0,get:function(){return Qe}}),Object.defineProperty(exports,"registerLoaders",{enumerable:!0,get:function(){return je}}),Object.defineProperty(exports,"resolve",{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,"resolvePath",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"scale",{enumerable:!0,get:function(){return ii}}),Object.defineProperty(exports,"sliceArrayBuffer",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"sqrLen",{enumerable:!0,get:function(){return Vo}}),Object.defineProperty(exports,"squaredLength",{enumerable:!0,get:function(){return ai}}),Object.defineProperty(exports,"sub",{enumerable:!0,get:function(){return Bo}}),Object.defineProperty(exports,"textureFormatDecoder",{enumerable:!0,get:function(){return _n}}),Object.defineProperty(exports,"toDegrees",{enumerable:!0,get:function(){return co}}),Object.defineProperty(exports,"toDoublePrecisionArray",{enumerable:!0,get:function(){return Aa}}),Object.defineProperty(exports,"toRadians",{enumerable:!0,get:function(){return ao}}),Object.defineProperty(exports,"transformMat2",{enumerable:!0,get:function(){return xo}}),Object.defineProperty(exports,"transformMat2d",{enumerable:!0,get:function(){return Po}}),Object.defineProperty(exports,"transformMat3",{enumerable:!0,get:function(){return Uo}}),Object.defineProperty(exports,"transformMat3$1",{enumerable:!0,get:function(){return Oo}}),Object.defineProperty(exports,"transformMat4",{enumerable:!0,get:function(){return hi}}),Object.defineProperty(exports,"transformMat4$1",{enumerable:!0,get:function(){return zo}}),Object.defineProperty(exports,"transformMat4$2",{enumerable:!0,get:function(){return To}}),Object.defineProperty(exports,"transformQuat",{enumerable:!0,get:function(){return fi}}),Object.defineProperty(exports,"transformQuat$1",{enumerable:!0,get:function(){return Wo}}),Object.defineProperty(exports,"typed_array_manager_default",{enumerable:!0,get:function(){return Pa}}),Object.defineProperty(exports,"unitsPerMeter",{enumerable:!0,get:function(){return pa}}),Object.defineProperty(exports,"vec2_transformMat4AsVector",{enumerable:!0,get:function(){return So}}),Object.defineProperty(exports,"vec4_transformMat2",{enumerable:!0,get:function(){return Ao}}),Object.defineProperty(exports,"vec4_transformMat3",{enumerable:!0,get:function(){return Lo}}),Object.defineProperty(exports,"worldToLngLat",{enumerable:!0,get:function(){return fa}}),Object.defineProperty(exports,"worldToPixels",{enumerable:!0,get:function(){return _a}});
|
|
1
|
+
/*! Web-kit v1.2.0-develop.9 | (c) 2026 MapVX */
|
|
2
|
+
!function(){try{var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="7139a360-6c32-4274-ad35-d119b90dfdb1",e._sentryDebugIdIdentifier="sentry-dbid-7139a360-6c32-4274-ad35-d119b90dfdb1")}catch(e){}}();const e=require("./shader-type-decoder-D5AGkPPj.cjs");function t(e,t){if(!e)throw new Error(t||"loader assertion failed.")}"undefined"!=typeof self&&self,"undefined"!=typeof window&&window,"undefined"!=typeof global&&global,"undefined"!=typeof document&&document;var n=Boolean("object"!=typeof process||"[object process]"!==String(process)||process.browser),r="undefined"!=typeof process&&process.version&&/v([0-9]*)/.exec(process.version),o=(r&&parseFloat(r[1]),"4.5.4"[0]>="0"&&"4.5.4"[0]<="9"?"v4.5.4":"");var i=function(){const t=new e.ProbeLog({id:"loaders.gl"});return globalThis.loaders||={},globalThis.loaders.log=t,globalThis.loaders.version=o,globalThis.probe||={},globalThis.probe.loaders=t,t}(),s=e=>"function"==typeof e,a=e=>null!==e&&"object"==typeof e,c=e=>a(e)&&e.constructor==={}.constructor,l=e=>"undefined"!=typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer,u=e=>a(e)&&"number"==typeof e.byteLength&&"function"==typeof e.slice,h=e=>"undefined"!=typeof Response&&e instanceof Response||a(e)&&s(e.arrayBuffer)&&s(e.text)&&s(e.json),f=e=>"undefined"!=typeof Blob&&e instanceof Blob,d=e=>(e=>"undefined"!=typeof ReadableStream&&e instanceof ReadableStream||a(e)&&s(e.tee)&&s(e.cancel)&&s(e.getReader))(e)||(e=>a(e)&&s(e.read)&&s(e.pipe)&&(e=>"boolean"==typeof e)(e.readable))(e);function p(e,t){return m(e||{},t)}function m(e,t,n=0){if(n>3)return t;const r={...e};for(const[o,i]of Object.entries(t))i&&"object"==typeof i&&!Array.isArray(i)?r[o]=m(r[o]||{},t[o],n+1):r[o]=t[o];return r}var g=(globalThis._loadersgl_?.version||(globalThis._loadersgl_=globalThis._loadersgl_||{},globalThis._loadersgl_.version="4.5.4"),globalThis._loadersgl_.version);function b(e,t){if(!e)throw new Error(t||"loaders.gl assertion failed.")}"undefined"!=typeof self&&self,"undefined"!=typeof window&&window,"undefined"!=typeof global&&global,"undefined"!=typeof document&&document;var y="object"!=typeof process||"[object process]"!==String(process)||process.browser,_="function"==typeof importScripts,v="undefined"!=typeof window&&void 0!==window.orientation,w="undefined"!=typeof process&&process.version&&/v([0-9]*)/.exec(process.version),E=(w&&parseFloat(w[1]),class{name;workerThread;isRunning=!0;result;_resolve=()=>{};_reject=()=>{};constructor(e,t){this.name=e,this.workerThread=t,this.result=new Promise((e,t)=>{this._resolve=e,this._reject=t})}postMessage(e,t){this.workerThread.postMessage({source:"loaders.gl",type:e,payload:t})}done(e){b(this.isRunning),this.isRunning=!1,this._resolve(e)}error(e){b(this.isRunning),this.isRunning=!1,this._reject(e)}}),x=class{terminate(){}},P=new Map;function O(e){b(e.source&&!e.url||!e.source&&e.url);let t=P.get(e.source||e.url);var n;return t||(e.url&&(t=(n=e.url).startsWith("http")?T(`try {\n importScripts('${n}');\n} catch (error) {\n console.error(error);\n throw error;\n}`):n,P.set(e.url,t)),e.source&&(t=T(e.source),P.set(e.source,t))),b(t),t}function T(e){const t=new Blob([e],{type:"application/javascript"});return URL.createObjectURL(t)}function M(e,t=!0,n){const r=n||new Set;if(e){if(S(e))r.add(e);else if(S(e.buffer))r.add(e.buffer);else if(ArrayBuffer.isView(e));else if(t&&"object"==typeof e)for(const o in e)M(e[o],t,r)}else;return void 0===n?Array.from(r):[]}function S(e){return!!e&&(e instanceof ArrayBuffer||("undefined"!=typeof MessagePort&&e instanceof MessagePort||("undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas)))}var j=()=>{},A=class{name;source;url;terminated=!1;worker;onMessage;onError;_loadableURL="";static isSupported(){return"undefined"!=typeof Worker&&y||void 0!==x&&!y}constructor(e){const{name:t,source:n,url:r}=e;b(n||r),this.name=t,this.source=n,this.url=r,this.onMessage=j,this.onError=e=>console.log(e),this.worker=y?this._createBrowserWorker():this._createNodeWorker()}destroy(){this.onMessage=j,this.onError=j,this.worker.terminate(),this.terminated=!0}get isRunning(){return Boolean(this.onMessage)}postMessage(e,t){t=t||M(e),this.worker.postMessage(e,t)}_getErrorFromErrorEvent(e){let t="Failed to load ";return t+=`worker ${this.name} from ${this.url}. `,e.message&&(t+=`${e.message} in `),e.lineno&&(t+=`:${e.lineno}:${e.colno}`),new Error(t)}_createBrowserWorker(){this._loadableURL=O({source:this.source,url:this.url});const e=new Worker(this._loadableURL,{name:this.name});return e.onmessage=e=>{e.data?this.onMessage(e.data):this.onError(new Error("No data received"))},e.onerror=e=>{this.onError(this._getErrorFromErrorEvent(e)),this.terminated=!0},e.onmessageerror=e=>console.error(e),e}_createNodeWorker(){let e;if(this.url){const t=this.url.includes(":/")||this.url.startsWith("/")?this.url:`./${this.url}`,n=this.url.endsWith(".ts")||this.url.endsWith(".mjs")?"module":"commonjs";e=new x(t,{eval:!1,type:n})}else{if(!this.source)throw new Error("no worker");e=new x(this.source,{eval:!0})}return e.on("message",e=>{this.onMessage(e)}),e.on("error",e=>{this.onError(e)}),e.on("exit",e=>{}),e}},L=class{name="unnamed";source;url;maxConcurrency=1;maxMobileConcurrency=1;onDebug=()=>{};reuseWorkers=!0;props={};jobQueue=[];idleQueue=[];count=0;isDestroyed=!1;static isSupported(){return A.isSupported()}constructor(e){this.source=e.source,this.url=e.url,this.setProps(e)}destroy(){this.idleQueue.forEach(e=>e.destroy()),this.isDestroyed=!0}setProps(e){this.props={...this.props,...e},void 0!==e.name&&(this.name=e.name),void 0!==e.maxConcurrency&&(this.maxConcurrency=e.maxConcurrency),void 0!==e.maxMobileConcurrency&&(this.maxMobileConcurrency=e.maxMobileConcurrency),void 0!==e.reuseWorkers&&(this.reuseWorkers=e.reuseWorkers),void 0!==e.onDebug&&(this.onDebug=e.onDebug)}async startJob(e,t=(e,t,n)=>e.done(n),n=(e,t)=>e.error(t)){const r=new Promise(r=>(this.jobQueue.push({name:e,onMessage:t,onError:n,onStart:r}),this));return this._startQueuedJob(),await r}async _startQueuedJob(){if(!this.jobQueue.length)return;const e=this._getAvailableWorker();if(!e)return;const t=this.jobQueue.shift();if(t){this.onDebug({message:"Starting job",name:t.name,workerThread:e,backlog:this.jobQueue.length});const r=new E(t.name,e);e.onMessage=e=>t.onMessage(r,e.type,e.payload),e.onError=e=>t.onError(r,e),t.onStart(r);try{await r.result}catch(n){console.error(`Worker exception: ${n}`)}finally{this.returnWorkerToQueue(e)}}}returnWorkerToQueue(e){!y||this.isDestroyed||!this.reuseWorkers||this.count>this._getMaxConcurrency()?(e.destroy(),this.count--):this.idleQueue.push(e),this.isDestroyed||this._startQueuedJob()}_getAvailableWorker(){if(this.idleQueue.length>0)return this.idleQueue.shift()||null;if(this.count<this._getMaxConcurrency()){this.count++;const e=`${this.name.toLowerCase()} (#${this.count} of ${this.maxConcurrency})`;return new A({name:e,source:this.source,url:this.url})}return null}_getMaxConcurrency(){return v?this.maxMobileConcurrency:this.maxConcurrency}},I={maxConcurrency:3,maxMobileConcurrency:1,reuseWorkers:!0,onDebug:()=>{}},C=class e{props;workerPools=new Map;static _workerFarm;static isSupported(){return A.isSupported()}static getWorkerFarm(t={}){return e._workerFarm=e._workerFarm||new e({}),e._workerFarm.setProps(t),e._workerFarm}constructor(e){this.props={...I},this.setProps(e),this.workerPools=new Map}destroy(){for(const e of this.workerPools.values())e.destroy();this.workerPools=new Map}setProps(e){this.props={...this.props,...e};for(const t of this.workerPools.values())t.setProps(this._getWorkerPoolProps())}getWorkerPool(e){const{name:t,source:n,url:r}=e;let o=this.workerPools.get(t);return o||(o=new L({name:t,source:n,url:r}),o.setProps(this._getWorkerPoolProps()),this.workerPools.set(t,o)),o}_getWorkerPoolProps(){return{maxConcurrency:this.props.maxConcurrency,maxMobileConcurrency:this.props.maxMobileConcurrency,reuseWorkers:this.props.reuseWorkers,onDebug:this.props.onDebug}}};async function R(e,t,n,r,o){const i=e.id,s=function(e,t={}){const n=t[e.id]||{},r=y?e.workerFile||`${e.id}-worker.js`:`${e.id}-worker-node.js`;let o=n.workerUrl;if(o||"compression"!==e.id||(o=t.workerUrl),"test"===(t._workerType||t?.core?._workerType)&&(o=y?`modules/${e.module}/dist/${r}`:`modules/${e.module}/src/workers/${e.id}-worker-node.ts`),!o){let t=e.version;"latest"===t&&(t="latest");const n=t?`@${t}`:"";o=`https://unpkg.com/@loaders.gl/${e.module}${n}/dist/${r}`}return b(o),o}(e,n),a=C.getWorkerFarm(n?.core).getWorkerPool({name:i,url:s});(n=JSON.parse(JSON.stringify(n||{})))._workerLoaderId=e.id,r=JSON.parse(JSON.stringify(r||{}));const c=await a.startJob("process-on-worker",$.bind(null,o));return c.postMessage("process",{input:t,options:n,context:r}),await(await c.result).result}async function $(e,t,n,r){switch(n){case"done":t.done(r);break;case"error":t.error(new Error(r.error));break;case"process":const{id:i,input:s,options:a}=r;try{const n=await e(s,a);t.postMessage("done",{id:i,result:n})}catch(o){const e=o instanceof Error?o.message:"unknown error";t.postMessage("error",{id:i,error:e})}break;default:console.warn(`parse-with-worker unknown message ${n}`)}}function k(...e){return function(e){const t=e.map(e=>e instanceof ArrayBuffer?new Uint8Array(e):e),n=t.reduce((e,t)=>e+t.byteLength,0),r=new Uint8Array(n);let o=0;for(const i of t)r.set(i,o),o+=i.byteLength;return r.buffer}(e)}function N(e,t,n){const r=void 0!==n?new Uint8Array(e).subarray(t,t+n):new Uint8Array(e).subarray(t);return new Uint8Array(r).buffer}function D(e){if(e instanceof ArrayBuffer)return e;if(ArrayBuffer.isView(e)){const{buffer:t,byteOffset:n,byteLength:r}=e;return z(t,n,r)}return z(e)}function z(e,t=0,n=e.byteLength-t){const r=new Uint8Array(e,t,n),o=new Uint8Array(r.length);return o.set(r),o.buffer}function U(){let e;if("undefined"!=typeof window&&window.performance)e=window.performance.now();else if("undefined"!=typeof process&&process.hrtime){const t=process.hrtime();e=1e3*t[0]+t[1]/1e6}else e=Date.now();return e}var W=class{constructor(e,t){this.sampleSize=1,this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this.name=e,this.type=t,this.reset()}reset(){return this.time=0,this.count=0,this.samples=0,this.lastTiming=0,this.lastSampleTime=0,this.lastSampleCount=0,this._count=0,this._time=0,this._samples=0,this._startTime=0,this._timerPending=!1,this}setSampleSize(e){return this.sampleSize=e,this}incrementCount(){return this.addCount(1),this}decrementCount(){return this.subtractCount(1),this}addCount(e){return this._count+=e,this._samples++,this._checkSampling(),this}subtractCount(e){return this._count-=e,this._samples++,this._checkSampling(),this}addTime(e){return this._time+=e,this.lastTiming=e,this._samples++,this._checkSampling(),this}timeStart(){return this._startTime=U(),this._timerPending=!0,this}timeEnd(){return this._timerPending?(this.addTime(U()-this._startTime),this._timerPending=!1,this._checkSampling(),this):this}getSampleAverageCount(){return this.sampleSize>0?this.lastSampleCount/this.sampleSize:0}getSampleAverageTime(){return this.sampleSize>0?this.lastSampleTime/this.sampleSize:0}getSampleHz(){return this.lastSampleTime>0?this.sampleSize/(this.lastSampleTime/1e3):0}getAverageCount(){return this.samples>0?this.count/this.samples:0}getAverageTime(){return this.samples>0?this.time/this.samples:0}getHz(){return this.time>0?this.samples/(this.time/1e3):0}_checkSampling(){this._samples===this.sampleSize&&(this.lastSampleTime=this._time,this.lastSampleCount=this._count,this.count+=this._count,this.time+=this._time,this.samples+=this._samples,this._time=0,this._count=0,this._samples=0)}},F=class{constructor(e){this.stats={},this.id=e.id,this.stats={},this._initializeStats(e.stats),Object.seal(this)}get(e,t="count"){return this._getOrCreate({name:e,type:t})}get size(){return Object.keys(this.stats).length}reset(){for(const e of Object.values(this.stats))e.reset();return this}forEach(e){for(const t of Object.values(this.stats))e(t)}getTable(){const e={};return this.forEach(t=>{e[t.name]={time:t.time||0,count:t.count||0,average:t.getAverageTime()||0,hz:t.getHz()||0}}),e}_initializeStats(e=[]){e.forEach(e=>this._getOrCreate(e))}_getOrCreate(e){const{name:t,type:n}=e;let r=this.stats[t];return r||(r=e instanceof W?e:new W(t,n),this.stats[t]=r),r}},B={};function G(e){for(const t in B)if(e.startsWith(t)){const n=B[t];e=e.replace(t,n)}return e.startsWith("http://")||e.startsWith("https://")||(e=`${e}`),e}function V(e){return e&&"object"==typeof e&&e.isBuffer}function Y(e){if(V(e))return e;if(e instanceof ArrayBuffer)return e;if(l(e))return q(e);if(ArrayBuffer.isView(e)){const t=e.buffer;return 0===e.byteOffset&&e.byteLength===e.buffer.byteLength?t:t.slice(e.byteOffset,e.byteOffset+e.byteLength)}if("string"==typeof e){const t=e;return(new TextEncoder).encode(t).buffer}if(e&&"object"==typeof e&&e._toArrayBuffer)return e._toArrayBuffer();throw new Error("toArrayBuffer")}function X(e){if(e instanceof ArrayBuffer)return e;if(l(e))return q(e);const{buffer:t,byteOffset:n,byteLength:r}=e;return t instanceof ArrayBuffer&&0===n&&r===t.byteLength?t:q(t,n,r)}function q(e,t=0,n=e.byteLength-t){const r=new Uint8Array(e,t,n),o=new Uint8Array(r.length);return o.set(r),o.buffer}function H(){if("undefined"!=typeof process&&void 0!==process.cwd)return process.cwd();const e=window.location?.pathname;return e?.slice(0,e.lastIndexOf("/")+1)||""}function Z(e){const t=e?e.lastIndexOf("/"):-1;return t>=0?e.substr(t+1):e}function K(e){const t=e?e.lastIndexOf("/"):-1;return t>=0?e.substr(0,t):""}function J(...e){const t=[];for(let i=0;i<e.length;i++)t[i]=e[i];let n,r="",o=!1;for(let i=t.length-1;i>=-1&&!o;i--){let e;i>=0?e=t[i]:(void 0===n&&(n=H()),e=n),0!==e.length&&(r=`${e}/${r}`,o=e.charCodeAt(0)===Q)}return r=function(e,t){let n,r="",o=-1,i=0,s=!1;for(let a=0;a<=e.length;++a){if(a<e.length)n=e.charCodeAt(a);else{if(n===Q)break;n=Q}if(n===Q){if(o===a-1||1===i);else if(o!==a-1&&2===i){if(r.length<2||!s||r.charCodeAt(r.length-1)!==ee||r.charCodeAt(r.length-2)!==ee)if(r.length>2){const e=r.length-1;let t=e;for(;t>=0&&r.charCodeAt(t)!==Q;--t);if(t!==e){r=-1===t?"":r.slice(0,t),o=a,i=0,s=!1;continue}}else if(2===r.length||1===r.length){r="",o=a,i=0,s=!1;continue}t&&(r.length>0?r+="/..":r="..",s=!0)}else{const t=e.slice(o+1,a);r.length>0?r+=`/${t}`:r=t,s=!1}o=a,i=0}else n===ee&&-1!==i?++i:i=-1}return r}(r,!o),o?`/${r}`:r.length>0?r:"."}var Q=47,ee=46;var te=class extends Error{constructor(e,t){super(e),this.reason=t.reason,this.url=t.url,this.response=t.response}reason;url;response},ne=/^data:([-\w.]+\/[-\w.+]+)(;|,)/,re=/^([-\w.]+\/[-\w.+]+)/;function oe(e,t){return e.toLowerCase()===t.toLowerCase()}function ie(e){const t=ne.exec(e);return t?t[1]:""}var se=/\?.*/;function ae(e){return e.replace(se,"")}function ce(e){return h(e)?e.url:f(e)?("name"in e?e.name:"")||"":"string"==typeof e?e:""}function le(e){if(h(e)){const t=e.headers.get("content-type")||"",n=ae(e.url);return function(e){const t=re.exec(e);return t?t[1]:e}(t)||ie(n)}return f(e)?e.type||"":"string"==typeof e?ie(e):""}async function ue(e){if(h(e))return e;const t={},n=function(e){return h(e)?e.headers["content-length"]||-1:f(e)?e.size:"string"==typeof e?e.length:e instanceof ArrayBuffer||ArrayBuffer.isView(e)?e.byteLength:-1}(e);n>=0&&(t["content-length"]=String(n));const r=ce(e),o=le(e);o&&(t["content-type"]=o);const i=await async function(e){const t=5;if("string"==typeof e)return`data:,${e.slice(0,t)}`;if(e instanceof Blob){const t=e.slice(0,5);return await new Promise(e=>{const n=new FileReader;n.onload=t=>e(t?.target?.result),n.readAsDataURL(t)})}return e instanceof ArrayBuffer?`data:base64,${function(e){let t="";const n=new Uint8Array(e);for(let r=0;r<n.byteLength;r++)t+=String.fromCharCode(n[r]);return btoa(t)}(e.slice(0,t))}`:null}(e);i&&(t["x-first-bytes"]=i),"string"==typeof e&&(e=(new TextEncoder).encode(e));const s=new Response(e,{headers:t});return Object.defineProperty(s,"url",{value:r}),s}async function he(e){if(!e.ok)throw await async function(e){const t=function(e){if(e.length<50)return e;const t=e.slice(e.length-15);return`${e.substr(0,32)}...${t}`}(e.url);let n=`Failed to fetch resource (${e.status}) ${e.statusText}: ${t}`;n=n.length>100?`${n.slice(0,100)}...`:n;const r={reason:e.statusText,url:e.url,response:e};try{const t=e.headers.get("Content-Type");r.reason=!e.bodyUsed&&t?.includes("application/json")?await e.json():await e.text()}catch(o){}return new te(n,r)}(e)}async function fe(e,t){if("string"==typeof e){const n=G(e);return function(e){return!function(e){return e.startsWith("http:")||e.startsWith("https:")}(e)&&!function(e){return e.startsWith("data:")}(e)}(n)&&globalThis.loaders?.fetchNode?globalThis.loaders?.fetchNode(n,t):await fetch(n,t)}return await ue(e)}var de=new e.ProbeLog({id:"loaders.gl"}),pe=class{log(){return()=>{}}info(){return()=>{}}warn(){return()=>{}}error(){return()=>{}}},me={core:{baseUrl:void 0,fetch:null,mimeType:void 0,fallbackMimeType:void 0,ignoreRegisteredLoaders:void 0,nothrow:!1,log:new class{console;constructor(){this.console=console}log(...e){return this.console.log.bind(this.console,...e)}info(...e){return this.console.info.bind(this.console,...e)}warn(...e){return this.console.warn.bind(this.console,...e)}error(...e){return this.console.error.bind(this.console,...e)}},useLocalLibraries:!1,CDN:"https://unpkg.com/@loaders.gl",worker:!0,maxConcurrency:3,maxMobileConcurrency:1,reuseWorkers:n,_nodeWorkers:!1,_workerType:"",limit:0,_limitMB:0,batchSize:"auto",batchDebounceMs:0,metadata:!1,transforms:[]}},ge={baseUri:"core.baseUrl",fetch:"core.fetch",mimeType:"core.mimeType",fallbackMimeType:"core.fallbackMimeType",ignoreRegisteredLoaders:"core.ignoreRegisteredLoaders",nothrow:"core.nothrow",log:"core.log",useLocalLibraries:"core.useLocalLibraries",CDN:"core.CDN",worker:"core.worker",maxConcurrency:"core.maxConcurrency",maxMobileConcurrency:"core.maxMobileConcurrency",reuseWorkers:"core.reuseWorkers",_nodeWorkers:"core.nodeWorkers",_workerType:"core._workerType",_worker:"core._workerType",limit:"core.limit",_limitMB:"core._limitMB",batchSize:"core.batchSize",batchDebounceMs:"core.batchDebounceMs",metadata:"core.metadata",transforms:"core.transforms",throws:"nothrow",dataType:"(no longer used)",uri:"core.baseUrl",method:"core.fetch.method",headers:"core.fetch.headers",body:"core.fetch.body",mode:"core.fetch.mode",credentials:"core.fetch.credentials",cache:"core.fetch.cache",redirect:"core.fetch.redirect",referrer:"core.fetch.referrer",referrerPolicy:"core.fetch.referrerPolicy",integrity:"core.fetch.integrity",keepalive:"core.fetch.keepalive",signal:"core.fetch.signal"},be=["baseUrl","fetch","mimeType","fallbackMimeType","ignoreRegisteredLoaders","nothrow","log","useLocalLibraries","CDN","worker","maxConcurrency","maxMobileConcurrency","reuseWorkers","_nodeWorkers","_workerType","limit","_limitMB","batchSize","batchDebounceMs","metadata","transforms"];function ye(){globalThis.loaders=globalThis.loaders||{};const{loaders:e}=globalThis;return e._state||(e._state={}),e._state}function _e(){const e=ye();return e.globalOptions=e.globalOptions||{...me,core:{...me.core}},we(e.globalOptions)}function ve(e,t,n,r){return n=n||[],function(e,t){Ee(e,null,me,ge,t);for(const n of t){const r=e&&e[n.id]||{},o=n.options&&n.options[n.id]||{},i=n.deprecatedOptions&&n.deprecatedOptions[n.id]||{};Ee(r,n.id,o,i,t)}}(e,n=Array.isArray(n)?n:[n]),we(function(e,t,n){const r=e.options||{},o={...r};r.core&&(o.core={...r.core});Oe(o),null===o.core?.log&&(o.core={...o.core,log:new pe});return Pe(o,we(_e())),Pe(o,we(t)),function(e,t){if(!t)return;void 0===e.core?.baseUrl&&(e.core||={},e.core.baseUrl=K(ae(t)))}(o,n),function(e){const t=e.core;if(!t)return;for(const n of be)void 0!==t[n]&&(e[n]=t[n])}(o),o}(t,e,r))}function we(e){const t=function(e){const t={...e};e.core&&(t.core={...e.core});return t}(e);Oe(t);for(const n of be)t.core&&void 0!==t.core[n]&&delete t[n];return t.core&&void 0!==t.core._workerType&&delete t._worker,t}function Ee(e,t,n,r,o){const i=t||"Top level",s=t?`${t}.`:"";for(const c in e){const l=!t&&a(e[c]);if(!(c in n)&&!("baseUri"===c&&!t)&&!("workerUrl"===c&&t))if(c in r)de.level>0&&de.warn(`${i} loader option '${s}${c}' no longer supported, use '${r[c]}'`)();else if(!l&&de.level>0){const e=xe(c,o);de.warn(`${i} loader option '${s}${c}' not recognized. ${e}`)()}}}function xe(e,t){const n=e.toLowerCase();let r="";for(const o of t)for(const t in o.options){if(e===t)return`Did you mean '${o.id}.${t}'?`;const i=t.toLowerCase();(n.startsWith(i)||i.startsWith(n))&&(r=r||`Did you mean '${o.id}.${t}'?`)}return r}function Pe(e,t){for(const n in t)if(n in t){const r=t[n];c(r)&&c(e[n])?e[n]={...e[n],...t[n]}:e[n]=t[n]}}function Oe(e){void 0!==e.baseUri&&(e.core||={},void 0===e.core.baseUrl&&(e.core.baseUrl=e.baseUri));for(const n of be)if(void 0!==e[n]){const t=e.core=e.core||{};void 0===t[n]&&(t[n]=e[n])}const t=e._worker;void 0!==t&&(e.core||={},void 0===e.core._workerType&&(e.core._workerType=t))}function Te(e){return!!e&&(Array.isArray(e)&&(e=e[0]),Array.isArray(e?.extensions))}function Me(e){let n;return t(e,"null loader"),t(Te(e),"invalid loader"),Array.isArray(e)&&(n=e[1],e=e[0],e={...e,options:{...e.options,...n}}),(e?.parseTextSync||e?.parseText)&&(e.text=!0),e.text||(e.binary=!0),e}var Se=()=>{const e=ye();return e.loaderRegistry=e.loaderRegistry||[],e.loaderRegistry};function je(e){const t=Se();e=Array.isArray(e)?e:[e];for(const n of e){const e=Me(n);t.find(t=>e===t)||t.unshift(e)}}var Ae=/\.([^.]+)$/;function Le(e){const t=le(e);return Boolean(t&&(t.startsWith("text/")||"application/json"===t||t.endsWith("+json")))}function Ie(e,t=[],n,r){if(!Ce(e))return null;const o=we(n||{});if(o.core||={},t&&!Array.isArray(t))return Me(t);let s=[];t&&(s=s.concat(t)),o.core.ignoreRegisteredLoaders||s.push(...Se()),function(e){for(const t of e)Me(t)}(s);const a=function(e,t,n,r){const o=ce(e),s=le(e),a=ae(o)||r?.url;let c=null,l="";n?.core?.mimeType&&(c=$e(t,n?.core?.mimeType),l=`match forced by supplied MIME type ${n?.core?.mimeType}`);c=c||function(e,t){const n=t&&Ae.exec(t),r=n&&n[1];return r?function(e,t){t=t.toLowerCase();for(const n of e)for(const e of n.extensions)if(e.toLowerCase()===t)return n;return null}(e,r):null}(t,a),l=l||(c?`matched url ${a}`:""),c=c||$e(t,s),l=l||(c?`matched MIME type ${s}`:""),c=c||function(e,t){if(!t)return null;for(const n of e)if("string"==typeof t){if(ke(t,n))return n}else if(ArrayBuffer.isView(t)){if(Ne(t.buffer,t.byteOffset,n))return n}else if(t instanceof ArrayBuffer&&Ne(t,0,n))return n;return null}(t,e),l=l||(c?`matched initial data ${De(e)}`:""),n?.core?.fallbackMimeType&&(c=c||$e(t,n?.core?.fallbackMimeType),l=l||(c?`matched fallback MIME type ${s}`:""));l&&i.log(1,`selectLoader selected ${c?.name}: ${l}.`);return c}(e,s,o,r);if(!a&&!o.core.nothrow)throw new Error(Re(e));return a}function Ce(e){return!(e instanceof Response&&204===e.status)}function Re(e){const t=ce(e),n=le(e);let r="No valid loader found (";r+=t?`${Z(t)}, `:"no url provided, ",r+=`MIME type: ${n?`"${n}"`:"not provided"}, `;const o=e?De(e):"";return r+=o?` first bytes: "${o}"`:"first bytes: not available",r+=")",r}function $e(e,t){for(const n of e){if(n.mimeTypes?.some(e=>oe(t,e)))return n;if(oe(t,`application/x.${n.id}`))return n}return null}function ke(e,t){return t.testText?t.testText(e):(Array.isArray(t.tests)?t.tests:[t.tests]).some(t=>e.startsWith(t))}function Ne(e,t,n){return(Array.isArray(n.tests)?n.tests:[n.tests]).some(n=>function(e,t,n,r){if(u(r))return function(e,t,n){if(n=n||e.byteLength,e.byteLength<n||t.byteLength<n)return!1;const r=new Uint8Array(e),o=new Uint8Array(t);for(let i=0;i<r.length;++i)if(r[i]!==o[i])return!1;return!0}(r,e,r.byteLength);switch(typeof r){case"function":return r(X(e));case"string":return r===ze(e,t,r.length);default:return!1}}(e,t,0,n))}function De(e,t=5){return"string"==typeof e?e.slice(0,t):ArrayBuffer.isView(e)?ze(e.buffer,e.byteOffset,t):e instanceof ArrayBuffer?ze(e,0,t):""}function ze(e,t,n){if(e.byteLength<t+n)return"";const r=new DataView(e);let o="";for(let i=0;i<n;i++)o+=String.fromCharCode(r.getUint8(t+i));return o}var Ue=262144;function We(e,t){return n?async function*(e,t){const n=e.getReader();let r;try{for(;;){const e=r||n.read();t?._streamReadAhead&&(r=n.read());const{done:o,value:i}=await e;if(o)return;yield Y(i)}}catch(o){n.releaseLock()}}(e,t):async function*(e){for await(const t of e)yield Y(t)}(e)}function Fe(e,t){if("string"==typeof e)return function*(e,t){const n=t?.chunkSize||262144;let r=0;const o=new TextEncoder;for(;r<e.length;){const t=Math.min(e.length-r,n),i=e.slice(r,r+t);r+=t,yield X(o.encode(i))}}(e,t);if(e instanceof ArrayBuffer)return function*(e,t={}){const{chunkSize:n=Ue}=t;let r=0;for(;r<e.byteLength;){const t=Math.min(e.byteLength-r,n),o=new ArrayBuffer(t),i=new Uint8Array(e,r,t);new Uint8Array(o).set(i),r+=t,yield o}}(e,t);if(f(e))return async function*(e,t){const n=t?.chunkSize||1048576;let r=0;for(;r<e.size;){const t=r+n,o=await e.slice(r,t).arrayBuffer();r=t,yield o}}(e,t);if(d(e))return We(e,t);if(h(e)){const n=e.body;if(!n)throw new Error("Readable stream not available on Response");return We(n,t)}throw new Error("makeIterator")}var Be="Cannot convert supplied data type";function Ge(e,t,n){if(t.text&&"string"==typeof e)return e;if(V(e)&&(e=e.buffer),u(e)){const n=function(e){return ArrayBuffer.isView(e)?e:new Uint8Array(e)}(e);return t.text&&!t.binary?new TextDecoder("utf8").decode(n):Y(n)}throw new Error(Be)}async function Ve(e,t,n){if("string"==typeof e||u(e))return Ge(e,t);if(f(e)&&(e=await ue(e)),h(e))return await he(e),t.binary?await e.arrayBuffer():await e.text();if(d(e)&&(e=Fe(e,n)),r=e,Boolean(r)&&s(r[Symbol.iterator])||(e=>Boolean(e)&&s(e[Symbol.asyncIterator]))(e))return async function(e){const t=[];for await(const n of e)t.push(D(n));return k(...t)}(e);var r;throw new Error(Be)}function Ye(e,t){const n=_e(),r=e||n,o=r.fetch??r.core?.fetch;return"function"==typeof o?o:a(o)?e=>fe(e,o):t?.fetch?t?.fetch:fe}function Xe(e,t,n){if(n)return n;const r={fetch:Ye(t,e),...e};if(r.url){const e=ae(r.url);r.baseUrl=e,r.queryString=function(e){const t=e.match(se);return t&&t[0]}(r.url),r.filename=Z(e),r.baseUrl=K(e)}return Array.isArray(r.loaders)||(r.loaders=null),r}async function qe(e,t,n,r){!t||Array.isArray(t)||Te(t)||(r=void 0,n=t,t=void 0),n=n||{};const o=ce(e=await e),i=function(e,t){if(e&&!Array.isArray(e))return e;let n;if(e&&(n=Array.isArray(e)?e:[e]),t&&t.loaders){const e=Array.isArray(t.loaders)?t.loaders:[t.loaders];n=n?[...n,...e]:e}return n&&n.length?n:void 0}(t,r),s=await async function(e,t=[],n,r){if(!Ce(e))return null;const o=we(n||{});if(o.core||={},e instanceof Response&&Le(e)){const n=Ie(await e.clone().text(),t,{...o,core:{...o.core,nothrow:!0}},r);if(n)return n}let i=Ie(e,t,{...o,core:{...o.core,nothrow:!0}},r);if(i)return i;if(f(e)&&(i=Ie(e=await e.slice(0,10).arrayBuffer(),t,o,r)),!i&&e instanceof Response&&Le(e)&&(i=Ie(await e.clone().text(),t,o,r)),!i&&!o.core.nothrow)throw new Error(Re(e));return i}(e,i,n);if(!s)return null;const a=ve(n,s,i,o);return r=Xe({url:o,_parse:qe,loaders:i},a,r||null),await async function(e,t,n,r){if(function(e){b(e,"no worker provided");const t=e.version}(e),n=p(e.options,n),h(t)){const{ok:e,redirected:n,status:o,statusText:i,type:s,url:a}=t;r.response={headers:Object.fromEntries(t.headers.entries()),ok:e,redirected:n,status:o,statusText:i,type:s,url:a}}t=await Ve(t,e,n);const o=e;if(o.parseTextSync&&"string"==typeof t)return o.parseTextSync(t,n,r);if(function(e,t){if(!C.isSupported())return!1;if(!y&&!(t?._nodeWorkers??t?.core?._nodeWorkers))return!1;const n=t?.worker??t?.core?.worker;return Boolean(e.worker&&n)}(e,n))return await R(e,t,n,r,qe);if(o.parseText&&"string"==typeof t)return await o.parseText(t,n,r);if(o.parse)return await o.parse(t,n,r);throw b(!o.parseSync),new Error(`${e.id} loader - no parser found and worker is disabled`)}(s,e,a,r)}async function He(e,t,n,r){let o,i;Array.isArray(t)||Te(t)?(o=t,i=n):(o=[],i=t);const s=Ye(i);let a=e;return"string"==typeof e&&(a=await s(e)),f(e)&&(a=await s(e)),"string"==typeof e&&(we(i||{}).core?.baseUrl||(i={...i,core:{...i?.core,baseUrl:e}})),Array.isArray(o),await qe(a,o,i)}var Ze=new e.ProbeLog({id:"deck"}),Ke={attributeUpdateStart:-1,attributeManagerUpdateStart:-1,attributeUpdateMessages:[]},Je={};function Qe(e){Je=e}function et(e,t,n,r){Ze.level>0&&Je[e]&&Je[e].call(null,t,n,r)}"production"!==process.env.NODE_ENV&&(Je=(e=>({"layer.changeFlag":(t,n,r)=>{e.log(3,`${t.id} ${n}: `,r[n])()},"layer.initialize":t=>{e.log(1,`Initializing ${t}`)()},"layer.update":(t,n)=>{if(n){const n=t.getChangeFlags();e.log(2,`Updating ${t} because: ${Object.keys(n).filter(e=>n[e]).join(", ")}`)()}else e.log(4,`${t} does not need update`)()},"layer.matched":(t,n)=>{n&&e.log(4,`Matched ${t}, state transfered`)()},"layer.finalize":t=>{e.log(1,`Finalizing ${t}`)()},"compositeLayer.renderLayers":(t,n,r)=>{n?e.log(2,`Composite layer rendered new subLayers ${t}`,r)():e.log(4,`Composite layer reused subLayers ${t}`,r)()},"layerManager.setLayers":(t,n,r)=>{n&&e.log(2,`Updating ${r.length} deck layers`)()},"layerManager.activateViewport":(t,n)=>{e.log(3,"Viewport changed",n)()},"attributeManager.invalidate":(t,n,r)=>{e.log(1,r?`invalidated attributes ${r} (${n}) for ${t.id}`:`invalidated all attributes for ${t.id}`)()},"attributeManager.updateStart":e=>{Ke.attributeUpdateMessages.length=0,Ke.attributeManagerUpdateStart=Date.now()},"attributeManager.updateEnd":(t,n)=>{const r=Math.round(Date.now()-Ke.attributeManagerUpdateStart);e.groupCollapsed(2,`Updated attributes for ${n} instances in ${t.id} in ${r}ms`)();for(const o of Ke.attributeUpdateMessages)e.log(3,o)();e.groupEnd(2)()},"attribute.updateStart":e=>{Ke.attributeUpdateStart=Date.now()},"attribute.allocate":(e,t)=>{const n=`${e.id} allocated ${t}`;Ke.attributeUpdateMessages.push(n)},"attribute.updateEnd":(e,t)=>{const n=Math.round(Date.now()-Ke.attributeUpdateStart),r=`${e.id} updated ${t} in ${n}ms`;Ke.attributeUpdateMessages.push(r)},"deckRenderer.renderLayers":(t,n,r)=>{const{pass:o,redrawReason:i}=r;for(const s of n){const{totalCount:n,visibleCount:r,compositeCount:a,pickableCount:c}=s,l=n-a-r;e.log(2,`RENDER #${t.renderCount} ${r} (of ${n} layers) to ${o} because ${i} (${l} hidden, ${a} composite ${c} pickable)`)()}}}))(Ze));var tt="(?:var<\\s*(uniform|storage(?:\\s*,\\s*[A-Za-z_][A-Za-z0-9_]*)?)\\s*>|var)\\s+([A-Za-z_][A-Za-z0-9_]*)",nt="\\s*",rt=[new RegExp(`@binding\\(\\s*(auto|\\d+)\\s*\\)${nt}@group\\(\\s*(\\d+)\\s*\\)${nt}${tt}`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)${nt}@binding\\(\\s*(auto|\\d+)\\s*\\)${nt}${tt}`,"g")],ot=[new RegExp(`@binding\\(\\s*(auto|\\d+)\\s*\\)${nt}@group\\(\\s*(\\d+)\\s*\\)${nt}${tt}`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)${nt}@binding\\(\\s*(auto|\\d+)\\s*\\)${nt}${tt}`,"g")],it=[new RegExp(`@binding\\(\\s*(\\d+)\\s*\\)${nt}@group\\(\\s*(\\d+)\\s*\\)${nt}${tt}`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)${nt}@binding\\(\\s*(\\d+)\\s*\\)${nt}${tt}`,"g")],st=[new RegExp(`@binding\\(\\s*(auto)\\s*\\)\\s*@group\\(\\s*(\\d+)\\s*\\)\\s*${tt}`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)\\s*@binding\\(\\s*(auto)\\s*\\)\\s*${tt}`,"g"),new RegExp(`@binding\\(\\s*(auto)\\s*\\)\\s*@group\\(\\s*(\\d+)\\s*\\)(?:[\\s\\n\\r]*@[A-Za-z_][^\\n\\r]*)*[\\s\\n\\r]*${tt}`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)\\s*@binding\\(\\s*(auto)\\s*\\)(?:[\\s\\n\\r]*@[A-Za-z_][^\\n\\r]*)*[\\s\\n\\r]*${tt}`,"g")];function at(e){const t=e.split("");let n=0,r=0,o=!1,i=!1,s=!1;for(;n<e.length;){const a=e[n],c=e[n+1];if(i)s?s=!1:"\\"===a?s=!0:'"'===a&&(i=!1),n++;else if(o)"\n"===a||"\r"===a?o=!1:t[n]=" ",n++;else if(r>0){if("/"===a&&"*"===c){t[n]=" ",t[n+1]=" ",r++,n+=2;continue}if("*"===a&&"/"===c){t[n]=" ",t[n+1]=" ",r--,n+=2;continue}"\n"!==a&&"\r"!==a&&(t[n]=" "),n++}else'"'!==a?"/"!==a||"/"!==c?"/"!==a||"*"!==c?n++:(t[n]=" ",t[n+1]=" ",r=1,n+=2):(t[n]=" ",t[n+1]=" ",o=!0,n+=2):(i=!0,n++)}return t.join("")}function ct(e,t){const n=at(e),r=[];for(const o of t){let i;for(o.lastIndex=0,i=o.exec(n);i;){const s=o===t[0],a=i.index,c=i[0].length;r.push({match:e.slice(a,a+c),index:a,length:c,bindingToken:i[s?1:2],groupToken:i[s?2:1],accessDeclaration:i[3]?.trim(),name:i[4]}),i=o.exec(n)}}return r.sort((e,t)=>e.index-t.index)}function lt(e,t,n){const r=ct(e,t);if(!r.length)return e;let o="",i=0;for(const s of r)o+=e.slice(i,s.index),o+=n(s),i=s.index+s.length;return o+=e.slice(i),o}function ut(e){return/@binding\(\s*auto\s*\)/.test(at(e))}function ht(e,t={}){const n=ft(e),r=function(e){const t=[];let n=0;for(const r of e){if("}"===r.value&&0===n)return null;t.push(n),"{"===r.value?n++:"}"===r.value&&n--}return 0===n?t:null}(n);if(!r)return null;const o=function(e,t){const n=new Map;for(let r=0;r<e.length;r++){if(0!==t[r]||"alias"!==e[r].value)continue;const o=e[r+1]?.value;if(!Ot(o)||"="!==e[r+2]?.value||n.has(o))return null;const i=Et(e,t,r+3,";");if(i<0||i===r+3)return null;n.set(o,Pt(e.slice(r+3,i))),r=i}return n}(n,r);if(!o)return null;const i=function(e,t,n){const r=[],o=new Set,i=new Set;for(let s=0;s<e.length;s++){if(0!==t[s]||"var"!==e[s].value)continue;const a=xt(e,t,s),c=e.slice(a,s),l=bt(c,"group"),u=bt(c,"binding");if(null===l||null===u||void 0===l!=(void 0===u))return null;if(void 0===l||void 0===u)continue;let h=s+1,f=[];if("<"===e[h]?.value){const t=vt(e,h,"<",">");if(t<0)return null;const n=wt(e.slice(h+1,t),",");if(!n)return null;f=n.map(Pt),h=t+1}const d=e[h]?.value;if(!Ot(d)||":"!==e[h+1]?.value)return null;const p=Et(e,t,h+2,";");if(p<0||p===h+2)return null;const m=mt(Pt(e.slice(h+2,p)),n);if(!m)return null;const g=dt({name:d,group:l,location:u,addressSpace:f,resourceType:m}),b=`${l}:${u}`;if(!g||o.has(b)||i.has(d))return null;r.push(g),o.add(b),i.add(d),s=p}return function(e){for(const t of e){if("sampler"!==t.type||t.samplerType||!t.name.endsWith("Sampler"))continue;const n=t.name.slice(0,-7);"depth"===e.find(e=>"texture"===e.type&&e.name===n&&e.group===t.group)?.sampleType&&(t.samplerType="non-filtering")}}(r),r.sort((e,t)=>e.group-t.group||e.location-t.location||e.name.localeCompare(t.name))}(n,r,o);if(!i)return null;if(!1===t.scanVertexAttributes)return{attributes:[],bindings:i};const s=function(e,t){const n=new Map;for(let r=0;r<e.length;r++){if(0!==t[r]||"struct"!==e[r].value)continue;const o=e[r+1]?.value,i=r+2;if(!Ot(o)||n.has(o)||"{"!==e[i]?.value)return null;const s=vt(e,i,"{","}");if(s<0)return null;n.set(o,e.slice(i+1,s)),r=s}return n}(n,r);if(!s)return null;const a=function(e,t,n,r,o){const i=function(e,t){const n=[],r=new Set;for(let o=0;o<e.length;o++){if(0!==t[o]||"fn"!==e[o].value)continue;const i=e[o+1]?.value,s=o+2;if(!Ot(i)||r.has(i)||"("!==e[s]?.value)return null;const a=vt(e,s,"(",")");if(a<0)return null;const c=xt(e,t,o);n.push({name:i,vertex:yt(e.slice(c,o),"vertex"),parameters:e.slice(s+1,a)}),r.add(i),o=a}return n}(e,t);if(!i)return null;const s=i.filter(e=>e.vertex),a=o?s.find(e=>e.name===o):1===s.length?s[0]:void 0;if(!a)return 0!==s.length||o?null:[];const c=wt(a.parameters,",");if(!c)return null;const l=[],u=new Set,h=new Set,f=new Set;for(const d of c)if(d.length>0&&!pt({declaration:d,aliases:n,structures:r,attributes:l,attributeLocations:u,attributeNames:h,visitedStructures:f}))return null;return l.sort((e,t)=>e.location-t.location||e.name.localeCompare(t.name))}(n,r,o,s,t.vertexEntryPoint);return a?{attributes:a,bindings:i}:null}function ft(e){const t=at(e),n=/[A-Za-z_][A-Za-z0-9_]*|(?:0[xX][0-9A-Fa-f]+|\d+)|[@(){}<>\[\]:,;=]/g,r=[];let o=n.exec(t);for(;o;)r.push({value:o[0],index:o.index}),o=n.exec(t);return r}function dt(e){const{name:t,group:n,location:r,addressSpace:o,resourceType:i}=e,s={name:t,group:n,location:r};if("uniform"===o[0]&&1===o.length)return{...s,type:"uniform"};if("storage"===o[0]&&o.length<=2){const e=o[1]||"read";return"read"===e?{...s,type:"read-only-storage"}:"read_write"===e?{...s,type:"storage"}:null}return o.length>0?null:"sampler"===i||"sampler_comparison"===i?{...s,type:"sampler",..."sampler_comparison"===i?{samplerType:"comparison"}:{}}:"texture_external"===i?{...s,type:"external-texture"}:function(e,t){const n=/^texture_storage_(1d|2d|2d_array|3d)<([A-Za-z0-9_]+),(read|write|read_write)>$/.exec(t);if(!n)return null;const r={read:"read-only",write:"write-only",read_write:"read-write"}[n[3]];return{...e,type:"storage",format:n[2],access:r,viewDimension:_t(n[1])}}(s,i)||function(e,t){const n=/^texture_(multisampled_)?(1d|2d|2d_array|cube|cube_array|3d)<(f32|i32|u32)>$/.exec(t);if(n){if(n[1]&&"2d"!==n[2])return null;const t={f32:"float",i32:"sint",u32:"uint"}[n[3]];return{...e,type:"texture",viewDimension:_t(n[2]),sampleType:t,multisampled:Boolean(n[1])}}const r=/^texture_depth_(multisampled_)?(2d|2d_array|cube|cube_array)$/.exec(t);return!r||r[1]&&"2d"!==r[2]?null:{...e,type:"texture",viewDimension:_t(r[2]),sampleType:"depth",multisampled:Boolean(r[1])}}(s,i)}function pt(e){const{declaration:t,aliases:n,structures:r,attributes:o,attributeLocations:i,attributeNames:s,visitedStructures:a}=e,c=function(e,t){const n=wt(e,t);return n&&2===n.length?n[0].length:-1}(t,":");if(c<1||c===t.length-1)return!1;const l=function(e){for(let t=e.length-1;t>=0;t--)if(Ot(e[t].value))return e[t].value;return null}(t.slice(0,c)),u=bt(t.slice(0,c),"location"),h=yt(t.slice(0,c),"builtin"),f=mt(Pt(t.slice(c+1)),n);if(!l||null===u||!f||void 0!==u&&h)return!1;if(void 0!==u){const e=/^(?:i32|u32|f32|f16|vec[234]<(?:i32|u32|f32|f16)>)$/.test(d=f)?d:null;return!(!e||i.has(u)||s.has(l))&&(o.push({name:l,location:u,type:e}),i.add(u),s.add(l),!0)}var d;if(h)return!0;const p=r.get(f);if(!p||a.has(f))return!1;const m=wt(p,",");if(!m)return!1;a.add(f);for(const g of m)if(g.length>0&&!pt({...e,declaration:g}))return!1;return a.delete(f),!0}function mt(e,t,n=new Set){const r=ft(e);let o="";for(const i of r){const e=t.get(i.value);if(!e){o+=gt(i.value);continue}if(n.has(i.value))return null;const r=new Set(n);r.add(i.value);const s=mt(e,t,r);if(!s)return null;o+=s}return o}function gt(e){const t=/^(vec[234]|mat[234]x[234])([fiuh])$/.exec(e);if(!t)return e;const n={f:"f32",i:"i32",u:"u32",h:"f16"}[t[2]];return`${t[1]}<${n}>`}function bt(e,t){let n;for(let r=0;r<e.length;r++)if("@"===e[r].value&&e[r+1]?.value===t){if(void 0!==n||"("!==e[r+2]?.value||!/^\d+$/.test(e[r+3]?.value||"")||")"!==e[r+4]?.value)return null;n=Number(e[r+3].value)}return n}function yt(e,t){return e.some((n,r)=>"@"===n.value&&e[r+1]?.value===t)}function _t(e){return e.replace("_","-")}function vt(e,t,n,r){let o=0;for(let i=t;i<e.length;i++)if(e[i].value===n)o++;else if(e[i].value===r&&0===--o)return i;return-1}function wt(e,t){const n=[];let r=0;const o={"(":0,"<":0,"[":0,"{":0},i=Object.keys(o),s={")":"(",">":"<","]":"[","}":"{"};for(let a=0;a<e.length;a++){const c=e[a].value;if(c===t&&i.every(e=>0===o[e]))n.push(e.slice(r,a)),r=a+1;else if(c in o)o[c]++;else if(c in s){const e=s[c];if(o[e]--,o[e]<0)return null}}return i.every(e=>0===o[e])?(n.push(e.slice(r)),n):null}function Et(e,t,n,r){for(let o=n;o<e.length;o++)if(0===t[o]&&e[o].value===r)return o;return-1}function xt(e,t,n){for(let r=n-1;r>=0;r--)if(";"===e[r].value&&0===t[r]||"}"===e[r].value&&1===t[r])return r+1;return 0}function Pt(e){return e.map(e=>e.value).join("")}function Ot(e){return Boolean(e&&/^[A-Za-z_][A-Za-z0-9_]*$/.test(e))}function Tt(e,t){if(!e){const e=new Error(t||"shadertools: assertion failed.");throw Error.captureStackTrace?.(e,Tt),e}}var Mt={number:{type:"number",validate:(e,t)=>Number.isFinite(e)&&"object"==typeof t&&(void 0===t.max||e<=t.max)&&(void 0===t.min||e>=t.min)},array:{type:"array",validate:(e,t)=>Array.isArray(e)||ArrayBuffer.isView(e)}};function St(e){let t=jt(e);if("object"!==t)return{value:e,...Mt[t],type:t};if("object"==typeof e)return e?void 0!==e.type?{...e,...Mt[e.type],type:e.type}:void 0===e.value?{type:"object",value:e}:(t=jt(e.value),{...e,...Mt[t],type:t}):{type:"object",value:null};throw new Error("props")}function jt(e){return Array.isArray(e)||ArrayBuffer.isView(e)?"array":typeof e}var At={vertex:"#ifdef MODULE_LOGDEPTH\n logdepth_adjustPosition(gl_Position);\n#endif\n",fragment:"#ifdef MODULE_MATERIAL\n fragColor = material_filterColor(fragColor);\n#endif\n\n#ifdef MODULE_LIGHTING\n fragColor = lighting_filterColor(fragColor);\n#endif\n\n#ifdef MODULE_FOG\n fragColor = fog_filterColor(fragColor);\n#endif\n\n#ifdef MODULE_PICKING\n fragColor = picking_filterHighlightColor(fragColor);\n fragColor = picking_filterPickingColor(fragColor);\n#endif\n\n#ifdef MODULE_LOGDEPTH\n logdepth_setFragDepth();\n#endif\n"},Lt=/void\s+main\s*\([^)]*\)\s*\{\n?/,It=/}\n?[^{}]*$/,Ct=[],Rt="__LUMA_INJECT_DECLARATIONS__";function $t(e){const t={vertex:{},fragment:{}};for(const n in e){let r=e[n];"string"==typeof r&&(r={order:0,injection:r}),t[kt(n)][n]=r}return t}function kt(e){const t=e.slice(0,2);switch(t){case"vs":return"vertex";case"fs":return"fragment";default:throw new Error(t)}}function Nt(e,t,n,r=!1,o="glsl",i={}){const s="vertex"===t;for(const a in n){const t=n[a];t.sort((e,t)=>e.order-t.order),Ct.length=t.length;for(let e=0,n=t.length;e<n;++e)Ct[e]=t[e].injection;const r=`${Ct.join("\n")}\n`;switch(a){case"vs:#decl":("wgsl"===o||s)&&(e=e.replace(Rt,r));break;case"vs:#main-start":("wgsl"===o||s)&&(e="wgsl"===o?Dt(e,"vertex",r,"start",i.vertex):e.replace(Lt,e=>e+r));break;case"vs:#main-end":("wgsl"===o||s)&&(e="wgsl"===o?Dt(e,"vertex",r,"end",i.vertex):e.replace(It,e=>r+e));break;case"fs:#decl":"wgsl"!==o&&s||(e=e.replace(Rt,r));break;case"fs:#main-start":"wgsl"!==o&&s||(e="wgsl"===o?Dt(e,"fragment",r,"start",i.fragment):e.replace(Lt,e=>e+r));break;case"fs:#main-end":"wgsl"!==o&&s||(e="wgsl"===o?Dt(e,"fragment",r,"end",i.fragment):e.replace(It,e=>r+e));break;default:e=e.replace(a,e=>e+r)}}return e=e.replace(Rt,""),r&&(e=e.replace(/\}\s*$/,e=>e+At[t])),e}function Dt(e,t,n,r,o){const i=function(e,t,n){const r="vertex"===t?"@vertex":"@fragment",o=e.indexOf(r);if(o<0)return null;const i=n?e.search(new RegExp(`\\bfn\\s+${s=n,s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*\\(`)):e.indexOf("fn",o);var s;if(i<0)return null;const a=e.indexOf("{",i);if(a<0)return null;let c=0;for(let l=a;l<e.length;l++){const t=e[l];if("{"===t)c++;else if("}"===t&&(c--,0===c))return{openBraceIndex:a,closeBraceIndex:l}}return null}(e,t,o);if(!i)return e;if("start"===r){const t=i.openBraceIndex+1;return`${e.slice(0,t)}\n${n}${e.slice(t)}`}return`${e.slice(0,i.closeBraceIndex)}${n}${e.slice(i.closeBraceIndex)}`}function zt(e){e.map(e=>function(e){if(e.instance)return;zt(e.dependencies||[]);const{propTypes:t={},deprecations:n=[],inject:r={}}=e,o={normalizedInjections:$t(r),parsedDeprecations:Wt(n)};t&&(o.propValidators=function(e){const t={};for(const[n,r]of Object.entries(e))t[n]=St(r);return t}(t));e.instance=o;let i={};t&&(i=Object.entries(t).reduce((e,[t,n])=>{const r=n?.value;return r&&(e[t]=r),e},{}));e.defaultUniforms={...e.defaultUniforms,...i}}(e))}function Ut(e,t,n){e.deprecations?.forEach(e=>{e.regex?.test(t)&&(e.deprecated?n.deprecated(e.old,e.new)():n.removed(e.old,e.new)())})}function Wt(e){return e.forEach(e=>{if("function"===e.type)e.regex=new RegExp(`\\b${e.old}\\(`);else e.regex=new RegExp(`${e.type} ${e.old};`)}),e}function Ft(e){zt(e);const t={},n={};Bt({modules:e,level:0,moduleMap:t,moduleDepth:n});const r=Object.keys(n).sort((e,t)=>n[t]-n[e]).map(e=>t[e]);return zt(r),r}function Bt(e){const{modules:t,level:n,moduleMap:r,moduleDepth:o}=e;if(n>=5)throw new Error("Possible loop in shader dependency graph");for(const i of t)r[i.name]=i,(void 0===o[i.name]||o[i.name]<n)&&(o[i.name]=n);for(const i of t)i.dependencies&&Bt({modules:i.dependencies,level:n+1,moduleMap:r,moduleDepth:o})}var Gt,Vt,Yt={id:null,powerPreference:"high-performance",failIfMajorPerformanceCaveat:!1,featureLevel:void 0,optionalFeatures:[],xrCompatible:!1,createCanvasContext:void 0,webgl:{},onError:(e,t)=>{},onResize:(t,n)=>{const[r,o]=t.getDevicePixelSize();e.log.log(1,`${t} resized => ${r}x${o}px`)()},onPositionChange:(t,n)=>{const[r,o]=t.getPosition();e.log.log(1,`${t} repositioned => ${r},${o}`)()},onVisibilityChange:t=>e.log.log(1,`${t} Visibility changed ${t.isVisible}`)(),onDevicePixelRatioChange:(t,n)=>e.log.log(1,`${t} DPR changed ${n.oldRatio} => ${t.devicePixelRatio}`)(),debug:(Gt=e.log.get("debug"),Vt=function(){const e=globalThis.process;if(e?.env)return e.env.NODE_ENV}(),null!=Gt?Boolean(Gt):void 0!==Vt&&"production"!==Vt),debugGPUTime:!1,debugShaders:e.log.get("debug-shaders")||void 0,debugFramebuffers:Boolean(e.log.get("debug-framebuffers")),debugFactories:Boolean(e.log.get("debug-factories")),debugWebGL:Boolean(e.log.get("debug-webgl")),debugSpectorJS:void 0,debugSpectorJSUrl:void 0,_reuseDevices:!1,_cacheShaders:!0,_destroyShaders:!1,_cachePipelines:!0,_sharePipelines:!0,_destroyPipelines:!1,_initializeFeatures:!0,_disabledFeatures:{"compilation-status-async-webgl":!0},_handle:void 0};var Xt=["Adapter","GPU","GPU Type","GPU Backend","Frame Rate","CPU Time","GPU Time","GPU Memory","Buffer Memory","Texture Memory","External Buffer Memory","External Texture Memory","Swap Chain Texture"],qt=new WeakMap,Ht=new WeakMap,Zt=new class{stats=new Map;getStats(e){return this.get(e)}get(e){this.stats.has(e)||this.stats.set(e,new F({id:e}));const t=this.stats.get(e);return"GPU Time and Memory"===e&&function(e,t){const n=e.stats;let r=!1;for(const c of t)n[c]||(e.get(c),r=!0);const o=Object.keys(n).length,i=qt.get(e);if(!r&&i?.orderedStatNames===t&&i.statCount===o)return;const s={};let a=Ht.get(t);a||(a=new Set(t),Ht.set(t,a));for(const c of t)n[c]&&(s[c]=n[c]);for(const[c,l]of Object.entries(n))a.has(c)||(s[c]=l);for(const c of Object.keys(n))delete n[c];Object.assign(n,s),qt.set(e,{orderedStatNames:t,statCount:o})}(t,Xt),t}};var Kt="texture-compression-bc",Jt="texture-compression-astc",Qt="texture-compression-etc2",en="texture-compression-pvrtc-webgl",tn="texture-compression-atc-webgl",nn="float32-renderable-webgl",rn="float16-renderable-webgl",on="snorm8-renderable-webgl",sn="norm16-webgl",an="norm16-renderable-webgl",cn="snorm16-renderable-webgl",ln="float32-filterable",un="float16-filterable-webgl",hn=19,fn=992;function dn(e){const t=pn[e];if(!t)throw new Error(`Unsupported texture format ${e}`);return t}var pn={...{r8unorm:{webgpu:527},rg8unorm:{webgpu:527},"rgb8unorm-webgl":{},rgba8unorm:{webgpu:31},"rgba8unorm-srgb":{webgpu:15},r8snorm:{render:on,webgpu:837},rg8snorm:{render:on,webgpu:837},"rgb8snorm-webgl":{},rgba8snorm:{render:on,webgpu:341},r8uint:{webgpu:515},rg8uint:{webgpu:515},rgba8uint:{webgpu:hn},r8sint:{webgpu:515},rg8sint:{webgpu:515},rgba8sint:{webgpu:hn},bgra8unorm:{webgpu:15},"bgra8unorm-srgb":{webgpu:15360},r16unorm:{f:sn,render:an,webgpu:fn},rg16unorm:{f:sn,render:an,webgpu:fn},"rgb16unorm-webgl":{f:sn,render:!1},rgba16unorm:{f:sn,render:an,webgpu:fn},r16snorm:{f:sn,render:cn,webgpu:fn},rg16snorm:{f:sn,render:cn,webgpu:fn},"rgb16snorm-webgl":{f:sn,render:!1},rgba16snorm:{f:sn,render:cn,webgpu:fn},r16uint:{webgpu:515},rg16uint:{webgpu:515},rgba16uint:{webgpu:hn},r16sint:{webgpu:515},rg16sint:{webgpu:515},rgba16sint:{webgpu:hn},r16float:{render:rn,filter:"float16-filterable-webgl",webgpu:527},rg16float:{render:rn,filter:un,webgpu:527},rgba16float:{render:rn,filter:un,webgpu:31},r32uint:{webgpu:hn},rg32uint:{webgpu:16387},rgba32uint:{webgpu:hn},r32sint:{webgpu:hn},rg32sint:{webgpu:16387},rgba32sint:{webgpu:hn},r32float:{render:nn,filter:ln,webgpu:hn},rg32float:{render:!1,filter:ln,webgpu:16387},"rgb32float-webgl":{render:nn,filter:ln},rgba32float:{render:nn,filter:ln,webgpu:hn},"rgba4unorm-webgl":{channels:"rgba",bitsPerChannel:[4,4,4,4],packed:!0},"rgb565unorm-webgl":{channels:"rgb",bitsPerChannel:[5,6,5,0],packed:!0},"rgb5a1unorm-webgl":{channels:"rgba",bitsPerChannel:[5,5,5,1],packed:!0},rgb9e5ufloat:{channels:"rgb",packed:!0,render:"rgb9e5ufloat-renderable-webgl",webgpu:5},rg11b10ufloat:{channels:"rgb",bitsPerChannel:[11,11,10,0],packed:!0,p:1,render:nn,webgpu:517},rgb10a2unorm:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1,webgpu:527},rgb10a2uint:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1,webgpu:515},stencil8:{attachment:"stencil",bitsPerChannel:[8,0,0,0],dataType:"uint8",webgpu:3},depth16unorm:{attachment:"depth",bitsPerChannel:[16,0,0,0],dataType:"uint16",webgpu:3},depth24plus:{attachment:"depth",bitsPerChannel:[24,0,0,0],dataType:"uint32",webgpu:3},depth32float:{attachment:"depth",bitsPerChannel:[32,0,0,0],dataType:"float32",webgpu:3},"depth24plus-stencil8":{attachment:"depth-stencil",bitsPerChannel:[24,8,0,0],packed:!0,webgpu:3},"depth32float-stencil8":{attachment:"depth-stencil",bitsPerChannel:[32,8,0,0],packed:!0,f:"depth32float-stencil8",webgpu:3}},...{"bc1-rgb-unorm-webgl":{f:Kt},"bc1-rgb-unorm-srgb-webgl":{f:Kt},"bc1-rgba-unorm":{f:Kt},"bc1-rgba-unorm-srgb":{f:Kt},"bc2-rgba-unorm":{f:Kt},"bc2-rgba-unorm-srgb":{f:Kt},"bc3-rgba-unorm":{f:Kt},"bc3-rgba-unorm-srgb":{f:Kt},"bc4-r-unorm":{f:Kt},"bc4-r-snorm":{f:Kt},"bc5-rg-unorm":{f:Kt},"bc5-rg-snorm":{f:Kt},"bc6h-rgb-ufloat":{f:Kt},"bc6h-rgb-float":{f:Kt},"bc7-rgba-unorm":{f:Kt},"bc7-rgba-unorm-srgb":{f:Kt},"etc2-rgb8unorm":{f:Qt},"etc2-rgb8unorm-srgb":{f:Qt},"etc2-rgb8a1unorm":{f:Qt},"etc2-rgb8a1unorm-srgb":{f:Qt},"etc2-rgba8unorm":{f:Qt},"etc2-rgba8unorm-srgb":{f:Qt},"eac-r11unorm":{f:Qt},"eac-r11snorm":{f:Qt},"eac-rg11unorm":{f:Qt},"eac-rg11snorm":{f:Qt},"astc-4x4-unorm":{f:Jt},"astc-4x4-unorm-srgb":{f:Jt},"astc-5x4-unorm":{f:Jt},"astc-5x4-unorm-srgb":{f:Jt},"astc-5x5-unorm":{f:Jt},"astc-5x5-unorm-srgb":{f:Jt},"astc-6x5-unorm":{f:Jt},"astc-6x5-unorm-srgb":{f:Jt},"astc-6x6-unorm":{f:Jt},"astc-6x6-unorm-srgb":{f:Jt},"astc-8x5-unorm":{f:Jt},"astc-8x5-unorm-srgb":{f:Jt},"astc-8x6-unorm":{f:Jt},"astc-8x6-unorm-srgb":{f:Jt},"astc-8x8-unorm":{f:Jt},"astc-8x8-unorm-srgb":{f:Jt},"astc-10x5-unorm":{f:Jt},"astc-10x5-unorm-srgb":{f:Jt},"astc-10x6-unorm":{f:Jt},"astc-10x6-unorm-srgb":{f:Jt},"astc-10x8-unorm":{f:Jt},"astc-10x8-unorm-srgb":{f:Jt},"astc-10x10-unorm":{f:Jt},"astc-10x10-unorm-srgb":{f:Jt},"astc-12x10-unorm":{f:Jt},"astc-12x10-unorm-srgb":{f:Jt},"astc-12x12-unorm":{f:Jt},"astc-12x12-unorm-srgb":{f:Jt},"pvrtc-rgb4unorm-webgl":{f:en},"pvrtc-rgba4unorm-webgl":{f:en},"pvrtc-rgb2unorm-webgl":{f:en},"pvrtc-rgba2unorm-webgl":{f:en},"etc1-rbg-unorm-webgl":{f:"texture-compression-etc1-webgl"},"atc-rgb-unorm-webgl":{f:tn},"atc-rgba-unorm-webgl":{f:tn},"atc-rgbai-unorm-webgl":{f:tn}}},mn=/^(r|rg|rgb|rgba|bgra)([0-9]*)([a-z]*)(-srgb)?(-webgl)?$/,gn=["rgb","rgba","bgra"],bn=["depth","stencil"],yn=["bc1","bc2","bc3","bc4","bc5","bc6","bc7","etc1","etc2","eac","atc","astc","pvrtc"],_n=new class{isColor(e){return gn.some(t=>e.startsWith(t))}isDepthStencil(e){return bn.some(t=>e.startsWith(t))}isCompressed(e){return yn.some(t=>e.startsWith(t))}getInfo(e){return vn(e)}getCapabilities(e){return function(e){const t=dn(e),n={format:e,create:t.f??!0,render:t.render??!0,filter:t.filter??!0,blend:t.blend??!0,store:t.store??!0},r=vn(e),o=e.startsWith("depth")||e.startsWith("stencil"),i=r?.signed,s=r?.integer,a=r?.webgl,c=Boolean(r?.compressed);return n.render&&=!o&&!c,n.filter&&=!(o||i||s||a),n}(e)}getWebGPUCapabilities(e){const t=dn(e);return void 0!==t.webgpu?t.webgpu:this.isCompressed(e)&&!e.endsWith("-webgl")?5:0}computeMemoryLayout(e){return function({format:e,width:t,height:n,depth:r,byteAlignment:o}){const{bytesPerPixel:i,bytesPerBlock:s=i,blockWidth:a=1,blockHeight:c=1,compressed:l=!1}=_n.getInfo(e),u=l?Math.ceil(t/a):t,h=l?Math.ceil(n/c):n,f=u*s,d=Math.ceil(f/o)*o;return{bytesPerPixel:i,bytesPerRow:d,rowsPerImage:h,depthOrArrayLayers:r,bytesPerImage:d*h,byteLength:d*h*r}}(e)}};function vn(t){let n=function(e){const t={...dn(e)},n=t.bytesPerPixel||1,r=t.bitsPerChannel||[8,8,8,8];return delete t.bitsPerChannel,delete t.bytesPerPixel,delete t.f,delete t.render,delete t.filter,delete t.blend,delete t.store,delete t.webgpu,{...t,format:e,attachment:t.attachment||"color",channels:t.channels||"r",components:t.components||t.channels?.length||1,bytesPerPixel:n,bitsPerChannel:r,dataType:t.dataType||"uint8",srgb:t.srgb??!1,packed:t.packed??!1,webgl:t.webgl??!1,integer:t.integer??!1,signed:t.signed??!1,normalized:t.normalized??!1,compressed:t.compressed??!1}}(t);if(_n.isCompressed(t)){n.channels="rgb",n.components=3,n.bytesPerPixel=1,n.srgb=!1,n.compressed=!0,n.bytesPerBlock=function(e){return e.startsWith("bc1")||e.startsWith("bc4")||e.startsWith("etc1")||e.startsWith("etc2-rgb8")||e.startsWith("etc2-rgb8a1")||e.startsWith("eac-r11")||"atc-rgb-unorm-webgl"===e?8:e.startsWith("bc2")||e.startsWith("bc3")||e.startsWith("bc5")||e.startsWith("bc6h")||e.startsWith("bc7")||e.startsWith("etc2-rgba8")||e.startsWith("eac-rg11")||e.startsWith("astc")||"atc-rgba-unorm-webgl"===e||"atc-rgbai-unorm-webgl"===e?16:e.startsWith("pvrtc")?8:16}(t);const e=function(e){const t=/.*-(\d+)x(\d+)-.*/.exec(e);if(t){const[,e,n]=t;return{blockWidth:Number(e),blockHeight:Number(n)}}return e.startsWith("bc")||e.startsWith("etc1")||e.startsWith("etc2")||e.startsWith("eac")||e.startsWith("atc")||e.startsWith("pvrtc-rgb4")||e.startsWith("pvrtc-rgba4")?{blockWidth:4,blockHeight:4}:e.startsWith("pvrtc-rgb2")||e.startsWith("pvrtc-rgba2")?{blockWidth:8,blockHeight:4}:null}(t);e&&(n.blockWidth=e.blockWidth,n.blockHeight=e.blockHeight)}const r=n.packed?null:mn.exec(t);if(r){const[,o,i,s,a,c]=r,l=`${s}${i}`,u=e.dataTypeDecoder.getDataTypeInfo(l),h=8*u.byteLength,f=o?.length??1,d=[h,f>=2?h:0,f>=3?h:0,f>=4?h:0];n={format:t,attachment:n.attachment,dataType:u.signedType,components:f,channels:o,integer:u.integer,signed:u.signed,normalized:u.normalized,bitsPerChannel:d,bytesPerPixel:u.byteLength*f,packed:n.packed,srgb:n.srgb},"-webgl"===c&&(n.webgl=!0),"-srgb"===a&&(n.srgb=!0)}return t.endsWith("-webgl")&&(n.webgl=!0),t.endsWith("-srgb")&&(n.srgb=!0),n}function wn(e){return"undefined"!=typeof ImageData&&e instanceof ImageData||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLVideoElement&&e instanceof HTMLVideoElement||"undefined"!=typeof VideoFrame&&e instanceof VideoFrame||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas}function En(e){if("undefined"!=typeof ImageData&&e instanceof ImageData||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas)return{width:e.width,height:e.height};if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement)return{width:e.naturalWidth,height:e.naturalHeight};if("undefined"!=typeof HTMLVideoElement&&e instanceof HTMLVideoElement)return{width:e.videoWidth,height:e.videoHeight};if("undefined"!=typeof VideoFrame&&e instanceof VideoFrame)return{width:e.displayWidth,height:e.displayHeight};throw new Error("Unknown image type")}var xn=class{};function Pn(e){if(void 0!==e){if(null===e||"string"==typeof e||"number"==typeof e||"boolean"==typeof e)return e;if(e instanceof Error)return e.message;if(Array.isArray(e))return e.map(Pn);if("object"==typeof e){if(function(e){return"toString"in e&&"function"==typeof e.toString&&e.toString!==Object.prototype.toString}(e)){const t=String(e);if("[object Object]"!==t)return t}return function(e){return"message"in e&&"type"in e}(e)?function(e){const t="string"==typeof e.type?e.type:"message",n="string"==typeof e.message?e.message:"",r="number"==typeof e.lineNum?e.lineNum:null,o="number"==typeof e.linePos?e.linePos:null;return`${t}${null!==r&&null!==o?` @ ${r}:${o}`:null!==r?` @ ${r}`:""}: ${n}`.trim()}(e):e.constructor?.name||"Object"}return String(e)}}var On=class{features;disabledFeatures;constructor(e=[],t){this.features=new Set(e),this.disabledFeatures=t||{}}*[Symbol.iterator](){yield*this.features}has(e){return!this.disabledFeatures?.[e]&&this.features.has(e)}};function Tn(){if("undefined"==typeof HTMLCanvasElement)return!1;const e=HTMLCanvasElement.prototype;return"layoutSubtree"in e&&"function"==typeof e.requestPaint}var Mn=class t{static defaultProps={...Yt};get[Symbol.toStringTag](){return"Device"}toString(){return`Device(${this.id})`}toJSON(){return this.toString()}id;props;userData={};statsManager=Zt;_factories={};timestamp=0;_reused=!1;_moduleData={};wgslLanguageFeatures=new Set;_textureCaps={};_debugGPUTimeQuery=null;constructor(n){this.props={...t.defaultProps,...n},this.id=this.props.id||e.uid(this[Symbol.toStringTag].toLowerCase())}getVertexFormatInfo(t){return e.vertexFormatDecoder.getVertexFormatInfo(t)}isVertexFormatSupported(e){return!0}getTextureFormatInfo(e){return _n.getInfo(e)}getTextureFormatCapabilities(e){let t=this._textureCaps[e];if(!t){const n=this._getDeviceTextureFormatCapabilities(e);t=this._getDeviceSpecificTextureFormatCapabilities(n),this._textureCaps[e]=t}return t}getMipLevelCount(e,t,n=1){return 1+Math.floor(Math.log2(Math.max(e,t,n)))}isExternalImage(e){return wn(e)}getExternalImageSize(e){return En(e)}isTextureFormatSupported(e){return this.getTextureFormatCapabilities(e).create}isTextureFormatFilterable(e){return this.getTextureFormatCapabilities(e).filter}isTextureFormatRenderable(e){return this.getTextureFormatCapabilities(e).render}isTextureFormatCompressed(e){return _n.isCompressed(e)}getSupportedCompressedTextureFormats(){const e=[];for(const t of Object.keys(pn))this.isTextureFormatCompressed(t)&&this.isTextureFormatSupported(t)&&e.push(t);return e}pushDebugGroup(e){this.commandEncoder.pushDebugGroup(e)}popDebugGroup(){this.commandEncoder?.popDebugGroup()}insertDebugMarker(e){this.commandEncoder?.insertDebugMarker(e)}loseDevice(){return!1}incrementTimestamp(){return this.timestamp++}reportError(t,n,...r){if(!this.props.onError(t,n)){const o=function(e,t){return[Pn(e),...t.map(Pn).filter(e=>void 0!==e)].filter(e=>void 0!==e)}(n,r);return e.log.error("webgl"===this.type?"%cWebGL":"%cWebGPU","color: white; background: red; padding: 2px 6px; border-radius: 3px;",t.message,...o)}return()=>{}}debug(){this.props.debug||e.log.once(0,"'Type luma.log.set({debug: true}) in console to enable debug breakpoints',\nor create a device with the 'debug: true' prop.")()}getDefaultCanvasContext(){if(!this.canvasContext)throw new Error("Device has no default CanvasContext. See props.createCanvasContext");return this.canvasContext}createFence(){throw new Error("createFence() not implemented")}beginRenderPass(e){return this.commandEncoder.beginRenderPass(e)}beginComputePass(e){return this.commandEncoder.beginComputePass(e)}writeBufferViaCommandEncoder(e,t,n,r=0){throw new Error("writeBufferViaCommandEncoder() not implemented")}generateMipmapsWebGPU(e){throw new Error("not implemented")}_createSharedRenderPipelineWebGL(e){throw new Error("_createSharedRenderPipelineWebGL() not implemented")}_createBindGroupLayoutWebGPU(e,t){throw new Error("_createBindGroupLayoutWebGPU() not implemented")}_createBindGroupWebGPU(e,t,n,r,o){throw new Error("_createBindGroupWebGPU() not implemented")}_supportsDebugGPUTime(){return this.features.has("timestamp-query")&&Boolean(this.props.debug||this.props.debugGPUTime)}_enableDebugGPUTime(e=256){if(!this._supportsDebugGPUTime())return null;if(this._debugGPUTimeQuery)return this._debugGPUTimeQuery;try{this._debugGPUTimeQuery=this.createQuerySet({type:"timestamp",count:e}),this.commandEncoder=this.createCommandEncoder({id:this.commandEncoder.props.id,timeProfilingQuerySet:this._debugGPUTimeQuery})}catch{this._debugGPUTimeQuery=null}return this._debugGPUTimeQuery}_disableDebugGPUTime(){this._debugGPUTimeQuery&&(this.commandEncoder.getTimeProfilingQuerySet()===this._debugGPUTimeQuery&&(this.commandEncoder=this.createCommandEncoder({id:this.commandEncoder.props.id})),this._debugGPUTimeQuery.destroy(),this._debugGPUTimeQuery=null)}_isDebugGPUTimeEnabled(){return null!==this._debugGPUTimeQuery}getCanvasContext(){return this.getDefaultCanvasContext()}readPixelsToArrayWebGL(e,t){throw new Error("not implemented")}readPixelsToBufferWebGL(e,t){throw new Error("not implemented")}setParametersWebGL(e){throw new Error("not implemented")}getParametersWebGL(e){throw new Error("not implemented")}withParametersWebGL(e,t){throw new Error("not implemented")}clearWebGL(e){throw new Error("not implemented")}resetWebGL(){throw new Error("not implemented")}getModuleData(e){return this._moduleData[e]||={},this._moduleData[e]}static _getCanvasContextProps(e){return!0===e.createCanvasContext?{}:e.createCanvasContext}_getDeviceTextureFormatCapabilities(e){const t=_n.getCapabilities(e),n=e=>("string"==typeof e?this.features.has(e):e)??!0,r=n(t.create);return{format:e,create:r,render:r&&n(t.render),filter:r&&n(t.filter),blend:r&&n(t.blend),store:r&&n(t.store)}}_normalizeBufferProps(t){(t instanceof ArrayBuffer||ArrayBuffer.isView(t))&&(t={data:t});const n={...t};if((t.usage||0)&e.Buffer.INDEX&&(t.indexType||(t.data instanceof Uint32Array?n.indexType="uint32":t.data instanceof Uint16Array?n.indexType="uint16":t.data instanceof Uint8Array&&(n.data=new Uint16Array(t.data),n.indexType="uint16")),!n.indexType))throw new Error("indices buffer content must be of type uint16 or uint32");return n}},Sn=class t extends e.Resource{static defaultProps={...e.Resource.defaultProps,type:"color-sampler",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge",addressModeW:"clamp-to-edge",magFilter:"nearest",minFilter:"nearest",mipmapFilter:"none",lodMinClamp:0,lodMaxClamp:32,compare:"less-equal",maxAnisotropy:1};get[Symbol.toStringTag](){return"Sampler"}constructor(e,n){super(e,n=t.normalizeProps(e,n),t.defaultProps)}static normalizeProps(e,t){return t}},jn={"1d":"1d","2d":"2d","2d-array":"2d",cube:"2d","cube-array":"2d","3d":"3d"},An=class t extends e.Resource{static SAMPLE=4;static STORAGE=8;static RENDER=16;static COPY_SRC=1;static COPY_DST=2;static TEXTURE=4;static RENDER_ATTACHMENT=16;dimension;baseDimension;format;width;height;depth;mipLevels;samples;byteAlignment;ready=Promise.resolve(this);isReady=!0;updateTimestamp;get[Symbol.toStringTag](){return"Texture"}toString(){return`Texture(${this.id},${this.format},${this.width}x${this.height})`}constructor(n,r,o){if(super(n,r=t.normalizeProps(n,r),t.defaultProps),this.dimension=this.props.dimension,this.baseDimension=jn[this.dimension],this.format=this.props.format,this.width=this.props.width,this.height=this.props.height,this.depth=this.props.depth,this.mipLevels=this.props.mipLevels,this.samples=this.props.samples||1,"cube"===this.dimension&&(this.depth=6),void 0===this.props.width||void 0===this.props.height)if(n.isExternalImage(r.data)){const e=n.getExternalImageSize(r.data);this.width=e?.width||1,this.height=e?.height||1}else this.width=1,this.height=1,void 0!==this.props.width&&void 0!==this.props.height||e.log.warn(`${this} created with undefined width or height. This is deprecated. Use DynamicTexture instead.`)();this.byteAlignment=o?.byteAlignment||1,this.updateTimestamp=n.incrementTimestamp()}clone(e){return this.device.createTexture({...this.props,...e})}setSampler(e){this.sampler=e instanceof Sn?e:this.device.createSampler(e)}copyImageData(e){const{data:t,depth:n,...r}=e;this.writeData(t,{...r,depthOrArrayLayers:r.depthOrArrayLayers??n})}computeMemoryLayout(e={}){const{width:t=this.width,height:n=this.height,depthOrArrayLayers:r=this.depth}=this._normalizeTextureReadOptions(e),{format:o,byteAlignment:i}=this;return _n.computeMemoryLayout({format:o,width:t,height:n,depth:r,byteAlignment:i})}readBuffer(e,t){throw new Error("readBuffer not implemented")}readDataAsync(e){throw new Error("readBuffer not implemented")}writeBuffer(e,t){throw new Error("readBuffer not implemented")}writeData(e,t){throw new Error("readBuffer not implemented")}readDataSyncWebGL(e){throw new Error("readDataSyncWebGL not available")}generateMipmapsWebGL(){throw new Error("generateMipmapsWebGL not available")}static normalizeProps(e,t){const n={...t},{width:r,height:o}=n;return"number"==typeof r&&(n.width=Math.max(1,Math.ceil(r))),"number"==typeof o&&(n.height=Math.max(1,Math.ceil(o))),n}_initializeData(e){this.device.isExternalImage(e)?this.copyExternalImage({image:e,width:this.width,height:this.height,depth:this.depth,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1}):e&&this.copyImageData({data:e,mipLevel:0,x:0,y:0,z:0,aspect:"all"})}_normalizeCopyImageDataOptions(e){const{data:t,depth:n,...r}=e,o=this._normalizeTextureWriteOptions({...r,depthOrArrayLayers:r.depthOrArrayLayers??n});return{data:t,depth:o.depthOrArrayLayers,...o}}_normalizeCopyExternalImageOptions(e){const n=t._omitUndefined(e),r=n.mipLevel??0,o=this._getMipLevelSize(r),i=this.device.getExternalImageSize(e.image),s={...t.defaultCopyExternalImageOptions,...o,...i,...n};return s.width=Math.min(s.width,o.width-s.x),s.height=Math.min(s.height,o.height-s.y),s.depth=Math.min(s.depth,o.depthOrArrayLayers-s.z),s}_normalizeCopyElementImageOptions(e){const n=t._omitUndefined(e),r=n.mipLevel??0,o=this._getMipLevelSize(r),i={...t.defaultCopyElementImageOptions,...o,...n};return i.width=Math.min(i.width,o.width-i.x),i.height=Math.min(i.height,o.height-i.y),i.depth=Math.min(i.depth,o.depthOrArrayLayers-i.z),i}_normalizeTextureReadOptions(e){const n=t._omitUndefined(e),r=n.mipLevel??0,o=this._getMipLevelSize(r),i={...t.defaultTextureReadOptions,...o,...n};return i.width=Math.min(i.width,o.width-i.x),i.height=Math.min(i.height,o.height-i.y),i.depthOrArrayLayers=Math.min(i.depthOrArrayLayers,o.depthOrArrayLayers-i.z),i}_getSupportedColorReadOptions(e){const t=this._normalizeTextureReadOptions(e),n=_n.getInfo(this.format);switch(this._validateColorReadAspect(t),this._validateColorReadFormat(n),this.dimension){case"2d":case"cube":case"cube-array":case"2d-array":case"3d":return t;default:throw new Error(`${this} color readback does not support ${this.dimension} textures`)}}_validateColorReadAspect(e){if("all"!==e.aspect)throw new Error(`${this} color readback only supports aspect 'all'`)}_validateColorReadFormat(e){if(e.compressed)throw new Error(`${this} color readback does not support compressed formats (${this.format})`);switch(e.attachment){case"color":return;case"depth":throw new Error(`${this} color readback does not support depth formats (${this.format})`);case"stencil":throw new Error(`${this} color readback does not support stencil formats (${this.format})`);case"depth-stencil":throw new Error(`${this} color readback does not support depth-stencil formats (${this.format})`);default:throw new Error(`${this} color readback does not support format ${this.format}`)}}_normalizeTextureWriteOptions(e){const n=t._omitUndefined(e),r=n.mipLevel??0,o=this._getMipLevelSize(r),i={...t.defaultTextureWriteOptions,...o,...n};i.width=Math.min(i.width,o.width-i.x),i.height=Math.min(i.height,o.height-i.y),i.depthOrArrayLayers=Math.min(i.depthOrArrayLayers,o.depthOrArrayLayers-i.z);const s=_n.computeMemoryLayout({format:this.format,width:i.width,height:i.height,depth:i.depthOrArrayLayers,byteAlignment:this.byteAlignment}),a=s.bytesPerPixel*i.width;if(i.bytesPerRow=n.bytesPerRow??s.bytesPerRow,i.rowsPerImage=n.rowsPerImage??i.height,i.bytesPerRow<a)throw new Error(`bytesPerRow (${i.bytesPerRow}) must be at least ${a} for ${this.format}`);if(i.rowsPerImage<i.height)throw new Error(`rowsPerImage (${i.rowsPerImage}) must be at least ${i.height} for ${this.format}`);const c=this.device.getTextureFormatInfo(this.format).bytesPerPixel;if(c&&i.bytesPerRow%c!==0)throw new Error(`bytesPerRow (${i.bytesPerRow}) must be a multiple of bytesPerPixel (${c}) for ${this.format}`);return i}_getMipLevelSize(e){return{width:Math.max(1,this.width>>e),height:"1d"===this.baseDimension?1:Math.max(1,this.height>>e),depthOrArrayLayers:"3d"===this.dimension?Math.max(1,this.depth>>e):this.depth}}getAllocatedByteLength(){let e=0;for(let t=0;t<this.mipLevels;t++){const{width:n,height:r,depthOrArrayLayers:o}=this._getMipLevelSize(t);e+=_n.computeMemoryLayout({format:this.format,width:n,height:r,depth:o,byteAlignment:1}).byteLength}return e*this.samples}static _omitUndefined(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>void 0!==e))}static defaultProps={...e.Resource.defaultProps,data:null,dimension:"2d",format:"rgba8unorm",usage:t.SAMPLE|t.RENDER|t.COPY_DST,width:void 0,height:void 0,depth:1,mipLevels:1,samples:void 0,sampler:{},view:void 0};static defaultCopyDataOptions={data:void 0,byteOffset:0,bytesPerRow:void 0,rowsPerImage:void 0,width:void 0,height:void 0,depthOrArrayLayers:void 0,depth:1,mipLevel:0,x:0,y:0,z:0,aspect:"all"};static defaultCopyExternalImageOptions={image:void 0,sourceX:0,sourceY:0,width:void 0,height:void 0,depth:1,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1};static defaultCopyElementImageOptions={element:void 0,width:void 0,height:void 0,sourceX:0,sourceY:0,sourceWidth:void 0,sourceHeight:void 0,depth:1,mipLevel:0,x:0,y:0,z:0,aspect:"all",colorSpace:"srgb",premultipliedAlpha:!1,flipY:!1};static defaultTextureReadOptions={x:0,y:0,z:0,width:void 0,height:void 0,depthOrArrayLayers:1,mipLevel:0,aspect:"all"};static defaultTextureWriteOptions={byteOffset:0,bytesPerRow:void 0,rowsPerImage:void 0,x:0,y:0,z:0,width:void 0,height:void 0,depthOrArrayLayers:1,mipLevel:0,aspect:"all"}},Ln=/^(?:uniform\s+)?(?:(?:lowp|mediump|highp)\s+)?[A-Za-z0-9_]+(?:<[^>]+>)?\s+([A-Za-z0-9_]+)(?:\s*\[[^\]]+\])?\s*;/,In=/((?:layout\s*\([^)]*\)\s*)*)uniform\s+([A-Za-z_][A-Za-z0-9_]*)\s*\{([\s\S]*?)\}\s*([A-Za-z_][A-Za-z0-9_]*)?\s*;/g;function Cn(e){return`${e.name}Uniforms`}function Rn(e,t){const n="wgsl"===t?e.source:"vertex"===t?e.vs:e.fs;if(!n)return null;return function(e,t,n){const r="wgsl"===t?function(e,t){const n=new RegExp(`\\bstruct\\s+${t}\\b`,"m").exec(e);if(!n)return null;const r=e.indexOf("{",n.index);if(r<0)return null;let o=0;for(let i=r;i<e.length;i++){const t=e[i];if("{"!==t){if("}"===t&&(o--,0===o))return e.slice(r+1,i)}else o++}return null}(e,n):function(e,t){return kn(e).find(e=>e.blockName===t)?.body||null}(e,n);if(!r)return null;const o=[];for(const i of r.split("\n")){const e=i.replace(/\/\/.*$/,"").trim();if(!e||e.startsWith("#"))continue;const n="wgsl"===t?e.match(/^([A-Za-z0-9_]+)\s*:/):e.match(Ln);n&&o.push(n[1])}return o}(n,"wgsl"===t?"wgsl":"glsl",Cn(e))}function $n(e,t,n={}){const r=function(e,t){const n=Object.keys(e.uniformTypes||{});if(!n.length)return null;const r=Rn(e,t);return r?{moduleName:e.name,uniformBlockName:Cn(e),stage:t,expectedUniformNames:n,actualUniformNames:r,matches:Nn(n,r)}:null}(e,t);if(!r||r.matches)return r;const o=function(e){const{expectedUniformNames:t,actualUniformNames:n}=e,r=t.filter(e=>!n.includes(e)),o=n.filter(e=>!t.includes(e)),i=[`Expected ${t.length} fields, found ${n.length}.`],s=function(e,t){const n=Math.min(e.length,t.length);for(let r=0;r<n;r++)if(e[r]!==t[r])return`First mismatch at field ${r+1}: expected ${e[r]}, found ${t[r]}.`;return e.length>t.length?`Shader block ends after field ${t.length}; expected next field ${e[t.length]}.`:t.length>e.length?`Shader block has extra field ${t.length}: ${t[e.length]}.`:null}(t,n);s&&i.push(s);r.length&&i.push(`Missing from shader block (${r.length}): ${zn(r)}.`);o.length&&i.push(`Unexpected in shader block (${o.length}): ${zn(o)}.`);t.length<=12&&n.length<=12&&(r.length||o.length)&&(i.push(`Expected: ${t.join(", ")}.`),i.push(`Actual: ${n.join(", ")}.`));return`${e.moduleName}: ${e.stage} shader uniform block ${e.uniformBlockName} does not match module.uniformTypes. ${i.join(" ")}`}(r);return n.log?.error?.(o,r)(),!1!==n.throwOnError&&Tt(!1,o),r}function kn(e){const t=[],n=function(e){return e.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,"")}(e);for(const r of n.matchAll(In)){const e=r[1]?.trim()||null;t.push({blockName:r[2],body:r[3],instanceName:r[4]||null,layoutQualifier:e,hasLayoutQualifier:Boolean(e),isStd140:Boolean(e&&/\blayout\s*\([^)]*\bstd140\b[^)]*\)/.exec(e))})}return t}function Nn(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function Dn(e){return e.replace(/\s+/g," ").trim()}function zn(e,t=8){if(e.length<=t)return e.join(", ");const n=e.length-t;return`${e.slice(0,t).join(", ")}, ... (${n} more)`}var Un=[[/^(#version[ \t]+(100|300[ \t]+es))?[ \t]*\n/,"#version 300 es\n"],[/\btexture(2D|2DProj|Cube)Lod(EXT)?\(/g,"textureLod("],[/\btexture(2D|2DProj|Cube)(EXT)?\(/g,"texture("]],Wn=[...Un,[Gn("attribute"),"in $1"],[Gn("varying"),"out $1"]],Fn=[...Un,[Gn("varying"),"in $1"]];function Bn(e,t){for(const[n,r]of t)e=e.replace(n,r);return e}function Gn(e){return new RegExp(`\\b${e}[ \\t]+(\\w+[ \\t]+\\w+(\\[\\w+\\])?;)`,"g")}function Vn(e,t,n="glsl"){let r="";for(const o in e){const i=e[o];if(r+=`${"wgsl"===n?"fn":"void"} ${i.signature} {\n`,i.header&&(r+=` ${i.header}`),t[o]){const e=t[o];e.sort((e,t)=>e.order-t.order);for(const t of e)r+=` ${t.injection}\n`}i.footer&&(r+=` ${i.footer}`),r+="}\n"}return r}function Yn(e){const t={vertex:{},fragment:{}};for(const n of e){let e,r;"string"!=typeof n?(e=n,r=e.hook):(e={},r=n),r=r.trim();const o=r.indexOf(":"),i=r.slice(0,o),s=r.slice(o+1),a=r.replace(/\(.+/,""),c=Object.assign(e,{signature:s});switch(i){case"vs":t.vertex[a]=c;break;case"fs":t.fragment[a]=c;break;default:throw new Error(i)}}return t}function Xn(e,t="unnamed"){const n=/#define[^\S\r\n]*SHADER_NAME[^\S\r\n]*([A-Za-z0-9_-]+)\s*/.exec(e);return n?n[1]:t}function qn(e){let t=100;const n=e.match(/[^\s]+/g);if(n&&n.length>=2&&"#version"===n[0]){const e=parseInt(n[1],10);Number.isFinite(e)&&(t=e)}if(100!==t&&300!==t)throw new Error(`Invalid GLSL version ${t}`);return t}var Hn=[new RegExp(`@binding\\(\\s*(\\d+)\\s*\\)\\s*@group\\(\\s*(\\d+)\\s*\\)\\s*${tt}\\s*:\\s*([^;]+);`,"g"),new RegExp(`@group\\(\\s*(\\d+)\\s*\\)\\s*@binding\\(\\s*(\\d+)\\s*\\)\\s*${tt}\\s*:\\s*([^;]+);`,"g")];function Zn(e,t=[]){const n=at(e),r=new Map;for(const i of t)r.set(Jn(i.name,i.group,i.location),i.moduleName);const o=[];for(const i of Hn){let e;for(i.lastIndex=0,e=i.exec(n);e;){const t=i===Hn[0],s=Number(e[t?1:2]),a=Number(e[t?2:1]),c=e[3]?.trim(),l=e[4],u=e[5].trim(),h=r.get(Jn(l,a,s));o.push(Kn({name:l,group:a,binding:s,owner:h?"module":"application",moduleName:h,accessDeclaration:c,resourceType:u})),e=i.exec(n)}}return o.sort((e,t)=>e.group!==t.group?e.group-t.group:e.binding!==t.binding?e.binding-t.binding:e.name.localeCompare(t.name))}function Kn(e){const t={name:e.name,group:e.group,binding:e.binding,owner:e.owner,kind:"unknown",moduleName:e.moduleName,resourceType:e.resourceType};if(e.accessDeclaration){const n=e.accessDeclaration.split(",").map(e=>e.trim());if("uniform"===n[0])return{...t,kind:"uniform",access:"uniform"};if("storage"===n[0]){const e=n[1]||"read_write";return{...t,kind:"read"===e?"read-only-storage":"storage",access:e}}}return"sampler"===e.resourceType||"sampler_comparison"===e.resourceType?{...t,kind:"sampler",samplerKind:"sampler_comparison"===e.resourceType?"comparison":"filtering"}:e.resourceType.startsWith("texture_storage_")?{...t,kind:"storage-texture",access:(n=e.resourceType,/,\s*([A-Za-z_][A-Za-z0-9_]*)\s*>$/.exec(n)?.[1]),viewDimension:Qn(e.resourceType)}:e.resourceType.startsWith("texture_")?{...t,kind:"texture",viewDimension:Qn(e.resourceType),sampleType:er(e.resourceType),multisampled:e.resourceType.startsWith("texture_multisampled_")}:t;var n}function Jn(e,t,n){return`${t}:${n}:${e}`}function Qn(e){return e.includes("cube_array")?"cube-array":e.includes("2d_array")?"2d-array":e.includes("cube")?"cube":e.includes("3d")?"3d":e.includes("2d")?"2d":e.includes("1d")?"1d":void 0}function er(e){return e.startsWith("texture_depth_")?"depth":e.includes("<i32>")?"sint":e.includes("<u32>")?"uint":e.includes("<f32>")?"float":void 0}var tr="([a-zA-Z_][a-zA-Z0-9_]*)",nr=/^\s*\#\s*if\s+(.+?)\s*(?:\/\/.*)?$/,rr=new RegExp(`^\\s*\\#\\s*ifdef\\s*${tr}\\s*$`),or=new RegExp(`^\\s*\\#\\s*ifndef\\s*${tr}\\s*(?:\\/\\/.*)?$`),ir=/^\s*\#\s*else\s*(?:\/\/.*)?$/,sr=/^\s*\#\s*endif\s*$/,ar=new RegExp(`^\\s*\\#\\s*ifdef\\s*${tr}\\s*(?:\\/\\/.*)?$`),cr=/^\s*\#\s*endif\s*(?:\/\/.*)?$/;function lr(e,t){const n=e.split("\n"),r=[],o=[];let i=!0;for(const s of n){const e=s.match(nr),n=s.match(ar)||s.match(rr),a=s.match(or),c=s.match(ir),l=s.match(cr)||s.match(sr);if(e){const n=ur(e[1],t?.defines||{}),r=i&&n;o.push({parentActive:i,branchTaken:n,active:r}),i=r}else if(n||a){const e=(n||a)?.[1],r=Boolean(t?.defines?.[e]),s=n?r:!r,c=i&&s;o.push({parentActive:i,branchTaken:s,active:c}),i=c}else if(c){const e=o[o.length-1];if(!e)throw new Error("Encountered #else without matching #if, #ifdef or #ifndef");e.active=e.parentActive&&!e.branchTaken,e.branchTaken=!0,i=e.active}else l?(o.pop(),i=!o.length||o[o.length-1].active):i&&r.push(s)}if(o.length>0)throw new Error("Unterminated conditional block in shader source");return r.join("\n")}function ur(e,t){const n=e.trim();if(/^[+-]?\d+(?:\.\d+)?$/.test(n))return 0!==Number(n);if("true"===n)return!0;if("false"===n)return!1;const r=n.match(new RegExp(`^!\\s*${tr}$`));if(r)return!Boolean(t[r[1]]);const o=n.match(new RegExp(`^${tr}$`));if(o)return Boolean(t[o[1]]);const i=n.match(new RegExp(`^defined\\s*\\(\\s*${tr}\\s*\\)$`));if(i)return void 0!==t[i[1]];const s=n.match(new RegExp(`^!\\s*defined\\s*\\(\\s*${tr}\\s*\\)$`));if(s)return void 0===t[s[1]];throw new Error(`Unsupported #if expression "${e}"`)}function hr(e,t,n){const r=Object.entries(n);if(0===r.length)return{source:e,declarations:"",initialization:""};const o=function(e,t){const n=new RegExp(`\\bfn\\s+${wr(t)}\\s*\\(`,"g").exec(e);if(!n)throw new Error(`ShaderPlugin vertex inputs require WGSL vertex entry point "${t}"`);const r=e.indexOf("(",n.index),o=_r(e,r,"(",")");if(o<0)throw new Error(`Unable to parse WGSL vertex entry point "${t}" parameters`);return{openParenthesis:r,closeParenthesis:o}}(e,t),i=e.slice(o.openParenthesis+1,o.closeParenthesis),s=function(e,t){const n=pr(t),r=new Set(mr(t)),o=function(e){const t=[],n=/:\s*([A-Za-z_][\w]*)\b/g;let r=n.exec(e);for(;r;)t.push(r[1]),r=n.exec(e);return t}(t);for(const i of o){const t=gr(e,i);if(null!==t){n.push(...pr(t));for(const e of mr(t))r.add(e)}}return{locations:n,names:r}}(e,i),a=new Set(s.locations),c=[],l=[],u=[];for(const[p,m]of r){if(s.names.has(p)||br(e,p))throw new Error(`ShaderPlugin vertex input "${p}" conflicts with an existing WGSL shader input or variable`);const t=yr(a);a.add(t);const n=`_luma_${p}`;c.push(`@location(${t}) ${n}: ${m}`),l.push(`var<private> ${p}: ${m};`),u.push(`${p} = ${n};`)}const h=i.trim()?",\n ":"\n ",f=i.trim()?"":"\n",d=`${i}${h}${c.join(",\n ")}${f}`;return{source:e.slice(0,o.openParenthesis+1)+d+e.slice(o.closeParenthesis),declarations:l.join("\n"),initialization:u.join("\n")}}function fr(t){const{primitiveType:n,components:r}=e.shaderTypeDecoder.getAttributeShaderTypeInfo(t),o="i32"===n?"int":"u32"===n?"uint":"float";return 1===r?o:`${"int"===o?"i":"uint"===o?"u":""}vec${r}`}function dr(e,t){const n=wr(t);if(new RegExp(`\\b(?:in|attribute)\\s+(?:(?:lowp|mediump|highp)\\s+)?[A-Za-z_][A-Za-z0-9_]*\\s+${n}\\s*(?:\\[|;)`).test(e))throw new Error(`ShaderPlugin vertex input "${t}" conflicts with an existing GLSL input`)}function pr(e){const t=[],n=/@location\s*\(\s*(\d+)\s*\)/g;let r=n.exec(e);for(;r;)t.push(Number(r[1])),r=n.exec(e);return t}function mr(e){const t=[],n=/(?:^|,)\s*(?:@[A-Za-z_][\w]*(?:\([^)]*\))?\s*)*([A-Za-z_][\w]*)\s*:/gm;let r=n.exec(e);for(;r;)t.push(r[1]),r=n.exec(e);return t}function gr(e,t){const n=new RegExp(`\\bstruct\\s+${wr(t)}\\s*\\{`,"g").exec(e);if(!n)return null;const r=e.indexOf("{",n.index),o=_r(e,r,"{","}");return o<0?null:e.slice(r+1,o)}function br(e,t){const n=wr(t),r=new RegExp(`\\b(?:var(?:<[^>]+>)?|let|const)\\s+${n}\\b`,"g");let o=r.exec(e);for(;o;){if(0===vr(e,o.index))return!0;o=r.exec(e)}return!1}function yr(e){let t=0;for(;e.has(t);)t++;return t}function _r(e,t,n,r){let o=0,i=0,s=!1;for(let a=t;a<e.length;a++){const t=e[a],c=e[a+1];if(s)"\n"===t&&(s=!1);else if(i>0)"/"===t&&"*"===c?(i++,a++):"*"===t&&"/"===c&&(i--,a++);else if("/"!==t||"/"!==c)if("/"!==t||"*"!==c){if(t===n&&o++,t===r&&0===--o)return a}else i=1,a++;else s=!0,a++}return-1}function vr(e,t){let n=0,r=0,o=!1;for(let i=0;i<t;i++){const t=e[i],s=e[i+1];o?"\n"===t&&(o=!1):r>0?"/"===t&&"*"===s?(r++,i++):"*"===t&&"/"===s&&(r--,i++):"/"===t&&"/"===s?(o=!0,i++):"/"===t&&"*"===s?(r=1,i++):"{"===t?n++:"}"===t&&n--}return n}function wr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Er(e,t,n,r){const o=Object.entries(r);if(0===o.length)return{source:e,declarations:"",vertexInitialization:"",fragmentInitialization:""};let i=e,s=xr(i,t,"vertex");const a=function(e,t){const n=e.slice(t.closeParenthesis+1,t.openBrace),r=/->\s*([A-Za-z_][\w]*)\s*$/.exec(n.trim());if(!r||null===Or(e,r[1]))throw new Error("ShaderPlugin varyings require the WGSL vertex entry point to return a named struct");return r[1]}(i,s);let c=xr(i,n,"fragment");const l=function(e,t){const n=[];for(const r of function(e,t){const n=[];let r=0,o=0,i=0;for(let s=0;s<e.length;s++){const a=e[s];"("===a&&o++,")"===a&&o--,"<"===a&&i++,">"===a&&i--,a===t&&0===o&&0===i&&(n.push(e.slice(r,s)),r=s+1)}return n.push(e.slice(r)),n}(t.parameters,",")){const t=/(?:@[A-Za-z_][\w]*(?:\([^)]*\))?\s*)*([A-Za-z_][\w]*)\s*:\s*([A-Za-z_][\w]*)\s*$/.exec(r.trim());t&&Or(e,t[2])&&n.push({name:t[1],type:t[2]})}if(1!==n.length)throw new Error(`ShaderPlugin varyings require exactly one named WGSL fragment input struct; found ${n.length}`);return n[0]}(i,c),u=Pr(i,a),h=Pr(i,l.type),f=new Set([...jr(s.parameters),...jr(u.body),...jr(c.parameters),...jr(h.body)]),d=new Set([...Sr(u.body),...Sr(h.body)]),p=[],m=[],g=[],b=[];for(const[_,v]of o){if(f.has(_)||Ar(i,_))throw new Error(`ShaderPlugin varying "${_}" conflicts with existing WGSL stage I/O or a module variable`);const e=Lr(d);d.add(e);const t="flat"===v.interpolation?" @interpolate(flat)":"";p.push(` @location(${e})${t} ${_}: ${v.type},`),m.push(`var<private> ${_}: ${v.type};`),g.push(`${_} = ${Cr(v.type)};`),b.push(`${_} = ${l.name}.${_};`)}!function(e,t,n,r){const o=new RegExp(`\\b${Nr(t)}\\s*\\(`,"g");let i=o.exec(e);for(;i;){if(i.index<n||i.index>r)throw new Error(`ShaderPlugin varying output struct "${t}" is constructed outside the selected vertex entry point`);i=o.exec(e)}}(i,a,s.openBrace,s.closeBrace),i=function(e,t,n,r){const o=new RegExp(`\\b${Nr(t)}\\s*\\(`,"g"),i=[];let s=o.exec(e);for(;s;){if(s.index>n.openBrace&&s.index<n.closeBrace){const r=e.indexOf("(",s.index),o=$r(e,r,"(",")");if(o<0||o>n.closeBrace)throw new Error(`Unable to parse WGSL output constructor "${t}"`);i.push({openParenthesis:r,closeParenthesis:o})}s=o.exec(e)}for(const a of i.sort((e,t)=>t.closeParenthesis-e.closeParenthesis)){const t=e.slice(a.openParenthesis+1,a.closeParenthesis).trim()?", ":"";e=e.slice(0,a.closeParenthesis)+t+r.join(", ")+e.slice(a.closeParenthesis)}return e}(i,a,s,o.map(([e])=>e)),s=xr(i,t,"vertex"),i=function(e,t,n){const r=function(e,t,n){const r=[];let o=t;for(;o<n;)if(o=Mr(e,o,n),"return"!==e.slice(o,o+6)||/[A-Za-z0-9_]/.test(e[o+6]||""))o++;else{const t=o+6,i=Tr(e,t,n);if(i<0)throw new Error("Unable to parse WGSL return statement in selected vertex entry point");r.push({start:o,expressionStart:t,semicolon:i}),o=i+1}return r}(e,t.openBrace+1,t.closeBrace);for(let o=r.length-1;o>=0;o--){const t=r[o],i=e.slice(t.expressionStart,t.semicolon).trim();if(!i)throw new Error("ShaderPlugin varying vertex entry point cannot use an empty return");const s=`_luma_vertexOutput${o}`,a=`{\nvar ${s} = ${i};\n${n.map(e=>`${s}.${e} = ${e};`).join("\n")}\nreturn ${s};\n}`;e=e.slice(0,t.start)+a+e.slice(t.semicolon+1)}return e}(i,s,o.map(([e])=>e));const y=(a===l.type?[a]:[a,l.type]).map(e=>Pr(i,e).closeBrace).sort((e,t)=>t-e);for(const _ of y)i=i.slice(0,_)+`${p.join("\n")}\n`+i.slice(_);if(c=xr(i,n,"fragment"),!new RegExp(`\\b${Nr(l.name)}\\s*:`).test(c.parameters))throw new Error(`Unable to preserve WGSL fragment input "${l.name}"`);return{source:i,declarations:m.join("\n"),vertexInitialization:g.join("\n"),fragmentInitialization:b.join("\n")}}function xr(e,t,n){const r=new RegExp(`\\bfn\\s+${Nr(t)}\\s*\\(`,"g").exec(e);if(!r)throw new Error(`ShaderPlugin varyings require WGSL ${n} entry point "${t}"`);const o=e.indexOf("(",r.index),i=$r(e,o,"(",")"),s=e.indexOf("{",i),a=$r(e,s,"{","}");if(i<0||s<0||a<0)throw new Error(`Unable to parse WGSL ${n} entry point "${t}"`);return{openParenthesis:o,closeParenthesis:i,openBrace:s,closeBrace:a,parameters:e.slice(o+1,i)}}function Pr(e,t){const n=Or(e,t);if(!n)throw new Error(`Unable to find WGSL stage I/O struct "${t}"`);return n}function Or(e,t){const n=new RegExp(`\\bstruct\\s+${Nr(t)}\\s*\\{`,"g").exec(e);if(!n)return null;const r=e.indexOf("{",n.index),o=$r(e,r,"{","}");return o<0?null:{openBrace:r,closeBrace:o,body:e.slice(r+1,o)}}function Tr(e,t,n){let r=0,o=0;for(let i=t;i<n;i++){const t=Mr(e,i,n);if(t!==i){i=t-1;continue}const s=e[i];if("("===s&&r++,")"===s&&r--,"["===s&&o++,"]"===s&&o--,";"===s&&0===r&&0===o)return i}return-1}function Mr(e,t,n){let r=t;if("/"===e[r]&&"/"===e[r+1]){const t=e.indexOf("\n",r+2);return t<0||t>n?n:t+1}if("/"===e[r]&&"*"===e[r+1]){let t=1;for(r+=2;r<n&&t>0;)"/"===e[r]&&"*"===e[r+1]?(t++,r+=2):"*"===e[r]&&"/"===e[r+1]?(t--,r+=2):r++}return r}function Sr(e){const t=[],n=/@location\s*\(\s*(\d+)\s*\)/g;let r=n.exec(e);for(;r;)t.push(Number(r[1])),r=n.exec(e);return t}function jr(e){const t=[],n=/(?:^|,)\s*(?:@[A-Za-z_][\w]*(?:\([^)]*\))?\s*)*([A-Za-z_][\w]*)\s*:/gm;let r=n.exec(e);for(;r;)t.push(r[1]),r=n.exec(e);return t}function Ar(e,t){const n=new RegExp(`\\b(?:var(?:<[^>]+>)?|let|const)\\s+${Nr(t)}\\b`,"g");let r=n.exec(e);for(;r;){if(0===kr(e,r.index))return!0;r=n.exec(e)}return!1}function Lr(e){let t=0;for(;e.has(t);)t++;return t}function Ir(t){const{primitiveType:n,components:r}=e.shaderTypeDecoder.getAttributeShaderTypeInfo(t),o="u32"===n?"0u":"i32"===n?"0":"0.0";return 1===r?o:`${fr(t)}(${o})`}function Cr(t){const{primitiveType:n,components:r}=e.shaderTypeDecoder.getAttributeShaderTypeInfo(t),o=`${n}(0)`;return 1===r?o:`${t}(${o})`}function Rr(e,t){if(new RegExp(`\\b(?:flat\\s+|smooth\\s+)?(?:in|out|varying)\\s+(?:(?:lowp|mediump|highp)\\s+)?[A-Za-z_][A-Za-z0-9_]*\\s+${Nr(t)}\\s*(?:\\[|;)`).test(e))throw new Error(`ShaderPlugin varying "${t}" conflicts with existing GLSL stage I/O`)}function $r(e,t,n,r){let o=0,i=0,s=!1;for(let a=t;a<e.length;a++){const t=e[a],c=e[a+1];if(s)"\n"===t&&(s=!1);else if(i>0)"/"===t&&"*"===c?(i++,a++):"*"===t&&"/"===c&&(i--,a++);else if("/"!==t||"/"!==c)if("/"!==t||"*"!==c){if(t===n&&o++,t===r&&0===--o)return a}else i=1,a++;else s=!0,a++}return-1}function kr(e,t){let n=0;for(let r=0;r<t;r++){const o=Mr(e,r,t);o===r?("{"===e[r]&&n++,"}"===e[r]&&n--):r=o-1}return n}function Nr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var Dr=`\n\n${Rt}\n`,zr=100;function Ur(e){const t=Ft(e.modules||[]),{source:n,bindingAssignments:r}=function(e,t){const{source:n,stage:r,modules:o,defines:i={},hookFunctions:s=[],inject:a={},pluginInjections:c={},pluginVertexInputs:l={},pluginVaryings:u={},vertexEntryPoint:h="vertexMain",fragmentEntryPoint:f="fragmentMain",log:d}=t;Tt("string"==typeof n,"shader source must be a string");const p=lr(n,{defines:i}),m=hr(p,h,l),g=Er(m.source,h,f,u),b=g.source;let y="";const _=Yn(s),v={},w={},E={};Gr(c,v,w,E);for(const S in a){const e="string"==typeof a[S]?{injection:a[S],order:0}:a[S],t=/^(v|f)s:(#)?([\w-]+)$/.exec(S);if(t){const n=t[2],r=t[3];n?"decl"===r?w[S]=[e]:E[S]=[e]:v[S]=[e]}else E[S]=[e]}(function(e,t,n,r){e&&(n["vs:#decl"]=n["vs:#decl"]||[],n["vs:#decl"].push({injection:e,order:Number.MIN_SAFE_INTEGER}));t&&(r["vs:#main-start"]=r["vs:#main-start"]||[],r["vs:#main-start"].push({injection:t,order:Number.MIN_SAFE_INTEGER}))})(m.declarations,m.initialization,w,E),function(e,t,n){e.declarations&&(t["vs:#decl"]=t["vs:#decl"]||[],t["vs:#decl"].push({injection:e.declarations,order:Number.MIN_SAFE_INTEGER}));e.vertexInitialization&&(n["vs:#main-start"]=n["vs:#main-start"]||[],n["vs:#main-start"].push({injection:e.vertexInitialization,order:Number.MIN_SAFE_INTEGER}));e.fragmentInitialization&&(n["fs:#main-start"]=n["fs:#main-start"]||[],n["fs:#main-start"].push({injection:e.fragmentInitialization,order:Number.MIN_SAFE_INTEGER}))}(g,w,E);const x=o,P=function(e){const t=ct(e,ot),n=new Map;for(const i of t){if("auto"===i.bindingToken)continue;const e=Number(i.bindingToken),t=Number(i.groupToken);Hr(t,e,i.name),Kr(n,t,e,`application binding "${i.name}"`)}const r={sawSupportedBindingDeclaration:t.length>0},o=lt(e,ot,e=>function(e,t,n){const{match:r,bindingToken:o,groupToken:i,name:s}=e,a=Number(i);if("auto"===o){const e=function(e,t){const n=t.get(e)||new Set;let r=0;for(;n.has(r);)r++;return r}(a,t);return Hr(a,e,s),Kr(t,a,e,`application binding "${s}"`),r.replace(/@binding\(\s*auto\s*\)/,`@binding(${e})`)}return n.sawSupportedBindingDeclaration=!0,r}(e,n,r));if(ut(e)&&!r.sawSupportedBindingDeclaration)throw new Error('Unsupported @binding(auto) declaration form in application WGSL. Use adjacent "@group(N)" and "@binding(auto)" decorators followed by a bindable "var" declaration.');return{source:o}}(b),O=function(e){const t=new Map;for(const n of ct(e,it)){const e=Number(n.bindingToken),r=Number(n.groupToken);Hr(r,e,n.name),Kr(t,r,e,`application binding "${n.name}"`)}return t}(P.source),T=function(e,t,n,r){const o=new Map;if(!t)return o;for(const i of e)for(const e of qr(i,r)){const r=Jr(e.group,i.name,e.name),s=t.get(r);if(void 0!==s){const t=o.get(e.group)||new Map,i=t.get(s);if(i&&i!==r)throw new Error(`Duplicate WGSL binding reservation for modules "${i}" and "${r}": group ${e.group}, binding ${s}.`);Kr(n,e.group,s,`registered module binding "${r}"`),t.set(s,r),o.set(e.group,t)}}return o}(x,t._bindingRegistry,O,i),M=[];for(const S of x){d&&Ut(S,b,d);const e=Xr(lr(Yr(S,"wgsl",d),{defines:i}),S,{usedBindingsByGroup:O,bindingRegistry:t._bindingRegistry,reservedBindingKeysByGroup:T});M.push(...e.bindingAssignments);y+=e.source;const n=Vr(S);for(const t in n){const e=/^(v|f)s:#([\w-]+)$/.exec(t);if(e){const r="decl"===e[2]?w:E;r[t]=r[t]||[],r[t].push(n[t])}else v[t]=v[t]||[],v[t].push(n[t])}}return y+=Dr,y=Nt(y,r,function(e){const t=[...e["vs:#decl"]||[],...e["fs:#decl"]||[]];return t.length?{"vs:#decl":t}:{}}(w),!1,"wgsl",{vertex:h,fragment:f}),y+=function(e,t){return Vn(e.vertex,t,"wgsl")+Vn(e.fragment,t,"wgsl")}(_,v),y+=function(e){if(0===e.length)return"";let t="// ----- MODULE WGSL BINDING ASSIGNMENTS ---------------\n";for(const n of e)t+=`// ${n.moduleName}.${n.name} -> @group(${n.group}) @binding(${n.location})\n`;return t+="\n",t}(M),y+=P.source,y=Nt(y,r,E,!1,"wgsl",{vertex:h,fragment:f}),function(e){const t=function(e,t){return ct(e,t===rt||t===ot?st:t).find(e=>"auto"===e.bindingToken)}(e,rt);if(!t)return;const n=function(e,t){const n=/^\/\/ ----- MODULE ([^\n]+) ---------------$/gm;let r,o;o=n.exec(e);for(;o&&o.index<=t;)r=o[1],o=n.exec(e);return r}(e,t.index);if(n)throw new Error(`Unresolved @binding(auto) for module "${n}" binding "${t.name}" remained in assembled WGSL source.`);if(function(e,t){const n=e.indexOf(Dr);return!(n>=0)||t>n}(e,t.index))throw new Error(`Unresolved @binding(auto) for application binding "${t.name}" remained in assembled WGSL source.`);throw new Error(`Unresolved @binding(auto) remained in assembled WGSL source near "${function(e){return e.replace(/\s+/g," ").trim()}(t.match)}".`)}(y),{source:y,bindingAssignments:M}}(e.platformInfo,{...e,source:e.source,stage:"vertex",modules:t});return{source:n,getUniforms:Br(t),bindingAssignments:r,bindingTable:Zn(n,r),shaderLayout:ht(n,{vertexEntryPoint:e.vertexEntryPoint,scanVertexAttributes:e.scanVertexAttributes})}}function Wr(e){const{vs:t,fs:n}=e,r=Ft(e.modules||[]);return{vs:Fr(e.platformInfo,{...e,source:t,stage:"vertex",modules:r}),fs:Fr(e.platformInfo,{...e,source:n,stage:"fragment",modules:r}),getUniforms:Br(r)}}function Fr(e,t){const{source:n,stage:r,language:o="glsl",modules:i,defines:s={},hookFunctions:a=[],inject:c={},pluginInjections:l={},pluginVertexInputs:u={},pluginVaryings:h={},prologue:f=!0,log:d}=t;Tt("string"==typeof n,"shader source must be a string");const p="glsl"===o?function(e,t){return{name:Xn(e,t),language:"glsl",version:qn(e)}}(n).version:-1,m=e.shaderLanguageVersion,g=100===p?"#version 100":"#version 300 es",b=n.split("\n").slice(1).join("\n"),y={};i.forEach(e=>{Object.assign(y,e.defines)}),Object.assign(y,s);let _="";switch(o){case"wgsl":break;case"glsl":_=f?`${g}\n\n// ----- PROLOGUE -------------------------\n#define SHADER_TYPE_${r.toUpperCase()}\n\n${function(e){switch(e?.gpu.toLowerCase()){case"apple":return"#define APPLE_GPU\n// Apple optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n";case"nvidia":return"#define NVIDIA_GPU\n// Nvidia optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n";case"intel":return"#define INTEL_GPU\n// Intel optimizes away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Intel's built-in 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n";case"amd":return"#define AMD_GPU\n";default:return"#define DEFAULT_GPU\n// Prevent driver from optimizing away the calculation necessary for emulated fp64\n#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1\n// Headless Chrome's software shader 'tan' function doesn't have acceptable precision\n#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1\n// If the GPU doesn't have full 32 bits precision, will causes overflow\n#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1\n"}}(e)}\n${"fragment"===r?"precision highp float;\n":""}\n\n// ----- APPLICATION DEFINES -------------------------\n\n${function(e={}){let t="";for(const n in e){const r=e[n];(r||Number.isFinite(r))&&(t+=`#define ${n.toUpperCase()} ${e[n]}\n`)}return t}(y)}\n\n`:`${g}\n`}const v=Yn(a),w={},E={},x={};Gr(l,w,E,x);for(const O in c){const e="string"==typeof c[O]?{injection:c[O],order:0}:c[O],t=/^(v|f)s:(#)?([\w-]+)$/.exec(O);if(t){const n=t[2],r=t[3];n?"decl"===r?E[O]=[e]:x[O]=[e]:w[O]=[e]}else x[O]=[e]}if("vertex"===r){const e=function(e,t){const n=[];for(const[r,o]of Object.entries(t))dr(e,r),n.push(`in ${fr(o)} ${r};`);return n.join("\n")}(b,u);e&&(E["vs:#decl"]=E["vs:#decl"]||[],E["vs:#decl"].push({injection:e,order:Number.MIN_SAFE_INTEGER}))}const P=function(e,t,n){const r=[],o=[];for(const[i,s]of Object.entries(n)){Rr(e,i);const n="flat"===s.interpolation?"flat ":"",a="vertex"===t?"out":"in";r.push(`${n}${a} ${fr(s.type)} ${i};`),"vertex"===t&&o.push(`${i} = ${Ir(s.type)};`)}return{declarations:r.join("\n"),initialization:o.join("\n")}}(b,r,h);if(P.declarations){const e="vertex"===r?"vs:#decl":"fs:#decl";E[e]=E[e]||[],E[e].push({injection:P.declarations,order:Number.MIN_SAFE_INTEGER})}P.initialization&&(x["vs:#main-start"]=x["vs:#main-start"]||[],x["vs:#main-start"].push({injection:P.initialization,order:Number.MIN_SAFE_INTEGER}));for(const O of i){d&&Ut(O,b,d);_+=Yr(O,r,d);const e=O.instance?.normalizedInjections[r]||{};for(const t in e){const n=/^(v|f)s:#([\w-]+)$/.exec(t);if(n){const r="decl"===n[2]?E:x;r[t]=r[t]||[],r[t].push(e[t])}else w[t]=w[t]||[],w[t].push(e[t])}}return _+="// ----- MAIN SHADER SOURCE -------------------------",_+=Dr,_=Nt(_,r,E),_+=Vn(v[r],w),_+=b,_=Nt(_,r,x),"glsl"===o&&p!==m&&(_=function(e,t){if(300!==Number(e.match(/^#version[ \t]+(\d+)/m)?.[1]||100))throw new Error("luma.gl v9 only supports GLSL 3.00 shader sources");switch(t){case"vertex":return Bn(e,Wn);case"fragment":return Bn(e,Fn);default:throw new Error(t)}}(_,r)),"glsl"===o&&function(e,t,n,r){const o=kn(e).filter(e=>!e.isStd140),i=new Set;for(const s of o){if(i.has(s.blockName))continue;i.add(s.blockName);const e=r?.label?`${r.label} `:"",o=s.hasLayoutQualifier?`declares ${Dn(s.layoutQualifier)} instead of layout(std140)`:"does not declare layout(std140)",a=`${e}${t} shader uniform block ${s.blockName} ${o}. luma.gl host-side shader block packing assumes explicit layout(std140) for GLSL uniform blocks. Add \`layout(std140)\` to the block declaration.`;n?.warn?.(a,s)()}}(_,r,d),_.trim()}function Br(e){return function(t){const n={};for(const r of e){const e=r.getUniforms?.(t,n);Object.assign(n,e)}return n}}function Gr(e,t,n,r){for(const o in e){const i=/^(v|f)s:(#)?([\w-]+)$/.exec(o);if(i){const s=i[2],a=i[3],c=s?"decl"===a?n:r:t;c[o]=c[o]||[],c[o].push(...e[o])}else r[o]=r[o]||[],r[o].push(...e[o])}}function Vr(e){return{...e.instance?.normalizedInjections.vertex||{},...e.instance?.normalizedInjections.fragment||{}}}function Yr(e,t,n){let r;switch(t){case"vertex":r=e.vs||"";break;case"fragment":r=e.fs||"";break;case"wgsl":r=e.source||"";break;default:Tt(!1)}if(!e.name)throw new Error("Shader module must have a name");$n(e,t,{log:n});const o=e.name.toUpperCase().replace(/[^0-9a-z]/gi,"_");let i=`// ----- MODULE ${e.name} ---------------\n\n`;return"wgsl"!==t&&(i+=`#define MODULE_${o}\n`),i+=`${r}\n`,i}function Xr(e,t,n){const r=[],o={sawSupportedBindingDeclaration:ct(e,rt).length>0,nextHintedBindingLocation:"number"==typeof t.firstBindingSlot?t.firstBindingSlot:null},i=lt(e,rt,e=>function(e,t){const{module:n,context:r,bindingAssignments:o,relocationState:i}=t,{match:s,bindingToken:a,groupToken:c,name:l}=e,u=Number(c);if("auto"===a){const e=Jr(u,n.name,l),t=r.bindingRegistry?.get(e),a=void 0!==t?t:function(e,t,n,r,o){const i=t.get(e)||new Set,s=new Set,a=`${e}:`,c=`${a}${n}:`;for(const[u,h]of o||[])u.startsWith(c)&&s.add(h);let l=r??(0===e?zr:i.size>0?Math.max(...i)+1:0);for(;i.has(l)||s.has(l);)l++;for(const[u,h]of o||[])h===l&&u.startsWith(a)&&o?.delete(u);return l}(u,r.usedBindingsByGroup,n.name,i.nextHintedBindingLocation??void 0,r.bindingRegistry);return Zr(n.name,u,a,l),void 0!==t&&function(e,t,n,r){const o=e.get(t);if(!o)return!1;const i=o.get(n);if(!i)return!1;if(i!==r)throw new Error(`Registered module binding "${r}" collided with "${i}": group ${t}, binding ${n}.`);return!0}(r.reservedBindingKeysByGroup,u,a,e)?(o.push({moduleName:n.name,name:l,group:u,location:a}),s.replace(/@binding\(\s*auto\s*\)/,`@binding(${a})`)):(Kr(r.usedBindingsByGroup,u,a,`module "${n.name}" binding "${l}"`),r.bindingRegistry?.set(e,a),o.push({moduleName:n.name,name:l,group:u,location:a}),null!==i.nextHintedBindingLocation&&void 0===t&&(i.nextHintedBindingLocation=a+1),s.replace(/@binding\(\s*auto\s*\)/,`@binding(${a})`))}const h=Number(a);return Zr(n.name,u,h,l),Kr(r.usedBindingsByGroup,u,h,`module "${n.name}" binding "${l}"`),o.push({moduleName:n.name,name:l,group:u,location:h}),s}(e,{module:t,context:n,bindingAssignments:r,relocationState:o}));if(ut(e)&&!o.sawSupportedBindingDeclaration)throw new Error(`Unsupported @binding(auto) declaration form in module "${t.name}". Use adjacent "@group(N)" and "@binding(auto)" decorators followed by a bindable "var" declaration.`);return{source:i,bindingAssignments:r}}function qr(e,t){const n=[],r=lr(e.source||"",{defines:t});for(const o of ct(r,rt))n.push({name:o.name,group:Number(o.groupToken)});return n}function Hr(e,t,n){if(0===e&&t>=zr)throw new Error(`Application binding "${n}" in group 0 uses reserved binding ${t}. Application-owned explicit group-0 bindings must stay below 100.`)}function Zr(e,t,n,r){if(0===t&&n<zr)throw new Error(`Module "${e}" binding "${r}" in group 0 uses reserved application binding ${n}. Module-owned explicit group-0 bindings must be 100 or higher.`)}function Kr(e,t,n,r){const o=e.get(t)||new Set;if(o.has(n))throw new Error(`Duplicate WGSL binding assignment for ${r}: group ${t}, binding ${n}.`);o.add(n),e.set(t,o)}function Jr(e,t,n){return`${e}:${t}:${n}`}var Qr=class e{static defaultShaderAssemblers={};_hookFunctions=[];_defaultModules=[];static getDefaultShaderAssembler(t){return Tt("glsl"===t||"wgsl"===t),"wgsl"===t?(e.defaultShaderAssemblers.wgsl=e.defaultShaderAssemblers.wgsl||new to,e.defaultShaderAssemblers.wgsl):(e.defaultShaderAssemblers.glsl=e.defaultShaderAssemblers.glsl||new eo,e.defaultShaderAssemblers.glsl)}addDefaultModule(e){this._defaultModules.find(t=>t.name===("string"==typeof e?e:e.name))||this._defaultModules.push(e)}removeDefaultModule(e){const t="string"==typeof e?e:e.name;this._defaultModules=this._defaultModules.filter(e=>e.name!==t)}addShaderHook(e,t){t&&(e=Object.assign(t,{hook:e})),this._hookFunctions.push(e)}_getModuleList(e=[]){const t=new Array(this._defaultModules.length+e.length),n={};let r=0;for(let o=0,i=this._defaultModules.length;o<i;++o){const e=this._defaultModules[o],i=e.name;t[r++]=e,n[i]=!0}for(let o=0,i=e.length;o<i;++o){const i=e[o],s=i.name;n[s]||(t[r++]=i,n[s]=!0)}return t.length=r,zt(t),t}},eo=class extends Qr{shaderLanguage="glsl";assembleGLSLShaderPair(e){const t=this._getModuleList(e.modules),n=this._hookFunctions;return{...Wr({...e,vs:e.vs,fs:e.fs,modules:t,hookFunctions:n}),modules:t}}},to=class e extends Qr{shaderLanguage="wgsl";_wgslBindingRegistry=new Map;assembleWGSLShader(t){const n=this._getModuleList(t.modules),r=this._hookFunctions,o=e.getShaderPreprocessorDefines(t,n),i="wgsl"===t.platformInfo.shaderLanguage&&t.source?lr(t.source,{defines:o}):t.source,{source:s,getUniforms:a,bindingAssignments:c}=Ur({...t,source:i,defines:o,_bindingRegistry:this._wgslBindingRegistry,modules:n,hookFunctions:r}),l="wgsl"===t.platformInfo.shaderLanguage?lr(s,{defines:o}):s;return{source:l,getUniforms:a,modules:n,bindingAssignments:c,bindingTable:Zn(l,c),shaderLayout:ht(l,{vertexEntryPoint:t.vertexEntryPoint,scanVertexAttributes:t.scanVertexAttributes})}}static getShaderPreprocessorDefines(t,n){return{...e.getPlatformPreprocessorDefines(t.platformInfo),...n.reduce((e,t)=>(Object.assign(e,t.defines),e),{}),...t.defines}}static getPlatformPreprocessorDefines(e){const t=e.limits||{};return{LUMA_SUPPORTS_VERTEX_STORAGE_BUFFERS:"webgpu"===e.type&&(t.maxStorageBuffersInVertexStage||0)>0,LUMA_FP32_TAN_PRECISION_WORKAROUND:"webgpu"===e.type&&"nvidia"!==e.gpu.toLowerCase()&&"amd"!==e.gpu.toLowerCase(),LUMA_FP64_INTEGER_ARITHMETIC:"webgpu"===e.type&&"apple"===e.gpu.toLowerCase()}}},no=1/Math.PI*180,ro=1/180*Math.PI;globalThis.mathgl=globalThis.mathgl||{config:{EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1}};var oo=globalThis.mathgl.config;function io(e,{precision:t=oo.precision}={}){return e=function(e){return Math.round(e/oo.EPSILON)*oo.EPSILON}(e),`${parseFloat(e.toPrecision(t))}`}function so(e){return Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ao(e){return function(e,t){return po(e,e=>e*ro,t)}(e)}function co(e){return lo(e)}function lo(e,t){return po(e,e=>e*no,t)}function uo(e,t,n){return po(e,e=>Math.max(t,Math.min(n,e)))}function ho(e,t,n){return so(e)?e.map((e,r)=>ho(e,t[r],n)):n*t+(1-n)*e}function fo(e,t,n){const r=oo.EPSILON;n&&(oo.EPSILON=n);try{if(e===t)return!0;if(so(e)&&so(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;++n)if(!fo(e[n],t[n]))return!1;return!0}return e&&e.equals?e.equals(t):t&&t.equals?t.equals(e):"number"==typeof e&&"number"==typeof t&&Math.abs(e-t)<=oo.EPSILON*Math.max(1,Math.abs(e),Math.abs(t))}finally{oo.EPSILON=r}}function po(e,t,n){if(so(e)){const r=e;n=n||function(e){return e.clone?e.clone():new Array(e.length)}(r);for(let o=0;o<n.length&&o<r.length;++o){const r="number"==typeof e?e:e[o];n[o]=t(r,o,n)}return n}return t(e)}var mo=class extends Array{clone(){return(new this.constructor).copy(this)}fromArray(e,t=0){for(let n=0;n<this.ELEMENTS;++n)this[n]=e[n+t];return this.check()}toArray(e=[],t=0){for(let n=0;n<this.ELEMENTS;++n)e[t+n]=this[n];return e}toObject(e){return e}from(e){return Array.isArray(e)?this.copy(e):this.fromObject(e)}to(e){return e===this?this:so(e)?this.toArray(e):this.toObject(e)}toTarget(e){return e?this.to(e):this}toFloat32Array(){return new Float32Array(this)}toString(){return this.formatString(oo)}formatString(e){let t="";for(let n=0;n<this.ELEMENTS;++n)t+=(n>0?", ":"")+io(this[n],e);return`${e.printTypes?this.constructor.name:""}[${t}]`}equals(e){if(!e||this.length!==e.length)return!1;for(let t=0;t<this.ELEMENTS;++t)if(!fo(this[t],e[t]))return!1;return!0}exactEquals(e){if(!e||this.length!==e.length)return!1;for(let t=0;t<this.ELEMENTS;++t)if(this[t]!==e[t])return!1;return!0}negate(){for(let e=0;e<this.ELEMENTS;++e)this[e]=-this[e];return this.check()}lerp(e,t,n){if(void 0===n)return this.lerp(this,e,t);for(let r=0;r<this.ELEMENTS;++r){const o=e[r],i="number"==typeof t?t:t[r];this[r]=o+n*(i-o)}return this.check()}min(e){for(let t=0;t<this.ELEMENTS;++t)this[t]=Math.min(e[t],this[t]);return this.check()}max(e){for(let t=0;t<this.ELEMENTS;++t)this[t]=Math.max(e[t],this[t]);return this.check()}clamp(e,t){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.min(Math.max(this[n],e[n]),t[n]);return this.check()}add(...e){for(const t of e)for(let e=0;e<this.ELEMENTS;++e)this[e]+=t[e];return this.check()}subtract(...e){for(const t of e)for(let e=0;e<this.ELEMENTS;++e)this[e]-=t[e];return this.check()}scale(e){if("number"==typeof e)for(let t=0;t<this.ELEMENTS;++t)this[t]*=e;else for(let t=0;t<this.ELEMENTS&&t<e.length;++t)this[t]*=e[t];return this.check()}multiplyByScalar(e){for(let t=0;t<this.ELEMENTS;++t)this[t]*=e;return this.check()}check(){if(oo.debug&&!this.validate())throw new Error(`math.gl: ${this.constructor.name} some fields set to invalid numbers'`);return this}validate(){let e=this.length===this.ELEMENTS;for(let t=0;t<this.ELEMENTS;++t)e=e&&Number.isFinite(this[t]);return e}sub(e){return this.subtract(e)}setScalar(e){for(let t=0;t<this.ELEMENTS;++t)this[t]=e;return this.check()}addScalar(e){for(let t=0;t<this.ELEMENTS;++t)this[t]+=e;return this.check()}subScalar(e){return this.addScalar(-e)}multiplyScalar(e){for(let t=0;t<this.ELEMENTS;++t)this[t]*=e;return this.check()}divideScalar(e){return this.multiplyByScalar(1/e)}clampScalar(e,t){for(let n=0;n<this.ELEMENTS;++n)this[n]=Math.min(Math.max(this[n],e),t);return this.check()}get elements(){return this}};function go(e){if(!Number.isFinite(e))throw new Error(`Invalid number ${JSON.stringify(e)}`);return e}function bo(e,t,n=""){if(oo.debug&&!function(e,t){if(e.length!==t)return!1;for(let n=0;n<e.length;++n)if(!Number.isFinite(e[n]))return!1;return!0}(e,t))throw new Error(`math.gl: ${n} some fields set to invalid numbers'`);return e}function yo(e,t){if(!e)throw new Error(`math.gl assertion ${t}`)}var _o=class extends mo{get x(){return this[0]}set x(e){this[0]=go(e)}get y(){return this[1]}set y(e){this[1]=go(e)}len(){return Math.sqrt(this.lengthSquared())}magnitude(){return this.len()}lengthSquared(){let e=0;for(let t=0;t<this.ELEMENTS;++t)e+=this[t]*this[t];return e}magnitudeSquared(){return this.lengthSquared()}distance(e){return Math.sqrt(this.distanceSquared(e))}distanceSquared(e){let t=0;for(let n=0;n<this.ELEMENTS;++n){const r=this[n]-e[n];t+=r*r}return go(t)}dot(e){let t=0;for(let n=0;n<this.ELEMENTS;++n)t+=this[n]*e[n];return go(t)}normalize(){const e=this.magnitude();if(0!==e)for(let t=0;t<this.ELEMENTS;++t)this[t]/=e;return this.check()}multiply(...e){for(const t of e)for(let e=0;e<this.ELEMENTS;++e)this[e]*=t[e];return this.check()}divide(...e){for(const t of e)for(let e=0;e<this.ELEMENTS;++e)this[e]/=t[e];return this.check()}lengthSq(){return this.lengthSquared()}distanceTo(e){return this.distance(e)}distanceToSquared(e){return this.distanceSquared(e)}getComponent(e){return yo(e>=0&&e<this.ELEMENTS,"index is out of range"),go(this[e])}setComponent(e,t){return yo(e>=0&&e<this.ELEMENTS,"index is out of range"),this[e]=t,this.check()}addVectors(e,t){return this.copy(e).add(t)}subVectors(e,t){return this.copy(e).subtract(t)}multiplyVectors(e,t){return this.copy(e).multiply(t)}addScaledVector(e,t){return this.add(new this.constructor(e).multiplyScalar(t))}},vo="undefined"!=typeof Float32Array?Float32Array:Array;function wo(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e}function Eo(e,t,n,r){const o=t[0],i=t[1];return e[0]=o+r*(n[0]-o),e[1]=i+r*(n[1]-i),e}function xo(e,t,n){const r=t[0],o=t[1];return e[0]=n[0]*r+n[2]*o,e[1]=n[1]*r+n[3]*o,e}function Po(e,t,n){const r=t[0],o=t[1];return e[0]=n[0]*r+n[2]*o+n[4],e[1]=n[1]*r+n[3]*o+n[5],e}function Oo(e,t,n){const r=t[0],o=t[1];return e[0]=n[0]*r+n[3]*o+n[6],e[1]=n[1]*r+n[4]*o+n[7],e}function To(e,t,n){const r=t[0],o=t[1];return e[0]=n[0]*r+n[4]*o+n[12],e[1]=n[1]*r+n[5]*o+n[13],e}var Mo=function(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e};!function(){const e=function(){const e=new vo(2);return vo!=Float32Array&&(e[0]=0,e[1]=0),e}()}();function So(e,t,n){const r=t[0],o=t[1],i=n[3]*r+n[7]*o||1;return e[0]=(n[0]*r+n[4]*o)/i,e[1]=(n[1]*r+n[5]*o)/i,e}function jo(e,t,n){const r=t[0],o=t[1],i=t[2],s=n[3]*r+n[7]*o+n[11]*i||1;return e[0]=(n[0]*r+n[4]*o+n[8]*i)/s,e[1]=(n[1]*r+n[5]*o+n[9]*i)/s,e[2]=(n[2]*r+n[6]*o+n[10]*i)/s,e}function Ao(e,t,n){const r=t[0],o=t[1];return e[0]=n[0]*r+n[2]*o,e[1]=n[1]*r+n[3]*o,e[2]=t[2],e[3]=t[3],e}function Lo(e,t,n){const r=t[0],o=t[1],i=t[2];return e[0]=n[0]*r+n[3]*o+n[6]*i,e[1]=n[1]*r+n[4]*o+n[7]*i,e[2]=n[2]*r+n[5]*o+n[8]*i,e[3]=t[3],e}function Io(){const e=new vo(3);return vo!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}function Co(e){const t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}function Ro(e,t,n){const r=new vo(3);return r[0]=e,r[1]=t,r[2]=n,r}function $o(e,t){const n=t[0],r=t[1],o=t[2];let i=n*n+r*r+o*o;return i>0&&(i=1/Math.sqrt(i)),e[0]=t[0]*i,e[1]=t[1]*i,e[2]=t[2]*i,e}function ko(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function No(e,t,n){const r=t[0],o=t[1],i=t[2],s=n[0],a=n[1],c=n[2];return e[0]=o*c-i*a,e[1]=i*s-r*c,e[2]=r*a-o*s,e}function Do(e,t,n,r){const o=t[0],i=t[1],s=t[2];return e[0]=o+r*(n[0]-o),e[1]=i+r*(n[1]-i),e[2]=s+r*(n[2]-s),e}function zo(e,t,n){const r=t[0],o=t[1],i=t[2];let s=n[3]*r+n[7]*o+n[11]*i+n[15];return s=s||1,e[0]=(n[0]*r+n[4]*o+n[8]*i+n[12])/s,e[1]=(n[1]*r+n[5]*o+n[9]*i+n[13])/s,e[2]=(n[2]*r+n[6]*o+n[10]*i+n[14])/s,e}function Uo(e,t,n){const r=t[0],o=t[1],i=t[2];return e[0]=r*n[0]+o*n[3]+i*n[6],e[1]=r*n[1]+o*n[4]+i*n[7],e[2]=r*n[2]+o*n[5]+i*n[8],e}function Wo(e,t,n){const r=n[0],o=n[1],i=n[2],s=n[3],a=t[0],c=t[1],l=t[2];let u=o*l-i*c,h=i*a-r*l,f=r*c-o*a,d=o*f-i*h,p=i*u-r*f,m=r*h-o*u;const g=2*s;return u*=g,h*=g,f*=g,d*=2,p*=2,m*=2,e[0]=a+u+d,e[1]=c+h+p,e[2]=l+f+m,e}var Fo,Bo=function(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e[2]=t[2]-n[2],e},Go=Co,Vo=function(e){const t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r},Yo=(function(){const e=Io()}(),[0,0,0]),Xo=class e extends _o{static get ZERO(){return Fo||(Fo=new e(0,0,0),Object.freeze(Fo)),Fo}constructor(e=0,t=0,n=0){super(-0,-0,-0),1===arguments.length&&so(e)?this.copy(e):(oo.debug&&(go(e),go(t),go(n)),this[0]=e,this[1]=t,this[2]=n)}set(e,t,n){return this[0]=e,this[1]=t,this[2]=n,this.check()}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this.check()}fromObject(e){return oo.debug&&(go(e.x),go(e.y),go(e.z)),this[0]=e.x,this[1]=e.y,this[2]=e.z,this.check()}toObject(e){return e.x=this[0],e.y=this[1],e.z=this[2],e}get ELEMENTS(){return 3}get z(){return this[2]}set z(e){this[2]=go(e)}angle(e){return function(e,t){const n=e[0],r=e[1],o=e[2],i=t[0],s=t[1],a=t[2],c=Math.sqrt((n*n+r*r+o*o)*(i*i+s*s+a*a)),l=c&&ko(e,t)/c;return Math.acos(Math.min(Math.max(l,-1),1))}(this,e)}cross(e){return No(this,this,e),this.check()}rotateX({radians:e,origin:t=Yo}){return function(e,t,n,r){const o=[],i=[];o[0]=t[0]-n[0],o[1]=t[1]-n[1],o[2]=t[2]-n[2],i[0]=o[0],i[1]=o[1]*Math.cos(r)-o[2]*Math.sin(r),i[2]=o[1]*Math.sin(r)+o[2]*Math.cos(r),e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2]}(this,this,t,e),this.check()}rotateY({radians:e,origin:t=Yo}){return function(e,t,n,r){const o=[],i=[];o[0]=t[0]-n[0],o[1]=t[1]-n[1],o[2]=t[2]-n[2],i[0]=o[2]*Math.sin(r)+o[0]*Math.cos(r),i[1]=o[1],i[2]=o[2]*Math.cos(r)-o[0]*Math.sin(r),e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2]}(this,this,t,e),this.check()}rotateZ({radians:e,origin:t=Yo}){return function(e,t,n,r){const o=[],i=[];o[0]=t[0]-n[0],o[1]=t[1]-n[1],o[2]=t[2]-n[2],i[0]=o[0]*Math.cos(r)-o[1]*Math.sin(r),i[1]=o[0]*Math.sin(r)+o[1]*Math.cos(r),i[2]=o[2],e[0]=i[0]+n[0],e[1]=i[1]+n[1],e[2]=i[2]+n[2]}(this,this,t,e),this.check()}transform(e){return this.transformAsPoint(e)}transformAsPoint(e){return zo(this,this,e),this.check()}transformAsVector(e){return jo(this,this,e),this.check()}transformByMatrix3(e){return Uo(this,this,e),this.check()}transformByMatrix2(e){return function(e,t,n){const r=t[0],o=t[1];e[0]=n[0]*r+n[2]*o,e[1]=n[1]*r+n[3]*o,e[2]=t[2]}(this,this,e),this.check()}transformByQuaternion(e){return Wo(this,this,e),this.check()}},qo=class extends mo{toString(){let e="[";if(oo.printRowMajor){e+="row-major:";for(let t=0;t<this.RANK;++t)for(let n=0;n<this.RANK;++n)e+=` ${this[n*this.RANK+t]}`}else{e+="column-major:";for(let t=0;t<this.ELEMENTS;++t)e+=` ${this[t]}`}return e+="]",e}getElementIndex(e,t){return t*this.RANK+e}getElement(e,t){return this[t*this.RANK+e]}setElement(e,t,n){return this[t*this.RANK+e]=go(n),this}getColumn(e,t=new Array(this.RANK).fill(-0)){const n=e*this.RANK;for(let r=0;r<this.RANK;++r)t[r]=this[n+r];return t}setColumn(e,t){const n=e*this.RANK;for(let r=0;r<this.RANK;++r)this[n+r]=t[r];return this}};function Ho(e,t){const n=t[0],r=t[1],o=t[2],i=t[3],s=t[4],a=t[5],c=t[6],l=t[7],u=t[8],h=t[9],f=t[10],d=t[11],p=t[12],m=t[13],g=t[14],b=t[15],y=n*a-r*s,_=n*c-o*s,v=n*l-i*s,w=r*c-o*a,E=r*l-i*a,x=o*l-i*c,P=u*m-h*p,O=u*g-f*p,T=u*b-d*p,M=h*g-f*m,S=h*b-d*m,j=f*b-d*g;let A=y*j-_*S+v*M+w*T-E*O+x*P;return A?(A=1/A,e[0]=(a*j-c*S+l*M)*A,e[1]=(o*S-r*j-i*M)*A,e[2]=(m*x-g*E+b*w)*A,e[3]=(f*E-h*x-d*w)*A,e[4]=(c*T-s*j-l*O)*A,e[5]=(n*j-o*T+i*O)*A,e[6]=(g*v-p*x-b*_)*A,e[7]=(u*x-f*v+d*_)*A,e[8]=(s*S-a*T+l*P)*A,e[9]=(r*T-n*S-i*P)*A,e[10]=(p*E-m*v+b*y)*A,e[11]=(h*v-u*E-d*y)*A,e[12]=(a*O-s*M-c*P)*A,e[13]=(n*M-r*O+o*P)*A,e[14]=(m*_-p*w-g*y)*A,e[15]=(u*w-h*_+f*y)*A,e):null}function Zo(e,t,n){const r=t[0],o=t[1],i=t[2],s=t[3],a=t[4],c=t[5],l=t[6],u=t[7],h=t[8],f=t[9],d=t[10],p=t[11],m=t[12],g=t[13],b=t[14],y=t[15];let _=n[0],v=n[1],w=n[2],E=n[3];return e[0]=_*r+v*a+w*h+E*m,e[1]=_*o+v*c+w*f+E*g,e[2]=_*i+v*l+w*d+E*b,e[3]=_*s+v*u+w*p+E*y,_=n[4],v=n[5],w=n[6],E=n[7],e[4]=_*r+v*a+w*h+E*m,e[5]=_*o+v*c+w*f+E*g,e[6]=_*i+v*l+w*d+E*b,e[7]=_*s+v*u+w*p+E*y,_=n[8],v=n[9],w=n[10],E=n[11],e[8]=_*r+v*a+w*h+E*m,e[9]=_*o+v*c+w*f+E*g,e[10]=_*i+v*l+w*d+E*b,e[11]=_*s+v*u+w*p+E*y,_=n[12],v=n[13],w=n[14],E=n[15],e[12]=_*r+v*a+w*h+E*m,e[13]=_*o+v*c+w*f+E*g,e[14]=_*i+v*l+w*d+E*b,e[15]=_*s+v*u+w*p+E*y,e}function Ko(e,t,n){const r=n[0],o=n[1],i=n[2];let s,a,c,l,u,h,f,d,p,m,g,b;return t===e?(e[12]=t[0]*r+t[4]*o+t[8]*i+t[12],e[13]=t[1]*r+t[5]*o+t[9]*i+t[13],e[14]=t[2]*r+t[6]*o+t[10]*i+t[14],e[15]=t[3]*r+t[7]*o+t[11]*i+t[15]):(s=t[0],a=t[1],c=t[2],l=t[3],u=t[4],h=t[5],f=t[6],d=t[7],p=t[8],m=t[9],g=t[10],b=t[11],e[0]=s,e[1]=a,e[2]=c,e[3]=l,e[4]=u,e[5]=h,e[6]=f,e[7]=d,e[8]=p,e[9]=m,e[10]=g,e[11]=b,e[12]=s*r+u*o+p*i+t[12],e[13]=a*r+h*o+m*i+t[13],e[14]=c*r+f*o+g*i+t[14],e[15]=l*r+d*o+b*i+t[15]),e}function Jo(e,t,n){const r=n[0],o=n[1],i=n[2];return e[0]=t[0]*r,e[1]=t[1]*r,e[2]=t[2]*r,e[3]=t[3]*r,e[4]=t[4]*o,e[5]=t[5]*o,e[6]=t[6]*o,e[7]=t[7]*o,e[8]=t[8]*i,e[9]=t[9]*i,e[10]=t[10]*i,e[11]=t[11]*i,e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}function Qo(e,t,n){const r=Math.sin(n),o=Math.cos(n),i=t[4],s=t[5],a=t[6],c=t[7],l=t[8],u=t[9],h=t[10],f=t[11];return t!==e&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[4]=i*o+l*r,e[5]=s*o+u*r,e[6]=a*o+h*r,e[7]=c*o+f*r,e[8]=l*o-i*r,e[9]=u*o-s*r,e[10]=h*o-a*r,e[11]=f*o-c*r,e}function ei(e,t,n){const r=Math.sin(n),o=Math.cos(n),i=t[0],s=t[1],a=t[2],c=t[3],l=t[4],u=t[5],h=t[6],f=t[7];return t!==e&&(e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=i*o+l*r,e[1]=s*o+u*r,e[2]=a*o+h*r,e[3]=c*o+f*r,e[4]=l*o-i*r,e[5]=u*o-s*r,e[6]=h*o-a*r,e[7]=f*o-c*r,e}function ti(e,t){const n=t[0],r=t[1],o=t[2],i=t[4],s=t[5],a=t[6],c=t[8],l=t[9],u=t[10];return e[0]=Math.sqrt(n*n+r*r+o*o),e[1]=Math.sqrt(i*i+s*s+a*a),e[2]=Math.sqrt(c*c+l*l+u*u),e}var ni=function(e,t,n,r,o){const i=1/Math.tan(t/2);if(e[0]=i/n,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=i,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[11]=-1,e[12]=0,e[13]=0,e[15]=0,null!=o&&o!==1/0){const t=1/(r-o);e[10]=(o+r)*t,e[14]=2*o*r*t}else e[10]=-1,e[14]=-2*r;return e};var ri=function(e,t,n,r,o,i,s){const a=1/(t-n),c=1/(r-o),l=1/(i-s);return e[0]=-2*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*c,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*l,e[11]=0,e[12]=(t+n)*a,e[13]=(o+r)*c,e[14]=(s+i)*l,e[15]=1,e};function oi(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e[2]=t[2]+n[2],e[3]=t[3]+n[3],e}function ii(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e[2]=t[2]*n,e[3]=t[3]*n,e}function si(e){const t=e[0],n=e[1],r=e[2],o=e[3];return Math.sqrt(t*t+n*n+r*r+o*o)}function ai(e){const t=e[0],n=e[1],r=e[2],o=e[3];return t*t+n*n+r*r+o*o}function ci(e,t){const n=t[0],r=t[1],o=t[2],i=t[3];let s=n*n+r*r+o*o+i*i;return s>0&&(s=1/Math.sqrt(s)),e[0]=n*s,e[1]=r*s,e[2]=o*s,e[3]=i*s,e}function li(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3]}function ui(e,t,n,r){const o=t[0],i=t[1],s=t[2],a=t[3];return e[0]=o+r*(n[0]-o),e[1]=i+r*(n[1]-i),e[2]=s+r*(n[2]-s),e[3]=a+r*(n[3]-a),e}function hi(e,t,n){const r=t[0],o=t[1],i=t[2],s=t[3];return e[0]=n[0]*r+n[4]*o+n[8]*i+n[12]*s,e[1]=n[1]*r+n[5]*o+n[9]*i+n[13]*s,e[2]=n[2]*r+n[6]*o+n[10]*i+n[14]*s,e[3]=n[3]*r+n[7]*o+n[11]*i+n[15]*s,e}function fi(e,t,n){const r=t[0],o=t[1],i=t[2],s=n[0],a=n[1],c=n[2],l=n[3],u=l*r+a*i-c*o,h=l*o+c*r-s*i,f=l*i+s*o-a*r,d=-s*r-a*o-c*i;return e[0]=u*l+d*-s+h*-c-f*-a,e[1]=h*l+d*-a+f*-s-u*-c,e[2]=f*l+d*-c+u*-a-h*-s,e[3]=t[3],e}var di;!function(){const e=function(){const e=new vo(4);return vo!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0,e[3]=0),e}()}();!function(e){e[e.COL0ROW0=0]="COL0ROW0",e[e.COL0ROW1=1]="COL0ROW1",e[e.COL0ROW2=2]="COL0ROW2",e[e.COL0ROW3=3]="COL0ROW3",e[e.COL1ROW0=4]="COL1ROW0",e[e.COL1ROW1=5]="COL1ROW1",e[e.COL1ROW2=6]="COL1ROW2",e[e.COL1ROW3=7]="COL1ROW3",e[e.COL2ROW0=8]="COL2ROW0",e[e.COL2ROW1=9]="COL2ROW1",e[e.COL2ROW2=10]="COL2ROW2",e[e.COL2ROW3=11]="COL2ROW3",e[e.COL3ROW0=12]="COL3ROW0",e[e.COL3ROW1=13]="COL3ROW1",e[e.COL3ROW2=14]="COL3ROW2",e[e.COL3ROW3=15]="COL3ROW3"}(di||(di={}));var pi,mi,gi=45*Math.PI/180,bi=1,yi=.1,_i=500,vi=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),wi=class extends qo{static get IDENTITY(){return function(){mi||(mi=new wi,Object.freeze(mi));return mi}()}static get ZERO(){return function(){pi||(pi=new wi([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),Object.freeze(pi));return pi}()}get ELEMENTS(){return 16}get RANK(){return 4}get INDICES(){return di}constructor(e){super(-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0),1===arguments.length&&Array.isArray(e)?this.copy(e):this.identity()}copy(e){return this[0]=e[0],this[1]=e[1],this[2]=e[2],this[3]=e[3],this[4]=e[4],this[5]=e[5],this[6]=e[6],this[7]=e[7],this[8]=e[8],this[9]=e[9],this[10]=e[10],this[11]=e[11],this[12]=e[12],this[13]=e[13],this[14]=e[14],this[15]=e[15],this.check()}set(e,t,n,r,o,i,s,a,c,l,u,h,f,d,p,m){return this[0]=e,this[1]=t,this[2]=n,this[3]=r,this[4]=o,this[5]=i,this[6]=s,this[7]=a,this[8]=c,this[9]=l,this[10]=u,this[11]=h,this[12]=f,this[13]=d,this[14]=p,this[15]=m,this.check()}setRowMajor(e,t,n,r,o,i,s,a,c,l,u,h,f,d,p,m){return this[0]=e,this[1]=o,this[2]=c,this[3]=f,this[4]=t,this[5]=i,this[6]=l,this[7]=d,this[8]=n,this[9]=s,this[10]=u,this[11]=p,this[12]=r,this[13]=a,this[14]=h,this[15]=m,this.check()}toRowMajor(e){return e[0]=this[0],e[1]=this[4],e[2]=this[8],e[3]=this[12],e[4]=this[1],e[5]=this[5],e[6]=this[9],e[7]=this[13],e[8]=this[2],e[9]=this[6],e[10]=this[10],e[11]=this[14],e[12]=this[3],e[13]=this[7],e[14]=this[11],e[15]=this[15],e}identity(){return this.copy(vi)}fromObject(e){return this.check()}fromQuaternion(e){return function(e,t){const n=t[0],r=t[1],o=t[2],i=t[3],s=n+n,a=r+r,c=o+o,l=n*s,u=r*s,h=r*a,f=o*s,d=o*a,p=o*c,m=i*s,g=i*a,b=i*c;e[0]=1-h-p,e[1]=u+b,e[2]=f-g,e[3]=0,e[4]=u-b,e[5]=1-l-p,e[6]=d+m,e[7]=0,e[8]=f+g,e[9]=d-m,e[10]=1-l-h,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1}(this,e),this.check()}frustum(e){const{left:t,right:n,bottom:r,top:o,near:i=yi,far:s=_i}=e;return s===1/0?function(e,t,n,r,o,i){const s=2*i/(n-t),a=2*i/(o-r),c=(n+t)/(n-t),l=(o+r)/(o-r),u=-1,h=-1,f=-2*i;e[0]=s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,e[6]=0,e[7]=0,e[8]=c,e[9]=l,e[10]=u,e[11]=h,e[12]=0,e[13]=0,e[14]=f,e[15]=0}(this,t,n,r,o,i):function(e,t,n,r,o,i,s){const a=1/(n-t),c=1/(o-r),l=1/(i-s);e[0]=2*i*a,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=2*i*c,e[6]=0,e[7]=0,e[8]=(n+t)*a,e[9]=(o+r)*c,e[10]=(s+i)*l,e[11]=-1,e[12]=0,e[13]=0,e[14]=s*i*2*l,e[15]=0}(this,t,n,r,o,i,s),this.check()}lookAt(e){const{eye:t,center:n=[0,0,0],up:r=[0,1,0]}=e;return function(e,t,n,r){let o,i,s,a,c,l,u,h,f,d;const p=t[0],m=t[1],g=t[2],b=r[0],y=r[1],_=r[2],v=n[0],w=n[1],E=n[2];Math.abs(p-v)<1e-6&&Math.abs(m-w)<1e-6&&Math.abs(g-E)<1e-6?function(e){e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1}(e):(h=p-v,f=m-w,d=g-E,o=1/Math.sqrt(h*h+f*f+d*d),h*=o,f*=o,d*=o,i=y*d-_*f,s=_*h-b*d,a=b*f-y*h,o=Math.sqrt(i*i+s*s+a*a),o?(o=1/o,i*=o,s*=o,a*=o):(i=0,s=0,a=0),c=f*a-d*s,l=d*i-h*a,u=h*s-f*i,o=Math.sqrt(c*c+l*l+u*u),o?(o=1/o,c*=o,l*=o,u*=o):(c=0,l=0,u=0),e[0]=i,e[1]=c,e[2]=h,e[3]=0,e[4]=s,e[5]=l,e[6]=f,e[7]=0,e[8]=a,e[9]=u,e[10]=d,e[11]=0,e[12]=-(i*p+s*m+a*g),e[13]=-(c*p+l*m+u*g),e[14]=-(h*p+f*m+d*g),e[15]=1)}(this,t,n,r),this.check()}ortho(e){const{left:t,right:n,bottom:r,top:o,near:i=yi,far:s=_i}=e;return ri(this,t,n,r,o,i,s),this.check()}orthographic(e){const{fovy:t=gi,aspect:n=bi,focalDistance:r=1,near:o=yi,far:i=_i}=e;Ei(t);const s=t/2,a=r*Math.tan(s),c=a*n;return this.ortho({left:-c,right:c,bottom:-a,top:a,near:o,far:i})}perspective(e){const{fovy:t=45*Math.PI/180,aspect:n=1,near:r=.1,far:o=500}=e;return Ei(t),ni(this,t,n,r,o),this.check()}determinant(){return function(e){const t=e[0],n=e[1],r=e[2],o=e[3],i=e[4],s=e[5],a=e[6],c=e[7],l=e[8],u=e[9],h=e[10],f=e[11],d=e[12],p=e[13],m=e[14],g=t*s-n*i,b=t*a-r*i,y=n*a-r*s,_=l*p-u*d,v=l*m-h*d,w=u*m-h*p;return c*(t*w-n*v+r*_)-o*(i*w-s*v+a*_)+e[15]*(l*y-u*b+h*g)-f*(d*y-p*b+m*g)}(this)}getScale(e=[-0,-0,-0]){return e[0]=Math.sqrt(this[0]*this[0]+this[1]*this[1]+this[2]*this[2]),e[1]=Math.sqrt(this[4]*this[4]+this[5]*this[5]+this[6]*this[6]),e[2]=Math.sqrt(this[8]*this[8]+this[9]*this[9]+this[10]*this[10]),e}getTranslation(e=[-0,-0,-0]){return e[0]=this[12],e[1]=this[13],e[2]=this[14],e}getRotation(e,t){e=e||[-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0,-0],t=t||[-0,-0,-0];const n=this.getScale(t),r=1/n[0],o=1/n[1],i=1/n[2];return e[0]=this[0]*r,e[1]=this[1]*o,e[2]=this[2]*i,e[3]=0,e[4]=this[4]*r,e[5]=this[5]*o,e[6]=this[6]*i,e[7]=0,e[8]=this[8]*r,e[9]=this[9]*o,e[10]=this[10]*i,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}getRotationMatrix3(e,t){e=e||[-0,-0,-0,-0,-0,-0,-0,-0,-0],t=t||[-0,-0,-0];const n=this.getScale(t),r=1/n[0],o=1/n[1],i=1/n[2];return e[0]=this[0]*r,e[1]=this[1]*o,e[2]=this[2]*i,e[3]=this[4]*r,e[4]=this[5]*o,e[5]=this[6]*i,e[6]=this[8]*r,e[7]=this[9]*o,e[8]=this[10]*i,e}transpose(){return function(e,t){if(e===t){const n=t[1],r=t[2],o=t[3],i=t[6],s=t[7],a=t[11];e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=n,e[6]=t[9],e[7]=t[13],e[8]=r,e[9]=i,e[11]=t[14],e[12]=o,e[13]=s,e[14]=a}else e[0]=t[0],e[1]=t[4],e[2]=t[8],e[3]=t[12],e[4]=t[1],e[5]=t[5],e[6]=t[9],e[7]=t[13],e[8]=t[2],e[9]=t[6],e[10]=t[10],e[11]=t[14],e[12]=t[3],e[13]=t[7],e[14]=t[11],e[15]=t[15]}(this,this),this.check()}invert(){return Ho(this,this),this.check()}multiplyLeft(e){return Zo(this,e,this),this.check()}multiplyRight(e){return Zo(this,this,e),this.check()}rotateX(e){return Qo(this,this,e),this.check()}rotateY(e){return function(e,t,n){const r=Math.sin(n),o=Math.cos(n),i=t[0],s=t[1],a=t[2],c=t[3],l=t[8],u=t[9],h=t[10],f=t[11];t!==e&&(e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]),e[0]=i*o-l*r,e[1]=s*o-u*r,e[2]=a*o-h*r,e[3]=c*o-f*r,e[8]=i*r+l*o,e[9]=s*r+u*o,e[10]=a*r+h*o,e[11]=c*r+f*o}(this,this,e),this.check()}rotateZ(e){return ei(this,this,e),this.check()}rotateXYZ(e){return this.rotateX(e[0]).rotateY(e[1]).rotateZ(e[2])}rotateAxis(e,t){return function(e,t,n,r){let o,i,s,a,c,l,u,h,f,d,p,m,g,b,y,_,v,w,E,x,P,O,T,M,S=r[0],j=r[1],A=r[2],L=Math.sqrt(S*S+j*j+A*A);L<1e-6||(L=1/L,S*=L,j*=L,A*=L,i=Math.sin(n),o=Math.cos(n),s=1-o,a=t[0],c=t[1],l=t[2],u=t[3],h=t[4],f=t[5],d=t[6],p=t[7],m=t[8],g=t[9],b=t[10],y=t[11],_=S*S*s+o,v=j*S*s+A*i,w=A*S*s-j*i,E=S*j*s-A*i,x=j*j*s+o,P=A*j*s+S*i,O=S*A*s+j*i,T=j*A*s-S*i,M=A*A*s+o,e[0]=a*_+h*v+m*w,e[1]=c*_+f*v+g*w,e[2]=l*_+d*v+b*w,e[3]=u*_+p*v+y*w,e[4]=a*E+h*x+m*P,e[5]=c*E+f*x+g*P,e[6]=l*E+d*x+b*P,e[7]=u*E+p*x+y*P,e[8]=a*O+h*T+m*M,e[9]=c*O+f*T+g*M,e[10]=l*O+d*T+b*M,e[11]=u*O+p*T+y*M,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]))}(this,this,e,t),this.check()}scale(e){return Jo(this,this,Array.isArray(e)?e:[e,e,e]),this.check()}translate(e){return Ko(this,this,e),this.check()}transform(e,t){return 4===e.length?(bo(t=hi(t||[-0,-0,-0,-0],e,this),4),t):this.transformAsPoint(e,t)}transformAsPoint(e,t){const{length:n}=e;let r;switch(n){case 2:r=To(t||[-0,-0],e,this);break;case 3:r=zo(t||[-0,-0,-0],e,this);break;default:throw new Error("Illegal vector")}return bo(r,e.length),r}transformAsVector(e,t){let n;switch(e.length){case 2:n=So(t||[-0,-0],e,this);break;case 3:n=jo(t||[-0,-0,-0],e,this);break;default:throw new Error("Illegal vector")}return bo(n,e.length),n}transformPoint(e,t){return this.transformAsPoint(e,t)}transformVector(e,t){return this.transformAsPoint(e,t)}transformDirection(e,t){return this.transformAsVector(e,t)}makeRotationX(e){return this.identity().rotateX(e)}makeTranslation(e,t,n){return this.identity().translate([e,t,n])}};function Ei(e){if(e>2*Math.PI)throw Error("expected radians")}var xi,Pi,Oi,Ti={name:"fp32",source:"#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\nconst FP32_TWO_PI: f32 = 6.2831854820251465;\nconst FP32_PI_2: f32 = 1.5707963705062866;\nconst FP32_PI_16: f32 = 0.1963495463132858;\n\nconst FP32_SIN_TABLE_0: f32 = 0.19509032368659973;\nconst FP32_SIN_TABLE_1: f32 = 0.3826834261417389;\nconst FP32_SIN_TABLE_2: f32 = 0.5555702447891235;\nconst FP32_SIN_TABLE_3: f32 = 0.7071067690849304;\n\nconst FP32_COS_TABLE_0: f32 = 0.9807852506637573;\nconst FP32_COS_TABLE_1: f32 = 0.9238795042037964;\nconst FP32_COS_TABLE_2: f32 = 0.8314695954322815;\nconst FP32_COS_TABLE_3: f32 = 0.7071067690849304;\n\nconst FP32_INVERSE_FACTORIAL_3: f32 = 1.666666716337204e-01;\nconst FP32_INVERSE_FACTORIAL_5: f32 = 8.333333767950535e-03;\nconst FP32_INVERSE_FACTORIAL_7: f32 = 1.9841270113829523e-04;\nconst FP32_INVERSE_FACTORIAL_9: f32 = 2.75573188446287533e-06;\nconst FP32_OVERFLOW: f32 = 3.402823466e+38;\n\nfn sin_taylor_fp32(a: f32) -> f32 {\n if (a == 0.0) {\n return 0.0;\n }\n\n let x = -a * a;\n var sum = a;\n var term = a;\n\n term = term * x;\n sum = sum + term * FP32_INVERSE_FACTORIAL_3;\n term = term * x;\n sum = sum + term * FP32_INVERSE_FACTORIAL_5;\n term = term * x;\n sum = sum + term * FP32_INVERSE_FACTORIAL_7;\n term = term * x;\n sum = sum + term * FP32_INVERSE_FACTORIAL_9;\n\n return sum;\n}\n\nfn tan_taylor_fp32(a: f32) -> f32 {\n if (a == 0.0) {\n return 0.0;\n }\n\n let z = floor(a / FP32_TWO_PI);\n let reduced = a - FP32_TWO_PI * z;\n\n var quadrantValue = floor(reduced / FP32_PI_2 + 0.5);\n let quadrant = i32(quadrantValue);\n if (quadrant < -2 || quadrant > 2) {\n return FP32_OVERFLOW;\n }\n\n var angle = reduced - FP32_PI_2 * quadrantValue;\n quadrantValue = floor(angle / FP32_PI_16 + 0.5);\n let tableIndex = i32(quadrantValue);\n let absoluteTableIndex = abs(tableIndex);\n if (absoluteTableIndex > 4) {\n return FP32_OVERFLOW;\n }\n\n angle = angle - FP32_PI_16 * quadrantValue;\n let sinAngle = sin_taylor_fp32(angle);\n let cosAngle = sqrt(1.0 - sinAngle * sinAngle);\n\n var tableCos = 0.0;\n var tableSin = 0.0;\n if (absoluteTableIndex == 1) {\n tableCos = FP32_COS_TABLE_0;\n tableSin = FP32_SIN_TABLE_0;\n } else if (absoluteTableIndex == 2) {\n tableCos = FP32_COS_TABLE_1;\n tableSin = FP32_SIN_TABLE_1;\n } else if (absoluteTableIndex == 3) {\n tableCos = FP32_COS_TABLE_2;\n tableSin = FP32_SIN_TABLE_2;\n } else if (absoluteTableIndex == 4) {\n tableCos = FP32_COS_TABLE_3;\n tableSin = FP32_SIN_TABLE_3;\n }\n\n var sinReduced = sinAngle;\n var cosReduced = cosAngle;\n if (tableIndex > 0) {\n sinReduced = tableCos * sinAngle + tableSin * cosAngle;\n cosReduced = tableCos * cosAngle - tableSin * sinAngle;\n } else if (tableIndex < 0) {\n sinReduced = tableCos * sinAngle - tableSin * cosAngle;\n cosReduced = tableCos * cosAngle + tableSin * sinAngle;\n }\n\n var sinValue = 0.0;\n var cosValue = 0.0;\n if (quadrant == 0) {\n sinValue = sinReduced;\n cosValue = cosReduced;\n } else if (quadrant == 1) {\n sinValue = cosReduced;\n cosValue = -sinReduced;\n } else if (quadrant == -1) {\n sinValue = -cosReduced;\n cosValue = sinReduced;\n } else {\n sinValue = -sinReduced;\n cosValue = -cosReduced;\n }\n\n return sinValue / cosValue;\n}\n\nfn tan_fp32(a: f32) -> f32 {\n return tan_taylor_fp32(a);\n}\n#else\nfn tan_fp32(a: f32) -> f32 {\n return tan(a);\n}\n#endif\n",vs:"#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\n\n// All these functions are for substituting tan() function from Intel GPU only\nconst float TWO_PI = 6.2831854820251465;\nconst float PI_2 = 1.5707963705062866;\nconst float PI_16 = 0.1963495463132858;\n\nconst float SIN_TABLE_0 = 0.19509032368659973;\nconst float SIN_TABLE_1 = 0.3826834261417389;\nconst float SIN_TABLE_2 = 0.5555702447891235;\nconst float SIN_TABLE_3 = 0.7071067690849304;\n\nconst float COS_TABLE_0 = 0.9807852506637573;\nconst float COS_TABLE_1 = 0.9238795042037964;\nconst float COS_TABLE_2 = 0.8314695954322815;\nconst float COS_TABLE_3 = 0.7071067690849304;\n\nconst float INVERSE_FACTORIAL_3 = 1.666666716337204e-01; // 1/3!\nconst float INVERSE_FACTORIAL_5 = 8.333333767950535e-03; // 1/5!\nconst float INVERSE_FACTORIAL_7 = 1.9841270113829523e-04; // 1/7!\nconst float INVERSE_FACTORIAL_9 = 2.75573188446287533e-06; // 1/9!\n\nfloat sin_taylor_fp32(float a) {\n float r, s, t, x;\n\n if (a == 0.0) {\n return 0.0;\n }\n\n x = -a * a;\n s = a;\n r = a;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_3;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_5;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_7;\n s = s + t;\n\n r = r * x;\n t = r * INVERSE_FACTORIAL_9;\n s = s + t;\n\n return s;\n}\n\nvoid sincos_taylor_fp32(float a, out float sin_t, out float cos_t) {\n if (a == 0.0) {\n sin_t = 0.0;\n cos_t = 1.0;\n }\n sin_t = sin_taylor_fp32(a);\n cos_t = sqrt(1.0 - sin_t * sin_t);\n}\n\nfloat tan_taylor_fp32(float a) {\n float sin_a;\n float cos_a;\n\n if (a == 0.0) {\n return 0.0;\n }\n\n // 2pi range reduction\n float z = floor(a / TWO_PI);\n float r = a - TWO_PI * z;\n\n float t;\n float q = floor(r / PI_2 + 0.5);\n int j = int(q);\n\n if (j < -2 || j > 2) {\n return 1.0 / 0.0;\n }\n\n t = r - PI_2 * q;\n\n q = floor(t / PI_16 + 0.5);\n int k = int(q);\n int abs_k = int(abs(float(k)));\n\n if (abs_k > 4) {\n return 1.0 / 0.0;\n } else {\n t = t - PI_16 * q;\n }\n\n float u = 0.0;\n float v = 0.0;\n\n float sin_t, cos_t;\n float s, c;\n sincos_taylor_fp32(t, sin_t, cos_t);\n\n if (k == 0) {\n s = sin_t;\n c = cos_t;\n } else {\n if (abs(float(abs_k) - 1.0) < 0.5) {\n u = COS_TABLE_0;\n v = SIN_TABLE_0;\n } else if (abs(float(abs_k) - 2.0) < 0.5) {\n u = COS_TABLE_1;\n v = SIN_TABLE_1;\n } else if (abs(float(abs_k) - 3.0) < 0.5) {\n u = COS_TABLE_2;\n v = SIN_TABLE_2;\n } else if (abs(float(abs_k) - 4.0) < 0.5) {\n u = COS_TABLE_3;\n v = SIN_TABLE_3;\n }\n if (k > 0) {\n s = u * sin_t + v * cos_t;\n c = u * cos_t - v * sin_t;\n } else {\n s = u * sin_t - v * cos_t;\n c = u * cos_t + v * sin_t;\n }\n }\n\n if (j == 0) {\n sin_a = s;\n cos_a = c;\n } else if (j == 1) {\n sin_a = c;\n cos_a = -s;\n } else if (j == -1) {\n sin_a = -c;\n cos_a = s;\n } else {\n sin_a = -s;\n cos_a = -c;\n }\n return sin_a / cos_a;\n}\n#endif\n\nfloat tan_fp32(float a) {\n#ifdef LUMA_FP32_TAN_PRECISION_WORKAROUND\n return tan_taylor_fp32(a);\n#else\n return tan(a);\n#endif\n}\n"},Mi="#define SMOOTH_EDGE_RADIUS 0.5",Si={name:"geometry",source:"const SMOOTH_EDGE_RADIUS: f32 = 0.5;\n\nstruct VertexGeometry {\n position: vec4<f32>,\n worldPosition: vec3<f32>,\n worldPositionAlt: vec3<f32>,\n normal: vec3<f32>,\n uv: vec2<f32>,\n pickingColor: vec3<f32>,\n};\n\nvar<private> geometry_: VertexGeometry = VertexGeometry(\n vec4<f32>(0.0, 0.0, 1.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0),\n vec2<f32>(0.0, 0.0),\n vec3<f32>(0.0, 0.0, 0.0)\n);\n\nstruct FragmentGeometry {\n uv: vec2<f32>,\n};\n\nvar<private> fragmentGeometry: FragmentGeometry;\n\nfn smoothedge(edge: f32, x: f32) -> f32 {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n",vs:`${Mi}\n\nstruct VertexGeometry {\n vec4 position;\n vec3 worldPosition;\n vec3 worldPositionAlt;\n vec3 normal;\n vec2 uv;\n vec3 pickingColor;\n} geometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0),\n vec3(0.0),\n vec3(0.0),\n vec2(0.0),\n vec3(0.0)\n);\n`,fs:`${Mi}\n\nstruct FragmentGeometry {\n vec2 uv;\n};\nFragmentGeometry geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n`};!function(e){e[e.Start=1]="Start",e[e.Move=2]="Move",e[e.End=4]="End",e[e.Cancel=8]="Cancel"}(xi||(xi={})),function(e){e[e.None=0]="None",e[e.Left=1]="Left",e[e.Right=2]="Right",e[e.Up=4]="Up",e[e.Down=8]="Down",e[e.Horizontal=3]="Horizontal",e[e.Vertical=12]="Vertical",e[e.All=15]="All"}(Pi||(Pi={})),function(e){e[e.Possible=1]="Possible",e[e.Began=2]="Began",e[e.Changed=4]="Changed",e[e.Ended=8]="Ended",e[e.Recognized=8]="Recognized",e[e.Cancelled=16]="Cancelled",e[e.Failed=32]="Failed"}(Oi||(Oi={}));var ji="manipulation",Ai="none",Li="pan-x",Ii="pan-y";var Ci=class{constructor(e,t){this.actions="",this.manager=e,this.set(t)}set(e){"compute"===e&&(e=this.compute()),this.manager.element&&(this.manager.element.style.touchAction=e,this.actions=e)}update(){this.set(this.manager.options.touchAction)}compute(){let e=[];for(const t of this.manager.recognizers)t.options.enable&&(e=e.concat(t.getTouchAction()));return function(e){if(e.includes("none"))return Ai;const t=e.includes(Li),n=e.includes(Ii);return t&&n?Ai:t||n?t?Li:Ii:e.includes("manipulation")?ji:"auto"}(e.join(" "))}};function Ri(e){return e.trim().split(/\s+/g)}function $i(e,t,n){if(e)for(const r of Ri(t))e.addEventListener(r,n,!1)}function ki(e,t,n){if(e)for(const r of Ri(t))e.removeEventListener(r,n,!1)}function Ni(e){return(e.ownerDocument||e).defaultView}function Di(e){const t=e.length;if(1===t)return{x:Math.round(e[0].clientX),y:Math.round(e[0].clientY)};let n=0,r=0,o=0;for(;o<t;)n+=e[o].clientX,r+=e[o].clientY,o++;return{x:Math.round(n/t),y:Math.round(r/t)}}function zi(e){const t=[];let n=0;for(;n<e.pointers.length;)t[n]={clientX:Math.round(e.pointers[n].clientX),clientY:Math.round(e.pointers[n].clientY)},n++;return{timeStamp:Date.now(),pointers:t,center:Di(t),deltaX:e.deltaX,deltaY:e.deltaY}}function Ui(e,t){const n=t.x-e.x,r=t.y-e.y;return Math.sqrt(n*n+r*r)}function Wi(e,t){const n=t.clientX-e.clientX,r=t.clientY-e.clientY;return Math.sqrt(n*n+r*r)}function Fi(e,t){const n=t.clientX-e.clientX,r=t.clientY-e.clientY;return 180*Math.atan2(r,n)/Math.PI}function Bi(e,t){return e===t?Pi.None:Math.abs(e)>=Math.abs(t)?e<0?Pi.Left:Pi.Right:t<0?Pi.Up:Pi.Down}function Gi(e,t,n){return{x:t/e||0,y:n/e||0}}function Vi(e,t){return"pointerId"in e?e.pointerId:t}function Yi(e,t){e.movementOrigin=new Map(t.map((e,t)=>[Vi(e,t),{clientX:e.clientX,clientY:e.clientY}])),e.firstMovementTime=void 0}function Xi(e,t){const{session:n}=e,{pointers:r}=t,{length:o}=r;n.firstInput||(n.firstInput=zi(t)),o>1&&!n.firstMultiple?n.firstMultiple=zi(t):1===o&&(n.firstMultiple=!1);const{firstInput:i,firstMultiple:s}=n,a=s?s.center:i.center,c=t.center=Di(r);t.timeStamp=Date.now(),t.deltaTime=t.timeStamp-i.timeStamp,function(e,t){const n=t.pointers.map(Vi);if(e.movementOrigin?.size===n.length&&n.every(t=>e.movementOrigin.has(t))||Yi(e,t.pointers),t.distancePerPointer=t.pointers.map((t,r)=>Wi(e.movementOrigin.get(n[r]),t)),t.eventType&xi.Move&&t.distancePerPointer.some(e=>e>0)&&(e.firstMovementTime??(e.firstMovementTime=t.timeStamp)),t.movementDeltaTime=void 0===e.firstMovementTime?0:t.timeStamp-e.firstMovementTime,t.eventType&(xi.End|xi.Cancel)){const r=t.changedPointers.map(e=>Vi(e,t.pointers.indexOf(e)));Yi(e,t.pointers.filter((e,t)=>!r.includes(n[t])))}}(n,t),t.angle=function(e,t){const n=t.x-e.x,r=t.y-e.y;return 180*Math.atan2(r,n)/Math.PI}(a,c),t.distance=Ui(a,c);const{deltaX:l,deltaY:u}=function(e,t){const n=t.center;let r=e.offsetDelta,o=e.prevDelta;const i=e.prevInput;return t.eventType!==xi.Start&&i?.eventType!==xi.End||(o=e.prevDelta={x:i?.deltaX||0,y:i?.deltaY||0},r=e.offsetDelta={x:n.x,y:n.y}),{deltaX:o.x+(n.x-r.x),deltaY:o.y+(n.y-r.y)}}(n,t);t.deltaX=l,t.deltaY=u,t.offsetDirection=Bi(t.deltaX,t.deltaY);const h=Gi(t.deltaTime,t.deltaX,t.deltaY);var f,d;t.overallVelocityX=h.x,t.overallVelocityY=h.y,t.overallVelocity=Math.abs(h.x)>Math.abs(h.y)?h.x:h.y,t.scale=s?(f=s.pointers,Wi((d=r)[0],d[1])/Wi(f[0],f[1])):1,t.rotation=s?function(e,t){return Fi(t[1],t[0])-Fi(e[1],e[0])}(s.pointers,r):0,t.maxPointers=n.prevInput?t.pointers.length>n.prevInput.maxPointers?t.pointers.length:n.prevInput.maxPointers:t.pointers.length;let p=e.element;return function(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parentNode}return!1}(t.srcEvent.target,p)&&(p=t.srcEvent.target),t.target=p,function(e,t){const n=e.lastInterval||t,r=t.timeStamp-n.timeStamp;let o,i,s,a;if(t.eventType!==xi.Cancel&&(r>25||void 0===n.velocity)){const c=t.deltaX-n.deltaX,l=t.deltaY-n.deltaY,u=Gi(r,c,l);i=u.x,s=u.y,o=Math.abs(u.x)>Math.abs(u.y)?u.x:u.y,a=Bi(c,l),e.lastInterval=t}else o=n.velocity,i=n.velocityX,s=n.velocityY,a=n.direction;t.velocity=o,t.velocityX=i,t.velocityY=s,t.direction=a}(n,t),t}var qi=class{constructor(e){this.evEl="",this.evWin="",this.evTarget="",this.domHandler=e=>{this.manager.options.enable&&this.handler(e)},this.manager=e,this.element=e.element,this.target=e.options.inputTarget||e.element}callback(e,t){!function(e,t,n){const r=n.pointers.length,o=n.changedPointers.length,i=t&xi.Start&&r-o===0,s=t&(xi.End|xi.Cancel)&&r-o===0;n.isFirst=Boolean(i),n.isFinal=Boolean(s),i&&(e.session={}),n.eventType=t;const a=Xi(e,n);e.emit("hammer.input",a),e.recognize(a),e.session.prevInput=a}(this.manager,e,t)}init(){$i(this.element,this.evEl,this.domHandler),$i(this.target,this.evTarget,this.domHandler),$i(Ni(this.element),this.evWin,this.domHandler)}destroy(){ki(this.element,this.evEl,this.domHandler),ki(this.target,this.evTarget,this.domHandler),ki(Ni(this.element),this.evWin,this.domHandler)}},Hi={pointerdown:xi.Start,pointermove:xi.Move,pointerup:xi.End,pointercancel:xi.Cancel,pointerout:xi.Cancel},Zi=class extends qi{constructor(e){super(e),this.evEl="pointerdown",this.evWin="pointermove pointerup pointercancel",this.store=this.manager.session.pointerEvents=[],this.init()}handler(e){const{store:t}=this;let n=!1;const r=Hi[e.type],o=e.pointerType,i="touch"===o;let s=t.findIndex(t=>t.pointerId===e.pointerId);r&xi.Start&&(e.buttons||i)?s<0&&(t.push(e),s=t.length-1):r&(xi.End|xi.Cancel)&&(n=!0),s<0||(t[s]=e,this.callback(r,{pointers:t,changedPointers:[e],eventType:r,pointerType:o,srcEvent:e}),n&&t.splice(s,1))}},Ki=["","webkit","Moz","MS","ms","o"];function Ji(e,t){const n=t[0].toUpperCase()+t.slice(1);for(const r of Ki){const o=r?r+n:t;if(o in e)return o}}var Qi={touchAction:"compute",enable:!0,inputTarget:null,cssProps:{userSelect:"none",userDrag:"none",touchCallout:"none",tapHighlightColor:"rgba(0,0,0,0)"}},es=class{constructor(e,t){this.options={...Qi,...t,cssProps:{...Qi.cssProps,...t.cssProps},inputTarget:t.inputTarget||e},this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=new Zi(this),this.touchAction=new Ci(this,this.options.touchAction),this.toggleCssProps(!0)}set(e){return Object.assign(this.options,e),e.touchAction&&this.touchAction.update(),e.inputTarget&&(this.input.destroy(),this.input.target=e.inputTarget,this.input.init()),this}stop(e){this.session.stopped=e?2:1}recognize(e){const{session:t}=this;if(t.stopped)return;let n;this.session.prevented&&e.srcEvent.preventDefault();const{recognizers:r}=this;let{curRecognizer:o}=t;(!o||o&&o.state&Oi.Recognized)&&(o=t.curRecognizer=null);let i=0;for(;i<r.length;)n=r[i],2===t.stopped||o&&n!==o&&!n.canRecognizeWith(o)?n.reset():n.recognize(e),!o&&n.state&(Oi.Began|Oi.Changed|Oi.Ended)&&(o=t.curRecognizer=n),i++}get(e){const{recognizers:t}=this;for(let n=0;n<t.length;n++)if(t[n].options.event===e)return t[n];return null}add(e){if(Array.isArray(e)){for(const t of e)this.add(t);return this}const t=this.get(e.options.event);return t&&this.remove(t),this.recognizers.push(e),e.manager=this,this.touchAction.update(),e}remove(e){if(Array.isArray(e)){for(const t of e)this.remove(t);return this}const t="string"==typeof e?this.get(e):e;if(t){const{recognizers:e}=this,n=e.indexOf(t);-1!==n&&(e.splice(n,1),this.touchAction.update())}return this}on(e,t){if(!e||!t)return;const{handlers:n}=this;for(const r of Ri(e))n[r]=n[r]||[],n[r].push(t)}off(e,t){if(!e)return;const{handlers:n}=this;for(const r of Ri(e))t?n[r]&&n[r].splice(n[r].indexOf(t),1):delete n[r]}emit(e,t){const n=this.handlers[e]&&this.handlers[e].slice();if(!n||!n.length)return;const r=t;r.type=e,r.preventDefault=function(){t.srcEvent.preventDefault()};let o=0;for(;o<n.length;)n[o](r),o++}destroy(){this.toggleCssProps(!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}toggleCssProps(e){const{element:t}=this;if(t){for(const[n,r]of Object.entries(this.options.cssProps)){const o=Ji(t.style,n);e?(this.oldCssProps[o]=t.style[o],t.style[o]=r):t.style[o]=this.oldCssProps[o]||""}e||(this.oldCssProps={})}}},ts=1;function ns(e){return e&Oi.Cancelled?"cancel":e&Oi.Ended?"end":e&Oi.Changed?"move":e&Oi.Began?"start":""}var rs=class{constructor(e){this.options=e,this.id=ts++,this.state=Oi.Possible,this.simultaneous={},this.requireFail=[]}set(e){return Object.assign(this.options,e),this.manager.touchAction.update(),this}recognizeWith(e){if(Array.isArray(e)){for(const t of e)this.recognizeWith(t);return this}let t;if("string"==typeof e){if(t=this.manager.get(e),!t)throw new Error(`Cannot find recognizer ${e}`)}else t=e;const{simultaneous:n}=this;return n[t.id]||(n[t.id]=t,t.recognizeWith(this)),this}dropRecognizeWith(e){if(Array.isArray(e)){for(const t of e)this.dropRecognizeWith(t);return this}let t;return t="string"==typeof e?this.manager.get(e):e,t&&delete this.simultaneous[t.id],this}requireFailure(e){if(Array.isArray(e)){for(const t of e)this.requireFailure(t);return this}let t;if("string"==typeof e){if(t=this.manager.get(e),!t)throw new Error(`Cannot find recognizer ${e}`)}else t=e;const{requireFail:n}=this;return-1===n.indexOf(t)&&(n.push(t),t.requireFailure(this)),this}dropRequireFailure(e){if(Array.isArray(e)){for(const t of e)this.dropRequireFailure(t);return this}let t;if(t="string"==typeof e?this.manager.get(e):e,t){const e=this.requireFail.indexOf(t);e>-1&&this.requireFail.splice(e,1)}return this}hasRequireFailures(){return Boolean(this.requireFail.find(e=>e.options.enable))}canRecognizeWith(e){return Boolean(this.simultaneous[e.id])}emit(e){if(!e)return;const{state:t}=this;t<Oi.Ended&&this.manager.emit(this.options.event+ns(t),e),this.manager.emit(this.options.event,e),e.additionalEvent&&this.manager.emit(e.additionalEvent,e),t>=Oi.Ended&&this.manager.emit(this.options.event+ns(t),e)}tryEmit(e){this.canEmit()?this.emit(e):this.state=Oi.Failed}canEmit(){let e=0;for(;e<this.requireFail.length;){if(!(this.requireFail[e].state&(Oi.Failed|Oi.Possible)))return!1;e++}return!0}recognize(e){const t={...e};if(!this.options.enable)return this.reset(),void(this.state=Oi.Failed);this.state&(Oi.Recognized|Oi.Cancelled|Oi.Failed)&&(this.state=Oi.Possible),this.state=this.process(t),this.state&(Oi.Began|Oi.Changed|Oi.Ended|Oi.Cancelled)&&this.tryEmit(t)}getEventNames(){return[this.options.event]}reset(){}};function os(e,t){return(void 0===t.distance||e.distance>=t.distance)&&(void 0===t.distancePerPointer||e.distancePerPointer.length>0&&e.distancePerPointer.every(e=>e>=t.distancePerPointer))&&(void 0===t.movementDeltaTime||e.movementDeltaTime>=t.movementDeltaTime)&&(void 0===t.rotation||(n=e.rotation,Math.abs(((n+180)%360+360)%360-180)>=t.rotation))&&(void 0===t.scale||Math.abs(e.scale-1)>=t.scale);var n}var is=class extends rs{attrTest(e){const t=this.options.pointers;return 0===t||e.pointers.length===t}coherentTest(e){const t=this.options.coherent;return!t?.length||t.some(t=>os(e,t))}process(e){const{state:t}=this,{eventType:n}=e,r=t&(Oi.Began|Oi.Changed),o=this.attrTest(e);return r&&(n&xi.Cancel||!o)?t|Oi.Cancelled:r||o?n&xi.End?t|Oi.Ended:t&Oi.Began?t|Oi.Changed:Oi.Began:Oi.Failed}},ss=["","start","move","end","cancel"],as=class extends rs{constructor(e={}){super({enable:!0,event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10,...e}),this.pTime=null,this.pCenter=null,this._timer=null,this._input=null,this.count=0}getTouchAction(){return[ji]}process(e){const{options:t}=this,n=e.pointers.length===t.pointers,r=e.distance<t.threshold,o=e.deltaTime<t.time;if(this.reset(),e.eventType&xi.Start&&0===this.count)return this.failTimeout();if(r&&o&&n){if(e.eventType!==xi.End)return this.failTimeout();const n=!this.pTime||e.timeStamp-this.pTime<t.interval,r=!this.pCenter||Ui(this.pCenter,e.center)<t.posThreshold;if(this.pTime=e.timeStamp,this.pCenter=e.center,r&&n?this.count+=1:this.count=1,this._input=e,this.count%t.taps===0)return this.hasRequireFailures()?(this._timer=setTimeout(()=>{this.state=Oi.Recognized,this.tryEmit(this._input)},t.interval),Oi.Began):Oi.Recognized}return Oi.Failed}failTimeout(){return this._timer=setTimeout(()=>{this.state=Oi.Failed},this.options.interval),Oi.Failed}reset(){clearTimeout(this._timer)}emit(e){this.state===Oi.Recognized&&(e.tapCount=this.count,this.manager.emit(this.options.event,e))}},cs=class extends is{constructor(){super(...arguments),this.wheelSession=null,this.wheelSessionUnsubscribe=null,this.handleWheelSessionEvent=e=>{"trackpad"===e.device&&this.handleTrackpadEvent(e)}}set(e){const{wheelSession:t,...n}=e;return t&&t!==this.wheelSession&&(this.wheelSessionUnsubscribe?.(),this.wheelSessionUnsubscribe=null,this.wheelSession=t),super.set(n),this.updateWheelSessionSubscription(),this}getTrackpadInput(e,t={}){const{srcEvent:n}=e,r=t.deltaX??e.deltaX,o=t.deltaY??e.deltaY,i=Bi(r,o),s=Math.sqrt(e.deltaX*e.deltaX+e.deltaY*e.deltaY);return{pointers:[n,n],changedPointers:[n,n],pointerType:"trackpad",srcEvent:n,eventType:e.eventType,timeStamp:e.timeStamp,deltaTime:e.deltaTime,center:e.center,deltaX:r,deltaY:o,angle:180*Math.atan2(o,r)/Math.PI,distance:Math.sqrt(r*r+o*o),distancePerPointer:[s,s],movementDeltaTime:e.deltaTime,scale:1,rotation:0,direction:i,offsetDirection:i,velocity:e.velocity,velocityX:e.velocityX,velocityY:e.velocityY,overallVelocity:e.overallVelocity,overallVelocityX:e.overallVelocityX,overallVelocityY:e.overallVelocityY,maxPointers:2,target:n.target||this.manager.element,additionalEvent:"",...t}}updateWheelSessionSubscription(){const e=Boolean(this.wheelSession&&this.options.enable&&this.options.trackpad&&2===this.options.pointers);e&&!this.wheelSessionUnsubscribe?this.wheelSessionUnsubscribe=this.wheelSession.on(this.handleWheelSessionEvent):!e&&this.wheelSessionUnsubscribe&&(this.wheelSessionUnsubscribe(),this.wheelSessionUnsubscribe=null)}},ls=["","start","move","end","cancel","up","down","left","right"],us=class extends cs{constructor(e={}){super({enable:!0,pointers:1,event:"pan",threshold:10,direction:Pi.All,trackpad:!1,coherent:[],...e}),this.trackpadGesture=!1,this.pX=null,this.pY=null}getTouchAction(){const{options:{direction:e}}=this,t=[];return e&Pi.Horizontal&&t.push(Ii),e&Pi.Vertical&&t.push(Li),t}getEventNames(){return ls.map(e=>this.options.event+e)}directionTest(e){const{options:t}=this;let n=!0,{distance:r}=e,{direction:o}=e;const i=e.deltaX,s=e.deltaY;return o&t.direction||(t.direction&Pi.Horizontal?(o=0===i?Pi.None:i<0?Pi.Left:Pi.Right,n=i!==this.pX,r=Math.abs(e.deltaX)):(o=0===s?Pi.None:s<0?Pi.Up:Pi.Down,n=s!==this.pY,r=Math.abs(e.deltaY))),e.direction=o,n&&r>t.threshold&&Boolean(o&t.direction)}attrTest(e){const t=Boolean(this.state&Oi.Began),n=!(this.options.coherent?.length&&e.eventType&(xi.End|xi.Cancel));return super.attrTest(e)&&(t||n&&this.coherentTest(e)&&this.directionTest(e))}emit(e){this.pX=e.deltaX,this.pY=e.deltaY;const t=Pi[e.direction].toLowerCase();t&&(e.additionalEvent=this.options.event+t),super.emit(e)}handleTrackpadEvent(e){e.isFirst&&(this.trackpadGesture=!e.srcEvent.ctrlKey,!this.trackpadGesture&&this.state&(Oi.Recognized|Oi.Cancelled|Oi.Failed)&&(this.state=Oi.Possible)),this.trackpadGesture&&(this.recognize(this.getTrackpadInput(e,{deltaX:-e.deltaX,deltaY:-e.deltaY,velocity:-e.velocity,velocityX:-e.velocityX,velocityY:-e.velocityY,overallVelocity:-e.overallVelocity,overallVelocityX:-e.overallVelocityX,overallVelocityY:-e.overallVelocityY})),e.isFinal&&(this.trackpadGesture=!1))}},hs=["","start","move","end","cancel","in","out"],fs=class{constructor(e,t,n){this.element=e,this.callback=t,this.options=n}listen(e,t){t?this.element.addEventListener(e,this.handleEvent,{passive:!1}):this.element.removeEventListener(e,this.handleEvent)}},ds=-1!==("undefined"!=typeof navigator&&navigator.userAgent?navigator.userAgent.toLowerCase():"").indexOf("firefox"),ps=class extends fs{constructor(e,t,n){n.enable=n.enable??!1,super(e,t,n),this.handleEvent=e=>{if(!this.options.enable)return;let t=e.deltaY;globalThis.WheelEvent&&(ds&&e.deltaMode===globalThis.WheelEvent.DOM_DELTA_PIXEL&&(t/=globalThis.devicePixelRatio),e.deltaMode===globalThis.WheelEvent.DOM_DELTA_LINE&&(t*=40)),e.shiftKey&&t&&(t*=.25),this.callback({type:"wheel",center:{x:e.clientX,y:e.clientY},delta:-t,device:this.options.wheelSession?.device??"unknown",srcEvent:e,pointerType:"mouse",target:e.target})},n.enable&&(this.wheelSessionUnsubscribe=this.options.wheelSession?.on(()=>{}),this.listen("wheel",!0))}destroy(){this.listen("wheel",!1),this.wheelSessionUnsubscribe?.(),this.wheelSessionUnsubscribe=void 0}enableEventType(e,t){"wheel"===e&&this.options.enable!==t&&(this.options.enable=t,t&&!this.wheelSessionUnsubscribe&&(this.wheelSessionUnsubscribe=this.options.wheelSession?.on(()=>{})),this.listen("wheel",t),t||(this.wheelSessionUnsubscribe?.(),this.wheelSessionUnsubscribe=void 0))}},ms={classificationDelay:32,endDelay:80},gs=class{constructor(e,t={}){this.subscriptions=new Map,this.session=null,this.classificationTimer=null,this.endTimer=null,this.pressedControlKeys=new Set,this.listeningForControlKeys=!1,this.handleEvent=e=>{if(!this.hasSubscribers)return"unknown";const t=function(e,t){let n=e.deltaX,r=e.deltaY;1===e.deltaMode&&(n*=40,r*=40);return{event:e,timeStamp:e.timeStamp,deltaX:n,deltaY:r,isControlKeyDown:t}}(e,this.pressedControlKeys.size>0);let n=this.session;if(n&&t.timeStamp-n.lastTimeStamp>=this.options.endDelay){if(this.end(),!this.hasSubscribers)return"unknown";n=null}n?(this.scheduleEnd(),this.addSample(n,t)):(n=this.startPendingSession(t),this.scheduleEnd());let{device:r}=n;return"unknown"===r&&(r=bs(n.samples,!1),"unknown"!==r&&this.begin(n,r)),r},this.finishClassification=()=>{if(this.classificationTimer=null,!this.session||"unknown"!==this.session.device)return;const e=this.session,t=bs(e.samples,!0);this.begin(e,"unknown"===t?"mouse":t)},this.end=()=>{if(!this.session)return;if("unknown"===this.session.device){const e=this.session,t=bs(e.samples,!0);this.begin(e,"unknown"===t?"mouse":t)}if(!this.session)return;const e=this.session;this.emit(xi.End,e.lastEvent),this.reset()},this.handleKeyDown=e=>{"Control"===e.key&&this.pressedControlKeys.add(e.code||e.key)},this.handleKeyUp=e=>{"Control"===e.key&&(e.code?this.pressedControlKeys.delete(e.code):this.pressedControlKeys.clear())},this.handleWindowBlur=()=>{this.pressedControlKeys.clear()},this.element=e,this.options={...ms,...t},this.element?.addEventListener("wheel",this.handleEvent,{passive:!0})}get hasSubscribers(){return this.subscriptions.size>0}get device(){return this.session?.device??"unknown"}on(e){const t={listener:e};return this.subscriptions.set(e,t),this.updateControlKeyEventListeners(),()=>{this.subscriptions.get(e)===t&&this.off(e)}}off(e){this.subscriptions.delete(e),this.updateControlKeyEventListeners(),this.hasSubscribers||this.reset()}cancel(){const e=this.session;e&&"unknown"!==e.device&&this.emit(xi.Cancel,e.lastEvent),this.reset()}destroy(){this.cancel(),this.subscriptions.clear(),this.updateControlKeyEventListeners(),this.element?.removeEventListener("wheel",this.handleEvent)}startPendingSession(e){const t={samples:[e],device:"unknown",firstTimeStamp:e.timeStamp,lastTimeStamp:e.timeStamp,totalDeltaX:e.deltaX,totalDeltaY:e.deltaY,velocityX:0,velocityY:0,lastEvent:e.event};return this.session=t,this.classificationTimer=globalThis.setTimeout(this.finishClassification,this.options.classificationDelay),t}addSample(e,t){if(e.samples.push(t),e.lastTimeStamp=t.timeStamp,e.lastEvent=t.event,e.totalDeltaX+=t.deltaX,e.totalDeltaY+=t.deltaY,"unknown"!==e.device){const n=e.samples[e.samples.length-2],r=t.timeStamp-n.timeStamp;e.velocityX=r>0?t.deltaX/r:0,e.velocityY=r>0?t.deltaY/r:0,this.emit(xi.Move,t.event,{velocityX:e.velocityX,velocityY:e.velocityY})}}begin(e,t){e.device=t,this.clearClassificationTimer(),this.emit(xi.Start,e.samples[0].event);const n=e.lastTimeStamp-e.firstTimeStamp;e.velocityX=n>0?e.totalDeltaX/n:0,e.velocityY=n>0?e.totalDeltaY/n:0,this.emit(xi.Move,e.lastEvent,{velocityX:e.velocityX,velocityY:e.velocityY})}scheduleEnd(){this.clearEndTimer(),this.endTimer=globalThis.setTimeout(this.end,this.options.endDelay)}emit(e,t,n){const r=this.session;if(!r||"unknown"===r.device)return;const o=e===xi.Start,i=e===xi.End||e===xi.Cancel,s=o?r.firstTimeStamp:r.lastTimeStamp,a=o?0:Math.max(0,s-r.firstTimeStamp),c=o?0:r.totalDeltaX,l=o?0:r.totalDeltaY,u=a>0?c/a:0,h=a>0?l/a:0,f=o?0:n?.velocityX??r.velocityX,d=o?0:n?.velocityY??r.velocityY,p={eventType:e,device:r.device,srcEvent:t,timeStamp:s,center:{x:t.clientX,y:t.clientY},deltaX:c,deltaY:l,deltaTime:a,velocity:Math.abs(f)>Math.abs(d)?f:d,velocityX:f,velocityY:d,overallVelocity:Math.abs(u)>Math.abs(h)?u:h,overallVelocityX:u,overallVelocityY:h,isFirst:o,isFinal:i};for(const{listener:m}of[...this.subscriptions.values()])m(p)}reset(){this.clearClassificationTimer(),this.clearEndTimer(),this.session=null}clearClassificationTimer(){null!==this.classificationTimer&&(globalThis.clearTimeout(this.classificationTimer),this.classificationTimer=null)}clearEndTimer(){null!==this.endTimer&&(globalThis.clearTimeout(this.endTimer),this.endTimer=null)}updateControlKeyEventListeners(){const e=this.hasSubscribers,t="undefined"!=typeof window?window:globalThis.document?.defaultView;t&&e!==this.listeningForControlKeys&&(this.listeningForControlKeys=e,e?(t.addEventListener("keydown",this.handleKeyDown,!0),t.addEventListener("keyup",this.handleKeyUp,!0),t.addEventListener("blur",this.handleWindowBlur)):(t.removeEventListener("keydown",this.handleKeyDown,!0),t.removeEventListener("keyup",this.handleKeyUp,!0),t.removeEventListener("blur",this.handleWindowBlur),this.pressedControlKeys.clear()))}};function bs(e,t){return e.some(({event:e,isControlKeyDown:t})=>e.ctrlKey&&!t)?"trackpad":e.some(({event:e})=>0!==e.deltaMode)||e.some(ys)||e.every(({event:e})=>{const t=e.wheelDelta;return void 0!==t&&Math.abs(t)%40==0})?"mouse":e.some(({deltaX:e})=>0!==e)||e.length>1&&function(e){for(let t=0;t<e.length;t++){const n=e[t];if(Math.abs(n.deltaX)>40||Math.abs(n.deltaY)>40)return!1;if(t>0&&n.timeStamp-e[t-1].timeStamp>40)return!1}return!0}(e)?"trackpad":t?"mouse":"unknown"}function ys({event:e,deltaX:t,deltaY:n}){if(0!==t||0===n)return!1;const r=Math.abs(n/4.000244140625);if(Number.isInteger(r))return!0;const o=e.wheelDelta;return"number"==typeof o&&0!==o&&o%120==0}var _s=["mousedown","mousemove","mouseup","mouseover","mouseout","mouseenter","mouseleave"],vs=class extends fs{constructor(e,t,n){super(e,t,{enable:!0,...n}),this.handleEvent=e=>{this.handleOverEvent(e),this.handleOutEvent(e),this.handleEnterEvent(e),this.handleLeaveEvent(e),this.handleMoveEvent(e)},this.pressed=!1;const{enable:r=!1}=this.options;this.enableMoveEvent=r,this.enableLeaveEvent=r,this.enableEnterEvent=r,this.enableOutEvent=r,this.enableOverEvent=r,r&&_s.forEach(e=>this.listen(e,!0))}destroy(){_s.forEach(e=>this.listen(e,!1))}enableEventType(e,t){switch(e){case"pointermove":this.enableMoveEvent!==t&&(this.enableMoveEvent=t,this.listen("mousedown",t),this.listen("mousemove",t),this.listen("mouseup",t));break;case"pointerover":this.enableOverEvent!==t&&(this.enableOverEvent=t,this.listen("mouseover",t));break;case"pointerout":this.enableOutEvent!==t&&(this.enableOutEvent=t,this.listen("mouseout",t));break;case"pointerenter":this.enableEnterEvent!==t&&(this.enableEnterEvent=t,this.listen("mouseenter",t));break;case"pointerleave":this.enableLeaveEvent!==t&&(this.enableLeaveEvent=t,this.listen("mouseleave",t))}}handleOverEvent(e){this.enableOverEvent&&"mouseover"===e.type&&this._emit("pointerover",e)}handleOutEvent(e){this.enableOutEvent&&"mouseout"===e.type&&this._emit("pointerout",e)}handleEnterEvent(e){this.enableEnterEvent&&"mouseenter"===e.type&&this._emit("pointerenter",e)}handleLeaveEvent(e){this.enableLeaveEvent&&"mouseleave"===e.type&&this._emit("pointerleave",e)}handleMoveEvent(e){if(this.enableMoveEvent)switch(e.type){case"mousedown":e.button>=0&&(this.pressed=!0);break;case"mousemove":0===e.buttons&&(this.pressed=!1),this.pressed||this._emit("pointermove",e);break;case"mouseup":this.pressed=!1}}_emit(e,t){this.callback({type:e,center:{x:t.clientX,y:t.clientY},srcEvent:t,pointerType:"mouse",target:t.target})}},ws=["keydown","keyup"],Es=class extends fs{constructor(e,t,n){super(e,t,{enable:!0,tabIndex:0,...n}),this.handleEvent=e=>{const t=e.target||e.srcElement;"INPUT"===t.tagName&&"text"===t.type||"TEXTAREA"===t.tagName||(this.enableDownEvent&&"keydown"===e.type&&this.callback({type:"keydown",srcEvent:e,key:e.key,target:e.target}),this.enableUpEvent&&"keyup"===e.type&&this.callback({type:"keyup",srcEvent:e,key:e.key,target:e.target}))};const{enable:r=!1}=this.options;this.enableDownEvent=r,this.enableUpEvent=r,e.tabIndex=this.options.tabIndex,e.style.outline="none",r&&ws.forEach(e=>this.listen(e,!0))}destroy(){ws.forEach(e=>this.listen(e,!1))}enableEventType(e,t){"keydown"===e&&this.enableDownEvent!==t&&(this.enableDownEvent=t,this.listen(e,t)),"keyup"===e&&this.enableUpEvent!==t&&(this.enableUpEvent=t,this.listen(e,t))}},xs=class extends fs{constructor(e,t,n){n.enable=n.enable??!1,super(e,t,n),this.handleEvent=e=>{this.options.enable&&this.callback({type:"contextmenu",center:{x:e.clientX,y:e.clientY},srcEvent:e,pointerType:"mouse",target:e.target})},n.enable&&this.listen("contextmenu",!0)}destroy(){this.listen("contextmenu",!1)}enableEventType(e,t){"contextmenu"===e&&this.options.enable!==t&&(this.options.enable=t,this.listen("contextmenu",t))}},Ps={pointerdown:1,pointermove:2,pointerup:4,mousedown:1,mousemove:2,mouseup:4};function Os(e){const t=Ps[e.srcEvent.type];if(!t)return null;const{buttons:n,button:r}=e.srcEvent;let o=!1,i=!1,s=!1;return 2===t?(o=Boolean(1&n),i=Boolean(4&n),s=Boolean(2&n)):(o=0===r,i=1===r,s=2===r),{leftButton:o,middleButton:i,rightButton:s}}function Ts(e,t){const n=e.center;if(!n)return null;const r=t.getBoundingClientRect(),o=r.width/t.offsetWidth||1,i=r.height/t.offsetHeight||1;return{center:n,offsetCenter:{x:(n.x-r.left-t.clientLeft)/o,y:(n.y-r.top-t.clientTop)/i}}}var Ms={srcElement:"root",priority:0},Ss=class{constructor(e,t){this.handleEvent=e=>{if(this.isEmpty())return;const t=this._normalizeEvent(e);let n=e.srcEvent.target;for(;n&&n!==t.rootElement;){if(this._emit(t,n),t.handled)return;n=n.parentNode}this._emit(t,"root")},this.eventManager=e,this.recognizerName=t,this.handlers=[],this.handlersByElement=new Map,this._active=!1}isEmpty(){return!this._active}add(e,t,n,r=!1,o=!1){const{handlers:i,handlersByElement:s}=this,a={...Ms,...n};let c=s.get(a.srcElement);c||(c=[],s.set(a.srcElement,c));const l={type:e,handler:t,srcElement:a.srcElement,priority:a.priority};r&&(l.once=!0),o&&(l.passive=!0),i.push(l),this._active=this._active||!l.passive;let u=c.length-1;for(;u>=0&&!(c[u].priority>=l.priority);)u--;c.splice(u+1,0,l)}remove(e,t){const{handlers:n,handlersByElement:r}=this;for(let o=n.length-1;o>=0;o--){const i=n[o];if(i.type===e&&i.handler===t){n.splice(o,1);const e=r.get(i.srcElement);e.splice(e.indexOf(i),1),0===e.length&&r.delete(i.srcElement)}}this._active=n.some(e=>!e.passive)}_emit(e,t){const n=this.handlersByElement.get(t);if(n){let t=!1;const r=()=>{e.handled=!0},o=()=>{e.handled=!0,t=!0},i=[];for(let s=0;s<n.length;s++){const{type:a,handler:c,once:l}=n[s];if(c({...e,type:a,stopPropagation:r,stopImmediatePropagation:o}),l&&i.push(n[s]),t)break}for(let e=0;e<i.length;e++){const{type:t,handler:n}=i[e];this.remove(t,n)}}}_normalizeEvent(e){const t=this.eventManager.getElement();return{...e,...Os(e),...Ts(e,t),preventDefault:()=>{e.srcEvent.preventDefault()},stopImmediatePropagation:null,stopPropagation:null,handled:!1,rootElement:t}}};function js(e){if("recognizer"in e)return e;let t;const n=Array.isArray(e)?[...e]:[e];return t="function"==typeof n[0]?new(n.shift())(n.shift()||{}):n.shift(),{recognizer:t,recognizeWith:"string"==typeof n[0]?[n[0]]:n[0],requireFailure:"string"==typeof n[1]?[n[1]]:n[1]}}var As=class{constructor(e=null,t={}){if(this._onBasicInput=e=>{this.manager.emit(e.srcEvent.type,e)},this._onOtherEvent=e=>{this.manager.emit(e.type,e)},this.options={recognizers:[],events:{},touchAction:"compute",tabIndex:0,cssProps:{},...t},this.events=new Map,this.element=e,this.wheelSession=new gs(e),e){this.manager=new es(e,this.options);for(const e of this.options.recognizers){const{recognizer:t,recognizeWith:n,requireFailure:r}=js(e);this.manager.add(t),n&&t.recognizeWith(n),r&&t.requireFailure(r)}this.manager.on("hammer.input",this._onBasicInput),this.wheelInput=new ps(e,this._onOtherEvent,{enable:!1,wheelSession:this.wheelSession}),this.moveInput=new vs(e,this._onOtherEvent,{enable:!1}),this.keyInput=new Es(e,this._onOtherEvent,{enable:!1,tabIndex:t.tabIndex}),this.contextmenuInput=new xs(e,this._onOtherEvent,{enable:!1}),this.on(this.options.events)}}getElement(){return this.element}destroy(){this.element?(this.wheelInput.destroy(),this.wheelSession.destroy(),this.moveInput.destroy(),this.keyInput.destroy(),this.contextmenuInput.destroy(),this.manager.destroy()):this.wheelSession.destroy()}on(e,t,n){this._addEventHandler(e,t,n,!1)}once(e,t,n){this._addEventHandler(e,t,n,!0)}watch(e,t,n){this._addEventHandler(e,t,n,!1,!0)}off(e,t){this._removeEventHandler(e,t)}emit(e){this.manager?.emit(e.type,e)}_toggleRecognizer(e,t){const{manager:n}=this;if(!n)return;const r=n.get(e);r&&(r.set({enable:t,wheelSession:this.wheelSession}),n.touchAction.update()),this.wheelInput?.enableEventType(e,t),this.moveInput?.enableEventType(e,t),this.keyInput?.enableEventType(e,t),this.contextmenuInput?.enableEventType(e,t)}_addEventHandler(e,t,n,r,o){if("string"!=typeof e){n=t;for(const[t,i]of Object.entries(e))this._addEventHandler(t,i,n,r,o);return}const{manager:i,events:s}=this;if(!i)return;let a=s.get(e);if(!a){const t=this._getRecognizerName(e)||e;a=new Ss(this,t),s.set(e,a),i&&i.on(e,a.handleEvent)}a.add(e,t,n,r,o),a.isEmpty()||this._toggleRecognizer(a.recognizerName,!0)}_removeEventHandler(e,t){if("string"!=typeof e){for(const[t,n]of Object.entries(e))this._removeEventHandler(t,n);return}const{events:n}=this,r=n.get(e);if(r&&(r.remove(e,t),r.isEmpty())){const{recognizerName:e}=r;let t=!1;for(const r of n.values())if(r.recognizerName===e&&!r.isEmpty()){t=!0;break}t||this._toggleRecognizer(e,!1)}}_getRecognizerName(e){return this.manager.recognizers.find(t=>t.getEventNames().includes(e))?.options.event}},Ls={DEFAULT:"default",LNGLAT:"lnglat",METER_OFFSETS:"meter-offsets",LNGLAT_OFFSETS:"lnglat-offsets",CARTESIAN:"cartesian"};Object.defineProperty(Ls,"IDENTITY",{get:()=>(Ze.deprecated("COORDINATE_SYSTEM.IDENTITY","COORDINATE_SYSTEM.CARTESIAN")(),Ls.CARTESIAN)});var Is={WEB_MERCATOR:1,GLOBE:2,WEB_MERCATOR_AUTO_OFFSET:4,IDENTITY:0},Cs={common:0,meters:1,pixels:2},Rs={click:"onClick",dblclick:"onClick",panstart:"onDragStart",panmove:"onDrag",panend:"onDragEnd"},$s={multipan:[us,{threshold:10,pointers:2,trackpad:!0}],pinch:[class extends cs{constructor(e={}){super({enable:!0,event:"pinch",threshold:0,pointers:2,trackpad:!1,coherent:[],...e}),this.trackpadGesture=!1}getTouchAction(){return[Ai]}getEventNames(){return hs.map(e=>this.options.event+e)}attrTest(e){const t=Boolean(this.options.coherent?.length),n=Boolean(this.state&Oi.Began),r=!(t&&e.eventType&(xi.End|xi.Cancel));return super.attrTest(e)&&(n||r&&(t?this.coherentTest(e):Math.abs(e.scale-1)>this.options.threshold))}emit(e){if(1!==e.scale){const t=e.scale<1?"in":"out";e.additionalEvent=this.options.event+t}super.emit(e)}handleTrackpadEvent(e){e.isFirst&&(this.trackpadGesture=e.srcEvent.ctrlKey,!this.trackpadGesture&&this.state&(Oi.Recognized|Oi.Cancelled|Oi.Failed)&&(this.state=Oi.Possible)),this.trackpadGesture&&(this.recognize(this.getTrackpadInput(e,{deltaX:0,deltaY:0,velocity:0,velocityX:0,velocityY:0,overallVelocity:0,overallVelocityX:0,overallVelocityY:0,scale:Math.exp(-e.deltaY/100)})),e.isFinal&&(this.trackpadGesture=!1))}},{trackpad:!0},null,["multipan"]],pan:[us,{threshold:1},["pinch"],["multipan"]],dblclick:[as,{event:"dblclick",taps:2,enable:!1}],dblclickdrag:[class extends rs{constructor(e={}){super({enable:!0,event:"doubleclickdrag",pointers:1,interval:500,time:350,threshold:28,dragThreshold:1,pixelsPerScale:120,...e}),this._tapStart=null,this._lastTap=null,this._drag=null,this._emittedStart=!1}getTouchAction(){return[ji]}getEventNames(){return ss.map(e=>this.options.event+e)}process(e){const{options:t}=this;return e.pointers.length!==t.pointers?(this.reset(),Oi.Failed):e.eventType&xi.Start?this._handleStart(e):e.eventType&xi.Move?this._handleMove(e):e.eventType&xi.Cancel?this._handleEnd(e,!0):e.eventType&xi.End?this._handleEnd(e,!1):Oi.Failed}reset(){this._tapStart=null,this._lastTap=null,this._drag=null,this._emittedStart=!1}emit(e){if(e){if(this.state===Oi.Began){if(!this._drag?.active||this._emittedStart)return;return this._emittedStart=!0,this.manager.emit(`${this.options.event}start`,e),void this.manager.emit(this.options.event,e)}if(this.state===Oi.Changed){if(!this._emittedStart)return;return this.manager.emit(`${this.options.event}move`,e),void this.manager.emit(this.options.event,e)}if(this.state===Oi.Ended){if(!this._emittedStart)return;return this.manager.emit(this.options.event,e),this.manager.emit(`${this.options.event}end`,e),void(this._emittedStart=!1)}if(this.state===Oi.Cancelled){if(!this._emittedStart)return;this.manager.emit(this.options.event,e),this.manager.emit(`${this.options.event}cancel`,e),this._emittedStart=!1}}}_handleStart(e){const t=this._getPointerId(e);return this._lastTap&&this._isTapMatch(e,this._lastTap)?(this._tapStart=null,this._lastTap=null,this._drag={startCenter:e.center,pointerId:t,active:!1},this._emittedStart=!1,Oi.Began):(this._tapStart={center:e.center,timeStamp:e.timeStamp,pointerId:t},this._lastTap=null,this._drag=null,this._emittedStart=!1,Oi.Failed)}_handleMove(e){if(!this._drag||!this._isSamePointer(e,this._drag.pointerId))return Oi.Failed;const t=this._drag.startCenter.y-e.center.y;return!this._drag.active&&Math.abs(t)<this.options.dragThreshold?Oi.Began:(this._drag.active=!0,e.scale=Math.pow(2,t/this.options.pixelsPerScale),this._emittedStart?Oi.Changed:Oi.Began)}_handleEnd(e,t){if(this._drag&&this._isSamePointer(e,this._drag.pointerId)){const{active:n,startCenter:r}=this._drag;if(this._drag=null,this._tapStart=null,this._lastTap=null,!n)return this._emittedStart=!1,Oi.Failed;const o=r.y-e.center.y;return e.scale=Math.pow(2,o/this.options.pixelsPerScale),t?Oi.Cancelled:Oi.Ended}return this._tapStart&&this._isSamePointer(e,this._tapStart.pointerId)?(this._isValidTap(e)?this._lastTap={center:e.center,timeStamp:e.timeStamp,pointerId:this._tapStart.pointerId}:this._lastTap=null,this._tapStart=null,Oi.Failed):(t&&this.reset(),Oi.Failed)}_isTapMatch(e,t){return e.timeStamp-t.timeStamp<=this.options.interval&&Ui(e.center,t.center)<=this.options.threshold}_isValidTap(e){return e.deltaTime<=this.options.time&&e.distance<=this.options.threshold}_getPointerId(e){return"pointerId"in e.srcEvent?e.srcEvent.pointerId:null}_isSamePointer(e,t){return null===t||this._getPointerId(e)===t}},{event:"dblclickdrag",enable:!1},["dblclick"],null],click:[as,{event:"click"},["dblclickdrag"],["dblclick","dblclickdrag"]]};function ks(e,t){if(e===t)return!0;if(Array.isArray(e)){const n=e.length;if(!t||t.length!==n)return!1;for(let r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}return!1}function Ns(e){let t,n={};return r=>{for(const o in r)if(!ks(r[o],n[o])){t=e(r),n=r;break}return t}}var Ds=[0,0,0,0],zs=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0],Us=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],Ws=[0,0,0],Fs=[0,0,0],Bs={default:-1,cartesian:0,lnglat:1,"meter-offsets":2,"lnglat-offsets":3};function Gs(e){const t=Bs[e];if(void 0===t)throw new Error(`Invalid coordinateSystem: ${e}`);return t}var Vs=Ns(function({viewport:e,devicePixelRatio:t,coordinateSystem:n,coordinateOrigin:r}){const{projectionCenter:o,viewProjectionMatrix:i,originCommon:s,cameraPosCommon:a,shaderCoordinateOrigin:c,geospatialOrigin:l}=function(e,t,n){const{viewMatrixUncentered:r,projectionMatrix:o}=e;let{viewMatrix:i,viewProjectionMatrix:s}=e,a=Ds,c=Ds,l=e.cameraPosition;const{geospatialOrigin:u,shaderCoordinateOrigin:h,offsetMode:f}=Ys(e,t,n);f&&(c=e.projectPosition(u||h),l=[l[0]-c[0],l[1]-c[1],l[2]-c[2]],c[3]=1,a=hi([],c,s),i=r||i,s=Zo([],o,i),s=Zo([],s,zs));return{viewMatrix:i,viewProjectionMatrix:s,projectionCenter:a,originCommon:c,cameraPosCommon:l,shaderCoordinateOrigin:h,geospatialOrigin:u}}(e,n,r),u=e.getDistanceScales(),h=[e.width*t,e.height*t],f=hi([],[0,0,-e.focalDistance,1],e.projectionMatrix)[3]||1,d={coordinateSystem:Gs(n),projectionMode:e.projectionMode,coordinateOrigin:c,commonOrigin:s.slice(0,3),center:o,pseudoMeters:Boolean(e._pseudoMeters),viewportSize:h,devicePixelRatio:t,focalDistance:f,commonUnitsPerMeter:u.unitsPerMeter,commonUnitsPerWorldUnit:u.unitsPerMeter,commonUnitsPerWorldUnit2:Ws,scale:e.scale,wrapLongitude:!1,viewProjectionMatrix:i,modelMatrix:Us,cameraPosition:a};if(l){const t=e.getDistanceScales(l);switch(n){case"meter-offsets":d.commonUnitsPerWorldUnit=t.unitsPerMeter,d.commonUnitsPerWorldUnit2=t.unitsPerMeter2;break;case"lnglat":case"lnglat-offsets":e._pseudoMeters||(d.commonUnitsPerMeter=t.unitsPerMeter),d.commonUnitsPerWorldUnit=t.unitsPerDegree,d.commonUnitsPerWorldUnit2=t.unitsPerDegree2;break;case"cartesian":d.commonUnitsPerWorldUnit=[1,1,t.unitsPerMeter[2]],d.commonUnitsPerWorldUnit2=[0,0,t.unitsPerMeter2[2]]}}if(e.projectionMode===Is.GLOBE&&"meter-offsets"===n){const e=6370972,t=256,n=r[0]*Math.PI/180,o=r[1]*Math.PI/180,i=Math.cos(o),s=((r[2]||0)/e+1)*t;d.commonOrigin=[Math.sin(n)*i*s,-Math.cos(n)*i*s,Math.sin(o)*s]}return d});function Ys(e,t,n=Fs){n.length<3&&(n=[n[0],n[1],0]);let r,o=n,i=!0;switch(r="lnglat-offsets"===t||"meter-offsets"===t?n:e.isGeospatial?[Math.fround(e.longitude),Math.fround(e.latitude),0]:null,e.projectionMode){case Is.WEB_MERCATOR:"lnglat"===t?(r=[0,0,0],i=!1):"cartesian"===t&&(i=!1,r=e.unprojectPosition([Math.fround(e.center[0]),Math.fround(e.center[1]),0]));break;case Is.WEB_MERCATOR_AUTO_OFFSET:"lnglat"===t?o=r:"cartesian"===t&&(o=[Math.fround(e.center[0]),Math.fround(e.center[1]),0],r=e.unprojectPosition(o),o[0]-=n[0],o[1]-=n[1],o[2]-=n[2]);break;case Is.IDENTITY:o=e.position.map(Math.fround),o[2]=o[2]||0;break;case Is.GLOBE:i=!1,r=null;break;default:i=!1}return{geospatialOrigin:r,shaderCoordinateOrigin:o,offsetMode:i}}var Xs=`${`${["default","lnglat","meter-offsets","lnglat-offsets","cartesian"].map(e=>`const COORDINATE_SYSTEM_${e.toUpperCase().replaceAll("-","_")}: i32 = ${Gs(e)};`).join("")}\n${Object.keys(Is).map(e=>`const PROJECTION_MODE_${e}: i32 = ${Is[e]};`).join("")}\n${Object.keys(Cs).map(e=>`const UNIT_${e.toUpperCase()}: i32 = ${Cs[e]};`).join("")}\n\nconst TILE_SIZE: f32 = 512.0;\nconst PI: f32 = 3.1415926536;\nconst WORLD_SCALE: f32 = TILE_SIZE / (PI * 2.0);\nconst ZERO_64_LOW: vec3<f32> = vec3<f32>(0.0, 0.0, 0.0);\nconst EARTH_RADIUS: f32 = 6370972.0; // meters\nconst GLOBE_RADIUS: f32 = 256.0;\n\n// -----------------------------------------------------------------------------\n// Uniform block (converted from GLSL uniform block)\n// -----------------------------------------------------------------------------\nstruct ProjectUniforms {\n wrapLongitude: i32,\n coordinateSystem: i32,\n commonUnitsPerMeter: vec3<f32>,\n projectionMode: i32,\n scale: f32,\n commonUnitsPerWorldUnit: vec3<f32>,\n commonUnitsPerWorldUnit2: vec3<f32>,\n center: vec4<f32>,\n modelMatrix: mat4x4<f32>,\n viewProjectionMatrix: mat4x4<f32>,\n viewportSize: vec2<f32>,\n devicePixelRatio: f32,\n focalDistance: f32,\n cameraPosition: vec3<f32>,\n coordinateOrigin: vec3<f32>,\n commonOrigin: vec3<f32>,\n pseudoMeters: i32,\n};\n\n@group(0) @binding(auto)\nvar<uniform> project: ProjectUniforms;\n\n// -----------------------------------------------------------------------------\n// Geometry data shared across the project helpers.\n// The active layer shader is responsible for populating this private module\n// state before calling the project functions below.\n// -----------------------------------------------------------------------------\n\n// Structure to carry additional geometry data used by deck.gl filters.\nstruct Geometry {\n worldPosition: vec3<f32>,\n worldPositionAlt: vec3<f32>,\n position: vec4<f32>,\n normal: vec3<f32>,\n uv: vec2<f32>,\n pickingColor: vec3<f32>,\n};\n\nvar<private> geometry: Geometry;\n`}\n\n// -----------------------------------------------------------------------------\n// Functions\n// -----------------------------------------------------------------------------\n\n// Returns an adjustment factor for commonUnitsPerMeter\nfn _project_size_at_latitude(lat: f32) -> f32 {\n let y = clamp(lat, -89.9, 89.9);\n return 1.0 / cos(radians(y));\n}\n\n// Overloaded version: scales a value in meters at a given latitude.\nfn _project_size_at_latitude_m(meters: f32, lat: f32) -> f32 {\n return meters * project.commonUnitsPerMeter.z * _project_size_at_latitude(lat);\n}\n\n// Computes a non-linear scale factor based on geometry.\n// (Note: This function relies on "geometry" being provided.)\nfn project_size() -> f32 {\n if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR &&\n project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT &&\n project.pseudoMeters == 0) {\n if (geometry.position.w == 0.0) {\n return _project_size_at_latitude(geometry.worldPosition.y);\n }\n let y: f32 = geometry.position.y / TILE_SIZE * 2.0 - 1.0;\n let y2 = y * y;\n let y4 = y2 * y2;\n let y6 = y4 * y2;\n return 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;\n }\n return 1.0;\n}\n\n// Overloads to scale offsets (meters to world units)\nfn project_size_float(meters: f32) -> f32 {\n return meters * project.commonUnitsPerMeter.z * project_size();\n}\n\nfn project_size_vec2(meters: vec2<f32>) -> vec2<f32> {\n return meters * project.commonUnitsPerMeter.xy * project_size();\n}\n\nfn project_size_vec3(meters: vec3<f32>) -> vec3<f32> {\n return meters * project.commonUnitsPerMeter * project_size();\n}\n\nfn project_size_vec4(meters: vec4<f32>) -> vec4<f32> {\n return vec4<f32>(meters.xyz * project.commonUnitsPerMeter, meters.w);\n}\n\n// Returns a rotation matrix aligning the z‑axis with the given up vector.\nfn project_get_orientation_matrix(up: vec3<f32>) -> mat3x3<f32> {\n let uz = normalize(up);\n let ux = select(\n vec3<f32>(1.0, 0.0, 0.0),\n normalize(vec3<f32>(uz.y, -uz.x, 0.0)),\n abs(uz.z) == 1.0\n );\n let uy = cross(uz, ux);\n return mat3x3<f32>(ux, uy, uz);\n}\n\n// Since WGSL does not support "out" parameters, we return a struct.\nstruct RotationResult {\n needsRotation: bool,\n transform: mat3x3<f32>,\n};\n\nfn project_needs_rotation(commonPosition: vec3<f32>) -> RotationResult {\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n return RotationResult(true, project_get_orientation_matrix(commonPosition));\n } else {\n return RotationResult(false, mat3x3<f32>()); // identity alternative if needed\n };\n}\n\n// Projects a normal vector from the current coordinate system to world space.\nfn project_normal(vector: vec3<f32>) -> vec3<f32> {\n let normal_modelspace = project.modelMatrix * vec4<f32>(vector, 0.0);\n var n = normalize(normal_modelspace.xyz * project.commonUnitsPerMeter);\n let rotResult = project_needs_rotation(geometry.position.xyz);\n if (rotResult.needsRotation) {\n n = rotResult.transform * n;\n }\n return n;\n}\n\n// Applies a scale offset based on y-offset (dy)\nfn project_offset_(offset: vec4<f32>) -> vec4<f32> {\n let dy: f32 = offset.y;\n let commonUnitsPerWorldUnit = project.commonUnitsPerWorldUnit + project.commonUnitsPerWorldUnit2 * dy;\n return vec4<f32>(offset.xyz * commonUnitsPerWorldUnit, offset.w);\n}\n\n// Projects lng/lat coordinates to a unit tile [0,1]\nfn project_mercator_(lnglat: vec2<f32>) -> vec2<f32> {\n var x = lnglat.x;\n if (project.wrapLongitude != 0) {\n x = ((x + 180.0) % 360.0) - 180.0;\n }\n let y = clamp(lnglat.y, -89.9, 89.9);\n return vec2<f32>(\n radians(x) + PI,\n PI + log(tan_fp32(PI * 0.25 + radians(y) * 0.5))\n ) * WORLD_SCALE;\n}\n\n// Projects lng/lat/z coordinates for a globe projection.\nfn project_globe_(lnglatz: vec3<f32>) -> vec3<f32> {\n let lambda = radians(lnglatz.x);\n let phi = radians(lnglatz.y);\n let cosPhi = cos(phi);\n let D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;\n return vec3<f32>(\n sin(lambda) * cosPhi,\n -cos(lambda) * cosPhi,\n sin(phi)\n ) * D;\n}\n\n// Mercator y of project_mercator_'s latitude clamp: log(tan(PI / 4 + radians(89.9) / 2))\nconst MAX_MERCATOR_Y: f32 = 7.0439589847;\n\n// Inverse of project_globe_ followed by project_mercator_, without forming lat/lng:\n// Mercator y = atanh(sin(lat)) = log((D + |z|) / |xy|), which stays accurate near the poles\nfn project_globe_to_mercator_(spherePos: vec3<f32>) -> vec2<f32> {\n let D = length(spherePos);\n let h = max(length(spherePos.xy), 1e-20);\n let y = sign(spherePos.z) * min(log((D + abs(spherePos.z)) / h), MAX_MERCATOR_Y);\n let x = atan2(spherePos.x, -spherePos.y);\n return (vec2<f32>(x, y) + PI) * WORLD_SCALE;\n}\n\n// Flat common space (Mercator or cartesian) of a common position; identity except under GLOBE.\n// WGSL has no function overloading: pass position.xyz for a vec4. See project.glsl.ts.\nfn project_common_position_to_flat(commonPosition: vec3<f32>) -> vec2<f32> {\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n return project_globe_to_mercator_(commonPosition);\n }\n return commonPosition.xy;\n}\n\n// World copy of a flat x nearest to referenceX\nfn project_wrap_flat_x_(x: f32, referenceX: f32) -> f32 {\n return x - TILE_SIZE * floor((x - referenceX) / TILE_SIZE + 0.5);\n}\n\n// Flat position in the world copy nearest to referenceX (e.g. a bounds centre); geospatial only\nfn project_common_position_to_flat_wrapped(commonPosition: vec3<f32>, referenceX: f32) -> vec2<f32> {\n var flatPosition = project_common_position_to_flat(commonPosition);\n if (project.projectionMode != PROJECTION_MODE_IDENTITY) {\n flatPosition.x = project_wrap_flat_x_(flatPosition.x, referenceX);\n }\n return flatPosition;\n}\n\n// Flat position continuous across the antimeridian under GLOBE (seam moved opposite referenceX,\n// e.g. the camera); identity for flat modes. For periodic patterns.\nfn project_common_position_to_flat_continuous(commonPosition: vec3<f32>, referenceX: f32) -> vec2<f32> {\n var flatPosition = project_common_position_to_flat(commonPosition);\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n flatPosition.x = project_wrap_flat_x_(flatPosition.x, referenceX);\n }\n return flatPosition;\n}\n\n// Projects positions (with an optional 64-bit low part) from the input\n// coordinate system to the common space.\nfn project_position_vec4_f64(position: vec4<f32>, position64Low: vec3<f32>) -> vec4<f32> {\n var position_world = project.modelMatrix * position;\n\n // Work around for a Mac+NVIDIA bug:\n if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR) {\n if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4<f32>(\n project_mercator_(position_world.xy),\n _project_size_at_latitude_m(position_world.z, position_world.y),\n position_world.w\n );\n }\n if (project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {\n position_world = vec4f(position_world.xyz + project.coordinateOrigin, position_world.w);\n }\n }\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n return vec4<f32>(\n project_globe_(position_world.xyz),\n position_world.w\n );\n }\n if (project.coordinateSystem == COORDINATE_SYSTEM_METER_OFFSETS) {\n let enuMatrix = project_get_orientation_matrix(project.commonOrigin);\n let metersToCommon = GLOBE_RADIUS / EARTH_RADIUS;\n let offsetCommon = (enuMatrix * vec3<f32>(-position_world.x, -position_world.y, position_world.z)) * metersToCommon;\n return vec4<f32>(project.commonOrigin + offsetCommon, position_world.w);\n }\n }\n if (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\n if (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\n if (abs(position_world.y - project.coordinateOrigin.y) > 0.25) {\n return vec4<f32>(\n project_mercator_(position_world.xy) - project.commonOrigin.xy,\n project_size_float(position_world.z),\n position_world.w\n );\n }\n }\n }\n if (project.projectionMode == PROJECTION_MODE_IDENTITY ||\n (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&\n (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\n project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {\n position_world = vec4f(position_world.xyz - project.coordinateOrigin, position_world.w);\n }\n\n return project_offset_(position_world) +\n project_offset_(project.modelMatrix * vec4<f32>(position64Low, 0.0));\n}\n\n// Overloaded versions for different input types.\nfn project_position_vec4_f32(position: vec4<f32>) -> vec4<f32> {\n return project_position_vec4_f64(position, ZERO_64_LOW);\n}\n\nfn project_position_vec3_f64(position: vec3<f32>, position64Low: vec3<f32>) -> vec3<f32> {\n let projected_position = project_position_vec4_f64(vec4<f32>(position, 1.0), position64Low);\n return projected_position.xyz;\n}\n\nfn project_position_vec3_f32(position: vec3<f32>) -> vec3<f32> {\n let projected_position = project_position_vec4_f64(vec4<f32>(position, 1.0), ZERO_64_LOW);\n return projected_position.xyz;\n}\n\nfn project_position_vec2_f32(position: vec2<f32>) -> vec2<f32> {\n let projected_position = project_position_vec4_f64(vec4<f32>(position, 0.0, 1.0), ZERO_64_LOW);\n return projected_position.xy;\n}\n\n// Transforms a common space position to clip space.\nfn project_common_position_to_clipspace_with_projection(position: vec4<f32>, viewProjectionMatrix: mat4x4<f32>, center: vec4<f32>) -> vec4<f32> {\n var clipPosition = viewProjectionMatrix * position + center;\n // deck.gl projection matrices use WebGL's [-w, w] depth range; WebGPU clips z to [0, w].\n clipPosition.z = (clipPosition.z + clipPosition.w) * 0.5;\n return clipPosition;\n}\n\n// Uses the project viewProjectionMatrix and center.\nfn project_common_position_to_clipspace(position: vec4<f32>) -> vec4<f32> {\n return project_common_position_to_clipspace_with_projection(position, project.viewProjectionMatrix, project.center);\n}\n\n// Returns a clip space offset corresponding to a given number of screen pixels.\nfn project_pixel_size_to_clipspace(pixels: vec2<f32>) -> vec2<f32> {\n let offset = pixels / project.viewportSize * project.devicePixelRatio * 2.0;\n return offset * project.focalDistance;\n}\n\nfn project_meter_size_to_pixel(meters: f32) -> f32 {\n return project_size_float(meters) * project.scale;\n}\n\nfn project_unit_size_to_pixel(size: f32, unit: i32) -> f32 {\n if (unit == UNIT_METERS) {\n return project_meter_size_to_pixel(size);\n } else if (unit == UNIT_COMMON) {\n return size * project.scale;\n }\n // UNIT_PIXELS: no scaling applied.\n return size;\n}\n\nfn project_pixel_size_float(pixels: f32) -> f32 {\n return pixels / project.scale;\n}\n\nfn project_pixel_size_vec2(pixels: vec2<f32>) -> vec2<f32> {\n return pixels / project.scale;\n}\n`,qs=["default","lnglat","meter-offsets","lnglat-offsets","cartesian"].map(e=>`const int COORDINATE_SYSTEM_${e.toUpperCase().replaceAll("-","_")} = ${Gs(e)};`).join(""),Hs=Object.keys(Is).map(e=>`const int PROJECTION_MODE_${e} = ${Is[e]};`).join(""),Zs=Object.keys(Cs).map(e=>`const int UNIT_${e.toUpperCase()} = ${Cs[e]};`).join(""),Ks={};var Js={name:"project",dependencies:[Ti,Si],source:Xs,vs:`${qs}\n${Hs}\n${Zs}\nlayout(std140) uniform projectUniforms {\nbool wrapLongitude;\nint coordinateSystem;\nvec3 commonUnitsPerMeter;\nint projectionMode;\nfloat scale;\nvec3 commonUnitsPerWorldUnit;\nvec3 commonUnitsPerWorldUnit2;\nvec4 center;\nmat4 modelMatrix;\nmat4 viewProjectionMatrix;\nvec2 viewportSize;\nfloat devicePixelRatio;\nfloat focalDistance;\nvec3 cameraPosition;\nvec3 coordinateOrigin;\nvec3 commonOrigin;\nbool pseudoMeters;\n} project;\nconst float TILE_SIZE = 512.0;\nconst float PI = 3.1415926536;\nconst float WORLD_SCALE = TILE_SIZE / (PI * 2.0);\nconst vec3 ZERO_64_LOW = vec3(0.0);\nconst float EARTH_RADIUS = 6370972.0;\nconst float GLOBE_RADIUS = 256.0;\nfloat project_size_at_latitude(float lat) {\nfloat y = clamp(lat, -89.9, 89.9);\nreturn 1.0 / cos(radians(y));\n}\nfloat project_size() {\nif (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR &&\nproject.coordinateSystem == COORDINATE_SYSTEM_LNGLAT &&\nproject.pseudoMeters == false) {\nif (geometry.position.w == 0.0) {\nreturn project_size_at_latitude(geometry.worldPosition.y);\n}\nfloat y = geometry.position.y / TILE_SIZE * 2.0 - 1.0;\nfloat y2 = y * y;\nfloat y4 = y2 * y2;\nfloat y6 = y4 * y2;\nreturn 1.0 + 4.9348 * y2 + 4.0587 * y4 + 1.5642 * y6;\n}\nreturn 1.0;\n}\nfloat project_size_at_latitude(float meters, float lat) {\nreturn meters * project.commonUnitsPerMeter.z * project_size_at_latitude(lat);\n}\nfloat project_size(float meters) {\nreturn meters * project.commonUnitsPerMeter.z * project_size();\n}\nvec2 project_size(vec2 meters) {\nreturn meters * project.commonUnitsPerMeter.xy * project_size();\n}\nvec3 project_size(vec3 meters) {\nreturn meters * project.commonUnitsPerMeter * project_size();\n}\nvec4 project_size(vec4 meters) {\nreturn vec4(meters.xyz * project.commonUnitsPerMeter, meters.w);\n}\nmat3 project_get_orientation_matrix(vec3 up) {\nvec3 uz = normalize(up);\nvec3 ux = abs(uz.z) == 1.0 ? vec3(1.0, 0.0, 0.0) : normalize(vec3(uz.y, -uz.x, 0));\nvec3 uy = cross(uz, ux);\nreturn mat3(ux, uy, uz);\n}\nbool project_needs_rotation(vec3 commonPosition, out mat3 transform) {\nif (project.projectionMode == PROJECTION_MODE_GLOBE) {\ntransform = project_get_orientation_matrix(commonPosition);\nreturn true;\n}\nreturn false;\n}\nvec3 project_normal(vec3 vector) {\nvec4 normal_modelspace = project.modelMatrix * vec4(vector, 0.0);\nvec3 n = normalize(normal_modelspace.xyz * project.commonUnitsPerMeter);\nmat3 rotation;\nif (project_needs_rotation(geometry.position.xyz, rotation)) {\nn = rotation * n;\n}\nreturn n;\n}\nvec4 project_offset_(vec4 offset) {\nfloat dy = offset.y;\nvec3 commonUnitsPerWorldUnit = project.commonUnitsPerWorldUnit + project.commonUnitsPerWorldUnit2 * dy;\nreturn vec4(offset.xyz * commonUnitsPerWorldUnit, offset.w);\n}\nvec2 project_mercator_(vec2 lnglat) {\nfloat x = lnglat.x;\nif (project.wrapLongitude) {\nx = mod(x + 180., 360.0) - 180.;\n}\nfloat y = clamp(lnglat.y, -89.9, 89.9);\nreturn vec2(\nradians(x) + PI,\nPI + log(tan_fp32(PI * 0.25 + radians(y) * 0.5))\n) * WORLD_SCALE;\n}\nvec3 project_globe_(vec3 lnglatz) {\nfloat lambda = radians(lnglatz.x);\nfloat phi = radians(lnglatz.y);\nfloat cosPhi = cos(phi);\nfloat D = (lnglatz.z / EARTH_RADIUS + 1.0) * GLOBE_RADIUS;\nreturn vec3(\nsin(lambda) * cosPhi,\n-cos(lambda) * cosPhi,\nsin(phi)\n) * D;\n}\nconst float MAX_MERCATOR_Y = 7.0439589847;\nvec2 project_globe_to_mercator_(vec3 spherePos) {\nfloat D = length(spherePos);\nfloat h = max(length(spherePos.xy), 1e-20);\nfloat y = sign(spherePos.z) * min(log((D + abs(spherePos.z)) / h), MAX_MERCATOR_Y);\nfloat x = atan(spherePos.x, -spherePos.y);\nreturn (vec2(x, y) + PI) * WORLD_SCALE;\n}\nvec2 project_common_position_to_flat(vec3 commonPosition) {\nif (project.projectionMode == PROJECTION_MODE_GLOBE) {\nreturn project_globe_to_mercator_(commonPosition);\n}\nreturn commonPosition.xy;\n}\nvec2 project_common_position_to_flat(vec4 commonPosition) {\nreturn project_common_position_to_flat(commonPosition.xyz);\n}\nfloat project_wrap_flat_x_(float x, float referenceX) {\nreturn x - TILE_SIZE * floor((x - referenceX) / TILE_SIZE + 0.5);\n}\nvec2 project_common_position_to_flat_wrapped(vec3 commonPosition, float referenceX) {\nvec2 flatPosition = project_common_position_to_flat(commonPosition);\nif (project.projectionMode != PROJECTION_MODE_IDENTITY) {\nflatPosition.x = project_wrap_flat_x_(flatPosition.x, referenceX);\n}\nreturn flatPosition;\n}\nvec2 project_common_position_to_flat_wrapped(vec4 commonPosition, float referenceX) {\nreturn project_common_position_to_flat_wrapped(commonPosition.xyz, referenceX);\n}\nvec2 project_common_position_to_flat_continuous(vec3 commonPosition, float referenceX) {\nvec2 flatPosition = project_common_position_to_flat(commonPosition);\nif (project.projectionMode == PROJECTION_MODE_GLOBE) {\nflatPosition.x = project_wrap_flat_x_(flatPosition.x, referenceX);\n}\nreturn flatPosition;\n}\nvec2 project_common_position_to_flat_continuous(vec4 commonPosition, float referenceX) {\nreturn project_common_position_to_flat_continuous(commonPosition.xyz, referenceX);\n}\nvec4 project_position(vec4 position, vec3 position64Low) {\nvec4 position_world = project.modelMatrix * position;\nif (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR) {\nif (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nreturn vec4(\nproject_mercator_(position_world.xy),\nproject_size_at_latitude(position_world.z, position_world.y),\nposition_world.w\n);\n}\nif (project.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN) {\nposition_world.xyz += project.coordinateOrigin;\n}\n}\nif (project.projectionMode == PROJECTION_MODE_GLOBE) {\nif (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nreturn vec4(\nproject_globe_(position_world.xyz),\nposition_world.w\n);\n}\nif (project.coordinateSystem == COORDINATE_SYSTEM_METER_OFFSETS) {\nmat3 enuMatrix = project_get_orientation_matrix(project.commonOrigin);\nfloat metersToCommon = GLOBE_RADIUS / EARTH_RADIUS;\nvec3 offsetCommon = (enuMatrix * vec3(-position_world.xy, position_world.z)) * metersToCommon;\nreturn vec4(project.commonOrigin + offsetCommon, position_world.w);\n}\n}\nif (project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\nif (project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT) {\nif (abs(position_world.y - project.coordinateOrigin.y) > 0.25) {\nreturn vec4(\nproject_mercator_(position_world.xy) - project.commonOrigin.xy,\nproject_size(position_world.z),\nposition_world.w\n);\n}\n}\n}\nif (project.projectionMode == PROJECTION_MODE_IDENTITY ||\n(project.projectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET &&\n(project.coordinateSystem == COORDINATE_SYSTEM_LNGLAT ||\nproject.coordinateSystem == COORDINATE_SYSTEM_CARTESIAN))) {\nposition_world.xyz -= project.coordinateOrigin;\n}\nreturn project_offset_(position_world) + project_offset_(project.modelMatrix * vec4(position64Low, 0.0));\n}\nvec4 project_position(vec4 position) {\nreturn project_position(position, ZERO_64_LOW);\n}\nvec3 project_position(vec3 position, vec3 position64Low) {\nvec4 projected_position = project_position(vec4(position, 1.0), position64Low);\nreturn projected_position.xyz;\n}\nvec3 project_position(vec3 position) {\nvec4 projected_position = project_position(vec4(position, 1.0), ZERO_64_LOW);\nreturn projected_position.xyz;\n}\nvec2 project_position(vec2 position) {\nvec4 projected_position = project_position(vec4(position, 0.0, 1.0), ZERO_64_LOW);\nreturn projected_position.xy;\n}\nvec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatrix, vec4 center) {\nreturn viewProjectionMatrix * position + center;\n}\nvec4 project_common_position_to_clipspace(vec4 position) {\nreturn project_common_position_to_clipspace(position, project.viewProjectionMatrix, project.center);\n}\nvec2 project_pixel_size_to_clipspace(vec2 pixels) {\nvec2 offset = pixels / project.viewportSize * project.devicePixelRatio * 2.0;\nreturn offset * project.focalDistance;\n}\nfloat project_size_to_pixel(float meters) {\nreturn project_size(meters) * project.scale;\n}\nvec2 project_size_to_pixel(vec2 meters) {\nreturn project_size(meters) * project.scale;\n}\nfloat project_size_to_pixel(float size, int unit) {\nif (unit == UNIT_METERS) return project_size_to_pixel(size);\nif (unit == UNIT_COMMON) return size * project.scale;\nreturn size;\n}\nfloat project_pixel_size(float pixels) {\nreturn pixels / project.scale;\n}\nvec2 project_pixel_size(vec2 pixels) {\nreturn pixels / project.scale;\n}\n`,getUniforms:function(e=Ks){return"viewport"in e?function({viewport:e,devicePixelRatio:t=1,modelMatrix:n=null,coordinateSystem:r="default",coordinateOrigin:o=Fs,autoWrapLongitude:i=!1}){"default"===r&&(r=e.isGeospatial?"lnglat":"cartesian");const s=Vs({viewport:e,devicePixelRatio:t,coordinateSystem:r,coordinateOrigin:o});return s.wrapLongitude=i,s.modelMatrix=n||Us,s}(e):{}},uniformTypes:{wrapLongitude:"f32",coordinateSystem:"i32",commonUnitsPerMeter:"vec3<f32>",projectionMode:"i32",scale:"f32",commonUnitsPerWorldUnit:"vec3<f32>",commonUnitsPerWorldUnit2:"vec3<f32>",center:"vec4<f32>",modelMatrix:"mat4x4<f32>",viewProjectionMatrix:"mat4x4<f32>",viewportSize:"vec2<f32>",devicePixelRatio:"f32",focalDistance:"f32",cameraPosition:"vec3<f32>",coordinateOrigin:"vec3<f32>",commonOrigin:"vec3<f32>",pseudoMeters:"f32"}};function Qs(e,t){const n=hi([],t,e);return ii(n,n,1/n[3]),n}function ea(e,t,n){return e<t?t:e>n?n:e}var ta=Math.log2||function(e){return Math.log(e)*Math.LOG2E};function na(e,t){if(!e)throw new Error(t||"@math.gl/web-mercator: assertion failed.")}var ra=Math.PI,oa=ra/4,ia=ra/180,sa=180/ra,aa=512,ca=4003e4,la=85.051129,ua=1.5;function ha(e){const[t,n]=e;na(Number.isFinite(t)),na(Number.isFinite(n)&&n>=-90&&n<=90,"invalid latitude");const r=n*ia;return[aa*(t*ia+ra)/(2*ra),aa*(ra+Math.log(Math.tan(oa+.5*r)))/(2*ra)]}function fa(e){const[t,n]=e,r=t/aa*(2*ra)-ra,o=2*(Math.atan(Math.exp(n/aa*(2*ra)-ra))-oa);return[r*sa,o*sa]}function da(e){const{latitude:t}=e;na(Number.isFinite(t));const n=Math.cos(t*ia);return function(e){return ta(e)}(ca*n)-9}function pa(e){return 12790407194604047e-21/Math.cos(e*ia)}function ma(e){const{latitude:t,longitude:n,highPrecision:r=!1}=e;na(Number.isFinite(t)&&Number.isFinite(n));const o=aa,i=Math.cos(t*ia),s=o/360,a=s/i,c=12790407194604047e-21/i,l={unitsPerMeter:[c,c,c],metersPerUnit:[1/c,1/c,1/c],unitsPerDegree:[s,a,c],degreesPerUnit:[.703125,1/a,1/c]};if(r){const e=ia*Math.tan(t*ia)/i,n=s*e/2,r=12790407194604047e-21*e,o=r/a*c;l.unitsPerDegree2=[0,n,r],l.unitsPerMeter2=[o,0,o]}return l}function ga(e,t){const[n,r,o]=e,[i,s,a]=t,{unitsPerMeter:c,unitsPerMeter2:l}=ma({longitude:n,latitude:r,highPrecision:!0}),u=ha(e);u[0]+=i*(c[0]+l[0]*s),u[1]+=s*(c[1]+l[1]*s);const h=fa(u),f=(o||0)+(a||0);return Number.isFinite(o)||Number.isFinite(a)?[h[0],h[1],f]:h}function ba(e){return 2*Math.atan(.5/e)*sa}function ya(e){return.5/Math.tan(.5*e*ia)}function _a(e,t){const[n,r,o=0]=e;return na(Number.isFinite(n)&&Number.isFinite(r)&&Number.isFinite(o)),Qs(t,[n,r,o,1])}function va(e,t,n=0){const[r,o,i]=e;if(na(Number.isFinite(r)&&Number.isFinite(o),"invalid pixel coordinate"),Number.isFinite(i))return Qs(t,[r,o,i,1]);const s=Qs(t,[r,o,0,1]),a=Qs(t,[r,o,1,1]),c=s[2],l=a[2];return Eo([],s,a,c===l?0:((n||0)-c)/(l-c))}function wa(e){const{width:t,height:n,bounds:r,minExtent:o=0,maxZoom:i=24,offset:s=[0,0]}=e,[[a,c],[l,u]]=r,h=function(e=0){return"number"==typeof e?{top:e,bottom:e,left:e,right:e}:(na(Number.isFinite(e.top)&&Number.isFinite(e.bottom)&&Number.isFinite(e.left)&&Number.isFinite(e.right)),e)}(e.padding),f=ha([a,ea(u,-85.051129,la)]),d=ha([l,ea(c,-85.051129,la)]),p=[Math.max(Math.abs(d[0]-f[0]),o),Math.max(Math.abs(d[1]-f[1]),o)],m=[t-h.left-h.right-2*Math.abs(s[0]),n-h.top-h.bottom-2*Math.abs(s[1])];na(m[0]>0&&m[1]>0);const g=m[0]/p[0],b=m[1]/p[1],y=(h.right-h.left)/2/g,_=(h.top-h.bottom)/2/b,v=fa([(d[0]+f[0])/2+y,(d[1]+f[1])/2+_]),w=Math.min(i,ta(Math.abs(Math.min(g,b))));return na(Number.isFinite(w)),{longitude:v[0],latitude:v[1],zoom:w}}var Ea=Math.PI/180;function xa(e,t,n){const{pixelUnprojectionMatrix:r}=e,o=Qs(r,[t,0,1,1]),i=Qs(r,[t,e.height,1,1]),s=fa(Eo([],o,i,(n*e.distanceScales.unitsPerMeter[2]-o[2])/(i[2]-o[2])));return s.push(n),s}var Pa=new class{constructor(e={}){this._pool=[],this.opts={overAlloc:2,poolSize:100},this.setOptions(e)}setOptions(e){Object.assign(this.opts,e)}allocate(e,t,{size:n=1,type:r,padding:o=0,copy:i=!1,initialize:s=!1,maxCount:a}){const c=r||e&&e.constructor||Float32Array,l=t*n+o;if(ArrayBuffer.isView(e)){if(l<=e.length)return e;if(l*e.BYTES_PER_ELEMENT<=e.buffer.byteLength)return new c(e.buffer,0,l)}let u=1/0;a&&(u=a*n+o);const h=this._allocate(c,l,s,u);return e&&i?h.set(e):s||h.fill(0,0,4),this._release(e),h}release(e){this._release(e)}_allocate(e,t,n,r){let o=Math.max(Math.ceil(t*this.opts.overAlloc),1);o>r&&(o=r);const i=this._pool,s=e.BYTES_PER_ELEMENT*o,a=i.findIndex(e=>e.byteLength>=s);if(a>=0){const t=new e(i.splice(a,1)[0],0,o);return n&&t.fill(0),t}return new e(o)}_release(e){if(!ArrayBuffer.isView(e))return;const t=this._pool,{buffer:n}=e,{byteLength:r}=n,o=t.findIndex(e=>e.byteLength>=r);o<0?t.push(n):(o>0||t.length<this.opts.poolSize)&&t.splice(o,0,n),t.length>this.opts.poolSize&&t.shift()}};function Oa(e,t){const n=e%t;return n<0?t+n:n}var Ta,Ma=new Xo;function Sa(e,t,n,r){Ma.set(e,t,n);const o=Ma.len();return{distance:r/o,normal:new Xo(-e/o,-t/o,-n/o)}}function ja(e){return e-Math.fround(e)}function Aa(e,t){const{size:n=1,startIndex:r=0}=t,o=void 0!==t.endIndex?t.endIndex:e.length,i=(o-r)/n;Ta=Pa.allocate(Ta,i,{type:Float32Array,size:2*n});let s=r,a=0;for(;s<o;){for(let t=0;t<n;t++){const r=e[s++];Ta[a+t]=r,Ta[a+t+n]=ja(r)}a+=2*n}return Ta.subarray(0,i*n*2)}function La(e){let t=null,n=!1;for(const r of e)r&&(t?(n||(t=[[t[0][0],t[0][1]],[t[1][0],t[1][1]]],n=!0),t[0][0]=Math.min(t[0][0],r[0][0]),t[0][1]=Math.min(t[0][1],r[0][1]),t[1][0]=Math.max(t[1][0],r[1][0]),t[1][1]=Math.max(t[1][1],r[1][1])):t=r);return t}var Ia=Math.PI/180,Ca=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],Ra=[0,0,0],$a={unitsPerMeter:[1,1,1],metersPerUnit:[1,1,1]};var ka=class e{constructor(e={}){this._frustumPlanes={},this.id=e.id||this.constructor.displayName||"viewport",this.x=e.x||0,this.y=e.y||0,this.width=e.width||1,this.height=e.height||1,this.zoom=e.zoom||0,this.padding=e.padding,this.distanceScales=e.distanceScales||$a,this.focalDistance=e.focalDistance||1,this.position=e.position||Ra,this.modelMatrix=e.modelMatrix||null;const{longitude:t,latitude:n}=e;this.isGeospatial=Number.isFinite(n)&&Number.isFinite(t),this._initProps(e),this._initMatrices(e),this.equals=this.equals.bind(this),this.project=this.project.bind(this),this.unproject=this.unproject.bind(this),this.projectPosition=this.projectPosition.bind(this),this.unprojectPosition=this.unprojectPosition.bind(this),this.projectFlat=this.projectFlat.bind(this),this.unprojectFlat=this.unprojectFlat.bind(this)}get subViewports(){return null}get metersPerPixel(){return this.distanceScales.metersPerUnit[2]/this.scale}get projectionMode(){return this.isGeospatial?this.zoom<12?Is.WEB_MERCATOR:Is.WEB_MERCATOR_AUTO_OFFSET:Is.IDENTITY}equals(t){return t instanceof e&&(this===t||t.width===this.width&&t.height===this.height&&t.scale===this.scale&&t.projectionMode===this.projectionMode&&t.resolution===this.resolution&&fo(t.distanceScales.unitsPerMeter,this.distanceScales.unitsPerMeter)&&fo(t.projectionMatrix,this.projectionMatrix)&&fo(t.viewMatrix,this.viewMatrix))}project(e,{topLeft:t=!0}={}){const n=_a(this.projectPosition(e),this.pixelProjectionMatrix),[r,o]=n,i=t?o:this.height-o;return 2===e.length?[r,i]:[r,i,n[2]]}unproject(e,{topLeft:t=!0,targetZ:n}={}){const[r,o,i]=e,s=t?o:this.height-o,a=n&&n*this.distanceScales.unitsPerMeter[2],c=va([r,s,i],this.pixelUnprojectionMatrix,a),[l,u,h]=this.unprojectPosition(c);return Number.isFinite(i)?[l,u,h]:Number.isFinite(n)?[l,u,n]:[l,u]}projectPosition(e){const[t,n]=this.projectFlat(e);return[t,n,(e[2]||0)*this.distanceScales.unitsPerMeter[2]]}unprojectPosition(e){const[t,n]=this.unprojectFlat(e);return[t,n,(e[2]||0)*this.distanceScales.metersPerUnit[2]]}projectFlat(e){if(this.isGeospatial){const t=ha(e);return t[1]=uo(t[1],-318,830),t}return e}unprojectFlat(e){return this.isGeospatial?fa(e):e}getBounds(e={}){const t={targetZ:e.z||0},n=this.unproject([0,0],t),r=this.unproject([this.width,0],t),o=this.unproject([0,this.height],t),i=this.unproject([this.width,this.height],t);return[Math.min(n[0],r[0],o[0],i[0]),Math.min(n[1],r[1],o[1],i[1]),Math.max(n[0],r[0],o[0],i[0]),Math.max(n[1],r[1],o[1],i[1])]}getDistanceScales(e){return e&&this.isGeospatial?ma({longitude:e[0],latitude:e[1],highPrecision:!0}):this.distanceScales}containsPixel({x:e,y:t,width:n=1,height:r=1}){return e<this.x+this.width&&this.x<e+n&&t<this.y+this.height&&this.y<t+r}getFrustumPlanes(){return this._frustumPlanes.near||Object.assign(this._frustumPlanes,{left:Sa((e=this.viewProjectionMatrix)[3]+e[0],e[7]+e[4],e[11]+e[8],e[15]+e[12]),right:Sa(e[3]-e[0],e[7]-e[4],e[11]-e[8],e[15]-e[12]),bottom:Sa(e[3]+e[1],e[7]+e[5],e[11]+e[9],e[15]+e[13]),top:Sa(e[3]-e[1],e[7]-e[5],e[11]-e[9],e[15]-e[13]),near:Sa(e[3]+e[2],e[7]+e[6],e[11]+e[10],e[15]+e[14]),far:Sa(e[3]-e[2],e[7]-e[6],e[11]-e[10],e[15]-e[14])}),this._frustumPlanes;var e}panByPosition(e,t,n){return null}_initProps(e){const t=e.longitude,n=e.latitude;this.isGeospatial&&(Number.isFinite(e.zoom)||(this.zoom=da({latitude:n})+Math.log2(this.focalDistance)),this.distanceScales=e.distanceScales||ma({latitude:n,longitude:t}));const r=Math.pow(2,this.zoom);this.scale=r;const{position:o,modelMatrix:i}=e;let s=Ra;if(o&&(s=i?new wi(i).transformAsVector(o,[]):o),this.isGeospatial){const e=this.projectPosition([t,n,0]);this.center=new Xo(s).scale(this.distanceScales.unitsPerMeter).add(e)}else this.center=this.projectPosition(s)}_initMatrices(e){const{viewMatrix:t=Ca,projectionMatrix:n=null,orthographic:r=!1,fovyRadians:o,fovy:i=75,near:s=.1,far:a=1e3,padding:c=null,focalDistance:l=1}=e;this.viewMatrixUncentered=t,this.viewMatrix=(new wi).multiplyRight(t).translate(new Xo(this.center).negate()),this.projectionMatrix=n||function({width:e,height:t,orthographic:n,fovyRadians:r,focalDistance:o,padding:i,near:s,far:a}){const c=e/t,l=n?(new wi).orthographic({fovy:r,aspect:c,focalDistance:o,near:s,far:a}):(new wi).perspective({fovy:r,aspect:c,near:s,far:a});if(i){const{left:n=0,right:r=0,top:o=0,bottom:s=0}=i,a=uo((n+e-r)/2,0,e)-e/2,c=uo((o+t-s)/2,0,t)-t/2;l[8]-=2*a/e,l[9]+=2*c/t}return l}({width:this.width,height:this.height,orthographic:r,fovyRadians:o||i*Ia,focalDistance:l,padding:c,near:s,far:a});const u=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];var h;Zo(u,u,this.projectionMatrix),Zo(u,u,this.viewMatrix),this.viewProjectionMatrix=u,this.viewMatrixInverse=Ho([],this.viewMatrix)||this.viewMatrix,this.cameraPosition=[(h=this.viewMatrixInverse)[12],h[13],h[14]];const f=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],d=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];Jo(f,f,[this.width/2,-this.height/2,1]),Ko(f,f,[1,-1,0]),Zo(d,f,this.viewProjectionMatrix),this.pixelProjectionMatrix=d,this.pixelUnprojectionMatrix=Ho([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],this.pixelProjectionMatrix),this.pixelUnprojectionMatrix||Ze.warn("Pixel project matrix not invertible")()}};ka.displayName="Viewport";var Na=class e extends ka{constructor(e={}){const{latitude:t=0,longitude:n=0,zoom:r=0,pitch:o=0,bearing:i=0,nearZMultiplier:s=.1,farZMultiplier:a=1.01,nearZ:c,farZ:l,orthographic:u=!1,projectionMatrix:h,repeat:f=!1,worldOffset:d=0,position:p,padding:m,legacyMeterSizes:g=!1}=e;let{width:b,height:y,altitude:_=1.5}=e;const v=Math.pow(2,r);let w;b=b||1,y=y||1;let E=null;if(h)_=h[5]/2,w=ba(_);else{let n;if(e.fovy?(w=e.fovy,_=ya(w)):w=ba(_),m){const{top:e=0,bottom:t=0}=m;n=[0,uo((e+y-t)/2,0,y)-y/2]}E=function(e){const{width:t,height:n,altitude:r,pitch:o=0,offset:i,center:s,scale:a,nearZMultiplier:c=1,farZMultiplier:l=1}=e;let{fovy:u=ba(ua)}=e;void 0!==r&&(u=ba(r));const h=u*ia,f=o*ia,d=ya(u);let p=d;s&&(p+=s[2]*a/Math.cos(f)/n);const m=h*(.5+(i?i[1]:0)/n),g=Math.sin(m)*p/Math.sin(ea(Math.PI/2-f-m,.01,Math.PI-.01)),b=Math.sin(f)*g+p,y=10*p;return{fov:h,aspect:t/n,focalDistance:d,near:c,far:Math.min(b*l,y)}}({width:b,height:y,scale:v,center:p&&[0,0,p[2]*pa(t)],offset:n,pitch:o,fovy:w,nearZMultiplier:s,farZMultiplier:a}),Number.isFinite(c)&&(E.near=c),Number.isFinite(l)&&(E.far=l)}let x=function(e){const{height:t,pitch:n,bearing:r,altitude:o,scale:i,center:s}=e,a=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];Ko(a,a,[0,0,-o]),Qo(a,a,-n*ia),ei(a,a,r*ia);const c=i/t;var l,u;return Jo(a,a,[c,c,c]),s&&Ko(a,a,((l=[])[0]=-(u=s)[0],l[1]=-u[1],l[2]=-u[2],l)),a}({height:y,pitch:o,bearing:i,scale:v,altitude:_});d&&(x=(new wi).translate([512*d,0,0]).multiplyLeft(x)),super({...e,width:b,height:y,viewMatrix:x,longitude:n,latitude:t,zoom:r,...E,fovy:w,focalDistance:_}),this.latitude=t,this.longitude=n,this.zoom=r,this.pitch=o,this.bearing=i,this.altitude=_,this.fovy=w,this.orthographic=u,this._subViewports=f?[]:null,this._pseudoMeters=g,Object.freeze(this)}get subViewports(){if(this._subViewports&&!this._subViewports.length){const t=this.getBounds(),n=Math.floor((t[0]+180)/360),r=Math.ceil((t[2]-180)/360);for(let o=n;o<=r;o++){const t=o?new e({...this,worldOffset:o}):this;this._subViewports.push(t)}}return this._subViewports}equals(t){return t instanceof e&&t._pseudoMeters===this._pseudoMeters&&super.equals(t)}projectPosition(e){if(this._pseudoMeters)return super.projectPosition(e);const[t,n]=this.projectFlat(e);return[t,n,(e[2]||0)*pa(e[1])]}unprojectPosition(e){if(this._pseudoMeters)return super.unprojectPosition(e);const[t,n]=this.unprojectFlat(e);return[t,n,(e[2]||0)/pa(n)]}addMetersToLngLat(e,t){return ga(e,t)}panByPosition(e,t,n){const r=va(t,this.pixelUnprojectionMatrix),o=wo([],this.projectFlat(e),((i=[])[0]=-(s=r)[0],i[1]=-s[1],i));var i,s;const a=wo([],this.center,o),[c,l]=this.unprojectFlat(a);return{longitude:c,latitude:l}}panByPosition3D(e,t){const n=e[2]||0,r=Mo([],e,this.unproject(t,{targetZ:n}));return{longitude:this.longitude+r[0],latitude:this.latitude+r[1]}}getBounds(e={}){const t=function(e,t=0){const{width:n,height:r,unproject:o}=e,i={targetZ:t},s=o([0,r],i),a=o([n,r],i);let c,l;return(e.fovy?.5*e.fovy*Ea:Math.atan(.5/e.altitude))>(90-e.pitch)*Ea-.01?(c=xa(e,0,t),l=xa(e,n,t)):(c=o([0,0],i),l=o([n,0],i)),[s,a,l,c]}(this,e.z||0);return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1]),Math.max(t[0][0],t[1][0],t[2][0],t[3][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1])]}fitBounds(t,n={}){const{width:r,height:o}=this,{longitude:i,latitude:s,zoom:a}=wa({width:r,height:o,bounds:t,...n});return new e({width:r,height:o,longitude:i,latitude:s,zoom:a})}};Na.displayName="WebMercatorViewport";var Da={NO_STATE:"Awaiting state",MATCHED:"Matched. State transferred from previous layer",INITIALIZED:"Initialized",AWAITING_GC:"Discarded. Awaiting garbage collection",AWAITING_FINALIZATION:"No longer matched. Awaiting garbage collection",FINALIZED:"Finalized! Awaiting garbage collection"},za=Symbol.for("component"),Ua=Symbol.for("propTypes"),Wa=Symbol.for("deprecatedProps"),Fa=Symbol.for("asyncPropDefaults"),Ba=Symbol.for("asyncPropOriginal"),Ga=Symbol.for("asyncPropResolved");function Va(e,t=()=>!0){return Array.isArray(e)?Ya(e,t,[]):t(e)?[e]:[]}function Ya(e,t,n){let r=-1;for(;++r<e.length;){const o=e[r];Array.isArray(o)?Ya(o,t,n):t(o)&&n.push(o)}return n}function Xa({target:e,source:t,start:n=0,count:r=1}){const o=t.length,i=r*o;let s=0;for(let a=n;s<o;s++)e[a++]=t[s];for(;s<i;)s<i-s?(e.copyWithin(n+s,n,n+s),s*=2):(e.copyWithin(n+s,n,n+i-s),s=i);return e}function qa(e,t,n){if(e===t)return!0;if(!n||!e||!t)return!1;if(Array.isArray(e)){if(!Array.isArray(t)||e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(!qa(e[r],t[r],n-1))return!1;return!0}if(Array.isArray(t))return!1;if("object"==typeof e&&"object"==typeof t){const r=Object.keys(e),o=Object.keys(t);if(r.length!==o.length)return!1;for(const i of r){if(!t.hasOwnProperty(i))return!1;if(!qa(e[i],t[i],n-1))return!1}return!0}return!1}var Ha=class{constructor(e){this._inProgress=!1,this._handle=null,this.time=0,this.settings={duration:0},this._timeline=e}get inProgress(){return this._inProgress}start(e){this.cancel(),this.settings=e,this._inProgress=!0,this.settings.onStart?.(this)}end(){this._inProgress&&(this._timeline.removeChannel(this._handle),this._handle=null,this._inProgress=!1,this.settings.onEnd?.(this))}cancel(){this._inProgress&&(this.settings.onInterrupt?.(this),this._timeline.removeChannel(this._handle),this._handle=null,this._inProgress=!1)}update(){if(!this._inProgress)return!1;if(null===this._handle){const{_timeline:e,settings:t}=this;this._handle=e.addChannel({delay:e.getTime(),duration:t.duration})}return this.time=this._timeline.getTime(this._handle),this._onUpdate(),this.settings.onUpdate?.(this),this._timeline.isFinished(this._handle)&&this.end(),!0}_onUpdate(){}};function Za(e,t){if(!e)throw new Error(t||"deck.gl: assertion failed.")}var Ka=null,Ja=!1;async function Qa(){rc()}function ec(e,t){return rc(),e}async function tc(e){rc()}function nc(e){return Ka?.initialize(e),null}function rc(){Ja||(Ja=!0,e.log.warn("Import @luma.gl/webgl/debug before enabling WebGL debugging.")())}Object.defineProperty(exports,"ARRAY_TYPE",{enumerable:!0,get:function(){return vo}}),Object.defineProperty(exports,"ASYNC_DEFAULTS_SYMBOL",{enumerable:!0,get:function(){return Fa}}),Object.defineProperty(exports,"ASYNC_ORIGINAL_SYMBOL",{enumerable:!0,get:function(){return Ba}}),Object.defineProperty(exports,"ASYNC_RESOLVED_SYMBOL",{enumerable:!0,get:function(){return Ga}}),Object.defineProperty(exports,"COMPONENT_SYMBOL",{enumerable:!0,get:function(){return za}}),Object.defineProperty(exports,"COORDINATE_SYSTEM",{enumerable:!0,get:function(){return Ls}}),Object.defineProperty(exports,"DEPRECATED_PROPS_SYMBOL",{enumerable:!0,get:function(){return Wa}}),Object.defineProperty(exports,"DEVICE_DEFAULT_PROPS",{enumerable:!0,get:function(){return Yt}}),Object.defineProperty(exports,"Device",{enumerable:!0,get:function(){return Mn}}),Object.defineProperty(exports,"DeviceFeatures",{enumerable:!0,get:function(){return On}}),Object.defineProperty(exports,"DeviceLimits",{enumerable:!0,get:function(){return xn}}),Object.defineProperty(exports,"EPSILON",{enumerable:!0,get:function(){return 1e-6}}),Object.defineProperty(exports,"EVENT_HANDLERS",{enumerable:!0,get:function(){return Rs}}),Object.defineProperty(exports,"EventManager",{enumerable:!0,get:function(){return As}}),Object.defineProperty(exports,"GLSLShaderAssembler",{enumerable:!0,get:function(){return eo}}),Object.defineProperty(exports,"LIFECYCLE",{enumerable:!0,get:function(){return Da}}),Object.defineProperty(exports,"MAX_LATITUDE",{enumerable:!0,get:function(){return la}}),Object.defineProperty(exports,"MathArray",{enumerable:!0,get:function(){return mo}}),Object.defineProperty(exports,"Matrix",{enumerable:!0,get:function(){return qo}}),Object.defineProperty(exports,"Matrix4",{enumerable:!0,get:function(){return wi}}),Object.defineProperty(exports,"PROJECTION_MODE",{enumerable:!0,get:function(){return Is}}),Object.defineProperty(exports,"PROP_TYPES_SYMBOL",{enumerable:!0,get:function(){return Ua}}),Object.defineProperty(exports,"RECOGNIZERS",{enumerable:!0,get:function(){return $s}}),Object.defineProperty(exports,"Sampler",{enumerable:!0,get:function(){return Sn}}),Object.defineProperty(exports,"ShaderAssembler",{enumerable:!0,get:function(){return Qr}}),Object.defineProperty(exports,"Stats",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"Texture",{enumerable:!0,get:function(){return An}}),Object.defineProperty(exports,"Transition",{enumerable:!0,get:function(){return Ha}}),Object.defineProperty(exports,"UNIT",{enumerable:!0,get:function(){return Cs}}),Object.defineProperty(exports,"VERSION",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"Vector",{enumerable:!0,get:function(){return _o}}),Object.defineProperty(exports,"Vector3",{enumerable:!0,get:function(){return Xo}}),Object.defineProperty(exports,"Viewport",{enumerable:!0,get:function(){return ka}}),Object.defineProperty(exports,"WGSLShaderAssembler",{enumerable:!0,get:function(){return to}}),Object.defineProperty(exports,"WebMercatorViewport",{enumerable:!0,get:function(){return Na}}),Object.defineProperty(exports,"add",{enumerable:!0,get:function(){return oi}}),Object.defineProperty(exports,"addMetersToLngLat",{enumerable:!0,get:function(){return ga}}),Object.defineProperty(exports,"altitudeToFovy",{enumerable:!0,get:function(){return ba}}),Object.defineProperty(exports,"assert",{enumerable:!0,get:function(){return Za}}),Object.defineProperty(exports,"assert$1",{enumerable:!0,get:function(){return yo}}),Object.defineProperty(exports,"assert$2",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"assert$3",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"checkNumber",{enumerable:!0,get:function(){return go}}),Object.defineProperty(exports,"checkVector",{enumerable:!0,get:function(){return bo}}),Object.defineProperty(exports,"clamp",{enumerable:!0,get:function(){return uo}}),Object.defineProperty(exports,"config",{enumerable:!0,get:function(){return oo}}),Object.defineProperty(exports,"copyToArrayBuffer",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"create",{enumerable:!0,get:function(){return Io}}),Object.defineProperty(exports,"cross",{enumerable:!0,get:function(){return No}}),Object.defineProperty(exports,"debug",{enumerable:!0,get:function(){return et}}),Object.defineProperty(exports,"deepEqual",{enumerable:!0,get:function(){return qa}}),Object.defineProperty(exports,"defaultLogger",{enumerable:!0,get:function(){return Ze}}),Object.defineProperty(exports,"degrees",{enumerable:!0,get:function(){return lo}}),Object.defineProperty(exports,"dirname",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"dot",{enumerable:!0,get:function(){return li}}),Object.defineProperty(exports,"dot$1",{enumerable:!0,get:function(){return ko}}),Object.defineProperty(exports,"ensureArrayBuffer",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"equals",{enumerable:!0,get:function(){return fo}}),Object.defineProperty(exports,"fillArray",{enumerable:!0,get:function(){return Xa}}),Object.defineProperty(exports,"flatten",{enumerable:!0,get:function(){return Va}}),Object.defineProperty(exports,"fovyToAltitude",{enumerable:!0,get:function(){return ya}}),Object.defineProperty(exports,"fp32",{enumerable:!0,get:function(){return Ti}}),Object.defineProperty(exports,"fromValues",{enumerable:!0,get:function(){return Ro}}),Object.defineProperty(exports,"geometry_default",{enumerable:!0,get:function(){return Si}}),Object.defineProperty(exports,"getExternalImageSize",{enumerable:!0,get:function(){return En}}),Object.defineProperty(exports,"getGLSLUniformBlocks",{enumerable:!0,get:function(){return kn}}),Object.defineProperty(exports,"getOffsetOrigin",{enumerable:!0,get:function(){return Ys}}),Object.defineProperty(exports,"getScaling",{enumerable:!0,get:function(){return ti}}),Object.defineProperty(exports,"getShaderCoordinateSystem",{enumerable:!0,get:function(){return Gs}}),Object.defineProperty(exports,"getShaderModuleDependencies",{enumerable:!0,get:function(){return Ft}}),Object.defineProperty(exports,"getShaderModuleUniformBlockName",{enumerable:!0,get:function(){return Cn}}),Object.defineProperty(exports,"initializeRegisteredSpectorJS",{enumerable:!0,get:function(){return nc}}),Object.defineProperty(exports,"isArray",{enumerable:!0,get:function(){return so}}),Object.defineProperty(exports,"isBrowser",{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,"isBrowser$1",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"isExternalImage",{enumerable:!0,get:function(){return wn}}),Object.defineProperty(exports,"isHTMLInCanvasSupported",{enumerable:!0,get:function(){return Tn}}),Object.defineProperty(exports,"isWorker",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"len",{enumerable:!0,get:function(){return Go}}),Object.defineProperty(exports,"length",{enumerable:!0,get:function(){return si}}),Object.defineProperty(exports,"length$1",{enumerable:!0,get:function(){return Co}}),Object.defineProperty(exports,"lerp",{enumerable:!0,get:function(){return ui}}),Object.defineProperty(exports,"lerp$1",{enumerable:!0,get:function(){return Do}}),Object.defineProperty(exports,"lerp$2",{enumerable:!0,get:function(){return ho}}),Object.defineProperty(exports,"lngLatToWorld",{enumerable:!0,get:function(){return ha}}),Object.defineProperty(exports,"load",{enumerable:!0,get:function(){return He}}),Object.defineProperty(exports,"loadRegisteredSpectorJS",{enumerable:!0,get:function(){return tc}}),Object.defineProperty(exports,"loadRegisteredWebGLDeveloperTools",{enumerable:!0,get:function(){return Qa}}),Object.defineProperty(exports,"log",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"lumaStats",{enumerable:!0,get:function(){return Zt}}),Object.defineProperty(exports,"makeRegisteredDebugContext",{enumerable:!0,get:function(){return ec}}),Object.defineProperty(exports,"memoize",{enumerable:!0,get:function(){return Ns}}),Object.defineProperty(exports,"mergeBounds",{enumerable:!0,get:function(){return La}}),Object.defineProperty(exports,"mergeOptions",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"mod",{enumerable:!0,get:function(){return Oa}}),Object.defineProperty(exports,"normalize",{enumerable:!0,get:function(){return ci}}),Object.defineProperty(exports,"normalize$1",{enumerable:!0,get:function(){return $o}}),Object.defineProperty(exports,"pixelsToWorld",{enumerable:!0,get:function(){return va}}),Object.defineProperty(exports,"project_default",{enumerable:!0,get:function(){return Js}}),Object.defineProperty(exports,"register",{enumerable:!0,get:function(){return Qe}}),Object.defineProperty(exports,"registerLoaders",{enumerable:!0,get:function(){return je}}),Object.defineProperty(exports,"resolve",{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,"resolvePath",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"scale",{enumerable:!0,get:function(){return ii}}),Object.defineProperty(exports,"sliceArrayBuffer",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"sqrLen",{enumerable:!0,get:function(){return Vo}}),Object.defineProperty(exports,"squaredLength",{enumerable:!0,get:function(){return ai}}),Object.defineProperty(exports,"sub",{enumerable:!0,get:function(){return Bo}}),Object.defineProperty(exports,"textureFormatDecoder",{enumerable:!0,get:function(){return _n}}),Object.defineProperty(exports,"toDegrees",{enumerable:!0,get:function(){return co}}),Object.defineProperty(exports,"toDoublePrecisionArray",{enumerable:!0,get:function(){return Aa}}),Object.defineProperty(exports,"toRadians",{enumerable:!0,get:function(){return ao}}),Object.defineProperty(exports,"transformMat2",{enumerable:!0,get:function(){return xo}}),Object.defineProperty(exports,"transformMat2d",{enumerable:!0,get:function(){return Po}}),Object.defineProperty(exports,"transformMat3",{enumerable:!0,get:function(){return Uo}}),Object.defineProperty(exports,"transformMat3$1",{enumerable:!0,get:function(){return Oo}}),Object.defineProperty(exports,"transformMat4",{enumerable:!0,get:function(){return hi}}),Object.defineProperty(exports,"transformMat4$1",{enumerable:!0,get:function(){return zo}}),Object.defineProperty(exports,"transformMat4$2",{enumerable:!0,get:function(){return To}}),Object.defineProperty(exports,"transformQuat",{enumerable:!0,get:function(){return fi}}),Object.defineProperty(exports,"transformQuat$1",{enumerable:!0,get:function(){return Wo}}),Object.defineProperty(exports,"typed_array_manager_default",{enumerable:!0,get:function(){return Pa}}),Object.defineProperty(exports,"unitsPerMeter",{enumerable:!0,get:function(){return pa}}),Object.defineProperty(exports,"vec2_transformMat4AsVector",{enumerable:!0,get:function(){return So}}),Object.defineProperty(exports,"vec4_transformMat2",{enumerable:!0,get:function(){return Ao}}),Object.defineProperty(exports,"vec4_transformMat3",{enumerable:!0,get:function(){return Lo}}),Object.defineProperty(exports,"worldToLngLat",{enumerable:!0,get:function(){return fa}}),Object.defineProperty(exports,"worldToPixels",{enumerable:!0,get:function(){return _a}});
|