From c25246b8a004bb0447107dccf3a0ae4e7bbbb5f7 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot Date: Thu, 1 Jan 2026 02:00:29 +0000 Subject: [PATCH] Release v0.9.12 Automated sync from private repository. Built with obfuscation enabled. --- frontend/dist/VERSION | 2 +- .../assets/{Contacts-DqJQXP9J.js => Contacts-KG1-ZuDC.js} | 4 ++-- ...apMapLibre-DCT-qdMC.js => ContactsMapMapLibre-BOuXJWS6.js} | 2 +- .../assets/{Dashboard-CxC288Px.js => Dashboard-Drqp0UGd.js} | 2 +- frontend/dist/assets/{Grid-25fDDxGj.js => Grid-bg16qpf9.js} | 2 +- .../assets/{HashBadge-DCqJqy_v.js => HashBadge-6BYC-dVg.js} | 2 +- frontend/dist/assets/{Logs-Dk9pvZ5W.js => Logs-CJ4Sx7Gl.js} | 2 +- ...tDetailModal-BZsjGU1X.js => PacketDetailModal-nv4SOC1m.js} | 4 ++-- .../dist/assets/{Packets-DNZDuQJA.js => Packets-BudEg67Y.js} | 2 +- .../assets/{PageLayout-DkGk1cTx.js => PageLayout-DeGN0Ulg.js} | 2 +- ...athMapMapLibre-pr5WW6Hs.js => PathMapMapLibre-DmKYi_M9.js} | 2 +- .../assets/{Settings-DYsZnEWY.js => Settings-CqOxguXw.js} | 2 +- ...ignalIndicator-Nx590AkL.js => SignalIndicator-CqotkK-c.js} | 2 +- .../assets/{Statistics-D-JSHwEk.js => Statistics-Kp9dTKtM.js} | 2 +- .../dist/assets/{System-B7cr_J61.js => System-CliRU7pN.js} | 2 +- .../assets/{Terminal-B2U2vi3q.js => Terminal-DgR1ie8s.js} | 2 +- ...angeSelector-B4UShnnZ.js => TimeRangeSelector-D8kJhfit.js} | 2 +- .../assets/{activity-YyU_9mqB.js => activity-SNbph4bZ.js} | 2 +- frontend/dist/assets/circle-DVLSJizR.js | 1 + frontend/dist/assets/circle-dx6_YOrx.js | 1 - frontend/dist/assets/{house-D7tD7oMV.js => house-B6m2T4gU.js} | 2 +- frontend/dist/assets/{index-BdUmG6z3.js => index-Dr6RiKZe.js} | 4 ++-- frontend/dist/assets/{info-B3dHaNdm.js => info-Cpkis-Fu.js} | 2 +- .../{loader-circle-CRg1Yoc_.js => loader-circle-DYme_klB.js} | 2 +- frontend/dist/assets/{map-B1t3mPjU.js => map-DOrFskIg.js} | 2 +- .../{maplibre-gl-COhGl2RU.js => maplibre-gl-CBi4X-Xj.js} | 2 +- .../assets/{refresh-cw-B7gVa9Xi.js => refresh-cw-D-H-igOq.js} | 2 +- .../{trending-up-B7h_3LVW.js => trending-up-C_4k_dB-.js} | 2 +- ...{triangle-alert-BpNME9Y2.js => triangle-alert-jbGP55uT.js} | 2 +- frontend/dist/assets/{users-D5YN1J7b.js => users-D6CYjw5Y.js} | 2 +- frontend/dist/assets/{zap-BjrLGDgf.js => zap-OotQqJQ7.js} | 2 +- frontend/dist/index.html | 2 +- frontend/package.json | 2 +- 33 files changed, 35 insertions(+), 35 deletions(-) rename frontend/dist/assets/{Contacts-DqJQXP9J.js => Contacts-KG1-ZuDC.js} (95%) rename frontend/dist/assets/{ContactsMapMapLibre-DCT-qdMC.js => ContactsMapMapLibre-BOuXJWS6.js} (88%) rename frontend/dist/assets/{Dashboard-CxC288Px.js => Dashboard-Drqp0UGd.js} (97%) rename frontend/dist/assets/{Grid-25fDDxGj.js => Grid-bg16qpf9.js} (94%) rename frontend/dist/assets/{HashBadge-DCqJqy_v.js => HashBadge-6BYC-dVg.js} (97%) rename frontend/dist/assets/{Logs-Dk9pvZ5W.js => Logs-CJ4Sx7Gl.js} (95%) rename frontend/dist/assets/{PacketDetailModal-BZsjGU1X.js => PacketDetailModal-nv4SOC1m.js} (97%) rename frontend/dist/assets/{Packets-DNZDuQJA.js => Packets-BudEg67Y.js} (95%) rename frontend/dist/assets/{PageLayout-DkGk1cTx.js => PageLayout-DeGN0Ulg.js} (96%) rename frontend/dist/assets/{PathMapMapLibre-pr5WW6Hs.js => PathMapMapLibre-DmKYi_M9.js} (97%) rename frontend/dist/assets/{Settings-DYsZnEWY.js => Settings-CqOxguXw.js} (97%) rename frontend/dist/assets/{SignalIndicator-Nx590AkL.js => SignalIndicator-CqotkK-c.js} (97%) rename frontend/dist/assets/{Statistics-D-JSHwEk.js => Statistics-Kp9dTKtM.js} (98%) rename frontend/dist/assets/{System-B7cr_J61.js => System-CliRU7pN.js} (97%) rename frontend/dist/assets/{Terminal-B2U2vi3q.js => Terminal-DgR1ie8s.js} (99%) rename frontend/dist/assets/{TimeRangeSelector-B4UShnnZ.js => TimeRangeSelector-D8kJhfit.js} (87%) rename frontend/dist/assets/{activity-YyU_9mqB.js => activity-SNbph4bZ.js} (72%) create mode 100644 frontend/dist/assets/circle-DVLSJizR.js delete mode 100644 frontend/dist/assets/circle-dx6_YOrx.js rename frontend/dist/assets/{house-D7tD7oMV.js => house-B6m2T4gU.js} (76%) rename frontend/dist/assets/{index-BdUmG6z3.js => index-Dr6RiKZe.js} (98%) rename frontend/dist/assets/{info-B3dHaNdm.js => info-Cpkis-Fu.js} (68%) rename frontend/dist/assets/{loader-circle-CRg1Yoc_.js => loader-circle-DYme_klB.js} (54%) rename frontend/dist/assets/{map-B1t3mPjU.js => map-DOrFskIg.js} (84%) rename frontend/dist/assets/{maplibre-gl-COhGl2RU.js => maplibre-gl-CBi4X-Xj.js} (99%) rename frontend/dist/assets/{refresh-cw-B7gVa9Xi.js => refresh-cw-D-H-igOq.js} (79%) rename frontend/dist/assets/{trending-up-B7h_3LVW.js => trending-up-C_4k_dB-.js} (87%) rename frontend/dist/assets/{triangle-alert-BpNME9Y2.js => triangle-alert-jbGP55uT.js} (75%) rename frontend/dist/assets/{users-D5YN1J7b.js => users-D6CYjw5Y.js} (78%) rename frontend/dist/assets/{zap-BjrLGDgf.js => zap-OotQqJQ7.js} (85%) diff --git a/frontend/dist/VERSION b/frontend/dist/VERSION index 8225a4ba..583b27ac 100644 --- a/frontend/dist/VERSION +++ b/frontend/dist/VERSION @@ -1 +1 @@ -0.9.11 +0.9.12 diff --git a/frontend/dist/assets/Contacts-DqJQXP9J.js b/frontend/dist/assets/Contacts-KG1-ZuDC.js similarity index 95% rename from frontend/dist/assets/Contacts-DqJQXP9J.js rename to frontend/dist/assets/Contacts-KG1-ZuDC.js index 975a378b..2aa9e01e 100644 --- a/frontend/dist/assets/Contacts-DqJQXP9J.js +++ b/frontend/dist/assets/Contacts-KG1-ZuDC.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ContactsMapMapLibre-DCT-qdMC.js","assets/index-BdUmG6z3.js","assets/recharts-bmHCCfxU.js","assets/maplibre-gl-CFO9X1Ek.js","assets/index-DRIJpMsz.css","assets/maplibre-gl-COhGl2RU.js","assets/maplibre-gl-B1CfjdFi.css","assets/HashBadge-DCqJqy_v.js","assets/loader-circle-CRg1Yoc_.js","assets/info-B3dHaNdm.js","assets/house-D7tD7oMV.js","assets/refresh-cw-B7gVa9Xi.js","assets/trending-up-B7h_3LVW.js","assets/map-B1t3mPjU.js","assets/SignalIndicator-Nx590AkL.js","assets/triangle-alert-BpNME9Y2.js","assets/zap-BjrLGDgf.js","assets/activity-YyU_9mqB.js","assets/PageLayout-DkGk1cTx.js","assets/users-D5YN1J7b.js"])))=>i.map(i=>d[i]); -import{c as e,j as t,_ as s,z as a,y as n,X as r,A as l,B as i,E as o,g as c,F as d,G as h,H as m,f as x,R as u,C as p,I as g}from"./index-BdUmG6z3.js";import{b,g as j,c as y,d as v,h as f,T as N,f as w,e as k,L as C}from"./recharts-bmHCCfxU.js";import{a as M}from"./SignalIndicator-Nx590AkL.js";import{T as S}from"./triangle-alert-BpNME9Y2.js";import{T as H,Z as L,M as _}from"./zap-BjrLGDgf.js";import{A as E}from"./activity-YyU_9mqB.js";import{T as $,N as R}from"./trending-up-B7h_3LVW.js";import{M as A,H as P}from"./HashBadge-DCqJqy_v.js";import{P as T,a as O,C as z,b as F}from"./PageLayout-DkGk1cTx.js";import{U as q}from"./users-D5YN1J7b.js";const K=e("arrow-left-right",[["path",{d:"M8 3 4 7l4 4",key:"9rb6wj"}],["path",{d:"M4 7h16",key:"6tx8e3"}],["path",{d:"m16 21 4-4-4-4",key:"siv7j2"}],["path",{d:"M20 17H4",key:"h6l3hr"}]]),D=e("arrow-up-down",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]),B=e("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]),I=e("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),W=e("messages-square",[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]),V=e("monitor-smartphone",[["path",{d:"M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8",key:"10dyio"}],["path",{d:"M10 19v-3.96 3.15",key:"1irgej"}],["path",{d:"M7 19h5",key:"qswx4l"}],["rect",{width:"6",height:"10",x:"16",y:"12",rx:"2",key:"1egngj"}]]),U=e("ruler",[["path",{d:"M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z",key:"icamh8"}],["path",{d:"m14.5 12.5 2-2",key:"inckbg"}],["path",{d:"m11.5 9.5 2-2",key:"fmmyf7"}],["path",{d:"m8.5 6.5 2-2",key:"vc6u1g"}],["path",{d:"m17.5 15.5 2-2",key:"wo5hmg"}]]),G=e("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]),Z=e("share-2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]),Y=e("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);class J extends b.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){var e;return this.state.hasError?t.jsx("div",{className:"glass-card h-[400px] flex items-center justify-center",children:t.jsxs("div",{className:"text-center text-white/50 p-4",children:[t.jsx("p",{className:"text-lg mb-2",children:"Map failed to load"}),t.jsx("p",{className:"text-sm text-white/30",children:(null==(e=this.state.error)?void 0:e.message)||"Unknown error"})]})}):this.props.children}}const Q=b.lazy(()=>s(()=>import("./ContactsMapMapLibre-DCT-qdMC.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])));function X({neighbors:e,localNode:s,localHash:a,onRemoveNode:n,selectedNodeHash:r,onNodeSelected:l,highlightedEdgeKey:i}){return t.jsx(J,{children:t.jsx(b.Suspense,{fallback:t.jsx("div",{className:"glass-card h-[500px] flex items-center justify-center",children:t.jsx("div",{className:"text-white/50",children:"Loading map..."})}),children:t.jsx(Q,{neighbors:e,localNode:s,localHash:a,onRemoveNode:n,selectedNodeHash:r,onNodeSelected:l,highlightedEdgeKey:i})})})}function ee(e){return e>=.7?"text-accent-success":e>=.5?"text-accent-secondary":e>=.3?"text-signal-poor":"text-accent-danger"}function te(e){return`${Math.round(100*e)}%`}const se=b.memo(function({path:e,isHighlighted:s,onHighlight:a}){const n=function(e){return e>.2?{icon:t.jsx($,{className:"w-3 h-3"}),color:"text-accent-success"}:e<-.2?{icon:t.jsx(H,{className:"w-3 h-3"}),color:"text-accent-danger"}:{icon:t.jsx(_,{className:"w-3 h-3"}),color:"text-text-muted"}}(e.observationTrend),r=e.weakestLinkKey&&e.weakestLinkConfidence<.5;return t.jsxs("div",{className:"flex items-center gap-3 p-2 rounded-md transition-colors cursor-pointer "+(s?"bg-accent-primary/20 border border-accent-primary/40":"hover:bg-white/5"),onClick:()=>a(s?null:e.weakestLinkKey),children:[t.jsx("div",{className:"flex-shrink-0 w-12 text-center py-1 rounded-md "+(l=e.healthScore,l>=.7?"bg-accent-success/10":l>=.5?"bg-accent-secondary/10":l>=.3?"bg-signal-poor/10":"bg-accent-danger/10"),children:t.jsx("span",{className:`text-xs font-semibold tabular-nums ${ee(e.healthScore)}`,children:te(e.healthScore)})}),t.jsx("div",{className:"flex-1 flex items-center gap-0.5 overflow-x-auto min-w-0",children:e.hops.map((s,a)=>{var n;return t.jsxs("span",{className:"flex items-center",children:[t.jsx("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded "+(r&&(null==(n=e.weakestLinkKey)?void 0:n.includes(s))?"bg-accent-danger/20 text-accent-danger":"bg-white/10 text-text-secondary"),children:s}),al.slice(0,e),[l,e]),d=b.useMemo(()=>0===l.length?null:{avgHealth:l.reduce((e,t)=>e+t.healthScore,0)/l.length,declining:l.filter(e=>e.observationTrend<-.2).length,weakLinks:l.filter(e=>e.weakestLinkConfidence<.5).length},[l]),h=e=>{null==s||s(e)};return 0===l.length?null:t.jsxs("div",{className:"chart-container",children:[t.jsxs("button",{onClick:()=>o(!i),className:"w-full chart-header hover:bg-white/5 transition-colors rounded-t-lg cursor-pointer",children:[t.jsxs("div",{className:"chart-title",children:[t.jsx(I,{className:"chart-title-icon"}),"Path Health",t.jsxs("span",{className:"ml-2 text-[10px] font-normal text-text-muted",children:["(",l.length," paths)"]})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[d&&t.jsxs("div",{className:"flex items-center gap-3 text-[10px]",children:[t.jsxs("span",{className:`tabular-nums ${ee(d.avgHealth)}`,children:["Avg: ",te(d.avgHealth)]}),d.weakLinks>0&&t.jsxs("span",{className:"text-accent-danger flex items-center gap-1",children:[t.jsx(S,{className:"w-3 h-3"}),d.weakLinks," weak"]}),d.declining>0&&t.jsxs("span",{className:"text-signal-poor flex items-center gap-1",children:[t.jsx(H,{className:"w-3 h-3"}),d.declining," declining"]})]}),i?t.jsx(B,{className:"w-4 h-4 text-text-muted"}):t.jsx(n,{className:"w-4 h-4 text-text-muted"})]})]}),i&&t.jsxs("div",{className:"p-3 pt-0 space-y-1",children:[t.jsxs("div",{className:"flex items-center gap-4 text-[10px] text-text-muted pb-2 border-b border-white/5",children:[t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-success"})," Healthy (≥70%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-secondary"})," Fair (50-70%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-signal-poor"})," Weak (30-50%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-danger"})," Critical (<30%)"]})]}),t.jsx("div",{className:"space-y-1 max-h-64 overflow-y-auto",children:c.map(e=>t.jsx(se,{path:e,isHighlighted:r===e.weakestLinkKey,onHighlight:h},e.pathKey))}),l.length>e&&t.jsxs("div",{className:"text-center text-[10px] text-text-muted pt-2",children:["Showing top ",e," of ",l.length," paths"]})]})]})}),ne=b.memo(function({isOpen:e,title:s="Confirm",message:a,confirmLabel:n="Confirm",cancelLabel:l="Cancel",variant:i="default",onConfirm:o,onCancel:c}){if(b.useEffect(()=>{if(!e)return;const t=e=>{"Escape"===e.key&&c()};window.addEventListener("keydown",t);const s=document.body.style.overflow,a=document.body.style.position,n=document.body.style.width,r=document.body.style.top,l=window.scrollY;return document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%",document.body.style.top=`-${l}px`,()=>{window.removeEventListener("keydown",t),document.body.style.overflow=s,document.body.style.position=a,document.body.style.width=n,document.body.style.top=r,window.scrollTo(0,l)}},[e,c]),!e)return null;const d={danger:{icon:"text-accent-danger",button:"bg-accent-danger hover:bg-red-600"},warning:{icon:"text-accent-secondary",button:"bg-accent-secondary hover:bg-yellow-600 text-bg-body"},default:{icon:"text-accent-primary",button:"bg-accent-primary hover:bg-violet-500 text-bg-body"}}[i];return j.createPortal(t.jsx("div",{className:"fixed inset-0 bg-black/40 backdrop-blur-md z-[10010] flex items-end sm:items-center justify-center",onClick:c,role:"dialog","aria-modal":"true","aria-labelledby":"confirm-modal-title",children:t.jsxs("div",{className:y("glass-card w-full max-w-sm overflow-hidden","sm:mx-4 sm:rounded-xl","rounded-t-2xl rounded-b-none sm:rounded-b-xl","pb-safe"),onClick:e=>e.stopPropagation(),children:[t.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border-subtle",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:y("p-2 rounded-lg bg-bg-subtle",d.icon),children:t.jsx(S,{className:"w-5 h-5"})}),t.jsx("h3",{id:"confirm-modal-title",className:"text-base font-semibold text-text-primary",children:s})]}),t.jsx("button",{onClick:c,className:"p-2 rounded-lg text-text-muted hover:text-text-primary hover:bg-bg-subtle transition-colors",children:t.jsx(r,{className:"w-5 h-5"})})]}),t.jsx("div",{className:"p-4",children:t.jsx("p",{className:"text-sm text-text-secondary",children:a})}),t.jsxs("div",{className:"flex gap-3 p-4 pt-0",children:[t.jsx("button",{onClick:c,className:"flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-secondary bg-bg-subtle hover:bg-bg-elevated border border-border-subtle transition-colors",children:l}),t.jsx("button",{onClick:o,className:y("flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-primary transition-colors",d.button),children:n})]})]})}),document.body)}),re="var(--signal-critical)",le="var(--signal-poor)",ie="var(--signal-fair)",oe="var(--signal-good)",ce="var(--signal-excellent)",de="var(--text-muted)";function he({active:e,payload:s}){if(!e||!s||!s.length)return null;const a=s[0].payload,n=new Date(a.timestamp),r=`${(n.getMonth()+1).toString().padStart(2,"0")}/${n.getDate().toString().padStart(2,"0")}`;return t.jsxs("div",{className:"bg-tooltip-bg border border-border-subtle rounded px-1.5 py-0.5 text-[10px] shadow-xl",children:[t.jsx("span",{className:"text-text-muted",children:r}),t.jsx("span",{className:"ml-1.5 font-semibold tabular-nums",children:a.count})]})}const me=b.memo(function({nodeHash:e,width:s=60,height:a=20,color:n,showArea:r=!0,showTooltip:o=!1,className:c=""}){const d=l(e),h=i(),m=n??(d.length>0?function(e){if(0===e.length)return re;const t=e.slice(-4),s=t.reduce((e,t)=>e+t.count,0),a=s/t.length,n=e.reduce((e,t)=>e+t.count,0)/e.length;if(0===s)return re;if(n>0){const e=a/n;return e>=1.2?ce:e>=.8?oe:e>=.4?ie:e>=.1?le:re}return s>=10?ce:s>=5?oe:s>=2?ie:s>=1?le:re}(d):de),x={width:s,height:a};if(d.length<2){const e="number"==typeof s?s:60,n=h?de:re;return t.jsx("div",{className:`flex items-center justify-center ${c}`,style:{...x,color:n},children:t.jsx("svg",{width:"100%",height:a,viewBox:`0 0 ${e} ${a}`,preserveAspectRatio:"none",children:t.jsx("line",{x1:4,y1:a/2,x2:e-4,y2:a/2,stroke:"currentColor",strokeWidth:1.5,strokeDasharray:"3,2",className:h?"animate-pulse":""})})})}const u=`sparkline-gradient-${e.slice(-6)}`;return t.jsx("div",{className:c,style:x,children:t.jsx(v,{width:"100%",height:"100%",children:r?t.jsxs(f,{data:d,margin:{top:1,right:1,bottom:1,left:1},children:[t.jsx("defs",{children:t.jsxs("linearGradient",{id:u,x1:"0",y1:"0",x2:"0",y2:"1",children:[t.jsx("stop",{offset:"0%",stopColor:m,stopOpacity:.35}),t.jsx("stop",{offset:"100%",stopColor:m,stopOpacity:.05})]})}),o&&t.jsx(N,{content:t.jsx(he,{}),cursor:{stroke:"rgba(255,255,255,0.2)",strokeWidth:1}}),t.jsx(w,{type:"monotone",dataKey:"count",stroke:"none",fill:`url(#${u})`,isAnimationActive:!1}),t.jsx(k,{type:"monotone",dataKey:"count",stroke:m,strokeWidth:1.5,dot:!1,isAnimationActive:!1})]}):t.jsxs(C,{data:d,margin:{top:1,right:1,bottom:1,left:1},children:[o&&t.jsx(N,{content:t.jsx(he,{}),cursor:{stroke:"rgba(255,255,255,0.2)",strokeWidth:1}}),t.jsx(k,{type:"monotone",dataKey:"count",stroke:m,strokeWidth:1.5,dot:!1,isAnimationActive:!1})]})})})});function xe(e,t,s,a){const n=(s-e)*Math.PI/180,r=(a-t)*Math.PI/180,l=Math.sin(n/2)*Math.sin(n/2)+Math.cos(e*Math.PI/180)*Math.cos(s*Math.PI/180)*Math.sin(r/2)*Math.sin(r/2);return 2*Math.atan2(Math.sqrt(l),Math.sqrt(1-l))*6371e3}const ue=Object.freeze(Object.defineProperty({__proto__:null,default:function(){const{stats:e}=o(),s=c(),a=d(),n=h(),l=m(),i=x(),[j,y]=b.useState(null),[v,f]=b.useState("lastHeard"),[N,w]=b.useState("desc"),[k,C]=b.useState(""),[S,H]=b.useState(!1),[L,_]=b.useState(null),[$,B]=b.useState(null),I=b.useMemo(()=>(null==e?void 0:e.neighbors)??{},[null==e?void 0:e.neighbors]),J=b.useMemo(()=>Object.fromEntries(Object.entries(I).filter(([e])=>!s.has(e))),[I,s]),Q=b.useMemo(()=>{var t;return(null==(t=null==e?void 0:e.config)?void 0:t.repeater)?{latitude:e.config.repeater.latitude,longitude:e.config.repeater.longitude,name:e.config.node_name||"Local Node"}:void 0},[e]),ee=null==e?void 0:e.local_hash,te=b.useMemo(()=>{const e=new Map;if(!(null==Q?void 0:Q.latitude)||!(null==Q?void 0:Q.longitude))return e;for(const[t,s]of Object.entries(J))s.latitude&&s.longitude&&0!==s.latitude&&0!==s.longitude?e.set(t,xe(Q.latitude,Q.longitude,s.latitude,s.longitude)):e.set(t,null);return e},[J,Q]),{neighborHashSet:se,neighborSignalMap:re}=b.useMemo(()=>{const e=new Set,t=new Map;for(const s of i)e.add(s.hash),t.set(s.hash,{avgRssi:s.avgRssi,avgSnr:s.avgSnr});return{neighborHashSet:e,neighborSignalMap:t}},[i]),le=b.useMemo(()=>{const e=k.toLowerCase().trim(),t="neighbor"===e||"neighbors"===e,s=S||t;return Object.fromEntries(Object.entries(J).filter(([a,n])=>{if(s&&!se.has(a))return!1;if(t)return!0;if(!e)return!0;const r=(n.node_name||n.name||"").toLowerCase(),l=a.slice(2,4).toLowerCase();return r.includes(e)||l.includes(e)||a.toLowerCase().includes(e)}))},[J,k,S,se]),ie=b.useMemo(()=>Object.entries(le).sort(([e,t],[s,a])=>{let n=0;switch(v){case"lastHeard":n=(t.last_seen||0)-(a.last_seen||0);break;case"distance":{const t=te.get(e)??null,a=te.get(s)??null;n=null===t&&null===a?0:null===t?1:null===a?-1:t-a;break}case"centrality":n=(l.get(e)||0)-(l.get(s)||0)}return"desc"===N?-n:n}),[le,v,N,te,l]),oe=ie.filter(([,e])=>e.latitude&&e.longitude&&0!==e.latitude&&0!==e.longitude).length,ce=b.useMemo(()=>new Set(n),[n]),de=b.useCallback(e=>{v===e?w(e=>"desc"===e?"asc":"desc"):(f(e),w("desc"))},[v]),he=b.useCallback(e=>{const t=J[e];(null==t?void 0:t.latitude)&&(null==t?void 0:t.longitude)&&0!==t.latitude&&0!==t.longitude&&_(e)},[J]),ue=b.useCallback(()=>{_(null)},[]);return t.jsxs(T,{children:[t.jsx(O,{title:"Contacts",icon:t.jsx(q,{}),controls:t.jsxs("div",{className:"flex items-baseline gap-3 sm:gap-4",children:[t.jsxs("span",{className:"roster-title tabular-nums",children:[ie.length," node",1!==ie.length?"s":""]}),oe>0&&t.jsxs("span",{className:"roster-title flex items-baseline gap-1.5 tabular-nums",children:[t.jsx(A,{className:"w-3.5 h-3.5 relative top-[2px]"}),oe," with location"]})]})}),t.jsx("div",{className:"relative",children:t.jsx(X,{neighbors:J,localNode:Q,localHash:ee,onRemoveNode:a,selectedNodeHash:L,onNodeSelected:ue,highlightedEdgeKey:$})}),t.jsx(ae,{maxPaths:10,highlightedEdge:$,onHighlightEdge:B}),t.jsxs(z,{noPadding:!0,children:[t.jsx(F,{listHeader:!0,icon:t.jsx(q,{className:"icon-sm"}),title:"Discovered Contacts",actions:t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[se.size>0&&t.jsxs("button",{onClick:()=>H(!S),className:"flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-lg transition-colors min-h-[32px] order-1 sm:order-1 "+(S?"bg-accent-success/20 text-accent-success border border-accent-success/30":"text-text-muted hover:text-text-secondary hover:bg-white/5 border border-transparent"),title:S?"Show all contacts":"Show only MeshCore neighbors (direct RF contact)",children:[t.jsx(u,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Neighbors"}),t.jsx("span",{className:"sm:hidden",children:se.size}),S&&t.jsx("span",{className:"text-[10px] font-semibold tabular-nums",children:se.size})]}),t.jsxs("div",{className:"relative order-2 sm:order-2",children:[t.jsx(G,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-text-muted"}),t.jsx("input",{type:"text",value:k,onChange:e=>C(e.target.value),placeholder:"Search...",className:"w-28 sm:w-32 pl-7 pr-7 py-1.5 text-xs bg-white/5 border border-white/10 rounded-lg text-text-primary placeholder:text-text-muted focus:outline-none focus:border-accent-primary/50"}),k&&t.jsx("button",{onClick:()=>{C(""),"neighbor"!==k.toLowerCase().trim()&&"neighbors"!==k.toLowerCase().trim()||H(!1)},className:"absolute right-2 top-1/2 -translate-y-1/2 text-text-muted hover:text-text-secondary p-0.5",children:t.jsx(r,{className:"w-3.5 h-3.5"})})]}),t.jsxs("div",{className:"flex items-center gap-1 order-1 sm:order-2",children:[t.jsxs("button",{onClick:()=>de("lastHeard"),className:"flex items-center gap-1 px-2.5 py-1.5 text-xs rounded-lg transition-colors min-h-[32px] "+("lastHeard"===v?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by last heard",children:[t.jsx(p,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Recent"}),"lastHeard"===v&&t.jsx(D,{className:"w-3 h-3 "+("asc"===N?"rotate-180":"")})]}),t.jsxs("button",{onClick:()=>de("distance"),className:"flex items-center gap-1 px-2.5 py-1.5 text-xs rounded-lg transition-colors min-h-[32px] "+("distance"===v?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by distance",children:[t.jsx(U,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Distance"}),"distance"===v&&t.jsx(D,{className:"w-3 h-3 "+("asc"===N?"rotate-180":"")})]}),t.jsxs("button",{onClick:()=>de("centrality"),className:"flex items-center gap-1 px-2.5 py-1.5 text-xs rounded-lg transition-colors min-h-[32px] "+("centrality"===v?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by network centrality",children:[t.jsx(E,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Centrality"}),"centrality"===v&&t.jsx(D,{className:"w-3 h-3 "+("asc"===N?"rotate-180":"")})]})]})]})}),ie.length>0?t.jsx("div",{className:"roster-list",children:ie.map(([e,s],a)=>{var n,r;const i=s.latitude&&s.longitude&&0!==s.latitude&&0!==s.longitude,o=s.node_name||s.name||"Unknown",c=ce.has(e),d=se.has(e),h=te.get(e),m=l.get(e)||0,x=d?re.get(e):void 0,u=d&&x;return t.jsxs("div",{children:[t.jsxs("div",{className:`roster-row ${c?"bg-amber-500/5 border-l-2 border-l-amber-400":""} ${i?"cursor-pointer hover:bg-white/[0.02]":""}`,onClick:()=>he(e),children:[t.jsxs("div",{className:"relative flex-shrink-0",children:[t.jsx("div",{className:"roster-icon",children:(()=>{var e;const a=null==(e=s.contact_type)?void 0:e.toLowerCase(),n="room server"===a||"room_server"===a||"room"===a||"server"===a,r="companion"===a||"client"===a||"cli"===a,l=s.is_repeater||"repeater"===a||"rep"===a,i="#4338CA",o="#F59E0B";return n&&l?t.jsxs("div",{className:"relative w-5 h-5",children:[t.jsx(W,{className:"w-5 h-5 absolute inset-0",style:{color:o}}),t.jsx(Z,{className:"w-2.5 h-2.5 absolute -bottom-0.5 -right-0.5",style:{color:i}})]}):n?t.jsx(W,{className:"w-5 h-5",style:{color:o}}):r?t.jsx(V,{className:"w-5 h-5 text-text-muted"}):l?d?t.jsx(K,{className:"w-5 h-5 text-accent-success"}):t.jsx(Z,{className:"w-5 h-5",style:{color:i}}):t.jsx(V,{className:"w-5 h-5 text-text-muted"})})()}),u&&null!==(null==x?void 0:x.avgSnr)&&t.jsx("div",{className:`absolute -top-0.5 -right-0.5 w-2.5 h-2.5 rounded-full ${b=x.avgSnr,void 0===b?"bg-[var(--signal-unknown)]":b>=5?"bg-[var(--signal-excellent)]":b>=0?"bg-[var(--signal-good)]":b>=-5?"bg-[var(--signal-fair)]":b>=-10?"bg-[var(--signal-poor)]":"bg-[var(--signal-critical)]"} border-2 border-bg-surface`})]}),t.jsxs("div",{className:"roster-content min-w-0 flex-1",children:[t.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[t.jsx("span",{className:"roster-title",children:o}),d&&t.jsx("span",{className:"type-badge px-1.5 py-0.5 rounded",style:{backgroundColor:"rgba(57, 217, 138, 0.2)",color:"#39D98A"},children:"NBR"}),c&&t.jsxs("span",{className:"type-badge px-1.5 py-0.5 rounded flex items-center gap-1",style:{backgroundColor:"rgba(251, 191, 36, 0.2)",color:"#FBBF24"},children:[t.jsx(R,{className:"w-3 h-3"}),"HUB"]}),(s.is_repeater||"repeater"===(null==(n=s.contact_type)?void 0:n.toLowerCase())||"rep"===(null==(r=s.contact_type)?void 0:r.toLowerCase()))&&t.jsx("span",{className:"pill-tag",children:"RPT"})]}),t.jsx("div",{className:"hidden md:block",children:t.jsx(P,{hash:e,size:"sm",full:!0})}),t.jsx("div",{className:"md:hidden",children:t.jsx(P,{hash:e,size:"sm",prefixLength:8,suffixLength:6})})]}),t.jsxs("div",{className:"roster-metrics flex-shrink-0",children:[u&&null!==(null==x?void 0:x.avgRssi)&&t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsx(M,{rssi:x.avgRssi,className:"w-3.5 h-3.5"}),t.jsx("span",{className:"type-data-xs tabular-nums",children:Math.round(x.avgRssi)})]}),u&&null!==(null==x?void 0:x.avgSnr)&&t.jsx("div",{className:"flex items-center gap-1.5",children:t.jsxs("span",{className:"type-data-xs tabular-nums",children:[x.avgSnr.toFixed(1)," dB"]})}),null!=h&&t.jsxs("div",{className:"flex items-center gap-1 text-accent-tertiary",children:[t.jsx(U,{className:"w-3 h-3"}),t.jsx("span",{className:"type-data-xs tabular-nums",children:(p=h,p<1e3?`${Math.round(p)}m`:`${(p/1e3).toFixed(1)}km`)})]}),m>0&&t.jsxs("div",{className:"flex items-center gap-1 text-amber-400/70",children:[t.jsx(E,{className:"w-3 h-3"}),t.jsxs("span",{className:"type-data-xs tabular-nums",children:[(100*m).toFixed(0),"%"]})]}),t.jsx("div",{className:"hidden sm:block",children:t.jsx(me,{nodeHash:e,width:48,height:16})})]}),t.jsx("div",{className:"roster-metric flex-shrink-0",children:s.last_seen?g(s.last_seen):"—"}),t.jsx("button",{onClick:t=>{t.stopPropagation(),y({hash:e,name:o})},className:"ml-2 p-1.5 rounded-lg text-text-muted/50 hover:text-red-400 hover:bg-red-500/10 transition-colors flex-shrink-0",title:"Remove contact",children:t.jsx(Y,{className:"w-4 h-4"})})]}),a{j&&a(j.hash),y(null)},onCancel:()=>y(null)})]})}},Symbol.toStringTag,{value:"Module"}));export{ne as C,I as G,W as M,me as N,Y as T,ue as a}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ContactsMapMapLibre-BOuXJWS6.js","assets/index-Dr6RiKZe.js","assets/recharts-bmHCCfxU.js","assets/maplibre-gl-CFO9X1Ek.js","assets/index-DRIJpMsz.css","assets/maplibre-gl-CBi4X-Xj.js","assets/maplibre-gl-B1CfjdFi.css","assets/HashBadge-6BYC-dVg.js","assets/loader-circle-DYme_klB.js","assets/info-Cpkis-Fu.js","assets/house-B6m2T4gU.js","assets/refresh-cw-D-H-igOq.js","assets/trending-up-C_4k_dB-.js","assets/map-DOrFskIg.js","assets/SignalIndicator-CqotkK-c.js","assets/triangle-alert-jbGP55uT.js","assets/zap-OotQqJQ7.js","assets/activity-SNbph4bZ.js","assets/PageLayout-DeGN0Ulg.js","assets/users-D6CYjw5Y.js"])))=>i.map(i=>d[i]); +import{c as e,j as t,_ as s,z as a,y as n,X as r,A as l,B as i,E as o,g as c,F as d,G as h,H as m,f as x,R as u,C as p,I as g}from"./index-Dr6RiKZe.js";import{b,g as j,c as y,d as v,h as f,T as N,f as w,e as k,L as C}from"./recharts-bmHCCfxU.js";import{a as M}from"./SignalIndicator-CqotkK-c.js";import{T as S}from"./triangle-alert-jbGP55uT.js";import{T as H,Z as L,M as _}from"./zap-OotQqJQ7.js";import{A as E}from"./activity-SNbph4bZ.js";import{T as $,N as R}from"./trending-up-C_4k_dB-.js";import{M as A,H as P}from"./HashBadge-6BYC-dVg.js";import{P as T,a as O,C as z,b as F}from"./PageLayout-DeGN0Ulg.js";import{U as q}from"./users-D6CYjw5Y.js";const K=e("arrow-left-right",[["path",{d:"M8 3 4 7l4 4",key:"9rb6wj"}],["path",{d:"M4 7h16",key:"6tx8e3"}],["path",{d:"m16 21 4-4-4-4",key:"siv7j2"}],["path",{d:"M20 17H4",key:"h6l3hr"}]]),D=e("arrow-up-down",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]),B=e("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]),I=e("git-branch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),W=e("messages-square",[["path",{d:"M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z",key:"1n2ejm"}],["path",{d:"M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1",key:"1qfcsi"}]]),V=e("monitor-smartphone",[["path",{d:"M18 8V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h8",key:"10dyio"}],["path",{d:"M10 19v-3.96 3.15",key:"1irgej"}],["path",{d:"M7 19h5",key:"qswx4l"}],["rect",{width:"6",height:"10",x:"16",y:"12",rx:"2",key:"1egngj"}]]),U=e("ruler",[["path",{d:"M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z",key:"icamh8"}],["path",{d:"m14.5 12.5 2-2",key:"inckbg"}],["path",{d:"m11.5 9.5 2-2",key:"fmmyf7"}],["path",{d:"m8.5 6.5 2-2",key:"vc6u1g"}],["path",{d:"m17.5 15.5 2-2",key:"wo5hmg"}]]),G=e("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]),Z=e("share-2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]),Y=e("trash-2",[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]]);class J extends b.Component{constructor(e){super(e),this.state={hasError:!1}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}render(){var e;return this.state.hasError?t.jsx("div",{className:"glass-card h-[400px] flex items-center justify-center",children:t.jsxs("div",{className:"text-center text-white/50 p-4",children:[t.jsx("p",{className:"text-lg mb-2",children:"Map failed to load"}),t.jsx("p",{className:"text-sm text-white/30",children:(null==(e=this.state.error)?void 0:e.message)||"Unknown error"})]})}):this.props.children}}const Q=b.lazy(()=>s(()=>import("./ContactsMapMapLibre-BOuXJWS6.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])));function X({neighbors:e,localNode:s,localHash:a,onRemoveNode:n,selectedNodeHash:r,onNodeSelected:l,highlightedEdgeKey:i}){return t.jsx(J,{children:t.jsx(b.Suspense,{fallback:t.jsx("div",{className:"glass-card h-[500px] flex items-center justify-center",children:t.jsx("div",{className:"text-white/50",children:"Loading map..."})}),children:t.jsx(Q,{neighbors:e,localNode:s,localHash:a,onRemoveNode:n,selectedNodeHash:r,onNodeSelected:l,highlightedEdgeKey:i})})})}function ee(e){return e>=.7?"text-accent-success":e>=.5?"text-accent-secondary":e>=.3?"text-signal-poor":"text-accent-danger"}function te(e){return`${Math.round(100*e)}%`}const se=b.memo(function({path:e,isHighlighted:s,onHighlight:a}){const n=function(e){return e>.2?{icon:t.jsx($,{className:"w-3 h-3"}),color:"text-accent-success"}:e<-.2?{icon:t.jsx(H,{className:"w-3 h-3"}),color:"text-accent-danger"}:{icon:t.jsx(_,{className:"w-3 h-3"}),color:"text-text-muted"}}(e.observationTrend),r=e.weakestLinkKey&&e.weakestLinkConfidence<.5;return t.jsxs("div",{className:"flex items-center gap-3 p-2 rounded-md transition-colors cursor-pointer "+(s?"bg-accent-primary/20 border border-accent-primary/40":"hover:bg-white/5"),onClick:()=>a(s?null:e.weakestLinkKey),children:[t.jsx("div",{className:"flex-shrink-0 w-12 text-center py-1 rounded-md "+(l=e.healthScore,l>=.7?"bg-accent-success/10":l>=.5?"bg-accent-secondary/10":l>=.3?"bg-signal-poor/10":"bg-accent-danger/10"),children:t.jsx("span",{className:`text-xs font-semibold tabular-nums ${ee(e.healthScore)}`,children:te(e.healthScore)})}),t.jsx("div",{className:"flex-1 flex items-center gap-0.5 overflow-x-auto min-w-0",children:e.hops.map((s,a)=>{var n;return t.jsxs("span",{className:"flex items-center",children:[t.jsx("span",{className:"text-[10px] font-mono px-1.5 py-0.5 rounded "+(r&&(null==(n=e.weakestLinkKey)?void 0:n.includes(s))?"bg-accent-danger/20 text-accent-danger":"bg-white/10 text-text-secondary"),children:s}),al.slice(0,e),[l,e]),d=b.useMemo(()=>0===l.length?null:{avgHealth:l.reduce((e,t)=>e+t.healthScore,0)/l.length,declining:l.filter(e=>e.observationTrend<-.2).length,weakLinks:l.filter(e=>e.weakestLinkConfidence<.5).length},[l]),h=e=>{null==s||s(e)};return 0===l.length?null:t.jsxs("div",{className:"chart-container",children:[t.jsxs("button",{onClick:()=>o(!i),className:"w-full chart-header hover:bg-white/5 transition-colors rounded-t-lg cursor-pointer",children:[t.jsxs("div",{className:"chart-title",children:[t.jsx(I,{className:"chart-title-icon"}),"Path Health",t.jsxs("span",{className:"ml-2 text-[10px] font-normal text-text-muted",children:["(",l.length," paths)"]})]}),t.jsxs("div",{className:"flex items-center gap-3",children:[d&&t.jsxs("div",{className:"flex items-center gap-3 text-[10px]",children:[t.jsxs("span",{className:`tabular-nums ${ee(d.avgHealth)}`,children:["Avg: ",te(d.avgHealth)]}),d.weakLinks>0&&t.jsxs("span",{className:"text-accent-danger flex items-center gap-1",children:[t.jsx(S,{className:"w-3 h-3"}),d.weakLinks," weak"]}),d.declining>0&&t.jsxs("span",{className:"text-signal-poor flex items-center gap-1",children:[t.jsx(H,{className:"w-3 h-3"}),d.declining," declining"]})]}),i?t.jsx(B,{className:"w-4 h-4 text-text-muted"}):t.jsx(n,{className:"w-4 h-4 text-text-muted"})]})]}),i&&t.jsxs("div",{className:"p-3 pt-0 space-y-1",children:[t.jsxs("div",{className:"flex items-center gap-4 text-[10px] text-text-muted pb-2 border-b border-white/5",children:[t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-success"})," Healthy (≥70%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-secondary"})," Fair (50-70%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-signal-poor"})," Weak (30-50%)"]}),t.jsxs("span",{className:"flex items-center gap-1",children:[t.jsx("span",{className:"w-2 h-2 rounded-full bg-accent-danger"})," Critical (<30%)"]})]}),t.jsx("div",{className:"space-y-1 max-h-64 overflow-y-auto",children:c.map(e=>t.jsx(se,{path:e,isHighlighted:r===e.weakestLinkKey,onHighlight:h},e.pathKey))}),l.length>e&&t.jsxs("div",{className:"text-center text-[10px] text-text-muted pt-2",children:["Showing top ",e," of ",l.length," paths"]})]})]})}),ne=b.memo(function({isOpen:e,title:s="Confirm",message:a,confirmLabel:n="Confirm",cancelLabel:l="Cancel",variant:i="default",onConfirm:o,onCancel:c}){if(b.useEffect(()=>{if(!e)return;const t=e=>{"Escape"===e.key&&c()};window.addEventListener("keydown",t);const s=document.body.style.overflow,a=document.body.style.position,n=document.body.style.width,r=document.body.style.top,l=window.scrollY;return document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%",document.body.style.top=`-${l}px`,()=>{window.removeEventListener("keydown",t),document.body.style.overflow=s,document.body.style.position=a,document.body.style.width=n,document.body.style.top=r,window.scrollTo(0,l)}},[e,c]),!e)return null;const d={danger:{icon:"text-accent-danger",button:"bg-accent-danger hover:bg-red-600"},warning:{icon:"text-accent-secondary",button:"bg-accent-secondary hover:bg-yellow-600 text-bg-body"},default:{icon:"text-accent-primary",button:"bg-accent-primary hover:bg-violet-500 text-bg-body"}}[i];return j.createPortal(t.jsx("div",{className:"fixed inset-0 bg-black/40 backdrop-blur-md z-[10010] flex items-end sm:items-center justify-center",onClick:c,role:"dialog","aria-modal":"true","aria-labelledby":"confirm-modal-title",children:t.jsxs("div",{className:y("glass-card w-full max-w-sm overflow-hidden","sm:mx-4 sm:rounded-xl","rounded-t-2xl rounded-b-none sm:rounded-b-xl","pb-safe"),onClick:e=>e.stopPropagation(),children:[t.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border-subtle",children:[t.jsxs("div",{className:"flex items-center gap-3",children:[t.jsx("div",{className:y("p-2 rounded-lg bg-bg-subtle",d.icon),children:t.jsx(S,{className:"w-5 h-5"})}),t.jsx("h3",{id:"confirm-modal-title",className:"text-base font-semibold text-text-primary",children:s})]}),t.jsx("button",{onClick:c,className:"p-2 rounded-lg text-text-muted hover:text-text-primary hover:bg-bg-subtle transition-colors",children:t.jsx(r,{className:"w-5 h-5"})})]}),t.jsx("div",{className:"p-4",children:t.jsx("p",{className:"text-sm text-text-secondary",children:a})}),t.jsxs("div",{className:"flex gap-3 p-4 pt-0",children:[t.jsx("button",{onClick:c,className:"flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-secondary bg-bg-subtle hover:bg-bg-elevated border border-border-subtle transition-colors",children:l}),t.jsx("button",{onClick:o,className:y("flex-1 px-4 py-2.5 rounded-lg text-sm font-medium text-text-primary transition-colors",d.button),children:n})]})]})}),document.body)}),re="var(--signal-critical)",le="var(--signal-poor)",ie="var(--signal-fair)",oe="var(--signal-good)",ce="var(--signal-excellent)",de="var(--text-muted)";function he({active:e,payload:s}){if(!e||!s||!s.length)return null;const a=s[0].payload,n=new Date(a.timestamp),r=`${(n.getMonth()+1).toString().padStart(2,"0")}/${n.getDate().toString().padStart(2,"0")}`;return t.jsxs("div",{className:"bg-tooltip-bg border border-border-subtle rounded px-1.5 py-0.5 text-[10px] shadow-xl",children:[t.jsx("span",{className:"text-text-muted",children:r}),t.jsx("span",{className:"ml-1.5 font-semibold tabular-nums",children:a.count})]})}const me=b.memo(function({nodeHash:e,width:s=60,height:a=20,color:n,showArea:r=!0,showTooltip:o=!1,className:c=""}){const d=l(e),h=i(),m=n??(d.length>0?function(e){if(0===e.length)return re;const t=e.slice(-4),s=t.reduce((e,t)=>e+t.count,0),a=s/t.length,n=e.reduce((e,t)=>e+t.count,0)/e.length;if(0===s)return re;if(n>0){const e=a/n;return e>=1.2?ce:e>=.8?oe:e>=.4?ie:e>=.1?le:re}return s>=10?ce:s>=5?oe:s>=2?ie:s>=1?le:re}(d):de),x={width:s,height:a};if(d.length<2){const e="number"==typeof s?s:60,n=h?de:re;return t.jsx("div",{className:`flex items-center justify-center ${c}`,style:{...x,color:n},children:t.jsx("svg",{width:"100%",height:a,viewBox:`0 0 ${e} ${a}`,preserveAspectRatio:"none",children:t.jsx("line",{x1:4,y1:a/2,x2:e-4,y2:a/2,stroke:"currentColor",strokeWidth:1.5,strokeDasharray:"3,2",className:h?"animate-pulse":""})})})}const u=`sparkline-gradient-${e.slice(-6)}`;return t.jsx("div",{className:c,style:x,children:t.jsx(v,{width:"100%",height:"100%",children:r?t.jsxs(f,{data:d,margin:{top:1,right:1,bottom:1,left:1},children:[t.jsx("defs",{children:t.jsxs("linearGradient",{id:u,x1:"0",y1:"0",x2:"0",y2:"1",children:[t.jsx("stop",{offset:"0%",stopColor:m,stopOpacity:.35}),t.jsx("stop",{offset:"100%",stopColor:m,stopOpacity:.05})]})}),o&&t.jsx(N,{content:t.jsx(he,{}),cursor:{stroke:"rgba(255,255,255,0.2)",strokeWidth:1}}),t.jsx(w,{type:"monotone",dataKey:"count",stroke:"none",fill:`url(#${u})`,isAnimationActive:!1}),t.jsx(k,{type:"monotone",dataKey:"count",stroke:m,strokeWidth:1.5,dot:!1,isAnimationActive:!1})]}):t.jsxs(C,{data:d,margin:{top:1,right:1,bottom:1,left:1},children:[o&&t.jsx(N,{content:t.jsx(he,{}),cursor:{stroke:"rgba(255,255,255,0.2)",strokeWidth:1}}),t.jsx(k,{type:"monotone",dataKey:"count",stroke:m,strokeWidth:1.5,dot:!1,isAnimationActive:!1})]})})})});function xe(e,t,s,a){const n=(s-e)*Math.PI/180,r=(a-t)*Math.PI/180,l=Math.sin(n/2)*Math.sin(n/2)+Math.cos(e*Math.PI/180)*Math.cos(s*Math.PI/180)*Math.sin(r/2)*Math.sin(r/2);return 2*Math.atan2(Math.sqrt(l),Math.sqrt(1-l))*6371e3}const ue=Object.freeze(Object.defineProperty({__proto__:null,default:function(){const{stats:e}=o(),s=c(),a=d(),n=h(),l=m(),i=x(),[j,y]=b.useState(null),[v,f]=b.useState("lastHeard"),[N,w]=b.useState("desc"),[k,C]=b.useState(""),[S,H]=b.useState(!1),[L,_]=b.useState(null),[$,B]=b.useState(null),I=b.useMemo(()=>(null==e?void 0:e.neighbors)??{},[null==e?void 0:e.neighbors]),J=b.useMemo(()=>Object.fromEntries(Object.entries(I).filter(([e])=>!s.has(e))),[I,s]),Q=b.useMemo(()=>{var t;return(null==(t=null==e?void 0:e.config)?void 0:t.repeater)?{latitude:e.config.repeater.latitude,longitude:e.config.repeater.longitude,name:e.config.node_name||"Local Node"}:void 0},[e]),ee=null==e?void 0:e.local_hash,te=b.useMemo(()=>{const e=new Map;if(!(null==Q?void 0:Q.latitude)||!(null==Q?void 0:Q.longitude))return e;for(const[t,s]of Object.entries(J))s.latitude&&s.longitude&&0!==s.latitude&&0!==s.longitude?e.set(t,xe(Q.latitude,Q.longitude,s.latitude,s.longitude)):e.set(t,null);return e},[J,Q]),{neighborHashSet:se,neighborSignalMap:re}=b.useMemo(()=>{const e=new Set,t=new Map;for(const s of i)e.add(s.hash),t.set(s.hash,{avgRssi:s.avgRssi,avgSnr:s.avgSnr});return{neighborHashSet:e,neighborSignalMap:t}},[i]),le=b.useMemo(()=>{const e=k.toLowerCase().trim(),t="neighbor"===e||"neighbors"===e,s=S||t;return Object.fromEntries(Object.entries(J).filter(([a,n])=>{if(s&&!se.has(a))return!1;if(t)return!0;if(!e)return!0;const r=(n.node_name||n.name||"").toLowerCase(),l=a.slice(2,4).toLowerCase();return r.includes(e)||l.includes(e)||a.toLowerCase().includes(e)}))},[J,k,S,se]),ie=b.useMemo(()=>Object.entries(le).sort(([e,t],[s,a])=>{let n=0;switch(v){case"lastHeard":n=(t.last_seen||0)-(a.last_seen||0);break;case"distance":{const t=te.get(e)??null,a=te.get(s)??null;n=null===t&&null===a?0:null===t?1:null===a?-1:t-a;break}case"centrality":n=(l.get(e)||0)-(l.get(s)||0)}return"desc"===N?-n:n}),[le,v,N,te,l]),oe=ie.filter(([,e])=>e.latitude&&e.longitude&&0!==e.latitude&&0!==e.longitude).length,ce=b.useMemo(()=>new Set(n),[n]),de=b.useCallback(e=>{v===e?w(e=>"desc"===e?"asc":"desc"):(f(e),w("desc"))},[v]),he=b.useCallback(e=>{const t=J[e];(null==t?void 0:t.latitude)&&(null==t?void 0:t.longitude)&&0!==t.latitude&&0!==t.longitude&&_(e)},[J]),ue=b.useCallback(()=>{_(null)},[]);return t.jsxs(T,{children:[t.jsx(O,{title:"Contacts",icon:t.jsx(q,{}),controls:t.jsxs("div",{className:"flex items-baseline gap-3 sm:gap-4",children:[t.jsxs("span",{className:"roster-title tabular-nums",children:[ie.length," node",1!==ie.length?"s":""]}),oe>0&&t.jsxs("span",{className:"roster-title flex items-baseline gap-1.5 tabular-nums",children:[t.jsx(A,{className:"w-3.5 h-3.5 relative top-[2px]"}),oe," with location"]})]})}),t.jsx("div",{className:"relative",children:t.jsx(X,{neighbors:J,localNode:Q,localHash:ee,onRemoveNode:a,selectedNodeHash:L,onNodeSelected:ue,highlightedEdgeKey:$})}),t.jsx(ae,{maxPaths:10,highlightedEdge:$,onHighlightEdge:B}),t.jsxs(z,{noPadding:!0,children:[t.jsx(F,{listHeader:!0,icon:t.jsx(q,{className:"icon-sm"}),title:"Discovered Contacts",actions:t.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[se.size>0&&t.jsxs("button",{onClick:()=>H(!S),className:"flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-lg transition-colors min-h-[32px] order-1 sm:order-1 "+(S?"bg-accent-success/20 text-accent-success border border-accent-success/30":"text-text-muted hover:text-text-secondary hover:bg-white/5 border border-transparent"),title:S?"Show all contacts":"Show only MeshCore neighbors (direct RF contact)",children:[t.jsx(u,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Neighbors"}),t.jsx("span",{className:"sm:hidden",children:se.size}),S&&t.jsx("span",{className:"text-[10px] font-semibold tabular-nums",children:se.size})]}),t.jsxs("div",{className:"relative order-2 sm:order-2",children:[t.jsx(G,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-text-muted"}),t.jsx("input",{type:"text",value:k,onChange:e=>C(e.target.value),placeholder:"Search...",className:"w-28 sm:w-32 pl-7 pr-7 py-1.5 text-xs bg-white/5 border border-white/10 rounded-lg text-text-primary placeholder:text-text-muted focus:outline-none focus:border-accent-primary/50"}),k&&t.jsx("button",{onClick:()=>{C(""),"neighbor"!==k.toLowerCase().trim()&&"neighbors"!==k.toLowerCase().trim()||H(!1)},className:"absolute right-2 top-1/2 -translate-y-1/2 text-text-muted hover:text-text-secondary p-0.5",children:t.jsx(r,{className:"w-3.5 h-3.5"})})]}),t.jsxs("div",{className:"flex items-center gap-1 order-1 sm:order-2",children:[t.jsxs("button",{onClick:()=>de("lastHeard"),className:"flex items-center gap-1 px-2.5 py-1.5 text-xs rounded-lg transition-colors min-h-[32px] "+("lastHeard"===v?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by last heard",children:[t.jsx(p,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Recent"}),"lastHeard"===v&&t.jsx(D,{className:"w-3 h-3 "+("asc"===N?"rotate-180":"")})]}),t.jsxs("button",{onClick:()=>de("distance"),className:"flex items-center gap-1 px-2.5 py-1.5 text-xs rounded-lg transition-colors min-h-[32px] "+("distance"===v?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by distance",children:[t.jsx(U,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Distance"}),"distance"===v&&t.jsx(D,{className:"w-3 h-3 "+("asc"===N?"rotate-180":"")})]}),t.jsxs("button",{onClick:()=>de("centrality"),className:"flex items-center gap-1 px-2.5 py-1.5 text-xs rounded-lg transition-colors min-h-[32px] "+("centrality"===v?"bg-accent-primary/20 text-accent-primary":"text-text-muted hover:text-text-secondary hover:bg-white/5"),title:"Sort by network centrality",children:[t.jsx(E,{className:"w-3.5 h-3.5"}),t.jsx("span",{className:"hidden sm:inline",children:"Centrality"}),"centrality"===v&&t.jsx(D,{className:"w-3 h-3 "+("asc"===N?"rotate-180":"")})]})]})]})}),ie.length>0?t.jsx("div",{className:"roster-list",children:ie.map(([e,s],a)=>{var n,r;const i=s.latitude&&s.longitude&&0!==s.latitude&&0!==s.longitude,o=s.node_name||s.name||"Unknown",c=ce.has(e),d=se.has(e),h=te.get(e),m=l.get(e)||0,x=d?re.get(e):void 0,u=d&&x;return t.jsxs("div",{children:[t.jsxs("div",{className:`roster-row ${c?"bg-amber-500/5 border-l-2 border-l-amber-400":""} ${i?"cursor-pointer hover:bg-white/[0.02]":""}`,onClick:()=>he(e),children:[t.jsxs("div",{className:"relative flex-shrink-0",children:[t.jsx("div",{className:"roster-icon",children:(()=>{var e;const a=null==(e=s.contact_type)?void 0:e.toLowerCase(),n="room server"===a||"room_server"===a||"room"===a||"server"===a,r="companion"===a||"client"===a||"cli"===a,l=s.is_repeater||"repeater"===a||"rep"===a,i="#4338CA",o="#F59E0B";return n&&l?t.jsxs("div",{className:"relative w-5 h-5",children:[t.jsx(W,{className:"w-5 h-5 absolute inset-0",style:{color:o}}),t.jsx(Z,{className:"w-2.5 h-2.5 absolute -bottom-0.5 -right-0.5",style:{color:i}})]}):n?t.jsx(W,{className:"w-5 h-5",style:{color:o}}):r?t.jsx(V,{className:"w-5 h-5 text-text-muted"}):l?d?t.jsx(K,{className:"w-5 h-5 text-accent-success"}):t.jsx(Z,{className:"w-5 h-5",style:{color:i}}):t.jsx(V,{className:"w-5 h-5 text-text-muted"})})()}),u&&null!==(null==x?void 0:x.avgSnr)&&t.jsx("div",{className:`absolute -top-0.5 -right-0.5 w-2.5 h-2.5 rounded-full ${b=x.avgSnr,void 0===b?"bg-[var(--signal-unknown)]":b>=5?"bg-[var(--signal-excellent)]":b>=0?"bg-[var(--signal-good)]":b>=-5?"bg-[var(--signal-fair)]":b>=-10?"bg-[var(--signal-poor)]":"bg-[var(--signal-critical)]"} border-2 border-bg-surface`})]}),t.jsxs("div",{className:"roster-content min-w-0 flex-1",children:[t.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[t.jsx("span",{className:"roster-title",children:o}),d&&t.jsx("span",{className:"type-badge px-1.5 py-0.5 rounded",style:{backgroundColor:"rgba(57, 217, 138, 0.2)",color:"#39D98A"},children:"NBR"}),c&&t.jsxs("span",{className:"type-badge px-1.5 py-0.5 rounded flex items-center gap-1",style:{backgroundColor:"rgba(251, 191, 36, 0.2)",color:"#FBBF24"},children:[t.jsx(R,{className:"w-3 h-3"}),"HUB"]}),(s.is_repeater||"repeater"===(null==(n=s.contact_type)?void 0:n.toLowerCase())||"rep"===(null==(r=s.contact_type)?void 0:r.toLowerCase()))&&t.jsx("span",{className:"pill-tag",children:"RPT"})]}),t.jsx("div",{className:"hidden md:block",children:t.jsx(P,{hash:e,size:"sm",full:!0})}),t.jsx("div",{className:"md:hidden",children:t.jsx(P,{hash:e,size:"sm",prefixLength:8,suffixLength:6})})]}),t.jsxs("div",{className:"roster-metrics flex-shrink-0",children:[u&&null!==(null==x?void 0:x.avgRssi)&&t.jsxs("div",{className:"flex items-center gap-1.5",children:[t.jsx(M,{rssi:x.avgRssi,className:"w-3.5 h-3.5"}),t.jsx("span",{className:"type-data-xs tabular-nums",children:Math.round(x.avgRssi)})]}),u&&null!==(null==x?void 0:x.avgSnr)&&t.jsx("div",{className:"flex items-center gap-1.5",children:t.jsxs("span",{className:"type-data-xs tabular-nums",children:[x.avgSnr.toFixed(1)," dB"]})}),null!=h&&t.jsxs("div",{className:"flex items-center gap-1 text-accent-tertiary",children:[t.jsx(U,{className:"w-3 h-3"}),t.jsx("span",{className:"type-data-xs tabular-nums",children:(p=h,p<1e3?`${Math.round(p)}m`:`${(p/1e3).toFixed(1)}km`)})]}),m>0&&t.jsxs("div",{className:"flex items-center gap-1 text-amber-400/70",children:[t.jsx(E,{className:"w-3 h-3"}),t.jsxs("span",{className:"type-data-xs tabular-nums",children:[(100*m).toFixed(0),"%"]})]}),t.jsx("div",{className:"hidden sm:block",children:t.jsx(me,{nodeHash:e,width:48,height:16})})]}),t.jsx("div",{className:"roster-metric flex-shrink-0",children:s.last_seen?g(s.last_seen):"—"}),t.jsx("button",{onClick:t=>{t.stopPropagation(),y({hash:e,name:o})},className:"ml-2 p-1.5 rounded-lg text-text-muted/50 hover:text-red-400 hover:bg-red-500/10 transition-colors flex-shrink-0",title:"Remove contact",children:t.jsx(Y,{className:"w-4 h-4"})})]}),a{j&&a(j.hash),y(null)},onCancel:()=>y(null)})]})}},Symbol.toStringTag,{value:"Module"}));export{ne as C,I as G,W as M,me as N,Y as T,ue as a}; diff --git a/frontend/dist/assets/ContactsMapMapLibre-DCT-qdMC.js b/frontend/dist/assets/ContactsMapMapLibre-BOuXJWS6.js similarity index 88% rename from frontend/dist/assets/ContactsMapMapLibre-DCT-qdMC.js rename to frontend/dist/assets/ContactsMapMapLibre-BOuXJWS6.js index 6754cd95..94e16691 100644 --- a/frontend/dist/assets/ContactsMapMapLibre-DCT-qdMC.js +++ b/frontend/dist/assets/ContactsMapMapLibre-BOuXJWS6.js @@ -1 +1 @@ -var e,t,n=Object.defineProperty,r=(e,t,r)=>((e,t,r)=>t in e?n(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,"symbol"!=typeof t?t+"":t,r);import{c as s,j as i,I as o,a2 as a,X as l,_ as c,ag as u,ah as h,f as d,ai as f}from"./index-BdUmG6z3.js";import{b as p,g,c as m,r as _}from"./recharts-bmHCCfxU.js";import{u as y,a as b,P as v,S as x,L as w,M as E,N as T,b as S}from"./maplibre-gl-COhGl2RU.js";import{G as A,N as R,T as C,M as k,C as P}from"./Contacts-DqJQXP9J.js";import{a as I,C as M,M as N}from"./HashBadge-DCqJqy_v.js";import{L}from"./loader-circle-CRg1Yoc_.js";import{I as O}from"./info-B3dHaNdm.js";import{H as F}from"./house-D7tD7oMV.js";import{R as D}from"./refresh-cw-B7gVa9Xi.js";import{N as B}from"./trending-up-B7h_3LVW.js";import{M as U}from"./map-B1t3mPjU.js";import"./maplibre-gl-CFO9X1Ek.js";import"./SignalIndicator-Nx590AkL.js";import"./triangle-alert-BpNME9Y2.js";import"./zap-BjrLGDgf.js";import"./activity-YyU_9mqB.js";import"./PageLayout-DkGk1cTx.js";import"./users-D5YN1J7b.js";const j=s("car",[["path",{d:"M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2",key:"5owen"}],["circle",{cx:"7",cy:"17",r:"2",key:"u2ysq9"}],["path",{d:"M9 17h6",key:"r8uit2"}],["circle",{cx:"17",cy:"17",r:"2",key:"axvx0g"}]]),V=s("chart-no-axes-column",[["path",{d:"M5 21v-6",key:"1hz6c0"}],["path",{d:"M12 21V3",key:"1lcnhd"}],["path",{d:"M19 21V9",key:"unv183"}]]),G=s("chevrons-left-right-ellipsis",[["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"m17 7 5 5-5 5",key:"1xlxn0"}],["path",{d:"m7 7-5 5 5 5",key:"19njba"}],["path",{d:"M8 12h.01",key:"czm47f"}]]),z=s("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]),W=s("database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]),H=s("download",[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]]),$=s("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]),X=s("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]),q=s("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]),Y=s("maximize-2",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]]),K=s("minimize-2",[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]]),Z=s("waypoints",[["circle",{cx:"12",cy:"4.5",r:"2.5",key:"r5ysbb"}],["path",{d:"m10.2 6.3-3.9 3.9",key:"1nzqf6"}],["circle",{cx:"4.5",cy:"12",r:"2.5",key:"jydg6v"}],["path",{d:"M7 12h10",key:"b7w52i"}],["circle",{cx:"19.5",cy:"12",r:"2.5",key:"1piiel"}],["path",{d:"m13.8 17.7 3.9-3.9",key:"1wyg1y"}],["circle",{cx:"12",cy:"19.5",r:"2.5",key:"13o1pw"}]]);function Q(e,t){const n=Math.max(5,Math.min(e,300)),r=Math.log(5),s=Math.log(300);return 1+(Math.log(n)-r)/(s-r)*5}const J="#4338CA";function ee({label:e,icon:t,status:n,detail:r}){return i.jsxs("div",{className:m("flex items-center gap-3 py-3 px-4 rounded-xl transition-all duration-300","active"===n&&"bg-[#4338CA]/10","complete"===n&&"bg-accent-success/10","pending"===n&&"opacity-40"),children:[i.jsx("div",{className:m("w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0 transition-all duration-300","active"===n&&"bg-[#4338CA]/20","complete"===n&&"bg-accent-success/20","pending"===n&&"bg-white/5"),children:"complete"===n?i.jsx(I,{className:"w-4 h-4 text-accent-success"}):"active"===n?i.jsx(L,{className:"w-4 h-4 animate-spin",style:{color:J}}):i.jsx("span",{className:"text-text-muted",children:t})}),i.jsxs("div",{className:"flex-1 min-w-0",children:[i.jsx("div",{className:m("text-sm font-medium transition-colors","active"===n&&"text-[#4338CA]","complete"===n&&"text-accent-success","pending"===n&&"text-text-muted"),children:e}),r&&"pending"!==n&&i.jsx("div",{className:"text-xs text-text-muted mt-0.5 truncate",children:r})]})]})}const te=p.memo(function({isOpen:e,currentStep:t,packetCount:n,onClose:r}){if(p.useEffect(()=>{if(!e)return;const t=e=>{"Escape"===e.key&&r&&r()};window.addEventListener("keydown",t);const n=document.body.style.overflow,s=document.body.style.position,i=document.body.style.width,o=document.body.style.top,a=window.scrollY;return document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.width="100%",document.body.style.top=`-${a}px`,()=>{window.removeEventListener("keydown",t),document.body.style.overflow=n,document.body.style.position=s,document.body.style.width=i,document.body.style.top=o,window.scrollTo(0,a)}},[e,r]),!e)return null;const s="complete"===t,o=e=>{const n=["fetching","analyzing","building","complete"],r=n.indexOf(t),s=n.indexOf(e);return s0?`${n.toLocaleString()} packets`:"Loading database..."}),i.jsx(ee,{label:"Analyzing Database",icon:i.jsx(W,{className:"w-4 h-4"}),status:o("analyzing"),detail:"Processing packet paths"}),i.jsx(ee,{label:"Building Topology",icon:i.jsx(A,{className:"w-4 h-4"}),status:o("building"),detail:"Computing mesh edges"})]}),i.jsx("p",{className:"text-xs text-text-muted text-center mt-5",children:"This may take a few seconds..."})]})})]}),document.body)}),ne="#4338CA",re="#FBBF24",se="#6366F1",ie="#F97316",oe="#F59E0B",ae="#FBBF24",le="#4B5563",ce="#6B7280",ue="#374151",he="#5EEAD4",de="#6366F1",fe="#9CA3AF",pe="#6B7280",ge="#FBBF24",me=2e3;function _e({text:e}){return i.jsxs("span",{className:"group relative cursor-help",children:[i.jsx(O,{className:"w-3 h-3 text-text-muted"}),i.jsx("div",{className:"absolute bottom-full left-0 mb-1 hidden group-hover:block w-44 p-2 text-[10px] leading-tight rounded-lg z-10",style:{background:"rgba(20, 20, 22, 0.98)",border:"1px solid rgba(140, 160, 200, 0.3)"},children:e})]})}function ye(e){const t=new Date(1e3*e);return`${(t.getMonth()+1).toString().padStart(2,"0")}/${t.getDate().toString().padStart(2,"0")}`}function be({hash:e,hashPrefix:t,name:n,isHub:r,isZeroHop:s,isMobile:a,isRoomServer:l,isStale:c,lastSeenTimestamp:u,centrality:h,affinity:d,meanSnr:f,meanRssi:g,neighbor:m,onRemove:_,txDelayRec:y}){const[b,v]=p.useState(!1),x=s?"Direct":(null==d?void 0:d.typicalHopPosition)?`${d.typicalHopPosition}-hop`:null,w=[{label:"Packets",value:(null==d?void 0:d.frequency)||0},{label:"Adverts",value:m.advert_count||0}];s&&void 0!==f&&w.push({label:"SNR",value:`${f.toFixed(1)} dB`}),s&&void 0!==g&&w.push({label:"RSSI",value:`${Math.round(g)} dBm`});const E=y&&!y.insufficientData,T={hub:{bg:"bg-amber-500/20",text:"text-amber-400",title:"Hub: High-connectivity node (4+ neighbors) that bridges many paths"},backbone:{bg:"bg-purple-500/20",text:"text-purple-400",title:"Backbone: Critical relay with 4+ neighbors and high traffic"},relay:{bg:"bg-cyan-500/20",text:"text-cyan-400",title:"Relay: Standard forwarding node with symmetric traffic"},edge:{bg:"bg-gray-500/20",text:"text-gray-400",title:"Edge: Peripheral node with few connections"}},S={high:{bg:"bg-green-500/20",text:"text-green-400",title:"1000+ packets observed"},medium:{bg:"bg-amber-500/20",text:"text-amber-400",title:"500-999 packets observed"},low:{bg:"bg-red-500/20",text:"text-red-400",title:"100-499 packets observed"},insufficient:{bg:"bg-gray-500/20",text:"text-gray-400",title:"Insufficient data for analysis"}};return i.jsxs("div",{className:"w-[220px] pr-3",children:[i.jsx("div",{className:"text-[14px] font-semibold text-text-primary leading-snug truncate mb-0.5",children:n}),i.jsxs("div",{className:"flex items-center gap-1 flex-wrap mb-1.5",children:[i.jsx("code",{className:"font-mono text-[10px] text-text-muted/70 bg-white/5 px-1 py-px rounded",children:t}),i.jsx("button",{onClick:()=>{navigator.clipboard.writeText(e),v(!0),setTimeout(()=>v(!1),1500)},className:"p-0.5 hover:bg-white/10 rounded transition-colors",title:"Copy full hash",children:b?i.jsx(I,{className:"w-2.5 h-2.5 text-accent-success"}):i.jsx(M,{className:"w-2.5 h-2.5 text-text-muted/50"})}),r&&i.jsx("span",{className:"px-1 py-px text-[8px] font-bold uppercase rounded",style:{backgroundColor:"#FBBF24",color:"#000"},children:"Hub"}),x&&i.jsx("span",{className:"px-1 py-px text-[8px] font-bold uppercase rounded",style:{backgroundColor:s?ae:"rgba(255,255,255,0.08)",color:s?"#000":"rgba(255,255,255,0.5)"},children:x}),a&&i.jsx("span",{className:"px-1 py-px text-[8px] font-bold uppercase rounded bg-orange-500/25 text-orange-300",children:"Mobile"}),m.is_repeater&&i.jsx("span",{className:"px-1 py-px text-[8px] font-bold uppercase rounded bg-cyan-500/20 text-cyan-400",children:"Rptr"}),l&&i.jsx("span",{className:"px-1 py-px text-[8px] font-bold uppercase rounded bg-amber-500/25 text-amber-400",children:"Room"}),c&&u&&i.jsxs("span",{className:"px-1 py-px text-[8px] font-medium rounded bg-gray-500/30 text-gray-300",title:"Neighbor not heard in 7+ days",children:["Idle ",ye(u)]})]}),i.jsxs("div",{className:"text-[10px] text-text-muted/60 mb-2 leading-tight",children:[i.jsx("span",{children:o(m.last_seen)}),(null==d?void 0:d.distanceMeters)&&i.jsxs("span",{className:"font-medium text-text-muted/80",children:[" · ",(A=d.distanceMeters,null===A?"—":A<1e3?`${Math.round(A)}m`:`${(A/1e3).toFixed(1)}km`)]}),m.latitude&&m.longitude&&0!==m.latitude&&0!==m.longitude&&i.jsxs("span",{className:"font-mono text-[9px]",children:[" · ",m.latitude.toFixed(4),", ",m.longitude.toFixed(4)]})]}),i.jsx("div",{className:"mb-2",children:i.jsx(R,{nodeHash:e,width:"100%",height:28,showArea:!0,showTooltip:!0})}),i.jsxs("div",{className:"grid grid-cols-2 gap-x-4 gap-y-0.5 text-[11px] mb-2",children:[w.map((e,t)=>i.jsxs("div",{className:"flex justify-between",children:[i.jsx("span",{className:"text-text-muted/50",children:e.label}),i.jsx("span",{className:"font-semibold tabular-nums "+("highlight"in e&&e.highlight?"text-amber-400":""),children:e.value})]},t)),E&&y.networkRole&&i.jsx(i.Fragment,{children:i.jsxs("div",{className:"flex items-center justify-between col-span-2 mt-1 pt-1 border-t border-white/5",children:[i.jsxs("div",{className:"flex items-center gap-1",children:[i.jsx("span",{className:"text-text-muted/50",children:"Role"}),i.jsx("span",{className:`px-1.5 py-px text-[8px] font-bold uppercase rounded ${T[y.networkRole].bg} ${T[y.networkRole].text}`,title:T[y.networkRole].title,children:y.networkRole})]}),y.dataConfidence&&i.jsxs("div",{className:"flex items-center gap-1",children:[i.jsx("span",{className:"text-text-muted/50",children:"Data"}),i.jsx("span",{className:`px-1.5 py-px text-[8px] font-bold uppercase rounded ${S[y.dataConfidence].bg} ${S[y.dataConfidence].text}`,title:S[y.dataConfidence].title,children:y.dataConfidence})]})]})})]}),(E||_)&&i.jsxs("div",{className:"pt-1.5 border-t border-white/5",children:[E&&i.jsxs("div",{className:"flex items-center gap-2 text-[10px]",children:[i.jsx("span",{className:"text-text-muted/50",children:"TX Delay"}),i.jsxs("span",{className:"font-semibold tabular-nums text-amber-400",children:["×",(y.floodFactor??y.txDelayFactor).toFixed(1)]}),i.jsx("span",{className:"text-text-muted/30",children:"flood"}),i.jsxs("span",{className:"font-semibold tabular-nums text-amber-400",children:["×",(y.directFactor??y.directTxDelayFactor).toFixed(1)]}),i.jsx("span",{className:"text-text-muted/30",children:"direct"})]}),_&&i.jsx("div",{className:"flex justify-end "+(E?"mt-1.5":""),children:i.jsx("button",{onClick:_,className:"flex items-center gap-0.5 p-1 text-[10px] text-text-muted/30 hover:text-red-400 hover:bg-red-500/10 rounded transition-colors",title:"Remove from contacts",children:i.jsx(C,{className:"w-3 h-3"})})})]})]});var A}function ve({showTopology:e,validatedPolylineCount:t,filteredNeighborCount:n,hasLocalNode:r,meshTopology:s,zeroHopNeighbors:o,neighborsWithLocation:a}){return i.jsxs("div",{className:"absolute bottom-4 left-4 z-[600] text-xs",style:{background:"rgba(20, 20, 22, 0.95)",borderRadius:"0.75rem",padding:"0.625rem",border:"1px solid rgba(140, 160, 200, 0.2)",maxWidth:"150px"},children:[i.jsxs("div",{className:"text-text-secondary font-medium mb-1.5 flex items-center gap-1",children:["Nodes",i.jsx(_e,{text:"Node type shown by shape/color. Yellow outer ring = direct RF neighbor."})]}),i.jsxs("div",{className:"flex flex-col gap-1",children:[i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx("div",{className:"rounded-full flex-shrink-0",style:{width:"12px",height:"12px",background:"transparent",border:`4px solid ${ne}`,boxSizing:"border-box"}}),i.jsx("span",{className:"text-text-muted",children:"Node"}),i.jsx(_e,{text:"Standard mesh node. Can be a repeater, client, or companion device."})]}),s.gatewayNodes.length>0&&i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx("div",{className:"rounded-full flex-shrink-0",style:{width:"12px",height:"12px",backgroundColor:ne}}),i.jsx("span",{className:"text-text-muted",children:"Gateway"}),i.jsx(_e,{text:"Significant traffic forwarder (7-10% of last-hop traffic). Gateways relay substantial traffic to the local node."})]}),i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx("div",{className:"rounded-full flex-shrink-0",style:{width:"12px",height:"12px",backgroundColor:se}}),i.jsx("span",{className:"text-text-muted",children:"Hub"}),i.jsx(_e,{text:"Network hub (≥10% of last-hop traffic). Hubs are central to mesh traffic flow and may use higher TX delays."})]}),i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx(F,{className:"w-3 h-3 flex-shrink-0",style:{color:re},strokeWidth:2.5}),i.jsx("span",{className:"text-text-muted",children:"Local"}),i.jsx(_e,{text:"Your repeater. This is the node running pyMC_Repeater that you're connected to."})]}),(l=a,l.some(([,e])=>{var t;const n=null==(t=e.contact_type)?void 0:t.toLowerCase();return"room server"===n||"room_server"===n||"room"===n||"server"===n})&&i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx(k,{className:"w-3 h-3 flex-shrink-0",style:{color:oe},strokeWidth:2.5}),i.jsx("span",{className:"text-text-muted",children:"Room"}),i.jsx(_e,{text:"Room Server identity. Hosts a chat room that clients can sync messages with."})]})),s.mobileNodes.length>0&&i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx("div",{className:"rounded-full flex-shrink-0",style:{width:"12px",height:"12px",background:"transparent",border:`4px solid ${ie}`,boxSizing:"border-box"}}),i.jsx("span",{className:"text-text-muted",children:"Mobile"}),i.jsx(_e,{text:"Volatile node that frequently appears/disappears from paths. Likely a portable or vehicle-mounted device."})]}),o.size>0&&i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsxs("div",{className:"relative flex-shrink-0",style:{width:"14px",height:"14px"},children:[i.jsx("div",{className:"absolute rounded-full",style:{top:"-2px",left:"-2px",width:"18px",height:"18px",background:"transparent",border:`2px solid ${ae}`,boxSizing:"border-box",opacity:.85}}),i.jsx("div",{className:"absolute rounded-full",style:{top:"1px",left:"1px",width:"12px",height:"12px",background:"transparent",border:`4px solid ${ne}`,boxSizing:"border-box"}})]}),i.jsx("span",{className:"text-text-muted",children:"Neighbor"}),i.jsx(_e,{text:"Zero-hop direct RF contact. We receive their ADVERTs directly without any relay hops."})]})]}),o.size>0&&i.jsx("div",{className:"mt-1.5 pt-1.5 border-t border-white/10",children:i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx("div",{className:"flex-shrink-0",style:{width:"14px",height:"2px",backgroundImage:`repeating-linear-gradient(90deg, ${pe} 0, ${pe} 3px, transparent 3px, transparent 5px)`,borderRadius:"1px"}}),i.jsx("span",{className:"text-text-muted",children:"Neighbor"}),i.jsx(_e,{text:"Dashed gray → yellow on hover. Direct RF contact with local."})]})}),e&&t>0&&i.jsxs(i.Fragment,{children:[i.jsxs("div",{className:"text-text-secondary font-medium mt-2 pt-2 border-t border-white/10 mb-1 flex items-center gap-1",children:["Topology",i.jsx(_e,{text:"Links with 5+ validations. Thickness = relative strength."})]}),i.jsxs("div",{className:"flex flex-col gap-0.5 text-text-muted",children:[i.jsxs("div",{className:"flex justify-between tabular-nums",children:[i.jsx("span",{children:"Nodes"}),i.jsx("span",{className:"text-text-secondary",children:n+(r?1:0)})]}),i.jsxs("div",{className:"flex justify-between tabular-nums",children:[i.jsx("span",{children:"Links"}),i.jsx("span",{className:"text-text-secondary",children:t})]}),s.hubNodes.length>0&&i.jsxs("div",{className:"flex justify-between tabular-nums",children:[i.jsx("span",{children:"Hubs"}),i.jsx("span",{style:{color:se},children:s.hubNodes.length})]})]}),i.jsxs("div",{className:"flex flex-col gap-1 mt-1.5 pt-1.5 border-t border-white/10",children:[i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx("div",{className:"flex-shrink-0",style:{width:"14px",height:"3px",backgroundColor:le,borderRadius:"1px"}}),i.jsx("span",{className:"text-text-muted",children:"Link"}),i.jsx(_e,{text:"Gray at rest. Hover to reveal type (teal=direct, indigo=loop)."})]}),s.loops.length>0&&i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsxs("div",{className:"flex-shrink-0 flex flex-col gap-0.5",style:{width:"14px"},children:[i.jsx("div",{style:{height:"2px",backgroundColor:le,borderRadius:"1px"}}),i.jsx("div",{style:{height:"2px",backgroundColor:le,borderRadius:"1px"}})]}),i.jsx("span",{className:"text-text-muted",children:"Redundant"})]})]}),s.loops.length>0&&i.jsx("div",{className:"mt-1.5 pt-1.5 border-t border-white/10",children:i.jsxs("div",{className:"flex items-center gap-1.5",children:[i.jsx(D,{className:"w-3 h-3 flex-shrink-0",style:{color:de}}),i.jsxs("div",{className:"flex flex-col",children:[i.jsxs("span",{style:{color:de},className:"font-medium",children:[s.loops.length," ",1===s.loops.length?"Loop":"Loops"]}),i.jsx("span",{className:"text-text-muted text-[10px] leading-tight",children:"Redundant paths"})]})]})})]})]});var l}const xe={background:"rgba(20, 20, 22, 0.95)",borderRadius:"0.75rem",border:"1px solid rgba(140, 160, 200, 0.2)"},we=(e,t=.4)=>({background:e,borderRadius:"0.75rem",border:`1px solid ${e.replace(/[\d.]+\)$/,`${t})`)}`});function Ee({isDeepLoading:e,showDeepAnalysisModal:t,onDeepAnalysis:n,showTopology:r,onToggleTopology:s,hasValidatedPolylines:o,showNeighborLines:a,onToggleNeighborLines:l,hasNeighborPolylines:c,showNodes:u,onToggleNodes:h,soloHubs:d,onToggleSoloHubs:f,hasHubNodes:p,soloDirect:g,onToggleSoloDirect:m,hasZeroHopNeighbors:_,isFullscreen:y,onToggleFullscreen:b}){return i.jsxs("div",{className:"absolute top-4 right-4 z-[600] flex gap-2",children:[i.jsxs("button",{onClick:n,disabled:e||t,className:"px-3 py-2 flex items-center gap-2 transition-colors hover:bg-white/10 disabled:opacity-50 disabled:cursor-not-allowed",style:xe,title:"Deep Analysis - Load full packet history and rebuild topology",children:[i.jsx("span",{className:"text-xs font-medium text-text-primary",children:"Deep Analysis"}),i.jsx(V,{className:"w-4 h-4 text-accent-primary"})]}),o&&i.jsx("button",{onClick:s,className:"p-2 transition-colors hover:bg-white/10",style:r?we("rgba(74, 222, 128, 0.2)"):xe,title:r?"Hide topology lines":"Show topology lines",children:r?i.jsx(A,{className:"w-4 h-4 text-green-400"}):i.jsx(X,{className:"w-4 h-4 text-text-secondary"})}),c&&i.jsx("button",{onClick:l,className:"p-2 transition-colors hover:bg-white/10",style:a?{...xe,background:"rgba(251, 191, 36, 0.2)",border:"1px solid rgba(251, 191, 36, 0.4)"}:xe,title:a?"Hide neighbor lines":"Show neighbor lines",children:i.jsx(Z,{className:"w-4 h-4 "+(a?"text-amber-400":"text-text-secondary")})}),i.jsx("button",{onClick:h,className:"p-2 transition-colors hover:bg-white/10",style:u?{...xe,background:"rgba(99, 102, 241, 0.2)",border:"1px solid rgba(99, 102, 241, 0.4)"}:xe,title:u?"Hide all nodes":"Show all nodes",children:u?i.jsx(N,{className:"w-4 h-4 text-indigo-400"}):i.jsx(X,{className:"w-4 h-4 text-text-secondary"})}),p&&i.jsx("button",{onClick:f,className:"p-2 transition-colors hover:bg-white/10",style:d?{...xe,background:"rgba(251, 191, 36, 0.25)",border:"1px solid rgba(251, 191, 36, 0.5)"}:xe,title:d?"Show all nodes":"Solo hubs & connections",children:i.jsx(B,{className:"w-4 h-4 "+(d?"text-amber-400":"text-text-secondary")})}),_&&i.jsx("button",{onClick:m,className:"p-2 transition-colors hover:bg-white/10",style:g?{...xe,background:"rgba(67, 56, 202, 0.35)",border:"1px solid rgba(67, 56, 202, 0.6)"}:xe,title:g?"Show all nodes":"Solo direct (0-hop) nodes",children:i.jsx(G,{className:"w-4 h-4 "+(g?"text-indigo-400":"text-text-secondary")})}),i.jsx("button",{onClick:b,className:"p-2 transition-colors hover:bg-white/10",style:xe,title:y?"Exit fullscreen":"Fullscreen",children:y?i.jsx(K,{className:"w-4 h-4 text-text-secondary"}):i.jsx(Y,{className:"w-4 h-4 text-text-secondary"})})]})}const Te={background:"rgba(20, 20, 22, 0.95)",borderRadius:"0.75rem",border:"1px solid rgba(140, 160, 200, 0.2)"},Se={background:"rgba(245, 158, 11, 0.25)",borderRadius:"0.75rem",border:"1px solid rgba(245, 158, 11, 0.5)"};function Ae({isActive:e,onClick:t}){return i.jsx("div",{className:"absolute bottom-8 right-4 z-[600]",children:i.jsx("button",{onClick:t,className:"p-2 transition-colors hover:bg-white/10",style:e?Se:Te,title:e?"Configure wardriving coverage":"Show wardriving coverage",children:i.jsx(j,{className:"w-4 h-4 "+(e?"text-amber-400":"text-text-secondary")})})})}function Re(e){let t=!0,n=-90,r=90,s=-180,i=180;for(const o of e.toLowerCase()){const e="0123456789bcdefghjkmnpqrstuvwxyz".indexOf(o);if(-1!==e)for(let o=4;o>=0;o--){const a=e>>o&1;if(t){const e=(s+i)/2;a?s=e:i=e}else{const e=(n+r)/2;a?n=e:r=e}t=!t}}return{lat:(n+r)/2,lon:(s+i)/2}}function Ce(e){return Math.exp(-e*Math.LN2/7)}const ke="pymc-wardriving-url",Pe="pymc-wardriving-enabled";function Ie(e){"undefined"!=typeof localStorage&&(e?localStorage.setItem(ke,e):localStorage.removeItem(ke))}function Me(e){"undefined"!=typeof localStorage&&localStorage.setItem(Pe,String(e))}function Ne(e){return null===e?.5:(Math.max(-15,Math.min(15,e))+15)/30}const Le=a((e,t)=>({status:"idle",isVisible:"undefined"!=typeof localStorage&&"true"===localStorage.getItem(Pe),coveragePoints:[],repeaters:[],error:null,stats:{coverageCount:0,repeaterCount:0,lastUpdated:null},url:"undefined"==typeof localStorage?"":localStorage.getItem(ke)||"",isModalOpen:!1,openModal:()=>e({isModalOpen:!0}),closeModal:()=>e({isModalOpen:!1}),setUrl:t=>e({url:t}),toggleVisibility:()=>{const n=!t().isVisible;Me(n),e({isVisible:n})},setVisible:t=>{Me(t),e({isVisible:t})},loadCoverage:async t=>{if(!t.trim())return e({error:"Please enter a URL",status:"error"}),!1;try{new URL(t.trim())}catch{return e({error:"Invalid URL format",status:"error"}),!1}e({error:null,status:"connecting"});try{e({status:"loading"});const n=await async function(e){const t=`${e.replace(/\/+$/,"").replace(/\/get-nodes$/,"")}/get-samples`,n=await fetch(t,{headers:{Accept:"application/json"}});if(!n.ok)throw new Error(`Failed to fetch precise samples: ${n.status}`);return n.json()}(t.trim());if(!n||"object"!=typeof n)throw new Error("Invalid response from server");if(!Array.isArray(n.keys))throw new Error("No sample data found in response");e({status:"processing"});const r=function(e){var t;const n=[];for(const r of e.keys){if(null===r.snr)continue;const{lat:e,lon:s}=Re(r.hash),i=parseInt(r.time,10),o=isNaN(i)?30:(Date.now()-i)/864e5,a=Ce(o),l=(r.observed?1:.1)*(.5+Ne(r.snr))*a;n.push({lat:e,lon:s,successRate:r.observed?1:0,weight:l,totalSamples:1,ageDays:o,geohash:r.hash,repeaters:(null==(t=r.path)?void 0:t.map(e=>e.toLowerCase()))||[]})}return n}(n);if(0===r.length)throw new Error("No valid coverage points found");return e({coveragePoints:r,repeaters:[],stats:{coverageCount:r.length,repeaterCount:0,lastUpdated:new Date},status:"success",isVisible:!0,url:t.trim()}),Ie(t.trim()),Me(!0),!0}catch(n){const t=n instanceof Error?n.message:"Failed to load coverage data";let r=t;return t.includes("Failed to fetch")||t.includes("NetworkError")?r="Could not connect to server. Check the URL and try again.":t.includes("CORS")?r="Server does not allow cross-origin requests.":t.includes("404")&&(r="Coverage endpoint not found. Check the URL."),e({error:r,status:"error"}),!1}},clearCoverage:()=>{e({coveragePoints:[],repeaters:[],stats:{coverageCount:0,repeaterCount:0,lastUpdated:null},status:"idle",error:null,isVisible:!1,url:""}),Ie(""),Me(!1)}}));function Oe({status:e}){if("connecting"!==e&&"loading"!==e&&"processing"!==e)return null;const t={idle:"",connecting:"Connecting to server...",loading:"Fetching coverage data...",processing:"Processing coverage points...",success:"",error:""}[e];return t?i.jsxs("div",{className:"flex items-center gap-3 p-4 bg-amber-500/10 border border-amber-500/30 rounded-xl",children:[i.jsx("div",{className:"relative",children:i.jsx(L,{className:"w-5 h-5 text-amber-400 animate-spin"})}),i.jsxs("div",{className:"flex-1",children:[i.jsx("p",{className:"text-sm text-amber-400 font-medium",children:t}),i.jsx("div",{className:"mt-2 h-1 bg-amber-500/20 rounded-full overflow-hidden",children:i.jsx("div",{className:"h-full bg-amber-400 rounded-full transition-all duration-300",style:{width:"connecting"===e?"30%":"loading"===e?"60%":"90%"}})})]})]}):null}function Fe(){const{isModalOpen:e,closeModal:t,status:n,isVisible:r,stats:s,error:o,url:a,loadCoverage:c,clearCoverage:u,toggleVisibility:h,setUrl:d}=Le(),f="connecting"===n||"loading"===n||"processing"===n,[g,m]=p.useState(a),_=p.useCallback(async()=>{await c(g)},[g,c]),y=p.useCallback(()=>{m(""),u()},[u]),b=p.useCallback(e=>{"Enter"!==e.key||e.shiftKey||f||(e.preventDefault(),_())},[_,f]),v=p.useCallback(e=>{const t=e.target.value;m(t),d(t)},[d]);if(!e)return null;const x=s.coverageCount>0,w=g.trim().length>0&&!f;return i.jsxs("div",{className:"fixed inset-0 z-[1000] flex items-center justify-center",children:[i.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:f?void 0:t}),i.jsxs("div",{className:"relative bg-surface border border-border rounded-2xl shadow-2xl w-full max-w-md mx-4 overflow-hidden",children:[i.jsxs("div",{className:"flex items-center justify-between p-4 border-b border-border",children:[i.jsxs("div",{className:"flex items-center gap-3",children:[i.jsx("div",{className:"p-2 rounded-lg bg-amber-500/20",children:i.jsx(j,{className:"w-5 h-5 text-amber-400"})}),i.jsxs("div",{children:[i.jsx("h2",{className:"text-lg font-semibold text-text-primary",children:"Wardriving Coverage"}),i.jsx("p",{className:"text-xs text-text-muted",children:"Overlay RF coverage heatmap"})]})]}),i.jsx("button",{onClick:t,disabled:f,className:"p-2 rounded-lg hover:bg-white/10 transition-colors disabled:opacity-50",children:i.jsx(l,{className:"w-5 h-5 text-text-secondary"})})]}),i.jsxs("div",{className:"p-4 space-y-4",children:[i.jsxs("div",{children:[i.jsx("label",{className:"block text-sm font-medium text-text-secondary mb-2",children:"Coverage Server URL"}),i.jsx("input",{type:"url",value:g,onChange:v,onKeyDown:b,placeholder:"https://coverage.wcmesh.com",className:"w-full px-4 py-3 bg-black/30 border border-border rounded-xl text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-amber-500/50 focus:border-amber-500/50 transition-all disabled:opacity-50",disabled:f}),i.jsx("p",{className:"mt-1.5 text-xs text-text-muted",children:"Enter the base URL of a wardriving coverage server (e.g., coverage.wcmesh.com)"})]}),i.jsx(Oe,{status:n}),"error"===n&&o&&i.jsxs("div",{className:"flex items-start gap-3 p-3 bg-red-500/10 border border-red-500/30 rounded-xl",children:[i.jsx(z,{className:"w-5 h-5 text-red-400 flex-shrink-0 mt-0.5"}),i.jsxs("div",{children:[i.jsx("p",{className:"text-sm text-red-400 font-medium",children:"Connection Failed"}),i.jsx("p",{className:"text-xs text-red-400/80 mt-0.5",children:o})]})]}),"success"===n&&x&&i.jsxs("div",{className:"flex items-start gap-3 p-3 bg-green-500/10 border border-green-500/30 rounded-xl",children:[i.jsx(I,{className:"w-5 h-5 text-green-400 flex-shrink-0 mt-0.5"}),i.jsxs("div",{className:"flex-1",children:[i.jsx("p",{className:"text-sm text-green-400 font-medium",children:"Data Loaded Successfully"}),i.jsxs("p",{className:"text-xs text-green-400/80 mt-0.5",children:[s.coverageCount.toLocaleString()," coverage points • ",s.repeaterCount.toLocaleString()," repeaters"]})]})]}),x&&!f&&"success"!==n&&i.jsxs("div",{className:"flex items-start gap-3 p-3 bg-amber-500/10 border border-amber-500/30 rounded-xl",children:[i.jsx(U,{className:"w-5 h-5 text-amber-400 flex-shrink-0 mt-0.5"}),i.jsxs("div",{className:"flex-1",children:[i.jsx("p",{className:"text-sm text-amber-400 font-medium",children:"Coverage Data Loaded"}),i.jsxs("p",{className:"text-xs text-amber-400/80 mt-0.5",children:[s.coverageCount.toLocaleString()," points •",s.lastUpdated&&` Last updated ${s.lastUpdated.toLocaleTimeString()}`]})]})]})]}),i.jsxs("div",{className:"flex items-center justify-between gap-3 p-4 border-t border-border bg-black/20",children:[i.jsx("div",{className:"flex items-center gap-2",children:x&&i.jsxs(i.Fragment,{children:[i.jsx("button",{onClick:h,disabled:f,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-text-secondary hover:text-text-primary hover:bg-white/5 rounded-lg transition-colors disabled:opacity-50",title:r?"Hide heatmap":"Show heatmap",children:r?i.jsxs(i.Fragment,{children:[i.jsx(X,{className:"w-3.5 h-3.5"})," Hide"]}):i.jsxs(i.Fragment,{children:[i.jsx(q,{className:"w-3.5 h-3.5"})," Show"]})}),i.jsxs("button",{onClick:y,disabled:f,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium text-red-400/80 hover:text-red-400 hover:bg-red-500/10 rounded-lg transition-colors disabled:opacity-50",title:"Clear coverage data",children:[i.jsx(C,{className:"w-3.5 h-3.5"})," Clear"]})]})}),i.jsxs("div",{className:"flex items-center gap-2",children:[i.jsx("button",{onClick:t,disabled:f,className:"px-4 py-2 text-sm font-medium text-text-secondary hover:bg-white/10 rounded-lg transition-colors disabled:opacity-50",children:x?"Done":"Cancel"}),i.jsx("button",{onClick:_,disabled:!w,className:"flex items-center gap-2 px-4 py-2 text-sm font-medium bg-amber-500 hover:bg-amber-400 text-black rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed",children:f?i.jsxs(i.Fragment,{children:[i.jsx(L,{className:"w-4 h-4 animate-spin"}),"Loading..."]}):x?i.jsxs(i.Fragment,{children:[i.jsx(H,{className:"w-4 h-4"}),"Refresh"]}):i.jsxs(i.Fragment,{children:[i.jsx($,{className:"w-4 h-4"}),"Connect"]})})]})]})]})]})}function De(e,t){if(!e)throw new Error(t||"loader assertion failed.")}const Be=Boolean("object"!=typeof process||"[object process]"!==String(process)||process.browser),Ue="undefined"!=typeof process&&process.version&&/v([0-9]*)/.exec(process.version);Ue&&parseFloat(Ue[1]);const je=globalThis,Ve=globalThis.process||{},Ge=globalThis.navigator||{};function ze(e){var t,n;if("undefined"!=typeof window&&"renderer"===(null==(t=window.process)?void 0:t.type))return!0;if("undefined"!=typeof process&&Boolean(null==(n=process.versions)?void 0:n.electron))return!0;const r="undefined"!=typeof navigator&&navigator.userAgent;return Boolean(r&&r.indexOf("Electron")>=0)}function We(){return!("object"==typeof process&&"[object process]"===String(process)&&!(null==process?void 0:process.browser))||ze()}const He="4.1.0";class $e{constructor(e,t,n="sessionStorage"){this.storage=function(e){try{const t=window[e],n="__storage_test__";return t.setItem(n,n),t.removeItem(n),t}catch(wi){return null}}(n),this.id=e,this.config=t,this._loadConfiguration()}getConfiguration(){return this.config}setConfiguration(e){if(Object.assign(this.config,e),this.storage){const e=JSON.stringify(this.config);this.storage.setItem(this.id,e)}}_loadConfiguration(){let e={};if(this.storage){const t=this.storage.getItem(this.id);e=t?JSON.parse(t):{}}return Object.assign(this.config,e),this}}var Xe,qe;function Ye(e){return"string"!=typeof e?e:(e=e.toUpperCase(),Xe[e]||Xe.WHITE)}function Ke(e,t){if(!e)throw new Error("Assertion failed")}function Ze(){var e,t,n;let r;if(We()&&je.performance)r=null==(t=null==(e=null==je?void 0:je.performance)?void 0:e.now)?void 0:t.call(e);else if("hrtime"in Ve){const e=null==(n=null==Ve?void 0:Ve.hrtime)?void 0:n.call(Ve);r=1e3*e[0]+e[1]/1e6}else r=Date.now();return r}(qe=Xe||(Xe={}))[qe.BLACK=30]="BLACK",qe[qe.RED=31]="RED",qe[qe.GREEN=32]="GREEN",qe[qe.YELLOW=33]="YELLOW",qe[qe.BLUE=34]="BLUE",qe[qe.MAGENTA=35]="MAGENTA",qe[qe.CYAN=36]="CYAN",qe[qe.WHITE=37]="WHITE",qe[qe.BRIGHT_BLACK=90]="BRIGHT_BLACK",qe[qe.BRIGHT_RED=91]="BRIGHT_RED",qe[qe.BRIGHT_GREEN=92]="BRIGHT_GREEN",qe[qe.BRIGHT_YELLOW=93]="BRIGHT_YELLOW",qe[qe.BRIGHT_BLUE=94]="BRIGHT_BLUE",qe[qe.BRIGHT_MAGENTA=95]="BRIGHT_MAGENTA",qe[qe.BRIGHT_CYAN=96]="BRIGHT_CYAN",qe[qe.BRIGHT_WHITE=97]="BRIGHT_WHITE";const Qe={debug:We()&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},Je={enabled:!0,level:0};function et(){}const tt={},nt={once:!0};class rt{constructor({id:e}={id:""}){this.VERSION=He,this._startTs=Ze(),this._deltaTs=Ze(),this.userData={},this.LOG_THROTTLE_TIMEOUT=0,this.id=e,this.userData={},this._storage=new $e(`__probe-${this.id}__`,Je),this.timeStamp(`${this.id} started`),function(e,t=["constructor"]){const n=Object.getPrototypeOf(e),r=Object.getOwnPropertyNames(n),s=e;for(const i of r){const n=s[i];"function"==typeof n&&(t.find(e=>i===e)||(s[i]=n.bind(e)))}}(this),Object.seal(this)}set level(e){this.setLevel(e)}get level(){return this.getLevel()}isEnabled(){return this._storage.config.enabled}getLevel(){return this._storage.config.level}getTotal(){return Number((Ze()-this._startTs).toPrecision(10))}getDelta(){return Number((Ze()-this._deltaTs).toPrecision(10))}set priority(e){this.level=e}get priority(){return this.level}getPriority(){return this.level}enable(e=!0){return this._storage.setConfiguration({enabled:e}),this}setLevel(e){return this._storage.setConfiguration({level:e}),this}get(e){return this._storage.config[e]}set(e,t){this._storage.setConfiguration({[e]:t})}settings(){console.table}assert(e,t){if(!e)throw new Error(t||"Assertion failed")}warn(e){return this._getLogFunction(0,e,Qe.warn,arguments,nt)}error(e){return this._getLogFunction(0,e,Qe.error,arguments)}deprecated(e,t){return this.warn(`\`${e}\` is deprecated and will be removed in a later version. Use \`${t}\` instead`)}removed(e,t){return this.error(`\`${e}\` has been removed. Use \`${t}\` instead`)}probe(e,t){return this._getLogFunction(e,t,Qe.log,arguments,{time:!0,once:!0})}log(e,t){return this._getLogFunction(e,t,Qe.debug,arguments)}info(e,t){return this._getLogFunction(e,t,console.info,arguments)}once(e,t){return this._getLogFunction(e,t,Qe.debug||Qe.info,arguments,nt)}table(e,t,n){return t?this._getLogFunction(e,t,console.table||et,n&&[n],{tag:ot(t)}):et}time(e,t){return this._getLogFunction(e,t,console.time?console.time:console.info)}timeEnd(e,t){return this._getLogFunction(e,t,console.timeEnd?console.timeEnd:console.info)}timeStamp(e,t){return this._getLogFunction(e,t,console.timeStamp||et)}group(e,t,n={collapsed:!1}){const r=it({logLevel:e,message:t,opts:n}),{collapsed:s}=n;return r.method=(s?console.groupCollapsed:console.group)||console.info,this._getLogFunction(r)}groupCollapsed(e,t,n={}){return this.group(e,t,Object.assign({},n,{collapsed:!0}))}groupEnd(e){return this._getLogFunction(e,"",console.groupEnd||et)}withGroup(e,t,n){this.group(e,t)();try{n()}finally{this.groupEnd(e)()}}trace(){console.trace}_shouldLog(e){return this.isEnabled()&&this.getLevel()>=st(e)}_getLogFunction(e,t,n,r,s){if(this._shouldLog(e)){s=it({logLevel:e,message:t,args:r,opts:s}),Ke(n=n||s.method),s.total=this.getTotal(),s.delta=this.getDelta(),this._deltaTs=Ze();const i=s.tag||s.message;if(s.once&&i){if(tt[i])return et;tt[i]=Ze()}return t=function(e,t,n){if("string"==typeof t){const o=n.time?function(e,t=8){const n=Math.max(t-e.length,0);return`${" ".repeat(n)}${e}`}(function(e){let t;return t=e<10?`${e.toFixed(2)}ms`:e<100?`${e.toFixed(1)}ms`:e<1e3?`${e.toFixed(0)}ms`:`${(e/1e3).toFixed(2)}s`,t}(n.total)):"";r=t=n.time?`${e}: ${o} ${t}`:`${e}: ${t}`,s=n.color,i=n.background,We||"string"!=typeof r||(s&&(r=`[${Ye(s)}m${r}`),i&&(r=`[${Ye(i)+10}m${r}`)),t=r}var r,s,i;return t}(this.id,s.message,s),n.bind(console,t,...s.args)}return et}}function st(e){if(!e)return 0;let t;switch(typeof e){case"number":t=e;break;case"object":t=e.logLevel||e.priority||0;break;default:return 0}return Ke(Number.isFinite(t)&&t>=0),t}function it(e){const{logLevel:t,message:n}=e;e.logLevel=st(t);const r=e.args?Array.from(e.args):[];for(;r.length&&r.shift()!==n;);switch(typeof t){case"string":case"function":void 0!==n&&r.unshift(n),e.message=t;break;case"object":Object.assign(e,t)}"function"==typeof e.message&&(e.message=e.message());const s=typeof e.message;return Ke("string"===s||"object"===s),Object.assign(e,{args:r},e.opts)}function ot(e){for(const t in e)for(const n in e[t])return n||"untitled";return"empty"}rt.VERSION=He;const at="4.3.3",lt=at[0]>="0"&&at[0]<="9"?`v${at}`:"",ct=function(){const e=new rt({id:"loaders.gl"});return globalThis.loaders=globalThis.loaders||{},globalThis.loaders.log=e,globalThis.loaders.version=lt,globalThis.probe=globalThis.probe||{},globalThis.probe.loaders=e,e}();function ut(e,t){return ht(e||{},t)}function ht(e,t,n=0){if(n>3)return t;const r={...e};for(const[s,i]of Object.entries(t))i&&"object"==typeof i&&!Array.isArray(i)?r[s]=ht(r[s]||{},t[s],n+1):r[s]=t[s];return r}var dt;function ft(e,t){if(!e)throw new Error(t||"loaders.gl assertion failed.")}(null==(dt=globalThis._loadersgl_)?void 0:dt.version)||(globalThis._loadersgl_=globalThis._loadersgl_||{},globalThis._loadersgl_.version="4.3.3"),globalThis._loadersgl_.version;const pt="object"!=typeof process||"[object process]"!==String(process)||process.browser,gt="undefined"!=typeof window&&void 0!==window.orientation,mt="undefined"!=typeof process&&process.version&&/v([0-9]*)/.exec(process.version);mt&&parseFloat(mt[1]);class _t{constructor(e,t){r(this,"name"),r(this,"workerThread"),r(this,"isRunning",!0),r(this,"result"),r(this,"_resolve",()=>{}),r(this,"_reject",()=>{}),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){ft(this.isRunning),this.isRunning=!1,this._resolve(e)}error(e){ft(this.isRunning),this.isRunning=!1,this._reject(e)}}class yt{terminate(){}}const bt=new Map;function vt(e){const t=new Blob([e],{type:"application/javascript"});return URL.createObjectURL(t)}function xt(e,t=!0,n){const r=n||new Set;if(e)if(wt(e))r.add(e);else if(wt(e.buffer))r.add(e.buffer);else if(ArrayBuffer.isView(e));else if(t&&"object"==typeof e)for(const s in e)xt(e[s],t,r);return void 0===n?Array.from(r):[]}function wt(e){return!!e&&(e instanceof ArrayBuffer||"undefined"!=typeof MessagePort&&e instanceof MessagePort||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas)}const Et=()=>{};class Tt{constructor(e){r(this,"name"),r(this,"source"),r(this,"url"),r(this,"terminated",!1),r(this,"worker"),r(this,"onMessage"),r(this,"onError"),r(this,"_loadableURL","");const{name:t,source:n,url:s}=e;ft(n||s),this.name=t,this.source=n,this.url=s,this.onMessage=Et,this.onError=e=>{},this.worker=pt?this._createBrowserWorker():this._createNodeWorker()}static isSupported(){return"undefined"!=typeof Worker&&pt||void 0!==yt&&!pt}destroy(){this.onMessage=Et,this.onError=Et,this.worker.terminate(),this.terminated=!0}get isRunning(){return Boolean(this.onMessage)}postMessage(e,t){t=t||xt(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=function(e){ft(e.source&&!e.url||!e.source&&e.url);let t=bt.get(e.source||e.url);return t||(e.url&&(t=(n=e.url).startsWith("http")?vt(`try {\n importScripts('${n}');\n} catch (error) {\n console.error(error);\n throw error;\n}`):n,bt.set(e.url,t)),e.source&&(t=vt(e.source),bt.set(e.source,t))),ft(t),t;var n}({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=>{},e}_createNodeWorker(){let e;if(this.url){const t=this.url.includes(":/")||this.url.startsWith("/")?this.url:`./${this.url}`;e=new yt(t,{eval:!1})}else{if(!this.source)throw new Error("no worker");e=new yt(this.source,{eval:!0})}return e.on("message",e=>{this.onMessage(e)}),e.on("error",e=>{this.onError(e)}),e.on("exit",e=>{}),e}}class St{constructor(e){r(this,"name","unnamed"),r(this,"source"),r(this,"url"),r(this,"maxConcurrency",1),r(this,"maxMobileConcurrency",1),r(this,"onDebug",()=>{}),r(this,"reuseWorkers",!0),r(this,"props",{}),r(this,"jobQueue",[]),r(this,"idleQueue",[]),r(this,"count",0),r(this,"isDestroyed",!1),this.source=e.source,this.url=e.url,this.setProps(e)}static isSupported(){return Tt.isSupported()}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 _t(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){}finally{this.returnWorkerToQueue(e)}}}returnWorkerToQueue(e){!pt||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{}},Rt=class e{constructor(e){r(this,"props"),r(this,"workerPools",new Map),this.props={...At},this.setProps(e),this.workerPools=new Map}static isSupported(){return Tt.isSupported()}static getWorkerFarm(t={}){return e._workerFarm=e._workerFarm||new e({}),e._workerFarm.setProps(t),e._workerFarm}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 s=this.workerPools.get(t);return s||(s=new St({name:t,source:n,url:r}),s.setProps(this._getWorkerPoolProps()),this.workerPools.set(t,s)),s}_getWorkerPoolProps(){return{maxConcurrency:this.props.maxConcurrency,maxMobileConcurrency:this.props.maxMobileConcurrency,reuseWorkers:this.props.reuseWorkers,onDebug:this.props.onDebug}}};r(Rt,"_workerFarm");let Ct=Rt;async function kt(e,t,n,r,s){const i=e.id,o=function(e,t={}){const n=t[e.id]||{},r=pt?`${e.id}-worker.js`:`${e.id}-worker-node.js`;let s=n.workerUrl;if(s||"compression"!==e.id||(s=t.workerUrl),"test"===t._workerType&&(s=pt?`modules/${e.module}/dist/${r}`:`modules/${e.module}/src/workers/${e.id}-worker-node.ts`),!s){let t=e.version;"latest"===t&&(t="latest");const n=t?`@${t}`:"";s=`https://unpkg.com/@loaders.gl/${e.module}${n}/dist/${r}`}return ft(s),s}(e,n),a=Ct.getWorkerFarm(n).getWorkerPool({name:i,url:o});n=JSON.parse(JSON.stringify(n)),r=JSON.parse(JSON.stringify(r||{}));const l=await a.startJob("process-on-worker",Pt.bind(null,s));l.postMessage("process",{input:t,options:n,context:r});const c=await l.result;return await c.result}async function Pt(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:n,input:i,options:o}=r;try{const r=await e(i,o);t.postMessage("done",{id:n,result:r})}catch(s){const e=s instanceof Error?s.message:"unknown error";t.postMessage("error",{id:n,error:e})}}}function It(){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}class Mt{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=It(),this._timerPending=!0,this}timeEnd(){return this._timerPending?(this.addTime(It()-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)}}class Nt{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 Mt?e:new Mt(t,n),this.stats[t]=r),r}}const Lt={};function Ot(e){if((t=e)&&"object"==typeof t&&t.isBuffer)return e;var t;if(e instanceof ArrayBuffer)return e;if(ArrayBuffer.isView(e))return 0===e.byteOffset&&e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.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 Ft(e){const t=e?e.lastIndexOf("/"):-1;return t>=0?e.substr(t+1):""}const Dt=e=>"function"==typeof e,Bt=e=>null!==e&&"object"==typeof e,Ut=e=>Bt(e)&&e.constructor==={}.constructor,jt=e=>"undefined"!=typeof Response&&e instanceof Response||e&&e.arrayBuffer&&e.text&&e.json,Vt=e=>"undefined"!=typeof Blob&&e instanceof Blob,Gt=e=>(e=>"undefined"!=typeof ReadableStream&&e instanceof ReadableStream||Bt(e)&&Dt(e.tee)&&Dt(e.cancel)&&Dt(e.getReader))(e)||(e=>Bt(e)&&Dt(e.read)&&Dt(e.pipe)&&(e=>"boolean"==typeof e)(e.readable))(e);class zt extends Error{constructor(e,t){super(e),r(this,"reason"),r(this,"url"),r(this,"response"),this.reason=t.reason,this.url=t.url,this.response=t.response}}const Wt=/^data:([-\w.]+\/[-\w.+]+)(;|,)/,Ht=/^([-\w.]+\/[-\w.+]+)/;function $t(e,t){return e.toLowerCase()===t.toLowerCase()}function Xt(e){const t=Wt.exec(e);return t?t[1]:""}const qt=/\?.*/;function Yt(e){return e.replace(qt,"")}function Kt(e){return jt(e)?e.url:Vt(e)?e.name||"":"string"==typeof e?e:""}function Zt(e){if(jt(e)){const t=e,n=t.headers.get("content-type")||"",r=Yt(t.url);return function(e){const t=Ht.exec(e);return t?t[1]:e}(n)||Xt(r)}return Vt(e)?e.type||"":"string"==typeof e?Xt(e):""}async function Qt(e){if(jt(e))return e;const t={},n=function(e){return jt(e)?e.headers["content-length"]||-1:Vt(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=Kt(e),s=Zt(e);s&&(t["content-type"]=s);const i=await async function(e){if("string"==typeof e)return`data:,${e.slice(0,5)}`;if(e instanceof Blob){const t=e.slice(0,5);return await new Promise(e=>{const n=new FileReader;n.onload=t=>{var n;return e(null==(n=null==t?void 0:t.target)?void 0:n.result)},n.readAsDataURL(t)})}return e instanceof ArrayBuffer?`data:base64,${function(e){let t="";const n=new Uint8Array(e);for(let r=0;r{}}info(){return()=>{}}warn(){return()=>{}}error(){return()=>{}}}const nn={fetch:null,mimeType:void 0,nothrow:!1,log:new class{constructor(){r(this,"console"),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:Be,_nodeWorkers:!1,_workerType:"",limit:0,_limitMB:0,batchSize:"auto",batchDebounceMs:0,metadata:!1,transforms:[]},rn={throws:"nothrow",dataType:"(no longer used)",uri:"baseUri",method:"fetch.method",headers:"fetch.headers",body:"fetch.body",mode:"fetch.mode",credentials:"fetch.credentials",cache:"fetch.cache",redirect:"fetch.redirect",referrer:"fetch.referrer",referrerPolicy:"fetch.referrerPolicy",integrity:"fetch.integrity",keepalive:"fetch.keepalive",signal:"fetch.signal"};function sn(){globalThis.loaders=globalThis.loaders||{};const{loaders:e}=globalThis;return e._state||(e._state={}),e._state}function on(){const e=sn();return e.globalOptions=e.globalOptions||{...nn},e.globalOptions}function an(e,t,n,r,s){const i=t||"Top level",o=t?`${t}.`:"";for(const a in e){const l=!t&&Bt(e[a]);if(!(a in n)&&("baseUri"!==a||t)&&("workerUrl"!==a||!t))if(a in r)en.warn(`${i} loader option '${o}${a}' no longer supported, use '${r[a]}'`)();else if(!l){const e=ln(a,s);en.warn(`${i} loader option '${o}${a}' not recognized. ${e}`)()}}}function ln(e,t){const n=e.toLowerCase();let r="";for(const s of t)for(const t in s.options){if(e===t)return`Did you mean '${s.id}.${t}'?`;const i=t.toLowerCase();(n.startsWith(i)||i.startsWith(n))&&(r=r||`Did you mean '${s.id}.${t}'?`)}return r}function cn(e,t){for(const n in t)if(n in t){const r=t[n];Ut(r)&&Ut(e[n])?e[n]={...e[n],...t[n]}:e[n]=t[n]}}function un(e){return!!e&&(Array.isArray(e)&&(e=e[0]),Array.isArray(null==e?void 0:e.extensions))}function hn(e){let t;return De(e,"null loader"),De(un(e),"invalid loader"),Array.isArray(e)&&(t=e[1],e=e[0],e={...e,options:{...e.options,...t}}),((null==e?void 0:e.parseTextSync)||(null==e?void 0:e.parseText))&&(e.text=!0),e.text||(e.binary=!0),e}const dn=()=>{const e=sn();return e.loaderRegistry=e.loaderRegistry||[],e.loaderRegistry},fn=/\.([^.]+)$/;function pn(e,t=[],n,r){if(!gn(e))return null;if(t&&!Array.isArray(t))return hn(t);let s=[];t&&(s=s.concat(t)),(null==n?void 0:n.ignoreRegisteredLoaders)||s.push(...dn()),function(e){for(const t of e)hn(t)}(s);const i=function(e,t,n,r){const s=Kt(e),i=Zt(e),o=Yt(s)||(null==r?void 0:r.url);let a=null,l="";return(null==n?void 0:n.mimeType)&&(a=_n(t,null==n?void 0:n.mimeType),l=`match forced by supplied MIME type ${null==n?void 0:n.mimeType}`),a=a||function(e,t){const n=t&&fn.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,o),l=l||(a?`matched url ${o}`:""),a=a||_n(t,i),l=l||(a?`matched MIME type ${i}`:""),a=a||function(e,t){if(!t)return null;for(const n of e)if("string"==typeof t){if(yn(t,n))return n}else if(ArrayBuffer.isView(t)){if(bn(t.buffer,t.byteOffset,n))return n}else if(t instanceof ArrayBuffer&&bn(t,0,n))return n;return null}(t,e),l=l||(a?`matched initial data ${vn(e)}`:""),(null==n?void 0:n.fallbackMimeType)&&(a=a||_n(t,null==n?void 0:n.fallbackMimeType),l=l||(a?`matched fallback MIME type ${i}`:"")),l&&ct.log(1,`selectLoader selected ${null==a?void 0:a.name}: ${l}.`),a}(e,s,n,r);if(!i&&!(null==n?void 0:n.nothrow))throw new Error(mn(e));return i}function gn(e){return!(e instanceof Response&&204===e.status)}function mn(e){const t=Kt(e),n=Zt(e);let r="No valid loader found (";r+=t?`${Ft(t)}, `:"no url provided, ",r+=`MIME type: ${n?`"${n}"`:"not provided"}, `;const s=e?vn(e):"";return r+=s?` first bytes: "${s}"`:"first bytes: not available",r+=")",r}function _n(e,t){var n;for(const r of e){if(null==(n=r.mimeTypes)?void 0:n.some(e=>$t(t,e)))return r;if($t(t,`application/x.${r.id}`))return r}return null}function yn(e,t){return t.testText?t.testText(e):(Array.isArray(t.tests)?t.tests:[t.tests]).some(t=>e.startsWith(t))}function bn(e,t,n){return(Array.isArray(n.tests)?n.tests:[n.tests]).some(n=>function(e,t,n,r){if(r instanceof ArrayBuffer)return function(e,t,n){if(n=n||e.byteLength,e.byteLength100?`${r.slice(0,100)}...`:r;const s={reason:e.statusText,url:e.url,response:e};try{const t=e.headers.get("Content-Type");s.reason=!e.bodyUsed&&(null==t?void 0:t.includes("application/json"))?await e.json():await e.text()}catch(t){}return new zt(r,s)}(e);throw t}}(n),t.binary?await n.arrayBuffer():await n.text()}if(Gt(e)&&(e=function(e,t){if("string"==typeof e)return function*(e,t){const n=(null==t?void 0:t.chunkSize)||262144;let r=0;const s=new TextEncoder;for(;re&&"function"==typeof e[Symbol.asyncIterator])(e))return async function(e){const t=[];for await(const n of e)t.push(n);return function(...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 s=0;for(const i of t)r.set(i,s),s+=i.byteLength;return r.buffer}(e)}(...t)}(e);var s;throw new Error(Tn)}function An(e,t){const n=on(),r=e||n;return"function"==typeof r.fetch?r.fetch:Bt(r.fetch)?e=>Jt(e,r.fetch):(null==t?void 0:t.fetch)?null==t?void 0:t.fetch:Jt}async function Rn(e,t,n,r){!t||Array.isArray(t)||un(t)||(r=void 0,n=t,t=void 0),n=n||{};const s=Kt(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),o=await async function(e,t=[],n,r){if(!gn(e))return null;let s=pn(e,t,{...n,nothrow:!0},r);if(s)return s;if(Vt(e)&&(s=pn(e=await e.slice(0,10).arrayBuffer(),t,n,r)),!s&&!(null==n?void 0:n.nothrow))throw new Error(mn(e));return s}(e,i,n);return o?(r=function(e,t,n){if(n)return n;const r={fetch:An(t,e),...e};if(r.url){const e=Yt(r.url);r.baseUrl=e,r.queryString=function(e){const t=e.match(qt);return t&&t[0]}(r.url),r.filename=Ft(e),r.baseUrl=function(e){const t=e?e.lastIndexOf("/"):-1;return t>=0?e.substr(0,t):""}(e)}return Array.isArray(r.loaders)||(r.loaders=null),r}({url:s,_parse:Rn,loaders:i},n=function(e,t,n,r){return n=n||[],function(e,t){an(e,null,nn,rn,t);for(const n of t){const r=e&&e[n.id]||{},s=n.options&&n.options[n.id]||{},i=n.deprecatedOptions&&n.deprecatedOptions[n.id]||{};an(r,n.id,s,i,t)}}(e,n=Array.isArray(n)?n:[n]),function(e,t,n){const r={...e.options||{}};return function(e,t){t&&!("baseUri"in e)&&(e.baseUri=t)}(r,n),null===r.log&&(r.log=new tn),cn(r,on()),cn(r,t),r}(t,e,r)}(n,o,i,s),r||null),await async function(e,t,n,r){if(function(e){ft(e,"no worker provided");e.version}(e),n=ut(e.options,n),jt(t)){const e=t,{ok:n,redirected:s,status:i,statusText:o,type:a,url:l}=e,c=Object.fromEntries(e.headers.entries());r.response={headers:c,ok:n,redirected:s,status:i,statusText:o,type:a,url:l}}t=await Sn(t,e,n);const s=e;if(s.parseTextSync&&"string"==typeof t)return s.parseTextSync(t,n,r);if(function(e,t){return!!Ct.isSupported()&&!(!pt&&!(null==t?void 0:t._nodeWorkers))&&e.worker&&(null==t?void 0:t.worker)}(e,n))return await kt(e,t,n,r,Rn);if(s.parseText&&"string"==typeof t)return await s.parseText(t,n,r);if(s.parse)return await s.parse(t,n,r);throw ft(!s.parseSync),new Error(`${e.id} loader - no parser found and worker is disabled`)}(o,e,n,r)):null}async function Cn(e,t,n,r){let s,i;Array.isArray(t)||un(t)?(s=t,i=n):(s=[],i=t);const o=An(i);let a=e;return"string"==typeof e&&(a=await o(e)),Vt(e)&&(a=await o(e)),Array.isArray(s),await Rn(a,s,i)}const kn=null==(e=globalThis.loaders)?void 0:e.parseImageNode,Pn="undefined"!=typeof Image,In="undefined"!=typeof ImageBitmap,Mn=Boolean(kn),Nn=!!Be||Mn;const Ln=/^data:image\/svg\+xml/,On=/\.svg((\?|#).*)?$/;function Fn(e){return e&&(Ln.test(e)||On.test(e))}function Dn(e,t){if(Fn(t))throw new Error("SVG cannot be parsed directly to imagebitmap");return new Blob([new Uint8Array(e)])}async function Bn(e,t,n){const r=function(e,t){if(Fn(t)){let t=(new TextDecoder).decode(e);try{"function"==typeof unescape&&"function"==typeof encodeURIComponent&&(t=unescape(encodeURIComponent(t)))}catch(n){throw new Error(n.message)}return`data:image/svg+xml;base64,${btoa(t)}`}return Dn(e,t)}(e,n),s=self.URL||self.webkitURL,i="string"!=typeof r&&s.createObjectURL(r);try{return await async function(e,t){const n=new Image;return n.src=e,t.image&&t.image.decode&&n.decode?(await n.decode(),n):await new Promise((e,t)=>{try{n.onload=()=>e(n),n.onerror=e=>{const n=e instanceof Error?e.message:"error";t(new Error(n))}}catch(r){t(r)}})}(i||r,t)}finally{i&&s.revokeObjectURL(i)}}const Un={};let jn=!0;const Vn=!1,Gn=!0;function zn(e){const t=Wn(e);return function(e){const t=Wn(e);return t.byteLength>=24&&2303741511===t.getUint32(0,Vn)?{mimeType:"image/png",width:t.getUint32(16,Vn),height:t.getUint32(20,Vn)}:null}(t)||function(e){const t=Wn(e);if(!(t.byteLength>=3&&65496===t.getUint16(0,Vn)&&255===t.getUint8(2)))return null;const{tableMarkers:n,sofMarkers:r}=function(){const e=new Set([65499,65476,65484,65501,65534]);for(let t=65504;t<65520;++t)e.add(t);return{tableMarkers:e,sofMarkers:new Set([65472,65473,65474,65475,65477,65478,65479,65481,65482,65483,65485,65486,65487,65502])}}();let s=2;for(;s+9=10&&1195984440===t.getUint32(0,Vn)?{mimeType:"image/gif",width:t.getUint16(6,Gn),height:t.getUint16(8,Gn)}:null}(t)||function(e){const t=Wn(e);return t.byteLength>=14&&16973===t.getUint16(0,Vn)&&t.getUint32(2,Gn)===t.byteLength?{mimeType:"image/bmp",width:t.getUint32(18,Gn),height:t.getUint32(22,Gn)}:null}(t)||function(e){const t=function(e){return function(e,t,n=0){const r=(s="ftyp",[...s].map(e=>e.charCodeAt(0)));var s;for(let i=0;iBoolean(zn(new DataView(e)))],options:{image:{type:"auto",decode:!0}}},$n=new rt({id:"deck"});let Xn={};function qn(e){Xn=e}function Yn(e,t,n,r){$n.level>0&&Xn[e]&&Xn[e].call(null,t,n,r)}const Kn={dataType:null,batchType:null,id:"JSON",name:"JSON",module:"",version:"",options:{},extensions:["json","geojson"],mimeTypes:["application/json","application/geo+json"],testText:function(e){const t=e[0],n=e[e.length-1];return"{"===t&&"}"===n||"["===t&&"]"===n},parseTextSync:JSON.parse},Zn=function(){const e="9.2.5",t=globalThis.deck&&globalThis.deck.VERSION;if(t&&t!==e)throw new Error(`deck.gl - multiple versions detected: ${t} vs ${e}`);return t||($n.log(1,`deck.gl ${e}`)(),globalThis.deck={...globalThis.deck,VERSION:e,version:e,log:$n,_registerLoggers:qn},function(e){const t=dn();e=Array.isArray(e)?e:[e];for(const n of e){const e=hn(n);t.find(t=>e===t)||t.unshift(e)}}([Kn,[Hn,{imagebitmap:{premultiplyAlpha:"none"}}]])),e}();function Qn(e,t){if(!e)throw new Error(t||"shadertools: assertion failed.")}const Jn={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 er(e){let t=tr(e);if("object"!==t)return{value:e,...Jn[t],type:t};if("object"==typeof e)return e?void 0!==e.type?{...e,...Jn[e.type],type:e.type}:void 0===e.value?{type:"object",value:e}:(t=tr(e.value),{...e,...Jn[t],type:t}):{type:"object",value:null};throw new Error("props")}function tr(e){return Array.isArray(e)||ArrayBuffer.isView(e)?"array":typeof e}const nr={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"},rr=/void\s+main\s*\([^)]*\)\s*\{\n?/,sr=/}\n?[^{}]*$/,ir=[],or="__LUMA_INJECT_DECLARATIONS__";function ar(e){const t={vertex:{},fragment:{}};for(const n in e){let r=e[n];"string"==typeof r&&(r={order:0,injection:r}),t[lr(n)][n]=r}return t}function lr(e){const t=e.slice(0,2);switch(t){case"vs":return"vertex";case"fs":return"fragment";default:throw new Error(t)}}function cr(e,t,n,r=!1){const s="vertex"===t;for(const i in n){const t=n[i];t.sort((e,t)=>e.order-t.order),ir.length=t.length;for(let e=0,n=t.length;ee+r));break;case"vs:#main-end":s&&(e=e.replace(sr,e=>r+e));break;case"fs:#decl":s||(e=e.replace(or,r));break;case"fs:#main-start":s||(e=e.replace(rr,e=>e+r));break;case"fs:#main-end":s||(e=e.replace(sr,e=>r+e));break;default:e=e.replace(i,e=>e+r)}}return e=e.replace(or,""),r&&(e=e.replace(/\}\s*$/,e=>e+nr[t])),e}function ur(e){e.map(e=>function(e){if(e.instance)return;ur(e.dependencies||[]);const{propTypes:t={},deprecations:n=[],inject:r={}}=e,s={normalizedInjections:ar(r),parsedDeprecations:dr(n)};t&&(s.propValidators=function(e){const t={};for(const[n,r]of Object.entries(e))t[n]=er(r);return t}(t)),e.instance=s;let i={};t&&(i=Object.entries(t).reduce((e,[t,n])=>{const r=null==n?void 0:n.value;return r&&(e[t]=r),e},{})),e.defaultUniforms={...e.defaultUniforms,...i}}(e))}function hr(e,t,n){var r;null==(r=e.deprecations)||r.forEach(e=>{var r;(null==(r=e.regex)?void 0:r.test(t))&&(e.deprecated?n.deprecated(e.old,e.new)():n.removed(e.old,e.new)())})}function dr(e){return e.forEach(e=>{"function"===e.type?e.regex=new RegExp(`\\b${e.old}\\(`):e.regex=new RegExp(`${e.type} ${e.old};`)}),e}function fr(e){ur(e);const t={},n={};pr({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 ur(r),r}function pr(e){const{modules:t,level:n,moduleMap:r,moduleDepth:s}=e;if(n>=5)throw new Error("Possible loop in shader dependency graph");for(const i of t)r[i.name]=i,(void 0===s[i.name]||s[i.name]e.order-t.order);for(const t of e)n+=` ${t.injection}\n`}s.footer&&(n+=` ${s.footer}`),n+="}\n"}return n}function xr(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[s,i]=r.split(":"),o=r.replace(/\(.+/,""),a=Object.assign(e,{signature:i});switch(s){case"vs":t.vertex[o]=a;break;case"fs":t.fragment[o]=a;break;default:throw new Error(s)}}return t}function wr(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 Er(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}const Tr=`\n\n${or}\n`;function Sr(e,t){var n;const{source:r,stage:s,modules:i,hookFunctions:o=[],inject:a={},log:l}=t;Qn("string"==typeof r,"shader source must be a string");const c=r;let u="";const h=xr(o),d={},f={},p={};for(const m in a){const e="string"==typeof a[m]?{injection:a[m],order:0}:a[m],t=/^(v|f)s:(#)?([\w-]+)$/.exec(m);if(t){const n=t[2],r=t[3];n?"decl"===r?f[m]=[e]:p[m]=[e]:d[m]=[e]}else p[m]=[e]}const g=i;for(const m of g){l&&hr(m,c,l),u+=Cr(m,"wgsl");const e=(null==(n=m.injections)?void 0:n[s])||{};for(const t in e){const n=/^(v|f)s:#([\w-]+)$/.exec(t);if(n){const r="decl"===n[2]?f:p;r[t]=r[t]||[],r[t].push(e[t])}else d[t]=d[t]||[],d[t].push(e[t])}}return u+=Tr,u=cr(u,s,f),u+=vr(h[s],d),u+=c,u=cr(u,s,p),u}function Ar(e,t){var n;const{source:r,stage:s,language:i="glsl",modules:o,defines:a={},hookFunctions:l=[],inject:c={},prologue:u=!0,log:h}=t;Qn("string"==typeof r,"shader source must be a string");const d="glsl"===i?function(e){return{name:wr(e,void 0),language:"glsl",version:Er(e)}}(r).version:-1,f=e.shaderLanguageVersion,p=100===d?"#version 100":"#version 300 es",g=r.split("\n").slice(1).join("\n"),m={};o.forEach(e=>{Object.assign(m,e.defines)}),Object.assign(m,a);let _="";switch(i){case"wgsl":break;case"glsl":_=u?`${p}\n\n// ----- PROLOGUE -------------------------\n#define SHADER_TYPE_${s.toUpperCase()}\n\n${function(e){switch(null==e?void 0: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"===s?"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}(m)}\n\n`:`${p}\n`}const y=xr(l),b={},v={},x={};for(const w in c){const e="string"==typeof c[w]?{injection:c[w],order:0}:c[w],t=/^(v|f)s:(#)?([\w-]+)$/.exec(w);if(t){const n=t[2],r=t[3];n?"decl"===r?v[w]=[e]:x[w]=[e]:b[w]=[e]}else x[w]=[e]}for(const w of o){h&&hr(w,g,h),_+=Cr(w,s);const e=(null==(n=w.instance)?void 0:n.normalizedInjections[s])||{};for(const t in e){const n=/^(v|f)s:#([\w-]+)$/.exec(t);if(n){const r="decl"===n[2]?v:x;r[t]=r[t]||[],r[t].push(e[t])}else b[t]=b[t]||[],b[t].push(e[t])}}return _+="// ----- MAIN SHADER SOURCE -------------------------",_+=Tr,_=cr(_,s,v),_+=vr(y[s],b),_+=g,_=cr(_,s,x),"glsl"===i&&d!==f&&(_=function(e,t){var n;if(300!==Number((null==(n=e.match(/^#version[ \t]+(\d+)/m))?void 0:n[1])||100))throw new Error("luma.gl v9 only supports GLSL 3.00 shader sources");switch(t){case"vertex":return yr(e,mr);case"fragment":return yr(e,_r);default:throw new Error(t)}}(_,s)),_.trim()}function Rr(e){return function(t){var n;const r={};for(const s of e){const e=null==(n=s.getUniforms)?void 0:n.call(s,t,r);Object.assign(r,e)}return r}}function Cr(e,t){let n;switch(t){case"vertex":n=e.vs||"";break;case"fragment":n=e.fs||"";break;case"wgsl":n=e.source||"";break;default:Qn(!1)}if(!e.name)throw new Error("Shader module must have a name");const r=e.name.toUpperCase().replace(/[^0-9a-z]/gi,"_");let s=`// ----- MODULE ${e.name} ---------------\n\n`;return"wgsl"!==t&&(s+=`#define MODULE_${r}\n`),s+=`${n}\n`,s}const kr=/^\s*\#\s*ifdef\s*([a-zA-Z_]+)\s*$/,Pr=/^\s*\#\s*endif\s*$/,Ir=class e{constructor(){r(this,"_hookFunctions",[]),r(this,"_defaultModules",[])}static getDefaultShaderAssembler(){return e.defaultShaderAssembler=e.defaultShaderAssembler||new e,e.defaultShaderAssembler}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)}assembleWGSLShader(e){const t=this._getModuleList(e.modules),n=this._hookFunctions,{source:r,getUniforms:s}=function(e){const t=fr(e.modules||[]);return{source:Sr(e.platformInfo,{...e,source:e.source,stage:"vertex",modules:t}),getUniforms:Rr(t)}}({...e,source:e.source,modules:t,hookFunctions:n}),i="wgsl"===e.platformInfo.shaderLanguage?function(e){const t=e.split("\n"),n=[];let r=!0,s=null;for(const i of t){const e=i.match(kr),t=i.match(Pr);e?(s=e[1],r=Boolean(null==void 0?void 0:undefined[s])):t?r=!0:r&&n.push(i)}return n.join("\n")}(r):r;return{source:i,getUniforms:s,modules:t}}assembleGLSLShaderPair(e){const t=this._getModuleList(e.modules),n=this._hookFunctions,r=function(e){const{vs:t,fs:n}=e,r=fr(e.modules||[]);return{vs:Ar(e.platformInfo,{...e,source:t,stage:"vertex",modules:r}),fs:Ar(e.platformInfo,{...e,source:n,stage:"fragment",modules:r}),getUniforms:Rr(r)}}({...e,vs:e.vs,fs:e.fs,modules:t,hookFunctions:n});return{...r,modules:t}}_getModuleList(e=[]){const t=new Array(this._defaultModules.length+e.length),n={};let r=0;for(let s=0,i=this._defaultModules.length;st===e[4]);if(!n)throw new Error(t.name);return n[0]}function Wr(e){const[,,,,t]=Hr[e];return t}const Hr={uint8:["uint8","u32",1,!1,Uint8Array],sint8:["sint8","i32",1,!1,Int8Array],unorm8:["uint8","f32",1,!0,Uint8Array],snorm8:["sint8","f32",1,!0,Int8Array],uint16:["uint16","u32",2,!1,Uint16Array],sint16:["sint16","i32",2,!1,Int16Array],unorm16:["uint16","u32",2,!0,Uint16Array],snorm16:["sint16","i32",2,!0,Int16Array],float16:["float16","f16",2,!1,Uint16Array],float32:["float32","f32",4,!1,Float32Array],uint32:["uint32","u32",4,!1,Uint32Array],sint32:["sint32","i32",4,!1,Int32Array]};function $r(e){let t;e.endsWith("-webgl")&&(e.replace("-webgl",""),t=!0);const[n,r]=e.split("x"),s=n,i=r?parseInt(r):1,o=Vr(s),a={type:s,components:i,byteLength:o.byteLength*i,integer:o.integer,signed:o.signed,normalized:o.normalized};return t&&(a.webglOnly=!0),a}function Xr(e,t,n){if(!t||t>4)throw new Error(`size ${t}`);const r=t;return function(e,t,n){const r=n?function(e){const t=e;switch(t){case"uint8":return"unorm8";case"sint8":return"snorm8";case"uint16":return"unorm16";case"sint16":return"snorm16";default:return t}}(e):e;switch(r){case"unorm8":return 1===t?"unorm8":3===t?"unorm8x3-webgl":`${r}x${t}`;case"snorm8":case"uint8":case"sint8":case"uint16":case"sint16":case"unorm16":case"snorm16":case"float16":if(1===t||3===t)throw new Error(`size: ${t}`);return`${r}x${t}`;default:return 1===t?r:`${r}x${t}`}}(zr(e),r,n)}const qr="texture-compression-bc",Yr="texture-compression-astc",Kr="texture-compression-etc2",Zr="texture-compression-pvrtc-webgl",Qr="texture-compression-atc-webgl",Jr="float32-renderable-webgl",es="float16-renderable-webgl",ts="snorm8-renderable-webgl",ns="norm16-renderable-webgl",rs="snorm16-renderable-webgl",ss="float32-filterable",is="float16-filterable-webgl";function os(e){const t=as[e];if(!t)throw new Error(`Unsupported texture format ${e}`);return t}const as={r8unorm:{},rg8unorm:{},"rgb8unorm-webgl":{},rgba8unorm:{},"rgba8unorm-srgb":{},r8snorm:{render:ts},rg8snorm:{render:ts},"rgb8snorm-webgl":{},rgba8snorm:{render:ts},r8uint:{},rg8uint:{},rgba8uint:{},r8sint:{},rg8sint:{},rgba8sint:{},bgra8unorm:{},"bgra8unorm-srgb":{},r16unorm:{f:ns},rg16unorm:{render:ns},"rgb16unorm-webgl":{f:ns},rgba16unorm:{render:ns},r16snorm:{f:rs},rg16snorm:{render:rs},"rgb16snorm-webgl":{f:ns},rgba16snorm:{render:rs},r16uint:{},rg16uint:{},rgba16uint:{},r16sint:{},rg16sint:{},rgba16sint:{},r16float:{render:es,filter:"float16-filterable-webgl"},rg16float:{render:es,filter:is},rgba16float:{render:es,filter:is},r32uint:{},rg32uint:{},rgba32uint:{},r32sint:{},rg32sint:{},rgba32sint:{},r32float:{render:Jr,filter:ss},rg32float:{render:!1,filter:ss},"rgb32float-webgl":{render:Jr,filter:ss},rgba32float:{render:Jr,filter:ss},"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"},rg11b10ufloat:{channels:"rgb",bitsPerChannel:[11,11,10,0],packed:!0,p:1,render:Jr},rgb10a2unorm:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1},rgb10a2uint:{channels:"rgba",bitsPerChannel:[10,10,10,2],packed:!0,p:1},stencil8:{attachment:"stencil",bitsPerChannel:[8,0,0,0],dataType:"uint8"},depth16unorm:{attachment:"depth",bitsPerChannel:[16,0,0,0],dataType:"uint16"},depth24plus:{attachment:"depth",bitsPerChannel:[24,0,0,0],dataType:"uint32"},depth32float:{attachment:"depth",bitsPerChannel:[32,0,0,0],dataType:"float32"},"depth24plus-stencil8":{attachment:"depth-stencil",bitsPerChannel:[24,8,0,0],packed:!0},"depth32float-stencil8":{attachment:"depth-stencil",bitsPerChannel:[32,8,0,0],packed:!0},"bc1-rgb-unorm-webgl":{f:qr},"bc1-rgb-unorm-srgb-webgl":{f:qr},"bc1-rgba-unorm":{f:qr},"bc1-rgba-unorm-srgb":{f:qr},"bc2-rgba-unorm":{f:qr},"bc2-rgba-unorm-srgb":{f:qr},"bc3-rgba-unorm":{f:qr},"bc3-rgba-unorm-srgb":{f:qr},"bc4-r-unorm":{f:qr},"bc4-r-snorm":{f:qr},"bc5-rg-unorm":{f:qr},"bc5-rg-snorm":{f:qr},"bc6h-rgb-ufloat":{f:qr},"bc6h-rgb-float":{f:qr},"bc7-rgba-unorm":{f:qr},"bc7-rgba-unorm-srgb":{f:qr},"etc2-rgb8unorm":{f:Kr},"etc2-rgb8unorm-srgb":{f:Kr},"etc2-rgb8a1unorm":{f:Kr},"etc2-rgb8a1unorm-srgb":{f:Kr},"etc2-rgba8unorm":{f:Kr},"etc2-rgba8unorm-srgb":{f:Kr},"eac-r11unorm":{f:Kr},"eac-r11snorm":{f:Kr},"eac-rg11unorm":{f:Kr},"eac-rg11snorm":{f:Kr},"astc-4x4-unorm":{f:Yr},"astc-4x4-unorm-srgb":{f:Yr},"astc-5x4-unorm":{f:Yr},"astc-5x4-unorm-srgb":{f:Yr},"astc-5x5-unorm":{f:Yr},"astc-5x5-unorm-srgb":{f:Yr},"astc-6x5-unorm":{f:Yr},"astc-6x5-unorm-srgb":{f:Yr},"astc-6x6-unorm":{f:Yr},"astc-6x6-unorm-srgb":{f:Yr},"astc-8x5-unorm":{f:Yr},"astc-8x5-unorm-srgb":{f:Yr},"astc-8x6-unorm":{f:Yr},"astc-8x6-unorm-srgb":{f:Yr},"astc-8x8-unorm":{f:Yr},"astc-8x8-unorm-srgb":{f:Yr},"astc-10x5-unorm":{f:Yr},"astc-10x5-unorm-srgb":{f:Yr},"astc-10x6-unorm":{f:Yr},"astc-10x6-unorm-srgb":{f:Yr},"astc-10x8-unorm":{f:Yr},"astc-10x8-unorm-srgb":{f:Yr},"astc-10x10-unorm":{f:Yr},"astc-10x10-unorm-srgb":{f:Yr},"astc-12x10-unorm":{f:Yr},"astc-12x10-unorm-srgb":{f:Yr},"astc-12x12-unorm":{f:Yr},"astc-12x12-unorm-srgb":{f:Yr},"pvrtc-rgb4unorm-webgl":{f:Zr},"pvrtc-rgba4unorm-webgl":{f:Zr},"pvrtc-rbg2unorm-webgl":{f:Zr},"pvrtc-rgba2unorm-webgl":{f:Zr},"etc1-rbg-unorm-webgl":{f:"texture-compression-etc1-webgl"},"atc-rgb-unorm-webgl":{f:Qr},"atc-rgba-unorm-webgl":{f:Qr},"atc-rgbai-unorm-webgl":{f:Qr}},ls=["bc1","bc2","bc3","bc4","bc5","bc6","bc7","etc1","etc2","eac","atc","astc","pvrtc"],cs=/^(r|rg|rgb|rgba|bgra)([0-9]*)([a-z]*)(-srgb)?(-webgl)?$/,us=new class{getInfo(e){return hs(e)}isColor(e){return e.startsWith("rgba")||e.startsWith("bgra")||e.startsWith("rgb")}isDepthStencil(e){return e.startsWith("depth")||e.startsWith("stencil")}isCompressed(e){return ls.some(t=>e.startsWith(t))}getCapabilities(e){const t=os(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=hs(e),s=e.startsWith("depth")||e.startsWith("stencil"),i=null==r?void 0:r.signed,o=null==r?void 0:r.integer,a=null==r?void 0:r.webgl;return n.render&&(n.render=!i),n.filter&&(n.filter=!(s||i||o||a)),n}};function hs(e){let t=function(e){var t;const n=os(e),r=n.bytesPerPixel||1,s=n.bitsPerChannel||[8,8,8,8];delete n.bitsPerChannel,delete n.bytesPerPixel,delete n.f,delete n.render,delete n.filter,delete n.blend,delete n.store;return{...n,format:e,attachment:n.attachment||"color",channels:n.channels||"r",components:n.components||(null==(t=n.channels)?void 0:t.length)||1,bytesPerPixel:r,bitsPerChannel:s,dataType:n.dataType||"uint8",srgb:n.srgb??!1,packed:n.packed??!1,webgl:n.webgl??!1,integer:n.integer??!1,signed:n.signed??!1,normalized:n.normalized??!1,compressed:n.compressed??!1}}(e);if(us.isCompressed(e)){t.channels="rgb",t.components=3,t.bytesPerPixel=1,t.srgb=!1,t.compressed=!0;const n=function(e){const t=/.*-(\d+)x(\d+)-.*/.exec(e);if(t){const[,e,n]=t;return{blockWidth:Number(e),blockHeight:Number(n)}}return null}(e);n&&(t.blockWidth=n.blockWidth,t.blockHeight=n.blockHeight)}const n=cs.exec(e);if(n){const[,r,s,i,o,a]=n,l=Vr(`${i}${s}`),c=8*l.byteLength,u=r.length,h=[c,u>=2?c:0,u>=3?c:0,u>=4?c:0];t={format:e,attachment:t.attachment,dataType:l.signedType,components:u,channels:r,integer:l.integer,signed:l.signed,normalized:l.normalized,bitsPerChannel:h,bytesPerPixel:l.byteLength*r.length,packed:t.packed,srgb:t.srgb},"-webgl"===a&&(t.webgl=!0),"-srgb"===o&&(t.srgb=!0)}return e.endsWith("-webgl")&&(t.webgl=!0),e.endsWith("-srgb")&&(t.srgb=!0),t}class ds{}class fs{constructor(e=[],t){r(this,"features"),r(this,"disabledFeatures"),this.features=new Set(e),this.disabledFeatures=t||{}}*[Symbol.iterator](){yield*this.features}has(e){var t;return!(null==(t=this.disabledFeatures)?void 0:t[e])&&this.features.has(e)}}const ps=class e{constructor(t){r(this,"id"),r(this,"props"),r(this,"userData",{}),r(this,"statsManager",Lr),r(this,"timestamp",0),r(this,"_reused",!1),r(this,"_lumaData",{}),r(this,"_textureCaps",{}),this.props={...e.defaultProps,...t},this.id=this.props.id||Dr(this[Symbol.toStringTag].toLowerCase())}get[Symbol.toStringTag](){return"Device"}toString(){return`Device(${this.id})`}getVertexFormatInfo(e){return $r(e)}isVertexFormatSupported(e){return!0}getTextureFormatInfo(e){return us.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){const r=Math.max(e,t,n);return 1+Math.floor(Math.log2(r))}isExternalImage(e){return function(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}(e)}getExternalImageSize(e){return function(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")}(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 us.isCompressed(e)}pushDebugGroup(e){this.commandEncoder.pushDebugGroup(e)}popDebugGroup(){var e;null==(e=this.commandEncoder)||e.popDebugGroup()}insertDebugMarker(e){var t;null==(t=this.commandEncoder)||t.insertDebugMarker(e)}loseDevice(){return!1}incrementTimestamp(){return this.timestamp++}reportError(e,t,...n){return this.props.onError(e,t)?()=>{}:Or.error(e.message,t,...n)}debug(){if(this.props.debug);else{const e="'Type luma.log.set({debug: true}) in console to enable debug breakpoints',\nor create a device with the 'debug: true' prop.";Or.once(0,e)()}}getDefaultCanvasContext(){if(!this.canvasContext)throw new Error("Device has no default CanvasContext. See props.createCanvasContext");return this.canvasContext}beginRenderPass(e){return this.commandEncoder.beginRenderPass(e)}beginComputePass(e){return this.commandEncoder.beginComputePass(e)}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")}static _getCanvasContextProps(e){return!0===e.createCanvasContext?{}:e.createCanvasContext}_getDeviceTextureFormatCapabilities(e){const t=us.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(e){(e instanceof ArrayBuffer||ArrayBuffer.isView(e))&&(e={data:e});const t={...e};if((e.usage||0)&jr.INDEX&&(e.indexType||(e.data instanceof Uint32Array?t.indexType="uint32":e.data instanceof Uint16Array&&(t.indexType="uint16")),!t.indexType))throw new Error("indices buffer content must be of type uint16 or uint32");return t}};r(ps,"defaultProps",{id:null,powerPreference:"high-performance",failIfMajorPerformanceCaveat:!1,createCanvasContext:void 0,webgl:{},onError:(e,t)=>{},onResize:(e,t)=>{const[n,r]=e.getDevicePixelSize();Or.log(1,`${e} resized => ${n}x${r}px`)()},onPositionChange:(e,t)=>{const[n,r]=e.getPosition();Or.log(1,`${e} repositioned => ${n},${r}`)()},onVisibilityChange:e=>Or.log(1,`${e} Visibility changed ${e.isVisible}`)(),onDevicePixelRatioChange:(e,t)=>Or.log(1,`${e} DPR changed ${t.oldRatio} => ${e.devicePixelRatio}`)(),debug:Or.get("debug")||void 0,debugShaders:Or.get("debug-shaders")||void 0,debugFramebuffers:Boolean(Or.get("debug-framebuffers")),debugFactories:Boolean(Or.get("debug-factories")),debugWebGL:Boolean(Or.get("debug-webgl")),debugSpectorJS:void 0,debugSpectorJSUrl:void 0,_reuseDevices:!1,_requestMaxLimits:!0,_cacheShaders:!1,_cachePipelines:!1,_cacheDestroyPolicy:"unused",_initializeFeatures:!0,_disabledFeatures:{"compilation-status-async-webgl":!0},_handle:void 0});let gs=ps;const ms="No matching device found. Ensure `@luma.gl/webgl` and/or `@luma.gl/webgpu` modules are imported.",_s=class e{constructor(){if(r(this,"stats",Lr),r(this,"log",Or),r(this,"VERSION","9.2.5"),r(this,"spector"),r(this,"preregisteredAdapters",new Map),globalThis.luma){if(globalThis.luma.VERSION!==this.VERSION)throw Or.error(`Found luma.gl ${globalThis.luma.VERSION} while initialzing ${this.VERSION}`)(),Or.error("'yarn why @luma.gl/core' can help identify the source of the conflict")(),new Error("luma.gl - multiple versions detected: see console log");Or.error("This version of luma.gl has already been initialized")()}Or.log(1,`${this.VERSION} - set luma.log.level=1 (or higher) to trace rendering`)(),globalThis.luma=this}async createDevice(t={}){const n={...e.defaultProps,...t},r=this.selectAdapter(n.type,n.adapters);if(!r)throw new Error(ms);return n.waitForPageLoad&&await r.pageLoaded,await r.create(n)}async attachDevice(e,t){var n;const r=this._getTypeFromHandle(e,t.adapters),s=r&&this.selectAdapter(r,t.adapters);if(!s)throw new Error(ms);return await(null==(n=null==s?void 0:s.attach)?void 0:n.call(s,e,t))}registerAdapters(e){for(const t of e)this.preregisteredAdapters.set(t.type,t)}getSupportedAdapters(e=[]){const t=this._getAdapterMap(e);return Array.from(t).map(([,e])=>e).filter(e=>{var t;return null==(t=e.isSupported)?void 0:t.call(e)}).map(e=>e.type)}getBestAvailableAdapterType(e=[]){var t,n;const r=["webgpu","webgl","null"],s=this._getAdapterMap(e);for(const i of r)if(null==(n=null==(t=s.get(i))?void 0:t.isSupported)?void 0:n.call(t))return i;return null}selectAdapter(e,t=[]){let n=e;"best-available"===e&&(n=this.getBestAvailableAdapterType(t));const r=this._getAdapterMap(t);return n&&r.get(n)||null}enforceWebGL2(e=!0,t=[]){var n;const r=this._getAdapterMap(t).get("webgl");r||Or.warn("enforceWebGL2: webgl adapter not found")(),null==(n=null==r?void 0:r.enforceWebGL2)||n.call(r,e)}setDefaultDeviceProps(t){Object.assign(e.defaultProps,t)}_getAdapterMap(e=[]){const t=new Map(this.preregisteredAdapters);for(const n of e)t.set(n.type,n);return t}_getTypeFromHandle(e,t=[]){return e instanceof WebGL2RenderingContext?"webgl":"undefined"!=typeof GPUDevice&&e instanceof GPUDevice||(null==e?void 0:e.queue)?"webgpu":null===e?"null":(e instanceof WebGLRenderingContext?Or.warn("WebGL1 is not supported",e)():Or.warn("Unknown handle type",e)(),null)}};r(_s,"defaultProps",{...gs.defaultProps,type:"best-available",adapters:void 0,waitForPageLoad:!0});const ys=new _s;class bs{get pageLoaded(){return ws||(ws=xs()||"undefined"==typeof window?Promise.resolve():new Promise(e=>window.addEventListener("load",()=>e()))),ws}}const vs=We()&&"undefined"!=typeof document,xs=()=>vs&&"complete"===document.readyState;let ws=null;const Es=class e{constructor(t){var n,s;if(r(this,"id"),r(this,"props"),r(this,"canvas"),r(this,"htmlCanvas"),r(this,"offscreenCanvas"),r(this,"type"),r(this,"initialized"),r(this,"isInitialized",!1),r(this,"isVisible",!0),r(this,"cssWidth"),r(this,"cssHeight"),r(this,"devicePixelRatio"),r(this,"devicePixelWidth"),r(this,"devicePixelHeight"),r(this,"drawingBufferWidth"),r(this,"drawingBufferHeight"),r(this,"_initializedResolvers",function(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}()),r(this,"_resizeObserver"),r(this,"_intersectionObserver"),r(this,"_position"),r(this,"destroyed",!1),this.props={...e.defaultProps,...t},t=this.props,this.initialized=this._initializedResolvers.promise,We()?t.canvas?"string"==typeof t.canvas?this.canvas=function(e){const t=document.getElementById(e);if(!Ts.isHTMLCanvas(t))throw new Error("Object is not a canvas element");return t}(t.canvas):this.canvas=t.canvas:this.canvas=function(e){const{width:t,height:n}=e,r=document.createElement("canvas");r.id=Dr("lumagl-auto-created-canvas"),r.width=t||1,r.height=n||1,r.style.width=Number.isFinite(t)?`${t}px`:"100%",r.style.height=Number.isFinite(n)?`${n}px`:"100%",(null==e?void 0:e.visible)||(r.style.visibility="hidden");const s=function(e){if("string"==typeof e){const t=document.getElementById(e);if(!t)throw new Error(`${e} is not an HTML element`);return t}return e||document.body}((null==e?void 0:e.container)||null);return s.insertBefore(r,s.firstChild),r}(t):this.canvas={width:t.width||1,height:t.height||1},e.isHTMLCanvas(this.canvas)?(this.id=t.id||this.canvas.id,this.type="html-canvas",this.htmlCanvas=this.canvas):e.isOffscreenCanvas(this.canvas)?(this.id=t.id||"offscreen-canvas",this.type="offscreen-canvas",this.offscreenCanvas=this.canvas):(this.id=t.id||"node-canvas-context",this.type="node"),this.cssWidth=(null==(n=this.htmlCanvas)?void 0:n.clientWidth)||this.canvas.width,this.cssHeight=(null==(s=this.htmlCanvas)?void 0:s.clientHeight)||this.canvas.height,this.devicePixelWidth=this.canvas.width,this.devicePixelHeight=this.canvas.height,this.drawingBufferWidth=this.canvas.width,this.drawingBufferHeight=this.canvas.height,this.devicePixelRatio=globalThis.devicePixelRatio||1,this._position=[0,0],e.isHTMLCanvas(this.canvas)){this._intersectionObserver=new IntersectionObserver(e=>this._handleIntersection(e)),this._intersectionObserver.observe(this.canvas),this._resizeObserver=new ResizeObserver(e=>this._handleResize(e));try{this._resizeObserver.observe(this.canvas,{box:"device-pixel-content-box"})}catch{this._resizeObserver.observe(this.canvas,{box:"content-box"})}setTimeout(()=>this._observeDevicePixelRatio(),0),this.props.trackPosition&&this._trackPosition()}}static isHTMLCanvas(e){return"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement}static isOffscreenCanvas(e){return"undefined"!=typeof OffscreenCanvas&&e instanceof OffscreenCanvas}toString(){return`${this[Symbol.toStringTag]}(${this.id})`}destroy(){this.destroyed=!0}setProps(e){return"useDevicePixels"in e&&(this.props.useDevicePixels=e.useDevicePixels||!1,this._updateDrawingBufferSize()),this}getCSSSize(){return[this.cssWidth,this.cssHeight]}getPosition(){return this._position}getDevicePixelSize(){return[this.devicePixelWidth,this.devicePixelHeight]}getDrawingBufferSize(){return[this.drawingBufferWidth,this.drawingBufferHeight]}getMaxDrawingBufferSize(){const e=this.device.limits.maxTextureDimension2D;return[e,e]}setDrawingBufferSize(e,t){this.canvas.width=e,this.canvas.height=t,this.drawingBufferWidth=e,this.drawingBufferHeight=t}getDevicePixelRatio(){return"undefined"!=typeof window&&window.devicePixelRatio||1}cssToDevicePixels(e,t=!0){const n=this.cssToDeviceRatio(),[r,s]=this.getDrawingBufferSize();return function(e,t,n,r,s){const i=e,o=Ss(i[0],t,n);let a=As(i[1],t,r,s),l=Ss(i[0]+1,t,n);const c=l===n-1?l:l-1;let u;return l=As(i[1]+1,t,r,s),s?(l=0===l?l:l+1,u=a,a=l):u=l===r-1?l:l-1,{x:o,y:a,width:Math.max(c-o+1,1),height:Math.max(u-a+1,1)}}(e,n,r,s,t)}getPixelSize(){return this.getDevicePixelSize()}getAspect(){const[e,t]=this.getDevicePixelSize();return e/t}cssToDeviceRatio(){try{const[e]=this.getDrawingBufferSize(),[t]=this.getCSSSize();return t?e/t:1}catch{return 1}}resize(e){this.setDrawingBufferSize(e.width,e.height)}_setAutoCreatedCanvasId(e){var t;"lumagl-auto-created-canvas"===(null==(t=this.htmlCanvas)?void 0:t.id)&&(this.htmlCanvas.id=e)}_handleIntersection(e){const t=e.find(e=>e.target===this.canvas);if(!t)return;const n=t.isIntersecting;this.isVisible!==n&&(this.isVisible=n,this.device.props.onVisibilityChange(this))}_handleResize(e){var t,n;const r=e.find(e=>e.target===this.canvas);if(!r)return;this.cssWidth=r.contentBoxSize[0].inlineSize,this.cssHeight=r.contentBoxSize[0].blockSize;const s=this.getDevicePixelSize(),i=(null==(t=r.devicePixelContentBoxSize)?void 0:t[0].inlineSize)||r.contentBoxSize[0].inlineSize*devicePixelRatio,o=(null==(n=r.devicePixelContentBoxSize)?void 0:n[0].blockSize)||r.contentBoxSize[0].blockSize*devicePixelRatio,[a,l]=this.getMaxDrawingBufferSize();this.devicePixelWidth=Math.max(1,Math.min(i,a)),this.devicePixelHeight=Math.max(1,Math.min(o,l)),this._updateDrawingBufferSize(),this.device.props.onResize(this,{oldPixelSize:s})}_updateDrawingBufferSize(){if(this.props.autoResize){if("number"==typeof this.props.useDevicePixels){const e=this.props.useDevicePixels;this.setDrawingBufferSize(this.cssWidth*e,this.cssHeight*e)}else this.props.useDevicePixels?this.setDrawingBufferSize(this.devicePixelWidth,this.devicePixelHeight):this.setDrawingBufferSize(this.cssWidth,this.cssHeight);this._updateDevice()}this._initializedResolvers.resolve(),this.isInitialized=!0,this.updatePosition()}_observeDevicePixelRatio(){const e=this.devicePixelRatio;this.devicePixelRatio=window.devicePixelRatio,this.updatePosition(),this.device.props.onDevicePixelRatioChange(this,{oldRatio:e}),matchMedia(`(resolution: ${this.devicePixelRatio}dppx)`).addEventListener("change",()=>this._observeDevicePixelRatio(),{once:!0})}_trackPosition(e=100){const t=setInterval(()=>{this.destroyed?clearInterval(t):this.updatePosition()},e)}updatePosition(){var e,t,n;const r=null==(e=this.htmlCanvas)?void 0:e.getBoundingClientRect();if(r){const e=[r.left,r.top];if(this._position??(this._position=e),e[0]!==this._position[0]||e[1]!==this._position[1]){const r=this._position;this._position=e,null==(n=(t=this.device.props).onPositionChange)||n.call(t,this,{oldPosition:r})}}}};r(Es,"defaultProps",{id:void 0,canvas:null,width:800,height:600,useDevicePixels:!0,autoResize:!0,container:null,visible:!0,alphaMode:"opaque",colorSpace:"srgb",trackPosition:!1});let Ts=Es;function Ss(e,t,n){return Math.min(Math.round(e*t),n-1)}function As(e,t,n,r){return r?Math.max(0,n-1-Math.round(e*t)):Math.min(Math.round(e*t),n-1)}const Rs=class e extends Br{get[Symbol.toStringTag](){return"Sampler"}constructor(t,n){super(t,n=e.normalizeProps(t,n),e.defaultProps)}static normalizeProps(e,t){return t}};r(Rs,"defaultProps",{...Br.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});let Cs=Rs;const ks={"1d":"1d","2d":"2d","2d-array":"2d",cube:"2d","cube-array":"2d","3d":"3d"},Ps=class e extends Br{constructor(t,n){if(super(t,n=e.normalizeProps(t,n),e.defaultProps),r(this,"dimension"),r(this,"baseDimension"),r(this,"format"),r(this,"width"),r(this,"height"),r(this,"depth"),r(this,"mipLevels"),r(this,"updateTimestamp"),this.dimension=this.props.dimension,this.baseDimension=ks[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,void 0===this.props.width||void 0===this.props.height)if(t.isExternalImage(n.data)){const e=t.getExternalImageSize(n.data);this.width=(null==e?void 0:e.width)||1,this.height=(null==e?void 0:e.height)||1}else this.width=1,this.height=1,void 0!==this.props.width&&void 0!==this.props.height||Or.warn(`${this} created with undefined width or height. This is deprecated. Use AsyncTexture instead.`)();this.updateTimestamp=t.incrementTimestamp()}get[Symbol.toStringTag](){return"Texture"}toString(){return`Texture(${this.id},${this.format},${this.width}x${this.height})`}setSampler(e){this.sampler=e instanceof Cs?e:this.device.createSampler(e)}clone(e){return this.device.createTexture({...this.props,...e})}static normalizeProps(e,t){const n={...t},{width:r,height:s}=n;return"number"==typeof r&&(n.width=Math.max(1,Math.ceil(r))),"number"==typeof s&&(n.height=Math.max(1,Math.ceil(s))),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(t){const{width:n,height:r,depth:s}=this,i={...e.defaultCopyDataOptions,width:n,height:r,depth:s,...t},o=this.device.getTextureFormatInfo(this.format);if(!t.bytesPerRow&&!o.bytesPerPixel)throw new Error(`bytesPerRow must be provided for texture format ${this.format}`);return i.bytesPerRow=t.bytesPerRow||n*(o.bytesPerPixel||4),i.rowsPerImage=t.rowsPerImage||r,i}_normalizeCopyExternalImageOptions(t){const n=this.device.getExternalImageSize(t.image),r={...e.defaultCopyExternalImageOptions,...n,...t};return r.width=Math.min(r.width,this.width-r.x),r.height=Math.min(r.height,this.height-r.y),r}};r(Ps,"SAMPLE",4),r(Ps,"STORAGE",8),r(Ps,"RENDER",16),r(Ps,"COPY_SRC",1),r(Ps,"COPY_DST",2),r(Ps,"TEXTURE",4),r(Ps,"RENDER_ATTACHMENT",16),r(Ps,"defaultProps",{...Br.defaultProps,data:null,dimension:"2d",format:"rgba8unorm",usage:Ps.TEXTURE|Ps.RENDER_ATTACHMENT|Ps.COPY_DST,width:void 0,height:void 0,depth:1,mipLevels:1,samples:void 0,sampler:{},view:void 0}),r(Ps,"defaultCopyDataOptions",{data:void 0,byteOffset:0,bytesPerRow:void 0,rowsPerImage:void 0,mipLevel:0,x:0,y:0,z:0,aspect:"all"}),r(Ps,"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});let Is=Ps;const Ms=class e extends Br{get[Symbol.toStringTag](){return"TextureView"}constructor(t,n){super(t,n,e.defaultProps)}};r(Ms,"defaultProps",{...Br.defaultProps,format:void 0,dimension:void 0,aspect:"all",baseMipLevel:0,mipLevelCount:void 0,baseArrayLayer:0,arrayLayerCount:void 0});let Ns=Ms;function Ls(e,t,n,r){if(null==r?void 0:r.inlineSource){const r=function(e,t){let n="";for(let r=t-2;r<=t;r++){const s=e[r-1];void 0!==s&&(n+=Os(s,t,undefined))}return n}(t,n);return`\n${r}${e.linePos>0?`${" ".repeat(e.linePos+5)}^^^\n`:""}${e.type.toUpperCase()}: ${e.message}\n\n`}const s="error"===e.type?"red":"#8B4000";return(null==r?void 0:r.html)?`
${e.type.toUpperCase()}: ${e.message}
`:`${e.type.toUpperCase()}: ${e.message}`}function Os(e,t,n){const r=(null==n?void 0:n.html)?e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'"):e;return`${function(e){let t="";for(let n=e.length;n<4;++n)t+=" ";return t+e}(String(t))}: ${r}${(null==n?void 0:n.html)?"
":"\n"}`}const Fs=class e extends Br{constructor(t,n){super(t,{id:Bs(n={...n,debugShaders:n.debugShaders||t.props.debugShaders||"errors"}),...n},e.defaultProps),r(this,"stage"),r(this,"source"),r(this,"compilationStatus","pending"),this.stage=this.props.stage,this.source=this.props.source}get[Symbol.toStringTag](){return"Shader"}getCompilationInfoSync(){return null}getTranslatedSource(){return null}async debugShader(){const e=this.props.debugShaders;switch(e){case"never":return;case"errors":if("success"===this.compilationStatus)return}const t=await this.getCompilationInfo();"warnings"===e&&0===(null==t?void 0:t.length)||this._displayShaderLog(t,this.id)}_displayShaderLog(e,t){var n;if("undefined"==typeof document||!(null==document?void 0:document.createElement))return;const r=t,s=`${this.stage} shader "${r}"`;let i=function(e,t,n){let r="";const s=t.split(/\r?\n/),i=e.slice().sort((e,t)=>e.lineNum-t.lineNum);switch((null==n?void 0:n.showSourceCode)||"no"){case"all":let t=0;for(let e=1;e<=s.length;e++)for(r+=Os(s[e-1],e,n);i.length>t&&i[t].lineNum===e;){const e=i[t++];r+=Ls(e,s,e.lineNum,{...n,inlineSource:!1})}for(;i.length>t;)r+=Ls(i[t++],[],0,{...n,inlineSource:!1});return r;case"issues":case"no":for(const i of e)r+=Ls(i,s,i.lineNum,{inlineSource:"no"!==(null==n?void 0:n.showSourceCode)});return r}}(e,this.source,{showSourceCode:"all",html:!0});const o=this.getTranslatedSource();o&&(i+=`

Translated Source



${o}
`);const a=document.createElement("Button");a.innerHTML=`\n

Compilation error in ${s}



\n
\n${i}\n
`,a.style.top="10px",a.style.left="10px",a.style.position="absolute",a.style.zIndex="9999",a.style.width="100%",a.style.textAlign="left",document.body.appendChild(a),null==(n=document.getElementsByClassName("luma-compiler-log-error")[0])||n.scrollIntoView(),a.onclick=()=>{const e=`data:text/plain,${encodeURIComponent(this.source)}`;navigator.clipboard.writeText(e)}}};r(Fs,"defaultProps",{...Br.defaultProps,language:"auto",stage:void 0,source:"",sourceMap:null,entryPoint:"main",debugShaders:void 0});let Ds=Fs;function Bs(e){return function(e,t="unnamed"){const n=/#define[\s*]SHADER_NAME[\s*]([A-Za-z0-9_-]+)[\s*]/.exec(e);return n?n[1]:t}(e.source)||e.id||Dr(`unnamed ${e.stage}-shader`)}const Us=class e extends Br{constructor(t,n={}){super(t,n,e.defaultProps),r(this,"width"),r(this,"height"),this.width=this.props.width,this.height=this.props.height}get[Symbol.toStringTag](){return"Framebuffer"}clone(e){const t=this.colorAttachments.map(t=>t.texture.clone(e)),n=this.depthStencilAttachment&&this.depthStencilAttachment.texture.clone(e);return this.device.createFramebuffer({...this.props,colorAttachments:t,depthStencilAttachment:n})}resize(e){let t=!e;if(e){const[n,r]=Array.isArray(e)?e:[e.width,e.height];t=t||r!==this.height||n!==this.width,this.width=n,this.height=r}t&&(Or.log(2,`Resizing framebuffer ${this.id} to ${this.width}x${this.height}`)(),this.resizeAttachments(this.width,this.height))}autoCreateAttachmentTextures(){if(0===this.props.colorAttachments.length&&!this.props.depthStencilAttachment)throw new Error("Framebuffer has noattachments");this.colorAttachments=this.props.colorAttachments.map((e,t)=>{if("string"==typeof e){const n=this.createColorTexture(e,t);return this.attachResource(n),n.view}return e instanceof Is?e.view:e});const e=this.props.depthStencilAttachment;if(e)if("string"==typeof e){const t=this.createDepthStencilTexture(e);this.attachResource(t),this.depthStencilAttachment=t.view}else this.depthStencilAttachment=e instanceof Is?e.view:e}createColorTexture(e,t){return this.device.createTexture({id:`${this.id}-color-attachment-${t}`,usage:Is.RENDER_ATTACHMENT,format:e,width:this.width,height:this.height,sampler:{magFilter:"linear",minFilter:"linear"}})}createDepthStencilTexture(e){return this.device.createTexture({id:`${this.id}-depth-stencil-attachment`,usage:Is.RENDER_ATTACHMENT,format:e,width:this.width,height:this.height})}resizeAttachments(e,t){for(let n=0;n":["f32",2],"vec3":["f32",3],"vec4":["f32",4],f16:["f16",1],"vec2":["f16",2],"vec3":["f16",3],"vec4":["f16",4],i32:["i32",1],"vec2":["i32",2],"vec3":["i32",3],"vec4":["i32",4],u32:["u32",1],"vec2":["u32",2],"vec3":["u32",3],"vec4":["u32",4]},ei={f32:{type:"f32",components:1},f16:{type:"f16",components:1},i32:{type:"i32",components:1},u32:{type:"u32",components:1},"vec2":{type:"f32",components:2},"vec3":{type:"f32",components:3},"vec4":{type:"f32",components:4},"vec2":{type:"f16",components:2},"vec3":{type:"f16",components:3},"vec4":{type:"f16",components:4},"vec2":{type:"i32",components:2},"vec3":{type:"i32",components:3},"vec4":{type:"i32",components:4},"vec2":{type:"u32",components:2},"vec3":{type:"u32",components:3},"vec4":{type:"u32",components:4},"mat2x2":{type:"f32",components:4},"mat2x3":{type:"f32",components:6},"mat2x4":{type:"f32",components:8},"mat3x2":{type:"f32",components:6},"mat3x3":{type:"f32",components:9},"mat3x4":{type:"f32",components:12},"mat4x2":{type:"f32",components:8},"mat4x3":{type:"f32",components:12},"mat4x4":{type:"f32",components:16},"mat2x2":{type:"f16",components:4},"mat2x3":{type:"f16",components:6},"mat2x4":{type:"f16",components:8},"mat3x2":{type:"f16",components:6},"mat3x3":{type:"f16",components:9},"mat3x4":{type:"f16",components:12},"mat4x2":{type:"f16",components:8},"mat4x3":{type:"f16",components:12},"mat4x4":{type:"f16",components:16},"mat2x2":{type:"i32",components:4},"mat2x3":{type:"i32",components:6},"mat2x4":{type:"i32",components:8},"mat3x2":{type:"i32",components:6},"mat3x3":{type:"i32",components:9},"mat3x4":{type:"i32",components:12},"mat4x2":{type:"i32",components:8},"mat4x3":{type:"i32",components:12},"mat4x4":{type:"i32",components:16},"mat2x2":{type:"u32",components:4},"mat2x3":{type:"u32",components:6},"mat2x4":{type:"u32",components:8},"mat3x2":{type:"u32",components:6},"mat3x3":{type:"u32",components:9},"mat3x4":{type:"u32",components:12},"mat4x2":{type:"u32",components:8},"mat4x3":{type:"u32",components:12},"mat4x4":{type:"u32",components:16}};function ti(e,t){const n={};for(const r of e.attributes){const s=ni(e,t,r.name);s&&(n[r.name]=s)}return n}function ni(e,t,n){const r=function(e,t){const n=e.attributes.find(e=>e.name===t);return n||Or.warn(`shader layout attribute "${t}" not present in shader`),n||null}(e,n),s=function(e,t){!function(e){for(const t of e)(t.attributes&&t.format||!t.attributes&&!t.format)&&Or.warn(`BufferLayout ${name} must have either 'attributes' or 'format' field`)}(e);let n=function(e,t){for(const n of e)if(n.format&&n.name===t)return{attributeName:n.name,bufferName:t,stepMode:n.stepMode,vertexFormat:n.format,byteOffset:0,byteStride:n.byteStride||0};return null}(e,t);return n||(n=function(e,t){var n;for(const r of e){let e=r.byteStride;if("number"!=typeof r.byteStride)for(const t of r.attributes||[])e+=$r(t.format).byteLength;const s=null==(n=r.attributes)?void 0:n.find(e=>e.attribute===t);if(s)return{attributeName:s.attribute,bufferName:r.name,stepMode:r.stepMode,vertexFormat:s.format,byteOffset:s.byteOffset,byteStride:e}}return null}(e,t),n||(Or.warn(`layout for attribute "${t}" not present in buffer layout`),null))}(t,n);if(!r)return null;const i=function(e){const[t,n]=Js[e];return{primitiveType:t,components:n,byteLength:Qs[t]*n,integer:"i32"===t||"u32"===t,signed:"u32"!==t}}(r.type),o=function(e){let t;switch(e.primitiveType){case"f32":t="float32";break;case"i32":t="sint32";break;case"u32":t="uint32";break;case"f16":return e.components<=2?"float16x2":"float16x4"}return 1===e.components?t:`${t}x${e.components}`}(i),a=(null==s?void 0:s.vertexFormat)||o,l=$r(a);return{attributeName:(null==s?void 0:s.attributeName)||r.name,bufferName:(null==s?void 0:s.bufferName)||r.name,location:r.location,shaderType:r.type,primitiveType:i.primitiveType,shaderComponents:i.components,vertexFormat:a,bufferDataType:l.type,bufferComponents:l.components,normalized:l.normalized,integer:i.integer,stepMode:(null==s?void 0:s.stepMode)||r.stepMode||"vertex",byteOffset:(null==s?void 0:s.byteOffset)||0,byteStride:(null==s?void 0:s.byteStride)||0}}const ri=class e extends Br{constructor(t,n){super(t,n,e.defaultProps),r(this,"maxVertexAttributes"),r(this,"attributeInfos"),r(this,"indexBuffer",null),r(this,"attributes"),this.maxVertexAttributes=t.limits.maxVertexAttributes,this.attributes=new Array(this.maxVertexAttributes).fill(null),this.attributeInfos=function(e,t,n=16){const r=ti(e,t),s=new Array(n).fill(null);for(const i of Object.values(r))s[i.location]=i;return s}(n.shaderLayout,n.bufferLayout,this.maxVertexAttributes)}get[Symbol.toStringTag](){return"VertexArray"}setConstantWebGL(e,t){this.device.reportError(new Error("constant attributes not supported"),this)()}};r(ri,"defaultProps",{...Br.defaultProps,shaderLayout:void 0,bufferLayout:[]});let si=ri;const ii=class e extends Br{get[Symbol.toStringTag](){return"TransformFeedback"}constructor(t,n){super(t,n,e.defaultProps)}};r(ii,"defaultProps",{...Br.defaultProps,layout:void 0,buffers:{}});let oi=ii;const ai=class e extends Br{get[Symbol.toStringTag](){return"QuerySet"}constructor(t,n){super(t,n,e.defaultProps)}};r(ai,"defaultProps",{...Br.defaultProps,type:void 0,count:void 0});let li,ci=ai;function ui(e){return(!li||li.byteLength"uniform"===t.type&&t.name===(null==e?void 0:e.name));if(!n)throw new Error(null==e?void 0:e.name);const r=n;for(const e of r.uniforms||[])this.bindingLayout[e.name]=e}}setUniforms(e){for(const[t,n]of Object.entries(e))this._setUniform(t,n),this.needsRedraw||this.setNeedsRedraw(`${this.name}.${t}=${n}`)}setNeedsRedraw(e){this.needsRedraw=this.needsRedraw||e}getAllUniforms(){return this.modifiedUniforms={},this.needsRedraw=!1,this.uniforms||{}}_setUniform(e,t){var n;(function(e,t){if(e!==t)return!1;const n=e,r=t;if(!hi(n))return!1;if(hi(r)&&n.length===r.length)for(let s=0;s`}}class bi extends gi{constructor(e,t,n){super(e,n),this.format=t}get isPointer(){return!0}getTypeName(){return`&${this.format.getTypeName()}`}}class vi extends gi{constructor(e,t,n,r){super(e,n),this.format=t,this.access=r}get isTemplate(){return!0}getTypeName(){let e=this.name;if(null!==this.format){if("vec2"===e||"vec3"===e||"vec4"===e||"mat2x2"===e||"mat2x3"===e||"mat2x4"===e||"mat3x2"===e||"mat3x3"===e||"mat3x4"===e||"mat4x2"===e||"mat4x3"===e||"mat4x4"===e){if("f32"===this.format.name)return e+="f",e;if("i32"===this.format.name)return e+="i",e;if("u32"===this.format.name)return e+="u",e;if("bool"===this.format.name)return e+="b",e;if("f16"===this.format.name)return e+="h",e}e+=`<${this.format.name}>`}else if("vec2"===e||"vec3"===e||"vec4"===e)return e;return e}}var xi,wi;(wi=xi||(xi={}))[wi.Uniform=0]="Uniform",wi[wi.Storage=1]="Storage",wi[wi.Texture=2]="Texture",wi[wi.Sampler=3]="Sampler",wi[wi.StorageTexture=4]="StorageTexture";class Ei{constructor(e,t,n,r,s,i,o){this.name=e,this.type=t,this.group=n,this.binding=r,this.attributes=s,this.resourceType=i,this.access=o}get isArray(){return this.type.isArray}get isStruct(){return this.type.isStruct}get isTemplate(){return this.type.isTemplate}get size(){return this.type.size}get align(){return this.type.isStruct?this.type.align:0}get members(){return this.type.isStruct?this.type.members:null}get format(){return this.type.isArray||this.type.isTemplate?this.type.format:null}get count(){return this.type.isArray?this.type.count:0}get stride(){return this.type.isArray?this.type.stride:this.size}}class Ti{constructor(e,t){this.name=e,this.type=t}}class Si{constructor(e,t,n,r){this.name=e,this.type=t,this.locationType=n,this.location=r,this.interpolation=null}}class Ai{constructor(e,t,n,r){this.name=e,this.type=t,this.locationType=n,this.location=r}}class Ri{constructor(e,t,n,r){this.name=e,this.type=t,this.attributes=n,this.id=r}}class Ci{constructor(e,t,n){this.name=e,this.type=t,this.attributes=n}}class ki{constructor(e,t=null,n){this.stage=null,this.inputs=[],this.outputs=[],this.arguments=[],this.returnType=null,this.resources=[],this.overrides=[],this.startLine=-1,this.endLine=-1,this.inUse=!1,this.calls=new Set,this.name=e,this.stage=t,this.attributes=n}}class Pi{constructor(){this.vertex=[],this.fragment=[],this.compute=[]}}function Ii(e){var t=(32768&e)>>15,n=(31744&e)>>10,r=1023&e;return 0==n?(t?-1:1)*Math.pow(2,-14)*(r/Math.pow(2,10)):31==n?r?NaN:1/0*(t?-1:1):(t?-1:1)*Math.pow(2,n-15)*(1+r/Math.pow(2,10))}const Mi=new Float32Array(1),Ni=new Int32Array(Mi.buffer),Li=new Uint16Array(1);function Oi(e){Mi[0]=e;const t=Ni[0],n=t>>31&1;let r=t>>23&255,s=8388607&t;if(255===r)return Li[0]=n<<15|31744|(0!==s?512:0),Li[0];if(0===r){if(0===s)return Li[0]=n<<15,Li[0];s|=8388608;let e=113;for(;!(8388608&s);)s<<=1,e--;return r=127-e,s&=8388607,r>0?(s=(s>>126-r)+(s>>127-r&1),Li[0]=n<<15|r<<10|s>>13,Li[0]):(Li[0]=n<<15,Li[0])}return r=r-127+15,r>=31?(Li[0]=n<<15|31744,Li[0]):r<=0?r<-10?(Li[0]=n<<15,Li[0]):(s=(8388608|s)>>1-r,Li[0]=n<<15|s>>13,Li[0]):(s>>=13,Li[0]=n<<15|r<<10|s,Li[0])}const Fi=new Uint32Array(1),Di=new Float32Array(Fi.buffer,0,1);function Bi(e){const t=112+(e>>6&31)<<23|(63&e)<<17;return Fi[0]=t,Di[0]}function Ui(e,t,n,r){const s=[0,0,0,0];for(let i=0;i{e.increment="++",e.decrement="--"})(no||(no={})),(e=>{e.parse=function(t){const n=t;if("parse"==n)throw new Error("Invalid value for IncrementOperator");return e[n]}})(no||(no={}));class oo extends $i{constructor(e,t){super(),this.operator=e,this.variable=t}get astNodeType(){return"increment"}search(e){this.variable.search(e)}}(e=>{e.assign="=",e.addAssign="+=",e.subtractAssin="-=",e.multiplyAssign="*=",e.divideAssign="/=",e.moduloAssign="%=",e.andAssign="&=",e.orAssign="|=",e.xorAssign="^=",e.shiftLeftAssign="<<=",e.shiftRightAssign=">>="})(ro||(ro={})),(ro||(ro={})).parse=function(e){const t=e;if("parse"==t)throw new Error("Invalid value for AssignOperator");return t};class ao extends $i{constructor(e,t,n){super(),this.operator=e,this.variable=t,this.value=n}get astNodeType(){return"assign"}search(e){this.variable.search(e),this.value.search(e)}}class lo extends $i{constructor(e,t){super(),this.name=e,this.args=t}get astNodeType(){return"call"}isBuiltin(){return Hi.has(this.name)}search(e){for(const t of this.args)t.search(e);e(this)}}class co extends $i{constructor(e,t){super(),this.body=e,this.continuing=t}get astNodeType(){return"loop"}search(e){var t;this.searchBlock(this.body,e),null===(t=this.continuing)||void 0===t||t.search(e)}}class uo extends $i{constructor(e,t){super(),this.condition=e,this.cases=t}get astNodeType(){return"switch"}search(e){e(this);for(const t of this.cases)t.search(e)}}class ho extends $i{constructor(e,t,n,r){super(),this.condition=e,this.body=t,this.elseif=n,this.else=r}get astNodeType(){return"if"}search(e){this.condition.search(e),this.searchBlock(this.body,e),this.searchBlock(this.elseif,e),this.searchBlock(this.else,e)}}class fo extends $i{constructor(e){super(),this.value=e}get astNodeType(){return"return"}search(e){var t;null===(t=this.value)||void 0===t||t.search(e)}}class po extends $i{constructor(e){super(),this.name=e}get astNodeType(){return"enable"}}class go extends $i{constructor(e){super(),this.extensions=e}get astNodeType(){return"requires"}}class mo extends $i{constructor(e,t){super(),this.severity=e,this.rule=t}get astNodeType(){return"diagnostic"}}class _o extends $i{constructor(e,t){super(),this.name=e,this.type=t}get astNodeType(){return"alias"}}class yo extends $i{constructor(){super()}get astNodeType(){return"discard"}}class bo extends $i{constructor(){super(),this.condition=null,this.loopId=-1}get astNodeType(){return"break"}}class vo extends $i{constructor(){super(),this.loopId=-1}get astNodeType(){return"continue"}}class xo extends $i{constructor(e){super(),this.attributes=null,this.name=e}get astNodeType(){return"type"}get isStruct(){return!1}get isArray(){return!1}static maxFormatType(e){let t=e[0];if("f32"===t.name)return t;for(let n=1;n`}else if("vec2"===e||"vec3"===e||"vec4"===e)return e;return e}}To.vec2f=new To("vec2",xo.f32,null),To.vec3f=new To("vec3",xo.f32,null),To.vec4f=new To("vec4",xo.f32,null),To.vec2i=new To("vec2",xo.i32,null),To.vec3i=new To("vec3",xo.i32,null),To.vec4i=new To("vec4",xo.i32,null),To.vec2u=new To("vec2",xo.u32,null),To.vec3u=new To("vec3",xo.u32,null),To.vec4u=new To("vec4",xo.u32,null),To.vec2h=new To("vec2",xo.f16,null),To.vec3h=new To("vec3",xo.f16,null),To.vec4h=new To("vec4",xo.f16,null),To.vec2b=new To("vec2",xo.bool,null),To.vec3b=new To("vec3",xo.bool,null),To.vec4b=new To("vec4",xo.bool,null),To.mat2x2f=new To("mat2x2",xo.f32,null),To.mat2x3f=new To("mat2x3",xo.f32,null),To.mat2x4f=new To("mat2x4",xo.f32,null),To.mat3x2f=new To("mat3x2",xo.f32,null),To.mat3x3f=new To("mat3x3",xo.f32,null),To.mat3x4f=new To("mat3x4",xo.f32,null),To.mat4x2f=new To("mat4x2",xo.f32,null),To.mat4x3f=new To("mat4x3",xo.f32,null),To.mat4x4f=new To("mat4x4",xo.f32,null),To.mat2x2h=new To("mat2x2",xo.f16,null),To.mat2x3h=new To("mat2x3",xo.f16,null),To.mat2x4h=new To("mat2x4",xo.f16,null),To.mat3x2h=new To("mat3x2",xo.f16,null),To.mat3x3h=new To("mat3x3",xo.f16,null),To.mat3x4h=new To("mat3x4",xo.f16,null),To.mat4x2h=new To("mat4x2",xo.f16,null),To.mat4x3h=new To("mat4x3",xo.f16,null),To.mat4x4h=new To("mat4x4",xo.f16,null),To.mat2x2i=new To("mat2x2",xo.i32,null),To.mat2x3i=new To("mat2x3",xo.i32,null),To.mat2x4i=new To("mat2x4",xo.i32,null),To.mat3x2i=new To("mat3x2",xo.i32,null),To.mat3x3i=new To("mat3x3",xo.i32,null),To.mat3x4i=new To("mat3x4",xo.i32,null),To.mat4x2i=new To("mat4x2",xo.i32,null),To.mat4x3i=new To("mat4x3",xo.i32,null),To.mat4x4i=new To("mat4x4",xo.i32,null),To.mat2x2u=new To("mat2x2",xo.u32,null),To.mat2x3u=new To("mat2x3",xo.u32,null),To.mat2x4u=new To("mat2x4",xo.u32,null),To.mat3x2u=new To("mat3x2",xo.u32,null),To.mat3x3u=new To("mat3x3",xo.u32,null),To.mat3x4u=new To("mat3x4",xo.u32,null),To.mat4x2u=new To("mat4x2",xo.u32,null),To.mat4x3u=new To("mat4x3",xo.u32,null),To.mat4x4u=new To("mat4x4",xo.u32,null);class So extends xo{constructor(e,t,n,r){super(e),this.storage=t,this.type=n,this.access=r}get astNodeType(){return"pointer"}}class Ao extends xo{constructor(e,t,n,r){super(e),this.attributes=t,this.format=n,this.count=r}get astNodeType(){return"array"}get isArray(){return!0}}class Ro extends xo{constructor(e,t,n){super(e),this.format=t,this.access=n}get astNodeType(){return"sampler"}}class Co extends Gi{constructor(){super(),this.postfix=null}}class ko extends Co{constructor(e){super(),this.value=e}get astNodeType(){return"stringExpr"}toString(){return this.value}constEvaluateString(){return this.value}}class Po extends Co{constructor(e,t){super(),this.type=e,this.args=t}get astNodeType(){return"createExpr"}search(e){if(e(this),this.args)for(const t of this.args)t.search(e)}constEvaluate(e,t){return t&&(t[0]=this.type),e.evalExpression(this,e.context)}}class Io extends Co{constructor(e,t){super(),this.cachedReturnValue=null,this.name=e,this.args=t}get astNodeType(){return"callExpr"}setCachedReturnValue(e){this.cachedReturnValue=e}get isBuiltin(){return Hi.has(this.name)}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){for(const t of this.args)t.search(e);e(this)}}class Mo extends Co{constructor(e){super(),this.name=e}get astNodeType(){return"varExpr"}search(e){e(this),this.postfix&&this.postfix.search(e)}constEvaluate(e,t){return e.evalExpression(this,e.context)}}class No extends Co{constructor(e,t){super(),this.name=e,this.initializer=t}get astNodeType(){return"constExpr"}constEvaluate(e,t){if(this.initializer){const t=e.evalExpression(this.initializer,e.context);return null!==t&&this.postfix?t.getSubData(e,this.postfix,e.context):t}return null}search(e){this.initializer.search(e)}}class Lo extends Co{constructor(e,t){super(),this.value=e,this.type=t}get astNodeType(){return"literalExpr"}constEvaluate(e,t){return void 0!==t&&(t[0]=this.type),this.value}get isScalar(){return this.value instanceof Zo}get isVector(){return this.value instanceof Jo||this.value instanceof ea}get scalarValue(){return this.value instanceof Zo?this.value.value:0}get vectorValue(){return this.value instanceof Jo||this.value instanceof ea?this.value.data:new Float32Array(0)}}class Oo extends Co{constructor(e,t){super(),this.type=e,this.value=t}get astNodeType(){return"bitcastExpr"}search(e){this.value.search(e)}}class Fo extends Co{constructor(e){super(),this.index=e}search(e){this.index.search(e)}}class Do extends Co{constructor(){super()}}class Bo extends Do{constructor(e,t){super(),this.operator=e,this.right=t}get astNodeType(){return"unaryOp"}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){this.right.search(e)}}class Uo extends Do{constructor(e,t,n){super(),this.operator=e,this.left=t,this.right=n}get astNodeType(){return"binaryOp"}_getPromotedType(e,t){return e.name===t.name?e:"f32"===e.name||"f32"===t.name?xo.f32:"u32"===e.name||"u32"===t.name?xo.u32:xo.i32}constEvaluate(e,t){return e.evalExpression(this,e.context)}search(e){this.left.search(e),this.right.search(e)}}class jo extends Gi{constructor(e){super(),this.body=e}search(e){e(this),this.searchBlock(this.body,e)}}class Vo extends Co{constructor(){super()}get astNodeType(){return"default"}}class Go extends jo{constructor(e,t){super(t),this.selectors=e}get astNodeType(){return"case"}search(e){this.searchBlock(this.body,e)}}class zo extends jo{constructor(e){super(e)}get astNodeType(){return"default"}search(e){this.searchBlock(this.body,e)}}class Wo extends Gi{constructor(e,t,n){super(),this.name=e,this.type=t,this.attributes=n}get astNodeType(){return"argument"}}class Ho extends Gi{constructor(e,t){super(),this.condition=e,this.body=t}get astNodeType(){return"elseif"}search(e){this.condition.search(e),this.searchBlock(this.body,e)}}class $o extends Gi{constructor(e,t,n){super(),this.name=e,this.type=t,this.attributes=n}get astNodeType(){return"member"}}class Xo extends Gi{constructor(e,t){super(),this.name=e,this.value=t}get astNodeType(){return"attribute"}}class qo{constructor(e,t){this.parent=null,this.typeInfo=e,this.parent=t,this.id=qo._id++}clone(){throw`Clone: Not implemented for ${this.constructor.name}`}setDataValue(e,t,n,r){}getSubData(e,t,n){return null}toString(){return`<${this.typeInfo.getTypeName()}>`}}qo._id=0;class Yo extends qo{constructor(){super(new gi("void",null),null)}toString(){return"void"}}Yo.void=new Yo;class Ko extends qo{constructor(e){super(new bi("pointer",e.typeInfo,null),null),this.reference=e}clone(){return this}setDataValue(e,t,n,r){this.reference.setDataValue(e,t,n,r)}getSubData(e,t,n){return t?this.reference.getSubData(e,t,n):this}toString(){return`&${this.reference.toString()}`}}class Zo extends qo{constructor(e,t,n=null){super(t,n),e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array?this.data=e:"x32"===this.typeInfo.name?e-Math.floor(e)!==0?this.data=new Float32Array([e]):this.data=e>=0?new Uint32Array([e]):new Int32Array([e]):"i32"===this.typeInfo.name||"bool"===this.typeInfo.name?this.data=new Int32Array([e]):"u32"===this.typeInfo.name?this.data=new Uint32Array([e]):("f32"===this.typeInfo.name||"f16"===this.typeInfo.name)&&(this.data=new Float32Array([e]))}clone(){if(this.data instanceof Float32Array)return new Zo(new Float32Array(this.data),this.typeInfo,null);if(this.data instanceof Int32Array)return new Zo(new Int32Array(this.data),this.typeInfo,null);if(this.data instanceof Uint32Array)return new Zo(new Uint32Array(this.data),this.typeInfo,null);throw"ScalarData: Invalid data type"}get value(){return this.data[0]}set value(e){this.data[0]=e}setDataValue(e,t,n,r){if(n)return;if(!(t instanceof Zo))return;let s=t.data[0];"i32"===this.typeInfo.name||"u32"===this.typeInfo.name?s=Math.floor(s):"bool"===this.typeInfo.name&&(s=s?1:0),this.data[0]=s}getSubData(e,t,n){return t?null:this}toString(){return`${this.value}`}}function Qo(e,t,n){const r=t.length;return 2===r?"f32"===n?new Jo(new Float32Array(t),e.getTypeInfo("vec2f")):"i32"===n||"bool"===n?new Jo(new Int32Array(t),e.getTypeInfo("vec2i")):"u32"===n?new Jo(new Uint32Array(t),e.getTypeInfo("vec2u")):"f16"===n?new Jo(new Float32Array(t),e.getTypeInfo("vec2h")):null:3===r?"f32"===n?new Jo(new Float32Array(t),e.getTypeInfo("vec3f")):"i32"===n||"bool"===n?new Jo(new Int32Array(t),e.getTypeInfo("vec3i")):"u32"===n?new Jo(new Uint32Array(t),e.getTypeInfo("vec3u")):"f16"===n?new Jo(new Float32Array(t),e.getTypeInfo("vec3h")):null:4===r?"f32"===n?new Jo(new Float32Array(t),e.getTypeInfo("vec4f")):"i32"===n||"bool"===n?new Jo(new Int32Array(t),e.getTypeInfo("vec4i")):"u32"===n?new Jo(new Uint32Array(t),e.getTypeInfo("vec4u")):"f16"===n?new Jo(new Float32Array(t),e.getTypeInfo("vec4h")):null:null}class Jo extends qo{constructor(e,t,n=null){if(super(t,n),e instanceof Float32Array||e instanceof Uint32Array||e instanceof Int32Array)this.data=e;else{const t=this.typeInfo.name;"vec2f"===t||"vec3f"===t||"vec4f"===t?this.data=new Float32Array(e):"vec2i"===t||"vec3i"===t||"vec4i"===t?this.data=new Int32Array(e):"vec2u"===t||"vec3u"===t||"vec4u"===t?this.data=new Uint32Array(e):"vec2h"===t||"vec3h"===t||"vec4h"===t?this.data=new Float32Array(e):"vec2b"===t||"vec3b"===t||"vec4b"===t?this.data=new Int32Array(e):("vec2"===t||"vec3"===t||"vec4"===t)&&(this.data=new Float32Array(e))}}clone(){if(this.data instanceof Float32Array)return new Jo(new Float32Array(this.data),this.typeInfo,null);if(this.data instanceof Int32Array)return new Jo(new Int32Array(this.data),this.typeInfo,null);if(this.data instanceof Uint32Array)return new Jo(new Uint32Array(this.data),this.typeInfo,null);throw"VectorData: Invalid data type"}setDataValue(e,t,n,r){n instanceof ko||t instanceof Jo&&(this.data=t.data)}getSubData(e,t,n){if(null===t)return this;let r=e.getTypeInfo("f32");if(this.typeInfo instanceof vi)r=this.typeInfo.format||r;else{const t=this.typeInfo.name;"vec2f"===t||"vec3f"===t||"vec4f"===t?r=e.getTypeInfo("f32"):"vec2i"===t||"vec3i"===t||"vec4i"===t?r=e.getTypeInfo("i32"):"vec2b"===t||"vec3b"===t||"vec4b"===t?r=e.getTypeInfo("bool"):"vec2u"===t||"vec3u"===t||"vec4u"===t?r=e.getTypeInfo("u32"):("vec2h"===t||"vec3h"===t||"vec4h"===t)&&(r=e.getTypeInfo("f16"))}let s=this;for(;null!==t&&null!==s;){if(t instanceof Fo){const i=t.index;let o=-1;if(i instanceof Lo){if(!(i.value instanceof Zo))return null;o=i.value.value}else{const t=e.evalExpression(i,n);if(!(t instanceof Zo))return null;o=t.value}if(o<0||o>=s.data.length)return null;if(s.data instanceof Float32Array){const e=new Float32Array(s.data.buffer,s.data.byteOffset+4*o,1);return new Zo(e,r)}if(s.data instanceof Int32Array){const e=new Int32Array(s.data.buffer,s.data.byteOffset+4*o,1);return new Zo(e,r)}if(s.data instanceof Uint32Array){const e=new Uint32Array(s.data.buffer,s.data.byteOffset+4*o,1);return new Zo(e,r)}throw"GetSubData: Invalid data type"}if(!(t instanceof ko))return null;{const n=t.value.toLowerCase();if(1===n.length){let e=0;if("x"===n||"r"===n)e=0;else if("y"===n||"g"===n)e=1;else if("z"===n||"b"===n)e=2;else{if("w"!==n&&"a"!==n)return null;e=3}if(this.data instanceof Float32Array){let t=new Float32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new Zo(t,r,this)}if(this.data instanceof Int32Array){let t=new Int32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new Zo(t,r,this)}if(this.data instanceof Uint32Array){let t=new Uint32Array(this.data.buffer,this.data.byteOffset+4*e,1);return new Zo(t,r,this)}}const i=[];for(const e of n)"x"===e||"r"===e?i.push(this.data[0]):"y"===e||"g"===e?i.push(this.data[1]):"z"===e||"b"===e?i.push(this.data[2]):("w"===e||"a"===e)&&i.push(this.data[3]);s=Qo(e,i,r.name)}t=t.postfix}return s}toString(){let e=`${this.data[0]}`;for(let t=1;t=this.data.length)return null;const o=r.endsWith("h")?"h":"f";let a;if("mat2x2"===r||"mat2x2f"===r||"mat2x2h"===r||"mat3x2"===r||"mat3x2f"===r||"mat3x2h"===r||"mat4x2"===r||"mat4x2f"===r||"mat4x2h"===r)a=new Jo(new Float32Array(this.data.buffer,this.data.byteOffset+2*i*4,2),e.getTypeInfo(`vec2${o}`));else if("mat2x3"===r||"mat2x3f"===r||"mat2x3h"===r||"mat3x3"===r||"mat3x3f"===r||"mat3x3h"===r||"mat4x3"===r||"mat4x3f"===r||"mat4x3h"===r)a=new Jo(new Float32Array(this.data.buffer,this.data.byteOffset+3*i*4,3),e.getTypeInfo(`vec3${o}`));else{if("mat2x4"!==r&&"mat2x4f"!==r&&"mat2x4h"!==r&&"mat3x4"!==r&&"mat3x4f"!==r&&"mat3x4h"!==r&&"mat4x4"!==r&&"mat4x4f"!==r&&"mat4x4h"!==r)return null;a=new Jo(new Float32Array(this.data.buffer,this.data.byteOffset+4*i*4,4),e.getTypeInfo(`vec4${o}`))}return t.postfix?a.getSubData(e,t.postfix,n):a}return null}toString(){let e=`${this.data[0]}`;for(let t=1;t"!==i&&"x32"!==i)if("u32"!==i&&"atomic"!==i)if("bool"!==i){if("vec2f"===i||"vec2h"===i){const e=new Float32Array(this.buffer,r,2);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]))}if("vec3f"===i||"vec3h"===i){const e=new Float32Array(this.buffer,r,3);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]))}if("vec4f"===i||"vec4h"===i){const e=new Float32Array(this.buffer,r,4);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]))}if("vec2i"===i){const e=new Int32Array(this.buffer,r,2);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]))}if("vec3i"===i){const e=new Int32Array(this.buffer,r,3);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]))}if("vec4i"===i){const e=new Int32Array(this.buffer,r,4);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]))}if("vec2u"===i){const e=new Uint32Array(this.buffer,r,2);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]))}if("vec3u"===i){const e=new Uint32Array(this.buffer,r,3);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]))}if("vec4u"===i){const e=new Uint32Array(this.buffer,r,4);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]))}if("vec2b"===i){const e=new Uint32Array(this.buffer,r,2);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1]):(e[0]=t[0],e[1]=t[1]))}if("vec3b"===i){const e=new Uint32Array(this.buffer,r,3);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2]):(e[0]=t[0],e[1]=t[1],e[2]=t[2]))}if("vec4b"===i){const e=new Uint32Array(this.buffer,r,4);return void(t instanceof Jo?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]))}if("mat2x2f"===i||"mat2x2h"===i){const e=new Float32Array(this.buffer,r,4);return void(t instanceof ea?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3]))}if("mat2x3f"===i||"mat2x3h"===i){const e=new Float32Array(this.buffer,r,6);return void(t instanceof ea?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5]))}if("mat2x4f"===i||"mat2x4h"===i){const e=new Float32Array(this.buffer,r,8);return void(t instanceof ea?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7]))}if("mat3x2f"===i||"mat3x2h"===i){const e=new Float32Array(this.buffer,r,6);return void(t instanceof ea?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5]))}if("mat3x3f"===i||"mat3x3h"===i){const e=new Float32Array(this.buffer,r,9);return void(t instanceof ea?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8]))}if("mat3x4f"===i||"mat3x4h"===i){const e=new Float32Array(this.buffer,r,12);return void(t instanceof ea?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11]))}if("mat4x2f"===i||"mat4x2h"===i){const e=new Float32Array(this.buffer,r,8);return void(t instanceof ea?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7]))}if("mat4x3f"===i||"mat4x3h"===i){const e=new Float32Array(this.buffer,r,12);return void(t instanceof ea?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11]))}if("mat4x4f"===i||"mat4x4h"===i){const e=new Float32Array(this.buffer,r,16);return void(t instanceof ea?(e[0]=t.data[0],e[1]=t.data[1],e[2]=t.data[2],e[3]=t.data[3],e[4]=t.data[4],e[5]=t.data[5],e[6]=t.data[6],e[7]=t.data[7],e[8]=t.data[8],e[9]=t.data[9],e[10]=t.data[10],e[11]=t.data[11],e[12]=t.data[12],e[13]=t.data[13],e[14]=t.data[14],e[15]=t.data[15]):(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],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]))}if(t instanceof ta&&n===t.typeInfo)return void new Uint8Array(this.buffer,r,t.buffer.byteLength).set(new Uint8Array(t.buffer))}else t instanceof Zo&&(new Int32Array(this.buffer,r,1)[0]=t.value);else t instanceof Zo&&(new Uint32Array(this.buffer,r,1)[0]=t.value);else t instanceof Zo&&(new Int32Array(this.buffer,r,1)[0]=t.value);else t instanceof Zo&&(new Float32Array(this.buffer,r,1)[0]=t.value)}getSubData(e,t,n){var r,s;if(null===t)return this;let i=this.offset,o=this.typeInfo;for(;t;){if(t instanceof Fo){const r=t.index,s=r instanceof Co?e.evalExpression(r,n):r;let a=0;if(s instanceof Zo?a=s.value:"number"==typeof s&&(a=s),o instanceof yi)i+=a*o.stride,o=o.format;else{const t=o.getTypeName();("mat4x4"===t||"mat4x4f"===t||"mat4x4h"===t)&&(i+=16*a,o=e.getTypeInfo("vec4f"))}}else{if(!(t instanceof ko))return null;{const n=t.value;if(o instanceof _i){let e=!1;for(const t of o.members)if(t.name===n){i+=t.offset,o=t.type,e=!0;break}if(!e)return null}else if(o instanceof gi){const t=o.getTypeName();if("vec2f"===t||"vec3f"===t||"vec4f"===t||"vec2i"===t||"vec3i"===t||"vec4i"===t||"vec2u"===t||"vec3u"===t||"vec4u"===t||"vec2b"===t||"vec3b"===t||"vec4b"===t||"vec2h"===t||"vec3h"===t||"vec4h"===t||"vec2"===t||"vec3"===t||"vec4"===t){if(n.length>0&&n.length<5){let r="f";const s=[];for(let o=0;o=this.buffer.byteLength)return null;const e=new Float32Array(this.buffer,i,3);s.push(e[l])}else if("vec4f"===t)s.push(new Float32Array(this.buffer,i,4)[l]);else if("vec2i"===t)r="i",s.push(new Int32Array(this.buffer,i,2)[l]);else if("vec3i"===t)r="i",s.push(new Int32Array(this.buffer,i,3)[l]);else if("vec4i"===t)r="i",s.push(new Int32Array(this.buffer,i,4)[l]);else if("vec2u"===t){r="u";const e=new Uint32Array(this.buffer,i,2);s.push(e[l])}else"vec3u"===t?(r="u",s.push(new Uint32Array(this.buffer,i,3)[l])):"vec4u"===t&&(r="u",s.push(new Uint32Array(this.buffer,i,4)[l]))}return 2===s.length?o=e.getTypeInfo(`vec2${r}`):3===s.length?o=e.getTypeInfo(`vec3${r}`):4===s.length&&(o=e.getTypeInfo(`vec4${r}`)),new Jo(s,o,null)}return null}return null}}}t=t.postfix}const a=o.getTypeName();return"f32"===a?new Zo(new Float32Array(this.buffer,i,1),o,this):"i32"===a?new Zo(new Int32Array(this.buffer,i,1),o,this):"u32"===a?new Zo(new Uint32Array(this.buffer,i,1),o,this):"vec2f"===a?new Jo(new Float32Array(this.buffer,i,2),o,this):"vec3f"===a?new Jo(new Float32Array(this.buffer,i,3),o,this):"vec4f"===a?new Jo(new Float32Array(this.buffer,i,4),o,this):"vec2i"===a?new Jo(new Int32Array(this.buffer,i,2),o,this):"vec3i"===a?new Jo(new Int32Array(this.buffer,i,3),o,this):"vec4i"===a?new Jo(new Int32Array(this.buffer,i,4),o,this):"vec2u"===a?new Jo(new Uint32Array(this.buffer,i,2),o,this):"vec3u"===a?new Jo(new Uint32Array(this.buffer,i,3),o,this):"vec4u"===a?new Jo(new Uint32Array(this.buffer,i,4),o,this):o instanceof vi&&"atomic"===o.name?"u32"===(null===(r=o.format)||void 0===r?void 0:r.name)?new Zo(new Uint32Array(this.buffer,i,1)[0],o.format,this):"i32"===(null===(s=o.format)||void 0===s?void 0:s.name)?new Zo(new Int32Array(this.buffer,i,1)[0],o.format,this):null:new ta(this.buffer,o,i,this)}toString(){let e="";if(this.typeInfo instanceof yi)if("f32"===this.typeInfo.format.name){const t=new Float32Array(this.buffer,this.offset);e=`[${t[0]}`;for(let n=1;n0?null!==(e=n[0])&&void 0!==e?e:0:n instanceof Object&&null!==(t=n.width)&&void 0!==t?t:0}get height(){var e,t;const n=this.descriptor.size;return n instanceof Array&&n.length>1?null!==(e=n[1])&&void 0!==e?e:0:n instanceof Object&&null!==(t=n.height)&&void 0!==t?t:0}get depthOrArrayLayers(){var e,t;const n=this.descriptor.size;return n instanceof Array&&n.length>2?null!==(e=n[2])&&void 0!==e?e:0:n instanceof Object&&null!==(t=n.depthOrArrayLayers)&&void 0!==t?t:0}get format(){var e;return this.descriptor&&null!==(e=this.descriptor.format)&&void 0!==e?e:"rgba8unorm"}get sampleCount(){var e;return this.descriptor&&null!==(e=this.descriptor.sampleCount)&&void 0!==e?e:1}get mipLevelCount(){var e;return this.descriptor&&null!==(e=this.descriptor.mipLevelCount)&&void 0!==e?e:1}get dimension(){var e;return this.descriptor&&null!==(e=this.descriptor.dimension)&&void 0!==e?e:"2d"}getMipLevelSize(e){if(e>=this.mipLevelCount)return[0,0,0];const t=[this.width,this.height,this.depthOrArrayLayers];for(let n=0;n>e);return t}get texelByteSize(){const e=this.format,t=Vi[e];return t?t.isDepthStencil?4:t.bytesPerBlock:0}get bytesPerRow(){return this.width*this.texelByteSize}get isDepthStencil(){const e=this.format,t=Vi[e];return!!t&&t.isDepthStencil}getGpuSize(){const e=this.format,t=Vi[e],n=this.width;if(!e||n<=0||!t)return-1;const r=this.height,s=this.depthOrArrayLayers,i=this.dimension;return n/t.blockWidth*("1d"===i?1:r/t.blockHeight)*t.bytesPerBlock*s}getPixel(e,t,n=0,r=0){const s=this.texelByteSize,i=this.bytesPerRow,o=this.height,a=this.data[r];return function(e,t,n,r,s,i,o,a,l){const c=r*(o>>=s)*(i>>=s)+n*o+t*a;switch(l){case"r8unorm":return[Ui(e,c,"8unorm",1)[0]];case"r8snorm":return[Ui(e,c,"8snorm",1)[0]];case"r8uint":return[Ui(e,c,"8uint",1)[0]];case"r8sint":return[Ui(e,c,"8sint",1)[0]];case"rg8unorm":{const t=Ui(e,c,"8unorm",2);return[t[0],t[1]]}case"rg8snorm":{const t=Ui(e,c,"8snorm",2);return[t[0],t[1]]}case"rg8uint":{const t=Ui(e,c,"8uint",2);return[t[0],t[1]]}case"rg8sint":{const t=Ui(e,c,"8sint",2);return[t[0],t[1]]}case"rgba8unorm-srgb":case"rgba8unorm":{const t=Ui(e,c,"8unorm",4);return[t[0],t[1],t[2],t[3]]}case"rgba8snorm":{const t=Ui(e,c,"8snorm",4);return[t[0],t[1],t[2],t[3]]}case"rgba8uint":{const t=Ui(e,c,"8uint",4);return[t[0],t[1],t[2],t[3]]}case"rgba8sint":{const t=Ui(e,c,"8sint",4);return[t[0],t[1],t[2],t[3]]}case"bgra8unorm-srgb":case"bgra8unorm":{const t=Ui(e,c,"8unorm",4);return[t[2],t[1],t[0],t[3]]}case"r16uint":return[Ui(e,c,"16uint",1)[0]];case"r16sint":return[Ui(e,c,"16sint",1)[0]];case"r16float":return[Ui(e,c,"16float",1)[0]];case"rg16uint":{const t=Ui(e,c,"16uint",2);return[t[0],t[1]]}case"rg16sint":{const t=Ui(e,c,"16sint",2);return[t[0],t[1]]}case"rg16float":{const t=Ui(e,c,"16float",2);return[t[0],t[1]]}case"rgba16uint":{const t=Ui(e,c,"16uint",4);return[t[0],t[1],t[2],t[3]]}case"rgba16sint":{const t=Ui(e,c,"16sint",4);return[t[0],t[1],t[2],t[3]]}case"rgba16float":{const t=Ui(e,c,"16float",4);return[t[0],t[1],t[2],t[3]]}case"r32uint":return[Ui(e,c,"32uint",1)[0]];case"r32sint":return[Ui(e,c,"32sint",1)[0]];case"depth16unorm":case"depth24plus":case"depth24plus-stencil8":case"depth32float":case"depth32float-stencil8":case"r32float":return[Ui(e,c,"32float",1)[0]];case"rg32uint":{const t=Ui(e,c,"32uint",2);return[t[0],t[1]]}case"rg32sint":{const t=Ui(e,c,"32sint",2);return[t[0],t[1]]}case"rg32float":{const t=Ui(e,c,"32float",2);return[t[0],t[1]]}case"rgba32uint":{const t=Ui(e,c,"32uint",4);return[t[0],t[1],t[2],t[3]]}case"rgba32sint":{const t=Ui(e,c,"32sint",4);return[t[0],t[1],t[2],t[3]]}case"rgba32float":{const t=Ui(e,c,"32float",4);return[t[0],t[1],t[2],t[3]]}case"rg11b10ufloat":{const t=new Uint32Array(e.buffer,c,1)[0],n=(4192256&t)>>11,r=(4290772992&t)>>22;return[Bi(2047&t),Bi(n),function(e){const t=112+(e>>5&31)<<23|(31&e)<<18;return Fi[0]=t,Di[0]}(r),1]}}return null}(new Uint8Array(a),e,t,n,r,o,i,s,this.format)}setPixel(e,t,n,r,s){const i=this.texelByteSize,o=this.bytesPerRow,a=this.height,l=this.data[r];!function(e,t,n,r,s,i,o,a,l,c){const u=r*(o>>=s)*(i>>=s)+n*o+t*a;switch(l){case"r8unorm":return void ji(e,u,"8unorm",1,c);case"r8snorm":return void ji(e,u,"8snorm",1,c);case"r8uint":return void ji(e,u,"8uint",1,c);case"r8sint":return void ji(e,u,"8sint",1,c);case"rg8unorm":return void ji(e,u,"8unorm",2,c);case"rg8snorm":return void ji(e,u,"8snorm",2,c);case"rg8uint":return void ji(e,u,"8uint",2,c);case"rg8sint":return void ji(e,u,"8sint",2,c);case"rgba8unorm-srgb":case"rgba8unorm":case"bgra8unorm-srgb":case"bgra8unorm":return void ji(e,u,"8unorm",4,c);case"rgba8snorm":return void ji(e,u,"8snorm",4,c);case"rgba8uint":return void ji(e,u,"8uint",4,c);case"rgba8sint":return void ji(e,u,"8sint",4,c);case"r16uint":return void ji(e,u,"16uint",1,c);case"r16sint":return void ji(e,u,"16sint",1,c);case"r16float":return void ji(e,u,"16float",1,c);case"rg16uint":return void ji(e,u,"16uint",2,c);case"rg16sint":return void ji(e,u,"16sint",2,c);case"rg16float":return void ji(e,u,"16float",2,c);case"rgba16uint":return void ji(e,u,"16uint",4,c);case"rgba16sint":return void ji(e,u,"16sint",4,c);case"rgba16float":return void ji(e,u,"16float",4,c);case"r32uint":return void ji(e,u,"32uint",1,c);case"r32sint":return void ji(e,u,"32sint",1,c);case"depth16unorm":case"depth24plus":case"depth24plus-stencil8":case"depth32float":case"depth32float-stencil8":case"r32float":return void ji(e,u,"32float",1,c);case"rg32uint":return void ji(e,u,"32uint",2,c);case"rg32sint":return void ji(e,u,"32sint",2,c);case"rg32float":return void ji(e,u,"32float",2,c);case"rgba32uint":return void ji(e,u,"32uint",4,c);case"rgba32sint":return void ji(e,u,"32sint",4,c);case"rgba32float":ji(e,u,"32float",4,c)}}(new Uint8Array(l),e,t,n,r,a,o,i,this.format,s)}}(e=>{e[e.token=0]="token",e[e.keyword=1]="keyword",e[e.reserved=2]="reserved"})(io||(io={}));class ra{constructor(e,t,n){this.name=e,this.type=t,this.rule=n}toString(){return this.name}}class sa{}so=sa,sa.none=new ra("",io.reserved,""),sa.eof=new ra("EOF",io.token,""),sa.reserved={asm:new ra("asm",io.reserved,"asm"),bf16:new ra("bf16",io.reserved,"bf16"),do:new ra("do",io.reserved,"do"),enum:new ra("enum",io.reserved,"enum"),f16:new ra("f16",io.reserved,"f16"),f64:new ra("f64",io.reserved,"f64"),handle:new ra("handle",io.reserved,"handle"),i8:new ra("i8",io.reserved,"i8"),i16:new ra("i16",io.reserved,"i16"),i64:new ra("i64",io.reserved,"i64"),mat:new ra("mat",io.reserved,"mat"),premerge:new ra("premerge",io.reserved,"premerge"),regardless:new ra("regardless",io.reserved,"regardless"),typedef:new ra("typedef",io.reserved,"typedef"),u8:new ra("u8",io.reserved,"u8"),u16:new ra("u16",io.reserved,"u16"),u64:new ra("u64",io.reserved,"u64"),unless:new ra("unless",io.reserved,"unless"),using:new ra("using",io.reserved,"using"),vec:new ra("vec",io.reserved,"vec"),void:new ra("void",io.reserved,"void")},sa.keywords={array:new ra("array",io.keyword,"array"),atomic:new ra("atomic",io.keyword,"atomic"),bool:new ra("bool",io.keyword,"bool"),f32:new ra("f32",io.keyword,"f32"),i32:new ra("i32",io.keyword,"i32"),mat2x2:new ra("mat2x2",io.keyword,"mat2x2"),mat2x3:new ra("mat2x3",io.keyword,"mat2x3"),mat2x4:new ra("mat2x4",io.keyword,"mat2x4"),mat3x2:new ra("mat3x2",io.keyword,"mat3x2"),mat3x3:new ra("mat3x3",io.keyword,"mat3x3"),mat3x4:new ra("mat3x4",io.keyword,"mat3x4"),mat4x2:new ra("mat4x2",io.keyword,"mat4x2"),mat4x3:new ra("mat4x3",io.keyword,"mat4x3"),mat4x4:new ra("mat4x4",io.keyword,"mat4x4"),ptr:new ra("ptr",io.keyword,"ptr"),sampler:new ra("sampler",io.keyword,"sampler"),sampler_comparison:new ra("sampler_comparison",io.keyword,"sampler_comparison"),struct:new ra("struct",io.keyword,"struct"),texture_1d:new ra("texture_1d",io.keyword,"texture_1d"),texture_2d:new ra("texture_2d",io.keyword,"texture_2d"),texture_2d_array:new ra("texture_2d_array",io.keyword,"texture_2d_array"),texture_3d:new ra("texture_3d",io.keyword,"texture_3d"),texture_cube:new ra("texture_cube",io.keyword,"texture_cube"),texture_cube_array:new ra("texture_cube_array",io.keyword,"texture_cube_array"),texture_multisampled_2d:new ra("texture_multisampled_2d",io.keyword,"texture_multisampled_2d"),texture_storage_1d:new ra("texture_storage_1d",io.keyword,"texture_storage_1d"),texture_storage_2d:new ra("texture_storage_2d",io.keyword,"texture_storage_2d"),texture_storage_2d_array:new ra("texture_storage_2d_array",io.keyword,"texture_storage_2d_array"),texture_storage_3d:new ra("texture_storage_3d",io.keyword,"texture_storage_3d"),texture_depth_2d:new ra("texture_depth_2d",io.keyword,"texture_depth_2d"),texture_depth_2d_array:new ra("texture_depth_2d_array",io.keyword,"texture_depth_2d_array"),texture_depth_cube:new ra("texture_depth_cube",io.keyword,"texture_depth_cube"),texture_depth_cube_array:new ra("texture_depth_cube_array",io.keyword,"texture_depth_cube_array"),texture_depth_multisampled_2d:new ra("texture_depth_multisampled_2d",io.keyword,"texture_depth_multisampled_2d"),texture_external:new ra("texture_external",io.keyword,"texture_external"),u32:new ra("u32",io.keyword,"u32"),vec2:new ra("vec2",io.keyword,"vec2"),vec3:new ra("vec3",io.keyword,"vec3"),vec4:new ra("vec4",io.keyword,"vec4"),bitcast:new ra("bitcast",io.keyword,"bitcast"),block:new ra("block",io.keyword,"block"),break:new ra("break",io.keyword,"break"),case:new ra("case",io.keyword,"case"),continue:new ra("continue",io.keyword,"continue"),continuing:new ra("continuing",io.keyword,"continuing"),default:new ra("default",io.keyword,"default"),diagnostic:new ra("diagnostic",io.keyword,"diagnostic"),discard:new ra("discard",io.keyword,"discard"),else:new ra("else",io.keyword,"else"),enable:new ra("enable",io.keyword,"enable"),fallthrough:new ra("fallthrough",io.keyword,"fallthrough"),false:new ra("false",io.keyword,"false"),fn:new ra("fn",io.keyword,"fn"),for:new ra("for",io.keyword,"for"),function:new ra("function",io.keyword,"function"),if:new ra("if",io.keyword,"if"),let:new ra("let",io.keyword,"let"),const:new ra("const",io.keyword,"const"),loop:new ra("loop",io.keyword,"loop"),while:new ra("while",io.keyword,"while"),private:new ra("private",io.keyword,"private"),read:new ra("read",io.keyword,"read"),read_write:new ra("read_write",io.keyword,"read_write"),return:new ra("return",io.keyword,"return"),requires:new ra("requires",io.keyword,"requires"),storage:new ra("storage",io.keyword,"storage"),switch:new ra("switch",io.keyword,"switch"),true:new ra("true",io.keyword,"true"),alias:new ra("alias",io.keyword,"alias"),type:new ra("type",io.keyword,"type"),uniform:new ra("uniform",io.keyword,"uniform"),var:new ra("var",io.keyword,"var"),override:new ra("override",io.keyword,"override"),workgroup:new ra("workgroup",io.keyword,"workgroup"),write:new ra("write",io.keyword,"write"),r8unorm:new ra("r8unorm",io.keyword,"r8unorm"),r8snorm:new ra("r8snorm",io.keyword,"r8snorm"),r8uint:new ra("r8uint",io.keyword,"r8uint"),r8sint:new ra("r8sint",io.keyword,"r8sint"),r16uint:new ra("r16uint",io.keyword,"r16uint"),r16sint:new ra("r16sint",io.keyword,"r16sint"),r16float:new ra("r16float",io.keyword,"r16float"),rg8unorm:new ra("rg8unorm",io.keyword,"rg8unorm"),rg8snorm:new ra("rg8snorm",io.keyword,"rg8snorm"),rg8uint:new ra("rg8uint",io.keyword,"rg8uint"),rg8sint:new ra("rg8sint",io.keyword,"rg8sint"),r32uint:new ra("r32uint",io.keyword,"r32uint"),r32sint:new ra("r32sint",io.keyword,"r32sint"),r32float:new ra("r32float",io.keyword,"r32float"),rg16uint:new ra("rg16uint",io.keyword,"rg16uint"),rg16sint:new ra("rg16sint",io.keyword,"rg16sint"),rg16float:new ra("rg16float",io.keyword,"rg16float"),rgba8unorm:new ra("rgba8unorm",io.keyword,"rgba8unorm"),rgba8unorm_srgb:new ra("rgba8unorm_srgb",io.keyword,"rgba8unorm_srgb"),rgba8snorm:new ra("rgba8snorm",io.keyword,"rgba8snorm"),rgba8uint:new ra("rgba8uint",io.keyword,"rgba8uint"),rgba8sint:new ra("rgba8sint",io.keyword,"rgba8sint"),bgra8unorm:new ra("bgra8unorm",io.keyword,"bgra8unorm"),bgra8unorm_srgb:new ra("bgra8unorm_srgb",io.keyword,"bgra8unorm_srgb"),rgb10a2unorm:new ra("rgb10a2unorm",io.keyword,"rgb10a2unorm"),rg11b10float:new ra("rg11b10float",io.keyword,"rg11b10float"),rg32uint:new ra("rg32uint",io.keyword,"rg32uint"),rg32sint:new ra("rg32sint",io.keyword,"rg32sint"),rg32float:new ra("rg32float",io.keyword,"rg32float"),rgba16uint:new ra("rgba16uint",io.keyword,"rgba16uint"),rgba16sint:new ra("rgba16sint",io.keyword,"rgba16sint"),rgba16float:new ra("rgba16float",io.keyword,"rgba16float"),rgba32uint:new ra("rgba32uint",io.keyword,"rgba32uint"),rgba32sint:new ra("rgba32sint",io.keyword,"rgba32sint"),rgba32float:new ra("rgba32float",io.keyword,"rgba32float"),static_assert:new ra("static_assert",io.keyword,"static_assert")},sa.tokens={decimal_float_literal:new ra("decimal_float_literal",io.token,/((-?[0-9]*\.[0-9]+|-?[0-9]+\.[0-9]*)((e|E)(\+|-)?[0-9]+)?[fh]?)|(-?[0-9]+(e|E)(\+|-)?[0-9]+[fh]?)|(-?[0-9]+[fh])/),hex_float_literal:new ra("hex_float_literal",io.token,/-?0x((([0-9a-fA-F]*\.[0-9a-fA-F]+|[0-9a-fA-F]+\.[0-9a-fA-F]*)((p|P)(\+|-)?[0-9]+[fh]?)?)|([0-9a-fA-F]+(p|P)(\+|-)?[0-9]+[fh]?))/),int_literal:new ra("int_literal",io.token,/-?0x[0-9a-fA-F]+|0i?|-?[1-9][0-9]*i?/),uint_literal:new ra("uint_literal",io.token,/0x[0-9a-fA-F]+u|0u|[1-9][0-9]*u/),name:new ra("name",io.token,/([_\p{XID_Start}][\p{XID_Continue}]+)|([\p{XID_Start}])/u),ident:new ra("ident",io.token,/[_a-zA-Z][0-9a-zA-Z_]*/),and:new ra("and",io.token,"&"),and_and:new ra("and_and",io.token,"&&"),arrow:new ra("arrow ",io.token,"->"),attr:new ra("attr",io.token,"@"),forward_slash:new ra("forward_slash",io.token,"/"),bang:new ra("bang",io.token,"!"),bracket_left:new ra("bracket_left",io.token,"["),bracket_right:new ra("bracket_right",io.token,"]"),brace_left:new ra("brace_left",io.token,"{"),brace_right:new ra("brace_right",io.token,"}"),colon:new ra("colon",io.token,":"),comma:new ra("comma",io.token,","),equal:new ra("equal",io.token,"="),equal_equal:new ra("equal_equal",io.token,"=="),not_equal:new ra("not_equal",io.token,"!="),greater_than:new ra("greater_than",io.token,">"),greater_than_equal:new ra("greater_than_equal",io.token,">="),shift_right:new ra("shift_right",io.token,">>"),less_than:new ra("less_than",io.token,"<"),less_than_equal:new ra("less_than_equal",io.token,"<="),shift_left:new ra("shift_left",io.token,"<<"),modulo:new ra("modulo",io.token,"%"),minus:new ra("minus",io.token,"-"),minus_minus:new ra("minus_minus",io.token,"--"),period:new ra("period",io.token,"."),plus:new ra("plus",io.token,"+"),plus_plus:new ra("plus_plus",io.token,"++"),or:new ra("or",io.token,"|"),or_or:new ra("or_or",io.token,"||"),paren_left:new ra("paren_left",io.token,"("),paren_right:new ra("paren_right",io.token,")"),semicolon:new ra("semicolon",io.token,";"),star:new ra("star",io.token,"*"),tilde:new ra("tilde",io.token,"~"),underscore:new ra("underscore",io.token,"_"),xor:new ra("xor",io.token,"^"),plus_equal:new ra("plus_equal",io.token,"+="),minus_equal:new ra("minus_equal",io.token,"-="),times_equal:new ra("times_equal",io.token,"*="),division_equal:new ra("division_equal",io.token,"/="),modulo_equal:new ra("modulo_equal",io.token,"%="),and_equal:new ra("and_equal",io.token,"&="),or_equal:new ra("or_equal",io.token,"|="),xor_equal:new ra("xor_equal",io.token,"^="),shift_right_equal:new ra("shift_right_equal",io.token,">>="),shift_left_equal:new ra("shift_left_equal",io.token,"<<=")},sa.simpleTokens={"@":so.tokens.attr,"{":so.tokens.brace_left,"}":so.tokens.brace_right,":":so.tokens.colon,",":so.tokens.comma,"(":so.tokens.paren_left,")":so.tokens.paren_right,";":so.tokens.semicolon},sa.literalTokens={"&":so.tokens.and,"&&":so.tokens.and_and,"->":so.tokens.arrow,"/":so.tokens.forward_slash,"!":so.tokens.bang,"[":so.tokens.bracket_left,"]":so.tokens.bracket_right,"=":so.tokens.equal,"==":so.tokens.equal_equal,"!=":so.tokens.not_equal,">":so.tokens.greater_than,">=":so.tokens.greater_than_equal,">>":so.tokens.shift_right,"<":so.tokens.less_than,"<=":so.tokens.less_than_equal,"<<":so.tokens.shift_left,"%":so.tokens.modulo,"-":so.tokens.minus,"--":so.tokens.minus_minus,".":so.tokens.period,"+":so.tokens.plus,"++":so.tokens.plus_plus,"|":so.tokens.or,"||":so.tokens.or_or,"*":so.tokens.star,"~":so.tokens.tilde,_:so.tokens.underscore,"^":so.tokens.xor,"+=":so.tokens.plus_equal,"-=":so.tokens.minus_equal,"*=":so.tokens.times_equal,"/=":so.tokens.division_equal,"%=":so.tokens.modulo_equal,"&=":so.tokens.and_equal,"|=":so.tokens.or_equal,"^=":so.tokens.xor_equal,">>=":so.tokens.shift_right_equal,"<<=":so.tokens.shift_left_equal},sa.regexTokens={decimal_float_literal:so.tokens.decimal_float_literal,hex_float_literal:so.tokens.hex_float_literal,int_literal:so.tokens.int_literal,uint_literal:so.tokens.uint_literal,ident:so.tokens.ident},sa.storage_class=[so.keywords.function,so.keywords.private,so.keywords.workgroup,so.keywords.uniform,so.keywords.storage],sa.access_mode=[so.keywords.read,so.keywords.write,so.keywords.read_write],sa.sampler_type=[so.keywords.sampler,so.keywords.sampler_comparison],sa.sampled_texture_type=[so.keywords.texture_1d,so.keywords.texture_2d,so.keywords.texture_2d_array,so.keywords.texture_3d,so.keywords.texture_cube,so.keywords.texture_cube_array],sa.multisampled_texture_type=[so.keywords.texture_multisampled_2d],sa.storage_texture_type=[so.keywords.texture_storage_1d,so.keywords.texture_storage_2d,so.keywords.texture_storage_2d_array,so.keywords.texture_storage_3d],sa.depth_texture_type=[so.keywords.texture_depth_2d,so.keywords.texture_depth_2d_array,so.keywords.texture_depth_cube,so.keywords.texture_depth_cube_array,so.keywords.texture_depth_multisampled_2d],sa.texture_external_type=[so.keywords.texture_external],sa.any_texture_type=[...so.sampled_texture_type,...so.multisampled_texture_type,...so.storage_texture_type,...so.depth_texture_type,...so.texture_external_type],sa.texel_format=[so.keywords.r8unorm,so.keywords.r8snorm,so.keywords.r8uint,so.keywords.r8sint,so.keywords.r16uint,so.keywords.r16sint,so.keywords.r16float,so.keywords.rg8unorm,so.keywords.rg8snorm,so.keywords.rg8uint,so.keywords.rg8sint,so.keywords.r32uint,so.keywords.r32sint,so.keywords.r32float,so.keywords.rg16uint,so.keywords.rg16sint,so.keywords.rg16float,so.keywords.rgba8unorm,so.keywords.rgba8unorm_srgb,so.keywords.rgba8snorm,so.keywords.rgba8uint,so.keywords.rgba8sint,so.keywords.bgra8unorm,so.keywords.bgra8unorm_srgb,so.keywords.rgb10a2unorm,so.keywords.rg11b10float,so.keywords.rg32uint,so.keywords.rg32sint,so.keywords.rg32float,so.keywords.rgba16uint,so.keywords.rgba16sint,so.keywords.rgba16float,so.keywords.rgba32uint,so.keywords.rgba32sint,so.keywords.rgba32float],sa.const_literal=[so.tokens.int_literal,so.tokens.uint_literal,so.tokens.decimal_float_literal,so.tokens.hex_float_literal,so.keywords.true,so.keywords.false],sa.literal_or_ident=[so.tokens.ident,so.tokens.int_literal,so.tokens.uint_literal,so.tokens.decimal_float_literal,so.tokens.hex_float_literal,so.tokens.name],sa.element_count_expression=[so.tokens.int_literal,so.tokens.uint_literal,so.tokens.ident],sa.template_types=[so.keywords.vec2,so.keywords.vec3,so.keywords.vec4,so.keywords.mat2x2,so.keywords.mat2x3,so.keywords.mat2x4,so.keywords.mat3x2,so.keywords.mat3x3,so.keywords.mat3x4,so.keywords.mat4x2,so.keywords.mat4x3,so.keywords.mat4x4,so.keywords.atomic,so.keywords.bitcast,...so.any_texture_type],sa.attribute_name=[so.tokens.ident,so.keywords.block,so.keywords.diagnostic],sa.assignment_operators=[so.tokens.equal,so.tokens.plus_equal,so.tokens.minus_equal,so.tokens.times_equal,so.tokens.division_equal,so.tokens.modulo_equal,so.tokens.and_equal,so.tokens.or_equal,so.tokens.xor_equal,so.tokens.shift_right_equal,so.tokens.shift_left_equal],sa.increment_operators=[so.tokens.plus_plus,so.tokens.minus_minus];class ia{constructor(e,t,n,r,s){this.type=e,this.lexeme=t,this.line=n,this.start=r,this.end=s}toString(){return this.lexeme}isTemplateType(){return-1!=sa.template_types.indexOf(this.type)}isArrayType(){return this.type==sa.keywords.array}isArrayOrTemplateType(){return this.isArrayType()||this.isTemplateType()}}class oa{constructor(e){this._tokens=[],this._start=0,this._current=0,this._line=1,this._source=null!=e?e:""}scanTokens(){for(;!this._isAtEnd();)if(this._start=this._current,!this.scanToken())throw`Invalid syntax at line ${this._line}`;return this._tokens.push(new ia(sa.eof,"",this._line,this._current,this._current)),this._tokens}scanToken(){let e=this._advance();if("\n"==e)return this._line++,!0;if(this._isWhitespace(e))return!0;if("/"==e){if("/"==this._peekAhead()){for(;"\n"!=e;){if(this._isAtEnd())return!0;e=this._advance()}return this._line++,!0}if("*"==this._peekAhead()){this._advance();let t=1;for(;t>0;){if(this._isAtEnd())return!0;if(e=this._advance(),"\n"==e)this._line++;else if("*"==e){if("/"==this._peekAhead()&&(this._advance(),t--,0==t))return!0}else"/"==e&&"*"==this._peekAhead()&&(this._advance(),t++)}return!0}}const t=sa.simpleTokens[e];if(t)return this._addToken(t),!0;let n=sa.none;const r=this._isAlpha(e),s="_"===e;if(this._isAlphaNumeric(e)){let t=this._peekAhead();for(;this._isAlphaNumeric(t);)e+=this._advance(),t=this._peekAhead()}if(r){const t=sa.keywords[e];if(t)return this._addToken(t),!0}if(r||s)return this._addToken(sa.tokens.ident),!0;for(;;){let t=this._findType(e);const r=this._peekAhead();if("-"==e&&this._tokens.length>0){if("="==r)return this._current++,e+=r,this._addToken(sa.tokens.minus_equal),!0;if("-"==r)return this._current++,e+=r,this._addToken(sa.tokens.minus_minus),!0;const n=this._tokens.length-1;if((-1!=sa.literal_or_ident.indexOf(this._tokens[n].type)||this._tokens[n].type==sa.tokens.paren_right)&&">"!=r)return this._addToken(t),!0}if(">"==e&&(">"==r||"="==r)){let e=!1,n=this._tokens.length-1;for(let t=0;t<5&&n>=0&&-1===sa.assignment_operators.indexOf(this._tokens[n].type);++t,--n)if(this._tokens[n].type===sa.tokens.less_than){n>0&&this._tokens[n-1].isArrayOrTemplateType()&&(e=!0);break}if(e)return this._addToken(t),!0}if(t===sa.none){let r=e,s=0;const i=2;for(let e=0;e=this._source.length}_isAlpha(e){return!this._isNumeric(e)&&!this._isWhitespace(e)&&"_"!==e&&"."!==e&&"("!==e&&")"!==e&&"["!==e&&"]"!==e&&"{"!==e&&"}"!==e&&","!==e&&";"!==e&&":"!==e&&"="!==e&&"!"!==e&&"<"!==e&&">"!==e&&"+"!==e&&"-"!==e&&"*"!==e&&"/"!==e&&"%"!==e&&"&"!==e&&"|"!==e&&"^"!==e&&"~"!==e&&"@"!==e&&"#"!==e&&"?"!==e&&"'"!==e&&"`"!==e&&'"'!==e&&"\\"!==e&&"\n"!==e&&"\r"!==e&&"\t"!==e&&"\0"!==e}_isNumeric(e){return e>="0"&&e<="9"}_isAlphaNumeric(e){return this._isAlpha(e)||this._isNumeric(e)||"_"===e}_isWhitespace(e){return" "==e||"\t"==e||"\r"==e}_advance(e=0){let t=this._source[this._current];return e=e||0,e++,this._current+=e,t}_peekAhead(e=0){return e=e||0,this._current+e>=this._source.length?"\0":this._source[this._current+e]}_addToken(e){const t=this._source.substring(this._start,this._current);this._tokens.push(new ia(e,t,this._line,this._start,this._current))}}function aa(e){return Array.isArray(e)||(null==e?void 0:e.buffer)instanceof ArrayBuffer}const la=new Float32Array(1),ca=new Uint32Array(la.buffer),ua=new Uint32Array(la.buffer),ha=new Int32Array(1),da=new Float32Array(ha.buffer),fa=new Uint32Array(ha.buffer),pa=new Uint32Array(1),ga=new Float32Array(pa.buffer),ma=new Int32Array(pa.buffer);function _a(e,t,n){if(t===n)return e;if("f32"===t){if("i32"===n||"x32"===n)return la[0]=e,ca[0];if("u32"===n)return la[0]=e,ua[0]}else if("i32"===t||"x32"===t){if("f32"===n)return ha[0]=e,da[0];if("u32"===n)return ha[0]=e,fa[0]}else if("u32"===t){if("f32"===n)return pa[0]=e,ga[0];if("i32"===n||"x32"===n)return pa[0]=e,ma[0]}return e}class ya{constructor(e){this.resources=null,this.inUse=!1,this.info=null,this.node=e}}class ba{constructor(e,t){this.align=e,this.size=t}}class va{constructor(){this.uniforms=[],this.storage=[],this.textures=[],this.samplers=[],this.aliases=[],this.overrides=[],this.structs=[],this.entry=new Pi,this.functions=[],this._types=new Map,this._functions=new Map}_isStorageTexture(e){return"texture_storage_1d"==e.name||"texture_storage_2d"==e.name||"texture_storage_2d_array"==e.name||"texture_storage_3d"==e.name}updateAST(e){for(const t of e)t instanceof Xi&&this._functions.set(t.name,new ya(t));for(const t of e)if(t instanceof Eo){const e=this.getTypeInfo(t,null);e instanceof _i&&this.structs.push(e)}for(const t of e)if(t instanceof _o)this.aliases.push(this._getAliasInfo(t));else{if(t instanceof Ji){const e=t,n=this._getAttributeNum(e.attributes,"id",0),r=null!=e.type?this.getTypeInfo(e.type,e.attributes):null;this.overrides.push(new Ri(e.name,r,e.attributes,n));continue}if(this._isUniformVar(t)){const e=t,n=this._getAttributeNum(e.attributes,"group",0),r=this._getAttributeNum(e.attributes,"binding",0),s=this.getTypeInfo(e.type,e.attributes),i=new Ei(e.name,s,n,r,e.attributes,xi.Uniform,e.access);i.access||(i.access="read"),this.uniforms.push(i);continue}if(this._isStorageVar(t)){const e=t,n=this._getAttributeNum(e.attributes,"group",0),r=this._getAttributeNum(e.attributes,"binding",0),s=this.getTypeInfo(e.type,e.attributes),i=this._isStorageTexture(s),o=new Ei(e.name,s,n,r,e.attributes,i?xi.StorageTexture:xi.Storage,e.access);o.access||(o.access="read"),this.storage.push(o);continue}if(this._isTextureVar(t)){const e=t,n=this._getAttributeNum(e.attributes,"group",0),r=this._getAttributeNum(e.attributes,"binding",0),s=this.getTypeInfo(e.type,e.attributes),i=this._isStorageTexture(s),o=new Ei(e.name,s,n,r,e.attributes,i?xi.StorageTexture:xi.Texture,e.access);o.access||(o.access="read"),i?this.storage.push(o):this.textures.push(o);continue}if(this._isSamplerVar(t)){const e=t,n=this._getAttributeNum(e.attributes,"group",0),r=this._getAttributeNum(e.attributes,"binding",0),s=this.getTypeInfo(e.type,e.attributes),i=new Ei(e.name,s,n,r,e.attributes,xi.Sampler,e.access);this.samplers.push(i);continue}}for(const t of e)if(t instanceof Xi){const e=this._getAttribute(t,"vertex"),n=this._getAttribute(t,"fragment"),r=this._getAttribute(t,"compute"),s=e||n||r,i=new ki(t.name,null==s?void 0:s.name,t.attributes);i.attributes=t.attributes,i.startLine=t.startLine,i.endLine=t.endLine,this.functions.push(i),this._functions.get(t.name).info=i,s&&(this._functions.get(t.name).inUse=!0,i.inUse=!0,i.resources=this._findResources(t,!!s),i.inputs=this._getInputs(t.args),i.outputs=this._getOutputs(t.returnType),this.entry[s.name].push(i)),i.arguments=t.args.map(e=>new Ci(e.name,this.getTypeInfo(e.type,e.attributes),e.attributes)),i.returnType=t.returnType?this.getTypeInfo(t.returnType,t.attributes):null;continue}for(const t of this._functions.values())t.info&&(t.info.inUse=t.inUse,this._addCalls(t.node,t.info.calls));for(const t of this._functions.values())t.node.search(e=>{var n,r,s;if(e instanceof Xo){if(e.value)if(aa(e.value))for(const i of e.value)for(const e of this.overrides)i===e.name&&(null===(n=t.info)||void 0===n||n.overrides.push(e));else for(const i of this.overrides)e.value===i.name&&(null===(r=t.info)||void 0===r||r.overrides.push(i))}else if(e instanceof Mo)for(const i of this.overrides)e.name===i.name&&(null===(s=t.info)||void 0===s||s.overrides.push(i))});for(const t of this.uniforms)this._markStructsInUse(t.type);for(const t of this.storage)this._markStructsInUse(t.type)}getFunctionInfo(e){for(const t of this.functions)if(t.name==e)return t;return null}getStructInfo(e){for(const t of this.structs)if(t.name==e)return t;return null}getOverrideInfo(e){for(const t of this.overrides)if(t.name==e)return t;return null}_markStructsInUse(e){if(e)if(e.isStruct){if(e.inUse=!0,e.members)for(const t of e.members)this._markStructsInUse(t.type)}else if(e.isArray)this._markStructsInUse(e.format);else if(e.isTemplate)e.format&&this._markStructsInUse(e.format);else{const t=this._getAlias(e.name);t&&this._markStructsInUse(t)}}_addCalls(e,t){var n;for(const r of e.calls){const e=null===(n=this._functions.get(r.name))||void 0===n?void 0:n.info;e&&t.add(e)}}findResource(e,t,n){if(n){for(const r of this.entry.compute)if(r.name===n)for(const n of r.resources)if(n.group==e&&n.binding==t)return n;for(const r of this.entry.vertex)if(r.name===n)for(const n of r.resources)if(n.group==e&&n.binding==t)return n;for(const r of this.entry.fragment)if(r.name===n)for(const n of r.resources)if(n.group==e&&n.binding==t)return n}for(const r of this.uniforms)if(r.group==e&&r.binding==t)return r;for(const r of this.storage)if(r.group==e&&r.binding==t)return r;for(const r of this.textures)if(r.group==e&&r.binding==t)return r;for(const r of this.samplers)if(r.group==e&&r.binding==t)return r;return null}_findResource(e){for(const t of this.uniforms)if(t.name==e)return t;for(const t of this.storage)if(t.name==e)return t;for(const t of this.textures)if(t.name==e)return t;for(const t of this.samplers)if(t.name==e)return t;return null}_markStructsFromAST(e){const t=this.getTypeInfo(e,null);this._markStructsInUse(t)}_findResources(e,t){const n=[],r=this,s=[];return e.search(i=>{if(i instanceof zi)s.push({});else if(i instanceof Wi)s.pop();else if(i instanceof Qi){const e=i;t&&null!==e.type&&this._markStructsFromAST(e.type),s.length>0&&(s[s.length-1][e.name]=e)}else if(i instanceof Po){const e=i;t&&null!==e.type&&this._markStructsFromAST(e.type)}else if(i instanceof eo){const e=i;t&&null!==e.type&&this._markStructsFromAST(e.type),s.length>0&&(s[s.length-1][e.name]=e)}else if(i instanceof Mo){const e=i;if(s.length>0&&s[s.length-1][e.name])return;const t=r._findResource(e.name);t&&n.push(t)}else if(i instanceof Io){const s=i,o=r._functions.get(s.name);o&&(t&&(o.inUse=!0),e.calls.add(o.node),null===o.resources&&(o.resources=r._findResources(o.node,t)),n.push(...o.resources))}else if(i instanceof lo){const s=i,o=r._functions.get(s.name);o&&(t&&(o.inUse=!0),e.calls.add(o.node),null===o.resources&&(o.resources=r._findResources(o.node,t)),n.push(...o.resources))}}),[...new Map(n.map(e=>[e.name,e])).values()]}getBindGroups(){const e=[];function t(t,n){t>=e.length&&(e.length=t+1),void 0===e[t]&&(e[t]=[]),n>=e[t].length&&(e[t].length=n+1)}for(const n of this.uniforms)t(n.group,n.binding),e[n.group][n.binding]=n;for(const n of this.storage)t(n.group,n.binding),e[n.group][n.binding]=n;for(const n of this.textures)t(n.group,n.binding),e[n.group][n.binding]=n;for(const n of this.samplers)t(n.group,n.binding),e[n.group][n.binding]=n;return e}_getOutputs(e,t=void 0){if(void 0===t&&(t=[]),e instanceof Eo)this._getStructOutputs(e,t);else{const n=this._getOutputInfo(e);null!==n&&t.push(n)}return t}_getStructOutputs(e,t){for(const n of e.members)if(n.type instanceof Eo)this._getStructOutputs(n.type,t);else{const e=this._getAttribute(n,"location")||this._getAttribute(n,"builtin");if(null!==e){const r=this.getTypeInfo(n.type,n.type.attributes),s=this._parseInt(e.value),i=new Ai(n.name,r,e.name,s);t.push(i)}}}_getOutputInfo(e){const t=this._getAttribute(e,"location")||this._getAttribute(e,"builtin");if(null!==t){const n=this.getTypeInfo(e,e.attributes),r=this._parseInt(t.value);return new Ai("",n,t.name,r)}return null}_getInputs(e,t=void 0){void 0===t&&(t=[]);for(const n of e)if(n.type instanceof Eo)this._getStructInputs(n.type,t);else{const e=this._getInputInfo(n);null!==e&&t.push(e)}return t}_getStructInputs(e,t){for(const n of e.members)if(n.type instanceof Eo)this._getStructInputs(n.type,t);else{const e=this._getInputInfo(n);null!==e&&t.push(e)}}_getInputInfo(e){const t=this._getAttribute(e,"location")||this._getAttribute(e,"builtin");if(null!==t){const n=this._getAttribute(e,"interpolation"),r=this.getTypeInfo(e.type,e.attributes),s=this._parseInt(t.value),i=new Si(e.name,r,t.name,s);return null!==n&&(i.interpolation=this._parseString(n.value)),i}return null}_parseString(e){return e instanceof Array&&(e=e[0]),e}_parseInt(e){e instanceof Array&&(e=e[0]);const t=parseInt(e);return isNaN(t)?e:t}_getAlias(e){for(const t of this.aliases)if(t.name==e)return t.type;return null}_getAliasInfo(e){return new Ti(e.name,this.getTypeInfo(e.type,null))}getTypeInfoByName(e){for(const t of this.structs)if(t.name==e)return t;for(const t of this.aliases)if(t.name==e)return t.type;return null}getTypeInfo(e,t=null){if(this._types.has(e))return this._types.get(e);if(e instanceof So){const n=e.type?this.getTypeInfo(e.type,e.attributes):null,r=new bi(e.name,n,t);return this._types.set(e,r),this._updateTypeInfo(r),r}if(e instanceof Ao){const n=e,r=n.format?this.getTypeInfo(n.format,n.attributes):null,s=new yi(n.name,t);return s.format=r,s.count=n.count,this._types.set(e,s),this._updateTypeInfo(s),s}if(e instanceof Eo){const n=e,r=new _i(n.name,t);r.startLine=n.startLine,r.endLine=n.endLine;for(const e of n.members){const t=this.getTypeInfo(e.type,e.attributes);r.members.push(new mi(e.name,t,e.attributes))}return this._types.set(e,r),this._updateTypeInfo(r),r}if(e instanceof Ro){const n=e,r=n.format instanceof xo,s=n.format?r?this.getTypeInfo(n.format,null):new gi(n.format,null):null,i=new vi(n.name,s,t,n.access);return this._types.set(e,i),this._updateTypeInfo(i),i}if(e instanceof To){const n=e,r=n.format?this.getTypeInfo(n.format,null):null,s=new vi(n.name,r,t,n.access);return this._types.set(e,s),this._updateTypeInfo(s),s}const n=new gi(e.name,t);return this._types.set(e,n),this._updateTypeInfo(n),n}_updateTypeInfo(e){var t,n,r;const s=this._getTypeSize(e);if(e.size=null!==(t=null==s?void 0:s.size)&&void 0!==t?t:0,e instanceof yi&&e.format){const t=this._getTypeSize(e.format);e.stride=Math.max(null!==(n=null==t?void 0:t.size)&&void 0!==n?n:0,null!==(r=null==t?void 0:t.align)&&void 0!==r?r:0),this._updateTypeInfo(e.format)}e instanceof bi&&this._updateTypeInfo(e.format),e instanceof _i&&this._updateStructInfo(e)}_updateStructInfo(e){var t;let n=0,r=0,s=0,i=0;for(let o=0,a=e.members.length;oe.name),va._samplerTypes=sa.sampler_type.map(e=>e.name);let xa=0;class wa{constructor(e,t,n){this.id=xa++,this.name=e,this.value=t,this.node=n}clone(){return new wa(this.name,this.value,this.node)}}class Ea{constructor(e){this.id=xa++,this.name=e.name,this.node=e}clone(){return new Ea(this.node)}}class Ta{constructor(e){this.parent=null,this.variables=new Map,this.functions=new Map,this.currentFunctionName="",this.id=xa++,e&&(this.parent=e,this.currentFunctionName=e.currentFunctionName)}getVariable(e){var t;return this.variables.has(e)?null!==(t=this.variables.get(e))&&void 0!==t?t:null:this.parent?this.parent.getVariable(e):null}getFunction(e){var t;return this.functions.has(e)?null!==(t=this.functions.get(e))&&void 0!==t?t:null:this.parent?this.parent.getFunction(e):null}createVariable(e,t,n){this.variables.set(e,new wa(e,t,null!=n?n:null))}setVariable(e,t,n){const r=this.getVariable(e);null!==r?r.value=t:this.createVariable(e,t,n)}getVariableValue(e){var t;const n=this.getVariable(e);return null!==(t=null==n?void 0:n.value)&&void 0!==t?t:null}clone(){return new Ta(this)}}class Sa{evalExpression(e,t){return null}getTypeInfo(e){return null}getVariableName(e,t){return""}}class Aa{constructor(e){this.exec=e}getTypeInfo(e){return this.exec.getTypeInfo(e)}All(e,t){const n=this.exec.evalExpression(e.args[0],t);let r=!0;if(n instanceof Jo)return n.data.forEach(e=>{e||(r=!1)}),new Zo(r?1:0,this.getTypeInfo("bool"));throw new Error(`All() expects a vector argument. Line ${e.line}`)}Any(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo){const e=n.data.some(e=>e);return new Zo(e?1:0,this.getTypeInfo("bool"))}throw new Error(`Any() expects a vector argument. Line ${e.line}`)}Select(e,t){const n=this.exec.evalExpression(e.args[2],t);if(!(n instanceof Zo))throw new Error(`Select() expects a bool condition. Line ${e.line}`);return n.value?this.exec.evalExpression(e.args[1],t):this.exec.evalExpression(e.args[0],t)}ArrayLength(e,t){let n=e.args[0];n instanceof Bo&&(n=n.right);const r=this.exec.evalExpression(n,t);if(r instanceof ta&&0===r.typeInfo.size){const e=r.typeInfo,t=r.buffer.byteLength/e.stride;return new Zo(t,this.getTypeInfo("u32"))}return new Zo(r.typeInfo.size,this.getTypeInfo("u32"))}Abs(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.abs(e)),n.typeInfo);const r=n;return new Zo(Math.abs(r.value),r.typeInfo)}Acos(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.acos(e)),n.typeInfo);const r=n;return new Zo(Math.acos(r.value),n.typeInfo)}Acosh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.acosh(e)),n.typeInfo);const r=n;return new Zo(Math.acosh(r.value),n.typeInfo)}Asin(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.asin(e)),n.typeInfo);const r=n;return new Zo(Math.asin(r.value),n.typeInfo)}Asinh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.asinh(e)),n.typeInfo);const r=n;return new Zo(Math.asinh(r.value),n.typeInfo)}Atan(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.atan(e)),n.typeInfo);const r=n;return new Zo(Math.atan(r.value),n.typeInfo)}Atanh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.atanh(e)),n.typeInfo);const r=n;return new Zo(Math.atanh(r.value),n.typeInfo)}Atan2(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Jo&&r instanceof Jo)return new Jo(n.data.map((e,t)=>Math.atan2(e,r.data[t])),n.typeInfo);const s=n,i=r;return new Zo(Math.atan2(s.value,i.value),n.typeInfo)}Ceil(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.ceil(e)),n.typeInfo);const r=n;return new Zo(Math.ceil(r.value),n.typeInfo)}_clamp(e,t,n){return Math.min(Math.max(e,t),n)}Clamp(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),s=this.exec.evalExpression(e.args[2],t);if(n instanceof Jo&&r instanceof Jo&&s instanceof Jo)return new Jo(n.data.map((e,t)=>this._clamp(e,r.data[t],s.data[t])),n.typeInfo);const i=n,o=r,a=s;return new Zo(this._clamp(i.value,o.value,a.value),n.typeInfo)}Cos(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.cos(e)),n.typeInfo);const r=n;return new Zo(Math.cos(r.value),n.typeInfo)}Cosh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.cosh(e)),n.typeInfo);const r=n;return new Zo(Math.cos(r.value),n.typeInfo)}CountLeadingZeros(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.clz32(e)),n.typeInfo);const r=n;return new Zo(Math.clz32(r.value),n.typeInfo)}_countOneBits(e){let t=0;for(;0!==e;)1&e&&t++,e>>=1;return t}CountOneBits(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>this._countOneBits(e)),n.typeInfo);const r=n;return new Zo(this._countOneBits(r.value),n.typeInfo)}_countTrailingZeros(e){if(0===e)return 32;let t=0;for(;!(1&e);)e>>=1,t++;return t}CountTrailingZeros(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>this._countTrailingZeros(e)),n.typeInfo);const r=n;return new Zo(this._countTrailingZeros(r.value),n.typeInfo)}Cross(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Jo&&r instanceof Jo){if(3!==n.data.length||3!==r.data.length)return null;const e=n.data,t=r.data;return new Jo([e[1]*t[2]-t[1]*e[2],e[2]*t[0]-t[2]*e[0],e[0]*t[1]-t[0]*e[1]],n.typeInfo)}return null}Degrees(e,t){const n=this.exec.evalExpression(e.args[0],t),r=180/Math.PI;return n instanceof Jo?new Jo(n.data.map(e=>e*r),n.typeInfo):new Zo(n.value*r,this.getTypeInfo("f32"))}Determinant(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof ea){const e=n.data,t=n.typeInfo.getTypeName(),r=t.endsWith("h")?this.getTypeInfo("f16"):this.getTypeInfo("f32");if("mat2x2"===t||"mat2x2f"===t||"mat2x2h"===t)return new Zo(e[0]*e[3]-e[1]*e[2],r);if("mat2x3"===t||"mat2x3f"===t||"mat2x3h"===t)return new Zo(e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6]),r);if("mat2x4"===t||"mat2x4f"===t||"mat2x4h"===t);else if("mat3x2"===t||"mat3x2f"===t||"mat3x2h"===t);else if("mat3x3"===t||"mat3x3f"===t||"mat3x3h"===t)return new Zo(e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6]),r)}return null}Distance(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Jo&&r instanceof Jo){let e=0;for(let t=0;tMath.exp(e)),n.typeInfo);const r=n;return new Zo(Math.exp(r.value),n.typeInfo)}Exp2(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.pow(2,e)),n.typeInfo);const r=n;return new Zo(Math.pow(2,r.value),n.typeInfo)}ExtractBits(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),s=this.exec.evalExpression(e.args[2],t);if("u32"!==r.typeInfo.name&&"x32"!==r.typeInfo.name)return null;if("u32"!==s.typeInfo.name&&"x32"!==s.typeInfo.name)return null;const i=r.value,o=s.value;if(n instanceof Jo)return new Jo(n.data.map(e=>e>>i&(1<>i&(1<-e),n.typeInfo)}return null}_firstLeadingBit(e){return 0===e?-1:31-Math.clz32(e)}FirstLeadingBit(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>this._firstLeadingBit(e)),n.typeInfo);const r=n;return new Zo(this._firstLeadingBit(r.value),n.typeInfo)}_firstTrailingBit(e){return 0===e?-1:Math.log2(e&-e)}FirstTrailingBit(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>this._firstTrailingBit(e)),n.typeInfo);const r=n;return new Zo(this._firstTrailingBit(r.value),n.typeInfo)}Floor(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.floor(e)),n.typeInfo);const r=n;return new Zo(Math.floor(r.value),n.typeInfo)}Fma(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),s=this.exec.evalExpression(e.args[2],t);if(n instanceof Jo&&r instanceof Jo&&s instanceof Jo)return n.data.length!==r.data.length||n.data.length!==s.data.length?null:new Jo(n.data.map((e,t)=>e*r.data[t]+s.data[t]),n.typeInfo);const i=n,o=r,a=s;return new Zo(i.value*o.value+a.value,i.typeInfo)}Fract(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>e-Math.floor(e)),n.typeInfo);const r=n;return new Zo(r.value-Math.floor(r.value),n.typeInfo)}Frexp(e,t){return null}InsertBits(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),s=this.exec.evalExpression(e.args[2],t),i=this.exec.evalExpression(e.args[3],t);if("u32"!==s.typeInfo.name&&"x32"!==s.typeInfo.name)return null;const o=s.value,a=(1<e&l|r.data[t]<1/Math.sqrt(e)),n.typeInfo);const r=n;return new Zo(1/Math.sqrt(r.value),n.typeInfo)}Ldexp(e,t){return null}Length(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo){let e=0;return n.data.forEach(t=>{e+=t*t}),new Zo(Math.sqrt(e),this.getTypeInfo("f32"))}const r=n;return new Zo(Math.abs(r.value),n.typeInfo)}Log(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.log(e)),n.typeInfo);const r=n;return new Zo(Math.log(r.value),n.typeInfo)}Log2(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.log2(e)),n.typeInfo);const r=n;return new Zo(Math.log2(r.value),n.typeInfo)}Max(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Jo&&r instanceof Jo)return new Jo(n.data.map((e,t)=>Math.max(e,r.data[t])),n.typeInfo);const s=n,i=r;return new Zo(Math.max(s.value,i.value),n.typeInfo)}Min(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Jo&&r instanceof Jo)return new Jo(n.data.map((e,t)=>Math.min(e,r.data[t])),n.typeInfo);const s=n,i=r;return new Zo(Math.min(s.value,i.value),n.typeInfo)}Mix(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),s=this.exec.evalExpression(e.args[2],t);if(n instanceof Jo&&r instanceof Jo&&s instanceof Jo)return new Jo(n.data.map((e,t)=>n.data[t]*(1-s.data[t])+r.data[t]*s.data[t]),n.typeInfo);const i=r,o=s;return new Zo(n.value*(1-o.value)+i.value*o.value,n.typeInfo)}Modf(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Jo&&r instanceof Jo)return new Jo(n.data.map((e,t)=>e%r.data[t]),n.typeInfo);const s=r;return new Zo(n.value%s.value,n.typeInfo)}Normalize(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo){const r=this.Length(e,t).value;return new Jo(n.data.map(e=>e/r),n.typeInfo)}return null}Pow(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Jo&&r instanceof Jo)return new Jo(n.data.map((e,t)=>Math.pow(e,r.data[t])),n.typeInfo);const s=n,i=r;return new Zo(Math.pow(s.value,i.value),n.typeInfo)}QuantizeToF16(e,t){const n=this.exec.evalExpression(e.args[0],t);return n instanceof Jo?new Jo(n.data.map(e=>e),n.typeInfo):new Zo(n.value,n.typeInfo)}Radians(e,t){const n=this.exec.evalExpression(e.args[0],t);return n instanceof Jo?new Jo(n.data.map(e=>e*Math.PI/180),n.typeInfo):new Zo(n.value*Math.PI/180,this.getTypeInfo("f32"))}Reflect(e,t){let n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(n instanceof Jo&&r instanceof Jo){const e=this._dot(n.data,r.data);return new Jo(n.data.map((t,n)=>t-2*e*r.data[n]),n.typeInfo)}return null}Refract(e,t){let n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),s=this.exec.evalExpression(e.args[2],t);if(n instanceof Jo&&r instanceof Jo&&s instanceof Zo){const e=this._dot(r.data,n.data);return new Jo(n.data.map((t,n)=>{const i=1-s.value*s.value*(1-e*e);if(i<0)return 0;const o=Math.sqrt(i);return s.value*t-(s.value*e+o)*r.data[n]}),n.typeInfo)}return null}ReverseBits(e,t){return null}Round(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.round(e)),n.typeInfo);const r=n;return new Zo(Math.round(r.value),n.typeInfo)}Saturate(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.min(Math.max(e,0),1)),n.typeInfo);const r=n;return new Zo(Math.min(Math.max(r.value,0),1),n.typeInfo)}Sign(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.sign(e)),n.typeInfo);const r=n;return new Zo(Math.sign(r.value),n.typeInfo)}Sin(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.sin(e)),n.typeInfo);const r=n;return new Zo(Math.sin(r.value),n.typeInfo)}Sinh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.sinh(e)),n.typeInfo);const r=n;return new Zo(Math.sinh(r.value),n.typeInfo)}_smoothstep(e,t,n){const r=Math.min(Math.max((n-e)/(t-e),0),1);return r*r*(3-2*r)}SmoothStep(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t),s=this.exec.evalExpression(e.args[2],t);if(s instanceof Jo&&n instanceof Jo&&r instanceof Jo)return new Jo(s.data.map((e,t)=>this._smoothstep(n.data[t],r.data[t],e)),s.typeInfo);const i=n,o=r,a=s;return new Zo(this._smoothstep(i.value,o.value,a.value),s.typeInfo)}Sqrt(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.sqrt(e)),n.typeInfo);const r=n;return new Zo(Math.sqrt(r.value),n.typeInfo)}Step(e,t){const n=this.exec.evalExpression(e.args[0],t),r=this.exec.evalExpression(e.args[1],t);if(r instanceof Jo&&n instanceof Jo)return new Jo(r.data.map((e,t)=>eMath.tan(e)),n.typeInfo);const r=n;return new Zo(Math.tan(r.value),n.typeInfo)}Tanh(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.tanh(e)),n.typeInfo);const r=n;return new Zo(Math.tanh(r.value),n.typeInfo)}_getTransposeType(e){const t=e.getTypeName();return"mat2x2f"===t||"mat2x2h"===t?e:"mat2x3f"===t?this.getTypeInfo("mat3x2f"):"mat2x3h"===t?this.getTypeInfo("mat3x2h"):"mat2x4f"===t?this.getTypeInfo("mat4x2f"):"mat2x4h"===t?this.getTypeInfo("mat4x2h"):"mat3x2f"===t?this.getTypeInfo("mat2x3f"):"mat3x2h"===t?this.getTypeInfo("mat2x3h"):"mat3x3f"===t||"mat3x3h"===t?e:"mat3x4f"===t?this.getTypeInfo("mat4x3f"):"mat3x4h"===t?this.getTypeInfo("mat4x3h"):"mat4x2f"===t?this.getTypeInfo("mat2x4f"):"mat4x2h"===t?this.getTypeInfo("mat2x4h"):"mat4x3f"===t?this.getTypeInfo("mat3x4f"):"mat4x3h"===t?this.getTypeInfo("mat3x4h"):e}Transpose(e,t){const n=this.exec.evalExpression(e.args[0],t);if(!(n instanceof ea))return null;const r=this._getTransposeType(n.typeInfo);if("mat2x2"===n.typeInfo.name||"mat2x2f"===n.typeInfo.name||"mat2x2h"===n.typeInfo.name){const e=n.data;return new ea([e[0],e[2],e[1],e[3]],r)}if("mat2x3"===n.typeInfo.name||"mat2x3f"===n.typeInfo.name||"mat2x3h"===n.typeInfo.name){const e=n.data;return new ea([e[0],e[3],e[6],e[1],e[4],e[7]],r)}if("mat2x4"===n.typeInfo.name||"mat2x4f"===n.typeInfo.name||"mat2x4h"===n.typeInfo.name){const e=n.data;return new ea([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13]],r)}if("mat3x2"===n.typeInfo.name||"mat3x2f"===n.typeInfo.name||"mat3x2h"===n.typeInfo.name){const e=n.data;return new ea([e[0],e[3],e[1],e[4],e[2],e[5]],r)}if("mat3x3"===n.typeInfo.name||"mat3x3f"===n.typeInfo.name||"mat3x3h"===n.typeInfo.name){const e=n.data;return new ea([e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8]],r)}if("mat3x4"===n.typeInfo.name||"mat3x4f"===n.typeInfo.name||"mat3x4h"===n.typeInfo.name){const e=n.data;return new ea([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14]],r)}if("mat4x2"===n.typeInfo.name||"mat4x2f"===n.typeInfo.name||"mat4x2h"===n.typeInfo.name){const e=n.data;return new ea([e[0],e[4],e[1],e[5],e[2],e[6]],r)}if("mat4x3"===n.typeInfo.name||"mat4x3f"===n.typeInfo.name||"mat4x3h"===n.typeInfo.name){const e=n.data;return new ea([e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]],r)}if("mat4x4"===n.typeInfo.name||"mat4x4f"===n.typeInfo.name||"mat4x4h"===n.typeInfo.name){const e=n.data;return new ea([e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15]],r)}return null}Trunc(e,t){const n=this.exec.evalExpression(e.args[0],t);if(n instanceof Jo)return new Jo(n.data.map(e=>Math.trunc(e)),n.typeInfo);const r=n;return new Zo(Math.trunc(r.value),n.typeInfo)}Dpdx(e,t){return null}DpdxCoarse(e,t){return null}DpdxFine(e,t){return null}Dpdy(e,t){return null}DpdyCoarse(e,t){return null}DpdyFine(e,t){return null}Fwidth(e,t){return null}FwidthCoarse(e,t){return null}FwidthFine(e,t){return null}TextureDimensions(e,t){const n=e.args[0],r=e.args.length>1?this.exec.evalExpression(e.args[1],t).value:0;if(n instanceof Mo){const e=n.name,s=t.getVariableValue(e);if(s instanceof na){if(r<0||r>=s.mipLevelCount)return null;const e=s.getMipLevelSize(r),t=s.dimension;return"1d"===t?new Zo(e[0],this.getTypeInfo("u32")):"3d"===t?new Jo(e,this.getTypeInfo("vec3u")):"2d"===t?new Jo(e.slice(0,2),this.getTypeInfo("vec2u")):null}return null}return null}TextureGather(e,t){return null}TextureGatherCompare(e,t){return null}TextureLoad(e,t){const n=e.args[0],r=this.exec.evalExpression(e.args[1],t),s=e.args.length>2?this.exec.evalExpression(e.args[2],t).value:0;if(!(r instanceof Jo)||2!==r.data.length)return null;if(n instanceof Mo){const e=n.name,i=t.getVariableValue(e);if(i instanceof na){const e=Math.floor(r.data[0]),t=Math.floor(r.data[1]);if(e<0||e>=i.width||t<0||t>=i.height)return null;const n=i.getPixel(e,t,0,s);return null===n?null:new Jo(n,this.getTypeInfo("vec4f"))}return null}return null}TextureNumLayers(e,t){const n=e.args[0];if(n instanceof Mo){const e=n.name,r=t.getVariableValue(e);return r instanceof na?new Zo(r.depthOrArrayLayers,this.getTypeInfo("u32")):null}return null}TextureNumLevels(e,t){const n=e.args[0];if(n instanceof Mo){const e=n.name,r=t.getVariableValue(e);return r instanceof na?new Zo(r.mipLevelCount,this.getTypeInfo("u32")):null}return null}TextureNumSamples(e,t){const n=e.args[0];if(n instanceof Mo){const e=n.name,r=t.getVariableValue(e);return r instanceof na?new Zo(r.sampleCount,this.getTypeInfo("u32")):null}return null}TextureSample(e,t){return null}TextureSampleBias(e,t){return null}TextureSampleCompare(e,t){return null}TextureSampleCompareLevel(e,t){return null}TextureSampleGrad(e,t){return null}TextureSampleLevel(e,t){return null}TextureSampleBaseClampToEdge(e,t){return null}TextureStore(e,t){const n=e.args[0],r=this.exec.evalExpression(e.args[1],t),s=4===e.args.length?this.exec.evalExpression(e.args[2],t).value:0,i=4===e.args.length?this.exec.evalExpression(e.args[3],t).data:this.exec.evalExpression(e.args[2],t).data;if(4!==i.length)return null;if(!(r instanceof Jo)||2!==r.data.length)return null;if(n instanceof Mo){const e=n.name,o=t.getVariableValue(e);if(o instanceof na){const e=o.getMipLevelSize(0),t=Math.floor(r.data[0]),n=Math.floor(r.data[1]);return t<0||t>=e[0]||n<0||n>=e[1]||o.setPixel(t,n,0,s,Array.from(i)),null}return null}return null}AtomicLoad(e,t){let n=e.args[0];n instanceof Bo&&(n=n.right);const r=this.exec.getVariableName(n,t);return t.getVariable(r).value.getSubData(this.exec,n.postfix,t)}AtomicStore(e,t){let n=e.args[0];n instanceof Bo&&(n=n.right);const r=this.exec.getVariableName(n,t),s=t.getVariable(r);let i=e.args[1];const o=this.exec.evalExpression(i,t),a=s.value.getSubData(this.exec,n.postfix,t);return a instanceof Zo&&o instanceof Zo&&(a.value=o.value),s.value instanceof ta&&s.value.setDataValue(this.exec,a,n.postfix,t),null}AtomicAdd(e,t){let n=e.args[0];n instanceof Bo&&(n=n.right);const r=this.exec.getVariableName(n,t),s=t.getVariable(r);let i=e.args[1];const o=this.exec.evalExpression(i,t),a=s.value.getSubData(this.exec,n.postfix,t),l=new Zo(a.value,a.typeInfo);return a instanceof Zo&&o instanceof Zo&&(a.value+=o.value),s.value instanceof ta&&s.value.setDataValue(this.exec,a,n.postfix,t),l}AtomicSub(e,t){let n=e.args[0];n instanceof Bo&&(n=n.right);const r=this.exec.getVariableName(n,t),s=t.getVariable(r);let i=e.args[1];const o=this.exec.evalExpression(i,t),a=s.value.getSubData(this.exec,n.postfix,t),l=new Zo(a.value,a.typeInfo);return a instanceof Zo&&o instanceof Zo&&(a.value-=o.value),s.value instanceof ta&&s.value.setDataValue(this.exec,a,n.postfix,t),l}AtomicMax(e,t){let n=e.args[0];n instanceof Bo&&(n=n.right);const r=this.exec.getVariableName(n,t),s=t.getVariable(r);let i=e.args[1];const o=this.exec.evalExpression(i,t),a=s.value.getSubData(this.exec,n.postfix,t),l=new Zo(a.value,a.typeInfo);return a instanceof Zo&&o instanceof Zo&&(a.value=Math.max(a.value,o.value)),s.value instanceof ta&&s.value.setDataValue(this.exec,a,n.postfix,t),l}AtomicMin(e,t){let n=e.args[0];n instanceof Bo&&(n=n.right);const r=this.exec.getVariableName(n,t),s=t.getVariable(r);let i=e.args[1];const o=this.exec.evalExpression(i,t),a=s.value.getSubData(this.exec,n.postfix,t),l=new Zo(a.value,a.typeInfo);return a instanceof Zo&&o instanceof Zo&&(a.value=Math.min(a.value,o.value)),s.value instanceof ta&&s.value.setDataValue(this.exec,a,n.postfix,t),l}AtomicAnd(e,t){let n=e.args[0];n instanceof Bo&&(n=n.right);const r=this.exec.getVariableName(n,t),s=t.getVariable(r);let i=e.args[1];const o=this.exec.evalExpression(i,t),a=s.value.getSubData(this.exec,n.postfix,t),l=new Zo(a.value,a.typeInfo);return a instanceof Zo&&o instanceof Zo&&(a.value=a.value&o.value),s.value instanceof ta&&s.value.setDataValue(this.exec,a,n.postfix,t),l}AtomicOr(e,t){let n=e.args[0];n instanceof Bo&&(n=n.right);const r=this.exec.getVariableName(n,t),s=t.getVariable(r);let i=e.args[1];const o=this.exec.evalExpression(i,t),a=s.value.getSubData(this.exec,n.postfix,t),l=new Zo(a.value,a.typeInfo);return a instanceof Zo&&o instanceof Zo&&(a.value=a.value|o.value),s.value instanceof ta&&s.value.setDataValue(this.exec,a,n.postfix,t),l}AtomicXor(e,t){let n=e.args[0];n instanceof Bo&&(n=n.right);const r=this.exec.getVariableName(n,t),s=t.getVariable(r);let i=e.args[1];const o=this.exec.evalExpression(i,t),a=s.value.getSubData(this.exec,n.postfix,t),l=new Zo(a.value,a.typeInfo);return a instanceof Zo&&o instanceof Zo&&(a.value=a.value^o.value),s.value instanceof ta&&s.value.setDataValue(this.exec,a,n.postfix,t),l}AtomicExchange(e,t){let n=e.args[0];n instanceof Bo&&(n=n.right);const r=this.exec.getVariableName(n,t),s=t.getVariable(r);let i=e.args[1];const o=this.exec.evalExpression(i,t),a=s.value.getSubData(this.exec,n.postfix,t),l=new Zo(a.value,a.typeInfo);return a instanceof Zo&&o instanceof Zo&&(a.value=o.value),s.value instanceof ta&&s.value.setDataValue(this.exec,a,n.postfix,t),l}AtomicCompareExchangeWeak(e,t){return null}Pack4x8snorm(e,t){return null}Pack4x8unorm(e,t){return null}Pack4xI8(e,t){return null}Pack4xU8(e,t){return null}Pack4x8Clamp(e,t){return null}Pack4xU8Clamp(e,t){return null}Pack2x16snorm(e,t){return null}Pack2x16unorm(e,t){return null}Pack2x16float(e,t){return null}Unpack4x8snorm(e,t){return null}Unpack4x8unorm(e,t){return null}Unpack4xI8(e,t){return null}Unpack4xU8(e,t){return null}Unpack2x16snorm(e,t){return null}Unpack2x16unorm(e,t){return null}Unpack2x16float(e,t){return null}StorageBarrier(e,t){return null}TextureBarrier(e,t){return null}WorkgroupBarrier(e,t){return null}WorkgroupUniformLoad(e,t){return null}SubgroupAdd(e,t){return null}SubgroupExclusiveAdd(e,t){return null}SubgroupInclusiveAdd(e,t){return null}SubgroupAll(e,t){return null}SubgroupAnd(e,t){return null}SubgroupAny(e,t){return null}SubgroupBallot(e,t){return null}SubgroupBroadcast(e,t){return null}SubgroupBroadcastFirst(e,t){return null}SubgroupElect(e,t){return null}SubgroupMax(e,t){return null}SubgroupMin(e,t){return null}SubgroupMul(e,t){return null}SubgroupExclusiveMul(e,t){return null}SubgroupInclusiveMul(e,t){return null}SubgroupOr(e,t){return null}SubgroupShuffle(e,t){return null}SubgroupShuffleDown(e,t){return null}SubgroupShuffleUp(e,t){return null}SubgroupShuffleXor(e,t){return null}SubgroupXor(e,t){return null}QuadBroadcast(e,t){return null}QuadSwapDiagonal(e,t){return null}QuadSwapX(e,t){return null}QuadSwapY(e,t){return null}}const Ra={vec2:2,vec2f:2,vec2i:2,vec2u:2,vec2b:2,vec2h:2,vec3:3,vec3f:3,vec3i:3,vec3u:3,vec3b:3,vec3h:3,vec4:4,vec4f:4,vec4i:4,vec4u:4,vec4b:4,vec4h:4},Ca={mat2x2:[2,2,4],mat2x2f:[2,2,4],mat2x2h:[2,2,4],mat2x3:[2,3,6],mat2x3f:[2,3,6],mat2x3h:[2,3,6],mat2x4:[2,4,8],mat2x4f:[2,4,8],mat2x4h:[2,4,8],mat3x2:[3,2,6],mat3x2f:[3,2,6],mat3x2h:[3,2,6],mat3x3:[3,3,9],mat3x3f:[3,3,9],mat3x3h:[3,3,9],mat3x4:[3,4,12],mat3x4f:[3,4,12],mat3x4h:[3,4,12],mat4x2:[4,2,8],mat4x2f:[4,2,8],mat4x2h:[4,2,8],mat4x3:[4,3,12],mat4x3f:[4,3,12],mat4x3h:[4,3,12],mat4x4:[4,4,16],mat4x4f:[4,4,16],mat4x4h:[4,4,16]};class ka extends Sa{constructor(e,t){var n;super(),this.ast=null!=e?e:[],this.reflection=new va,this.reflection.updateAST(this.ast),this.context=null!==(n=null==t?void 0:t.clone())&&void 0!==n?n:new Ta,this.builtins=new Aa(this),this.typeInfo={bool:this.getTypeInfo(xo.bool),i32:this.getTypeInfo(xo.i32),u32:this.getTypeInfo(xo.u32),f32:this.getTypeInfo(xo.f32),f16:this.getTypeInfo(xo.f16),vec2f:this.getTypeInfo(To.vec2f),vec2u:this.getTypeInfo(To.vec2u),vec2i:this.getTypeInfo(To.vec2i),vec2h:this.getTypeInfo(To.vec2h),vec3f:this.getTypeInfo(To.vec3f),vec3u:this.getTypeInfo(To.vec3u),vec3i:this.getTypeInfo(To.vec3i),vec3h:this.getTypeInfo(To.vec3h),vec4f:this.getTypeInfo(To.vec4f),vec4u:this.getTypeInfo(To.vec4u),vec4i:this.getTypeInfo(To.vec4i),vec4h:this.getTypeInfo(To.vec4h),mat2x2f:this.getTypeInfo(To.mat2x2f),mat2x3f:this.getTypeInfo(To.mat2x3f),mat2x4f:this.getTypeInfo(To.mat2x4f),mat3x2f:this.getTypeInfo(To.mat3x2f),mat3x3f:this.getTypeInfo(To.mat3x3f),mat3x4f:this.getTypeInfo(To.mat3x4f),mat4x2f:this.getTypeInfo(To.mat4x2f),mat4x3f:this.getTypeInfo(To.mat4x3f),mat4x4f:this.getTypeInfo(To.mat4x4f)}}getVariableValue(e){var t,n;const r=null!==(n=null===(t=this.context.getVariable(e))||void 0===t?void 0:t.value)&&void 0!==n?n:null;if(null===r)return null;if(r instanceof Zo)return r.value;if(r instanceof Jo)return Array.from(r.data);if(r instanceof ea)return Array.from(r.data);if(r instanceof ta&&r.typeInfo instanceof yi){if("u32"===r.typeInfo.format.name)return Array.from(new Uint32Array(r.buffer,r.offset,r.typeInfo.count));if("i32"===r.typeInfo.format.name)return Array.from(new Int32Array(r.buffer,r.offset,r.typeInfo.count));if("f32"===r.typeInfo.format.name)return Array.from(new Float32Array(r.buffer,r.offset,r.typeInfo.count))}return null}execute(e){(e=null!=e?e:{}).constants&&this._setOverrides(e.constants,this.context),this._execStatements(this.ast,this.context)}dispatchWorkgroups(e,t,n,r){const s=this.context.clone();(r=null!=r?r:{}).constants&&this._setOverrides(r.constants,s),this._execStatements(this.ast,s);const i=s.getFunction(e);if(!i)return;if("number"==typeof t)t=[t,1,1];else{if(0===t.length)return;1===t.length?t=[t[0],1,1]:2===t.length?t=[t[0],t[1],1]:t.length>3&&(t=[t[0],t[1],t[2]])}const o=t[0],a=t[1],l=t[2],c=this.getTypeInfo("vec3u");s.setVariable("@num_workgroups",new Jo(t,c));const u=this.reflection.getFunctionInfo(e);for(const h in n)for(const e in n[h]){const t=n[h][e];s.variables.forEach(n=>{var r;const s=n.node;if(null==s?void 0:s.attributes){let i=null,o=null;for(const e of s.attributes)"binding"===e.name?i=e.value:"group"===e.name&&(o=e.value);if(e==i&&h==o){let i=!1;for(const t of u.resources)if(t.name===n.name&&t.group===parseInt(h)&&t.binding===parseInt(e)){i=!0;break}if(i)if(void 0!==t.texture&&void 0!==t.descriptor){const e=new na(t.texture,this.getTypeInfo(s.type),t.descriptor,null!==(r=t.texture.view)&&void 0!==r?r:null);n.value=e}else void 0!==t.uniform?n.value=new ta(t.uniform,this.getTypeInfo(s.type)):n.value=new ta(t,this.getTypeInfo(s.type))}}})}for(let h=0;h0){const e=n.getVariableValue(c.value[0]);r[0]=e instanceof Zo?e.value:parseInt(c.value[0])}if(c.value.length>1){const e=n.getVariableValue(c.value[1]);r[1]=e instanceof Zo?e.value:parseInt(c.value[1])}if(c.value.length>2){const e=n.getVariableValue(c.value[2]);r[2]=e instanceof Zo?e.value:parseInt(c.value[2])}}const s=this.getTypeInfo("vec3u"),i=this.getTypeInfo("u32");n.setVariable("@workgroup_size",new Jo(r,s));const o=r[0],a=r[1],l=r[2];for(let c=0,u=0;c",s=null;if(e.variable instanceof Bo){const n=this._getVariableData(e.variable,t),r=this.evalExpression(e.value,t),s=e.operator;if("="===s){if(n instanceof Zo||n instanceof Jo||n instanceof ea){if(r instanceof Zo||r instanceof Jo||r instanceof ea&&n.data.length===r.data.length)return void n.data.set(r.data)}else if(n instanceof ta&&r instanceof ta&&n.buffer.byteLength-n.offset>=r.buffer.byteLength-r.offset)return void(n.buffer.byteLength%4==0?new Uint32Array(n.buffer,n.offset,n.typeInfo.size/4).set(new Uint32Array(r.buffer,r.offset,r.typeInfo.size/4)):new Uint8Array(n.buffer,n.offset,n.typeInfo.size).set(new Uint8Array(r.buffer,r.offset,r.typeInfo.size)));return null}if("+="===s)return(n instanceof Zo||n instanceof Jo||n instanceof ea)&&(r instanceof Zo||r instanceof Jo||r instanceof ea)?void n.data.set(r.data.map((e,t)=>n.data[t]+e)):void 0;if("-="===s)return(n instanceof Zo||n instanceof Jo||n instanceof ea)&&(r instanceof Zo||r instanceof Jo||r instanceof ea)?void n.data.set(r.data.map((e,t)=>n.data[t]-e)):void 0}if(e.variable instanceof Bo){if("*"===e.variable.operator){r=this.getVariableName(e.variable.right,t);const s=t.getVariable(r);if(!(s&&s.value instanceof Ko))return;n=s.value.reference;let i=e.variable.postfix;if(!i){let t=e.variable.right;for(;t instanceof Bo;){if(t.postfix){i=t.postfix;break}t=t.right}}i&&(n=n.getSubData(this,i,t))}}else{s=e.variable.postfix,r=this.getVariableName(e.variable,t);const i=t.getVariable(r);if(null===i)return;n=i.value}if(n instanceof Ko&&(n=n.reference),null===n)return;const i=this.evalExpression(e.value,t),o=e.operator;if("="!==o){const e=n.getSubData(this,s,t);if(e instanceof Jo&&i instanceof Zo){const t=e.data,n=i.value;if("+="===o)for(let e=0;e>="===o)for(let e=0;e>=n}else if(e instanceof Jo&&i instanceof Jo){const t=e.data,n=i.data;if(t.length!==n.length)return;if("+="===o)for(let e=0;e>="===o)for(let e=0;e>=n[e]}else{if(!(e instanceof Zo&&i instanceof Zo))return;"+="===o?e.value+=i.value:"-="===o?e.value-=i.value:"*="===o?e.value*=i.value:"/="===o?e.value/=i.value:"%="===o?e.value%=i.value:"&="===o?e.value&=i.value:"|="===o?e.value|=i.value:"^="===o?e.value^=i.value:"<<="===o?e.value<<=i.value:">>="===o&&(e.value>>=i.value)}return void(n instanceof ta&&n.setDataValue(this,e,s,t))}if(n instanceof ta)n.setDataValue(this,i,s,t);else if(s){if(!(n instanceof Jo||n instanceof ea))return;if(s instanceof Fo){const e=this.evalExpression(s.index,t).value;if(n instanceof Jo){if(!(i instanceof Zo))return;n.data[e]=i.value}else{if(!(n instanceof ea))return;{const e=this.evalExpression(s.index,t).value;if(e<0)return;if(!(i instanceof Jo))return;{const t=n.typeInfo.getTypeName();if("mat2x2"===t||"mat2x2f"===t||"mat2x2h"===t){if(!(e<2&&2===i.data.length))return;n.data[2*e]=i.data[0],n.data[2*e+1]=i.data[1]}else if("mat2x3"===t||"mat2x3f"===t||"mat2x3h"===t){if(!(e<2&&3===i.data.length))return;n.data[3*e]=i.data[0],n.data[3*e+1]=i.data[1],n.data[3*e+2]=i.data[2]}else if("mat2x4"===t||"mat2x4f"===t||"mat2x4h"===t){if(!(e<2&&4===i.data.length))return;n.data[4*e]=i.data[0],n.data[4*e+1]=i.data[1],n.data[4*e+2]=i.data[2],n.data[4*e+3]=i.data[3]}else if("mat3x2"===t||"mat3x2f"===t||"mat3x2h"===t){if(!(e<3&&2===i.data.length))return;n.data[2*e]=i.data[0],n.data[2*e+1]=i.data[1]}else if("mat3x3"===t||"mat3x3f"===t||"mat3x3h"===t){if(!(e<3&&3===i.data.length))return;n.data[3*e]=i.data[0],n.data[3*e+1]=i.data[1],n.data[3*e+2]=i.data[2]}else if("mat3x4"===t||"mat3x4f"===t||"mat3x4h"===t){if(!(e<3&&4===i.data.length))return;n.data[4*e]=i.data[0],n.data[4*e+1]=i.data[1],n.data[4*e+2]=i.data[2],n.data[4*e+3]=i.data[3]}else if("mat4x2"===t||"mat4x2f"===t||"mat4x2h"===t){if(!(e<4&&2===i.data.length))return;n.data[2*e]=i.data[0],n.data[2*e+1]=i.data[1]}else if("mat4x3"===t||"mat4x3f"===t||"mat4x3h"===t){if(!(e<4&&3===i.data.length))return;n.data[3*e]=i.data[0],n.data[3*e+1]=i.data[1],n.data[3*e+2]=i.data[2]}else{if("mat4x4"!==t&&"mat4x4f"!==t&&"mat4x4h"!==t)return;if(!(e<4&&4===i.data.length))return;n.data[4*e]=i.data[0],n.data[4*e+1]=i.data[1],n.data[4*e+2]=i.data[2],n.data[4*e+3]=i.data[3]}}}}}else if(s instanceof ko){const e=s.value;if(!(n instanceof Jo))return;if(i instanceof Zo){if(e.length>1)return;if("x"===e)n.data[0]=i.value;else if("y"===e){if(n.data.length<2)return;n.data[1]=i.value}else if("z"===e){if(n.data.length<3)return;n.data[2]=i.value}else if("w"===e){if(n.data.length<4)return;n.data[3]=i.value}}else{if(!(i instanceof Jo))return;if(e.length!==i.data.length)return;for(let t=0;t+e);return new Jo(e,n.typeInfo)}const e=r,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Zo(+e,t)}case"-":{if(aa(r)){const e=r.map((e,t)=>-e);return new Jo(e,n.typeInfo)}const e=r,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Zo(-e,t)}case"!":{if(aa(r)){const e=r.map((e,t)=>e?0:1);return new Jo(e,n.typeInfo)}const e=r,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Zo(e?0:1,t)}case"~":{if(aa(r)){const e=r.map((e,t)=>~e);return new Jo(e,n.typeInfo)}const e=r,t=this._maxFormatTypeInfo([n.typeInfo,n.typeInfo]);return new Zo(~e,t)}}return null}_evalBinaryOp(e,t){const n=this.evalExpression(e.left,t),r=this.evalExpression(e.right,t),s=n instanceof Zo?n.value:n instanceof Jo||n instanceof ea?Array.from(n.data):null,i=r instanceof Zo?r.value:r instanceof Jo||r instanceof ea?Array.from(r.data):null;switch(e.operator){case"+":{if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e+t[n]);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t+e);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e+t);return new Jo(t,r.typeInfo)}const e=s,t=i,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new Zo(e+t,o)}case"-":{if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e-t[n]);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t-e);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e-t);return new Jo(t,r.typeInfo)}const e=s,t=i,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new Zo(e-t,o)}case"*":{if(aa(s)&&aa(i)){const e=s,t=i;if(n instanceof ea&&r instanceof ea){const s=function(e,t,n,r){if(void 0===Ca[t.name]||void 0===Ca[r.name])return null;const s=Ca[t.name][0],i=Ca[t.name][1],o=Ca[r.name][0];if(s!==Ca[r.name][1])return null;const a=new Array(o*i);for(let l=0;le*t[n]);return new Jo(r,n.typeInfo)}}if(aa(s)){const e=i,t=s.map((t,n)=>t*e);return n instanceof ea?new ea(t,n.typeInfo):new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e*t);return r instanceof ea?new ea(t,r.typeInfo):new Jo(t,r.typeInfo)}const e=s,t=i,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new Zo(e*t,o)}case"%":{if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e%t[n]);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t%e);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e%t);return new Jo(t,r.typeInfo)}const e=s,t=i,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new Zo(e%t,o)}case"/":{if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e/t[n]);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t/e);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e/t);return new Jo(t,r.typeInfo)}const e=s,t=i,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new Zo(e/t,o)}case"&":{if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e&t[n]);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t&e);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e&t);return new Jo(t,r.typeInfo)}const e=s,t=i,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new Zo(e&t,o)}case"|":{if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e|t[n]);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t|e);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e|t);return new Jo(t,r.typeInfo)}const e=s,t=i,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new Zo(e|t,o)}case"^":{if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e^t[n]);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t^e);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e^t);return new Jo(t,r.typeInfo)}const e=s,t=i,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new Zo(e^t,o)}case"<<":{if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e<t<e<>":{if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e>>t[n]);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t>>e);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e>>t);return new Jo(t,r.typeInfo)}const e=s,t=i,o=this._maxFormatTypeInfo([n.typeInfo,r.typeInfo]);return new Zo(e>>t,o)}case">":if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e>t[n]?1:0);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t>e?1:0);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e>t?1:0);return new Jo(t,r.typeInfo)}return new Zo(s>i?1:0,this.getTypeInfo("bool"));case"<":if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>etee===t[n]?1:0);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t==e?1:0);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e==t?1:0);return new Jo(t,r.typeInfo)}return new Zo(s===i?1:0,this.getTypeInfo("bool"));case"!=":if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e!==t[n]?1:0);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t!==e?1:0);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e!==t?1:0);return new Jo(t,r.typeInfo)}return new Zo(s!==i?1:0,this.getTypeInfo("bool"));case">=":if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e>=t[n]?1:0);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t>=e?1:0);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e>=t?1:0);return new Jo(t,r.typeInfo)}return new Zo(s>=i?1:0,this.getTypeInfo("bool"));case"<=":if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e<=t[n]?1:0);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t<=e?1:0);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e<=t?1:0);return new Jo(t,r.typeInfo)}return new Zo(s<=i?1:0,this.getTypeInfo("bool"));case"&&":if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e&&t[n]?1:0);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t&&e?1:0);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e&&t?1:0);return new Jo(t,r.typeInfo)}return new Zo(s&&i?1:0,this.getTypeInfo("bool"));case"||":if(aa(s)&&aa(i)){const e=s,t=i;if(e.length!==t.length)return null;const r=e.map((e,n)=>e||t[n]?1:0);return new Jo(r,n.typeInfo)}if(aa(s)){const e=i,t=s.map((t,n)=>t||e?1:0);return new Jo(t,n.typeInfo)}if(aa(i)){const e=s,t=i.map((t,n)=>e||t?1:0);return new Jo(t,r.typeInfo)}return new Zo(s||i?1:0,this.getTypeInfo("bool"))}return null}_evalCall(e,t){if(null!==e.cachedReturnValue)return e.cachedReturnValue;const n=t.clone();n.currentFunctionName=e.name;const r=t.getFunction(e.name);if(!r)return e.isBuiltin?this._callBuiltinFunction(e,n):this.getTypeInfo(e.name)?this._evalCreate(e,t):null;for(let s=0;ss?i.slice(0,s):i,n).getSubData(this,e.postfix,t)}_callConstructorMatrix(e,t){const n=this.getTypeInfo(e.type),r=e.type.getTypeName(),s=Ca[r];if(void 0===s)return null;const i=[];if(e instanceof Lo)if(e.isVector){const t=e.vectorValue;for(const e of t)i.push(e)}else i.push(e.scalarValue);else if(e.args)for(const o of e.args){const e=this.evalExpression(o,t);e instanceof Jo?i.push(...e.data):e instanceof Zo?i.push(e.value):e instanceof ea&&i.push(...e.data)}if(n instanceof vi&&null===n.format&&(n.format=this.getTypeInfo("f32")),0===i.length){const r=new Array(s[2]).fill(0);return new ea(r,n).getSubData(this,e.postfix,t)}return i.length!==s[2]?null:new ea(i,n).getSubData(this,e.postfix,t)}}ka._breakObj=new qo(new gi("BREAK",null),null),ka._continueObj=new qo(new gi("CONTINUE",null),null),ka._priority=new Map([["f32",0],["f16",1],["u32",2],["i32",3],["x32",3]]);class Pa{constructor(){this.constants=new Map,this.aliases=new Map,this.structs=new Map}}class Ia{constructor(){this._tokens=[],this._current=0,this._currentLine=1,this._deferArrayCountEval=[],this._currentLoop=[],this._context=new Pa,this._exec=new ka,this._forwardTypeCount=0}parse(e){this._initialize(e),this._deferArrayCountEval.length=0;const t=[];for(;!this._isAtEnd();){const e=this._global_decl_or_directive();if(!e)break;t.push(e)}if(this._deferArrayCountEval.length>0){for(const e of this._deferArrayCountEval){const t=e.arrayType,r=e.countNode;if(r instanceof Mo){const e=r.name,s=this._context.constants.get(e);if(s)try{const e=s.constEvaluate(this._exec);t.count=e}catch(n){}}}this._deferArrayCountEval.length=0}if(this._forwardTypeCount>0)for(const r of t)r.search(e=>{e instanceof $o||e instanceof So?e.type=this._forwardType(e.type):e instanceof Ao?e.format=this._forwardType(e.format):e instanceof Qi||e instanceof eo||e instanceof to?e.type=this._forwardType(e.type):e instanceof Xi?e.returnType=this._forwardType(e.returnType):e instanceof Wo&&(e.type=this._forwardType(e.type))});return t}_forwardType(e){if(e instanceof wo){const t=this._getType(e.name);if(t)return t}else e instanceof So?e.type=this._forwardType(e.type):e instanceof Ao&&(e.format=this._forwardType(e.format));return e}_initialize(e){if(e)if("string"==typeof e){const t=new oa(e);this._tokens=t.scanTokens()}else this._tokens=e;else this._tokens=[];this._current=0}_updateNode(e,t){return e.line=null!=t?t:this._currentLine,e}_error(e,t){return{token:e,message:t,toString:()=>`${t}`}}_isAtEnd(){return this._current>=this._tokens.length||this._peek().type==sa.eof}_match(e){if(e instanceof ra)return!!this._check(e)&&(this._advance(),!0);for(let t=0,n=e.length;t0){const e=this._currentLoop[this._currentLoop.length-1];t.loopId=e.id}e=t,this._check(sa.keywords.if)&&(this._advance(),t.condition=this._optional_paren_expression())}else if(this._match(sa.keywords.continue)){const t=this._updateNode(new vo);if(!(this._currentLoop.length>0))throw this._error(this._peek(),`Continue statement must be inside a loop. Line: ${t.line}`);{const e=this._currentLoop[this._currentLoop.length-1];t.loopId=e.id}e=t}else e=this._increment_decrement_statement()||this._func_call_statement()||this._assignment_statement();return null!=e&&this._consume(sa.tokens.semicolon,"Expected ';' after statement."),e}_static_assert_statement(){if(!this._match(sa.keywords.static_assert))return null;const e=this._currentLine,t=this._optional_paren_expression();return this._updateNode(new qi(t),e)}_while_statement(){if(!this._match(sa.keywords.while))return null;const e=this._updateNode(new Yi(null,null));return this._currentLoop.push(e),e.condition=this._optional_paren_expression(),this._check(sa.tokens.attr)&&this._attribute(),e.body=this._compound_statement(),this._currentLoop.pop(),e}_continuing_statement(){const e=this._currentLoop.length>0?this._currentLoop[this._currentLoop.length-1].id:-1;if(!this._match(sa.keywords.continuing))return null;const t=this._currentLine,n=this._compound_statement();return this._updateNode(new Ki(n,e),t)}_for_statement(){if(!this._match(sa.keywords.for))return null;this._consume(sa.tokens.paren_left,"Expected '('.");const e=this._updateNode(new Zi(null,null,null,null));return this._currentLoop.push(e),e.init=this._check(sa.tokens.semicolon)?null:this._for_init(),this._consume(sa.tokens.semicolon,"Expected ';'."),e.condition=this._check(sa.tokens.semicolon)?null:this._short_circuit_or_expression(),this._consume(sa.tokens.semicolon,"Expected ';'."),e.increment=this._check(sa.tokens.paren_right)?null:this._for_increment(),this._consume(sa.tokens.paren_right,"Expected ')'."),this._check(sa.tokens.attr)&&this._attribute(),e.body=this._compound_statement(),this._currentLoop.pop(),e}_for_init(){return this._variable_statement()||this._func_call_statement()||this._assignment_statement()}_for_increment(){return this._func_call_statement()||this._increment_decrement_statement()||this._assignment_statement()}_variable_statement(){if(this._check(sa.keywords.var)){const e=this._variable_decl();if(null===e)throw this._error(this._peek(),"Variable declaration expected.");let t=null;return this._match(sa.tokens.equal)&&(t=this._short_circuit_or_expression()),this._updateNode(new Qi(e.name,e.type,e.storage,e.access,t),e.line)}if(this._match(sa.keywords.let)){const e=this._currentLine,t=this._consume(sa.tokens.name,"Expected name for let.").toString();let n=null;if(this._match(sa.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e)}this._consume(sa.tokens.equal,"Expected '=' for let.");const r=this._short_circuit_or_expression();return this._updateNode(new eo(t,n,null,null,r),e)}if(this._match(sa.keywords.const)){const e=this._currentLine,t=this._consume(sa.tokens.name,"Expected name for const.").toString();let n=null;if(this._match(sa.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e)}this._consume(sa.tokens.equal,"Expected '=' for const.");const r=this._short_circuit_or_expression();return null===n&&r instanceof Lo&&(n=r.type),this._updateNode(new to(t,n,null,null,r),e)}return null}_increment_decrement_statement(){const e=this._current,t=this._unary_expression();if(null==t)return null;if(!this._check(sa.increment_operators))return this._current=e,null;const n=this._consume(sa.increment_operators,"Expected increment operator");return this._updateNode(new oo(n.type===sa.tokens.plus_plus?no.increment:no.decrement,t))}_assignment_statement(){let e=null;const t=this._currentLine;if(this._check(sa.tokens.brace_right))return null;let n=this._match(sa.tokens.underscore);if(n||(e=this._unary_expression()),!n&&null==e)return null;const r=this._consume(sa.assignment_operators,"Expected assignment operator."),s=this._short_circuit_or_expression();return this._updateNode(new ao(ro.parse(r.lexeme),e,s),t)}_func_call_statement(){if(!this._check(sa.tokens.ident))return null;const e=this._currentLine,t=this._current,n=this._consume(sa.tokens.ident,"Expected function name."),r=this._argument_expression_list();return null===r?(this._current=t,null):this._updateNode(new lo(n.lexeme,r),e)}_loop_statement(){if(!this._match(sa.keywords.loop))return null;this._check(sa.tokens.attr)&&this._attribute(),this._consume(sa.tokens.brace_left,"Expected '{' for loop.");const e=this._updateNode(new co([],null));this._currentLoop.push(e);let t=this._statement();for(;null!==t;){if(Array.isArray(t))for(let n of t)e.body.push(n);else e.body.push(t);if(t instanceof Ki){e.continuing=t;break}t=this._statement()}return this._currentLoop.pop(),this._consume(sa.tokens.brace_right,"Expected '}' for loop."),e}_switch_statement(){if(!this._match(sa.keywords.switch))return null;const e=this._updateNode(new uo(null,[]));if(this._currentLoop.push(e),e.condition=this._optional_paren_expression(),this._check(sa.tokens.attr)&&this._attribute(),this._consume(sa.tokens.brace_left,"Expected '{' for switch."),e.cases=this._switch_body(),null==e.cases||0==e.cases.length)throw this._error(this._previous(),"Expected 'case' or 'default'.");return this._consume(sa.tokens.brace_right,"Expected '}' for switch."),this._currentLoop.pop(),e}_switch_body(){const e=[];let t=!1;for(;this._check([sa.keywords.default,sa.keywords.case]);){if(this._match(sa.keywords.case)){const n=this._case_selectors();for(const e of n)if(e instanceof Vo){if(t)throw this._error(this._previous(),"Multiple default cases in switch statement.");t=!0;break}this._match(sa.tokens.colon),this._check(sa.tokens.attr)&&this._attribute(),this._consume(sa.tokens.brace_left,"Exected '{' for switch case.");const r=this._case_body();this._consume(sa.tokens.brace_right,"Exected '}' for switch case."),e.push(this._updateNode(new Go(n,r)))}if(this._match(sa.keywords.default)){if(t)throw this._error(this._previous(),"Multiple default cases in switch statement.");this._match(sa.tokens.colon),this._check(sa.tokens.attr)&&this._attribute(),this._consume(sa.tokens.brace_left,"Exected '{' for switch default.");const n=this._case_body();this._consume(sa.tokens.brace_right,"Exected '}' for switch default."),e.push(this._updateNode(new zo(n)))}}return e}_case_selectors(){const e=[];for(this._match(sa.keywords.default)?e.push(this._updateNode(new Vo)):e.push(this._shift_expression());this._match(sa.tokens.comma);)this._match(sa.keywords.default)?e.push(this._updateNode(new Vo)):e.push(this._shift_expression());return e}_case_body(){if(this._match(sa.keywords.fallthrough))return this._consume(sa.tokens.semicolon,"Expected ';'"),[];let e=this._statement();if(null==e)return[];e instanceof Array||(e=[e]);const t=this._case_body();return 0==t.length?e:[...e,t[0]]}_if_statement(){if(!this._match(sa.keywords.if))return null;const e=this._currentLine,t=this._optional_paren_expression();this._check(sa.tokens.attr)&&this._attribute();const n=this._compound_statement();let r=[];this._match_elseif()&&(this._check(sa.tokens.attr)&&this._attribute(),r=this._elseif_statement(r));let s=null;return this._match(sa.keywords.else)&&(this._check(sa.tokens.attr)&&this._attribute(),s=this._compound_statement()),this._updateNode(new ho(t,n,r,s),e)}_match_elseif(){return this._tokens[this._current].type===sa.keywords.else&&this._tokens[this._current+1].type===sa.keywords.if&&(this._advance(),this._advance(),!0)}_elseif_statement(e=[]){const t=this._optional_paren_expression(),n=this._compound_statement();return e.push(this._updateNode(new Ho(t,n))),this._match_elseif()&&(this._check(sa.tokens.attr)&&this._attribute(),this._elseif_statement(e)),e}_return_statement(){if(!this._match(sa.keywords.return))return null;const e=this._short_circuit_or_expression();return this._updateNode(new fo(e))}_short_circuit_or_expression(){let e=this._short_circuit_and_expr();for(;this._match(sa.tokens.or_or);)e=this._updateNode(new Uo(this._previous().toString(),e,this._short_circuit_and_expr()));return e}_short_circuit_and_expr(){let e=this._inclusive_or_expression();for(;this._match(sa.tokens.and_and);)e=this._updateNode(new Uo(this._previous().toString(),e,this._inclusive_or_expression()));return e}_inclusive_or_expression(){let e=this._exclusive_or_expression();for(;this._match(sa.tokens.or);)e=this._updateNode(new Uo(this._previous().toString(),e,this._exclusive_or_expression()));return e}_exclusive_or_expression(){let e=this._and_expression();for(;this._match(sa.tokens.xor);)e=this._updateNode(new Uo(this._previous().toString(),e,this._and_expression()));return e}_and_expression(){let e=this._equality_expression();for(;this._match(sa.tokens.and);)e=this._updateNode(new Uo(this._previous().toString(),e,this._equality_expression()));return e}_equality_expression(){const e=this._relational_expression();return this._match([sa.tokens.equal_equal,sa.tokens.not_equal])?this._updateNode(new Uo(this._previous().toString(),e,this._relational_expression())):e}_relational_expression(){let e=this._shift_expression();for(;this._match([sa.tokens.less_than,sa.tokens.greater_than,sa.tokens.less_than_equal,sa.tokens.greater_than_equal]);)e=this._updateNode(new Uo(this._previous().toString(),e,this._shift_expression()));return e}_shift_expression(){let e=this._additive_expression();for(;this._match([sa.tokens.shift_left,sa.tokens.shift_right]);)e=this._updateNode(new Uo(this._previous().toString(),e,this._additive_expression()));return e}_additive_expression(){let e=this._multiplicative_expression();for(;this._match([sa.tokens.plus,sa.tokens.minus]);)e=this._updateNode(new Uo(this._previous().toString(),e,this._multiplicative_expression()));return e}_multiplicative_expression(){let e=this._unary_expression();for(;this._match([sa.tokens.star,sa.tokens.forward_slash,sa.tokens.modulo]);)e=this._updateNode(new Uo(this._previous().toString(),e,this._unary_expression()));return e}_unary_expression(){return this._match([sa.tokens.minus,sa.tokens.bang,sa.tokens.tilde,sa.tokens.star,sa.tokens.and])?this._updateNode(new Bo(this._previous().toString(),this._unary_expression())):this._singular_expression()}_singular_expression(){const e=this._primary_expression(),t=this._postfix_expression();return t&&(e.postfix=t),e}_postfix_expression(){if(this._match(sa.tokens.bracket_left)){const e=this._short_circuit_or_expression();this._consume(sa.tokens.bracket_right,"Expected ']'.");const t=this._updateNode(new Fo(e)),n=this._postfix_expression();return n&&(t.postfix=n),t}if(this._match(sa.tokens.period)){const e=this._consume(sa.tokens.name,"Expected member name."),t=this._postfix_expression(),n=this._updateNode(new ko(e.lexeme));return t&&(n.postfix=t),n}return null}_getStruct(e){return this._context.aliases.has(e)?this._context.aliases.get(e).type:this._context.structs.has(e)?this._context.structs.get(e):null}_getType(e){const t=this._getStruct(e);if(null!==t)return t;switch(e){case"void":return xo.void;case"bool":return xo.bool;case"i32":return xo.i32;case"u32":return xo.u32;case"f32":return xo.f32;case"f16":return xo.f16;case"vec2f":return To.vec2f;case"vec3f":return To.vec3f;case"vec4f":return To.vec4f;case"vec2i":return To.vec2i;case"vec3i":return To.vec3i;case"vec4i":return To.vec4i;case"vec2u":return To.vec2u;case"vec3u":return To.vec3u;case"vec4u":return To.vec4u;case"vec2h":return To.vec2h;case"vec3h":return To.vec3h;case"vec4h":return To.vec4h;case"mat2x2f":return To.mat2x2f;case"mat2x3f":return To.mat2x3f;case"mat2x4f":return To.mat2x4f;case"mat3x2f":return To.mat3x2f;case"mat3x3f":return To.mat3x3f;case"mat3x4f":return To.mat3x4f;case"mat4x2f":return To.mat4x2f;case"mat4x3f":return To.mat4x3f;case"mat4x4f":return To.mat4x4f;case"mat2x2h":return To.mat2x2h;case"mat2x3h":return To.mat2x3h;case"mat2x4h":return To.mat2x4h;case"mat3x2h":return To.mat3x2h;case"mat3x3h":return To.mat3x3h;case"mat3x4h":return To.mat3x4h;case"mat4x2h":return To.mat4x2h;case"mat4x3h":return To.mat4x3h;case"mat4x4h":return To.mat4x4h;case"mat2x2i":return To.mat2x2i;case"mat2x3i":return To.mat2x3i;case"mat2x4i":return To.mat2x4i;case"mat3x2i":return To.mat3x2i;case"mat3x3i":return To.mat3x3i;case"mat3x4i":return To.mat3x4i;case"mat4x2i":return To.mat4x2i;case"mat4x3i":return To.mat4x3i;case"mat4x4i":return To.mat4x4i;case"mat2x2u":return To.mat2x2u;case"mat2x3u":return To.mat2x3u;case"mat2x4u":return To.mat2x4u;case"mat3x2u":return To.mat3x2u;case"mat3x3u":return To.mat3x3u;case"mat3x4u":return To.mat3x4u;case"mat4x2u":return To.mat4x2u;case"mat4x3u":return To.mat4x3u;case"mat4x4u":return To.mat4x4u}return null}_validateTypeRange(e,t){if("i32"===t.name){if(e<-2147483648||e>2147483647)throw this._error(this._previous(),`Value out of range for i32: ${e}. Line: ${this._currentLine}.`)}else if("u32"===t.name&&(e<0||e>4294967295))throw this._error(this._previous(),`Value out of range for u32: ${e}. Line: ${this._currentLine}.`)}_primary_expression(){if(this._match(sa.tokens.ident)){const e=this._previous().toString();if(this._check(sa.tokens.paren_left)){const t=this._argument_expression_list(),n=this._getType(e);return null!==n?this._updateNode(new Po(n,t)):this._updateNode(new Io(e,t))}if(this._context.constants.has(e)){const t=this._context.constants.get(e);return this._updateNode(new No(e,t.value))}return this._updateNode(new Mo(e))}if(this._match(sa.tokens.int_literal)){const e=this._previous().toString();let t=e.endsWith("i")||e.endsWith("i")?xo.i32:e.endsWith("u")||e.endsWith("U")?xo.u32:xo.x32;const n=parseInt(e);return this._validateTypeRange(n,t),this._updateNode(new Lo(new Zo(n,this._exec.getTypeInfo(t)),t))}if(this._match(sa.tokens.uint_literal)){const e=parseInt(this._previous().toString());return this._validateTypeRange(e,xo.u32),this._updateNode(new Lo(new Zo(e,this._exec.getTypeInfo(xo.u32)),xo.u32))}if(this._match([sa.tokens.decimal_float_literal,sa.tokens.hex_float_literal])){let e=this._previous().toString(),t=e.endsWith("h");t&&(e=e.substring(0,e.length-1));const n=parseFloat(e);this._validateTypeRange(n,t?xo.f16:xo.f32);const r=t?xo.f16:xo.f32;return this._updateNode(new Lo(new Zo(n,this._exec.getTypeInfo(r)),r))}if(this._match([sa.keywords.true,sa.keywords.false])){let e=this._previous().toString()===sa.keywords.true.rule;return this._updateNode(new Lo(new Zo(e?1:0,this._exec.getTypeInfo(xo.bool)),xo.bool))}if(this._check(sa.tokens.paren_left))return this._paren_expression();if(this._match(sa.keywords.bitcast)){this._consume(sa.tokens.less_than,"Expected '<'.");const e=this._type_decl();this._consume(sa.tokens.greater_than,"Expected '>'.");const t=this._paren_expression();return this._updateNode(new Oo(e,t))}const e=this._type_decl(),t=this._argument_expression_list();return this._updateNode(new Po(e,t))}_argument_expression_list(){if(!this._match(sa.tokens.paren_left))return null;const e=[];do{if(this._check(sa.tokens.paren_right))break;const t=this._short_circuit_or_expression();e.push(t)}while(this._match(sa.tokens.comma));return this._consume(sa.tokens.paren_right,"Expected ')' for agument list"),e}_optional_paren_expression(){this._match(sa.tokens.paren_left);const e=this._short_circuit_or_expression();return this._match(sa.tokens.paren_right),e}_paren_expression(){this._consume(sa.tokens.paren_left,"Expected '('.");const e=this._short_circuit_or_expression();return this._consume(sa.tokens.paren_right,"Expected ')'."),e}_struct_decl(){if(!this._match(sa.keywords.struct))return null;const e=this._currentLine,t=this._consume(sa.tokens.ident,"Expected name for struct.").toString();this._consume(sa.tokens.brace_left,"Expected '{' for struct body.");const n=[];for(;!this._check(sa.tokens.brace_right);){const e=this._attribute(),t=this._consume(sa.tokens.name,"Expected variable name.").toString();this._consume(sa.tokens.colon,"Expected ':' for struct member type.");const r=this._attribute(),s=this._type_decl();null!=s&&(s.attributes=r),this._check(sa.tokens.brace_right)?this._match(sa.tokens.comma):this._consume(sa.tokens.comma,"Expected ',' for struct member."),n.push(this._updateNode(new $o(t,s,e)))}this._consume(sa.tokens.brace_right,"Expected '}' after struct body.");const r=this._currentLine,s=this._updateNode(new Eo(t,n,e,r),e);return this._context.structs.set(t,s),s}_global_variable_decl(){const e=this._variable_decl();if(!e)return null;if(this._match(sa.tokens.equal)){const t=this._const_expression();e.value=t}if(null!==e.type&&e.value instanceof Lo){if("x32"!==e.value.type.name&&e.type.getTypeName()!==e.value.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${e.value.type.name} to ${e.type.name}. Line:${this._currentLine}`);e.value.isScalar&&this._validateTypeRange(e.value.scalarValue,e.type),e.value.type=e.type}else null===e.type&&e.value instanceof Lo&&(e.type="x32"===e.value.type.name?xo.i32:e.value.type,e.value.isScalar&&this._validateTypeRange(e.value.scalarValue,e.type));return e}_override_variable_decl(){const e=this._override_decl();return e&&this._match(sa.tokens.equal)&&(e.value=this._const_expression()),e}_global_const_decl(){var e;if(!this._match(sa.keywords.const))return null;const t=this._consume(sa.tokens.name,"Expected variable name"),n=this._currentLine;let r=null;if(this._match(sa.tokens.colon)){const e=this._attribute();r=this._type_decl(),null!=r&&(r.attributes=e)}let s=null;this._consume(sa.tokens.equal,"const declarations require an assignment");const i=this._short_circuit_or_expression();try{let e=[xo.f32],n=i.constEvaluate(this._exec,e);n instanceof Zo&&this._validateTypeRange(n.value,e[0]),e[0]instanceof To&&null===e[0].format&&n.typeInfo instanceof vi&&null!==n.typeInfo.format&&("f16"===n.typeInfo.format.name?e[0].format=xo.f16:"f32"===n.typeInfo.format.name?e[0].format=xo.f32:"i32"===n.typeInfo.format.name?e[0].format=xo.i32:"u32"===n.typeInfo.format.name?e[0].format=xo.u32:"bool"===n.typeInfo.format.name&&(e[0].format=xo.bool)),s=this._updateNode(new Lo(n,e[0])),this._exec.context.setVariable(t.toString(),n)}catch(a){s=i}if(null!==r&&s instanceof Lo){if("x32"!==s.type.name&&r.getTypeName()!==s.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${s.type.name} to ${r.name}. Line:${this._currentLine}`);s.type=r,s.isScalar&&this._validateTypeRange(s.scalarValue,s.type)}else null===r&&s instanceof Lo&&(r=null!==(e=null==s?void 0:s.type)&&void 0!==e?e:xo.f32,r===xo.x32&&(r=xo.i32));const o=this._updateNode(new to(t.toString(),r,"","",s),n);return this._context.constants.set(o.name,o),o}_global_let_decl(){if(!this._match(sa.keywords.let))return null;const e=this._currentLine,t=this._consume(sa.tokens.name,"Expected variable name");let n=null;if(this._match(sa.tokens.colon)){const e=this._attribute();n=this._type_decl(),null!=n&&(n.attributes=e)}let r=null;if(this._match(sa.tokens.equal)&&(r=this._const_expression()),null!==n&&r instanceof Lo){if("x32"!==r.type.name&&n.getTypeName()!==r.type.getTypeName())throw this._error(this._peek(),`Invalid cast from ${r.type.name} to ${n.name}. Line:${this._currentLine}`);r.type=n}else null===n&&r instanceof Lo&&(n="x32"===r.type.name?xo.i32:r.type);return r instanceof Lo&&r.isScalar&&this._validateTypeRange(r.scalarValue,n),this._updateNode(new eo(t.toString(),n,"","",r),e)}_const_expression(){return this._short_circuit_or_expression()}_variable_decl(){if(!this._match(sa.keywords.var))return null;const e=this._currentLine;let t="",n="";this._match(sa.tokens.less_than)&&(t=this._consume(sa.storage_class,"Expected storage_class.").toString(),this._match(sa.tokens.comma)&&(n=this._consume(sa.access_mode,"Expected access_mode.").toString()),this._consume(sa.tokens.greater_than,"Expected '>'."));const r=this._consume(sa.tokens.name,"Expected variable name");let s=null;if(this._match(sa.tokens.colon)){const e=this._attribute();s=this._type_decl(),null!=s&&(s.attributes=e)}return this._updateNode(new Qi(r.toString(),s,t,n,null),e)}_override_decl(){if(!this._match(sa.keywords.override))return null;const e=this._consume(sa.tokens.name,"Expected variable name");let t=null;if(this._match(sa.tokens.colon)){const e=this._attribute();t=this._type_decl(),null!=t&&(t.attributes=e)}return this._updateNode(new Ji(e.toString(),t,null))}_diagnostic(){this._consume(sa.tokens.paren_left,"Expected '('");const e=this._consume(sa.tokens.ident,"Expected severity control name.");this._consume(sa.tokens.comma,"Expected ','");let t=this._consume(sa.tokens.ident,"Expected diagnostic rule name.").toString();return this._match(sa.tokens.period)&&(t+=`.${this._consume(sa.tokens.ident,"Expected diagnostic message.").toString()}`),this._consume(sa.tokens.paren_right,"Expected ')'"),this._updateNode(new mo(e.toString(),t))}_enable_directive(){const e=this._consume(sa.tokens.ident,"identity expected.");return this._updateNode(new po(e.toString()))}_requires_directive(){const e=[this._consume(sa.tokens.ident,"identity expected.").toString()];for(;this._match(sa.tokens.comma);){const t=this._consume(sa.tokens.ident,"identity expected.");e.push(t.toString())}return this._updateNode(new go(e))}_type_alias(){const e=this._consume(sa.tokens.ident,"identity expected.");this._consume(sa.tokens.equal,"Expected '=' for type alias.");let t=this._type_decl();if(null===t)throw this._error(this._peek(),"Expected Type for Alias.");this._context.aliases.has(t.name)&&(t=this._context.aliases.get(t.name).type);const n=this._updateNode(new _o(e.toString(),t));return this._context.aliases.set(n.name,n),n}_type_decl(){if(this._check([sa.tokens.ident,...sa.texel_format,sa.keywords.bool,sa.keywords.f32,sa.keywords.i32,sa.keywords.u32])){const e=this._advance().toString();if(this._context.structs.has(e))return this._context.structs.get(e);if(this._context.aliases.has(e))return this._context.aliases.get(e).type;if(!this._getType(e)){const t=this._updateNode(new wo(e));return this._forwardTypeCount++,t}return this._updateNode(new xo(e))}let e=this._texture_sampler_types();if(e)return e;if(this._check(sa.template_types)){let e=this._advance().toString(),t=null,n=null;return this._match(sa.tokens.less_than)&&(t=this._type_decl(),n=null,this._match(sa.tokens.comma)&&(n=this._consume(sa.access_mode,"Expected access_mode for pointer").toString()),this._consume(sa.tokens.greater_than,"Expected '>' for type.")),this._updateNode(new To(e,t,n))}if(this._match(sa.keywords.ptr)){let e=this._previous().toString();this._consume(sa.tokens.less_than,"Expected '<' for pointer.");const t=this._consume(sa.storage_class,"Expected storage_class for pointer");this._consume(sa.tokens.comma,"Expected ',' for pointer.");const n=this._type_decl();let r=null;return this._match(sa.tokens.comma)&&(r=this._consume(sa.access_mode,"Expected access_mode for pointer").toString()),this._consume(sa.tokens.greater_than,"Expected '>' for pointer."),this._updateNode(new So(e,t.toString(),n,r))}const t=this._attribute();if(this._match(sa.keywords.array)){let e=null,r=-1;const s=this._previous();let i=null;if(this._match(sa.tokens.less_than)){e=this._type_decl(),this._context.aliases.has(e.name)&&(e=this._context.aliases.get(e.name).type);let t="";if(this._match(sa.tokens.comma)){i=this._shift_expression();try{t=i.constEvaluate(this._exec).toString(),i=null}catch(n){t="1"}}this._consume(sa.tokens.greater_than,"Expected '>' for array."),r=t?parseInt(t):0}const o=this._updateNode(new Ao(s.toString(),t,e,r));return i&&this._deferArrayCountEval.push({arrayType:o,countNode:i}),o}return null}_texture_sampler_types(){if(this._match(sa.sampler_type))return this._updateNode(new Ro(this._previous().toString(),null,null));if(this._match(sa.depth_texture_type))return this._updateNode(new Ro(this._previous().toString(),null,null));if(this._match(sa.sampled_texture_type)||this._match(sa.multisampled_texture_type)){const e=this._previous();this._consume(sa.tokens.less_than,"Expected '<' for sampler type.");const t=this._type_decl();return this._consume(sa.tokens.greater_than,"Expected '>' for sampler type."),this._updateNode(new Ro(e.toString(),t,null))}if(this._match(sa.storage_texture_type)){const e=this._previous();this._consume(sa.tokens.less_than,"Expected '<' for sampler type.");const t=this._consume(sa.texel_format,"Invalid texel format.").toString();this._consume(sa.tokens.comma,"Expected ',' after texel format.");const n=this._consume(sa.access_mode,"Expected access mode for storage texture type.").toString();return this._consume(sa.tokens.greater_than,"Expected '>' for sampler type."),this._updateNode(new Ro(e.toString(),t,n))}return null}_attribute(){let e=[];for(;this._match(sa.tokens.attr);){const t=this._consume(sa.attribute_name,"Expected attribute name"),n=this._updateNode(new Xo(t.toString(),null));if(this._match(sa.tokens.paren_left)){if(n.value=this._consume(sa.literal_or_ident,"Expected attribute value").toString(),this._check(sa.tokens.comma)){this._advance();do{const e=this._consume(sa.literal_or_ident,"Expected attribute value").toString();n.value instanceof Array||(n.value=[n.value]),n.value.push(e)}while(this._match(sa.tokens.comma))}this._consume(sa.tokens.paren_right,"Expected ')'")}e.push(n)}return 0==e.length?null:e}}class Ma extends va{constructor(e){super(),e&&this.update(e)}update(e){const t=(new Ia).parse(e);this.updateAST(t)}}function Na(e){return(null==e?void 0:e.format)?`${e.name}<${e.format.name}>`:e.name}globalThis.mathgl=globalThis.mathgl||{config:{EPSILON:1e-12,debug:!1,precision:4,printTypes:!1,printDegrees:!1,printRowMajor:!0,_cartographicRadians:!1}};const La=globalThis.mathgl.config;function Oa(e,{precision:t=La.precision}={}){return e=function(e){return Math.round(e/La.EPSILON)*La.EPSILON}(e),`${parseFloat(e.toPrecision(t))}`}function Fa(e){return Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Da(e,t,n){return function(e,t,n){if(Fa(e)){const r=e;n=n||function(e){return e.clone?e.clone():new Array(e.length)}(r);for(let s=0;sMath.max(t,Math.min(n,e)))}function Ba(e,t,n){return Fa(e)?e.map((e,r)=>Ba(e,t[r],n)):n*t+(1-n)*e}function Ua(e,t,n){const r=La.EPSILON;try{if(e===t)return!0;if(Fa(e)&&Fa(t)){if(e.length!==t.length)return!1;for(let n=0;n0?", ":"")+Oa(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=0&&e=0&&e2*Math.PI)throw Error("expected radians")}function wl(e,t=[],n=0){const r=Math.fround(e),s=e-r;return t[n]=r,t[n+1]=s,t}const El={name:"fp64arithmetic",vs:"\nuniform fp64arithmeticUniforms {\n uniform float ONE;\n} fp64;\n\n/*\nAbout LUMA_FP64_CODE_ELIMINATION_WORKAROUND\n\nThe purpose of this workaround is to prevent shader compilers from\noptimizing away necessary arithmetic operations by swapping their sequences\nor transform the equation to some 'equivalent' form.\n\nThe method is to multiply an artifical variable, ONE, which will be known to\nthe compiler to be 1 only at runtime. The whole expression is then represented\nas a polynomial with respective to ONE. In the coefficients of all terms, only one a\nand one b should appear\n\nerr = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE\n*/\n\n// Divide float number to high and low floats to extend fraction bits\nvec2 split(float a) {\n const float SPLIT = 4097.0;\n float t = a * SPLIT;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float a_hi = t * fp64.ONE - (t - a);\n float a_lo = a * fp64.ONE - a_hi;\n#else\n float a_hi = t - (t - a);\n float a_lo = a - a_hi;\n#endif\n return vec2(a_hi, a_lo);\n}\n\n// Divide float number again when high float uses too many fraction bits\nvec2 split2(vec2 a) {\n vec2 b = split(a.x);\n b.y += a.y;\n return b;\n}\n\n// Special sum operation when a > b\nvec2 quickTwoSum(float a, float b) {\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float sum = (a + b) * fp64.ONE;\n float err = b - (sum - a) * fp64.ONE;\n#else\n float sum = a + b;\n float err = b - (sum - a);\n#endif\n return vec2(sum, err);\n}\n\n// General sum operation\nvec2 twoSum(float a, float b) {\n float s = (a + b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * fp64.ONE - a) * fp64.ONE;\n float err = (a - (s - v) * fp64.ONE) * fp64.ONE * fp64.ONE * fp64.ONE + (b - v);\n#else\n float v = s - a;\n float err = (a - (s - v)) + (b - v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSub(float a, float b) {\n float s = (a - b);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float v = (s * fp64.ONE - a) * fp64.ONE;\n float err = (a - (s - v) * fp64.ONE) * fp64.ONE * fp64.ONE * fp64.ONE - (b + v);\n#else\n float v = s - a;\n float err = (a - (s - v)) - (b + v);\n#endif\n return vec2(s, err);\n}\n\nvec2 twoSqr(float a) {\n float prod = a * a;\n vec2 a_fp64 = split(a);\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n float err = ((a_fp64.x * a_fp64.x - prod) * fp64.ONE + 2.0 * a_fp64.x *\n a_fp64.y * fp64.ONE * fp64.ONE) + a_fp64.y * a_fp64.y * fp64.ONE * fp64.ONE * fp64.ONE;\n#else\n float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;\n#endif\n return vec2(prod, err);\n}\n\nvec2 twoProd(float a, float b) {\n float prod = a * b;\n vec2 a_fp64 = split(a);\n vec2 b_fp64 = split(b);\n float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +\n a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;\n return vec2(prod, err);\n}\n\nvec2 sum_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSum(a.x, b.x);\n t = twoSum(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 sub_fp64(vec2 a, vec2 b) {\n vec2 s, t;\n s = twoSub(a.x, b.x);\n t = twoSub(a.y, b.y);\n s.y += t.x;\n s = quickTwoSum(s.x, s.y);\n s.y += t.y;\n s = quickTwoSum(s.x, s.y);\n return s;\n}\n\nvec2 mul_fp64(vec2 a, vec2 b) {\n vec2 prod = twoProd(a.x, b.x);\n // y component is for the error\n prod.y += a.x * b.y;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n prod.y += a.y * b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n prod = split2(prod);\n#endif\n prod = quickTwoSum(prod.x, prod.y);\n return prod;\n}\n\nvec2 div_fp64(vec2 a, vec2 b) {\n float xn = 1.0 / b.x;\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n vec2 yn = mul_fp64(a, vec2(xn, 0));\n#else\n vec2 yn = a * xn;\n#endif\n float diff = (sub_fp64(a, mul_fp64(b, yn))).x;\n vec2 prod = twoProd(xn, diff);\n return sum_fp64(yn, prod);\n}\n\nvec2 sqrt_fp64(vec2 a) {\n if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);\n if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);\n\n float x = 1.0 / sqrt(a.x);\n float yn = a.x * x;\n#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)\n vec2 yn_sqr = twoSqr(yn) * fp64.ONE;\n#else\n vec2 yn_sqr = twoSqr(yn);\n#endif\n float diff = sub_fp64(a, yn_sqr).x;\n vec2 prod = twoProd(x * 0.5, diff);\n#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)\n return sum_fp64(split(yn), prod);\n#else\n return sum_fp64(vec2(yn, 0.0), prod);\n#endif\n}\n",defaultUniforms:{ONE:1},uniformTypes:{ONE:"f32"},fp64ify:wl,fp64LowPart:function(e){return e-Math.fround(e)},fp64ifyMatrix4:function(e){const t=new Float32Array(32);for(let n=0;n<4;++n)for(let r=0;r<4;++r){const s=4*n+r;wl(e[4*r+n],t,2*s)}return t}},Tl={props:{},uniforms:{},name:"picking",uniformTypes:{isActive:"f32",isAttribute:"f32",isHighlightActive:"f32",useFloatColors:"f32",highlightedObjectColor:"vec3",highlightColor:"vec4"},defaultUniforms:{isActive:!1,isAttribute:!1,isHighlightActive:!1,useFloatColors:!0,highlightedObjectColor:[0,0,0],highlightColor:[0,1,1,1]},vs:"uniform pickingUniforms {\n float isActive;\n float isAttribute;\n float isHighlightActive;\n float useFloatColors;\n vec3 highlightedObjectColor;\n vec4 highlightColor;\n} picking;\n\nout vec4 picking_vRGBcolor_Avalid;\n\n// Normalize unsigned byte color to 0-1 range\nvec3 picking_normalizeColor(vec3 color) {\n return picking.useFloatColors > 0.5 ? color : color / 255.0;\n}\n\n// Normalize unsigned byte color to 0-1 range\nvec4 picking_normalizeColor(vec4 color) {\n return picking.useFloatColors > 0.5 ? color : color / 255.0;\n}\n\nbool picking_isColorZero(vec3 color) {\n return dot(color, vec3(1.0)) < 0.00001;\n}\n\nbool picking_isColorValid(vec3 color) {\n return dot(color, vec3(1.0)) > 0.00001;\n}\n\n// Check if this vertex is highlighted \nbool isVertexHighlighted(vec3 vertexColor) {\n vec3 highlightedObjectColor = picking_normalizeColor(picking.highlightedObjectColor);\n return\n bool(picking.isHighlightActive) && picking_isColorZero(abs(vertexColor - highlightedObjectColor));\n}\n\n// Set the current picking color\nvoid picking_setPickingColor(vec3 pickingColor) {\n pickingColor = picking_normalizeColor(pickingColor);\n\n if (bool(picking.isActive)) {\n // Use alpha as the validity flag. If pickingColor is [0, 0, 0] fragment is non-pickable\n picking_vRGBcolor_Avalid.a = float(picking_isColorValid(pickingColor));\n\n if (!bool(picking.isAttribute)) {\n // Stores the picking color so that the fragment shader can render it during picking\n picking_vRGBcolor_Avalid.rgb = pickingColor;\n }\n } else {\n // Do the comparison with selected item color in vertex shader as it should mean fewer compares\n picking_vRGBcolor_Avalid.a = float(isVertexHighlighted(pickingColor));\n }\n}\n\nvoid picking_setPickingAttribute(float value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.r = value;\n }\n}\n\nvoid picking_setPickingAttribute(vec2 value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.rg = value;\n }\n}\n\nvoid picking_setPickingAttribute(vec3 value) {\n if (bool(picking.isAttribute)) {\n picking_vRGBcolor_Avalid.rgb = value;\n }\n}\n",fs:"uniform pickingUniforms {\n float isActive;\n float isAttribute;\n float isHighlightActive;\n float useFloatColors;\n vec3 highlightedObjectColor;\n vec4 highlightColor;\n} picking;\n\nin vec4 picking_vRGBcolor_Avalid;\n\n/*\n * Returns highlight color if this item is selected.\n */\nvec4 picking_filterHighlightColor(vec4 color) {\n // If we are still picking, we don't highlight\n if (picking.isActive > 0.5) {\n return color;\n }\n\n bool selected = bool(picking_vRGBcolor_Avalid.a);\n\n if (selected) {\n // Blend in highlight color based on its alpha value\n float highLightAlpha = picking.highlightColor.a;\n float blendedAlpha = highLightAlpha + color.a * (1.0 - highLightAlpha);\n float highLightRatio = highLightAlpha / blendedAlpha;\n\n vec3 blendedRGB = mix(color.rgb, picking.highlightColor.rgb, highLightRatio);\n return vec4(blendedRGB, blendedAlpha);\n } else {\n return color;\n }\n}\n\n/*\n * Returns picking color if picking enabled else unmodified argument.\n */\nvec4 picking_filterPickingColor(vec4 color) {\n if (bool(picking.isActive)) {\n if (picking_vRGBcolor_Avalid.a == 0.0) {\n discard;\n }\n return picking_vRGBcolor_Avalid;\n }\n return color;\n}\n\n/*\n * Returns picking color if picking is enabled if not\n * highlight color if this item is selected, otherwise unmodified argument.\n */\nvec4 picking_filterColor(vec4 color) {\n vec4 highlightColor = picking_filterHighlightColor(color);\n return picking_filterPickingColor(highlightColor);\n}\n",getUniforms:function(e={},t){const n={};if(void 0===e.highlightedObjectColor);else if(null===e.highlightedObjectColor)n.isHighlightActive=!1;else{n.isHighlightActive=!0;const t=e.highlightedObjectColor.slice(0,3);n.highlightedObjectColor=t}if(e.highlightColor){const t=Array.from(e.highlightColor,e=>e/255);Number.isFinite(t[3])||(t[3]=1),n.highlightColor=t}return void 0!==e.isActive&&(n.isActive=Boolean(e.isActive),n.isAttribute=Boolean(e.isAttribute)),void 0!==e.useFloatColors&&(n.useFloatColors=Boolean(e.useFloatColors)),n}},Sl="uniform layerUniforms {\n uniform float opacity;\n} layer;\n",Al={name:"layer",vs:Sl,fs:Sl,getUniforms:e=>({opacity:Math.pow(e.opacity,1/2.2)}),uniformTypes:{opacity:"f32"}},Rl="#define SMOOTH_EDGE_RADIUS 0.5",Cl={name:"geometry",source:"const SMOOTH_EDGE_RADIUS: f32 = 0.5;\n\nstruct VertexGeometry {\n position: vec4,\n worldPosition: vec3,\n worldPositionAlt: vec3,\n normal: vec3,\n uv: vec2,\n pickingColor: vec3,\n};\n\nvar geometry_: VertexGeometry = VertexGeometry(\n vec4(0.0, 0.0, 1.0, 0.0),\n vec3(0.0, 0.0, 0.0),\n vec3(0.0, 0.0, 0.0),\n vec3(0.0, 0.0, 0.0),\n vec2(0.0, 0.0),\n vec3(0.0, 0.0, 0.0)\n);\n\nstruct FragmentGeometry {\n uv: vec2,\n};\n\nvar 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:`${Rl}\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:`${Rl}\n\nstruct FragmentGeometry {\n vec2 uv;\n} geometry;\n\nfloat smoothedge(float edge, float x) {\n return smoothstep(edge - SMOOTH_EDGE_RADIUS, edge + SMOOTH_EDGE_RADIUS, x);\n}\n`};var kl,Pl,Il,Ml,Nl,Ll;(Pl=kl||(kl={}))[Pl.Start=1]="Start",Pl[Pl.Move=2]="Move",Pl[Pl.End=4]="End",Pl[Pl.Cancel=8]="Cancel",(Ml=Il||(Il={}))[Ml.None=0]="None",Ml[Ml.Left=1]="Left",Ml[Ml.Right=2]="Right",Ml[Ml.Up=4]="Up",Ml[Ml.Down=8]="Down",Ml[Ml.Horizontal=3]="Horizontal",Ml[Ml.Vertical=12]="Vertical",Ml[Ml.All=15]="All",(Ll=Nl||(Nl={}))[Ll.Possible=1]="Possible",Ll[Ll.Began=2]="Began",Ll[Ll.Changed=4]="Changed",Ll[Ll.Ended=8]="Ended",Ll[Ll.Recognized=8]="Recognized",Ll[Ll.Cancelled=16]="Cancelled",Ll[Ll.Failed=32]="Failed";const Ol="manipulation",Fl="none",Dl="pan-x",Bl="pan-y";class Ul{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(Fl))return Fl;const t=e.includes(Dl),n=e.includes(Bl);return t&&n?Fl:t||n?t?Dl:Bl:e.includes(Ol)?Ol:"auto"}(e.join(" "))}}function jl(e){return e.trim().split(/\s+/g)}function Vl(e,t,n){if(e)for(const r of jl(t))e.addEventListener(r,n,!1)}function Gl(e,t,n){if(e)for(const r of jl(t))e.removeEventListener(r,n,!1)}function zl(e){return(e.ownerDocument||e).defaultView}function Wl(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,s=0;for(;s=Math.abs(t)?e<0?Il.Left:Il.Right:t<0?Il.Up:Il.Down}function Kl(e,t,n){return{x:t/e||0,y:n/e||0}}let Zl=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,s=n.changedPointers.length,i=t&kl.Start&&r-s===0,o=t&(kl.End|kl.Cancel)&&r-s===0;n.isFirst=Boolean(i),n.isFinal=Boolean(o),i&&(e.session={}),n.eventType=t;const a=function(e,t){const{session:n}=e,{pointers:r}=t,{length:s}=r;n.firstInput||(n.firstInput=Hl(t)),s>1&&!n.firstMultiple?n.firstMultiple=Hl(t):1===s&&(n.firstMultiple=!1);const{firstInput:i,firstMultiple:o}=n,a=o?o.center:i.center,l=t.center=Wl(r);t.timeStamp=Date.now(),t.deltaTime=t.timeStamp-i.timeStamp,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,l),t.distance=$l(a,l);const{deltaX:c,deltaY:u}=function(e,t){const n=t.center;let r=e.offsetDelta,s=e.prevDelta;const i=e.prevInput;return t.eventType!==kl.Start&&(null==i?void 0:i.eventType)!==kl.End||(s=e.prevDelta={x:(null==i?void 0:i.deltaX)||0,y:(null==i?void 0:i.deltaY)||0},r=e.offsetDelta={x:n.x,y:n.y}),{deltaX:s.x+(n.x-r.x),deltaY:s.y+(n.y-r.y)}}(n,t);t.deltaX=c,t.deltaY=u,t.offsetDirection=Yl(t.deltaX,t.deltaY);const h=Kl(t.deltaTime,t.deltaX,t.deltaY);var d,f;t.overallVelocityX=h.x,t.overallVelocityY=h.y,t.overallVelocity=Math.abs(h.x)>Math.abs(h.y)?h.x:h.y,t.scale=o?(d=o.pointers,Xl((f=r)[0],f[1])/Xl(d[0],d[1])):1,t.rotation=o?function(e,t){return ql(t[1],t[0])-ql(e[1],e[0])}(o.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 s,i,o,a;if(t.eventType!==kl.Cancel&&(r>25||void 0===n.velocity)){const l=t.deltaX-n.deltaX,c=t.deltaY-n.deltaY,u=Kl(r,l,c);i=u.x,o=u.y,s=Math.abs(u.x)>Math.abs(u.y)?u.x:u.y,a=Yl(l,c),e.lastInterval=t}else s=n.velocity,i=n.velocityX,o=n.velocityY,a=n.direction;t.velocity=s,t.velocityX=i,t.velocityY=o,t.direction=a}(n,t),t}(e,n);e.emit("hammer.input",a),e.recognize(a),e.session.prevInput=a}(this.manager,e,t)}init(){Vl(this.element,this.evEl,this.domHandler),Vl(this.target,this.evTarget,this.domHandler),Vl(zl(this.element),this.evWin,this.domHandler)}destroy(){Gl(this.element,this.evEl,this.domHandler),Gl(this.target,this.evTarget,this.domHandler),Gl(zl(this.element),this.evWin,this.domHandler)}};const Ql={pointerdown:kl.Start,pointermove:kl.Move,pointerup:kl.End,pointercancel:kl.Cancel,pointerout:kl.Cancel};class Jl extends Zl{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=Ql[e.type],s=e.pointerType,i="touch"===s;let o=t.findIndex(t=>t.pointerId===e.pointerId);r&kl.Start&&(e.buttons||i)?o<0&&(t.push(e),o=t.length-1):r&(kl.End|kl.Cancel)&&(n=!0),o<0||(t[o]=e,this.callback(r,{pointers:t,changedPointers:[e],eventType:r,pointerType:s,srcEvent:e}),n&&t.splice(o,1))}}const ec=["","webkit","Moz","MS","ms","o"];function tc(e,t){const n=t[0].toUpperCase()+t.slice(1);for(const r of ec){const s=r?r+n:t;if(s in e)return s}}const nc={touchAction:"compute",enable:!0,inputTarget:null,cssProps:{userSelect:"none",userDrag:"none",touchCallout:"none",tapHighlightColor:"rgba(0,0,0,0)"}};class rc{constructor(e,t){this.options={...nc,...t,cssProps:{...nc.cssProps,...t.cssProps},inputTarget:t.inputTarget||e},this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=e,this.input=new Jl(this),this.touchAction=new Ul(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:s}=t;(!s||s&&s.state&Nl.Recognized)&&(s=t.curRecognizer=null);let i=0;for(;i-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=Nl.Ended&&this.manager.emit(this.options.event+ic(t),e)}tryEmit(e){this.canEmit()?this.emit(e):this.state=Nl.Failed}canEmit(){let e=0;for(;e{this.state=Nl.Recognized,this.tryEmit(this._input)},t.interval),Nl.Began):Nl.Recognized}return Nl.Failed}failTimeout(){return this._timer=setTimeout(()=>{this.state=Nl.Failed},this.options.interval),Nl.Failed}reset(){clearTimeout(this._timer)}emit(e){this.state===Nl.Recognized&&(e.tapCount=this.count,this.manager.emit(this.options.event,e))}}const cc=["","start","move","end","cancel","up","down","left","right"];class uc extends ac{constructor(e={}){super({enable:!0,pointers:1,event:"pan",threshold:10,direction:Il.All,...e}),this.pX=null,this.pY=null}getTouchAction(){const{options:{direction:e}}=this,t=[];return e&Il.Horizontal&&t.push(Bl),e&Il.Vertical&&t.push(Dl),t}getEventNames(){return cc.map(e=>this.options.event+e)}directionTest(e){const{options:t}=this;let n=!0,{distance:r}=e,{direction:s}=e;const i=e.deltaX,o=e.deltaY;return s&t.direction||(t.direction&Il.Horizontal?(s=0===i?Il.None:i<0?Il.Left:Il.Right,n=i!==this.pX,r=Math.abs(e.deltaX)):(s=0===o?Il.None:o<0?Il.Up:Il.Down,n=o!==this.pY,r=Math.abs(e.deltaY))),e.direction=s,n&&r>t.threshold&&Boolean(s&t.direction)}attrTest(e){return super.attrTest(e)&&(Boolean(this.state&Nl.Began)||!(this.state&Nl.Began)&&this.directionTest(e))}emit(e){this.pX=e.deltaX,this.pY=e.deltaY;const t=Il[e.direction].toLowerCase();t&&(e.additionalEvent=this.options.event+t),super.emit(e)}}const hc=["","start","move","end","cancel","in","out"];class dc{constructor(e,t,n){this.element=e,this.callback=t,this.options=n}}const fc=-1!==("undefined"!=typeof navigator&&navigator.userAgent?navigator.userAgent.toLowerCase():"").indexOf("firefox"),pc=4.000244140625;class gc extends dc{constructor(e,t,n){super(e,t,{enable:!0,...n}),this.handleEvent=e=>{if(!this.options.enable)return;let t=e.deltaY;globalThis.WheelEvent&&(fc&&e.deltaMode===globalThis.WheelEvent.DOM_DELTA_PIXEL&&(t/=globalThis.devicePixelRatio),e.deltaMode===globalThis.WheelEvent.DOM_DELTA_LINE&&(t*=40)),0!==t&&t%pc===0&&(t=Math.floor(t/pc)),e.shiftKey&&t&&(t*=.25),this.callback({type:"wheel",center:{x:e.clientX,y:e.clientY},delta:-t,srcEvent:e,pointerType:"mouse",target:e.target})},e.addEventListener("wheel",this.handleEvent,{passive:!1})}destroy(){this.element.removeEventListener("wheel",this.handleEvent)}enableEventType(e,t){"wheel"===e&&(this.options.enable=t)}}const mc=["mousedown","mousemove","mouseup","mouseover","mouseout","mouseleave"];class _c extends dc{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}=this.options;this.enableMoveEvent=r,this.enableLeaveEvent=r,this.enableEnterEvent=r,this.enableOutEvent=r,this.enableOverEvent=r,mc.forEach(t=>e.addEventListener(t,this.handleEvent))}destroy(){mc.forEach(e=>this.element.removeEventListener(e,this.handleEvent))}enableEventType(e,t){switch(e){case"pointermove":this.enableMoveEvent=t;break;case"pointerover":this.enableOverEvent=t;break;case"pointerout":this.enableOutEvent=t;break;case"pointerenter":this.enableEnterEvent=t;break;case"pointerleave":this.enableLeaveEvent=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})}}const yc=["keydown","keyup"];class bc extends dc{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}))},this.enableDownEvent=this.options.enable,this.enableUpEvent=this.options.enable,e.tabIndex=this.options.tabIndex,e.style.outline="none",yc.forEach(t=>e.addEventListener(t,this.handleEvent))}destroy(){yc.forEach(e=>this.element.removeEventListener(e,this.handleEvent))}enableEventType(e,t){"keydown"===e&&(this.enableDownEvent=t),"keyup"===e&&(this.enableUpEvent=t)}}class vc extends dc{constructor(e,t,n){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})},e.addEventListener("contextmenu",this.handleEvent)}destroy(){this.element.removeEventListener("contextmenu",this.handleEvent)}enableEventType(e,t){"contextmenu"===e&&(this.options.enable=t)}}const xc={pointerdown:1,pointermove:2,pointerup:4,mousedown:1,mousemove:2,mouseup:4};function wc(e){const t=xc[e.srcEvent.type];if(!t)return null;const{buttons:n,button:r}=e.srcEvent;let s=!1,i=!1,o=!1;return 2===t?(s=Boolean(1&n),i=Boolean(4&n),o=Boolean(2&n)):(s=0===r,i=1===r,o=2===r),{leftButton:s,middleButton:i,rightButton:o}}function Ec(e,t){const n=e.center;if(!n)return null;const r=t.getBoundingClientRect(),s=r.width/t.offsetWidth||1,i=r.height/t.offsetHeight||1;return{center:n,offsetCenter:{x:(n.x-r.left-t.clientLeft)/s,y:(n.y-r.top-t.clientTop)/i}}}const Tc={srcElement:"root",priority:0};class Sc{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,s=!1){const{handlers:i,handlersByElement:o}=this,a={...Tc,...n};let l=o.get(a.srcElement);l||(l=[],o.set(a.srcElement,l));const c={type:e,handler:t,srcElement:a.srcElement,priority:a.priority};r&&(c.once=!0),s&&(c.passive=!0),i.push(c),this._active=this._active||!c.passive;let u=l.length-1;for(;u>=0&&!(l[u].priority>=c.priority);)u--;l.splice(u+1,0,c)}remove(e,t){const{handlers:n,handlersByElement:r}=this;for(let s=n.length-1;s>=0;s--){const i=n[s];if(i.type===e&&i.handler===t){n.splice(s,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},s=()=>{e.handled=!0,t=!0},i=[];for(let o=0;o{e.srcEvent.preventDefault()},stopImmediatePropagation:null,stopPropagation:null,handled:!1,rootElement:t}}}function Ac(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]}}class Rc{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,e){this.manager=new rc(e,this.options);for(const e of this.options.recognizers){const{recognizer:t,recognizeWith:n,requireFailure:r}=Ac(e);this.manager.add(t),n&&t.recognizeWith(n),r&&t.requireFailure(r)}this.manager.on("hammer.input",this._onBasicInput),this.wheelInput=new gc(e,this._onOtherEvent,{enable:!1}),this.moveInput=new _c(e,this._onOtherEvent,{enable:!1}),this.keyInput=new bc(e,this._onOtherEvent,{enable:!1,tabIndex:t.tabIndex}),this.contextmenuInput=new vc(e,this._onOtherEvent,{enable:!1}),this.on(this.options.events)}}getElement(){return this.element}destroy(){this.element&&(this.wheelInput.destroy(),this.moveInput.destroy(),this.keyInput.destroy(),this.contextmenuInput.destroy(),this.manager.destroy())}on(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)}_toggleRecognizer(e,t){var n,r,s,i;const{manager:o}=this;if(!o)return;const a=o.get(e);a&&(a.set({enable:t}),o.touchAction.update()),null==(n=this.wheelInput)||n.enableEventType(e,t),null==(r=this.moveInput)||r.enableEventType(e,t),null==(s=this.keyInput)||s.enableEventType(e,t),null==(i=this.contextmenuInput)||i.enableEventType(e,t)}_addEventHandler(e,t,n,r,s){if("string"!=typeof e){n=t;for(const[t,i]of Object.entries(e))this._addEventHandler(t,i,n,r,s);return}const{manager:i,events:o}=this;if(!i)return;let a=o.get(e);if(!a){const t=this._getRecognizerName(e)||e;a=new Sc(this,t),o.set(e,a),i&&i.on(e,a.handleEvent)}a.add(e,t,n,r,s),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){var t;return null==(t=this.manager.recognizers.find(t=>t.getEventNames().includes(e)))?void 0:t.options.event}}const Cc={DEFAULT:-1,LNGLAT:1,METER_OFFSETS:2,LNGLAT_OFFSETS:3,CARTESIAN:0};Object.defineProperty(Cc,"IDENTITY",{get:()=>($n.deprecated("COORDINATE_SYSTEM.IDENTITY","COORDINATE_SYSTEM.CARTESIAN")(),0)});const kc={WEB_MERCATOR:1,GLOBE:2,WEB_MERCATOR_AUTO_OFFSET:4,IDENTITY:0},Pc={common:0,meters:1,pixels:2},Ic={click:"onClick",dblclick:"onClick",panstart:"onDragStart",panmove:"onDrag",panend:"onDragEnd"},Mc={multipan:[uc,{threshold:10,direction:Il.Vertical,pointers:2}],pinch:[class extends ac{constructor(e={}){super({enable:!0,event:"pinch",threshold:0,pointers:2,...e})}getTouchAction(){return[Fl]}getEventNames(){return hc.map(e=>this.options.event+e)}attrTest(e){return super.attrTest(e)&&(Math.abs(e.scale-1)>this.options.threshold||Boolean(this.state&Nl.Began))}emit(e){if(1!==e.scale){const t=e.scale<1?"in":"out";e.additionalEvent=this.options.event+t}super.emit(e)}},{},null,["multipan"]],pan:[uc,{threshold:1},["pinch"],["multipan"]],dblclick:[lc,{event:"dblclick",taps:2}],click:[lc,{event:"click"},null,["dblclick"]]};function Nc(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{for(const s in r)if(!Nc(r[s],n[s])){t=e(r),n=r;break}return t}}const Oc=[0,0,0,0],Fc=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0],Dc=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],Bc=[0,0,0],Uc=[0,0,0],jc=Lc(function({viewport:e,devicePixelRatio:t,coordinateSystem:n,coordinateOrigin:r}){const{projectionCenter:s,viewProjectionMatrix:i,originCommon:o,cameraPosCommon:a,shaderCoordinateOrigin:l,geospatialOrigin:c}=function(e,t,n){const{viewMatrixUncentered:r,projectionMatrix:s}=e;let{viewMatrix:i,viewProjectionMatrix:o}=e,a=Oc,l=Oc,c=e.cameraPosition;const{geospatialOrigin:u,shaderCoordinateOrigin:h,offsetMode:d}=Vc(e,t,n);return d&&(l=e.projectPosition(u||h),c=[c[0]-l[0],c[1]-l[1],c[2]-l[2]],l[3]=1,a=ul([],l,o),i=r||i,o=sl([],s,i),o=sl([],o,Fc)),{viewMatrix:i,viewProjectionMatrix:o,projectionCenter:a,originCommon:l,cameraPosCommon:c,shaderCoordinateOrigin:h,geospatialOrigin:u}}(e,n,r),u=e.getDistanceScales(),h=[e.width*t,e.height*t],d=ul([],[0,0,-e.focalDistance,1],e.projectionMatrix)[3]||1,f={coordinateSystem:n,projectionMode:e.projectionMode,coordinateOrigin:l,commonOrigin:o.slice(0,3),center:s,pseudoMeters:Boolean(e._pseudoMeters),viewportSize:h,devicePixelRatio:t,focalDistance:d,commonUnitsPerMeter:u.unitsPerMeter,commonUnitsPerWorldUnit:u.unitsPerMeter,commonUnitsPerWorldUnit2:Bc,scale:e.scale,wrapLongitude:!1,viewProjectionMatrix:i,modelMatrix:Dc,cameraPosition:a};if(c){const t=e.getDistanceScales(c);switch(n){case Cc.METER_OFFSETS:f.commonUnitsPerWorldUnit=t.unitsPerMeter,f.commonUnitsPerWorldUnit2=t.unitsPerMeter2;break;case Cc.LNGLAT:case Cc.LNGLAT_OFFSETS:e._pseudoMeters||(f.commonUnitsPerMeter=t.unitsPerMeter),f.commonUnitsPerWorldUnit=t.unitsPerDegree,f.commonUnitsPerWorldUnit2=t.unitsPerDegree2;break;case Cc.CARTESIAN:f.commonUnitsPerWorldUnit=[1,1,t.unitsPerMeter[2]],f.commonUnitsPerWorldUnit2=[0,0,t.unitsPerMeter2[2]]}}return f});function Vc(e,t,n=Uc){n.length<3&&(n=[n[0],n[1],0]);let r,s=n,i=!0;switch(r=t===Cc.LNGLAT_OFFSETS||t===Cc.METER_OFFSETS?n:e.isGeospatial?[Math.fround(e.longitude),Math.fround(e.latitude),0]:null,e.projectionMode){case kc.WEB_MERCATOR:t!==Cc.LNGLAT&&t!==Cc.CARTESIAN||(r=[0,0,0],i=!1);break;case kc.WEB_MERCATOR_AUTO_OFFSET:t===Cc.LNGLAT?s=r:t===Cc.CARTESIAN&&(s=[Math.fround(e.center[0]),Math.fround(e.center[1]),0],r=e.unprojectPosition(s),s[0]-=n[0],s[1]-=n[1],s[2]-=n[2]);break;case kc.IDENTITY:s=e.position.map(Math.fround),s[2]=s[2]||0;break;case kc.GLOBE:i=!1,r=null;break;default:i=!1}return{geospatialOrigin:r,shaderCoordinateOrigin:s,offsetMode:i}}const Gc=`${Object.keys(Cc).map(e=>`const COORDINATE_SYSTEM_${e}: i32 = ${Cc[e]};`).join("")}\n${Object.keys(kc).map(e=>`const PROJECTION_MODE_${e}: i32 = ${kc[e]};`).join("")}\n${Object.keys(Pc).map(e=>`const UNIT_${e.toUpperCase()}: i32 = ${Pc[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 = vec3(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,\n projectionMode: i32,\n scale: f32,\n commonUnitsPerWorldUnit: vec3,\n commonUnitsPerWorldUnit2: vec3,\n center: vec4,\n modelMatrix: mat4x4,\n viewProjectionMatrix: mat4x4,\n viewportSize: vec2,\n devicePixelRatio: f32,\n focalDistance: f32,\n cameraPosition: vec3,\n coordinateOrigin: vec3,\n commonOrigin: vec3,\n pseudoMeters: i32,\n};\n\n@group(0) @binding(0)\nvar project: ProjectUniforms;\n\n// -----------------------------------------------------------------------------\n// Geometry data\n// (In your GLSL code, "geometry" was assumed to be available globally. In WGSL,\n// you might supply this via vertex attributes or a uniform. Here we define a\n// uniform struct for demonstration.)\n// -----------------------------------------------------------------------------\n\n// Structure to carry additional geometry data used by deck.gl filters.\nstruct Geometry {\n worldPosition: vec3,\n worldPositionAlt: vec3,\n position: vec4,\n normal: vec3,\n uv: vec2,\n pickingColor: vec3,\n};\n\n// @group(0) @binding(1)\nvar 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) -> vec2 {\n return meters * project.commonUnitsPerMeter.xy * project_size();\n}\n\nfn project_size_vec3(meters: vec3) -> vec3 {\n return meters * project.commonUnitsPerMeter * project_size();\n}\n\nfn project_size_vec4(meters: vec4) -> vec4 {\n return vec4(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) -> mat3x3 {\n let uz = normalize(up);\n let ux = select(\n vec3(1.0, 0.0, 0.0),\n normalize(vec3(uz.y, -uz.x, 0.0)),\n abs(uz.z) == 1.0\n );\n let uy = cross(uz, ux);\n return mat3x3(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,\n};\n\nfn project_needs_rotation(commonPosition: vec3) -> RotationResult {\n if (project.projectionMode == PROJECTION_MODE_GLOBE) {\n return RotationResult(true, project_get_orientation_matrix(commonPosition));\n } else {\n return RotationResult(false, mat3x3()); // 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) -> vec3 {\n let normal_modelspace = project.modelMatrix * vec4(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) -> vec4 {\n let dy: f32 = offset.y;\n let commonUnitsPerWorldUnit = project.commonUnitsPerWorldUnit + project.commonUnitsPerWorldUnit2 * dy;\n return vec4(offset.xyz * commonUnitsPerWorldUnit, offset.w);\n}\n\n// Projects lng/lat coordinates to a unit tile [0,1]\nfn project_mercator_(lnglat: vec2) -> vec2 {\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(\n radians(x) + PI,\n PI + log(tan(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) -> vec3 {\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(\n sin(lambda) * cosPhi,\n -cos(lambda) * cosPhi,\n sin(phi)\n ) * D;\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, position64Low: vec3) -> vec4 {\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(\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(\n project_globe_(position_world.xyz),\n position_world.w\n );\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(\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(position64Low, 0.0));\n}\n\n// Overloaded versions for different input types.\nfn project_position_vec4_f32(position: vec4) -> vec4 {\n return project_position_vec4_f64(position, ZERO_64_LOW);\n}\n\nfn project_position_vec3_f64(position: vec3, position64Low: vec3) -> vec3 {\n let projected_position = project_position_vec4_f64(vec4(position, 1.0), position64Low);\n return projected_position.xyz;\n}\n\nfn project_position_vec3_f32(position: vec3) -> vec3 {\n let projected_position = project_position_vec4_f64(vec4(position, 1.0), ZERO_64_LOW);\n return projected_position.xyz;\n}\n\nfn project_position_vec2_f32(position: vec2) -> vec2 {\n let projected_position = project_position_vec4_f64(vec4(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, viewProjectionMatrix: mat4x4, center: vec4) -> vec4 {\n return viewProjectionMatrix * position + center;\n}\n\n// Uses the project viewProjectionMatrix and center.\nfn project_common_position_to_clipspace(position: vec4) -> vec4 {\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) -> vec2 {\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) -> vec2 {\n return pixels / project.scale;\n}\n`,zc=Object.keys(Cc).map(e=>`const int COORDINATE_SYSTEM_${e} = ${Cc[e]};`).join(""),Wc=Object.keys(kc).map(e=>`const int PROJECTION_MODE_${e} = ${kc[e]};`).join(""),Hc=Object.keys(Pc).map(e=>`const int UNIT_${e.toUpperCase()} = ${Pc[e]};`).join(""),$c={},Xc={name:"project",dependencies:[{name:"fp32",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"},Cl],source:Gc,vs:`${zc}\n${Wc}\n${Hc}\nuniform 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}\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}\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}\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=$c){return"viewport"in e?function({viewport:e,devicePixelRatio:t=1,modelMatrix:n=null,coordinateSystem:r=Cc.DEFAULT,coordinateOrigin:s=Uc,autoWrapLongitude:i=!1}){r===Cc.DEFAULT&&(r=e.isGeospatial?Cc.LNGLAT:Cc.CARTESIAN);const o=jc({viewport:e,devicePixelRatio:t,coordinateSystem:r,coordinateOrigin:s});return o.wrapLongitude=i,o.modelMatrix=n||Dc,o}(e):{}},uniformTypes:{wrapLongitude:"f32",coordinateSystem:"i32",commonUnitsPerMeter:"vec3",projectionMode:"i32",scale:"f32",commonUnitsPerWorldUnit:"vec3",commonUnitsPerWorldUnit2:"vec3",center:"vec4",modelMatrix:"mat4x4",viewProjectionMatrix:"mat4x4",viewportSize:"vec2",devicePixelRatio:"f32",focalDistance:"f32",cameraPosition:"vec3",coordinateOrigin:"vec3",commonOrigin:"vec3",pseudoMeters:"f32"}},qc={name:"project32",dependencies:[Xc],source:"// Define a structure to hold both the clip-space position and the common position.\nstruct ProjectResult {\n clipPosition: vec4,\n commonPosition: vec4,\n};\n\n// This function mimics the GLSL version with the 'out' parameter by returning both values.\nfn project_position_to_clipspace_and_commonspace(\n position: vec3,\n position64Low: vec3,\n offset: vec3\n) -> ProjectResult {\n // Compute the projected position.\n let projectedPosition: vec3 = project_position_vec3_f64(position, position64Low);\n\n // Start with the provided offset.\n var finalOffset: vec3 = offset;\n\n // Get whether a rotation is needed and the rotation matrix.\n let rotationResult = project_needs_rotation(projectedPosition);\n\n // If rotation is needed, update the offset.\n if (rotationResult.needsRotation) {\n finalOffset = rotationResult.transform * offset;\n }\n\n // Compute the common position.\n let commonPosition: vec4 = vec4(projectedPosition + finalOffset, 1.0);\n\n // Convert to clip-space.\n let clipPosition: vec4 = project_common_position_to_clipspace(commonPosition);\n\n return ProjectResult(clipPosition, commonPosition);\n}\n\n// A convenience overload that returns only the clip-space position.\nfn project_position_to_clipspace(\n position: vec3,\n position64Low: vec3,\n offset: vec3\n) -> vec4 {\n return project_position_to_clipspace_and_commonspace(position, position64Low, offset).clipPosition;\n}\n",vs:"vec4 project_position_to_clipspace(\n vec3 position, vec3 position64Low, vec3 offset, out vec4 commonPosition\n) {\n vec3 projectedPosition = project_position(position, position64Low);\n mat3 rotation;\n if (project_needs_rotation(projectedPosition, rotation)) {\n // offset is specified as ENU\n // when in globe projection, rotate offset so that the ground alighs with the surface of the globe\n offset = rotation * offset;\n }\n commonPosition = vec4(projectedPosition + offset, 1.0);\n return project_common_position_to_clipspace(commonPosition);\n}\n\nvec4 project_position_to_clipspace(\n vec3 position, vec3 position64Low, vec3 offset\n) {\n vec4 commonPosition;\n return project_position_to_clipspace(position, position64Low, offset, commonPosition);\n}\n"};function Yc(e,t){const n=ul([],t,e);return cl(n,n,1/n[3]),n}function Kc(e,t){const n=e%t;return n<0?t+n:n}function Zc(e,t,n){return en?n:e}const Qc=Math.log2||function(e){return Math.log(e)*Math.LOG2E};function Jc(e,t){if(!e)throw new Error(t||"@math.gl/web-mercator: assertion failed.")}const eu=Math.PI,tu=eu/4,nu=eu/180,ru=180/eu,su=512,iu=85.051129,ou=1.5;function au(e){const[t,n]=e;Jc(Number.isFinite(t)),Jc(Number.isFinite(n)&&n>=-90&&n<=90,"invalid latitude");const r=n*nu;return[su*(t*nu+eu)/(2*eu),su*(eu+Math.log(Math.tan(tu+.5*r)))/(2*eu)]}function lu(e){const[t,n]=e,r=t/su*(2*eu)-eu,s=2*(Math.atan(Math.exp(n/su*(2*eu)-eu))-tu);return[r*ru,s*ru]}function cu(e){return 12790407194604047e-21/Math.cos(e*nu)}function uu(e){const{latitude:t,longitude:n,highPrecision:r=!1}=e;Jc(Number.isFinite(t)&&Number.isFinite(n));const s=Math.cos(t*nu),i=512/360,o=i/s,a=12790407194604047e-21/s,l={unitsPerMeter:[a,a,a],metersPerUnit:[1/a,1/a,1/a],unitsPerDegree:[i,o,a],degreesPerUnit:[.703125,1/o,1/a]};if(r){const e=nu*Math.tan(t*nu)/s,n=i*e/2,r=12790407194604047e-21*e,c=r/o*a;l.unitsPerDegree2=[0,n,r],l.unitsPerMeter2=[c,0,c]}return l}function hu(e,t){const[n,r,s]=e,[i,o,a]=t,{unitsPerMeter:l,unitsPerMeter2:c}=uu({longitude:n,latitude:r,highPrecision:!0}),u=au(e);u[0]+=i*(l[0]+c[0]*o),u[1]+=o*(l[1]+c[1]*o);const h=lu(u),d=(s||0)+(a||0);return Number.isFinite(s)||Number.isFinite(a)?[h[0],h[1],d]:h}function du(e){return 2*Math.atan(.5/e)*ru}function fu(e){return.5/Math.tan(.5*e*nu)}function pu(e,t){const[n,r,s=0]=e;return Jc(Number.isFinite(n)&&Number.isFinite(r)&&Number.isFinite(s)),Yc(t,[n,r,s,1])}function gu(e,t,n=0){const[r,s,i]=e;if(Jc(Number.isFinite(r)&&Number.isFinite(s),"invalid pixel coordinate"),Number.isFinite(i))return Yc(t,[r,s,i,1]);const o=Yc(t,[r,s,0,1]),a=Yc(t,[r,s,1,1]),l=o[2],c=a[2];return qa([],o,a,l===c?0:((n||0)-l)/(c-l))}const mu=Math.PI/180;function _u(e,t,n){const{pixelUnprojectionMatrix:r}=e,s=Yc(r,[t,0,1,1]),i=Yc(r,[t,e.height,1,1]),o=lu(qa([],s,i,(n*e.distanceScales.unitsPerMeter[2]-s[2])/(i[2]-s[2])));return o.push(n),o}const yu="\nuniform shadowUniforms {\n bool drawShadowMap;\n bool useShadowMap;\n vec4 color;\n highp int lightId;\n float lightCount;\n mat4 viewProjectionMatrix0;\n mat4 viewProjectionMatrix1;\n vec4 projectCenter0;\n vec4 projectCenter1;\n} shadow;\n",bu=`\n${yu}\n\nconst int max_lights = 2;\n\nout vec3 shadow_vPosition[max_lights];\n\nvec4 shadow_setVertexPosition(vec4 position_commonspace) {\n mat4 viewProjectionMatrices[max_lights];\n viewProjectionMatrices[0] = shadow.viewProjectionMatrix0;\n viewProjectionMatrices[1] = shadow.viewProjectionMatrix1;\n vec4 projectCenters[max_lights];\n projectCenters[0] = shadow.projectCenter0;\n projectCenters[1] = shadow.projectCenter1;\n\n if (shadow.drawShadowMap) {\n return project_common_position_to_clipspace(position_commonspace, viewProjectionMatrices[shadow.lightId], projectCenters[shadow.lightId]);\n }\n if (shadow.useShadowMap) {\n for (int i = 0; i < max_lights; i++) {\n if(i < int(shadow.lightCount)) {\n vec4 shadowMap_position = project_common_position_to_clipspace(position_commonspace, viewProjectionMatrices[i], projectCenters[i]);\n shadow_vPosition[i] = (shadowMap_position.xyz / shadowMap_position.w + 1.0) / 2.0;\n }\n }\n }\n return gl_Position;\n}\n\n`,vu=`\n${yu}\n\nconst int max_lights = 2;\nuniform sampler2D shadow_uShadowMap0;\nuniform sampler2D shadow_uShadowMap1;\n\nin vec3 shadow_vPosition[max_lights];\n\nconst vec4 bitPackShift = vec4(1.0, 255.0, 65025.0, 16581375.0);\nconst vec4 bitUnpackShift = 1.0 / bitPackShift;\nconst vec4 bitMask = vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n\nfloat shadow_getShadowWeight(vec3 position, sampler2D shadowMap) {\n vec4 rgbaDepth = texture(shadowMap, position.xy);\n\n float z = dot(rgbaDepth, bitUnpackShift);\n return smoothstep(0.001, 0.01, position.z - z);\n}\n\nvec4 shadow_filterShadowColor(vec4 color) {\n if (shadow.drawShadowMap) {\n vec4 rgbaDepth = fract(gl_FragCoord.z * bitPackShift);\n rgbaDepth -= rgbaDepth.gbaa * bitMask;\n return rgbaDepth;\n }\n if (shadow.useShadowMap) {\n float shadowAlpha = 0.0;\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[0], shadow_uShadowMap0);\n if(shadow.lightCount > 1.0) {\n shadowAlpha += shadow_getShadowWeight(shadow_vPosition[1], shadow_uShadowMap1);\n }\n shadowAlpha *= shadow.color.a / shadow.lightCount;\n float blendedAlpha = shadowAlpha + color.a * (1.0 - shadowAlpha);\n\n return vec4(\n mix(color.rgb, shadow.color.rgb, shadowAlpha / blendedAlpha),\n blendedAlpha\n );\n }\n return color;\n}\n\n`,xu=Lc(function({viewport:e,center:t}){return new yl(e.viewProjectionMatrix).invert().transform(t)}),wu=Lc(function({viewport:e,shadowMatrices:t}){const n=[],r=e.pixelUnprojectionMatrix,s=e.isGeospatial?void 0:1,i=[[0,0,s],[e.width,0,s],[0,e.height,s],[e.width,e.height,s],[0,0,-1],[e.width,0,-1],[0,e.height,-1],[e.width,e.height,-1]].map(e=>function(e,t){const[n,r,s]=e,i=gu([n,r,s],t);return Number.isFinite(s)?i:[i[0],i[1],0]}(e,r));for(const o of t){const t=o.clone().translate(new tl(e.center).negate()),r=i.map(e=>t.transform(e)),s=(new yl).ortho({left:Math.min(...r.map(e=>e[0])),right:Math.max(...r.map(e=>e[0])),bottom:Math.min(...r.map(e=>e[1])),top:Math.max(...r.map(e=>e[1])),near:Math.min(...r.map(e=>-e[2])),far:Math.max(...r.map(e=>-e[2]))});n.push(s.multiplyRight(o))}return n}),Eu=[0,0,0,1],Tu=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0],Su={name:"shadow",dependencies:[Xc],vs:bu,fs:vu,inject:{"vs:DECKGL_FILTER_GL_POSITION":"\n position = shadow_setVertexPosition(geometry.position);\n ","fs:DECKGL_FILTER_COLOR":"\n color = shadow_filterShadowColor(color);\n "},getUniforms:function(e){const{shadowEnabled:t=!0,project:n}=e;if(!(t&&n&&e.shadowMatrices&&e.shadowMatrices.length))return{drawShadowMap:!1,useShadowMap:!1,shadow_uShadowMap0:e.dummyShadowMap,shadow_uShadowMap1:e.dummyShadowMap};const r=Xc.getUniforms(n),s=xu({viewport:n.viewport,center:r.center}),i=[],o=wu({shadowMatrices:e.shadowMatrices,viewport:n.viewport}).slice();for(let l=0;l0,color:e.shadowColor||Eu,lightId:e.shadowLightId||0,lightCount:e.shadowMatrices.length,shadow_uShadowMap0:e.dummyShadowMap,shadow_uShadowMap1:e.dummyShadowMap};for(let l=0;l",lightId:"i32",lightCount:"f32",viewProjectionMatrix0:"mat4x4",viewProjectionMatrix1:"mat4x4",projectCenter0:"vec4",projectCenter1:"vec4"}},Au={...Tl,defaultUniforms:{...Tl.defaultUniforms,useFloatColors:!1},inject:{"vs:DECKGL_FILTER_GL_POSITION":"\n // for picking depth values\n picking_setPickingAttribute(position.z / position.w);\n ","vs:DECKGL_FILTER_COLOR":"\n picking_setPickingColor(geometry.pickingColor);\n ","fs:DECKGL_FILTER_COLOR":{order:99,injection:"\n // use highlight color if this fragment belongs to the selected object.\n color = picking_filterHighlightColor(color);\n\n // use picking color if rendering to picking FBO.\n color = picking_filterPickingColor(color);\n "}}},Ru=[Cl],Cu=["vs:DECKGL_FILTER_SIZE(inout vec3 size, VertexGeometry geometry)","vs:DECKGL_FILTER_GL_POSITION(inout vec4 position, VertexGeometry geometry)","vs:DECKGL_FILTER_COLOR(inout vec4 color, VertexGeometry geometry)","fs:DECKGL_FILTER_COLOR(inout vec4 color, FragmentGeometry geometry)"],ku=[];function Pu(e){const t=Mr.getDefaultShaderAssembler();for(const r of Ru)t.addDefaultModule(r);t._hookFunctions.length=0;const n="glsl"===e?Cu:ku;for(const r of n)t.addShaderHook(r);return t}const Iu=[255,255,255],Mu=1;let Nu=0;class Lu{constructor(e={}){this.type="ambient";const{color:t=Iu}=e,{intensity:n=Mu}=e;this.id=e.id||"ambient-"+Nu++,this.color=t,this.intensity=n}}const Ou=[255,255,255],Fu=1,Du=[0,0,-1];let Bu=0;class Uu{constructor(e={}){this.type="directional";const{color:t=Ou}=e,{intensity:n=Fu}=e,{direction:r=Du}=e,{_shadow:s=!1}=e;this.id=e.id||"directional-"+Bu++,this.color=t,this.intensity=n,this.type="directional",this.direction=new tl(r).normalize().toArray(),this.shadow=s}getProjectedLight(e){return this}}class ju{constructor(e,t={id:"pass"}){const{id:n}=t;this.id=n,this.device=e,this.props={...t}}setProps(e){Object.assign(this.props,e)}render(e){}cleanup(){}}class Vu extends ju{constructor(){super(...arguments),this._lastRenderIndex=-1}render(e){const[t,n]=this.device.canvasContext.getDrawingBufferSize(),r=e.clearCanvas??!0,s=e.clearColor??(!!r&&[0,0,0,0]),i=!!r&&1,o=!!r&&0,a=e.colorMask??15,l={viewport:[0,0,t,n]};e.colorMask&&(l.colorMask=a),e.scissorRect&&(l.scissorRect=e.scissorRect);const c=this.device.beginRenderPass({framebuffer:e.target,parameters:l,clearColor:s,clearDepth:i,clearStencil:o});try{return this._drawLayers(c,e)}finally{c.end(),this.device.submit()}}_drawLayers(e,t){const{target:n,shaderModuleProps:r,viewports:s,views:i,onViewportActive:o,clearStack:a=!0}=t;t.pass=t.pass||"unknown",a&&(this._lastRenderIndex=-1);const l=[];for(const c of s){const s=i&&i[c.id];null==o||o(c);const a=this._getDrawLayerParams(c,t),u=c.subViewports||[c];for(const i of u){const o=this._drawLayersInViewport(e,{target:n,shaderModuleProps:r,viewport:i,view:s,pass:t.pass,layers:t.layers},a);l.push(o)}}return l}_getDrawLayerParams(e,{layers:t,pass:n,isPicking:r=!1,layerFilter:s,cullRect:i,effects:o,shaderModuleProps:a},l=!1){var c;const u=[],h=Gu(this._lastRenderIndex+1),d={layer:t[0],viewport:e,isPicking:r,renderPass:n,cullRect:i},f={};for(let p=0;pe/255):!1===t&&(e=!1),void 0!==n&&(i=n),void 0!==r&&(o=r),this.device.beginRenderPass({framebuffer:s,parameters:{viewport:l,scissorRect:l},clearColor:e,clearDepth:i,clearStencil:o}).end()}}const c={totalCount:t.length,visibleCount:0,compositeCount:0,pickableCount:0};e.setParameters({viewport:l});for(let h=0;h{const o=s.props._offset,a=s.id,l=s.parent&&s.parent.id;let c;if(l&&!(l in t)&&r(s.parent,!1),l in n){const e=n[l]=n[l]||Gu(t[l],t);c=e(s,i),n[a]=e}else Number.isFinite(o)?(c=o+(t[l]||0),n[a]=null):c=e;return i&&c>=e&&(e=c+1),t[a]=c,c};return r}function zu(e,...t){for(const n of t)if(n)for(const t in n)e[t]?Object.assign(e[t],n[t]):e[t]=n[t];return e}class Wu extends Vu{constructor(e,t){super(e,t);const n=e.createTexture({format:"rgba8unorm",width:1,height:1,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}}),r=e.createTexture({format:"depth16unorm",width:1,height:1});this.fbo=e.createFramebuffer({id:"shadowmap",width:1,height:1,colorAttachments:[n],depthStencilAttachment:r})}delete(){this.fbo&&(this.fbo.destroy(),this.fbo=null)}getShadowMap(){return this.fbo.colorAttachments[0].texture}render(e){const t=this.fbo,n=this.device.canvasContext.cssToDeviceRatio(),r=e.viewports[0],s=r.width*n,i=r.height*n;s===t.width&&i===t.height||t.resize({width:s,height:i}),super.render({...e,clearColor:[1,1,1,1],target:t,pass:"shadow"})}getLayerParameters(e,t,n){return{...e.props.parameters,blend:!1,depthWriteEnabled:!0,depthCompare:"less-equal"}}shouldDrawLayer(e){return!1!==e.props.shadowEnabled}getShaderModuleProps(e,t,n){return{shadow:{project:n.project,drawToShadowMap:!0}}}}const Hu={color:[255,255,255],intensity:1},$u=[{color:[255,255,255],intensity:1,direction:[-1,3,-1]},{color:[255,255,255],intensity:.9,direction:[1,-8,-2.5]}],Xu=[0,0,0,200/255];class qu{constructor(e={}){this.id="lighting-effect",this.shadowColor=Xu,this.shadow=!1,this.directionalLights=[],this.pointLights=[],this.shadowPasses=[],this.dummyShadowMap=null,this.setProps(e)}setup(e){this.context=e;const{device:t,deck:n}=e;this.shadow&&!this.dummyShadowMap&&(this._createShadowPasses(t),n._addDefaultShaderModule(Su),this.dummyShadowMap=t.createTexture({width:1,height:1}))}setProps(e){this.ambientLight=void 0,this.directionalLights=[],this.pointLights=[];for(const t in e){const n=e[t];switch(n.type){case"ambient":this.ambientLight=n;break;case"directional":this.directionalLights.push(n);break;case"point":this.pointLights.push(n)}}this._applyDefaultLights(),this.shadow=this.directionalLights.some(e=>e.shadow),this.context&&this.setup(this.context),this.props=e}preRender({layers:e,layerFilter:t,viewports:n,onViewportActive:r,views:s}){if(this.shadow){this.shadowMatrices=this._calculateMatrices();for(let i=0;ie.getShadowMap()),dummyShadowMap:this.dummyShadowMap,shadowColor:this.shadowColor,shadowMatrices:this.shadowMatrices}:{},r={enabled:!0,ambientLight:this.ambientLight,directionalLights:this.directionalLights.map(t=>t.getProjectedLight({layer:e})),pointLights:this.pointLights.map(t=>t.getProjectedLight({layer:e}))},s=e.props.material;return{shadow:n,lighting:r,phongMaterial:s,gouraudMaterial:s}}cleanup(e){for(const t of this.shadowPasses)t.delete();this.shadowPasses.length=0,this.dummyShadowMap&&(this.dummyShadowMap.destroy(),this.dummyShadowMap=null,e.deck._removeDefaultShaderModule(Su))}_calculateMatrices(){const e=[];for(const t of this.directionalLights){const n=(new yl).lookAt({eye:new tl(t.direction).negate()});e.push(n)}return e}_createShadowPasses(e){for(let t=0;tr&&(s=r);const i=this._pool,o=e.BYTES_PER_ELEMENT*s,a=i.findIndex(e=>e.byteLength>=o);if(a>=0){const t=new e(i.splice(a,1)[0],0,s);return n&&t.fill(0),t}return new e(s)}_release(e){if(!ArrayBuffer.isView(e))return;const t=this._pool,{buffer:n}=e,{byteLength:r}=n,s=t.findIndex(e=>e.byteLength>=r);s<0?t.push(n):(s>0||t.lengththis.opts.poolSize&&t.shift()}},Ku=new tl;function Zu(e,t,n,r){Ku.set(e,t,n);const s=Ku.len();return{distance:r/s,normal:new tl(-e/s,-t/s,-n/s)}}function Qu(e){return e-Math.fround(e)}let Ju;function eh(e,t){const{size:n=1,startIndex:r=0}=t,s=void 0!==t.endIndex?t.endIndex:e.length,i=(s-r)/n;Ju=Yu.allocate(Ju,i,{type:Float32Array,size:2*n});let o=r,a=0;for(;o(90-e.pitch)*mu-.01?(l=_u(e,0,t),c=_u(e,n,t)):(l=s([0,0],i),c=s([n,0],i)),[o,a,c,l]}(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(e,t={}){const{width:n,height:r}=this,{longitude:s,latitude:i,zoom:o}=function(e){const{width:t,height:n,bounds:r,minExtent:s=0,maxZoom:i=24,offset:o=[0,0]}=e,[[a,l],[c,u]]=r,h=function(e=0){return"number"==typeof e?{top:e,bottom:e,left:e,right:e}:(Jc(Number.isFinite(e.top)&&Number.isFinite(e.bottom)&&Number.isFinite(e.left)&&Number.isFinite(e.right)),e)}(e.padding),d=au([a,Zc(u,-85.051129,iu)]),f=au([c,Zc(l,-85.051129,iu)]),p=[Math.max(Math.abs(f[0]-d[0]),s),Math.max(Math.abs(f[1]-d[1]),s)],g=[t-h.left-h.right-2*Math.abs(o[0]),n-h.top-h.bottom-2*Math.abs(o[1])];Jc(g[0]>0&&g[1]>0);const m=g[0]/p[0],_=g[1]/p[1],y=(h.right-h.left)/2/m,b=(h.top-h.bottom)/2/_,v=lu([(f[0]+d[0])/2+y,(f[1]+d[1])/2+b]),x=Math.min(i,Qc(Math.abs(Math.min(m,_))));return Jc(Number.isFinite(x)),{longitude:v[0],latitude:v[1],zoom:x}}({width:n,height:r,bounds:e,...t});return new ah({width:n,height:r,longitude:s,latitude:i,zoom:o})}}ah.displayName="WebMercatorViewport";const lh=[0,0,0];function ch(e,t,n=!1){const r=t.projectPosition(e);if(n&&t instanceof ah){const[n,s,i=0]=e,o=t.getDistanceScales([n,s]);r[2]=i*o.unitsPerMeter[2]}return r}function uh(e,{viewport:t,modelMatrix:n,coordinateSystem:r,coordinateOrigin:s,offsetMode:i}){let[o,a,l=0]=e;switch(n&&([o,a,l]=ul([],[o,a,l,1],n)),r){case Cc.LNGLAT:return ch([o,a,l],t,i);case Cc.LNGLAT_OFFSETS:return ch([o+s[0],a+s[1],l+(s[2]||0)],t,i);case Cc.METER_OFFSETS:return ch(hu(s,[o,a,l]),t,i);default:return t.isGeospatial?[o+s[0],a+s[1],l+s[2]]:t.projectPosition([o,a,l])}}let hh=1,dh=1;class fh{constructor(){r(this,"time",0),r(this,"channels",new Map),r(this,"animations",new Map),r(this,"playing",!1),r(this,"lastEngineTime",-1)}addChannel(e){const{delay:t=0,duration:n=Number.POSITIVE_INFINITY,rate:r=1,repeat:s=1}=e,i=hh++,o={time:0,delay:t,duration:n,rate:r,repeat:s};return this._setChannelTime(o,this.time),this.channels.set(i,o),i}removeChannel(e){this.channels.delete(e);for(const[t,n]of this.animations)n.channel===e&&this.detachAnimation(t)}isFinished(e){const t=this.channels.get(e);return void 0!==t&&this.time>=t.delay+t.duration*t.repeat}getTime(e){if(void 0===e)return this.time;const t=this.channels.get(e);return void 0===t?-1:t.time}setTime(e){this.time=Math.max(0,e);const t=this.channels.values();for(const r of t)this._setChannelTime(r,this.time);const n=this.animations.values();for(const r of n){const{animation:e,channel:t}=r;e.setTime(this.getTime(t))}}play(){this.playing=!0}pause(){this.playing=!1,this.lastEngineTime=-1}reset(){this.setTime(0)}attachAnimation(e,t){const n=dh++;return this.animations.set(n,{animation:e,channel:t}),e.setTime(this.getTime(t)),n}detachAnimation(e){this.animations.delete(e)}update(e){this.playing&&(-1===this.lastEngineTime&&(this.lastEngineTime=e),this.setTime(this.time+(e-this.lastEngineTime)),this.lastEngineTime=e)}_setChannelTime(e,t){const n=t-e.delay;n>=e.duration*e.repeat?e.time=e.duration*e.rate:(e.time=Math.max(0,n)%e.duration,e.time*=e.rate)}}let ph=0;const gh=class e{constructor(t){if(r(this,"device",null),r(this,"canvas",null),r(this,"props"),r(this,"animationProps",null),r(this,"timeline",null),r(this,"stats"),r(this,"cpuTime"),r(this,"gpuTime"),r(this,"frameRate"),r(this,"display"),r(this,"needsRedraw","initialized"),r(this,"_initialized",!1),r(this,"_running",!1),r(this,"_animationFrameId",null),r(this,"_nextFramePromise",null),r(this,"_resolveNextFrame",null),r(this,"_cpuStartTime",0),r(this,"_error",null),this.props={...e.defaultAnimationLoopProps,...t},!(t=this.props).device)throw new Error("No device provided");this.stats=t.stats||new Nt({id:"animation-loop-stats"}),this.cpuTime=this.stats.get("CPU Time"),this.gpuTime=this.stats.get("GPU Time"),this.frameRate=this.stats.get("Frame Rate"),this.setProps({autoResizeViewport:t.autoResizeViewport}),this.start=this.start.bind(this),this.stop=this.stop.bind(this),this._onMousemove=this._onMousemove.bind(this),this._onMouseleave=this._onMouseleave.bind(this)}destroy(){this.stop(),this._setDisplay(null)}delete(){this.destroy()}reportError(e){this.props.onError(e),this._error=e}setNeedsRedraw(e){return this.needsRedraw=this.needsRedraw||e,this}setProps(e){return"autoResizeViewport"in e&&(this.props.autoResizeViewport=e.autoResizeViewport||!1),this}async start(){if(this._running)return this;this._running=!0;try{let e;return this._initialized||(this._initialized=!0,await this._initDevice(),this._initialize(),await this.props.onInitialize(this._getAnimationProps())),this._running?(!1!==e&&(this._cancelAnimationFrame(),this._requestAnimationFrame()),this):null}catch(e){const t=e instanceof Error?e:new Error("Unknown error");throw this.props.onError(t),t}}stop(){return this._running&&(this.animationProps&&!this._error&&this.props.onFinalize(this.animationProps),this._cancelAnimationFrame(),this._nextFramePromise=null,this._resolveNextFrame=null,this._running=!1),this}redraw(){var e;return(null==(e=this.device)?void 0:e.isLost)||this._error||(this._beginFrameTimers(),this._setupFrame(),this._updateAnimationProps(),this._renderFrame(this._getAnimationProps()),this._clearNeedsRedraw(),this._resolveNextFrame&&(this._resolveNextFrame(this),this._nextFramePromise=null,this._resolveNextFrame=null),this._endFrameTimers()),this}attachTimeline(e){return this.timeline=e,this.timeline}detachTimeline(){this.timeline=null}waitForRender(){return this.setNeedsRedraw("waitForRender"),this._nextFramePromise||(this._nextFramePromise=new Promise(e=>{this._resolveNextFrame=e})),this._nextFramePromise}async toDataURL(){if(this.setNeedsRedraw("toDataURL"),await this.waitForRender(),this.canvas instanceof HTMLCanvasElement)return this.canvas.toDataURL();throw new Error("OffscreenCanvas")}_initialize(){this._startEventHandling(),this._initializeAnimationProps(),this._updateAnimationProps(),this._resizeViewport()}_setDisplay(e){this.display&&(this.display.destroy(),this.display.animationLoop=null),e&&(e.animationLoop=this),this.display=e}_requestAnimationFrame(){var e;this._running&&(this._animationFrameId=(e=this._animationFrame.bind(this),"undefined"!=typeof window&&window.requestAnimationFrame?window.requestAnimationFrame(e):setTimeout(e,1e3/60)))}_cancelAnimationFrame(){var e;null!==this._animationFrameId&&(e=this._animationFrameId,"undefined"!=typeof window&&window.cancelAnimationFrame?window.cancelAnimationFrame(e):clearTimeout(e),this._animationFrameId=null)}_animationFrame(){this._running&&(this.redraw(),this._requestAnimationFrame())}_renderFrame(e){var t;this.display?this.display._renderFrame(e):(this.props.onRender(this._getAnimationProps()),null==(t=this.device)||t.submit())}_clearNeedsRedraw(){this.needsRedraw=!1}_setupFrame(){this._resizeViewport()}_initializeAnimationProps(){var e;const t=null==(e=this.device)?void 0:e.getDefaultCanvasContext();if(!this.device||!t)throw new Error("loop");const n=null==t?void 0:t.canvas,r=t.props.useDevicePixels;this.animationProps={animationLoop:this,device:this.device,canvasContext:t,canvas:n,useDevicePixels:r,timeline:this.timeline,needsRedraw:!1,width:1,height:1,aspect:1,time:0,startTime:Date.now(),engineTime:0,tick:0,tock:0,_mousePosition:null}}_getAnimationProps(){if(!this.animationProps)throw new Error("animationProps");return this.animationProps}_updateAnimationProps(){if(!this.animationProps)return;const{width:e,height:t,aspect:n}=this._getSizeAndAspect();e===this.animationProps.width&&t===this.animationProps.height||this.setNeedsRedraw("drawing buffer resized"),n!==this.animationProps.aspect&&this.setNeedsRedraw("drawing buffer aspect changed"),this.animationProps.width=e,this.animationProps.height=t,this.animationProps.aspect=n,this.animationProps.needsRedraw=this.needsRedraw,this.animationProps.engineTime=Date.now()-this.animationProps.startTime,this.timeline&&this.timeline.update(this.animationProps.engineTime),this.animationProps.tick=Math.floor(this.animationProps.time/1e3*60),this.animationProps.tock++,this.animationProps.time=this.timeline?this.timeline.getTime():this.animationProps.engineTime}async _initDevice(){if(this.device=await this.props.device,!this.device)throw new Error("No device provided");this.canvas=this.device.getDefaultCanvasContext().canvas||null}_createInfoDiv(){if(this.canvas&&this.props.onAddHTML){const e=document.createElement("div");document.body.appendChild(e),e.style.position="relative";const t=document.createElement("div");t.style.position="absolute",t.style.left="10px",t.style.bottom="10px",t.style.width="300px",t.style.background="white",this.canvas instanceof HTMLCanvasElement&&e.appendChild(this.canvas),e.appendChild(t);const n=this.props.onAddHTML(t);n&&(t.innerHTML=n)}}_getSizeAndAspect(){var e,t;if(!this.device)return{width:1,height:1,aspect:1};const[n,r]=(null==(e=this.device)?void 0:e.getDefaultCanvasContext().getDevicePixelSize())||[1,1];let s=1;const i=null==(t=this.device)?void 0:t.getDefaultCanvasContext().canvas;return i&&i.clientHeight?s=i.clientWidth/i.clientHeight:n>0&&r>0&&(s=n/r),{width:n,height:r,aspect:s}}_resizeViewport(){this.props.autoResizeViewport&&this.device.gl&&this.device.gl.viewport(0,0,this.device.gl.drawingBufferWidth,this.device.gl.drawingBufferHeight)}_beginFrameTimers(){this.frameRate.timeEnd(),this.frameRate.timeStart(),this.cpuTime.timeStart()}_endFrameTimers(){this.cpuTime.timeEnd()}_startEventHandling(){this.canvas&&(this.canvas.addEventListener("mousemove",this._onMousemove.bind(this)),this.canvas.addEventListener("mouseleave",this._onMouseleave.bind(this)))}_onMousemove(e){e instanceof MouseEvent&&(this._getAnimationProps()._mousePosition=[e.offsetX,e.offsetY])}_onMouseleave(e){this._getAnimationProps()._mousePosition=null}};r(gh,"defaultAnimationLoopProps",{device:null,onAddHTML:()=>"",onInitialize:async()=>null,onRender:()=>{},onFinalize:()=>{},onError:e=>{},stats:ys.stats.get("animation-loop-"+ph++),autoResizeViewport:!1});let mh=gh;const _h={};function yh(e="id"){return _h[e]=_h[e]||1,`${e}-${_h[e]++}`}class bh{constructor(e){if(r(this,"id"),r(this,"userData",{}),r(this,"topology"),r(this,"bufferLayout",[]),r(this,"vertexCount"),r(this,"indices"),r(this,"attributes"),this.id=e.id||yh("geometry"),this.topology=e.topology,this.indices=e.indices||null,this.attributes=e.attributes,this.vertexCount=e.vertexCount,this.bufferLayout=e.bufferLayout||[],this.indices&&!(this.indices.usage&jr.INDEX))throw new Error("Index buffer must have INDEX usage")}destroy(){var e;null==(e=this.indices)||e.destroy();for(const t of Object.values(this.attributes))t.destroy()}getVertexCount(){return this.vertexCount}getAttributes(){return this.attributes}getIndexes(){return this.indices||null}_calculateVertexCount(e){return e.byteLength/12}}const vh=class e{constructor(e){r(this,"device"),r(this,"cachingEnabled"),r(this,"destroyPolicy"),r(this,"debug"),r(this,"_hashCounter",0),r(this,"_hashes",{}),r(this,"_renderPipelineCache",{}),r(this,"_computePipelineCache",{}),this.device=e,this.cachingEnabled=e.props._cachePipelines,this.destroyPolicy=e.props._cacheDestroyPolicy,this.debug=e.props.debugFactories}static getDefaultPipelineFactory(t){return t._lumaData.defaultPipelineFactory=t._lumaData.defaultPipelineFactory||new e(t),t._lumaData.defaultPipelineFactory}get[Symbol.toStringTag](){return"PipelineFactory"}toString(){return`PipelineFactory(${this.device.id})`}createRenderPipeline(e){var t;if(!this.cachingEnabled)return this.device.createRenderPipeline(e);const n={...Gs.defaultProps,...e},r=this._renderPipelineCache,s=this._hashRenderPipeline(n);let i=null==(t=r[s])?void 0:t.pipeline;return i?(r[s].useCount++,this.debug&&Or.log(3,`${this}: ${r[s].pipeline} reused, count=${r[s].useCount}, (id=${e.id})`)()):(i=this.device.createRenderPipeline({...n,id:n.id?`${n.id}-cached`:yh("unnamed-cached")}),i.hash=s,r[s]={pipeline:i,useCount:1},this.debug&&Or.log(3,`${this}: ${i} created, count=${r[s].useCount}`)()),i}createComputePipeline(e){var t;if(!this.cachingEnabled)return this.device.createComputePipeline(e);const n={...$s.defaultProps,...e},r=this._computePipelineCache,s=this._hashComputePipeline(n);let i=null==(t=r[s])?void 0:t.pipeline;return i?(r[s].useCount++,this.debug&&Or.log(3,`${this}: ${r[s].pipeline} reused, count=${r[s].useCount}, (id=${e.id})`)()):(i=this.device.createComputePipeline({...n,id:n.id?`${n.id}-cached`:void 0}),i.hash=s,r[s]={pipeline:i,useCount:1},this.debug&&Or.log(3,`${this}: ${i} created, count=${r[s].useCount}`)()),i}release(e){if(!this.cachingEnabled)return void e.destroy();const t=this._getCache(e),n=e.hash;t[n].useCount--,0===t[n].useCount?(this._destroyPipeline(e),this.debug&&Or.log(3,`${this}: ${e} released and destroyed`)()):t[n].useCount<0?(Or.error(`${this}: ${e} released, useCount < 0, resetting`)(),t[n].useCount=0):this.debug&&Or.log(3,`${this}: ${e} released, count=${t[n].useCount}`)()}_destroyPipeline(e){const t=this._getCache(e);switch(this.destroyPolicy){case"never":return!1;case"unused":return delete t[e.hash],e.destroy(),!0}}_getCache(e){let t;if(e instanceof $s&&(t=this._computePipelineCache),e instanceof Gs&&(t=this._renderPipelineCache),!t)throw new Error(`${this}`);if(!t[e.hash])throw new Error(`${this}: ${e} matched incorrect entry`);return t}_hashComputePipeline(e){const{type:t}=this.device;return`${t}/C/${this._getHash(e.shader.source)}`}_hashRenderPipeline(e){const t=e.vs?this._getHash(e.vs.source):0,n=e.fs?this._getHash(e.fs.source):0,r=this._getHash(JSON.stringify(e.bufferLayout)),{type:s}=this.device;if("webgl"===s)return`${s}/R/${t}/${n}V-BL${r}`;{const i=this._getHash(JSON.stringify(e.parameters));return`${s}/R/${t}/${n}V-T${e.topology}P${i}BL${r}`}}_getHash(e){return void 0===this._hashes[e]&&(this._hashes[e]=this._hashCounter++),this._hashes[e]}};r(vh,"defaultProps",{...Gs.defaultProps});let xh=vh;const wh=class e{constructor(e){r(this,"device"),r(this,"cachingEnabled"),r(this,"destroyPolicy"),r(this,"debug"),r(this,"_cache",{}),this.device=e,this.cachingEnabled=e.props._cacheShaders,this.destroyPolicy=e.props._cacheDestroyPolicy,this.debug=!0}static getDefaultShaderFactory(t){var n;return(n=t._lumaData).defaultShaderFactory||(n.defaultShaderFactory=new e(t)),t._lumaData.defaultShaderFactory}get[Symbol.toStringTag](){return"ShaderFactory"}toString(){return`${this[Symbol.toStringTag]}(${this.device.id})`}createShader(e){if(!this.cachingEnabled)return this.device.createShader(e);const t=this._hashShader(e);let n=this._cache[t];if(n)n.useCount++,this.debug&&Or.log(3,`${this}: Reusing shader ${n.shader.id} count=${n.useCount}`)();else{const r=this.device.createShader({...e,id:e.id?`${e.id}-cached`:void 0});this._cache[t]=n={shader:r,useCount:1},this.debug&&Or.log(3,`${this}: Created new shader ${r.id}`)()}return n.shader}release(e){if(!this.cachingEnabled)return void e.destroy();const t=this._hashShader(e),n=this._cache[t];if(n)if(n.useCount--,0===n.useCount)"unused"===this.destroyPolicy&&(delete this._cache[t],n.shader.destroy(),this.debug&&Or.log(3,`${this}: Releasing shader ${e.id}, destroyed`)());else{if(n.useCount<0)throw new Error(`ShaderFactory: Shader ${e.id} released too many times`);this.debug&&Or.log(3,`${this}: Releasing shader ${e.id} count=${n.useCount}`)()}}_hashShader(e){return`${e.stage}:${e.source}`}};r(wh,"defaultProps",{...Ds.defaultProps});let Eh=wh,Th=null,Sh=null;function Ah(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;rt.name===e)||null}getAttributeNamesForBuffer(e){var t;return e.attributes?null==(t=e.attributes)?void 0:t.map(e=>e.attribute):[e.name]}mergeBufferLayouts(e,t){const n=[...e];for(const r of t){const e=n.findIndex(e=>e.name===r.name);e<0?n.push(r):n[e]=r}return n}getBufferIndex(e){const t=this.bufferLayouts.findIndex(t=>t.name===e);return-1===t&&Or.warn(`BufferLayout: Missing buffer for "${e}".`)(),t}}function Ch(e){const t={bindings:{},uniforms:{}};return Object.keys(e).forEach(n=>{const r=e[n];var s;!function(e){return function(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}(e)||function(e){return!!Array.isArray(e)&&(0===e.length||"number"==typeof e[0])}(e)}(s=r)&&"number"!=typeof s&&"boolean"!=typeof s?t.bindings[n]=r:t.uniforms[n]=r}),t}class kh{constructor(e,t){r(this,"options",{disableWarnings:!1}),r(this,"modules"),r(this,"moduleUniforms"),r(this,"moduleBindings"),Object.assign(this.options,t);const n=fr(Object.values(e).filter(e=>e.dependencies));for(const r of n)e[r.name]=r;Or.log(1,"Creating ShaderInputs with modules",Object.keys(e))(),this.modules=e,this.moduleUniforms={},this.moduleBindings={};for(const[r,s]of Object.entries(e))this._addModule(s),s.name&&r!==s.name&&!this.options.disableWarnings&&Or.warn(`Module name: ${r} vs ${s.name}`)()}destroy(){}setProps(e){var t;for(const n of Object.keys(e)){const r=n,s=e[r]||{},i=this.modules[r];if(!i){this.options.disableWarnings||Or.warn(`Module ${n} not found`)();continue}const o=this.moduleUniforms[r],a=this.moduleBindings[r],l=(null==(t=i.getUniforms)?void 0:t.call(i,s,o))||s,{uniforms:c,bindings:u}=Ch(l);this.moduleUniforms[r]={...o,...c},this.moduleBindings[r]={...a,...u}}}getModules(){return Object.values(this.modules)}getUniformValues(){return this.moduleUniforms}getBindingValues(){const e={};for(const t of Object.values(this.moduleBindings))Object.assign(e,t);return e}getDebugTable(){var e;const t={};for(const[n,r]of Object.entries(this.moduleUniforms))for(const[s,i]of Object.entries(r))t[`${n}.${s}`]={type:null==(e=this.modules[n].uniformTypes)?void 0:e[s],value:String(i)};return t}_addModule(e){const t=e.name;this.moduleUniforms[t]=e.defaultUniforms||{},this.moduleBindings[t]={}}}const Ph=["+X","-X","+Y","-Y","+Z","-Z"],Ih=["+X","-X","+Y","-Y","+Z","-Z"],Mh=class e{constructor(t,n){r(this,"device"),r(this,"id"),r(this,"props"),r(this,"texture"),r(this,"sampler"),r(this,"view"),r(this,"ready"),r(this,"isReady",!1),r(this,"destroyed",!1),r(this,"resolveReady",()=>{}),r(this,"rejectReady",()=>{}),this.device=t;const s=yh("async-texture");this.props={...e.defaultProps,id:s,...n},this.id=this.props.id,"string"==typeof(null==(n={...n})?void 0:n.data)&&"2d"===n.dimension&&(n.data=async function(e){const t=new Image;return t.crossOrigin="anonymous",t.src=e.startsWith("http")?e:""+e,await t.decode(),await createImageBitmap(t)}(n.data)),n.mipmaps&&(n.mipLevels="auto"),this.ready=new Promise((e,t)=>{this.resolveReady=()=>{this.isReady=!0,e()},this.rejectReady=t}),this.initAsync(n)}get[Symbol.toStringTag](){return"AsyncTexture"}toString(){return`AsyncTexture:"${this.id}"(${this.isReady?"ready":"loading"})`}async initAsync(e){const t=e.data,n=await Lh(t).then(void 0,this.rejectReady);if(this.destroyed)return;const r=this.props.width&&this.props.height?{width:this.props.width,height:this.props.height}:this.getTextureDataSize(n);if(!r)throw new Error("Texture size could not be determined");const s={...r,...e,data:void 0,mipLevels:1},i=this.device.getMipLevelCount(s.width,s.height);if(s.mipLevels="auto"===this.props.mipLevels?i:Math.min(i,this.props.mipLevels),this.texture=this.device.createTexture(s),this.sampler=this.texture.sampler,this.view=this.texture.view,e.data)switch(this.props.dimension){case"1d":this._setTexture1DData(this.texture,n);break;case"2d":this._setTexture2DData(n);break;case"3d":this._setTexture3DData(this.texture,n);break;case"2d-array":this._setTextureArrayData(this.texture,n);break;case"cube":this._setTextureCubeData(this.texture,n);break;case"cube-array":this._setTextureCubeArrayData(this.texture,n)}this.props.mipmaps&&this.generateMipmaps(),Or.info(1,`${this} loaded`),this.resolveReady()}destroy(){this.texture&&(this.texture.destroy(),this.texture=null),this.destroyed=!0}generateMipmaps(){this.texture.generateMipmapsWebGL()}setSampler(e={}){this.texture.setSampler(e instanceof Cs?e:this.device.createSampler(e))}resize(e){if(!this.isReady)throw new Error("Cannot resize texture before it is ready");if(e.width===this.texture.width&&e.height===this.texture.height)return!1;if(this.texture){const t=this.texture;this.texture=t.clone(e),t.destroy()}return!0}isTextureLevelData(e){const t=null==e?void 0:e.data;return ArrayBuffer.isView(t)}getTextureDataSize(e){if(!e)return null;if(ArrayBuffer.isView(e))return null;if(Array.isArray(e))return this.getTextureDataSize(e[0]);if(this.device.isExternalImage(e))return this.device.getExternalImageSize(e);if(e&&"object"==typeof e&&e.constructor===Object){const t=Object.values(e)[0];return{width:t.width,height:t.height}}throw new Error("texture size deduction failed")}getCubeFaceDepth(e){switch(e){case"+X":return 0;case"-X":return 1;case"+Y":return 2;case"-Y":return 3;case"+Z":return 4;case"-Z":return 5;default:throw new Error(e)}}setTextureData(e){}_setTexture1DData(e,t){throw new Error("setTexture1DData not supported in WebGL.")}_setTexture2DData(e,t=0){if(!this.texture)throw new Error("Texture not initialized");const n=this._normalizeTextureData(e);n.length>1&&!1!==this.props.mipmaps&&Or.warn(`Texture ${this.id} mipmap and multiple LODs.`)();for(let r=0;r1&&!1!==this.props.mipmaps&&Or.warn(`${this.id} has mipmap and multiple LODs.`)();const s=Ph.indexOf(n);this._setTexture2DData(t,s)}_normalizeTextureData(e){const t=this.texture;let n;return n=ArrayBuffer.isView(e)?[{data:e,width:t.width,height:t.height}]:Array.isArray(e)?e:[e],n}};r(Mh,"defaultProps",{...Is.defaultProps,data:null,mipmaps:!1});let Nh=Mh;async function Lh(e){if(e=await e,Array.isArray(e))return await Promise.all(e.map(Lh));if(e&&"object"==typeof e&&e.constructor===Object){const t=e,n=await Promise.all(Object.values(t)),r=Object.keys(t),s={};for(let e=0;e[e.name,e]))||[]),c=n.shaderInputs||new kh(l,{disableWarnings:this.props.disableWarnings});this.setShaderInputs(c);const u=function(e){return{type:e.type,shaderLanguage:e.info.shadingLanguage,shaderLanguageVersion:e.info.shadingLanguageVersion,gpu:e.info.gpu,features:e.features}}(t),h=((null==(i=this.props.modules)?void 0:i.length)>0?this.props.modules:null==(o=this.shaderInputs)?void 0:o.getModules())||[];if("webgpu"===this.device.type&&this.props.source){const{source:e,getUniforms:t}=this.props.shaderAssembler.assembleWGSLShader({platformInfo:u,...this.props,modules:h});this.source=e,this._getModuleUniforms=t,(a=this.props).shaderLayout||(a.shaderLayout=function(e){var t;const n={attributes:[],bindings:[]};let r;try{r=function(e){try{return new Ma(e)}catch(t){if(t instanceof Error)throw t;let e="WGSL parse error";throw"object"==typeof t&&(null==t?void 0:t.message)&&(e+=`: ${t.message} `),"object"==typeof t&&(null==t?void 0:t.token)&&(e+=t.token.line||""),new Error(e,{cause:t})}}(e)}catch(o){return Or.error(o.message)(),n}for(const a of r.uniforms){const e=[];for(const n of(null==(t=a.type)?void 0:t.members)||[])e.push({name:n.name,type:Na(n.type)});n.bindings.push({type:"uniform",name:a.name,group:a.group,location:a.binding,members:e})}for(const a of r.textures)n.bindings.push({type:"texture",name:a.name,group:a.group,location:a.binding});for(const a of r.samplers)n.bindings.push({type:"sampler",name:a.name,group:a.group,location:a.binding});const s=r.entry.vertex[0],i=(null==s?void 0:s.inputs.length)||0;for(let a=0;athis._lastDrawTimestamp&&this.setNeedsRedraw("contents of bound textures or buffers updated");const e=this._needsRedraw;return this._needsRedraw=!1,e}setNeedsRedraw(e){this._needsRedraw||(this._needsRedraw=e)}predraw(){this.updateShaderInputs(),this.pipeline=this._updatePipeline()}draw(e){const t=this._areBindingsLoading();if(t)return Or.info(2,`>>> DRAWING ABORTED ${this.id}: ${t} not loaded`)(),!1;try{e.pushDebugGroup(`${this}.predraw(${e})`),this.predraw()}finally{e.popDebugGroup()}let n;try{e.pushDebugGroup(`${this}.draw(${e})`),this._logDrawCallStart(),this.pipeline=this._updatePipeline();const t=this._getBindings();this.pipeline.setBindings(t,{disableWarnings:this.props.disableWarnings});const{indexBuffer:r}=this.vertexArray,s=r?r.byteLength/("uint32"===r.indexType?4:2):void 0;n=this.pipeline.draw({renderPass:e,vertexArray:this.vertexArray,isInstanced:this.isInstanced,vertexCount:this.vertexCount,instanceCount:this.instanceCount,indexCount:s,transformFeedback:this.transformFeedback||void 0,parameters:this.parameters,topology:this.topology})}finally{e.popDebugGroup(),this._logDrawCallEnd()}return this._logFramebuffer(e),n?(this._lastDrawTimestamp=this.device.timestamp,this._needsRedraw=!1):this._needsRedraw="waiting for resource initialization",n}setGeometry(e){var t;null==(t=this._gpuGeometry)||t.destroy();const n=e&&function(e,t){if(t instanceof bh)return t;const n=function(e,t){if(!t.indices)return;const n=t.indices.value;return e.createBuffer({usage:jr.INDEX,data:n})}(e,t),{attributes:r,bufferLayout:s}=function(e,t){const n=[],r={};for(const[s,i]of Object.entries(t.attributes)){let t=s;switch(s){case"POSITION":t="positions";break;case"NORMAL":t="normals";break;case"TEXCOORD_0":t="texCoords";break;case"COLOR_0":t="colors"}if(i){r[t]=e.createBuffer({data:i.value,id:`${s}-buffer`});const{value:o,size:a,normalized:l}=i;n.push({name:t,format:Xr(o,a,l)})}}return{attributes:r,bufferLayout:n,vertexCount:t._calculateVertexCount(t.attributes,t.indices)}}(e,t);return new bh({topology:t.topology||"triangle-list",bufferLayout:s,vertexCount:t.vertexCount,indices:n,attributes:r})}(this.device,e);if(n){this.setTopology(n.topology||"triangle-list");const e=new Rh(this.bufferLayout);this.bufferLayout=e.mergeBufferLayouts(n.bufferLayout,this.bufferLayout),this.vertexArray&&this._setGeometryAttributes(n)}this._gpuGeometry=n}setTopology(e){e!==this.topology&&(this.topology=e,this._setPipelineNeedsUpdate("topology"))}setBufferLayout(e){const t=new Rh(this.bufferLayout);this.bufferLayout=this._gpuGeometry?t.mergeBufferLayouts(e,this._gpuGeometry.bufferLayout):e,this._setPipelineNeedsUpdate("bufferLayout"),this.pipeline=this._updatePipeline(),this.vertexArray=this.device.createVertexArray({shaderLayout:this.pipeline.shaderLayout,bufferLayout:this.pipeline.bufferLayout}),this._gpuGeometry&&this._setGeometryAttributes(this._gpuGeometry)}setParameters(e){Ah(e,this.parameters,2)||(this.parameters=e,this._setPipelineNeedsUpdate("parameters"))}setInstanceCount(e){this.instanceCount=e,void 0===this.isInstanced&&e>0&&(this.isInstanced=!0),this.setNeedsRedraw("instanceCount")}setVertexCount(e){this.vertexCount=e,this.setNeedsRedraw("vertexCount")}setShaderInputs(e){this.shaderInputs=e,this._uniformStore=new pi(this.shaderInputs.modules);for(const[t,n]of Object.entries(this.shaderInputs.modules))if(Dh(n)){const e=this._uniformStore.getManagedUniformBuffer(this.device,t);this.bindings[`${t}Uniforms`]=e}this.setNeedsRedraw("shaderInputs")}updateShaderInputs(){this._uniformStore.setUniforms(this.shaderInputs.getUniformValues()),this.setBindings(this.shaderInputs.getBindingValues()),this.setNeedsRedraw("shaderInputs")}setBindings(e){Object.assign(this.bindings,e),this.setNeedsRedraw("bindings")}setTransformFeedback(e){this.transformFeedback=e,this.setNeedsRedraw("transformFeedback")}setIndexBuffer(e){this.vertexArray.setIndexBuffer(e),this.setNeedsRedraw("indexBuffer")}setAttributes(e,t){const n=(null==t?void 0:t.disableWarnings)??this.props.disableWarnings;e.indices&&Or.warn(`Model:${this.id} setAttributes() - indexBuffer should be set using setIndexBuffer()`)(),this.bufferLayout=function(e,t){const n=Object.fromEntries(e.attributes.map(e=>[e.name,e.location])),r=t.slice();return r.sort((e,t)=>{const r=e.attributes?e.attributes.map(e=>e.attribute):[e.name],s=t.attributes?t.attributes.map(e=>e.attribute):[t.name];return Math.min(...r.map(e=>n[e]))-Math.min(...s.map(e=>n[e]))}),r}(this.pipeline.shaderLayout,this.bufferLayout);const r=new Rh(this.bufferLayout);for(const[s,i]of Object.entries(e)){const e=r.getBufferLayout(s);if(!e){n||Or.warn(`Model(${this.id}): Missing layout for buffer "${s}".`)();continue}const t=r.getAttributeNamesForBuffer(e);let o=!1;for(const n of t){const e=this._attributeInfos[n];if(e){const t="webgpu"===this.device.type?r.getBufferIndex(e.bufferName):e.location;this.vertexArray.setBuffer(t,i),o=!0}}o||n||Or.warn(`Model(${this.id}): Ignoring buffer "${i.id}" for unknown attribute "${s}"`)()}this.setNeedsRedraw("attributes")}setConstantAttributes(e,t){for(const[n,r]of Object.entries(e)){const e=this._attributeInfos[n];e?this.vertexArray.setConstantWebGL(e.location,r):((null==t?void 0:t.disableWarnings)??this.props.disableWarnings)||Or.warn(`Model "${this.id}: Ignoring constant supplied for unknown attribute "${n}"`)()}this.setNeedsRedraw("constants")}_areBindingsLoading(){for(const e of Object.values(this.bindings))if(e instanceof Nh&&!e.isReady)return e.id;return!1}_getBindings(){const e={};for(const[t,n]of Object.entries(this.bindings))n instanceof Nh?n.isReady&&(e[t]=n.texture):e[t]=n;return e}_getBindingsUpdateTimestamp(){let e=0;for(const t of Object.values(this.bindings))t instanceof Ns?e=Math.max(e,t.texture.updateTimestamp):t instanceof jr||t instanceof Is?e=Math.max(e,t.updateTimestamp):t instanceof Nh?e=t.texture?Math.max(e,t.texture.updateTimestamp):1/0:t instanceof Cs||(e=Math.max(e,t.buffer.updateTimestamp));return e}_setGeometryAttributes(e){const t={...e.attributes};for(const[n]of Object.entries(t))this.pipeline.shaderLayout.attributes.find(e=>e.name===n)||"positions"===n||delete t[n];this.vertexCount=e.vertexCount,this.setIndexBuffer(e.indices||null),this.setAttributes(e.attributes,{disableWarnings:!0}),this.setAttributes(t,{disableWarnings:this.props.disableWarnings}),this.setNeedsRedraw("geometry attributes")}_setPipelineNeedsUpdate(e){this._pipelineNeedsUpdate||(this._pipelineNeedsUpdate=e),this.setNeedsRedraw(e)}_updatePipeline(){if(this._pipelineNeedsUpdate){let e=null,t=null;this.pipeline&&(Or.log(1,`Model ${this.id}: Recreating pipeline because "${this._pipelineNeedsUpdate}".`)(),e=this.pipeline.vs,t=this.pipeline.fs),this._pipelineNeedsUpdate=!1;const n=this.shaderFactory.createShader({id:`${this.id}-vertex`,stage:"vertex",source:this.source||this.vs,debugShaders:this.props.debugShaders});let r=null;this.source?r=n:this.fs&&(r=this.shaderFactory.createShader({id:`${this.id}-fragment`,stage:"fragment",source:this.source||this.fs,debugShaders:this.props.debugShaders})),this.pipeline=this.pipelineFactory.createRenderPipeline({...this.props,bufferLayout:this.bufferLayout,topology:this.topology,parameters:this.parameters,bindings:this._getBindings(),vs:n,fs:r}),this._attributeInfos=ti(this.pipeline.shaderLayout,this.bufferLayout),e&&this.shaderFactory.release(e),t&&this.shaderFactory.release(t)}return this.pipeline}_logDrawCallStart(){const e=Or.level>3?0:1e4;Or.level<2||Date.now()-this._lastLogTime>> DRAWING MODEL ${this.id}`,{collapsed:Or.level<=2})())}_logDrawCallEnd(){if(this._logOpen){const e=function(e){var t;const n={},r="Values";if(0===e.attributes.length&&!(null==(t=e.varyings)?void 0:t.length))return{"No attributes or varyings":{[r]:"N/A"}};for(const s of e.attributes)s&&(n[`in ${s.location} ${s.name}: ${s.type}`]={[r]:s.stepMode||"vertex"});for(const s of e.varyings||[])n[`out ${s.location} ${s.name}`]={[r]:JSON.stringify(s)};return n}(this.pipeline.shaderLayout,this.id);Or.table(2,e)();const t=this.shaderInputs.getDebugTable();Or.table(2,t)();const n=this._getAttributeDebugTable();Or.table(2,this._attributeInfos)(),Or.table(2,n)(),Or.groupEnd(2)(),this._logOpen=!1}}_logFramebuffer(e){const t=this.device.props.debugFramebuffers;if(this._drawCount++,!t)return;const n=e.props.framebuffer;n&&function(e,{id:t,minimap:n,opaque:r,top:s="0",left:i="0",rgbaScale:o=1}){Th||(Th=document.createElement("canvas"),Th.id=t,Th.title=t,Th.style.zIndex="100",Th.style.position="absolute",Th.style.top=s,Th.style.left=i,Th.style.border="blue 5px solid",Th.style.transform="scaleY(-1)",document.body.appendChild(Th),Sh=Th.getContext("2d")),Th.width===e.width&&Th.height===e.height||(Th.width=e.width/2,Th.height=e.height/2,Th.style.width="400px",Th.style.height="400px");const a=e.device.readPixelsToArrayWebGL(e),l=null==Sh?void 0:Sh.createImageData(e.width,e.height);if(l){const e=0;for(let t=0;t=1&&(n=Math.min(n,e.length/t))}return n}}const Gh={blendColorOperation:"add",blendColorSrcFactor:"one",blendColorDstFactor:"zero",blendAlphaOperation:"add",blendAlphaSrcFactor:"constant",blendAlphaDstFactor:"zero"};class zh extends Vu{constructor(){super(...arguments),this._colorEncoderState=null}render(e){return"pickingFBO"in e?this._drawPickingBuffer(e):super.render(e)}_drawPickingBuffer({layers:e,layerFilter:t,views:n,viewports:r,onViewportActive:s,pickingFBO:i,deviceRect:{x:o,y:a,width:l,height:c},cullRect:u,effects:h,pass:d="picking",pickZ:f,shaderModuleProps:p}){this.pickZ=f;const g=this._resetColorEncoder(f),m=[o,a,l,c],_=super.render({target:i,layers:e,layerFilter:t,views:n,viewports:r,onViewportActive:s,cullRect:u,effects:null==h?void 0:h.filter(e=>e.useInPicking),pass:d,isPicking:!0,shaderModuleProps:p,clearColor:[0,0,0,0],colorMask:15,scissorRect:m});return this._colorEncoderState=null,{decodePickingColor:g&&Wh.bind(null,g),stats:_}}shouldDrawLayer(e){const{pickable:t,operation:n}=e.props;return t&&n.includes("draw")||n.includes("terrain")||n.includes("mask")}getShaderModuleProps(e,t,n){return{picking:{isActive:1,isAttribute:this.pickZ},lighting:{enabled:!1}}}getLayerParameters(e,t,n){const r={...e.props.parameters},{pickable:s,operation:i}=e.props;return!this._colorEncoderState||i.includes("terrain")?r.blend=!1:s&&i.includes("draw")&&(Object.assign(r,Gh),r.blend=!0,r.blendColor=function(e,t,n){const{byLayer:r,byAlpha:s}=e;let i,o=r.get(t);return o?(o.viewports.push(n),i=o.a):(i=r.size+1,i<=255?(o={a:i,layer:t,viewports:[n]},r.set(t,o),s[i]=o):($n.warn("Too many pickable layers, only picking the first 255")(),i=0)),[0,0,0,i/255]}(this._colorEncoderState,e,n)),r}_resetColorEncoder(e){return this._colorEncoderState=e?null:{byLayer:new Map,byAlpha:[]},this._colorEncoderState}}function Wh(e,t){const n=e.byAlpha[t[3]];return n&&{pickedLayer:n.layer,pickedViewports:n.viewports,pickedObjectIndex:n.layer.decodePickingColor(t)}}const Hh=Symbol.for("component"),$h=Symbol.for("propTypes"),Xh=Symbol.for("deprecatedProps"),qh=Symbol.for("asyncPropDefaults"),Yh=Symbol.for("asyncPropOriginal"),Kh=Symbol.for("asyncPropResolved");function Zh(e,t=()=>!0){return Array.isArray(e)?Qh(e,t,[]):t(e)?[e]:[]}function Qh(e,t,n){let r=-1;for(;++r0}delete(){}getData(){return this.isLoaded?this._error?Promise.reject(this._error):this._content:this._loader.then(()=>this.getData())}setData(e,t){if(e===this._data&&!t)return;this._data=e;const n=++this._loadCount;let r=e;"string"==typeof e&&(r=Cn(e)),r instanceof Promise?(this.isLoaded=!1,this._loader=r.then(e=>{this._loadCount===n&&(this.isLoaded=!0,this._error=void 0,this._content=e)}).catch(e=>{this._loadCount===n&&(this.isLoaded=!0,this._error=e||!0)})):(this.isLoaded=!0,this._error=void 0,this._content=e);for(const s of this._subscribers)s.onChange(this.getData())}}class td{constructor(e){var t;this.protocol=e.protocol||"resource://",this._context={device:e.device,gl:null==(t=e.device)?void 0:t.gl,resourceManager:this},this._resources={},this._consumers={},this._pruneRequest=null}contains(e){return!!e.startsWith(this.protocol)||e in this._resources}add({resourceId:e,data:t,forceUpdate:n=!1,persistent:r=!0}){let s=this._resources[e];s?s.setData(t,n):(s=new ed(e,t,this._context),this._resources[e]=s),s.persistent=r}remove(e){const t=this._resources[e];t&&(t.delete(),delete this._resources[e])}unsubscribe({consumerId:e}){const t=this._consumers[e];if(t){for(const e in t){const n=t[e],r=this._resources[n.resourceId];r&&r.unsubscribe(n)}delete this._consumers[e],this.prune()}}subscribe({resourceId:e,onChange:t,consumerId:n,requestId:r="default"}){const{_resources:s,protocol:i}=this;e.startsWith(i)&&(s[e=e.replace(i,"")]||this.add({resourceId:e,data:null,persistent:!1}));const o=s[e];if(this._track(n,r,o,t),o)return o.getData()}prune(){this._pruneRequest||(this._pruneRequest=setTimeout(()=>this._prune(),0))}finalize(){for(const e in this._resources)this._resources[e].delete()}_track(e,t,n,r){const s=this._consumers,i=s[e]=s[e]||{};let o=i[t];const a=o&&o.resourceId&&this._resources[o.resourceId];a&&(a.unsubscribe(o),this.prune()),n&&(o?(o.onChange=r,o.resourceId=n.id):o={onChange:r,resourceId:n.id},i[t]=o,n.subscribe(o))}_prune(){this._pruneRequest=null;for(const e of Object.keys(this._resources)){const t=this._resources[e];t.persistent||t.inUse()||(t.delete(),delete this._resources[e])}}}class nd{constructor(e,t){var n;this._lastRenderedLayers=[],this._needsRedraw=!1,this._needsUpdate=!1,this._nextLayers=null,this._debug=!1,this._defaultShaderModulesChanged=!1,this.activateViewport=e=>{Yn("layerManager.activateViewport",this,e),e&&(this.context.viewport=e)};const{deck:r,stats:s,viewport:i,timeline:o}=t||{};this.layers=[],this.resourceManager=new td({device:e,protocol:"deck://"}),this.context={mousePosition:null,userData:{},layerManager:this,device:e,gl:null==e?void 0:e.gl,deck:r,shaderAssembler:Pu((null==(n=null==e?void 0:e.info)?void 0:n.shadingLanguage)||"glsl"),defaultShaderModules:[Al],renderPass:void 0,stats:s||new Nt({id:"deck.gl"}),viewport:i||new oh({id:"DEFAULT-INITIAL-VIEWPORT"}),timeline:o||new fh,resourceManager:this.resourceManager,onError:void 0},Object.seal(this)}finalize(){this.resourceManager.finalize();for(const e of this.layers)this._finalizeLayer(e)}needsRedraw(e={clearRedrawFlags:!1}){let t=this._needsRedraw;e.clearRedrawFlags&&(this._needsRedraw=!1);for(const n of this.layers){const r=n.getNeedsRedraw(e);t=t||r}return t}needsUpdate(){return this._nextLayers&&this._nextLayers!==this._lastRenderedLayers?"layers changed":this._defaultShaderModulesChanged?"shader modules changed":this._needsUpdate}setNeedsRedraw(e){this._needsRedraw=this._needsRedraw||e}setNeedsUpdate(e){this._needsUpdate=this._needsUpdate||e}getLayers({layerIds:e}={}){return e?this.layers.filter(t=>e.find(e=>0===t.id.indexOf(e))):this.layers}setProps(e){"debug"in e&&(this._debug=e.debug),"userData"in e&&(this.context.userData=e.userData),"layers"in e&&(this._nextLayers=e.layers),"onError"in e&&(this.context.onError=e.onError)}setLayers(e,t){Yn("layerManager.setLayers",this,t,e),this._lastRenderedLayers=e;const n=Zh(e,Boolean);for(const r of n)r.context=this.context;this._updateLayers(this.layers,n)}updateLayers(){const e=this.needsUpdate();e&&(this.setNeedsRedraw(`updating layers: ${e}`),this.setLayers(this._nextLayers||this._lastRenderedLayers,e)),this._nextLayers=null}addDefaultShaderModule(e){const{defaultShaderModules:t}=this.context;t.find(t=>t.name===e.name)||(t.push(e),this._defaultShaderModulesChanged=!0)}removeDefaultShaderModule(e){const{defaultShaderModules:t}=this.context,n=t.findIndex(t=>t.name===e.name);n>=0&&(t.splice(n,1),this._defaultShaderModulesChanged=!0)}_handleError(e,t,n){n.raiseError(t,`${e} of ${n}`)}_updateLayers(e,t){const n={};for(const i of e)n[i.id]?$n.warn(`Multiple old layers with same id ${i.id}`)():n[i.id]=i;if(this._defaultShaderModulesChanged){for(const t of e)t.setNeedsUpdate(),t.setChangeFlags({extensionsChanged:!0});this._defaultShaderModulesChanged=!1}const r=[];this._updateSublayersRecursively(t,n,r),this._finalizeOldLayers(n);let s=!1;for(const i of r)if(i.hasUniformTransition()){s=`Uniform transition in ${i}`;break}this._needsUpdate=s,this.layers=r}_updateSublayersRecursively(e,t,n){for(const s of e){s.context=this.context;const e=t[s.id];null===e&&$n.warn(`Multiple new layers with same id ${s.id}`)(),t[s.id]=null;let i=null;try{this._debug&&e!==s&&s.validateProps(),e?(this._transferLayerState(e,s),this._updateLayer(s)):this._initializeLayer(s),n.push(s),i=s.isComposite?s.getSubLayers():null}catch(r){this._handleError("matching",r,s)}i&&this._updateSublayersRecursively(i,t,n)}}_finalizeOldLayers(e){for(const t in e){const n=e[t];n&&this._finalizeLayer(n)}}_initializeLayer(e){try{e._initialize(),e.lifecycle="Initialized"}catch(t){this._handleError("initialization",t,e)}}_transferLayerState(e,t){t._transferState(e),t.lifecycle="Matched. State transferred from previous layer",t!==e&&(e.lifecycle="Discarded. Awaiting garbage collection")}_updateLayer(e){try{e._update()}catch(t){this._handleError("update",t,e)}}_finalizeLayer(e){this._needsRedraw=this._needsRedraw||`finalized ${e}`,e.lifecycle="No longer matched. Awaiting garbage collection";try{e._finalize(),e.lifecycle="Finalized! Awaiting garbage collection"}catch(t){this._handleError("finalization",t,e)}}}function rd(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;rt.containsPixel(e)):this._viewports}getViews(){const e={};return this.views.forEach(t=>{e[t.id]=t}),e}getView(e){return this.views.find(t=>t.id===e)}getViewState(e){const t="string"==typeof e?this.getView(e):e,n=t&&this.viewState[t.getViewStateId()]||this.viewState;return t?t.filterViewState(n):n}getViewport(e){return this._viewportMap[e]}unproject(e,t){const n=this.getViewports(),r={x:e[0],y:e[1]};for(let s=n.length-1;s>=0;--s){const i=n[s];if(i.containsPixel(r)){const n=e.slice();return n[0]-=i.x,n[1]-=i.y,i.unproject(n,t)}}return null}setProps(e){e.views&&this._setViews(e.views),e.viewState&&this._setViewState(e.viewState),("width"in e||"height"in e)&&this._setSize(e.width,e.height),this._isUpdating||this._update()}_update(){this._isUpdating=!0,this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports()),this._needsUpdate&&(this._needsUpdate=!1,this._rebuildViewports()),this._isUpdating=!1}_setSize(e,t){e===this.width&&t===this.height||(this.width=e,this.height=t,this.setNeedsUpdate("Size changed"))}_setViews(e){e=Zh(e,Boolean),this._diffViews(e,this.views)&&this.setNeedsUpdate("views changed"),this.views=e}_setViewState(e){e?(!rd(e,this.viewState,3)&&this.setNeedsUpdate("viewState changed"),this.viewState=e):$n.warn("missing `viewState` or `initialViewState`")()}_createController(e,t){const n=new(0,t.type)({timeline:this.timeline,eventManager:this._eventManager,onViewStateChange:this._eventCallbacks.onViewStateChange,onStateChange:this._eventCallbacks.onInteractionStateChange,makeViewport:t=>{var n;return null==(n=this.getView(e.id))?void 0:n.makeViewport({viewState:t,width:this.width,height:this.height})}});return n}_updateController(e,t,n,r){const s=e.controller;if(s&&n){const i={...t,...s,id:e.id,x:n.x,y:n.y,width:n.width,height:n.height};return r&&r.constructor===s.type||(r=this._createController(e,i)),r&&r.setProps(i),r}return null}_rebuildViewports(){const{views:e}=this,t=this.controllers;this._viewports=[],this.controllers={};let n=!1;for(let r=e.length;r--;){const s=e[r],i=this.getViewState(s),o=s.makeViewport({viewState:i,width:this.width,height:this.height});let a=t[s.id];const l=Boolean(s.controller);l&&!a&&(n=!0),!n&&l||!a||(a.finalize(),a=null),this.controllers[s.id]=this._updateController(s,i,o,a),o&&this._viewports.unshift(o)}for(const r in t){const e=t[r];e&&!this.controllers[r]&&e.finalize()}this._buildViewportMap()}_buildViewportMap(){this._viewportMap={},this._viewports.forEach(e=>{e.id&&(this._viewportMap[e.id]=this._viewportMap[e.id]||e)})}_diffViews(e,t){return e.length!==t.length||e.some((n,r)=>!e[r].equals(t[r]))}}const id=/([0-9]+\.?[0-9]*)(%|px)/;function od(e){switch(typeof e){case"number":return{position:e,relative:!1};case"string":const t=id.exec(e);if(t&&t.length>=3){const e="%"===t[2],n=parseFloat(t[1]);return{position:e?n/100:n,relative:e}}default:throw new Error(`Could not parse position string ${e}`)}}function ad(e,t){return e.relative?Math.round(e.position*t):e.position}class ld{constructor(e){const{id:t,x:n=0,y:r=0,width:s="100%",height:i="100%",padding:o=null}=e;this.id=t||this.constructor.displayName||"view",this.props={...e,id:this.id},this._x=od(n),this._y=od(r),this._width=od(s),this._height=od(i),this._padding=o&&{left:od(o.left||0),right:od(o.right||0),top:od(o.top||0),bottom:od(o.bottom||0)},this.equals=this.equals.bind(this),Object.seal(this)}equals(e){return this===e||this.constructor===e.constructor&&rd(this.props,e.props,2)}clone(e){return new(0,this.constructor)({...this.props,...e})}makeViewport({width:e,height:t,viewState:n}){n=this.filterViewState(n);const r=this.getDimensions({width:e,height:t});return r.height&&r.width?new(this.getViewportType(n))({...n,...this.props,...r}):null}getViewStateId(){const{viewState:e}=this.props;return"string"==typeof e?e:(null==e?void 0:e.id)||this.id}filterViewState(e){if(this.props.viewState&&"object"==typeof this.props.viewState){if(!this.props.viewState.id)return this.props.viewState;const t={...e};for(const e in this.props.viewState)"id"!==e&&(t[e]=this.props.viewState[e]);return t}return e}getDimensions({width:e,height:t}){const n={x:ad(this._x,e),y:ad(this._y,t),width:ad(this._width,e),height:ad(this._height,t)};return this._padding&&(n.padding={left:ad(this._padding.left,e),top:ad(this._padding.top,t),right:ad(this._padding.right,e),bottom:ad(this._padding.bottom,t)}),n}get controller(){const e=this.props.controller;return e?!0===e?{type:this.ControllerType}:"function"==typeof e?{type:e}:{type:this.ControllerType,...e}:null}}class cd{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){var t,n;this.cancel(),this.settings=e,this._inProgress=!0,null==(n=(t=this.settings).onStart)||n.call(t,this)}end(){var e,t;this._inProgress&&(this._timeline.removeChannel(this._handle),this._handle=null,this._inProgress=!1,null==(t=(e=this.settings).onEnd)||t.call(e,this))}cancel(){var e,t;this._inProgress&&(null==(t=(e=this.settings).onInterrupt)||t.call(e,this),this._timeline.removeChannel(this._handle),this._handle=null,this._inProgress=!1)}update(){var e,t;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(),null==(t=(e=this.settings).onUpdate)||t.call(e,this),this._timeline.isFinished(this._handle)&&this.end(),!0}_onUpdate(){}}const ud=()=>{},hd=e=>e;class dd{constructor(e){this._onTransitionUpdate=e=>{const{time:t,settings:{interpolator:n,startProps:r,endProps:s,duration:i,easing:o}}=e,a=o(t/i),l=n.interpolateProps(r,s,a);this.propsInTransition=this.getControllerState({...this.props,...l}).getViewportProps(),this.onViewStateChange({viewState:this.propsInTransition,oldViewState:this.props})},this.getControllerState=e.getControllerState,this.propsInTransition=null,this.transition=new cd(e.timeline),this.onViewStateChange=e.onViewStateChange||ud,this.onStateChange=e.onStateChange||ud}finalize(){this.transition.cancel()}getViewportInTransition(){return this.propsInTransition}processViewStateChange(e){let t=!1;const n=this.props;if(this.props=e,!n||this._shouldIgnoreViewportChange(n,e))return!1;if(this._isTransitionEnabled(e)){let r=n;if(this.transition.inProgress){const{interruption:e,endProps:t}=this.transition.settings;r={...n,...2===e?t:this.propsInTransition||n}}this._triggerTransition(r,e),t=!0}else this.transition.cancel();return t}updateTransition(){this.transition.update()}_isTransitionEnabled(e){const{transitionDuration:t,transitionInterpolator:n}=e;return(t>0||"auto"===t)&&Boolean(n)}_isUpdateDueToCurrentTransition(e){return!(!this.transition.inProgress||!this.propsInTransition)&&this.transition.settings.interpolator.arePropsEqual(e,this.propsInTransition)}_shouldIgnoreViewportChange(e,t){return this.transition.inProgress?3===this.transition.settings.interruption||this._isUpdateDueToCurrentTransition(t):!this._isTransitionEnabled(t)||t.transitionInterpolator.arePropsEqual(e,t)}_triggerTransition(e,t){const n=this.getControllerState(e),r=this.getControllerState(t).shortestPathFrom(n),s=t.transitionInterpolator,i=s.getDuration?s.getDuration(e,t):t.transitionDuration;if(0===i)return;const o=s.initializeProps(e,r);this.propsInTransition={};const a={duration:i,easing:t.transitionEasing||hd,interpolator:s,interruption:t.transitionInterruption||1,startProps:o.start,endProps:o.end,onStart:t.onTransitionStart,onUpdate:this._onTransitionUpdate,onInterrupt:this._onTransitionEnd(t.onTransitionInterrupt),onEnd:this._onTransitionEnd(t.onTransitionEnd)};this.transition.start(a),this.onStateChange({inTransition:!0}),this.updateTransition()}_onTransitionEnd(e){return t=>{this.propsInTransition=null,this.onStateChange({inTransition:!1,isZooming:!1,isPanning:!1,isRotating:!1}),null==e||e(t)}}}function fd(e,t){if(!e)throw new Error(t||"deck.gl: assertion failed.")}class pd{constructor(e){const{compare:t,extract:n,required:r}=e;this._propsToCompare=t,this._propsToExtract=n||t,this._requiredProps=r}arePropsEqual(e,t){for(const n of this._propsToCompare)if(!(n in e)||!(n in t)||!Ua(e[n],t[n]))return!1;return!0}initializeProps(e,t){const n={},r={};for(const s of this._propsToExtract)(s in e||s in t)&&(n[s]=e[s],r[s]=t[s]);return this._checkRequiredProps(n),this._checkRequiredProps(r),{start:n,end:r}}getDuration(e,t){return t.transitionDuration}_checkRequiredProps(e){this._requiredProps&&this._requiredProps.forEach(t=>{const n=e[t];fd(Number.isFinite(n)||Array.isArray(n),`${t} is required for transition`)})}}const gd=["longitude","latitude","zoom","bearing","pitch"],md=["longitude","latitude","zoom"];class _d extends pd{constructor(e={}){const t=Array.isArray(e)?e:e.transitionProps,n=Array.isArray(e)?{}:e;n.transitionProps=Array.isArray(t)?{compare:t,required:t}:t||{compare:gd,required:md},super(n.transitionProps),this.opts=n}initializeProps(e,t){const n=super.initializeProps(e,t),{makeViewport:r,around:s}=this.opts;if(r&&s){const i=r(e),o=r(t),a=i.unproject(s);n.start.around=s,Object.assign(n.end,{around:o.project(a),aroundPosition:a,width:t.width,height:t.height})}return n}interpolateProps(e,t,n){const r={};for(const s of this._propsToExtract)r[s]=Ba(e[s]||0,t[s]||0,n);if(t.aroundPosition&&this.opts.makeViewport){const s=this.opts.makeViewport({...t,...r});Object.assign(r,s.panByPosition(t.aroundPosition,Ba(e.around,t.around,n)))}return r}}const yd={transitionDuration:0},bd=e=>1-(1-e)*(1-e),vd=["wheel"],xd=["panstart","panmove","panend"],wd=["pinchstart","pinchmove","pinchend"],Ed=["multipanstart","multipanmove","multipanend"],Td=["dblclick"],Sd=["keydown"],Ad={};class Rd{constructor(e){this.state={},this._events={},this._interactionState={isDragging:!1},this._customEvents=[],this._eventStartBlocked=null,this._panMove=!1,this.invertPan=!1,this.dragMode="rotate",this.inertia=0,this.scrollZoom=!0,this.dragPan=!0,this.dragRotate=!0,this.doubleClickZoom=!0,this.touchZoom=!0,this.touchRotate=!1,this.keyboard=!0,this.transitionManager=new dd({...e,getControllerState:e=>new this.ControllerState(e),onViewStateChange:this._onTransition.bind(this),onStateChange:this._setInteractionState.bind(this)}),this.handleEvent=this.handleEvent.bind(this),this.eventManager=e.eventManager,this.onViewStateChange=e.onViewStateChange||(()=>{}),this.onStateChange=e.onStateChange||(()=>{}),this.makeViewport=e.makeViewport}set events(e){this.toggleEvents(this._customEvents,!1),this.toggleEvents(e,!0),this._customEvents=e,this.props&&this.setProps(this.props)}finalize(){var e;for(const t in this._events)this._events[t]&&(null==(e=this.eventManager)||e.off(t,this.handleEvent));this.transitionManager.finalize()}handleEvent(e){this._controllerState=void 0;const t=this._eventStartBlocked;switch(e.type){case"panstart":return!t&&this._onPanStart(e);case"panmove":return this._onPan(e);case"panend":return this._onPanEnd(e);case"pinchstart":return!t&&this._onPinchStart(e);case"pinchmove":return this._onPinch(e);case"pinchend":return this._onPinchEnd(e);case"multipanstart":return!t&&this._onMultiPanStart(e);case"multipanmove":return this._onMultiPan(e);case"multipanend":return this._onMultiPanEnd(e);case"dblclick":return this._onDoubleClick(e);case"wheel":return this._onWheel(e);case"keydown":return this._onKeyDown(e);default:return!1}}get controllerState(){return this._controllerState=this._controllerState||new this.ControllerState({makeViewport:this.makeViewport,...this.props,...this.state}),this._controllerState}getCenter(e){const{x:t,y:n}=this.props,{offsetCenter:r}=e;return[r.x-t,r.y-n]}isPointInBounds(e,t){const{width:n,height:r}=this.props;if(t&&t.handled)return!1;const s=e[0]>=0&&e[0]<=n&&e[1]>=0&&e[1]<=r;return s&&t&&t.stopPropagation(),s}isFunctionKeyPressed(e){const{srcEvent:t}=e;return Boolean(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}isDragging(){return this._interactionState.isDragging||!1}blockEvents(e){const t=setTimeout(()=>{this._eventStartBlocked===t&&(this._eventStartBlocked=null)},e);this._eventStartBlocked=t}setProps(e){e.dragMode&&(this.dragMode=e.dragMode),this.props=e,"transitionInterpolator"in e||(e.transitionInterpolator=this._getTransitionProps().transitionInterpolator),this.transitionManager.processViewStateChange(e);const{inertia:t}=e;this.inertia=Number.isFinite(t)?t:!0===t?300:0;const{scrollZoom:n=!0,dragPan:r=!0,dragRotate:s=!0,doubleClickZoom:i=!0,touchZoom:o=!0,touchRotate:a=!1,keyboard:l=!0}=e,c=Boolean(this.onViewStateChange);this.toggleEvents(vd,c&&n),this.toggleEvents(xd,c),this.toggleEvents(wd,c&&(o||a)),this.toggleEvents(Ed,c&&a),this.toggleEvents(Td,c&&i),this.toggleEvents(Sd,c&&l),this.scrollZoom=n,this.dragPan=r,this.dragRotate=s,this.doubleClickZoom=i,this.touchZoom=o,this.touchRotate=a,this.keyboard=l}updateTransition(){this.transitionManager.updateTransition()}toggleEvents(e,t){this.eventManager&&e.forEach(e=>{this._events[e]!==t&&(this._events[e]=t,t?this.eventManager.on(e,this.handleEvent):this.eventManager.off(e,this.handleEvent))})}updateViewport(e,t=null,n={}){const r={...e.getViewportProps(),...t},s=this.controllerState!==e;if(this.state=e.getState(),this._setInteractionState(n),s){const e=this.controllerState&&this.controllerState.getViewportProps();this.onViewStateChange&&this.onViewStateChange({viewState:r,interactionState:this._interactionState,oldViewState:e,viewId:this.props.id})}}_onTransition(e){this.onViewStateChange({...e,interactionState:this._interactionState,viewId:this.props.id})}_setInteractionState(e){Object.assign(this._interactionState,e),this.onStateChange(this._interactionState)}_onPanStart(e){const t=this.getCenter(e);if(!this.isPointInBounds(t,e))return!1;let n=this.isFunctionKeyPressed(e)||e.rightButton||!1;(this.invertPan||"pan"===this.dragMode)&&(n=!n);const r=this.controllerState[n?"panStart":"rotateStart"]({pos:t});return this._panMove=n,this.updateViewport(r,yd,{isDragging:!0}),!0}_onPan(e){return!!this.isDragging()&&(this._panMove?this._onPanMove(e):this._onPanRotate(e))}_onPanEnd(e){return!!this.isDragging()&&(this._panMove?this._onPanMoveEnd(e):this._onPanRotateEnd(e))}_onPanMove(e){if(!this.dragPan)return!1;const t=this.getCenter(e),n=this.controllerState.pan({pos:t});return this.updateViewport(n,yd,{isDragging:!0,isPanning:!0}),!0}_onPanMoveEnd(e){const{inertia:t}=this;if(this.dragPan&&t&&e.velocity){const n=this.getCenter(e),r=[n[0]+e.velocityX*t/2,n[1]+e.velocityY*t/2],s=this.controllerState.pan({pos:r}).panEnd();this.updateViewport(s,{...this._getTransitionProps(),transitionDuration:t,transitionEasing:bd},{isDragging:!1,isPanning:!0})}else{const e=this.controllerState.panEnd();this.updateViewport(e,null,{isDragging:!1,isPanning:!1})}return!0}_onPanRotate(e){if(!this.dragRotate)return!1;const t=this.getCenter(e),n=this.controllerState.rotate({pos:t});return this.updateViewport(n,yd,{isDragging:!0,isRotating:!0}),!0}_onPanRotateEnd(e){const{inertia:t}=this;if(this.dragRotate&&t&&e.velocity){const n=this.getCenter(e),r=[n[0]+e.velocityX*t/2,n[1]+e.velocityY*t/2],s=this.controllerState.rotate({pos:r}).rotateEnd();this.updateViewport(s,{...this._getTransitionProps(),transitionDuration:t,transitionEasing:bd},{isDragging:!1,isRotating:!0})}else{const e=this.controllerState.rotateEnd();this.updateViewport(e,null,{isDragging:!1,isRotating:!1})}return!0}_onWheel(e){if(!this.scrollZoom)return!1;const t=this.getCenter(e);if(!this.isPointInBounds(t,e))return!1;e.srcEvent.preventDefault();const{speed:n=.01,smooth:r=!1}=!0===this.scrollZoom?{}:this.scrollZoom,{delta:s}=e;let i=2/(1+Math.exp(-Math.abs(s*n)));s<0&&0!==i&&(i=1/i);const o=r?{...this._getTransitionProps({around:t}),transitionDuration:250}:yd,a=this.controllerState.zoom({pos:t,scale:i});return this.updateViewport(a,o,{isZooming:!0,isPanning:!0}),!0}_onMultiPanStart(e){const t=this.getCenter(e);if(!this.isPointInBounds(t,e))return!1;const n=this.controllerState.rotateStart({pos:t});return this.updateViewport(n,yd,{isDragging:!0}),!0}_onMultiPan(e){if(!this.touchRotate)return!1;if(!this.isDragging())return!1;const t=this.getCenter(e);t[0]-=e.deltaX;const n=this.controllerState.rotate({pos:t});return this.updateViewport(n,yd,{isDragging:!0,isRotating:!0}),!0}_onMultiPanEnd(e){if(!this.isDragging())return!1;const{inertia:t}=this;if(this.touchRotate&&t&&e.velocityY){const n=this.getCenter(e),r=[n[0],n[1]+=e.velocityY*t/2],s=this.controllerState.rotate({pos:r});this.updateViewport(s,{...this._getTransitionProps(),transitionDuration:t,transitionEasing:bd},{isDragging:!1,isRotating:!0}),this.blockEvents(t)}else{const e=this.controllerState.rotateEnd();this.updateViewport(e,null,{isDragging:!1,isRotating:!1})}return!0}_onPinchStart(e){const t=this.getCenter(e);if(!this.isPointInBounds(t,e))return!1;const n=this.controllerState.zoomStart({pos:t}).rotateStart({pos:t});return Ad._startPinchRotation=e.rotation,Ad._lastPinchEvent=e,this.updateViewport(n,yd,{isDragging:!0}),!0}_onPinch(e){if(!this.touchZoom&&!this.touchRotate)return!1;if(!this.isDragging())return!1;let t=this.controllerState;if(this.touchZoom){const{scale:n}=e,r=this.getCenter(e);t=t.zoom({pos:r,scale:n})}if(this.touchRotate){const{rotation:n}=e;t=t.rotate({deltaAngleX:Ad._startPinchRotation-n})}return this.updateViewport(t,yd,{isDragging:!0,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:this.touchRotate}),Ad._lastPinchEvent=e,!0}_onPinchEnd(e){if(!this.isDragging())return!1;const{inertia:t}=this,{_lastPinchEvent:n}=Ad;if(this.touchZoom&&t&&n&&e.scale!==n.scale){const r=this.getCenter(e);let s=this.controllerState.rotateEnd();const i=Math.log2(e.scale),o=(i-Math.log2(n.scale))/(e.deltaTime-n.deltaTime),a=Math.pow(2,i+o*t/2);s=s.zoom({pos:r,scale:a}).zoomEnd(),this.updateViewport(s,{...this._getTransitionProps({around:r}),transitionDuration:t,transitionEasing:bd},{isDragging:!1,isPanning:this.touchZoom,isZooming:this.touchZoom,isRotating:!1}),this.blockEvents(t)}else{const e=this.controllerState.zoomEnd().rotateEnd();this.updateViewport(e,null,{isDragging:!1,isPanning:!1,isZooming:!1,isRotating:!1})}return Ad._startPinchRotation=null,Ad._lastPinchEvent=null,!0}_onDoubleClick(e){if(!this.doubleClickZoom)return!1;const t=this.getCenter(e);if(!this.isPointInBounds(t,e))return!1;const n=this.isFunctionKeyPressed(e),r=this.controllerState.zoom({pos:t,scale:n?.5:2});return this.updateViewport(r,this._getTransitionProps({around:t}),{isZooming:!0,isPanning:!0}),this.blockEvents(100),!0}_onKeyDown(e){if(!this.keyboard)return!1;const t=this.isFunctionKeyPressed(e),{zoomSpeed:n,moveSpeed:r,rotateSpeedX:s,rotateSpeedY:i}=!0===this.keyboard?{}:this.keyboard,{controllerState:o}=this;let a;const l={};switch(e.srcEvent.code){case"Minus":a=t?o.zoomOut(n).zoomOut(n):o.zoomOut(n),l.isZooming=!0;break;case"Equal":a=t?o.zoomIn(n).zoomIn(n):o.zoomIn(n),l.isZooming=!0;break;case"ArrowLeft":t?(a=o.rotateLeft(s),l.isRotating=!0):(a=o.moveLeft(r),l.isPanning=!0);break;case"ArrowRight":t?(a=o.rotateRight(s),l.isRotating=!0):(a=o.moveRight(r),l.isPanning=!0);break;case"ArrowUp":t?(a=o.rotateUp(i),l.isRotating=!0):(a=o.moveUp(r),l.isPanning=!0);break;case"ArrowDown":t?(a=o.rotateDown(i),l.isRotating=!0):(a=o.moveDown(r),l.isPanning=!0);break;default:return!1}return this.updateViewport(a,this._getTransitionProps(),l),!0}_getTransitionProps(e){const{transition:t}=this;return t&&t.transitionInterpolator?e?{...t,transitionInterpolator:new _d({...e,...t.transitionInterpolator.opts,makeViewport:this.controllerState.makeViewport})}:t:yd}}class Cd{constructor(e,t){this._viewportProps=this.applyConstraints(e),this._state=t}getViewportProps(){return this._viewportProps}getState(){return this._state}}class kd extends Cd{constructor(e){const{width:t,height:n,latitude:r,longitude:s,zoom:i,bearing:o=0,pitch:a=0,altitude:l=1.5,position:c=[0,0,0],maxZoom:u=20,minZoom:h=0,maxPitch:d=60,minPitch:f=0,startPanLngLat:p,startZoomLngLat:g,startRotatePos:m,startBearing:_,startPitch:y,startZoom:b,normalize:v=!0}=e;fd(Number.isFinite(s)),fd(Number.isFinite(r)),fd(Number.isFinite(i)),super({width:t,height:n,latitude:r,longitude:s,zoom:i,bearing:o,pitch:a,altitude:l,maxZoom:u,minZoom:h,maxPitch:d,minPitch:f,normalize:v,position:c},{startPanLngLat:p,startZoomLngLat:g,startRotatePos:m,startBearing:_,startPitch:y,startZoom:b}),this.makeViewport=e.makeViewport}panStart({pos:e}){return this._getUpdatedState({startPanLngLat:this._unproject(e)})}pan({pos:e,startPos:t}){const n=this.getState().startPanLngLat||this._unproject(t);if(!n)return this;const r=this.makeViewport(this.getViewportProps()).panByPosition(n,e);return this._getUpdatedState(r)}panEnd(){return this._getUpdatedState({startPanLngLat:null})}rotateStart({pos:e}){return this._getUpdatedState({startRotatePos:e,startBearing:this.getViewportProps().bearing,startPitch:this.getViewportProps().pitch})}rotate({pos:e,deltaAngleX:t=0,deltaAngleY:n=0}){const{startRotatePos:r,startBearing:s,startPitch:i}=this.getState();if(!r||void 0===s||void 0===i)return this;let o;return o=e?this._getNewRotation(e,r,i,s):{bearing:s+t,pitch:i+n},this._getUpdatedState(o)}rotateEnd(){return this._getUpdatedState({startBearing:null,startPitch:null})}zoomStart({pos:e}){return this._getUpdatedState({startZoomLngLat:this._unproject(e),startZoom:this.getViewportProps().zoom})}zoom({pos:e,startPos:t,scale:n}){let{startZoom:r,startZoomLngLat:s}=this.getState();if(s||(r=this.getViewportProps().zoom,s=this._unproject(t)||this._unproject(e)),!s)return this;const{maxZoom:i,minZoom:o}=this.getViewportProps();let a=r+Math.log2(n);a=Da(a,o,i);const l=this.makeViewport({...this.getViewportProps(),zoom:a});return this._getUpdatedState({zoom:a,...l.panByPosition(s,e)})}zoomEnd(){return this._getUpdatedState({startZoomLngLat:null,startZoom:null})}zoomIn(e=2){return this._zoomFromCenter(e)}zoomOut(e=2){return this._zoomFromCenter(1/e)}moveLeft(e=100){return this._panFromCenter([e,0])}moveRight(e=100){return this._panFromCenter([-e,0])}moveUp(e=100){return this._panFromCenter([0,e])}moveDown(e=100){return this._panFromCenter([0,-e])}rotateLeft(e=15){return this._getUpdatedState({bearing:this.getViewportProps().bearing-e})}rotateRight(e=15){return this._getUpdatedState({bearing:this.getViewportProps().bearing+e})}rotateUp(e=10){return this._getUpdatedState({pitch:this.getViewportProps().pitch+e})}rotateDown(e=10){return this._getUpdatedState({pitch:this.getViewportProps().pitch-e})}shortestPathFrom(e){const t=e.getViewportProps(),n={...this.getViewportProps()},{bearing:r,longitude:s}=n;return Math.abs(r-t.bearing)>180&&(n.bearing=r<0?r+360:r-360),Math.abs(s-t.longitude)>180&&(n.longitude=s<0?s+360:s-360),n}applyConstraints(e){const{maxZoom:t,minZoom:n,zoom:r}=e;e.zoom=Da(r,n,t);const{maxPitch:s,minPitch:i,pitch:o}=e;e.pitch=Da(o,i,s);const{normalize:a=!0}=e;return a&&Object.assign(e,function(e){const{width:t,height:n,pitch:r=0}=e;let{longitude:s,latitude:i,zoom:o,bearing:a=0}=e;(s<-180||s>180)&&(s=Kc(s+180,360)-180),(a<-180||a>180)&&(a=Kc(a+180,360)-180);const l=Qc(n/512);if(o<=l)o=l,i=0;else{const e=n/2/Math.pow(2,o),t=lu([0,e])[1];if(it&&(i=t)}}return{width:t,height:n,longitude:s,latitude:i,zoom:o,pitch:r,bearing:a}}(e)),e}_zoomFromCenter(e){const{width:t,height:n}=this.getViewportProps();return this.zoom({pos:[t/2,n/2],scale:e})}_panFromCenter(e){const{width:t,height:n}=this.getViewportProps();return this.pan({startPos:[t/2,n/2],pos:[t/2+e[0],n/2+e[1]]})}_getUpdatedState(e){return new this.constructor({makeViewport:this.makeViewport,...this.getViewportProps(),...this.getState(),...e})}_unproject(e){const t=this.makeViewport(this.getViewportProps());return e&&t.unproject(e)}_getNewRotation(e,t,n,r){const s=e[0]-t[0],i=e[1]-t[1],o=e[1],a=t[1],{width:l,height:c}=this.getViewportProps(),u=s/l;let h=0;i>0?Math.abs(c-a)>5&&(h=i/(a-c)*1.2):i<0&&a>5&&(h=1-o/a),h=Da(h,-1,1);const{minPitch:d,maxPitch:f}=this.getViewportProps();let p=n;return h>0?p=n+h*(f-n):h<0&&(p=n-h*(d-n)),{pitch:p,bearing:r+180*u}}}class Pd extends Rd{constructor(){super(...arguments),this.ControllerState=kd,this.transition={transitionDuration:300,transitionInterpolator:new _d({transitionProps:{compare:["longitude","latitude","zoom","bearing","pitch","position"],required:["longitude","latitude","zoom"]}})},this.dragMode="pan"}setProps(e){e.position=e.position||[0,0,0];const t=this.props;super.setProps(e),(!t||t.height!==e.height)&&this.updateViewport(new this.ControllerState({makeViewport:this.makeViewport,...e,...this.state}))}}class Id extends ld{constructor(e={}){super(e)}getViewportType(){return ah}get ControllerType(){return Pd}}Id.displayName="MapView";const Md=new qu;class Nd{constructor(e){this._resolvedEffects=[],this._defaultEffects=[],this.effects=[],this._context=e,this._needsRedraw="Initial render",this._setEffects([])}addDefaultEffect(e){const t=this._defaultEffects;if(!t.find(t=>t.id===e.id)){const n=t.findIndex(t=>function(e,t){return(e.order??1/0)-(t.order??1/0)}(t,e)>0);n<0?t.push(e):t.splice(n,0,e),e.setup(this._context),this._setEffects(this.effects)}}setProps(e){"effects"in e&&(rd(e.effects,this.effects,1)||this._setEffects(e.effects))}needsRedraw(e={clearRedrawFlags:!1}){const t=this._needsRedraw;return e.clearRedrawFlags&&(this._needsRedraw=!1),t}getEffects(){return this._resolvedEffects}_setEffects(e){const t={};for(const r of this.effects)t[r.id]=r;const n=[];for(const r of e){const e=t[r.id];let s=r;e&&e!==r?e.setProps?(e.setProps(r.props),s=e):e.cleanup(this._context):e||r.setup(this._context),n.push(s),delete t[r.id]}for(const r in t)t[r].cleanup(this._context);this.effects=n,this._resolvedEffects=n.concat(this._defaultEffects),e.some(e=>e instanceof qu)||this._resolvedEffects.push(Md),this._needsRedraw="effects changed"}finalize(){for(const e of this._resolvedEffects)e.cleanup(this._context);this.effects.length=0,this._resolvedEffects.length=0,this._defaultEffects.length=0}}class Ld extends Vu{shouldDrawLayer(e){const{operation:t}=e.props;return t.includes("draw")||t.includes("terrain")}}class Od{constructor(e){this.device=e,this.layerFilter=null,this.drawPickingColors=!1,this.drawLayersPass=new Ld(e),this.pickLayersPass=new zh(e),this.renderCount=0,this._needsRedraw="Initial render",this.renderBuffers=[],this.lastPostProcessEffect=null}setProps(e){this.layerFilter!==e.layerFilter&&(this.layerFilter=e.layerFilter,this._needsRedraw="layerFilter changed"),this.drawPickingColors!==e.drawPickingColors&&(this.drawPickingColors=e.drawPickingColors,this._needsRedraw="drawPickingColors changed")}renderLayers(e){if(!e.viewports.length)return;const t=this.drawPickingColors?this.pickLayersPass:this.drawLayersPass,n={layerFilter:this.layerFilter,isPicking:this.drawPickingColors,...e};n.effects&&this._preRender(n.effects,n);const r=this.lastPostProcessEffect?this.renderBuffers[0]:n.target;this.lastPostProcessEffect&&(n.clearColor=[0,0,0,0],n.clearCanvas=!0);const s=t.render({...n,target:r});n.effects&&(this.lastPostProcessEffect&&(n.clearCanvas=void 0===e.clearCanvas||e.clearCanvas),this._postRender(n.effects,n)),this.renderCount++,Yn("deckRenderer.renderLayers",this,s,e)}needsRedraw(e={clearRedrawFlags:!1}){const t=this._needsRedraw;return e.clearRedrawFlags&&(this._needsRedraw=!1),t}finalize(){const{renderBuffers:e}=this;for(const t of e)t.delete();e.length=0}_preRender(e,t){this.lastPostProcessEffect=null,t.preRenderStats=t.preRenderStats||{};for(const n of e)t.preRenderStats[n.id]=n.preRender(t),n.postRender&&(this.lastPostProcessEffect=n.id);this.lastPostProcessEffect&&this._resizeRenderBuffers()}_resizeRenderBuffers(){const{renderBuffers:e}=this,t=this.device.canvasContext.getDrawingBufferSize(),[n,r]=t;0===e.length&&[0,1].map(t=>{const s=this.device.createTexture({sampler:{minFilter:"linear",magFilter:"linear"},width:n,height:r});e.push(this.device.createFramebuffer({id:`deck-renderbuffer-${t}`,colorAttachments:[s]}))});for(const s of e)s.resize(t)}_postRender(e,t){const{renderBuffers:n}=this,r={...t,inputBuffer:n[0],swapBuffer:n[1]};for(const s of e)if(s.postRender){r.target=s.id===this.lastPostProcessEffect?t.target:void 0;const e=s.postRender(r);r.inputBuffer=e,r.swapBuffer=e===n[0]?n[1]:n[0]}}}const Fd={pickedColor:null,pickedObjectIndex:-1};function Dd({pickedColors:e,decodePickingColor:t,deviceX:n,deviceY:r,deviceRadius:s,deviceRect:i}){const{x:o,y:a,width:l,height:c}=i;let u=s*s,h=-1,d=0;for(let f=0;fu)d+=4*l;else for(let r=0;r=0){const e=r+o-n,t=e*e+s;t<=u&&(u=t,h=d)}d+=4}}if(h>=0){const n=e.slice(h,h+4),r=t(n);if(r){const e=Math.floor(h/4/l),t=h/4-e*l;return{...r,pickedColor:n,pickedX:o+t,pickedY:a+e}}$n.error("Picked non-existent layer. Is picking buffer corrupt?")()}return Fd}function Bd({pickedColors:e,decodePickingColor:t}){const n=new Map;if(e)for(let r=0;r=0){const s=e.slice(r,r+4),i=s.join(",");if(!n.has(i)){const e=t(s);e?n.set(i,{...e,color:s}):$n.error("Picked non-existent layer. Is picking buffer corrupt?")()}}return Array.from(n.values())}function Ud({pickInfo:e,viewports:t,pixelRatio:n,x:r,y:s,z:i}){let o,a=t[0];if(t.length>1&&(a=function(e,t){for(let n=e.length-1;n>=0;n--){const r=e[n];if(r.containsPixel(t))return r}return e[0]}((null==e?void 0:e.pickedViewports)||t,{x:r,y:s})),a){const e=[r-a.x,s-a.y];void 0!==i&&(e[2]=i),o=a.unproject(e)}return{color:null,layer:null,viewport:a,index:-1,picked:!1,x:r,y:s,pixel:[r,s],coordinate:o,devicePixel:e&&"pickedX"in e?[e.pickedX,e.pickedY]:void 0,pixelRatio:n}}function jd(e){const{pickInfo:t,lastPickedInfo:n,mode:r,layers:s}=e,{pickedColor:i,pickedLayer:o,pickedObjectIndex:a}=t,l=o?[o]:[];if("hover"===r){const e=n.index,t=n.layerId,r=o?o.props.id:null;if(r!==t||a!==e){if(r!==t){const e=s.find(e=>e.props.id===t);e&&l.unshift(e)}n.layerId=r,n.index=a,n.info=null}}const c=Ud(e),u=new Map;return u.set(null,c),l.forEach(e=>{let t={...c};e===o&&(t.color=i,t.index=a,t.picked=!0),t=Vd({layer:e,info:t,mode:r});const s=t.layer;e===o&&"hover"===r&&(n.info=t),u.set(s.id,t),"hover"===r&&s.updateAutoHighlight(t)}),u}function Vd({layer:e,info:t,mode:n}){for(;e&&t;){const r=t.layer||null;t.sourceLayer=r,t.layer=e,t=e.getPickingInfo({info:t,mode:n,sourceLayer:r}),e=e.parent}return t}class Gd{constructor(e){this._pickable=!0,this.device=e,this.pickLayersPass=new zh(e),this.lastPickedInfo={index:-1,layerId:null,info:null}}setProps(e){"layerFilter"in e&&(this.layerFilter=e.layerFilter),"_pickable"in e&&(this._pickable=e._pickable)}finalize(){this.pickingFBO&&this.pickingFBO.destroy(),this.depthFBO&&this.depthFBO.destroy()}pickObjectAsync(e){return this._pickClosestObjectAsync(e)}pickObjectsAsync(e){return this._pickVisibleObjectsAsync(e)}pickObject(e){return this._pickClosestObject(e)}pickObjects(e){return this._pickVisibleObjects(e)}getLastPickedObject({x:e,y:t,layers:n,viewports:r},s=this.lastPickedInfo.info){const i=s&&s.layer&&s.layer.id,o=s&&s.viewport&&s.viewport.id,a=i?n.find(e=>e.id===i):null,l=o&&r.find(e=>e.id===o)||r[0],c=l&&l.unproject([e-l.x,t-l.y]),u={x:e,y:t,viewport:l,coordinate:c,layer:a};return{...s,...u}}_resizeBuffer(){var e,t;if(!this.pickingFBO&&(this.pickingFBO=this.device.createFramebuffer({colorAttachments:["rgba8unorm"],depthStencilAttachment:"depth16unorm"}),this.device.isTextureFormatRenderable("rgba32float"))){const e=this.device.createFramebuffer({colorAttachments:["rgba32float"],depthStencilAttachment:"depth16unorm"});this.depthFBO=e}const{canvas:n}=this.device.getDefaultCanvasContext();null==(e=this.pickingFBO)||e.resize({width:n.width,height:n.height}),null==(t=this.depthFBO)||t.resize({width:n.width,height:n.height})}_getPickable(e){if(!1===this._pickable)return null;const t=e.filter(e=>this.pickLayersPass.shouldDrawLayer(e)&&!e.isComposite);return t.length?t:null}async _pickClosestObjectAsync({layers:e,views:t,viewports:n,x:r,y:s,radius:i=0,depth:o=1,mode:a="query",unproject3D:l,onViewportActive:c,effects:u}){const h=this.device.canvasContext.cssToDeviceRatio(),d=this._getPickable(e);if(!d||0===n.length)return{result:[],emptyInfo:Ud({viewports:n,x:r,y:s,pixelRatio:h})};this._resizeBuffer();const f=this.device.canvasContext.cssToDevicePixels([r,s],!0),p=[f.x+Math.floor(f.width/2),f.y+Math.floor(f.height/2)],g=Math.round(i*h),{width:m,height:_}=this.pickingFBO,y=this._getPickingRect({deviceX:p[0],deviceY:p[1],deviceRadius:g,deviceWidth:m,deviceHeight:_}),b={x:r-i,y:s-i,width:2*i+1,height:2*i+1};let v;const x=[],w=new Set;for(let E=0;E=l);T++){const e=v[T];let t={color:e.pickedColor,layer:null,index:e.pickedObjectIndex,picked:!0,x:r,y:s,pixelRatio:d};t=Vd({layer:e.pickedLayer,info:t,mode:a});const n=t.layer.id;x.has(n)||x.set(n,new Set);const i=x.get(n),o=t.object??t.index;i.has(o)||(i.add(o),w.push(t))}return w}_pickVisibleObjects({layers:e,views:t,viewports:n,x:r,y:s,width:i=1,height:o=1,mode:a="query",maxObjects:l=null,onViewportActive:c,effects:u}){const h=this._getPickable(e);if(!h||0===n.length)return[];this._resizeBuffer();const d=this.device.canvasContext.cssToDeviceRatio(),f=this.device.canvasContext.cssToDevicePixels([r,s],!0),p=f.x,g=f.y+f.height,m=this.device.canvasContext.cssToDevicePixels([r+i,s+o],!0),_=m.x+m.width,y=m.y,b={x:p,y:y,width:_-p,height:g-y},v=Bd(this._drawAndSample({layers:h,views:t,viewports:n,onViewportActive:c,deviceRect:b,cullRect:{x:r,y:s,width:i,height:o},effects:u,pass:`picking:${a}`})),x=new Map,w=[],E=Number.isFinite(l);for(let T=0;T=l);T++){const e=v[T];let t={color:e.pickedColor,layer:null,index:e.pickedObjectIndex,picked:!0,x:r,y:s,pixelRatio:d};t=Vd({layer:e.pickedLayer,info:t,mode:a});const n=t.layer.id;x.has(n)||x.set(n,new Set);const i=x.get(n),o=t.object??t.index;i.has(o)||(i.add(o),w.push(t))}return w}async _drawAndSampleAsync({layers:e,views:t,viewports:n,onViewportActive:r,deviceRect:s,cullRect:i,effects:o,pass:a},l=!1){const c=l?this.depthFBO:this.pickingFBO,u={layers:e,layerFilter:this.layerFilter,views:t,viewports:n,onViewportActive:r,pickingFBO:c,deviceRect:s,cullRect:i,effects:o,pass:a,pickZ:l,preRenderStats:{},isPicking:!0};for(const _ of o)_.useInPicking&&(u.preRenderStats[_.id]=_.preRender(u));const{decodePickingColor:h}=this.pickLayersPass.render(u),{x:d,y:f,width:p,height:g}=s,m=new(l?Float32Array:Uint8Array)(p*g*4);return this.device.readPixelsToArrayWebGL(c,{sourceX:d,sourceY:f,sourceWidth:p,sourceHeight:g,target:m}),{pickedColors:m,decodePickingColor:h}}_drawAndSample({layers:e,views:t,viewports:n,onViewportActive:r,deviceRect:s,cullRect:i,effects:o,pass:a},l=!1){const c=l?this.depthFBO:this.pickingFBO,u={layers:e,layerFilter:this.layerFilter,views:t,viewports:n,onViewportActive:r,pickingFBO:c,deviceRect:s,cullRect:i,effects:o,pass:a,pickZ:l,preRenderStats:{},isPicking:!0};for(const _ of o)_.useInPicking&&(u.preRenderStats[_.id]=_.preRender(u));const{decodePickingColor:h}=this.pickLayersPass.render(u),{x:d,y:f,width:p,height:g}=s,m=new(l?Float32Array:Uint8Array)(p*g*4);return this.device.readPixelsToArrayWebGL(c,{sourceX:d,sourceY:f,sourceWidth:p,sourceHeight:g,target:m}),{pickedColors:m,decodePickingColor:h}}_getPickingRect({deviceX:e,deviceY:t,deviceRadius:n,deviceWidth:r,deviceHeight:s}){const i=Math.max(0,e-n),o=Math.max(0,t-n),a=Math.min(r,e+n+1)-i,l=Math.min(s,t+n+1)-o;return a<=0||l<=0?null:{x:i,y:o,width:a,height:l}}}const zd={"top-left":{top:0,left:0},"top-right":{top:0,right:0},"bottom-left":{bottom:0,left:0},"bottom-right":{bottom:0,right:0},fill:{top:0,left:0,bottom:0,right:0}},Wd="top-left",Hd="__root";class $d{constructor({deck:e,parentElement:t}){this.defaultWidgets=[],this.widgets=[],this.resolvedWidgets=[],this.containers={},this.lastViewports={},this.deck=e,null==t||t.classList.add("deck-widget-container"),this.parentElement=t}getWidgets(){return this.resolvedWidgets}setProps(e){if(e.widgets&&!rd(e.widgets,this.widgets,1)){const t=e.widgets.filter(Boolean);this._setWidgets(t)}}finalize(){for(const e of this.getWidgets())this._removeWidget(e);this.defaultWidgets.length=0,this.resolvedWidgets.length=0;for(const e in this.containers)this.containers[e].remove()}addDefault(e){this.defaultWidgets.find(t=>t.id===e.id)||(this._addWidget(e),this.defaultWidgets.push(e),this._setWidgets(this.widgets))}onRedraw({viewports:e,layers:t}){var n,r;const s=e.reduce((e,t)=>(e[t.id]=t,e),{});for(const i of this.getWidgets()){const{viewId:o}=i;if(o){const e=s[o];e&&(i.onViewportChange&&i.onViewportChange(e),null==(n=i.onRedraw)||n.call(i,{viewports:[e],layers:t}))}else{if(i.onViewportChange)for(const t of e)i.onViewportChange(t);null==(r=i.onRedraw)||r.call(i,{viewports:e,layers:t})}}this.lastViewports=s,this._updateContainers()}onHover(e,t){var n,r;for(const s of this.getWidgets()){const{viewId:i}=s;i&&i!==(null==(n=e.viewport)?void 0:n.id)||null==(r=s.onHover)||r.call(s,e,t)}}onEvent(e,t){var n,r;const s=Ic[t.type];if(s)for(const i of this.getWidgets()){const{viewId:o}=i;o&&o!==(null==(n=e.viewport)?void 0:n.id)||null==(r=i[s])||r.call(i,e,t)}}_setWidgets(e){const t={};for(const n of this.resolvedWidgets)t[n.id]=n;this.resolvedWidgets.length=0;for(const n of this.defaultWidgets)t[n.id]=null,this.resolvedWidgets.push(n);for(let n of e){const e=t[n.id];e?e.viewId!==n.viewId||e.placement!==n.placement?(this._removeWidget(e),this._addWidget(n)):n!==e&&(e.setProps(n.props),n=e):this._addWidget(n),t[n.id]=null,this.resolvedWidgets.push(n)}for(const n in t){const e=t[n];e&&this._removeWidget(e)}this.widgets=e}_addWidget(e){const{viewId:t=null,placement:n=Wd}=e;e.widgetManager=this,e.deck=this.deck,e.rootElement=e._onAdd({deck:this.deck,viewId:t}),e.rootElement&&this._getContainer(t,n).append(e.rootElement),e.updateHTML()}_removeWidget(e){var t;null==(t=e.onRemove)||t.call(e),e.rootElement&&e.rootElement.remove(),e.rootElement=void 0,e.deck=void 0,e.widgetManager=void 0}_getContainer(e,t){var n;const r=e||Hd;let s=this.containers[r];s||(s=document.createElement("div"),s.style.pointerEvents="none",s.style.position="absolute",s.style.overflow="hidden",null==(n=this.parentElement)||n.append(s),this.containers[r]=s);let i=s.querySelector(`.${t}`);return i||(i=globalThis.document.createElement("div"),i.className=t,i.style.position="absolute",i.style.zIndex="2",Object.assign(i.style,zd[t]),s.append(i)),i}_updateContainers(){const e=this.deck.width,t=this.deck.height;for(const n in this.containers){const r=this.lastViewports[n]||null,s=n===Hd||r,i=this.containers[n];s?(i.style.display="block",i.style.left=`${r?r.x:0}px`,i.style.top=`${r?r.y:0}px`,i.style.width=`${r?r.width:e}px`,i.style.height=`${r?r.height:t}px`):i.style.display="none"}}}function Xd(e,t){t&&Object.entries(t).map(([t,n])=>{t.startsWith("--")?e.style.setProperty(t,n):e.style[t]=n})}class qd{constructor(e){this.viewId=null,this.props={...this.constructor.defaultProps,...e},this.id=this.props.id}setProps(e){const t=this.props,n=this.rootElement;var r,s;n&&t.className!==e.className&&(t.className&&n.classList.remove(t.className),e.className&&n.classList.add(e.className)),n&&!rd(t.style,e.style,1)&&(r=n,(s=t.style)&&Object.keys(s).map(e=>{e.startsWith("--")?r.style.removeProperty(e):r.style[e]=""}),Xd(n,e.style)),Object.assign(this.props,e),this.updateHTML()}updateHTML(){this.rootElement&&this.onRenderHTML(this.rootElement)}onCreateRootElement(){const e=["deck-widget",this.className,this.props.className],t=document.createElement("div");return e.filter(e=>"string"==typeof e&&e.length>0).forEach(e=>t.classList.add(e)),Xd(t,this.props.style),t}_onAdd(e){return this.onAdd(e)??this.onCreateRootElement()}onAdd(e){}onRemove(){}onViewportChange(e){}onRedraw(e){}onHover(e,t){}onClick(e,t){}onDrag(e,t){}onDragStart(e,t){}onDragEnd(e,t){}}qd.defaultProps={id:"widget",style:{},className:""};const Yd={zIndex:"1",position:"absolute",pointerEvents:"none",color:"#a0a7b4",backgroundColor:"#29323c",padding:"10px",top:"0",left:"0",display:"none"};class Kd extends qd{constructor(e={}){super(e),this.id="default-tooltip",this.placement="fill",this.className="deck-tooltip",this.isVisible=!1,this.setProps(e)}onCreateRootElement(){const e=document.createElement("div");return e.className=this.className,Object.assign(e.style,Yd),e}onRenderHTML(e){}onViewportChange(e){var t;this.isVisible&&e.id===(null==(t=this.lastViewport)?void 0:t.id)&&!e.equals(this.lastViewport)&&this.setTooltip(null),this.lastViewport=e}onHover(e){const{deck:t}=this,n=t&&t.props.getTooltip;if(!n)return;const r=n(e);this.setTooltip(r,e.x,e.y)}setTooltip(e,t,n){const r=this.rootElement;if(r){if("string"==typeof e)r.innerText=e;else{if(!e)return this.isVisible=!1,void(r.style.display="none");e.text&&(r.innerText=e.text),e.html&&(r.innerHTML=e.html),e.className&&(r.className=e.className)}this.isVisible=!0,r.style.display="block",r.style.transform=`translate(${t}px, ${n}px)`,e&&"object"==typeof e&&"style"in e&&Object.assign(r.style,e.style)}}}var Zd,Qd;Kd.defaultProps={...qd.defaultProps},(Qd=Zd||(Zd={}))[Qd.DEPTH_BUFFER_BIT=256]="DEPTH_BUFFER_BIT",Qd[Qd.STENCIL_BUFFER_BIT=1024]="STENCIL_BUFFER_BIT",Qd[Qd.COLOR_BUFFER_BIT=16384]="COLOR_BUFFER_BIT",Qd[Qd.POINTS=0]="POINTS",Qd[Qd.LINES=1]="LINES",Qd[Qd.LINE_LOOP=2]="LINE_LOOP",Qd[Qd.LINE_STRIP=3]="LINE_STRIP",Qd[Qd.TRIANGLES=4]="TRIANGLES",Qd[Qd.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",Qd[Qd.TRIANGLE_FAN=6]="TRIANGLE_FAN",Qd[Qd.ZERO=0]="ZERO",Qd[Qd.ONE=1]="ONE",Qd[Qd.SRC_COLOR=768]="SRC_COLOR",Qd[Qd.ONE_MINUS_SRC_COLOR=769]="ONE_MINUS_SRC_COLOR",Qd[Qd.SRC_ALPHA=770]="SRC_ALPHA",Qd[Qd.ONE_MINUS_SRC_ALPHA=771]="ONE_MINUS_SRC_ALPHA",Qd[Qd.DST_ALPHA=772]="DST_ALPHA",Qd[Qd.ONE_MINUS_DST_ALPHA=773]="ONE_MINUS_DST_ALPHA",Qd[Qd.DST_COLOR=774]="DST_COLOR",Qd[Qd.ONE_MINUS_DST_COLOR=775]="ONE_MINUS_DST_COLOR",Qd[Qd.SRC_ALPHA_SATURATE=776]="SRC_ALPHA_SATURATE",Qd[Qd.CONSTANT_COLOR=32769]="CONSTANT_COLOR",Qd[Qd.ONE_MINUS_CONSTANT_COLOR=32770]="ONE_MINUS_CONSTANT_COLOR",Qd[Qd.CONSTANT_ALPHA=32771]="CONSTANT_ALPHA",Qd[Qd.ONE_MINUS_CONSTANT_ALPHA=32772]="ONE_MINUS_CONSTANT_ALPHA",Qd[Qd.FUNC_ADD=32774]="FUNC_ADD",Qd[Qd.FUNC_SUBTRACT=32778]="FUNC_SUBTRACT",Qd[Qd.FUNC_REVERSE_SUBTRACT=32779]="FUNC_REVERSE_SUBTRACT",Qd[Qd.BLEND_EQUATION=32777]="BLEND_EQUATION",Qd[Qd.BLEND_EQUATION_RGB=32777]="BLEND_EQUATION_RGB",Qd[Qd.BLEND_EQUATION_ALPHA=34877]="BLEND_EQUATION_ALPHA",Qd[Qd.BLEND_DST_RGB=32968]="BLEND_DST_RGB",Qd[Qd.BLEND_SRC_RGB=32969]="BLEND_SRC_RGB",Qd[Qd.BLEND_DST_ALPHA=32970]="BLEND_DST_ALPHA",Qd[Qd.BLEND_SRC_ALPHA=32971]="BLEND_SRC_ALPHA",Qd[Qd.BLEND_COLOR=32773]="BLEND_COLOR",Qd[Qd.ARRAY_BUFFER_BINDING=34964]="ARRAY_BUFFER_BINDING",Qd[Qd.ELEMENT_ARRAY_BUFFER_BINDING=34965]="ELEMENT_ARRAY_BUFFER_BINDING",Qd[Qd.LINE_WIDTH=2849]="LINE_WIDTH",Qd[Qd.ALIASED_POINT_SIZE_RANGE=33901]="ALIASED_POINT_SIZE_RANGE",Qd[Qd.ALIASED_LINE_WIDTH_RANGE=33902]="ALIASED_LINE_WIDTH_RANGE",Qd[Qd.CULL_FACE_MODE=2885]="CULL_FACE_MODE",Qd[Qd.FRONT_FACE=2886]="FRONT_FACE",Qd[Qd.DEPTH_RANGE=2928]="DEPTH_RANGE",Qd[Qd.DEPTH_WRITEMASK=2930]="DEPTH_WRITEMASK",Qd[Qd.DEPTH_CLEAR_VALUE=2931]="DEPTH_CLEAR_VALUE",Qd[Qd.DEPTH_FUNC=2932]="DEPTH_FUNC",Qd[Qd.STENCIL_CLEAR_VALUE=2961]="STENCIL_CLEAR_VALUE",Qd[Qd.STENCIL_FUNC=2962]="STENCIL_FUNC",Qd[Qd.STENCIL_FAIL=2964]="STENCIL_FAIL",Qd[Qd.STENCIL_PASS_DEPTH_FAIL=2965]="STENCIL_PASS_DEPTH_FAIL",Qd[Qd.STENCIL_PASS_DEPTH_PASS=2966]="STENCIL_PASS_DEPTH_PASS",Qd[Qd.STENCIL_REF=2967]="STENCIL_REF",Qd[Qd.STENCIL_VALUE_MASK=2963]="STENCIL_VALUE_MASK",Qd[Qd.STENCIL_WRITEMASK=2968]="STENCIL_WRITEMASK",Qd[Qd.STENCIL_BACK_FUNC=34816]="STENCIL_BACK_FUNC",Qd[Qd.STENCIL_BACK_FAIL=34817]="STENCIL_BACK_FAIL",Qd[Qd.STENCIL_BACK_PASS_DEPTH_FAIL=34818]="STENCIL_BACK_PASS_DEPTH_FAIL",Qd[Qd.STENCIL_BACK_PASS_DEPTH_PASS=34819]="STENCIL_BACK_PASS_DEPTH_PASS",Qd[Qd.STENCIL_BACK_REF=36003]="STENCIL_BACK_REF",Qd[Qd.STENCIL_BACK_VALUE_MASK=36004]="STENCIL_BACK_VALUE_MASK",Qd[Qd.STENCIL_BACK_WRITEMASK=36005]="STENCIL_BACK_WRITEMASK",Qd[Qd.VIEWPORT=2978]="VIEWPORT",Qd[Qd.SCISSOR_BOX=3088]="SCISSOR_BOX",Qd[Qd.COLOR_CLEAR_VALUE=3106]="COLOR_CLEAR_VALUE",Qd[Qd.COLOR_WRITEMASK=3107]="COLOR_WRITEMASK",Qd[Qd.UNPACK_ALIGNMENT=3317]="UNPACK_ALIGNMENT",Qd[Qd.PACK_ALIGNMENT=3333]="PACK_ALIGNMENT",Qd[Qd.MAX_TEXTURE_SIZE=3379]="MAX_TEXTURE_SIZE",Qd[Qd.MAX_VIEWPORT_DIMS=3386]="MAX_VIEWPORT_DIMS",Qd[Qd.SUBPIXEL_BITS=3408]="SUBPIXEL_BITS",Qd[Qd.RED_BITS=3410]="RED_BITS",Qd[Qd.GREEN_BITS=3411]="GREEN_BITS",Qd[Qd.BLUE_BITS=3412]="BLUE_BITS",Qd[Qd.ALPHA_BITS=3413]="ALPHA_BITS",Qd[Qd.DEPTH_BITS=3414]="DEPTH_BITS",Qd[Qd.STENCIL_BITS=3415]="STENCIL_BITS",Qd[Qd.POLYGON_OFFSET_UNITS=10752]="POLYGON_OFFSET_UNITS",Qd[Qd.POLYGON_OFFSET_FACTOR=32824]="POLYGON_OFFSET_FACTOR",Qd[Qd.TEXTURE_BINDING_2D=32873]="TEXTURE_BINDING_2D",Qd[Qd.SAMPLE_BUFFERS=32936]="SAMPLE_BUFFERS",Qd[Qd.SAMPLES=32937]="SAMPLES",Qd[Qd.SAMPLE_COVERAGE_VALUE=32938]="SAMPLE_COVERAGE_VALUE",Qd[Qd.SAMPLE_COVERAGE_INVERT=32939]="SAMPLE_COVERAGE_INVERT",Qd[Qd.COMPRESSED_TEXTURE_FORMATS=34467]="COMPRESSED_TEXTURE_FORMATS",Qd[Qd.VENDOR=7936]="VENDOR",Qd[Qd.RENDERER=7937]="RENDERER",Qd[Qd.VERSION=7938]="VERSION",Qd[Qd.IMPLEMENTATION_COLOR_READ_TYPE=35738]="IMPLEMENTATION_COLOR_READ_TYPE",Qd[Qd.IMPLEMENTATION_COLOR_READ_FORMAT=35739]="IMPLEMENTATION_COLOR_READ_FORMAT",Qd[Qd.BROWSER_DEFAULT_WEBGL=37444]="BROWSER_DEFAULT_WEBGL",Qd[Qd.STATIC_DRAW=35044]="STATIC_DRAW",Qd[Qd.STREAM_DRAW=35040]="STREAM_DRAW",Qd[Qd.DYNAMIC_DRAW=35048]="DYNAMIC_DRAW",Qd[Qd.ARRAY_BUFFER=34962]="ARRAY_BUFFER",Qd[Qd.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",Qd[Qd.BUFFER_SIZE=34660]="BUFFER_SIZE",Qd[Qd.BUFFER_USAGE=34661]="BUFFER_USAGE",Qd[Qd.CURRENT_VERTEX_ATTRIB=34342]="CURRENT_VERTEX_ATTRIB",Qd[Qd.VERTEX_ATTRIB_ARRAY_ENABLED=34338]="VERTEX_ATTRIB_ARRAY_ENABLED",Qd[Qd.VERTEX_ATTRIB_ARRAY_SIZE=34339]="VERTEX_ATTRIB_ARRAY_SIZE",Qd[Qd.VERTEX_ATTRIB_ARRAY_STRIDE=34340]="VERTEX_ATTRIB_ARRAY_STRIDE",Qd[Qd.VERTEX_ATTRIB_ARRAY_TYPE=34341]="VERTEX_ATTRIB_ARRAY_TYPE",Qd[Qd.VERTEX_ATTRIB_ARRAY_NORMALIZED=34922]="VERTEX_ATTRIB_ARRAY_NORMALIZED",Qd[Qd.VERTEX_ATTRIB_ARRAY_POINTER=34373]="VERTEX_ATTRIB_ARRAY_POINTER",Qd[Qd.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING=34975]="VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",Qd[Qd.CULL_FACE=2884]="CULL_FACE",Qd[Qd.FRONT=1028]="FRONT",Qd[Qd.BACK=1029]="BACK",Qd[Qd.FRONT_AND_BACK=1032]="FRONT_AND_BACK",Qd[Qd.BLEND=3042]="BLEND",Qd[Qd.DEPTH_TEST=2929]="DEPTH_TEST",Qd[Qd.DITHER=3024]="DITHER",Qd[Qd.POLYGON_OFFSET_FILL=32823]="POLYGON_OFFSET_FILL",Qd[Qd.SAMPLE_ALPHA_TO_COVERAGE=32926]="SAMPLE_ALPHA_TO_COVERAGE",Qd[Qd.SAMPLE_COVERAGE=32928]="SAMPLE_COVERAGE",Qd[Qd.SCISSOR_TEST=3089]="SCISSOR_TEST",Qd[Qd.STENCIL_TEST=2960]="STENCIL_TEST",Qd[Qd.NO_ERROR=0]="NO_ERROR",Qd[Qd.INVALID_ENUM=1280]="INVALID_ENUM",Qd[Qd.INVALID_VALUE=1281]="INVALID_VALUE",Qd[Qd.INVALID_OPERATION=1282]="INVALID_OPERATION",Qd[Qd.OUT_OF_MEMORY=1285]="OUT_OF_MEMORY",Qd[Qd.CONTEXT_LOST_WEBGL=37442]="CONTEXT_LOST_WEBGL",Qd[Qd.CW=2304]="CW",Qd[Qd.CCW=2305]="CCW",Qd[Qd.DONT_CARE=4352]="DONT_CARE",Qd[Qd.FASTEST=4353]="FASTEST",Qd[Qd.NICEST=4354]="NICEST",Qd[Qd.GENERATE_MIPMAP_HINT=33170]="GENERATE_MIPMAP_HINT",Qd[Qd.BYTE=5120]="BYTE",Qd[Qd.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",Qd[Qd.SHORT=5122]="SHORT",Qd[Qd.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",Qd[Qd.INT=5124]="INT",Qd[Qd.UNSIGNED_INT=5125]="UNSIGNED_INT",Qd[Qd.FLOAT=5126]="FLOAT",Qd[Qd.DOUBLE=5130]="DOUBLE",Qd[Qd.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",Qd[Qd.ALPHA=6406]="ALPHA",Qd[Qd.RGB=6407]="RGB",Qd[Qd.RGBA=6408]="RGBA",Qd[Qd.LUMINANCE=6409]="LUMINANCE",Qd[Qd.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",Qd[Qd.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",Qd[Qd.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",Qd[Qd.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",Qd[Qd.FRAGMENT_SHADER=35632]="FRAGMENT_SHADER",Qd[Qd.VERTEX_SHADER=35633]="VERTEX_SHADER",Qd[Qd.COMPILE_STATUS=35713]="COMPILE_STATUS",Qd[Qd.DELETE_STATUS=35712]="DELETE_STATUS",Qd[Qd.LINK_STATUS=35714]="LINK_STATUS",Qd[Qd.VALIDATE_STATUS=35715]="VALIDATE_STATUS",Qd[Qd.ATTACHED_SHADERS=35717]="ATTACHED_SHADERS",Qd[Qd.ACTIVE_ATTRIBUTES=35721]="ACTIVE_ATTRIBUTES",Qd[Qd.ACTIVE_UNIFORMS=35718]="ACTIVE_UNIFORMS",Qd[Qd.MAX_VERTEX_ATTRIBS=34921]="MAX_VERTEX_ATTRIBS",Qd[Qd.MAX_VERTEX_UNIFORM_VECTORS=36347]="MAX_VERTEX_UNIFORM_VECTORS",Qd[Qd.MAX_VARYING_VECTORS=36348]="MAX_VARYING_VECTORS",Qd[Qd.MAX_COMBINED_TEXTURE_IMAGE_UNITS=35661]="MAX_COMBINED_TEXTURE_IMAGE_UNITS",Qd[Qd.MAX_VERTEX_TEXTURE_IMAGE_UNITS=35660]="MAX_VERTEX_TEXTURE_IMAGE_UNITS",Qd[Qd.MAX_TEXTURE_IMAGE_UNITS=34930]="MAX_TEXTURE_IMAGE_UNITS",Qd[Qd.MAX_FRAGMENT_UNIFORM_VECTORS=36349]="MAX_FRAGMENT_UNIFORM_VECTORS",Qd[Qd.SHADER_TYPE=35663]="SHADER_TYPE",Qd[Qd.SHADING_LANGUAGE_VERSION=35724]="SHADING_LANGUAGE_VERSION",Qd[Qd.CURRENT_PROGRAM=35725]="CURRENT_PROGRAM",Qd[Qd.NEVER=512]="NEVER",Qd[Qd.LESS=513]="LESS",Qd[Qd.EQUAL=514]="EQUAL",Qd[Qd.LEQUAL=515]="LEQUAL",Qd[Qd.GREATER=516]="GREATER",Qd[Qd.NOTEQUAL=517]="NOTEQUAL",Qd[Qd.GEQUAL=518]="GEQUAL",Qd[Qd.ALWAYS=519]="ALWAYS",Qd[Qd.KEEP=7680]="KEEP",Qd[Qd.REPLACE=7681]="REPLACE",Qd[Qd.INCR=7682]="INCR",Qd[Qd.DECR=7683]="DECR",Qd[Qd.INVERT=5386]="INVERT",Qd[Qd.INCR_WRAP=34055]="INCR_WRAP",Qd[Qd.DECR_WRAP=34056]="DECR_WRAP",Qd[Qd.NEAREST=9728]="NEAREST",Qd[Qd.LINEAR=9729]="LINEAR",Qd[Qd.NEAREST_MIPMAP_NEAREST=9984]="NEAREST_MIPMAP_NEAREST",Qd[Qd.LINEAR_MIPMAP_NEAREST=9985]="LINEAR_MIPMAP_NEAREST",Qd[Qd.NEAREST_MIPMAP_LINEAR=9986]="NEAREST_MIPMAP_LINEAR",Qd[Qd.LINEAR_MIPMAP_LINEAR=9987]="LINEAR_MIPMAP_LINEAR",Qd[Qd.TEXTURE_MAG_FILTER=10240]="TEXTURE_MAG_FILTER",Qd[Qd.TEXTURE_MIN_FILTER=10241]="TEXTURE_MIN_FILTER",Qd[Qd.TEXTURE_WRAP_S=10242]="TEXTURE_WRAP_S",Qd[Qd.TEXTURE_WRAP_T=10243]="TEXTURE_WRAP_T",Qd[Qd.TEXTURE_2D=3553]="TEXTURE_2D",Qd[Qd.TEXTURE=5890]="TEXTURE",Qd[Qd.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",Qd[Qd.TEXTURE_BINDING_CUBE_MAP=34068]="TEXTURE_BINDING_CUBE_MAP",Qd[Qd.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",Qd[Qd.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",Qd[Qd.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",Qd[Qd.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",Qd[Qd.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",Qd[Qd.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z",Qd[Qd.MAX_CUBE_MAP_TEXTURE_SIZE=34076]="MAX_CUBE_MAP_TEXTURE_SIZE",Qd[Qd.TEXTURE0=33984]="TEXTURE0",Qd[Qd.ACTIVE_TEXTURE=34016]="ACTIVE_TEXTURE",Qd[Qd.REPEAT=10497]="REPEAT",Qd[Qd.CLAMP_TO_EDGE=33071]="CLAMP_TO_EDGE",Qd[Qd.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT",Qd[Qd.TEXTURE_WIDTH=4096]="TEXTURE_WIDTH",Qd[Qd.TEXTURE_HEIGHT=4097]="TEXTURE_HEIGHT",Qd[Qd.FLOAT_VEC2=35664]="FLOAT_VEC2",Qd[Qd.FLOAT_VEC3=35665]="FLOAT_VEC3",Qd[Qd.FLOAT_VEC4=35666]="FLOAT_VEC4",Qd[Qd.INT_VEC2=35667]="INT_VEC2",Qd[Qd.INT_VEC3=35668]="INT_VEC3",Qd[Qd.INT_VEC4=35669]="INT_VEC4",Qd[Qd.BOOL=35670]="BOOL",Qd[Qd.BOOL_VEC2=35671]="BOOL_VEC2",Qd[Qd.BOOL_VEC3=35672]="BOOL_VEC3",Qd[Qd.BOOL_VEC4=35673]="BOOL_VEC4",Qd[Qd.FLOAT_MAT2=35674]="FLOAT_MAT2",Qd[Qd.FLOAT_MAT3=35675]="FLOAT_MAT3",Qd[Qd.FLOAT_MAT4=35676]="FLOAT_MAT4",Qd[Qd.SAMPLER_2D=35678]="SAMPLER_2D",Qd[Qd.SAMPLER_CUBE=35680]="SAMPLER_CUBE",Qd[Qd.LOW_FLOAT=36336]="LOW_FLOAT",Qd[Qd.MEDIUM_FLOAT=36337]="MEDIUM_FLOAT",Qd[Qd.HIGH_FLOAT=36338]="HIGH_FLOAT",Qd[Qd.LOW_INT=36339]="LOW_INT",Qd[Qd.MEDIUM_INT=36340]="MEDIUM_INT",Qd[Qd.HIGH_INT=36341]="HIGH_INT",Qd[Qd.FRAMEBUFFER=36160]="FRAMEBUFFER",Qd[Qd.RENDERBUFFER=36161]="RENDERBUFFER",Qd[Qd.RGBA4=32854]="RGBA4",Qd[Qd.RGB5_A1=32855]="RGB5_A1",Qd[Qd.RGB565=36194]="RGB565",Qd[Qd.DEPTH_COMPONENT16=33189]="DEPTH_COMPONENT16",Qd[Qd.STENCIL_INDEX=6401]="STENCIL_INDEX",Qd[Qd.STENCIL_INDEX8=36168]="STENCIL_INDEX8",Qd[Qd.DEPTH_STENCIL=34041]="DEPTH_STENCIL",Qd[Qd.RENDERBUFFER_WIDTH=36162]="RENDERBUFFER_WIDTH",Qd[Qd.RENDERBUFFER_HEIGHT=36163]="RENDERBUFFER_HEIGHT",Qd[Qd.RENDERBUFFER_INTERNAL_FORMAT=36164]="RENDERBUFFER_INTERNAL_FORMAT",Qd[Qd.RENDERBUFFER_RED_SIZE=36176]="RENDERBUFFER_RED_SIZE",Qd[Qd.RENDERBUFFER_GREEN_SIZE=36177]="RENDERBUFFER_GREEN_SIZE",Qd[Qd.RENDERBUFFER_BLUE_SIZE=36178]="RENDERBUFFER_BLUE_SIZE",Qd[Qd.RENDERBUFFER_ALPHA_SIZE=36179]="RENDERBUFFER_ALPHA_SIZE",Qd[Qd.RENDERBUFFER_DEPTH_SIZE=36180]="RENDERBUFFER_DEPTH_SIZE",Qd[Qd.RENDERBUFFER_STENCIL_SIZE=36181]="RENDERBUFFER_STENCIL_SIZE",Qd[Qd.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE=36048]="FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",Qd[Qd.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME=36049]="FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",Qd[Qd.FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL=36050]="FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",Qd[Qd.FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE=36051]="FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",Qd[Qd.COLOR_ATTACHMENT0=36064]="COLOR_ATTACHMENT0",Qd[Qd.DEPTH_ATTACHMENT=36096]="DEPTH_ATTACHMENT",Qd[Qd.STENCIL_ATTACHMENT=36128]="STENCIL_ATTACHMENT",Qd[Qd.DEPTH_STENCIL_ATTACHMENT=33306]="DEPTH_STENCIL_ATTACHMENT",Qd[Qd.NONE=0]="NONE",Qd[Qd.FRAMEBUFFER_COMPLETE=36053]="FRAMEBUFFER_COMPLETE",Qd[Qd.FRAMEBUFFER_INCOMPLETE_ATTACHMENT=36054]="FRAMEBUFFER_INCOMPLETE_ATTACHMENT",Qd[Qd.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT=36055]="FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",Qd[Qd.FRAMEBUFFER_INCOMPLETE_DIMENSIONS=36057]="FRAMEBUFFER_INCOMPLETE_DIMENSIONS",Qd[Qd.FRAMEBUFFER_UNSUPPORTED=36061]="FRAMEBUFFER_UNSUPPORTED",Qd[Qd.FRAMEBUFFER_BINDING=36006]="FRAMEBUFFER_BINDING",Qd[Qd.RENDERBUFFER_BINDING=36007]="RENDERBUFFER_BINDING",Qd[Qd.READ_FRAMEBUFFER=36008]="READ_FRAMEBUFFER",Qd[Qd.DRAW_FRAMEBUFFER=36009]="DRAW_FRAMEBUFFER",Qd[Qd.MAX_RENDERBUFFER_SIZE=34024]="MAX_RENDERBUFFER_SIZE",Qd[Qd.INVALID_FRAMEBUFFER_OPERATION=1286]="INVALID_FRAMEBUFFER_OPERATION",Qd[Qd.UNPACK_FLIP_Y_WEBGL=37440]="UNPACK_FLIP_Y_WEBGL",Qd[Qd.UNPACK_PREMULTIPLY_ALPHA_WEBGL=37441]="UNPACK_PREMULTIPLY_ALPHA_WEBGL",Qd[Qd.UNPACK_COLORSPACE_CONVERSION_WEBGL=37443]="UNPACK_COLORSPACE_CONVERSION_WEBGL",Qd[Qd.READ_BUFFER=3074]="READ_BUFFER",Qd[Qd.UNPACK_ROW_LENGTH=3314]="UNPACK_ROW_LENGTH",Qd[Qd.UNPACK_SKIP_ROWS=3315]="UNPACK_SKIP_ROWS",Qd[Qd.UNPACK_SKIP_PIXELS=3316]="UNPACK_SKIP_PIXELS",Qd[Qd.PACK_ROW_LENGTH=3330]="PACK_ROW_LENGTH",Qd[Qd.PACK_SKIP_ROWS=3331]="PACK_SKIP_ROWS",Qd[Qd.PACK_SKIP_PIXELS=3332]="PACK_SKIP_PIXELS",Qd[Qd.TEXTURE_BINDING_3D=32874]="TEXTURE_BINDING_3D",Qd[Qd.UNPACK_SKIP_IMAGES=32877]="UNPACK_SKIP_IMAGES",Qd[Qd.UNPACK_IMAGE_HEIGHT=32878]="UNPACK_IMAGE_HEIGHT",Qd[Qd.MAX_3D_TEXTURE_SIZE=32883]="MAX_3D_TEXTURE_SIZE",Qd[Qd.MAX_ELEMENTS_VERTICES=33e3]="MAX_ELEMENTS_VERTICES",Qd[Qd.MAX_ELEMENTS_INDICES=33001]="MAX_ELEMENTS_INDICES",Qd[Qd.MAX_TEXTURE_LOD_BIAS=34045]="MAX_TEXTURE_LOD_BIAS",Qd[Qd.MAX_FRAGMENT_UNIFORM_COMPONENTS=35657]="MAX_FRAGMENT_UNIFORM_COMPONENTS",Qd[Qd.MAX_VERTEX_UNIFORM_COMPONENTS=35658]="MAX_VERTEX_UNIFORM_COMPONENTS",Qd[Qd.MAX_ARRAY_TEXTURE_LAYERS=35071]="MAX_ARRAY_TEXTURE_LAYERS",Qd[Qd.MIN_PROGRAM_TEXEL_OFFSET=35076]="MIN_PROGRAM_TEXEL_OFFSET",Qd[Qd.MAX_PROGRAM_TEXEL_OFFSET=35077]="MAX_PROGRAM_TEXEL_OFFSET",Qd[Qd.MAX_VARYING_COMPONENTS=35659]="MAX_VARYING_COMPONENTS",Qd[Qd.FRAGMENT_SHADER_DERIVATIVE_HINT=35723]="FRAGMENT_SHADER_DERIVATIVE_HINT",Qd[Qd.RASTERIZER_DISCARD=35977]="RASTERIZER_DISCARD",Qd[Qd.VERTEX_ARRAY_BINDING=34229]="VERTEX_ARRAY_BINDING",Qd[Qd.MAX_VERTEX_OUTPUT_COMPONENTS=37154]="MAX_VERTEX_OUTPUT_COMPONENTS",Qd[Qd.MAX_FRAGMENT_INPUT_COMPONENTS=37157]="MAX_FRAGMENT_INPUT_COMPONENTS",Qd[Qd.MAX_SERVER_WAIT_TIMEOUT=37137]="MAX_SERVER_WAIT_TIMEOUT",Qd[Qd.MAX_ELEMENT_INDEX=36203]="MAX_ELEMENT_INDEX",Qd[Qd.RED=6403]="RED",Qd[Qd.RGB8=32849]="RGB8",Qd[Qd.RGBA8=32856]="RGBA8",Qd[Qd.RGB10_A2=32857]="RGB10_A2",Qd[Qd.TEXTURE_3D=32879]="TEXTURE_3D",Qd[Qd.TEXTURE_WRAP_R=32882]="TEXTURE_WRAP_R",Qd[Qd.TEXTURE_MIN_LOD=33082]="TEXTURE_MIN_LOD",Qd[Qd.TEXTURE_MAX_LOD=33083]="TEXTURE_MAX_LOD",Qd[Qd.TEXTURE_BASE_LEVEL=33084]="TEXTURE_BASE_LEVEL",Qd[Qd.TEXTURE_MAX_LEVEL=33085]="TEXTURE_MAX_LEVEL",Qd[Qd.TEXTURE_COMPARE_MODE=34892]="TEXTURE_COMPARE_MODE",Qd[Qd.TEXTURE_COMPARE_FUNC=34893]="TEXTURE_COMPARE_FUNC",Qd[Qd.SRGB=35904]="SRGB",Qd[Qd.SRGB8=35905]="SRGB8",Qd[Qd.SRGB8_ALPHA8=35907]="SRGB8_ALPHA8",Qd[Qd.COMPARE_REF_TO_TEXTURE=34894]="COMPARE_REF_TO_TEXTURE",Qd[Qd.RGBA32F=34836]="RGBA32F",Qd[Qd.RGB32F=34837]="RGB32F",Qd[Qd.RGBA16F=34842]="RGBA16F",Qd[Qd.RGB16F=34843]="RGB16F",Qd[Qd.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",Qd[Qd.TEXTURE_BINDING_2D_ARRAY=35869]="TEXTURE_BINDING_2D_ARRAY",Qd[Qd.R11F_G11F_B10F=35898]="R11F_G11F_B10F",Qd[Qd.RGB9_E5=35901]="RGB9_E5",Qd[Qd.RGBA32UI=36208]="RGBA32UI",Qd[Qd.RGB32UI=36209]="RGB32UI",Qd[Qd.RGBA16UI=36214]="RGBA16UI",Qd[Qd.RGB16UI=36215]="RGB16UI",Qd[Qd.RGBA8UI=36220]="RGBA8UI",Qd[Qd.RGB8UI=36221]="RGB8UI",Qd[Qd.RGBA32I=36226]="RGBA32I",Qd[Qd.RGB32I=36227]="RGB32I",Qd[Qd.RGBA16I=36232]="RGBA16I",Qd[Qd.RGB16I=36233]="RGB16I",Qd[Qd.RGBA8I=36238]="RGBA8I",Qd[Qd.RGB8I=36239]="RGB8I",Qd[Qd.RED_INTEGER=36244]="RED_INTEGER",Qd[Qd.RGB_INTEGER=36248]="RGB_INTEGER",Qd[Qd.RGBA_INTEGER=36249]="RGBA_INTEGER",Qd[Qd.R8=33321]="R8",Qd[Qd.RG8=33323]="RG8",Qd[Qd.R16F=33325]="R16F",Qd[Qd.R32F=33326]="R32F",Qd[Qd.RG16F=33327]="RG16F",Qd[Qd.RG32F=33328]="RG32F",Qd[Qd.R8I=33329]="R8I",Qd[Qd.R8UI=33330]="R8UI",Qd[Qd.R16I=33331]="R16I",Qd[Qd.R16UI=33332]="R16UI",Qd[Qd.R32I=33333]="R32I",Qd[Qd.R32UI=33334]="R32UI",Qd[Qd.RG8I=33335]="RG8I",Qd[Qd.RG8UI=33336]="RG8UI",Qd[Qd.RG16I=33337]="RG16I",Qd[Qd.RG16UI=33338]="RG16UI",Qd[Qd.RG32I=33339]="RG32I",Qd[Qd.RG32UI=33340]="RG32UI",Qd[Qd.R8_SNORM=36756]="R8_SNORM",Qd[Qd.RG8_SNORM=36757]="RG8_SNORM",Qd[Qd.RGB8_SNORM=36758]="RGB8_SNORM",Qd[Qd.RGBA8_SNORM=36759]="RGBA8_SNORM",Qd[Qd.RGB10_A2UI=36975]="RGB10_A2UI",Qd[Qd.TEXTURE_IMMUTABLE_FORMAT=37167]="TEXTURE_IMMUTABLE_FORMAT",Qd[Qd.TEXTURE_IMMUTABLE_LEVELS=33503]="TEXTURE_IMMUTABLE_LEVELS",Qd[Qd.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",Qd[Qd.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",Qd[Qd.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",Qd[Qd.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",Qd[Qd.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",Qd[Qd.HALF_FLOAT=5131]="HALF_FLOAT",Qd[Qd.RG=33319]="RG",Qd[Qd.RG_INTEGER=33320]="RG_INTEGER",Qd[Qd.INT_2_10_10_10_REV=36255]="INT_2_10_10_10_REV",Qd[Qd.CURRENT_QUERY=34917]="CURRENT_QUERY",Qd[Qd.QUERY_RESULT=34918]="QUERY_RESULT",Qd[Qd.QUERY_RESULT_AVAILABLE=34919]="QUERY_RESULT_AVAILABLE",Qd[Qd.ANY_SAMPLES_PASSED=35887]="ANY_SAMPLES_PASSED",Qd[Qd.ANY_SAMPLES_PASSED_CONSERVATIVE=36202]="ANY_SAMPLES_PASSED_CONSERVATIVE",Qd[Qd.MAX_DRAW_BUFFERS=34852]="MAX_DRAW_BUFFERS",Qd[Qd.DRAW_BUFFER0=34853]="DRAW_BUFFER0",Qd[Qd.DRAW_BUFFER1=34854]="DRAW_BUFFER1",Qd[Qd.DRAW_BUFFER2=34855]="DRAW_BUFFER2",Qd[Qd.DRAW_BUFFER3=34856]="DRAW_BUFFER3",Qd[Qd.DRAW_BUFFER4=34857]="DRAW_BUFFER4",Qd[Qd.DRAW_BUFFER5=34858]="DRAW_BUFFER5",Qd[Qd.DRAW_BUFFER6=34859]="DRAW_BUFFER6",Qd[Qd.DRAW_BUFFER7=34860]="DRAW_BUFFER7",Qd[Qd.DRAW_BUFFER8=34861]="DRAW_BUFFER8",Qd[Qd.DRAW_BUFFER9=34862]="DRAW_BUFFER9",Qd[Qd.DRAW_BUFFER10=34863]="DRAW_BUFFER10",Qd[Qd.DRAW_BUFFER11=34864]="DRAW_BUFFER11",Qd[Qd.DRAW_BUFFER12=34865]="DRAW_BUFFER12",Qd[Qd.DRAW_BUFFER13=34866]="DRAW_BUFFER13",Qd[Qd.DRAW_BUFFER14=34867]="DRAW_BUFFER14",Qd[Qd.DRAW_BUFFER15=34868]="DRAW_BUFFER15",Qd[Qd.MAX_COLOR_ATTACHMENTS=36063]="MAX_COLOR_ATTACHMENTS",Qd[Qd.COLOR_ATTACHMENT1=36065]="COLOR_ATTACHMENT1",Qd[Qd.COLOR_ATTACHMENT2=36066]="COLOR_ATTACHMENT2",Qd[Qd.COLOR_ATTACHMENT3=36067]="COLOR_ATTACHMENT3",Qd[Qd.COLOR_ATTACHMENT4=36068]="COLOR_ATTACHMENT4",Qd[Qd.COLOR_ATTACHMENT5=36069]="COLOR_ATTACHMENT5",Qd[Qd.COLOR_ATTACHMENT6=36070]="COLOR_ATTACHMENT6",Qd[Qd.COLOR_ATTACHMENT7=36071]="COLOR_ATTACHMENT7",Qd[Qd.COLOR_ATTACHMENT8=36072]="COLOR_ATTACHMENT8",Qd[Qd.COLOR_ATTACHMENT9=36073]="COLOR_ATTACHMENT9",Qd[Qd.COLOR_ATTACHMENT10=36074]="COLOR_ATTACHMENT10",Qd[Qd.COLOR_ATTACHMENT11=36075]="COLOR_ATTACHMENT11",Qd[Qd.COLOR_ATTACHMENT12=36076]="COLOR_ATTACHMENT12",Qd[Qd.COLOR_ATTACHMENT13=36077]="COLOR_ATTACHMENT13",Qd[Qd.COLOR_ATTACHMENT14=36078]="COLOR_ATTACHMENT14",Qd[Qd.COLOR_ATTACHMENT15=36079]="COLOR_ATTACHMENT15",Qd[Qd.SAMPLER_3D=35679]="SAMPLER_3D",Qd[Qd.SAMPLER_2D_SHADOW=35682]="SAMPLER_2D_SHADOW",Qd[Qd.SAMPLER_2D_ARRAY=36289]="SAMPLER_2D_ARRAY",Qd[Qd.SAMPLER_2D_ARRAY_SHADOW=36292]="SAMPLER_2D_ARRAY_SHADOW",Qd[Qd.SAMPLER_CUBE_SHADOW=36293]="SAMPLER_CUBE_SHADOW",Qd[Qd.INT_SAMPLER_2D=36298]="INT_SAMPLER_2D",Qd[Qd.INT_SAMPLER_3D=36299]="INT_SAMPLER_3D",Qd[Qd.INT_SAMPLER_CUBE=36300]="INT_SAMPLER_CUBE",Qd[Qd.INT_SAMPLER_2D_ARRAY=36303]="INT_SAMPLER_2D_ARRAY",Qd[Qd.UNSIGNED_INT_SAMPLER_2D=36306]="UNSIGNED_INT_SAMPLER_2D",Qd[Qd.UNSIGNED_INT_SAMPLER_3D=36307]="UNSIGNED_INT_SAMPLER_3D",Qd[Qd.UNSIGNED_INT_SAMPLER_CUBE=36308]="UNSIGNED_INT_SAMPLER_CUBE",Qd[Qd.UNSIGNED_INT_SAMPLER_2D_ARRAY=36311]="UNSIGNED_INT_SAMPLER_2D_ARRAY",Qd[Qd.MAX_SAMPLES=36183]="MAX_SAMPLES",Qd[Qd.SAMPLER_BINDING=35097]="SAMPLER_BINDING",Qd[Qd.PIXEL_PACK_BUFFER=35051]="PIXEL_PACK_BUFFER",Qd[Qd.PIXEL_UNPACK_BUFFER=35052]="PIXEL_UNPACK_BUFFER",Qd[Qd.PIXEL_PACK_BUFFER_BINDING=35053]="PIXEL_PACK_BUFFER_BINDING",Qd[Qd.PIXEL_UNPACK_BUFFER_BINDING=35055]="PIXEL_UNPACK_BUFFER_BINDING",Qd[Qd.COPY_READ_BUFFER=36662]="COPY_READ_BUFFER",Qd[Qd.COPY_WRITE_BUFFER=36663]="COPY_WRITE_BUFFER",Qd[Qd.COPY_READ_BUFFER_BINDING=36662]="COPY_READ_BUFFER_BINDING",Qd[Qd.COPY_WRITE_BUFFER_BINDING=36663]="COPY_WRITE_BUFFER_BINDING",Qd[Qd.FLOAT_MAT2x3=35685]="FLOAT_MAT2x3",Qd[Qd.FLOAT_MAT2x4=35686]="FLOAT_MAT2x4",Qd[Qd.FLOAT_MAT3x2=35687]="FLOAT_MAT3x2",Qd[Qd.FLOAT_MAT3x4=35688]="FLOAT_MAT3x4",Qd[Qd.FLOAT_MAT4x2=35689]="FLOAT_MAT4x2",Qd[Qd.FLOAT_MAT4x3=35690]="FLOAT_MAT4x3",Qd[Qd.UNSIGNED_INT_VEC2=36294]="UNSIGNED_INT_VEC2",Qd[Qd.UNSIGNED_INT_VEC3=36295]="UNSIGNED_INT_VEC3",Qd[Qd.UNSIGNED_INT_VEC4=36296]="UNSIGNED_INT_VEC4",Qd[Qd.UNSIGNED_NORMALIZED=35863]="UNSIGNED_NORMALIZED",Qd[Qd.SIGNED_NORMALIZED=36764]="SIGNED_NORMALIZED",Qd[Qd.VERTEX_ATTRIB_ARRAY_INTEGER=35069]="VERTEX_ATTRIB_ARRAY_INTEGER",Qd[Qd.VERTEX_ATTRIB_ARRAY_DIVISOR=35070]="VERTEX_ATTRIB_ARRAY_DIVISOR",Qd[Qd.TRANSFORM_FEEDBACK_BUFFER_MODE=35967]="TRANSFORM_FEEDBACK_BUFFER_MODE",Qd[Qd.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS=35968]="MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS",Qd[Qd.TRANSFORM_FEEDBACK_VARYINGS=35971]="TRANSFORM_FEEDBACK_VARYINGS",Qd[Qd.TRANSFORM_FEEDBACK_BUFFER_START=35972]="TRANSFORM_FEEDBACK_BUFFER_START",Qd[Qd.TRANSFORM_FEEDBACK_BUFFER_SIZE=35973]="TRANSFORM_FEEDBACK_BUFFER_SIZE",Qd[Qd.TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN=35976]="TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN",Qd[Qd.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS=35978]="MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS",Qd[Qd.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS=35979]="MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS",Qd[Qd.INTERLEAVED_ATTRIBS=35980]="INTERLEAVED_ATTRIBS",Qd[Qd.SEPARATE_ATTRIBS=35981]="SEPARATE_ATTRIBS",Qd[Qd.TRANSFORM_FEEDBACK_BUFFER=35982]="TRANSFORM_FEEDBACK_BUFFER",Qd[Qd.TRANSFORM_FEEDBACK_BUFFER_BINDING=35983]="TRANSFORM_FEEDBACK_BUFFER_BINDING",Qd[Qd.TRANSFORM_FEEDBACK=36386]="TRANSFORM_FEEDBACK",Qd[Qd.TRANSFORM_FEEDBACK_PAUSED=36387]="TRANSFORM_FEEDBACK_PAUSED",Qd[Qd.TRANSFORM_FEEDBACK_ACTIVE=36388]="TRANSFORM_FEEDBACK_ACTIVE",Qd[Qd.TRANSFORM_FEEDBACK_BINDING=36389]="TRANSFORM_FEEDBACK_BINDING",Qd[Qd.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING=33296]="FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING",Qd[Qd.FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE=33297]="FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE",Qd[Qd.FRAMEBUFFER_ATTACHMENT_RED_SIZE=33298]="FRAMEBUFFER_ATTACHMENT_RED_SIZE",Qd[Qd.FRAMEBUFFER_ATTACHMENT_GREEN_SIZE=33299]="FRAMEBUFFER_ATTACHMENT_GREEN_SIZE",Qd[Qd.FRAMEBUFFER_ATTACHMENT_BLUE_SIZE=33300]="FRAMEBUFFER_ATTACHMENT_BLUE_SIZE",Qd[Qd.FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE=33301]="FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE",Qd[Qd.FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE=33302]="FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE",Qd[Qd.FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE=33303]="FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE",Qd[Qd.FRAMEBUFFER_DEFAULT=33304]="FRAMEBUFFER_DEFAULT",Qd[Qd.DEPTH24_STENCIL8=35056]="DEPTH24_STENCIL8",Qd[Qd.DRAW_FRAMEBUFFER_BINDING=36006]="DRAW_FRAMEBUFFER_BINDING",Qd[Qd.READ_FRAMEBUFFER_BINDING=36010]="READ_FRAMEBUFFER_BINDING",Qd[Qd.RENDERBUFFER_SAMPLES=36011]="RENDERBUFFER_SAMPLES",Qd[Qd.FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER=36052]="FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER",Qd[Qd.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE=36182]="FRAMEBUFFER_INCOMPLETE_MULTISAMPLE",Qd[Qd.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER",Qd[Qd.UNIFORM_BUFFER_BINDING=35368]="UNIFORM_BUFFER_BINDING",Qd[Qd.UNIFORM_BUFFER_START=35369]="UNIFORM_BUFFER_START",Qd[Qd.UNIFORM_BUFFER_SIZE=35370]="UNIFORM_BUFFER_SIZE",Qd[Qd.MAX_VERTEX_UNIFORM_BLOCKS=35371]="MAX_VERTEX_UNIFORM_BLOCKS",Qd[Qd.MAX_FRAGMENT_UNIFORM_BLOCKS=35373]="MAX_FRAGMENT_UNIFORM_BLOCKS",Qd[Qd.MAX_COMBINED_UNIFORM_BLOCKS=35374]="MAX_COMBINED_UNIFORM_BLOCKS",Qd[Qd.MAX_UNIFORM_BUFFER_BINDINGS=35375]="MAX_UNIFORM_BUFFER_BINDINGS",Qd[Qd.MAX_UNIFORM_BLOCK_SIZE=35376]="MAX_UNIFORM_BLOCK_SIZE",Qd[Qd.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS=35377]="MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS",Qd[Qd.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS=35379]="MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS",Qd[Qd.UNIFORM_BUFFER_OFFSET_ALIGNMENT=35380]="UNIFORM_BUFFER_OFFSET_ALIGNMENT",Qd[Qd.ACTIVE_UNIFORM_BLOCKS=35382]="ACTIVE_UNIFORM_BLOCKS",Qd[Qd.UNIFORM_TYPE=35383]="UNIFORM_TYPE",Qd[Qd.UNIFORM_SIZE=35384]="UNIFORM_SIZE",Qd[Qd.UNIFORM_BLOCK_INDEX=35386]="UNIFORM_BLOCK_INDEX",Qd[Qd.UNIFORM_OFFSET=35387]="UNIFORM_OFFSET",Qd[Qd.UNIFORM_ARRAY_STRIDE=35388]="UNIFORM_ARRAY_STRIDE",Qd[Qd.UNIFORM_MATRIX_STRIDE=35389]="UNIFORM_MATRIX_STRIDE",Qd[Qd.UNIFORM_IS_ROW_MAJOR=35390]="UNIFORM_IS_ROW_MAJOR",Qd[Qd.UNIFORM_BLOCK_BINDING=35391]="UNIFORM_BLOCK_BINDING",Qd[Qd.UNIFORM_BLOCK_DATA_SIZE=35392]="UNIFORM_BLOCK_DATA_SIZE",Qd[Qd.UNIFORM_BLOCK_ACTIVE_UNIFORMS=35394]="UNIFORM_BLOCK_ACTIVE_UNIFORMS",Qd[Qd.UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES=35395]="UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES",Qd[Qd.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER=35396]="UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER",Qd[Qd.UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER=35398]="UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER",Qd[Qd.OBJECT_TYPE=37138]="OBJECT_TYPE",Qd[Qd.SYNC_CONDITION=37139]="SYNC_CONDITION",Qd[Qd.SYNC_STATUS=37140]="SYNC_STATUS",Qd[Qd.SYNC_FLAGS=37141]="SYNC_FLAGS",Qd[Qd.SYNC_FENCE=37142]="SYNC_FENCE",Qd[Qd.SYNC_GPU_COMMANDS_COMPLETE=37143]="SYNC_GPU_COMMANDS_COMPLETE",Qd[Qd.UNSIGNALED=37144]="UNSIGNALED",Qd[Qd.SIGNALED=37145]="SIGNALED",Qd[Qd.ALREADY_SIGNALED=37146]="ALREADY_SIGNALED",Qd[Qd.TIMEOUT_EXPIRED=37147]="TIMEOUT_EXPIRED",Qd[Qd.CONDITION_SATISFIED=37148]="CONDITION_SATISFIED",Qd[Qd.WAIT_FAILED=37149]="WAIT_FAILED",Qd[Qd.SYNC_FLUSH_COMMANDS_BIT=1]="SYNC_FLUSH_COMMANDS_BIT",Qd[Qd.COLOR=6144]="COLOR",Qd[Qd.DEPTH=6145]="DEPTH",Qd[Qd.STENCIL=6146]="STENCIL",Qd[Qd.MIN=32775]="MIN",Qd[Qd.MAX=32776]="MAX",Qd[Qd.DEPTH_COMPONENT24=33190]="DEPTH_COMPONENT24",Qd[Qd.STREAM_READ=35041]="STREAM_READ",Qd[Qd.STREAM_COPY=35042]="STREAM_COPY",Qd[Qd.STATIC_READ=35045]="STATIC_READ",Qd[Qd.STATIC_COPY=35046]="STATIC_COPY",Qd[Qd.DYNAMIC_READ=35049]="DYNAMIC_READ",Qd[Qd.DYNAMIC_COPY=35050]="DYNAMIC_COPY",Qd[Qd.DEPTH_COMPONENT32F=36012]="DEPTH_COMPONENT32F",Qd[Qd.DEPTH32F_STENCIL8=36013]="DEPTH32F_STENCIL8",Qd[Qd.INVALID_INDEX=4294967295]="INVALID_INDEX",Qd[Qd.TIMEOUT_IGNORED=-1]="TIMEOUT_IGNORED",Qd[Qd.MAX_CLIENT_WAIT_TIMEOUT_WEBGL=37447]="MAX_CLIENT_WAIT_TIMEOUT_WEBGL",Qd[Qd.UNMASKED_VENDOR_WEBGL=37445]="UNMASKED_VENDOR_WEBGL",Qd[Qd.UNMASKED_RENDERER_WEBGL=37446]="UNMASKED_RENDERER_WEBGL",Qd[Qd.MAX_TEXTURE_MAX_ANISOTROPY_EXT=34047]="MAX_TEXTURE_MAX_ANISOTROPY_EXT",Qd[Qd.TEXTURE_MAX_ANISOTROPY_EXT=34046]="TEXTURE_MAX_ANISOTROPY_EXT",Qd[Qd.R16_EXT=33322]="R16_EXT",Qd[Qd.RG16_EXT=33324]="RG16_EXT",Qd[Qd.RGB16_EXT=32852]="RGB16_EXT",Qd[Qd.RGBA16_EXT=32859]="RGBA16_EXT",Qd[Qd.R16_SNORM_EXT=36760]="R16_SNORM_EXT",Qd[Qd.RG16_SNORM_EXT=36761]="RG16_SNORM_EXT",Qd[Qd.RGB16_SNORM_EXT=36762]="RGB16_SNORM_EXT",Qd[Qd.RGBA16_SNORM_EXT=36763]="RGBA16_SNORM_EXT",Qd[Qd.COMPRESSED_RGB_S3TC_DXT1_EXT=33776]="COMPRESSED_RGB_S3TC_DXT1_EXT",Qd[Qd.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777]="COMPRESSED_RGBA_S3TC_DXT1_EXT",Qd[Qd.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778]="COMPRESSED_RGBA_S3TC_DXT3_EXT",Qd[Qd.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779]="COMPRESSED_RGBA_S3TC_DXT5_EXT",Qd[Qd.COMPRESSED_SRGB_S3TC_DXT1_EXT=35916]="COMPRESSED_SRGB_S3TC_DXT1_EXT",Qd[Qd.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=35917]="COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT",Qd[Qd.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT=35918]="COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT",Qd[Qd.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=35919]="COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT",Qd[Qd.COMPRESSED_RED_RGTC1_EXT=36283]="COMPRESSED_RED_RGTC1_EXT",Qd[Qd.COMPRESSED_SIGNED_RED_RGTC1_EXT=36284]="COMPRESSED_SIGNED_RED_RGTC1_EXT",Qd[Qd.COMPRESSED_RED_GREEN_RGTC2_EXT=36285]="COMPRESSED_RED_GREEN_RGTC2_EXT",Qd[Qd.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT=36286]="COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT",Qd[Qd.COMPRESSED_RGBA_BPTC_UNORM_EXT=36492]="COMPRESSED_RGBA_BPTC_UNORM_EXT",Qd[Qd.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT=36493]="COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT",Qd[Qd.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT=36494]="COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT",Qd[Qd.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT=36495]="COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT",Qd[Qd.COMPRESSED_R11_EAC=37488]="COMPRESSED_R11_EAC",Qd[Qd.COMPRESSED_SIGNED_R11_EAC=37489]="COMPRESSED_SIGNED_R11_EAC",Qd[Qd.COMPRESSED_RG11_EAC=37490]="COMPRESSED_RG11_EAC",Qd[Qd.COMPRESSED_SIGNED_RG11_EAC=37491]="COMPRESSED_SIGNED_RG11_EAC",Qd[Qd.COMPRESSED_RGB8_ETC2=37492]="COMPRESSED_RGB8_ETC2",Qd[Qd.COMPRESSED_RGBA8_ETC2_EAC=37493]="COMPRESSED_RGBA8_ETC2_EAC",Qd[Qd.COMPRESSED_SRGB8_ETC2=37494]="COMPRESSED_SRGB8_ETC2",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=37495]="COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",Qd[Qd.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2=37496]="COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",Qd[Qd.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2=37497]="COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",Qd[Qd.COMPRESSED_RGB_PVRTC_4BPPV1_IMG=35840]="COMPRESSED_RGB_PVRTC_4BPPV1_IMG",Qd[Qd.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG=35842]="COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",Qd[Qd.COMPRESSED_RGB_PVRTC_2BPPV1_IMG=35841]="COMPRESSED_RGB_PVRTC_2BPPV1_IMG",Qd[Qd.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG=35843]="COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",Qd[Qd.COMPRESSED_RGB_ETC1_WEBGL=36196]="COMPRESSED_RGB_ETC1_WEBGL",Qd[Qd.COMPRESSED_RGB_ATC_WEBGL=35986]="COMPRESSED_RGB_ATC_WEBGL",Qd[Qd.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL=35986]="COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL",Qd[Qd.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL=34798]="COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL",Qd[Qd.COMPRESSED_RGBA_ASTC_4x4_KHR=37808]="COMPRESSED_RGBA_ASTC_4x4_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_5x4_KHR=37809]="COMPRESSED_RGBA_ASTC_5x4_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_5x5_KHR=37810]="COMPRESSED_RGBA_ASTC_5x5_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_6x5_KHR=37811]="COMPRESSED_RGBA_ASTC_6x5_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_6x6_KHR=37812]="COMPRESSED_RGBA_ASTC_6x6_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_8x5_KHR=37813]="COMPRESSED_RGBA_ASTC_8x5_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_8x6_KHR=37814]="COMPRESSED_RGBA_ASTC_8x6_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_8x8_KHR=37815]="COMPRESSED_RGBA_ASTC_8x8_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_10x5_KHR=37816]="COMPRESSED_RGBA_ASTC_10x5_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_10x6_KHR=37817]="COMPRESSED_RGBA_ASTC_10x6_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_10x8_KHR=37818]="COMPRESSED_RGBA_ASTC_10x8_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_10x10_KHR=37819]="COMPRESSED_RGBA_ASTC_10x10_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_12x10_KHR=37820]="COMPRESSED_RGBA_ASTC_12x10_KHR",Qd[Qd.COMPRESSED_RGBA_ASTC_12x12_KHR=37821]="COMPRESSED_RGBA_ASTC_12x12_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR=37840]="COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR=37841]="COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR=37842]="COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR=37843]="COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR=37844]="COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR=37845]="COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR=37846]="COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR=37847]="COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR=37848]="COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR=37849]="COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR=37850]="COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR=37851]="COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR=37852]="COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR",Qd[Qd.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR=37853]="COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR",Qd[Qd.QUERY_COUNTER_BITS_EXT=34916]="QUERY_COUNTER_BITS_EXT",Qd[Qd.CURRENT_QUERY_EXT=34917]="CURRENT_QUERY_EXT",Qd[Qd.QUERY_RESULT_EXT=34918]="QUERY_RESULT_EXT",Qd[Qd.QUERY_RESULT_AVAILABLE_EXT=34919]="QUERY_RESULT_AVAILABLE_EXT",Qd[Qd.TIME_ELAPSED_EXT=35007]="TIME_ELAPSED_EXT",Qd[Qd.TIMESTAMP_EXT=36392]="TIMESTAMP_EXT",Qd[Qd.GPU_DISJOINT_EXT=36795]="GPU_DISJOINT_EXT",Qd[Qd.COMPLETION_STATUS_KHR=37297]="COMPLETION_STATUS_KHR",Qd[Qd.DEPTH_CLAMP_EXT=34383]="DEPTH_CLAMP_EXT",Qd[Qd.FIRST_VERTEX_CONVENTION_WEBGL=36429]="FIRST_VERTEX_CONVENTION_WEBGL",Qd[Qd.LAST_VERTEX_CONVENTION_WEBGL=36430]="LAST_VERTEX_CONVENTION_WEBGL",Qd[Qd.PROVOKING_VERTEX_WEBL=36431]="PROVOKING_VERTEX_WEBL",Qd[Qd.POLYGON_MODE_WEBGL=2880]="POLYGON_MODE_WEBGL",Qd[Qd.POLYGON_OFFSET_LINE_WEBGL=10754]="POLYGON_OFFSET_LINE_WEBGL",Qd[Qd.LINE_WEBGL=6913]="LINE_WEBGL",Qd[Qd.FILL_WEBGL=6914]="FILL_WEBGL",Qd[Qd.MAX_CLIP_DISTANCES_WEBGL=3378]="MAX_CLIP_DISTANCES_WEBGL",Qd[Qd.MAX_CULL_DISTANCES_WEBGL=33529]="MAX_CULL_DISTANCES_WEBGL",Qd[Qd.MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL=33530]="MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL",Qd[Qd.CLIP_DISTANCE0_WEBGL=12288]="CLIP_DISTANCE0_WEBGL",Qd[Qd.CLIP_DISTANCE1_WEBGL=12289]="CLIP_DISTANCE1_WEBGL",Qd[Qd.CLIP_DISTANCE2_WEBGL=12290]="CLIP_DISTANCE2_WEBGL",Qd[Qd.CLIP_DISTANCE3_WEBGL=12291]="CLIP_DISTANCE3_WEBGL",Qd[Qd.CLIP_DISTANCE4_WEBGL=12292]="CLIP_DISTANCE4_WEBGL",Qd[Qd.CLIP_DISTANCE5_WEBGL=12293]="CLIP_DISTANCE5_WEBGL",Qd[Qd.CLIP_DISTANCE6_WEBGL=12294]="CLIP_DISTANCE6_WEBGL",Qd[Qd.CLIP_DISTANCE7_WEBGL=12295]="CLIP_DISTANCE7_WEBGL",Qd[Qd.POLYGON_OFFSET_CLAMP_EXT=36379]="POLYGON_OFFSET_CLAMP_EXT",Qd[Qd.LOWER_LEFT_EXT=36001]="LOWER_LEFT_EXT",Qd[Qd.UPPER_LEFT_EXT=36002]="UPPER_LEFT_EXT",Qd[Qd.NEGATIVE_ONE_TO_ONE_EXT=37726]="NEGATIVE_ONE_TO_ONE_EXT",Qd[Qd.ZERO_TO_ONE_EXT=37727]="ZERO_TO_ONE_EXT",Qd[Qd.CLIP_ORIGIN_EXT=37724]="CLIP_ORIGIN_EXT",Qd[Qd.CLIP_DEPTH_MODE_EXT=37725]="CLIP_DEPTH_MODE_EXT",Qd[Qd.SRC1_COLOR_WEBGL=35065]="SRC1_COLOR_WEBGL",Qd[Qd.SRC1_ALPHA_WEBGL=34185]="SRC1_ALPHA_WEBGL",Qd[Qd.ONE_MINUS_SRC1_COLOR_WEBGL=35066]="ONE_MINUS_SRC1_COLOR_WEBGL",Qd[Qd.ONE_MINUS_SRC1_ALPHA_WEBGL=35067]="ONE_MINUS_SRC1_ALPHA_WEBGL",Qd[Qd.MAX_DUAL_SOURCE_DRAW_BUFFERS_WEBGL=35068]="MAX_DUAL_SOURCE_DRAW_BUFFERS_WEBGL",Qd[Qd.MIRROR_CLAMP_TO_EDGE_EXT=34627]="MIRROR_CLAMP_TO_EDGE_EXT";const Jd={WEBGL_depth_texture:{UNSIGNED_INT_24_8_WEBGL:34042},OES_element_index_uint:{},OES_texture_float:{},OES_texture_half_float:{HALF_FLOAT_OES:5131},EXT_color_buffer_float:{},OES_standard_derivatives:{FRAGMENT_SHADER_DERIVATIVE_HINT_OES:35723},EXT_frag_depth:{},EXT_blend_minmax:{MIN_EXT:32775,MAX_EXT:32776},EXT_shader_texture_lod:{}},ef=e=>({drawBuffersWEBGL:t=>e.drawBuffers(t),COLOR_ATTACHMENT0_WEBGL:36064,COLOR_ATTACHMENT1_WEBGL:36065,COLOR_ATTACHMENT2_WEBGL:36066,COLOR_ATTACHMENT3_WEBGL:36067}),tf=e=>({VERTEX_ARRAY_BINDING_OES:34229,createVertexArrayOES:()=>e.createVertexArray(),deleteVertexArrayOES:t=>e.deleteVertexArray(t),isVertexArrayOES:t=>e.isVertexArray(t),bindVertexArrayOES:t=>e.bindVertexArray(t)}),nf=e=>({VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:35070,drawArraysInstancedANGLE:(...t)=>e.drawArraysInstanced(...t),drawElementsInstancedANGLE:(...t)=>e.drawElementsInstanced(...t),vertexAttribDivisorANGLE:(...t)=>e.vertexAttribDivisor(...t)});async function rf(e,t){const n=document.getElementsByTagName("head")[0];if(!n)throw new Error("loadScript");const r=document.createElement("script");return r.setAttribute("type","text/javascript"),r.setAttribute("src",e),new Promise((t,s)=>{r.onload=t,r.onerror=t=>s(new Error(`Unable to load script '${e}': ${t}`)),n.appendChild(r)})}let sf=null,of=!1;const af={debugSpectorJS:Or.get("debug-spectorjs"),debugSpectorJSUrl:"https://cdn.jsdelivr.net/npm/spectorjs@0.9.30/dist/spector.bundle.js",gl:void 0};function lf(e){return e.luma=e.luma||{},e.luma}function cf(e,t={}){return t.debugWebGL||t.traceWebGL?function(e,t){if(!globalThis.WebGLDebugUtils)return Or.warn("webgl-debug not loaded")(),e;const n=lf(e);if(n.debugContext)return n.debugContext;globalThis.WebGLDebugUtils.init({...Zd,...e});const r=globalThis.WebGLDebugUtils.makeDebugContext(e,hf.bind(null,t),df.bind(null,t));for(const o in Zd)o in r||"number"!=typeof Zd[o]||(r[o]=Zd[o]);class s{}Object.setPrototypeOf(r,Object.getPrototypeOf(e)),Object.setPrototypeOf(s,r);const i=Object.create(s);return n.realContext=e,n.debugContext=i,i.debug=!0,i}(e,t):function(e){const t=lf(e);return t.realContext?t.realContext:e}(e)}function uf(e,t){t=Array.from(t).map(e=>void 0===e?"undefined":e);let n=globalThis.WebGLDebugUtils.glFunctionArgsToString(e,t);return n=`${n.slice(0,100)}${n.length>100?"...":""}`,`gl.${e}(${n})`}function hf(e,t,n,r){r=Array.from(r).map(e=>void 0===e?"undefined":e);const s=`${globalThis.WebGLDebugUtils.glEnumToString(t)} in gl.${n}(${globalThis.WebGLDebugUtils.glFunctionArgsToString(n,r)})`;Or.error(s)()}function df(e,t,n){let r="";Or.level>=1&&(r=uf(t,n),e.traceWebGL&&Or.log(1,r)());for(const s of n)void 0===s&&(r=r||uf(t,n))}const ff=new class extends bs{constructor(){super(),r(this,"type","webgl"),gs.defaultProps={...gs.defaultProps,...af}}enforceWebGL2(e){!function(e=!0){const t=HTMLCanvasElement.prototype;if(!e&&t.originalGetContext)return t.getContext=t.originalGetContext,void(t.originalGetContext=void 0);t.originalGetContext=t.getContext,t.getContext=function(e,t){if("webgl"===e||"experimental-webgl"===e){const e=this.originalGetContext("webgl2",t);return e instanceof HTMLElement&&function(e){e.getExtension("EXT_color_buffer_float");const t={...Jd,WEBGL_disjoint_timer_query:e.getExtension("EXT_disjoint_timer_query_webgl2"),WEBGL_draw_buffers:ef(e),OES_vertex_array_object:tf(e),ANGLE_instanced_arrays:nf(e)},n=e.getExtension;e.getExtension=function(r){return n.call(e,r)||(r in t?t[r]:null)};const r=e.getSupportedExtensions;e.getSupportedExtensions=function(){const n=r.apply(e)||[];return null==n?void 0:n.concat(Object.keys(t))}}(e),e}return this.originalGetContext(e,t)}}(e)}isSupported(){return"undefined"!=typeof WebGL2RenderingContext}isDeviceHandle(e){return"undefined"!=typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext||("undefined"!=typeof WebGLRenderingContext&&e instanceof WebGLRenderingContext&&Or.warn("WebGL1 is not supported",e)(),!1)}async attach(e,t={}){const{WebGLDevice:n}=await c(async()=>{const{WebGLDevice:e}=await Promise.resolve().then(()=>Wp);return{WebGLDevice:e}},void 0);if(e instanceof n)return e;if((null==e?void 0:e.device)instanceof n)return e.device;if(!function(e){return"undefined"!=typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext||Boolean(e&&Number.isFinite(e._version))}(e))throw new Error("Invalid WebGL2RenderingContext");const r=!0===t.createCanvasContext?{}:t.createCanvasContext;return new n({...t,_handle:e,createCanvasContext:{canvas:e.canvas,autoResize:!1,...r}})}async create(e={}){const{WebGLDevice:t}=await c(async()=>{const{WebGLDevice:e}=await Promise.resolve().then(()=>Wp);return{WebGLDevice:e}},void 0);Or.groupCollapsed(1,"WebGLDevice created")();try{const n=[];(e.debugWebGL||e.debug)&&n.push(async function(){We()&&!globalThis.WebGLDebugUtils&&(globalThis.global=globalThis.global||globalThis,globalThis.global.module={},await rf("https://unpkg.com/webgl-debug@2.0.1/index.js"))}()),e.debugSpectorJS&&n.push(async function(e){if(!globalThis.SPECTOR)try{await rf(e.debugSpectorJSUrl||af.debugSpectorJSUrl)}catch(t){Or.warn(String(t))}}(e));const r=await Promise.allSettled(n);for(const e of r)"rejected"===e.status&&Or.error(`Failed to initialize debug libraries ${e.reason}`)();const s=new t(e),i=`${s._reused?"Reusing":"Created"} device with WebGL2 ${s.props.debug?"debug ":""}context: ${s.info.vendor}, ${s.info.renderer} for canvas: ${s.canvasContext.id}`;return Or.probe(1,i)(),Or.table(1,s.info)(),s}finally{Or.groupEnd(1)()}}},pf={3042:!1,32773:new Float32Array([0,0,0,0]),32777:32774,34877:32774,32969:1,32968:0,32971:1,32970:0,3106:new Float32Array([0,0,0,0]),3107:[!0,!0,!0,!0],2884:!1,2885:1029,2929:!1,2931:1,2932:513,2928:new Float32Array([0,1]),2930:!0,3024:!0,35725:null,36006:null,36007:null,34229:null,34964:null,2886:2305,33170:4352,2849:1,32823:!1,32824:0,10752:0,32926:!1,32928:!1,32938:1,32939:!1,3089:!1,3088:new Int32Array([0,0,1024,1024]),2960:!1,2961:0,2968:4294967295,36005:4294967295,2962:519,2967:0,2963:4294967295,34816:519,36003:0,36004:4294967295,2964:7680,2965:7680,2966:7680,34817:7680,34818:7680,34819:7680,2978:[0,0,1024,1024],36389:null,36662:null,36663:null,35053:null,35055:null,35723:4352,36010:null,35977:!1,3333:4,3317:4,37440:!1,37441:!1,37443:37444,3330:0,3332:0,3331:0,3314:0,32878:0,3316:0,3315:0,32877:0},gf=(e,t,n)=>t?e.enable(n):e.disable(n),mf=(e,t,n)=>e.hint(n,t),_f=(e,t,n)=>e.pixelStorei(n,t),yf=(e,t,n)=>{const r=36006===n?36009:36008;return e.bindFramebuffer(r,t)},bf=(e,t,n)=>{const r={34964:34962,36662:36662,36663:36663,35053:35051,35055:35052}[n];e.bindBuffer(r,t)};function vf(e){return Array.isArray(e)||ArrayBuffer.isView(e)&&!(e instanceof DataView)}const xf={3042:gf,32773:(e,t)=>e.blendColor(...t),32777:"blendEquation",34877:"blendEquation",32969:"blendFunc",32968:"blendFunc",32971:"blendFunc",32970:"blendFunc",3106:(e,t)=>e.clearColor(...t),3107:(e,t)=>e.colorMask(...t),2884:gf,2885:(e,t)=>e.cullFace(t),2929:gf,2931:(e,t)=>e.clearDepth(t),2932:(e,t)=>e.depthFunc(t),2928:(e,t)=>e.depthRange(...t),2930:(e,t)=>e.depthMask(t),3024:gf,35723:mf,35725:(e,t)=>e.useProgram(t),36007:(e,t)=>e.bindRenderbuffer(36161,t),36389:(e,t)=>{var n;return null==(n=e.bindTransformFeedback)?void 0:n.call(e,36386,t)},34229:(e,t)=>e.bindVertexArray(t),36006:yf,36010:yf,34964:bf,36662:bf,36663:bf,35053:bf,35055:bf,2886:(e,t)=>e.frontFace(t),33170:mf,2849:(e,t)=>e.lineWidth(t),32823:gf,32824:"polygonOffset",10752:"polygonOffset",35977:gf,32926:gf,32928:gf,32938:"sampleCoverage",32939:"sampleCoverage",3089:gf,3088:(e,t)=>e.scissor(...t),2960:gf,2961:(e,t)=>e.clearStencil(t),2968:(e,t)=>e.stencilMaskSeparate(1028,t),36005:(e,t)=>e.stencilMaskSeparate(1029,t),2962:"stencilFuncFront",2967:"stencilFuncFront",2963:"stencilFuncFront",34816:"stencilFuncBack",36003:"stencilFuncBack",36004:"stencilFuncBack",2964:"stencilOpFront",2965:"stencilOpFront",2966:"stencilOpFront",34817:"stencilOpBack",34818:"stencilOpBack",34819:"stencilOpBack",2978:(e,t)=>e.viewport(...t),34383:gf,10754:gf,12288:gf,12289:gf,12290:gf,12291:gf,12292:gf,12293:gf,12294:gf,12295:gf,3333:_f,3317:_f,37440:_f,37441:_f,37443:_f,3330:_f,3332:_f,3331:_f,3314:_f,32878:_f,3316:_f,3315:_f,32877:_f,framebuffer:(e,t)=>{const n=t&&"handle"in t?t.handle:t;return e.bindFramebuffer(36160,n)},blend:(e,t)=>t?e.enable(3042):e.disable(3042),blendColor:(e,t)=>e.blendColor(...t),blendEquation:(e,t)=>{const n="number"==typeof t?[t,t]:t;e.blendEquationSeparate(...n)},blendFunc:(e,t)=>{const n=2===(null==t?void 0:t.length)?[...t,...t]:t;e.blendFuncSeparate(...n)},clearColor:(e,t)=>e.clearColor(...t),clearDepth:(e,t)=>e.clearDepth(t),clearStencil:(e,t)=>e.clearStencil(t),colorMask:(e,t)=>e.colorMask(...t),cull:(e,t)=>t?e.enable(2884):e.disable(2884),cullFace:(e,t)=>e.cullFace(t),depthTest:(e,t)=>t?e.enable(2929):e.disable(2929),depthFunc:(e,t)=>e.depthFunc(t),depthMask:(e,t)=>e.depthMask(t),depthRange:(e,t)=>e.depthRange(...t),dither:(e,t)=>t?e.enable(3024):e.disable(3024),derivativeHint:(e,t)=>{e.hint(35723,t)},frontFace:(e,t)=>e.frontFace(t),mipmapHint:(e,t)=>e.hint(33170,t),lineWidth:(e,t)=>e.lineWidth(t),polygonOffsetFill:(e,t)=>t?e.enable(32823):e.disable(32823),polygonOffset:(e,t)=>e.polygonOffset(...t),sampleCoverage:(e,t)=>e.sampleCoverage(t[0],t[1]||!1),scissorTest:(e,t)=>t?e.enable(3089):e.disable(3089),scissor:(e,t)=>e.scissor(...t),stencilTest:(e,t)=>t?e.enable(2960):e.disable(2960),stencilMask:(e,t)=>{t=vf(t)?t:[t,t];const[n,r]=t;e.stencilMaskSeparate(1028,n),e.stencilMaskSeparate(1029,r)},stencilFunc:(e,t)=>{t=vf(t)&&3===t.length?[...t,...t]:t;const[n,r,s,i,o,a]=t;e.stencilFuncSeparate(1028,n,r,s),e.stencilFuncSeparate(1029,i,o,a)},stencilOp:(e,t)=>{t=vf(t)&&3===t.length?[...t,...t]:t;const[n,r,s,i,o,a]=t;e.stencilOpSeparate(1028,n,r,s),e.stencilOpSeparate(1029,i,o,a)},viewport:(e,t)=>e.viewport(...t)};function wf(e,t,n){return void 0!==t[e]?t[e]:n[e]}const Ef={blendEquation:(e,t,n)=>e.blendEquationSeparate(wf(32777,t,n),wf(34877,t,n)),blendFunc:(e,t,n)=>e.blendFuncSeparate(wf(32969,t,n),wf(32968,t,n),wf(32971,t,n),wf(32970,t,n)),polygonOffset:(e,t,n)=>e.polygonOffset(wf(32824,t,n),wf(10752,t,n)),sampleCoverage:(e,t,n)=>e.sampleCoverage(wf(32938,t,n),wf(32939,t,n)),stencilFuncFront:(e,t,n)=>e.stencilFuncSeparate(1028,wf(2962,t,n),wf(2967,t,n),wf(2963,t,n)),stencilFuncBack:(e,t,n)=>e.stencilFuncSeparate(1029,wf(34816,t,n),wf(36003,t,n),wf(36004,t,n)),stencilOpFront:(e,t,n)=>e.stencilOpSeparate(1028,wf(2964,t,n),wf(2965,t,n),wf(2966,t,n)),stencilOpBack:(e,t,n)=>e.stencilOpSeparate(1029,wf(34817,t,n),wf(34818,t,n),wf(34819,t,n))},Tf={enable:(e,t)=>e({[t]:!0}),disable:(e,t)=>e({[t]:!1}),pixelStorei:(e,t,n)=>e({[t]:n}),hint:(e,t,n)=>e({[t]:n}),useProgram:(e,t)=>e({35725:t}),bindRenderbuffer:(e,t,n)=>e({36007:n}),bindTransformFeedback:(e,t,n)=>e({36389:n}),bindVertexArray:(e,t)=>e({34229:t}),bindFramebuffer:(e,t,n)=>{switch(t){case 36160:return e({36006:n,36010:n});case 36009:return e({36006:n});case 36008:return e({36010:n});default:return null}},bindBuffer:(e,t,n)=>{const r={34962:[34964],36662:[36662],36663:[36663],35051:[35053],35052:[35055]}[t];return r?e({[r]:n}):{valueChanged:!0}},blendColor:(e,t,n,r,s)=>e({32773:new Float32Array([t,n,r,s])}),blendEquation:(e,t)=>e({32777:t,34877:t}),blendEquationSeparate:(e,t,n)=>e({32777:t,34877:n}),blendFunc:(e,t,n)=>e({32969:t,32968:n,32971:t,32970:n}),blendFuncSeparate:(e,t,n,r,s)=>e({32969:t,32968:n,32971:r,32970:s}),clearColor:(e,t,n,r,s)=>e({3106:new Float32Array([t,n,r,s])}),clearDepth:(e,t)=>e({2931:t}),clearStencil:(e,t)=>e({2961:t}),colorMask:(e,t,n,r,s)=>e({3107:[t,n,r,s]}),cullFace:(e,t)=>e({2885:t}),depthFunc:(e,t)=>e({2932:t}),depthRange:(e,t,n)=>e({2928:new Float32Array([t,n])}),depthMask:(e,t)=>e({2930:t}),frontFace:(e,t)=>e({2886:t}),lineWidth:(e,t)=>e({2849:t}),polygonOffset:(e,t,n)=>e({32824:t,10752:n}),sampleCoverage:(e,t,n)=>e({32938:t,32939:n}),scissor:(e,t,n,r,s)=>e({3088:new Int32Array([t,n,r,s])}),stencilMask:(e,t)=>e({2968:t,36005:t}),stencilMaskSeparate:(e,t,n)=>e({[1028===t?2968:36005]:n}),stencilFunc:(e,t,n,r)=>e({2962:t,2967:n,2963:r,34816:t,36003:n,36004:r}),stencilFuncSeparate:(e,t,n,r,s)=>e({[1028===t?2962:34816]:n,[1028===t?2967:36003]:r,[1028===t?2963:36004]:s}),stencilOp:(e,t,n,r)=>e({2964:t,2965:n,2966:r,34817:t,34818:n,34819:r}),stencilOpSeparate:(e,t,n,r,s)=>e({[1028===t?2964:34817]:n,[1028===t?2965:34818]:r,[1028===t?2966:34819]:s}),viewport:(e,t,n,r,s)=>e({2978:[t,n,r,s]})},Sf=(e,t)=>e.isEnabled(t),Af={3042:Sf,2884:Sf,2929:Sf,3024:Sf,32823:Sf,32926:Sf,32928:Sf,3089:Sf,2960:Sf,35977:Sf},Rf=new Set([34016,36388,36387,35983,35368,34965,35739,35738,3074,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34866,34867,34868,35097,32873,35869,32874,34068]);function Cf(e,t){if(function(e){for(const t in e)return!1;return!0}(t))return;const n={};for(const s in t){const r=Number(s),i=xf[s];i&&("string"==typeof i?n[i]=!0:i(e,t[s],r))}const r=e.state&&e.state.cache;if(r)for(const s in n)(0,Ef[s])(e,t,r)}function kf(e,t=pf){if("number"==typeof t){const n=t,r=Af[n];return r?r(e,n):e.getParameter(n)}const n=Array.isArray(t)?t:Object.keys(t),r={};for(const s of n){const t=Af[s];r[s]=t?t(e,Number(s)):e.getParameter(Number(s))}return r}function Pf(e,t){if(e===t)return!0;if(If(e)&&If(t)&&e.length===t.length){for(let n=0;n{}),this._updateCache=this._updateCache.bind(this),Object.seal(this)}static get(e){return e.state}push(e={}){this.stateStack.push({})}pop(){const e=this.stateStack[this.stateStack.length-1];Cf(this.gl,e),this.stateStack.pop()}trackState(e,t){if(this.cache=(null==t?void 0:t.copyState)?kf(e):Object.assign({},pf),this.initialized)throw new Error("WebGLStateTracker");this.initialized=!0,this.gl.state=this,function(e){const t=e.useProgram.bind(e);e.useProgram=function(n){const r=Mf.get(e);r.program!==n&&(t(n),r.program=n)}}(e);for(const n in Tf)Lf(e,n,Tf[n]);Nf(e,"getParameter"),Nf(e,"isEnabled")}_updateCache(e){let t,n=!1;const r=this.stateStack.length>0?this.stateStack[this.stateStack.length-1]:null;for(const s in e){const i=e[s],o=this.cache[s];Pf(i,o)||(n=!0,t=o,r&&!(s in r)&&(r[s]=o),this.cache[s]=i)}return{valueChanged:n,oldValue:t}}}function Nf(e,t){const n=e[t].bind(e);e[t]=function(t){if(void 0===t||Rf.has(t))return n(t);const r=Mf.get(e);return t in r.cache||(r.cache[t]=n(t)),r.enable?r.cache[t]:n(t)},Object.defineProperty(e[t],"name",{value:`${t}-from-cache`,configurable:!1})}function Lf(e,t,n){if(!e[t])return;const r=e[t].bind(e);e[t]=function(...t){const s=Mf.get(e),{valueChanged:i,oldValue:o}=n(s._updateCache,...t);return i&&r(...t),o},Object.defineProperty(e[t],"name",{value:`${t}-to-cache`,configurable:!1})}function Of(e,t,n){return void 0===n[t]&&(n[t]=e.getExtension(t)||null),n[t]}function Ff(e,t){return/NVIDIA/i.exec(e)||/NVIDIA/i.exec(t)?"nvidia":/INTEL/i.exec(e)||/INTEL/i.exec(t)?"intel":/Apple/i.exec(e)||/Apple/i.exec(t)?"apple":/AMD/i.exec(e)||/AMD/i.exec(t)||/ATI/i.exec(e)||/ATI/i.exec(t)?"amd":/SwiftShader/i.exec(e)||/SwiftShader/i.exec(t)?"software":"unknown"}function Df(e){switch(e){case"uint8":case"unorm8":return 5121;case"sint8":case"snorm8":return 5120;case"uint16":case"unorm16":return 5123;case"sint16":case"snorm16":return 5122;case"uint32":return 5125;case"sint32":return 5124;case"float16":return 5131;case"float32":return 5126}throw new Error(String(e))}const Bf="WEBGL_compressed_texture_s3tc",Uf="WEBGL_compressed_texture_s3tc_srgb",jf="EXT_texture_compression_rgtc",Vf="EXT_texture_compression_bptc",Gf="EXT_texture_norm16",zf="EXT_render_snorm",Wf={"float32-renderable-webgl":["EXT_color_buffer_float"],"float16-renderable-webgl":["EXT_color_buffer_half_float"],"rgb9e5ufloat-renderable-webgl":["WEBGL_render_shared_exponent"],"snorm8-renderable-webgl":[zf],"norm16-renderable-webgl":[Gf],"snorm16-renderable-webgl":[Gf,zf],"float32-filterable":["OES_texture_float_linear"],"float16-filterable-webgl":["OES_texture_half_float_linear"],"texture-filterable-anisotropic-webgl":["EXT_texture_filter_anisotropic"],"texture-blend-float-webgl":["EXT_float_blend"],"texture-compression-bc":[Bf,Uf,jf,Vf],"texture-compression-bc5-webgl":[jf],"texture-compression-bc7-webgl":[Vf],"texture-compression-etc2":["WEBGL_compressed_texture_etc"],"texture-compression-astc":["WEBGL_compressed_texture_astc"],"texture-compression-etc1-webgl":["WEBGL_compressed_texture_etc1"],"texture-compression-pvrtc-webgl":["WEBGL_compressed_texture_pvrtc"],"texture-compression-atc-webgl":["WEBGL_compressed_texture_atc"]},Hf={r8unorm:{gl:33321,rb:!0},r8snorm:{gl:36756},r8uint:{gl:33330,rb:!0},r8sint:{gl:33329,rb:!0},rg8unorm:{gl:33323,rb:!0},rg8snorm:{gl:36757},rg8uint:{gl:33336,rb:!0},rg8sint:{gl:33335,rb:!0},r16uint:{gl:33332,rb:!0},r16sint:{gl:33331,rb:!0},r16float:{gl:33325,rb:!0},r16unorm:{gl:33322,rb:!0},r16snorm:{gl:36760},"rgba4unorm-webgl":{gl:32854,rb:!0},"rgb565unorm-webgl":{gl:36194,rb:!0},"rgb5a1unorm-webgl":{gl:32855,rb:!0},"rgb8unorm-webgl":{gl:32849},"rgb8snorm-webgl":{gl:36758},rgba8unorm:{gl:32856},"rgba8unorm-srgb":{gl:35907},rgba8snorm:{gl:36759},rgba8uint:{gl:36220},rgba8sint:{gl:36238},bgra8unorm:{},"bgra8unorm-srgb":{},rg16uint:{gl:33338},rg16sint:{gl:33337},rg16float:{gl:33327,rb:!0},rg16unorm:{gl:33324},rg16snorm:{gl:36761},r32uint:{gl:33334,rb:!0},r32sint:{gl:33333,rb:!0},r32float:{gl:33326},rgb9e5ufloat:{gl:35901},rg11b10ufloat:{gl:35898,rb:!0},rgb10a2unorm:{gl:32857,rb:!0},rgb10a2uint:{gl:36975,rb:!0},"rgb16unorm-webgl":{gl:32852},"rgb16snorm-webgl":{gl:36762},rg32uint:{gl:33340,rb:!0},rg32sint:{gl:33339,rb:!0},rg32float:{gl:33328,rb:!0},rgba16uint:{gl:36214,rb:!0},rgba16sint:{gl:36232,rb:!0},rgba16float:{gl:34842},rgba16unorm:{gl:32859,rb:!0},rgba16snorm:{gl:36763},"rgb32float-webgl":{gl:34837,x:"EXT_color_buffer_float",dataFormat:6407,types:[5126]},rgba32uint:{gl:36208,rb:!0},rgba32sint:{gl:36226,rb:!0},rgba32float:{gl:34836,rb:!0},stencil8:{gl:36168,rb:!0},depth16unorm:{gl:33189,dataFormat:6402,types:[5123],rb:!0},depth24plus:{gl:33190,dataFormat:6402,types:[5125]},depth32float:{gl:36012,dataFormat:6402,types:[5126],rb:!0},"depth24plus-stencil8":{gl:35056,rb:!0,depthTexture:!0,dataFormat:34041,types:[34042]},"depth32float-stencil8":{gl:36013,dataFormat:34041,types:[36269],rb:!0},"bc1-rgb-unorm-webgl":{gl:33776,x:Bf},"bc1-rgb-unorm-srgb-webgl":{gl:35916,x:Uf},"bc1-rgba-unorm":{gl:33777,x:Bf},"bc1-rgba-unorm-srgb":{gl:35916,x:Uf},"bc2-rgba-unorm":{gl:33778,x:Bf},"bc2-rgba-unorm-srgb":{gl:35918,x:Uf},"bc3-rgba-unorm":{gl:33779,x:Bf},"bc3-rgba-unorm-srgb":{gl:35919,x:Uf},"bc4-r-unorm":{gl:36283,x:jf},"bc4-r-snorm":{gl:36284,x:jf},"bc5-rg-unorm":{gl:36285,x:jf},"bc5-rg-snorm":{gl:36286,x:jf},"bc6h-rgb-ufloat":{gl:36495,x:Vf},"bc6h-rgb-float":{gl:36494,x:Vf},"bc7-rgba-unorm":{gl:36492,x:Vf},"bc7-rgba-unorm-srgb":{gl:36493,x:Vf},"etc2-rgb8unorm":{gl:37492},"etc2-rgb8unorm-srgb":{gl:37494},"etc2-rgb8a1unorm":{gl:37496},"etc2-rgb8a1unorm-srgb":{gl:37497},"etc2-rgba8unorm":{gl:37493},"etc2-rgba8unorm-srgb":{gl:37495},"eac-r11unorm":{gl:37488},"eac-r11snorm":{gl:37489},"eac-rg11unorm":{gl:37490},"eac-rg11snorm":{gl:37491},"astc-4x4-unorm":{gl:37808},"astc-4x4-unorm-srgb":{gl:37840},"astc-5x4-unorm":{gl:37809},"astc-5x4-unorm-srgb":{gl:37841},"astc-5x5-unorm":{gl:37810},"astc-5x5-unorm-srgb":{gl:37842},"astc-6x5-unorm":{gl:37811},"astc-6x5-unorm-srgb":{gl:37843},"astc-6x6-unorm":{gl:37812},"astc-6x6-unorm-srgb":{gl:37844},"astc-8x5-unorm":{gl:37813},"astc-8x5-unorm-srgb":{gl:37845},"astc-8x6-unorm":{gl:37814},"astc-8x6-unorm-srgb":{gl:37846},"astc-8x8-unorm":{gl:37815},"astc-8x8-unorm-srgb":{gl:37847},"astc-10x5-unorm":{gl:37819},"astc-10x5-unorm-srgb":{gl:37851},"astc-10x6-unorm":{gl:37817},"astc-10x6-unorm-srgb":{gl:37849},"astc-10x8-unorm":{gl:37818},"astc-10x8-unorm-srgb":{gl:37850},"astc-10x10-unorm":{gl:37819},"astc-10x10-unorm-srgb":{gl:37851},"astc-12x10-unorm":{gl:37820},"astc-12x10-unorm-srgb":{gl:37852},"astc-12x12-unorm":{gl:37821},"astc-12x12-unorm-srgb":{gl:37853},"pvrtc-rgb4unorm-webgl":{gl:35840},"pvrtc-rgba4unorm-webgl":{gl:35842},"pvrtc-rbg2unorm-webgl":{gl:35841},"pvrtc-rgba2unorm-webgl":{gl:35843},"etc1-rbg-unorm-webgl":{gl:36196},"atc-rgb-unorm-webgl":{gl:35986},"atc-rgba-unorm-webgl":{gl:35986},"atc-rgbai-unorm-webgl":{gl:34798}};function $f(e){var t;const n=Hf[e],r=function(e){const t=Hf[e],n=null==t?void 0:t.gl;if(void 0===n)throw new Error(`Unsupported texture format ${e}`);return n}(e),s=us.getInfo(e);return s.compressed&&(n.dataFormat=r),{internalFormat:r,format:(null==n?void 0:n.dataFormat)||Xf(s.channels,s.integer,s.normalized,r),type:s.dataType?Df(s.dataType):(null==(t=null==n?void 0:n.types)?void 0:t[0])||5121,compressed:s.compressed||!1}}function Xf(e,t,n,r){if(6408===r||6407===r)return r;switch(e){case"r":return t&&!n?36244:6403;case"rg":return t&&!n?33320:33319;case"rgb":return t&&!n?36248:6407;case"rgba":return t&&!n?36249:6408;case"bgra":throw new Error("bgra pixels not supported by WebGL");default:return 6408}}const qf={"depth-clip-control":"EXT_depth_clamp","timer-query-webgl":"EXT_disjoint_timer_query_webgl2","compilation-status-async-webgl":"KHR_parallel_shader_compile","polygon-mode-webgl":"WEBGL_polygon_mode","provoking-vertex-webgl":"WEBGL_provoking_vertex","shader-clip-cull-distance-webgl":"WEBGL_clip_cull_distance","shader-noperspective-interpolation-webgl":"NV_shader_noperspective_interpolation","shader-conservative-depth-webgl":"EXT_conservative_depth"};class Yf extends fs{constructor(e,t,n){super([],n),r(this,"gl"),r(this,"extensions"),r(this,"testedFeatures",new Set),this.gl=e,this.extensions=t,Of(e,"EXT_color_buffer_float",t)}*[Symbol.iterator](){const e=this.getFeatures();for(const t of e)this.has(t)&&(yield t);return[]}has(e){var t;return!(null==(t=this.disabledFeatures)?void 0:t[e])&&(this.testedFeatures.has(e)||(this.testedFeatures.add(e),function(e){return e in Wf}(e)&&function(e,t,n){return(Wf[t]||[]).every(t=>Of(e,t,n))}(this.gl,e,this.extensions)&&this.features.add(e),this.getWebGLFeature(e)&&this.features.add(e)),this.features.has(e))}initializeFeatures(){const e=this.getFeatures().filter(e=>"polygon-mode-webgl"!==e);for(const t of e)this.has(t)}getFeatures(){return[...Object.keys(qf),...Object.keys(Wf)]}getWebGLFeature(e){const t=qf[e];return"string"==typeof t?Boolean(Of(this.gl,t,this.extensions)):Boolean(t)}}class Kf extends ds{constructor(e){super(),r(this,"gl"),r(this,"limits",{}),this.gl=e}get maxTextureDimension1D(){return 0}get maxTextureDimension2D(){return this.getParameter(3379)}get maxTextureDimension3D(){return this.getParameter(32883)}get maxTextureArrayLayers(){return this.getParameter(35071)}get maxBindGroups(){return 0}get maxDynamicUniformBuffersPerPipelineLayout(){return 0}get maxDynamicStorageBuffersPerPipelineLayout(){return 0}get maxSampledTexturesPerShaderStage(){return this.getParameter(35660)}get maxSamplersPerShaderStage(){return this.getParameter(35661)}get maxStorageBuffersPerShaderStage(){return 0}get maxStorageTexturesPerShaderStage(){return 0}get maxUniformBuffersPerShaderStage(){return this.getParameter(35375)}get maxUniformBufferBindingSize(){return this.getParameter(35376)}get maxStorageBufferBindingSize(){return 0}get minUniformBufferOffsetAlignment(){return this.getParameter(35380)}get minStorageBufferOffsetAlignment(){return 0}get maxVertexBuffers(){return 16}get maxVertexAttributes(){return this.getParameter(34921)}get maxVertexBufferArrayStride(){return 2048}get maxInterStageShaderVariables(){return this.getParameter(35659)}get maxComputeWorkgroupStorageSize(){return 0}get maxComputeInvocationsPerWorkgroup(){return 0}get maxComputeWorkgroupSizeX(){return 0}get maxComputeWorkgroupSizeY(){return 0}get maxComputeWorkgroupSizeZ(){return 0}get maxComputeWorkgroupsPerDimension(){return 0}getParameter(e){return void 0===this.limits[e]&&(this.limits[e]=this.gl.getParameter(e)),this.limits[e]||0}}class Zf extends js{constructor(e,t){super(e,t),r(this,"device"),r(this,"gl"),r(this,"handle"),r(this,"colorAttachments",[]),r(this,"depthStencilAttachment",null);const n=null===t.handle;this.device=e,this.gl=e.gl,this.handle=this.props.handle||n?this.props.handle:this.gl.createFramebuffer(),n||(e._setWebGLDebugMetadata(this.handle,this,{spector:this.props}),this.autoCreateAttachmentTextures(),this.updateAttachments())}destroy(){super.destroy(),this.destroyed||null===this.handle||this.gl.deleteFramebuffer(this.handle)}updateAttachments(){const e=this.gl.bindFramebuffer(36160,this.handle);for(let t=0;t(this._getCompilationStatus(),this.compilationStatus))}async getCompilationInfo(){return await this._waitForCompilationComplete(),this.getCompilationInfoSync()}getCompilationInfoSync(){const e=this.device.gl.getShaderInfoLog(this.handle);return e?function(e){const t=e.split(/\r?\n/),n=[];for(const r of t){if(r.length<=1)continue;const e=r.split(":");if(2===e.length){const[t,r]=e;n.push({message:r.trim(),type:np(t),lineNum:0,linePos:0});continue}const[t,s,i,...o]=e;let a=parseInt(i,10);isNaN(a)&&(a=0);let l=parseInt(s,10);isNaN(l)&&(l=0),n.push({message:o.join(":").trim(),type:np(t),lineNum:a,linePos:l})}return n}(e):[]}getTranslatedSource(){const e=this.device.getExtension("WEBGL_debug_shaders").WEBGL_debug_shaders;return(null==e?void 0:e.getTranslatedShaderSource(this.handle))||null}async _compile(e){e=e.startsWith("#version ")?e:`#version 300 es\n${e}`;const{gl:t}=this.device;if(t.shaderSource(this.handle,e),t.compileShader(this.handle),this.device.props.debug){if(this.device.features.has("compilation-status-async-webgl"))Or.once(1,"Shader compilation is asynchronous")(),await this._waitForCompilationComplete(),Or.info(2,`Shader ${this.id} - async compilation complete: ${this.compilationStatus}`)(),this._getCompilationStatus(),this.debugShader();else if(this._getCompilationStatus(),this.debugShader(),"error"===this.compilationStatus)throw new Error(`GLSL compilation errors in ${this.props.stage} shader ${this.props.id}`)}else this.compilationStatus="pending"}async _waitForCompilationComplete(){const e=async e=>await new Promise(t=>setTimeout(t,e));if(!this.device.features.has("compilation-status-async-webgl"))return void(await e(10));const{gl:t}=this.device;for(;;){if(t.getShaderParameter(this.handle,37297))return;await e(10)}}_getCompilationStatus(){this.compilationStatus=this.device.gl.getShaderParameter(this.handle,35713)?"success":"error"}}function sp(e,t){return lp(e,t,{never:512,less:513,equal:514,"less-equal":515,greater:516,"not-equal":517,"greater-equal":518,always:519})}function ip(e,t){return lp(e,t,{keep:7680,zero:0,replace:7681,invert:5386,"increment-clamp":7682,"decrement-clamp":7683,"increment-wrap":34055,"decrement-wrap":34056})}function op(e,t){return lp(e,t,{add:32774,subtract:32778,"reverse-subtract":32779,min:32775,max:32776})}function ap(e,t,n="color"){return lp(e,t,{one:1,zero:0,src:768,"one-minus-src":769,dst:774,"one-minus-dst":775,"src-alpha":770,"one-minus-src-alpha":771,"dst-alpha":772,"one-minus-dst-alpha":773,"src-alpha-saturated":776,constant:"color"===n?32769:32771,"one-minus-constant":"color"===n?32770:32772,src1:768,"one-minus-src1":769,"src1-alpha":770,"one-minus-src1-alpha":771})}function lp(e,t,n){if(!(t in n))throw new Error(function(e,t){return`Illegal parameter ${t} for ${e}`}(e,t));return n[t]}function cp(e){const t={};return e.addressModeU&&(t[10242]=up(e.addressModeU)),e.addressModeV&&(t[10243]=up(e.addressModeV)),e.addressModeW&&(t[32882]=up(e.addressModeW)),e.magFilter&&(t[10240]=hp(e.magFilter)),(e.minFilter||e.mipmapFilter)&&(t[10241]=function(e,t="none"){if(!t)return hp(e);switch(t){case"none":return hp(e);case"nearest":switch(e){case"nearest":return 9984;case"linear":return 9985}break;case"linear":switch(e){case"nearest":return 9986;case"linear":return 9987}}}(e.minFilter||"linear",e.mipmapFilter)),void 0!==e.lodMinClamp&&(t[33082]=e.lodMinClamp),void 0!==e.lodMaxClamp&&(t[33083]=e.lodMaxClamp),"comparison-sampler"===e.type&&(t[34892]=34894),e.compare&&(t[34893]=sp("compare",e.compare)),e.maxAnisotropy&&(t[34046]=e.maxAnisotropy),t}function up(e){switch(e){case"clamp-to-edge":return 33071;case"repeat":return 10497;case"mirror-repeat":return 33648}}function hp(e){switch(e){case"nearest":return 9728;case"linear":return 9729}}class dp extends Cs{constructor(e,t){super(e,t),r(this,"device"),r(this,"handle"),r(this,"parameters"),this.device=e,this.parameters=cp(t),this.handle=t.handle||this.device.gl.createSampler(),this._setSamplerParameters(this.parameters)}destroy(){this.handle&&(this.device.gl.deleteSampler(this.handle),this.handle=void 0)}toString(){return`Sampler(${this.id},${JSON.stringify(this.props)})`}_setSamplerParameters(e){for(const[t,n]of Object.entries(e)){const e=Number(t);switch(e){case 33082:case 33083:this.device.gl.samplerParameterf(this.handle,e,n);break;default:this.device.gl.samplerParameteri(this.handle,e,n)}}}}function fp(e,t,n){if(function(e){for(const t in e)return!1;return!0}(t))return n(e);const{nocatch:r=!0}=t,s=Mf.get(e);let i;if(s.push(),Cf(e,t),r)i=n(e),s.pop();else try{i=n(e)}finally{s.pop()}return i}class pp extends Ns{constructor(e,t){super(e,{...Is.defaultProps,...t}),r(this,"device"),r(this,"gl"),r(this,"handle"),r(this,"texture"),this.device=e,this.gl=this.device.gl,this.handle=null,this.texture=t.texture}}class gp extends Is{constructor(e,t){super(e,t),r(this,"device"),r(this,"gl"),r(this,"handle"),r(this,"sampler"),r(this,"view"),r(this,"glTarget"),r(this,"glFormat"),r(this,"glType"),r(this,"glInternalFormat"),r(this,"compressed"),r(this,"_textureUnit",0),this.device=e,this.gl=this.device.gl;const n=$f(this.props.format);this.glTarget=function(e){switch(e){case"1d":break;case"2d":return 3553;case"3d":return 32879;case"cube":return 34067;case"2d-array":return 35866}throw new Error(e)}(this.props.dimension),this.glInternalFormat=n.internalFormat,this.glFormat=n.format,this.glType=n.type,this.compressed=n.compressed,this.handle=this.props.handle||this.gl.createTexture(),this.device._setWebGLDebugMetadata(this.handle,this,{spector:this.props}),this.gl.bindTexture(this.glTarget,this.handle);const{dimension:s,width:i,height:o,depth:a,mipLevels:l,glTarget:c,glInternalFormat:u}=this;switch(s){case"2d":case"cube":this.gl.texStorage2D(c,l,u,i,o);break;case"2d-array":case"3d":this.gl.texStorage3D(c,l,u,i,o,a);break;default:throw new Error(s)}this.gl.bindTexture(this.glTarget,null),this._initializeData(t.data),this.setSampler(this.props.sampler),this.view=new pp(this.device,{...this.props,texture:this}),Object.seal(this)}destroy(){this.handle&&(this.gl.deleteTexture(this.handle),this.removeStats(),this.trackDeallocatedMemory("Texture"),this.destroyed=!0)}createView(e){return new pp(this.device,{...e,texture:this})}setSampler(e={}){super.setSampler(e);const t=cp(this.sampler.props);this._setSamplerParameters(t)}copyImageData(e){const t=this._normalizeCopyImageDataOptions(e),n=t.data,{width:r,height:s,depth:i}=this,{mipLevel:o=0,byteOffset:a=0,x:l=0,y:c=0,z:u=0}=t,{glFormat:h,glType:d,compressed:f}=this,p=mp(this.glTarget,this.dimension,u);let g;if(!this.compressed){const{bytesPerPixel:e}=this.device.getTextureFormatInfo(this.format);if(e){if(t.bytesPerRow%e!==0)throw new Error(`bytesPerRow (${t.bytesPerRow}) must be a multiple of bytesPerPixel (${e}) for ${this.format}`);g=t.bytesPerRow/e}}const m=this.compressed?{}:{...void 0!==g?{3314:g}:{},32878:t.rowsPerImage};this.gl.bindTexture(p,this.handle),fp(this.gl,m,()=>{switch(this.dimension){case"2d":case"cube":f?this.gl.compressedTexSubImage2D(p,o,l,c,r,s,h,n,a):this.gl.texSubImage2D(p,o,l,c,r,s,h,d,n,a);break;case"2d-array":case"3d":f?this.gl.compressedTexSubImage3D(p,o,l,c,u,r,s,i,h,n,a):this.gl.texSubImage3D(p,o,l,c,u,r,s,i,h,d,n,a)}}),this.gl.bindTexture(p,null)}copyExternalImage(e){const t=this._normalizeCopyExternalImageOptions(e);if(t.sourceX||t.sourceY)throw new Error("WebGL does not support sourceX/sourceY)");const{glFormat:n,glType:r}=this,{image:s,depth:i,mipLevel:o,x:a,y:l,z:c,width:u,height:h}=t,d=mp(this.glTarget,this.dimension,i),f=t.flipY?{37440:!0}:{};return this.gl.bindTexture(this.glTarget,this.handle),fp(this.gl,f,()=>{switch(this.dimension){case"2d":case"cube":this.gl.texSubImage2D(d,o,a,l,u,h,n,r,s);break;case"2d-array":case"3d":this.gl.texSubImage3D(d,o,a,l,c,u,h,i,n,r,s)}}),this.gl.bindTexture(this.glTarget,null),{width:t.width,height:t.height}}generateMipmapsWebGL(e){if(this.device.isTextureFormatRenderable(this.props.format)&&this.device.isTextureFormatFilterable(this.props.format)||(Or.warn(`${this} is not renderable or filterable, may not be able to generate mipmaps`)(),null==e?void 0:e.force))try{this.gl.bindTexture(this.glTarget,this.handle),this.gl.generateMipmap(this.glTarget)}catch(t){Or.warn(`Error generating mipmap for ${this}: ${t.message}`)()}finally{this.gl.bindTexture(this.glTarget,null)}}_setSamplerParameters(e){Or.log(2,`${this.id} sampler parameters`,this.device.getGLKeys(e))(),this.gl.bindTexture(this.glTarget,this.handle);for(const[t,n]of Object.entries(e)){const e=Number(t),r=n;switch(e){case 33082:case 33083:this.gl.texParameterf(this.glTarget,e,r);break;case 10240:case 10241:case 10242:case 10243:case 32882:case 34892:case 34893:this.gl.texParameteri(this.glTarget,e,r);break;case 34046:this.device.features.has("texture-filterable-anisotropic-webgl")&&this.gl.texParameteri(this.glTarget,e,r)}}this.gl.bindTexture(this.glTarget,null)}_getActiveUnit(){return this.gl.getParameter(34016)-33984}_bind(e){const{gl:t}=this;return void 0!==e&&(this._textureUnit=e,t.activeTexture(33984+e)),t.bindTexture(this.glTarget,this.handle),e}_unbind(e){const{gl:t}=this;return void 0!==e&&(this._textureUnit=e,t.activeTexture(33984+e)),t.bindTexture(this.glTarget,null),e}}function mp(e,t,n){return"cube"===t?34069+n:e}function _p(e){return vp[e]}function yp(e){return Boolean(xp[e])}function bp(e){return xp[e]}const vp={5126:"f32",35664:"vec2",35665:"vec3",35666:"vec4",5124:"i32",35667:"vec2",35668:"vec3",35669:"vec4",5125:"u32",36294:"vec2",36295:"vec3",36296:"vec4",35670:"f32",35671:"vec2",35672:"vec3",35673:"vec4",35674:"mat2x2",35685:"mat2x3",35686:"mat2x4",35687:"mat3x2",35675:"mat3x3",35688:"mat3x4",35689:"mat4x2",35690:"mat4x3",35676:"mat4x4"},xp={35678:{viewDimension:"2d",sampleType:"float"},35680:{viewDimension:"cube",sampleType:"float"},35679:{viewDimension:"3d",sampleType:"float"},35682:{viewDimension:"3d",sampleType:"depth"},36289:{viewDimension:"2d-array",sampleType:"float"},36292:{viewDimension:"2d-array",sampleType:"depth"},36293:{viewDimension:"cube",sampleType:"float"},36298:{viewDimension:"2d",sampleType:"sint"},36299:{viewDimension:"3d",sampleType:"sint"},36300:{viewDimension:"cube",sampleType:"sint"},36303:{viewDimension:"2d-array",sampleType:"uint"},36306:{viewDimension:"2d",sampleType:"uint"},36307:{viewDimension:"3d",sampleType:"uint"},36308:{viewDimension:"cube",sampleType:"uint"},36311:{viewDimension:"2d-array",sampleType:"uint"}},wp={uint8:5121,sint8:5120,unorm8:5121,snorm8:5120,uint16:5123,sint16:5122,unorm16:5123,snorm16:5122,uint32:5125,sint32:5124,float16:5131,float32:5126};function Ep(e){if("]"!==e[e.length-1])return{name:e,length:1,isArray:!1};const t=/([^[]*)(\[[0-9]+\])?/.exec(e);if(!t||t.length<2)throw new Error(`Failed to parse GLSL uniform name ${e}`);return{name:t[1],length:t[2]?1:0,isArray:Boolean(t[2])}}function Tp(e,t,n,r){const s=e;let i=r;!0===i&&(i=1),!1===i&&(i=0);const o="number"==typeof i?[i]:i;switch(n){case 35678:case 35680:case 35679:case 35682:case 36289:case 36292:case 36293:case 36298:case 36299:case 36300:case 36303:case 36306:case 36307:case 36308:case 36311:if("number"!=typeof r)throw new Error("samplers must be set to integers");return e.uniform1i(t,r);case 5126:return e.uniform1fv(t,o);case 35664:return e.uniform2fv(t,o);case 35665:return e.uniform3fv(t,o);case 35666:return e.uniform4fv(t,o);case 5124:case 35670:return e.uniform1iv(t,o);case 35667:case 35671:return e.uniform2iv(t,o);case 35668:case 35672:return e.uniform3iv(t,o);case 35669:case 35673:return e.uniform4iv(t,o);case 5125:return s.uniform1uiv(t,o,1);case 36294:return s.uniform2uiv(t,o,2);case 36295:return s.uniform3uiv(t,o,3);case 36296:return s.uniform4uiv(t,o,4);case 35674:return e.uniformMatrix2fv(t,!1,o);case 35675:return e.uniformMatrix3fv(t,!1,o);case 35676:return e.uniformMatrix4fv(t,!1,o);case 35685:return s.uniformMatrix2x3fv(t,!1,o);case 35686:return s.uniformMatrix2x4fv(t,!1,o);case 35687:return s.uniformMatrix3x2fv(t,!1,o);case 35688:return s.uniformMatrix3x4fv(t,!1,o);case 35689:return s.uniformMatrix4x2fv(t,!1,o);case 35690:return s.uniformMatrix4x3fv(t,!1,o)}throw new Error("Illegal uniform")}class Sp extends Gs{constructor(e,t){super(e,t),r(this,"device"),r(this,"handle"),r(this,"vs"),r(this,"fs"),r(this,"introspectedLayout"),r(this,"uniforms",{}),r(this,"bindings",{}),r(this,"varyings",null),r(this,"_uniformCount",0),r(this,"_uniformSetters",{}),this.device=e,this.handle=this.props.handle||this.device.gl.createProgram(),this.device._setWebGLDebugMetadata(this.handle,this,{spector:{id:this.props.id}}),this.vs=t.vs,this.fs=t.fs;const{varyings:n,bufferMode:s=35981}=t;n&&n.length>0&&(this.varyings=n,this.device.gl.transformFeedbackVaryings(this.handle,n,s)),this._linkShaders(),Or.time(3,`RenderPipeline ${this.id} - shaderLayout introspection`)(),this.introspectedLayout=function(e,t){const n={attributes:[],bindings:[]};n.attributes=function(e,t){const n=[],r=e.getProgramParameter(t,35721);for(let s=0;s=0){const e=_p(o),t=/instance/i.test(i)?"instance":"vertex";n.push({name:i,location:a,stepMode:t,type:e})}}return n.sort((e,t)=>e.location-t.location),n}(e,t);const r=function(e,t){const n=(n,r)=>e.getActiveUniformBlockParameter(t,n,r),r=[],s=e.getProgramParameter(t,35382);for(let i=0;ie.location-t.location),r}(e,t);for(const a of r){const e=a.uniforms.map(e=>({name:e.name,format:e.format,byteOffset:e.byteOffset,byteStride:e.byteStride,arrayLength:e.arrayLength}));n.bindings.push({type:"uniform",name:a.name,group:0,location:a.location,visibility:(a.vertex?1:0)&(a.fragment?2:0),minBindingSize:a.byteLength,uniforms:e})}const s=function(e,t){const n=[],r=e.getProgramParameter(t,35718);for(let s=0;s1)for(let s=0;se.location-t.location),n}(e,t);return(null==o?void 0:o.length)&&(n.varyings=o),n}(this.device.gl,this.handle),Or.timeEnd(3,`RenderPipeline ${this.id} - shaderLayout introspection`)(),this.shaderLayout=t.shaderLayout?function(e,t){const n={...e,attributes:e.attributes.map(e=>({...e}))};for(const r of(null==t?void 0:t.attributes)||[]){const e=n.attributes.find(e=>e.name===r.name);e?(e.type=r.type||e.type,e.stepMode=r.stepMode||e.stepMode):Or.warn(`shader layout attribute ${r.name} not present in shader`)}return n}(this.introspectedLayout,t.shaderLayout):this.introspectedLayout}get[Symbol.toStringTag](){return"WEBGLRenderPipeline"}destroy(){this.handle&&(this.device.gl.useProgram(null),this.device.gl.deleteProgram(this.handle),this.destroyed=!0,this.handle.destroyed=!0,this.handle=null)}setBindings(e,t){for(const[n,r]of Object.entries(e)){const e=this.shaderLayout.bindings.find(e=>e.name===n)||this.shaderLayout.bindings.find(e=>e.name===`${n}Uniforms`);if(!e){const e=this.shaderLayout.bindings.map(e=>`"${e.name}"`).join(", ");(null==t?void 0:t.disableWarnings)||Or.warn(`No binding "${n}" in render pipeline "${this.id}", expected one of ${e}`,r)();continue}switch(r||Or.warn(`Unsetting binding "${n}" in render pipeline "${this.id}"`)(),e.type){case"uniform":if(!(r instanceof tp||r.buffer instanceof tp))throw new Error("buffer value");break;case"texture":if(!(r instanceof pp||r instanceof gp||r instanceof Zf))throw new Error(`${this} Bad texture binding for ${n}`);break;case"sampler":Or.warn(`Ignoring sampler ${n}`)();break;default:throw new Error(e.type)}this.bindings[n]=r}}draw(e){var t;const{renderPass:n,parameters:r=this.props.parameters,topology:s=this.props.topology,vertexArray:i,vertexCount:o,instanceCount:a,isInstanced:l=!1,firstVertex:c=0,transformFeedback:u}=e,h=function(e){switch(e){case"point-list":return 0;case"line-list":return 1;case"line-strip":return 3;case"triangle-list":return 4;case"triangle-strip":return 5;default:throw new Error(e)}}(s),d=Boolean(i.indexBuffer),f=null==(t=i.indexBuffer)?void 0:t.glIndexType;if("success"!==this.linkStatus)return Or.info(2,`RenderPipeline:${this.id}.draw() aborted - waiting for shader linking`)(),!1;if(!this._areTexturesRenderable())return Or.info(2,`RenderPipeline:${this.id}.draw() aborted - textures not yet loaded`)(),!1;this.device.gl.useProgram(this.handle),i.bindBeforeRender(n),u&&u.begin(this.props.topology),this._applyBindings(),this._applyUniforms();const p=n;return function(e,t,n,r){if(function(e){let t=!0;for(const n in e){t=!1;break}return t}(t))return r(e);const s=e;s.pushState();try{return function(e,t){const n=e,{gl:r}=n;if(t.cullMode)switch(t.cullMode){case"none":r.disable(2884);break;case"front":r.enable(2884),r.cullFace(1028);break;case"back":r.enable(2884),r.cullFace(1029)}if(t.frontFace&&r.frontFace(lp("frontFace",t.frontFace,{ccw:2305,cw:2304})),t.unclippedDepth&&e.features.has("depth-clip-control")&&r.enable(34383),void 0!==t.depthBias&&(r.enable(32823),r.polygonOffset(t.depthBias,t.depthBiasSlopeScale||0)),t.provokingVertex&&e.features.has("provoking-vertex-webgl")){const e=n.getExtension("WEBGL_provoking_vertex").WEBGL_provoking_vertex,r=lp("provokingVertex",t.provokingVertex,{first:36429,last:36430});null==e||e.provokingVertexWEBGL(r)}if((t.polygonMode||t.polygonOffsetLine)&&e.features.has("polygon-mode-webgl")){if(t.polygonMode){const e=n.getExtension("WEBGL_polygon_mode").WEBGL_polygon_mode,r=lp("polygonMode",t.polygonMode,{fill:6914,line:6913});null==e||e.polygonModeWEBGL(1028,r),null==e||e.polygonModeWEBGL(1029,r)}t.polygonOffsetLine&&r.enable(10754)}if(e.features.has("shader-clip-cull-distance-webgl")&&(t.clipDistance0&&r.enable(12288),t.clipDistance1&&r.enable(12289),t.clipDistance2&&r.enable(12290),t.clipDistance3&&r.enable(12291),t.clipDistance4&&r.enable(12292),t.clipDistance5&&r.enable(12293),t.clipDistance6&&r.enable(12294),t.clipDistance7&&r.enable(12295)),void 0!==t.depthWriteEnabled&&r.depthMask(t.depthWriteEnabled),t.depthCompare&&("always"!==t.depthCompare?r.enable(2929):r.disable(2929),r.depthFunc(sp("depthCompare",t.depthCompare))),t.stencilWriteMask){const e=t.stencilWriteMask;r.stencilMaskSeparate(1028,e),r.stencilMaskSeparate(1029,e)}if(t.stencilReadMask&&Or.warn("stencilReadMask not supported under WebGL"),t.stencilCompare){const e=t.stencilReadMask||4294967295,n=sp("depthCompare",t.stencilCompare);"always"!==t.stencilCompare?r.enable(2960):r.disable(2960),r.stencilFuncSeparate(1028,n,0,e),r.stencilFuncSeparate(1029,n,0,e)}if(t.stencilPassOperation&&t.stencilFailOperation&&t.stencilDepthFailOperation){const e=ip("stencilPassOperation",t.stencilPassOperation),n=ip("stencilFailOperation",t.stencilFailOperation),s=ip("stencilDepthFailOperation",t.stencilDepthFailOperation);r.stencilOpSeparate(1028,n,s,e),r.stencilOpSeparate(1029,n,s,e)}switch(t.blend){case!0:r.enable(3042);break;case!1:r.disable(3042)}if(t.blendColorOperation||t.blendAlphaOperation){const e=op("blendColorOperation",t.blendColorOperation||"add"),n=op("blendAlphaOperation",t.blendAlphaOperation||"add");r.blendEquationSeparate(e,n);const s=ap("blendColorSrcFactor",t.blendColorSrcFactor||"one"),i=ap("blendColorDstFactor",t.blendColorDstFactor||"zero"),o=ap("blendAlphaSrcFactor",t.blendAlphaSrcFactor||"one"),a=ap("blendAlphaDstFactor",t.blendAlphaDstFactor||"zero");r.blendFuncSeparate(s,i,o,a)}}(e,t),Cf(s.gl,n),r(e)}finally{s.popState()}}(this.device,r,p.glParameters,()=>{d&&l?this.device.gl.drawElementsInstanced(h,o||0,f,c,a||0):d?this.device.gl.drawElements(h,o||0,f,c):l?this.device.gl.drawArraysInstanced(h,c,o||0,a||0):this.device.gl.drawArrays(h,c,o||0),u&&u.end()}),i.unbindAfterRender(n),!0}async _linkShaders(){const{gl:e}=this.device;if(e.attachShader(this.handle,this.vs.handle),e.attachShader(this.handle,this.fs.handle),Or.time(4,`linkProgram for ${this.id}`)(),e.linkProgram(this.handle),Or.timeEnd(4,`linkProgram for ${this.id}`)(),Or.level,!this.device.features.has("compilation-status-async-webgl")){const e=this._getLinkStatus();return void this._reportLinkStatus(e)}Or.once(1,"RenderPipeline linking is asynchronous")(),await this._waitForLinkComplete(),Or.info(2,`RenderPipeline ${this.id} - async linking complete: ${this.linkStatus}`)();const t=this._getLinkStatus();this._reportLinkStatus(t)}async _reportLinkStatus(e){var t;if("success"!==e){const n="link-error"===e?"Link error":"Validation error";switch(this.vs.compilationStatus){case"error":throw this.vs.debugShader(),new Error(`${this} ${n} during compilation of ${this.vs}`);case"pending":await this.vs.asyncCompilationStatus,this.vs.debugShader()}switch(null==(t=this.fs)?void 0:t.compilationStatus){case"error":throw this.fs.debugShader(),new Error(`${this} ${n} during compilation of ${this.fs}`);case"pending":await this.fs.asyncCompilationStatus,this.fs.debugShader()}const r=this.device.gl.getProgramInfoLog(this.handle);this.device.reportError(new Error(`${n} during ${e}: ${r}`),this)(),this.device.debug()}}_getLinkStatus(){const{gl:e}=this.device;return e.getProgramParameter(this.handle,35714)?(e.validateProgram(this.handle),e.getProgramParameter(this.handle,35715)?(this.linkStatus="success","success"):(this.linkStatus="error","validation-error")):(this.linkStatus="error","link-error")}async _waitForLinkComplete(){const e=async e=>await new Promise(t=>setTimeout(t,e));if(!this.device.features.has("compilation-status-async-webgl"))return void(await e(10));const{gl:t}=this.device;for(;;){if(t.getProgramParameter(this.handle,37297))return;await e(10)}}_areTexturesRenderable(){let e=!0;for(const t of this.shaderLayout.bindings)this.bindings[t.name]||this.bindings[t.name.replace(/Uniforms$/,"")]||(Or.warn(`Binding ${t.name} not found in ${this.id}`)(),e=!1);return e}_applyBindings(){if("success"!==this.linkStatus)return;const{gl:e}=this.device;e.useProgram(this.handle);let t=0,n=0;for(const r of this.shaderLayout.bindings){const s=this.bindings[r.name]||this.bindings[r.name.replace(/Uniforms$/,"")];if(!s)throw new Error(`No value for binding ${r.name} in ${this.id}`);switch(r.type){case"uniform":const{name:i}=r,o=e.getUniformBlockIndex(this.handle,i);if(4294967295===o)throw new Error(`Invalid uniform block name ${i}`);e.uniformBlockBinding(this.handle,n,o),s instanceof tp?e.bindBufferBase(35345,n,s.handle):e.bindBufferRange(35345,n,s.buffer.handle,s.offset||0,s.size||s.buffer.byteLength-s.offset),n+=1;break;case"texture":if(!(s instanceof pp||s instanceof gp||s instanceof Zf))throw new Error("texture");let a;if(s instanceof pp)a=s.texture;else if(s instanceof gp)a=s;else{if(!(s instanceof Zf&&s.colorAttachments[0]instanceof pp))throw new Error("No texture");Or.warn("Passing framebuffer in texture binding may be deprecated. Use fbo.colorAttachments[0] instead")(),a=s.colorAttachments[0].texture}e.activeTexture(33984+t),e.bindTexture(a.glTarget,a.handle),t+=1;break;case"sampler":break;case"storage":case"read-only-storage":throw new Error(`binding type '${r.type}' not supported in WebGL`)}}}_applyUniforms(){for(const e of this.shaderLayout.uniforms||[]){const{name:t,location:n,type:r,textureUnit:s}=e,i=this.uniforms[t]??s;void 0!==i&&Tp(this.device.gl,n,r,i)}}}class Ap extends Ks{constructor(e){super(e,{}),r(this,"device"),r(this,"handle",null),r(this,"commands",[]),this.device=e}_executeCommands(e=this.commands){for(const t of e)switch(t.name){case"copy-buffer-to-buffer":Rp(this.device,t.options);break;case"copy-buffer-to-texture":Cp(this.device,t.options);break;case"copy-texture-to-buffer":kp(this.device,t.options);break;case"copy-texture-to-texture":Pp(this.device,t.options);break;default:throw new Error(t.name)}}}function Rp(e,t){const n=t.sourceBuffer,r=t.destinationBuffer;e.gl.bindBuffer(36662,n.handle),e.gl.bindBuffer(36663,r.handle),e.gl.copyBufferSubData(36662,36663,t.sourceOffset??0,t.destinationOffset??0,t.size),e.gl.bindBuffer(36662,null),e.gl.bindBuffer(36663,null)}function Cp(e,t){throw new Error("Not implemented")}function kp(e,t){const{sourceTexture:n,mipLevel:r=0,aspect:s="all",width:i=t.sourceTexture.width,height:o=t.sourceTexture.height,depthOrArrayLayers:a=0,origin:l=[0,0],destinationBuffer:c,byteOffset:u=0,bytesPerRow:h,rowsPerImage:d}=t;if("all"!==s)throw new Error("aspect not supported in WebGL");if(0!==r||0!==a||h||d)throw new Error("not implemented");const{framebuffer:f,destroyFramebuffer:p}=Ip(n);let g;try{const t=c,n=i||f.width,r=o||f.height,s=$f(f.colorAttachments[0].texture.props.format),a=s.format,h=s.type;e.gl.bindBuffer(35051,t.handle),g=e.gl.bindFramebuffer(36160,f.handle),e.gl.readPixels(l[0],l[1],n,r,a,h,u)}finally{e.gl.bindBuffer(35051,null),void 0!==g&&e.gl.bindFramebuffer(36160,g),p&&f.destroy()}}function Pp(e,t){const{sourceTexture:n,destinationMipLevel:r=0,origin:s=[0,0],destinationOrigin:i=[0,0],destinationTexture:o}=t;let{width:a=t.destinationTexture.width,height:l=t.destinationTexture.height}=t;const{framebuffer:c,destroyFramebuffer:u}=Ip(n),[h,d]=s,[f,p,g]=i,m=e.gl.bindFramebuffer(36160,c.handle);let _,y;if(!(o instanceof gp))throw new Error("invalid destination");switch(_=o,a=Number.isFinite(a)?a:_.width,l=Number.isFinite(l)?l:_.height,_._bind(0),y=_.glTarget,y){case 3553:case 34067:e.gl.copyTexSubImage2D(y,r,f,p,h,d,a,l);break;case 35866:case 32879:e.gl.copyTexSubImage3D(y,r,f,p,g,h,d,a,l)}_&&_._unbind(),e.gl.bindFramebuffer(36160,m),u&&c.destroy()}function Ip(e){if(e instanceof Is){const{width:t,height:n,id:r}=e;return{framebuffer:e.device.createFramebuffer({id:`framebuffer-for-${r}`,width:t,height:n,colorAttachments:[e]}),destroyFramebuffer:!0}}return{framebuffer:e,destroyFramebuffer:!1}}const Mp=[1,2,4,8];class Np extends Ws{constructor(e,t){var n;let s;if(super(e,t),r(this,"device"),r(this,"handle",null),r(this,"glParameters",{}),this.device=e,!(null==(n=null==t?void 0:t.parameters)?void 0:n.viewport))if(null==t?void 0:t.framebuffer){const{width:e,height:n}=t.framebuffer;s=[0,0,e,n]}else{const[t,n]=e.getDefaultCanvasContext().getDrawingBufferSize();s=[0,0,t,n]}this.device.pushState(),this.setParameters({viewport:s,...this.props.parameters});const i=this.props.framebuffer;if(this.props.framebuffer&&(null==i?void 0:i.handle)){const e=this.props.framebuffer.colorAttachments.map((e,t)=>36064+t);this.device.gl.drawBuffers(e)}else this.device.gl.drawBuffers([1029]);this.clear()}end(){this.device.popState()}pushDebugGroup(e){}popDebugGroup(){}insertDebugMarker(e){}setParameters(e={}){const t={...this.glParameters};t.framebuffer=this.props.framebuffer||null,this.props.depthReadOnly&&(t.depthMask=!this.props.depthReadOnly),t.stencilMask=this.props.stencilReadOnly?0:1,t[35977]=this.props.discard,e.viewport&&(e.viewport.length>=6?(t.viewport=e.viewport.slice(0,4),t.depthRange=[e.viewport[4],e.viewport[5]]):t.viewport=e.viewport),e.scissorRect&&(t.scissorTest=!0,t.scissor=e.scissorRect),e.blendConstant&&(t.blendColor=e.blendConstant),e.stencilReference&&(t[2967]=e.stencilReference),"colorMask"in e&&(t.colorMask=Mp.map(t=>Boolean(t&e.colorMask))),this.glParameters=t,Cf(this.device.gl,t)}beginOcclusionQuery(e){const t=this.props.occlusionQuerySet;null==t||t.beginOcclusionQuery()}endOcclusionQuery(){const e=this.props.occlusionQuerySet;null==e||e.endOcclusionQuery()}clear(){const e={...this.glParameters};let t=0;this.props.clearColors&&this.props.clearColors.forEach((e,t)=>{e&&this.clearColorBuffer(t,e)}),!1!==this.props.clearColor&&void 0===this.props.clearColors&&(t|=16384,e.clearColor=this.props.clearColor),!1!==this.props.clearDepth&&(t|=256,e.clearDepth=this.props.clearDepth),!1!==this.props.clearStencil&&(t|=1024,e.clearStencil=this.props.clearStencil),0!==t&&fp(this.device.gl,e,()=>{this.device.gl.clear(t)})}clearColorBuffer(e=0,t=[0,0,0,0]){fp(this.device.gl,{framebuffer:this.props.framebuffer},()=>{switch(t.constructor){case Int8Array:case Int16Array:case Int32Array:this.device.gl.clearBufferiv(6144,e,t);break;case Uint8Array:case Uint8ClampedArray:case Uint16Array:case Uint32Array:this.device.gl.clearBufferuiv(6144,e,t);break;case Float32Array:this.device.gl.clearBufferfv(6144,e,t);break;default:throw new Error("clearColorBuffer: color must be typed array")}})}}class Lp extends qs{constructor(e,t){super(e,t),r(this,"device"),r(this,"handle",null),r(this,"commandBuffer"),this.device=e,this.commandBuffer=new Ap(e)}destroy(){}finish(){return this.commandBuffer}beginRenderPass(e){return new Np(this.device,e)}beginComputePass(e){throw new Error("ComputePass not supported in WebGL")}copyBufferToBuffer(e){this.commandBuffer.commands.push({name:"copy-buffer-to-buffer",options:e})}copyBufferToTexture(e){this.commandBuffer.commands.push({name:"copy-buffer-to-texture",options:e})}copyTextureToBuffer(e){this.commandBuffer.commands.push({name:"copy-texture-to-buffer",options:e})}copyTextureToTexture(e){this.commandBuffer.commands.push({name:"copy-texture-to-texture",options:e})}pushDebugGroup(e){}popDebugGroup(){}insertDebugMarker(e){}resolveQuerySet(e,t,n){}}class Op extends si{constructor(e,t){super(e,t),r(this,"device"),r(this,"handle"),r(this,"buffer",null),r(this,"bufferValue",null),this.device=e,this.handle=this.device.gl.createVertexArray()}get[Symbol.toStringTag](){return"VertexArray"}static isConstantAttributeZeroSupported(e){return"Chrome"==(We()?ze()?"Electron":(Ge.userAgent||"").indexOf("Edge")>-1?"Edge":globalThis.chrome?"Chrome":globalThis.safari?"Safari":globalThis.mozInnerScreenX?"Firefox":"Unknown":"Node")}destroy(){var e;super.destroy(),this.buffer&&(null==(e=this.buffer)||e.destroy()),this.handle&&(this.device.gl.deleteVertexArray(this.handle),this.handle=void 0)}setIndexBuffer(e){const t=e;if(t&&34963!==t.glTarget)throw new Error("Use .setBuffer()");this.device.gl.bindVertexArray(this.handle),this.device.gl.bindBuffer(34963,t?t.handle:null),this.indexBuffer=t,this.device.gl.bindVertexArray(null)}setBuffer(e,t){const n=t;if(34963===n.glTarget)throw new Error("Use .setIndexBuffer()");const{size:r,type:s,stride:i,offset:o,normalized:a,integer:l,divisor:c}=this._getAccessor(e);this.device.gl.bindVertexArray(this.handle),this.device.gl.bindBuffer(34962,n.handle),l?this.device.gl.vertexAttribIPointer(e,r,s,i,o):this.device.gl.vertexAttribPointer(e,r,s,a,i,o),this.device.gl.bindBuffer(34962,null),this.device.gl.enableVertexAttribArray(e),this.device.gl.vertexAttribDivisor(e,c||0),this.attributes[e]=n,this.device.gl.bindVertexArray(null)}setConstantWebGL(e,t){this._enable(e,!1),this.attributes[e]=t}bindBeforeRender(){this.device.gl.bindVertexArray(this.handle),this._applyConstantAttributes()}unbindAfterRender(){this.device.gl.bindVertexArray(null)}_applyConstantAttributes(){for(let e=0;e{for(const t in e)this.setBuffer(t,e[t])})}setBuffer(e,t){const n=this._getVaryingIndex(e),{buffer:r,byteLength:s,byteOffset:i}=this._getBufferRange(t);if(n<0)return this.unusedBuffers[e]=r,void Or.warn(`${this.id} unusedBuffers varying buffer ${e}`)();this.buffers[n]={buffer:r,byteLength:s,byteOffset:i},this.bindOnUse||this._bindBuffer(n,r,i,s)}getBuffer(e){if(Dp(e))return this.buffers[e]||null;const t=this._getVaryingIndex(e);return t>=0?this.buffers[t]:null}bind(e=this.handle){if("function"!=typeof e)return this.gl.bindTransformFeedback(36386,e),this;let t;return this._bound?t=e():(this.gl.bindTransformFeedback(36386,this.handle),this._bound=!0,t=e(),this._bound=!1,this.gl.bindTransformFeedback(36386,null)),t}unbind(){this.bind(null)}_getBufferRange(e){if(e instanceof tp)return{buffer:e,byteOffset:0,byteLength:e.byteLength};const{buffer:t,byteOffset:n=0,byteLength:r=e.buffer.byteLength}=e;return{buffer:t,byteOffset:n,byteLength:r}}_getVaryingIndex(e){if(Dp(e))return Number(e);for(const t of this.layout.varyings||[])if(e===t.name)return t.location;return-1}_bindBuffers(){for(const e in this.buffers){const{buffer:t,byteLength:n,byteOffset:r}=this._getBufferRange(this.buffers[e]);this._bindBuffer(Number(e),t,r,n)}}_unbindBuffers(){for(const e in this.buffers)this.gl.bindBufferBase(35982,Number(e),null)}_bindBuffer(e,t,n=0,r){const s=t&&t.handle;s&&void 0!==r?this.gl.bindBufferRange(35982,e,s,n,r):this.gl.bindBufferBase(35982,e,s)}}function Dp(e){return"number"==typeof e?Number.isInteger(e):/^\d+$/.test(e)}class Bp extends ci{constructor(e,t){if(super(e,t),r(this,"device"),r(this,"handle"),r(this,"target",null),r(this,"_queryPending",!1),r(this,"_pollingPromise",null),this.device=e,t.count>1)throw new Error("WebGL QuerySet can only have one value");const n=this.device.gl.createQuery();if(!n)throw new Error("WebGL query not supported");this.handle=n,Object.seal(this)}get[Symbol.toStringTag](){return"Query"}destroy(){this.device.gl.deleteQuery(this.handle)}beginTimestampQuery(){return this._begin(35007)}endTimestampQuery(){this._end()}beginOcclusionQuery(e){return this._begin((null==e?void 0:e.conservative)?36202:35887)}endOcclusionQuery(){this._end()}beginTransformFeedbackQuery(){return this._begin(35976)}endTransformFeedbackQuery(){this._end()}async resolveQuery(){return[await this.pollQuery()]}_begin(e){this._queryPending||(this.target=e,this.device.gl.beginQuery(this.target,this.handle))}_end(){this._queryPending||this.target&&(this.device.gl.endQuery(this.target),this.target=null,this._queryPending=!0)}isResultAvailable(){if(!this._queryPending)return!1;const e=this.device.gl.getQueryParameter(this.handle,34919);return e&&(this._queryPending=!1),e}isTimerDisjoint(){return this.device.gl.getParameter(36795)}getResult(){return this.device.gl.getQueryParameter(this.handle,34918)}getTimerMilliseconds(){return this.getResult()/1e6}pollQuery(e=Number.POSITIVE_INFINITY){if(this._pollingPromise)return this._pollingPromise;let t=0;return this._pollingPromise=new Promise((n,r)=>{const s=()=>{this.isResultAvailable()?(n(this.getResult()),this._pollingPromise=null):t++>e?(r("Timed out"),this._pollingPromise=null):requestAnimationFrame(s)};requestAnimationFrame(s)}),this._pollingPromise}}function Up(e){switch(e){case 6406:case 33326:case 6403:case 36244:return 1;case 33339:case 33340:case 33328:case 33320:case 33319:return 2;case 6407:case 36248:case 34837:return 3;case 6408:case 36249:case 34836:return 4;default:return 0}}const jp={5124:"sint32",5125:"uint32",5122:"sint16",5123:"uint16",5120:"sint8",5121:"uint8",5126:"float32",5131:"float16",33635:"uint16",32819:"uint16",32820:"uint16",33640:"uint32",35899:"uint32",35902:"uint32",34042:"uint32",36269:"uint32"};function Vp(e){return e instanceof js?{framebuffer:e,deleteFramebuffer:!1}:{framebuffer:Gp(e),deleteFramebuffer:!0}}function Gp(e,t){const{device:n,width:r,height:s,id:i}=e;return n.createFramebuffer({...t,id:`framebuffer-for-${i}`,width:r,height:s,colorAttachments:[e]})}class zp extends gs{constructor(e){var t,n;super({...e,id:e.id||ep("webgl-device")}),r(this,"type","webgl"),r(this,"handle"),r(this,"features"),r(this,"limits"),r(this,"info"),r(this,"canvasContext"),r(this,"preferredColorFormat","rgba8unorm"),r(this,"preferredDepthFormat","depth24plus"),r(this,"commandEncoder"),r(this,"lost"),r(this,"_resolveContextLost"),r(this,"gl"),r(this,"_constants"),r(this,"_extensions",{}),r(this,"_polyfilled",!1),r(this,"spectorJS");const s=gs._getCanvasContextProps(e);if(!s)throw new Error("WebGLDevice requires props.createCanvasContext to be set");let i=null==(n=null==(t=s.canvas)?void 0:t.gl)?void 0:n.device;if(i)throw new Error(`WebGL context already attached to device ${i.id}`);this.canvasContext=new Qf(this,s),this.lost=new Promise(e=>{this._resolveContextLost=e});const o={...e.webgl};"premultiplied"===s.alphaMode&&(o.premultipliedAlpha=!0),void 0!==e.powerPreference&&(o.powerPreference=e.powerPreference);const a=this.props._handle||function(e,t,n){let r="";const s={preserveDrawingBuffer:!0,...n};let i=null;if(i||(i=e.getContext("webgl2",s)),s.failIfMajorPerformanceCaveat&&(r||(r="Only software GPU is available. Set `failIfMajorPerformanceCaveat: false` to allow.")),i||n.failIfMajorPerformanceCaveat||(s.failIfMajorPerformanceCaveat=!1,i=e.getContext("webgl2",s),i.luma||(i.luma={}),i.luma.softwareRenderer=!0),i||(i=e.getContext("webgl",{}),i&&(i=null,r||(r="Your browser only supports WebGL1"))),!i)throw r||(r="Your browser does not support WebGL"),new Error(`Failed to create WebGL context: ${r}`);const{onContextLost:o,onContextRestored:a}=t;return e.addEventListener("webglcontextlost",e=>o(e),!1),e.addEventListener("webglcontextrestored",e=>a(e),!1),i.luma||(i.luma={}),i}(this.canvasContext.canvas,{onContextLost:e=>{var t;return null==(t=this._resolveContextLost)?void 0:t.call(this,{reason:"destroyed",message:"Entered sleep mode, or too many apps or browser tabs are using the GPU."})},onContextRestored:e=>{}},o);if(!a)throw new Error("WebGL context creation failed");if(i=a.device,i){if(e._reuseDevices)return Or.log(1,`Not creating a new Device, instead returning a reference to Device ${i.id} already attached to WebGL context`,i)(),i._reused=!0,i;throw new Error(`WebGL context already attached to device ${i.id}`)}this.handle=a,this.gl=a,this.spectorJS=function(e){var t;if(!(e={...af,...e}).debugSpectorJS)return null;if(!sf&&globalThis.SPECTOR&&!(null==(t=globalThis.luma)?void 0:t.spector)){Or.probe(1,"SPECTOR found and initialized. Start with `luma.spector.displayUI()`")();const{Spector:e}=globalThis.SPECTOR;sf=new e,globalThis.luma&&(globalThis.luma.spector=sf)}if(!sf)return null;if(of||(of=!0,sf.spyCanvases(),null==sf||sf.onCaptureStarted.add(e=>Or.info("Spector capture started:",e)()),null==sf||sf.onCapture.add(e=>{Or.info("Spector capture complete:",e)(),null==sf||sf.getResultUI(),null==sf||sf.resultView.display(),null==sf||sf.resultView.addCapture(e)})),e.gl){const t=e.gl,n=t.device;null==sf||sf.startCapture(e.gl,500),t.device=n,new Promise(e=>setTimeout(e,2e3)).then(e=>{Or.info("Spector capture stopped after 2 seconds")(),null==sf||sf.stopCapture()})}return sf}({...this.props,gl:this.handle}),this.gl.device=this,this.gl._version=2,this.info=function(e,t){const n=e.getParameter(7936),r=e.getParameter(7937);Of(e,"WEBGL_debug_renderer_info",t);const s=t.WEBGL_debug_renderer_info,i=e.getParameter(s?s.UNMASKED_VENDOR_WEBGL:7936)||n,o=e.getParameter(s?s.UNMASKED_RENDERER_WEBGL:7937)||r,a=e.getParameter(7938),l=Ff(i,o),c=function(e,t){return/Metal/i.exec(e)||/Metal/i.exec(t)?"metal":/ANGLE/i.exec(e)||/ANGLE/i.exec(t)?"opengl":"unknown"}(i,o),u=function(e,t){if(/SwiftShader/i.exec(e)||/SwiftShader/i.exec(t))return"cpu";switch(Ff(e,t)){case"intel":return"integrated";case"software":return"cpu";case"unknown":return"unknown";default:return"discrete"}}(i,o);return{type:"webgl",gpu:l,gpuType:u,gpuBackend:c,vendor:i,renderer:o,version:a,shadingLanguage:"glsl",shadingLanguageVersion:300}}(this.gl,this._extensions),this.limits=new Kf(this.gl),this.features=new Yf(this.gl,this._extensions,this.props._disabledFeatures),this.props._initializeFeatures&&this.features.initializeFeatures(),new Mf(this.gl,{log:(...e)=>Or.log(1,...e)()}).trackState(this.gl,{copyState:!1});const l=e.debugWebGL||e.debug,c=e.debugWebGL;l&&(this.gl=cf(this.gl,{debugWebGL:l,traceWebGL:c}),Or.warn("WebGL debug mode activated. Performance reduced.")(),e.debugWebGL&&(Or.level=Math.max(Or.level,1))),this.commandEncoder=new Lp(this,{id:`${this}-command-encoder`})}get[Symbol.toStringTag](){return"WebGLDevice"}toString(){return`${this[Symbol.toStringTag]}(${this.id})`}isVertexFormatSupported(e){return"unorm8x4-bgra"!==e}destroy(){this.props._reuseDevices||this._reused||delete this.gl.device}get isLost(){return this.gl.isContextLost()}getTextureByteAlignment(){return 4}createCanvasContext(e){throw new Error("WebGL only supports a single canvas")}createBuffer(e){const t=this._normalizeBufferProps(e);return new tp(this,t)}createTexture(e){return new gp(this,e)}createExternalTexture(e){throw new Error("createExternalTexture() not implemented")}createSampler(e){return new dp(this,e)}createShader(e){return new rp(this,e)}createFramebuffer(e){return new Zf(this,e)}createVertexArray(e){return new Op(this,e)}createTransformFeedback(e){return new Fp(this,e)}createQuerySet(e){return new Bp(this,e)}createRenderPipeline(e){return new Sp(this,e)}createComputePipeline(e){throw new Error("ComputePipeline not supported in WebGL")}createCommandEncoder(e={}){return new Lp(this,e)}submit(e){e||(e=this.commandEncoder.finish(),this.commandEncoder.destroy(),this.commandEncoder=this.createCommandEncoder({id:`${this.id}-default-encoder`})),e._executeCommands()}readPixelsToArrayWebGL(e,t){return function(e,t){var n;const{sourceX:r=0,sourceY:s=0,sourceAttachment:i=0}=t||{};let{target:o=null,sourceWidth:a,sourceHeight:l,sourceDepth:c,sourceFormat:u,sourceType:h}=t||{};const{framebuffer:d,deleteFramebuffer:f}=Vp(e),{gl:p,handle:g}=d;a||(a=d.width),l||(l=d.height);const m=null==(n=d.colorAttachments[i])?void 0:n.texture;if(!m)throw new Error(`Invalid framebuffer attachment ${i}`);c=(null==m?void 0:m.depth)||1,u||(u=(null==m?void 0:m.glFormat)||6408),h||(h=(null==m?void 0:m.glType)||5121),_=o,y=h,b=u,v=a,x=l,o=_||(y||(y=5121),new(Wr(jp[y]))(v*x*Up(b)));var _,y,b,v,x;const w=zr(o);h=h||wp[w];const E=p.bindFramebuffer(36160,g);return p.readBuffer(36064+i),p.readPixels(r,s,a,l,u,h,o),p.readBuffer(36064),p.bindFramebuffer(36160,E||null),f&&d.destroy(),o}(e,t)}readPixelsToBufferWebGL(e,t){return function(e,t){const{target:n,sourceX:r=0,sourceY:s=0,sourceFormat:i=6408,targetByteOffset:o=0}=t||{};let{sourceWidth:a,sourceHeight:l,sourceType:c}=t||{};const{framebuffer:u,deleteFramebuffer:h}=Vp(e);a=a||u.width,l=l||u.height;const d=u;c=c||5121;let f=n;if(!f){const e=o+a*l*Up(i)*function(e){switch(e){case 5121:return 1;case 33635:case 32819:case 32820:return 2;case 5126:return 4;default:return 0}}(c);f=d.device.createBuffer({byteLength:e})}const p=e.device.createCommandEncoder();return p.copyTextureToBuffer({sourceTexture:e,width:a,height:l,origin:[r,s],destinationBuffer:f,byteOffset:o}),p.destroy(),h&&u.destroy(),f}(e,t)}setParametersWebGL(e){Cf(this.gl,e)}getParametersWebGL(e){return kf(this.gl,e)}withParametersWebGL(e,t){return fp(this.gl,e,t)}resetWebGL(){Or.warn("WebGLDevice.resetWebGL is deprecated, use only for debugging")(),Cf(this.gl,pf)}_getDeviceSpecificTextureFormatCapabilities(e){return function(e,t,n){let r=t.create;const s=Hf[t.format];return void 0===(null==s?void 0:s.gl)&&(r=!1),(null==s?void 0:s.x)&&(r=r&&Boolean(Of(e,s.x,n))),{format:t.format,create:r&&t.create,render:r&&t.render,filter:r&&t.filter,blend:r&&t.blend,store:r&&t.store}}(this.gl,e,this._extensions)}loseDevice(){var e;let t=!1;const n=this.getExtension("WEBGL_lose_context").WEBGL_lose_context;return n&&(t=!0,n.loseContext()),null==(e=this._resolveContextLost)||e.call(this,{reason:"destroyed",message:"Application triggered context loss"}),t}pushState(){Mf.get(this.gl).push()}popState(){Mf.get(this.gl).pop()}getGLKey(e,t){const n=Number(e);for(const r in this.gl)if(this.gl[r]===n)return`GL.${r}`;return(null==t?void 0:t.emptyIfUnknown)?"":String(e)}getGLKeys(e){const t={emptyIfUnknown:!0};return Object.entries(e).reduce((e,[n,r])=>(e[`${n}:${this.getGLKey(n,t)}`]=`${r}:${this.getGLKey(r,t)}`,e),{})}setConstantAttributeWebGL(e,t){const n=this.limits.maxVertexAttributes;this._constants=this._constants||new Array(n).fill(null);const r=this._constants[e];switch(r&&function(e,t){if(!e||!t||e.length!==t.length||e.constructor!==t.constructor)return!1;for(let n=0;n$n.error(e.message,e.cause)(),onHover:null,onClick:null,onDragStart:null,onDrag:null,onDragEnd:null,_onMetrics:null,getCursor:({isDragging:e})=>e?"grabbing":"grab",getTooltip:null,debug:!1,drawPickingColors:!1};class Xp{constructor(e){var t;this.width=0,this.height=0,this.userData={},this.device=null,this.canvas=null,this.viewManager=null,this.layerManager=null,this.effectManager=null,this.deckRenderer=null,this.deckPicker=null,this.eventManager=null,this.widgetManager=null,this.tooltip=null,this.animationLoop=null,this.cursorState={isHovering:!1,isDragging:!1},this.stats=new Nt({id:"deck.gl"}),this.metrics={fps:0,setPropsTime:0,updateAttributesTime:0,framesRedrawn:0,pickTime:0,pickCount:0,gpuTime:0,gpuTimePerFrame:0,cpuTime:0,cpuTimePerFrame:0,bufferMemory:0,textureMemory:0,renderbufferMemory:0,gpuMemory:0},this._metricsCounter=0,this._needsRedraw="Initial render",this._pickRequest={mode:"hover",x:-1,y:-1,radius:0,event:null},this._lastPointerDownInfo=null,this._onPointerMove=e=>{const{_pickRequest:t}=this;if("pointerleave"===e.type)t.x=-1,t.y=-1,t.radius=0;else{if(e.leftButton||e.rightButton)return;{const n=e.offsetCenter;if(!n)return;t.x=n.x,t.y=n.y,t.radius=this.props.pickingRadius}}this.layerManager&&(this.layerManager.context.mousePosition={x:t.x,y:t.y}),t.event=e},this._onEvent=e=>{const t=Ic[e.type],n=e.offsetCenter;if(!t||!n||!this.layerManager)return;const r=this.layerManager.getLayers(),s=this.deckPicker.getLastPickedObject({x:n.x,y:n.y,layers:r,viewports:this.getViewports(n)},this._lastPointerDownInfo),{layer:i}=s,o=i&&(i[t]||i.props[t]),a=this.props[t];let l=!1;o&&(l=o.call(i,s,e)),l||(null==a||a(s,e),this.widgetManager.onEvent(s,e))},this._onPointerDown=e=>{var t;if("webgpu"===(null==(t=this.device)?void 0:t.type))return;const n=e.offsetCenter,r=this._pick("pickObject","pickObject Time",{x:n.x,y:n.y,radius:this.props.pickingRadius});this._lastPointerDownInfo=r.result[0]||r.emptyInfo},this.props={...$p,...e},(e=this.props).viewState&&e.initialViewState&&$n.warn("View state tracking is disabled. Use either `initialViewState` for auto update or `viewState` for manual update.")(),this.viewState=this.props.initialViewState,e.device&&(this.device=e.device);let n=this.device;if(!n&&e.gl){e.gl instanceof WebGLRenderingContext&&$n.error("WebGL1 context not supported.")();const r=null==(t=this.props.deviceProps)?void 0:t.onResize;n=ff.attach(e.gl,{...this.props.deviceProps,onResize:(e,t)=>{const{width:n,height:s}=e.canvas;e.drawingBufferWidth=n,e.drawingBufferHeight=s,this._needsRedraw="Canvas resized",null==r||r(e,t)}})}n||(n=this._createDevice(e)),this.animationLoop=this._createAnimationLoop(n,e),this.setProps(e),e._typedArrayManagerProps&&Yu.setOptions(e._typedArrayManagerProps),this.animationLoop.start()}finalize(){var e,t,n,r,s,i,o,a,l,c;null==(e=this.animationLoop)||e.stop(),null==(t=this.animationLoop)||t.destroy(),this.animationLoop=null,this._lastPointerDownInfo=null,null==(n=this.layerManager)||n.finalize(),this.layerManager=null,null==(r=this.viewManager)||r.finalize(),this.viewManager=null,null==(s=this.effectManager)||s.finalize(),this.effectManager=null,null==(i=this.deckRenderer)||i.finalize(),this.deckRenderer=null,null==(o=this.deckPicker)||o.finalize(),this.deckPicker=null,null==(a=this.eventManager)||a.destroy(),this.eventManager=null,null==(l=this.widgetManager)||l.finalize(),this.widgetManager=null,this.props.canvas||this.props.device||this.props.gl||!this.canvas||(null==(c=this.canvas.parentElement)||c.removeChild(this.canvas),this.canvas=null)}setProps(e){var t,n,r,s,i,o,a;this.stats.get("setProps Time").timeStart(),"onLayerHover"in e&&$n.removed("onLayerHover","onHover")(),"onLayerClick"in e&&$n.removed("onLayerClick","onClick")(),e.initialViewState&&!rd(this.props.initialViewState,e.initialViewState,3)&&(this.viewState=e.initialViewState),Object.assign(this.props,e),this._setCanvasSize(this.props);const l=Object.create(this.props);Object.assign(l,{views:this._getViews(),width:this.width,height:this.height,viewState:this._getViewState()}),e.device&&e.device.id!==(null==(t=this.device)?void 0:t.id)&&(null==(n=this.animationLoop)||n.stop(),this.canvas!==(null==(r=e.device.canvasContext)?void 0:r.canvas)&&(null==(s=this.canvas)||s.remove(),null==(i=this.eventManager)||i.destroy(),this.canvas=null),$n.log(`recreating animation loop for new device! id=${e.device.id}`)(),this.animationLoop=this._createAnimationLoop(e.device,e),this.animationLoop.start()),null==(o=this.animationLoop)||o.setProps(l),void 0!==e.useDevicePixels&&(null==(a=this.device)?void 0:a.canvasContext)&&this.device.canvasContext.setProps({useDevicePixels:e.useDevicePixels}),this.layerManager&&(this.viewManager.setProps(l),this.layerManager.activateViewport(this.getViewports()[0]),this.layerManager.setProps(l),this.effectManager.setProps(l),this.deckRenderer.setProps(l),this.deckPicker.setProps(l),this.widgetManager.setProps(l)),this.stats.get("setProps Time").timeEnd()}needsRedraw(e={clearRedrawFlags:!1}){if(!this.layerManager)return!1;if(this.props._animate)return"Deck._animate";let t=this._needsRedraw;e.clearRedrawFlags&&(this._needsRedraw=!1);const n=this.viewManager.needsRedraw(e),r=this.layerManager.needsRedraw(e),s=this.effectManager.needsRedraw(e),i=this.deckRenderer.needsRedraw(e);return t=t||n||r||s||i,t}redraw(e){if(!this.layerManager)return;let t=this.needsRedraw({clearRedrawFlags:!0});t=e||t,t&&(this.stats.get("Redraw Count").incrementCount(),this.props._customRender?this.props._customRender(t):this._drawLayers(t))}get isInitialized(){return null!==this.viewManager}getViews(){return fd(this.viewManager),this.viewManager.views}getViewports(e){return fd(this.viewManager),this.viewManager.getViewports(e)}getCanvas(){return this.canvas}pickObject(e){const t=this._pick("pickObject","pickObject Time",e).result;return t.length?t[0]:null}pickMultipleObjects(e){return e.depth=e.depth||10,this._pick("pickObject","pickMultipleObjects Time",e).result}pickObjects(e){return this._pick("pickObjects","pickObjects Time",e)}_addResources(e,t=!1){for(const n in e)this.layerManager.resourceManager.add({resourceId:n,data:e[n],forceUpdate:t})}_removeResources(e){for(const t of e)this.layerManager.resourceManager.remove(t)}_addDefaultEffect(e){this.effectManager.addDefaultEffect(e)}_addDefaultShaderModule(e){this.layerManager.addDefaultShaderModule(e)}_removeDefaultShaderModule(e){var t;null==(t=this.layerManager)||t.removeDefaultShaderModule(e)}_pick(e,t,n){fd(this.deckPicker);const{stats:r}=this;r.get("Pick Count").incrementCount(),r.get(t).timeStart();const s=this.deckPicker[e]({layers:this.layerManager.getLayers(n),views:this.viewManager.getViews(),viewports:this.getViewports(n),onViewportActive:this.layerManager.activateViewport,effects:this.effectManager.getEffects(),...n});return r.get(t).timeEnd(),s}_createCanvas(e){let t=e.canvas;return"string"==typeof t&&(t=document.getElementById(t),fd(t)),t||(t=document.createElement("canvas"),t.id=e.id||"deckgl-overlay",e.width&&"number"==typeof e.width&&(t.width=e.width),e.height&&"number"==typeof e.height&&(t.height=e.height),(e.parent||document.body).appendChild(t)),Object.assign(t.style,e.style),t}_setCanvasSize(e){var t;if(!this.canvas)return;const{width:n,height:r}=e;if(n||0===n){const e=Number.isFinite(n)?`${n}px`:n;this.canvas.style.width=e}if(r||0===r){const n=Number.isFinite(r)?`${r}px`:r;this.canvas.style.position=(null==(t=e.style)?void 0:t.position)||"absolute",this.canvas.style.height=n}}_updateCanvasSize(){var e,t;const{canvas:n}=this;if(!n)return;const r=n.clientWidth??n.width,s=n.clientHeight??n.height;r===this.width&&s===this.height||(this.width=r,this.height=s,null==(e=this.viewManager)||e.setProps({width:r,height:s}),null==(t=this.layerManager)||t.activateViewport(this.getViewports()[0]),this.props.onResize({width:r,height:s}))}_createAnimationLoop(e,t){const{gl:n,onError:r}=t;return new mh({device:e,autoResizeDrawingBuffer:!n,autoResizeViewport:!1,onInitialize:e=>this._setDevice(e.device),onRender:this._onRenderFrame.bind(this),onError:r})}_createDevice(e){var t,n,r;const s=null==(t=this.props.deviceProps)?void 0:t.createCanvasContext,i="object"==typeof s?s:void 0,o={adapters:[],_cacheShaders:!0,_cachePipelines:!0,...e.deviceProps};o.adapters.includes(ff)||o.adapters.push(ff);const a={alphaMode:"webgpu"===(null==(n=this.props.deviceProps)?void 0:n.type)?"premultiplied":void 0},l=null==(r=this.props.deviceProps)?void 0:r.onResize;return ys.createDevice({_reuseDevices:!0,type:"webgl",...o,createCanvasContext:{...a,...i,canvas:this._createCanvas(e),useDevicePixels:this.props.useDevicePixels,autoResize:!0},onResize:(e,t)=>{this._needsRedraw="Canvas resized",null==l||l(e,t)}})}_getViewState(){return this.props.viewState||this.viewState}_getViews(){const{views:e}=this.props,t=Array.isArray(e)?e:e?[e]:[new Id({id:"default-view"})];return t.length&&this.props.controller&&(t[0].props.controller=this.props.controller),t}_onContextLost(){const{onError:e}=this.props;this.animationLoop&&e&&e(new Error("WebGL context is lost"))}_pickAndCallback(){var e,t,n,r;if("webgpu"===(null==(e=this.device)?void 0:e.type))return;const{_pickRequest:s}=this;if(s.event){const{result:e,emptyInfo:i}=this._pick("pickObject","pickObject Time",s);this.cursorState.isHovering=e.length>0;let o=i,a=!1;for(const n of e)o=n,a=(null==(t=n.layer)?void 0:t.onHover(n,s.event))||a;a||(null==(r=(n=this.props).onHover)||r.call(n,o,s.event),this.widgetManager.onHover(o,s.event)),s.event=null}}_updateCursor(){const e=this.props.parent||this.canvas;e&&(e.style.cursor=this.props.getCursor(this.cursorState))}_setDevice(e){var t,n;if(this.device=e,!this.animationLoop)return;this.canvas||(this.canvas=null==(t=this.device.canvasContext)?void 0:t.canvas,!this.canvas.isConnected&&this.props.parent&&this.props.parent.insertBefore(this.canvas,this.props.parent.firstChild)),"webgl"===this.device.type&&this.device.setParametersWebGL({blend:!0,blendFunc:[770,771,1,771],polygonOffsetFill:!0,depthTest:!0,depthFunc:515}),this.props.onDeviceInitialized(this.device),"webgl"===this.device.type&&this.props.onWebGLInitialized(this.device.gl);const r=new fh;r.play(),this.animationLoop.attachTimeline(r),this.eventManager=new Rc(this.props.parent||this.canvas,{touchAction:this.props.touchAction,recognizers:Object.keys(Mc).map(e=>{var t;const[n,r,s,i]=Mc[e];return{recognizer:new n({...r,...null==(t=this.props.eventRecognizerOptions)?void 0:t[e],event:e}),recognizeWith:s,requestFailure:i}}),events:{pointerdown:this._onPointerDown,pointermove:this._onPointerMove,pointerleave:this._onPointerMove}});for(const i in Ic)this.eventManager.on(i,this._onEvent);this.viewManager=new sd({timeline:r,eventManager:this.eventManager,onViewStateChange:this._onViewStateChange.bind(this),onInteractionStateChange:this._onInteractionStateChange.bind(this),views:this._getViews(),viewState:this._getViewState(),width:this.width,height:this.height});const s=this.viewManager.getViewports()[0];this.layerManager=new nd(this.device,{deck:this,stats:this.stats,viewport:s,timeline:r}),this.effectManager=new Nd({deck:this,device:this.device}),this.deckRenderer=new Od(this.device),this.deckPicker=new Gd(this.device),this.widgetManager=new $d({deck:this,parentElement:null==(n=this.canvas)?void 0:n.parentElement}),this.widgetManager.addDefault(new Kd),this.setProps(this.props),this._updateCanvasSize(),this.props.onLoad()}_drawLayers(e,t){var n;const{device:r,gl:s}=this.layerManager.context;this.props.onBeforeRender({device:r,gl:s});const i={target:this.props._framebuffer,layers:this.layerManager.getLayers(),viewports:this.viewManager.getViewports(),onViewportActive:this.layerManager.activateViewport,views:this.viewManager.getViews(),pass:"screen",effects:this.effectManager.getEffects(),...t};null==(n=this.deckRenderer)||n.renderLayers(i),"screen"===i.pass&&this.widgetManager.onRedraw({viewports:i.viewports,layers:i.layers}),this.props.onAfterRender({device:r,gl:s})}_onRenderFrame(){var e;this._getFrameStats(),this._metricsCounter++%60==0&&(this._getMetrics(),this.stats.reset(),$n.table(4,this.metrics)(),this.props._onMetrics&&this.props._onMetrics(this.metrics)),this._updateCanvasSize(),this._updateCursor(),this.layerManager.updateLayers(),"webgpu"!==(null==(e=this.device)?void 0:e.type)&&this._pickAndCallback(),this.redraw(),this.viewManager&&this.viewManager.updateViewStates()}_onViewStateChange(e){const t=this.props.onViewStateChange(e)||e.viewState;this.viewState&&(this.viewState={...this.viewState,[e.viewId]:t},this.props.viewState||this.viewManager&&this.viewManager.setProps({viewState:this.viewState}))}_onInteractionStateChange(e){this.cursorState.isDragging=e.isDragging||!1,this.props.onInteractionStateChange(e)}_getFrameStats(){const{stats:e}=this;e.get("frameRate").timeEnd(),e.get("frameRate").timeStart();const t=this.animationLoop.stats;e.get("GPU Time").addTime(t.get("GPU Time").lastTiming),e.get("CPU Time").addTime(t.get("CPU Time").lastTiming)}_getMetrics(){const{metrics:e,stats:t}=this;e.fps=t.get("frameRate").getHz(),e.setPropsTime=t.get("setProps Time").time,e.updateAttributesTime=t.get("Update Attributes").time,e.framesRedrawn=t.get("Redraw Count").count,e.pickTime=t.get("pickObject Time").time+t.get("pickMultipleObjects Time").time+t.get("pickObjects Time").time,e.pickCount=t.get("Pick Count").count,e.gpuTime=t.get("GPU Time").time,e.cpuTime=t.get("CPU Time").time,e.gpuTimePerFrame=t.get("GPU Time").getAverageTime(),e.cpuTimePerFrame=t.get("CPU Time").getAverageTime();const n=ys.stats.get("Memory Usage");e.bufferMemory=n.get("Buffer Memory").count,e.textureMemory=n.get("Texture Memory").count,e.renderbufferMemory=n.get("Renderbuffer Memory").count,e.gpuMemory=n.get("GPU Memory").count}}Xp.defaultProps=$p,Xp.VERSION=Zn;const qp=zr;function Yp(e,t,n){const r="webgpu"===n&&"uint8"===t.type?"unorm8":t.type;return{attribute:e,format:t.size>1?`${r}x${t.size}`:t.type,byteOffset:t.offset||0}}function Kp(e){return e.stride||e.size*e.bytesPerElement}function Zp(e,t){t.offset&&$n.removed("shaderAttribute.offset","vertexOffset, elementOffset")();const n=Kp(e),r=(void 0!==t.vertexOffset?t.vertexOffset:e.vertexOffset||0)*n+(t.elementOffset||0)*e.bytesPerElement+(e.offset||0);return{...t,offset:r,stride:n}}class Qp{constructor(e,t,n){this._buffer=null,this.device=e,this.id=t.id||"",this.size=t.size||1;const r=t.logicalType||t.type,s="float64"===r;let i,{defaultValue:o}=t;o=Number.isFinite(o)?[o]:o||new Array(this.size).fill(0),i=s?"float32":!r&&t.isIndexed?"uint32":r||"float32";let a=function(e){switch(e){case"float64":return Float64Array;case"uint8":case"unorm8":return Uint8ClampedArray;default:return Wr(e)}}(r||i);this.doublePrecision=s,s&&!1===t.fp64&&(a=Float32Array),this.value=null,this.settings={...t,defaultType:a,defaultValue:o,logicalType:r,type:i,normalized:i.includes("norm"),size:this.size,bytesPerElement:a.BYTES_PER_ELEMENT},this.state={...n,externalBuffer:null,bufferAccessor:this.settings,allocatedValue:null,numInstances:0,bounds:null,constant:!1}}get isConstant(){return this.state.constant}get buffer(){return this._buffer}get byteOffset(){const e=this.getAccessor();return e.vertexOffset?e.vertexOffset*Kp(e):0}get numInstances(){return this.state.numInstances}set numInstances(e){this.state.numInstances=e}delete(){this._buffer&&(this._buffer.delete(),this._buffer=null),Yu.release(this.state.allocatedValue)}getBuffer(){return this.state.constant?null:this.state.externalBuffer||this._buffer}getValue(e=this.id,t=null){const n={};if(this.state.constant){const r=this.value;if(t){const s=Zp(this.getAccessor(),t),i=s.offset/r.BYTES_PER_ELEMENT,o=s.size||this.size;n[e]=r.subarray(i,i+o)}else n[e]=r}else n[e]=this.getBuffer();return this.doublePrecision&&(this.value instanceof Float64Array?n[`${e}64Low`]=n[e]:n[`${e}64Low`]=new Float32Array(this.size)),n}_getBufferLayout(e=this.id,t=null){const n=this.getAccessor(),r=[],s={name:this.id,byteStride:Kp(n),attributes:r};if(this.doublePrecision){const s=function(e,t){const n=Zp(e,t);return{high:n,low:{...n,offset:n.offset+4*e.size}}}(n,t||{});r.push(Yp(e,{...n,...s.high},this.device.type),Yp(`${e}64Low`,{...n,...s.low},this.device.type))}else if(t){const s=Zp(n,t);r.push(Yp(e,{...n,...s},this.device.type))}else r.push(Yp(e,n,this.device.type));return s}setAccessor(e){this.state.bufferAccessor=e}getAccessor(){return this.state.bufferAccessor}getBounds(){if(this.state.bounds)return this.state.bounds;let e=null;if(this.state.constant&&this.value){const t=Array.from(this.value);e=[t,t]}else{const{value:t,numInstances:n,size:r}=this,s=n*r;if(t&&s&&t.length>=s){const n=new Array(r).fill(1/0),i=new Array(r).fill(-1/0);for(let e=0;ei[s]&&(i[s]=r)}e=[n,i]}}return this.state.bounds=e,e}setData(e){const{state:t}=this;let n;n=ArrayBuffer.isView(e)?{value:e}:e instanceof jr?{buffer:e}:e;const r={...this.settings,...n};if(ArrayBuffer.isView(n.value)){if(!n.type)if(this.doublePrecision&&n.value instanceof Float64Array)r.type="float32";else{const e=qp(n.value);r.type=r.normalized?e.replace("int","norm"):e}r.bytesPerElement=n.value.BYTES_PER_ELEMENT,r.stride=Kp(r)}if(t.bounds=null,n.constant){let e=n.value;if(e=this._normalizeValue(e,[],0),this.settings.normalized&&(e=this.normalizeConstant(e)),t.constant&&this._areValuesEqual(e,this.value))return!1;t.externalBuffer=null,t.constant=!0,this.value=ArrayBuffer.isView(e)?e:new Float32Array(e)}else if(n.buffer){const e=n.buffer;t.externalBuffer=e,t.constant=!1,this.value=n.value||null}else if(n.value){this._checkExternalBuffer(n);let e=n.value;t.externalBuffer=null,t.constant=!1,this.value=e;let{buffer:s}=this;const i=Kp(r),o=(r.vertexOffset||0)*i;if(this.doublePrecision&&e instanceof Float64Array&&(e=eh(e,r)),this.settings.isIndexed){const t=this.settings.defaultType;e.constructor!==t&&(e=new t(e))}const a=e.byteLength+o+2*i;(!s||s.byteLength(e+128)/255*2-1);case"snorm16":return new Float32Array(e).map(e=>(e+32768)/65535*2-1);case"unorm8":return new Float32Array(e).map(e=>e/255);case"unorm16":return new Float32Array(e).map(e=>e/65535);default:return e}}_normalizeValue(e,t,n){const{defaultValue:r,size:s}=this.settings;if(Number.isFinite(e))return t[n]=e,t;if(!e){let e=s;for(;--e>=0;)t[n+e]=r[e];return t}switch(s){case 4:t[n+3]=Number.isFinite(e[3])?e[3]:r[3];case 3:t[n+2]=Number.isFinite(e[2])?e[2]:r[2];case 2:t[n+1]=Number.isFinite(e[1])?e[1]:r[1];case 1:t[n+0]=Number.isFinite(e[0])?e[0]:r[0];break;default:let i=s;for(;--i>=0;)t[n+i]=Number.isFinite(e[i])?e[i]:r[i]}return t}_areValuesEqual(e,t){if(!e||!t)return!1;const{size:n}=this;for(let r=0;r0&&(eg.length=e.length,r=eg):r=Jp,(t>0||Number.isFinite(n))&&(r=(Array.isArray(r)?r:Array.from(r)).slice(t,n),s.index=t-1),{iterable:r,objectInfo:s}}function ng(e){return e&&e[Symbol.asyncIterator]}function rg(e,t){const{size:n,stride:r,offset:s,startIndices:i,nested:o}=t,a=e.BYTES_PER_ELEMENT,l=r?r/a:n,c=s?s/a:0,u=Math.floor((e.length-c)/l);return(t,{index:r,target:s})=>{if(!i){const t=r*l+c;for(let r=0;re},spring:{stiffness:.05,damping:.5}};function ag(e,t){if(!e)return null;Number.isFinite(e)&&(e={type:"interpolation",duration:e});const n=e.type||"interpolation";return{...og[n],...t,...e,type:n}}class lg extends Qp{constructor(e,t){super(e,t,{startIndices:null,lastExternalBuffer:null,binaryValue:null,binaryAccessor:null,needsUpdate:!0,needsRedraw:!1,layoutChanged:!1,updateRanges:ig}),this.constant=!1,this.settings.update=t.update||(t.accessor?this._autoUpdater:void 0),Object.seal(this.settings),Object.seal(this.state),this._validateAttributeUpdaters()}get startIndices(){return this.state.startIndices}set startIndices(e){this.state.startIndices=e}needsUpdate(){return this.state.needsUpdate}needsRedraw({clearChangedFlags:e=!1}={}){const t=this.state.needsRedraw;return this.state.needsRedraw=t&&!e,t}layoutChanged(){return this.state.layoutChanged}setAccessor(e){var t,n,r;(t=this.state).layoutChanged||(t.layoutChanged=(n=e,r=this.getAccessor(),!(n.type===r.type&&n.size===r.size&&Kp(n)===Kp(r)&&(n.offset||0)===(r.offset||0)))),super.setAccessor(e)}getUpdateTriggers(){const{accessor:e}=this.settings;return[this.id].concat("function"!=typeof e&&e||[])}supportsTransition(){return Boolean(this.settings.transition)}getTransitionSetting(e){if(!e||!this.supportsTransition())return null;const{accessor:t}=this.settings,n=this.settings.transition;return ag(Array.isArray(t)?e[t.find(t=>e[t])]:e[t],n)}setNeedsUpdate(e=this.id,t){if(this.state.needsUpdate=this.state.needsUpdate||e,this.setNeedsRedraw(e),t){const{startRow:e=0,endRow:n=1/0}=t;this.state.updateRanges=function(e,t){if(e===ig)return e;if(t[0]<0&&(t[0]=0),t[0]>=t[1])return e;const n=[],r=e.length;let s=0;for(let i=0;it[1]?n.push(r):t=[Math.min(r[0],t[0]),Math.max(r[1],t[1])]}return n.splice(s,0,t),n}(this.state.updateRanges,[e,n])}else this.state.updateRanges=ig}clearNeedsUpdate(){this.state.needsUpdate=!1,this.state.updateRanges=sg}setNeedsRedraw(e=this.id){this.state.needsRedraw=this.state.needsRedraw||e}allocate(e){const{state:t,settings:n}=this;return!n.noAlloc&&!!n.update&&(super.allocate(e,t.updateRanges!==ig),!0)}updateBuffer({numInstances:e,data:t,props:n,context:r}){if(!this.needsUpdate())return!1;const{state:{updateRanges:s},settings:{update:i,noAlloc:o}}=this;let a=!0;if(i){for(const[o,a]of s)i.call(r,this,{data:t,startRow:o,endRow:a,props:n,numInstances:e});if(this.value)if(this.constant||!this.buffer||this.buffer.byteLengths[h]),fd("function"==typeof f,`accessor "${h}" is not a function`);let p=e.getVertexOffset(n);const{iterable:g,objectInfo:m}=tg(t,n,r);for(const _ of g){m.index++;let t=f(_,m);if(d&&(t=d.call(this,t)),u){const n=(m.indexc?l.set(t,p):(e._normalizeValue(t,m.target,0),Jh({target:l,source:m.target,start:p,count:n}));p+=n*c}else e._normalizeValue(t,l,p),p+=c}}_validateAttributeUpdaters(){const{settings:e}=this;if(!e.noAlloc&&"function"!=typeof e.update)throw new Error(`Attribute ${this.id} missing update or accessor`)}_checkAttributeArray(){const{value:e}=this,t=Math.min(4,this.size);if(e&&e.length>=t){let n=!0;switch(t){case 4:n=n&&Number.isFinite(e[3]);case 3:n=n&&Number.isFinite(e[2]);case 2:n=n&&Number.isFinite(e[1]);case 1:n=n&&Number.isFinite(e[0]);break;default:n=!1}if(!n)throw new Error(`Illegal attribute generated for ${this.id}`)}}}function cg(e){const{source:t,target:n,start:r=0,size:s,getData:i}=e,o=e.end||n.length,a=t.length,l=o-r;if(a>l)return void n.set(t.subarray(0,l),r);if(n.set(t,r),!i)return;let c=a;for(;ce}){const a=n.doublePrecision&&n.value instanceof Float64Array?2:1,l=n.size*a,c=n.byteOffset,u=n.settings.bytesPerElement<4?c/n.settings.bytesPerElement*4:c,h=n.startIndices,d=i&&h,f=n.isConstant;if(!d&&t&&r>=s)return t;const p=n.value instanceof Float64Array?Float32Array:n.value.constructor,g=f?n.value:new p(n.getBuffer().readSyncWebGL(c,s*p.BYTES_PER_ELEMENT).buffer);if(n.settings.normalized&&!f){const e=o;o=(t,r)=>n.normalizeConstant(e(t,r))}const m=f?(e,t)=>o(g,t):(e,t)=>o(g.subarray(e+c,e+c+l),t),_=t?new Float32Array(t.readSyncWebGL(u,4*r).buffer):new Float32Array(0),y=new Float32Array(s);return function({source:e,target:t,size:n,getData:r,sourceStartIndices:s,targetStartIndices:i}){if(!s||!i)return cg({source:e,target:t,size:n,getData:r}),t;let o=0,a=0;const l=r&&((e,t)=>r(e+a,t)),c=Math.min(s.length,i.length);for(let u=1;u EPSILON || length(aTo - aCur) > EPSILON;\n vIsTransitioningFlag = isTransitioning ? 1.0 : 0.0;\n\n vNext = getNextValue(aCur, aPrev, aTo);\n gl_Position = vec4(0, 0, 0, 1);\n gl_PointSize = 100.0;\n}\n",fs:"#version 300 es\n#define SHADER_NAME spring-transition-is-transitioning-fragment-shader\n\nin float vIsTransitioningFlag;\n\nout vec4 fragColor;\n\nvoid main(void) {\n if (vIsTransitioningFlag == 0.0) {\n discard;\n }\n fragColor = vec4(1.0);\n}",bufferLayout:[{name:"aPrev",format:r},{name:"aCur",format:r},{name:"aTo",format:t.getBufferLayout().attributes[0].format}],varyings:["vNext"],modules:[yg],defines:{ATTRIBUTE_TYPE:n},parameters:{depthCompare:"always",blendColorOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaOperation:"max",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"}})}(e,t)}start(e,t){const n=this.currentLength,r=this.currentStartIndices;super.start(e,t);const{buffers:s,attribute:i}=this;for(let a=0;a<2;a++)s[a]=pg({device:this.device,buffer:s[a],attribute:i,fromLength:n,toLength:this.currentLength,fromStartIndices:r,getData:e.enter});s[2]=fg({device:this.device,source:s[0],target:s[2]}),this.setBuffer(s[1]);const{model:o}=this.transform;o.setVertexCount(Math.floor(this.currentLength/i.size)),i.isConstant?o.setConstantAttributes({aTo:i.value}):o.setAttributes({aTo:i.getBuffer()})}onUpdate(){const{buffers:e,transform:t,framebuffer:n,transition:r}=this,s=this.settings;t.model.setAttributes({aPrev:e[0],aCur:e[1]}),t.transformFeedback.setBuffers({vNext:e[2]});const i={stiffness:s.stiffness,damping:s.damping};t.model.shaderInputs.setProps({spring:i}),t.run({framebuffer:n,discard:!1,parameters:{viewport:[0,0,1,1]},clearColor:[0,0,0,0]}),dg(e),this.setBuffer(e[1]),this.device.readPixelsToArrayWebGL(n)[0]>0||r.end()}delete(){super.delete(),this.transform.destroy(),this.texture.destroy(),this.framebuffer.destroy()}}};class vg{constructor(e,{id:t,timeline:n}){if(!e)throw new Error("AttributeTransitionManager is constructed without device");this.id=t,this.device=e,this.timeline=n,this.transitions={},this.needsRedraw=!1,this.numInstances=1}finalize(){for(const e in this.transitions)this._removeTransition(e)}update({attributes:e,transitions:t,numInstances:n}){this.numInstances=n||1;for(const r in e){const n=e[r],s=n.getTransitionSetting(t);s&&this._updateAttribute(r,n,s)}for(const r in this.transitions){const n=e[r];n&&n.getTransitionSetting(t)||this._removeTransition(r)}}hasAttribute(e){const t=this.transitions[e];return t&&t.inProgress}getAttributes(){const e={};for(const t in this.transitions){const n=this.transitions[t];n.inProgress&&(e[t]=n.attributeInTransition)}return e}run(){if(0===this.numInstances)return!1;for(const t in this.transitions)this.transitions[t].update()&&(this.needsRedraw=!0);const e=this.needsRedraw;return this.needsRedraw=!1,e}_removeTransition(e){this.transitions[e].delete(),delete this.transitions[e]}_updateAttribute(e,t,n){const r=this.transitions[e];let s=!r||r.type!==n.type;if(s){r&&this._removeTransition(e);const i=bg[n.type];i?this.transitions[e]=new i({attribute:t,timeline:this.timeline,device:this.device}):($n.error(`unsupported transition type '${n.type}'`)(),s=!1)}(s||t.needsRedraw())&&(this.needsRedraw=!0,this.transitions[e].start(n,this.numInstances))}}const xg="attributeManager.invalidate";class wg{constructor(e,{id:t="attribute-manager",stats:n,timeline:r}={}){this.mergeBoundsMemoized=Lc(th),this.id=t,this.device=e,this.attributes={},this.updateTriggers={},this.needsRedraw=!0,this.userData={},this.stats=n,this.attributeTransitionManager=new vg(e,{id:`${t}-transitions`,timeline:r}),Object.seal(this)}finalize(){for(const e in this.attributes)this.attributes[e].delete();this.attributeTransitionManager.finalize()}getNeedsRedraw(e={clearRedrawFlags:!1}){const t=this.needsRedraw;return this.needsRedraw=this.needsRedraw&&!e.clearRedrawFlags,t&&this.id}setNeedsRedraw(){this.needsRedraw=!0}add(e){this._add(e)}addInstanced(e){this._add(e,{stepMode:"instance"})}remove(e){for(const t of e)void 0!==this.attributes[t]&&(this.attributes[t].delete(),delete this.attributes[t])}invalidate(e,t){const n=this._invalidateTrigger(e,t);Yn(xg,this,e,n)}invalidateAll(e){for(const t in this.attributes)this.attributes[t].setNeedsUpdate(t,e);Yn(xg,this,"all")}update({data:e,numInstances:t,startIndices:n=null,transitions:r,props:s={},buffers:i={},context:o={}}){let a=!1;Yn("attributeManager.updateStart",this),this.stats&&this.stats.get("Update Attributes").timeStart();for(const l in this.attributes){const r=this.attributes[l],c=r.settings.accessor;r.startIndices=n,r.numInstances=t,s[l]&&$n.removed(`props.${l}`,`data.attributes.${l}`)(),r.setExternalBuffer(i[l])||r.setBinaryValue("string"==typeof c?i[c]:void 0,e.startIndices)||"string"==typeof c&&!i[c]&&r.setConstantValue(o,s[c])||r.needsUpdate()&&(a=!0,this._updateAttribute({attribute:r,numInstances:t,data:e,props:s,context:o})),this.needsRedraw=this.needsRedraw||r.needsRedraw()}a&&Yn("attributeManager.updateEnd",this,t),this.stats&&this.stats.get("Update Attributes").timeEnd(),this.attributeTransitionManager.update({attributes:this.attributes,numInstances:t,transitions:r})}updateTransition(){const{attributeTransitionManager:e}=this,t=e.run();return this.needsRedraw=this.needsRedraw||t,t}getAttributes(){return{...this.attributes,...this.attributeTransitionManager.getAttributes()}}getBounds(e){const t=e.map(e=>{var t;return null==(t=this.attributes[e])?void 0:t.getBounds()});return this.mergeBoundsMemoized(t)}getChangedAttributes(e={clearChangedFlags:!1}){const{attributes:t,attributeTransitionManager:n}=this,r={...n.getAttributes()};for(const s in t){const i=t[s];i.needsRedraw(e)&&!n.hasAttribute(s)&&(r[s]=i)}return r}getBufferLayouts(e){return Object.values(this.getAttributes()).map(t=>t.getBufferLayout(e))}_add(e,t){for(const n in e){const r=e[n],s={...r,id:n,size:(r.isIndexed?1:r.size)||1,...t};this.attributes[n]=new lg(this.device,s)}this._mapUpdateTriggersToAttributes()}_mapUpdateTriggersToAttributes(){const e={};for(const t in this.attributes)this.attributes[t].getUpdateTriggers().forEach(n=>{e[n]||(e[n]=[]),e[n].push(t)});this.updateTriggers=e}_invalidateTrigger(e,t){const{attributes:n,updateTriggers:r}=this,s=r[e];return s&&s.forEach(e=>{const r=n[e];r&&r.setNeedsUpdate(r.id,t)}),s}_updateAttribute(e){const{attribute:t,numInstances:n}=e;Yn("attribute.updateStart",t),t.constant?t.setConstantValue(e.context,t.value):(t.allocate(n)&&Yn("attribute.allocate",t,n),t.updateBuffer(e)&&(this.needsRedraw=!0,Yn("attribute.updateEnd",t,n)))}}const Eg=1e-5;function Tg(e,t,n,r,s){const i=t-e;return(n-t)*s+-i*r+i+t}function Sg(e,t){if(Array.isArray(e)){let n=0;for(let r=0;r0}add(e,t,n,r){const{transitions:s}=this;if(s.has(e)){const n=s.get(e),{value:r=n.settings.fromValue}=n;t=r,this.remove(e)}if(!(r=ag(r)))return;const i=Ag[r.type];if(!i)return void $n.error(`unsupported transition type '${r.type}'`)();const o=new i(this.timeline);o.start({...r,fromValue:t,toValue:n}),s.set(e,o)}remove(e){const{transitions:t}=this;t.has(e)&&(t.get(e).cancel(),t.delete(e))}update(){const e={};for(const[t,n]of this.transitions)n.update(),e[t]=n.value,n.inProgress||this.remove(t);return e}clear(){for(const e of this.transitions.keys())this.remove(e)}}function Cg(e,t){if(!e.transitions)return!1;const n={},r=e[$h];let s=!1;for(const i in e.transitions){const o=r[i],a=o&&o.type;("number"===a||"color"===a||"array"===a)&&Pg(e[i],t[i],o)&&(n[i]=!0,s=!0)}return!!s&&n}function kg({newProps:e,oldProps:t,ignoreProps:n={},propTypes:r={},triggerName:s="props"}){if(t===e)return!1;if("object"!=typeof e||null===e)return`${s} changed shallowly`;if("object"!=typeof t||null===t)return`${s} changed shallowly`;for(const i of Object.keys(e))if(!(i in n)){if(!(i in t))return`${s}.${i} added`;const n=Pg(e[i],t[i],r[i]);if(n)return`${s}.${i} ${n}`}for(const i of Object.keys(t))if(!(i in n)){if(!(i in e))return`${s}.${i} dropped`;if(!Object.hasOwnProperty.call(e,i)){const n=Pg(e[i],t[i],r[i]);if(n)return`${s}.${i} ${n}`}}return!1}function Pg(e,t,n){let r=n&&n.equal;return r&&!r(e,t,n)?"changed deeply":r||(r=e&&t&&e.equals,!r||r.call(e,t))?r||t===e?null:"changed shallowly":"changed deeply"}function Ig(e,t){if(null===t)return!0;const n=t.extensions,{extensions:r}=e;if(r===n)return!1;if(!n||!r)return!0;if(r.length!==n.length)return!0;for(let s=0;s"project64"===e.name))){const e=n.modules.findIndex(e=>"project32"===e.name);e>=0&&n.modules.splice(e,1)}if("inject"in t)if(e.inject){const r={...e.inject};for(const e in t.inject)r[e]=(r[e]||"")+t.inject[e];n.inject=r}else n.inject=t.inject;return n}const Lg={minFilter:"linear",mipmapFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},Og={},Fg={boolean:{validate:(e,t)=>!0,equal:(e,t,n)=>Boolean(e)===Boolean(t)},number:{validate:(e,t)=>Number.isFinite(e)&&(!("max"in t)||e<=t.max)&&(!("min"in t)||e>=t.min)},color:{validate:(e,t)=>t.optional&&!e||Ug(e)&&(3===e.length||4===e.length),equal:(e,t,n)=>rd(e,t,1)},accessor:{validate(e,t){const n=jg(e);return"function"===n||n===jg(t.value)},equal:(e,t,n)=>"function"==typeof t||rd(e,t,1)},array:{validate:(e,t)=>t.optional&&!e||Ug(e),equal(e,t,n){const{compare:r}=n,s=Number.isInteger(r)?r:r?1:0;return r?rd(e,t,s):e===t}},object:{equal(e,t,n){if(n.ignore)return!0;const{compare:r}=n,s=Number.isInteger(r)?r:r?1:0;return r?rd(e,t,s):e===t}},function:{validate:(e,t)=>t.optional&&!e||"function"==typeof e,equal:(e,t,n)=>!n.compare&&!1!==n.ignore||e===t},data:{transform:(e,t,n)=>{if(!e)return e;const{dataTransform:r}=n.props;return r?r(e):"string"==typeof e.shape&&e.shape.endsWith("-table")&&Array.isArray(e.data)?e.data:e}},image:{transform:(e,t,n)=>{const r=n.context;return r&&r.device?function(e,t,n,r){if(n instanceof Is)return n;n.constructor&&"Object"!==n.constructor.name&&(n={data:n});let s=null;n.compressed&&(s={minFilter:"linear",mipmapFilter:n.data.length>1?"nearest":"linear"});const{width:i,height:o}=n.data,a=t.createTexture({...n,sampler:{...Lg,...s,...r},mipLevels:t.getMipLevelCount(i,o)});return a.generateMipmapsWebGL(),Og[a.id]=e,a}(n.id,r.device,e,{...t.parameters,...n.props.textureParameters}):null},release:(e,t,n)=>{var r,s;r=n.id,(s=e)&&s instanceof Is&&Og[s.id]===r&&(s.delete(),delete Og[s.id])}}};function Dg(e,t){switch(jg(t)){case"object":return Bg(e,t);case"array":return Bg(e,{type:"array",value:t,compare:!1});case"boolean":return Bg(e,{type:"boolean",value:t});case"number":return Bg(e,{type:"number",value:t});case"function":return Bg(e,{type:"function",value:t,compare:!0});default:return{name:e,type:"unknown",value:t}}}function Bg(e,t){return"type"in t?{name:e,...Fg[t.type],...t}:"value"in t?{name:e,type:jg(t.value),...t}:{name:e,type:"object",value:t}}function Ug(e){return Array.isArray(e)||ArrayBuffer.isView(e)}function jg(e){return Ug(e)?"array":null===e?"null":typeof e}function Vg(e,t){if(!(e instanceof $g.constructor))return{};let n="_mergedDefaultProps";if(t)for(const r of t){const e=r.constructor;e&&(n+=`:${e.extensionName||e.name}`)}return Wg(e,n)||(e[n]=function(e,t){if(!e.prototype)return null;const n=Vg(Object.getPrototypeOf(e)),r=function(e){const t={},n={},r={};for(const[s,i]of Object.entries(e)){const e=null==i?void 0:i.deprecatedFor;if(e)r[s]=Array.isArray(e)?e:[e];else{const e=Dg(s,i);t[s]=e,n[s]=e.value}}return{propTypes:t,defaultProps:n,deprecatedProps:r}}(Wg(e,"defaultProps")||{}),s=Object.assign(Object.create(null),n,r.defaultProps),i=Object.assign(Object.create(null),null==n?void 0:n[$h],r.propTypes),o=Object.assign(Object.create(null),null==n?void 0:n[Xh],r.deprecatedProps);for(const a of t){const e=Vg(a.constructor);e&&(Object.assign(s,e),Object.assign(i,e[$h]),Object.assign(o,e[Xh]))}return function(e,t){const n=function(e){const t=e.componentName;return t||$n.warn(`${e.name}.componentName not specified`)(),t||e.name}(t);Object.defineProperties(e,{id:{writable:!0,value:n}})}(s,e),function(e,t){const n={},r={};for(const s in t){const e=t[s],{name:i,value:o}=e;e.async&&(n[i]=o,r[i]=Gg(i))}e[qh]=n,e[Yh]={},Object.defineProperties(e,r)}(s,i),function(e,t){for(const n in t)Object.defineProperty(e,n,{enumerable:!1,set(e){const r=`${this.id}: ${n}`;for(const s of t[n])zg(this,s)||(this[s]=e);$n.deprecated(r,t[n].join("/"))()}})}(s,o),s[$h]=i,s[Xh]=o,0!==t.length||zg(e,"_propTypes")||(e._propTypes=i),s}(e,t||[]))}function Gg(e){return{enumerable:!0,set(t){"string"==typeof t||t instanceof Promise||ng(t)?this[Yh][e]=t:this[Kh][e]=t},get(){if(this[Kh]){if(e in this[Kh])return this[Kh][e]||this[qh][e];if(e in this[Yh]){const t=this[Hh]&&this[Hh].internalState;if(t&&t.hasAsyncProp(e))return t.getAsyncProp(e)||this[qh][e]}}return this[qh][e]}}}function zg(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Wg(e,t){return zg(e,t)&&e[t]}let Hg=0;class $g{constructor(...e){this.props=function(e,t){let n;for(let i=t.length-1;i>=0;i--){const e=t[i];"extensions"in e&&(n=e.extensions)}const r=Vg(e.constructor,n),s=Object.create(r);s[Hh]=e,s[Yh]={},s[Kh]={};for(let i=0;i{},this.oldProps=null,this.oldAsyncProps=null}finalize(){for(const e in this.asyncProps){const t=this.asyncProps[e];t&&t.type&&t.type.release&&t.type.release(t.resolvedValue,t.type,this.component)}this.asyncProps={},this.component=null,this.resetOldProps()}getOldProps(){return this.oldAsyncProps||this.oldProps||Xg}resetOldProps(){this.oldAsyncProps=null,this.oldProps=this.component?this.component.props:null}hasAsyncProp(e){return e in this.asyncProps}getAsyncProp(e){const t=this.asyncProps[e];return t&&t.resolvedValue}isAsyncPropLoading(e){if(e){const t=this.asyncProps[e];return Boolean(t&&t.pendingLoadCount>0&&t.pendingLoadCount!==t.resolvedLoadCount)}for(const t in this.asyncProps)if(this.isAsyncPropLoading(t))return!0;return!1}reloadAsyncProp(e,t){this._watchPromise(e,Promise.resolve(t))}setAsyncProps(e){this.component=e[Hh]||this.component;const t=e[Kh]||{},n=e[Yh]||e,r=e[qh]||{};for(const s in t){const e=t[s];this._createAsyncPropData(s,r[s]),this._updateAsyncProp(s,e),t[s]=this.getAsyncProp(s)}for(const s in n){const e=n[s];this._createAsyncPropData(s,r[s]),this._updateAsyncProp(s,e)}}_fetch(e,t){return null}_onResolve(e,t){}_onError(e,t){}_updateAsyncProp(e,t){this._didAsyncInputValueChange(e,t)&&("string"==typeof t&&(t=this._fetch(e,t)),t instanceof Promise?this._watchPromise(e,t):ng(t)?this._resolveAsyncIterable(e,t):this._setPropValue(e,t))}_freezeAsyncOldProps(){if(!this.oldAsyncProps&&this.oldProps){this.oldAsyncProps=Object.create(this.oldProps);for(const e in this.asyncProps)Object.defineProperty(this.oldAsyncProps,e,{enumerable:!0,value:this.oldProps[e]})}}_didAsyncInputValueChange(e,t){const n=this.asyncProps[e];return t!==n.resolvedValue&&t!==n.lastValue&&(n.lastValue=t,!0)}_setPropValue(e,t){this._freezeAsyncOldProps();const n=this.asyncProps[e];n&&(t=this._postProcessValue(n,t),n.resolvedValue=t,n.pendingLoadCount++,n.resolvedLoadCount=n.pendingLoadCount)}_setAsyncPropValue(e,t,n){const r=this.asyncProps[e];r&&n>=r.resolvedLoadCount&&void 0!==t&&(this._freezeAsyncOldProps(),r.resolvedValue=t,r.resolvedLoadCount=n,this.onAsyncPropUpdated(e,t))}_watchPromise(e,t){const n=this.asyncProps[e];if(n){n.pendingLoadCount++;const r=n.pendingLoadCount;t.then(t=>{this.component&&(t=this._postProcessValue(n,t),this._setAsyncPropValue(e,t,r),this._onResolve(e,t))}).catch(t=>{this._onError(e,t)})}}async _resolveAsyncIterable(e,t){if("data"!==e)return void this._setPropValue(e,t);const n=this.asyncProps[e];if(!n)return;n.pendingLoadCount++;const r=n.pendingLoadCount;let s=[],i=0;for await(const o of t){if(!this.component)return;const{dataTransform:t}=this.component.props;s=t?t(o,s):s.concat(o),Object.defineProperty(s,"__diff",{enumerable:!1,value:[{startRow:i,endRow:s.length}]}),i=s.length,this._setAsyncPropValue(e,s,r)}this._onResolve(e,s)}_postProcessValue(e,t){const n=e.type;return n&&this.component&&(n.release&&n.release(e.resolvedValue,n,this.component),n.transform)?n.transform(t,n,this.component):t}_createAsyncPropData(e,t){if(!this.asyncProps[e]){const n=this.component&&this.component.props[$h];this.asyncProps[e]={type:n&&n[e],lastValue:null,resolvedValue:t,pendingLoadCount:0,resolvedLoadCount:0}}}}class Yg extends qg{constructor({attributeManager:e,layer:t}){super(t),this.attributeManager=e,this.needsRedraw=!0,this.needsUpdate=!0,this.subLayers=null,this.usesPickingColorCache=!1}get layer(){return this.component}_fetch(e,t){const n=this.layer,r=null==n?void 0:n.props.fetch;return r?r(t,{propName:e,layer:n}):super._fetch(e,t)}_onResolve(e,t){const n=this.layer;if(n){const r=n.props.onDataLoad;"data"===e&&r&&r(t,{propName:e,layer:n})}}_onError(e,t){const n=this.layer;n&&n.raiseError(t,`loading ${e} of ${this.layer}`)}}const Kg=2**24-1,Zg=Object.freeze([]),Qg=Lc(({oldViewport:e,viewport:t})=>e.equals(t));let Jg=new Uint8ClampedArray(0);const em={data:{type:"data",value:Zg,async:!0},dataComparator:{type:"function",value:null,optional:!0},_dataDiff:{type:"function",value:e=>e&&e.__diff,optional:!0},dataTransform:{type:"function",value:null,optional:!0},onDataLoad:{type:"function",value:null,optional:!0},onError:{type:"function",value:null,optional:!0},fetch:{type:"function",value:(e,{propName:t,layer:n,loaders:r,loadOptions:s,signal:i})=>{const{resourceManager:o}=n.context;s=s||n.getLoadOptions(),r=r||n.props.loaders,i&&(s={...s,fetch:{...null==s?void 0:s.fetch,signal:i}});let a=o.contains(e);return a||s||(o.add({resourceId:e,data:Cn(e,r),persistent:!1}),a=!0),a?o.subscribe({resourceId:e,onChange:e=>{var r;return null==(r=n.internalState)?void 0:r.reloadAsyncProp(t,e)},consumerId:n.id,requestId:t}):Cn(e,r,s)}},updateTriggers:{},visible:!0,pickable:!1,opacity:{type:"number",min:0,max:1,value:1},operation:"draw",onHover:{type:"function",value:null,optional:!0},onClick:{type:"function",value:null,optional:!0},onDragStart:{type:"function",value:null,optional:!0},onDrag:{type:"function",value:null,optional:!0},onDragEnd:{type:"function",value:null,optional:!0},coordinateSystem:Cc.DEFAULT,coordinateOrigin:{type:"array",value:[0,0,0],compare:!0},modelMatrix:{type:"array",value:null,compare:!0,optional:!0},wrapLongitude:!1,positionFormat:"XYZ",colorFormat:"RGBA",parameters:{type:"object",value:{},optional:!0,compare:2},loadOptions:{type:"object",value:null,optional:!0,ignore:!0},transitions:null,extensions:[],loaders:{type:"array",value:[],optional:!0,ignore:!0},getPolygonOffset:{type:"function",value:({layerIndex:e})=>[0,100*-e]},highlightedObjectIndex:null,autoHighlight:!1,highlightColor:{type:"accessor",value:[0,0,128,128]}};class tm extends $g{constructor(){super(...arguments),this.internalState=null,this.lifecycle="Awaiting state",this.parent=null}static get componentName(){return Object.prototype.hasOwnProperty.call(this,"layerName")?this.layerName:""}get root(){let e=this;for(;e.parent;)e=e.parent;return e}toString(){return`${this.constructor.layerName||this.constructor.name}({id: '${this.props.id}'})`}project(e){fd(this.internalState);const t=this.internalState.viewport||this.context.viewport,n=uh(e,{viewport:t,modelMatrix:this.props.modelMatrix,coordinateOrigin:this.props.coordinateOrigin,coordinateSystem:this.props.coordinateSystem}),[r,s,i]=pu(n,t.pixelProjectionMatrix);return 2===e.length?[r,s]:[r,s,i]}unproject(e){return fd(this.internalState),(this.internalState.viewport||this.context.viewport).unproject(e)}projectPosition(e,t){return fd(this.internalState),function(e,t){const{viewport:n,coordinateSystem:r,coordinateOrigin:s,modelMatrix:i,fromCoordinateSystem:o,fromCoordinateOrigin:a}=function(e){const{viewport:t,modelMatrix:n,coordinateOrigin:r}=e;let{coordinateSystem:s,fromCoordinateSystem:i,fromCoordinateOrigin:o}=e;return s===Cc.DEFAULT&&(s=t.isGeospatial?Cc.LNGLAT:Cc.CARTESIAN),void 0===i&&(i=s),void 0===o&&(o=r),{viewport:t,coordinateSystem:s,coordinateOrigin:r,modelMatrix:n,fromCoordinateSystem:i,fromCoordinateOrigin:o}}(t),{autoOffset:l=!0}=t,{geospatialOrigin:c=lh,shaderCoordinateOrigin:u=lh,offsetMode:h=!1}=l?Vc(n,r,s):{},d=uh(e,{viewport:n,modelMatrix:i,coordinateSystem:o,coordinateOrigin:a,offsetMode:h});if(h){const e=n.projectPosition(c||u);Za(d,d,e)}return d}(e,{viewport:this.internalState.viewport||this.context.viewport,modelMatrix:this.props.modelMatrix,coordinateOrigin:this.props.coordinateOrigin,coordinateSystem:this.props.coordinateSystem,...t})}get isComposite(){return!1}get isDrawable(){return!0}setState(e){this.setChangeFlags({stateChanged:!0}),Object.assign(this.state,e),this.setNeedsRedraw()}setNeedsRedraw(){this.internalState&&(this.internalState.needsRedraw=!0)}setNeedsUpdate(){this.internalState&&(this.context.layerManager.setNeedsUpdate(String(this)),this.internalState.needsUpdate=!0)}get isLoaded(){return!!this.internalState&&!this.internalState.isAsyncPropLoading()}get wrapLongitude(){return this.props.wrapLongitude}isPickable(){return this.props.pickable&&this.props.visible}getModels(){const e=this.state;return e&&(e.models||e.model&&[e.model])||[]}setShaderModuleProps(...e){for(const t of this.getModels())t.shaderInputs.setProps(...e)}getAttributeManager(){return this.internalState&&this.internalState.attributeManager}getCurrentLayer(){return this.internalState&&this.internalState.layer}getLoadOptions(){return this.props.loadOptions}use64bitPositions(){const{coordinateSystem:e}=this.props;return e===Cc.DEFAULT||e===Cc.LNGLAT||e===Cc.CARTESIAN}onHover(e,t){return this.props.onHover&&this.props.onHover(e,t)||!1}onClick(e,t){return this.props.onClick&&this.props.onClick(e,t)||!1}nullPickingColor(){return[0,0,0]}encodePickingColor(e,t=[]){return t[0]=e+1&255,t[1]=e+1>>8&255,t[2]=e+1>>8>>8&255,t}decodePickingColor(e){fd(e instanceof Uint8Array);const[t,n,r]=e;return t+256*n+65536*r-1}getNumInstances(){return Number.isFinite(this.props.numInstances)?this.props.numInstances:this.state&&void 0!==this.state.numInstances?this.state.numInstances:function(e){if(null===(t=e)||"object"!=typeof t)throw new Error("count(): argument not an object");var t;if("function"==typeof e.count)return e.count();if(Number.isFinite(e.size))return e.size;if(Number.isFinite(e.length))return e.length;if(function(e){return null!==e&&"object"==typeof e&&e.constructor===Object}(e))return Object.keys(e).length;throw new Error("count(): argument not a container")}(this.props.data)}getStartIndices(){return this.props.startIndices?this.props.startIndices:this.state&&this.state.startIndices?this.state.startIndices:null}getBounds(){var e;return null==(e=this.getAttributeManager())?void 0:e.getBounds(["positions","instancePositions"])}getShaders(e){e=Ng(e,{disableWarnings:!0,modules:this.context.defaultShaderModules});for(const t of this.props.extensions)e=Ng(e,t.getShaders.call(this,t));return e}shouldUpdateState(e){return e.changeFlags.propsOrDataChanged}updateState(e){const t=this.getAttributeManager(),{dataChanged:n}=e.changeFlags;if(n&&t)if(Array.isArray(n))for(const r of n)t.invalidateAll(r);else t.invalidateAll();if(t){const{props:n}=e,r=this.internalState.hasPickingBuffer,s=Number.isInteger(n.highlightedObjectIndex)||n.pickable||n.extensions.some(e=>e.getNeedsPickingBuffer.call(this,e));if(r!==s){this.internalState.hasPickingBuffer=s;const{pickingColors:e,instancePickingColors:n}=t.attributes,r=e||n;r&&(s&&r.constant&&(r.constant=!1,t.invalidate(r.id)),r.value||s||(r.constant=!0,r.value=[0,0,0]))}}}finalizeState(e){for(const n of this.getModels())n.destroy();const t=this.getAttributeManager();t&&t.finalize(),this.context&&this.context.resourceManager.unsubscribe({consumerId:this.id}),this.internalState&&(this.internalState.uniformTransitions.clear(),this.internalState.finalize())}draw(e){for(const t of this.getModels())t.draw(e.renderPass)}getPickingInfo({info:e,mode:t,sourceLayer:n}){const{index:r}=e;return r>=0&&Array.isArray(this.props.data)&&(e.object=this.props.data[r]),e}raiseError(e,t){var n,r,s,i;t&&(e=new Error(`${t}: ${e.message}`,{cause:e})),(null==(r=(n=this.props).onError)?void 0:r.call(n,e))||null==(i=null==(s=this.context)?void 0:s.onError)||i.call(s,e,this)}getNeedsRedraw(e={clearRedrawFlags:!1}){return this._getNeedsRedraw(e)}needsUpdate(){return!!this.internalState&&(this.internalState.needsUpdate||this.hasUniformTransition()||this.shouldUpdateState(this._getUpdateParams()))}hasUniformTransition(){var e;return(null==(e=this.internalState)?void 0:e.uniformTransitions.active)||!1}activateViewport(e){if(!this.internalState)return;const t=this.internalState.viewport;this.internalState.viewport=e,t&&Qg({oldViewport:t,viewport:e})||(this.setChangeFlags({viewportChanged:!0}),this.isComposite?this.needsUpdate()&&this.setNeedsUpdate():this._update())}invalidateAttribute(e="all"){const t=this.getAttributeManager();t&&("all"===e?t.invalidateAll():t.invalidate(e))}updateAttributes(e){let t=!1;for(const n in e)e[n].layoutChanged()&&(t=!0);for(const n of this.getModels())this._setModelAttributes(n,e,t)}_updateAttributes(){const e=this.getAttributeManager();if(!e)return;const t=this.props,n=this.getNumInstances(),r=this.getStartIndices();e.update({data:t.data,numInstances:n,startIndices:r,props:t,transitions:t.transitions,buffers:t.data.attributes,context:this});const s=e.getChangedAttributes({clearChangedFlags:!0});this.updateAttributes(s)}_updateAttributeTransition(){const e=this.getAttributeManager();e&&e.updateTransition()}_updateUniformTransition(){const{uniformTransitions:e}=this.internalState;if(e.active){const t=e.update(),n=Object.create(this.props);for(const e in t)Object.defineProperty(n,e,{value:t[e]});return n}return this.props}calculateInstancePickingColors(e,{numInstances:t}){if(e.constant)return;const n=Math.floor(Jg.length/4);if(this.internalState.usesPickingColorCache=!0,nKg&&$n.warn("Layer has too many data objects. Picking might not be able to distinguish all objects.")(),Jg=Yu.allocate(Jg,t,{size:4,copy:!0,maxCount:Math.max(t,Kg)});const e=Math.floor(Jg.length/4),r=[0,0,0];for(let t=n;t($n.deprecated("layer.state.attributeManager","layer.getAttributeManager()")(),e)}),this.internalState.uniformTransitions=new Rg(this.context.timeline),this.internalState.onAsyncPropUpdated=this._onAsyncPropUpdated.bind(this),this.internalState.setAsyncProps(this.props),this.initializeState(this.context);for(const t of this.props.extensions)t.initializeState.call(this,this.context,t);this.setChangeFlags({dataChanged:"init",propsChanged:"init",viewportChanged:!0,extensionsChanged:!0}),this._update()}_transferState(e){Yn("layer.matched",this,this===e);const{state:t,internalState:n}=e;this!==e&&(this.internalState=n,this.state=t,this.internalState.setAsyncProps(this.props),this._diffProps(this.props,this.internalState.getOldProps()))}_update(){const e=this.needsUpdate();if(Yn("layer.update",this,e),!e)return;const t=this.props,n=this.context,r=this.internalState,s=n.viewport,i=this._updateUniformTransition();r.propsInTransition=i,n.viewport=r.viewport||s,this.props=i;try{const e=this._getUpdateParams(),t=this.getModels();if(n.device)this.updateState(e);else try{this.updateState(e)}catch(o){}for(const n of this.props.extensions)n.updateState.call(this,e,n);this.setNeedsRedraw(),this._updateAttributes();const r=this.getModels()[0]!==t[0];this._postUpdate(e,r)}finally{n.viewport=s,this.props=t,this._clearChangeFlags(),r.needsUpdate=!1,r.resetOldProps()}}_finalize(){Yn("layer.finalize",this),this.finalizeState(this.context);for(const e of this.props.extensions)e.finalizeState.call(this,this.context,e)}_drawLayer({renderPass:e,shaderModuleProps:t=null,uniforms:n={},parameters:r={}}){this._updateAttributeTransition();const s=this.props,i=this.context;this.props=this.internalState.propsInTransition||s;try{t&&this.setShaderModuleProps(t);const{getPolygonOffset:s}=this.props,o=s&&s(n)||[0,0];i.device instanceof zp&&i.device.setParametersWebGL({polygonOffset:o});for(const e of this.getModels())"webgpu"===e.device.type?e.setParameters({...e.parameters,...r}):e.setParameters(r);if(i.device instanceof zp)i.device.withParametersWebGL(r,()=>{const s={renderPass:e,shaderModuleProps:t,uniforms:n,parameters:r,context:i};for(const e of this.props.extensions)e.draw.call(this,s,e);this.draw(s)});else{const s={renderPass:e,shaderModuleProps:t,uniforms:n,parameters:r,context:i};for(const e of this.props.extensions)e.draw.call(this,s,e);this.draw(s)}}finally{this.props=s}}getChangeFlags(){var e;return null==(e=this.internalState)?void 0:e.changeFlags}setChangeFlags(e){if(!this.internalState)return;const{changeFlags:t}=this.internalState;for(const r in e)if(e[r]){let n=!1;if("dataChanged"===r){const s=e[r],i=t[r];s&&Array.isArray(i)&&(t.dataChanged=Array.isArray(s)?i.concat(s):s,n=!0)}t[r]||(t[r]=e[r],n=!0),n&&Yn("layer.changeFlag",this,r,e)}const n=Boolean(t.dataChanged||t.updateTriggersChanged||t.propsChanged||t.extensionsChanged);t.propsOrDataChanged=n,t.somethingChanged=n||t.viewportChanged||t.stateChanged}_clearChangeFlags(){this.internalState.changeFlags={dataChanged:!1,propsChanged:!1,updateTriggersChanged:!1,viewportChanged:!1,stateChanged:!1,extensionsChanged:!1,propsOrDataChanged:!1,somethingChanged:!1}}_diffProps(e,t){var n;const r=function(e,t){const n=kg({newProps:e,oldProps:t,propTypes:e[$h],ignoreProps:{data:null,updateTriggers:null,extensions:null,transitions:null}}),r=function(e,t){if(null===t)return"oldProps is null, initial diff";let n=!1;const{dataComparator:r,_dataDiff:s}=e;return r?r(e.data,t.data)||(n="Data comparator detected a change"):e.data!==t.data&&(n="A new data container was supplied"),n&&s&&(n=s(e.data,t.data)||n),n}(e,t);let s=!1;return r||(s=function(e,t){if(null===t)return{all:!0};if("all"in e.updateTriggers&&Mg(e,t,"all"))return{all:!0};const n={};let r=!1;for(const s in e.updateTriggers)"all"!==s&&Mg(e,t,s)&&(n[s]=!0,r=!0);return!!r&&n}(e,t)),{dataChanged:r,propsChanged:n,updateTriggersChanged:s,extensionsChanged:Ig(e,t),transitionsChanged:Cg(e,t)}}(e,t);if(r.updateTriggersChanged)for(const s in r.updateTriggersChanged)r.updateTriggersChanged[s]&&this.invalidateAttribute(s);if(r.transitionsChanged)for(const s in r.transitionsChanged)this.internalState.uniformTransitions.add(s,t[s],e[s],null==(n=e.transitions)?void 0:n[s]);return this.setChangeFlags(r)}validateProps(){!function(e){const t=e[$h];for(const n in t){const r=t[n],{validate:s}=r;if(s&&!s(e[n],r))throw new Error(`Invalid prop ${n}: ${e[n]}`)}}(this.props)}updateAutoHighlight(e){this.props.autoHighlight&&!Number.isInteger(this.props.highlightedObjectIndex)&&this._updateAutoHighlight(e)}_updateAutoHighlight(e){const t={highlightedObjectColor:e.picked?e.color:null},{highlightColor:n}=this.props;e.picked&&"function"==typeof n&&(t.highlightColor=n(e)),this.setShaderModuleProps({picking:t}),this.setNeedsRedraw()}_getAttributeManager(){const e=this.context;return new wg(e.device,{id:this.props.id,stats:e.stats,timeline:e.timeline})}_postUpdate(e,t){const{props:n,oldProps:r}=e,s=this.state.model;(null==s?void 0:s.isInstanced)&&s.setInstanceCount(this.getNumInstances());const{autoHighlight:i,highlightedObjectIndex:o,highlightColor:a}=n;if(t||r.autoHighlight!==i||r.highlightedObjectIndex!==o||r.highlightColor!==a){const e={};Array.isArray(a)&&(e.highlightColor=a),(t||r.autoHighlight!==i||o!==r.highlightedObjectIndex)&&(e.highlightedObjectColor=Number.isFinite(o)&&o>=0?this.encodePickingColor(o):null),this.setShaderModuleProps({picking:e})}}_getUpdateParams(){return{props:this.props,oldProps:this.internalState.getOldProps(),context:this.context,changeFlags:this.internalState.changeFlags}}_getNeedsRedraw(e){if(!this.internalState)return!1;let t=!1;t=t||this.internalState.needsRedraw&&this.id;const n=this.getAttributeManager(),r=!!n&&n.getNeedsRedraw(e);if(t=t||r,t)for(const s of this.props.extensions)s.onNeedsRedraw.call(this,s);return this.internalState.needsRedraw=this.internalState.needsRedraw&&!e.clearRedrawFlags,t}_onAsyncPropUpdated(){this._diffProps(this.props,this.internalState.getOldProps()),this.setNeedsUpdate()}}tm.defaultProps=em,tm.layerName="Layer";class nm extends tm{get isComposite(){return!0}get isDrawable(){return!1}get isLoaded(){return super.isLoaded&&this.getSubLayers().every(e=>e.isLoaded)}getSubLayers(){return this.internalState&&this.internalState.subLayers||[]}initializeState(e){}setState(e){super.setState(e),this.setNeedsUpdate()}getPickingInfo({info:e}){const{object:t}=e;return t&&t.__source&&t.__source.parent&&t.__source.parent.id===this.id?(e.object=t.__source.object,e.index=t.__source.index,e):e}filterSubLayer(e){return!0}shouldRenderSubLayer(e,t){return t&&t.length}getSubLayerClass(e,t){const{_subLayerProps:n}=this.props;return n&&n[e]&&n[e].type||t}getSubLayerRow(e,t,n){return e.__source={parent:this,object:t,index:n},e}getSubLayerAccessor(e){if("function"==typeof e){const t={index:-1,data:this.props.data,target:[]};return(n,r)=>n&&n.__source?(t.index=n.__source.index,e(n.__source.object,t)):e(n,r)}return e}getSubLayerProps(e={}){var t;const{opacity:n,pickable:r,visible:s,parameters:i,getPolygonOffset:o,highlightedObjectIndex:a,autoHighlight:l,highlightColor:c,coordinateSystem:u,coordinateOrigin:h,wrapLongitude:d,positionFormat:f,modelMatrix:p,extensions:g,fetch:m,operation:_,_subLayerProps:y}=this.props,b={id:"",updateTriggers:{},opacity:n,pickable:r,visible:s,parameters:i,getPolygonOffset:o,highlightedObjectIndex:a,autoHighlight:l,highlightColor:c,coordinateSystem:u,coordinateOrigin:h,wrapLongitude:d,positionFormat:f,modelMatrix:p,extensions:g,fetch:m,operation:_},v=y&&e.id&&y[e.id],x=v&&v.updateTriggers,w=e.id||"sublayer";if(v){const t=this.props[$h],n=e.type?e.type._propTypes:{};for(const e in v){const r=n[e]||t[e];r&&"accessor"===r.type&&(v[e]=this.getSubLayerAccessor(v[e]))}}Object.assign(b,e,v),b.id=`${this.props.id}-${w}`,b.updateTriggers={all:null==(t=this.props.updateTriggers)?void 0:t.all,...e.updateTriggers,...x};for(const E of g){const e=E.getSubLayerProps.call(this,E);e&&Object.assign(b,e,{updateTriggers:Object.assign(b.updateTriggers,e.updateTriggers)})}return b}_updateAutoHighlight(e){for(const t of this.getSubLayers())t.updateAutoHighlight(e)}_getAttributeManager(){return null}_postUpdate(e,t){let n=this.internalState.subLayers;const r=!n||this.needsUpdate();r&&(n=Zh(this.renderLayers(),Boolean),this.internalState.subLayers=n),Yn("compositeLayer.renderLayers",this,r,n);for(const s of n)s.parent=this}}nm.layerName="CompositeLayer";const rm=Math.PI/180,sm=180/Math.PI,im=6370972,om=256;function am(){const e=4018225162502676e-20,t=Math.PI/180*om;return{unitsPerMeter:[e,e,e],unitsPerMeter2:[0,0,0],metersPerUnit:[24886.609375,24886.609375,24886.609375],unitsPerDegree:[t,t,e],unitsPerDegree2:[0,0,0],degreesPerUnit:[1/t,1/t,24886.609375]}}class lm extends oh{constructor(e={}){const{longitude:t=0,zoom:n=0,nearZMultiplier:r=.5,farZMultiplier:s=1,resolution:i=10}=e;let{latitude:o=0,height:a,altitude:l=1.5,fovy:c}=e;o=Math.max(Math.min(o,iu),-85.051129),a=a||1,c?l=fu(c):c=du(l);const u=1/Math.PI/Math.cos(o*Math.PI/180),h=Math.pow(2,n)*u,d=e.nearZ??r,f=e.farZ??(l+512*h/a)*s,p=(new yl).lookAt({eye:[0,-l,0],up:[0,0,1]});p.rotateX(o*rm),p.rotateZ(-t*rm),p.scale(h/a),super({...e,height:a,viewMatrix:p,longitude:t,latitude:o,zoom:n,distanceScales:am(),fovy:c,focalDistance:l,near:d,far:f}),this.scale=h,this.latitude=o,this.longitude=t,this.resolution=i}get projectionMode(){return kc.GLOBE}getDistanceScales(){return this.distanceScales}getBounds(e={}){const t={targetZ:e.z||0},n=this.unproject([0,this.height/2],t),r=this.unproject([this.width/2,0],t),s=this.unproject([this.width,this.height/2],t),i=this.unproject([this.width/2,this.height],t);return s[0]this.longitude&&(n[0]-=360),[Math.min(n[0],s[0],r[0],i[0]),Math.min(n[1],s[1],r[1],i[1]),Math.max(n[0],s[0],r[0],i[0]),Math.max(n[1],s[1],r[1],i[1])]}unproject(e,{topLeft:t=!0,targetZ:n}={}){const[r,s,i]=e,o=t?s:this.height-s,{pixelUnprojectionMatrix:a}=this;let l;if(Number.isFinite(i))l=cm(a,[r,o,i,1]);else{const e=cm(a,[r,o,-1,1]),t=cm(a,[r,o,1,1]),s=((n||0)/im+1)*om,i=Qa(Za([],e,t)),c=Qa(e),u=Qa(t),h=(4*c*u-(i-c-u)**2)/16*4/i;l=function(e,t,n,r){const s=t[0],i=t[1],o=t[2];return e[0]=s+r*(n[0]-s),e[1]=i+r*(n[1]-i),e[2]=o+r*(n[2]-o),e}([],e,t,(Math.sqrt(c-h)-Math.sqrt(Math.max(0,s*s-h)))/Math.sqrt(i))}const[c,u,h]=this.unprojectPosition(l);return Number.isFinite(i)?[c,u,h]:Number.isFinite(n)?[c,u,n]:[c,u]}projectPosition(e){const[t,n,r=0]=e,s=t*rm,i=n*rm,o=Math.cos(i),a=(r/im+1)*om;return[Math.sin(s)*o*a,-Math.cos(s)*o*a,Math.sin(i)*a]}unprojectPosition(e){const[t,n,r]=e,s=function(e){const t=e[0],n=e[1],r=e[2];return Math.sqrt(t*t+n*n+r*r)}(e),i=Math.asin(r/s);return[Math.atan2(t,-n)*sm,i*sm,(s/om-1)*im]}projectFlat(e){return e}unprojectFlat(e){return e}panByPosition(e,t){const n=this.unproject(t);return{longitude:e[0]-n[0]+this.longitude,latitude:e[1]-n[1]+this.latitude}}}function cm(e,t){const n=ul([],t,e);return cl(n,n,1/n[3]),n}class um extends kd{applyConstraints(e){const{maxZoom:t,minZoom:n,zoom:r}=e;e.zoom=Da(r,n,t);const{longitude:s,latitude:i}=e;return(s<-180||s>180)&&(e.longitude=function(e){const t=e%360;return t<0?360+t:t}(s+180)-180),e.latitude=Da(i,-85.051129,iu),e}}class hm extends Rd{constructor(){super(...arguments),this.ControllerState=um,this.transition={transitionDuration:300,transitionInterpolator:new _d(["longitude","latitude","zoom"])},this.dragMode="pan"}setProps(e){super.setProps(e),this.dragRotate=!1,this.touchRotate=!1}}class dm extends ld{constructor(e={}){super(e)}getViewportType(e){return e.zoom>12?ah:lm}get ControllerType(){return hm}}dm.displayName="GlobeView";class fm{constructor(e){this.indexStarts=[0],this.vertexStarts=[0],this.vertexCount=0,this.instanceCount=0;const{attributes:t={}}=e;this.typedArrayManager=Yu,this.attributes={},this._attributeDefs=t,this.opts=e,this.updateGeometry(e)}updateGeometry(e){Object.assign(this.opts,e);const{data:t,buffers:n={},getGeometry:r,geometryBuffer:s,positionFormat:i,dataChanged:o,normalize:a=!0}=this.opts;if(this.data=t,this.getGeometry=r,this.positionSize=s&&s.size||("XY"===i?2:3),this.buffers=n,this.normalize=a,s&&(fd(t.startIndices),this.getGeometry=this.getGeometryFromBuffer(s),a||(n.vertexPositions=s)),this.geometryBuffer=n.vertexPositions,Array.isArray(o))for(const l of o)this._rebuildGeometry(l);else this._rebuildGeometry()}updatePartialGeometry({startRow:e,endRow:t}){this._rebuildGeometry({startRow:e,endRow:t})}getGeometryFromBuffer(e){const t=e.value||e;return ArrayBuffer.isView(t)?rg(t,{size:this.positionSize,offset:e.offset,stride:e.stride,startIndices:this.data.startIndices}):null}_allocate(e,t){const{attributes:n,buffers:r,_attributeDefs:s,typedArrayManager:i}=this;for(const o in s)if(o in r)i.release(n[o]),n[o]=null;else{const r=s[o];r.copy=t,n[o]=i.allocate(n[o],e,r)}}_forEachGeometry(e,t,n){const{data:r,getGeometry:s}=this,{iterable:i,objectInfo:o}=tg(r,t,n);for(const a of i)o.index++,e(s?s(a,o):null,o.index)}_rebuildGeometry(e){if(!this.data)return;let{indexStarts:t,vertexStarts:n,instanceCount:r}=this;const{data:s,geometryBuffer:i}=this,{startRow:o=0,endRow:a=1/0}=e||{},l={};if(e||(t=[0],n=[0]),this.normalize||!i)this._forEachGeometry((e,t)=>{const r=e&&this.normalizeGeometry(e);l[t]=r,n[t+1]=n[t]+(r?this.getGeometrySize(r):0)},o,a),r=n[n.length-1];else if(n=s.startIndices,r=n[s.length]||0,ArrayBuffer.isView(i))r=r||i.length/this.positionSize;else if(i instanceof jr){const e=4*this.positionSize;r=r||i.byteLength/e}else if(i.buffer){const e=i.stride||4*this.positionSize;r=r||i.buffer.byteLength/e}else if(i.value){const e=i.value,t=i.stride/e.BYTES_PER_ELEMENT||this.positionSize;r=r||e.length/t}this._allocate(r,Boolean(e)),this.indexStarts=t,this.vertexStarts=n,this.instanceCount=r;const c={};this._forEachGeometry((e,s)=>{const i=l[s]||e;c.vertexStart=n[s],c.indexStart=t[s];const o=s0){let s=!0;for(let i=0;it[2]&&(n|=2),e[1]t[3]&&(n|=8),n}function bm(e,t){const{size:n=2,broken:r=!1,gridResolution:s=10,gridOffset:i=[0,0],startIndex:o=0,endIndex:a=e.length}=t||{},l=(a-o)/n;let c=[];const u=[c],h=mm(e,0,n,o);let d,f;const p=function(e,t,n,r){const s=Math.floor((e[0]-n[0])/t)*t+n[0],i=Math.floor((e[1]-n[1])/t)*t+n[1];return r[0]=s,r[1]=i,r[2]=s+t,r[3]=i+t,r}(h,s,i,[]),g=[];pm(c,h);for(let m=1;mn&&(c=[],u.push(c),pm(c,h)),f=ym(d,p)}pm(c,d),gm(h,d)}return r?u:u[0]}function vm(e,t,n){8&n?(e[1]+=t,e[3]+=t):4&n?(e[1]-=t,e[3]-=t):2&n?(e[0]+=t,e[2]+=t):1&n&&(e[0]-=t,e[2]-=t)}function xm(e,t){let n;const r=e.length/t;for(let i=0;i180||t<-180)&&(s-=360*Math.round(t/360)),e[o]=i=s}}(o,n,0,s-r);const a=bm(o,{size:n,broken:!0,gridResolution:360,gridOffset:[-180,-180]});if(i)for(const l of a)xm(l,n);return a}(s,{size:t}):s}(e,this.positionSize,this.opts.resolution,this.opts.wrapLongitude):e}getGeometrySize(e){if(Em(e)){let t=0;for(const n of e)t+=this.getGeometrySize(n);return t}const t=this.getPathLength(e);return t<2?0:this.isClosed(e)?t<3?0:t+2:t}updateGeometryAttributes(e,t){if(0!==t.geometrySize)if(e&&Em(e))for(const n of e){const e=this.getGeometrySize(n);t.geometrySize=e,this.updateGeometryAttributes(n,t),t.vertexStart+=e}else this._updateSegmentTypes(e,t),this._updatePositions(e,t)}_updateSegmentTypes(e,t){const n=this.attributes.segmentTypes,r=!!e&&this.isClosed(e),{vertexStart:s,geometrySize:i}=t;n.fill(0,s,s+i),r?(n[s]=4,n[s+i-2]=4):(n[s]+=1,n[s+i-2]+=2),n[s+i-1]=4}_updatePositions(e,t){const{positions:n}=this.attributes;if(!n||!e)return;const{vertexStart:r,geometrySize:s}=t,i=new Array(3);for(let o=r,a=0;a=e.length&&(t+=1-e.length/r);const s=t*r;return n[0]=e[s],n[1]=e[s+1],n[2]=3===r&&e[s+2]||0,n}isClosed(e){if(!this.normalize)return Boolean(this.opts.loop);const{positionSize:t}=this,n=e.length-t;return e[0]===e[n]&&e[1]===e[n+1]&&(2===t||e[2]===e[n+2])}}function Em(e){return Array.isArray(e[0])}const Tm="uniform pathUniforms {\n float widthScale;\n float widthMinPixels;\n float widthMaxPixels;\n float jointType;\n float capType;\n float miterLimit;\n bool billboard;\n highp int widthUnits;\n} path;\n",Sm={name:"path",vs:Tm,fs:Tm,uniformTypes:{widthScale:"f32",widthMinPixels:"f32",widthMaxPixels:"f32",jointType:"f32",capType:"f32",miterLimit:"f32",billboard:"f32",widthUnits:"i32"}},Am=[0,0,0,255],Rm={widthUnits:"meters",widthScale:{type:"number",min:0,value:1},widthMinPixels:{type:"number",min:0,value:0},widthMaxPixels:{type:"number",min:0,value:Number.MAX_SAFE_INTEGER},jointRounded:!1,capRounded:!1,miterLimit:{type:"number",min:0,value:4},billboard:!1,_pathType:null,getPath:{type:"accessor",value:e=>e.path},getColor:{type:"accessor",value:Am},getWidth:{type:"accessor",value:1},rounded:{deprecatedFor:["jointRounded","capRounded"]}},Cm={enter:(e,t)=>t.length?t.subarray(t.length-e.length):e};class km extends tm{getShaders(){return super.getShaders({vs:"#version 300 es\n#define SHADER_NAME path-layer-vertex-shader\nin vec2 positions;\nin float instanceTypes;\nin vec3 instanceStartPositions;\nin vec3 instanceEndPositions;\nin vec3 instanceLeftPositions;\nin vec3 instanceRightPositions;\nin vec3 instanceLeftPositions64Low;\nin vec3 instanceStartPositions64Low;\nin vec3 instanceEndPositions64Low;\nin vec3 instanceRightPositions64Low;\nin float instanceStrokeWidths;\nin vec4 instanceColors;\nin vec3 instancePickingColors;\nuniform float opacity;\nout vec4 vColor;\nout vec2 vCornerOffset;\nout float vMiterLength;\nout vec2 vPathPosition;\nout float vPathLength;\nout float vJointType;\nconst float EPSILON = 0.001;\nconst vec3 ZERO_OFFSET = vec3(0.0);\nfloat flipIfTrue(bool flag) {\nreturn -(float(flag) * 2. - 1.);\n}\nvec3 getLineJoinOffset(\nvec3 prevPoint, vec3 currPoint, vec3 nextPoint,\nvec2 width\n) {\nbool isEnd = positions.x > 0.0;\nfloat sideOfPath = positions.y;\nfloat isJoint = float(sideOfPath == 0.0);\nvec3 deltaA3 = (currPoint - prevPoint);\nvec3 deltaB3 = (nextPoint - currPoint);\nmat3 rotationMatrix;\nbool needsRotation = !path.billboard && project_needs_rotation(currPoint, rotationMatrix);\nif (needsRotation) {\ndeltaA3 = deltaA3 * rotationMatrix;\ndeltaB3 = deltaB3 * rotationMatrix;\n}\nvec2 deltaA = deltaA3.xy / width;\nvec2 deltaB = deltaB3.xy / width;\nfloat lenA = length(deltaA);\nfloat lenB = length(deltaB);\nvec2 dirA = lenA > 0. ? normalize(deltaA) : vec2(0.0, 0.0);\nvec2 dirB = lenB > 0. ? normalize(deltaB) : vec2(0.0, 0.0);\nvec2 perpA = vec2(-dirA.y, dirA.x);\nvec2 perpB = vec2(-dirB.y, dirB.x);\nvec2 tangent = dirA + dirB;\ntangent = length(tangent) > 0. ? normalize(tangent) : perpA;\nvec2 miterVec = vec2(-tangent.y, tangent.x);\nvec2 dir = isEnd ? dirA : dirB;\nvec2 perp = isEnd ? perpA : perpB;\nfloat L = isEnd ? lenA : lenB;\nfloat sinHalfA = abs(dot(miterVec, perp));\nfloat cosHalfA = abs(dot(dirA, miterVec));\nfloat turnDirection = flipIfTrue(dirA.x * dirB.y >= dirA.y * dirB.x);\nfloat cornerPosition = sideOfPath * turnDirection;\nfloat miterSize = 1.0 / max(sinHalfA, EPSILON);\nmiterSize = mix(\nmin(miterSize, max(lenA, lenB) / max(cosHalfA, EPSILON)),\nmiterSize,\nstep(0.0, cornerPosition)\n);\nvec2 offsetVec = mix(miterVec * miterSize, perp, step(0.5, cornerPosition))\n* (sideOfPath + isJoint * turnDirection);\nbool isStartCap = lenA == 0.0 || (!isEnd && (instanceTypes == 1.0 || instanceTypes == 3.0));\nbool isEndCap = lenB == 0.0 || (isEnd && (instanceTypes == 2.0 || instanceTypes == 3.0));\nbool isCap = isStartCap || isEndCap;\nif (isCap) {\noffsetVec = mix(perp * sideOfPath, dir * path.capType * 4.0 * flipIfTrue(isStartCap), isJoint);\nvJointType = path.capType;\n} else {\nvJointType = path.jointType;\n}\nvPathLength = L;\nvCornerOffset = offsetVec;\nvMiterLength = dot(vCornerOffset, miterVec * turnDirection);\nvMiterLength = isCap ? isJoint : vMiterLength;\nvec2 offsetFromStartOfPath = vCornerOffset + deltaA * float(isEnd);\nvPathPosition = vec2(\ndot(offsetFromStartOfPath, perp),\ndot(offsetFromStartOfPath, dir)\n);\ngeometry.uv = vPathPosition;\nfloat isValid = step(instanceTypes, 3.5);\nvec3 offset = vec3(offsetVec * width * isValid, 0.0);\nif (needsRotation) {\noffset = rotationMatrix * offset;\n}\nreturn offset;\n}\nvoid clipLine(inout vec4 position, vec4 refPosition) {\nif (position.w < EPSILON) {\nfloat r = (EPSILON - refPosition.w) / (position.w - refPosition.w);\nposition = refPosition + (position - refPosition) * r;\n}\n}\nvoid main() {\ngeometry.pickingColor = instancePickingColors;\nvColor = vec4(instanceColors.rgb, instanceColors.a * layer.opacity);\nfloat isEnd = positions.x;\nvec3 prevPosition = mix(instanceLeftPositions, instanceStartPositions, isEnd);\nvec3 prevPosition64Low = mix(instanceLeftPositions64Low, instanceStartPositions64Low, isEnd);\nvec3 currPosition = mix(instanceStartPositions, instanceEndPositions, isEnd);\nvec3 currPosition64Low = mix(instanceStartPositions64Low, instanceEndPositions64Low, isEnd);\nvec3 nextPosition = mix(instanceEndPositions, instanceRightPositions, isEnd);\nvec3 nextPosition64Low = mix(instanceEndPositions64Low, instanceRightPositions64Low, isEnd);\ngeometry.worldPosition = currPosition;\nvec2 widthPixels = vec2(clamp(\nproject_size_to_pixel(instanceStrokeWidths * path.widthScale, path.widthUnits),\npath.widthMinPixels, path.widthMaxPixels) / 2.0);\nvec3 width;\nif (path.billboard) {\nvec4 prevPositionScreen = project_position_to_clipspace(prevPosition, prevPosition64Low, ZERO_OFFSET);\nvec4 currPositionScreen = project_position_to_clipspace(currPosition, currPosition64Low, ZERO_OFFSET, geometry.position);\nvec4 nextPositionScreen = project_position_to_clipspace(nextPosition, nextPosition64Low, ZERO_OFFSET);\nclipLine(prevPositionScreen, currPositionScreen);\nclipLine(nextPositionScreen, currPositionScreen);\nclipLine(currPositionScreen, mix(nextPositionScreen, prevPositionScreen, isEnd));\nwidth = vec3(widthPixels, 0.0);\nDECKGL_FILTER_SIZE(width, geometry);\nvec3 offset = getLineJoinOffset(\nprevPositionScreen.xyz / prevPositionScreen.w,\ncurrPositionScreen.xyz / currPositionScreen.w,\nnextPositionScreen.xyz / nextPositionScreen.w,\nproject_pixel_size_to_clipspace(width.xy)\n);\nDECKGL_FILTER_GL_POSITION(currPositionScreen, geometry);\ngl_Position = vec4(currPositionScreen.xyz + offset * currPositionScreen.w, currPositionScreen.w);\n} else {\nprevPosition = project_position(prevPosition, prevPosition64Low);\ncurrPosition = project_position(currPosition, currPosition64Low);\nnextPosition = project_position(nextPosition, nextPosition64Low);\nwidth = vec3(project_pixel_size(widthPixels), 0.0);\nDECKGL_FILTER_SIZE(width, geometry);\nvec3 offset = getLineJoinOffset(prevPosition, currPosition, nextPosition, width.xy);\ngeometry.position = vec4(currPosition + offset, 1.0);\ngl_Position = project_common_position_to_clipspace(geometry.position);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\n}\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n",fs:"#version 300 es\n#define SHADER_NAME path-layer-fragment-shader\nprecision highp float;\nin vec4 vColor;\nin vec2 vCornerOffset;\nin float vMiterLength;\nin vec2 vPathPosition;\nin float vPathLength;\nin float vJointType;\nout vec4 fragColor;\nvoid main(void) {\ngeometry.uv = vPathPosition;\nif (vPathPosition.y < 0.0 || vPathPosition.y > vPathLength) {\nif (vJointType > 0.5 && length(vCornerOffset) > 1.0) {\ndiscard;\n}\nif (vJointType < 0.5 && vMiterLength > path.miterLimit + 1.0) {\ndiscard;\n}\n}\nfragColor = vColor;\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n",modules:[qc,Au,Sm]})}get wrapLongitude(){return!1}getBounds(){var e;return null==(e=this.getAttributeManager())?void 0:e.getBounds(["vertexPositions"])}initializeState(){const e=!0;this.getAttributeManager().addInstanced({vertexPositions:{size:3,vertexOffset:1,type:"float64",fp64:this.use64bitPositions(),transition:Cm,accessor:"getPath",update:this.calculatePositions,noAlloc:e,shaderAttributes:{instanceLeftPositions:{vertexOffset:0},instanceStartPositions:{vertexOffset:1},instanceEndPositions:{vertexOffset:2},instanceRightPositions:{vertexOffset:3}}},instanceTypes:{size:1,type:"uint8",update:this.calculateSegmentTypes,noAlloc:e},instanceStrokeWidths:{size:1,accessor:"getWidth",transition:Cm,defaultValue:1},instanceColors:{size:this.props.colorFormat.length,type:"unorm8",accessor:"getColor",transition:Cm,defaultValue:Am},instancePickingColors:{size:4,type:"uint8",accessor:(e,{index:t,target:n})=>this.encodePickingColor(e&&e.__source?e.__source.index:t,n)}}),this.setState({pathTesselator:new wm({fp64:this.use64bitPositions()})})}updateState(e){var t;super.updateState(e);const{props:n,changeFlags:r}=e,s=this.getAttributeManager();if(r.dataChanged||r.updateTriggersChanged&&(r.updateTriggersChanged.all||r.updateTriggersChanged.getPath)){const{pathTesselator:e}=this.state,t=n.data.attributes||{};e.updateGeometry({data:n.data,geometryBuffer:t.getPath,buffers:t,normalize:!n._pathType,loop:"loop"===n._pathType,getGeometry:n.getPath,positionFormat:n.positionFormat,wrapLongitude:n.wrapLongitude,resolution:this.context.viewport.resolution,dataChanged:r.dataChanged}),this.setState({numInstances:e.instanceCount,startIndices:e.vertexStarts}),r.dataChanged||s.invalidateAll()}r.extensionsChanged&&(null==(t=this.state.model)||t.destroy(),this.state.model=this._getModel(),s.invalidateAll())}getPickingInfo(e){const t=super.getPickingInfo(e),{index:n}=t,r=this.props.data;return r[0]&&r[0].__source&&(t.object=r.find(e=>e.__source.index===n)),t}disablePickingIndex(e){const t=this.props.data;if(t[0]&&t[0].__source)for(let n=0;n",intensity:"f32",threshold:"f32"}};class Lm extends tm{getShaders(){return super.getShaders({vs:"#version 300 es\n#define SHADER_NAME heatp-map-layer-vertex-shader\nuniform sampler2D maxTexture;\nin vec3 positions;\nin vec2 texCoords;\nout vec2 vTexCoords;\nout float vIntensityMin;\nout float vIntensityMax;\nvoid main(void) {\ngl_Position = project_position_to_clipspace(positions, vec3(0.0), vec3(0.0));\nvTexCoords = texCoords;\nvec4 maxTexture = texture(maxTexture, vec2(0.5));\nfloat maxValue = triangle.aggregationMode < 0.5 ? maxTexture.r : maxTexture.g;\nfloat minValue = maxValue * triangle.threshold;\nif (triangle.colorDomain[1] > 0.) {\nmaxValue = triangle.colorDomain[1];\nminValue = triangle.colorDomain[0];\n}\nvIntensityMax = triangle.intensity / maxValue;\nvIntensityMin = triangle.intensity / minValue;\n}\n",fs:"#version 300 es\n#define SHADER_NAME triangle-layer-fragment-shader\nprecision highp float;\nuniform sampler2D weightsTexture;\nuniform sampler2D colorTexture;\nin vec2 vTexCoords;\nin float vIntensityMin;\nin float vIntensityMax;\nout vec4 fragColor;\nvec4 getLinearColor(float value) {\nfloat factor = clamp(value * vIntensityMax, 0., 1.);\nvec4 color = texture(colorTexture, vec2(factor, 0.5));\ncolor.a *= min(value * vIntensityMin, 1.0);\nreturn color;\n}\nvoid main(void) {\nvec4 weights = texture(weightsTexture, vTexCoords);\nfloat weight = weights.r;\nif (triangle.aggregationMode > 0.5) {\nweight /= max(1.0, weights.a);\n}\nif (weight <= 0.) {\ndiscard;\n}\nvec4 linearColor = getLinearColor(weight);\nlinearColor.a *= layer.opacity;\nfragColor = linearColor;\n}\n",modules:[qc,Nm]})}initializeState({device:e}){this.setState({model:this._getModel(e)})}_getModel(e){const{vertexCount:t,data:n}=this.props;return new Fh(e,{...this.getShaders(),id:this.props.id,attributes:n.attributes,bufferLayout:[{name:"positions",format:"float32x3"},{name:"texCoords",format:"float32x2"}],topology:"triangle-strip",vertexCount:t})}draw(){const{model:e}=this.state,{aggregationMode:t,colorDomain:n,intensity:r,threshold:s,colorTexture:i,maxTexture:o,weightsTexture:a}=this.props,l={aggregationMode:t,colorDomain:n,intensity:r,threshold:s,colorTexture:i,maxTexture:o,weightsTexture:a};e.shaderInputs.setProps({triangle:l}),e.draw(this.context.renderPass)}}function Om(e,t){const n={};for(const r in e)t.includes(r)||(n[r]=e[r]);return n}Lm.layerName="TriangleLayer";class Fm extends nm{initializeAggregationLayer(e){super.initializeState(this.context),this.setState({ignoreProps:Om(this.constructor._propTypes,e.data.props),dimensions:e})}updateState(e){super.updateState(e);const{changeFlags:t}=e;if(t.extensionsChanged){const e=this.getShaders({});e&&e.defines&&(e.defines.NON_INSTANCED_MODEL=1),this.updateShaders(e)}this._updateAttributes()}updateAttributes(e){this.setState({changedAttributes:e})}getAttributes(){return this.getAttributeManager().getAttributes()}getModuleSettings(){const{viewport:e,mousePosition:t,device:n}=this.context;return Object.assign(Object.create(this.props),{viewport:e,mousePosition:t,picking:{isActive:0},devicePixelRatio:n.canvasContext.cssToDeviceRatio()})}updateShaders(e){}isAggregationDirty(e,t={}){const{props:n,oldProps:r,changeFlags:s}=e,{compareAll:i=!1,dimension:o}=t,{ignoreProps:a}=this.state,{props:l,accessors:c=[]}=o,{updateTriggersChanged:u}=s;if(s.dataChanged)return!0;if(u){if(u.all)return!0;for(const e of c)if(u[e])return!0}if(i)return!!s.extensionsChanged||kg({oldProps:r,newProps:n,ignoreProps:a,propTypes:this.constructor._propTypes});for(const h of l)if(n[h]!==r[h])return!0;return!1}isAttributeChanged(e){const{changedAttributes:t}=this.state;return e?t&&void 0!==t[e]:!function(e){let t=!0;for(const n in e){t=!1;break}return t}(t)}_getAttributeManager(){return new wg(this.context.device,{id:this.props.id,stats:this.context.stats})}}Fm.layerName="AggregationLayer";const Dm="#version 300 es\nin vec3 positions;\nin vec3 positions64Low;\nin float weights;\nout vec4 weightsTexture;\nvoid main()\n{\nweightsTexture = vec4(weights * weight.weightsScale, 0., 0., 1.);\nfloat radiusTexels = project_pixel_size(weight.radiusPixels) * weight.textureWidth / (weight.commonBounds.z - weight.commonBounds.x);\ngl_PointSize = radiusTexels * 2.;\nvec3 commonPosition = project_position(positions, positions64Low);\ngl_Position.xy = (commonPosition.xy - weight.commonBounds.xy) / (weight.commonBounds.zw - weight.commonBounds.xy) ;\ngl_Position.xy = (gl_Position.xy * 2.) - (1.);\ngl_Position.w = 1.0;\n}\n",Bm="#version 300 es\nin vec4 weightsTexture;\nout vec4 fragColor;\nfloat gaussianKDE(float u){\nreturn pow(2.71828, -u*u/0.05555)/(1.77245385*0.166666);\n}\nvoid main()\n{\nfloat dist = length(gl_PointCoord - vec2(0.5, 0.5));\nif (dist > 0.5) {\ndiscard;\n}\nfragColor = weightsTexture * gaussianKDE(2. * dist);\nDECKGL_FILTER_COLOR(fragColor, geometry);\n}\n",Um={name:"weight",vs:"uniform weightUniforms {\n vec4 commonBounds;\n float radiusPixels;\n float textureWidth;\n float weightsScale;\n} weight;\n",uniformTypes:{commonBounds:"vec4",radiusPixels:"f32",textureWidth:"f32",weightsScale:"f32"}},jm={name:"maxWeight",vs:"uniform maxWeightUniforms {\n float textureSize;\n} maxWeight;\n",uniformTypes:{textureSize:"f32"}},Vm={format:"rgba8unorm",dimension:"2d",width:1,height:1,sampler:{minFilter:"linear",magFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}},Gm=[0,0],zm={SUM:0,MEAN:1},Wm=["float32-renderable-webgl","texture-blend-float-webgl"],Hm={data:{props:["radiusPixels"]}};class $m extends Fm{getShaders(e){let t=[qc];return e.modules&&(t=[...t,...e.modules]),super.getShaders({...e,modules:t})}initializeState(){super.initializeAggregationLayer(Hm),this.setState({colorDomain:Gm}),this._setupTextureParams(),this._setupAttributes(),this._setupResources()}shouldUpdateState({changeFlags:e}){return e.somethingChanged}updateState(e){super.updateState(e),this._updateHeatmapState(e)}_updateHeatmapState(e){const{props:t,oldProps:n}=e,r=this._getChangeFlags(e);if((r.dataChanged||r.viewportChanged)&&(r.boundsChanged=this._updateBounds(r.dataChanged),this._updateTextureRenderingBounds()),r.dataChanged||r.boundsChanged){if(clearTimeout(this.state.updateTimer),this.setState({isWeightMapDirty:!0}),r.dataChanged){const e=this.getShaders({vs:Dm,fs:Bm});this._createWeightsTransform(e)}}else r.viewportZoomChanged&&this._debouncedUpdateWeightmap();t.colorRange!==n.colorRange&&this._updateColorTexture(e),this.state.isWeightMapDirty&&this._updateWeightmap(),this.setState({zoom:e.context.viewport.zoom})}renderLayers(){const{weightsTexture:e,triPositionBuffer:t,triTexCoordBuffer:n,maxWeightsTexture:r,colorTexture:s,colorDomain:i}=this.state,{updateTriggers:o,intensity:a,threshold:l,aggregation:c}=this.props;return new(this.getSubLayerClass("triangle",Lm))(this.getSubLayerProps({id:"triangle-layer",updateTriggers:o}),{coordinateSystem:Cc.DEFAULT,data:{attributes:{positions:t,texCoords:n}},vertexCount:4,maxTexture:r,colorTexture:s,aggregationMode:zm[c]||0,weightsTexture:e,intensity:a,threshold:l,colorDomain:i})}finalizeState(e){super.finalizeState(e);const{weightsTransform:t,weightsTexture:n,maxWeightTransform:r,maxWeightsTexture:s,triPositionBuffer:i,triTexCoordBuffer:o,colorTexture:a,updateTimer:l}=this.state;null==t||t.destroy(),null==n||n.destroy(),null==r||r.destroy(),null==s||s.destroy(),null==i||i.destroy(),null==o||o.destroy(),null==a||a.destroy(),l&&clearTimeout(l)}_getAttributeManager(){return new wg(this.context.device,{id:this.props.id,stats:this.context.stats})}_getChangeFlags(e){const t={},{dimensions:n}=this.state;t.dataChanged=this.isAttributeChanged()?"attribute changed":this.isAggregationDirty(e,{compareAll:!0,dimension:n.data})&&"aggregation is dirty",t.viewportChanged=e.changeFlags.viewportChanged;const{zoom:r}=this.state;return e.context.viewport&&e.context.viewport.zoom===r||(t.viewportZoomChanged=!0),t}_createTextures(){const{textureSize:e,format:t}=this.state;this.setState({weightsTexture:this.context.device.createTexture({...Vm,width:e,height:e,format:t}),maxWeightsTexture:this.context.device.createTexture({...Vm,width:1,height:1,format:t})})}_setupAttributes(){this.getAttributeManager().add({positions:{size:3,type:"float64",accessor:"getPosition"},weights:{size:1,accessor:"getWeight"}}),this.setState({positionAttributeName:"positions"})}_setupTextureParams(){const{device:e}=this.context,{weightsTextureSize:t}=this.props,n=Math.min(t,e.limits.maxTextureDimension2D),r=Wm.every(t=>e.features.has(t)),s=r?"rgba32float":"rgba8unorm",i=r?1:1/255;this.setState({textureSize:n,format:s,weightsScale:i}),r||$n.warn(`HeatmapLayer: ${this.id} rendering to float texture not supported, falling back to low precision format`)()}_createWeightsTransform(e){let{weightsTransform:t}=this.state;const{weightsTexture:n}=this.state,r=this.getAttributeManager();null==t||t.destroy(),t=new jh(this.context.device,{id:`${this.id}-weights-transform`,bufferLayout:r.getBufferLayouts(),vertexCount:1,targetTexture:n,parameters:{depthWriteEnabled:!1,blendColorOperation:"add",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"},topology:"point-list",...e,modules:[...e.modules,Um]}),this.setState({weightsTransform:t})}_setupResources(){this._createTextures();const{device:e}=this.context,{textureSize:t,weightsTexture:n,maxWeightsTexture:r}=this.state,s=this.getShaders({vs:Dm,fs:Bm});this._createWeightsTransform(s);const i=this.getShaders({vs:"#version 300 es\nuniform sampler2D inTexture;\nout vec4 outTexture;\nvoid main()\n{\nint yIndex = gl_VertexID / int(maxWeight.textureSize);\nint xIndex = gl_VertexID - (yIndex * int(maxWeight.textureSize));\nvec2 uv = (0.5 + vec2(float(xIndex), float(yIndex))) / maxWeight.textureSize;\noutTexture = texture(inTexture, uv);\ngl_Position = vec4(0.0, 0.0, 0.0, 1.0);\ngl_PointSize = 1.0;\n}\n",fs:"#version 300 es\nin vec4 outTexture;\nout vec4 fragColor;\nvoid main() {\nfragColor = outTexture;\nfragColor.g = outTexture.r / max(1.0, outTexture.a);\n}\n",modules:[jm]}),o=new jh(e,{id:`${this.id}-max-weights-transform`,targetTexture:r,...i,vertexCount:t*t,topology:"point-list",parameters:{depthWriteEnabled:!1,blendColorOperation:"max",blendAlphaOperation:"max",blendColorSrcFactor:"one",blendColorDstFactor:"one",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one"}}),a={inTexture:n,textureSize:t};o.model.shaderInputs.setProps({maxWeight:a}),this.setState({weightsTexture:n,maxWeightsTexture:r,maxWeightTransform:o,zoom:null,triPositionBuffer:e.createBuffer({byteLength:48}),triTexCoordBuffer:e.createBuffer({byteLength:48})})}updateShaders(e){this._createWeightsTransform({vs:Dm,fs:Bm,...e})}_updateMaxWeightValue(){const{maxWeightTransform:e}=this.state;e.run({parameters:{viewport:[0,0,1,1]},clearColor:[0,0,0,0]})}_updateBounds(e=!1){const{viewport:t}=this.context,n=[t.unproject([0,0]),t.unproject([t.width,0]),t.unproject([0,t.height]),t.unproject([t.width,t.height])].map(e=>e.map(Math.fround)),r=function(e){const t=e.map(e=>e[0]),n=e.map(e=>e[1]),r=Math.min.apply(null,t),s=Math.max.apply(null,t);return[r,Math.min.apply(null,n),s,Math.max.apply(null,n)]}(n),s={visibleWorldBounds:r,viewportCorners:n};let i=!1;if(e||!this.state.worldBounds||(o=this.state.worldBounds,!((a=r)[0]>=o[0]&&a[2]<=o[2]&&a[1]>=o[1]&&a[3]<=o[3]))){const e=this._worldToCommonBounds(r),t=this._commonToWorldBounds(e);this.props.coordinateSystem===Cc.LNGLAT&&(t[1]=Math.max(t[1],-85.051129),t[3]=Math.min(t[3],85.051129),t[0]=Math.max(t[0],-360),t[2]=Math.min(t[2],360));const n=this._worldToCommonBounds(t);s.worldBounds=t,s.normalizedCommonBounds=n,i=!0}var o,a;return this.setState(s),i}_updateTextureRenderingBounds(){const{triPositionBuffer:e,triTexCoordBuffer:t,normalizedCommonBounds:n,viewportCorners:r}=this.state,{viewport:s}=this.context;e.write(Im(r,3));const i=r.map(e=>function(e,t){const[n,r,s,i]=t;return[(e[0]-n)/(s-n),(e[1]-r)/(i-r)]}(s.projectPosition(e),n));t.write(Im(i,2))}_updateColorTexture(e){const{colorRange:t}=e.props;let{colorTexture:n}=this.state;const r=function(e,t=!1,n=Float32Array){let r;if(Number.isFinite(e[0]))r=new n(e);else{r=new n(4*e.length);let t=0;for(let n=0;ne*n*i)}else this.state.colorDomain=t||Gm;const c=this.getAttributeManager().getAttributes(),u=this.getModuleSettings();this._setModelAttributes(a.model,c),a.model.setVertexCount(this.getNumInstances());const h={radiusPixels:e,commonBounds:l,textureWidth:s,weightsScale:i,weightsTexture:o},{viewport:d,devicePixelRatio:f,coordinateSystem:p,coordinateOrigin:g}=u,{modelMatrix:m}=this.props;a.model.shaderInputs.setProps({project:{viewport:d,devicePixelRatio:f,modelMatrix:m,coordinateSystem:p,coordinateOrigin:g},weight:h}),a.run({parameters:{viewport:[0,0,s,s]},clearColor:[0,0,0,0]}),this._updateMaxWeightValue()}_debouncedUpdateWeightmap(e=!1){let{updateTimer:t}=this.state;const{debounceTimeout:n}=this.props;e?(t=null,this._updateBounds(!0),this._updateTextureRenderingBounds(),this.setState({isWeightMapDirty:!0})):(this.setState({isWeightMapDirty:!1}),clearTimeout(t),t=setTimeout(this._debouncedUpdateWeightmap.bind(this,!0),n)),this.setState({updateTimer:t})}_worldToCommonBounds(e,t={}){const{useLayerCoordinateSystem:n=!1}=t,[r,s,i,o]=e,{viewport:a}=this.context,{textureSize:l}=this.state,{coordinateSystem:c}=this.props,u=n&&(c===Cc.LNGLAT_OFFSETS||c===Cc.METER_OFFSETS),h=u?a.projectPosition(this.props.coordinateOrigin):[0,0],d=2*l/a.scale;let f,p;return n&&!u?(f=this.projectPosition([r,s,0]),p=this.projectPosition([i,o,0])):(f=a.projectPosition([r,s,0]),p=a.projectPosition([i,o,0])),function(e,t,n){const[r,s,i,o]=e,a=i-r,l=o-s;let c=a,u=l;a/le.position},getWeight:{type:"accessor",value:1},intensity:{type:"number",min:0,value:1},radiusPixels:{type:"number",min:1,max:100,value:50},colorRange:[[255,255,178],[254,217,118],[254,178,76],[253,141,60],[240,59,32],[189,0,38]],threshold:{type:"number",min:0,max:1,value:.05},colorDomain:{type:"array",value:null,optional:!0},aggregation:"SUM",weightsTextureSize:{type:"number",min:128,max:2048,value:2048},debounceTimeout:{type:"number",min:0,max:1e3,value:500}};const Xm="mapbox",qm=Math.PI/180;function Ym({map:e,gl:t,deck:n}){if(e.__deck)return e.__deck;const r=null==n?void 0:n.props._customRender,s=null==n?void 0:n.props.onLoad,i={...null==n?void 0:n.props,_customRender:()=>{e.triggerRepaint(),null==r||r("")}};let o;return i.parameters={...Qm(e,!0),...i.parameters},i.views||(i.views=e_(e)),n&&n.props.gl!==t||(Object.assign(i,{gl:t,width:null,height:null,touchAction:"unset",viewState:t_(e)}),(null==n?void 0:n.isInitialized)?Km(n,e):i.onLoad=()=>{null==s||s(),Km(o,e)}),n?(o=n,n.setProps(i),n.userData.isExternal=!0):(o=new Xp(i),e.on("remove",()=>{Zm(e)})),o.userData.mapboxLayers=new Set,e.__deck=o,e.on("render",()=>{o.isInitialized&&function(e,t){const{mapboxLayers:n,isExternal:r}=e.userData;if(r){const r=Array.from(n,e=>e.id),s=Zh(e.props.layers,Boolean).some(e=>e&&!r.includes(e.id));let i=e.getViewports();const o=i.findIndex(e=>e.id===Xm),a=i.length>1||o<0;(s||a)&&(o>=0&&(i=i.slice(),i[o]=n_(e,t)),e._drawLayers("mapbox-repaint",{viewports:i,layerFilter:t=>(!e.props.layerFilter||e.props.layerFilter(t))&&(t.viewport.id!==Xm||!r.includes(t.layer.id)),clearCanvas:!1}))}e.userData.currentViewport=null}(o,e)}),o}function Km(e,t){const n=()=>{e.isInitialized?function(e,t){e.setProps({viewState:t_(t)}),e.needsRedraw({clearRedrawFlags:!0})}(e,t):t.off("move",n)};t.on("move",n)}function Zm(e){var t;null==(t=e.__deck)||t.finalize(),e.__deck=null}function Qm(e,t){const n=t?{depthWriteEnabled:!0,depthCompare:"less-equal",depthBias:0,blend:!0,blendColorSrcFactor:"src-alpha",blendColorDstFactor:"one-minus-src-alpha",blendAlphaSrcFactor:"one",blendAlphaDstFactor:"one-minus-src-alpha",blendColorOperation:"add",blendAlphaOperation:"add"}:{};return"globe"===Jm(e)&&(n.cullMode="back"),n}function Jm(e){var t;const n=null==(t=e.getProjection)?void 0:t.call(e),r=(null==n?void 0:n.type)||(null==n?void 0:n.name);if("globe"===r)return"globe";if(r&&"mercator"!==r)throw new Error("Unsupported projection");return"mercator"}function e_(e){return"globe"===Jm(e)?new dm({id:Xm}):new Id({id:Xm})}function t_(e){var t;const{lng:n,lat:r}=e.getCenter(),s={longitude:(n+540)%360-180,latitude:r,zoom:e.getZoom(),bearing:e.getBearing(),pitch:e.getPitch(),padding:e.getPadding(),repeat:e.getRenderWorldCopies()};return(null==(t=e.getTerrain)?void 0:t.call(e))&&function(e,t){if(e.getFreeCameraOptions){const{position:n}=e.getFreeCameraOptions();if(!n||void 0===n.z)return;const r=e.transform.height,{longitude:s,latitude:i,pitch:o}=t,a=512*n.x,l=512*(1-n.y),c=512*n.z,u=au([s,i]),h=a-u[0],d=l-u[1],f=Math.sqrt(h*h+d*d),p=o*qm,g=1.5*r,m=p<.001?g*Math.cos(p)/c:g*Math.sin(p)/f;t.zoom=Math.log2(m);const _=c-g*Math.cos(p)/m;t.position=[0,0,_/cu(i)]}else"number"==typeof e.transform.elevation&&(t.position=[0,0,e.transform.elevation])}(e,s),s}function n_(e,t,n){const r=t_(t),{views:s}=e.props,i=s&&Zh(s).find(e=>e.id===Xm)||e_(t);n&&(i.props.nearZMultiplier=.2);const o=(null==n?void 0:n.nearZ)??t.transform._nearZ,a=(null==n?void 0:n.farZ)??t.transform._farZ;return Number.isFinite(o)&&(r.nearZ=o/t.transform.height,r.farZ=a/t.transform.height),i.makeViewport({width:e.width,height:e.height,viewState:r})}function r_(e){if(e.userData.isExternal)return;const t=[];e.userData.mapboxLayers.forEach(e=>{const n=new(0,e.props.type)(e.props);t.push(n)}),e.setProps({layers:t})}class s_{constructor(e){if(!e.id)throw new Error("Layer must have an unique id");this.id=e.id,this.type="custom",this.renderingMode=e.renderingMode||"3d",this.slot=e.slot,this.map=null,this.deck=null,this.props=e}onAdd(e,t){var n;this.map=e,this.deck=Ym({map:e,gl:t,deck:this.props.deck}),(n=this.deck).userData.mapboxLayers.add(this),r_(n)}onRemove(){var e;this.deck&&((e=this.deck).userData.mapboxLayers.delete(this),r_(e))}setProps(e){Object.assign(this.props,e,{id:this.id}),this.deck&&r_(this.deck)}render(e,t){!function(e,t,n,r){let{currentViewport:s}=e.userData,i=!1;s||(s=n_(e,t,r),e.userData.currentViewport=s,i=!0),e.isInitialized&&e._drawLayers("mapbox-repaint",{viewports:[s],layerFilter:t=>(!e.props.layerFilter||e.props.layerFilter(t))&&(n.id===t.layer.id||t.layer.props.operation.includes("terrain")),clearStack:i,clearCanvas:!1})}(this.deck,this.map,this,t)}}const i_="__UNDEFINED__";function o_(e,t,n,r){if(!(e&&t&&e.style&&e.style._loaded))return;const s=Zh(r,Boolean);if(n!==r){const t=Zh(n,Boolean),r=new Set(t.map(e=>e.id));for(const e of s)r.delete(e.id);for(const n of r)e.getLayer(n)&&e.removeLayer(n)}for(const a of s){const n=e.getLayer(a.id);n?(n.implementation||n).setProps(a.props):e.addLayer(new s_({id:a.id,deck:t,slot:a.props.slot}),a.props.beforeId)}const i=e.style._order,o={};for(const a of s){let{beforeId:e}=a.props;e&&i.includes(e)||(e=i_),o[e]=o[e]||[],o[e].push(a.id)}for(const a in o){const t=o[a];let n=a===i_?i.length:i.indexOf(a),r=a===i_?void 0:a;for(let s=t.length-1;s>=0;s--){const o=t[s],a=i.indexOf(o);a!==n-1&&(e.moveLayer(o,r),a>n&&n++),n--,r=o}}}class a_{constructor(e){this._handleStyleChange=()=>{var e;o_(this._map,this._deck,this._props.layers,this._props.layers),this._map&&Jm(this._map)&&!this._props.views&&(null==(e=this._deck)||e.setProps({views:e_(this._map)}))},this._updateContainerSize=()=>{if(this._map&&this._container){const{clientWidth:e,clientHeight:t}=this._map.getContainer();Object.assign(this._container.style,{width:`${e}px`,height:`${t}px`})}},this._updateViewState=()=>{const e=this._deck,t=this._map;e&&t&&(e.setProps({views:this._props.views||e_(t),viewState:t_(t)}),e.isInitialized&&e.redraw())},this._handleMouseEvent=e=>{const t=this._deck;if(!t||!t.isInitialized)return;const n={type:e.type,offsetCenter:e.point,srcEvent:e},r=this._lastMouseDownPoint;switch(!e.point&&r&&(n.deltaX=e.originalEvent.clientX-r.clientX,n.deltaY=e.originalEvent.clientY-r.clientY,n.offsetCenter={x:r.x+n.deltaX,y:r.y+n.deltaY}),n.type){case"mousedown":t._onPointerDown(n),this._lastMouseDownPoint={...e.point,clientX:e.originalEvent.clientX,clientY:e.originalEvent.clientY};break;case"dragstart":n.type="panstart",t._onEvent(n);break;case"drag":n.type="panmove",t._onEvent(n);break;case"dragend":n.type="panend",t._onEvent(n);break;case"click":n.tapCount=1,t._onEvent(n);break;case"dblclick":n.type="click",n.tapCount=2,t._onEvent(n);break;case"mousemove":n.type="pointermove",t._onPointerMove(n);break;case"mouseout":n.type="pointerleave",t._onPointerMove(n);break;default:return}};const{interleaved:t=!1}=e;this._interleaved=t,this._props=this.filterProps(e)}filterProps(e){const{interleaved:t=!1,useDevicePixels:n,...r}=e;return t||void 0===n||(r.useDevicePixels=n),r}setProps(e){this._interleaved&&e.layers&&o_(this._map,this._deck,this._props.layers,e.layers),Object.assign(this._props,this.filterProps(e)),this._deck&&this._map&&this._deck.setProps({...this._props,parameters:{...Qm(this._map,this._interleaved),...this._props.parameters}})}onAdd(e){return this._map=e,this._interleaved?this._onAddInterleaved(e):this._onAddOverlaid(e)}_onAddOverlaid(e){const t=document.createElement("div");return Object.assign(t.style,{position:"absolute",left:0,top:0,textAlign:"initial",pointerEvents:"none"}),this._container=t,this._deck=new Xp({...this._props,parent:t,parameters:{...Qm(e,!1),...this._props.parameters},views:this._props.views||e_(e),viewState:t_(e)}),e.on("resize",this._updateContainerSize),e.on("render",this._updateViewState),e.on("mousedown",this._handleMouseEvent),e.on("dragstart",this._handleMouseEvent),e.on("drag",this._handleMouseEvent),e.on("dragend",this._handleMouseEvent),e.on("mousemove",this._handleMouseEvent),e.on("mouseout",this._handleMouseEvent),e.on("click",this._handleMouseEvent),e.on("dblclick",this._handleMouseEvent),this._updateContainerSize(),t}_onAddInterleaved(e){const t=e.painter.context.gl;return t instanceof WebGLRenderingContext&&$n.warn("Incompatible basemap library. See: https://deck.gl/docs/api-reference/mapbox/overview#compatibility")(),this._deck=Ym({map:e,gl:t,deck:new Xp({...this._props,gl:t,parameters:{...Qm(e,!0),...this._props.parameters}})}),e.on("styledata",this._handleStyleChange),o_(e,this._deck,[],this._props.layers),document.createElement("div")}onRemove(){const e=this._map;e&&(this._interleaved?this._onRemoveInterleaved(e):this._onRemoveOverlaid(e)),this._deck=void 0,this._map=void 0,this._container=void 0}_onRemoveOverlaid(e){var t;e.off("resize",this._updateContainerSize),e.off("render",this._updateViewState),e.off("mousedown",this._handleMouseEvent),e.off("dragstart",this._handleMouseEvent),e.off("drag",this._handleMouseEvent),e.off("dragend",this._handleMouseEvent),e.off("mousemove",this._handleMouseEvent),e.off("mouseout",this._handleMouseEvent),e.off("click",this._handleMouseEvent),e.off("dblclick",this._handleMouseEvent),null==(t=this._deck)||t.finalize()}_onRemoveInterleaved(e){e.off("styledata",this._handleStyleChange),o_(e,this._deck,this._props.layers,[]),Zm(e)}getDefaultPosition(){return"top-left"}pickObject(e){return fd(this._deck),this._deck.pickObject(e)}pickMultipleObjects(e){return fd(this._deck),this._deck.pickMultipleObjects(e)}pickObjects(e){return fd(this._deck),this._deck.pickObjects(e)}finalize(){this._map&&this._map.removeControl(this)}getCanvas(){return this._map?this._interleaved?this._map.getCanvas():this._deck.getCanvas():null}}const l_=p.createContext(null);function c_({children:e}){const{current:t}=y(),n=p.useRef(null),r=p.useRef(new Map),[s,o]=p.useState(!1);p.useEffect(()=>{const e=null==t?void 0:t.getMap();if(e)return n.current||(n.current=new a_({interleaved:!0,layers:[]}),e.addControl(n.current),o(!0)),()=>{if(n.current&&e){try{e.removeControl(n.current)}catch{}n.current=null,o(!1)}}},[t]);const a=p.useCallback(()=>{if(!n.current)return;const e=[],t=Array.from(r.current.keys()).sort();for(const n of t){const t=r.current.get(n);t&&t.length>0&&e.push(...t)}n.current.setProps({layers:e})},[]),l=p.useCallback((e,t)=>{0===t.length?r.current.delete(e):r.current.set(e,t),a()},[a]);return i.jsx(l_.Provider,{value:{setLayers:l,isReady:s},children:e})}function u_(){const e=p.useContext(l_);if(!e)throw new Error("useDeckOverlay must be used within a DeckOverlayProvider");return e}const h_=[[236,58,55],[255,140,0],[250,208,0],[154,230,0],[58,217,0]];function d_(e){return"number"==typeof e.lat&&"number"==typeof e.lon&&!isNaN(e.lat)&&!isNaN(e.lon)&&e.lat>=-90&&e.lat<=90&&e.lon>=-180&&e.lon<=180}function f_({coveragePoints:e,visible:t,opacity:n=.85}){const{setLayers:r,isReady:s}=u_(),o=p.useMemo(()=>e&&Array.isArray(e)?e.filter(d_):[],[e]);return p.useEffect(()=>{if(!s)return;if(!t||0===o.length)return void r("wardriving",[]);const e=new $m({id:"wardriving-heatmap",data:o,getPosition:e=>[e.lon,e.lat],getWeight:e=>e.weight,aggregation:"SUM",radiusPixels:30,intensity:1,threshold:.1,opacity:.7,colorRange:h_});return r("wardriving",[e]),()=>{r("wardriving",[])}},[o,t,n,s,r]),o.length>0&&t?i.jsx("div",{"data-testid":"wardriving-heatmap-active","data-point-count":o.length,"data-is-ready":s,style:{display:"none"}}):null}function p_(e){return e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2}function g_(e){return e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2}var m_,__={},y_={};var b_,v_,x_={};var w_,E_,T_=(v_||(v_=1,w_=function(){if(m_)return y_;m_=1;var e=_();function t(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n