@mappedin/mappedin-js 6.24.0 → 6.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_LICENSES.txt +15 -14
- package/lib/esm/{GLTFExporter-7JO7KU2J.js → GLTFExporter-2YKLBCPY.js} +1 -1
- package/lib/esm/{GLTFLoader-YNTRF3U5.js → GLTFLoader-VF2YNOHD.js} +1 -1
- package/lib/esm/chunk-2ZEZ2HG5.js +1230 -0
- package/lib/esm/{chunk-EIF63KEB.js → chunk-CO4ZOCZ7.js} +2 -2
- package/lib/esm/{chunk-C3N7HQI7.js → chunk-FYSWNSO7.js} +22 -22
- package/lib/esm/{chunk-VJRVK75J.js → chunk-I5GYZORE.js} +7 -7
- package/lib/esm/{chunk-ITXZXFZZ.js → chunk-R4YYWOA4.js} +1 -1
- package/lib/esm/index.d.ts +221 -10
- package/lib/esm/index.js +1 -1
- package/lib/esm/{inspector-LHEBDO45.js → inspector-RHOYG5KR.js} +2 -2
- package/lib/esm/{internal-4G5ODHLV.js → internal-4S5IPA5O.js} +1 -1
- package/lib/esm/{src-75CCWRAE.js → src-2BZUPZLG.js} +1 -1
- package/lib/esm/{text3d-G7QFRZO4.js → text3d-NPU3WI3W.js} +1 -1
- package/package.json +1 -1
- package/lib/esm/chunk-B3VG275M.js +0 -968
|
@@ -1,968 +0,0 @@
|
|
|
1
|
-
import{$a as Nc,$b as uu,A as vt,Aa as $,Ab as $c,Ac as oe,Ba as Gr,Bb as qc,Bc as Ce,Ca as Po,Cb as Jc,Cc as ie,D as Ls,Da as gn,Db as Kc,E as Hl,Eb as gr,F as yo,Fa as ue,Fb as Bo,G as lr,Ga as Oe,Gb as Le,H as Rt,Ha as qe,Hb as Qc,I as As,Ia as zs,Ib as eu,Ja as Mt,Jb as tu,Ka as Io,Kb as Vs,La as Oo,Lb as ru,Ma as Lo,Mb as Ws,N as cr,Na as Dc,Nb as js,O as Rs,Oa as Pc,Ob as Go,P as Vl,Pa as fr,Pb as nu,Qa as Ic,Qb as ou,Ra as kr,Rb as Zs,Sa as Oc,Sb as iu,Tb as su,Ua as Lc,Ub as au,V as _s,Va as Ao,Vb as Xs,Wa as Ac,Wb as lu,X as Fs,Xa as Rc,Xb as yr,Ya as _c,Yb as ko,Za as Fc,Zb as Ys,_ as Wl,_a as Us,_b as cu,aa as gc,ab as Bc,ac as $s,ba as yc,bb as zr,bc as du,c as Gl,cb as Gc,cc as xn,da as fn,db as Ro,dc as qs,e as R,ea as bc,eb as Hs,ec as zo,f as Or,fb as kc,fc as hu,g as cn,gb as _o,gc as Js,h as Lt,hb as yn,hc as pu,i as po,ib as Ct,ic as mu,j as Z,ja as To,jb as Fo,jc as fu,k as Ds,kb as Ht,kc as gu,l as mo,lb as Vt,m as Ps,ma as Do,mb as zc,mc as yu,n as fo,na as Ut,nc as bu,o as ar,oa as vc,oc as vu,p as kl,pa as xc,pb as Uc,pc as xu,qa as Sc,qb as No,qc as Su,ra as Mc,rb as Hc,rc as ct,s as zl,sa as Cc,sb as bn,sc as Mu,t as Is,ta as Ec,tb as Vc,tc as ve,u as go,ua as mr,ub as Wc,uc as Cu,va as wc,vb as vn,vc as Uo,w as Os,wa as Tc,wb as jc,wc as ut,x as At,xa as Gs,xb as Zc,xc as Eu,ya as ks,yb as Xc,yc as Wt,z as Ul,za as He,zb as Yc,zc as Ur}from"./chunk-VJRVK75J.js";import{a as ze}from"./chunk-ITXZXFZZ.js";import{$ as xt,A as Jl,Aa as Rr,C as ur,Ca as Gt,E as Kl,F as le,G as hn,H as dr,Ha as ic,I as xo,Ia as sc,J as hr,Ja as Co,K as Lr,Ka as ac,La as lc,M as Ql,Ma as _r,N as U,Na as Fr,O as V,Oa as Nr,P as Ft,Pa as Ie,Q as O,Qa as Br,Ra as cc,Sa as mn,Ua as kt,Va as uc,W as ec,X as pn,Y as ce,Z as tc,_ as Y,a as f,aa as Ge,b as w,ba as k,c as bo,ca as rc,cb as Eo,d as vo,da as Me,e as jl,ea as ke,f as _t,fa as pr,fb as Bs,g as Zl,ga as Nt,gb as wo,h as Xl,ha as W,hb as dc,i as un,ia as Bt,ka as $e,la as nc,lb as hc,ma as Ns,na as So,nb as zt,o as dn,oa as St,pb as pc,qb as mc,r as Yl,s as $l,sb as fc,u as ql,wa as K,xa as oc,ya as Ar,za as Mo}from"./chunk-EIF63KEB.js";import{b as lt,c as Xp,d as ln}from"./chunk-PWEV3AFA.js";var Rd=lt((Ra,_a)=>{f();(function(n,e){typeof Ra=="object"&&typeof _a<"u"?_a.exports=e():typeof define=="function"&&define.amd?define(e):(n=n||self).RBush=e()})(Ra,function(){"use strict";function n(p,m,y,v,x){(function S(C,D,E,T,P){for(;T>E;){if(T-E>600){var I=T-E+1,L=D-E+1,N=Math.log(I),z=.5*Math.exp(2*N/3),j=.5*Math.sqrt(N*z*(I-z)/I)*(L-I/2<0?-1:1),H=Math.max(E,Math.floor(D-L*z/I+j)),Q=Math.min(T,Math.floor(D+(I-L)*z/I+j));S(C,D,H,Q,P)}var G=C[D],J=E,ne=T;for(e(C,E,D),P(C[T],G)>0&&e(C,E,T);J<ne;){for(e(C,J,ne),J++,ne--;P(C[J],G)<0;)J++;for(;P(C[ne],G)>0;)ne--}P(C[E],G)===0?e(C,E,ne):e(C,++ne,T),ne<=D&&(E=ne+1),D<=ne&&(T=ne-1)}})(p,m,y||0,v||p.length-1,x||t)}function e(p,m,y){var v=p[m];p[m]=p[y],p[y]=v}function t(p,m){return p<m?-1:p>m?1:0}var r=function(p){p===void 0&&(p=9),this._maxEntries=Math.max(4,p),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function o(p,m,y){if(!y)return m.indexOf(p);for(var v=0;v<m.length;v++)if(y(p,m[v]))return v;return-1}function i(p,m){s(p,0,p.children.length,m,p)}function s(p,m,y,v,x){x||(x=b(null)),x.minX=1/0,x.minY=1/0,x.maxX=-1/0,x.maxY=-1/0;for(var S=m;S<y;S++){var C=p.children[S];a(x,p.leaf?v(C):C)}return x}function a(p,m){return p.minX=Math.min(p.minX,m.minX),p.minY=Math.min(p.minY,m.minY),p.maxX=Math.max(p.maxX,m.maxX),p.maxY=Math.max(p.maxY,m.maxY),p}function l(p,m){return p.minX-m.minX}function c(p,m){return p.minY-m.minY}function u(p){return(p.maxX-p.minX)*(p.maxY-p.minY)}function d(p){return p.maxX-p.minX+(p.maxY-p.minY)}function h(p,m){return p.minX<=m.minX&&p.minY<=m.minY&&m.maxX<=p.maxX&&m.maxY<=p.maxY}function g(p,m){return m.minX<=p.maxX&&m.minY<=p.maxY&&m.maxX>=p.minX&&m.maxY>=p.minY}function b(p){return{children:p,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function M(p,m,y,v,x){for(var S=[m,y];S.length;)if(!((y=S.pop())-(m=S.pop())<=v)){var C=m+Math.ceil((y-m)/v/2)*v;n(p,C,m,y,x),S.push(m,C,C,y)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(p){var m=this.data,y=[];if(!g(p,m))return y;for(var v=this.toBBox,x=[];m;){for(var S=0;S<m.children.length;S++){var C=m.children[S],D=m.leaf?v(C):C;g(p,D)&&(m.leaf?y.push(C):h(p,D)?this._all(C,y):x.push(C))}m=x.pop()}return y},r.prototype.collides=function(p){var m=this.data;if(!g(p,m))return!1;for(var y=[];m;){for(var v=0;v<m.children.length;v++){var x=m.children[v],S=m.leaf?this.toBBox(x):x;if(g(p,S)){if(m.leaf||h(p,S))return!0;y.push(x)}}m=y.pop()}return!1},r.prototype.load=function(p){if(!p||!p.length)return this;if(p.length<this._minEntries){for(var m=0;m<p.length;m++)this.insert(p[m]);return this}var y=this._build(p.slice(),0,p.length-1,0);if(this.data.children.length)if(this.data.height===y.height)this._splitRoot(this.data,y);else{if(this.data.height<y.height){var v=this.data;this.data=y,y=v}this._insert(y,this.data.height-y.height-1,!0)}else this.data=y;return this},r.prototype.insert=function(p){return p&&this._insert(p,this.data.height-1),this},r.prototype.clear=function(){return this.data=b([]),this},r.prototype.remove=function(p,m){if(!p)return this;for(var y,v,x,S=this.data,C=this.toBBox(p),D=[],E=[];S||D.length;){if(S||(S=D.pop(),v=D[D.length-1],y=E.pop(),x=!0),S.leaf){var T=o(p,S.children,m);if(T!==-1)return S.children.splice(T,1),D.push(S),this._condense(D),this}x||S.leaf||!h(S,C)?v?(y++,S=v.children[y],x=!1):S=null:(D.push(S),E.push(y),y=0,v=S,S=S.children[0])}return this},r.prototype.toBBox=function(p){return p},r.prototype.compareMinX=function(p,m){return p.minX-m.minX},r.prototype.compareMinY=function(p,m){return p.minY-m.minY},r.prototype.toJSON=function(){return this.data},r.prototype.fromJSON=function(p){return this.data=p,this},r.prototype._all=function(p,m){for(var y=[];p;)p.leaf?m.push.apply(m,p.children):y.push.apply(y,p.children),p=y.pop();return m},r.prototype._build=function(p,m,y,v){var x,S=y-m+1,C=this._maxEntries;if(S<=C)return i(x=b(p.slice(m,y+1)),this.toBBox),x;v||(v=Math.ceil(Math.log(S)/Math.log(C)),C=Math.ceil(S/Math.pow(C,v-1))),(x=b([])).leaf=!1,x.height=v;var D=Math.ceil(S/C),E=D*Math.ceil(Math.sqrt(C));M(p,m,y,E,this.compareMinX);for(var T=m;T<=y;T+=E){var P=Math.min(T+E-1,y);M(p,T,P,D,this.compareMinY);for(var I=T;I<=P;I+=D){var L=Math.min(I+D-1,P);x.children.push(this._build(p,I,L,v-1))}}return i(x,this.toBBox),x},r.prototype._chooseSubtree=function(p,m,y,v){for(;v.push(m),!m.leaf&&v.length-1!==y;){for(var x=1/0,S=1/0,C=void 0,D=0;D<m.children.length;D++){var E=m.children[D],T=u(E),P=(I=p,L=E,(Math.max(L.maxX,I.maxX)-Math.min(L.minX,I.minX))*(Math.max(L.maxY,I.maxY)-Math.min(L.minY,I.minY))-T);P<S?(S=P,x=T<x?T:x,C=E):P===S&&T<x&&(x=T,C=E)}m=C||m.children[0]}var I,L;return m},r.prototype._insert=function(p,m,y){var v=y?p:this.toBBox(p),x=[],S=this._chooseSubtree(v,this.data,m,x);for(S.children.push(p),a(S,v);m>=0&&x[m].children.length>this._maxEntries;)this._split(x,m),m--;this._adjustParentBBoxes(v,x,m)},r.prototype._split=function(p,m){var y=p[m],v=y.children.length,x=this._minEntries;this._chooseSplitAxis(y,x,v);var S=this._chooseSplitIndex(y,x,v),C=b(y.children.splice(S,y.children.length-S));C.height=y.height,C.leaf=y.leaf,i(y,this.toBBox),i(C,this.toBBox),m?p[m-1].children.push(C):this._splitRoot(y,C)},r.prototype._splitRoot=function(p,m){this.data=b([p,m]),this.data.height=p.height+1,this.data.leaf=!1,i(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(p,m,y){for(var v,x,S,C,D,E,T,P=1/0,I=1/0,L=m;L<=y-m;L++){var N=s(p,0,L,this.toBBox),z=s(p,L,y,this.toBBox),j=(x=N,S=z,C=void 0,D=void 0,E=void 0,T=void 0,C=Math.max(x.minX,S.minX),D=Math.max(x.minY,S.minY),E=Math.min(x.maxX,S.maxX),T=Math.min(x.maxY,S.maxY),Math.max(0,E-C)*Math.max(0,T-D)),H=u(N)+u(z);j<P?(P=j,v=L,I=H<I?H:I):j===P&&H<I&&(I=H,v=L)}return v||y-m},r.prototype._chooseSplitAxis=function(p,m,y){var v=p.leaf?this.compareMinX:l,x=p.leaf?this.compareMinY:c;this._allDistMargin(p,m,y,v)<this._allDistMargin(p,m,y,x)&&p.children.sort(v)},r.prototype._allDistMargin=function(p,m,y,v){p.children.sort(v);for(var x=this.toBBox,S=s(p,0,m,x),C=s(p,y-m,y,x),D=d(S)+d(C),E=m;E<y-m;E++){var T=p.children[E];a(S,p.leaf?x(T):T),D+=d(S)}for(var P=y-m-1;P>=m;P--){var I=p.children[P];a(C,p.leaf?x(I):I),D+=d(C)}return D},r.prototype._adjustParentBBoxes=function(p,m,y){for(var v=y;v>=0;v--)a(m[v],p)},r.prototype._condense=function(p){for(var m=p.length-1,y=void 0;m>=0;m--)p[m].children.length===0?m>0?(y=p[m-1].children).splice(y.indexOf(p[m]),1):this.clear():i(p[m],this.toBBox)},r})});var ka=lt(B=>{"use strict";f();Object.defineProperty(B,"__esModule",{value:!0});B.earthRadius=63710088e-1;B.factors={centimeters:B.earthRadius*100,centimetres:B.earthRadius*100,degrees:B.earthRadius/111325,feet:B.earthRadius*3.28084,inches:B.earthRadius*39.37,kilometers:B.earthRadius/1e3,kilometres:B.earthRadius/1e3,meters:B.earthRadius,metres:B.earthRadius,miles:B.earthRadius/1609.344,millimeters:B.earthRadius*1e3,millimetres:B.earthRadius*1e3,nauticalmiles:B.earthRadius/1852,radians:1,yards:B.earthRadius*1.0936};B.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:1/1e3,kilometres:1/1e3,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/B.earthRadius,yards:1.0936133};B.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046};function Zt(n,e,t){t===void 0&&(t={});var r={type:"Feature"};return(t.id===0||t.id)&&(r.id=t.id),t.bbox&&(r.bbox=t.bbox),r.properties=e||{},r.geometry=n,r}B.feature=Zt;function Of(n,e,t){switch(t===void 0&&(t={}),n){case"Point":return Fa(e).geometry;case"LineString":return Ba(e).geometry;case"Polygon":return Na(e).geometry;case"MultiPoint":return Fd(e).geometry;case"MultiLineString":return _d(e).geometry;case"MultiPolygon":return Nd(e).geometry;default:throw new Error(n+" is invalid")}}B.geometry=Of;function Fa(n,e,t){if(t===void 0&&(t={}),!n)throw new Error("coordinates is required");if(!Array.isArray(n))throw new Error("coordinates must be an Array");if(n.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!Ei(n[0])||!Ei(n[1]))throw new Error("coordinates must contain numbers");var r={type:"Point",coordinates:n};return Zt(r,e,t)}B.point=Fa;function Lf(n,e,t){return t===void 0&&(t={}),wi(n.map(function(r){return Fa(r,e)}),t)}B.points=Lf;function Na(n,e,t){t===void 0&&(t={});for(var r=0,o=n;r<o.length;r++){var i=o[r];if(i.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");for(var s=0;s<i[i.length-1].length;s++)if(i[i.length-1][s]!==i[0][s])throw new Error("First and last Position are not equivalent.")}var a={type:"Polygon",coordinates:n};return Zt(a,e,t)}B.polygon=Na;function Af(n,e,t){return t===void 0&&(t={}),wi(n.map(function(r){return Na(r,e)}),t)}B.polygons=Af;function Ba(n,e,t){if(t===void 0&&(t={}),n.length<2)throw new Error("coordinates must be an array of two or more positions");var r={type:"LineString",coordinates:n};return Zt(r,e,t)}B.lineString=Ba;function Rf(n,e,t){return t===void 0&&(t={}),wi(n.map(function(r){return Ba(r,e)}),t)}B.lineStrings=Rf;function wi(n,e){e===void 0&&(e={});var t={type:"FeatureCollection"};return e.id&&(t.id=e.id),e.bbox&&(t.bbox=e.bbox),t.features=n,t}B.featureCollection=wi;function _d(n,e,t){t===void 0&&(t={});var r={type:"MultiLineString",coordinates:n};return Zt(r,e,t)}B.multiLineString=_d;function Fd(n,e,t){t===void 0&&(t={});var r={type:"MultiPoint",coordinates:n};return Zt(r,e,t)}B.multiPoint=Fd;function Nd(n,e,t){t===void 0&&(t={});var r={type:"MultiPolygon",coordinates:n};return Zt(r,e,t)}B.multiPolygon=Nd;function _f(n,e,t){t===void 0&&(t={});var r={type:"GeometryCollection",geometries:n};return Zt(r,e,t)}B.geometryCollection=_f;function Ff(n,e){if(e===void 0&&(e=0),e&&!(e>=0))throw new Error("precision must be a positive number");var t=Math.pow(10,e||0);return Math.round(n*t)/t}B.round=Ff;function Bd(n,e){e===void 0&&(e="kilometers");var t=B.factors[e];if(!t)throw new Error(e+" units is invalid");return n*t}B.radiansToLength=Bd;function Ga(n,e){e===void 0&&(e="kilometers");var t=B.factors[e];if(!t)throw new Error(e+" units is invalid");return n/t}B.lengthToRadians=Ga;function Nf(n,e){return Gd(Ga(n,e))}B.lengthToDegrees=Nf;function Bf(n){var e=n%360;return e<0&&(e+=360),e}B.bearingToAzimuth=Bf;function Gd(n){var e=n%(2*Math.PI);return e*180/Math.PI}B.radiansToDegrees=Gd;function Gf(n){var e=n%360;return e*Math.PI/180}B.degreesToRadians=Gf;function kf(n,e,t){if(e===void 0&&(e="kilometers"),t===void 0&&(t="kilometers"),!(n>=0))throw new Error("length must be a positive number");return Bd(Ga(n,e),t)}B.convertLength=kf;function zf(n,e,t){if(e===void 0&&(e="meters"),t===void 0&&(t="kilometers"),!(n>=0))throw new Error("area must be a positive number");var r=B.areaFactors[e];if(!r)throw new Error("invalid original units");var o=B.areaFactors[t];if(!o)throw new Error("invalid final units");return n/r*o}B.convertArea=zf;function Ei(n){return!isNaN(n)&&n!==null&&!Array.isArray(n)}B.isNumber=Ei;function Uf(n){return!!n&&n.constructor===Object}B.isObject=Uf;function Hf(n){if(!n)throw new Error("bbox is required");if(!Array.isArray(n))throw new Error("bbox must be an Array");if(n.length!==4&&n.length!==6)throw new Error("bbox must be an Array of 4 or 6 numbers");n.forEach(function(e){if(!Ei(e))throw new Error("bbox must only contain numbers")})}B.validateBBox=Hf;function Vf(n){if(!n)throw new Error("id is required");if(["string","number"].indexOf(typeof n)===-1)throw new Error("id must be a number or a string")}B.validateId=Vf});var Vd=lt(pe=>{"use strict";f();Object.defineProperty(pe,"__esModule",{value:!0});var we=ka();function Bn(n,e,t){if(n!==null)for(var r,o,i,s,a,l,c,u=0,d=0,h,g=n.type,b=g==="FeatureCollection",M=g==="Feature",p=b?n.features.length:1,m=0;m<p;m++){c=b?n.features[m].geometry:M?n.geometry:n,h=c?c.type==="GeometryCollection":!1,a=h?c.geometries.length:1;for(var y=0;y<a;y++){var v=0,x=0;if(s=h?c.geometries[y]:c,s!==null){l=s.coordinates;var S=s.type;switch(u=t&&(S==="Polygon"||S==="MultiPolygon")?1:0,S){case null:break;case"Point":if(e(l,d,m,v,x)===!1)return!1;d++,v++;break;case"LineString":case"MultiPoint":for(r=0;r<l.length;r++){if(e(l[r],d,m,v,x)===!1)return!1;d++,S==="MultiPoint"&&v++}S==="LineString"&&v++;break;case"Polygon":case"MultiLineString":for(r=0;r<l.length;r++){for(o=0;o<l[r].length-u;o++){if(e(l[r][o],d,m,v,x)===!1)return!1;d++}S==="MultiLineString"&&v++,S==="Polygon"&&x++}S==="Polygon"&&v++;break;case"MultiPolygon":for(r=0;r<l.length;r++){for(x=0,o=0;o<l[r].length;o++){for(i=0;i<l[r][o].length-u;i++){if(e(l[r][o][i],d,m,v,x)===!1)return!1;d++}x++}v++}break;case"GeometryCollection":for(r=0;r<s.geometries.length;r++)if(Bn(s.geometries[r],e,t)===!1)return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function Wf(n,e,t,r){var o=t;return Bn(n,function(i,s,a,l,c){s===0&&t===void 0?o=i:o=e(o,i,s,a,l,c)},r),o}function kd(n,e){var t;switch(n.type){case"FeatureCollection":for(t=0;t<n.features.length&&e(n.features[t].properties,t)!==!1;t++);break;case"Feature":e(n.properties,0);break}}function jf(n,e,t){var r=t;return kd(n,function(o,i){i===0&&t===void 0?r=o:r=e(r,o,i)}),r}function zd(n,e){if(n.type==="Feature")e(n,0);else if(n.type==="FeatureCollection")for(var t=0;t<n.features.length&&e(n.features[t],t)!==!1;t++);}function Zf(n,e,t){var r=t;return zd(n,function(o,i){i===0&&t===void 0?r=o:r=e(r,o,i)}),r}function Xf(n){var e=[];return Bn(n,function(t){e.push(t)}),e}function za(n,e){var t,r,o,i,s,a,l,c,u,d,h=0,g=n.type==="FeatureCollection",b=n.type==="Feature",M=g?n.features.length:1;for(t=0;t<M;t++){for(a=g?n.features[t].geometry:b?n.geometry:n,c=g?n.features[t].properties:b?n.properties:{},u=g?n.features[t].bbox:b?n.bbox:void 0,d=g?n.features[t].id:b?n.id:void 0,l=a?a.type==="GeometryCollection":!1,s=l?a.geometries.length:1,o=0;o<s;o++){if(i=l?a.geometries[o]:a,i===null){if(e(null,h,c,u,d)===!1)return!1;continue}switch(i.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":{if(e(i,h,c,u,d)===!1)return!1;break}case"GeometryCollection":{for(r=0;r<i.geometries.length;r++)if(e(i.geometries[r],h,c,u,d)===!1)return!1;break}default:throw new Error("Unknown Geometry Type")}}h++}}function Yf(n,e,t){var r=t;return za(n,function(o,i,s,a,l){i===0&&t===void 0?r=o:r=e(r,o,i,s,a,l)}),r}function Ti(n,e){za(n,function(t,r,o,i,s){var a=t===null?null:t.type;switch(a){case null:case"Point":case"LineString":case"Polygon":return e(we.feature(t,o,{bbox:i,id:s}),r,0)===!1?!1:void 0}var l;switch(a){case"MultiPoint":l="Point";break;case"MultiLineString":l="LineString";break;case"MultiPolygon":l="Polygon";break}for(var c=0;c<t.coordinates.length;c++){var u=t.coordinates[c],d={type:l,coordinates:u};if(e(we.feature(d,o),r,c)===!1)return!1}})}function $f(n,e,t){var r=t;return Ti(n,function(o,i,s){i===0&&s===0&&t===void 0?r=o:r=e(r,o,i,s)}),r}function Ud(n,e){Ti(n,function(t,r,o){var i=0;if(t.geometry){var s=t.geometry.type;if(!(s==="Point"||s==="MultiPoint")){var a,l=0,c=0,u=0;if(Bn(t,function(d,h,g,b,M){if(a===void 0||r>l||b>c||M>u){a=d,l=r,c=b,u=M,i=0;return}var p=we.lineString([a,d],t.properties);if(e(p,r,o,M,i)===!1)return!1;i++,a=d})===!1)return!1}}})}function qf(n,e,t){var r=t,o=!1;return Ud(n,function(i,s,a,l,c){o===!1&&t===void 0?r=i:r=e(r,i,s,a,l,c),o=!0}),r}function Hd(n,e){if(!n)throw new Error("geojson is required");Ti(n,function(t,r,o){if(t.geometry!==null){var i=t.geometry.type,s=t.geometry.coordinates;switch(i){case"LineString":if(e(t,r,o,0,0)===!1)return!1;break;case"Polygon":for(var a=0;a<s.length;a++)if(e(we.lineString(s[a],t.properties),r,o,a)===!1)return!1;break}}})}function Jf(n,e,t){var r=t;return Hd(n,function(o,i,s,a){i===0&&t===void 0?r=o:r=e(r,o,i,s,a)}),r}function Kf(n,e){if(e=e||{},!we.isObject(e))throw new Error("options is invalid");var t=e.featureIndex||0,r=e.multiFeatureIndex||0,o=e.geometryIndex||0,i=e.segmentIndex||0,s=e.properties,a;switch(n.type){case"FeatureCollection":t<0&&(t=n.features.length+t),s=s||n.features[t].properties,a=n.features[t].geometry;break;case"Feature":s=s||n.properties,a=n.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":a=n;break;default:throw new Error("geojson is invalid")}if(a===null)return null;var l=a.coordinates;switch(a.type){case"Point":case"MultiPoint":return null;case"LineString":return i<0&&(i=l.length+i-1),we.lineString([l[i],l[i+1]],s,e);case"Polygon":return o<0&&(o=l.length+o),i<0&&(i=l[o].length+i-1),we.lineString([l[o][i],l[o][i+1]],s,e);case"MultiLineString":return r<0&&(r=l.length+r),i<0&&(i=l[r].length+i-1),we.lineString([l[r][i],l[r][i+1]],s,e);case"MultiPolygon":return r<0&&(r=l.length+r),o<0&&(o=l[r].length+o),i<0&&(i=l[r][o].length-i-1),we.lineString([l[r][o][i],l[r][o][i+1]],s,e)}throw new Error("geojson is invalid")}function Qf(n,e){if(e=e||{},!we.isObject(e))throw new Error("options is invalid");var t=e.featureIndex||0,r=e.multiFeatureIndex||0,o=e.geometryIndex||0,i=e.coordIndex||0,s=e.properties,a;switch(n.type){case"FeatureCollection":t<0&&(t=n.features.length+t),s=s||n.features[t].properties,a=n.features[t].geometry;break;case"Feature":s=s||n.properties,a=n.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":a=n;break;default:throw new Error("geojson is invalid")}if(a===null)return null;var l=a.coordinates;switch(a.type){case"Point":return we.point(l,s,e);case"MultiPoint":return r<0&&(r=l.length+r),we.point(l[r],s,e);case"LineString":return i<0&&(i=l.length+i),we.point(l[i],s,e);case"Polygon":return o<0&&(o=l.length+o),i<0&&(i=l[o].length+i),we.point(l[o][i],s,e);case"MultiLineString":return r<0&&(r=l.length+r),i<0&&(i=l[r].length+i),we.point(l[r][i],s,e);case"MultiPolygon":return r<0&&(r=l.length+r),o<0&&(o=l[r].length+o),i<0&&(i=l[r][o].length-i),we.point(l[r][o][i],s,e)}throw new Error("geojson is invalid")}pe.coordAll=Xf;pe.coordEach=Bn;pe.coordReduce=Wf;pe.featureEach=zd;pe.featureReduce=Zf;pe.findPoint=Qf;pe.findSegment=Kf;pe.flattenEach=Ti;pe.flattenReduce=$f;pe.geomEach=za;pe.geomReduce=Yf;pe.lineEach=Hd;pe.lineReduce=Jf;pe.propEach=kd;pe.propReduce=jf;pe.segmentEach=Ud;pe.segmentReduce=qf});var $d=lt(X=>{"use strict";f();Object.defineProperty(X,"__esModule",{value:!0});var Ue=63710088e-1,Ha={centimeters:Ue*100,centimetres:Ue*100,degrees:360/(2*Math.PI),feet:Ue*3.28084,inches:Ue*39.37,kilometers:Ue/1e3,kilometres:Ue/1e3,meters:Ue,metres:Ue,miles:Ue/1609.344,millimeters:Ue*1e3,millimetres:Ue*1e3,nauticalmiles:Ue/1852,radians:1,yards:Ue*1.0936},Ua={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,nauticalmiles:29155334959812285e-23,millimeters:1e6,millimetres:1e6,yards:1.195990046};function Xt(n,e,t={}){let r={type:"Feature"};return(t.id===0||t.id)&&(r.id=t.id),t.bbox&&(r.bbox=t.bbox),r.properties=e||{},r.geometry=n,r}function eg(n,e,t={}){switch(n){case"Point":return Va(e).geometry;case"LineString":return ja(e).geometry;case"Polygon":return Wa(e).geometry;case"MultiPoint":return jd(e).geometry;case"MultiLineString":return Wd(e).geometry;case"MultiPolygon":return Zd(e).geometry;default:throw new Error(n+" is invalid")}}function Va(n,e,t={}){if(!n)throw new Error("coordinates is required");if(!Array.isArray(n))throw new Error("coordinates must be an Array");if(n.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!Di(n[0])||!Di(n[1]))throw new Error("coordinates must contain numbers");return Xt({type:"Point",coordinates:n},e,t)}function tg(n,e,t={}){return Pi(n.map(r=>Va(r,e)),t)}function Wa(n,e,t={}){for(let o of n){if(o.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(o[o.length-1].length!==o[0].length)throw new Error("First and last Position are not equivalent.");for(let i=0;i<o[o.length-1].length;i++)if(o[o.length-1][i]!==o[0][i])throw new Error("First and last Position are not equivalent.")}return Xt({type:"Polygon",coordinates:n},e,t)}function rg(n,e,t={}){return Pi(n.map(r=>Wa(r,e)),t)}function ja(n,e,t={}){if(n.length<2)throw new Error("coordinates must be an array of two or more positions");return Xt({type:"LineString",coordinates:n},e,t)}function ng(n,e,t={}){return Pi(n.map(r=>ja(r,e)),t)}function Pi(n,e={}){let t={type:"FeatureCollection"};return e.id&&(t.id=e.id),e.bbox&&(t.bbox=e.bbox),t.features=n,t}function Wd(n,e,t={}){return Xt({type:"MultiLineString",coordinates:n},e,t)}function jd(n,e,t={}){return Xt({type:"MultiPoint",coordinates:n},e,t)}function Zd(n,e,t={}){return Xt({type:"MultiPolygon",coordinates:n},e,t)}function og(n,e,t={}){return Xt({type:"GeometryCollection",geometries:n},e,t)}function ig(n,e=0){if(e&&!(e>=0))throw new Error("precision must be a positive number");let t=Math.pow(10,e||0);return Math.round(n*t)/t}function Xd(n,e="kilometers"){let t=Ha[e];if(!t)throw new Error(e+" units is invalid");return n*t}function Za(n,e="kilometers"){let t=Ha[e];if(!t)throw new Error(e+" units is invalid");return n/t}function sg(n,e){return Yd(Za(n,e))}function ag(n){let e=n%360;return e<0&&(e+=360),e}function lg(n){return n=n%360,n>180?n-360:n<-180?n+360:n}function Yd(n){return n%(2*Math.PI)*180/Math.PI}function cg(n){return n%360*Math.PI/180}function ug(n,e="kilometers",t="kilometers"){if(!(n>=0))throw new Error("length must be a positive number");return Xd(Za(n,e),t)}function dg(n,e="meters",t="kilometers"){if(!(n>=0))throw new Error("area must be a positive number");let r=Ua[e];if(!r)throw new Error("invalid original units");let o=Ua[t];if(!o)throw new Error("invalid final units");return n/r*o}function Di(n){return!isNaN(n)&&n!==null&&!Array.isArray(n)}function hg(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function pg(n){if(!n)throw new Error("bbox is required");if(!Array.isArray(n))throw new Error("bbox must be an Array");if(n.length!==4&&n.length!==6)throw new Error("bbox must be an Array of 4 or 6 numbers");n.forEach(e=>{if(!Di(e))throw new Error("bbox must only contain numbers")})}function mg(n){if(!n)throw new Error("id is required");if(["string","number"].indexOf(typeof n)===-1)throw new Error("id must be a number or a string")}X.areaFactors=Ua;X.azimuthToBearing=lg;X.bearingToAzimuth=ag;X.convertArea=dg;X.convertLength=ug;X.degreesToRadians=cg;X.earthRadius=Ue;X.factors=Ha;X.feature=Xt;X.featureCollection=Pi;X.geometry=eg;X.geometryCollection=og;X.isNumber=Di;X.isObject=hg;X.lengthToDegrees=sg;X.lengthToRadians=Za;X.lineString=ja;X.lineStrings=ng;X.multiLineString=Wd;X.multiPoint=jd;X.multiPolygon=Zd;X.point=Va;X.points=tg;X.polygon=Wa;X.polygons=rg;X.radiansToDegrees=Yd;X.radiansToLength=Xd;X.round=ig;X.validateBBox=pg;X.validateId=mg});var eh=lt(me=>{"use strict";f();Object.defineProperty(me,"__esModule",{value:!0});var Te=$d();function Gn(n,e,t){if(n!==null)for(var r,o,i,s,a,l,c,u=0,d=0,h,g=n.type,b=g==="FeatureCollection",M=g==="Feature",p=b?n.features.length:1,m=0;m<p;m++){c=b?n.features[m].geometry:M?n.geometry:n,h=c?c.type==="GeometryCollection":!1,a=h?c.geometries.length:1;for(var y=0;y<a;y++){var v=0,x=0;if(s=h?c.geometries[y]:c,s!==null){l=s.coordinates;var S=s.type;switch(u=t&&(S==="Polygon"||S==="MultiPolygon")?1:0,S){case null:break;case"Point":if(e(l,d,m,v,x)===!1)return!1;d++,v++;break;case"LineString":case"MultiPoint":for(r=0;r<l.length;r++){if(e(l[r],d,m,v,x)===!1)return!1;d++,S==="MultiPoint"&&v++}S==="LineString"&&v++;break;case"Polygon":case"MultiLineString":for(r=0;r<l.length;r++){for(o=0;o<l[r].length-u;o++){if(e(l[r][o],d,m,v,x)===!1)return!1;d++}S==="MultiLineString"&&v++,S==="Polygon"&&x++}S==="Polygon"&&v++;break;case"MultiPolygon":for(r=0;r<l.length;r++){for(x=0,o=0;o<l[r].length;o++){for(i=0;i<l[r][o].length-u;i++){if(e(l[r][o][i],d,m,v,x)===!1)return!1;d++}x++}v++}break;case"GeometryCollection":for(r=0;r<s.geometries.length;r++)if(Gn(s.geometries[r],e,t)===!1)return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function fg(n,e,t,r){var o=t;return Gn(n,function(i,s,a,l,c){s===0&&t===void 0?o=i:o=e(o,i,s,a,l,c)},r),o}function qd(n,e){var t;switch(n.type){case"FeatureCollection":for(t=0;t<n.features.length&&e(n.features[t].properties,t)!==!1;t++);break;case"Feature":e(n.properties,0);break}}function gg(n,e,t){var r=t;return qd(n,function(o,i){i===0&&t===void 0?r=o:r=e(r,o,i)}),r}function Jd(n,e){if(n.type==="Feature")e(n,0);else if(n.type==="FeatureCollection")for(var t=0;t<n.features.length&&e(n.features[t],t)!==!1;t++);}function yg(n,e,t){var r=t;return Jd(n,function(o,i){i===0&&t===void 0?r=o:r=e(r,o,i)}),r}function bg(n){var e=[];return Gn(n,function(t){e.push(t)}),e}function Xa(n,e){var t,r,o,i,s,a,l,c,u,d,h=0,g=n.type==="FeatureCollection",b=n.type==="Feature",M=g?n.features.length:1;for(t=0;t<M;t++){for(a=g?n.features[t].geometry:b?n.geometry:n,c=g?n.features[t].properties:b?n.properties:{},u=g?n.features[t].bbox:b?n.bbox:void 0,d=g?n.features[t].id:b?n.id:void 0,l=a?a.type==="GeometryCollection":!1,s=l?a.geometries.length:1,o=0;o<s;o++){if(i=l?a.geometries[o]:a,i===null){if(e(null,h,c,u,d)===!1)return!1;continue}switch(i.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":{if(e(i,h,c,u,d)===!1)return!1;break}case"GeometryCollection":{for(r=0;r<i.geometries.length;r++)if(e(i.geometries[r],h,c,u,d)===!1)return!1;break}default:throw new Error("Unknown Geometry Type")}}h++}}function vg(n,e,t){var r=t;return Xa(n,function(o,i,s,a,l){i===0&&t===void 0?r=o:r=e(r,o,i,s,a,l)}),r}function Ii(n,e){Xa(n,function(t,r,o,i,s){var a=t===null?null:t.type;switch(a){case null:case"Point":case"LineString":case"Polygon":return e(Te.feature.call(void 0,t,o,{bbox:i,id:s}),r,0)===!1?!1:void 0}var l;switch(a){case"MultiPoint":l="Point";break;case"MultiLineString":l="LineString";break;case"MultiPolygon":l="Polygon";break}for(var c=0;c<t.coordinates.length;c++){var u=t.coordinates[c],d={type:l,coordinates:u};if(e(Te.feature.call(void 0,d,o),r,c)===!1)return!1}})}function xg(n,e,t){var r=t;return Ii(n,function(o,i,s){i===0&&s===0&&t===void 0?r=o:r=e(r,o,i,s)}),r}function Kd(n,e){Ii(n,function(t,r,o){var i=0;if(t.geometry){var s=t.geometry.type;if(!(s==="Point"||s==="MultiPoint")){var a,l=0,c=0,u=0;if(Gn(t,function(d,h,g,b,M){if(a===void 0||r>l||b>c||M>u){a=d,l=r,c=b,u=M,i=0;return}var p=Te.lineString.call(void 0,[a,d],t.properties);if(e(p,r,o,M,i)===!1)return!1;i++,a=d})===!1)return!1}}})}function Sg(n,e,t){var r=t,o=!1;return Kd(n,function(i,s,a,l,c){o===!1&&t===void 0?r=i:r=e(r,i,s,a,l,c),o=!0}),r}function Qd(n,e){if(!n)throw new Error("geojson is required");Ii(n,function(t,r,o){if(t.geometry!==null){var i=t.geometry.type,s=t.geometry.coordinates;switch(i){case"LineString":if(e(t,r,o,0,0)===!1)return!1;break;case"Polygon":for(var a=0;a<s.length;a++)if(e(Te.lineString.call(void 0,s[a],t.properties),r,o,a)===!1)return!1;break}}})}function Mg(n,e,t){var r=t;return Qd(n,function(o,i,s,a){i===0&&t===void 0?r=o:r=e(r,o,i,s,a)}),r}function Cg(n,e){if(e=e||{},!Te.isObject.call(void 0,e))throw new Error("options is invalid");var t=e.featureIndex||0,r=e.multiFeatureIndex||0,o=e.geometryIndex||0,i=e.segmentIndex||0,s=e.properties,a;switch(n.type){case"FeatureCollection":t<0&&(t=n.features.length+t),s=s||n.features[t].properties,a=n.features[t].geometry;break;case"Feature":s=s||n.properties,a=n.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":a=n;break;default:throw new Error("geojson is invalid")}if(a===null)return null;var l=a.coordinates;switch(a.type){case"Point":case"MultiPoint":return null;case"LineString":return i<0&&(i=l.length+i-1),Te.lineString.call(void 0,[l[i],l[i+1]],s,e);case"Polygon":return o<0&&(o=l.length+o),i<0&&(i=l[o].length+i-1),Te.lineString.call(void 0,[l[o][i],l[o][i+1]],s,e);case"MultiLineString":return r<0&&(r=l.length+r),i<0&&(i=l[r].length+i-1),Te.lineString.call(void 0,[l[r][i],l[r][i+1]],s,e);case"MultiPolygon":return r<0&&(r=l.length+r),o<0&&(o=l[r].length+o),i<0&&(i=l[r][o].length-i-1),Te.lineString.call(void 0,[l[r][o][i],l[r][o][i+1]],s,e)}throw new Error("geojson is invalid")}function Eg(n,e){if(e=e||{},!Te.isObject.call(void 0,e))throw new Error("options is invalid");var t=e.featureIndex||0,r=e.multiFeatureIndex||0,o=e.geometryIndex||0,i=e.coordIndex||0,s=e.properties,a;switch(n.type){case"FeatureCollection":t<0&&(t=n.features.length+t),s=s||n.features[t].properties,a=n.features[t].geometry;break;case"Feature":s=s||n.properties,a=n.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":a=n;break;default:throw new Error("geojson is invalid")}if(a===null)return null;var l=a.coordinates;switch(a.type){case"Point":return Te.point.call(void 0,l,s,e);case"MultiPoint":return r<0&&(r=l.length+r),Te.point.call(void 0,l[r],s,e);case"LineString":return i<0&&(i=l.length+i),Te.point.call(void 0,l[i],s,e);case"Polygon":return o<0&&(o=l.length+o),i<0&&(i=l[o].length+i),Te.point.call(void 0,l[o][i],s,e);case"MultiLineString":return r<0&&(r=l.length+r),i<0&&(i=l[r].length+i),Te.point.call(void 0,l[r][i],s,e);case"MultiPolygon":return r<0&&(r=l.length+r),o<0&&(o=l[r].length+o),i<0&&(i=l[r][o].length-i),Te.point.call(void 0,l[r][o][i],s,e)}throw new Error("geojson is invalid")}me.coordAll=bg;me.coordEach=Gn;me.coordReduce=fg;me.featureEach=Jd;me.featureReduce=yg;me.findPoint=Eg;me.findSegment=Cg;me.flattenEach=Ii;me.flattenReduce=xg;me.geomEach=Xa;me.geomReduce=vg;me.lineEach=Qd;me.lineReduce=Mg;me.propEach=qd;me.propReduce=gg;me.segmentEach=Kd;me.segmentReduce=Sg});var rh=lt(Oi=>{"use strict";f();Object.defineProperty(Oi,"__esModule",{value:!0});var wg=eh();function th(n,e={}){if(n.bbox!=null&&e.recompute!==!0)return n.bbox;let t=[1/0,1/0,-1/0,-1/0];return wg.coordEach.call(void 0,n,r=>{t[0]>r[0]&&(t[0]=r[0]),t[1]>r[1]&&(t[1]=r[1]),t[2]<r[0]&&(t[2]=r[0]),t[3]<r[1]&&(t[3]=r[1])}),t}var Tg=th;Oi.bbox=th;Oi.default=Tg});var ah=lt((a1,Ya)=>{f();var dt=Rd(),oh=ka(),ih=Vd(),$r=rh().default,Dg=ih.featureEach,i1=ih.coordEach,s1=oh.polygon,nh=oh.featureCollection;function sh(n){var e=new dt(n);return e.insert=function(t){if(t.type!=="Feature")throw new Error("invalid feature");return t.bbox=t.bbox?t.bbox:$r(t),dt.prototype.insert.call(this,t)},e.load=function(t){var r=[];return Array.isArray(t)?t.forEach(function(o){if(o.type!=="Feature")throw new Error("invalid features");o.bbox=o.bbox?o.bbox:$r(o),r.push(o)}):Dg(t,function(o){if(o.type!=="Feature")throw new Error("invalid features");o.bbox=o.bbox?o.bbox:$r(o),r.push(o)}),dt.prototype.load.call(this,r)},e.remove=function(t,r){if(t.type!=="Feature")throw new Error("invalid feature");return t.bbox=t.bbox?t.bbox:$r(t),dt.prototype.remove.call(this,t,r)},e.clear=function(){return dt.prototype.clear.call(this)},e.search=function(t){var r=dt.prototype.search.call(this,this.toBBox(t));return nh(r)},e.collides=function(t){return dt.prototype.collides.call(this,this.toBBox(t))},e.all=function(){var t=dt.prototype.all.call(this);return nh(t)},e.toJSON=function(){return dt.prototype.toJSON.call(this)},e.fromJSON=function(t){return dt.prototype.fromJSON.call(this,t)},e.toBBox=function(t){var r;if(t.bbox)r=t.bbox;else if(Array.isArray(t)&&t.length===4)r=t;else if(Array.isArray(t)&&t.length===6)r=[t[0],t[1],t[3],t[4]];else if(t.type==="Feature")r=$r(t);else if(t.type==="FeatureCollection")r=$r(t);else throw new Error("invalid geojson");return{minX:r[0],minY:r[1],maxX:r[2],maxY:r[3]}},e}Ya.exports=sh;Ya.exports.default=sh});var _i=lt((I1,Ri)=>{f();(function(){"use strict";function n(s,a){var l=s.x-a.x,c=s.y-a.y;return l*l+c*c}function e(s,a,l){var c=a.x,u=a.y,d=l.x-c,h=l.y-u;if(d!==0||h!==0){var g=((s.x-c)*d+(s.y-u)*h)/(d*d+h*h);g>1?(c=l.x,u=l.y):g>0&&(c+=d*g,u+=h*g)}return d=s.x-c,h=s.y-u,d*d+h*h}function t(s,a){for(var l=s[0],c=[l],u,d=1,h=s.length;d<h;d++)u=s[d],n(u,l)>a&&(c.push(u),l=u);return l!==u&&c.push(u),c}function r(s,a,l,c,u){for(var d=c,h,g=a+1;g<l;g++){var b=e(s[g],s[a],s[l]);b>d&&(h=g,d=b)}d>c&&(h-a>1&&r(s,a,h,c,u),u.push(s[h]),l-h>1&&r(s,h,l,c,u))}function o(s,a){var l=s.length-1,c=[s[0]];return r(s,0,l,a,c),c.push(s[l]),c}function i(s,a,l){if(s.length<=2)return s;var c=a!==void 0?a*a:1;return s=l?s:t(s,c),s=o(s,c),s}typeof define=="function"&&define.amd?define(function(){return i}):typeof Ri<"u"?(Ri.exports=i,Ri.exports.default=i):typeof self<"u"?self.simplify=i:window.simplify=i})()});var vp=lt((Pl,Il)=>{f();(function(n,e){typeof Pl=="object"&&typeof Il<"u"?Il.exports=e():typeof define=="function"&&define.amd?define(e):(n=n||self,n.TinyQueue=e())})(Pl,function(){"use strict";var n=function(r,o){if(r===void 0&&(r=[]),o===void 0&&(o=e),this.data=r,this.length=this.data.length,this.compare=o,this.length>0)for(var i=(this.length>>1)-1;i>=0;i--)this._down(i)};n.prototype.push=function(r){this.data.push(r),this.length++,this._up(this.length-1)},n.prototype.pop=function(){if(this.length!==0){var r=this.data[0],o=this.data.pop();return this.length--,this.length>0&&(this.data[0]=o,this._down(0)),r}},n.prototype.peek=function(){return this.data[0]},n.prototype._up=function(r){for(var o=this,i=o.data,s=o.compare,a=i[r];r>0;){var l=r-1>>1,c=i[l];if(s(a,c)>=0)break;i[r]=c,r=l}i[r]=a},n.prototype._down=function(r){for(var o=this,i=o.data,s=o.compare,a=this.length>>1,l=i[r];r<a;){var c=(r<<1)+1,u=i[c],d=c+1;if(d<this.length&&s(i[d],u)<0&&(c=d,u=i[d]),s(u,l)>=0)break;i[r]=u,r=c}i[r]=l};function e(t,r){return t<r?-1:t>r?1:0}return n})});var Sp=lt((XO,Ol)=>{"use strict";f();var Cs=vp();Cs.default&&(Cs=Cs.default);Ol.exports=xp;Ol.exports.default=xp;function xp(n,e,t){e=e||1;for(var r,o,i,s,a=0;a<n[0].length;a++){var l=n[0][a];(!a||l[0]<r)&&(r=l[0]),(!a||l[1]<o)&&(o=l[1]),(!a||l[0]>i)&&(i=l[0]),(!a||l[1]>s)&&(s=l[1])}var c=i-r,u=s-o,d=Math.min(c,u),h=d/2;if(d===0){var g=[r,o];return g.distance=0,g}for(var b=new Cs(void 0,Pb),M=r;M<i;M+=d)for(var p=o;p<s;p+=d)b.push(new er(M+h,p+h,h,n));var m=Ob(n),y=new er(r+c/2,o+u/2,0,n);y.d>m.d&&(m=y);for(var v=b.length;b.length;){var x=b.pop();x.d>m.d&&(m=x,t&&console.log("found best %d after %d probes",Math.round(1e4*x.d)/1e4,v)),!(x.max-m.d<=e)&&(h=x.h/2,b.push(new er(x.x-h,x.y-h,h,n)),b.push(new er(x.x+h,x.y-h,h,n)),b.push(new er(x.x-h,x.y+h,h,n)),b.push(new er(x.x+h,x.y+h,h,n)),v+=4)}t&&(console.log("num probes: "+v),console.log("best distance: "+m.d));var S=[m.x,m.y];return S.distance=m.d,S}function Pb(n,e){return e.max-n.max}function er(n,e,t,r){this.x=n,this.y=e,this.h=t,this.d=Ib(n,e,r),this.max=this.d+this.h*Math.SQRT2}function Ib(n,e,t){for(var r=!1,o=1/0,i=0;i<t.length;i++)for(var s=t[i],a=0,l=s.length,c=l-1;a<l;c=a++){var u=s[a],d=s[c];u[1]>e!=d[1]>e&&n<(d[0]-u[0])*(e-u[1])/(d[1]-u[1])+u[0]&&(r=!r),o=Math.min(o,Lb(n,e,u,d))}return o===0?0:(r?1:-1)*Math.sqrt(o)}function Ob(n){for(var e=0,t=0,r=0,o=n[0],i=0,s=o.length,a=s-1;i<s;a=i++){var l=o[i],c=o[a],u=l[0]*c[1]-c[0]*l[1];t+=(l[0]+c[0])*u,r+=(l[1]+c[1])*u,e+=u*3}return e===0?new er(o[0][0],o[0][1],0,n):new er(t/e,r/e,0,n)}function Lb(n,e,t,r){var o=t[0],i=t[1],s=r[0]-o,a=r[1]-i;if(s!==0||a!==0){var l=((n-o)*s+(e-i)*a)/(s*s+a*a);l>1?(o=r[0],i=r[1]):l>0&&(o+=s*l,i+=a*l)}return s=n-o,a=e-i,s*s+a*a}});f();f();globalThis.MappedinDebug||(globalThis.MappedinDebug={});globalThis.MappedinDebug.__idleCallbackInteractionState={isInteracting:!1,interactionCheckers:[],pendingCallbacks:[],registerInteractionChecker:function(n){this.interactionCheckers.push(n)},unregisterInteractionChecker:function(n){let e;for(let t=this.interactionCheckers.length-1;t>=0;t--)if(e=this.interactionCheckers[t],e===n){this.interactionCheckers.splice(t,1);break}},checkInteraction:function(){let n=!1;for(let e=0;e<this.interactionCheckers.length;e++)if(n=this.interactionCheckers[e](),n)return!0;return!1},addPendingCallback:function(n,e){this.pendingCallbacks.push({callback:n,timeoutId:e}),this.scheduleDeferredCheck()},scheduleDeferredCheck:function(){var n=this;this.checkTimeoutId||(this.checkTimeoutId=setTimeout(function e(){if(n.checkInteraction())n.checkTimeoutId=setTimeout(e,16);else{n.checkTimeoutId=null;var t=n.pendingCallbacks.slice();n.pendingCallbacks=[];let r;for(let o=0;o<t.length;o++)if(r=t[o],r&&r.callback)try{r.callback()}catch{}}},16))},removePendingCallback:function(n){let e;for(let t=this.pendingCallbacks.length-1;t>=0;t--)if(e=this.pendingCallbacks[t],e.timeoutId===n){this.pendingCallbacks.splice(t,1);break}}};globalThis.requestIdleCallback=globalThis.requestIdleCallback||function(n){var e=performance.now(),t,r=!1,o=function(){if(!r){r=!0;try{n({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(performance.now()-e))}})}catch{}}};return globalThis.MappedinDebug?.__idleCallbackInteractionState?.checkInteraction()?(t=Date.now()+Math.random(),globalThis.MappedinDebug.__idleCallbackInteractionState.addPendingCallback(o,t),t):(t=setTimeout(o,0),t)};globalThis.cancelIdleCallback=globalThis.cancelIdleCallback||function(n){clearTimeout(n),globalThis.MappedinDebug?.__idleCallbackInteractionState?.removePendingCallback(n)};f();f();(function(){typeof globalThis!="object"&&(Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__)})();var wu="data:image/jpeg;base64,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gAAEAAgEAggEEEEEEEFSCCCCCCAQASCSQWJJJJLEkkkkkgkkEgEgEgAAEAAgEAggEEEEEH5AQQQQVBBAIAAJBIJJJLEkkkkliSSSSSQSSCQSAAAQAQQCCCCCCCCCpBBBBBUEEEAgAAkEgkkksSSSSSWJJJJJJBJIJBIAABABBAIIIIIIIIKg/LCAQCACAAAACQCQSCQSASSASCQCQAAAAAAQCAQAQCAQAQQCACAAAACQCQSCQSASSASCQCQAAAAAAQCAQAQCAQfPgAAAAAAAAAAAAAAkAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAgAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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bpu3bpum6bpum6bpum6bpu3TdN03bpum6bpum6bt03TdN03TdN03TdN03TdN03TduysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysysmzKzKzKybMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrMrJT+2lKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpSn9tKUpSlKUpSlKUpSlKUpSlKUpSlKUpSlKUpT/wDrA//EAB0RAAMBAAMBAQEAAAAAAAAAAAABERIwQFAgkMD/2gAIAQIBAT8A/COlKioqKioqKi+zSoqKioqL59Ro0aKyvpVlZWaNFXiVGkaNFZWV9CsrNGjRpFXepo0V8c69Zo0u1pGilfVnJWaNF+NFXNUaNFfmU0aReamkaNPzNM19VlZWaKysrK/XrKzTNGjRWaKyv+u0/8QAHREBAQACAQUAAAAAAAAAAAAAEQBAUCAQITCQwP/aAAgBAwEBPwD1NkRER07eYiIiNMRERGARERGgIiNAREZRERoCIjiYBERqiIwiI1REcCIiIiIjbkREREREfXZ//9k=";f();var Ks=class n extends Error{name="AssertionError";constructor(e){super(e),Error.captureStackTrace&&Error.captureStackTrace(this,n)}};function Tu(n,e){if(n==null){let t;e?.customMessage?t=e.customMessage:t=`Expected ${e?.valueName?`'${e.valueName}'`:"value"} to be defined, but received ${n}`;let r=e?.errorClass||Ks,o=new r(t);throw e?.captureStackTrace!==!1&&Error.captureStackTrace&&Error.captureStackTrace(o,Tu),o}}function Qs(n,e,t){if(Tu(n),n?.type!==e){let r=`Expected type ${e} but got ${n?.type}`;throw new Error(t??r)}}f();var Ho=class{backgroundAlpha=1;backgroundColor=new k;width=0;height=0;options={};renderer;constructor(e){try{this.options=e,Wl()?(this.renderer={setSize:()=>{},state:{reset:()=>{}},properties:{get:()=>{}},getSize:()=>({width:window.innerWidth,height:innerHeight}),getDrawingBufferSize:()=>({width:window.innerWidth,height:innerHeight}),getClearAlpha:()=>1,getClearColor:()=>new k,autoUpdate:!0,shadowMap:{autoUpdate:!0},getContext:()=>({getContextAttributes(){return{alpha:!0,antialias:!1,depth:!0,stencil:!1}}}),readRenderTargetPixelsAsync:()=>Promise.resolve([]),setRenderTarget:()=>{},setClearColor:()=>{},clear:()=>{},render:()=>{},clearStencil:()=>{},clearDepth:()=>{},domElement:document.createElement("canvas"),capabilities:{isWebGL2:!0}},this.renderer.domElement.style.width="1920px",Object.defineProperty(this.renderer.domElement,"clientWidth",{configurable:!0,value:1920}),this.renderer.domElement.style.height="1080px",Object.defineProperty(this.renderer.domElement,"clientHeight",{configurable:!0,value:1080})):(this.renderer=new fc({canvas:e.canvas,alpha:e.alpha||!1,stencil:!0,antialias:typeof e.antialias=="boolean"?e.antialias:!0,powerPreference:"high-performance",preserveDrawingBuffer:!0}),this.renderer.localClippingEnabled=!0),this.backgroundColor=new k(e.backgroundColor??"#ffffff"),this.backgroundAlpha=e.backgroundAlpha??1}catch(t){R.error(t),e.onWebGLRendererError&&e.onWebGLRendererError(t)}this.domElement()?.addEventListener("webglcontextlost",this.handleWebGLContextLost),this.domElement()?.addEventListener("webglcontextrestored",this.handleWebGLContextRestored),this.domElement()?.addEventListener("webglcontextcreationerror",this.handleWebGLContextCreationError),this.domElement()&&(this.domElement().style.zIndex="1")}destroy(){this.renderer&&this.renderer.dispose?.(),this.domElement()?.removeEventListener("webglcontextlost",this.handleWebGLContextLost),this.domElement()?.removeEventListener("webglcontextrestored",this.handleWebGLContextRestored),this.domElement()?.removeEventListener("webglcontextcreationerror",this.handleWebGLContextCreationError)}enabledLayers=new Set([0,1]);matricesUpdatedThisFrame=!1;startFrame(){this.matricesUpdatedThisFrame=!1}updateMatricesIfNeeded(e){this.matricesUpdatedThisFrame||(e.updateMatrixWorld(),this.matricesUpdatedThisFrame=!0)}renderScene(e,t){this.renderer&&(this.updateMatricesIfNeeded(e),this.renderer.render(e,t))}renderFullScene(e,t){if(this.renderer){this.renderer.state.reset(),this.updateMatricesIfNeeded(e),this.renderer.clearStencil(),this.renderer.setRenderTarget(null),this.renderer.autoClear=!1,t.layers.disableAll();for(let r of this.enabledLayers.values())t.layers.enable(r);this.renderer.render(e,t),this.renderer.clearDepth(),t.layers.disableAll(),t.layers.enable(ue.ALWAYS_ON_TOP_PATHS),this.renderer.render(e,t),this.renderer.clearStencil(),this.renderer.state.reset()}}clear(){this.renderer&&(this.renderer.setClearColor(this.backgroundColor,this.backgroundAlpha),this.renderer.clear())}setBufferSize(e,t){w.env.NODE_ENV==="test"||!this.renderer||(this.width=e,this.height=t,this.renderer.setSize(e,t,!1))}setBackgroundColor(e,t){this.backgroundColor=e,this.backgroundAlpha=t}domElement(){return this.renderer?.domElement}handleWebGLContextCreationError=e=>{this.options.onWebGLContextCreationError?.(e)};handleWebGLContextLost=e=>{e.preventDefault(),this.options.onWebGLContextLost?.(e)};handleWebGLContextRestored=e=>{this.options.onWebGLContextRestored?.(e)}};f();f();f();f();var Vo=class{type;event;constructor(e){this.type=0,this.event=e}get timestamp(){return this.event.timeStamp}},Wo=class{taps=[];add(e){this.lastPointerDown&&e.timestamp-this.lastPointerDown.timestamp<50?this.lastPointerDown.type=1:this.taps.push(e)}get lastPointerDown(){return this.taps.length>=1?this.taps[this.taps.length-1]:void 0}get isSingleTapWithTwoFingers(){return this.isSingleTap&&this.lastPointerDown?.type===1}get isSingleTapWithOneFinger(){return this.isSingleTap&&this.lastPointerDown?.type===0}get isDoubleTapWithOneFinger(){return this.isDoubleTap&&this.taps[0]?.type===0&&this.taps[1]?.type===0}get isSingleTap(){return this.taps.length===1}get isDoubleTap(){return this.taps.length===2}discardOutsideOfWaitWindow(e){this.taps=this.taps.filter(t=>e-t.timestamp<300)}flush(){this.taps=[]}get _taps(){return this.taps}destroy(){this.flush()}};f();function ta(n){let e=new Set;for(let t of n){let r=t.object;for(;r.visible&&r.parent&&r.parent.visible===!0&&!e.has(r.parent);)r=r.parent,r instanceof ie&&r.type==="group-container"&&r.visible&&r.components[0]&&e.add(r)}return Array.from(e)}f();function ra(n,e){if(n==null||e==null)return n===e;if(n.length!==e.length)return!1;for(let t=0;t<n.length;t++)if(n[t]!==e[t])return!1;return!0}var Sn=class extends Z{raycaster=new zt;state={hovered3DEntity:void 0,hovered2DEntities:new Set,hovered3DContainers:void 0,lastHover:void 0,interaction:{mouseDownStart:void 0,distanceFromMouseDown:void 0,isPanning:!1}};coreState;camera;worldPlane;_quadtree=new vc(new Ut(0,0,0,0));_container;lastPointerEvent;cursor="grab";touchesCount=0;isUserMovingCamera;constructor(e,t,r,o,i){super(),this.isUserMovingCamera=i,this.raycaster.layers.enableAll(),this.raycaster.layers.disable(1),this.camera=r,this._container=e,this.coreState=t,this.worldPlane=o,this._container.addEventListener("pointerdown",this.onPointerDown,{capture:!1,signal:this.signal}),this._container.addEventListener("pointermove",this.onPointerMove,{capture:!1,signal:this.signal}),this._container.classList.add("mappedin-interactive")}updateQuadtree(e){this._quadtree=e}setHovered3DEntityInteractionComponentDirty(){if(this.state.hovered3DEntity){let e=this.state.hovered3DEntity.components[2];e&&(e.dirty=!0)}}hasTouched=!1;onPointerMove=po(e=>{e&&(e.preventDefault(),this.updateInteractionStateIfPanning(e),(e.pointerType!=="touch"||e.pointerType===void 0&&this.hasTouched)&&this.handleHover(e),this.handleCursor())},w.env.NODE_ENV==="test"?0:16,{leading:!0});tapsControl=new Wo;getThreeDIntersectsFromXY(e){this.raycaster.setFromCamera(e,this.camera),this.raycaster.layers.enable(ue.GEOMETRY);let t=this.raycaster.intersectObjects(this._hitBoxes.entities,!0).filter(o=>o.object?.name==="worldPlane"||o.object?.visible),r=t.findIndex(o=>o.object?.name==="worldPlane");return r!==-1&&t.push(t.splice(r,1)[0]),t}getGroupContainerIntersectsFromXY(e){let t=this.getThreeDIntersectsFromXY(e),r;return t!=null&&t.length>0&&(r=ta(t)),r}onPointerDown=e=>{e.target===this._container&&(this._container.addEventListener("pointerup",this.onPointerUp,{capture:!1,signal:this.signal}),this._container.addEventListener("pointercancel",this.onPointerUp,{capture:!1,signal:this.signal}),this.state.interaction.mouseDownStart={time:Date.now(),timestamp:e.timeStamp,offsetX:e.offsetX,offsetY:e.offsetY},this.lastPointerEvent=e,this.state.interaction.distanceFromMouseDown=0,this.handleCursor(),e.pointerType==="touch"&&(this.tapsControl.add(new Vo(e)),this.touchesCount=Math.max(0,this.touchesCount+1)))};clickTimeout=void 0;onPointerUp=e=>{this.tapsControl.discardOutsideOfWaitWindow(e.timeStamp),this.lastPointerEvent=e,this.touchesCount=Math.max(0,this.touchesCount-1),this.touchesCount===0&&(this._container.removeEventListener("pointerup",this.onPointerUp,{capture:!1}),this._container.removeEventListener("pointercancel",this.onPointerUp,{capture:!1})),this.updateInteractionStateIfPanning(e);let{mouseDownStart:t}=this.state.interaction;!t||this.state.interaction.distanceFromMouseDown==null||(Date.now()<t.time+300&&(this.tapsControl.isSingleTapWithTwoFingers||this.state.interaction.distanceFromMouseDown<=15)&&(e.pointerType==="touch"&&!this.isUserMovingCamera()?this.tapsControl.isSingleTapWithTwoFingers?(this.publish("singletap-with-twofinger",e),this.flush()):this.tapsControl.isSingleTapWithOneFinger&&this.touchesCount===0?(this.clickTimeout&&clearTimeout(this.clickTimeout),this.clickTimeout=window.setTimeout(()=>{this.handleClick(e),this.flush()},300)):this.tapsControl.isDoubleTapWithOneFinger&&(this.publish("doubletap-with-onefinger",e),this.flush()):this.handleClick(e)),this.state.interaction.mouseDownStart=void 0,this.state.interaction.distanceFromMouseDown=void 0,this.state.interaction.isPanning=!1,this.handleCursor())};flush(){this.tapsControl.flush(),this.clickTimeout!=null&&(clearTimeout(this.clickTimeout),this.clickTimeout=void 0)}handleHover(e){let t=e||this.lastPointerEvent;if(t?.pointerType==="touch"||this.state.interaction.mouseDownStart||!t||this.isUserMovingCamera())return;let{entity3D:r,entity2D:o,position:i,groupContainers:s}=this.intersect(t);(this.detect3DEntityHover(r)||this.detect2DEntityHover(o)||this.detect3DContainerHover(s))&&(this.state.hovered3DEntity=r,this.state.lastHover=r,this.state.hovered2DEntities=new Set(o.map(a=>a.id)),this.state.hovered3DContainers=s,this.publish("hover",{entity2D:o,entity3D:this.state.hovered3DEntity,position:i,groupContainers:s})),this.handleCursor()}handleCursor(){let e=!!(this.state.hovered3DEntity&&this.state.hovered3DEntity?.components[2]||this.state.hovered2DEntities.size>0),t=!!this.state.interaction.mouseDownStart,r=this.state.interaction.isPanning,o=Jp(e,r,t);this.cursor!==o&&(this.cursor=o,o==="pointer"?this._container.classList.add("mappedin-interaction-hover"):this._container.classList.remove("mappedin-interaction-hover"))}detect2DEntityHover(e){if(e.length!==this.state.hovered2DEntities.size)return!0;for(let t=0;t<e.length;t++)if(!this.state.hovered2DEntities.has(e[t].id))return!0;return!1}handleClick(e){let t=this.intersect(e);this.publish("click",{entity2D:t.entity2D,entity3D:t.entity3D,position:t.position,groupContainers:t.groupContainers,pointerEvent:{button:e.button}})}dirty3D=!0;cachedHitBoxes={entities:[]};get _hitBoxes(){if(this.dirty3D){this.cachedHitBoxes.entities=[];let e;for(let t of this.coreState.geometry3DIdsInScene)if(e=this.coreState.geometry3DMap.get(t),e?.type==="geometry"||e?.type==="model"||e?.type==="path"||e?.type==="custom-geometry"||e?.type==="image"){let r=e.components[0];if(r instanceof oe&&r.pointerEventsPassThrough)continue;r.mesh&&!this.cachedHitBoxes.entities.includes(r.mesh)&&this.cachedHitBoxes.entities.push(r.mesh)}return this.dirty3D=!1,this.cachedHitBoxes.entities.push(this.worldPlane),this.cachedHitBoxes}return this.cachedHitBoxes}ndcPoint=new V;intersect(e){let{offsetX:t,offsetY:r}=e,o=[t,r],s=this._quadtree.queryPoint(o).filter(y=>y.intersectsPoint(o));this.ndcPoint.x=t/this._container.clientWidth*2-1,this.ndcPoint.y=-(r/this._container.clientHeight)*2+1;let a=this.getThreeDIntersectsFromXY(this.ndcPoint),l=[],c=[],u=[],d;for(let y of a){if(y.object.name==="worldPlane"){d??=y;continue}if(y.object.name==="hole-fill-mesh"||!(y.object instanceof W)||y.object.material?.colorWrite===!1)continue;let v=y?.instanceId??y?.batchId,x=v!=null&&y?.object.userData.entities?y.object.userData.entities[v]:y.object.userData?.entityId,S=x?this.coreState.geometry3DMap.get(x):void 0;if(S instanceof $){let D=S.components[0];if(D instanceof oe&&D.pointerEventsPassThrough)continue}let C=y.object.userData?.entityId;if(C){let E=this.coreState.geometry3DMap.get(C)?.components[7];if(E?.verticalOffset!=null&&y.point.z>E.verticalOffset)continue}u.push(y),y.object.material.depthTest===!1?l.push(y):c.push(y)}let h=l[0]??c[0]??void 0,g=h?.point??d?.point,b,M;if(h!=null){let y=h?.instanceId??h?.batchId;b=y!=null&&h?.object.userData.entities?this.coreState.geometry3DMap.get(h?.object.userData.entities[y]):this.coreState.geometry3DMap.get(h?.object.userData.entityId),b?.components[2]&&(M=b)}let p=ta(u),m=[];for(let y of s)if(y?.userData?.entityId==="watermark")m.push({id:"watermark"});else{let v=this.coreState.geometry2DMap.get(y?.userData.entityId);v&&m.push(v)}return Kp(m),{entity2D:m,entity3D:M,position:g,groupContainers:p.length>0?p:void 0}}detect3DEntityHover(e){return this.state.lastHover!==e&&(this.state.lastHover&&Iu(this.state.lastHover,!1,this.coreState),e&&Iu(e,!0,this.coreState)),this.state.hovered3DEntity!==e}detect3DContainerHover(e){return!ra(this.state.hovered3DContainers,e)}updateInteractionStateIfPanning(e){this.state.interaction.mouseDownStart&&(this.state.interaction.distanceFromMouseDown=Math.sqrt(Math.pow(e.offsetX-this.state.interaction.mouseDownStart.offsetX,2)+Math.pow(e.offsetY-this.state.interaction.mouseDownStart.offsetY,2)),!this.state.interaction.isPanning&&this.state.interaction.distanceFromMouseDown>15&&(this.state.interaction.isPanning=!0))}getMouseRayIntersects(){return this.raycaster.intersectObjects([this.worldPlane],!1)}destroy(){this._container.removeEventListener("pointerdown",this.onPointerDown,{capture:!1}),this._container.removeEventListener("pointermove",this.onPointerMove,{capture:!1}),this._container.removeEventListener("pointerup",this.onPointerUp,{capture:!1}),this._container.removeEventListener("pointercancel",this.onPointerUp,{capture:!1}),super.destroy()}debugPanel;enableDebug(){let e=document.createElement("div");e.style.position="absolute",e.style.top="0",e.style.right="0",e.style.backgroundColor="white",e.style.padding="10px",document.body.append(e),e.id="interaction-debug-panel",this.debugPanel=e,this.on("doubletap-with-onefinger",()=>{this.queueDebugMessage("doubletap-with-onefinger","#ffadad")}),this.on("singletap-with-twofinger",()=>{this.queueDebugMessage("singletap-with-twofinger","#ffd6a5")}),this.on("click",t=>{this.queueDebugMessage(`CLICK
|
|
2
|
-
3D: ${t.entity3D?.id}
|
|
3
|
-
2D: ${t.entity2D?.map(r=>r.id).join(", ")}
|
|
4
|
-
Pos: ${t.position?.toArray().join(", ")}`,"#fdffb6")}),this.on("hover",t=>{this.queueDebugMessage(`HOVER
|
|
5
|
-
3D: ${t.entity3D?.id}
|
|
6
|
-
2D: ${t.entity2D?.map(r=>r.id).join(", ")}
|
|
7
|
-
Pos: ${t.position?.toArray().join(", ")}`,"#caffbf")})}get _state(){return this.state}queueDebugMessage(e,t){let r=document.createElement("pre");r.style.maxWidth="300px",r.style.transition="opacity 500ms cubic-bezier(0.4, 0, 0.2, 1)",r.style.backgroundColor=t,r.textContent=e,this.debugPanel?.prepend(r),setTimeout(()=>{r.style.opacity="0",setTimeout(()=>{r.remove()},500)},2500)}getCursor(){return this.cursor}};function Iu(n,e,t){let r=n.components[2];r&&r.hover!==!0&&(r.hover=e?"user-interaction":!1,r.dirty=!0);let o=n.components[0].textMesh?.userData.entityId;if(!o)return;let i=t.geometry3DMap.get(o);i?.type==="text3d"&&(i.components[1].hoverByPolygon=e,i.components[1].dirty=!0)}function Jp(n,e,t){return e?"grabbing":n?"pointer":t?"grabbing":"grab"}function Kp(n){if(n.length<=1)return;let e=[],t=[],r=[];for(let i=0;i<n.length;i++){let s=n[i];s.components?s.type==="marker"?e.push(s):t.push(s):r.push(s)}if(e.length>1){let i,s;e.sort((a,l)=>{i=a.components[0],s=l.components[0];let c=i.projection.y,u=s.projection.y;return c!==u?u-c:i.markerContainer.compareDocumentPosition(s.markerContainer)&Node.DOCUMENT_POSITION_FOLLOWING?1:-1})}if(t.length>1){let i=[];for(let s=0;s<t.length;s++){let a=t[s],l=a.components[0];i.push({entity:a,y:l.projection.y,idx:s})}i.sort((s,a)=>s.y!==a.y?a.y-s.y:a.idx-s.idx);for(let s=0;s<i.length;s++)t[s]=i[s].entity}let o=0;for(let i=0;i<e.length;i++)n[o++]=e[i];for(let i=0;i<t.length;i++)n[o++]=t[i];for(let i=0;i<r.length;i++)n[o++]=r[i]}f();f();f();var Ou=new Y;function Mn(n,e=!0){let t=new Nt,r=n.mesh?.geometry;if(!r||!n.batchedProps?.range)return;let o=n.batchedProps.range,i=o.start,s=o.count,a=r.getAttribute("position");if(a){let u=new Float32Array(s*3);for(let d=0;d<s;d++){let h=i+d;u[d*3]=a.array[h*3],u[d*3+1]=a.array[h*3+1],u[d*3+2]=a.array[h*3+2]}t.setAttribute("position",new ke(u,3))}let l=r.getAttribute("normal");if(l){let u=new Float32Array(s*3);for(let d=0;d<s;d++){let h=i+d;u[d*3]=l.array[h*3],u[d*3+1]=l.array[h*3+1],u[d*3+2]=l.array[h*3+2]}t.setAttribute("normal",new ke(u,3))}let c=r.getAttribute("uv");if(c){let u=new Float32Array(s*2);for(let d=0;d<s;d++){let h=i+d;u[d*2]=c.array[h*2],u[d*2+1]=c.array[h*2+1]}t.setAttribute("uv",new ke(u,2))}if(r.index){let u=r.index,d=new Uint32Array(s);for(let h=0;h<s;h++)d[h]=u.array[i+h];t.setIndex(new ke(d,1))}if(e&&n.instanceIndex!==-1&&Ur(n.mesh))try{n.mesh.getMatrixAt(n.instanceIndex,Ou),t.applyMatrix4(Ou)}catch(u){R.error(u)}return t}function Lu(n,e,t){let r=Mn(n,!1);if(!r||!Ur(n.mesh))return;n.mesh.getMatrixAt(n.instanceIndex,t),n.mesh.deleteInstance(n.instanceIndex),n.mesh.optimize();let o=e.addGeometry(r);e.addInstance(o),e.setMatrixAt(o,t);let i=e.getGeometryIdAt(o),s=e.getGeometryRangeAt(i);return s&&n.batchedProps&&(n.batchedProps.range=s),r.dispose(),o}function Au(n,e){if(e===0)return;let t=n.getAttribute("position");for(let r=0;r<t.count;r++)t.setZ(r,t.getZ(r)+e);t.needsUpdate=!0}var Cn=class{#e=null;#n;constructor(e){this.#n=e}getCurrentSceneGLTF=async e=>{let t={onlyVisible:!0,binary:!0,light:!0,scale:1,...e},r=await this.#o(),o=this.#i(t),i=await r.parseAsync(o,{trs:!1,maxTextureSize:1/0,onlyVisible:t.onlyVisible,binary:t.binary,scale:t.scale}),s;if(i instanceof ArrayBuffer)s=new Blob([i],{type:"application/octet-stream"});else{let a=JSON.stringify(i,null,2);s=new Blob([a],{type:"text/plain"})}return s};#i=e=>{let{scale:t,light:r,onlyVisible:o}=e,i=new St,s=new ce().setFromObject(this.#n.geometryScene);if(this.#s(this.#n.geometryScene,i,o),r){let a=new wo(16777215,.3*Math.PI);a.position.set(0,Math.max(s.max.x,s.max.y)*t*.5,s.max.y*t*4),a.lookAt(0,0,-1),a.target.position.set(0,0,-1),a.add(a.target),i.add(a)}return i};async#o(){if(!this.#e){let{GLTFExporter:e}=await import("./GLTFExporter-7JO7KU2J.js");this.#e=new e}return this.#e}#s=(e,t,r)=>{e.material&&e instanceof Mo&&this.#c(e).forEach(o=>t.add(o)),e.children.forEach(o=>{(!r||o.visible)&&this.#s(o,t,r)})};#a=(e,t,r)=>{let o=new mn({color:new k(e),metalness:0});return o.opacity=t,o.transparent=r,o};#c(e){let t=[],o=(e.userData?.entities?Object.values(e.userData?.entities):[]).map(a=>this.#n.geometry3DMap.get(a)),i=new Map;e.updateWorldMatrix(!0,!1);let s=new O;return e.getWorldPosition(s),o.forEach(a=>{if(!a||!(a instanceof $))return;let l=a.components[1],c=a.components[2];if(!l.visible||l instanceof ut&&l.opacity===0||l instanceof yn||l instanceof Fo)return;let d=`${c?.hover?l.hoverColor||this.#n.hoverColor:l.color}-${l.opacity}-${Number(l.visible)}`;i.has(d)||i.set(d,[]),i.get(d)?.push(a)}),i.forEach((a,l)=>{let[c,u,d]=l.split("-"),h=a.reduce((p,m)=>{if(m.type==="custom-geometry")return p;let y=m.components[0];if("geometry"in y&&y.geometry instanceof Nt){let v=y.geometry.clone();Au(v,s.z),p.push(v)}else if(y instanceof oe&&y.batchedProps){let v=Mn(y);v&&(Au(v,s.z),p.push(v))}return p},[]);if(h.length===0){R.error("No geometries found for batched mesh");return}let g=this.#a(c,Number(u),e.material.transparent),b=ze(h,!0);if(!b){R.error("No merged geometry found for batched mesh");return}let M=new W(b,g);M.position.copy(e.position),M.rotation.copy(e.rotation),M.scale.copy(e.scale),M.visible=!!d,this.#h(M.position,M.scale,M.rotation,M.quaternion),t.push(this.#d(M))}),t}#d=e=>{let{geometry:t,material:r,position:o,rotation:i,quaternion:s,scale:a}=e;if(!t?.isBufferGeometry)return e;let l=t.attributes.position,c=t.attributes.normal,u=t.attributes.uv;return this.#g(l,c),this.#h(o,a,i,s),u&&this.#r(u),r?.map&&t.type==="PlaneGeometry"&&(e.side=_t),e};#g=(e,t)=>{let r=new O,o=new O;for(let i=0;i<e.count;i++)r.fromBufferAttribute(e,i),this.#t(r),e.setXYZ(i,r.x,r.y,r.z),t&&(o.fromBufferAttribute(t,i),this.#t(o),t.setXYZ(i,o.x,o.y,o.z))};#t=e=>{let t=e.y;e.y=e.z,e.z=-t};#h=(e,t,r,o)=>{let i=e.y;e.y=e.z,e.z=-i;let s=t.y;if(t.y=t.z,t.z=s,r instanceof xt)r.order="YXZ",r.set(r.x,r.y,r.z,r.order);else{let a=o.y;o.set(o.x,o.z,-a,o.w)}};#r=e=>{for(let t=0;t<e.count;t++){let r=e.getX(t),o=e.getY(t);e.setXY(t,r,o)}};destroy(){this.#e=null}};f();f();var Qp="gray",em=.1,En=100,oa=new ct.ClipperOffset;function wn(n){let e=n.length;if(e<2)return e;let t=n[0],r=n[e-1];return t.x===r.x&&t.y===r.y?e-1:e}function ia(n,e){if(e<3)return 0;let t=0,r=0,o=0,i=0;for(let a=1;a<e;a++)n[a].x<n[t].x&&(t=a),n[a].y<n[r].y&&(r=a),n[a].x>n[o].x&&(o=a),n[a].y>n[i].y&&(i=a);let s=a=>a===t||a===r||a===o||a===i;for(let a=0;a<e;a++){let l=(a+e-1)%e;if(!s(a)&&!s(l))return a}for(let a=0;a<e;a++)if(!s(a))return a;return(t-(e>>1)+e)%e}function tm(n,e){oa.Clear(),e/=2;let t=n.map(o=>({X:o.x*En,Y:o.y*En}));oa.AddPath(t,ct.JoinType.jtMiter,ct.EndType.etClosedPolygon);let r=new ct.Paths;return oa.Execute(r,e*En),r.length?r.map(i=>i.map(s=>({x:s.X/En,y:s.Y/En}))):[n]}function Zo(n,e,t){let{color:r=Qp,opacity:o=1,altitude:i=0,height:s=em}=t||{};Array.isArray(o)&&(o=1);let a={min:{x:1/0,y:1/0,z:i},max:{x:-1/0,y:-1/0,z:s+i},center:{x:0,y:0,z:(s+i)/2}},c=n.geometry.coordinates[0].map(g=>{let b=e(g[1],g[0]);return a.min.x=Math.min(a.min.x,b.x),a.min.y=Math.min(a.min.y,b.y),a.max.x=Math.max(a.max.x,b.x),a.max.y=Math.max(a.max.y,b.y),b});n.properties?.style?.edgeOffset!=null&&n.properties.style.edgeOffset!==0||n.properties?.image!=null?c=tm(c,n.properties?.style?.edgeOffset||0):c=[c];let u=[];for(let g of c){let b=new Fr,M=wn(g),p=ia(g,M);b.moveTo(g[p].x,g[p].y);for(let x=1;x<M;x++){let S=(p+x)%M;b.lineTo(g[S].x,g[S].y)}let m=n.geometry.coordinates.slice(1);b.holes=m.map(x=>{let S=x.map(E=>e(E[1],E[0])),C=new _r,D=wn(S);C.moveTo(S[0].x,S[0].y);for(let E=1;E<D;E++)C.lineTo(S[E].x,S[E].y);return C});let y=gn(t?.bevel,s),v=new Nr(b,y);v.userData={style:{color:r,opacity:o},usedBevelSettings:y},u.push(v)}if(u.length===1)return u[0];let d=ze(u);u.forEach(g=>g.dispose());let h=gn(t?.bevel,s);return d.userData={style:{color:r,opacity:o},usedBevelSettings:h,_split:!0},d}f();var rm="gray",nm=.1;function Xo(n,e,t){let{color:r=rm,opacity:o=1,altitude:i=0,height:s=nm}=t||{};Array.isArray(o)&&(o=1);let a={min:{x:1/0,y:1/0,z:i},max:{x:-1/0,y:-1/0,z:s+i}},l=gn(t?.bevel,s),c=[];n.geometry.coordinates.forEach(d=>{let h=new Fr,g=d[0].map(y=>{let v=e(y[1],y[0]);return a.min.x=Math.min(a.min.x,v.x),a.min.y=Math.min(a.min.y,v.y),a.max.x=Math.max(a.max.x,v.x),a.max.y=Math.max(a.max.y,v.y),v}),b=wn(g),M=ia(g,b);h.moveTo(g[M].x,g[M].y);for(let y=1;y<b;y++){let v=(M+y)%b;h.lineTo(g[v].x,g[v].y)}let p=d.slice(1);h.holes=p.map(y=>{let v=y.map(C=>e(C[1],C[0])),x=new _r,S=wn(v);x.moveTo(v[0].x,v[0].y);for(let C=1;C<S;C++)x.lineTo(v[C].x,v[C].y);return x});let m=new Nr(h,l);c.push(m)});let u=ze(c);return c.forEach(d=>d.dispose()),u.userData={style:{color:r,opacity:o},usedBevelSettings:l},u}f();var Ae=100,om=.22,im=.01;function Ru(n,e,t={}){let{width:r=om,height:o=im,color:i="gray",opacity:s=1,altitude:a=0}=t,l={min:{x:1/0,y:1/0,z:a},max:{x:-1/0,y:-1/0,z:a+o}},c={bevelEnabled:!1,depth:o},u=new ct.ClipperOffset,d=n.geometry.coordinates.map(M=>M.map(p=>e(p[1],p[0])));u.AddPaths(d.map(M=>M.map(p=>({X:p.x*Ae,Y:p.y*Ae}))),ct.JoinType.jsMiter,ct.EndType.etOpenRound);let h=new ct.PolyTree;u.Execute(h,r/2*Ae);let g=[];for(let M of h.m_AllPolys){let p=new Fr;if(M.IsHole())continue;l.min.x=Math.min(l.min.x,M.m_polygon[0].X),l.min.y=Math.min(l.min.y,M.m_polygon[0].Y),l.max.x=Math.max(l.max.x,M.m_polygon[0].X),l.max.y=Math.max(l.max.y,M.m_polygon[0].Y);let m=M.m_polygon;p.moveTo(m[0].X/Ae,m[0].Y/Ae),m.slice(1).forEach(y=>p.lineTo(y.X/Ae,y.Y/Ae)),p.lineTo(m[0].X/Ae,m[0].Y/Ae),p.holes=M.m_Childs.map(y=>{let v=new _r,x=y.m_polygon;return v.moveTo(x[0].X/Ae,x[0].Y/Ae),x.slice(1).forEach(S=>v.lineTo(S.X/Ae,S.Y/Ae)),v.lineTo(x[0].X/Ae,x[0].Y/Ae),v}),g.push(new Nr(p,c))}let b=ze(g);return b.translate(0,0,a||0),b.userData={style:{color:i,opacity:s}},u.Clear(),b}function sm(n){let e=n[1],t=n[6],{opacity:r}=e??{},{texture:o,topTexture:i}=t??{};return`${r}${o?.path||""}${i?.path||""}`}var Yo=class extends Z{state;convertTo3DMapPosition;constructor(e,t){super(),this.state=e,this.convertTo3DMapPosition=t}createEntityFromFeature(e,t,r){let o=new oe(t),i=Array.isArray(t)?t[0]?.properties:t.properties,s=i?.bevel,a=r&&"bevel"in r?r.bevel:void 0,l;a?l={...s,...a}:s&&(l=s);let c=new $(o,new ut({...r,url:i?.image?.path,bevel:l}));if(r?.outline){let u=this.state.outlinesOptions?.darkenFactor;c.components[3]=new Hc(Zc(r.color,u))}return r?.focusable&&(c.components[4]=new Kc),i?.textures!=null&&Array.isArray(i.textures)&&i.textures.length>0?c.components[6]=new gr(i.textures.find(u=>u.face==="side"),i.textures.find(u=>u.face==="top")):(r!=null&&"texture"in r&&r.texture!=null||r!=null&&"topTexture"in r&&r.topTexture!=null)&&(c.components[6]=new gr(r.texture,r.topTexture)),c.id=Array.isArray(t)?e+"-merged":e,c}populateEntityMesh(e,t,r=!1){let o=e.components[0];o.geometry=t,r||(o.batchedProps={range:{start:0,count:1/0,indexCount:1/0,indexStart:0,vertexCount:1/0,vertexStart:0,reservedVertexCount:1/0,reservedIndexCount:1/0},geometryId:-1,positionCount:t.attributes.position.count}),o.currentHeight=e.components[1].height,e.components[1].initialHeight=e.components[1].height,o.dirty=!1}populateEntityGroup(e){let t,r,o;for(let i of e.values())if(o=this.state.geometry3DMap.get(i),o.components[0]instanceof oe){t=o.components[0].feature,r=o.components[1];try{if(Array.isArray(t)){let s=[];for(let l of t){let c=this.#e(l,r);c!=null&&s.push(c)}let a=ze(s);this.populateEntityMesh(o,a,!0),s.forEach(l=>l.dispose())}else{let s=this.#e(t,r);s!=null&&this.populateEntityMesh(o,s)}}catch(s){R.warn(`Failed to create mesh for entity ${i}:`,s)}}return e}#e(e,t){let r;return e.geometry.type==="Polygon"?(r=Zo(e,this.convertTo3DMapPosition,t),e.properties?.textures&&e.properties.textures.length>0&&Xc(r,e.properties.textures,this.state.naturalBearing,this.convertTo3DMapPosition)):e.geometry.type==="MultiPolygon"?r=Xo(e,this.convertTo3DMapPosition,t):e.geometry.type==="LineString"?r=Mu(e,this.convertTo3DMapPosition,t):e.geometry.type==="MultiLineString"&&(r=Ru(e,this.convertTo3DMapPosition,t)),r}update(){for(let e of this.state.geometryGroupIdsToLoad.values()){let t=this.state.geometry3DMap.get(e);if(t instanceof Ce&&t.userData.dirty&&!t.userData.modelURL){try{this.populateEntityGroup(t.userData.entities3D)}catch(i){R.warn(i)}let r,o={};if(t.userData.isMerged){let i=t.userData.entities3D.values().next().value;if(i&&(r=this.state.geometry3DMap.get(i),r?.type==="geometry")){let s=r.getComponent("geometry"),a=r.getComponent("style");if(s&&a){let l=new gc({color:a.color}),c=new Wt(s?.geometry,l);l.setColor(new k(a.color),new k(a.topColor??a.color)),c.renderOrder=ue.GEOMETRY,c.frustumCulled=!0,c.userData.entityId=r.id,c.layers.enable(Oe.SHOULD_CAST_SHADOWS),s.mesh=c,s.material=l,t.add(c)}}}else{for(let i of t.userData.entities3D.values()){r=this.state.geometry3DMap.get(i);let s=r?.components[0];if(r?.type==="geometry"){let a=sm(r.components);o[a]===void 0&&(o[a]={style:r.components[1],entities:[]}),o[a].entities.push(r)}else s&&"mesh"in s&&s.mesh&&s.mesh?.parent!==t&&t.add(s.mesh)}for(let i in o){let s=jc(o[i].entities,o[i].style);s.layers.enable(Oe.SHOULD_CAST_SHADOWS),t.add(s)}}for(let i of t.userData.entities3D.values())if(r=this.state.geometry3DMap.get(i),r!=null&&r.entities2D.size>0)for(let s of r.entities2D.values())s&&(r.attach(s),this.publish("geometry-2d-added"));this.publish("geometry-group-added"),t.userData.dirty=!1,t.userData.localCenter=void 0}}return Promise.resolve()}};f();var $o=new ce,_u=new O;function am(n,e){let t=n.components[2],r=n.components[1];return t?.hover?[r.hoverColor||e,r.hoverColor||e]:[r.color,r.topColor||r.color]}var qo=class{state;transparencyChanged=!1;convertTo3DMapPosition;convert3DMapPositionToCoordinate;constructor(e,t,r){this.convertTo3DMapPosition=t,this.convert3DMapPositionToCoordinate=r,this.state=e}determineTextureVisiblity(e,t,r){let o=bn(e);(o?.texture!=null||o?.topTexture!=null)&&(r?.hover&&o.texturesVisible?o.hideTextures(e.instanceIndex):o.texturesVisible||o.showTextures(e.instanceIndex),t.texture==null&&o.removeSideTexture(e.instanceIndex),t.topTexture==null&&o.removeTopTexture(e.instanceIndex))}update(){let e,t;for(let r of this.state.geometry3DsInScene)if((r.type==="geometry"||r.type==="custom-geometry")&&(r.components[1]?.dirty||r.components[2]?.dirty)){let o=r.components[0],i=r.components[1];t=r.components[2];let s=am(r,this.state.hoverColor);o.setColor(s[0],s[1]);let a=bn(o);if(i.visible!==o.visible&&(o.visible=i.visible,o instanceof oe&&o.textMesh)){let c=this.state.geometry3DMap.get(o.textMesh.userData.entityId);c?.type==="text3d"&&c.components[0].polygonEntityId!=null&&(c.components[0].visible=i.visible)}i.altitude!==o.altitude&&(o.altitude=i.altitude);let l=i.opacity*zr(r);if(a&&o.mesh&&o.type==="geometry"&&l!==o.opacity){if(a.opacity=l,a.transparent=l<1,o.imageMesh){let c=Array.isArray(o.imageMesh.material)?o.imageMesh.material:[o.imageMesh.material];for(let u of c)u.opacity=l}l===0?(o.mesh.layers.disable(Oe.SHOULD_CAST_SHADOWS),this.transparencyChanged=!0):o.opacity===0&&l!==0&&(o.mesh.layers.enable(Oe.SHOULD_CAST_SHADOWS),this.transparencyChanged=!0),o.opacity=l}if(i.renderOrder!==o.renderOrder&&(o.renderOrder=i.renderOrder),a&&Wc(a,i.side,l),a&&(a.setEffectRange(i.effectStart,i.effectDistance),a.setVisualEffect(i.darkenAmount,i.darkenUseDepth,i.desaturateAmount,i.desaturateUseDepth,i.washOutAmount,i.washOutUseDepth)),o instanceof oe&&i.shading!=null&&(i.shading?.start!==a?.getGradientShading().start||i.shading?.end!==a?.getGradientShading().end||i.shading?.intensity!==a?.getGradientShading().intensity)&&a?.setGradientShading(i.shading?.start??0,i.shading?.end??0,i.shading?.intensity??0),i.dirty=!1,o instanceof oe){let c=r.components[6];c instanceof gr&&this.determineTextureVisiblity(o,c,t)}r.components[2]&&(r.components[2].dirty=!1)}else if(r?.type==="image"&&r.components[1]?.dirty){e=r.components[0];let o=r.components[1];o.visible!==e.visible&&(e.visible=o.visible),o.dirty=!1}else if(r?.type==="text3d"&&r.components[1]?.dirty){e=r.components[0];let o=r.components[1],i=e.polygonEntityId!=null;o.visible!=null&&o.visible!==e.visible&&(e.visible=o.visible);let{textMesh:s}=e;if(s)if(Object.assign(s,o.getState()),i){let a=o.hoverColor??this.state.text3dHoverColor;s.color=o.hoverByPolygon?a:o.color??Ct.color,s.outlineColor=o.hoverByPolygon?a:o.outlineColor??Ct.outlineColor,s.strokeColor=o.hoverByPolygon?a:o.strokeColor??Ct.strokeColor}else s.color=o.color??Ct.color,s.outlineColor=o.outlineColor??Ct.outlineColor,s.strokeColor=o.strokeColor??Ct.strokeColor;o.dirty=!1}else if(r?.type==="feature-collection"&&r?.userData.dirty===!1&&r?.userData.positionDirty){let o=r;if(o.userData.localCenter||($o.makeEmpty(),$o.setFromObject(o),Gr($o)&&($o.getCenter(_u),o.userData.localCenter=_u.clone())),!o.userData.centroid&&o.userData.localCenter){let i=this.convert3DMapPositionToCoordinate(o.userData.localCenter);o.userData.centroid=[i[0],i[1]]}if(o.userData.centroid&&o.userData.localCenter){let i=this.convertTo3DMapPosition(o.userData.centroid);o.position.x+=i.x-o.userData.localCenter.x,o.position.y+=i.y-o.userData.localCenter.y,o.userData.localCenter.set(i.x,i.y,o.userData.localCenter.z),o.userData.positionDirty=!1}}}endFrame=()=>{this.transparencyChanged=!1}};f();var Jo=class extends Z{state;renderer;mode;scene;cameraObject;viewCamera;systems;constructor(e,t,r,o,i,s,a){super(),this.renderer=e,this.state=t,this.mode=r,this.scene=o,this.cameraObject=i,this.viewCamera=s,this.systems=a,this.systems.cameraSystem.on("pan-start",()=>this.systems.twoDEntitySystem.collidersNeedRecomputing=!1,{signal:this.signal}),this.systems.cameraSystem.on("zoom-start",()=>this.systems.twoDEntitySystem.collidersNeedRecomputing=!1,{signal:this.signal}),this.systems.cameraSystem.on("zoom-end",()=>this.systems.twoDEntitySystem.collidersNeedRecomputing=!0,{signal:this.signal}),this.systems.cameraSystem.on("rotate-start",()=>this.systems.twoDEntitySystem.collidersNeedRecomputing=!1,{signal:this.signal}),this.systems.cameraSystem.on("rotate-end",()=>this.systems.twoDEntitySystem.collidersNeedRecomputing=!0,{signal:this.signal})}twoDdirty=!0;threeDdirty=!0;frameId=null;update=(e=!1)=>{if(this.renderer?.renderer==null)return Promise.resolve();if(e){this.renderer.startFrame();let t=this.commitRenderState();return this.paint(),t}else return this.frameId?Promise.resolve():new Promise((t,r)=>{this.frameId=requestAnimationFrame(()=>this.renderer?.renderer==null?t():this.mode==="standalone"?(this.renderer.startFrame(),this.commitRenderState()?.then(()=>{this.paint(),t()}).catch(o=>{r(o)})):t())})};paint(){if(!this.renderer?.renderer)return;this.mode==="standalone"&&this.renderer.clear();let e=!this.state.useStandaloneCamera&&this.mode!=="standalone";e&&(this.viewCamera.matrixWorld.copy(this.cameraObject.matrixWorld),this.viewCamera.matrixWorldInverse.copy(this.cameraObject.matrixWorldInverse),this.viewCamera.projectionMatrix.multiply(this.cameraObject.matrixWorld)),this.renderer.renderFullScene(this.scene,e?this.viewCamera:this.cameraObject),e&&(this.viewCamera.projectionMatrix.multiply(this.cameraObject.matrixWorldInverse),this.viewCamera.matrixWorldInverse.identity())}commitRenderState=()=>{try{let e=[];this.frameId=null,this.publish("pre-render"),this.state.internalTweenGroup.update(),this.state.externalTweenGroup.update(),(this.mode==="outdoors-interleaved"||this.mode==="standalone")&&this.systems.cameraSystem.update(),this.state.shouldMeasureCanvas&&(this.state.shouldMeasureCanvas=!1,this.publish("measure-canvas")),this.twoDdirty&&(this.state.geometry2DIdsInScene.clear(),this.state.geometry2DsInScene.clear(),_c(this.state.geometryScene,this.state.geometry2DMap,this.state.geometry2DIdsInScene,this.state.geometry2DsInScene),this.systems.twoDEntitySystem.syncTwoDEntities(),this.systems.twoDEntitySystem.markDirty(),this.twoDdirty=!1),this.threeDdirty&&(this.state.geometry3DIdsInScene.clear(),this.state.geometry3DsInScene.clear(),this.state.geometryGroupIdsToLoad.clear(),Rc(this.state.geometryScene,this.state.geometry3DMap,this.state.geometry3DIdsInScene,this.state.geometry3DsInScene,this.state.geometryGroupIdsToLoad),this.systems.interactionSystem.dirty3D=!0,this.systems.outlineInterpolationSystem.geometries3DDirty=!0,this.systems.geometryInFocusSystem.focusablesDirty=!0,this.systems.shadowsSystem&&(this.systems.shadowsSystem.needsRender=!0),this.threeDdirty=!1);let t=this.systems.batchedMeshSystem.update();t&&e.push(t);let r=this.systems.modelSystem.update();return r&&e.push(r),this.systems.borderSystem.update(),this.systems.meshDetachmentSystem.update(),this.systems.meshModificationSystem.update(),this.systems.renderOrderSystem.update(),this.systems.clippingPlaneSystem.update(),this.systems.imageSystem.update(this.systems.cameraSystem.getRotation(),this.systems.cameraSystem.isCameraMoving(),this.systems.cameraSystem.lastCameraStoppedMovingTime()),e.push(this.systems.text3DSystem.update(this.systems.cameraSystem.getRotation())),this.systems.customGeometrySystem.update(),this.systems.panBoundsSystem.update(),this.systems.geometryInFocusSystem.update(this.systems.cameraSystem.isCameraMoving(),this.systems.cameraSystem.lastCameraStoppedMovingTime()),this.systems.outlineInterpolationSystem.update(this.systems.cameraSystem.getZoomLevel(),this.systems.cameraSystem.zoomDirty),this.systems.pathSystem.update(this.systems.cameraSystem.minZoomAltitude,this.systems.cameraSystem.maxZoomAltitude,this.systems.cameraSystem.getZoomAltitude(),this.systems.cameraSystem.getCurrentMetersPerPixel()),this.systems.cameraSystem.postRender(),this.systems.occlusion2DSystem.update(),this.systems.watermarkSystem.insertIntoQuadTree(this.systems.twoDEntitySystem.interactiveCollidersQTree),this.systems.interactionSystem.updateQuadtree(this.systems.twoDEntitySystem.interactiveCollidersQTree),this.systems.twoDEntitySystem.updateWatermark({width:this.systems.watermarkSystem.width,height:this.systems.watermarkSystem.height,position:this.systems.watermarkSystem.options.position}),this.systems.twoDEntitySystem.update(this.systems.cameraSystem.getZoomLevel(),this.systems.cameraSystem.isUserInteracting(),this.systems.cameraSystem.isCameraMoving(),this.systems.imageSystem.currentImageScreenBBoxes),this.systems.watermarkSystem.update(),this.systems.textureSystem.update(),this.systems.pluginSystem.update(this.state),this.systems.drawSystem.update(),this.systems.geometryDisposalSystem.update(),this.systems.maskingSystem.update(),this.systems.cameraSystem.dirty=!1,this.systems.cameraSystem.zoomDirty=!1,this.systems.cameraSystem.rotationDirty=!1,this.systems.shadowsSystem&&((this.systems.modelSystem.transparencyChanged||this.systems.drawSystem.transparencyChanged)&&(this.systems.shadowsSystem.needsRender=!0),this.systems.shadowsSystem.update(this.systems.cameraSystem.getZoomLevel(),this.systems.cameraSystem.getPedestal())),this.systems.modelSystem.endFrame(),this.systems.drawSystem.endFrame(),this.systems.cameraSystem.stateDirty&&(this.publish("camera-state-change"),this.systems.cameraSystem.stateDirty=!1),this.publish("post-render"),Promise.all(e)}catch(e){return Promise.reject(e)}};destroy(){this.frameId&&cancelAnimationFrame(this.frameId),this.systems.twoDEntitySystem.cancelPendingFrames(),this.state.geometry2DIdsInScene.clear(),this.state.geometry3DIdsInScene.clear(),this.systems.twoDEntitySystem.markDirty(),this.update(),super.destroy()}};f();f();f();f();f();import{z as F}from"zod";f();import{z as Ko}from"zod";var Hr=Ko.object({type:Ko.enum(["Point"]),coordinates:Ko.array(Ko.number()).min(2).max(3)});var lm=F.object({interactive:F.boolean().optional(),id:F.string().optional(),width:F.union([F.number(),F.string().regex(yo),F.object({on:F.literal("zoom-level").optional(),input:F.array(F.number()).nonempty(),output:F.union([F.array(F.number()).nonempty(),F.array(F.string().regex(yo)).nonempty()]),easing:F.string().optional()})]).optional(),accentColor:F.string().optional(),displayArrowsOnPath:F.boolean().optional(),animateArrowsOnPath:F.boolean().optional(),visibleThroughGeometry:F.boolean().optional(),dashed:F.boolean().optional(),travelledEndFraction:F.number().optional(),travelledColor:F.string().optional(),smoothingTension:F.number().optional(),smoothingCornerRadius:F.number().optional(),dashLength:F.number().optional(),dashGap:F.number().optional(),dashRelativeToWidth:F.boolean().optional(),dashSize:F.number().optional(),gapSize:F.number().optional(),dashAbsolute:F.boolean().optional(),dashMeters:F.number().optional(),gapMeters:F.number().optional(),__EXPERIMENTAL_GEOMETRY:F.enum(["tube","ribbon"]).optional(),__EXPERIMENTAL_ENDCAP_EXTENSION:F.tuple([F.number(),F.number()]).optional(),__EXPERIMENTAL_BILLBOARDING:F.union([F.boolean(),F.number().min(0).max(90)]).optional(),__EXPERIMENTAL_BORDER:F.object({enabled:F.boolean(),color:F.string(),width:F.number().optional()}).optional(),__EXPERIMENTAL_PREVENT_SELF_OVERLAP:F.boolean().optional(),xrayStyle:F.object({color:F.string().optional(),tint:F.number().min(0).max(1).optional(),dithering:F.number().min(0).optional()}).optional()}),cm=F.object({type:F.enum(["Feature"]),geometry:Hr,properties:F.object({parentId:F.any().optional()})});function Fu(n,e){F.object({features:F.array(cm)}).parse(n),lm.parse(e)}function um(n,e){let t=As(n);t&&e==="tube"&&(R.warn("Screen-space pixel width is only supported with ribbon geometry. Falling back to world-space interpretation."),t=!1);let r;return typeof n=="object"&&"output"in n?r=n.output.map(o=>typeof o=="string"?Rt(o):Number(o)):lr(n)?r=[Rt(n)]:r=[n],{screenSpace:t,parsedOutputValues:r}}var br=class{type="path";mesh=new He;material;geometry;outline;feature;options;width={on:"zoom-level",input:[17,22],output:[.8,.4]};breakpoint=0;screenSpace=!1;parsedOutputValues=[];altitudeBreakpoints;accentColor="blue";completeFraction=1;altitudeAdjustment=1;displayArrowsOnPath=!1;animateArrowsOnPath=!1;visibleThroughGeometry=!1;highlightStartFraction=0;highlightEndFraction=0;highlightCompleteFraction=1;highlightWidthMultiplier=1.1;highlightColor="red";highlightDisplayArrowsOnPath=!1;xrayOpacity=.25;xrayStyle;travelledEndFraction=0;travelledColor="#999";dashed=!1;smoothingTension=Mt.tension;smoothingCornerRadius=Mt.cornerRadius;dashLength=.1;dashGap=.1;dashRelativeToWidth=!1;dashSize=3;gapSize=2;dashAbsolute=!1;dashMeters=1;gapMeters=.5;__EXPERIMENTAL_GEOMETRY="tube";__EXPERIMENTAL_ENDCAP_EXTENSION=[.5,.5];__EXPERIMENTAL_BILLBOARDING=80;__EXPERIMENTAL_BORDER;__EXPERIMENTAL_PREVENT_SELF_OVERLAP=!1;isVertical=!1;dirty=!0;materialDirty=!0;constructor(e,t){this.feature=e,this.options=t||{},this.width=t?.width??this.width,this.accentColor=t?.accentColor??this.accentColor,this.displayArrowsOnPath=t?.displayArrowsOnPath??this.displayArrowsOnPath,this.animateArrowsOnPath=t?.animateArrowsOnPath??this.animateArrowsOnPath,this.highlightDisplayArrowsOnPath=t?.highlightDisplayArrowsOnPath??this.displayArrowsOnPath,this.visibleThroughGeometry=t?.visibleThroughGeometry??this.visibleThroughGeometry,this.dashed=t?.dashed??this.dashed,this.xrayOpacity=t?.xrayOpacity??this.xrayOpacity,this.xrayStyle=t?.xrayStyle,this.travelledEndFraction=t?.travelledEndFraction??this.travelledEndFraction,this.travelledColor=t?.travelledColor??this.travelledColor,this.smoothingTension=t?.smoothingTension??Mt.tension,this.smoothingCornerRadius=t?.smoothingCornerRadius??Mt.cornerRadius,this.dashLength=t?.dashLength??this.dashLength,this.dashGap=t?.dashGap??this.dashGap,this.dashRelativeToWidth=t?.dashRelativeToWidth??this.dashRelativeToWidth,this.dashSize=t?.dashSize??this.dashSize,this.gapSize=t?.gapSize??this.gapSize,this.dashAbsolute=t?.dashAbsolute??this.dashAbsolute,this.dashMeters=t?.dashMeters??this.dashMeters,this.gapMeters=t?.gapMeters??this.gapMeters,this.__EXPERIMENTAL_GEOMETRY=t?.__EXPERIMENTAL_GEOMETRY??"tube",this.__EXPERIMENTAL_ENDCAP_EXTENSION=t?.__EXPERIMENTAL_ENDCAP_EXTENSION??[.5,.5],this.__EXPERIMENTAL_BILLBOARDING=t?.__EXPERIMENTAL_BILLBOARDING??80,this.__EXPERIMENTAL_BORDER=t?.__EXPERIMENTAL_BORDER,this.__EXPERIMENTAL_PREVENT_SELF_OVERLAP=t?.__EXPERIMENTAL_PREVENT_SELF_OVERLAP??!1,this.updateScreenSpaceState()}updateScreenSpaceState(){let e=um(this.width,this.__EXPERIMENTAL_GEOMETRY);this.screenSpace=e.screenSpace,this.parsedOutputValues=e.parsedOutputValues}setColor(){}setOpacity(){}set visible(e){this.mesh&&(this.mesh.visible=e)}get visible(){return this.mesh?this.mesh.visible:!1}position=new O;#e=0;get altitude(){return this.#e}set altitude(e){this.mesh&&(this.mesh.position.z=e,this.#e=e)}set complete(e){this.material&&(this.material.uniforms.complete.value=e,this.material.needsUpdate=!0)}};f();f();f();function Vr(n,e,t){return n.type==="portion"?{top:n.top*t,left:n.left*e,bottom:n.bottom*t,right:n.right*e,type:"pixel"}:n}f();f();f();var Nu=(n,e)=>(e-n+Math.PI)%(Math.PI*2)+Math.PI*2%(Math.PI*2)-Math.PI,Bu=(n,e)=>new V(n.clientX-e.offsetLeft,n.clientY-e.offsetTop),sa=(n,e)=>Math.atan2(e.y-n.y,e.x-n.x),Tn=(n,e)=>Math.sqrt((e.y-n.y)**2+(e.x-n.x)**2),aa=(n,e)=>new V((n.x+e.x)/2,(n.y+e.y)/2),la=n=>{let e=0,{wheelDelta:t,detail:r}=n;return t!==void 0?e=t:r!==void 0&&(e=-r),e};var Qo=class{input1;input2;lastAngle;lastDistance;totalDistance;first;second;constructor(e,t){this.input1=e,this.input2=t,this.lastAngle=sa(e,t),this.lastDistance=Tn(e,t),this.totalDistance=0,this.first=e,this.second=t}update(e,t){let r=Tn(e,t);this.input1=e,this.input2=t;let o=sa(e,t);this.lastAngle=o,this.lastDistance=r,this.totalDistance+=(Tn(this.first,e)+Tn(this.second,t))/2,this.first=aa(this.first,e),this.second=aa(this.second,t)}};f();var Dn=class{touch;camera;cameraPlane;viewCoordinate;snapHolderMatrix;snapCamera;cameraPosition;raycaster;worldCoordinate;snapshotted=!1;constructor(e,t,r){this.touch=e,this.camera=t,this.cameraPlane=r,this.viewCoordinate={x:e.x,y:e.y},this.camera.updateMatrixWorld(),this.camera.updateMatrix(),this.snapHolderMatrix=this.camera.matrixWorld.clone(),this.snapCamera=this.camera.clone(),this.snapshotCameraState()}snapshotCameraState(){this.camera.updateMatrix(),this.camera.updateMatrixWorld(),this.cameraPosition=this.camera.position.clone();let e=new V(this.viewCoordinate.x,this.viewCoordinate.y);this.raycaster=this.raycaster||new zt,this.raycaster.setFromCamera(e,this.snapCamera);let t=this.raycaster.intersectObject(this.cameraPlane,!0);this.worldCoordinate=t&&t.length>0?t[0].point:null,this.snapshotted=!0}updateAnchorState(e,t){this.camera=e,this.snapCamera=e.clone(),this.snapHolderMatrix=e.matrixWorld.clone(),this.updateViewCoordinate(t),this.snapshotCameraState()}updateViewCoordinate(e){this.viewCoordinate={x:e.x,y:e.y}}reUnproject(){let e=new V(this.viewCoordinate.x,this.viewCoordinate.y);this.raycaster?.setFromCamera(e,this.snapCamera);let t=this.raycaster?.intersectObject(this.cameraPlane,!0)[0];return t?t.point:void 0}};var rt={};Xp(rt,{BLOCK_MERCATOR_ZOOM_LEVEL:()=>hm,CLIPPING_RADIUS:()=>Pn,CONTROL_OPTIONS:()=>dm,DEFAULT_ANIMATION_DURATION:()=>pa,DEFAULT_BEARING:()=>ym,DEFAULT_MAX_ZOOM_LEVEL:()=>fm,DEFAULT_MIN_ZOOM_LEVEL:()=>fa,DEFAULT_PITCH:()=>gm,DEFAULT_ZOOM_LEVEL:()=>mm,EVENTS:()=>ma,MAPLIBRE_TILE_SIZE:()=>ei,MAX_LAT:()=>ua,MAX_MERCATOR_ZOOM_LEVEL:()=>ri,MIN_LAT:()=>ca,MIN_MERCATOR_ZOOM_LEVEL:()=>ti,ROOM_MERCATOR_ZOOM_LEVEL:()=>pm,TWO_PI:()=>da,WHEEL_ZOOM_MULTIPLIER:()=>ha,ZRANGE:()=>Wr});f();var ei=512,ca=-85.051129,ua=85.051129,Pn=1e4,dm={chain:"chain",cancel:"cancel"},da=Math.PI*2,Wr=100,ha=1e4,ti=0,ri=24,hm=17,pm=20,pa=200,ma=["change","pan-start","pan-end","rotate-start","rotate-end","zoom-start","zoom-end","multi-start","multi-end","multi-cancel","pedestal-start","pedestal-change","pedestal-end","user-pan-start","user-pedestal-start","user-rotate-start","user-dolly-start","user-zoom-start","user-tilt-start","user-pan-end","user-pedestal-end","user-rotate-end","user-dolly-end","user-zoom-end","user-tilt-end","position-updated","zoom-updated","tilt-updated","rotation-updated"],mm=18,fa=12,fm=22,gm=0,ym=0;f();f();var vr=class extends Error{};vr.prototype.name="InvalidTokenError";function bm(n){return decodeURIComponent(atob(n).replace(/(.)/g,(e,t)=>{let r=t.charCodeAt(0).toString(16).toUpperCase();return r.length<2&&(r="0"+r),"%"+r}))}function vm(n){let e=n.replace(/-/g,"+").replace(/_/g,"/");switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw new Error("base64 string is not of the correct length")}try{return bm(e)}catch{return atob(e)}}function Gu(n,e){if(typeof n!="string")throw new vr("Invalid token specified: must be a string");e||(e={});let t=e.header===!0?0:1,r=n.split(".")[t];if(typeof r!="string")throw new vr(`Invalid token specified: missing part #${t+1}`);let o;try{o=vm(r)}catch(i){throw new vr(`Invalid token specified: invalid base64 for part #${t+1} (${i.message})`)}try{return JSON.parse(o)}catch(i){throw new vr(`Invalid token specified: invalid json for part #${t+1} (${i.message})`)}}f();function Ve(n,e,t,r){return(n<e||n>t)&&R.warn(r),Math.min(t,Math.max(e,n))}function gS(n){let e=Gu(n);if(e.sub==null)throw new Error("Access token is missing sub claim.");return{sub:e.sub,aud:typeof e.aud=="string"?[e.aud]:e.aud??[],capabilities:e.capabilities??{}}}function Et(n){return n*(Math.PI/180)}function ku(n){return n*(180/Math.PI)}function ni(n,e){let t=Math.pow(10,e);return Math.sign(n)*Math.round(Math.abs(n)*t)/t}function zu(n,e){return(n%e+e)%e}function Uu(n,e){let t=zu(n,Math.PI*2),r=zu(e,Math.PI*2),o=r-t,i=r+(o>Math.PI?-Math.PI*2:o<-Math.PI?Math.PI*2:0);return{start:t,end:i}}function yS(){return typeof window<"u"&&window!==null}function Hu(n,e){let[t,r]=n,[o,i]=e,s=Et(o-t),a=Et(i-r);return Math.sqrt(s*s+a*a)*vt}function Ee(n,e){let[t,r]=n.map(u=>Et(u)),[o,i]=e.map(u=>Et(u)),s=i-r,l=(o-t)*Math.cos((r+i)/2),c=s;return Math.sqrt(l*l+c*c)*vt}function ga(n,e){return Math.sqrt(Math.pow(n.x-e.x,2)+Math.pow(n.y-e.y,2))}function oi(n){let e=Et(n),r=Math.cos(e)*vt;function o(s,a){let l=Et(s[0]),c=Et(s[1]),u=l*r,d=c*vt;return a?(a.x=u,a.y=d,a):{x:u,y:d}}return{toCartesian:o,toGeographic:(s,a)=>{let l=ku(s/r),c=ku(a/vt);return{lon:l,lat:c}}}}var bS=()=>{};var ii=!1,xm=!1;var jr=class extends Z{dirty=!1;zoomDirty=!1;rotationDirty=!1;panDirty=!1;stateDirty=!1;#e=fa;zoomSpeed=5;rotateSpeed=100;enabled=!0;enableZoom=!0;enablePan=!0;enablePedestal=!1;maxPedestal=1/0;minPedestal=0;enableRotate=!0;minZoomAltitude=0;maxZoomAltitude=1/0;get maxZoomLevel(){return this.convertAltitudeToZoomLevel(this.minZoomAltitude)}setMaxZoomLevel(e){this.minZoomAltitude=this.convertZoomLevelToAltitude(e),this.stateDirty=!0}get defaultMinZoomLevel(){return this.#e}get minZoomLevel(){return this.convertAltitudeToZoomLevel(this.maxZoomAltitude)}setMinZoomLevel(e){this.maxZoomAltitude=this.convertZoomLevelToAltitude(e),this.stateDirty=!0}ignoreZoomLimits=!1;zoomFactor=1;panBounds={min:new O(1/0,1/0),max:new O(-1/0,-1/0),center:new O(0,0,0),radius:1/0};minTilt=0;maxTilt=1.2;MOUSE_BUTTONS={ORBIT:bo.RIGHT,ZOOM:bo.MIDDLE,PAN:bo.LEFT};camera;scene;renderer;elevation;orbit;cameraPlane;raycaster=new zt;rendererState;options;state=-1;intersection;viewState=null;tweens=new Map;clock=new hc(!0);coords={mouse:new V,rotateStart:new V,rotateEnd:new V,rotateDelta:new V,panStart:new O,panCameraStart:new O,panEnd:new O,panDelta:new O,initialShiftPos:new V,initialPedestal:0,floorAnchor:new O};touch={origin:{offsetLeft:0,offsetTop:0},touches:[],anchor1:null,anchor2:null,inputs:null};scrollTimer=null;lastWheelTime=0;resetZoom=!1;zoomStart;pedestalScaleFactor=1;isUserZooming=!1;stayInsideBounds=!0;userInteracting=!1;cameraMoving=!1;lastCameraMoveTime=Date.now();constructor(e,t,r,o,i){super(),this.camera=e,this.renderer=r,this.rendererState=o,this.scene=t,this.options=i,this.elevation=e.parent,this.orbit=this.elevation.parent,this.cameraPlane=this.createCameraPlane(),this.zoomStart=e.position.z,i.mode==="outdoors-overlay"?this.addMovingStateListeners():this.addEventListeners()}addMovingStateListeners=()=>{for(let e of ma)e.endsWith("start")?(this.on(e,this.setCameraMoving),e.startsWith("user")&&this.on(e,this.setUserInteracting)):(e.endsWith("end")||e.endsWith("cancel"))&&(this.on(e,this.unsetCameraMoving),e.startsWith("user")&&this.on(e,this.unsetUserInteracting))};get scrollPercent(){let e=this.minPedestal,t=this.maxPedestal,r=this.getPedestal();return r=Math.min(r,t),r=Math.max(r,e),(r-e)/(t-e)*100}get fov(){return this.camera.fov}get scrolledToBottom(){return this.minPedestal===0||Math.floor(this.getPedestal())<=this.minPedestal}get scrolledToTop(){return this.maxPedestal===0||Math.ceil(this.getPedestal())>=this.maxPedestal}get center(){let e=this.getPosition(),{lat:t,lon:r}=Oo(this.rendererState.center?.[1]??0,this.rendererState.center?.[0]??0,e.x,e.y);return[r,t]}setCenter(e,t){let{x:r,y:o}=Lo(this.rendererState.center?.[1]??0,this.rendererState.center?.[0]??0,t,e);this.setPosition(r,o)}raycastToFloor=e=>{this.raycaster.setFromCamera(e,this.camera);let t=this.raycaster.intersectObject(this.cameraPlane,!1)[0];return t?t.point:new O};isUserInteracting=()=>this.userInteracting;getPosition=()=>new O(this.orbit.position.x,this.orbit.position.y,this.orbit.position.z);getPedestal=()=>this.orbit.position.z;pan=(e,t)=>{isNaN(e)||isNaN(t)||(this.setPosition(this.orbit.position.x+e,this.orbit.position.y+t),this.publish("position-updated"))};postRender=()=>{(this.state===2||this.state===6)&&(this.raycaster.setFromCamera(this.coords.mouse,this.camera),this.intersection=this.raycaster.intersectObject(this.cameraPlane,!1)[0],this.intersection&&(this.coords.panStart.set(this.intersection.point.x,this.intersection.point.y,0),this.coords.panCameraStart.set(this.orbit.position.x,this.orbit.position.y,0))),this.state===3&&this.resetZoom&&(this.resetZoom=!1,this.zoomStart=this.getZoomAltitude(),this.coords.floorAnchor=this.raycastToFloor(this.coords.mouse),this.coords.panCameraStart.set(this.orbit.position.x,this.orbit.position.y,0)),this.state===7&&this.isAnimating===!1&&(this.state=-1,this.publish("multi-end"))};get isAnimating(){return this.rendererState.internalTweenGroup.getAll().some(e=>e.cameraAnimation)}isCameraMoving=()=>this.cameraMoving;lastCameraStoppedMovingTime=()=>this.lastCameraMoveTime;beginGesture=()=>{this.state=2,this.publish("pan-start")};endGesture=()=>{this.state===2&&(this.state=-1,this.publish("pan-end"))};setPosition=(e,t)=>{e===void 0||t===void 0||isNaN(e)||isNaN(t)||(this.state===-1&&this.publish("pan-start"),this.updateCameraPosition(e,t),this.publish("position-updated"),this.publish("change"),this.state===-1&&this.publish("pan-end"),this.dirty=!0,this.stateDirty=!0)};updateCameraPosition=(e,t)=>{let r=e-this.panBounds.center.x,o=t-this.panBounds.center.y,i=Math.sqrt(r*r+o*o);if(this.stayInsideBounds&&i>this.panBounds.radius){let s=Math.atan2(o,r),a={x:Math.cos(s)*this.panBounds.radius+this.panBounds.center.x,y:Math.sin(s)*this.panBounds.radius+this.panBounds.center.y};this.orbit.position.x=a.x,this.orbit.position.y=a.y}else this.orbit.position.x=e,this.orbit.position.y=t};tilt=e=>{if(isNaN(e))return;this.state===-1&&this.publish("rotate-start");let t=this.stayInsideBounds?Math.max(Math.min(e+this.getTilt(),this.maxTilt),this.minTilt):e+this.getTilt();t!==this.elevation.rotation.x&&(this.elevation.rotation.x=t,this.publish("tilt-updated")),this.publish("change"),this.state===-1&&this.publish("rotate-end"),this.stateDirty=!0};zoomIn=(e,t,r)=>{let o=this.getZoomAltitude();this.animateCamera({zoom:o/1.5},e,t,r)};zoomOut=(e,t,r)=>{let o=this.getZoomAltitude();this.animateCamera({zoom:o*1.5},e,t,r)};getRotation=()=>(-this.orbit.rotation.z+Math.PI*2)%(Math.PI*2);cancelAnimation=()=>{let e=Array.from(this.tweens.keys());if(e.length<1)return;let t=e[e.length-1];t.state===7&&this.publish("multi-cancel",{zooming:!0,rotating:!0,tilting:!0}),t.isPlaying()&&this.tweens.get(t)?.cancelledCallback?.(),this.completeTween(t),this.state===7&&(this.state=-1)};animateCamera=(e,t,r,o,i,s)=>{let a={interruptible:!0,...s},l={},c={},u=this.getPosition();if(e.position!=null&&(e.position.x!==void 0&&(l.x=u.x,c.x=e.position.x),e.position.y!==void 0&&(l.y=u.y,c.y=e.position.y),e.position.z!==void 0&&(l.z=u.z,c.z=e.position.z)),e.zoom!==void 0&&(l.zoom=this.stayInsideBounds?Math.min(Math.max(this.getZoomAltitude(),this.getZoomScaledMin()),this.getZoomScaledMax()):this.getZoomAltitude(),this.viewState==="multi_floor"||!this.stayInsideBounds?c.zoom=e.zoom:c.zoom=Math.min(Math.max(e.zoom,this.getZoomScaledMin()),this.getZoomScaledMax())),e.rotation!==void 0){let{start:y,end:v}=Uu(this.getRotation(),e.rotation);l.rotation=y,c.rotation=v}e.tilt!==void 0&&(l.tilt=this.getTilt(),this.viewState==="multi_floor"||!this.stayInsideBounds?c.tilt=e.tilt:c.tilt=Math.max(Math.min(e.tilt,this.maxTilt),this.minTilt));let d=l.zoom!==c.zoom,h=l.rotation!==c.rotation,g=l.tilt!==c.tilt,b=new Vl(l).to(c,w.env.TESTING?0:t).onUpdate(y=>{this.setMulti({x:y.x,y:y.y,z:y.z},y.zoom,y.rotation,y.tilt)}).onComplete(()=>{this.completeTween(b),this.publish("multi-end",{zooming:d,rotating:h,tilting:g}),o&&o()}).onStart(()=>{this.state!==7&&(this.state=7,b.state=7,this.publish("multi-start",{zooming:d,rotating:h,tilting:g})),this.publish("change")});this.rendererState.internalTweenGroup.add(b);let M=Array.from(this.tweens.entries()),p=M[M.length-1],m=!1;return p!=null&&(p[1].interruptible?(typeof p[1].cancelledCallback=="function"&&p[1].cancelledCallback(),this.completeTween(p[0])):(m=!0,p[0].chain(b))),this.tweens.set(b,{cancelledCallback:i,interruptible:a.interruptible}),r?b.easing(r):b.easing(cr.Quadratic.In),!e.doNotAutoStart&&!m&&(b.start(),this.publish("change")),b.cameraAnimation=!0,b};setMulti=(e,t,r,o,i=!0)=>{this.state===-1&&this.publish("multi-start");let s=!1;e!=null&&(e.x!==void 0&&!isNaN(e.x)&&e.y!==void 0&&!isNaN(e.y)&&(this.updateCameraPosition(e.x,e.y),s=!0),e.z!==void 0&&!isNaN(e.z)&&(this.setPedestal(e.z,!0,!1),s=!0)),s&&this.publish("position-updated");let a={zooming:!1,tilting:!!t,rotating:!1};if(t!==void 0&&!isNaN(t)){let l=this.stayInsideBounds?Math.min(Math.max(t,this.getZoomScaledMin()),this.getZoomScaledMax()):t;l!==this.camera.position.z&&(a.zooming=!0,this.camera.position.z=l,this.publish("zoom-updated"),this.zoomDirty=!0,this.viewState==="multi_floor"?t>Pn&&(this.camera.near=t-Pn,this.camera.far=t+Pn):(this.camera.near=t/Wr,this.camera.far=t*Wr),this.camera.updateProjectionMatrix())}if(r!==void 0&&!isNaN(r)&&r!==this.getRotation()&&(a.rotating=!0,this.orbit.rotation.z=-r,this.publish("rotation-updated")),o!==void 0&&!isNaN(o)){let l=this.stayInsideBounds?Math.max(Math.min(o,this.maxTilt),this.minTilt):o;l!==this.elevation.rotation.x&&(a.tilting=!0,this.elevation.rotation.x=l,this.publish("tilt-updated"))}i&&this.publish("change"),this.state===-1&&this.publish("multi-end",a),this.stateDirty=!0};getZoomScaledMin=()=>this.minZoomAltitude*this.zoomFactor;getZoomScaledMax=()=>{let e=this.minZoomAltitude*this.zoomFactor;return Math.max(this.maxZoomAltitude,e)};setRotation=(e,t)=>{if(isNaN(e))return;this.state===-1&&!t&&this.publish("rotate-start");let r=-(e%da);r!==this.orbit.rotation.z&&(this.orbit.rotation.z=r,t||this.publish("rotation-updated")),t||this.publish("change"),this.state===-1&&!t&&this.publish("rotate-end"),this.dirty=!0,this.rotationDirty=!0,t||(this.stateDirty=!0)};setZoomAltitude=e=>{if(isNaN(e))return;this.state===-1&&this.publish("zoom-start");let t=this.stayInsideBounds?Math.min(Math.max(e,this.getZoomScaledMin()),this.getZoomScaledMax()):e;t!==this.camera.position.z&&(this.camera.position.z=t,this.publish("zoom-updated"),this.zoomDirty=!0),this.camera.near=t/Wr,this.camera.far=t*Wr,this.camera.updateProjectionMatrix(),this.publish("change"),this.state===-1&&this.publish("zoom-end"),this.dirty=!0,this.stateDirty=!0};setZoomLevel=e=>{this.setZoomAltitude(this.convertZoomLevelToAltitude(e))};getZoomAltitude=()=>this.camera.position.z;getZoomLevel=()=>this.convertAltitudeToZoomLevel(this.getZoomAltitude());setTilt=(e,t)=>{if(isNaN(e))return;this.state===-1&&!t&&this.publish("rotate-start");let r=this.stayInsideBounds?Math.max(Math.min(e,this.maxTilt),this.minTilt):e;r!==this.elevation.rotation.x&&(this.elevation.rotation.x=r,t||this.publish("tilt-updated")),t||this.publish("change"),this.state===-1&&!t&&this.publish("rotate-end"),this.dirty=!0,t||(this.stateDirty=!0)};getTilt=()=>this.elevation.rotation.x;setCameraPlaneElevation=e=>{this.cameraPlane.position.z=e};zoom=e=>{if(isNaN(e))return;this.state===-1&&this.publish("zoom-start");let t=this.getZoomAltitude()-e;this.camera.position.z=this.stayInsideBounds?Math.min(Math.max(t,this.minZoomAltitude*this.zoomFactor),this.maxZoomAltitude*this.zoomFactor):t,this.publish("zoom-updated"),this.zoomDirty=!0,this.publish("change"),this.state===-1&&this.publish("zoom-end"),this.stateDirty=!0};getProjectionScaleFactor=(e,t,r)=>Us(e,t,r);update=()=>{this.orbit.updateMatrixWorld(),this.lastWheelTime>0&&this.state===3&&this.clock.getElapsedTime()-this.lastWheelTime>.2&&(this.lastWheelTime=0,this.state=-1,this.publish("zoom-end"),this.removeMouseMoveEventListeners())};setPedestal=(e,t=!1,r=!0)=>{typeof e=="number"&&!isNaN(e)&&(this.orbit.position.z=e,t&&(this.publishPedestalChangeEvent(e),this.publish("pedestal-change",{pedestal:e})),this.publish("change"),this.dirty=!0,r&&(this.stateDirty=!0))};dispose=()=>{this.scene.remove(this.cameraPlane),this.destroy()};createCameraPlane=()=>{let e=ii?2e3:1e10,t=ii?100:1,r=new Ie(e,e,t,t),o=new Me({color:0,wireframe:ii,visible:ii}),i=new W(r,o);return this.scene.add(i),i};addEventListeners=()=>{let{domElement:e}=this.renderer;this.addMovingStateListeners(),e.addEventListener("contextmenu",this.onContextMenu,{capture:!1,signal:this.signal}),e.addEventListener("mousedown",this.onMouseDown,{capture:!1,signal:this.signal}),e.addEventListener("wheel",this.onMouseWheel,{capture:!1,passive:!1,signal:this.signal}),e.addEventListener("touchstart",this.onTouchStart,{capture:!1,signal:this.signal}),e.addEventListener("touchend",this.onTouchEnd,{capture:!1,signal:this.signal}),e.addEventListener("touchmove",this.onTouchMove,{capture:!1,signal:this.signal})};addMouseEventListeners=()=>{this.addMouseMoveEventListeners(),window.addEventListener("mouseup",this.onMouseUp,{capture:!1,signal:this.signal}),window.addEventListener("mouseout",this.onWindowMouseOut,{capture:!1,signal:this.signal})};onWindowMouseOut=e=>{e.relatedTarget==null&&this.onMouseUp()};addMouseMoveEventListeners=()=>{window.addEventListener("mousemove",this.onMouseMove,{capture:!0,signal:this.signal})};removeMouseMoveEventListeners=()=>{window.removeEventListener("mousemove",this.onMouseMove,{capture:!0})};removeMouseUpEventListeners=()=>{this.removeMouseMoveEventListeners(),window.removeEventListener("mouseup",this.onMouseUp,{capture:!1}),window.removeEventListener("mouseout",this.onWindowMouseOut,{capture:!1})};onContextMenu=e=>{e.preventDefault()};onMouseUp=()=>{if(this.enabled!==!1){switch(this.removeMouseUpEventListeners(),this.state){case 2:this.publish("pan-end"),this.publish("user-pan-end");break;case 1:this.publish("zoom-end"),this.publish("user-dolly-end");break;case 0:this.publish("rotate-end"),this.publish("user-rotate-end");break;case 8:this.publish("pedestal-end"),this.publish("user-pedestal-end");break}this.state=-1,this.panDirty=!1}};onMouseMove=e=>{if(this.enabled!==!1)if(e.preventDefault(),this.mouseToScene(e),this.state===0){if(this.enableRotate===!1)return;this.handleMouseMoveRotate(e)}else if(this.state===2){if(this.enablePan===!1)return;this.handleMouseMovePan()}else this.state===3?(this.resetZoom=!0,this.state=-1):this.state===8&&this.handleMouseMovePedestal(e)};onTouchStart=e=>{if(this.enabled!==!1){switch(this.updateTouchOrigin(),this.touchToScene(e),e.touches.length){case 1:this.enablePedestal?(this.handleTouchStartPedestal(e),this.state=9):this.enablePan&&(this.handleTouchStartPan(e),this.state=6);break;case 2:this.touch.inputs=new Qo(this.touch.touches[0],this.touch.touches[1]);break;default:this.state=-1}this.state}};onTouchMove=e=>{if(this.enabled!==!1)switch(this.touchToScene(e),e.touches.length){case 2:e.preventDefault(),e.stopPropagation();let t={...this.touch.inputs.first},r={...this.touch.inputs.second},o=new V(this.touch.touches[0].x,this.touch.touches[0].y),i=new V(this.touch.touches[1].x,this.touch.touches[1].y);if(this.touch.inputs.update(this.touch.touches[0],this.touch.touches[1]),this.enableRotate&&this.state===4)this.handleTouchMoveTilt(e);else if(this.state===5)this.handleTouchMoveDolly();else if(this.state!==5&&this.touch.inputs.totalDistance>.05){let s=t.y<o.y&&r.y<i.y,a=t.y>o.y&&r.y>i.y;this.enableRotate&&this.state!==4&&(a||s)?(this.handleTouchStartTilt(e),this.state=4):(this.handleTouchStartDolly(),this.state=5)}break;case 1:(this.enablePedestal||this.enablePan)&&(e.preventDefault(),e.stopPropagation()),this.enablePedestal&&this.state===9?this.handleTouchMovePedestal(e):this.enablePan&&this.state===6&&this.handleTouchMovePan(e);break;default:this.state=-1}};onTouchEnd=e=>{if(this.enabled!==!1){switch(this.handleTouchEnd(),this.state){case 2:case 6:this.publish("user-pan-end");break;case 4:this.publish("pan-end"),this.publish("user-tilt-end");break;case 1:case 5:this.publish("zoom-end"),this.publish("user-dolly-end");break;case 0:this.publish("rotate-end"),this.publish("user-rotate-end");break;case 8:case 9:this.publish("pedestal-end"),this.publish("user-pedestal-end");break}e.touches.length?this.onTouchStart(e):this.state=-1}};handleTouchMovePan=e=>{let t=Object.hasOwn(e,"x")?new V(e.x,e.y):this.touch.touches[0],r=this.raycastToFloor(t);this.coords.panEnd.set(r.x,r.y,0),this.coords.panDelta.subVectors(this.coords.panEnd,this.coords.panStart),this.setPosition(this.coords.panCameraStart.x-this.coords.panDelta.x,this.coords.panCameraStart.y-this.coords.panDelta.y),this.publish("change"),this.panDirty=!0};handleTouchStartDolly=()=>{let e=this.touch.touches[0].x-this.touch.touches[1].x,t=this.touch.touches[0].y-this.touch.touches[1].y;this.zoomStart=this.getZoomAltitude();let r=new V(this.touch.touches[0].x-e/2,this.touch.touches[0].y-t/2);this.coords.floorAnchor=this.raycastToFloor(r),this.orbit.updateMatrixWorld(),this.touch.anchor1=new Dn(this.touch.touches[0],this.camera,this.cameraPlane),this.touch.anchor2=new Dn(this.touch.touches[1],this.camera,this.cameraPlane),this.coords.panCameraStart.set(this.orbit.position.x,this.orbit.position.y,0),this.publish("user-dolly-start"),this.publish("zoom-start"),this.publish("multi-start")};handleMouseMovePan=()=>{let e=this.raycastToFloor(this.coords.mouse);this.coords.panEnd.set(e.x,e.y,0),this.coords.panDelta.subVectors(this.coords.panEnd,this.coords.panStart),this.setPosition(this.coords.panCameraStart.x-this.coords.panDelta.x,this.coords.panCameraStart.y-this.coords.panDelta.y),this.publish("change"),this.panDirty=!0};handleTouchStartTilt=e=>{this.coords.rotateStart.set(e.touches[1].clientX,e.touches[1].clientY),this.publish("user-tilt-start"),this.publish("rotate-start")};handleTouchMovePedestal=e=>{this.handleMouseMovePedestal(e.touches[0])};handleTouchMoveTilt=e=>{this.coords.rotateEnd.set(e.touches[1].clientX,e.touches[1].clientY),this.coords.rotateDelta.subVectors(this.coords.rotateEnd,this.coords.rotateStart),this.setTilt(this.getTilt()-this.coords.rotateDelta.y/this.rotateSpeed),this.coords.rotateStart.copy(this.coords.rotateEnd)};handleTouchMoveDolly=()=>{let e=this.touch.inputs.first,t=this.touch.inputs.second;this.touch.anchor1.viewCoordinate={x:e.x,y:e.y},this.touch.anchor2.viewCoordinate={x:t.x,y:t.y};let r=this.makeTransformFromTouchAnchors(this.touch.anchor1,this.touch.anchor2);r&&this.setCameraFromTransformMatrix(r),this.orbit.updateMatrixWorld(),this.touch.anchor1.updateAnchorState(this.camera,e),this.touch.anchor2.updateAnchorState(this.camera,t)};handleTouchEnd=()=>{this.state===4||this.state===5?this.publish("multi-end"):this.state===6&&this.publish("pan-end"),this.panDirty=!1};handleTouchStartPan=e=>{let t=Object.hasOwn(e,"x")?new V(e.x,e.y):this.touch.touches[0],r=this.raycastToFloor(t);this.coords.panStart.set(r.x,r.y,0),this.coords.panCameraStart.set(this.orbit.position.x,this.orbit.position.y,0),this.publish("user-pan-start"),this.publish("pan-start")};handleTouchStartPedestal=e=>{this.handleMouseDownPedestal(e.touches[0])};onMouseDown=e=>{if(this.enabled!==!1){if(this.mouseToScene(e),e.preventDefault(),this.state===3&&this.publish("zoom-end"),e.button===this.MOUSE_BUTTONS.ORBIT){if(this.enableRotate===!1)return;this.handleMouseDownRotate(e),this.state=0}else(e.button===this.MOUSE_BUTTONS.PAN||e.button===this.MOUSE_BUTTONS.ZOOM)&&(this.enablePan?(this.handleMouseDownPan(),this.state=2):this.enablePedestal&&(this.handleMouseDownPedestal(e),this.state=8));this.state!==-1&&this.addMouseEventListeners()}};onMouseWheel=e=>{this.enabled===!1||this.enableZoom===!1||this.state!==-1&&this.state!==3&&this.state!==7||(this.state===7&&this.cancelAnimation(),e.preventDefault(),e.stopPropagation(),this.mouseToScene(e),this.canScrollZoom(e)&&(this.lastWheelTime=this.clock.getElapsedTime(),this.publishUserZoomEvent()),this.state!==3&&this.canScrollZoom(e)&&(this.addMouseMoveEventListeners(),this.state=3,this.zoomStart=this.getZoomAltitude(),this.coords.floorAnchor=this.raycastToFloor(this.coords.mouse),this.coords.panCameraStart.set(this.orbit.position.x,this.orbit.position.y,0),this.publish("zoom-start")),this.scrollTimer!=null&&clearTimeout(this.scrollTimer),this.scrollTimer=setTimeout(()=>{this.publish("zoom-end")},50),this.handleMouseWheel(e))};handleMouseWheel=e=>{if(this.publish("zoom-start"),!this.canScrollZoom(e)){this.lastWheelTime>0&&this.publish("zoom-end"),this.lastWheelTime=0,this.state=-1;return}let t=this.getZoomAltitude(),r=t-la(e)*t/ha*this.zoomSpeed;if(this.setZoomAltitude(r),this.enablePan){let o=this.getZoomAltitude()/this.zoomStart;this.coords.panDelta.subVectors(this.coords.floorAnchor,this.coords.panCameraStart).multiplyScalar(1-o),this.setPosition(this.coords.panCameraStart.x+this.coords.panDelta.x,this.coords.panCameraStart.y+this.coords.panDelta.y)}this.publish("change")};setCameraFromTransformMatrix=e=>{this.orbit.updateMatrixWorld();let t=new xt;t.setFromRotationMatrix(e,"ZYX");let r=(e.elements[14]-this.cameraPlane.position.z)/Math.cos(t.x),o=t.z,i=new O(0,0,1);i.applyEuler(t),i.setLength(r);let s=new O;s.setFromMatrixPosition(e),s.sub(i),this.enablePan&&this.setPosition(s.x,s.y),this.enableZoom&&this.setZoomAltitude(r),this.enableRotate&&this.setRotation(-o)};makeTransformFromTouchAnchors=(e,t)=>{this.orbit.updateMatrixWorld(),this.camera.updateProjectionMatrix();let r=this.camera.projectionMatrix.clone(),o=e.worldCoordinate,i=t.worldCoordinate,s=e.reUnproject(),a=t.reUnproject();if(!s||!a||!o||!i)return null;let l=e.viewCoordinate,c=t.viewCoordinate,u=i.x-o.x,d=i.y-o.y,h=Math.atan2(d,u),g=a.x-s.x,b=a.y-s.y,M=Math.atan2(b,g),p=Nu(h,M),m=new Y;m.makeRotationZ(-p);let y=m.clone();y.multiply(e.snapHolderMatrix);let v=(or,ir,sr)=>or.elements[(ir-1)*4+sr-1],x=v(r,1,1)*v(y,1,1)-l.x*v(r,3,4)*v(y,3,1),S=v(r,1,1)*v(y,1,2)-l.x*v(r,3,4)*v(y,3,2),C=v(r,1,1)*v(y,1,3)-l.x*v(r,3,4)*v(y,3,3),D=o.x*x+o.y*S+o.z*C,E=v(r,2,2)*v(y,2,1)-l.y*v(r,3,4)*v(y,3,1),T=v(r,2,2)*v(y,2,2)-l.y*v(r,3,4)*v(y,3,2),P=v(r,2,2)*v(y,2,3)-l.y*v(r,3,4)*v(y,3,3),I=o.x*E+o.y*T+o.z*P,L=v(r,1,1)*v(y,1,1)-c.x*v(r,3,4)*v(y,3,1),N=v(r,1,1)*v(y,1,2)-c.x*v(r,3,4)*v(y,3,2),z=v(r,1,1)*v(y,1,3)-c.x*v(r,3,4)*v(y,3,3),j=i.x*L+i.y*N+i.z*z,H=v(r,2,2)*v(y,2,1)-c.y*v(r,3,4)*v(y,3,1),Q=v(r,2,2)*v(y,2,2)-c.y*v(r,3,4)*v(y,3,2),G=v(r,2,2)*v(y,2,3)-c.y*v(r,3,4)*v(y,3,3),J=i.x*H+i.y*Q+i.z*G,ne=Math.abs(L-x),je=Math.abs(N-S),ye=Math.abs(z-C),be=Math.abs(L-E),pt=Math.abs(N-T),Ze=Math.abs(z-P),Qe=Math.abs(H-x),mt=Math.abs(Q-S),et=Math.abs(G-C),It=Math.abs(H-E),Fe=Math.abs(Q-T),Xe=Math.abs(G-P),ft=Math.min(ne+je+ye,be+pt+Ze),Se=Math.min(Qe+mt+et,It+Fe+Xe);ft<Se&&(L=H,N=Q,z=G,j=J);let Ye=E*C-x*P,Ne=T*C-S*P,rr=I*C-D*P,Be=L*P-E*z,de=N*P-T*z,so=j*P-I*z,Pr=(so*Ne-rr*de)/(Be*Ne-Ye*de),Ts=(so*Ye-rr*Be)/(de*Ye-Ne*Be),nr=T*x-S*E,Ot=P*x-C*E,at=I*x-D*E,Ir=N*E-T*L,sn=z*E-P*L,lo=((j*E-I*L)*nr-at*Ir)/(sn*nr-Ot*Ir),gt=y.clone();return gt.elements[12]=Pr,gt.elements[13]=Ts,gt.elements[14]=lo,lo>0?gt:null};updateTouchOrigin=()=>{let e=this.renderer.domElement;this.touch.origin.offsetLeft=e.getBoundingClientRect().left,this.touch.origin.offsetTop=e.getBoundingClientRect().top};touchToScene=e=>{this.touch.touches=[];for(let t=0,r=e.touches.length;t<r;t++){let o=e.touches[t],i=Bu(o,this.touch.origin);this.touch.touches.push(new V(i.x/this.renderer.domElement.width*this.rendererState.pixelRatio*2-1,-(i.y/this.renderer.domElement.height*this.rendererState.pixelRatio)*2+1))}this.coords.mouse=this.touch.touches[0]};canScrollZoom=e=>{let t=la(e),r=this.getZoomAltitude();return!(t<0&&r===this.getZoomScaledMax()||t>0&&r===this.getZoomScaledMin())};mouseToScene=e=>{let t=this.getMousePos(e);return this.coords.mouse.x=t.x/this.renderer.domElement.width*this.rendererState.pixelRatio*2-1,this.coords.mouse.y=-(t.y/this.renderer.domElement.height*this.rendererState.pixelRatio)*2+1,this.coords.mouse};getMousePos=e=>{let t=this.renderer.domElement.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}};handleMouseDownRotate=e=>{this.coords.rotateStart.set(e.clientX,e.clientY),this.publish("rotate-start"),this.publish("user-rotate-start")};handleMouseDownPan=()=>{let e=this.raycastToFloor(this.coords.mouse);this.coords.panStart.set(e.x,e.y,0),this.coords.panCameraStart.set(this.orbit.position.x,this.orbit.position.y,0),this.publish("pan-start"),this.publish("user-pan-start")};handleMouseDownPedestal=e=>{let t=new V(e.clientX,e.clientY);this.coords.initialShiftPos=t,this.coords.initialPedestal=this.getPedestal(),this.pedestalScaleFactor=Us(this.camera.fov,this.renderer.domElement.clientHeight,this.getZoomAltitude()),this.publish("pedestal-start"),this.publish("user-pedestal-start")};handleMouseMovePedestal=e=>{let t={x:e.clientX,y:e.clientY},r=this.coords.initialPedestal+this.pedestalScaleFactor*(t.y-this.coords.initialShiftPos.y);this.stayInsideBounds&&(r<this.minPedestal?r=Math.max(r,this.minPedestal):r>this.maxPedestal&&(r=Math.min(r,this.maxPedestal))),r!==this.getPedestal()&&this.setPedestal(r,!0)};handleMouseMoveRotate=e=>{this.coords.rotateEnd.set(e.clientX,e.clientY),this.coords.rotateDelta.subVectors(this.coords.rotateEnd,this.coords.rotateStart),this.setRotation(this.getRotation()+this.coords.rotateDelta.x/this.rotateSpeed),this.setTilt(this.getTilt()-this.coords.rotateDelta.y/this.rotateSpeed),this.coords.rotateStart.copy(this.coords.rotateEnd),this.publish("change")};publishUserZoomDebounced=Lt(()=>{this.isUserZooming=!1,this.publish("user-zoom-end")},250);publishUserZoomEvent=()=>{this.isUserZooming?this.publishUserZoomDebounced():(this.publish("user-zoom-start"),this.isUserZooming=!0,this.publishUserZoomDebounced())};setCameraMoving=()=>{this.cameraMoving=!0};unsetCameraMoving=()=>{this.cameraMoving=!1,this.lastCameraMoveTime=Date.now()};setUserInteracting=()=>{this.userInteracting=!0};unsetUserInteracting=()=>{this.userInteracting=!1};publishPedestalChangeEvent=e=>{this.publish("pedestal-change",{pedestal:e,scrolledToTop:this.scrolledToTop,scrolledToBottom:this.scrolledToBottom,scrollPercent:this.scrollPercent})};convertAltitudeToZoomLevel=e=>{let[,t]=this.center,r=this.computeMetersPerPixelFromAltitude(e),o=Math.cos(U.degToRad(t))*2*Math.PI*vt/r;return U.clamp(Math.log2(o/512),ti,ri)};convertZoomLevelToAltitude=e=>this.computeMetersPerPixelFromZoomLevel(e)*this.options.canvasHeight/2/Math.tan(U.degToRad(this.camera.fov)/2);completeTween=e=>{e.isPlaying()&&e.stop(),this.rendererState.internalTweenGroup.remove(e),this.tweens.delete(e)};static CAMERA_FRAME_PADDING_SIDES=["top","bottom","left","right"];debugContainer=new Ge;getCameraFrameForCoordinates(e,t){let r=t.minZoom!==void 0?t.minZoom:this.minZoomAltitude,o=t.maxZoom!==void 0?t.maxZoom:this.maxZoomAltitude,i=this.options.canvasWidth,s=this.options.canvasHeight,a=this.getRotation(),l=this.getTilt(),c=this.getPosition();this.setRotation(t.rotation??a,!0),this.setTilt(t.tilt??l,!0);let u=ya(e,{canvasWidth:i,canvasHeight:s,paddingOption:t.padding,verticalPadding:t.verticalPadding,minZoom:r,maxZoom:o,position:c,camera:this.camera,orbit:this.orbit});return this.setRotation(a,!0),this.setTilt(l,!0),{center:u.position,zoomLevel:this.convertAltitudeToZoomLevel(u.zoom)}}focusOn(e,t){if(xm){this.debugContainer&&ve(this.debugContainer);let M=new Bt(4,4,4),p=new Me({color:65280,depthTest:!1}),m=new K(M,p,e.length),y=new Y;e.forEach((v,x)=>{y.setPosition(v),m.setMatrixAt(x,y)}),m.instanceMatrix.needsUpdate=!0,this.debugContainer.add(m),this.scene.add(this.debugContainer)}let r=t.curve,o=t.callback,i=t.cancelledCallback,s=t.minZoom!==void 0?t.minZoom:this.minZoomAltitude,a=t.maxZoom!==void 0?t.maxZoom:this.maxZoomAltitude,l=this.options.canvasWidth,c=this.options.canvasHeight,u;t.duration!==void 0?u=t.duration:w.env.TESTING==="true"?u=0:u=pa;let d=t.padding,h=this.getRotation(),g=this.getTilt();t.rotation!=null&&this.setRotation(t.rotation),t.tilt!=null&&this.setTilt(t.tilt);let b=ya(e,{canvasHeight:c,paddingOption:d,canvasWidth:l,minZoom:s,maxZoom:a,camera:this.camera,orbit:this.orbit,position:this.getPosition(),verticalPadding:t.verticalPadding});this.setRotation(h),this.setTilt(g),this.animateCamera({position:b.position,tilt:t.tilt,rotation:t.rotation,zoom:b.zoom},u,r,o,i,t)}resize(e,t){this.options.canvasWidth=e,this.options.canvasHeight=t}computeMetersPerPixelFromZoomLevel(e){let[,t]=this.center,r=U.clamp(e,ti,ri),o=Math.pow(2,r),i=U.clamp(t,ca,ua),s=o*512;return Math.cos(U.degToRad(i))*Math.PI*2*vt/s}computeMetersPerPixelFromAltitude(e){return e*2*Math.tan(U.degToRad(this.camera.fov)/2)/this.options.canvasHeight}getCurrentMetersPerPixel(){let e=Math.max(0,this.getPedestal()-this.minPedestal);return this.computeMetersPerPixelFromAltitude(this.getZoomAltitude()+e)}};function ya(n,{canvasWidth:e,orbit:t,paddingOption:r,verticalPadding:o=0,canvasHeight:i,minZoom:s,maxZoom:a,camera:l,position:c}){let u={zoom:s,position:c};if(n.length===0)return u;for(let Ne of jr.CAMERA_FRAME_PADDING_SIDES)typeof r[Ne]!="number"&&(r[Ne]=0);let d=Vr(r,e,i);if(d.left+d.right>=e||d.top+d.bottom>=i)return u;t.updateMatrixWorld();let h=l.matrixWorldInverse,g=l.fov*(Math.PI/180)/2,b=g,p=Math.atan(Math.tan(g)*(e/i)),m=new O(1/0,1/0,1/0),y=new O(-1/0,-1/0,-1/0),v=new ce,x=new O;for(let Ne=0,rr=n.length;Ne<rr;Ne++)x.copy(n[Ne]),v.expandByPoint(x),x.applyMatrix4(h),m.min(x),y.max(x),x.copy(n[Ne]),x.z-=o,x.applyMatrix4(h),m.min(x),y.max(x),x.copy(n[Ne]),x.z+=o,x.applyMatrix4(h),m.min(x),y.max(x);let S=y.x-m.x,C=y.y-m.y,D=e-d.left-d.right,E=i-d.top-d.bottom,T=(y.x+m.x)/2,P=(y.y+m.y)/2,I=S/D,L=C/E,N=s,z=a,j=N*Math.tan(p)*2,H=z*Math.tan(p)*2,Q=j/e,G=H/e,J=Math.max(I,L);J=U.clamp(J,Q,G);let ne=D*J,je=E*J,ye={min:{x:T-ne/2-d.left*J,y:P-je/2-d.bottom*J},max:{x:T+ne/2+d.right*J,y:P+je/2+d.top*J}},be=(ye.min.x+ye.max.x)/2,pt=(ye.min.y+ye.max.y)/2,Ze=v.getCenter(new O),Qe=Math.abs(be-ye.min.x),mt=Math.abs(pt-ye.min.y),et=Qe/Math.tan(p),It=mt/Math.tan(b),Fe=new O;Fe.set(be,pt,y.z+Math.max(et,It)),Fe.applyMatrix4(l.matrixWorld);let Xe=new O;Xe.set(be,pt,y.z),Xe.applyMatrix4(l.matrixWorld);let ft=new O().subVectors(Xe,Fe),Se=(Ze.z-Fe.z)/ft.z,Ye=new O().copy(Fe).add(ft.clone().multiplyScalar(Se));return Xe.set(Ye.x,Ye.y,Ye.z),Fe.sub(Xe),{position:Ye,zoom:Fe.length()}}f();import{z as te}from"zod";var Sm=te.object({rotation:te.array(te.number()).length(3).optional(),altitude:te.number().optional(),scale:te.array(te.number()).length(3).optional(),interactive:te.boolean().optional(),verticalOffset:te.number().optional(),id:te.union([te.number(),te.string()]).optional()}),Mm=te.object({type:te.enum(["Feature"]),geometry:Hr,properties:Sm}),Cm=te.object({type:te.enum(["FeatureCollection"]),features:te.array(Mm)}),Em=te.object({color:te.string()}),wm=te.object({url:te.string(),color:te.string().optional(),opacity:te.number().optional(),material:te.record(te.string(),Em).optional()});function Vu(n,e,t){te.union([te.number(),te.string()]).parse(n),Cm.parse(e),wm.parse(t)}var xr=class{mesh;type="model";positionDirty=!0;outline;geometry;material;feature;instanceIndex=-1;instancingDisabled=!1;constructor(e){this.feature=e}#e=!0;get visible(){return this.#e}set visible(e){this.#e=e}color=new k;clippingPlane;get modelScene(){return this.clippingPlane?this.mesh?.children.find(e=>e.name!=="hole-fill-mesh"):this.mesh}position=new O;#n=0;get altitude(){return this.#n}set altitude(e){this.#n=e}#i=1;get opacity(){return this.#i}set opacity(e){this.#i=e}#o=ue.GEOMETRY;get renderOrder(){return this.#o}set renderOrder(e){this.#o=e}#s=!1;get visibleThroughGeometry(){return this.#s}set visibleThroughGeometry(e){this.#s=e}};f();f();var Sr={container:{position:"absolute",top:"0",left:"0",width:"100%",height:"100%",pointerEvents:"none",zIndex:"9998"},focusOnBox:{position:"absolute",border:"2px solid orange",backgroundColor:"transparent",pointerEvents:"none"},getFocusOnTransformBox:{position:"absolute",border:"2px dashed cyan",backgroundColor:"rgba(0, 255, 255, 0.1)",pointerEvents:"none"},animateToBox:{position:"absolute",width:"12px",height:"12px",border:"2px solid lime",backgroundColor:"rgba(0, 255, 0, 0.3)",borderRadius:"50%",transform:"translate(-50%, -50%)",pointerEvents:"none"},label:{position:"absolute",fontSize:"10px",fontFamily:"monospace",color:"white",backgroundColor:"rgba(0, 0, 0, 0.7)",padding:"2px 4px",borderRadius:"2px",whiteSpace:"nowrap"}},ba={container:{position:"absolute",top:"0",left:"0",width:"100%",height:"100%",pointerEvents:"none",zIndex:"9999"},top:{position:"absolute",top:"0",left:"0",right:"0",backgroundColor:"rgba(255, 0, 0, 0.2)",borderBottom:"2px dashed rgba(255, 0, 0, 0.6)"},bottom:{position:"absolute",bottom:"0",left:"0",right:"0",backgroundColor:"rgba(0, 255, 0, 0.2)",borderTop:"2px dashed rgba(0, 255, 0, 0.6)"},left:{position:"absolute",top:"0",bottom:"0",left:"0",backgroundColor:"rgba(0, 0, 255, 0.2)",borderRight:"2px dashed rgba(0, 0, 255, 0.6)"},right:{position:"absolute",top:"0",bottom:"0",right:"0",backgroundColor:"rgba(255, 255, 0, 0.2)",borderLeft:"2px dashed rgba(255, 255, 0, 0.6)"},label:{position:"absolute",fontSize:"10px",fontFamily:"monospace",color:"white",backgroundColor:"rgba(0, 0, 0, 0.7)",padding:"2px 4px",borderRadius:"2px"}},si=class n{#e;#n;#i=!1;#o=null;#s=null;#a=null;#c=null;#d=null;#g=null;#t=null;#h=null;#r=!1;#b=new Map;#f=!1;#l=new Map;#M=!1;static#E={};#C=!1;#p=null;#y=null;#m=null;#x=null;constructor(e,t){this.#e=e,this.#n=t}showCameraTargets(){this.#i||(this.#i=!0,this.#I(),this.#R())}hideCameraTargets(){this.#i&&(this.#i=!1,this.#w(),this.#A())}setFocusOnPointCloud(e,t,r){!this.#i&&!this.#r||(this.#i&&(this.#d=e.map(o=>o.clone()),this.#T()),this.#_(e,t,r))}setGetFocusOnTransformPointCloud(e,t,r){!this.#i&&!this.#r||(this.#i&&(this.#g=e.map(o=>o.clone()),this.#T()),this.#_(e,t,r))}setAnimateToPosition(e){this.#i&&(this.#t=e.clone(),this.#T())}#I(){let e=this.#e.container;if(!e)return;this.#o=document.createElement("div"),this.#o.dataset.debugCameraTargets="true",Object.assign(this.#o.style,Sr.container),this.#s=document.createElement("div"),this.#s.dataset.debugType="focusOn",Object.assign(this.#s.style,Sr.focusOnBox),this.#s.style.display="none";let t=document.createElement("span");Object.assign(t.style,Sr.label),t.style.top="-20px",t.style.left="0",t.style.color="orange",t.textContent="focusOn",this.#s.appendChild(t),this.#a=document.createElement("div"),this.#a.dataset.debugType="getFocusOnTransform",Object.assign(this.#a.style,Sr.getFocusOnTransformBox),this.#a.style.display="none";let r=document.createElement("span");Object.assign(r.style,Sr.label),r.style.top="-20px",r.style.left="0",r.style.color="cyan",r.textContent="getFocusOnTransform",this.#a.appendChild(r),this.#c=document.createElement("div"),this.#c.dataset.debugType="animateTo",Object.assign(this.#c.style,Sr.animateToBox),this.#c.style.display="none";let o=document.createElement("span");Object.assign(o.style,Sr.label),o.style.top="-20px",o.style.left="50%",o.style.transform="translateX(-50%)",o.style.color="lime",o.textContent="animateTo",this.#c.appendChild(o),this.#o.appendChild(this.#s),this.#o.appendChild(this.#a),this.#o.appendChild(this.#c),e.appendChild(this.#o)}#A(){this.#o&&(this.#o.remove(),this.#o=null),this.#s=null,this.#a=null,this.#c=null}#R(){this.#h=this.#e.on("post-render",()=>{this.#T()})}#w(){this.#h!==null&&(this.#h(),this.#h=null)}#O(e){let t=1/0,r=1/0,o=-1/0,i=-1/0,s=new V;for(let a of e)this.#e.project(s,a),s.x!==-1e3&&(t=Math.min(t,s.x),r=Math.min(r,s.y),o=Math.max(o,s.x),i=Math.max(i,s.y));return t!==1/0?{minX:t,minY:r,maxX:o,maxY:i}:null}#F(e,t){if(!t||t.length===0){e.style.display="none";return}let r=this.#O(t);r?(e.style.display="block",e.style.left=`${r.minX}px`,e.style.top=`${r.minY}px`,e.style.width=`${r.maxX-r.minX}px`,e.style.height=`${r.maxY-r.minY}px`):e.style.display="none"}#T(){if(!(!this.#i||!this.#o))if(this.#s&&this.#F(this.#s,this.#d),this.#a&&this.#F(this.#a,this.#g),this.#c&&this.#t){let e=new V;this.#e.project(e,this.#t),e.x!==-1e3?(this.#c.style.display="block",this.#c.style.left=`${e.x}px`,this.#c.style.top=`${e.y}px`):this.#c.style.display="none"}else this.#c&&(this.#c.style.display="none")}showFocusOnDebug(e){if(e===!1){this.hideFocusOnDebug();return}this.#P(this.#b),this.#P(this.#l),this.#r=!0,this.#f=e.pointCloud===!1?!1:{size:e.pointCloud?.size??2,color:e.pointCloud?.color??"lime"},this.#M=e.boundingBox===!1?!1:{color:e.boundingBox?.color??"lime"}}hideFocusOnDebug(){this.#r&&(this.#r=!1,this.#f=!1,this.#M=!1,this.#P(this.#b),this.#P(this.#l))}#_(e,t,r){if(!this.#r)return;let o=t??n.#E;this.#f!==!1&&this.#N(e,o,r),this.#M!==!1&&this.#L(e,o,r)}#N(e,t,r){let o=this.#e.getThreeScene();if(!o||e.length===0){this.#D(this.#b,t);return}if(this.#f===!1)return;let{size:i,color:s}=this.#f,a=r??s,l=this.#b.get(t);if(!l||l.count!==e.length){this.#D(this.#b,t);let u=new Br(i,8,6),d=new Me({color:a,depthTest:!1,transparent:!0,opacity:.3});l=new K(u,d,e.length),l.renderOrder=9999,o.add(l),this.#b.set(t,l)}let c=new Ge;for(let u=0;u<e.length;u++)c.position.copy(e[u]),c.updateMatrix(),l.setMatrixAt(u,c.matrix);l.instanceMatrix.needsUpdate=!0,this.#e.render()}#D(e,t){let r=e.get(t);r&&(this.#e.getThreeScene()?.remove(r),r.geometry.dispose(),r.material.dispose(),e.delete(t))}#P(e){let t=this.#e.getThreeScene();for(let r of e.values())t?.remove(r),r.geometry.dispose(),r.material.dispose();e.clear()}#L(e,t,r){let o=this.#e.getThreeScene();if(!o||e.length===0){this.#D(this.#l,t);return}if(this.#M===!1)return;let i=r??this.#M.color,s=this.#e.getThreeCamera(),a=s.matrixWorldInverse,l=e.map(v=>v.clone().applyMatrix4(a)),c=new ce().setFromPoints(l),u=c.getSize(new O),d=c.getCenter(new O),h=new Y().copy(a).invert(),g=d.applyMatrix4(h),b=new Ft().setFromRotationMatrix(s.matrixWorld);this.#D(this.#l,t);let M=new Bt(u.x,u.y,u.z),p=new Co(M);M.dispose();let m=new Rr({color:i,depthTest:!1,transparent:!0,opacity:.5}),y=new Gt(p,m);y.position.copy(g),y.quaternion.copy(b),y.renderOrder=9999,o.add(y),this.#l.set(t,y),this.#e.render()}showScreenOffsets(){this.#C||(this.#C=!0,this.#B())}hideScreenOffsets(){this.#C&&(this.#C=!1,this.#G())}#B(){let e=this.#e.container;if(!e)return;this.#p=document.createElement("div"),this.#p.dataset.debugScreenOffsets="true",Object.assign(this.#p.style,ba.container);let t=r=>{let o=document.createElement("div");o.dataset.debugOffset=r,Object.assign(o.style,ba[r]);let i=document.createElement("span");switch(Object.assign(i.style,ba.label),i.dataset.debugLabel=r,r){case"top":i.style.bottom="4px",i.style.left="50%",i.style.transform="translateX(-50%)";break;case"bottom":i.style.top="4px",i.style.left="50%",i.style.transform="translateX(-50%)";break;case"left":i.style.right="4px",i.style.top="50%",i.style.transform="translateY(-50%)";break;case"right":i.style.left="4px",i.style.top="50%",i.style.transform="translateY(-50%)";break}return o.appendChild(i),o};this.#y={top:t("top"),bottom:t("bottom"),left:t("left"),right:t("right")},this.#p.appendChild(this.#y.top),this.#p.appendChild(this.#y.bottom),this.#p.appendChild(this.#y.left),this.#p.appendChild(this.#y.right),e.appendChild(this.#p),this.#S(),this.#x=this.#n.on("padding-change",()=>{this.#S()}),this.#m=new ResizeObserver(()=>{this.#S()}),this.#m.observe(e)}#G(){this.#x&&(this.#x(),this.#x=null),this.#m&&(this.#m.disconnect(),this.#m=null),this.#p&&(this.#p.remove(),this.#p=null),this.#y=null}#S(){if(!this.#y||!this.#p)return;let e=this.#n.insetsPadding,t=this.#e.container,r=t.clientWidth,o=t.clientHeight,i=Vr(e,r,o),s=this.#y.top,a=s.querySelector("[data-debug-label]");i.top>0?(s.style.height=`${i.top}px`,s.style.display="block",a&&(a.textContent=`top: ${this.#v(e.top,e.type)}`)):s.style.display="none";let l=this.#y.bottom,c=l.querySelector("[data-debug-label]");i.bottom>0?(l.style.height=`${i.bottom}px`,l.style.display="block",c&&(c.textContent=`bottom: ${this.#v(e.bottom,e.type)}`)):l.style.display="none";let u=this.#y.left,d=u.querySelector("[data-debug-label]");i.left>0?(u.style.height="",u.style.top=`${i.top}px`,u.style.bottom=`${i.bottom}px`,u.style.width=`${i.left}px`,u.style.display="block",d&&(d.textContent=`left: ${this.#v(e.left,e.type)}`)):u.style.display="none";let h=this.#y.right,g=h.querySelector("[data-debug-label]");i.right>0?(h.style.height="",h.style.top=`${i.top}px`,h.style.bottom=`${i.bottom}px`,h.style.width=`${i.right}px`,h.style.display="block",g&&(g.textContent=`right: ${this.#v(e.right,e.type)}`)):h.style.display="none"}#v(e,t){return t==="portion"?`${(e*100).toFixed(1)}%`:`${e}px`}destroy(){this.hideCameraTargets(),this.hideScreenOffsets(),this.hideFocusOnDebug()}};var Tm=0,Dm=90,Pm=(w.env.NODE_ENV==="test",!1),ai={linear:cr.Linear.None,"ease-in":cr.Quadratic.In,"ease-out":cr.Quadratic.Out,"ease-in-out":cr.Quadratic.InOut},Im=-50,li=class extends Z{#e;#n;#i;#o;constructor(e,t,r){super(),this.#e=e,this.#n=t,this.#i=r,this.#o=new si(e,this),this.#e.map&&this.#e.map.transform.setMinElevationForCurrentTile(Im),this.#n.cameraSystem.on("pedestal-change",({pedestal:o})=>{this.#n.cameraSystem.setCameraPlaneElevation(o),this.#e.mode==="outdoors-overlay"&&typeof this.#e.map?.setCenterElevation=="function"&&this.#e.map.setCenterElevation(this.#n.cameraSystem.getPedestal())})}get center(){return this.#e.mode==="outdoors-overlay"&&this.#e.map?this.#e.map.getCenter?.().toArray():this.#n.cameraSystem.center}setCenter(e){if(this.#e.mode==="outdoors-overlay"&&this.#e.map){this.#e.map?.setCenter(e),this.#n.interactionSystem.handleHover();return}this.#n.cameraSystem.setCenter(e[0],e[1]),this.#n.interactionSystem.handleHover()}get zoomLevel(){return this.#e.mode==="outdoors-overlay"&&this.#e.map?this.#e.map?.getZoom():this.#n.cameraSystem.getZoomLevel()}setZoomLevel(e){this.#e.mode==="outdoors-overlay"&&this.#e.map&&this.#e.map?.setZoom(e),this.#n.cameraSystem.setZoomLevel(Ve(e,this.minZoomLevel,this.maxZoomLevel,"zoomLevel was clamped to minZoomLevel/maxZoomLevel bounds. Use mapView.Camera.setMinZoomLevel() and mapView.Camera.setMaxZoomLevel() to adjust limits."))}getState(){return{zoomLevel:this.zoomLevel,minZoomLevel:this.minZoomLevel,maxZoomLevel:this.maxZoomLevel,minPitch:this.minPitch,maxPitch:this.maxPitch,autoMinZoomLevel:this.autoMinZoomLevel,panMode:this.panMode,screenOffsets:this.insetsPadding,center:this.center,bearing:this.bearing,pitch:this.pitch,elevation:this.elevation}}get isAnimating(){return this.#n.cameraSystem.isAnimating}cancelAnimation(){this.#n.cameraSystem.cancelAnimation()}get maxZoomLevel(){return this.#n.cameraSystem.maxZoomLevel}get minZoomLevel(){return this.#n.cameraSystem.minZoomLevel}setAutoMinZoomLevel(e){this.#n.panBoundsSystem.autoMinZoomLevel=e,e&&(this.#n.panBoundsSystem.dirty=!0,this.#n.panBoundsSystem.update())}get autoMinZoomLevel(){return this.#n.panBoundsSystem.autoMinZoomLevel}setMinZoomLevel(e,t=!1){t&&this.setAutoMinZoomLevel(!1);let r=Ve(e,rt.MIN_MERCATOR_ZOOM_LEVEL,this.maxZoomLevel,`setMinZoomLevel was clamped. minZoomLevel must be between ${rt.MIN_MERCATOR_ZOOM_LEVEL} and maxZoomLevel.`);this.#n.cameraSystem.setMinZoomLevel(r),this.zoomLevel<r&&this.setZoomLevel(r),this.#e.map?.setMinZoom(r)}setMaxZoomLevel(e){let t=Ve(e,this.minZoomLevel,rt.MAX_MERCATOR_ZOOM_LEVEL,`setMaxZoomLevel was clamped. maxZoomLevel must be between minZoomLevel and ${rt.MAX_MERCATOR_ZOOM_LEVEL}.`);this.#n.cameraSystem.setMaxZoomLevel(t),this.zoomLevel>t&&this.setZoomLevel(t),this.#e.map?.setMaxZoom(t)}get maxPitch(){return this.#e.mode==="outdoors-overlay"&&this.#e.map?this.#e.map?.getMaxPitch?.():U.radToDeg(this.#n.cameraSystem.maxTilt)}get minPitch(){return this.#e.mode==="outdoors-overlay"&&this.#e.map?this.#e.map?.getMinPitch?.():U.radToDeg(this.#n.cameraSystem.minTilt)}setMinPitch(e){let t=Math.max(Tm,e);this.#e.map?.setMinPitch(t),this.#n.cameraSystem.minTilt=U.degToRad(t)}setMaxPitch(e){let t=Math.min(Dm,e);this.#e.map?.setMaxPitch(t),this.#n.cameraSystem.maxTilt=U.degToRad(t)}get bearing(){return this.#e.mode==="outdoors-overlay"&&this.#e.map?this.#e.map?.getBearing():U.radToDeg(this.#n.cameraSystem.getRotation())}setBearing(e){if(this.#e.mode==="outdoors-overlay"&&this.#e.map){this.#e.map?.setBearing(e);return}this.#n.cameraSystem.setRotation(U.degToRad(e))}get pitch(){return this.#e.mode==="outdoors-overlay"&&this.#e.map?this.#e.map?.getPitch():U.radToDeg(this.#n.cameraSystem.getTilt())}setPitch(e){if(this.#e.mode==="outdoors-overlay"&&this.#e.map){this.#e.map?.setPitch(e);return}this.#n.cameraSystem.setTilt(U.degToRad(Ve(e,this.minPitch,this.maxPitch,"pitch was clamped to minPitch/maxPitch bounds. Use mapView.Camera.setMinPitch() and mapView.Camera.setMaxPitch() to adjust limits.")))}get elevation(){return this.#n.cameraSystem.getPedestal()}get maxElevation(){return this.#n.cameraSystem.maxPedestal}setMaxElevation(e){this.#n.cameraSystem.maxPedestal=e,this.elevation>e&&this.setElevation(e)}setElevation(e){let t=Ve(e,-1/0,this.maxElevation,"elevation was clamped to maxElevation. Use mapView.Camera.setMaxElevation() to adjust the limit.");this.#n.cameraSystem.setPedestal(t,!0)}#s;animateElevation(e,t){this.#s&&this.#s.stop();let r=Ve(e,-1/0,this.maxElevation,"animateElevation was clamped to maxElevation. Use mapView.Camera.setMaxElevation() to adjust the limit.");return new Promise(o=>{this.#n.cameraSystem.animateCamera({position:{z:r}},t?.duration||300,ai[t?.easing||"ease-in-out"],o,o,{interruptible:t?.interruptible??!0})})}get insetsPadding(){return this.#i.insetsPadding}get panMode(){return this.#n.cameraSystem.enablePan===!1&&this.#n.cameraSystem.enablePedestal===!0?"elevation":"default"}setPanMode(e){if(e!=="default"&&e!=="elevation")throw new Error("Invalid pan mode");e!==this.panMode&&(e==="default"?(this.#n.cameraSystem.enablePan=!0,this.#n.cameraSystem.enablePedestal=!1):(this.#n.cameraSystem.enablePan=!1,this.#n.cameraSystem.enablePedestal=!0))}setInsetPadding(e){let t=this.#i.insetsPadding;Object.keys(e).every(r=>e[r]===t[r])||(this.#i.insetsPadding=Object.assign({},t,e),this.publish("padding-change",{padding:this.#i.insetsPadding}))}animateTo(e){let t=e.center?this.#e.convertTo3DMapPosition(e.center[1],e.center[0],e.center[2]||this.elevation):void 0;if(t&&this.#o.setAnimateToPosition(t),this.#e.mode==="outdoors-overlay"&&this.#e.map)return this.#e.map?.flyTo({center:e.center??this.center,zoom:e.zoomLevel??this.zoomLevel,bearing:e.bearing??this.bearing,pitch:e.pitch??this.pitch,duration:e.duration??600}),Promise.resolve();let r=e.zoomLevel!==void 0?this.#n.cameraSystem.convertZoomLevelToAltitude(Ve(e.zoomLevel,this.minZoomLevel,this.maxZoomLevel,"zoomLevel was clamped to minZoomLevel/maxZoomLevel bounds. Use mapView.Camera.setMinZoomLevel() and mapView.Camera.setMaxZoomLevel() to adjust limits.")):void 0,o=e.bearing!==void 0?U.degToRad(e.bearing):void 0,i=e.pitch!==void 0?U.degToRad(Ve(e.pitch,this.minPitch,this.maxPitch,"pitch was clamped to minPitch/maxPitch bounds. Use mapView.Camera.setMinPitch() and mapView.Camera.setMaxPitch() to adjust limits.")):void 0;return new Promise(s=>{this.#n.cameraSystem.animateCamera({position:t,zoom:r,rotation:o,tilt:i},e.duration||0,ai[e.easing||"ease-in-out"],()=>{this.#n.interactionSystem.handleHover(),s()},s,{interruptible:e?.interruptible??!0})})}getCameraFrameForCoordinates(e,t){let r=this.#a(t||{},()=>Promise.resolve()),{pointCloud:o}=Wu(e,this.#e,this.#i.geometry3DMap);if(o.length===0)return R.error("No valid coordinates found in targets:",e),{center:this.center,zoomLevel:this.zoomLevel};this.#o.setGetFocusOnTransformPointCloud(o,t?.debugKey,t?.debugColor);let{center:i,zoomLevel:s}=this.#n.cameraSystem.getCameraFrameForCoordinates(o,r);return{center:this.#e.convert3DMapPositionToCoordinate(i),zoomLevel:s}}#a(e,t){return{minZoom:e?.maxZoomLevel===void 0?void 0:this.#n.cameraSystem.convertZoomLevelToAltitude(Ve(e.maxZoomLevel,this.minZoomLevel,this.maxZoomLevel,"maxZoomLevel was clamped to minZoomLevel/maxZoomLevel bounds. Use mapView.Camera.setMaxZoomLevel() to adjust limits.")),maxZoom:e?.minZoomLevel===void 0?void 0:this.#n.cameraSystem.convertZoomLevelToAltitude(Ve(e.minZoomLevel,this.minZoomLevel,this.maxZoomLevel,"minZoomLevel was clamped to minZoomLevel/maxZoomLevel bounds. Use mapView.Camera.setMinZoomLevel() to adjust limits.")),padding:e?.padding?Object.assign({},Po,e?.padding):this.insetsPadding,curve:ai[e?.easing||"ease-in-out"],rotation:e?.bearing===void 0?void 0:U.degToRad(e.bearing),tilt:e?.pitch!==void 0?U.degToRad(Ve(e.pitch,this.minPitch,this.maxPitch,"pitch was clamped to minPitch/maxPitch bounds. Use mapView.Camera.setMinPitch() and mapView.Camera.setMaxPitch() to adjust limits.")):void 0,duration:e?.duration,callback:()=>{this.#n.interactionSystem.handleHover(),t()},cancelledCallback:t,interruptible:e?.interruptible??!0,verticalPadding:e?.verticalPadding}}focusOn(e,t){let{pointCloud:r,geoBounds:o,firstPosition:i}=Wu(e,this.#e,this.#i.geometry3DMap);return r.length===0?(R.error("No valid coordinates found in targets:",e),Promise.resolve()):(this.#o.setFocusOnPointCloud(r,t?.debugKey,t?.debugColor),this.#e.mode==="outdoors-overlay"&&this.#e.map?(r.length===1&&i?this.#e.map?.flyTo({center:[i[0],i[1]],duration:t?.duration||this.#e.map.getBearing(),animate:!0,bearing:t?.bearing===void 0?this.#e.map.getBearing():t?.bearing,pitch:t?.pitch===void 0?this.#e.map.getPitch():t?.pitch,zoom:t?.maxZoomLevel||this.#e.map.getMaxZoom()}):(Pm&&Om(this.#e,o),this.#e.map?.fitBounds(o,{duration:t?.duration??rt.DEFAULT_ANIMATION_DURATION,bearing:t?.bearing===void 0?this.#e.map.getBearing():t?.bearing,pitch:t?.pitch===void 0?this.#e.map.getPitch():t?.pitch,maxZoom:t?.maxZoomLevel??this.#e.map.getMaxZoom()})),this.#n.interactionSystem.handleHover(),Promise.resolve()):new Promise(s=>{this.#n.cameraSystem.focusOn(r,this.#a(t||{},s))}))}showCameraTargetsDebug(){this.#o.showCameraTargets()}hideCameraTargetsDebug(){this.#o.hideCameraTargets()}showFocusOnDebug(e){this.#o.showFocusOnDebug(e)}hideFocusOnDebug(){this.#o.hideFocusOnDebug()}showScreenOffsetsDebug(){this.#o.showScreenOffsets()}hideScreenOffsetsDebug(){this.#o.hideScreenOffsets()}destroy(){this.#o.destroy(),super.destroy()}};function va(n,e){n[0]=Math.min(n[0],e[0]),n[1]=Math.min(n[1],e[1]),n[2]=Math.max(n[2],e[0]),n[3]=Math.max(n[3],e[1])}function Wu(n,e,t){let r=[],o=[1/0,1/0,-1/0,-1/0],i=null;if(!n||!Array.isArray(n)||n.length===0)return{pointCloud:r,geoBounds:o,firstPosition:i};let s=e.getSystems().renderSystem;for(let a of n)if(typeof a=="string"){(s.threeDdirty||s.twoDdirty)&&e.renderSync();let l=t.get(a);if(!l){R.error("Entity not found with id:",a);continue}let c=new ce;Ic(e,"userData"in l?l.userData.entityId??l.id:l.id,r,c,l instanceof ie?l.position.z:void 0);let u=e.convert3DMapPositionToCoordinate(c.min),d=e.convert3DMapPositionToCoordinate(c.max);va(o,u),va(o,d),i||(i=e.convert3DMapPositionToCoordinate(c.getCenter(new O)))}else r.push(e.convertTo3DMapPosition(a[1],a[0],a[2]||0)),va(o,a),i||(i=a);return{pointCloud:r,geoBounds:o,firstPosition:i}}function Om(n,e){let t=[[e[0],e[1]],[e[0],e[3]],[e[2],e[3]],[e[2],e[1]],[e[0],e[1]]];n.map?.getLayer("bounds-outline")&&n.map.removeLayer("bounds-outline"),n.map?.getSource("bounds-source")&&n.map.removeSource("bounds-source"),n.map?.addSource("bounds-source",{type:"geojson",data:{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:t}}}),n.map?.addLayer({id:"bounds-outline",type:"line",source:"bounds-source",layout:{},paint:{"line-color":"#FF0000","line-width":2,"line-opacity":.8}})}f();f();var ju=`uniform vec4 uSize;
|
|
8
|
-
varying vec2 vUv;
|
|
9
|
-
void main() {
|
|
10
|
-
vUv = uv;
|
|
11
|
-
// Scale the position by the size of the quad
|
|
12
|
-
// and shift to top left corner for 0,0
|
|
13
|
-
vec2 transformed = position.xy * uSize.xy - vec2(1.0, -1.0);
|
|
14
|
-
// Apply width .x and height .y of image
|
|
15
|
-
transformed += vec2(uSize.x, -uSize.y);
|
|
16
|
-
// Apply left .w and top .z offset
|
|
17
|
-
transformed += vec2(uSize.w, -uSize.z) * 2.0;
|
|
18
|
-
gl_Position = vec4(transformed, 1.0, 1.0);
|
|
19
|
-
}`;f();var Zu=`varying vec2 vUv;
|
|
20
|
-
uniform sampler2D uTexture;
|
|
21
|
-
uniform float uOpacity;
|
|
22
|
-
void main() {
|
|
23
|
-
#ifndef debug
|
|
24
|
-
vec4 texture = texture2D(uTexture, vUv);
|
|
25
|
-
gl_FragColor = vec4(texture.rgb, texture.a * uOpacity);
|
|
26
|
-
#else
|
|
27
|
-
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
|
|
28
|
-
#endif
|
|
29
|
-
}`;f();var Xu=4.291666666666667,Yu=15,$u=25,qu=43/60;f();var Ju=["horizontal","icon"],Lm=new Map([[Ju[0],`<svg viewBox="0 0 206 48">
|
|
30
|
-
<path d="M27.2678 14.2261H22.3187C21.0695 14.2261 20.4695 14.7801 20.4695 15.9852V31.142L10.3966 15.5591C9.69665 14.4784 9.2475 14.2773 7.8475 14.2261H2.97462C1.67462 14.2261 1.07631 14.7801 1.07631 15.9852V44.7665C1.07631 45.9716 1.67462 46.5256 2.97462 46.5256H7.92377C9.22207 46.5256 9.82207 45.9716 9.82207 44.7665V29.6847L19.9441 45.1926C20.695 46.3244 21.095 46.5256 22.4933 46.5256H27.2933C28.5916 46.5256 29.1916 45.9716 29.1916 44.7665V15.9852C29.1407 14.7801 28.5424 14.2261 27.2678 14.2261Z"/>
|
|
31
|
-
<path d="M5.44915 10.9602C8.45863 10.9602 10.8983 8.50669 10.8983 5.48011C10.8983 2.45353 8.45863 0 5.44915 0C2.43967 0 0 2.45353 0 5.48011C0 8.50669 2.43967 10.9602 5.44915 10.9602Z"/>
|
|
32
|
-
<path d="M61.7899 25.0449C63.2306 23.1903 65.078 22.2051 67.556 22.2051C72.0526 22.2051 74.7611 25.3347 74.7611 29.4511V39.2489C74.8187 39.7125 74.5306 39.9443 74.0695 39.9443H72.5136C72.0526 39.9443 71.7645 39.7125 71.8221 39.2489V29.5091C71.8221 27.1909 69.9187 25.2187 67.4984 25.2187C65.1339 25.2187 63.2323 27.1329 63.2323 29.2773V39.2489C63.2899 39.7125 63.0018 39.9443 62.5407 39.9443H60.9831C60.5221 39.9443 60.2916 39.7125 60.2916 39.2489V29.4511C60.2916 27.1329 58.3899 25.2187 56.0255 25.2187C53.7204 25.2187 51.7594 27.075 51.7594 29.2773V39.3068C51.817 39.7705 51.5289 40.0023 51.0102 40.0023H49.5119C49.0509 40.0023 48.7628 39.7705 48.7628 39.3068V23.25C48.7051 22.7864 48.9933 22.4966 49.5119 22.4966H50.9526C51.356 22.4966 51.5289 22.6704 51.5289 23.0182V24.2352C52.7407 22.9602 54.239 22.2648 56.0255 22.2648C58.4475 22.2068 60.3492 23.192 61.7899 25.0466V25.0449ZM77.1255 31.2477C77.1255 26.3216 81.1018 22.2051 86.1187 22.2051C88.539 22.2051 90.6136 23.1903 92.3441 25.1608V23.1903C92.3441 22.7267 92.5746 22.5528 93.0357 22.5528H94.4187C94.8797 22.5528 95.1102 22.7847 95.1102 23.3062V39.3648C95.1102 39.8284 94.8797 40.0602 94.4187 40.0602H93.0357C92.5746 40.0602 92.3441 39.8284 92.3441 39.4227V37.4523C90.6712 39.3648 88.5967 40.35 86.1746 40.35C81.1018 40.2341 77.1238 36.1773 77.1238 31.2477H77.1255ZM92.1136 31.2477C92.1136 27.8284 89.4611 25.2187 86.0594 25.2187C82.7746 25.2187 80.1221 27.8864 80.1221 31.2477C80.1221 34.6687 82.7746 37.2784 86.1187 37.2784C86.9062 37.2789 87.6861 37.1232 88.4138 36.8202C89.1414 36.5173 89.8026 36.0731 90.3593 35.513C90.9161 34.9528 91.3577 34.2878 91.6587 33.556C91.9597 32.8241 92.1143 32.0397 92.1136 31.2477ZM100.992 37.3943V46.3807C101.049 46.8443 100.761 47.1341 100.298 47.1341H98.7424C98.2814 47.1341 97.9933 46.9023 97.9933 46.3807V23.1903C97.9933 22.7267 98.2238 22.4369 98.7424 22.4369H100.183C100.646 22.379 100.934 22.6687 100.934 23.0744V24.9869C102.605 23.0744 104.68 22.1472 107.044 22.1472C112.002 22.1472 116.037 26.2619 116.037 31.1898C116.037 36.1176 112.059 40.2341 107.044 40.2341C104.622 40.2341 102.603 39.3068 100.992 37.3943ZM106.987 25.2187C103.7 25.2187 101.049 27.8864 101.049 31.2477C101.049 34.6687 103.7 37.2784 107.044 37.2784C110.446 37.2784 113.039 34.6108 113.039 31.2477C113.039 27.8864 110.388 25.2187 106.987 25.2187ZM121.11 37.3943V46.3807C121.168 46.8443 120.88 47.1341 120.419 47.1341H118.861C118.4 47.1341 118.112 46.9023 118.112 46.3807V23.1903C118.112 22.7267 118.342 22.4369 118.861 22.4369H120.302C120.764 22.379 121.053 22.6687 121.053 23.0744V24.9869C122.724 23.0744 124.798 22.1472 127.163 22.1472C132.12 22.1472 136.156 26.2619 136.156 31.1898C136.156 36.1176 132.178 40.2341 127.163 40.2341C124.742 40.2341 122.781 39.3068 121.11 37.3943ZM127.105 25.2187C123.819 25.2187 121.168 27.8864 121.168 31.2477C121.168 34.6687 123.819 37.2784 127.163 37.2784C130.564 37.2784 133.158 34.6108 133.158 31.2477C133.158 27.8864 130.507 25.2187 127.107 25.2187H127.105ZM153.97 32.3506H141.054C141.342 35.2483 143.995 37.4523 147.164 37.4523C148.893 37.4523 150.393 37.0466 151.719 36.0597C152.007 35.8858 152.295 35.7699 152.353 35.7699C152.583 35.7699 152.756 35.8858 152.929 36.1773L153.505 37.1625C153.622 37.3364 153.68 37.4523 153.68 37.5682C153.68 37.8 153.507 38.0318 153.103 38.3216C151.258 39.5966 149.183 40.292 146.992 40.292C141.688 40.292 137.883 36.3511 137.883 31.2477C137.883 26.204 141.803 22.2051 146.703 22.2051C151.546 22.2051 154.717 25.7983 154.717 31.0176C154.717 31.5972 154.717 32.3506 153.968 32.3506H153.97ZM141.056 30.0324H151.72C151.432 26.8432 149.473 24.929 146.648 24.929C145.241 24.8904 143.875 25.3995 142.833 26.3501C141.791 27.3007 141.154 28.6194 141.056 30.0307V30.0324ZM156.332 31.2477C156.332 26.3216 160.31 22.2051 165.326 22.2051C167.748 22.2051 169.707 23.1324 171.32 25.0449V16.2324C171.263 15.7687 171.551 15.479 172.012 15.479H173.57C174.031 15.479 174.319 15.7108 174.319 16.2324V39.3068C174.319 39.7705 174.088 40.0023 173.57 40.0023H172.129C171.666 40.0602 171.378 39.7705 171.378 39.3648V37.3943C169.649 39.3068 167.632 40.292 165.268 40.292C160.31 40.2341 156.332 36.1773 156.332 31.2477ZM171.264 31.2477C171.264 27.8284 168.612 25.2187 165.21 25.2187C161.924 25.2187 159.273 27.8864 159.273 31.2477C159.273 34.6687 161.924 37.2784 165.268 37.2784C166.057 37.2838 166.839 37.1316 167.569 36.8304C168.299 36.5292 168.962 36.0852 169.52 35.5241C170.077 34.963 170.519 34.296 170.818 33.5619C171.117 32.8277 171.268 32.0411 171.263 31.2477H171.264ZM177.72 19.0739C177.715 18.8594 177.754 18.646 177.833 18.4468C177.912 18.2476 178.031 18.0667 178.182 17.915C178.333 17.7633 178.512 17.6439 178.71 17.5642C178.909 17.4845 179.121 17.446 179.334 17.4511C179.546 17.4507 179.756 17.4923 179.952 17.5737C180.148 17.6551 180.326 17.7746 180.476 17.9254C180.626 18.0762 180.745 18.2553 180.826 18.4523C180.907 18.6494 180.948 18.8606 180.948 19.0739C180.953 19.2884 180.914 19.5017 180.835 19.7009C180.756 19.9001 180.637 20.081 180.486 20.2327C180.335 20.3845 180.156 20.5038 179.957 20.5835C179.759 20.6633 179.547 20.7017 179.334 20.6966C178.412 20.7545 177.72 20.0591 177.72 19.0739ZM177.836 39.2489V23.1903C177.836 22.7267 178.066 22.4369 178.527 22.4369H180.083C180.544 22.4369 180.832 22.6687 180.775 23.1903V39.2489C180.832 39.7125 180.544 39.9443 180.083 39.9443H178.527C178.066 39.9443 177.836 39.7125 177.836 39.2489ZM186.944 23.0165V24.1756C188.212 22.8426 189.71 22.2051 191.497 22.2051C195.937 22.2051 198.646 25.2767 198.646 29.3932V39.2489C198.703 39.7125 198.415 39.9443 197.954 39.9443H196.398C195.936 39.9443 195.705 39.7125 195.705 39.2489V29.4511C195.705 27.1329 193.803 25.2187 191.439 25.2187C189.134 25.2187 187.175 27.075 187.175 29.2773V39.3068C187.232 39.7705 186.944 40.0023 186.424 40.0023H184.868C184.407 40.0023 184.119 39.7705 184.119 39.3068V23.1903C184.061 22.7267 184.349 22.4949 184.868 22.4949H186.309C186.712 22.4949 186.944 22.6687 186.944 23.0165Z"/>
|
|
33
|
-
<path d="M204 40C205.115 40 206 39.0857 206 38V37.9886C206 36.9029 205.126 36 204 36C202.885 36 202 36.9143 202 38V38.0114C202 39.0971 202.874 40 204 40ZM204 39.7829C202.989 39.7829 202.23 38.9829 202.23 38.0114V38C202.23 37.0286 203 36.2171 204 36.2171C205.011 36.2171 205.77 37.0171 205.77 37.9886V38C205.77 38.9714 205 39.7829 204 39.7829ZM203.218 38.9714H203.609V38.2743H204.034L204.517 38.9714H204.989L204.448 38.2057C204.724 38.1257 204.92 37.92 204.92 37.5886C204.92 37.1657 204.586 36.9486 204.138 36.9486H203.218V38.9714ZM203.609 37.9543V37.2914H204.103C204.368 37.2914 204.517 37.4057 204.517 37.6229C204.517 37.8171 204.368 37.9543 204.103 37.9543H203.609Z"/>
|
|
34
|
-
</svg>`],[Ju[1],`<svg viewBox="0 0 43 60">
|
|
35
|
-
<path d="M14.0291 7.06645C14.0291 10.9691 10.8885 14.1329 7.01453 14.1329C3.14051 14.1329 0 10.9691 0 7.06645C0 3.16376 3.14051 0 7.01453 0C10.8885 0 14.0291 3.16376 14.0291 7.06645Z"/>
|
|
36
|
-
<path d="M28.7335 18.3468H35.1045C36.7455 18.3468 37.5178 19.0599 37.5821 20.6158V57.7309C37.5821 59.2868 36.8099 60 35.1367 60H28.9588C27.1569 60 26.642 59.7406 25.6767 58.282L12.6452 38.282V57.7309C12.6452 59.2868 11.8729 60 10.1997 60H3.82873C2.15554 60 1.3833 59.2868 1.3833 57.7309V20.6158C1.3833 19.0599 2.15554 18.3468 3.82873 18.3468H10.1032C11.9051 18.4116 12.4843 18.671 13.3852 20.0648L26.3524 40.162V20.6158C26.3524 19.0599 27.1247 18.3468 28.7335 18.3468Z"/>
|
|
37
|
-
<path d="M41.5 60C42.3362 60 43 59.3143 43 58.5V58.4914C43 57.6771 42.3448 57 41.5 57C40.6638 57 40 57.6857 40 58.5V58.5086C40 59.3229 40.6552 60 41.5 60ZM41.5 59.8371C40.7414 59.8371 40.1724 59.2371 40.1724 58.5086V58.5C40.1724 57.7714 40.75 57.1629 41.5 57.1629C42.2586 57.1629 42.8276 57.7629 42.8276 58.4914V58.5C42.8276 59.2286 42.25 59.8371 41.5 59.8371ZM40.9138 59.2286H41.2069V58.7057H41.5259L41.8879 59.2286H42.2414L41.8362 58.6543C42.0431 58.5943 42.1897 58.44 42.1897 58.1914C42.1897 57.8743 41.9397 57.7114 41.6034 57.7114H40.9138V59.2286ZM41.2069 58.4657V57.9686H41.5776C41.7759 57.9686 41.8879 58.0543 41.8879 58.2171C41.8879 58.3629 41.7759 58.4657 41.5776 58.4657H41.2069Z"/>
|
|
38
|
-
</svg>`]]),Am=/<svg([^>]*)>/g;function Ku(n,e,t,r){let o=Lm.get(n);return o?o.replace(Am,`<svg$1 width="${t}" height="${r}" xmlns="http://www.w3.org/2000/svg" fill="${e}">`):""}f();var xa=class n{static instance;loader;constructor(){this.loader=new Eo}static getInstance(){return n.instance||(n.instance=new n),n.instance}getLoader(){return this.loader}load(e){return new Promise((t,r)=>{this.loader.load(e,t,void 0,r)})}},jt=xa.getInstance();var Qu=!1,ci=class extends Z{#e={padding:16,scale:1,iconOnly:!1,position:"bottom-left",color:"dark",onClick:()=>{window?.open("https://www.mappedin.com")},interactive:!0,visible:!0};#n;#i;#o;#s=void 0;#a=void 0;#c=0;#d=0;dirty=!0;get color(){return this.#e.color==="light"?"white":"#293136"}get iconName(){return this.#e.iconOnly?"icon":"horizontal"}get minWidth(){return this.#e.iconOnly?Yu:75}get defaultWidth(){return this.#e.iconOnly?$u:150}get aspectRatio(){return this.#e.iconOnly?qu:Xu}get options(){return{...this.#e}}set options(e){this.#e={padding:e.padding||this.#e.padding,position:e.position||this.#e.position,iconOnly:e.iconOnly||this.#e.iconOnly,color:e.color||this.#e.color,scale:e.scale||this.#e.scale,onClick:this.#e.onClick,interactive:e.interactive??this.#e.interactive,visible:e.visible??this.#e.visible}}get icon(){return Ku(this.iconName,this.color,this.#c*this.#n.pixelRatio,this.#d*this.#n.pixelRatio)}constructor(e,t,r){super(),r&&Object.entries(r).forEach(([o,i])=>{i!==void 0&&(this.#e[o]=i)}),this.#i=e,this.#n=t}setSize(e,t){this.#s&&(this.#s.uniforms.uSize.value.x=e,this.#s.uniforms.uSize.value.y=t)}setXY(e,t){this.#s&&(this.#s.uniforms.uSize.value.w=e,this.#s.uniforms.uSize.value.z=t)}get width(){return this.#c}get height(){return this.#d}getPositionAlignedOffset(e,t){return{"top-left":{x:0,y:0},"top-right":{x:-e,y:0},"bottom-left":{x:0,y:-t},"bottom-right":{x:-e,y:-t},center:{x:-(e/2),y:-(t/2)},top:{x:-(e/2),y:0},bottom:{x:-(e/2),y:-t},left:{x:0,y:-(t/2)},right:{x:-e,y:-(t/2)}}[this.#e.position]}getPositionAlignedCanvasCoordinates=(e,t)=>({"top-left":{x:0,y:0},"top-right":{x:e,y:0},"bottom-left":{x:0,y:t},"bottom-right":{x:e,y:t},center:{x:e/2,y:t/2},top:{x:e/2,y:0},bottom:{x:e/2,y:t},left:{x:0,y:t/2},right:{x:e,y:t/2}})[this.#e.position];getPositionAlignedPadding=()=>{let e=this.#e.padding;if(typeof e=="number")return{"top-left":{x:e,y:e},"top-right":{x:-e,y:e},"bottom-left":{x:e,y:-e},"bottom-right":{x:-e,y:-e},center:{x:0,y:0},top:{x:0,y:e},bottom:{x:0,y:-e},left:{x:e,y:0},right:{x:-e,y:0}}[this.#e.position];let t={top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0};return{x:t.left-t.right,y:t.top-t.bottom}};insertIntoQuadTree(e){this.#a!=null&&typeof this.#e.onClick=="function"&&this.#e.interactive&&e.insert(this.#a)}resize(e,t){if(this.#e.visible!==!0)return;let r=this.getPositionAlignedCanvasCoordinates(e,t),o=this.getPositionAlignedPadding(),i=this.getPositionAlignedOffset(this.#c,this.#d),s=Math.min(e-this.#c,Math.max(0,r.x+o.x+i.x)),a=Math.min(t-this.#d,Math.max(0,r.y+o.y+i.y));this.setSize(this.#c/e,this.#d/t),this.setXY(s/e,a/t),this.#a=new Ut(s,a,this.#c,this.#d,{entityId:"watermark"})}update(){this.dirty&&(this.#e.visible===!0?(this.#c=Math.min(this.#n.canvasWidth,Math.max(this.minWidth,this.defaultWidth*this.#e.scale)),this.#d=this.#c/this.aspectRatio,jt.getLoader().load(`data:image/svg+xml;base64,${btoa(this.icon)}`,e=>{if(this.#s=new $e({uniforms:{uTexture:{value:e},uSize:{value:new ec(0,0,0,0)},uOpacity:{value:.7}},vertexShader:ju,fragmentShader:Zu,depthWrite:!1,depthTest:!1,defines:{debug:Qu},wireframe:Qu,transparent:!0,visible:!0}),this.#o)this.#o.visible=!0,this.#o.material=this.#s,this.#o.material.needsUpdate=!0;else{let t=new Ie(2,2,1,1);this.#o=new W(t,this.#s),this.#o.position.set(0,0,-1),this.#o.frustumCulled=!1,this.#o.renderOrder=999;let r=new Bt(1,1,1),o=new W(r,new Me({transparent:!0,opacity:0,depthTest:!1,depthWrite:!1}));o.frustumCulled=!1,o.layers.set(1),this.#o.add(o),this.#i.add(this.#o)}this.resize(this.#n.canvasWidth,this.#n.canvasHeight),this.publish("texture-loaded")})):this.#o&&(this.#o.visible=!1),this.dirty=!1)}destroy(){this.#o&&(this.#i.remove(this.#o),ve(this.#o)),this.#o=void 0,this.#s&&this.#s.dispose(),this.#s=void 0,this.#a=void 0}};f();var ui=100,Fm=!1,hi=class extends Z{currentTotalBoundingBox;state;cameraSystem;debugMesh=null;dirty=!0;autoMinZoomLevel=!0;constructor(e,t){super(),this.state=e,this.cameraSystem=t}expandBoundsIfOutside(e){if(this.currentTotalBoundingBox==null){this.dirty=!0;return}this.currentTotalBoundingBox.containsPoint(e)||(this.dirty=!0)}update(){if(this.dirty){this.currentTotalBoundingBox==null&&(this.currentTotalBoundingBox=new ce,this.state.geometryScene.children.length===0?this.currentTotalBoundingBox.setFromCenterAndSize(new O(0,0,0),new O(ui*2,ui*2,0)):(this.currentTotalBoundingBox.setFromObject(this.state.geometryScene),this.currentTotalBoundingBox.expandByScalar(ui)));let e=new ce().setFromObject(this.state.geometryScene);this.currentTotalBoundingBox.union(e);let t=e.getSize(new O),r=Math.max(t.x,t.y,t.z);for(let i of this.state.geometry2DMap.values())i.positionDirty===!0&&(this.currentTotalBoundingBox.expandByPoint(i.position),i.positionDirty=!1);let o=di.copy(this.currentTotalBoundingBox).expandByScalar(Math.max(r,ui)).getBoundingSphere(Nm).radius;if(this.cameraSystem.panBounds={center:this.currentTotalBoundingBox.getCenter(new O),min:di.min,max:di.max,radius:o},this.publish("update"),this.cameraSystem.dirty=!0,this.dirty=!1,Fm&&this.state.geometryScene.parent instanceof St){this.debugMesh&&(this.state.geometryScene.parent.remove(this.debugMesh),this.debugMesh=null),this.debugMesh=new Ge,this.debugMesh.add(new W(new Br(this.cameraSystem.panBounds.radius),new Me({color:16711680,transparent:!0,opacity:.2}))),this.debugMesh.position.copy(this.cameraSystem.panBounds.center),this.state.geometryScene.parent.add(this.debugMesh);let i=new O;di.getSize(i);let s=new Bt(i.x,i.y,i.z),a=new Me({color:65280,wireframe:!0,transparent:!0,opacity:.5}),l=new W(s,a);l.position.copy(this.currentTotalBoundingBox.getCenter(new O)),this.debugMesh.add(l)}}}},di=new ce,Nm=new tc;f();var Sa="\xA9 Mappedin",Bm="https://info.mappedin.com/feedback",Ca=["top-left","top-right","bottom-left","bottom-right"],Gm=640,km=()=>`<svg xmlns='http://www.w3.org/2000/svg' width='15' height='15' fill-rule='evenodd' viewBox='0 0 20 20'>
|
|
39
|
-
<circle cx='10' cy='10' r='5.9' fill='rgba(255,255,255,1)'/>
|
|
40
|
-
<path fill='rgba(0,0,0,0.7)' d='M4 10a6 6 0 1 0 12 0 6 6 0 1 0-12 0m5-3a1 1 0 1 0 2 0 1 1 0 1 0-2 0m0 3a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0'/>
|
|
41
|
-
</svg>`,Ma={custom:[],position:"bottom-right",feedback:!0},pi=class{controlContainerEl;controlPositions;compact=void 0;#e;attribContainerEl;attribInnerEl;attribButtonEl;feedbackLinkEl;attribHTML=Sa;customAttributions=[];constructor(e,t={}){this.#e=!!t.outdoorEnabled,this.controlContainerEl=document.createElement("div"),this.controlContainerEl.classList.add("mappedin-control-container"),this.controlContainerEl.style.zIndex="2",e.appendChild(this.controlContainerEl),this.controlPositions=Ca.reduce((r,o)=>{let i=document.createElement("div");return i.classList.add(`mappedin-ctrl-${o}`),this.controlContainerEl.appendChild(i),r[o]=i,r},{})}addAttributionControl(e=Ma){let t=e.position&&Ca.includes(e.position)?e.position:Ma.position;this.attribContainerEl=document.createElement("details"),this.attribContainerEl.classList.add("mappedin-ctrl-attrib",`mappedin-ctrl-attrib-${t}`),this.attribContainerEl.open=!0,this.attribContainerEl.ariaLabel="Attribution",this.controlPositions[t].appendChild(this.attribContainerEl),this.attribButtonEl=document.createElement("summary"),this.attribButtonEl.addEventListener("click",this.toggleAttribution),this.attribButtonEl.classList.add("mappedin-ctrl-attrib-button"),this.attribButtonEl.title="Toggle attribution",this.attribButtonEl.ariaLabel="Toggle attribution",this.attribButtonEl.tabIndex=0,this.attribButtonEl.innerHTML=km(),this.attribContainerEl.appendChild(this.attribButtonEl),this.attribInnerEl=document.createElement("div"),this.attribInnerEl.classList.add("mappedin-ctrl-attrib-inner"),this.attribHTML=this.#e?Sa:"",this.attribInnerEl.innerHTML=this.attribHTML,this.attribContainerEl.appendChild(this.attribInnerEl),(e.feedback??Ma.feedback)&&(this.feedbackLinkEl=document.createElement("a"),this.feedbackLinkEl.href=Bm,this.feedbackLinkEl.target="_blank",this.feedbackLinkEl.rel="noopener",this.feedbackLinkEl.textContent="Provide Feedback",this.feedbackLinkEl.classList.add("mappedin-ctrl-attrib-inner"),this.feedbackLinkEl.classList.add("mappedin-ctrl-attrib-inner-bold"),this.attribContainerEl.appendChild(this.feedbackLinkEl)),e.custom&&(this.customAttributions=e.custom),this.updateAttributionDisplay()}toggleAttribution=e=>{this.attribContainerEl!=null&&(e.preventDefault(),this.attribContainerEl.classList.contains("mappedin-compact")&&(this.attribContainerEl.classList.contains("mappedin-compact-show")?(this.attribContainerEl.removeAttribute("open"),this.attribContainerEl.classList.remove("mappedin-compact-show")):(this.attribContainerEl.classList.add("mappedin-compact-show"),this.attribContainerEl.setAttribute("open",""))))};updateAttribution(e){if(!e.style||!this.attribInnerEl||!this.attribContainerEl)return;let t=this.#e?[Sa]:[],r=e.style.sourceCaches;for(let o in r){let i=r[o];if(i.used||i.usedForTerrain){let s=i.getSource();s.attribution&&t.indexOf(s.attribution)<0&&t.push(s.attribution)}}t=t.filter(o=>String(o).trim()),t=t.filter((o,i)=>{for(let s=i+1;s<t.length;s++)if(t[s].indexOf(o)>=0)return!1;return!0}),this.attribHTML=t.join(" "),this.updateAttributionDisplay()}updateAttributionDisplay(){let e=[...new Set([this.attribHTML,...this.customAttributions])].filter(Boolean).join(" ");this.attribInnerEl&&(this.attribInnerEl.innerHTML=e)}resizeAttribution(e){this.attribContainerEl&&(e<=Gm||this.compact?this.compact===!1?this.attribContainerEl.setAttribute("open",""):!this.attribContainerEl.classList.contains("mappedin-compact")&&!this.attribContainerEl.classList.contains("mappedin-attrib-empty")&&(this.attribContainerEl.setAttribute("open",""),this.attribContainerEl.classList.add("mappedin-compact","mappedin-compact-show")):(this.attribContainerEl.setAttribute("open",""),this.attribContainerEl.classList.contains("mappedin-compact")&&this.attribContainerEl.classList.remove("mappedin-compact","mappedin-compact-show")))}destroyAttributionControl(){this.attribButtonEl&&this.attribButtonEl.removeEventListener("click",this.toggleAttribution),this.attribContainerEl&&(this.attribContainerEl.remove(),this.attribContainerEl=void 0,this.attribInnerEl=void 0,this.attribButtonEl=void 0)}resize(e){this.resizeAttribution(e)}updateData(e){this.updateAttribution(e)}destroy(){this.destroyAttributionControl(),this.controlContainerEl.remove(),this.compact=void 0}};f();var Zr=class{mesh;type="custom-geometry";dirty=!0;feature;builder;outline;constructor(e,t){this.mesh=new He,this.feature=e,this.builder=t}get visible(){return this.mesh.visible}set visible(e){this.mesh.visible=e}#e=1;set opacity(e){this.#e=e}get opacity(){return this.#e}color=new k;setColor(e){this.color.set(e)}get position(){return this.mesh?.position}#n=0;get altitude(){return this.#n}set altitude(e){this.mesh&&(this.mesh.position.z=e,this.#n=e)}get renderOrder(){return this.mesh?this.mesh.renderOrder:0}set renderOrder(e){this.mesh&&(this.mesh.renderOrder=e)}};f();var mi=class{state;convertTo3DMapPosition;constructor(e,t){this.state=e,this.convertTo3DMapPosition=t}update(){let e,t;for(let r of this.state.geometry3DsInScene)r?.type==="custom-geometry"&&(e=r.components[0],t=r.components[1],e.dirty&&t.visible!==!1&&(e.position.copy(this.convertTo3DMapPosition(e.feature.geometry.coordinates[1],e.feature.geometry.coordinates[0],t.altitude)),e.builder.setup(e.mesh),e.mesh.traverse(o=>{o.userData={...o.userData,entityId:r.id,type:"custom-geometry"}}),e.dirty=!1),t.visible!==!1&&e.builder.update(e.mesh))}};f();f();function In(n){return n.children.some(e=>e.userData.isOutline)}function ed(n){return n.children.find(e=>e.userData.isOutline)}function On(n,e){let t=n.userData.entities3D.values().next().value;return t?e.geometry3DMap.get(t)?.components[3]!==void 0:!1}function td(n,e,t,r,o){let s=n.getAttribute("position").array,a=1/0,l=-1/0;for(let u=0;u<e.count;u++){let h=(e.start+u)*3,g=s[h+2];a=Math.min(a,g),l=Math.max(l,g)}let c=l-a;if(!o||o.thickness===0||c===0)for(let u=0;u<e.count;u++){let h=(e.start+u)*3,g=s[h+2];Math.abs(g-l)<1e-4?s[h+2]=Math.max(t+r,2e-4+r):s[h+2]=r}else{let u=o.thickness,d=a+u,h=a+u,g=l-u,b=l-u,M=r-u,p=r,m=r,y=r+t,v=r+t,x=r+t+u;for(let S=0;S<e.count;S++){let D=(e.start+S)*3,E=s[D+2],T;if(E<=d){let P=u>0?(E-a)/u:0;T=M+P*(p-M)}else if(E>=b){let P=u>0?(E-b)/u:0;T=v+P*(x-v)}else{let P=g-h,I=P>0?(E-h)/P:0;T=m+I*(y-m)}s[D+2]=T}}n.attributes.position.needsUpdate=!0}f();f();var rd=`// Modified from https://github.com/mrdoob/three.js/blob/dev/src/renderers/shaders/ShaderLib/linedashed.glsl.js
|
|
42
|
-
uniform float scale;
|
|
43
|
-
attribute float lineDistance;
|
|
44
|
-
|
|
45
|
-
varying float vLineDistance;
|
|
46
|
-
attribute float visibility;
|
|
47
|
-
varying vec4 v_color;
|
|
48
|
-
varying vec4 vWorldPosition;
|
|
49
|
-
|
|
50
|
-
#include <common>
|
|
51
|
-
#include <uv_pars_vertex>
|
|
52
|
-
#include <color_pars_vertex>
|
|
53
|
-
#include <fog_pars_vertex>
|
|
54
|
-
#include <morphtarget_pars_vertex>
|
|
55
|
-
#include <logdepthbuf_pars_vertex>
|
|
56
|
-
#include <clipping_planes_pars_vertex>
|
|
57
|
-
|
|
58
|
-
void main() {
|
|
59
|
-
|
|
60
|
-
vLineDistance = scale * lineDistance;
|
|
61
|
-
v_color = color;
|
|
62
|
-
|
|
63
|
-
#include <uv_vertex>
|
|
64
|
-
#include <color_vertex>
|
|
65
|
-
#include <morphinstance_vertex>
|
|
66
|
-
#include <morphcolor_vertex>
|
|
67
|
-
#include <begin_vertex>
|
|
68
|
-
#include <morphtarget_vertex>
|
|
69
|
-
#include <project_vertex>
|
|
70
|
-
vWorldPosition = modelMatrix * vec4(transformed, 1.0);
|
|
71
|
-
if (visibility < 0.5) {
|
|
72
|
-
gl_Position = vec4(-2.0, -2.0, -2.0, 1.0);
|
|
73
|
-
}
|
|
74
|
-
#include <logdepthbuf_vertex>
|
|
75
|
-
#include <clipping_planes_vertex>
|
|
76
|
-
#include <fog_vertex>
|
|
77
|
-
|
|
78
|
-
}`;f();var nd=`// Modified from https://github.com/mrdoob/three.js/blob/dev/src/renderers/shaders/ShaderLib/linedashed.glsl.js
|
|
79
|
-
uniform vec3 diffuse;
|
|
80
|
-
uniform float opacity;
|
|
81
|
-
|
|
82
|
-
uniform float dashSize;
|
|
83
|
-
uniform float totalSize;
|
|
84
|
-
|
|
85
|
-
uniform float effectStart;
|
|
86
|
-
uniform float effectDistance;
|
|
87
|
-
uniform float darkenAmount;
|
|
88
|
-
uniform float darkenUseDepth;
|
|
89
|
-
uniform float desaturateAmount;
|
|
90
|
-
uniform float desaturateUseDepth;
|
|
91
|
-
uniform float washOutAmount;
|
|
92
|
-
uniform float washOutUseDepth;
|
|
93
|
-
|
|
94
|
-
varying float vLineDistance;
|
|
95
|
-
varying vec4 v_color;
|
|
96
|
-
varying vec4 vWorldPosition;
|
|
97
|
-
|
|
98
|
-
#include <common>
|
|
99
|
-
#include <color_pars_fragment>
|
|
100
|
-
#include <uv_pars_fragment>
|
|
101
|
-
#include <map_pars_fragment>
|
|
102
|
-
#include <fog_pars_fragment>
|
|
103
|
-
#include <logdepthbuf_pars_fragment>
|
|
104
|
-
#include <clipping_planes_pars_fragment>
|
|
105
|
-
|
|
106
|
-
void main() {
|
|
107
|
-
|
|
108
|
-
vec4 diffuseColor = vec4( diffuse, opacity );
|
|
109
|
-
#include <clipping_planes_fragment>
|
|
110
|
-
|
|
111
|
-
if ( mod( vLineDistance, totalSize ) > dashSize ) {
|
|
112
|
-
|
|
113
|
-
discard;
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
vec3 outgoingLight = vec3( 0.0 );
|
|
118
|
-
|
|
119
|
-
#include <logdepthbuf_fragment>
|
|
120
|
-
#include <map_fragment>
|
|
121
|
-
#include <color_fragment>
|
|
122
|
-
|
|
123
|
-
outgoingLight = diffuseColor.rgb; // simple shader
|
|
124
|
-
|
|
125
|
-
#include <opaque_fragment>
|
|
126
|
-
#include <tonemapping_fragment>
|
|
127
|
-
#include <colorspace_fragment>
|
|
128
|
-
#include <fog_fragment>
|
|
129
|
-
#include <premultiplied_alpha_fragment>
|
|
130
|
-
|
|
131
|
-
// Depth-based visual effects (mirrors batched-lambert-fragment-with-shadows.glsl)
|
|
132
|
-
if(effectDistance > 0.0) {
|
|
133
|
-
float t = clamp((effectStart - vWorldPosition.z) / effectDistance, 0.0, 1.0);
|
|
134
|
-
float fade = pow(t, 0.65) * 0.9;
|
|
135
|
-
|
|
136
|
-
// Desaturate towards grayscale
|
|
137
|
-
float luma = dot(gl_FragColor.rgb, vec3(0.299, 0.587, 0.114));
|
|
138
|
-
float dsFade = desaturateUseDepth > 0.5 ? fade : 1.0;
|
|
139
|
-
gl_FragColor.rgb = mix(gl_FragColor.rgb, vec3(luma), desaturateAmount * dsFade);
|
|
140
|
-
|
|
141
|
-
// Darken towards #333333
|
|
142
|
-
float dkFade = darkenUseDepth > 0.5 ? fade : 1.0;
|
|
143
|
-
gl_FragColor.rgb = mix(gl_FragColor.rgb, vec3(0.2), darkenAmount * dkFade);
|
|
144
|
-
|
|
145
|
-
// Wash out towards white
|
|
146
|
-
float woFade = washOutUseDepth > 0.5 ? fade : 1.0;
|
|
147
|
-
gl_FragColor.rgb = mix(gl_FragColor.rgb, vec3(1.0), washOutAmount * woFade);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// Discard alpha lower than 0.01 to avoid opacity fighting
|
|
151
|
-
if (v_color.a <= 0.01) {
|
|
152
|
-
discard;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
`;var Ln=class extends Rr{effectUniforms={effectStart:{value:0},effectDistance:{value:0},darkenAmount:{value:0},darkenUseDepth:{value:1},desaturateAmount:{value:0},desaturateUseDepth:{value:1},washOutAmount:{value:0},washOutUseDepth:{value:0}};constructor(e){super(e),this.onBeforeCompile=t=>{t.vertexShader=rd,t.fragmentShader=nd;let r=this.effectUniforms.effectStart,o=this.effectUniforms.effectDistance,i=this.effectUniforms.darkenAmount,s=this.effectUniforms.darkenUseDepth,a=this.effectUniforms.desaturateAmount,l=this.effectUniforms.desaturateUseDepth,c=this.effectUniforms.washOutAmount,u=this.effectUniforms.washOutUseDepth;this.effectUniforms=t.uniforms,Object.assign(this.effectUniforms,{effectStart:r,effectDistance:o,darkenAmount:i,darkenUseDepth:s,desaturateAmount:a,desaturateUseDepth:l,washOutAmount:c,washOutUseDepth:u})}}setEffectRange(e,t){this.effectUniforms.effectStart.value=e,this.effectUniforms.effectDistance.value=t}getEffectRange(){return{start:this.effectUniforms.effectStart.value,distance:this.effectUniforms.effectDistance.value}}setVisualEffect(e,t,r,o,i,s){this.effectUniforms.darkenAmount.value=e,this.effectUniforms.darkenUseDepth.value=t?1:0,this.effectUniforms.desaturateAmount.value=r,this.effectUniforms.desaturateUseDepth.value=o?1:0,this.effectUniforms.washOutAmount.value=i,this.effectUniforms.washOutUseDepth.value=s?1:0}getVisualEffect(){return{darkenAmount:this.effectUniforms.darkenAmount.value,darkenUseDepth:this.effectUniforms.darkenUseDepth.value,desaturateAmount:this.effectUniforms.desaturateAmount.value,desaturateUseDepth:this.effectUniforms.desaturateUseDepth.value,washOutAmount:this.effectUniforms.washOutAmount.value,washOutUseDepth:this.effectUniforms.washOutUseDepth.value}}};f();var Mr=class{#e=[];#n=!1;#i;#o;#s;constructor(e=3e3){this.#s=e}get size(){return this.#e.length}add(e){this.#e.push(e),this.#n||this.#a()}onComplete(e){this.#i=e}clearOnComplete(){this.#i=void 0}#a(){this.#n=!0,this.#o=requestIdleCallback(e=>{let t=0;for(;this.#e.length>0&&e.timeRemaining()>2;){let r=this.#e.shift();r&&(r(),t++)}if(t===0&&this.#e.length>0&&e.timeRemaining()<2){let r=this.#e.shift();r&&r()}this.#o=void 0,this.#e.length>0?this.#a():(this.#n=!1,this.#i&&this.#i())},{timeout:this.#s})}clearAll(){this.#e=[],this.#n=!1,this.#i=void 0,this.#o!==void 0&&(cancelIdleCallback(this.#o),this.#o=void 0)}};var Vm=80,fi=class extends Z{rendererState;maxOpacity;outlineOpacitiesDirty=!0;useIdleFramesOnly=!0;#e=!0;get geometries3DDirty(){return this.#e}set geometries3DDirty(e){this.#e=e}#n=-1/0;idleBuildQueue;idleComputeBoundingSphereQueue;constructor(e,t,r=!0,o=3e3){super(),this.rendererState=e,this.maxOpacity=t?.maxOpacity??1,this.useIdleFramesOnly=r,this.idleBuildQueue=new Mr(o),this.idleComputeBoundingSphereQueue=new Mr(o),this.idleBuildQueue.onComplete(this.#s)}#i=new Map;buildOutlines(e){let t=[];for(let d of e.userData.entities3D.values()){let h=this.rendererState.geometry3DMap.get(d);if(h instanceof $&&h.type==="geometry"&&h.components[3]&&h.components[3].dirty===!0&&h.components[0].material!=null){let g=h.components[0].geometry,b=!1;g||(g=Mn(h.components[0]),b=!0);let M=h.components[1];t.push([h.components[3],new Co(g,M.bevel?.enabled?1:Vm)]),b&&(g?.dispose(),g=void 0)}}if(t.length===0)return;let r=ze(t.map(d=>d[1]),!1);if(r==null)return;let o=r.getAttribute("position"),i=new Float32Array(o.count*4),s=new ke(i,4);r.setAttribute("color",s);let a=new Uint8Array(o.count);a.fill(0);let l=new ke(a,1,!1);r.setAttribute("visibility",l);let c=0;for(let d=0;d<t.length;d++){let[h,g]=t[d],b=g.getAttribute("position").count;h.edgeColors=s,h.edgeVisibility=l,h.geometry=r,h.ranges={count:b,start:c},c+=b,g.dispose()}let u=new Gt(r,new Ln({vertexColors:!0,linewidth:1,transparent:!0,opacity:1,side:vo}));u.userData.isOutline=!0,e.add(u)}update(e,t=!0){if(this.geometries3DDirty){for(let o of this.rendererState.geometry3DsInScene)o.type==="feature-collection"&&On(o,this.rendererState)&&!In(o)&&o.userData.entities3D.size>0&&this.#o(this.idleBuildQueue,()=>this.buildOutlines(o));this.#e=!1,this.outlineOpacitiesDirty=!0}for(let o of this.rendererState.geometry3DsInScene)if(o.type==="geometry"&&o.components[3]&&o.components[3].dirty===!0&&o.components[0].material!=null&&o.parentObject3D instanceof Ce){let i=o.components[3].geometry;if(!i)continue;let s=o.components[3];if(!s)continue;let a=s.enabled&&o.components[1].visible;if(s.visible!==a&&(s.visible=a),!s.visible)continue;let l=s.edgeColors;if(!l||!s.ranges)continue;let c=new k(s.color);for(let g=0;g<s.ranges.count;g++){let b=s.ranges.start+g;l.setXYZ(b,c.r,c.g,c.b)}let u=o.components[1].height,d=o.components[1].altitude,h=o.components[1]?.bevel;td(i,s.ranges,u,d,h),i.attributes.color.needsUpdate=!0,this.#o(this.idleComputeBoundingSphereQueue,()=>i.computeBoundingSphere()),s.dirty=!1}else if(o.type==="feature-collection"&&In(o)){let i=ed(o);if(!i)continue;let s=i.material;if(!(s instanceof Ln))continue;let a;for(let u of o.userData.entities3D.values()){a=u;break}if(a==null)continue;let l=this.rendererState.geometry3DMap.get(a);if(!l||l.type!=="geometry")continue;let c=l.components[1];s.setEffectRange(c.effectStart,c.effectDistance),s.setVisualEffect(c.darkenAmount,c.darkenUseDepth,c.desaturateAmount,c.desaturateUseDepth,c.washOutAmount,c.washOutUseDepth)}let r=t?Ls(e,16,19,0,this.maxOpacity):this.#n;if((r!==this.#n||this.outlineOpacitiesDirty)&&this.rendererState.geometry3DsInScene.size>0){for(let o of this.rendererState.geometry3DsInScene)if(o.type==="geometry"&&o.components[0]instanceof oe){let i=o.components[3];if(i&&i.edgeColors&&i.geometry&&i.visible){let s=Math.min(r,o.components[1].opacity*zr(o));if(i.currentOpacity!==s){for(let a=0;a<i.ranges.count;a++){let l=i.ranges.start+a;i.edgeColors.setW(l,s)}i.geometry.attributes.color.needsUpdate=!0}}}}this.#n=r,this.#e=!1,this.outlineOpacitiesDirty=!1}#o(e,t){this.useIdleFramesOnly?e.add(t):t()}#s=()=>{this.publish("needs-render")};destroy(){this.#i.clear(),this.idleBuildQueue.clearAll(),this.idleComputeBoundingSphereQueue.clearAll()}};f();f();import{z as Re}from"zod";var gi=class extends W{userData={entityId:"",cacheKey:"",isResizable:!1}},Wm=Re.object({flipImageToFaceCamera:Re.boolean().optional(),url:Re.string(),maxImageSize:Re.number().positive().optional(),interactive:Re.boolean().optional()}),jm=Re.object({type:Re.enum(["Feature"]),properties:Re.object({width:Re.number(),height:Re.number(),rotation:Re.number().min(0).max(360).optional(),verticalOffset:Re.number().optional()}),geometry:Hr});function od(n,e,t){Re.union([Re.number(),Re.string()]).parse(n),jm.parse(e),Wm.parse(t)}var An=class{mesh=new He;imageMesh;outline;type="image";instanceIndex=-1;geometry;material;feature;constructor(e){this.feature=e}get visible(){return this.mesh?.visible??!1}set visible(e){this.mesh&&(this.mesh.visible=e)}position=new O};f();function wa(n,e){return{x:n.x*Math.cos(e)-n.y*Math.sin(e),y:n.x*Math.sin(e)+n.y*Math.cos(e)}}function Zm(n,e){return n.map(t=>wa(t,e))}function Xm(n){let e=1/0,t=1/0,r=-1/0,o=-1/0;for(let i of n)e=Math.min(e,i.x),t=Math.min(t,i.y),r=Math.max(r,i.x),o=Math.max(o,i.y);return{minX:e,minY:t,maxX:r,maxY:o}}function Ym(n,e){let t=!1;for(let r=0,o=e.length-1;r<e.length;o=r++){let i=e[r].x,s=e[r].y,a=e[o].x,l=e[o].y;s>n.y!=l>n.y&&n.x<(a-i)*(n.y-s)/(l-s)+i&&(t=!t)}return t}function id(n,e,t,r,o){for(let i=0;i<o;i++)for(let s=0;s<r;s++)if(n[t+i][e+s]!==1)return!1;return!0}function $m(n,e,t){let r=n.maxX-n.minX,o=n.maxY-n.minY,i,s,a={...n};return r/o>e?(s=o/t,i=s*e,a.minX+=(r-i*t)/2):(i=r/t,s=i/e,a.minY+=(o-s*t)/2),{dx:i,dy:s,gridBounds:a}}function qm(n,e,t,r,o){let i=Array(t).fill(0).map(()=>Array(t).fill(0));for(let s=0;s<t;s++)for(let a=0;a<t;a++){let l={x:e.minX+a*r,y:e.minY+s*o};Ym(l,n)&&(i[s][a]=1)}return i}function Jm(n,e){let t=Array(e).fill(0).map(()=>Array(e).fill(0));for(let r=0;r<e;r++)for(let o=0;o<e;o++)if(n[r][o]===1){let i=0;for(let s=1;s<=Math.min(e-o,e-r)&&id(n,o,r,s,s);s++)i=s;t[r][o]=i}return t}function Km(n,e,t,r,o,i){let s=0,a=0,l=0;for(let c=0;c<r;c++)for(let u=0;u<r;u++)if(n[c][u]===1){let d=Math.pow(e[c][u],2),h=t.minX+u*o,g=t.minY+c*i;s+=d,a+=h*d,l+=g*d}return{x:a/s,y:l/s}}function Qm(n,e,t,r,o,i,s){let a=-1/0,l=null,c=n.length,u=Math.sqrt(Math.pow(e.maxX-e.minX,2)+Math.pow(e.maxY-e.minY,2));for(let d=0;d<c;d++)for(let h=0;h<c;h++)if(n[d][h]===1)for(let g=1;g<=c-h;g++){let b=g;if(!(b>c-d)&&id(n,h,d,g,b)){let M=g*b,p=e.minX+(h+g/2)*t,m=e.minY+(d+b/2)*r,y={x:p,y:m},x=Math.sqrt(Math.pow(y.x-o.x,2)+Math.pow(y.y-o.y,2))/u,S=M*(1-i)-x*i*M;S>a&&(a=S,l={center:y,width:g*t*s,height:g*r*s})}}return l}function Ta(n,e,t,r={}){let{scaleFactor:o=.9,centerPriority:i=.5,resolution:s=100,minimumSizeRatio:a=.5}=r,l=Et(t),c=n.width/n.height,u=Zm(e,l),d=Xm(u),{dx:h,dy:g,gridBounds:b}=$m(d,c,s),M=qm(u,b,s,h,g),p=Jm(M,s),m=Km(M,p,b,s,h,g),y=Qm(M,b,h,g,m,i,o);return!y||y.width<n.width*a||y.height<n.height*a?n:{...y,center:wa(y.center,-l),rotation:t,polygonCenter:wa(m,-l)}}f();var re={HIGH:1,MEDIUM:.5,LOW:.25,VERY_LOW:.125},se={[re.HIGH]:2048,[re.MEDIUM]:1024,[re.LOW]:512,[re.VERY_LOW]:256},sd={[se[re.HIGH]]:65280,[se[re.MEDIUM]]:16776960,[se[re.LOW]]:16753920,[se[re.VERY_LOW]]:16711680},yi={HIGH:50,MEDIUM:100,LOW:250},ad="https://resize-worker.mappedin.com",ld=["cdn.mappedin.com","cdn.eu.mappedin.com"],Da=["resize-worker.mappedin.com","resize-worker-staging.mappedin.net"],Pa=.01,Rn=1024,_n=256,cd=512,ud=2048,dd=3,hd=37,pd=16*1024*1024;f();function Ia(n){try{let t=new URL(n).hostname;return ld.includes(t)||Da.includes(t)}catch{return!1}}function ef(n){try{let e=new URL(n);return Da.includes(e.hostname)}catch{return!1}}function Oa(n,e){return ef(n)?n.replace(/\/resize:fit:\d+:\d+:(\d+)\//,`/resize:fit:${e}:${e}:$1/`):`${ad}/resize:fit:${e}:${e}:0/plain/${n}`}function md(n){return n<=yi.HIGH?se[re.HIGH]:n<=yi.MEDIUM?se[re.MEDIUM]:n<=yi.LOW?se[re.LOW]:se[re.VERY_LOW]}function fd(n){let e=n*hd;return e<=se[re.LOW]?se[re.LOW]:e<=se[re.MEDIUM]?se[re.MEDIUM]:se[re.HIGH]}function gd(n,e){return Ia(n)?n:`${n}|${e??Rn}`}function bi(n,e){n.color=new k(16777215),n.emissive=new k(sd[e]),n.emissiveIntensity=.5}function vi(n){n.color=new k(16777215),n.emissive=new k(0),n.emissiveIntensity=0}f();function bd(n){let{transformImageRequest:e,getMaxTextureSize:t,publish:r}=n,o=new Map,i=new Set,s=0,a=!1,l={transformImageRequest:e,isDisposed:()=>a};function c(){if(s>0)return s;let p=t(),m=xc().isMobile?cd:se[re.HIGH];return s=Math.min(m,p),s}function u(p){return Math.min(p,c())}function d(p,m){return Math.min(u(md(m)),fd(p.maxLongEdge))}function h(p,m,y){if(p.base||p.basePending)return;p.basePending=!0;let v=p.isResizable?Oa(m,y):m;yd(v,S=>{let C=p.isResizable?S:of(S,y);return C.colorSpace=ur,p.base=C,p.basePending=!1,C},()=>{p.basePending=!1},l).then(()=>{a||r()}).catch(()=>{})}function g(p,m,y){p.hiLod!=null&&y<=p.hiLod||p.readyLod!=null&&y<=p.readyLod||(p.ready=m,p.readyLod=y,i.add(p))}function b(p){p.ready=null,p.readyLod=null,i.delete(p)}function M(p,m,y){if(!p.isResizable||p.hiLod!=null&&y<=p.hiLod||p.readyLod!=null&&y<=p.readyLod||p.pendingFetchLOD!=null&&y<=p.pendingFetchLOD)return;p.pendingFetchLOD=y;let v=()=>{p.pendingFetchLOD===y&&(p.pendingFetchLOD=null)},x=Oa(m,y);yd(x,C=>(C.colorSpace=ur,g(p,C,y),v(),C),()=>{v()},l).then(()=>{a||r()}).catch(()=>{})}return{register(p,m,y,v,x,S){if(a)return;let C=o.get(p);if(C?(S>C.maxLongEdge&&(C.maxLongEdge=S),x<C.distance&&(C.distance=x)):(C={base:null,hi:null,hiLod:null,ready:null,readyLod:null,basePending:!1,pendingFetchLOD:null,isResizable:v,distance:x,maxLongEdge:S},o.set(p,C)),h(C,m,v?_n:y),v){let E=d(C,x);E>_n&&M(C,m,E)}},get(p){if(a)return null;let m=o.get(p);return m?m.hi??m.base:null},requestUpgrade(p,m){if(a)return;let y=o.get(p);!y||!y.isResizable||(m<y.distance&&(y.distance=m),M(y,p,d(y,m)))},drainPromotions(){if(a||i.size===0)return;let p=0,m=0,y=Math.min(dd,i.size);for(;p<y;){let v,x=1/0;for(let D of i)D.distance<x&&(x=D.distance,v=D);if(v==null)break;let S=rf(v.ready);if(m>0&&m+S>pd)break;let C=v.hi;v.hi=v.ready,v.hiLod=v.readyLod,b(v),C?.dispose(),m+=S,p++}i.size>0&&r()},effectiveLOD(p){return o.get(p)?.hiLod??_n},residentResolutionBucket(p){let m=o.get(p),y=m?.hi??m?.base;return nf(tf(y))},dispose(){a=!0;for(let p of o.values())p.base?.dispose(),p.hi?.dispose(),p.ready?.dispose();o.clear(),i.clear()}}}function yd(n,e,t,r){let o=i=>new Promise((s,a)=>{if(r.isDisposed()){a(new Error("LOD control disposed"));return}jt.getLoader().load(i,l=>{if(r.isDisposed()){l.dispose(),a(new Error("LOD control disposed"));return}try{s(e(l))}catch(c){R.error("Failed to process image texture",{url:i,error:c}),t(c),a(c)}},void 0,l=>{if(r.isDisposed()){a(new Error("LOD control disposed"));return}R.error("Failed to load image",{url:i,error:l}),t(l),a(l)})});return r.transformImageRequest?r.transformImageRequest(n).then(i=>o(i.url),i=>(r.isDisposed()||(R.error("Failed to transform image request",{url:n,error:i}),t(i)),Promise.reject(i))):o(n)}var Cr={w:0,h:0};function vd(n){let e=n?.image;return e?e instanceof HTMLImageElement?(Cr.w=e.naturalWidth||0,Cr.h=e.naturalHeight||0):(Cr.w=e.width||0,Cr.h=e.height||0):(Cr.w=0,Cr.h=0),Cr}function tf(n){let{w:e,h:t}=vd(n);return Math.max(e,t)}function rf(n){let{w:e,h:t}=vd(n);return e*t*4}function nf(n){return n>=se[re.HIGH]?se[re.HIGH]:n>=se[re.MEDIUM]?se[re.MEDIUM]:n>=se[re.LOW]?se[re.LOW]:_n}function of(n,e){let t=n.image,r=t instanceof HTMLImageElement?t.naturalWidth:t.width,o=t instanceof HTMLImageElement?t.naturalHeight:t.height,i=Math.max(r,o);if(i<=e)return n.colorSpace=ur,n;n.dispose();let s=e/i,a=Math.max(1,Math.floor(r*s)),l=Math.max(1,Math.floor(o*s)),c;typeof window<"u"&&window.OffscreenCanvas!=null&&!Sc()?c=new OffscreenCanvas(a,l):(c=document.createElement("canvas"),c.width=a,c.height=l);let u=c.getContext("2d");if(!u)throw new Error("Failed to get 2D context for texture capping");u.drawImage(t,0,0,a,l);let d=new ic(c);return d.colorSpace=ur,d.needsUpdate=!0,d}var Fn=Math.PI*2,sf=Math.PI/2,af=Math.PI*1.5,lf=ni(sf,2),cf=ni(af,2),xi=class extends Z{rendererState;convertTo3DMapPosition;projectToScreen;initialBearing=0;naturalBearing=0;imagePlacementOptions;cameraFrustum=new Ar;cameraWorldPosition=new O;debug={lod:!1,imageContainers:!1};get debugLOD(){return this.debug.lod}set debugLOD(e){let t=this.debug.lod!==e;this.debug.lod=e,t&&(e?this.applyDebugLODColors():this.resetDebugLODColors())}lod;constructor(e,t,r,o=0,i=0,s={},a){super(),this.rendererState=e,this.convertTo3DMapPosition=t,this.projectToScreen=r,this.initialBearing=o,this.naturalBearing=i,this.imagePlacementOptions=s,this.lod=bd({transformImageRequest:a,getMaxTextureSize:()=>this.rendererState.renderer?.capabilities?.maxTextureSize??ud,publish:()=>this.publish("image-loaded")})}createImageMesh(e,t,r,o=0,i,s,a=Rn){let l={width:r.width,height:r.height,center:this.convertTo3DMapPosition(i),rotation:r.rotation??0},c=this.imagePlacementOptions.mode??"default",u=(()=>{switch(c){case"fit-nearest-90":let x=(this.initialBearing-this.naturalBearing+360)%180;return x>=45&&x<=135?Ta(l,s,l.rotation+90,this.imagePlacementOptions):l;case"fit-initial-bearing":return Ta(l,s,this.initialBearing,this.imagePlacementOptions);case"default":case"none":default:return l}})();if(this.debug.imageContainers&&u.polygonCenter){let x=new W(new Br(1),new kt({color:65280}));x.position.set(u.polygonCenter.x,u.polygonCenter.y,o),this.rendererState.geometryScene.add(x)}let d=new kt({transparent:!0,depthWrite:!1,side:_t}),h=new Ie(u.width,u.height),g=new gi(h);g.visible=!1,g.renderOrder=ue.IMAGE_MESH;let b=Ia(t),M=o+Pa,p=this.rendererState.cameraObject.position.z,m=Math.abs(p-M),y=gd(t,a),v=Math.max(u.width,u.height);if(this.lod.register(y,t,a??Rn,b,m,v),g.userData.entityId=e,g.userData.cacheKey=y,g.userData.isResizable=b,g.material=d,this.debug.imageContainers){let x=new W(new Ie(r.width,r.height),new kt({color:"gray"}));g.add(x);let S=new mc;g.add(S),S.scale.set(10,10,10)}return g.position.set(u.center.x,u.center.y,o+Pa),g.rotation.z=(-U.degToRad(u.rotation)+Fn)%Fn,g}applyDebugLODColors(){this.rendererState.cameraObject.getWorldPosition(this.cameraWorldPosition);for(let e of this.rendererState.geometry3DsInScene)if(e.type==="image"){let t=e.components[0];if(t?.imageMesh?.material instanceof kt){let{cacheKey:r,isResizable:o}=t.imageMesh.userData;o===!0?bi(t.imageMesh.material,this.lod.residentResolutionBucket(r)):vi(t.imageMesh.material)}}else if(e.type==="geometry"){let t=e.components[0];if(Array.isArray(t?.feature))continue;if(t?.imageMesh?.material instanceof kt){let{cacheKey:r,isResizable:o}=t.imageMesh.userData;o===!0?bi(t.imageMesh.material,this.lod.residentResolutionBucket(r)):vi(t.imageMesh.material)}}}resetDebugLODColors(){for(let e of this.rendererState.geometry3DsInScene){let t;e.type==="image"?t=e.components[0]:e.type==="geometry"&&(t=e.components[0]),t?.imageMesh?.material instanceof kt&&vi(t.imageMesh.material)}}flipIfNeeded(e,t){if(e.imageMesh==null)return;let r=-t,o=e.imageMesh.rotation.z,i=ni((o-r+Fn)%Fn,2);if(i>lf&&i<cf){let s=e.imageMesh.matrixWorldAutoUpdate===!1;s&&Ao(e.imageMesh),e.imageMesh.rotation.z=(o+Math.PI)%Fn,e.imageMesh.updateMatrixWorld(),s&&Ac(e.imageMesh)}}currentImageScreenBBoxes=[];viewProjectionMatrix=new Y;lastLODUpdateTime=-1;reconcileMaterialTexture(e,t,r){let o=this.lod.get(t);return e.map!==o&&(e.map=o,e.needsUpdate=!0,this.debug.lod&&r&&bi(e,this.lod.residentResolutionBucket(t))),o!=null}update(e,t,r){this.currentImageScreenBBoxes=[],this.viewProjectionMatrix.identity().multiply(this.rendererState.cameraObject.projectionMatrix).multiply(this.rendererState.cameraObject.matrixWorldInverse),this.cameraFrustum.setFromProjectionMatrix(this.viewProjectionMatrix),this.rendererState.cameraObject.getWorldPosition(this.cameraWorldPosition);let o=!t&&r!==this.lastLODUpdateTime;o&&(this.lastLODUpdateTime=r),this.lod.drainPromotions();let i,s;for(let a of this.rendererState.geometry3DsInScene)if(a.type==="image"){if(i=a.components[0],s=a.components[1],s.url&&i.imageMesh==null){let l=this.convertTo3DMapPosition(i.feature.geometry.coordinates),c={x:l.x,y:l.y};i.imageMesh=this.createImageMesh(a.id,s.url,i.feature.properties,i.feature.properties.verticalOffset,i.feature.geometry.coordinates,[c],s.maxImageSize),i.mesh.add(i.imageMesh),i.position.copy(i.imageMesh.position)}if(i.imageMesh){let{cacheKey:l,isResizable:c}=i.imageMesh.userData;if(o&&s.url){let u=Math.abs(this.cameraWorldPosition.z-i.position.z);this.lod.requestUpgrade(l,u)}if(s.url){let u=i.imageMesh.material;this.reconcileMaterialTexture(u,l,c)&&!i.imageMesh.visible&&(i.imageMesh.visible=!0)}s.flipImageToFaceCamera&&this.flipIfNeeded(i,e),i.imageMesh.material instanceof kt&&s.dirty&&i.imageMesh.material.opacity!==s.opacity&&(i.imageMesh.material.opacity=s.opacity)}}else if(a?.type==="geometry"){if(i=a.components[0],s=a.components[1],Array.isArray(i.feature))continue;if(s.showImage&&i.feature.properties?.image&&i.imageMesh==null&&i.visible&&i.mesh!=null&&i.mesh.parent!=null&&i.feature.properties?.image.position!=null&&i.feature.geometry.coordinates!=null&&i.feature.geometry.coordinates.length>0){let l=i.feature.geometry.coordinates[0].map(u=>{let d=this.convertTo3DMapPosition(u);return{x:d.x,y:d.y}}),c=this.createImageMesh(a.id,i.feature.properties?.image.path,i.feature.properties?.image,s.height+s.altitude,i.feature.properties?.image.position,l,s.maxImageSize);i.mesh.parent.add(c),i.imageMesh=c}if(i.imageMesh){let l=i.feature.properties?.image?.path,{cacheKey:c,isResizable:u}=i.imageMesh.userData,d=!1;if(o&&l){let h=Math.abs(this.cameraWorldPosition.z-i.imageMesh.position.z);this.lod.requestUpgrade(c,h)}if(l){let h=i.imageMesh.material;d=this.reconcileMaterialTexture(h,c,u)}i.visible?s.showImage&&!i.imageMesh.visible?l?d&&(i.imageMesh.visible=!0):i.imageMesh.visible=!0:!s.showImage&&i.imageMesh.visible&&(i.imageMesh.visible=!1):i.imageMesh.visible=!1,s.flipImageToFaceCamera&&this.flipIfNeeded(i,e),s.enableImageCollisions===!0&&this.updateImageScreenBBoxes(i)}}}destroy(){this.lod.dispose(),super.destroy()}updateImageScreenBBoxes(e){if(e.imageMesh==null||!e.imageMesh.visible)return;let t=e.imageMesh.geometry.boundingBox;if(t==null&&(e.imageMesh.geometry.computeBoundingBox(),t=e.imageMesh.geometry.boundingBox),t){let r=new O;if(e.imageMesh.getWorldPosition(r),!this.cameraFrustum.containsPoint(r))return;let o=new V;this.projectToScreen(o,r);let i=[new O(t.min.x,t.min.y,t.min.z),new O(t.max.x,t.min.y,t.min.z),new O(t.min.x,t.max.y,t.min.z),new O(t.max.x,t.max.y,t.min.z),new O(t.min.x,t.min.y,t.max.z),new O(t.max.x,t.min.y,t.max.z),new O(t.min.x,t.max.y,t.max.z),new O(t.max.x,t.max.y,t.max.z)],s=[];for(let h of i){let g=h.clone().applyMatrix4(e.imageMesh.matrixWorld),b=new V;this.projectToScreen(b,g),s.push(b)}let a=1/0,l=1/0,c=-1/0,u=-1/0;for(let h of s)a=Math.min(a,h.x),l=Math.min(l,h.y),c=Math.max(c,h.x),u=Math.max(u,h.y);let d=new Ut(o.x,o.y,c-a,u-l);this.currentImageScreenBBoxes.push(d)}else R.warn("Bounding box for imageMesh does not exist.")}};f();f();function La(n){let e=1/0,t=1/0,r=-1/0,o=-1/0;for(let i of n)i.x<e&&(e=i.x),i.x>r&&(r=i.x),i.y<t&&(t=i.y),i.y>o&&(o=i.y);return{minX:e,minY:t,maxX:r,maxY:o}}function uf(n,e){return!(n.maxX<e.minX||n.minX>e.maxX||n.maxY<e.minY||n.minY>e.maxY)}function df(n,e){if(!uf(n,e))return 0;let t=Math.max(n.minX,e.minX),r=Math.min(n.maxX,e.maxX),o=Math.max(n.minY,e.minY),i=Math.min(n.maxY,e.maxY),s=r-t,a=i-o;return s*a}function xd(n,e){let t=df(n,e);if(t===0)return 0;let r=e.maxX-e.minX,o=e.maxY-e.minY,i=r*o;return i===0?0:t/i}f();function hf(n){let e=0;for(let t=1;t<n.length;t++)(n[t].y<n[e].y||n[t].y===n[e].y&&n[t].x<n[e].x)&&(e=t);return e}function pf(n,e){let t=[...n];return t.sort((r,o)=>{let i=r.point.x-e.x,s=r.point.y-e.y,a=o.point.x-e.x,l=o.point.y-e.y,c=i*l-s*a;if(c===0){let u=i*i+s*s,d=a*a+l*l;return u-d}return c>0?-1:1}),t}function mf(n,e){let t=[e];for(let r=0;r<n.length;r++){for(;t.length>1;){let o=t[t.length-2].point,i=t[t.length-1].point,s=n[r].point,a=i.x-o.x,l=i.y-o.y,c=s.x-i.x,u=s.y-i.y;if(a*u-l*c<=0)t.pop();else break}t.push(n[r])}return t}function Sd(n){if(n.length<3)return n.map((i,s)=>({point:i,index:s}));let e=hf(n),t=n.map((i,s)=>({point:i,index:s})),r=t[e];t.splice(e,1);let o=pf(t,r.point);return mf(o,r)}function Nn(n,e,t,r){if(n.length===0)return[];let o=[],i=n[n.length-1],s=e*i.x+t*i.y+r;for(let a=0;a<n.length;a++){let l=n[a],c=e*l.x+t*l.y+r;if(c>=0){if(s<0){let u=s/(s-c);o.push({x:i.x+u*(l.x-i.x),y:i.y+u*(l.y-i.y)})}o.push(l)}else if(s>=0){let u=s/(s-c);o.push({x:i.x+u*(l.x-i.x),y:i.y+u*(l.y-i.y)})}i=l,s=c}return o}f();var ff="2",gf="1000",yf="1002";function bf(n,e){let t=document.createElement("div");return t.id=`focus-bbox-${n}`,t.style.position="absolute",t.style.pointerEvents="none",t.style.overflow="hidden",t.style.zIndex=gf,e.appendChild(t),t}function vf(n,e){let t=e.maxX-e.minX,r=e.maxY-e.minY;n.style.left=e.minX+"px",n.style.top=e.minY+"px",n.style.width=t+"px",n.style.height=r+"px"}function xf(n,e){e?(n.style.border="2px solid green",n.style.backgroundColor="rgba(0, 255, 0, 0.1)"):(n.style.border="2px solid red",n.style.backgroundColor="rgba(255, 0, 0, 0.1)")}function Sf(n){let e=n.querySelector(".entity-id-label");return e||(e=document.createElement("div"),e.className="entity-id-label",e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.padding="2px 4px",e.style.color="white",e.style.fontSize="10px",e.style.fontWeight="bold",e.style.fontFamily="monospace",e.style.zIndex="1001",n.appendChild(e)),e}function Mf(n){let e=n.querySelector(".score-label");return e||(e=document.createElement("div"),e.className="score-label",e.style.position="absolute",e.style.bottom="0",e.style.right="0",e.style.padding="2px 4px",e.style.color="white",e.style.fontSize="12px",e.style.fontWeight="bold",e.style.fontFamily="monospace",e.style.zIndex="1001",n.appendChild(e)),e}function Cf(n,e,t,r,o){r?n.style.backgroundColor="green":n.style.backgroundColor="red",n.textContent=t,o!==void 0?(e.style.backgroundColor=r?"green":"red",e.textContent=o.toFixed(3)):(e.style.backgroundColor=r?"green":"red",e.textContent="")}function Md(n,e){for(let[t,r]of n)e.has(t)||(r.remove(),n.delete(t))}function Cd(n,e,t,r,o,i){let s=t.get(n);s||(s=bf(n,r),t.set(n,s)),vf(s,e.clippedScreenBBox??e.screenBBox),xf(s,o);let a=Sf(s),l=Mf(s);return Cf(a,l,n,o,i),s}function Ed(){let n=document.createElement("div");return Object.assign(n.style,{position:"absolute",top:"0",left:"0",width:"100%",height:"100%",pointerEvents:"none",overflow:"hidden",zIndex:ff}),document.body.append(n),n}function wd(n,e){let t=document.createElement("div");t.style.position="absolute",t.style.top=n.minY+"px",t.style.left=n.minX+"px",t.style.width=n.maxX-n.minX+"px",t.style.height=n.maxY-n.minY+"px",t.style.border="2px solid gray",t.style.backgroundColor="rgba(128, 128, 128, 0.1)",t.style.pointerEvents="none",t.style.zIndex=yf,e.append(t);let r=document.createElement("div");r.textContent="viewfinder",r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.padding="2px 4px",r.style.backgroundColor="gray",r.style.color="white",r.style.fontSize="12px",r.style.fontWeight="bold",r.style.fontFamily="monospace",r.style.zIndex="1001",t.appendChild(r);let o=document.createElement("div");return o.textContent="",o.style.position="absolute",o.style.bottom="0",o.style.right="0",o.style.padding="2px 4px",o.style.backgroundColor="gray",o.style.color="white",o.style.fontSize="12px",o.style.fontWeight="bold",o.style.fontFamily="monospace",o.style.zIndex="1001",t.appendChild(o),{squareEl:t,labelEl:r,scoreLabelEl:o}}function Td(n,e){n.textContent=e}function Dd(n,e){e!==void 0?n.textContent=`Score: ${e.toFixed(3)}`:n.textContent=""}f();function Pd(n,e,t){if(!n.visible)return;let r=n;if(r.isMesh||r.isLine||r.isPoints){let o=r.geometry;if(o?.isBufferGeometry){let i=o.attributes.position;if(i)for(let s=0;s<i.count;s++)t.fromBufferAttribute(i,s),t.applyMatrix4(n.matrixWorld),e.push(t.clone())}}for(let o of n.children)Pd(o,e,t)}function Id(n,e){let t=[];return n instanceof Ge&&Pd(n,t,e),t}var Xr=.001;function Od(n){if(n.length===0)return[];let e=[],t=n[n.length-1],r=t.w>Xr;for(let o=0;o<n.length;o++){let i=n[o],s=i.w>Xr;if(s){if(!r){let a=(Xr-t.w)/(i.w-t.w);e.push({x:t.x+a*(i.x-t.x),y:t.y+a*(i.y-t.y),z:t.z+a*(i.z-t.z),w:Xr})}e.push(i)}else if(r){let a=(Xr-t.w)/(i.w-t.w);e.push({x:t.x+a*(i.x-t.x),y:t.y+a*(i.y-t.y),z:t.z+a*(i.z-t.z),w:Xr})}t=i,r=s}return e}function Ld(n,e,t){if(n.length===0)return[];let r=n;return r=Nn(r,1,0,0),r=Nn(r,-1,0,e),r=Nn(r,0,1,0),r=Nn(r,0,-1,t),r}f();var Si=class{bbox;center;el=null;labelEl=null;scoreLabelEl=null;create(e,t,r,o,i){this.labelEl&&(this.labelEl.remove(),this.labelEl=null),this.scoreLabelEl&&(this.scoreLabelEl.remove(),this.scoreLabelEl=null),this.el&&(this.el.remove(),this.el=null);let s=Vr(r,e,t),a=s.left,l=s.top,c=e-s.left-s.right,u=t-s.top-s.bottom,d=new V(a+c/2,l+u/2),g=c/2*(2-2/1.2)/2,b=Math.max(a,d.x-g),M=Math.min(e-s.right,d.x+g),p=Math.max(l,d.y-g),m=Math.min(t-s.bottom,d.y+g),y=(b+M)/2,v=(p+m)/2;if(this.bbox={minX:b,maxX:M,minY:p,maxY:m},this.center=new V(y,v),o&&i){let{squareEl:x,labelEl:S,scoreLabelEl:C}=wd(this.bbox,i);this.el=x,this.labelEl=S,this.scoreLabelEl=C}}updateLabel(e){this.labelEl&&Td(this.labelEl,e)}updateScore(e){this.scoreLabelEl&&Dd(this.scoreLabelEl,e)}destroy(){this.labelEl&&(this.labelEl.remove(),this.labelEl=null),this.scoreLabelEl&&(this.scoreLabelEl.remove(),this.scoreLabelEl=null),this.el&&(this.el.remove(),this.el=null)}};var Ef=250,Mi=class extends Z{cameraDirty=!0;focusablesDirty=!0;state;camera;cameraFrustum=new Ar;viewProjectionMatrix=new Y;tempScreenPos=new O;debugEl=null;collisions=new Map;focusableEntities=new Map;debug=!1;debugBBoxElements=new Map;viewfinder=new Si;screenBoundsMap=new Map;screenDiagonal=1;lastPublishedEntities;constructor(e,t){super(),this.state=e,this.camera=t,this.resize()}resize(){this.screenDiagonal=Math.sqrt(this.state.canvasWidth*this.state.canvasWidth+this.state.canvasHeight*this.state.canvasHeight),this.createViewfinder()}createViewfinder(){this.debugEl&&this.debugEl.remove();for(let e of this.debugBBoxElements.values())e.remove();this.debugBBoxElements.clear(),this.debug&&(this.debugEl=Ed()),this.viewfinder.create(this.state.canvasWidth,this.state.canvasHeight,this.state.insetsPadding,this.debug,this.debugEl)}simplifyVertices(e){return e.length<3?e:Sd(e).map(t=>e[t.index])}computeScreenSpaceBounds(e){let{vertices:t,boundingBox:r}=e;if(t==null||t.length<3||r==null||r.isEmpty()||!this.cameraFrustum.intersectsBox(r))return;let o=this.viewProjectionMatrix.elements,i=t.map(u=>({x:o[0]*u.x+o[4]*u.y+o[8]*u.z+o[12],y:o[1]*u.x+o[5]*u.y+o[9]*u.z+o[13],z:o[2]*u.x+o[6]*u.y+o[10]*u.z+o[14],w:o[3]*u.x+o[7]*u.y+o[11]*u.z+o[15]})),s=Od(i);if(s.length<3)return;let a=1/0,l=[];for(let u of s){let d=u.x/u.w,h=u.y/u.w;l.push({x:(d+1)/2*this.state.canvasWidth,y:(-h+1)/2*this.state.canvasHeight}),u.w<a&&(a=u.w)}let c=Ld(l,this.state.canvasWidth,this.state.canvasHeight);if(!(c.length<=0))return{screenBBox:La(l),clippedScreenBBox:this.debug?La(c):void 0,closestZ:a}}updateFocusableEntities(){this.focusableEntities.clear();let e;for(let t of this.state.geometry3DsInScene){if(t==null)continue;let r;if(t.type==="group-container"||t.type==="feature-collection"?r=t.visible:r=t.components[1]?.visible??!0,!!r&&(e=t.type==="group-container"?t.components[1]:t.components[4],e!==void 0&&e.type==="focusable")){let o=String(t.type==="group-container"?t.userData.entityId:t.id);if(e.dirty===!0){let i=null;t instanceof Ge?i=t:"object3d"in t&&t.object3d instanceof Ge&&(i=t.object3d),i&&(e.boundingBox=new ce().setFromObject(i),e.vertices=this.simplifyVertices(Id(i,this.tempScreenPos)),e.dirty=!1)}this.focusableEntities.set(o,e)}}this.focusablesDirty=!1}#e=void 0;update=(e=!1,t=Date.now())=>{this.focusablesDirty&&this.updateFocusableEntities(),!e&&(Date.now()-t>Ef||(this.#e&&cancelAnimationFrame(this.#e),this.#e=requestAnimationFrame(()=>{this.updateRaf()})))};updateRaf(){if(this.focusableEntities.size===0){this.lastPublishedEntities?.length!==0&&(this.lastPublishedEntities=[],this.publish("geometry-in-focus",[]));return}this.cameraDirty&&this.compute()}updateDebugBBoxes(e,t){if(!(!this.debug||!this.debugEl)){Md(this.debugBBoxElements,e);for(let[r,o]of e){let i=t.has(r),s=this.collisions.get(r);Cd(r,o,this.debugBBoxElements,this.debugEl,i,s)}}}compute(){if(this.collisions.clear(),this.screenBoundsMap.clear(),!this.viewfinder.center)return;this.viewProjectionMatrix.multiplyMatrices(this.camera.projectionMatrix,this.camera.matrixWorldInverse),this.cameraFrustum.setFromProjectionMatrix(this.viewProjectionMatrix);let e=[];for(let[i,s]of this.focusableEntities){let a=this.computeScreenSpaceBounds(s);if(!a)continue;this.screenBoundsMap.set(i,a);let{screenBBox:l}=a,c=xd(l,this.viewfinder.bbox);if(c>0){e.push(i);let u=(l.minX+l.maxX)/2,d=(l.minY+l.maxY)/2,h=u-this.viewfinder.center.x,g=d-this.viewfinder.center.y,M=1/(1+Math.sqrt(h*h+g*g)/this.screenDiagonal),p=1/(1+Math.abs(a.closestZ)),m=M*.5+c*.35+p*.15;this.collisions.set(i,m)}}let t=Array.from(this.collisions.keys()).sort((i,s)=>(this.collisions.get(s)??0)-(this.collisions.get(i)??0)),r=this.lastPublishedEntities,o=t.length!==r?.length;if(!o&&r){for(let i=0;i<t.length;i++)if(t[i]!==r[i]){o=!0;break}}if(this.debug){let i=t[0];this.viewfinder.updateLabel(i||"viewfinder");let s=i?this.collisions.get(i):void 0;this.viewfinder.updateScore(s);let a=new Set(e);this.updateDebugBBoxes(this.screenBoundsMap,a)}this.cameraDirty=!1,o&&(this.lastPublishedEntities=t,this.publish("geometry-in-focus",t))}showDebug(){this.debug||(this.debug=!0,this.cameraDirty=!0,this.createViewfinder())}hideDebug(){this.debug&&(this.debug=!1,this.createViewfinder())}destroy(){this.#e&&cancelAnimationFrame(this.#e),this.debugEl&&this.debugEl.remove();for(let e of this.debugBBoxElements.values())e.remove();this.debugBBoxElements.clear(),this.collisions.clear(),this.focusableEntities.clear(),this.viewfinder.destroy()}};f();f();f();f();f();function Ci(n){if(!n)throw new Error("coord is required");if(!Array.isArray(n)){if(n.type==="Feature"&&n.geometry!==null&&n.geometry.type==="Point")return n.geometry.coordinates;if(n.type==="Point")return n.coordinates}if(Array.isArray(n)&&n.length>=2&&!Array.isArray(n[0])&&!Array.isArray(n[1]))return n;throw new Error("coord must be GeoJSON Point or an Array of numbers")}function Er(n){if(Array.isArray(n))return n;if(n.type==="Feature"){if(n.geometry!==null)return n.geometry.coordinates}else if(n.coordinates)return n.coordinates;throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")}function Yr(n){return n.type==="Feature"?n.geometry:n}function BE(n,e){return n.type==="FeatureCollection"?"FeatureCollection":n.type==="GeometryCollection"?"GeometryCollection":n.type==="Feature"&&n.geometry!==null?n.geometry.type:n.type}function wt(n,e,t){if(t===void 0&&(t={}),!n)throw new Error("point is required");if(!e)throw new Error("polygon is required");var r=Ci(n),o=Yr(e),i=o.type,s=e.bbox,a=o.coordinates;if(s&&wf(r,s)===!1)return!1;i==="Polygon"&&(a=[a]);for(var l=!1,c=0;c<a.length&&!l;c++)if(Ad(r,a[c][0],t.ignoreBoundary)){for(var u=!1,d=1;d<a[c].length&&!u;)Ad(r,a[c][d],!t.ignoreBoundary)&&(u=!0),d++;u||(l=!0)}return l}function Ad(n,e,t){var r=!1;e[0][0]===e[e.length-1][0]&&e[0][1]===e[e.length-1][1]&&(e=e.slice(0,e.length-1));for(var o=0,i=e.length-1;o<e.length;i=o++){var s=e[o][0],a=e[o][1],l=e[i][0],c=e[i][1],u=n[1]*(s-l)+a*(l-n[0])+c*(n[0]-s)===0&&(s-n[0])*(l-n[0])<=0&&(a-n[1])*(c-n[1])<=0;if(u)return!t;var d=a>n[1]!=c>n[1]&&n[0]<(l-s)*(n[1]-a)/(c-a)+s;d&&(r=!r)}return r}function wf(n,e){return e[0]<=n[0]&&e[1]<=n[1]&&e[2]>=n[0]&&e[3]>=n[1]}f();f();function Tf(n){if(!n)throw new Error("geojson is required");var e=[];return At(n,function(t){Df(t,e)}),ar(e)}function Df(n,e){var t=[],r=n.geometry;if(r!==null){switch(r.type){case"Polygon":t=Er(r);break;case"LineString":t=[Er(r)]}t.forEach(function(o){var i=Pf(o,n.properties);i.forEach(function(s){s.id=e.length,e.push(s)})})}}function Pf(n,e){var t=[];return n.reduce(function(r,o){var i=fo([r,o],e);return i.bbox=If(r,o),t.push(i),o}),t}function If(n,e){var t=n[0],r=n[1],o=e[0],i=e[1],s=t<o?t:o,a=r<i?r:i,l=t>o?t:o,c=r>i?r:i;return[s,a,l,c]}var Aa=Tf;var ch=ln(ah(),1);function Pg(n,e){var t={},r=[];if(n.type==="LineString"&&(n=Ds(n)),e.type==="LineString"&&(e=Ds(e)),n.type==="Feature"&&e.type==="Feature"&&n.geometry!==null&&e.geometry!==null&&n.geometry.type==="LineString"&&e.geometry.type==="LineString"&&n.geometry.coordinates.length===2&&e.geometry.coordinates.length===2){var o=lh(n,e);return o&&r.push(o),ar(r)}var i=(0,ch.default)();return i.load(Aa(e)),Os(Aa(n),function(s){Os(i.search(s),function(a){var l=lh(s,a);if(l){var c=Er(l).join(",");t[c]||(t[c]=!0,r.push(l))}})}),ar(r)}function lh(n,e){var t=Er(n),r=Er(e);if(t.length!==2)throw new Error("<intersects> line1 must only contain 2 coordinates");if(r.length!==2)throw new Error("<intersects> line2 must only contain 2 coordinates");var o=t[0][0],i=t[0][1],s=t[1][0],a=t[1][1],l=r[0][0],c=r[0][1],u=r[1][0],d=r[1][1],h=(d-c)*(s-o)-(u-l)*(a-i),g=(u-l)*(i-c)-(d-c)*(o-l),b=(s-o)*(i-c)-(a-i)*(o-l);if(h===0)return null;var M=g/h,p=b/h;if(M>=0&&M<=1&&p>=0&&p<=1){var m=o+M*(s-o),y=i+M*(a-i);return mo([m,y])}return null}var Li=Pg;f();function Ai(n,e){e===void 0&&(e={});var t=Yr(n);switch(!e.properties&&n.type==="Feature"&&(e.properties=n.properties),t.type){case"Polygon":return Ig(t,e);case"MultiPolygon":return Og(t,e);default:throw new Error("invalid poly")}}function Ig(n,e){e===void 0&&(e={});var t=Yr(n),r=t.coordinates,o=e.properties?e.properties:n.type==="Feature"?n.properties:{};return uh(r,o)}function Og(n,e){e===void 0&&(e={});var t=Yr(n),r=t.coordinates,o=e.properties?e.properties:n.type==="Feature"?n.properties:{},i=[];return r.forEach(function(s){i.push(uh(s,o))}),ar(i)}function uh(n,e){return n.length>1?kl(n,e):fo(n[0],e)}function Lg(n,e){var t=!0;return At(n,function(r){At(e,function(o){if(t===!1)return!1;t=Ag(r.geometry,o.geometry)})}),t}function Ag(n,e){switch(n.type){case"Point":switch(e.type){case"Point":return!Ng(n.coordinates,e.coordinates);case"LineString":return!dh(e,n);case"Polygon":return!wt(n,e)}break;case"LineString":switch(e.type){case"Point":return!dh(n,e);case"LineString":return!Rg(n,e);case"Polygon":return!hh(e,n)}break;case"Polygon":switch(e.type){case"Point":return!wt(e,n);case"LineString":return!hh(n,e);case"Polygon":return!_g(e,n)}}return!1}function dh(n,e){for(var t=0;t<n.coordinates.length-1;t++)if(Fg(n.coordinates[t],n.coordinates[t+1],e.coordinates))return!0;return!1}function Rg(n,e){var t=Li(n,e);return t.features.length>0}function hh(n,e){for(var t=0,r=e.coordinates;t<r.length;t++){var o=r[t];if(wt(o,n))return!0}var i=Li(e,Ai(n));return i.features.length>0}function _g(n,e){for(var t=0,r=n.coordinates[0];t<r.length;t++){var o=r[t];if(wt(o,e))return!0}for(var i=0,s=e.coordinates[0];i<s.length;i++){var a=s[i];if(wt(a,n))return!0}var l=Li(Ai(n),Ai(e));return l.features.length>0}function Fg(n,e,t){var r=t[0]-n[0],o=t[1]-n[1],i=e[0]-n[0],s=e[1]-n[1],a=r*s-o*i;return a!==0?!1:Math.abs(i)>=Math.abs(s)?i>0?n[0]<=t[0]&&t[0]<=e[0]:e[0]<=t[0]&&t[0]<=n[0]:s>0?n[1]<=t[1]&&t[1]<=e[1]:e[1]<=t[1]&&t[1]<=n[1]}function Ng(n,e){return n[0]===e[0]&&n[1]===e[1]}var ph=Lg;function $a(n,e){var t=!1;return At(n,function(r){At(e,function(o){if(t===!0)return!0;t=!ph(r.geometry,o.geometry)})}),t}var gh=ln(_i());var qa="outdoor-system-debug-container",mh=!1;function Bg(n,e,t){let r=Math.pow(2,n),o=new mr(e/r,t/r).toLngLat(),i=new mr((e+1)/r,(t+1)/r).toLngLat();return[o.lng,i.lat,i.lng,o.lat]}function Gg(n,e){return n[0]<=e[2]&&n[2]>=e[0]&&n[1]<=e[3]&&n[3]>=e[1]}var kg=15e-6;function zg(n,e){if(n.length<=5)return n;let t=(0,gh.default)(n.map(s=>({x:s[0],y:s[1]})),e,!0);if(t.length<4)return n;let r=t.map(s=>[s.x,s.y]),o=r[0],i=r[r.length-1];return(o[0]!==i[0]||o[1]!==i[1])&&r.push([o[0],o[1]]),r}function fh(n){return{bbox:Ul(Ps(n)),simplified:Ps(n.map(e=>zg(e,kg)))}}function Ug(n,e){let t=1/0,r=1/0,o=-1/0,i=-1/0,s=n.type==="MultiPolygon"?n.coordinates.length:1;for(let a=0;a<s;a++){let l=n.type==="MultiPolygon"?n.coordinates[a]:n.coordinates;for(let c=0;c<l.length;c++){let u=l[c];for(let d=0;d<u.length;d++){let h=u[d];h[0]<t&&(t=h[0]),h[0]>o&&(o=h[0]),h[1]<r&&(r=h[1]),h[1]>i&&(i=h[1])}}}return t<=e[2]&&o>=e[0]&&r<=e[3]&&i>=e[1]}var Hg=500,Fi=class extends Z{#e;idleQueue;#n="";#i=new Set;#o=[];#s=new Set;#a;#c=[];#d=Vg();#g;#t=e=>{if(!this.#e)throw new Error("Map not initialized");let r=[[e[0],e[1]],[e[2],e[1]],[e[2],e[3]],[e[0],e[3]]].map(l=>this.#e.project(l)),o=Math.max(...r.map(l=>l.x)),i=Math.min(...r.map(l=>l.x)),s=Math.max(...r.map(l=>l.y)),a=Math.min(...r.map(l=>l.y));return[new Gs(i,a),new Gs(o,s)]};#h=(e,t)=>{if(!this.#e)return;let r=this.#e.on(e,t);r?.unsubscribe&&this.onAbort(()=>r.unsubscribe())};#r=()=>{this.#m.clear(),this.#x.clear()};#b=()=>{this.#g&&(this.#g.controller.abort(),this.#g=void 0)};#f=()=>{this.#b();let e=new Set(this.#m),t=new AbortController;t.signal.addEventListener("abort",()=>{this.#m.clear();for(let o of e)this.#m.add(o);this.idleQueue.clearAll()},{once:!0});let r={controller:t};return this.#g=r,r};hideLayersIntersectingPolygons(e,t){this.#b(),this.#r(),this.#d.buildStart();let r=[];for(let o of e)if(o.geometry.type==="Polygon")r.push(fh(o.geometry.coordinates));else if(o.geometry.type==="MultiPolygon")for(let i of o.geometry.coordinates)r.push(fh(i));this.#a=r,this.#c=r.map((o,i)=>()=>this.#y(i)),this.#d.buildDone(this.#a.length);for(let o of t)this.#i.add(o);this.#C(),this.#p()}#l=Lt(()=>{this.#p()},Hg);constructor(e,t=3e3){super(),this.idleQueue=new Mr(t),e&&(this.#e=e,this.#h("styledata",this.#A),this.#h("sourcedata",r=>{this.#s.size>0&&!this.#s.has(r.sourceId)||r.tile!=null&&this.#M(r.tile)&&this.#E(r.tile)&&this.#l()})),mh&&this.#R()}#M(e){let t=e.tileID?.canonical;if(!t)return!0;let r=Bg(t.z,t.x,t.y),o=this.#a;if(o){for(let i=0;i<o.length;i++)if(Gg(r,o[i].bbox))return!0}return!1}#E(e){let t=e.tileID?.canonical;if(!t)return!0;let r=`${t.z}/${t.x}/${t.y}`;return this.#x.has(r)?!1:(this.#x.add(r),!0)}#C(){let e=new Set,t=new Set;if(this.#e)for(let r of this.#i){let o=this.#e.getLayer(r);o&&(e.add(r),o.source&&t.add(o.source))}this.#o=Array.from(e),this.#s=t}#p=async()=>{if(mh&&this.#a&&this.#w(),!this.#e||!this.#o||this.#o.length===0||!this.#a||this.#a.length===0)return;let e=this.#f(),t=this.#m.size;this.#d.computeStart();let r=()=>{if(this.#g!==e)return;let o=this.#m.size-t;if(o>0){this.#d.beginSpan();let i=[];for(let a of this.#m)i.push(a);let s=["!",["in",["id"],["literal",i]]];this.#o.forEach(a=>{this.#e?.setFilter(a,s)}),this.#d.endSpan()}this.#d.computeDone(this.#c.length,o,this.#m.size),this.#g=void 0};for(let o=0;o<this.#c.length;o++)this.idleQueue.add(this.#c[o]);this.idleQueue.onComplete(r)};#y=e=>{if(!this.#e||!this.#a)return;this.#d.beginSpan();let t=this.#a[e],r=t.simplified,o=t.bbox,i=this.#t(o),s=this.#e.queryRenderedFeatures(i,{layers:this.#o});for(let a=0;a<s.length;a++){let l=s[a],c=l.id;if(c==null||this.#m.has(c))continue;let u=l.geometry;u==null||!("coordinates"in u)||u.type!=="Polygon"&&u.type!=="MultiPolygon"||Ug(u,o)&&$a(r,u)&&this.#m.add(c)}this.#d.endSpan()};#m=new Set;#x=new Set;get#I(){return this.idleQueue.size!==0}#A=e=>{if(this.#e&&e&&e.dataType==="style"&&e.type==="styledata"&&this.#i.size>0){let t=e?.style?.stylesheet?.id;if(!t||t!==this.#n){let r=this.#n;this.#d.styleLatch(r||"",t||""),this.#b(),this.#r(),this.#n=t,this.#C(),this.#l()}}};#R(){if(!document.getElementById(qa)&&this.#e){let e=document.createElement("div");e.id=qa,e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.bottom="0",e.style.right="0",e.style.pointerEvents="none",e.style.zIndex="1000",this.#e.getContainer().appendChild(e)}}#w(){let e=document.getElementById(qa);if(!e||!this.#a||!this.#e)return;let t=e.querySelectorAll('[id^="polygon-box-"]');for(let r=0;r<t.length;r++)t[r].remove();for(let r=0;r<this.#a.length;r++){let o=this.#t(this.#a[r].bbox),i=document.createElement("div");i.id=`polygon-box-${r}`,i.style.position="absolute",e.appendChild(i);let s=[Math.min(o[0].x,o[1].x),Math.min(o[0].y,o[1].y)],a=[Math.max(o[0].x,o[1].x),Math.max(o[0].y,o[1].y)];i.style.top=s[1]+"px",i.style.left=s[0]+"px",i.style.width=a[0]-s[0]+"px",i.style.height=a[1]-s[1]+"px",i.style.border=`2px solid ${this.#I?"red":"blue"}`}}destroy(){this.#l.cancel(),this.#b(),super.destroy()}};function wr(){return R.logState<=0}function Vg(){let n=0,e=0,t=0;return{buildStart(){wr()&&(t=performance.now())},buildDone(r){wr()&&R.debug(`[OutdoorLayers] built ${r} footprints in ${(performance.now()-t).toFixed(1)}ms`)},computeStart(){wr()&&(n=0)},beginSpan(){wr()&&(e=performance.now())},endSpan(){wr()&&(n+=performance.now()-e)},computeDone(r,o,i){wr()&&R.debug(`[OutdoorLayers] compute cpu ${n.toFixed(1)}ms | polys=${r} added=${o} matched=${i}`)},styleLatch(r,o){wr()&&R.debug(`[OutdoorLayers] styledata stylesheet id "${r}" => "${o}"${!r&&o?" (initial id latch)":""}`)}}}f();f();f();f();var Ni=class extends Nt{tangentData;parameters;constructor(e,t={}){super(),Object.defineProperty(this,"type",{value:"RibbonGeometry"}),this.parameters={path:e};let r=t.segments??64,o=new O,i=new O,s=new O(0,0,1),a=(r+1)*2,l=new Float32Array(a*3),c=new Float32Array(a*3),u=new Float32Array(a*2),d=new Float32Array(a),h=[];this.tangentData=new Float32Array((r+1)*3);let g=0,b=0,M=0;for(let p=0;p<=r;p++){let m=p/r;e.getPointAt(m,o),e.getTangentAt(m,i);let y=p*3;this.tangentData[y]=i.x,this.tangentData[y+1]=i.y,this.tangentData[y+2]=i.z,l[g++]=o.x,l[g++]=o.y,l[g++]=o.z,l[g++]=o.x,l[g++]=o.y,l[g++]=o.z,d[M++]=-1,d[M++]=1,u[b++]=0,u[b++]=m,u[b++]=1,u[b++]=m;let v=p*2*3;c[v]=s.x,c[v+1]=s.y,c[v+2]=s.z,c[v+3]=s.x,c[v+4]=s.y,c[v+5]=s.z}for(let p=0;p<r;p++){let m=p*2;h.push(m,m+2,m+1),h.push(m+1,m+2,m+3)}this.setIndex(h),this.setAttribute("position",new pr(l,3)),this.setAttribute("normal",new pr(c,3)),this.setAttribute("uv",new pr(u,2)),this.setAttribute("side",new pr(d,1))}};f();var Bi=class extends ac{innerCurve;tStart;tEnd;constructor(e,t,r=!1){super(),this.innerCurve=e,r&&t>=4?(this.tStart=1/(t-1),this.tEnd=(t-2)/(t-1)):(this.tStart=0,this.tEnd=1)}get points(){return this.innerCurve.points}get tension(){return this.innerCurve.tension}get isTrimmed(){return this.tStart!==0||this.tEnd!==1}getPoint(e,t=new O){let r=this.tStart+e*(this.tEnd-this.tStart);return this.innerCurve.getPoint(r,t)}};f();var Gi=`// Force the compiler to compute gl_Position the same way across all shader
|
|
156
|
-
// programs that share this vertex transform. Without this, Apple Silicon /
|
|
157
|
-
// iOS GPU drivers may use different optimized FP paths between shader
|
|
158
|
-
// variants, producing precision drift that shows up as Z-fighting and path
|
|
159
|
-
// micro-jitter. See https://bugs.webkit.org/show_bug.cgi?id=237434
|
|
160
|
-
invariant gl_Position;
|
|
161
|
-
|
|
162
|
-
attribute float pathDistance;
|
|
163
|
-
attribute vec3 pathNormal;
|
|
164
|
-
attribute vec3 pathTangent;
|
|
165
|
-
attribute float side;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
uniform vec2 uvScale;
|
|
169
|
-
uniform float vertexes;
|
|
170
|
-
uniform float complete;
|
|
171
|
-
uniform float nearRadius;
|
|
172
|
-
uniform float farRadius;
|
|
173
|
-
uniform float nearZoom;
|
|
174
|
-
uniform float farZoom;
|
|
175
|
-
uniform float pulse;
|
|
176
|
-
uniform float pulseLength;
|
|
177
|
-
uniform bool pathIsVertical;
|
|
178
|
-
uniform bool displayArrowsOnPath;
|
|
179
|
-
uniform vec2 cameraParameters;
|
|
180
|
-
uniform bool isRibbon;
|
|
181
|
-
uniform float billboardThreshold;
|
|
182
|
-
uniform mat4 cameraViewMatrix;
|
|
183
|
-
uniform bool screenSpace;
|
|
184
|
-
uniform float metersPerPixel;
|
|
185
|
-
|
|
186
|
-
varying float zoomLevel;
|
|
187
|
-
varying float radius;
|
|
188
|
-
varying vec2 fragTexcoord;
|
|
189
|
-
varying float fragTopTextureU;
|
|
190
|
-
varying float fragPathDistance;
|
|
191
|
-
|
|
192
|
-
uniform float highlightStartFraction;
|
|
193
|
-
uniform float highlightEndFraction;
|
|
194
|
-
uniform float highlightCompleteFraction;
|
|
195
|
-
uniform float highlightWidthMultiplier;
|
|
196
|
-
uniform vec3 highlightColor;
|
|
197
|
-
|
|
198
|
-
uniform float travelledEndFraction;
|
|
199
|
-
uniform vec3 travelledColor;
|
|
200
|
-
|
|
201
|
-
float flattenFactor = 0.0;
|
|
202
|
-
|
|
203
|
-
// Map the x value from the range [xMin, xMax] to the range [yMin, yMax] using
|
|
204
|
-
// linear interpolation/extrapolation.
|
|
205
|
-
//
|
|
206
|
-
// This performs a pure linear mapping y = mx + b where
|
|
207
|
-
// 'm = (yMax - yMin) / (xMax - xMin)',
|
|
208
|
-
// 'b = -xMin * (yMax - yMin) / (xMax - xMin) + yMin'.
|
|
209
|
-
float remap(float x, float xMin, float xMax, float yMin, float yMax) {
|
|
210
|
-
return (x - xMin) / (xMax - xMin) * (yMax - yMin) + yMin;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// Map the x value from [xMin, xMax] to the range [yMin, yMax] using linear
|
|
214
|
-
// interpolation, clamping result values outside [yMin, yMax].
|
|
215
|
-
float clampRemap(float x, float xMin, float xMax, float yMin, float yMax) {
|
|
216
|
-
return clamp(remap(x, xMin, xMax, yMin, yMax), yMin, yMax);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
void main() {
|
|
220
|
-
// Defensive guard: if the position attribute is NaN (which can happen
|
|
221
|
-
// transiently after a WebGL context loss + restore on iOS Safari, before
|
|
222
|
-
// per-vertex buffers have been re-uploaded), output a vertex outside the
|
|
223
|
-
// clip volume so the GPU discards it cleanly. Without this, the ribbon
|
|
224
|
-
// expansion below produces a "fan of lines" artifact emanating from a
|
|
225
|
-
// single point on the map. NaN is the only value where x != x.
|
|
226
|
-
if (position.x != position.x || position.y != position.y || position.z != position.z) {
|
|
227
|
-
gl_Position = vec4(2.0, 2.0, 2.0, 1.0);
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
fragPathDistance = pathDistance;
|
|
232
|
-
|
|
233
|
-
vec3 adjustedPosition = position;
|
|
234
|
-
zoomLevel = clampRemap(cameraParameters.x, nearZoom, farZoom, 0.0, 1.0);
|
|
235
|
-
|
|
236
|
-
// Only apply normal-based expansion for TubeGeometry
|
|
237
|
-
// Ribbons have normal=(0,0,1) which would shift them up incorrectly
|
|
238
|
-
if (!isRibbon) {
|
|
239
|
-
float expansionFactor = (farRadius - nearRadius) * zoomLevel;
|
|
240
|
-
adjustedPosition += normal * expansionFactor;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
// Animate the reveal endpoint from highlightStartFraction to highlightEndFraction
|
|
244
|
-
// so the width expansion follows the same reveal as the fragment shader.
|
|
245
|
-
float revealedHighlightEnd = mix(highlightStartFraction, highlightEndFraction, highlightCompleteFraction);
|
|
246
|
-
bool isHighlighted = fragPathDistance > highlightStartFraction && fragPathDistance <= revealedHighlightEnd;
|
|
247
|
-
|
|
248
|
-
// For TubeGeometry: apply highlight width expansion using normal
|
|
249
|
-
if (!isRibbon && isHighlighted) {
|
|
250
|
-
adjustedPosition += normal * (highlightWidthMultiplier - 1.) / 2.;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// Unified ribbon width handling for both billboarded and non-billboarded
|
|
254
|
-
if (isRibbon) {
|
|
255
|
-
vec3 right;
|
|
256
|
-
|
|
257
|
-
// Determine if this vertex should billboard
|
|
258
|
-
// billboardThreshold < 0: off, == 0: unconditional, > 0: precomputed sin(angle)
|
|
259
|
-
bool shouldBillboard = billboardThreshold >= 0.0
|
|
260
|
-
&& abs(pathTangent.z) >= billboardThreshold;
|
|
261
|
-
|
|
262
|
-
if (shouldBillboard) {
|
|
263
|
-
// Camera-facing right vector
|
|
264
|
-
vec3 viewDir = -vec3(cameraViewMatrix[0][2], cameraViewMatrix[1][2], cameraViewMatrix[2][2]);
|
|
265
|
-
right = cross(pathTangent, viewDir);
|
|
266
|
-
float rightLen = length(right);
|
|
267
|
-
if (rightLen < 0.001) {
|
|
268
|
-
right = cross(pathTangent, vec3(0.0, 0.0, 1.0));
|
|
269
|
-
rightLen = length(right);
|
|
270
|
-
if (rightLen < 0.001) {
|
|
271
|
-
right = cross(pathTangent, vec3(0.0, 1.0, 0.0));
|
|
272
|
-
rightLen = length(right);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
right = right / max(rightLen, 0.001);
|
|
276
|
-
} else {
|
|
277
|
-
// Flat world-space right vector (perpendicular in XY plane)
|
|
278
|
-
right = vec3(-pathTangent.y, pathTangent.x, 0.0);
|
|
279
|
-
float rightLen = length(right);
|
|
280
|
-
if (rightLen > 0.001) {
|
|
281
|
-
right /= rightLen;
|
|
282
|
-
} else {
|
|
283
|
-
right = vec3(1.0, 0.0, 0.0);
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
// In screen-space mode, nearRadius/farRadius are pixel half-widths (and equal).
|
|
288
|
-
// Multiply by metersPerPixel to convert to world units so the path maintains
|
|
289
|
-
// a constant pixel width on screen regardless of zoom level.
|
|
290
|
-
float effNear = screenSpace ? nearRadius * metersPerPixel : nearRadius;
|
|
291
|
-
float effFar = screenSpace ? farRadius * metersPerPixel : farRadius;
|
|
292
|
-
|
|
293
|
-
// Apply base half-width (geometry stores centerline only)
|
|
294
|
-
adjustedPosition += right * effNear * side;
|
|
295
|
-
|
|
296
|
-
// Shared: zoom-based expansion
|
|
297
|
-
float expansionFactor = (effFar - effNear) * zoomLevel;
|
|
298
|
-
adjustedPosition += right * expansionFactor * side;
|
|
299
|
-
|
|
300
|
-
// Shared: highlight width expansion (using right instead of normal)
|
|
301
|
-
if (isHighlighted) {
|
|
302
|
-
float highlightExpansion = effNear * (highlightWidthMultiplier - 1.0);
|
|
303
|
-
adjustedPosition += right * highlightExpansion * side;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// For TubeGeometry: flatten the bottom half of the tube
|
|
308
|
-
if (!isRibbon && !pathIsVertical) {
|
|
309
|
-
// We can get an origin point for the cross-section of the path by
|
|
310
|
-
// subtracting the surface normal times the radius, since the surface normal
|
|
311
|
-
// points strictly away from the centre.
|
|
312
|
-
vec3 origin = position - nearRadius * normal;
|
|
313
|
-
|
|
314
|
-
// Determine how far the path extends "up" or "down" in the direction of the
|
|
315
|
-
// path normal.
|
|
316
|
-
float height = dot(adjustedPosition - origin, pathNormal);
|
|
317
|
-
|
|
318
|
-
// For horizontal paths, flatten the bottom half entirely so that it's flat
|
|
319
|
-
// against the floor. This makes the path look nicer when it's
|
|
320
|
-
// semitransparent behind opaque geometry, so you don't see it
|
|
321
|
-
// peeking through.
|
|
322
|
-
float desiredHeight = max(height, 0.0);
|
|
323
|
-
desiredHeight = desiredHeight * flattenFactor;
|
|
324
|
-
float flattenMagnitude = height - desiredHeight;
|
|
325
|
-
adjustedPosition = adjustedPosition - pathNormal * flattenMagnitude;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
// Transform the vertices into NDC.
|
|
329
|
-
vec4 mvPosition = modelViewMatrix * vec4(adjustedPosition, 1.0);
|
|
330
|
-
gl_Position = projectionMatrix * mvPosition;
|
|
331
|
-
|
|
332
|
-
fragTexcoord = uv;
|
|
333
|
-
|
|
334
|
-
// Compute fragTopTextureU for arrow texture mapping
|
|
335
|
-
if (isRibbon) {
|
|
336
|
-
// For RibbonGeometry: uv.x is already 0-1 across ribbon width
|
|
337
|
-
fragTopTextureU = uv.x;
|
|
338
|
-
} else {
|
|
339
|
-
// For TubeGeometry: compute texture coordinate to handle tube twisting
|
|
340
|
-
// We want the arrow texture to always be on the top of the path
|
|
341
|
-
vec3 bitangent = cross(normal, pathTangent);
|
|
342
|
-
fragTopTextureU = -dot(bitangent, pathNormal) * 0.5 + 0.5;
|
|
343
|
-
if (isHighlighted) {
|
|
344
|
-
fragTopTextureU = -dot(bitangent, pathNormal * highlightWidthMultiplier) * 0.5 + 0.5;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
radius = mix(nearRadius, farRadius, zoomLevel);
|
|
349
|
-
if (screenSpace && isRibbon) {
|
|
350
|
-
radius = radius * metersPerPixel;
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
`;f();var Ja=`#define ARROW_FADING_POINT 0.15
|
|
354
|
-
|
|
355
|
-
uniform float complete;
|
|
356
|
-
uniform float nearRadius;
|
|
357
|
-
uniform float farRadius;
|
|
358
|
-
uniform vec2 resolution;
|
|
359
|
-
uniform vec2 cameraParameters;
|
|
360
|
-
uniform vec3 color;
|
|
361
|
-
uniform float pathLength;
|
|
362
|
-
uniform bool showPulse;
|
|
363
|
-
uniform vec3 pulseColor;
|
|
364
|
-
uniform float pulse;
|
|
365
|
-
uniform float pulseLength;
|
|
366
|
-
uniform bool pathIsVertical;
|
|
367
|
-
uniform bool displayArrowsOnPath;
|
|
368
|
-
uniform float arrowAnimationTimer;
|
|
369
|
-
uniform float opacityMultiplier;
|
|
370
|
-
uniform bool dashed;
|
|
371
|
-
uniform float xrayDithering;
|
|
372
|
-
uniform float dashLength;
|
|
373
|
-
uniform float dashGap;
|
|
374
|
-
uniform bool dashRelativeToWidth;
|
|
375
|
-
uniform float dashSize;
|
|
376
|
-
uniform float gapSize;
|
|
377
|
-
uniform bool dashAbsolute;
|
|
378
|
-
uniform float dashMeters;
|
|
379
|
-
uniform float gapMeters;
|
|
380
|
-
uniform sampler2D arrowTexture;
|
|
381
|
-
|
|
382
|
-
varying float zoomLevel;
|
|
383
|
-
varying float radius;
|
|
384
|
-
varying vec2 fragTexcoord;
|
|
385
|
-
varying float fragTopTextureU;
|
|
386
|
-
varying float fragPathDistance;
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
uniform float highlightStartFraction;
|
|
390
|
-
uniform float highlightEndFraction;
|
|
391
|
-
uniform float highlightCompleteFraction;
|
|
392
|
-
uniform vec3 highlightColor;
|
|
393
|
-
uniform bool highlightDisplayArrowsOnPath;
|
|
394
|
-
|
|
395
|
-
uniform float travelledEndFraction;
|
|
396
|
-
uniform vec3 travelledColor;
|
|
397
|
-
|
|
398
|
-
// Border uniforms for ribbon geometry
|
|
399
|
-
uniform bool borderEnabled;
|
|
400
|
-
uniform vec3 borderColor;
|
|
401
|
-
uniform float borderWidth;
|
|
402
|
-
uniform bool borderUseDarken;
|
|
403
|
-
uniform bool isRibbon;
|
|
404
|
-
|
|
405
|
-
// Endcap uniforms for ribbon geometry
|
|
406
|
-
// x = start cap enabled (>0), y = end cap enabled (>0)
|
|
407
|
-
uniform vec2 endcapEnabled;
|
|
408
|
-
|
|
409
|
-
// How long the arrow should be, as a factor of pathRadius. Since we've
|
|
410
|
-
// mostly flattened the top of the path, values near 2.0 (the diameter)
|
|
411
|
-
// will probably look best.
|
|
412
|
-
const float arrowLength = 2.0;
|
|
413
|
-
|
|
414
|
-
// How much of a relative margin the arrow texture should have inside the
|
|
415
|
-
// area laid out for it. Useful to pull the arrow away from the edges of the
|
|
416
|
-
// path, which slope down.
|
|
417
|
-
const float arrowMargin = 0.1;
|
|
418
|
-
|
|
419
|
-
// How many arrow-lengths of space should be between arrows on a short path.
|
|
420
|
-
const float arrowSpacingOnShortPath = 6.0;
|
|
421
|
-
|
|
422
|
-
// How many arrow-lengths of space should be between arrows on a long path.
|
|
423
|
-
const float arrowSpacingOnLongPath = 7.5;
|
|
424
|
-
|
|
425
|
-
// How long a path must be to be considered "long", as a factor of
|
|
426
|
-
// the path radius.
|
|
427
|
-
const float longPathLength = 200.;
|
|
428
|
-
|
|
429
|
-
// How long a path must be to be considered "short", as a factor of the
|
|
430
|
-
// path radius.
|
|
431
|
-
const float shortPathLength = 75.;
|
|
432
|
-
|
|
433
|
-
// How much of the path's length the fade-in should comprise when going from
|
|
434
|
-
// zero opacity to full opacity.
|
|
435
|
-
const float completeLength = 0.1;
|
|
436
|
-
|
|
437
|
-
// Map the x value from the range [xMin, xMax] to the range [yMin, yMax] using
|
|
438
|
-
// linear interpolation/extrapolation.
|
|
439
|
-
//
|
|
440
|
-
// This performs a pure linear mapping 'y = mx + b' where
|
|
441
|
-
// 'm = (yMax - yMin) / (xMax - xMin)',
|
|
442
|
-
// 'b = -xMin * (yMax - yMin) / (xMax - xMin) + yMin'.
|
|
443
|
-
float remap(float x, float xMin, float xMax, float yMin, float yMax) {
|
|
444
|
-
return (x - xMin) / (xMax - xMin) * (yMax - yMin) + yMin;
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
// Map the x value from [xMin, xMax] to the range [yMin, yMax] using linear
|
|
448
|
-
// interpolation, clamping result values outside [yMin, yMax].
|
|
449
|
-
float clampRemap(float x, float xMin, float xMax, float yMin, float yMax) {
|
|
450
|
-
return clamp(remap(x, xMin, xMax, yMin, yMax), yMin, yMax);
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
void main(void) {
|
|
454
|
-
// Compute the opacity of the path based on the distance from the current
|
|
455
|
-
// fragment to the 'complete' value as it varies from 0.0 to 1.0.
|
|
456
|
-
// Fragments that are at the 'complete' value or past it will be fully
|
|
457
|
-
// transparent, while fragments that are at 'complete - completeLength'
|
|
458
|
-
// or before it will be fully opaque. However, we adjust the 'complete'
|
|
459
|
-
// value here so that it overshoots by one full 'completeLength', so that
|
|
460
|
-
// the entire path will be opaque when the 'complete' value is at 1.0.
|
|
461
|
-
float completeLocation = complete * (1.0 + completeLength);
|
|
462
|
-
float completeAmount = clampRemap(
|
|
463
|
-
fragPathDistance,
|
|
464
|
-
completeLocation - completeLength,
|
|
465
|
-
completeLocation,
|
|
466
|
-
0.0,
|
|
467
|
-
1.0
|
|
468
|
-
);
|
|
469
|
-
float opacity = 1.0 - smoothstep(0.0, 1.0, completeAmount);
|
|
470
|
-
|
|
471
|
-
// 2020/01/09 Terence Dickson
|
|
472
|
-
// When we render the background and overlay for the mapbox outdoor context
|
|
473
|
-
// behind everything else in single-buffer rendering, the fact that the path
|
|
474
|
-
// writes to the depth buffer means that the background and overlay will not
|
|
475
|
-
// be drawn behind the path even when the path is still fading in. The effect
|
|
476
|
-
// is subtle and is only visible in single-buffer rendering so this quick fix
|
|
477
|
-
// prevents writes to the depth buffer for zero opacity fragments, which gets
|
|
478
|
-
// rid of the most visually-offensive ghosting.
|
|
479
|
-
if (opacity <= 0.0) {
|
|
480
|
-
discard;
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
// Apply rounded endcaps for ribbon geometry using SDF
|
|
485
|
-
// endcapEnabled.x = start cap (>0 enabled), endcapEnabled.y = end cap (>0 enabled)
|
|
486
|
-
// Creates semicircular caps at start and/or end; disabled caps are square
|
|
487
|
-
float startCapOn = step(0.5, endcapEnabled.x);
|
|
488
|
-
float endCapOn = step(0.5, endcapEnabled.y);
|
|
489
|
-
if ((startCapOn > 0.5 || endCapOn > 0.5) && isRibbon) {
|
|
490
|
-
float endcapRadius = radius / pathLength;
|
|
491
|
-
float xDist = abs(fragTexcoord.x - 0.5);
|
|
492
|
-
float scaledXSq = xDist * xDist * 4.0;
|
|
493
|
-
|
|
494
|
-
// Start cap: only apply SDF when enabled
|
|
495
|
-
float startT = clamp(1.0 - fragPathDistance / endcapRadius, 0.0, 1.0);
|
|
496
|
-
float startSDF = startT * startT + scaledXSq - 1.0;
|
|
497
|
-
float inStartCap = step(fragPathDistance, endcapRadius);
|
|
498
|
-
float outsideStart = inStartCap * step(0.0, startSDF) * startCapOn;
|
|
499
|
-
|
|
500
|
-
// End cap: only apply SDF when enabled
|
|
501
|
-
float endCapPos = min(completeLocation, 1.0);
|
|
502
|
-
float endCapStart = endCapPos - endcapRadius;
|
|
503
|
-
float endT = clamp(1.0 - (endCapPos - fragPathDistance) / endcapRadius, 0.0, 1.0);
|
|
504
|
-
float endSDF = endT * endT + scaledXSq - 1.0;
|
|
505
|
-
float inEndCap = step(endCapStart, fragPathDistance);
|
|
506
|
-
float outsideEnd = inEndCap * step(0.0, endSDF) * endCapOn;
|
|
507
|
-
|
|
508
|
-
// Discard if outside semicircle in enabled cap region
|
|
509
|
-
if (max(outsideStart, outsideEnd) > 0.5) discard;
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
// Push in the texture coordinates so that they ramp up
|
|
513
|
-
// at 'arrowMargin' instead of at zero; this remapping looks somewhat
|
|
514
|
-
// like this:
|
|
515
|
-
// 1 ^ ___
|
|
516
|
-
// | /
|
|
517
|
-
// | /
|
|
518
|
-
// | /
|
|
519
|
-
// | /
|
|
520
|
-
// |___/
|
|
521
|
-
// 0 +---------->
|
|
522
|
-
// 0 ^ 1
|
|
523
|
-
// arrowMargin
|
|
524
|
-
// Making the arrows narrower on the path.
|
|
525
|
-
float u = fragTopTextureU;
|
|
526
|
-
u = clamp(
|
|
527
|
-
u * (1. / (1. - arrowMargin * 2.)) - (1. / (1. - arrowMargin * 2.) - 1.) / 2.,
|
|
528
|
-
0.0,
|
|
529
|
-
1.0
|
|
530
|
-
);
|
|
531
|
-
|
|
532
|
-
float arrowSpacing = clampRemap(
|
|
533
|
-
pathLength,
|
|
534
|
-
shortPathLength * radius,
|
|
535
|
-
longPathLength * radius,
|
|
536
|
-
arrowSpacingOnShortPath,
|
|
537
|
-
arrowSpacingOnLongPath
|
|
538
|
-
);
|
|
539
|
-
|
|
540
|
-
// Reduce the spacing between arrows when the camera zooms out, as increasing
|
|
541
|
-
// the path radius will increase the arrow size and thus be able to fit
|
|
542
|
-
// fewer arrows on in total, and this secondary movement of the arrows
|
|
543
|
-
// "zooming off" the end of the path is unpleasant
|
|
544
|
-
float expandAmount = mix(1.0, farRadius / nearRadius, zoomLevel);
|
|
545
|
-
float effectiveArrowSpacing =
|
|
546
|
-
arrowSpacing * 1.0 / expandAmount +
|
|
547
|
-
arrowMargin * 2.0;
|
|
548
|
-
|
|
549
|
-
float effectiveArrowLength = arrowLength * radius * (1. - arrowMargin * 2.0);
|
|
550
|
-
|
|
551
|
-
// Adjust the slope of the vertical texture coordinate so that it goes
|
|
552
|
-
// from 0 to 1 along the length of the arrow plus the spacing between
|
|
553
|
-
// arrows, and adjust its x-intercept so that one arrow moves to the
|
|
554
|
-
// exact position of the next arrow as 'arrowAnimationTimer' goes
|
|
555
|
-
// from 0 to 1
|
|
556
|
-
// Note: Using fragPathDistance (0-1 along path) for RibbonGeometry
|
|
557
|
-
float v = (
|
|
558
|
-
fragPathDistance * (pathLength / effectiveArrowLength)
|
|
559
|
-
- arrowAnimationTimer * (1. + effectiveArrowSpacing)
|
|
560
|
-
);
|
|
561
|
-
|
|
562
|
-
// Compute a "looping sawtooth" wave for determining the vertical texture
|
|
563
|
-
// coordinates of the arrow texture, roughly as follows:
|
|
564
|
-
// 3 ^ /
|
|
565
|
-
// | ___/
|
|
566
|
-
// 2 | /
|
|
567
|
-
// | ___/
|
|
568
|
-
// 1 | /
|
|
569
|
-
// |___/
|
|
570
|
-
// 0 +--------------->
|
|
571
|
-
// 0 ^ ^
|
|
572
|
-
// ^ |_|
|
|
573
|
-
// | effectiveArrowLength
|
|
574
|
-
// |___|
|
|
575
|
-
// effectiveArrowSpacing
|
|
576
|
-
//
|
|
577
|
-
// This is effectively equivalent to this sort of sawtooth wave:
|
|
578
|
-
// ^
|
|
579
|
-
// 1 | / / /
|
|
580
|
-
// |___/ ___/ ___/
|
|
581
|
-
// 0 +--------------->
|
|
582
|
-
//
|
|
583
|
-
// Causing the image of the arrow to repeat, with dead space (the bottom
|
|
584
|
-
// edge of the texture stretched out) between the arrows at the provided
|
|
585
|
-
// spacing. The reason why the "looping" design is preferred is because
|
|
586
|
-
// it takes advantage of WebGL's 'GL_REPEAT' texture wrapping behaviour
|
|
587
|
-
// to avoid the discontinuity that can end up causing visual artifacts.
|
|
588
|
-
if (mod(v, (1. + effectiveArrowSpacing)) < 1.) {
|
|
589
|
-
v = v - effectiveArrowSpacing * floor(v / (1. + effectiveArrowSpacing));
|
|
590
|
-
} else {
|
|
591
|
-
v = ceil(v / (1. + effectiveArrowSpacing));
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
// Use the r-component of the texture to determine whether the arrow covers
|
|
595
|
-
// this fragment or not
|
|
596
|
-
vec2 sampleTexcoord = vec2(u, v);
|
|
597
|
-
float arrowAmount = 0.0;
|
|
598
|
-
vec3 secondColor = pulseColor;
|
|
599
|
-
|
|
600
|
-
vec3 finalColor = color;
|
|
601
|
-
|
|
602
|
-
// Apply travelled color to the portion of the path that has been travelled.
|
|
603
|
-
if (fragPathDistance < travelledEndFraction) {
|
|
604
|
-
finalColor = travelledColor;
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
// Adjust the color based on the highlight but only if the fragment is within
|
|
608
|
-
// the highlight start and the currently revealed end. The revealed end animates
|
|
609
|
-
// from highlightStartFraction to highlightEndFraction so the reveal starts at
|
|
610
|
-
// the highlight's beginning regardless of where it sits along the path.
|
|
611
|
-
// [Anzor] 0.005 smooths the transition when the width multiplier is large.
|
|
612
|
-
float revealedHighlightEnd = mix(highlightStartFraction, highlightEndFraction, highlightCompleteFraction);
|
|
613
|
-
bool inHighlight = fragPathDistance > highlightStartFraction - 0.005 && fragPathDistance <= revealedHighlightEnd;
|
|
614
|
-
if (inHighlight) {
|
|
615
|
-
finalColor = highlightColor;
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
// Arrows can be toggled independently inside vs outside the highlight.
|
|
619
|
-
bool effectiveDisplayArrows = inHighlight ? highlightDisplayArrowsOnPath : displayArrowsOnPath;
|
|
620
|
-
|
|
621
|
-
// Apply border effect for ribbon geometry
|
|
622
|
-
// fragTexcoord.x: 0\u21921 across ribbon width; edgeDist = distance to nearest edge
|
|
623
|
-
if (borderEnabled && isRibbon) {
|
|
624
|
-
float edgeDist = min(fragTexcoord.x, 1.0 - fragTexcoord.x);
|
|
625
|
-
|
|
626
|
-
// For endcaps, compute radial distance from semicircle edge instead
|
|
627
|
-
float endcapRadius = radius / pathLength;
|
|
628
|
-
float endCapPos = min(completeLocation, 1.0);
|
|
629
|
-
float endCapStart = endCapPos - endcapRadius;
|
|
630
|
-
|
|
631
|
-
// Check each cap region independently
|
|
632
|
-
bool inStartRegion = fragPathDistance <= endcapRadius && startCapOn > 0.5;
|
|
633
|
-
bool inEndRegion = fragPathDistance > endCapStart && endCapOn > 0.5;
|
|
634
|
-
|
|
635
|
-
if (inStartRegion || inEndRegion) {
|
|
636
|
-
float xDist = abs(fragTexcoord.x - 0.5);
|
|
637
|
-
float scaledXSq = xDist * xDist * 4.0;
|
|
638
|
-
|
|
639
|
-
if (inStartRegion) {
|
|
640
|
-
float startT = 1.0 - fragPathDistance / endcapRadius;
|
|
641
|
-
float r = sqrt(startT * startT + scaledXSq);
|
|
642
|
-
edgeDist = 0.5 * (1.0 - r);
|
|
643
|
-
} else {
|
|
644
|
-
float endT = 1.0 - (endCapPos - fragPathDistance) / endcapRadius;
|
|
645
|
-
float r = sqrt(endT * endT + scaledXSq);
|
|
646
|
-
edgeDist = 0.5 * (1.0 - r);
|
|
647
|
-
}
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
if (edgeDist < borderWidth) {
|
|
651
|
-
finalColor = borderUseDarken ? finalColor * 0.6 : borderColor;
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
if (effectiveDisplayArrows) {
|
|
656
|
-
arrowAmount = texture2D(arrowTexture, sampleTexcoord).r;
|
|
657
|
-
float delta = 1.0 - abs(fragPathDistance * 2.0 - 1.0);
|
|
658
|
-
secondColor = mix(finalColor, pulseColor, 1.0 - smoothstep(ARROW_FADING_POINT, 0.0, delta));
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
if (dashed) {
|
|
662
|
-
float effectiveDashLength;
|
|
663
|
-
float effectiveGapLength;
|
|
664
|
-
|
|
665
|
-
if (dashAbsolute) {
|
|
666
|
-
// Absolute mode: dashMeters/gapMeters are in meters
|
|
667
|
-
// Convert to path-distance fraction using pathLength
|
|
668
|
-
effectiveDashLength = dashMeters / pathLength;
|
|
669
|
-
effectiveGapLength = gapMeters / pathLength;
|
|
670
|
-
} else if (dashRelativeToWidth) {
|
|
671
|
-
// Width-relative mode: dashSize/gapSize are multiples of path width
|
|
672
|
-
// Convert to path-distance fraction using radius
|
|
673
|
-
effectiveDashLength = (dashSize * radius * 2.0) / pathLength;
|
|
674
|
-
effectiveGapLength = (gapSize * radius * 2.0) / pathLength;
|
|
675
|
-
} else {
|
|
676
|
-
// Length-fraction mode: use dashLength/dashGap directly as path fractions
|
|
677
|
-
effectiveDashLength = dashLength;
|
|
678
|
-
effectiveGapLength = dashGap;
|
|
679
|
-
}
|
|
680
|
-
|
|
681
|
-
float totalLength = effectiveDashLength + effectiveGapLength;
|
|
682
|
-
float numSegments = ceil(1.0 / totalLength);
|
|
683
|
-
float adjustedTotalLength = 1.0 / numSegments;
|
|
684
|
-
float adjustedDashLength = adjustedTotalLength * (effectiveDashLength / totalLength);
|
|
685
|
-
float pattern = mod(fragPathDistance, adjustedTotalLength);
|
|
686
|
-
opacity = pattern < adjustedDashLength ? 1.0 : 0.0;
|
|
687
|
-
}
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
if (showPulse) {
|
|
692
|
-
// Add the pulse color to the path by determining how far the current fragment
|
|
693
|
-
// is from 'pulse'
|
|
694
|
-
float pulseLocation = remap(
|
|
695
|
-
pulse,
|
|
696
|
-
0.0,
|
|
697
|
-
1.0,
|
|
698
|
-
-pulseLength,
|
|
699
|
-
1.0 + pulseLength
|
|
700
|
-
);
|
|
701
|
-
float pulseDistance = smoothstep(
|
|
702
|
-
0.0,
|
|
703
|
-
pulseLength,
|
|
704
|
-
abs(fragPathDistance - pulseLocation)
|
|
705
|
-
);
|
|
706
|
-
|
|
707
|
-
// Blend the pulse color to the path based on how close this fragment is to
|
|
708
|
-
// the 'pulse' value and whether it's covered by an arrow -- but if it's
|
|
709
|
-
// covered by *both*, then we go back to using the regular path color
|
|
710
|
-
// (making arrows look like "holes" when they're overlapping the pulse.)
|
|
711
|
-
float pulseLevel = abs(1.0 - pulseDistance - arrowAmount);
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
gl_FragColor = vec4(mix(finalColor, secondColor, pulseLevel), opacity * opacityMultiplier);
|
|
715
|
-
} else if (effectiveDisplayArrows) {
|
|
716
|
-
gl_FragColor = vec4(mix(finalColor, pulseColor, arrowAmount), opacity * opacityMultiplier);
|
|
717
|
-
} else {
|
|
718
|
-
|
|
719
|
-
gl_FragColor = vec4(finalColor, opacity * opacityMultiplier);
|
|
720
|
-
}
|
|
721
|
-
// Checkerboard discard for x-ray effect. xrayDithering is a uniform so
|
|
722
|
-
// the outer branch is warp-coherent (zero cost when disabled).
|
|
723
|
-
if (xrayDithering > 0.0) {
|
|
724
|
-
float cx = floor(gl_FragCoord.x / xrayDithering);
|
|
725
|
-
float cy = floor(gl_FragCoord.y / xrayDithering);
|
|
726
|
-
if (mod(cx + cy, 2.0) < 0.5) discard;
|
|
727
|
-
}
|
|
728
|
-
#include <colorspace_fragment>
|
|
729
|
-
}
|
|
730
|
-
`;f();var yh=`uniform float complete;
|
|
731
|
-
uniform float nearRadius;
|
|
732
|
-
uniform float farRadius;
|
|
733
|
-
varying float fragPathDistance;
|
|
734
|
-
const float completeLength = 0.1;
|
|
735
|
-
|
|
736
|
-
// Map the x value from the range [xMin, xMax] to the range [yMin, yMax] using
|
|
737
|
-
// linear interpolation/extrapolation.
|
|
738
|
-
//
|
|
739
|
-
// This performs a pure linear mapping 'y = mx + b' where
|
|
740
|
-
// 'm = (yMax - yMin) / (xMax - xMin)',
|
|
741
|
-
// 'b = -xMin * (yMax - yMin) / (xMax - xMin) + yMin'.
|
|
742
|
-
float remap(float x, float xMin, float xMax, float yMin, float yMax) {
|
|
743
|
-
return (x - xMin) / (xMax - xMin) * (yMax - yMin) + yMin;
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
// Map the x value from [xMin, xMax] to the range [yMin, yMax] using linear
|
|
747
|
-
// interpolation, clamping result values outside [yMin, yMax].
|
|
748
|
-
float clampRemap(float x, float xMin, float xMax, float yMin, float yMax) {
|
|
749
|
-
return clamp(remap(x, xMin, xMax, yMin, yMax), yMin, yMax);
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
void main(void) {
|
|
753
|
-
// this ensures that the stencil mask moves along with the path above it, to avoid the progress bar effect
|
|
754
|
-
float completeLocation = complete * (1.0 + completeLength);
|
|
755
|
-
float completeAmount = clampRemap(
|
|
756
|
-
fragPathDistance,
|
|
757
|
-
completeLocation - completeLength,
|
|
758
|
-
completeLocation,
|
|
759
|
-
0.0,
|
|
760
|
-
1.0
|
|
761
|
-
);
|
|
762
|
-
float opacity = 1.0 - smoothstep(0.0, 1.0, completeAmount);
|
|
763
|
-
|
|
764
|
-
// 2020/01/09 Terence Dickson
|
|
765
|
-
// When we render the background and overlay for the mapbox outdoor context
|
|
766
|
-
// behind everything else in single-buffer rendering, the fact that the path
|
|
767
|
-
// writes to the depth buffer means that the background and overlay will not
|
|
768
|
-
// be drawn behind the path even when the path is still fading in. The effect
|
|
769
|
-
// is subtle and is only visible in single-buffer rendering so this quick fix
|
|
770
|
-
// prevents writes to the depth buffer for zero opacity fragments, which gets
|
|
771
|
-
// rid of the most visually-offensive ghosting.
|
|
772
|
-
if (opacity <= 0.0) {
|
|
773
|
-
discard;
|
|
774
|
-
}
|
|
775
|
-
|
|
776
|
-
gl_FragColor = vec4(0.0, 1.0, 0.0, opacity);
|
|
777
|
-
}`;var bh="data:image/png;base64,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";f();var ki=new O,zi=new O,qr=new O,vh=new O,Yt=new O,jg=.5,Zg=2;function Xg(n,e,t){let r=n.x-e.x,o=n.y-e.y,i=n.z-e.z,s=t.x-e.x,a=t.y-e.y,l=t.z-e.z,c=r*s+o*a+i*l,u=Math.sqrt(r*r+o*o+i*i),d=Math.sqrt(s*s+a*a+l*l);if(u===0||d===0)return 0;let h=c/(u*d),g=Math.max(-1,Math.min(1,h));return Math.acos(g)}function Sh(n,e=20){if(n.length<3||e<=0)return n;let t=e,r=e/2,o=[n[0]];for(let i=1;i<n.length-1;i++){let s=n[i],a=n[i-1],l=n[i+1],c=s.distanceTo(a),u=s.distanceTo(l);c>t&&(Yt.subVectors(s,a).normalize(),qr.set(s.x-Yt.x*r,s.y-Yt.y*r,s.z-Yt.z*r),o.push(qr.clone())),o.push(s),u>t&&(Yt.subVectors(l,s).normalize(),qr.set(s.x+Yt.x*r,s.y+Yt.y*r,s.z+Yt.z*r),o.push(qr.clone()))}return o.push(n[n.length-1]),o}var xh=.0025;function Mh(n,e,t,r=Math.PI*2/3){if(n.length<3||e<=0||t<=0)return n;let o=[n[0]];for(let i=1;i<n.length-1;i++){let s=n[i-1],a=n[i],l=n[i+1],c=a.distanceToSquared(s),u=a.distanceToSquared(l);if(c<xh||u<xh){o.push(a);continue}if(Xg(s,a,l)<r){ki.subVectors(a,s).normalize(),zi.subVectors(l,a).normalize();let h=Math.sqrt(c),g=Math.sqrt(u),b=Math.max(jg,Math.min(Zg,e)),M=Math.min(b,h*.5),p=Math.min(b,g*.5);qr.set(a.x-ki.x*M,a.y-ki.y*M,a.z-ki.z*M),vh.set(a.x+zi.x*p,a.y+zi.y*p,a.z+zi.z*p),o.push(qr.clone(),vh.clone())}else o.push(a)}return o.push(n[n.length-1]),o}var Tr=8,Ka=_t,Yg=new Eo,Ui=new O,Ch={h:0,s:0,l:0};function Qa(n,e,t=.2){return n.getHSL(Ch),e.copy(n).offsetHSL(0,-Ch.s*t,0)}function el(n,e){n.stencilWrite=e,e&&(n.stencilRef=qe.PATH,n.stencilFunc=hr,n.stencilZPass=hn,n.stencilZFail=le,n.stencilFail=le)}function tl(n){return n===!1?-1:n===!0?0:Math.sin(n*Math.PI/180)}function wh(n,e,t){if(n.length<2){let A=new He;return A.userData={entityId:"",type:"path"},{mesh:A,material:null,center:new O}}let{breakpoint:r,width:o,accentColor:i,completeFraction:s,isVertical:a,visibleThroughGeometry:l,dashed:c,highlightCompleteFraction:u,highlightStartFraction:d,highlightEndFraction:h,highlightColor:g,highlightWidthMultiplier:b,highlightDisplayArrowsOnPath:M,travelledEndFraction:p,travelledColor:m,xrayOpacity:y,xrayStyle:v,__EXPERIMENTAL_BILLBOARDING:x,__EXPERIMENTAL_PREVENT_SELF_OVERLAP:S}=e,{color:C}=t,D=!0,E=0,T=1/0,P=e.displayArrowsOnPath,I=!0,L,N;if(lr(o)){let A=Rt(o)/2;L=A,N=A}else if(typeof o=="object"){let A=e.parsedOutputValues;L=A[r]/2,N=(A[r+1]??A[r])/2}else L=o/2,N=o/2;let z=e.__EXPERIMENTAL_GEOMETRY==="ribbon",j=z?tl(x):-1,H=(t.altitude??0)+$g,Q=0;n[0].z+=H;for(let A=1;A<n.length;++A){n[A].z+=H;let _=n[A].x-n[A-1].x,ee=n[A].z-n[A-1].z;if(a)Q+=Math.sqrt(_*_+ee*ee);else{let ho=n[A].y-n[A-1].y;Q+=Math.sqrt(_*_+ho*ho+ee*ee)}}let G=n,J=e.smoothingCornerRadius??Mt.cornerRadius,ne=e.smoothingTension??Mt.tension,je=J>0&&ne>0;je&&(G=Sh(G),G=Mh(G,J,ne));let[ye,be]=e.__EXPERIMENTAL_ENDCAP_EXTENSION;if((ye>0||be>0)&&!a&&!z){let A=G[0],_=G[G.length-1],ee=je?.01:-.01;G.push(_.clone().setZ(_.z+ee)),G.unshift(A.clone().setZ(A.z+ee))}if(z&&!a&&G.length>=2){if(ye>0){let A=G[0],_=G[1];Ui.subVectors(_,A).normalize();let ee=A.clone().addScaledVector(Ui,-ye);G.unshift(ee)}if(be>0){let A=G[G.length-1],_=G[G.length-2];Ui.subVectors(A,_).normalize();let ee=A.clone().addScaledVector(Ui,be);G.push(ee)}}let Ze=Yg.load(bh);Ze.colorSpace=ur;let Qe=new k(C),mt=new k(i),et=e.__EXPERIMENTAL_BORDER,It=et?.enabled??!1,Fe=et?.color==="darken",Xe=et?.width??.1,ft=Fe?Qe.clone().multiplyScalar(.6):new k(et?.color??"#000000"),Se={vertexes:{type:"f",value:1},resolution:{type:"v2",value:new V(1,1)},cameraParameters:{type:"v2",value:new V(E,0)},complete:{type:"f",value:D?0:1},color:{type:"c",value:Qe},pathLength:{type:"f",value:Q},nearRadius:{type:"f",value:L},farRadius:{type:"f",value:N},nearZoom:{type:"f",value:E},farZoom:{type:"f",value:T},pulseColor:{type:"c",value:mt},pulse:{type:"f",value:0},pulseLength:{type:"f",value:.075},pathIsVertical:{type:"b",value:a},arrowAnimationTimer:{type:"f",value:0},arrowTexture:{type:"t",value:Ze},displayArrowsOnPath:{type:"b",value:P},showPulse:{type:"b",value:I},opacityMultiplier:{type:"f",value:1},dashed:{type:"b",value:c},xrayDithering:{type:"f",value:0},highlightCompleteFraction:{type:"f",value:u},highlightStartFraction:{type:"f",value:d},highlightEndFraction:{type:"f",value:h},highlightColor:{type:"c",value:new k(g)},highlightWidthMultiplier:{type:"f",value:b},highlightDisplayArrowsOnPath:{type:"b",value:M},travelledEndFraction:{type:"f",value:p},travelledColor:{type:"c",value:new k(m)},dashLength:{type:"f",value:e.dashLength},dashGap:{type:"f",value:e.dashGap},dashRelativeToWidth:{type:"b",value:e.dashRelativeToWidth},dashSize:{type:"f",value:e.dashSize},gapSize:{type:"f",value:e.gapSize},dashAbsolute:{type:"b",value:e.dashAbsolute},dashMeters:{type:"f",value:e.dashMeters},gapMeters:{type:"f",value:e.gapMeters},isRibbon:{type:"b",value:z},billboardThreshold:{type:"f",value:j},borderEnabled:{type:"b",value:It},borderColor:{type:"c",value:ft},borderWidth:{type:"f",value:Xe},borderUseDarken:{type:"b",value:Fe},endcapEnabled:{type:"v2",value:new V(z&&ye>0?1:0,z&&be>0?1:0)},cameraViewMatrix:{type:"m4",value:new Y},screenSpace:{type:"b",value:e.screenSpace},metersPerPixel:{type:"f",value:1}};if(je&&G.length>=2){let A=G[0],_=G[1],ee=G[G.length-1],ho=G[G.length-2],Vp=A.clone().sub(_).normalize(),Wp=A.clone().add(Vp.multiplyScalar(Eh));G.unshift(Wp);let jp=ee.clone().sub(ho).normalize(),Zp=ee.clone().add(jp.multiplyScalar(Eh));G.push(Zp)}let Ye=new lc(G);Ye.curveType="catmullrom",Ye.tension=je?ne:0;let Ne=z&&je,rr=new Bi(Ye,G.length,Ne),Be=qg*G.length,de=z?new Ni(rr,{segments:Be,billboarded:j>=0}):new cc(rr,Be,L,Tr,!1),so=new Float32Array(de.attributes.position.count),Pr=new ke(so,1);if(z)for(let A=0;A<=Be;A++){let _=A/Be;Pr.setX(A*2,_),Pr.setX(A*2+1,_)}else for(let A=0;A<=Be;A++){let _=A/Be;for(let ee=0;ee<=Tr;ee++)Pr.setX(A*(Tr+1)+ee,_)}de.setAttribute("pathDistance",Pr);let Ts=new Float32Array(de.attributes.position.count*3),nr=new ke(Ts,3),Ot,at,Ir,sn,ao;if(z){let A=de;for(let _=0;_<=Be;_++)at=_*3,Ir=A.tangentData[at],sn=A.tangentData[at+1],ao=A.tangentData[at+2],nr.setXYZ(_*2,Ir,sn,ao),nr.setXYZ(_*2+1,Ir,sn,ao)}else{let A=de;for(let _=0;_<=Be;_++){Ot=A.tangents[_];for(let ee=0;ee<=Tr;ee++)nr.setXYZ(_*(Tr+1)+ee,Ot.x,Ot.y,Ot.z)}}de.setAttribute("pathTangent",nr);let lo=new Float32Array(de.attributes.position.count*3),gt=new ke(lo,3),or,ir,sr,tt=new O,Nl=A=>{a?(or=A.x*A.y,ir=-1+A.y*A.y,sr=A.z*A.y):(or=-A.x*A.z,ir=-A.y*A.z,sr=1-A.z*A.z);let _=Math.sqrt(or*or+ir*ir+sr*sr);return _===0&&(_=1),tt.set(or/_,ir/_,sr/_),tt},co={x:0,y:0,z:0};if(z){let A=de;for(let _=0;_<=Be;_++)at=_*3,co.x=A.tangentData[at],co.y=A.tangentData[at+1],co.z=A.tangentData[at+2],Nl(co),gt.setXYZ(_*2,tt.x,tt.y,tt.z),gt.setXYZ(_*2+1,tt.x,tt.y,tt.z)}else{let A=de;for(let _=0;_<=Be;_++){Ot=A.tangents[_],Nl(Ot);for(let ee=0;ee<=Tr;ee++)gt.setXYZ(_*(Tr+1)+ee,tt.x,tt.y,tt.z)}}de.setAttribute("pathNormal",gt);let uo=new $e({uniforms:Se,vertexShader:Gi,fragmentShader:Ja,side:Ka});uo.transparent=!0,uo.alphaTest=.5,Se.resolution.value.x=1,Se.resolution.value.y=1,Se.vertexes.value=de.attributes.position.count,Se.arrowTexture.value.wrapS=un,Se.arrowTexture.value.wrapT=un,Se.arrowTexture.value.anisotropy=16;let Pe=new W(de,uo);Pe.name="path";let yt=Pe.clone();yt.name="xray";let Up=v?.color?new k(v.color):Qe,Hp=Qa(Up,new k,v?.tint),bt={...Se,color:{type:"c",value:Hp},opacityMultiplier:{type:"f",value:y},pathIsVertical:{type:"b",value:a},xrayDithering:{type:"f",value:v?.dithering??0}};bt.complete.value=1,yt.material=new $e({uniforms:bt,vertexShader:Gi,fragmentShader:Ja,side:Ka,transparent:!0}),yt.material.alphaTest=.5,yt.material.depthWrite=!1,yt.material.depthTest=!1,el(yt.material,S),bt.resolution.value.x=1,bt.resolution.value.y=1,bt.vertexes.value=de.attributes.position.count,bt.arrowTexture.value.wrapS=un,bt.arrowTexture.value.wrapT=un,bt.arrowTexture.value.anisotropy=16,bt.complete.value=s,Pe.userData=yt.userData=e.mesh.userData;let an=e.mesh;if(!l){let A=new $e({uniforms:Se,vertexShader:Gi,fragmentShader:yh,side:Ka}),_=new W(de,A);_.name="stencil",_.material.colorWrite=!1,_.material.stencilWrite=!0,_.material.stencilRef=qe.PATH,_.material.stencilFunc=Lr,_.material.stencilZPass=hn,_.material.stencilZFail=le,_.material.stencilFail=le,_.material.depthWrite=!1,_.material.depthTest=!0,_.userData=e.mesh.userData,an.add(_),an.add(yt),yt.renderOrder=ue.XRAY_PATH,Pe.renderOrder=ue.STENCIL_PATH}if(an.add(Pe),a){let A=new ce().setFromObject(Pe),_=new O;A.getCenter(_),an.children.forEach(ee=>{ee.geometry.center(),ee.position.copy(_)})}l&&(Pe.material.stencilWrite=!0,Pe.material.stencilRef=qe.PATH,Pe.material.stencilFunc=hr,Pe.material.stencilZPass=le,Pe.material.stencilZFail=le,Pe.material.stencilFail=le,Pe.material.needsUpdate=!0,Pe.layers.disableAll(),Pe.layers.enable(ue.ALWAYS_ON_TOP_PATHS)),de.computeBoundingBox();let Bl=new O;return de.boundingBox.getCenter(Bl),{mesh:an,material:uo,center:Bl}}var $g=.15,qg=30,Eh=.01;var Jg=.5,Th=new k,kn=class extends Z{rendererState;verticalDistanceDirty=!0;convertTo3DMapPosition;getParentContainer;convertZoomLevelToAltitude;constructor(e,t,r,o){super(),this.rendererState=e,this.convertTo3DMapPosition=t,this.getParentContainer=r,this.convertZoomLevelToAltitude=o}update(e,t,r,o){let i=!1;for(let s of this.rendererState.geometry3DsInScene)if(s&&s.type==="path"&&s.components[0].type==="path"){let a=s.components[0],l=s.components[1],c=a.isVertical&&this.verticalDistanceDirty;if(!(a instanceof br))continue;let u=[];if(a.dirty||l.dirty||c){if(a.mesh.parent!=null)for(let d=a.mesh.children.length-1;d>=0;d--)ve(a.mesh.children[0]);if(a.feature.features.length===2&&a.feature.features[0].properties.parentId&&a.feature.features[1].properties.parentId){let d=a.feature.features[0],h=a.feature.features[a.feature.features.length-1],g,b,M=d.geometry.coordinates[2]||0,p=h.geometry.coordinates[2]||0;d.properties.parentId&&(g=this.getParentContainer(d.properties.parentId,!0),g!=null&&g.altitude!=null&&(M+=g.altitude,a.isVertical=!0)),h.properties.parentId&&(b=this.getParentContainer(h.properties.parentId,!0),b!=null&&b.altitude!=null&&(p+=b.altitude,a.isVertical=!0));let m=this.convertTo3DMapPosition(d.geometry.coordinates[1],d.geometry.coordinates[0],M),y=this.convertTo3DMapPosition(h.geometry.coordinates[1],h.geometry.coordinates[0],p);Math.abs(m.z-y.z)>Jg&&g!=null&&g.visible&&b!=null&&b.visible&&(u=[m,y])}else{let d=a.feature.features;for(let h=0;h<d.length;h++)if(h===0||!Dc(d[h].geometry.coordinates,d[h-1].geometry.coordinates)){let g=this.convertTo3DMapPosition(d[h].geometry.coordinates[1],d[h].geometry.coordinates[0],d[h].geometry.coordinates[2]||0);u.push(g)}}if(u.length>1){let{mesh:d,material:h,center:g}=wh(u,a,{color:l.color,altitude:l.altitude,isVertical:a.isVertical});a.mesh=d,a.material=h,a.position=g}a.dirty&&typeof a.width=="object"&&a.width.on==="zoom-level"&&(a.altitudeBreakpoints=a.width.input.map(d=>this.convertZoomLevelToAltitude(d))),a.dirty=!1}l.dirty&&(a.mesh.children.forEach(d=>{d.name!=="stencil"&&(d.name==="xray"?Ph(l.color,a,d.material.uniforms.color.value):d.material.uniforms.color.value.set(l.color),d.material.visible=l.visible,d.material.needsUpdate=!0,d.name!=="xray"&&a.__EXPERIMENTAL_BORDER?.color==="darken"&&d.material.uniforms.borderColor.value.copy(d.material.uniforms.color.value).multiplyScalar(.6))}),a.mesh.position.z=l.altitude,l.dirty=!1),a.material&&(a.mesh.children.forEach(d=>{let h=d.material.uniforms;if(d.name==="stencil"){a.materialDirty&&Dh(a,d.material);return}if(a.materialDirty&&d.name==="xray"&&h.opacityMultiplier&&(h.opacityMultiplier.value=a.xrayOpacity,h.xrayDithering.value=a.xrayStyle?.dithering??0,Ph(l.color,a,h.color.value),el(d.material,a.__EXPERIMENTAL_PREVENT_SELF_OVERLAP)),typeof a.width=="object"&&a.width.on==="zoom-level"){a.altitudeBreakpoints&&a.altitudeBreakpoints.length>2&&R.warn("Path width interpolation does not yet support more than 2 breakpoints! This will be added in a future version. Path width will only use the first two breakpoints.");let g=Hl(r,a.altitudeBreakpoints?.slice(0,2)??[e,t]);a.breakpoint=g,h.nearZoom.value=a.altitudeBreakpoints?.[g]??e,h.farZoom.value=a.altitudeBreakpoints?.[g+1]??t;let b=a.parsedOutputValues;h.nearRadius.value=b[g]/2,h.farRadius.value=(b[g+1]??b[g])/2}if(h.cameraParameters.value.x=r,h.metersPerPixel.value=o,h.cameraViewMatrix.value.copy(this.rendererState.cameraObject.matrixWorldInverse),a.materialDirty){h.displayArrowsOnPath.value=a.displayArrowsOnPath,h.pulseColor.value.set(a.accentColor),h.complete.value=a.completeFraction,Dh(a,d.material),h.dashed.value=a.dashed,h.dashLength.value=a.dashLength,h.dashGap.value=a.dashGap,h.dashRelativeToWidth.value=a.dashRelativeToWidth,h.dashSize.value=a.dashSize,h.gapSize.value=a.gapSize,h.dashAbsolute.value=a.dashAbsolute,h.dashMeters.value=a.dashMeters,h.gapMeters.value=a.gapMeters;let g=a.__EXPERIMENTAL_BORDER;h.borderEnabled.value=g?.enabled??!1,h.borderWidth.value=g?.width??.1,g?.color==="darken"?h.borderColor.value.copy(h.color.value).multiplyScalar(.6):h.borderColor.value.set(g?.color??"#000000"),h.borderUseDarken.value=g?.color==="darken",h.billboardThreshold.value=tl(a.__EXPERIMENTAL_BILLBOARDING);let[b,M]=a.__EXPERIMENTAL_ENDCAP_EXTENSION;if(h.endcapEnabled.value.set(b>0?1:0,M>0?1:0),h.screenSpace.value=a.screenSpace,lr(a.width)){h.nearZoom.value=e,h.farZoom.value=t;let p=Rt(a.width);h.nearRadius.value=p/2,h.farRadius.value=p/2}else typeof a.width=="number"&&(h.nearZoom.value=e,h.farZoom.value=t,h.nearRadius.value=Number(a.width)/2,h.farRadius.value=Number(a.width)/2)}}),(a.displayArrowsOnPath||a.highlightDisplayArrowsOnPath)&&a.animateArrowsOnPath&&(a.mesh.children.forEach(d=>{d.name!=="stencil"&&(d.material.uniforms.arrowAnimationTimer.value=performance.now()/3e3,d.material.needsUpdate=!0)}),i=!0),a.materialDirty=!1)}this.verticalDistanceDirty=!1,i&&this.publish("animate:path")}};function Dh(n,e){let t=e.uniforms;t.highlightCompleteFraction.value=n.highlightCompleteFraction,t.highlightStartFraction.value=n.highlightStartFraction,t.highlightEndFraction.value=n.highlightEndFraction,t.highlightWidthMultiplier.value=n.highlightWidthMultiplier,t.highlightColor.value.set(n.highlightColor),t.highlightDisplayArrowsOnPath.value=n.highlightDisplayArrowsOnPath,t.travelledEndFraction.value=n.travelledEndFraction,t.travelledColor.value.set(n.travelledColor)}function Ph(n,e,t){let r=e.xrayStyle?.color?Th.set(e.xrayStyle.color):Th.set(n);Qa(r,t,e.xrayStyle?.tint)}f();var Hi=class{rendererState;dirty=!1;constructor(e){this.rendererState=e}#e;#n;#i;#o=new Y;updateOne(e){if(e instanceof $&&e.components[0]instanceof oe&&e.components[1]instanceof ut&&e.parentObject3D instanceof Ce&&(this.#e=e.components[0],this.#i=e.components[1],!this.#e.detached&&this.#e.shouldDetach&&this.#e.mesh!=null&&this.#e.material instanceof vn&&this.#e.batchedProps!=null)){this.#n=e.parentObject3D,this.#e.visible=!1;let t=this.#i.color,r=this.#i.opacity*zr(e),o=this.#e.material,i=r??1,s=o.clone({color:t,side:Vc(this.#i.side,i),opacity:i,transparent:i<1}),a=new Eu(1,this.#e.batchedProps.positionCount,0,s);a.layers.enable(Oe.SHOULD_CAST_SHADOWS);let l=Lu(this.#e,a,this.#o);if(l==null)return;a.userData={entities:{0:e.id},detached:!0},this.#e.instanceIndex=l,s.setColor(this.#e.instanceIndex,new k(t),this.#i.topColor?new k(this.#i.topColor):new k(t)),this.#e.mesh=a,this.#e.currentHeight=-1,this.#e.material=s,this.#n.add(a),this.#e.shouldDetach=!1,this.#e.detached=!0,this.#i.dirty=!0}}update(){if(!this.dirty)return;let e;for(let t of this.rendererState.geometry3DIdsInScene)e=this.rendererState.geometry3DMap.get(t),this.updateOne(e);this.dirty=!1,this.cleanup()}cleanup(){this.#e=void 0,this.#n=void 0,this.#i=void 0}};f();f();var $t=new Y,zn=new O,Vi=new Ft,Un=new O;function rl(n,e,t){let r=e||1e-4,o=r/Math.max(t,1e-4);return n.mesh instanceof Wt?(n.mesh.scale.z=o,n.currentHeight=r,!0):n.batchedProps?.range&&Ur(n.mesh)&&n.instanceIndex!==-1?(n.mesh.getMatrixAt(n.instanceIndex,$t),$t.decompose(zn,Vi,Un),Un.z=o,$t.compose(zn,Vi,Un),n.mesh.setMatrixAt(n.instanceIndex,$t),n.material&&(n.material.repeatYFactor=o),n.currentHeight=r,!0):!1}function Ih(n,e){return Ur(n.mesh)&&n.instanceIndex!==-1?(n.mesh.getMatrixAt(n.instanceIndex,$t),$t.decompose(zn,Vi,Un),zn.z=e,$t.compose(zn,Vi,Un),n.mesh.setMatrixAt(n.instanceIndex,$t),n.altitude=e,!0):!1}var Wi=class{rendererState;dirty=!1;constructor(e){this.rendererState=e}#e;#n;updateOne(e){if(e instanceof $&&e.type==="geometry"&&e.components[1]?.dirty&&(this.#e=e.components[0],this.#n=e.components[1],e.type==="geometry"))if(this.#e.mesh instanceof Wt){let t=!1;this.#n.height!==this.#e.currentHeight&&(t=rl(this.#e,this.#n.height,this.#n.initialHeight)),this.#n.altitude!==this.#e.altitude&&(this.#e.mesh.position.z=this.#n.altitude),t&&this.#e.mesh!=null&&this.#e.mesh.geometry.computeBoundingSphere()}else{let t=!1;this.#n.height!==this.#e.currentHeight&&(t=rl(this.#e,this.#n.height,this.#n.initialHeight)),this.#n.altitude!==this.#e.altitude&&(t=Ih(this.#e,this.#n.altitude)),t&&this.#e.mesh!=null&&this.#e.mesh.computeBoundingSphere()}}update(){for(let e of this.rendererState.geometry3DsInScene)this.updateOne(e);this.cleanup()}cleanup(){this.#e=void 0,this.#n=void 0}};f();var Kg={showPolygonLabelTextAreaMesh:!1,showEnvMap:!1,showCollisionBoxes:!1,showGeometryInFocus:!1,showImageLOD:!1,showModelInstancingStats:!1,showScreenOffsets:!1,showCameraTargets:!1,focusOn:!1},ji=class{state=Kg;core;constructor(e){this.core=e}update(e){let t={};for(let r of Object.keys(e))r in this.state&&this.state[r]!==e[r]&&(Object.assign(this.state,{[r]:e[r]}),Object.assign(t,{[r]:e[r]}));this.handleUpdate(t)}handleUpdate(e){if(e.showPolygonLabelTextAreaMesh!=null&&(e.showPolygonLabelTextAreaMesh?this.core.getSystems().text3DSystem.showTextAreaMesh():this.core.getSystems().text3DSystem.hideTextAreaMesh()),e.showEnvMap!=null&&(e.showEnvMap?this.core.setEnvironment("basic"):this.core.setEnvironment(!1)),e.showCollisionBoxes!=null&&(e.showCollisionBoxes?this.core.showCollisionBoxes():this.core.hideCollisionBoxes()),e.showGeometryInFocus!=null&&(e.showGeometryInFocus?this.core.getSystems().geometryInFocusSystem.showDebug():this.core.getSystems().geometryInFocusSystem.hideDebug()),e.showImageLOD!=null&&(this.core.getSystems().imageSystem.debugLOD=e.showImageLOD,this.core.render()),e.showModelInstancingStats!=null&&(e.showModelInstancingStats?this.core.getSystems().modelSystem.showDebug():this.core.getSystems().modelSystem.hideDebug()),e.showScreenOffsets!=null&&(e.showScreenOffsets?this.core.camera.showScreenOffsetsDebug():this.core.camera.hideScreenOffsetsDebug()),e.showCameraTargets!=null&&(e.showCameraTargets?this.core.camera.showCameraTargetsDebug():this.core.camera.hideCameraTargetsDebug()),"focusOn"in e){let t=e.focusOn;t===!1||t==null?this.core.camera.hideFocusOnDebug():this.core.camera.showFocusOnDebug(t)}}};f();f();function Oh(){return typeof window<"u"&&window.__MAPPEDIN_E2E__===!0}var Hn=9,Qg=!1,Lh=.1,Ah=9;function ey(n,e,t){for(let r=0;r<e;r++){let o=(t&16711680)>>16,i=(t&65280)>>8,s=t&255;n[r*3]=o/255,n[r*3+1]=i/255,n[r*3+2]=s/255}}var Zi=class{state;renderer;renderService;pickingTexture;pickingMaterial;pixelBuffer;width=0;height=0;scale=1/2;color=1;convertTo3DMapPosition;destroyed=!1;enabled=!1;backgroundId=16777215;applyId(e,t){let r=e.attributes.position,o=new Float32Array(r.count*3);ey(o,r.count,t),e.setAttribute("color",new ke(o,3))}createOccluderMesh(e,t){let r=new W(e,this.pickingMaterial);return r.layers.set(Hn),this.applyId(r.geometry,t),r.userData.occluderId=t,r}constructor(e,t,r){if(this.state=e,this.convertTo3DMapPosition=t,r?.renderer==null)throw new Error("No Renderer");this.renderService=r,this.renderer=r.renderer,this.resize(),this.pickingMaterial=new $e({glslVersion:Ql,vertexShader:`
|
|
778
|
-
attribute vec3 color;
|
|
779
|
-
varying vec3 vColor;
|
|
780
|
-
void main() {
|
|
781
|
-
vColor = color;
|
|
782
|
-
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
783
|
-
}
|
|
784
|
-
`,fragmentShader:`
|
|
785
|
-
varying vec3 vColor;
|
|
786
|
-
out vec4 fragColor;
|
|
787
|
-
|
|
788
|
-
void main() {
|
|
789
|
-
fragColor = vec4(vColor, 1.0);
|
|
790
|
-
}
|
|
791
|
-
`})}reserveOccluderId(){return this.color++,this.color}enable(){this.enabled=!0}disable(){this.enabled=!1}resize=()=>{let e=this.state.pixelRatio;this.width=Math.floor(this.renderer.domElement.width/e*this.scale),this.height=Math.floor(this.renderer.domElement.height/e*this.scale),this.pixelBuffer=new Uint8Array(4*this.width*this.height),this.pickingTexture=new pn(this.width,this.height,{format:ql,type:Yl,internalFormat:"RGBA"})};shouldShowByXY=(e,t,r)=>{if(this.pixelBuffer==null)return!1;let o=e+(this.height-t-1)*this.width,i=this.pixelBuffer[o*4],s=this.pixelBuffer[o*4+1],a=this.pixelBuffer[o*4+2],l=i<<16|s<<8|a;return l===r||l===this.backgroundId};activeOccluders=new Set;framesSinceLastUpdate=Ah;update=()=>{if(Oh()){this.updateImmediately();return}this.framesSinceLastUpdate++,this.framesSinceLastUpdate>=Ah&&(this.framesSinceLastUpdate=0,this.updateImmediately())};updateImmediately=()=>{if(!this.enabled||this.destroyed||(this.activeOccluders.clear(),this.activeOccluders.add(this.backgroundId),!this.pickingTexture||!this.pixelBuffer))return;let e,t;for(let o of this.state.geometry3DsInScene)if(o?.type==="group-container"&&o.userData.occluderFeature!=null&&o.userData.occluderId!=null&&(this.activeOccluders.add(o.userData.occluderId),o.userData.occluderDirty)){if(e=o.userData.occluderFeature,e.geometry.type==="Polygon"&&e.geometry.coordinates.length>0){let i=Zo(e,this.convertTo3DMapPosition,{color:"white",height:Lh});t=this.createOccluderMesh(i,o.userData.occluderId),o.add(t)}else if(e.geometry.type==="MultiPolygon"){let i=Xo(e,this.convertTo3DMapPosition,{color:"white",height:Lh});t=this.createOccluderMesh(i,o.userData.occluderId),o?.add(t)}o.userData.occluderDirty=!1}this.renderer.setRenderTarget(this.pickingTexture);let r=new k(this.backgroundId);this.renderer.setClearColor(r),this.renderer.clear(),this.state.cameraObject.layers.disableAll(),this.state.cameraObject.layers.enable(Hn),this.renderService.renderScene(this.state.geometryScene.parent,this.state.cameraObject),this.renderer.setRenderTarget(null),this.state.cameraObject.layers.disable(Hn),Qg?this.renderService.enabledLayers.add(Hn):this.renderService.enabledLayers.delete(Hn),this.renderer.readRenderTargetPixelsAsync(this.pickingTexture,0,0,this.width,this.height,this.pixelBuffer).then(()=>{if(!this.destroyed)for(let o of this.state.geometry2DsInScene){let i=o?.components[2];if(o&&i?.id!=null&&this.activeOccluders.has(i.id)&&i?.enabled){let s=o.components[0].projection,a=Math.floor(s.x*this.scale),l=Math.floor(s.y*this.scale),c=this.shouldShowByXY(a,l,i.id);o.components[0].isOccluded=!c}else o&&i&&!i.enabled&&(o.components[0].isOccluded=!1)}}).catch(o=>{this.destroyed||R.error(o)})};destroy(){this.destroyed=!0,this.pickingTexture?.dispose(),this.pickingMaterial.dispose(),this.pickingTexture=void 0,this.pixelBuffer=void 0}};f();var Xi=class{constructor(e){this.state=e}dirty=!0;update(){if(this.dirty){for(let e of this.state.geometry3DIdsInScene){let t=this.state.geometry3DMap.get(e);if(t instanceof $&&t.type==="geometry"&&t.components[0]?.geometry!=null){let r=t.components[0];if(r.mesh instanceof Wt)continue;r.geometry&&(r.geometry.dispose(),r.geometry=void 0)}}this.dirty=!1}}};f();var Yi=class extends Z{dirty=!0;state;constructor(e){super(),this.state=e}texturePromiseCache=new Map;async loadTexture(e){if(this.texturePromiseCache.has(e))return this.texturePromiseCache.get(e);let t=new Promise((r,o)=>{jt.getLoader().load(e,r,void 0,o)});return this.texturePromiseCache.set(e,t),t}update(){for(let e of this.state.geometry3DsInScene){if(!(e instanceof $))continue;let t=e.components[6];if(!(t instanceof gr))continue;let r=e.components[0];if(!(r instanceof oe)||!t.dirty)continue;let o=bn(r);o!=null&&(t.texture!=null&&(t.texture.path===""?(o.texture=null,o.hideTextures(r.instanceIndex),t.dirty=!1):this.loadTexture(t.texture.path).then(i=>{i&&(t.textureInstance=i,o.texture=i,o.blendTexture=!0,o.showTextures(r.instanceIndex)),this.publish("texture-added")})),t.topTexture!=null&&(t.topTexture.path===""?(o.topTexture=null,o.hideTextures(r.instanceIndex),t.dirty=!1):this.loadTexture(t.topTexture.path).then(i=>{i&&(t.topTextureInstance=i,o.topTexture=i,o.blendTexture=!0,o.showTextures(r.instanceIndex)),this.publish("texture-added")})),t.dirty=!1)}}destroy(){this.texturePromiseCache.forEach(async e=>{(await e).dispose()}),this.texturePromiseCache.clear()}};f();var $i=class{currentOrder=ue.ALWAYS_ON_TOP_MODELS;assignedOrders=new WeakMap;state;constructor(e){this.state=e}assignOrder(e){return this.assignedOrders.has(e)?this.assignedOrders.get(e):(this.currentOrder+=1,this.assignedOrders.set(e,this.currentOrder),this.currentOrder)}releaseOrder(e){return this.assignedOrders.delete(e),ue.GEOMETRY}getHighestOrder(){return this.currentOrder}getOrder(e){return this.assignedOrders.get(e)}update(){let e,t;for(let r of this.state.geometry3DsInScene)if(r&&r.type==="model"&&(e=r.components[1],e?.renderOrderDirty)){if(t=r.components[0],!t.mesh)continue;if(t.visibleThroughGeometry=e.visibleThroughGeometry,e.visibleThroughGeometry===!0){let o=this.assignOrder(t);t.renderOrder=o,this.applyRenderOrder(t)}else t.renderOrder>ue.GEOMETRY&&(t.renderOrder=this.releaseOrder(t),this.applyRenderOrder(t));e.renderOrderDirty=!1}}applyRenderOrder(e){if(!e.mesh)return;let t=e.renderOrder,r=e.visibleThroughGeometry;if(e.mesh.children[0]instanceof K){e.mesh.renderOrder=t;for(let i of e.mesh.children)i instanceof K&&(i.renderOrder=t);if(e.mesh.userData?.detached)for(let i of e.mesh.children)i instanceof K&&(Array.isArray(i.material)?i.material.forEach(s=>{s.depthWrite=!r,s.depthTest=!r,r&&(s.transparent=!0),s.needsUpdate=!0}):(i.material.depthWrite=!r,i.material.depthTest=!r,r&&(i.material.transparent=!0),i.material.needsUpdate=!0))}else e.mesh.traverse(o=>{let i=o;"isMesh"in i&&i.isMesh===!0&&i.material&&(i.renderOrder=t,Array.isArray(i.material)?i.material.forEach(s=>{s.depthWrite=!r,s.depthTest=!r,r&&(s.transparent=!0),s.needsUpdate=!0}):(i.material.depthWrite=!r,i.material.depthTest=!r,r&&(i.material.transparent=!0),i.material.needsUpdate=!0))})}};f();var qi=class n{state;constructor(e){this.state=e}applyMask(e,t,r){this.disableMask(e,t),r.mode==="mask"&&r.maskId!=null&&r.enabled?this.enableMaskProducer(e,t,r):r.mode==="masked-object"&&r.maskId!=null&&r.enabled&&this.enableMaskReciever(e,r)}update(){let e;for(let t of this.state.geometry3DsInScene)t?.type==="feature-collection"&&(!On(t,this.state)||In(t)&&On(t,this.state))&&(e=t.components[0],e?.dirty&&(t.traverse(r=>{(r instanceof W||r instanceof Gt)&&r.material instanceof rc&&e!=null&&!r.userData.detached&&(this.disableMask(r.material,r),this.applyMask(r.material,r,e))}),e.dirty=!1))}static MASK_RENDER_ORDER=-1e3;enableMaskProducer(e,t,r){e.stencilWrite=!0,e.colorWrite=!1,e.stencilRef=r.maskId,e.stencilFunc=Lr,e.stencilZPass=hn,e.stencilZFail=le,e.stencilFail=le,e.needsUpdate=!0,e.depthWrite=!1,t.userData.originalTransparent===void 0&&(t.userData.originalTransparent=e.transparent),e.transparent=!1,t.layers.disableAll(),t.layers.set(ue.GEOMETRY),t.userData.originalRenderOrder===void 0&&(t.userData.originalRenderOrder=t.renderOrder),t.renderOrder=n.MASK_RENDER_ORDER}enableMaskReciever(e,t){e.stencilWrite=!0,e.stencilRef=t.maskId,e.stencilFunc=t.effect==="reveal"?xo:hr,e.stencilZPass=le,e.stencilZFail=le,e.stencilFail=le,e.needsUpdate=!0}disableMask(e,t){e.stencilWrite=!1,e.colorWrite=!0,t.userData.originalTransparent!==void 0&&(e.transparent=t.userData.originalTransparent,delete t.userData.originalTransparent),e.needsUpdate=!0,t.layers.disableAll(),t.layers.set(ue.GEOMETRY),t.userData.originalRenderOrder!==void 0&&(t.renderOrder=t.userData.originalRenderOrder,delete t.userData.originalRenderOrder)}};f();var Rh=.5,Ji=class{rendererState;dirty=!1;constructor(e){this.rendererState=e}update(){let e,t,r;for(let o of this.rendererState.geometry3DsInScene)if(t=o.components[0],r=o.components[1],e=o.components[7],o.type==="model"&&e!=null&&r?.EXPERIMENTAL_clippingEnabled&&(e.dirty&&t.mesh!=null&&(e.plane==null&&(e.plane=new oc(new O(0,0,-1),e.verticalOffset),this.process(t,e)),e.plane.constant!==e.verticalOffset&&(e.plane.constant=e.verticalOffset),e.topColor!=null&&e.holeFillMesh?.material instanceof mn&&e.holeFillMesh.material.color.set(e.topColor),e.topVisible!=null&&e.holeFillMesh!=null&&(e.holeFillMesh.visible=e.topVisible,e.holeFillGroup!=null&&(e.holeFillGroup.visible=e.topVisible)),e.dirty=!1),e.plane!=null&&e.holeFillMesh!=null&&e.topVisible===!0)){let i=e.holeFillMesh,s=e.verticalOffset,a=e.bboxCenter?.x??0,l=e.bboxCenter?.y??0;i.position.set(a,l,s),i.lookAt(a,l,s+1)}}process(e,t){if(e.mesh==null)return;let r=e.mesh.parent,o=[];e.mesh.traverse(m=>{if(m instanceof W){let y=m.geometry.clone();if(m instanceof K){let v=e.instanceIndex??0,x=new Y;m.getMatrixAt(v,x),y.applyMatrix4(x)}else m.updateWorldMatrix(!0,!1),y.applyMatrix4(m.matrixWorld);o.push(y),y.computeVertexNormals(),m.material.clippingPlanes=[t.plane]}});let i=ze(o),s=new So,a=new So;i.computeBoundingBox();let l=i.boundingBox,c=(l.min.x+l.max.x)/2,u=(l.min.y+l.max.y)/2,d=l.max.x-l.min.x+Rh*2,h=l.max.y-l.min.y+Rh*2;t.bboxCenter={x:c,y:u};let g=new Ie(d,h),b=this.createHoleFillGeometry(i,t.plane,1);b.name="hole-fill-group",t.holeFillGroup=b;let M=new mn({color:t.topColor??"#E67B5B",clippingPlanes:[],stencilWrite:!0,stencilRef:qe.CLIPPING_BIT,stencilFunc:xo,stencilFuncMask:qe.CLIPPING_BIT,stencilWriteMask:qe.CLIPPING_BIT,stencilFail:le,stencilZFail:le,stencilZPass:Kl}),p=new W(g,M);p.name="hole-fill-mesh",t.holeFillMesh=p,p.renderOrder=1.1,a.add(b),a.add(e.mesh),s.add(a),s.add(p),r?.add(s),e.mesh=s}createHoleFillGeometry(e,t,r=0){let o=new So,i=new Me;i.depthWrite=!1,i.depthTest=!1,i.colorWrite=!1,i.stencilWrite=!0,i.stencilFunc=Lr,i.stencilWriteMask=qe.CLIPPING_BIT;let s=i.clone();s.side=jl,s.clippingPlanes=[t],s.stencilFail=dr,s.stencilZFail=dr,s.stencilZPass=dr;let a=new W(e,s);a.renderOrder=r,o.add(a);let l=i.clone();l.side=vo,l.clippingPlanes=[t],l.stencilFail=dr,l.stencilZFail=dr,l.stencilZPass=dr;let c=new W(e,l);return c.renderOrder=r,o.add(c),o}};f();var Ki=class{plugins=new Set;registerPlugin(e){this.plugins.add(e)}unregisterPlugin(e){this.plugins.delete(e)}update(e){for(let t of this.plugins)t.update(e)}};f();var Qi=class{type="occlusion2d";enabled=!0;id;constructor(e){this.id=e}};f();f();f();var _h=`varying vec4 vWorldPosition;
|
|
792
|
-
|
|
793
|
-
void main() {
|
|
794
|
-
vWorldPosition = modelMatrix * vec4(position, 1.0);
|
|
795
|
-
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
796
|
-
}
|
|
797
|
-
|
|
798
|
-
`;f();var nl=`uniform sampler2D shadowMap;
|
|
799
|
-
uniform mat4 lightMatrix;
|
|
800
|
-
uniform float shadowBias;
|
|
801
|
-
uniform float shadowOpacity;
|
|
802
|
-
uniform vec3 baseColor;
|
|
803
|
-
uniform float shadowMapSize;
|
|
804
|
-
uniform float pcfSpread;
|
|
805
|
-
uniform float depthRangeMax;
|
|
806
|
-
uniform bool shadowEnabled;
|
|
807
|
-
varying vec4 vWorldPosition;
|
|
808
|
-
float shadowThreshold = 0.05;
|
|
809
|
-
float shadowStrengthMultiplier = 0.6;
|
|
810
|
-
|
|
811
|
-
/**
|
|
812
|
-
* Interleaved gradient noise for temporal/spatial dithering of shadow samples
|
|
813
|
-
*/
|
|
814
|
-
float interleavedGradientNoise(vec2 position) {
|
|
815
|
-
vec3 magic = vec3(0.06711056, 0.00583715, 52.9829189);
|
|
816
|
-
return fract(magic.z * fract(dot(position, magic.xy)));
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
// Compile-time sample count for loop unrolling (injected via material)
|
|
820
|
-
#ifndef PCF_SAMPLES
|
|
821
|
-
#define PCF_SAMPLES 4
|
|
822
|
-
#endif
|
|
823
|
-
|
|
824
|
-
// Poisson disk samples - only define what we need based on sample count
|
|
825
|
-
#if PCF_SAMPLES <= 4
|
|
826
|
-
const vec2 poissonDisk[4] = vec2[](
|
|
827
|
-
vec2(-0.94201624, -0.39906216),
|
|
828
|
-
vec2(0.94558609, -0.76890725),
|
|
829
|
-
vec2(-0.094184101, -0.92938870),
|
|
830
|
-
vec2(0.34495938, 0.29387760)
|
|
831
|
-
);
|
|
832
|
-
#elif PCF_SAMPLES <= 8
|
|
833
|
-
const vec2 poissonDisk[8] = vec2[](
|
|
834
|
-
vec2(-0.94201624, -0.39906216),
|
|
835
|
-
vec2(0.94558609, -0.76890725),
|
|
836
|
-
vec2(-0.094184101, -0.92938870),
|
|
837
|
-
vec2(0.34495938, 0.29387760),
|
|
838
|
-
vec2(-0.91588581, 0.45771432),
|
|
839
|
-
vec2(-0.81544232, -0.87912464),
|
|
840
|
-
vec2(-0.38277543, 0.27676845),
|
|
841
|
-
vec2(0.97484398, 0.75648379)
|
|
842
|
-
);
|
|
843
|
-
#else
|
|
844
|
-
const vec2 poissonDisk[16] = vec2[](
|
|
845
|
-
vec2(-0.94201624, -0.39906216),
|
|
846
|
-
vec2(0.94558609, -0.76890725),
|
|
847
|
-
vec2(-0.094184101, -0.92938870),
|
|
848
|
-
vec2(0.34495938, 0.29387760),
|
|
849
|
-
vec2(-0.91588581, 0.45771432),
|
|
850
|
-
vec2(-0.81544232, -0.87912464),
|
|
851
|
-
vec2(-0.38277543, 0.27676845),
|
|
852
|
-
vec2(0.97484398, 0.75648379),
|
|
853
|
-
vec2(0.44323325, -0.97511554),
|
|
854
|
-
vec2(0.53742981, -0.47373420),
|
|
855
|
-
vec2(-0.26496911, -0.41893023),
|
|
856
|
-
vec2(0.79197514, 0.19090188),
|
|
857
|
-
vec2(-0.24188840, 0.99706507),
|
|
858
|
-
vec2(-0.81409955, 0.91437590),
|
|
859
|
-
vec2(0.19984126, 0.78641367),
|
|
860
|
-
vec2(0.14383161, -0.14100790)
|
|
861
|
-
);
|
|
862
|
-
#endif
|
|
863
|
-
|
|
864
|
-
/**
|
|
865
|
-
* Samples the shadow map using PCF (Percentage Closer Filtering)
|
|
866
|
-
* Uses compile-time loop count for GPU optimization
|
|
867
|
-
* @param lightSpacePos Position in light space coordinates
|
|
868
|
-
* @returns Visibility factor (1.0 = fully lit, 0.0 = fully shadowed)
|
|
869
|
-
*/
|
|
870
|
-
float sampleShadow(vec3 lightSpacePos) {
|
|
871
|
-
float scaledTexelSize = (1.0 / shadowMapSize) * pcfSpread;
|
|
872
|
-
float currentDepth = lightSpacePos.z * depthRangeMax;
|
|
873
|
-
|
|
874
|
-
// Rotation for temporal stability
|
|
875
|
-
float noise = interleavedGradientNoise(gl_FragCoord.xy) * 6.283185;
|
|
876
|
-
float cosNoise = cos(noise);
|
|
877
|
-
float sinNoise = sin(noise);
|
|
878
|
-
mat2 rotation = mat2(cosNoise, -sinNoise, sinNoise, cosNoise);
|
|
879
|
-
|
|
880
|
-
float shadow = 0.0;
|
|
881
|
-
|
|
882
|
-
// Compile-time unrolled loop - GPU can optimize this efficiently
|
|
883
|
-
for(int i = 0; i < PCF_SAMPLES; i++) {
|
|
884
|
-
vec2 offset = rotation * poissonDisk[i] * scaledTexelSize;
|
|
885
|
-
vec2 uv = clamp(lightSpacePos.xy + offset, 0.0, 1.0);
|
|
886
|
-
|
|
887
|
-
float sampledDepth = texture2D(shadowMap, uv).r;
|
|
888
|
-
shadow += step(sampledDepth + shadowBias, currentDepth);
|
|
889
|
-
}
|
|
890
|
-
|
|
891
|
-
return 1.0 - shadow / float(PCF_SAMPLES);
|
|
892
|
-
}
|
|
893
|
-
|
|
894
|
-
void main() {
|
|
895
|
-
if (shadowEnabled) {
|
|
896
|
-
// Transform world position to light space
|
|
897
|
-
vec4 shadowCoord = lightMatrix * vWorldPosition;
|
|
898
|
-
vec3 projCoords = shadowCoord.xyz / shadowCoord.w;
|
|
899
|
-
|
|
900
|
-
// Check if fragment is within shadow map bounds
|
|
901
|
-
bool inBounds = projCoords.x >= 0.0 && projCoords.x <= 1.0 &&
|
|
902
|
-
projCoords.y >= 0.0 && projCoords.y <= 1.0 &&
|
|
903
|
-
projCoords.z >= 0.0 && projCoords.z <= 1.0;
|
|
904
|
-
|
|
905
|
-
if (inBounds) {
|
|
906
|
-
float visibility = sampleShadow(projCoords);
|
|
907
|
-
float shadowIntensity = 1.0 - visibility;
|
|
908
|
-
|
|
909
|
-
if (shadowIntensity > shadowThreshold) {
|
|
910
|
-
float shadowStrength = shadowIntensity * shadowOpacity * shadowStrengthMultiplier;
|
|
911
|
-
gl_FragColor = vec4(baseColor, shadowStrength);
|
|
912
|
-
}
|
|
913
|
-
}
|
|
914
|
-
}
|
|
915
|
-
}
|
|
916
|
-
|
|
917
|
-
`;var es=class extends $e{pcfSampleCount=4;constructor(){super({vertexShader:_h,fragmentShader:`#define PCF_SAMPLES 4
|
|
918
|
-
`+nl,uniforms:{shadowMap:{value:null},lightMatrix:{value:new Y},shadowBias:{value:8e-5},shadowOpacity:{value:.25},baseColor:{value:new k(8421504)},shadowMapSize:{value:4096},pcfSpread:{value:3.5},depthRangeMax:{value:1},shadowEnabled:{value:!1}},transparent:!0,depthWrite:!1,side:_t,stencilWrite:!0,stencilFunc:hr,stencilRef:qe.UNDERGROUND_MASK,stencilFail:le,stencilZFail:le,stencilZPass:le})}setShadowUniforms(e,t,r,o,i,s,a,l,c,u){this.uniforms.shadowMap.value=e,this.uniforms.lightMatrix.value.copy(t),this.uniforms.shadowBias.value=r,this.uniforms.shadowOpacity.value=o,this.uniforms.baseColor.value=i,this.uniforms.shadowMapSize.value=s,this.uniforms.pcfSpread.value=a,this.uniforms.depthRangeMax.value=c,this.uniforms.shadowEnabled.value=u,l!==this.pcfSampleCount&&(this.pcfSampleCount=l,this.fragmentShader=`#define PCF_SAMPLES ${l}
|
|
919
|
-
`+nl,this.needsUpdate=!0)}};var Je={enabled:!0,debug:!1,baseColor:"#a0a0a0",shadowOpacity:.25,pcfSamples:4,pcfSpread:3,shadowBias:.001,normalBias:.12,shadowMapSize:"auto",sunAzimuth:225,sunElevation:45,visibleAtZoomLevel:18},Fh=1e4,ry=-.05,ny=999,oy=4096,iy=2048,sy=20.5,ay=19.5,Nh=.1,ly=400,cy=-200,uy=50,dy=100,hy=-50,py=40,Jr=15,Tt=22,my=100,fy=5,gy=50,yy=50,by=40,vy=5,xy=.5,ol=1,Bh=1,Sy=5,fe=256,My=65535,Cy=.5,ts=.1,Ey=1e3,wy=16737792,Ty=.2,Gh=.2,Dy=1001,Py=8900331,il=!0,rs=class{state;rendererService;depthMaterial;cameraOrbit;lightCamera;shadowRenderTarget;lightMatrix=new Y;currentSnapX=0;currentSnapY=0;shadowCenter=new O;shadowPlane=null;shadowPlaneMaterial=null;shadowPlaneEnabled=!0;visibleAtCurrentZoom=!0;zoomOpacityFactor=1;lightCameraHelper=null;debugEnabled=!1;debugGrid=null;debugCurrentCell=null;debugCurrentCellMaterial=null;debugCanvas=null;debugCanvasCtx=null;debugRenderTarget=null;debugDepthMaterial=null;debugDepthQuad=null;debugDepthScene=null;debugDepthCamera=null;options;internal;shadowResolutionSizes={high:oy,low:iy};shadowResolutionZoomThresholds={high:sy,low:ay};constructor(e,t,r,o){this.state=e,this.cameraOrbit=r,this.rendererService=t,this.options=Object.freeze({enabled:o?.enabled??Je.enabled,debug:o?.debug??Je.debug,baseColor:o?.baseColor??Je.baseColor,shadowOpacity:o?.shadowOpacity??Je.shadowOpacity,pcfSamples:o?.pcfSamples??Je.pcfSamples,pcfSpread:o?.pcfSpread??Je.pcfSpread,shadowBias:o?.shadowBias??Je.shadowBias,normalBias:o?.normalBias??Je.normalBias,shadowMapSize:o?.shadowMapSize??Je.shadowMapSize,sunAzimuth:o?.sunAzimuth??Je.sunAzimuth,sunElevation:o?.sunElevation??Je.sunElevation,visibleAtZoomLevel:o?.visibleAtZoomLevel??Je.visibleAtZoomLevel});let i=this.options.shadowMapSize==="auto"?this.shadowResolutionSizes.high:this.options.shadowMapSize;this.internal={baseColor:new k(this.options.baseColor),lightOrthoSize:uy,sunDistance:dy,groundZPosition:hy,snapGridSize:py,currentShadowMapSize:i,currentShadowResolutionMode:(this.options.shadowMapSize==="auto",null),sunDirection:new O,sunAzimuth:this.options.sunAzimuth,sunElevation:this.options.sunElevation},this.updateSunDirection(),this.lightCamera=new Bs(-this.internal.lightOrthoSize,this.internal.lightOrthoSize,this.internal.lightOrthoSize,-this.internal.lightOrthoSize,Nh,ly),this.lightCamera.layers.disableAll(),this.lightCamera.layers.enable(Oe.SHOULD_CAST_SHADOWS),this.lightCamera.position.copy(this.internal.sunDirection.clone().multiplyScalar(cy)),this.lightCamera.lookAt(new O(0,0,0)),this.lightCamera.updateMatrixWorld(),this.lightCamera.updateProjectionMatrix(),this.shadowRenderTarget=this.createShadowRenderTarget(i),this.depthMaterial=new uc,this.depthMaterial.depthPacking=Jl,this.depthMaterial.blending=Zl,this.createShadowPlane(),this.options.debug&&this.setDebugEnabled(!0)}createShadowRenderTarget(e){let t=new pn(e,e);return t.texture.minFilter=dn,t.texture.magFilter=dn,t.texture.generateMipmaps=!1,t.depthBuffer=!0,t.stencilBuffer=!1,t.depthTexture=new sc(e,e,$l),t}resizeShadowRenderTarget(e){this.shadowRenderTarget.setSize(e,e),this.shadowRenderTarget.depthTexture&&(this.shadowRenderTarget.depthTexture.image.width=e,this.shadowRenderTarget.depthTexture.image.height=e,this.shadowRenderTarget.depthTexture.needsUpdate=!0)}createShadowPlane(){let e=new Ie(Fh,Fh);e.rotateX(0),this.shadowPlaneMaterial=new es,this.shadowPlane=new W(e,this.shadowPlaneMaterial),this.shadowPlane.position.set(0,0,ry),this.shadowPlane.renderOrder=ny,this.shadowPlane.frustumCulled=!1,this.shadowPlane.name="ShadowPlane",this.shadowPlaneEnabled&&this.state.threeJSScene.add(this.shadowPlane)}setShadowPlaneEnabled(e){this.shadowPlaneEnabled!==e&&(this.shadowPlaneEnabled=e,this.shadowPlane&&(e?this.state.threeJSScene.add(this.shadowPlane):this.state.threeJSScene.remove(this.shadowPlane)))}isShadowPlaneEnabled(){return this.shadowPlaneEnabled}updateShadowPlanePosition(){this.shadowPlane&&(this.shadowPlane.position.x=this.shadowCenter.x,this.shadowPlane.position.y=this.shadowCenter.y)}setDebugEnabled(e){this.debugEnabled!==e&&(this.debugEnabled=e,e?this.createDebugHelpers():this.disposeDebugHelpers())}isDebugEnabled(){return this.debugEnabled}createDebugHelpers(){this.debugEnabled=!0,!this.lightCameraHelper&&this.lightCamera&&(this.lightCameraHelper=new pc(this.lightCamera),this.lightCameraHelper.name="ShadowLightCameraHelper",this.state.threeJSScene.add(this.lightCameraHelper)),this.createDebugGrid(),this.createDebugCurrentCell(),this.createDebugCanvas()}createDebugGrid(){if(this.debugGrid)return;let e=this.internal.snapGridSize,t=Sy,r=e*t*2,o=[];for(let a=-t;a<=t;a++){let l=a*e;o.push(l,-r/2,ts),o.push(l,r/2,ts)}for(let a=-t;a<=t;a++){let l=a*e;o.push(-r/2,l,ts),o.push(r/2,l,ts)}let i=new Nt;i.setAttribute("position",new pr(o,3));let s=new Rr({color:My,transparent:!0,opacity:Cy,depthTest:!1});this.debugGrid=new Gt(i,s),this.debugGrid.name="ShadowDebugGrid",this.debugGrid.renderOrder=Ey,this.debugGrid.frustumCulled=!1,this.state.threeJSScene.add(this.debugGrid)}createDebugCurrentCell(){if(this.debugCurrentCell)return;let e=this.internal.snapGridSize,t=new Ie(e,e);this.debugCurrentCellMaterial=new Me({color:wy,transparent:!0,opacity:Ty,depthTest:!1,side:2}),this.debugCurrentCell=new W(t,this.debugCurrentCellMaterial),this.debugCurrentCell.name="ShadowDebugCurrentCell",this.debugCurrentCell.renderOrder=Dy,this.debugCurrentCell.frustumCulled=!1,this.debugCurrentCell.position.set(this.currentSnapX+e/2,this.currentSnapY+e/2,Gh),this.state.threeJSScene.add(this.debugCurrentCell)}createDebugCanvas(){if(this.debugCanvas)return;this.debugCanvas=document.createElement("canvas"),this.debugCanvas.width=fe,this.debugCanvas.height=fe,this.debugCanvas.style.cssText=`
|
|
920
|
-
position: fixed;
|
|
921
|
-
bottom: 16px;
|
|
922
|
-
transform: rotate(-270deg);
|
|
923
|
-
left: 16px;
|
|
924
|
-
width: ${fe}px;
|
|
925
|
-
height: ${fe}px;
|
|
926
|
-
border: 2px solid #00ffff;
|
|
927
|
-
border-radius: 4px;
|
|
928
|
-
background: #000;
|
|
929
|
-
z-index: 9999;
|
|
930
|
-
pointer-events: none;
|
|
931
|
-
`;let e=document.createElement("div");if(e.textContent=il?"Shadow Depth Map":"Light Camera View",e.style.cssText=`
|
|
932
|
-
position: fixed;
|
|
933
|
-
bottom: ${fe+20}px;
|
|
934
|
-
left: 16px;
|
|
935
|
-
color: #00ffff;
|
|
936
|
-
font-family: monospace;
|
|
937
|
-
font-size: 12px;
|
|
938
|
-
z-index: 9999;
|
|
939
|
-
pointer-events: none;
|
|
940
|
-
`,e.id="shadow-debug-label",document.body.appendChild(this.debugCanvas),document.body.appendChild(e),this.debugCanvasCtx=this.debugCanvas.getContext("2d"),this.debugRenderTarget=new pn(fe,fe),this.debugRenderTarget.texture.minFilter=dn,this.debugRenderTarget.texture.magFilter=dn,il){this.debugDepthMaterial=new $e({uniforms:{depthTexture:{value:this.shadowRenderTarget.depthTexture}},vertexShader:`
|
|
941
|
-
varying vec2 vUv;
|
|
942
|
-
void main() {
|
|
943
|
-
vUv = uv;
|
|
944
|
-
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
945
|
-
}
|
|
946
|
-
`,fragmentShader:`
|
|
947
|
-
uniform sampler2D depthTexture;
|
|
948
|
-
varying vec2 vUv;
|
|
949
|
-
void main() {
|
|
950
|
-
float depth = texture2D(depthTexture, vUv).r;
|
|
951
|
-
// Invert so near is bright, far is dark
|
|
952
|
-
gl_FragColor = vec4(vec3(1.0 - depth), 1.0);
|
|
953
|
-
}
|
|
954
|
-
`});let t=new Ie(2,2);this.debugDepthQuad=new W(t,this.debugDepthMaterial),this.debugDepthScene=new St,this.debugDepthScene.add(this.debugDepthQuad),this.debugDepthCamera=new Bs(-1,1,1,-1,0,1)}}debugPixelBuffer=null;updateDebugCanvas(){if(!this.debugCanvas||!this.debugCanvasCtx||!this.rendererService.renderer||!this.debugRenderTarget)return;let e=this.rendererService.renderer,t=fe*fe*4;(!this.debugPixelBuffer||this.debugPixelBuffer.length!==t)&&(this.debugPixelBuffer=new Uint8Array(t)),il&&this.debugDepthScene&&this.debugDepthCamera&&this.debugDepthMaterial?(this.debugDepthMaterial.uniforms.depthTexture.value=this.shadowRenderTarget.depthTexture,e.setRenderTarget(this.debugRenderTarget),e.clear(),e.render(this.debugDepthScene,this.debugDepthCamera),e.setRenderTarget(null)):(e.setRenderTarget(this.debugRenderTarget),e.setClearColor(Py,1),e.clear(),e.render(this.state.threeJSScene,this.lightCamera),e.setRenderTarget(null)),e.readRenderTargetPixels(this.debugRenderTarget,0,0,fe,fe,this.debugPixelBuffer);let r=this.debugCanvasCtx.createImageData(fe,fe),o=r.data,i,s;for(let a=0;a<fe;a++)for(let l=0;l<fe;l++)i=((fe-1-a)*fe+l)*4,s=(a*fe+l)*4,o[s]=this.debugPixelBuffer[i],o[s+1]=this.debugPixelBuffer[i+1],o[s+2]=this.debugPixelBuffer[i+2],o[s+3]=255;this.debugCanvasCtx.putImageData(r,0,0)}disposeDebugHelpers(){this.lightCameraHelper&&(this.state.threeJSScene.remove(this.lightCameraHelper),this.lightCameraHelper.dispose(),this.lightCameraHelper=null),this.debugGrid&&(this.state.threeJSScene.remove(this.debugGrid),this.debugGrid.geometry.dispose(),this.debugGrid.material.dispose(),this.debugGrid=null),this.debugCurrentCell&&(this.state.threeJSScene.remove(this.debugCurrentCell),this.debugCurrentCell.geometry.dispose(),this.debugCurrentCell=null),this.debugCurrentCellMaterial&&(this.debugCurrentCellMaterial.dispose(),this.debugCurrentCellMaterial=null),this.debugCanvas&&(this.debugCanvas.remove(),this.debugCanvas=null,this.debugCanvasCtx=null),this.debugPixelBuffer=null,this.debugRenderTarget&&(this.debugRenderTarget.dispose(),this.debugRenderTarget=null),this.debugDepthQuad&&(this.debugDepthQuad.geometry.dispose(),this.debugDepthQuad=null),this.debugDepthMaterial&&(this.debugDepthMaterial.dispose(),this.debugDepthMaterial=null),this.debugDepthScene=null,this.debugDepthCamera=null;let e=document.getElementById("shadow-debug-label");e&&e.remove()}updateDebugHelpers(){if(this.debugEnabled&&(this.lightCameraHelper&&this.lightCameraHelper.update(),this.debugGrid&&this.debugGrid.position.set(this.currentSnapX,this.currentSnapY,0),this.debugCurrentCell)){let e=this.internal.snapGridSize;this.debugCurrentCell.position.set(this.currentSnapX+e/2,this.currentSnapY+e/2,Gh)}}updateSunDirection(){let e=this.internal.sunAzimuth*Math.PI/180,t=this.internal.sunElevation*Math.PI/180,r=Math.cos(t);this.internal.sunDirection.set(r*Math.sin(e),r*Math.cos(e),-Math.sin(t)),this.internal.sunDirection.normalize()}updateLightCamera(){this.lightCamera&&(this.lightCamera.left=-this.internal.lightOrthoSize,this.lightCamera.right=this.internal.lightOrthoSize,this.lightCamera.top=this.internal.lightOrthoSize,this.lightCamera.bottom=-this.internal.lightOrthoSize,this.lightCamera.updateProjectionMatrix())}bias=new Y().set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);matrix=new Y;updateLightMatrix(){this.lightCamera.position.copy(this.shadowCenter).add(this.internal.sunDirection.clone().multiplyScalar(-this.internal.sunDistance)),this.lightCamera.lookAt(this.shadowCenter),this.lightCamera.near=Nh,this.lightCamera.far=this.internal.sunDistance*2,this.lightCamera.left=-this.internal.lightOrthoSize,this.lightCamera.right=this.internal.lightOrthoSize,this.lightCamera.top=this.internal.lightOrthoSize,this.lightCamera.bottom=-this.internal.lightOrthoSize,this.lightCamera.updateMatrixWorld(!0),this.lightCamera.updateProjectionMatrix(),this.matrix.identity(),this.matrix.multiplyMatrices(this.lightCamera.projectionMatrix,this.lightCamera.matrixWorldInverse),this.lightMatrix.multiplyMatrices(this.bias,this.matrix)}updateAutoSunDistance(e,t){let r=Math.max(Jr,Math.min(Tt,e)),o=(Tt-r)/(Tt-Jr),i=Math.max(t,my*Math.pow(fy,o));Math.abs(this.internal.sunDistance-i)>ol&&(this.internal.sunDistance=i,this.updateSunDirection(),this.needsRender=!0)}updateAutoShadowResolution(e){if(this.options.shadowMapSize!=="auto")return;let t=this.internal.currentShadowResolutionMode;if(this.internal.currentShadowResolutionMode===null?e>=this.shadowResolutionZoomThresholds.high?t="high":t="low":this.internal.currentShadowResolutionMode==="low"?e>=this.shadowResolutionZoomThresholds.high&&(t="high"):this.internal.currentShadowResolutionMode==="high"&&e<=this.shadowResolutionZoomThresholds.low&&(t="low"),t!==this.internal.currentShadowResolutionMode&&t!==null){let r=this.shadowResolutionSizes[t];this.internal.currentShadowResolutionMode=t,this.internal.currentShadowMapSize=r,this.resizeShadowRenderTarget(r),this.needsRender=!0}}updateAutoLightSize(e,t){let r=Math.max(Jr,Math.min(Tt,e)),o=(Tt-r)/(Tt-Jr),i=Math.max(t,gy*Math.pow(yy,o));Math.abs(this.internal.lightOrthoSize-i)>ol&&(this.internal.lightOrthoSize=i,this.updateLightCamera(),this.needsRender=!0)}updateZoomVisibility(e){let t=this.options.visibleAtZoomLevel-Bh,r=this.options.visibleAtZoomLevel,o;e>=r?o=1:e<=t?o=0:o=(e-t)/Bh;let i=o>0;(i!==this.visibleAtCurrentZoom||o!==this.zoomOpacityFactor)&&(this.visibleAtCurrentZoom=i,this.zoomOpacityFactor=o,this.needsRender=!0)}isVisibleAtCurrentZoom(){return this.visibleAtCurrentZoom}updateAutoSnapGridSize(e){let t=Math.max(Jr,Math.min(Tt,e)),r=(Tt-t)/(Tt-Jr),o=by*Math.pow(vy,r);Math.abs(this.internal.snapGridSize-o)>ol&&(this.internal.snapGridSize=o,this.debugEnabled&&this.recreateDebugGrid())}recreateDebugGrid(){this.debugGrid&&(this.state.threeJSScene.remove(this.debugGrid),this.debugGrid.geometry.dispose(),this.debugGrid.material.dispose(),this.debugGrid=null),this.debugCurrentCell&&(this.state.threeJSScene.remove(this.debugCurrentCell),this.debugCurrentCell.geometry.dispose(),this.debugCurrentCell=null),this.createDebugGrid(),this.createDebugCurrentCell()}transparentGeometryVisibilityStateMap=new Map;renderShadowMap(){let e=this.state.threeJSScene.overrideMaterial;this.state.threeJSScene.overrideMaterial=this.depthMaterial,this.rendererService.renderer?.setRenderTarget(this.shadowRenderTarget),this.rendererService.clear(),this.rendererService.renderScene(this.state.threeJSScene,this.lightCamera),this.rendererService.renderer?.setRenderTarget(null),this.state.threeJSScene.overrideMaterial=e,this.debugEnabled&&this.updateDebugCanvas()}updateShadowUniforms(){let e=this.options.enabled&&this.visibleAtCurrentZoom,t=this.options.shadowOpacity*this.zoomOpacityFactor,r;for(let o of this.state.geometry3DsInScene)if(r=o.components[0],r?.mesh&&r?.mesh?.material instanceof vn){let i=r.mesh.material;i instanceof vn&&i.setShadowUniforms(this.shadowRenderTarget.depthTexture,this.lightMatrix,this.lightCamera.near,this.lightCamera.far,this.options.shadowBias,t,this.internal.baseColor,this.internal.currentShadowMapSize,this.options.pcfSpread,this.options.pcfSamples,this.internal.sunDirection,this.options.normalBias,this.state.depthRangeFor3D[1],e)}this.shadowPlaneMaterial&&this.shadowPlaneMaterial.setShadowUniforms(this.shadowRenderTarget.depthTexture,this.lightMatrix,this.options.shadowBias,t,this.internal.baseColor,this.internal.currentShadowMapSize,this.options.pcfSpread,this.options.pcfSamples,this.state.depthRangeFor3D[1],e)}lastZoomLevel=null;lastCameraElevation=null;zoomOrElevationChanged(e,t){if(this.lastZoomLevel===null||this.lastCameraElevation===null)return this.lastZoomLevel=e,this.lastCameraElevation=t,!0;let r=Math.abs(e-this.lastZoomLevel)>=xy,o=t!==this.lastCameraElevation;return r||o?(this.lastZoomLevel=e,this.lastCameraElevation=t,!0):!1}updateSnap(){let e=this.cameraOrbit.position.x||0,t=this.cameraOrbit.position.y||0,r=Math.floor(e/this.internal.snapGridSize)*this.internal.snapGridSize,o=Math.floor(t/this.internal.snapGridSize)*this.internal.snapGridSize;(r!==this.currentSnapX||o!==this.currentSnapY)&&(this.currentSnapX=r,this.currentSnapY=o,this.shadowCenter.set(r,o,this.internal.groundZPosition),this.needsRender=!0)}needsRender=!0;needsCompute=!0;update(e,t){this.updateZoomVisibility(e),(this.needsCompute||this.zoomOrElevationChanged(e,t))&&(this.updateAutoShadowResolution(e),this.updateAutoLightSize(e,t),this.updateAutoSunDistance(e,t),this.updateAutoSnapGridSize(e)),this.updateSnap(),this.needsRender&&(this.updateLightMatrix(),this.visibleAtCurrentZoom&&this.renderShadowMap(),this.updateShadowPlanePosition(),this.updateShadowUniforms()),this.updateDebugHelpers(),this.needsRender=!1,this.needsCompute=!1}destroy(){this.disposeDebugHelpers(),this.shadowPlane&&(this.state.threeJSScene.remove(this.shadowPlane),this.shadowPlane.geometry.dispose(),this.shadowPlane=null),this.shadowPlaneMaterial&&(this.shadowPlaneMaterial.dispose(),this.shadowPlaneMaterial=null),this.shadowRenderTarget&&(this.shadowRenderTarget.dispose(),this.shadowRenderTarget.depthTexture&&this.shadowRenderTarget.depthTexture.dispose()),this.depthMaterial&&this.depthMaterial.dispose(),this.transparentGeometryVisibilityStateMap.clear()}};f();f();var Iy=[100,500,2e3,1e4];function Vn(n,e){return n.set(U.degToRad(e?.[0]??Vt[0]),U.degToRad(e?.[1]??Vt[1]),U.degToRad(e?.[2]??Vt[2]))}function Wn(n,e){return n.set(e?.[0]??Ht[0],e?.[1]??Ht[1],e?.[2]??Ht[2])}function jn(n){let e=n.components[0],t=n.components[1];if(t.opacity!=null&&t.opacity!==e.opacity&&(e.opacity=t.opacity),!(e.mesh?.children[0]instanceof K)){let s=t.material,a=t.color;if(s||a){let l=kh(a,s);e.mesh?.traverse(c=>{c instanceof W&&c.material&&(Array.isArray(c.material)?c.material.forEach(u=>{l[u.name]?(u.color.set(l[u.name].color),u.vertexColors=!1):a&&u.color.set(a)}):l[c.material.name]?(c.material.color.set(l[c.material.name].color),c.material.vertexColors=!1):a&&c.material.color.set(a))})}}let o=e.feature.geometry.coordinates[2]??0,i=(t.verticalOffset??0)+o;e.altitude!==i&&(e.altitude=i),t.visible!==e.visible&&(e.visible=t.visible),t.visibleThroughGeometry!==e.visibleThroughGeometry&&(e.visibleThroughGeometry=t.visibleThroughGeometry)}function kh(n,e){let t={};if(e)for(let r in e)e[r].color&&(t[r]={color:e[r].color});if(n){let r=["Default","Fabric","Mpdn_Logo","CouchLogo"];for(let o of r)t[o]||(t[o]={color:n})}return t}function ns(n){n.traverse(e=>{e instanceof K&&e.computeBoundingSphere()})}function zh(n,e,t){let r=t.elements;for(let o=0;o<16;o++)if(n[e+o]!==Math.fround(r[o]))return!0;return!1}function Uh(n,e=Iy){for(let t of e)if(t>n)return t;return n*2}function sl(n){for(;n.children.length>0;){let e=n.children[0];if(e instanceof K)if(e.geometry?.dispose(),Array.isArray(e.material))for(let t of e.material)t.dispose();else e.material&&e.material.dispose();n.remove(e)}}function os(n){sl(n),n.parent?.remove(n)}function is(n,e,t,r){let o=r||t?kh(t,r):void 0;for(let i of n.children){if(!(i instanceof K))continue;let s=Array.isArray(i.material)?i.material[0]?.name:i.material?.name,a=o?.[s],l=a?new k(a.color):t?new k(t):i.userData.originalColor;l&&(i.setColorAt(e,l),i.instanceColor&&(i.instanceColor.needsUpdate=!0))}}function Kr(n,e){let t=new He;return n.scene.updateWorldMatrix(!0,!0),n.scene.traverse(r=>{let o=r;if("isMesh"in o&&o.isMesh===!0){let i=o.geometry.clone();i.applyMatrix4(o.matrixWorld);let s=o.material,a;Array.isArray(s)?(a=s[0].color?.clone(),s=s.map(u=>{let d=u.clone();return d.color?.setRGB(1,1,1),d})):(a=s.color?.clone(),s=s.clone(),s.color?.setRGB(1,1,1));let l=new K(i,s,e);l.count=0,l.frustumCulled=!1,l.layers.enable(Oe.SHOULD_CAST_SHADOWS),l.userData={entities:{},originalColor:a},t.add(l)}}),t}function al(n,e){let t=typeof e=="string"?new k(e):e;n.traverse(r=>{let o=r;"isMesh"in o&&o.isMesh===!0&&(Array.isArray(o.material)?o.material.forEach(i=>{"color"in i&&i.color.copy(t)}):"color"in o.material&&o.material.color.copy(t))})}function ll(n,e,t=!1){let r=o=>{o.userData.intrinsicOpacity==null&&(o.userData.intrinsicOpacity=o.opacity);let i=o.userData.intrinsicOpacity*e;(!t||!o.transparent)&&(o.transparent=i<1),o.opacity=i};n.traverse(o=>{let i=o;"isMesh"in i&&i.isMesh===!0&&(Array.isArray(i.material)?i.material.forEach(r):r(i.material))})}function Hh(n,e){n.traverse(t=>{let r=t;"isMesh"in r&&r.isMesh===!0&&(Array.isArray(r.material)?r.material.forEach(o=>{o.depthWrite=!e,o.depthTest=!e,e&&(o.transparent=!0)}):(r.material.depthWrite=!e,r.material.depthTest=!e,e&&(r.material.transparent=!0)))})}function Qr(n,e){n.traverse(t=>{t instanceof K&&t.material&&(Array.isArray(t.material)?t.material.forEach(r=>{r.transparent=e<1,r.opacity=e}):(t.material.transparent=e<1,t.material.opacity=e))})}function cl(n){n.traverse(e=>{let t=e;"isMesh"in t&&t.isMesh===!0&&(t.geometry?.dispose(),Array.isArray(t.material)?t.material.forEach(r=>r.dispose()):t.material?.dispose())})}function Vh(n){n.traverse(e=>{e instanceof K&&(e.geometry.dispose(),Array.isArray(e.material)?e.material.forEach(t=>t.dispose()):e.material?.dispose())})}function qt(n,e){let t=e!==0,r=!1;return n.traverse(o=>{if(!(o instanceof K)&&!("isMesh"in o&&o.isMesh))return;let i=o.layers.isEnabled(Oe.SHOULD_CAST_SHADOWS);t&&!i?(o.layers.enable(Oe.SHOULD_CAST_SHADOWS),r=!0):!t&&i&&(o.layers.disable(Oe.SHOULD_CAST_SHADOWS),r=!0)}),r}f();var ss=class{element=null;enabled=!1;show(){this.enabled||(this.enabled=!0,this.create())}hide(){this.enabled&&(this.enabled=!1,this.element&&(this.element.remove(),this.element=null))}isEnabled(){return this.enabled}create(){this.element=document.createElement("div"),this.element.id="model-debug-ui",this.element.style.cssText=`
|
|
955
|
-
position: fixed;
|
|
956
|
-
bottom: 10px;
|
|
957
|
-
left: 10px;
|
|
958
|
-
background: rgba(0, 0, 0, 0.8);
|
|
959
|
-
color: #fff;
|
|
960
|
-
font-family: monospace;
|
|
961
|
-
font-size: 12px;
|
|
962
|
-
padding: 10px;
|
|
963
|
-
border-radius: 5px;
|
|
964
|
-
z-index: 10000;
|
|
965
|
-
max-height: 300px;
|
|
966
|
-
overflow-y: auto;
|
|
967
|
-
min-width: 200px;
|
|
968
|
-
`,document.body.appendChild(this.element)}getActualInstanceCount(e){for(let t of e.mesh.children)if(t.isInstancedMesh)return t.count;return e.count}update(e,t,r){if(!this.enabled||!this.element)return;let o='<div style="margin-bottom: 5px; font-weight: bold; border-bottom: 1px solid #666; padding-bottom: 5px;">Model Batches</div>';if(e.size===0)o+='<div style="color: #888;">No models loaded</div>';else{let i=0,s=0,a=Array.from(e.keys()).sort((l,c)=>{let u=t.get(l)??"",d=t.get(c)??"";return u.localeCompare(d)});for(let l of a){let c=e.get(l);if(!c||c.size===0)continue;let u=t.get(l)??`unknown_${l}`,d=0;for(let g of c)d+=this.getActualInstanceCount(g);i+=c.size,s+=d,o+='<div style="margin: 6px 0 2px 0;">',o+=`<span style="color: #4fc3f7; font-weight: bold;">"${u}"</span>`,o+=`<span style="color: #aaa;"> (${d} total, ${c.size} batch${c.size!==1?"es":""})</span>`,o+="</div>";let h=Array.from(c).sort((g,b)=>g.id.localeCompare(b.id));for(let g of h){let b=this.getActualInstanceCount(g),M=g.count,p=b!==M,m=g.opacity===1?"":` @${(g.opacity*100).toFixed(0)}%`;o+='<div style="margin-left: 12px; color: #ccc; font-size: 11px;">',o+=`<span style="color: #81c784;">${g.id}</span>`,p?o+=`<span style="color: #e57373;">: ${b} actual / ${M} tracked</span>`:o+=`<span style="color: #fff;">: ${b} instance${b!==1?"s":""}</span>`,m&&(o+=`<span style="color: #ffb74d;">${m}</span>`),o+="</div>"}}o+='<div style="margin-top: 8px; padding-top: 5px; border-top: 1px solid #666; color: #fff;">',o+=`Total: <span style="color: #81c784;">${s} instance${s!==1?"s":""}</span>`,o+=`, <span style="color: #e57373;">${i} draw call${i!==1?"s":""}</span>`,o+="</div>"}if(r.size>0){o+='<div style="margin-top: 8px; border-top: 1px solid #666; padding-top: 5px;">',o+='<div style="margin-bottom: 5px; font-weight: bold; color: #ff9800;">Non-instanced Models</div>',o+=`<span style="color: #aaa;">(${r.size} total, ${r.size} draw call${r.size!==1?"s":""})</span>`;let i=new Map;for(let[s,a]of r){let l=i.get(a.urlHash)??[];l.push(s),i.set(a.urlHash,l)}for(let[s,a]of i){let l=t.get(s)??`unknown_${s}`;o+='<div style="margin: 6px 0 2px 0;">',o+=`<span style="color: #ff9800;">"${l}"</span>`,o+=`<span style="color: #aaa;"> (${a.length} model${a.length!==1?"s":""})</span>`,o+="</div>";for(let c of a)o+=`<div style="margin-left: 12px; color: #ccc; font-size: 11px;">${c}</div>`}o+="</div>"}this.element.innerHTML=o}destroy(){this.element&&(this.element.remove(),this.element=null)}};var en=100,Oy=!0,as=class extends Z{transparencyChanged=!1;state;convertTo3DMapPosition;loader;loadPromises=[];gltfCache=new Map;gltfLoadPromises=new Map;instanceMap=new Map;debugUI;modelNames=new Map;batchCounter=0;batchByMesh=new Map;batchesByUrlHash=new Map;nonInstancedModels=new Map;pendingOpacityChanges=new Map;detachedEntityIds=new Set;tempMatrix=new Y;tempQuaternion=new Ft;tempEuler=new xt;tempScale=new O;tempColor=new k;constructor(e,t){super(),this.state=e,this.convertTo3DMapPosition=t,this.debugUI=new ss}createBatch(e,t,r,o,i){this.batchCounter++;let s={id:`batch_${this.batchCounter}`,mesh:e,count:0,maxCount:i,opacity:o,urlHash:t,containerId:r};return e.userData.batchId=s.id,this.batchByMesh.set(e,s),this.batchesByUrlHash.has(t)||this.batchesByUrlHash.set(t,new Set),this.batchesByUrlHash.get(t).add(s),s}removeBatch(e){this.batchByMesh.delete(e.mesh),this.batchesByUrlHash.get(e.urlHash)?.delete(e),this.batchesByUrlHash.get(e.urlHash)?.size===0&&this.batchesByUrlHash.delete(e.urlHash)}getBatchForMesh(e){return this.batchByMesh.get(e)}updateDebugUI(){this.debugUI.update(this.batchesByUrlHash,this.modelNames,this.nonInstancedModels)}showDebug(){this.debugUI.show(),this.updateDebugUI()}hideDebug(){this.debugUI.hide()}async getGLTFLoader(){if(this.loader)return this.loader;let{GLTFLoader:e}=await import("./GLTFLoader-YNTRF3U5.js");return this.loader=new e,this.loader}async getOrLoadGLTF(e,t){let r=this.gltfCache.get(t);if(r)return r;let o=this.gltfLoadPromises.get(t);if(o)return o;let i=await this.getGLTFLoader(),s=new Promise((a,l)=>{let c=d=>{this.gltfCache.set(t,d),this.gltfLoadPromises.delete(t),a(d)},u=d=>{this.gltfLoadPromises.delete(t),l(d)};Yc(e)?i.parse($c(e),"",c,u):qc(e)?i.parse(Jc(e),"",c,u):i.load(e,c,void 0,u)});return this.gltfLoadPromises.set(t,s),s}createNonInstancedModel(e,t,r,o){let i=e.components[0],s=e.components[1],a=i.feature,l=t.scene.clone(!0);l.updateWorldMatrix(!0,!0);let c=new He;c.userData={nonInstanced:!0,entityId:String(e.id),type:"model"},l.traverse(p=>{let m=p;if("isMesh"in m&&m.isMesh===!0){let y=m.clone();y.geometry=m.geometry.clone(),y.geometry.applyMatrix4(m.matrixWorld),y.position.set(0,0,0),y.rotation.set(0,0,0),y.scale.set(1,1,1),Array.isArray(m.material)?y.material=m.material.map(v=>v.clone()):y.material=m.material.clone(),y.userData={entityId:String(e.id)},c.add(y)}});let{x:u,y:d}=this.convertTo3DMapPosition(a.geometry.coordinates[1],a.geometry.coordinates[0],0),h=a.geometry.coordinates[2]??0,g=(s.verticalOffset??0)+h;i.altitude=g,i.position.set(u,d,i.altitude);let b=s.scale??Ht,M=s.rotation??Vt;if(c.position.copy(i.position),c.rotation.set(U.degToRad(M[0]),U.degToRad(M[1]),U.degToRad(M[2])),c.scale.set(b[0],b[1],b[2]),s.color&&al(c,s.color),s.opacity!=null&&s.opacity!==1&&ll(c,s.opacity),s.visibleThroughGeometry&&Hh(c,!0),!s.EXPERIMENTAL_clippingEnabled){let p=s.opacity??1;qt(c,p)}r.add(c),i.mesh=c,i.instanceIndex=-1,jn(e),this.nonInstancedModels.set(e.id,{urlHash:o,mesh:c}),this.updateDebugUI()}resizeInstanceContainer(e,t){let r=Uh(e.maxCount),o=e.object,i=Kr(t,r),s=o.children,a=i.children;for(let c=0;c<s.length;c++){let u=s[c],d=a[c];if(!(!(u instanceof K)||!(d instanceof K))){for(let h=0;h<e.count;h++)u.getMatrixAt(h,this.tempMatrix),d.setMatrixAt(h,this.tempMatrix),d.userData.entities[h]=u.userData.entities[h],u.instanceColor&&(u.getColorAt(h,this.tempColor),d.setColorAt(h,this.tempColor));d.count=e.count,d.instanceMatrix.needsUpdate=!0}}for(sl(o);i.children.length>0;)o.add(i.children[0]);e.maxCount=r;let l=this.getBatchForMesh(o);return l&&(l.maxCount=r),e}getOrCreateInstanceContainer(e,t,r){let o=this.instanceMap.get(e);o||(o=new Map,this.instanceMap.set(e,o));let i=o.get(t);if(i){let s=this.getBatchForMesh(i.object);s&&(i.count=s.count)}else{let s=Kr(r,en);i={object:s,count:0,maxCount:en},o.set(t,i);let a=this.createBatch(s,t,e,1,en);i.batch=a}return i}createModelFromFeature(e,t,r){let o=new xr(t),i={...r};t.properties.verticalOffset!=null&&(i.verticalOffset=t.properties.verticalOffset),t.properties.rotation!=null&&(i.rotation=t.properties.rotation),t.properties.scale!=null&&(i.scale=t.properties.scale);let s=new Fo(i);o.instancingDisabled=s.visibleThroughGeometry===!0||s.EXPERIMENTAL_clippingEnabled===!0;let a=new $(o,s);return a.id=e,s.EXPERIMENTAL_clippingEnabled&&(a.components[7]=new Bo),a}async populateModelGroup(e,t,r){let o=cn(t),i=this.getOrLoadGLTF(t,o).then(l=>{let c=r.parent;if(!(c instanceof ie))return;let u=c.userData.entityId,d=this.getOrCreateInstanceContainer(u,o,l);d.count+e.size>d.maxCount&&(d=this.resizeInstanceContainer(d,l)),d.object.parent||r.add(d.object);let g=new Y,b=new xt,M=new Ft,p=new O,m,y,v;for(let x of e.values()){if(v=this.state.geometry3DMap.get(x),!v||v?.type!=="model")continue;let S=v.components[0],C=v.components[1];if(S.instanceIndex!=null&&S.instanceIndex>=0||S.instancingDisabled&&S.mesh)continue;if(y=S.feature,S.instancingDisabled){this.createNonInstancedModel(v,l,r,o);continue}let D=C.opacity!=null&&C.opacity!==1;if(D){let P=C.opacity??1,I=Math.round(P*100),L,N,z=this.batchesByUrlHash.get(o);if(z){for(let H of z)if(H.containerId===c.userData.entityId&&Math.round(H.opacity*100)===I&&H.count<H.maxCount){L=H,N=H.mesh;break}}if(!L||!N){let H=Kr(l,en);H.userData.detached=!0,H.userData.sharedOpacity=P,r.add(H),L=this.createBatch(H,o,c.userData.entityId,P,en),N=H,Qr(H,P),qt(H,P)}let j=L.count;S.mesh=N,S.instanceIndex=j,L.count++,this.detachedEntityIds.add(v.id)}else S.mesh=d.object,S.instanceIndex=d.count;jn(v),C.dirty=!1,m=this.convertTo3DMapPosition(y.geometry.coordinates[1],y.geometry.coordinates[0],0),S.position.set(m.x,m.y,S.altitude),Vn(b,C.rotation),Wn(p,C.scale),M.setFromEuler(b),g.compose(S.position,M,p);let E=S.mesh,T=S.instanceIndex;for(let P of E.children)P instanceof K&&(P.setMatrixAt(T,g),P.userData.entities[T]=v.id,P.count=T+1,P.instanceMatrix.needsUpdate=!0);if(is(E,T,C.color,C.material),!D){d.count++;let P=this.getBatchForMesh(d.object);P&&(P.count=d.count)}ns(S.mesh)}this.publish("model-loaded")});this.loadPromises.push(i);let s=r.parent?.userData?.entityId;return this.instanceMap.get(s)?.get(o)?.object??new He}update(){for(let t of this.state.geometryGroupIdsToLoad.values()){let r=this.state.geometry3DMap.get(t);r instanceof Ce&&r.userData.dirty&&r.userData.modelURL&&(this.populateModelGroup(r.userData.entities3D,r.userData.modelURL,r),r.userData.dirty=!1,r.userData.localCenter=void 0)}this.updateModelStyles(),this.rebatchDetachedInstances(),this.flushPendingOpacityChanges(),this.updateDebugUI();let e=this.loadPromises;return this.loadPromises=[],Promise.all(e)}rebatchDetachedInstances(){if(!Oy||this.detachedEntityIds.size===0)return;let e=new Map;for(let t of this.detachedEntityIds){let r=this.state.geometry3DMap.get(t);if(!r||r.type!=="model")continue;let o=r.components[0],i=r.components[1],s=o.mesh?.userData;if(!o.mesh?.parent)continue;let a=i.opacity??1,l=s?.sharedOpacity;if(Math.round(a*100)===100&&l!==void 0){this.pendingOpacityChanges.set(r.id,{entity:r,targetOpacity:a});continue}if(l!==void 0&&Math.abs(a-l)<=.01)continue;if(l!==void 0&&Math.abs(a-l)>.01){this.pendingOpacityChanges.set(r.id,{entity:r,targetOpacity:a});continue}let u=o.mesh.parent;if(!(u instanceof Ce))continue;let d=u.userData.modelURL;if(!d)continue;let h=cn(d),g=i.opacity??1,b=Math.round(g*100);e.has(h)||e.set(h,new Map);let M=e.get(h);M.has(b)||M.set(b,[]),M.get(b).push(r)}for(let[t,r]of e.entries()){let o=this.gltfCache.get(t);if(o)for(let[i,s]of r.entries()){if(s.length<2)continue;let a=i/100;this.createSharedBatchForDetached(s,o,a,t)}}this.publish("batch-changed")}createSharedBatchForDetached(e,t,r,o){if(e.length<2)return;let s=e[0].components[0].mesh?.parent;if(!s)return;let a=s.parent,l=a instanceof ie?a.userData.entityId:"unknown",c=Kr(t,e.length);c.userData.detached=!0,c.userData.sharedOpacity=r,s.add(c);let u=this.createBatch(c,o,l,r,e.length);Qr(c,r),qt(c,r);let d=new Y,h=new xt,g=new Ft,b=new O,M,p,m=0;for(let y of e){let v=y.components[0],x=y.components[1],S=v.mesh;if(S){let C=this.getBatchForMesh(S);C&&this.removeBatch(C),os(S)}v.mesh=c,v.instanceIndex=m,p=v.feature,M=this.convertTo3DMapPosition(p.geometry.coordinates[1],p.geometry.coordinates[0],0),v.position.set(M.x,M.y,v.altitude),Vn(h,x.rotation),Wn(b,x.scale),x.visible===!1&&b.set(0,0,0),g.setFromEuler(h),d.compose(v.position,g,b);for(let C of c.children)C instanceof K&&(C.setMatrixAt(m,d),C.userData.entities[m]=y.id,C.count=m+1,C.instanceMatrix.needsUpdate=!0);is(c,m,x.color,x.material),m++}u.count=m,ns(c)}removeInstanceFromBatch(e,t,r){let o=e.count-1,i=e.opacity===1&&t.userData?.detached!==!0;if(e.count===1){if(i){e.count=0;for(let u of t.children)u instanceof K&&(u.count=0,u.instanceMatrix.needsUpdate=!0);let c=this.instanceMap.get(e.containerId)?.get(e.urlHash);c&&c.object===e.mesh&&(c.count=0),this.updateDebugUI();return}this.removeBatch(e),os(t),this.updateDebugUI();return}for(let l of t.children)if(l instanceof K){if(r!==o){l.getMatrixAt(o,this.tempMatrix),l.getColorAt(o,this.tempColor),l.setMatrixAt(r,this.tempMatrix),l.setColorAt(r,this.tempColor);let c=l.userData.entities[o];if(c){l.userData.entities[r]=c;let u=this.state.geometry3DMap.get(c);u&&(u.components[0].instanceIndex=r)}}delete l.userData.entities[o],l.count=o,l.instanceMatrix.needsUpdate=!0,l.instanceColor&&(l.instanceColor.needsUpdate=!0)}e.count=o;let a=this.instanceMap.get(e.containerId)?.get(e.urlHash);a&&a.object===e.mesh&&(a.count=o),this.updateDebugUI()}updateModelStyles(){for(let e of this.state.geometry3DsInScene){if(e?.type!=="model")continue;let t=e.components[1],r=e.components[0];if(!t.dirty&&!r.positionDirty)continue;if(r.instancingDisabled){this.updateNonInstancedModelStyle(e),t.dirty=!1,r.positionDirty=!1;continue}let o=r.mesh?.userData,i=o?.detached,s=t.opacity!=null&&t.opacity!==1,a=t.opacity??1,l=o?.sharedOpacity,c=l!==void 0&&Math.abs(a-l)>.01;if((s&&!i&&r.mesh||c)&&this.pendingOpacityChanges.set(e.id,{entity:e,targetOpacity:a}),jn(e),this.updateInstanceTransform(e),this.updateInstanceColor(e,t.color,t.material),r.mesh?.userData?.detached&&r.mesh){let d=t.opacity??1;Qr(r.mesh,d),qt(r.mesh,d)&&(this.transparencyChanged=!0)}t.dirty=!1,r.positionDirty=!1}}flushPendingOpacityChanges(){if(this.pendingOpacityChanges.size===0)return;let e=new Map,t=new Map,r=(o,i,s,a,l,c)=>{let u=Math.round(i*100),d=`${s}_${a}_${u}`,h=t.get(d);h||(h={entities:[],targetOpacity:i,urlHash:s,containerId:a,gltf:l,parent:c},t.set(d,h)),h.entities.push(o)};for(let{entity:o,targetOpacity:i}of this.pendingOpacityChanges.values()){let s=o.components[0];if(!s.mesh||s.instanceIndex==null)continue;let a=s.mesh,l=this.getBatchForMesh(a),c=a.parent;if(!(c instanceof Ce))continue;let u=c.userData.modelURL;if(!u)continue;let d=cn(u),h=this.gltfCache.get(d);if(!h)continue;let g=c.parent,b=g instanceof ie?g.userData.entityId:"unknown";if(l){let M=e.get(l);M||(M={entities:[],targetOpacity:i},e.set(l,M)),Math.round(M.targetOpacity*100)===Math.round(i*100)?M.entities.push(o):r(o,i,d,b,h,c)}else r(o,i,d,b,h,c)}for(let[o,i]of e){let{entities:s,targetOpacity:a}=i,l=o.mesh.userData?.detached===!0,c=Math.round(a*100)===100;if(s.length===o.count&&l&&!c)o.opacity=a,o.mesh.userData.sharedOpacity=a,Qr(o.mesh,a),qt(o.mesh,a)&&(this.transparencyChanged=!0);else{let h=s[0]?.components[0]?.mesh?.parent;if(h instanceof Ce){let g=h.userData.modelURL;if(g){let b=cn(g),M=this.gltfCache.get(b),p=h.parent,m=p instanceof ie?p.userData.entityId:"unknown";if(M)for(let y of s)r(y,a,b,m,M,h)}}}}for(let o of t.values()){let{entities:i,targetOpacity:s,urlHash:a,containerId:l,gltf:c,parent:u}=o,d=Math.round(s*100);for(let m of i){let y=m.components[0],v=y.mesh,x=this.getBatchForMesh(v),S=y.instanceIndex;x&&S!=null&&S>=0&&this.removeInstanceFromBatch(x,v,S)}let h,g,b=this.batchesByUrlHash.get(a);if(b){for(let m of b)if(m.containerId===l&&Math.round(m.opacity*100)===d&&m.count+i.length<=m.maxCount){h=m,g=m.mesh;break}}if(!h||!g){let m=Math.max(en,i.length),y=Kr(c,m);y.userData.detached=!0,y.userData.sharedOpacity=s,u.add(y),h=this.createBatch(y,a,l,s,m),g=y,Qr(y,s),qt(y,s)&&(this.transparencyChanged=!0)}let M,p;for(let m of i){let y=m.components[0],v=m.components[1],x=h.count;y.mesh=g,y.instanceIndex=x,p=y.feature,M=this.convertTo3DMapPosition(p.geometry.coordinates[1],p.geometry.coordinates[0],0),y.position.set(M.x,M.y,y.altitude),Vn(this.tempEuler,v.rotation),Wn(this.tempScale,v.scale),v.visible===!1&&this.tempScale.set(0,0,0),this.tempQuaternion.setFromEuler(this.tempEuler),this.tempMatrix.compose(y.position,this.tempQuaternion,this.tempScale);for(let S of g.children)S instanceof K&&(S.setMatrixAt(x,this.tempMatrix),S.userData.entities[x]=m.id,S.count=x+1,S.instanceMatrix.needsUpdate=!0);this.updateInstanceColor(m,v.color,v.material),h.count++,g.userData.detached?this.detachedEntityIds.add(m.id):this.detachedEntityIds.delete(m.id)}ns(g),this.publish("batch-changed")}this.pendingOpacityChanges.clear(),this.updateDebugUI()}updateInstanceTransform(e){let t=e.components[0],r=e.components[1];if(!t.mesh)return;let o=t.feature,{x:i,y:s}=this.convertTo3DMapPosition(o.geometry.coordinates[1],o.geometry.coordinates[0],0);if(t.position.set(i,s,t.altitude),Vn(this.tempEuler,r.rotation),r.visible===!1?this.tempScale.set(0,0,0):Wn(this.tempScale,r.scale),t.instancingDisabled){t.mesh.position.copy(t.position),t.mesh.rotation.set(this.tempEuler.x,this.tempEuler.y,this.tempEuler.z),t.mesh.scale.copy(this.tempScale);return}if(!(t.instanceIndex==null||t.instanceIndex<0)){this.tempQuaternion.setFromEuler(this.tempEuler),this.tempMatrix.compose(t.position,this.tempQuaternion,this.tempScale);for(let a of t.mesh.children)a instanceof K&&zh(a.instanceMatrix.array,t.instanceIndex*16,this.tempMatrix)&&(a.setMatrixAt(t.instanceIndex,this.tempMatrix),a.instanceMatrix.needsUpdate=!0,a.boundingSphere=null)}}updateNonInstancedModelStyle(e){let t=e.components[0],r=e.components[1];if(!t.mesh)return;jn(e),this.updateInstanceTransform(e);let o=r.opacity??1;ll(t.mesh,o,r.visibleThroughGeometry),r.EXPERIMENTAL_clippingEnabled||qt(t.mesh,o)&&(this.transparencyChanged=!0),r.color&&al(t.mesh,r.color)}updateInstanceColor(e,t,r){let o=e.components[0];!o.mesh||o.instanceIndex==null||o.instanceIndex<0||is(o.mesh,o.instanceIndex,t,r)}removeInstance(e){let t=e.components[0];if(this.detachedEntityIds.delete(e.id),this.nonInstancedModels.has(e.id)){let c=this.nonInstancedModels.get(e.id);return c?.mesh&&(cl(c.mesh),c.mesh.parent?.remove(c.mesh)),this.nonInstancedModels.delete(e.id),t.mesh=null,this.updateDebugUI(),!0}if(!t.mesh||t.instanceIndex==null||t.instanceIndex<0)return!0;let r=this.getBatchForMesh(t.mesh);if(!r)return!0;let o=t.instanceIndex,i=r.count-1,s=r.opacity===1&&t.mesh.userData?.detached!==!0;if(r.count===1){if(s){r.count=0;for(let b of t.mesh.children)b instanceof K&&(b.count=0,b.instanceMatrix.needsUpdate=!0);let g=this.instanceMap.get(r.containerId)?.get(r.urlHash);return g&&g.object===r.mesh&&(g.count=0),t.mesh.parent&&t.mesh.parent.remove(t.mesh),t.mesh=null,this.updateDebugUI(),!1}let c=r.urlHash;this.removeBatch(r);let u=this.batchesByUrlHash.get(c),d=!1;if(u){for(let h of u)if(h.count>0){d=!0;break}}return os(t.mesh),t.mesh=null,this.updateDebugUI(),!d}for(let c of t.mesh.children)if(c instanceof K){if(o!==i){c.getMatrixAt(i,this.tempMatrix),c.getColorAt(i,this.tempColor),c.setMatrixAt(o,this.tempMatrix),c.setColorAt(o,this.tempColor);let u=c.userData.entities[i];if(u){c.userData.entities[o]=u;let d=this.state.geometry3DMap.get(u);d?d.components[0].instanceIndex=o:R.warn("[removeInstance] Could not find lastEntity in geometry3DMap:",u)}}delete c.userData.entities[i],c.count=i,c.instanceMatrix.needsUpdate=!0,c.instanceColor&&(c.instanceColor.needsUpdate=!0)}r.count=i;let l=this.instanceMap.get(r.containerId)?.get(r.urlHash);return l&&l.object===r.mesh&&(l.count=i),t.mesh=null,this.updateDebugUI(),!1}destroy(){this.gltfCache.clear(),this.gltfLoadPromises.clear();for(let e of this.instanceMap.values())for(let t of e.values())Vh(t.object);this.instanceMap.clear(),this.modelNames.clear(),this.batchByMesh.clear(),this.batchesByUrlHash.clear(),this.batchCounter=0;for(let e of this.nonInstancedModels.values())e.mesh&&(cl(e.mesh),e.mesh.parent?.remove(e.mesh));this.nonInstancedModels.clear(),this.debugUI.destroy(),this.loadPromises=[],this.loader=void 0}endFrame=()=>{this.transparencyChanged=!1}};f();var ls=class{#e;#n;#i=new O;#o=new V;constructor(e,t,r,o,i={}){this.#e=t,this.#n=new Mc(e,r,this.#s(o),i)}#s(e){return(t,r,o)=>(this.#i.set(t,r,o),this.#o.set(0,0),e(this.#o,this.#i),this.#o.x===0&&this.#o.y===0?null:{x:this.#o.x,y:this.#o.y})}get pipeline(){return this.#n}get labelCanvas(){return this.#n.labelCanvas}get interactiveCollidersQTree(){return this.#n.collisionSystem.interactiveCollidersQTree}get visibleCollidersQTree(){return this.#n.collisionSystem.visibleCollidersQTree}resize(){this.#n.resize()}syncTwoDEntities(){this.#n.clearEntities();for(let e of this.#e.geometry2DsInScene)e.syncPosition(),this.#n.addEntity(e.entity2D)}update(e,t,r,o=[]){this.#a(),this.#n.update(e,t,r,o)}#a(){let e,t;for(let r of this.#e.geometry2DsInScene){t=r.components[0];let o=r.attachedTo?this.#e.geometry3DMap.get(r.attachedTo):void 0;if(o instanceof $)if(this.#e.geometry3DsInScene.has(o)){if(e=o.components[1],e.dirty||t.attachedDirty){let s=e.height,a=e.altitude;r.setAltitude(s+a)}let i=e.visible;t.visible!==i&&(t.visible=i)}else t.visible===!0&&(t.visible=!1);t.attachedDirty=!1}}markDirty(){this.#n.markDirty()}get collidersNeedRecomputing(){return this.#n.collidersNeedRecomputing}set collidersNeedRecomputing(e){this.#n.collidersNeedRecomputing=e}updateWatermark(e){this.#n.updateWatermark(e)}cancelPendingFrames(){this.#n.cancelPendingFrames()}setCollidersDirty(){this.#n.collisionSystem.collidersDirty=!0}deleteTextCacheEntry(e){delete this.#n.drawSystem.textCache[e]}showCollisionBoxes(){this.#n.showCollisionBoxes()}hideCollisionBoxes(){this.#n.hideCollisionBoxes()}destroy(){this.#n.destroy()}};var Wh=new zt;var{DEFAULT_PITCH:dl,DEFAULT_BEARING:hl,DEFAULT_ZOOM_LEVEL:pl,DEFAULT_MIN_ZOOM_LEVEL:Ly,DEFAULT_MAX_ZOOM_LEVEL:Ay}=rt,Ry=U.radToDeg(.6435011087932844),ul=class extends Z{options;container;Debug;#e;#n;#i;#o;get viewCamera(){return this.#o}get cameraObject(){return this.#n}#s;#a;#c;#d;get canvasWidth(){return this.#t.canvasWidth}get canvasHeight(){return this.#t.canvasHeight}rendererDomElement;get resolutionScale(){return this.map?._getClampedPixelRatio(this.canvasWidth,this.canvasHeight)??kr()}#g(e){this.#p!=="outdoors-overlay"&&this.map?.setPixelRatio(e),this.#t.pixelRatio=this.resolutionScale}get aspect(){return this.canvasWidth/this.canvasHeight}get labelsCanvas(){return this.#r.twoDEntitySystem?.labelCanvas??null}#t;camera;#h;#r={};#b=null;map;#f=()=>{this.signal?.aborted||!this.#r?.renderSystem||(this.#r.renderSystem.twoDdirty=!0)};#l=()=>{this.signal?.aborted||!this.#r?.renderSystem||(this.#r.renderSystem.threeDdirty=!0)};#M=()=>{this.map&&(this.#t.depthRangeFor3D=this.map.painter.depthRangeFor3D)};#E=(e,t)=>{e.addEventListener("childadded",t),e.addEventListener("childremoved",t),this.onAbort(()=>{e.removeEventListener("childadded",t),e.removeEventListener("childremoved",t)})};#C(){this.#r.twoDEntitySystem.markDirty()}#p="standalone";get mode(){return this.#p}constructor(e,t={}){super();let r={geometry3DMap:new Map,geometry2DMap:new Map,geometry2DIdsInScene:new Set,geometry3DIdsInScene:new Set,geometryGroupIdsToLoad:new Set,geometry3DsInScene:new Set,geometry2DsInScene:new Set,geometryScene:new ie("__scene"),hoverColor:"#f6efff",text3dHoverColor:"white",disableUpdateStateValidation:t.disableUpdateStateValidation??!1,insetsPadding:Po,shouldMeasureCanvas:!0,pixelRatio:this.resolutionScale,canvasWidth:0,canvasHeight:0,internalTweenGroup:new Rs,externalTweenGroup:new Rs,cameraObject:new Ns,naturalBearing:0,containerOffset:[0,0],useStandaloneCamera:!1,directionalLight:new wo(16777215,.3*Math.PI),ambientLight:new dc(16777215,.741*Math.PI),renderer:void 0,threeJSScene:new St,depthRangeFor3D:[0,1],geometry2DState:{entities:new Set,entityMap:new Map,entityIds:new Set,get pixelRatio(){return r.pixelRatio}}};if(this.#t=r,this.#t.useStandaloneCamera=t.useStandaloneCamera??!1,this.#t.naturalBearing=t.naturalBearing??0,this.convertTo3DMapPosition=this.convertTo3DMapPosition.bind(this),!e.clientWidth||!e.clientHeight)throw new Error("[MappedinJS] Container width and height must be greater than 0");(t.mode==="outdoors-interleaved"||t.mode==="outdoors-overlay")&&t.map&&(this.#p=t.mode,this.map=t.map),this.#E(this.#t.geometryScene,()=>{this.#l(),this.#f()}),this.#t.geometry3DMap.set(this.#t.geometryScene.userData.entityId,this.#t.geometryScene),t.center&&(this.#t.center=t.center?[...t.center]:[0,0]),this.options=t,this.container=e,this.#r.htmlControlsSystem=this.#u(new pi(this.container,{outdoorEnabled:!!this.map})),this.#r.maskingSystem=this.#u(new qi(this.#t)),this.#p!=="outdoors-overlay"&&this.#r.htmlControlsSystem.addAttributionControl(this.options.attribution),window.MappedinDebug||(window.MappedinDebug={}),w.env.NODE_ENV==="test"&&(window.MappedinDebug.mapViewCoreInstance=this),this.#h=new Ho({antialias:typeof t.antialias=="boolean"?t.antialias:!0,alpha:!1,canvas:this.mode!=="standalone"?t.gl?.canvas:void 0,onWebGLContextCreationError:t.onWebGLContextCreationError,onWebGLContextLost:t.onWebGLContextLost,onWebGLContextRestored:p=>{t.onWebGLContextRestored?.(p),this.#f(),this.#l(),this.render()},onWebGLRendererError:t.onWebGLRendererError,backgroundColor:t.backgroundColor||"#ffffff",backgroundAlpha:t.backgroundAlpha??1}),this.#t.renderer=this.#h.renderer,this.#e=this.#t.threeJSScene,this.#e.matrixWorldAutoUpdate=!1,this.#p!=="standalone"&&this.#e.add(Gc()),this.#e.add(this.#t.geometryScene);let o=window.__THREE_DEVTOOLS__;w.env.NODE_ENV==="dev"&&typeof o<"u"&&(o.dispatchEvent(new CustomEvent("observe",{detail:this.#e})),o.dispatchEvent(new CustomEvent("observe",{detail:this.#h}))),this.#n=new Ns(Ry,this.aspect,50,1e5),this.#t.cameraObject=this.#n,this.#o=new nc,this.#o.matrixWorldAutoUpdate=!1,this.#n.renderOrder=999;let i=new Ge;i.add(this.#n),this.#d=new Ge,this.#d.add(i),this.#e.add(this.#d),this.#n.updateProjectionMatrix(),this.#n.updateMatrixWorld(!0),t.__EXPERIMENTAL_shadows?.enabled&&(this.#r.shadowsSystem=this.#u(new rs(this.#t,this.#h,this.#d,t.__EXPERIMENTAL_shadows)),this.map&&this.onMapLibreEvent("render",this.#M)),this.#w=this.mode==="standalone"?this.#n:this.#o,this.referenceMap={scale:1,latitude:0,longitude:0,getNorth:()=>0,georeference:[{target:{x:0,y:0}},{target:{x:0,y:0}},{target:{x:0,y:0}},{target:{x:0,y:0}}]},this.rendererDomElement=this.#h.domElement(),this.#s=new V;let s=new Ie(1e6,1e6),a=new Me({color:0,visible:!1});this.#a=new W(s,a),this.#a.name="worldPlane",this.#e.add(this.#a),t.gl?.canvas||e.appendChild(this.rendererDomElement),window.addEventListener("resize",this.#R,{capture:!1,signal:this.signal}),this.#I(),document.addEventListener("visibilitychange",this.#A,{signal:this.signal}),typeof ResizeObserver=="function"&&w.env?.NODE_ENV!=="test"&&(this.#c=new ResizeObserver(po(p=>{this.#O(p[0].contentRect.width,p[0].contentRect.height)},50)),this.#c?.observe(e),this.#c&&this.onAbort(()=>this.#c?.disconnect())),e.classList.add("mappedin-map"),e.style.isolation="isolate",this.rendererDomElement.style.width=globalThis.MappedinDebug?.TEST_IOS?"1080px":"100%",this.rendererDomElement.style.height=globalThis.MappedinDebug?.TEST_IOS?"1920px":"100%",w.env.NODE_ENV==="test"&&this.rendererDomElement.setAttribute("data-testid","mappedin-canvas"),this.mode!=="outdoors-overlay"&&this.rendererDomElement.tabIndex!==void 0&&this.rendererDomElement.removeAttribute("tabindex"),Object.defineProperty(this.#t,"canvasWidth",{configurable:!0,enumerable:!0,get:()=>this.rendererDomElement.clientWidth}),Object.defineProperty(this.#t,"canvasHeight",{configurable:!0,enumerable:!0,get:()=>this.rendererDomElement.clientHeight}),this.rendererDomElement.style.touchAction="manipulation";let l=this.canvasWidth,c=this.canvasHeight;this.#r.watermarkSystem=this.#u(new ci(this.#n,this.#t,t?.watermark)),this.#r.watermarkSystem.on("texture-loaded",this.render),this.#t.shouldMeasureCanvas=!0,this.#t.pixelRatio=this.resolutionScale,this.#_(Math.floor(l*this.resolutionScale),Math.floor(c*this.resolutionScale)),this.#t.directionalLight.position.set(-150,-150,350),this.#e.add(this.#t.directionalLight),this.#e.add(this.#t.ambientLight),this.#r.cameraSystem=this.#u(new jr(this.#n,this.#e,this.#h.renderer,this.#t,{mode:this.mode,canvasHeight:c,canvasWidth:l})),globalThis.MappedinDebug?.__idleCallbackInteractionState&&(globalThis.MappedinDebug.__idleCallbackInteractionState.registerInteractionChecker(this.#r.cameraSystem.isUserInteracting),globalThis.MappedinDebug.__idleCallbackInteractionState.registerInteractionChecker(this.#r.cameraSystem.isCameraMoving)),this.#r.cameraSystem.on("user-dolly-start",this.#S,{signal:this.signal}),this.#r.cameraSystem.on("user-pan-start",this.#S,{signal:this.signal}),this.#r.cameraSystem.on("user-rotate-start",this.#S,{signal:this.signal}),this.#r.cameraSystem.on("user-zoom-start",this.#S,{signal:this.signal}),this.#r.cameraSystem.on("user-tilt-start",this.#S,{signal:this.signal}),this.#r.cameraSystem.on("user-pedestal-start",this.#S,{signal:this.signal}),this.#r.cameraSystem.on("user-dolly-end",this.#v,{signal:this.signal}),this.#r.cameraSystem.on("user-pan-end",this.#v,{signal:this.signal}),this.#r.cameraSystem.on("user-rotate-end",this.#v,{signal:this.signal}),this.#r.cameraSystem.on("user-zoom-end",this.#v,{signal:this.signal}),this.#r.cameraSystem.on("user-tilt-end",this.#v,{signal:this.signal}),this.#r.cameraSystem.on("user-pedestal-end",this.#v,{signal:this.signal}),this.#r.cameraSystem.on("change",()=>{this.publish("camera-change",this.camera),this.#r.geometryInFocusSystem&&(this.#r.geometryInFocusSystem.cameraDirty=!0),this.render()}),this.#r.pathSystem=this.#u(new kn(this.#t,this.convertTo3DMapPosition,this.getParentContainer,this.#r.cameraSystem.convertZoomLevelToAltitude)),this.#r.pathSystem.on("animate:path",this.render,{signal:this.signal}),this.#r.panBoundsSystem=this.#u(new hi(this.#t,this.#r.cameraSystem));let u=()=>{let{panBounds:p,fov:m,convertAltitudeToZoomLevel:y}=this.#r.cameraSystem;if(this.#r.panBoundsSystem.autoMinZoomLevel){if(p.radius<=0)return;let v=Math.min(this.#t.canvasWidth/this.#t.canvasHeight,1),x=m*Math.PI/180*v,S=Math.tan(x/2),{radius:C,center:D}=this.#r.cameraSystem.panBounds,E=C/S,T=this.getThreeCamera().getWorldPosition(new O),P=D.distanceTo(T),I=Math.abs(T.z-D.z),L=E*I/P,N=y(L);Bc(N,this.camera.minZoomLevel)&&this.camera.setMinZoomLevel(N)}this.publish("pan-bounds-change",this.#r.cameraSystem.panBounds)};this.#r.panBoundsSystem.on("update",u,{signal:this.signal}),this.camera=this.#u(new li(this,this.#r,this.#t));let d=()=>{this.#r.geometryInFocusSystem&&this.#r.geometryInFocusSystem.resize(),this.render()};this.camera.on("padding-change",d,{signal:this.signal}),this.camera.setZoomLevel(t.zoomLevel??pl),this.camera.setBearing(t.bearing??hl),this.camera.setPitch(t.pitch??dl),this.camera.setMaxZoomLevel(Ay),this.camera.setMinZoomLevel(Ly),this.#r.twoDEntitySystem=this.#u(new ls(this.container,this.#t,this.#t.geometry2DState,this.project,{workerUrl:_s||void 0,useCollisionWorker:(t.useCollisionWorker??!0)&&(t.useWorkers??!0),transformImageRequest:t.transformImageRequest,watermark:{width:0,height:0,position:"bottom-left"}})),this.#r.interactionSystem=this.#u(new Sn(this.rendererDomElement,this.#t,this.#n,this.#a,this.#r.cameraSystem.isUserInteracting)),this.#r.interactionSystem.on("doubletap-with-onefinger",p=>{this.#r.cameraSystem.enableZoom&&this.camera.animateTo({center:this.projectScreenXYToCoordinate(p.clientX,p.clientY)?.coordinate,zoomLevel:this.camera.zoomLevel+1,duration:zs,easing:"ease-out"})}),this.#r.interactionSystem.on("singletap-with-twofinger",()=>{this.#r.cameraSystem.enableZoom&&this.camera.animateTo({zoomLevel:this.camera.zoomLevel-1,duration:zs,easing:"ease-out"})}),this.#r.interactionSystem.on("hover",this.render),this.#r.interactionSystem.on("click",p=>{if(p.entity2D.some(y=>y.id==="watermark")&&typeof this.#r.watermarkSystem.options.onClick=="function"&&this.#r.watermarkSystem.options.interactive){this.#r.watermarkSystem.options.onClick();return}if(!p.position){R.error("Pointer event outside world-plane");return}this.publish("click",{...this.#P(p,p.position),pointerEvent:p.pointerEvent})}),this.#r.interactionSystem.on("hover",p=>{p.position&&this.publish("hover",this.#P(p,p.position))}),this.#r.geometryInFocusSystem=this.#u(new Mi(this.#t,this.#w));let h=p=>{this.publish("geometry-in-focus",p)};this.#r.geometryInFocusSystem.on("geometry-in-focus",h,{signal:this.signal}),this.#r.drawSystem=this.#u(new qo(this.#t,this.convertTo3DMapPosition,this.convert3DMapPositionToCoordinate)),this.#r.exporterSystem=this.#u(new Cn(this.#t)),this.#r.batchedMeshSystem=this.#u(new Yo(this.#t,this.convertTo3DMapPosition)),this.#r.batchedMeshSystem.on("geometry-2d-added",this.render,{signal:this.signal}),this.#r.batchedMeshSystem.on("geometry-group-added",this.#y,{signal:this.signal}),this.#r.modelSystem=this.#u(new as(this.#t,this.convertTo3DMapPosition)),this.#r.modelSystem.on("model-loaded",()=>{this.#r.shadowsSystem&&(this.#r.shadowsSystem.needsRender=!0),this.render()},{signal:this.signal}),this.#r.modelSystem.on("batch-changed",()=>{this.#r.interactionSystem.dirty3D=!0},{signal:this.signal}),this.#r.meshDetachmentSystem=this.#u(new Hi(this.#t)),this.#r.meshModificationSystem=this.#u(new Wi(this.#t)),this.#r.geometryDisposalSystem=this.#u(new Xi(this.#t)),this.#r.textureSystem=this.#u(new Yi(this.#t)),this.#r.textureSystem.on("texture-added",this.render,{signal:this.signal}),this.#r.borderSystem=this.#u(new Cu(this.#t,this.convertTo3DMapPosition)),this.#r.clippingPlaneSystem=this.#u(new Ji(this.#t)),this.#r.renderOrderSystem=this.#u(new $i(this.#t)),this.#r.pluginSystem=this.#u(new Ki),this.#r.customGeometrySystem=this.#u(new mi(this.#t,this.convertTo3DMapPosition));let g=typeof t.outlines=="object"?t.outlines:void 0;g&&(this.#t.outlinesOptions=g);let b=t.__TEST_synchronousIdleWork,M=b?.enabled&&typeof b.maxDelay=="number"?b.maxDelay:void 0;this.#r.outlineInterpolationSystem=this.#u(new fi(this.#t,g,!0,M)),this.#r.outlineInterpolationSystem.on("needs-render",this.render,{signal:this.signal}),this.#r.renderSystem=this.#u(new Jo(this.#h,this.#t,this.mode,this.#e,this.#n,this.viewCamera,this.#r)),this.#r.imageSystem=this.#u(new xi(this.#t,this.convertTo3DMapPosition,this.project,t.bearing,t.naturalBearing,t.imagePlacementOptions,t.transformImageRequest)),this.#r.text3DSystem=this.#u(new zc(this.#t,this.convertTo3DMapPosition,t.useWorkers??!0)),this.#r.text3DSystem.on("render",this.render,{signal:this.signal}),this.#r.imageSystem.on("image-loaded",this.render,{signal:this.signal}),this.#r.renderSystem.on("pre-render",()=>this.publish("pre-render"),{signal:this.signal}),this.#r.renderSystem.on("post-render",()=>this.publish("post-render"),{signal:this.signal}),this.#r.renderSystem.on("measure-canvas",this.#N,{signal:this.signal}),this.#r.outdoorLayersSystem=this.#u(new Fi(this.map,M)),this.#r.occlusion2DSystem=this.#u(new Zi(this.#t,this.convertTo3DMapPosition,this.#h)),t.occlusionEnabled&&this.#r.occlusion2DSystem.enable(),this.Debug=new ji(this),t.environment!==!1&&(this.#i=this.#z()),this.#F()}#y=()=>{this.#r.geometryDisposalSystem.dirty=!0,this.render()};#m=e=>Math.trunc(e*10)/10;#x=()=>{this.#g(kr()),this.#r.twoDEntitySystem.markDirty(),this.#O(void 0,void 0,!0)};#I=()=>{this.signal?.aborted||typeof window>"u"||(this.#b=window.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`),this.#b.addEventListener("change",()=>{this.#x(),this.#I()},{once:!0,signal:this.signal}))};#A=()=>{document.visibilityState==="visible"&&this.#O(void 0,void 0,!0)};#R=()=>{this.#O()};#w;#O=(e,t,r=!1)=>{let o=e??this.rendererDomElement.clientWidth,i=t??this.rendererDomElement.clientHeight;if((o===0||i===0)&&!r)return;if(this.#r.twoDEntitySystem.resize(),this.#g(kr()),this.#N(),this.#C(),this.#r.cameraSystem.resize(this.canvasWidth,this.canvasHeight),this.#r.cameraSystem.dirty=!0,this.#r.cameraSystem.stateDirty=!0,this.map!=null){_o(this.map,this.camera.minZoomLevel,this.camera.maxZoomLevel);let l=this.camera.zoomLevel,c=U.clamp(l,this.camera.minZoomLevel,this.camera.maxZoomLevel);c!==l&&this.camera.setZoomLevel(c)}this.#r.watermarkSystem.resize(this.canvasWidth,this.canvasHeight),this.#r.htmlControlsSystem.resize(this.canvasWidth),this.#r.geometryInFocusSystem.resize(),this.#r.occlusion2DSystem.resize(),this.#r.twoDEntitySystem.resize();let{top:s,left:a}=this.container.getBoundingClientRect();this.#t.containerOffset=[s,a],this.publish("resize"),this.map!=null&&this.publish("camera-change",this.camera),this.render()};#F=()=>{this.renderSync()};#T=new O;project=(e,t)=>{if(this.#n.position.z+this.camera.elevation>t.z){this.#T.copy(t);let r=this.#T.project(this.#w),o=(r.x+1)/2*this.canvasWidth-0/2,i=(-r.y+1)/2*this.canvasHeight-0/2,s=this.#m(o),a=this.#m(i);e.x=s,e.y=a,e instanceof O&&(e.z=r.z)}else e.x=-1e3,e.y=-1e3,e instanceof O&&(e.z=1/0)};#_=(e,t)=>{this.#h.setBufferSize(e,t),this.#n.aspect=e/t,this.#n.updateProjectionMatrix(),this.#n.updateMatrixWorld(!0),this.#s.x=e,this.#s.y=t};#N=()=>{let e=this.rendererDomElement.clientWidth,t=this.rendererDomElement.clientHeight,r=Math.floor(e*this.resolutionScale),o=Math.floor(t*this.resolutionScale);this.#_(r,o),this.map?.resize(),this.#t.shouldMeasureCanvas=!1};addGroupContainer(e,t,r){if(!this.#t.geometry3DMap.has(e)&&!this.#t.geometry2DMap.has(e)){let o=new ie(e);this.#E(o,()=>{this.#l(),this.#f()}),t?.visible!==void 0&&(o.visible=t.visible),t?.altitude!==void 0&&o.setAltitude(t.altitude),t?.interactive!==void 0&&Le(o,t.interactive,this.#t),t?.focusable!==void 0&&zo(o,t.focusable),t?.preloadGeometry!==void 0&&(o.userData.preloadGeometry=t.preloadGeometry),this.#t.geometry3DMap.set(e,o);let i=this.getParentContainer(r);i instanceof ie&&i.addEntity(o),this.#l(),this.render()}else R.error(`Group container with ID '${e}' already exists. The group container cannot be added.`);return{id:e,type:"group-container"}}getParentContainer=(e,t=!0)=>{if(!e)return t?this.#t.geometryScene:void 0;if(typeof e=="string"||typeof e=="number"){let r=this.#t.geometry3DMap.get(e);return r instanceof ie?r:(R.warn(`Parent (${typeof e=="object"?e.id:e}) is not a valid container, adding to scene`),t?this.#t.geometryScene:void 0)}else if(e.type==="group-container"){let r=this.#t.geometry3DMap.get(e.id);if(r instanceof ie)return r}return t?this.#t.geometryScene:void 0};addCustomGeometry(e,t,r,o,i){if(this.#t.geometry3DMap.has(e))R.error(`Custom geometry with ID '${e}' already exists. The custom geometry cannot be added.`);else{let s=new Zr(t,r),a=new $(s,new ut(o));o?.interactive!==void 0&&Le(a,o.interactive,this.#t),a.id=e,s.mesh.userData={entityId:e,type:"custom-geometry"},this.#t.geometry3DMap.set(a.id,a);let l=this.getParentContainer(i);i&&l instanceof ie?l.addEntity(a):this.#t.geometryScene.addEntity(a),this.#r.panBoundsSystem.dirty=!0,this.#l(),this.render()}return{id:e,type:"custom-geometry"}}registerPlugin(e){this.#r.pluginSystem.registerPlugin(e)}unregisterPlugin(e){this.#r.pluginSystem.unregisterPlugin(e)}addFeatureCollection(e,t,r,o,i){if(!this.#t.geometry3DMap.has(e)&&!this.#t.geometry2DMap.has(e)){let s=new Ce(e);this.#E(s,()=>{this.#l(),this.#f()}),s.userData.dirty=!0,o?.altitude!==void 0&&(s.position.z=o.altitude),o?.visible!==void 0&&(s.visible=o.visible);let a="merged",l;if(typeof r=="function"?(a="batched",l=r):typeof r=="object"?l=()=>r:l=()=>({color:Uo}),this.#t.geometry3DMap.set(e,s),a==="batched")for(let d of t.features){if(d.geometry==null||!["Polygon","MultiPolygon","LineString","MultiLineString"].includes(d.geometry.type))continue;let h=d?.id||d?.properties?.id||Or(),g=l(d)??{color:Uo},b=this.#r.batchedMeshSystem.createEntityFromFeature(h,d,{outline:!0,...g});this.#t.geometry3DMap.set(h,b),s.userData.entities3D.add(h),this.#r.textureSystem.dirty=!0}else if(a==="merged"){let d=l()??{color:Uo},h=this.#r.batchedMeshSystem.createEntityFromFeature(e,t.features,{outline:!0,...d});this.#t.geometry3DMap.set(h.id,h),s.userData.entities3D.add(h.id),s.userData.isMerged=!0,this.#r.textureSystem.dirty=!0}let c=t.features.length>0?l(t.features[0]):void 0;c?.__EXPERIMENTAL_maskEnabled===!0&&$s(s,{enabled:c.__EXPERIMENTAL_maskEnabled,maskId:c.__EXPERIMENTAL_maskId,effect:c.__EXPERIMENTAL_maskEffect,mode:c.__EXPERIMENTAL_maskMode});let u=this.getParentContainer(i);u instanceof ie&&u.addEntity(s),this.#r.panBoundsSystem.dirty=!0,this.#l(),this.render()}else R.error(`Feature collection with ID '${e}' already exists. The feature collection cannot be added.`);return this.#r.outlineInterpolationSystem.geometries3DDirty=!0,{id:e,type:"feature-collection"}}addOccluder(e,t){let r=this.getParentContainer(t),o=this.#r.occlusion2DSystem.reserveOccluderId();return r?.addOccluderFeature(e,o),o}addImage(e,t,r,o){try{od(e,t,r)}catch(i){R.error(i);return}if(!this.#t.geometry3DMap.has(e)&&!this.#t.geometry2DMap.has(e)){let i=new An(t),s=new $(i,new ut(r));s.id=e||Or(),i.mesh.userData={entityId:s.id,type:"path"},this.#t.geometry3DMap.set(s.id,s),r?.interactive!=null&&Le(s,r.interactive,this.#t);let a=this.getParentContainer(o);a instanceof ie&&a.addEntity(s);let l=t.geometry.coordinates;if(l){let c=this.convertTo3DMapPosition(l[1],l[0],l[2]??0);this.#r.panBoundsSystem.expandBoundsIfOutside(c)}this.#l(),this.render()}else R.error(`Image with ID '${e}' already exists. The image cannot be added.`);return{id:e,type:"image"}}addModelGroup(e,t,r,{parent:o,onComplete:i}={}){try{Vu(e,t,r)}catch(s){R.error(s);return}if(!this.#t.geometry3DMap.has(e)&&!this.#t.geometry2DMap.has(e)){let s=new Ce(e);this.#E(s,()=>{this.#l(),this.#f()}),this.#t.geometry3DMap.set(e,s),s.userData.dirty=!0,s.userData.modelURL=r.url;for(let c of t.features){let u=c.id||c.properties.id||Or(),d=this.#r.modelSystem.createModelFromFeature(u,c,{...r});(c.properties.interactive!==void 0||r.interactive!=null)&&Le(d,c.properties.interactive??r.interactive,this.#t),r.clippingPlaneZOffset!=null&&(d.components[7]=new Bo,d.components[7].verticalOffset=r.clippingPlaneZOffset,r.clippingPlaneTopColor!=null&&(d.components[7].topColor=r.clippingPlaneTopColor),r.clippingPlaneTopVisible!=null&&(d.components[7].topVisible=r.clippingPlaneTopVisible)),d.parentId=s.userData.entityId,this.#t.geometry3DMap.set(u,d),s.userData.entities3D.add(u)}let a=this.getParentContainer(o);a instanceof ie&&a.addEntity(s);let l=t.features[0]?.geometry.coordinates;if(l){let c=this.convertTo3DMapPosition(l[1],l[0],l[2]??0);this.#r.panBoundsSystem.expandBoundsIfOutside(c)}this.#l(),this.render()?.then(i)}else R.error(`Model group with ID '${e}' already exists. The model group cannot be added.`);return{id:e,type:"feature-collection"}}#D(e,t,r,o){let i=new ks(t,this.convertTo3DMapPosition(e[1],e[0],e[2]||0),o);return i.components[2]=new Qi(r??this.#r.occlusion2DSystem.backgroundId),this.#t.geometry2DMap.set(i.id,i),i}addMarker2D(e,t,r,o){let i=r?.id;if(!this.#t.disableUpdateStateValidation)try{Ec(e,t,r||{})}catch(s){R.error(s);return}if(i===void 0||!this.#t.geometry2DMap.has(i)&&!this.#t.geometry3DMap.has(i)){let s=this.#D(e,new Do(t,r),r?.occluderId,r?.verticalOffset);s.id=i||String(s.id),i=s.id,r?.interactive!=null&&r.interactive!=="pointer-events-auto"&&Le(s,r?.interactive,this.#t),r?.enabled!=null&&Go(s,r.enabled),r?.occlude!=null&&Zs(s,r.occlude);let a=typeof r?.attachTo=="string"||typeof r?.attachTo=="number"?this.#t.geometry3DMap.get(r.attachTo):void 0;a instanceof $&&a.attach(s),this.getParentContainer(o)?.addEntity(s),this.#r.panBoundsSystem.expandBoundsIfOutside(s.object3d.position),this.render()}else R.error(`Marker2D with ID '${i}' already exists. The marker cannot be added.`);return{id:i,type:"marker"}}addText3D(e,t,r,o){if(!this.#t.geometry3DMap.has(e)&&!this.#t.geometry2DMap.has(e)){let i=new No({...t,properties:{...t.properties,id:e,content:t.properties.text}}),s=new $(i,new yn(r?.appearance));s.id=e,i.mesh.userData.entityId=e.toString(),i.mesh.userData.type="text3d",this.#t.geometry3DMap.set(e,s);let a=this.getParentContainer(o);a instanceof ie&&a.addEntity(s);let l=t.geometry.coordinates;if(l){let c=this.convertTo3DMapPosition(l[1],l[0],l[2]??0);this.#r.panBoundsSystem.expandBoundsIfOutside(c)}this.#l(),this.render()}else R.error(`Text3D with ID '${e}' already exists. The text3d cannot be added.`);return{id:e,type:"text3d"}}labelText3D(e,t,r={}){try{if(!t||!e)throw new Error("content and meshGeometryId are required");Uc.parse(r)}catch(c){R.error(c);return}let o=this.#t.geometry3DMap.get(e);if(o?.type!=="geometry"){R.error(".labelText3D failed: target incorrect");return}let i=o?.components[0],s=!Array.isArray(i.feature)&&i.feature.properties.textArea;if(!s)return;if(i.textEntityId){let c=this.#t.geometry3DMap.get(i.textEntityId);if(c?.type!=="text3d"){R.error(".labelText3D failed: existing text3d not found");return}return{id:c.id,type:c.type}}let a=new No({type:"Feature",geometry:{coordinates:s?.position,type:"Point"},properties:{textArea:s,content:t,id:Or()}});a.polygonEntityId=e;let l=new $(a,new yn(r?.appearance));return i.textEntityId=l.id.toString(),a.mesh.userData.entityId=l.id.toString(),a.mesh.userData.type="text3d",this.#t.geometry3DMap.set(l.id.toString(),l),r.parentId&&this.getParentContainer(r.parentId)?.addEntity(l),this.#l(),this.render(),{id:l.id,type:"text3d"}}addLabel2D(e,t,r,o){let i=r?.id;if(!this.#t.disableUpdateStateValidation)try{Cc(e,t,r||{})}catch(s){R.error(s);return}if(i===void 0||!this.#t.geometry2DMap.has(i)&&!this.#t.geometry3DMap.has(i)){let s=this.#D(e,new To(t,r||{},this.#t.pixelRatio),r?.occluderId,r?.verticalOffset);s.id=i||String(s.id),i=s.id,r?.interactive!=null&&Le(s,r?.interactive,this.#t),r?.enabled!=null&&Go(s,r.enabled),r?.occlude!=null&&Zs(s,r.occlude);let a=typeof r?.attachTo=="string"||typeof r?.attachTo=="number"?this.#t.geometry3DMap.get(r.attachTo):void 0;a instanceof $&&a.attach(s),this.getParentContainer(o)?.addEntity(s),this.#r.panBoundsSystem.expandBoundsIfOutside(s.object3d.position),this.#f(),this.render()}else R.error(`Label2D with ID '${i}' already exists. The label cannot be added.`);return{id:i,type:"label"}}addPath(e,t={},r){try{Fu(e,t||{})}catch(a){R.error(a);return}let o=new br(e,fu(t)),i=new $(o,new ut({color:t?.color??"#ff834c",altitude:t?.verticalOffset??.1}));i.id=t?.id||Or(),o.mesh.userData={entityId:i.id,type:"path"},this.#t.geometry3DMap.set(i.id,i),t?.interactive!=null&&Le(i,t?.interactive,this.#t);let s=this.getParentContainer(r);return s instanceof ie&&s.addEntity(i),this.#r.panBoundsSystem.dirty=!0,this.#l(),this.render(),{id:i.id,type:"path"}}updateWatermark(e){this.#r.watermarkSystem.options=e,this.#r.watermarkSystem.dirty=!0,this.#r.twoDEntitySystem.setCollidersDirty(),this.render()}remove(e){let t;if(typeof e=="string"||typeof e=="number"?(t=this.#t.geometry2DMap.get(e),t==null&&(t=this.#t.geometry3DMap.get(e))):typeof e.id=="string"||typeof e.id=="number"?(t=this.#t.geometry2DMap.get(e.id),t==null&&(t=this.#t.geometry3DMap.get(e.id))):t=e,t!=null){if(t.type==="custom-geometry")this.#t.geometry3DMap.delete(t.id),t.object3d&&ve(t.object3d),this.#l();else if(t.type==="group-container"){this.#t.geometry3DMap.delete(t.userData.entityId);for(let r of t.childrenIds.values())this.remove(r),t.userData.entities2D.delete(r);ve(t),this.#l()}else if(t.type==="feature-collection"){this.#t.geometry3DMap.delete(t.userData.entityId);for(let r of t.userData.entities3D.values())this.remove(r),t.userData.entities3D.delete(r);ve(t),this.#l()}else if(t.type==="geometry"||t.type==="model"||t.type==="path"){let r=t.components[0];if(t.entities2D.size>0){for(let i of t.entities2D.values())this.remove(i);t.removeAllEntities()}let o=t.parentObject3D?.userData.entityId??t.parentId;if(o){let i=this.#t.geometry3DMap.get(o);i instanceof Ce&&i.userData.entities3D.delete(t.id)}if(t.type==="model"){if(this.#r.modelSystem.removeInstance(t)&&t.object3d&&ve(t.object3d),o){let s=this.#t.geometry3DMap.get(o);if(s instanceof Ce&&s.userData.entities3D.size===0){let a=!1;for(let l of s.children)if(l.children.length>0){let c=l.children[0];if(c.isInstancedMesh&&(c.count??0)>0){a=!0;break}}a||this.remove(o)}}}else t.object3d&&ve(t.object3d);if(t.type==="geometry"){let i=t.components[3];i&&(i.enabled=!1,i.dirty=!0)}"textMesh"in r&&r.textMesh!=null&&this.remove(r.textMesh.userData.entityId),this.#t.geometry3DMap.delete(t.id),this.#l()}else if(t.type==="marker"||t.type==="label"){let r=t.attachedTo;if(r){let o=this.#t.geometry3DMap.get(r);o instanceof $&&o.detach(t)}t.object3d&&ve(t.object3d),t.type==="label"&&this.#r.twoDEntitySystem.deleteTextCacheEntry(t.id),this.#t.geometry2DMap.delete(t.id),this.#f()}else if(t.type==="image")t.object3d&&ve(t.object3d),this.#t.geometry3DMap.delete(t.id),this.#l();else if(t.type==="text3d"){ve(t.object3d);let{batchedText:r,textMesh:o,polygonEntityId:i}=t.components[0];if(o&&(r&&r.removeText(o),ve(o)),i){this.#r.text3DSystem.remove(i);let s=this.#t.geometry3DMap.get(i);s?.type==="geometry"&&(s.components[0].textMesh=void 0,s.components[0].textEntityId=void 0)}this.#t.geometry3DMap.delete(t.id),this.#l()}this.render()}}showCollisionBoxes=()=>{this.#r.twoDEntitySystem.showCollisionBoxes(),this.render()};hideCollisionBoxes=()=>{this.#r.twoDEntitySystem.hideCollisionBoxes(),this.render()};getScene(){return this.getState("__scene")}getThreeScene(){return this.#e}getThreeCamera(){return this.#n}async setEnvironment(e){if(this.#e)if(e==="basic"){this.#i||(this.#i=this.#z());let t=await this.#i;this.#e.environment=t}else this.#e.environment=null}getEnvironment(){return this.#e?.environment?"basic":!1}getCurrentSceneGLTF(e){return this.#r.exporterSystem.getCurrentSceneGLTF(e)}getBoundingArea(e){(this.#r.renderSystem.threeDdirty||this.#r.renderSystem.twoDdirty)&&this.renderSync();let t=new ce;if(e==null)t.setFromObject(this.#t.geometryScene);else{let r=fr(this.#t,e);if(r?.type==="geometry"&&r?.object3d!=null){let o=r.components[0],i=o instanceof oe?o.geometry:void 0;o.mesh instanceof Mo&&i?(i.computeBoundingBox(),i.boundingBox&&t.union(i.boundingBox)):t.setFromObject(r.object3d)}else(r?.type==="feature-collection"||r?.type==="group-container")&&r?.userData.entityId!=null&&t.setFromObject(r)}if(Gr(t))return Pc(t).map(this.convert3DMapPositionToCoordinate)}hasState(e){return fr(this.#t,e)!=null}getState(e){if(e==null)return{type:"map-view",hoverColor:this.#t.hoverColor,text3dHoverColor:this.#t.text3dHoverColor};let t=fr(this.#t,e);if(t?.type==="custom-geometry"){let r=t.components[0],o=t.components[1];return{id:t.id,type:"custom-geometry",visible:o.visible,altitude:o.altitude,parent:t.parentObject3D?.userData.entityId,position:this.convert3DMapPositionToCoordinate(r.position)}}else if(t?.type==="feature-collection"){let r=Array.from(t.userData.entities3D.values()),o=r?.[0],i=o?this.getState(o):{},s=this.#t,a=this.convert3DMapPositionToCoordinate;return{id:t.userData.entityId,type:"feature-collection",initialColor:i?.initialColor,color:i?.color,hoverColor:i?.hoverColor,side:i?.side??"double",opacity:i?.opacity,height:i?.height,texture:i?.texture,topColor:i?.topColor,topTexture:i?.topTexture,visible:t.visible,altitude:t.position.z,interactive:Su(t,this.#t),children:r,bevel:i?.bevel,maskId:t.components[0]?.maskId,maskEnabled:t.components[0]?.enabled,maskEffect:t.components[0]?.effect,maskMode:t.components[0]?.mode,get position(){return xu(t,s,a)}}}else{if(t?.type==="group-container")return{id:t.userData.entityId,type:"group-container",visible:t.visible,altitude:t.position.z,opacity:t.opacity,interactive:!!t.components[0],children:Array.from(t.childrenIds.values()).map(r=>this.getState(r)).filter(Boolean)};if(t?.type==="label"){let r=t.components[0],o=t.object3d.parent,i=o?.userData.entityId;return{id:t.id,type:"label",text:r.text||"",parent:{id:i,type:o?.type},position:this.convert3DMapPositionToCoordinate(t.position),enabled:r.enabled,visible:r.visible,initialRank:fn(r.initialRank),verticalOffset:t.verticalOffset,options:{rank:fn(r.rank),appearance:r.appearance,interactive:t.components[1]!=null,verticalOffset:t.verticalOffset,attachTo:t.attachedTo,occlude:t.components[2]?.enabled??!1}}}else if(t?.type==="marker"){let r=t.components[0],o=t.object3d.parent,i=o?.userData.entityId;return{id:t.id,type:"marker",enabled:r.enabled,visible:r.visible,placement:r.options.placement,dynamicResize:r.options.dynamicResize,parent:{id:i,type:o?.type},position:this.convert3DMapPositionToCoordinate(t.position),element:r.containerEl,initialRank:fn(r.initialRank),contentHTML:r.contentHtml,options:{rank:fn(r.rank),interactive:t.components[1]!=null||!1,verticalOffset:t.verticalOffset,attachTo:t.attachedTo,lowPriorityPin:r.options.lowPriorityPin,occlude:t.components[2]?.enabled??!1,zIndex:r.options.zIndex,animated:r.options.animated}}}else if(t?.type==="geometry"){let{color:r,hoverColor:o,initialColor:i,initialTopColor:s,topColor:a,altitude:l}=t.components[1],c=t.components[0],u=t.components[4],d=t.components[1],h=t.components[6],g=t.components[2],b=t.components[3],M=t.parentObject3D;return{id:t.id,type:"geometry",opacity:d.opacity,initialColor:i,color:r,focusable:u!=null&&u.vertices!=null&&u.vertices.length>0,initialTopColor:s,topColor:a,side:d.side,hoverColor:o,hovered:!!g?.hover,height:d.height,visible:d.visible,outline:b?.enabled,showImage:d.showImage,texture:h?.texture?.path,topTexture:h?.topTexture?.path,flipImageToFaceCamera:d.flipImageToFaceCamera,enableImageCollisions:d.enableImageCollisions,parent:{id:M?.userData.entityId,type:M?.type},altitude:l,bevel:d.bevel,position:this.convert3DMapPositionToCoordinate(c.position),interactive:c.pointerEventsPassThrough?"pass-through":t.components[2]!=null,borderVisible:d.borderVisible,borderColor:d.borderColor,borderWidth:d.borderWidth}}else if(t?.type==="model"){let r=t.components[0],o=t.components[1],i=t.components[2],s=t.components[7],a=r.feature.geometry.coordinates,l=[a[0],a[1],a[2]??0];return{id:t.id,type:"model",position:l,interactive:i!=null,material:o.material,parent:t.parentObject3D?.parent?{id:t.parentObject3D.parent.userData.entityId,type:t.parentObject3D.parent.type}:void 0,visible:o.visible,verticalOffset:o.verticalOffset,color:o.color,opacity:o.opacity,rotation:o.rotation??Vt,scale:o.scale??Ht,clippingPlaneZOffset:s?.verticalOffset??o.clippingPlaneZOffset,clippingPlaneTopColor:s?.topColor??o.clippingPlaneTopColor,clippingPlaneTopVisible:s?.topVisible??o.clippingPlaneTopVisible}}else if(t?.type==="path"){let r=t.components[0],o=t.components[2],i=t.components[1];return{id:t.id,type:"path",position:this.convert3DMapPositionToCoordinate(r.position),visible:i.visible,interactive:o!=null,completeFraction:r.completeFraction,color:i.color,accentColor:r.accentColor,width:r.width,animateArrowsOnPath:r.animateArrowsOnPath,displayArrowsOnPath:r.displayArrowsOnPath,verticalOffset:i.altitude,highlightCompleteFraction:r.highlightCompleteFraction,highlightStartFraction:r.highlightStartFraction,highlightEndFraction:r.highlightEndFraction,highlightColor:r.highlightColor,highlightWidthMultiplier:r.highlightWidthMultiplier,highlightDisplayArrowsOnPath:r.highlightDisplayArrowsOnPath,travelledEndFraction:r.travelledEndFraction,travelledColor:r.travelledColor,xrayOpacity:r.xrayOpacity,xrayStyle:r.xrayStyle,smoothingTension:r.smoothingTension,smoothingCornerRadius:r.smoothingCornerRadius,dashed:r.dashed,dashLength:r.dashLength,dashGap:r.dashGap,dashRelativeToWidth:r.dashRelativeToWidth,dashSize:r.dashSize,gapSize:r.gapSize,dashAbsolute:r.dashAbsolute,dashMeters:r.dashMeters,gapMeters:r.gapMeters,__EXPERIMENTAL_GEOMETRY:r.__EXPERIMENTAL_GEOMETRY,__EXPERIMENTAL_ENDCAP_EXTENSION:r.__EXPERIMENTAL_ENDCAP_EXTENSION,__EXPERIMENTAL_BILLBOARDING:r.__EXPERIMENTAL_BILLBOARDING,__EXPERIMENTAL_BORDER:r.__EXPERIMENTAL_BORDER,__EXPERIMENTAL_PREVENT_SELF_OVERLAP:r.__EXPERIMENTAL_PREVENT_SELF_OVERLAP}}else if(t?.type==="image"){let r=t.components[0],o=t.components[2];return{id:t.id,type:"image",position:this.convert3DMapPositionToCoordinate(r.position),visible:t.components[1].visible,verticalOffset:r.feature.properties.verticalOffset??0,opacity:t.components[1].opacity,flipImageToFaceCamera:t.components[1].flipImageToFaceCamera,width:r.feature.properties.width??0,height:r.feature.properties.height??0,rotation:r.feature.properties.rotation??0,interactive:o!=null}}else if(t?.type==="text3d"&&t.components[0]instanceof No){gu(t);let r=t.components[0],o=t.components[1],{textMesh:i}=r,s=r.feature.properties,a=r.mesh?.parent;a instanceof ie&&a.children.find(h=>h.type==="batchedtext")?.getWorldPosition(this.#U),this.#k.set(0,0,0);let l=i?i.getWorldPosition(this.#k):this.#k,c=s.rotation??s.textArea?.rotation??0,u=s.content??s.text??"";return Object.assign({},Ct,o.getState(),{id:t.id,type:"text3d",position:this.convert3DMapPositionToCoordinate(l.add(this.#U)),visible:r.visible??!1,content:u,rotation:c})}else return}}getRenderedState(e){let t=typeof e=="string"||typeof e=="number"?e:e.id,r=fr(this.#t,t);if(r&&r.type==="label")return{textVisible:r.components[0].textVisible}}setState(e,t){if(typeof e=="object"&&t==null){"hoverColor"in e&&(yc(e.hoverColor)?this.#t.hoverColor=e.hoverColor??this.#t.hoverColor:R.warn(`Failed to update global hover color. Invalid color "${e.hoverColor}".`)),"text3dHoverColor"in e&&(this.#t.text3dHoverColor=e.text3dHoverColor??this.#t.text3dHoverColor);return}let r=fr(this.#t,e);if(r!=null){if(r.type==="custom-geometry"){let o=this.#t.geometry3DMap.get(r.id);if(o instanceof $&&o.components[0]instanceof Zr){let i=t;yr(r,this.#t,i.visible),xn(r,this.#t,i.altitude),Ws(r,i.position,this.convertTo3DMapPosition,this.#r.panBoundsSystem),js(r,this.getParentContainer(i.parent,!1)),Le(r,i.interactive,this.#t)&&this.#l()}}else if(r.type==="path"){let o=t;Le(r,o.interactive,this.#t)&&this.#l(),xn(r,this.#t,o.verticalOffset),mu(r,this.#t,o)}else if(r.type==="model"){let o=t;Le(r,o.interactive,this.#t)&&this.#l(),yr(r,this.#t,o.visible),bu(r,o,this.convertTo3DMapPosition,this.#r.panBoundsSystem),vu(r,o)}else if(r.type==="group-container"){let o=t;yr(r,this.#t,o.visible)&&(this.#r.pathSystem.verticalDistanceDirty=!0,this.#r.geometryInFocusSystem.focusablesDirty=!0),xn(r,this.#t,o.altitude)&&(this.#r.pathSystem.verticalDistanceDirty=!0),Le(r,o.interactive,this.#t)&&this.#l(),ko(r,this.#t,o.opacity)&&(this.#r.outlineInterpolationSystem.outlineOpacitiesDirty=!0),o.preloadGeometry&&r.userData.preloadGeometry!==!0&&(r.userData.preloadGeometry=!0,this.#r.outlineInterpolationSystem.geometries3DDirty=!0),zo(r,o.focusable)&&(this.#r.geometryInFocusSystem.focusablesDirty=!0)}else if(r.type==="feature-collection"){let o=t;o.visible!==void 0&&r.visible!==o.visible&&(r.visible=o.visible,this.#l()),o.altitude!==void 0&&r.position.z!==o.altitude&&(r.position.z=o.altitude,this.#l()),Qc(r,this.#t,o),su(r,this.#t,o.hoverColor),qs(r,this.#t,o.outline),o.height!=null&&Vs(r,this.#t,o.height),Ys(r,this.#t,o)&&(this.#r.textureSystem.dirty=!0),Ys(r,this.#t,o),eu(r,this.#t,o.shading),ko(r,this.#t,o.opacity)&&(this.#r.outlineInterpolationSystem.outlineOpacitiesDirty=!0),Le(r,o.interactive,this.#t)&&(this.#l(),this.#f(),this.#r.interactionSystem.dirty3D=!0),Js(r,this.#t,o.side),$s(r,{maskId:o.maskId,enabled:o.maskEnabled,effect:o.maskEffect,mode:o.maskMode}),uu(r,this.#t,{effectStart:o.effectStart,effectDistance:o.effectDistance,darkenAmount:o.darkenAmount,darkenUseDepth:o.darkenUseDepth,desaturateAmount:o.desaturateAmount,desaturateUseDepth:o.desaturateUseDepth,washOutAmount:o.washOutAmount,washOutUseDepth:o.washOutUseDepth}),o.position!=null&&(r.userData.centroid=[o.position[0],o.position[1]],r.userData.positionDirty=!0)}else if(r.type==="geometry"){if(r.components[0]instanceof oe){let o=t;if(yr(r,this.#t,o.visible)&&this.#l(),qs(r,this.#t,o.outline),tu(r,o),zo(r,o.focusable)&&(this.#r.geometryInFocusSystem.focusablesDirty=!0),hu(r,o.renderOrder)&&(this.#r.meshDetachmentSystem.dirty=!0),du(r,o.opacity)&&(this.#r.meshDetachmentSystem.dirty=!0,this.#r.interactionSystem.dirty3D=!0,this.#r.outlineInterpolationSystem.outlineOpacitiesDirty=!0),Xs(r,o.flipImageToFaceCamera),lu(r,o.enableImageCollisions),xn(r,this.#t,o.altitude)){let i=r.components[1],s=(i.altitude??0)+(i.height??0);this.#r.panBoundsSystem.expandBoundsIfOutside(new O(0,0,s)),this.#r.shadowsSystem&&(this.#r.shadowsSystem.needsRender=!0)}if(o.height!=null&&Vs(r,this.#t,o.height)){let i=r.components[1],s=(i.altitude??0)+(i.height??0);this.#r.panBoundsSystem.expandBoundsIfOutside(new O(0,0,s)),this.#r.shadowsSystem&&(this.#r.shadowsSystem.needsRender=!0)}cu(r,o)&&(this.#r.meshDetachmentSystem.dirty=!0,this.#r.textureSystem.dirty=!0),ru(r,o,this.#t.outlinesOptions?.darkenFactor),iu(r,o.hoverColor),Le(r,o.interactive,this.#t)&&(this.#r.interactionSystem.dirty3D=!0),au(r,o.hovered),Js(r,this.#t,o.side),pu(r,o)}}else if(r.type==="label"||r.type==="marker"){let o=t;ou(r,o,this.#t),nu(r,o,this.#t)&&(this.#f(),this.#r.twoDEntitySystem.markDirty()),Ws(r,o.position,this.convertTo3DMapPosition,this.#r.panBoundsSystem),js(r,this.getParentContainer(o.parent,!1))&&(this.#f(),this.#r.panBoundsSystem.dirty=!0),Go(r,o.enabled),yr(r,this.#t,o.visible)}else if(r.type==="image"){let o=t;yr(r,this.#t,o.visible),ko(r,this.#t,o.opacity),Xs(r,o.flipImageToFaceCamera),Le(r,o.interactive,this.#t)&&this.#l()}else if(r.type==="text3d"){let o=t;yu(r,this.#t,o)}this.render()}}projectScreenXYToCoordinate=(e,t,r=!1)=>{let o=this.container.getBoundingClientRect(),i=(e-o.left)/this.#t.canvasWidth*2-1,s=-((t-o.top)/this.#t.canvasHeight)*2+1,a=new V(i,s),l,c;if(r?(Wh.setFromCamera(a,this.#n),l=Wh.intersectObject(this.#a,!1)[0]?.point):(l=this.#r.interactionSystem.getThreeDIntersectsFromXY(a)?.[0]?.point,c=this.#r.interactionSystem.getGroupContainerIntersectsFromXY(a)),l)return{coordinate:this.convert3DMapPositionToCoordinate(l),groupContainers:c}};projectCoordinateToScreenXY=e=>{let t=this.convertTo3DMapPosition(e[1],e[0],e[2]||0),r=new V;return this.project(r,t),{x:r.x,y:r.y}};convertTo3DMapPosition(e,t,r=0,o){if(Array.isArray(e))return this.convertTo3DMapPosition(e[1],e[0],e[2]??r,typeof t=="function"?t:void 0);if(typeof t!="number")throw new Error("convertTo3DMapPosition failed: longitude must be a number");let{x:i,y:s}=Lo(this.#t.center?.[1]??0,this.#t.center?.[0]??0,e,t);return o?(o.set(i,s,r),o):new O(i,s,r)}convert3DMapPositionToCoordinate=e=>{let{lat:t,lon:r}=Oo(this.#t.center?.[1]??0,this.#t.center?.[0]??0,e.x,e.y);return[r,t,e.z]};#P=(e,t)=>{let r=e.entity3D?[e.entity3D.id]:[];e.entity3D?.parentObject3D?.userData?.entityId&&r.push(e.entity3D.parentObject3D.userData.entityId);let o=[],i=[];for(let l of e.entity2D)l.components&&(l.components[0]instanceof Do?o.push(l.id):l.components[0]instanceof To&&i.push(l.id));let s=e.entity3D?.components[0],a=e.entity3D?.id;return{coordinate:this.convert3DMapPositionToCoordinate(t),geometry:r,paths:s instanceof br&&a!==void 0?[a]:[],markers:o,models:s instanceof xr&&a!==void 0?[a]:[],images:s instanceof An&&a!==void 0?[a]:[],labels:i,containers:Array.isArray(e.groupContainers)?e.groupContainers.map(l=>l.userData.entityId):[]}};setBackgroundColor=(e,t)=>{this.#h.setBackgroundColor(e,t)};get backgroundColor(){return typeof this.#h.backgroundColor=="string"?this.#h.backgroundColor:`#${this.#h.backgroundColor.getHexString()}`}get backgroundAlpha(){return this.#h.backgroundAlpha}getThreeRenderer(){return this.#h}getMetersPerPixel=()=>this.#r.cameraSystem.getCurrentMetersPerPixel();hideOutdoorLayersIntersectingPolygons=(e,t)=>{this.#r.outdoorLayersSystem.hideLayersIntersectingPolygons(e,t),this.render()};getCenter(e){let t=Array.isArray(e)?e:this.getBoundingArea(e);return t?Nc(t):void 0}#L=new Ar;#B=new Y;isInView(e){let t=fr(this.#t,e);if(this.#B.identity().multiply(this.#n.projectionMatrix).multiply(this.#n.matrixWorldInverse),this.#L.setFromProjectionMatrix(this.#B),t instanceof ks)return this.#L.containsPoint(t.position);if(t instanceof $){let r=t?.components[0];if(r instanceof Zr||r instanceof xr)return this.#L.containsPoint(this.convertTo3DMapPosition(r.feature.geometry.coordinates));if(r instanceof oe){let o=new ce(this.convertTo3DMapPosition(r.featureBbox[1],r.featureBbox[0],0),this.convertTo3DMapPosition(r.featureBbox[3],r.featureBbox[2],0));return this.#L.intersectsBox(o)}}return!1}queryGeometry2DInView(e){let{screenOffsets:t,fullyContains:r}=e??{},[o,i,s,a]=kc(this.container,t),l=new Ut(o,i,s,a);return this.#r.twoDEntitySystem.visibleCollidersQTree.queryRect(l).filter(h=>r?l.contains(h):l.intersects(h)).map(h=>this.#t.geometry2DMap.get(h.userData.entityId)).filter(h=>h!=null).filter(h=>h.components[0]instanceof To||h.components[0]instanceof Do).map(h=>h.id.toString())}#G=e=>{R.error("Render failed: ",e,e.stack??"No stack trace available"),this.publish("render-error",{error:e})};render=()=>{if(!(this.#r?.renderSystem==null||this.signal?.aborted))if(this.map&&(this.mode==="outdoors-interleaved"||this.mode==="outdoors-overlay"))this.map.triggerRepaint();else return this.#r.renderSystem.update().catch(this.#G)};renderSync=()=>this.signal?.aborted?Promise.resolve():this.#r.renderSystem.update(!0).catch(this.#G);#S=Lt(()=>{this.publish("user-interaction-start",void 0)},0,!0);#v=Lt(()=>{this.publish("user-interaction-end",void 0),this.render()},0,!0);onMapLibreEvent(e,t){if(!this.map){R.warn(`Tried to add event listener "${e}" but MapLibre map is not initialized.`);return}let r=this.map.on(e,t);r?.unsubscribe&&this.onAbort(()=>r.unsubscribe())}offMapLibreEvent(e,t){this.map&&this.map.off(e,t)}getSystems(){return this.#r}getInternalState(){return this.#t}getInternalTweenGroup(){return this.#t.internalTweenGroup}getExternalTweenGroup(){return this.#t.externalTweenGroup}async#z(){return jt.load(wu).then(e=>(this.#e&&(this.#e.environment?.dispose(),e.mapping=Xl,this.#e.environment=e,this.render()),e))}computeMinZOffsetBetweenContainers(e,t,r){if(!e||!t)return-1;Qs(e,"group-container"),Qs(t,"group-container"),e.updateMatrixWorld(!0),t.updateMatrixWorld(!0);let o=Ro(e,this.getThreeCamera()),i=t.clone(!0);Ao(i,!0),i.updateMatrixWorld();let s=Ro(i,this.getThreeCamera());if(!Gr(o)||!Gr(s))return-1;let a=0,l;r&&this.container.querySelectorAll(".debug-box").forEach(u=>u.remove());do{if(a>1e4)return-1;if(a+=20,i.setAltitude(a),s.makeEmpty(),Ro(i,this.#n,s),l=o.intersectsBox(s),r){let c=Hs(o,"blue",this.container),u=Hs(s,l?"red":"green",this.container);c.classList.add("debug-box"),u.classList.add("debug-box")}}while(l);return a}on=(e,t,r)=>{let o=super.on(e,t,r);return["outdoor-view-loaded","outdoor-style-loaded"].includes(e)&&this.mode==="standalone"&&w.env.NODE_ENV!=="test"&&(R.warn(`"${e}" was subscribed to but outdoor view is disabled. The event has been triggered immediately. Enable outdoor view or remove the listener.`),this.publish(e),o()),o};off=(e,t)=>{super.off(e,t)};getCursor=()=>this.#r.interactionSystem.getCursor();#H=()=>{try{this.#p!=="outdoors-overlay"&&(this.map&&this.map.remove(),this.container&&this.rendererDomElement&&this.container.contains(this.rendererDomElement)&&this.container.removeChild(this.rendererDomElement))}catch(e){R.warn("Error during DOM cleanup, some elements may not have been removed:",e)}};#u=e=>(this.onAbort(()=>{e&&typeof e=="object"&&("destroy"in e&&typeof e.destroy=="function"?e.destroy():"dispose"in e&&typeof e.dispose=="function"&&e.dispose())}),e);destroy=()=>{!this.#r||this.signal?.aborted||(super.destroy(),globalThis.MappedinDebug?.__idleCallbackInteractionState&&(globalThis.MappedinDebug.__idleCallbackInteractionState.unregisterInteractionChecker(this.#r.cameraSystem.isUserInteracting),globalThis.MappedinDebug.__idleCallbackInteractionState.unregisterInteractionChecker(this.#r.cameraSystem.isCameraMoving)),this.remove("__scene"),this.#h.destroy(),this.#e?.traverse(e=>{ve(e),"dispose"in e&&typeof e.dispose=="function"&&e.dispose()}),this.#e=void 0,this.#r=void 0,this.#H(),this.#h=void 0)};#k=new O;#U=new O},Jt=ul;f();var _y=5,Fy=2e3;function jh({refreshOutdoorToken:n,headers:e,reloadSource:t,maxAttempts:r=_y,backoffMs:o=Fy,now:i=()=>Date.now()}){let s=!1,a=0,l=0,c,u=b=>{if(b)try{t(b)}catch(M){R.warn("Failed to reload outdoor source after token refresh:",M)}},d=b=>{a+=1,!(a>=r||c!==void 0)&&(c=setTimeout(()=>{c=void 0,h(b)},o))},h=async b=>{if(s||a>=r||c!==void 0)return;let M=i();if(!(M-l<o)){s=!0,l=M;try{let p=await n();if(!p||p===e["x-mappedin-tiles-key"]){d(b);return}e["x-mappedin-tiles-key"]=p,a=0,u(b)}catch(p){R.warn("Failed to refresh outdoor tiles token:",p),d(b)}finally{s=!1}}};return{recoverFromTileAuthError:h,dispose:()=>{c!==void 0&&(clearTimeout(c),c=void 0)}}}f();function Zh(n,e){let{cameraSystem:t}=n.getSystems(),r={center:e.getCenter().toArray(),zoom:e.getZoom(),bearing:e.getBearing(),pitch:e.getPitch(),elevation:e.getCenterElevation()},o=!1;n.on("camera-change",i=>{if(!o){r.center=i.center,r.zoom=i.zoomLevel,r.bearing=i.bearing,r.pitch=i.pitch,r.elevation=i.elevation,o=!0;try{e.jumpTo(r)}finally{o=!1}}}),n.onMapLibreEvent("move",()=>{if(!o){o=!0;try{let i=e.getCenter();t.setCenter(i.lng,i.lat),t.setZoomLevel(e.getZoom()),t.setRotation(U.degToRad(e.getBearing())),t.setTilt(U.degToRad(e.getPitch())),t.setPedestal(Math.min(e.getCenterElevation(),t.maxPedestal),!0)}finally{o=!1}}}),n.onMapLibreEvent("movestart",()=>{o||t.beginGesture()}),n.onMapLibreEvent("moveend",()=>{o||t.endGesture()})}f();function Ny(n,e){By(n,e)(n.getScene(),e),Gy(n,e),e.addFolder("Export").add({export:async()=>{let s=await n.getCurrentSceneGLTF({binary:!0}),a=new Blob([s],{type:"application/octet-stream"});var l=document.createElement("a");document.body.appendChild(l),l.style.display="none";let c=window.URL.createObjectURL(a);l.href=c,l.download="scene.glb",l.click(),window.URL.revokeObjectURL(c)}},"export");let o=e.addFolder("Camera"),i={get bearing(){return n.camera.bearing},set bearing(s){n.camera.setBearing(s)},get pitch(){return n.camera.pitch},set pitch(s){n.camera.setPitch(s)},get zoomLevel(){return n.camera.zoomLevel},set zoomLevel(s){n.camera.setZoomLevel(s)}};o.add(i,"bearing",-359,359,1),o.add(i,"pitch",n.camera.minPitch,n.camera.maxPitch,1),o.add(i,"zoomLevel",n.camera.minZoomLevel,n.camera.maxZoomLevel,.1)}function By(n,e){let t=e;return function r(o,i){let s=i.addFolder(`${[o.type]} ${o.id.slice(0,16)}`);if(i.close(),o.type==="geometry"||o.type==="model"||o.type==="path"||o.type==="image"){let a={get height(){let l=n.getState(o.id);return l?.type==="geometry"?l.height:0},set height(l){n.getState(o.id)?.type==="geometry"&&n.setState(o,{height:l})},set flipImageToFaceCamera(l){n.getState(o.id)?.type==="image"&&n.setState(o,{flipImageToFaceCamera:l})},get flipImageToFaceCamera(){let l=n.getState(o.id);return l?.type==="image"?l.flipImageToFaceCamera:!1},set visible(l){let c=n.getState(o.id);(c?.type==="geometry"||c?.type==="path"||c?.type==="image")&&n.setState(o,{visible:l})},get visible(){let l=n.getState(o.id);return l?.type==="geometry"||l?.type==="path"||l?.type==="image"?l.visible:!1},set outline(l){n.getState(o.id)?.type==="geometry"&&n.setState(o,{outline:l})},get outline(){let l=n.getState(o.id);return l?.type==="geometry"?l.outline:!1},get opacity(){let l=n.getState(o.id);return l?.type==="geometry"?l.opacity:1},set opacity(l){let c=n.getState(o.id);c?.type==="geometry"&&n.setState(c,{opacity:l})},get color(){let l=n.getState(o.id);return l?.type==="geometry"&&l.color?bc(l.color).toHexString():"#ffffff"},set color(l){let c=n.getState(o.id);c?.type==="geometry"&&n.setState(c,{color:l})},set interactive(l){let c=n.getState(o.id);(c?.type==="geometry"||c?.type==="model"||c?.type==="path")&&(n.setState(o,{interactive:l}),t.controllersRecursive().forEach(u=>u.updateDisplay()))},get interactive(){let l=n.getState(o.id);return l?.type==="geometry"||l?.type==="model"||l?.type==="path"?l.interactive:!1},get completeFraction(){let l=n.getState(o.id);return l?.type==="path"?l.completeFraction:1},set completeFraction(l){let c=n.getState(o.id);c?.type==="path"&&n.setState(c,{completeFraction:l})},focus:()=>{}};s.add(a,"focus").onChange(()=>{let l=n.getState(o.id);l?.type==="model"||l?.type==="path"||l?.type==="image"?n.camera.focusOn([l.position]):l?.type==="geometry"&&n.camera.focusOn(n.getBoundingArea(l))}),s.add(a,"visible"),o.type==="image"?s.add(a,"flipImageToFaceCamera"):(s.add(a,"interactive"),o.type==="path"&&s.add(a,"completeFraction",0,1,.1),o.type!=="model"&&(s.addColor(a,"color"),s.add(a,"outline"))),o.type==="geometry"&&(s.add(a,"height"),s.add(a,"opacity",0,1,.1))}else if(o.type==="marker"){let a={get interactive(){let l=n.getState(o.id);return l?.type==="marker"?l.options?.interactive:!1},set interactive(l){let c=n.getState(o.id);c?.type==="marker"&&(n.setState(c,{options:{interactive:l}}),t.controllersRecursive().forEach(u=>u.updateDisplay()))},focus:()=>{}};s.add(a,"focus").onChange(()=>{let l=n.getState(o.id);l?.type==="marker"&&n.camera.focusOn([l.position])}),s.add(a,"interactive")}else if(o.type==="label"){let a={get interactive(){let l=n.getState(o.id);return l?.type==="label"?l.options?.interactive:!1},set interactive(l){let c=n.getState(o.id);c?.type==="label"&&(n.setState(c,{options:{interactive:l}}),t.controllersRecursive().forEach(u=>u.updateDisplay()))},get text(){let l=n.getState(o.id);return l?.type==="label"?l.text:""},set text(l){let c=n.getState(o.id);c?.type==="label"&&n.setState(c,{text:l})},get"Text Color"(){let l=n.getState(o.id);return l?.type==="label"?l.options.appearance?.textColor:"#000000"},set"Text Color"(l){n.getState(o.id)?.type==="label"&&n.setState(o.id,{text:a.text,options:{appearance:{textColor:l}}})},get"Text Size"(){let l=n.getState(o.id);return l?.type==="label"?l.options.appearance?.textSize:10},set"Text Size"(l){let c=n.getState(o.id);c?.type==="label"&&n.setState(c,{text:a.text,options:{appearance:{textSize:l}}})},get"Icon Size"(){let l=n.getState(o.id);return l?.type==="label"?l.options.appearance?.iconSize:10},set"Icon Size"(l){let c=n.getState(o.id);c?.type==="label"&&n.setState(c,{text:a.text,options:{appearance:{iconSize:l}}})},get"Pin Color"(){let l=n.getState(o.id);return l?.type==="label"?l.options.appearance?.pinColor:"#000000"},set"Pin Color"(l){let c=n.getState(o.id);c?.type==="label"&&n.setState(c,{text:a.text,options:{appearance:{pinColor:l}}})},get"Pin Color Inactive"(){let l=n.getState(o.id);return l?.type==="label"?l.options.appearance?.pinColorInactive:"#000000"},set"Pin Color Inactive"(l){let c=n.getState(o.id);c?.type==="label"&&n.setState(c,{text:a.text,options:{appearance:{pinColorInactive:l}}})},get"Pin Outline Color"(){let l=n.getState(o.id);return l?.type==="label"?l.options.appearance?.pinOutlineColor:"#000000"},set"Pin Outline Color"(l){let c=n.getState(o.id);c?.type==="label"&&n.setState(c,{text:a.text,options:{appearance:{pinOutlineColor:l}}})},get"Pin Outline Color Inactive"(){let l=n.getState(o.id);return l?.type==="label"?l.options.appearance?.pinOutlineColorInactive:"#000000"},set"Pin Outline Color Inactive"(l){let c=n.getState(o.id);c?.type==="label"&&n.setState(c,{text:a.text,options:{appearance:{pinOutlineColorInactive:l}}})},focus:()=>{}};s.add(a,"focus").onChange(()=>{let l=n.getState(o.id);l?.type==="label"&&n.camera.focusOn([l.position])}),s.add(a,"interactive"),s.add(a,"text"),s.add(a,"Text Size",10,50),s.add(a,"Icon Size",10,50),s.addColor(a,"Text Color"),s.addColor(a,"Active Background Color"),s.addColor(a,"Inactive Background Color"),s.addColor(a,"Active Foreground Color"),s.addColor(a,"Inactive Foreground Color")}else if(o.type==="feature-collection"){let a={get opacity(){let l=n.getState(o.id);return l?.type==="feature-collection"?l.opacity:1},set opacity(l){n.getState(o.id)?.type==="feature-collection"&&n.setState(o,{opacity:l})},set outline(l){n.getState(o.id)?.type==="feature-collection"&&n.setState(o,{outline:l})},get outline(){let l=n.getState(o.id);return l?.type==="feature-collection"?l.outline:!1},set interactive(l){n.getState(o.id)?.type==="feature-collection"&&(n.setState(o,{interactive:l}),t.controllersRecursive().forEach(u=>u.updateDisplay()))},get interactive(){let l=n.getState(o.id);return l?.type==="feature-collection"?l.interactive:!1},get shadingStart(){let l=n.getState(o.id);return l?.type==="feature-collection"?l.shading?.start??0:0},set shadingStart(l){let c=n.getState(o.id);c?.type==="feature-collection"&&n.setState(c,{shading:{start:l}})},get shadingEnd(){let l=n.getState(o.id);return l?.type==="feature-collection"?l.shading?.end??0:0},set shadingEnd(l){let c=n.getState(o.id);c?.type==="feature-collection"&&n.setState(c,{shading:{end:l}})},get shadingIntensity(){let l=n.getState(o.id);return l?.type==="feature-collection"?l.shading?.intensity??0:0},set shadingIntensity(l){let c=n.getState(o.id);c?.type==="feature-collection"&&n.setState(c,{shading:{intensity:l}})}};s.add(a,"opacity",0,1,.1),s.add(a,"interactive"),s.add(a,"outline"),s.add(a,"shadingStart",0,1,.1),s.add(a,"shadingEnd",0,1,.1),s.add(a,"shadingIntensity",0,1,.1)}else if(o.type==="group-container"){let a={set visible(l){n.getState(o.id)?.type==="group-container"&&n.setState(o,{visible:l})},get visible(){let l=n.getState(o.id);return l?.type==="group-container"?l.visible:!1},set interactive(l){let c=n.getState(o.id);c?.type==="group-container"&&(n.setState(c,{interactive:l}),t.controllersRecursive().forEach(u=>u.updateDisplay()))},get interactive(){let l=n.getState(o.id);return l?.type==="group-container"?l.interactive:!1}};s.add(a,"visible"),s.add(a,"interactive")}if(s.close(),o.children)for(let a of o.children.values())r(a,s)}}function Gy(n,e){let t=e.addFolder("Watermark"),r={padding:16,iconOnly:!1,position:"bottom-left",color:"dark",scale:1};t.add(r,"padding",0,100,1),t.add(r,"scale",.5,1.5,.1),t.add(r,"color",["dark","light"]),t.add(r,"position",["top-left","top-right","bottom-left","bottom-right","center","top","bottom","left","right"]),t.add(r,"iconOnly"),t.onChange(()=>{n.updateWatermark(r)})}f();var ml=class extends Z{gl;options;el=document.createElement("div");core;origin;map;layer;cameraSystem;constructor(e,t){super(),this.origin=e,this.options=t}handleStyleChange=()=>{!this.map||!this.layer||this.map.getLayer(this.layer.id)||(this.map.addLayer(this.layer),this.core.camera.setMinZoomLevel(this.map.getMinZoom()),this.core.camera.setMaxZoomLevel(this.map.getMaxZoom()),this.core.camera.setMinPitch(this.map.getMinPitch()),this.core.camera.setMaxPitch(this.map.getMaxPitch()))};handleMoveStart=()=>{this.cameraSystem.beginGesture()};handleMove=()=>{if(!this.map)return;let[e,t]=this.map.getCenter().toArray();this.cameraSystem.setCenter(e,t),this.cameraSystem.setZoomLevel(this.map.getZoom()),this.cameraSystem.setRotation(U.degToRad(this.map.getBearing())),this.cameraSystem.setTilt(U.degToRad(this.map.getPitch()))};handleMoveEnd=()=>{this.cameraSystem.endGesture()};handleError=e=>{R.warn(e)};onAdd(e){this.origin=this.origin||e.getCenter().toArray(),this.gl=e.painter.context.gl,this.core=new Jt(e._container,{...this.options,center:this.origin,zoomLevel:e.getZoom(),pitch:e.getPitch(),bearing:e.getBearing(),gl:this.gl,map:e,mode:"outdoors-overlay"}),this.map=e,this.cameraSystem=this.core.getSystems().cameraSystem,this.core.camera.setMinZoomLevel(e.getMinZoom()),this.core.camera.setMaxZoomLevel(e.getMaxZoom()),this.core.camera.setMinPitch(e.getMinPitch()),this.core.camera.setMaxPitch(e.getMaxPitch()),this.map.on("error",this.handleError);let t=mr.fromLngLat(this.origin,0);return this.layer=Io(t,this.core.viewCamera,()=>{this.core.renderSync()}),this.map.on("styledata",this.handleStyleChange),this.map.on("movestart",this.handleMoveStart),this.map.on("move",this.handleMove),this.map.on("moveend",this.handleMoveEnd),this.handleStyleChange(),this.el}onRemove(){this.map&&(this.map.off("styledata",this.handleStyleChange),this.map.off("movestart",this.handleMoveStart),this.map.off("move",this.handleMove),this.map.off("moveend",this.handleMoveEnd),this.map.off("error",this.handleError),this.layer&&this.map.removeLayer(this.layer.id)),this.layer=void 0,this.map=void 0,this.core&&this.core.destroy(),this.core=void 0}};f();f();f();f();f();f();var _e=class{origin;destination;distance;angle;weight;constructor({origin:e,destination:t,distance:r=0,angle:o=0,pathWeight:i=0,multiplicativeDistanceWeightScaling:s=!0}){if(this.origin=e,this.destination=t,this.distance=r,this.angle=o,this.weight=i||0,s?e.properties.floor===t.properties.floor&&(this.weight=(this.weight>=0?this.distance*this.weight:0)+this.distance):e.properties.map===t.properties.map&&(this.weight=this.weight>=0?this.distance+this.weight:0),isNaN(this.angle))throw new Error("Invalid angle: Expected a numeric value, but received NaN.")}};f();f();f();f();f();function xe([n,e],[t,r]){let o=e-r,i=n-t;return(Math.atan2(i,o)+Math.PI*3)%(Math.PI*2)}f();f();function cs(n,e,t,r){let[o,i]=n,[s,a]=e,[l,c]=t,[u,d]=r;if(i===a&&o===s||c===d&&l===u)return null;let h=(u-l)*(a-i)-(d-c)*(s-o);if(h===0)return null;let g=((d-c)*(o-l)-(u-l)*(i-c))/h,b=((a-i)*(o-l)-(s-o)*(i-c))/h;if(g<0||g>1||b<0||b>1)return null;let M=i+g*(a-i);return[o+g*(s-o),M]}f();f();function us(n,e,t,r){r===void 0&&(r={});var o=Ci(n),i=go(o[0]),s=go(o[1]),a=go(t),l=zl(e,r.units),c=Math.asin(Math.sin(s)*Math.cos(l)+Math.cos(s)*Math.sin(l)*Math.cos(a)),u=i+Math.atan2(Math.sin(a)*Math.sin(l)*Math.cos(s),Math.cos(l)-Math.sin(s)*Math.sin(c)),d=Is(u),h=Is(c);return mo([d,h],r.properties)}function fl(n,e,t,r){let o=us(n,t/1e3,r),i=us(e,t/1e3,r);return[o.geometry.coordinates,i.geometry.coordinates]}f();function gl(n){let e=n*(180/Math.PI);return e=e%360,e>180?e-=360:e<-180&&(e+=360),Object.is(e,-0)?0:e}var Xh=111e3;function nt(n,e,t=[],r=0){let o=!0,i=n.geometry.coordinates,s=e.geometry.coordinates,a=gl(xe(i,s)-Math.PI/2),l=gl(xe(i,s)+Math.PI/2),c=r/Xh,u=r/(Xh*Math.cos(i[1]*Math.PI/180)),d=Math.min(i[1],s[1])-c,h=Math.max(i[1],s[1])+c,g=Math.min(i[0],s[0])-u,b=Math.max(i[0],s[0])+u;for(let M of t)if(!(Math.max(M[0][1],M[1][1])<d||Math.min(M[0][1],M[1][1])>h||Math.max(M[0][0],M[1][0])<g||Math.min(M[0][0],M[1][0])>b)){if(r>0){let p=fl(i,s,r,a),m=fl(i,s,r,l);if(cs(p[0],p[1],M[0],M[1])||cs(m[0],m[1],M[0],M[1]))return o=!1,!1}else if(cs(i,s,M[0],M[1]))return o=!1,!1}return o}f();function Yh(n,e=.5){let[t,r]=n,o=(t.x+r.x)/2,i=(t.y+r.y)/2,s=r.x-t.x,l=-(r.y-t.y),c=s,u=Math.sqrt(l*l+c*c),d=l/u,h=c/u,g={x:o+d*e,y:i+h*e},b={x:o-d*e,y:i-h*e};return[g,b]}var Zn=.4,ds=class{edges={};nodesById;nodesByGroup=new Map;#e;constructor({nodes:e,groupBy:t,multiplicativeDistanceWeightScaling:r}){this.#e=t;let{features:o}=e;this.nodesById=this.#i(o),this.#o(),this.#s(o,t,{multiplicativeDistanceWeightScaling:r})}getShortestEuclideanDistance(e,t){return t.reduce((r,o)=>{let i=Hu(e.geometry.coordinates,o.geometry.coordinates);return Math.min(r,i)},Number.MAX_VALUE)}hasLineOfSight=(e,t,r=[],o=Zn)=>nt({type:"Feature",properties:{id:"origin",neighbors:[]},geometry:{type:"Point",coordinates:e}},{type:"Feature",properties:{id:"destination",neighbors:[]},geometry:{type:"Point",coordinates:t}},r,o)===!0;dijkstraFindWithinTravelDistance(e,t,r,o,i,s){let a=this.nodesById[e];if(!a)return[];let l=[],c={},u={},d=new Set,h=[];for(l.push({node:a,distance:0}),c[a.properties.id]=null,u[a.properties.id]=0;l.length>0;){l.sort((p,m)=>p.distance-m.distance);let g=l.shift();if(!g)break;let b=g.node,M=g.distance;if(!d.has(b.properties.id)){if(d.add(b.properties.id),h.length>=s)break;b.properties.id!=null&&r.includes(b.properties.id?.toString())&&(i?this.hasLineOfSight(a.geometry.coordinates,b.geometry.coordinates,o)&&h.push({feature:b,distance:M}):h.push({feature:b,distance:M}));for(let p of this.edges[b.properties.id]){let m=p.destination,y=M+p.distance,v=u[b.properties.id]+p.weight;y>t||d.has(m.properties.id)||u[m.properties.id]!==void 0&&v>=u[m.properties.id]||(u[m.properties.id]=v,c[m.properties.id]=p,l.push({node:m,distance:y}))}}}return h.sort((g,b)=>g.distance-b.distance)}aStar({originIds:e,destinationNodeIds:t,disabledConnectionNodeIds:r,zones:o,overrideEdgeWeights:i,disabledNodeIds:s}){let a=this.#n(e),l=this.#n(t);if(a.length===0||l.length===0)return[];let{frontier:c,cameFrom:u,costSoFar:d}=this.#a(a,l);for(;c.length>0;){let h=c.shift();if(!h)break;if(this.#c(h.origin,l))return this.#d(u,h.origin.properties.id);for(let g of this.edges[h.origin.properties.id]){let b=i?.get(g)??g.weight,M=g.destination.properties.map!==g.origin.properties.map,p=r?.has(g.destination.properties.id);if(r?.has(g.origin.properties.id)&&(M||p)||s?.has(g.origin.properties.id))continue;let m=d[h.origin.properties.id]+b+this.#g(g.destination,o);if(m!==1/0&&(d[g.destination.properties.id]==null||m<d[g.destination.properties.id])){let y=m+this.getShortestEuclideanDistance(g.destination,l);d[g.destination.properties.id]=m,u[g.destination.properties.id]=g,c.push({origin:g.destination,priority:y})}}c.sort((g,b)=>g.priority-b.priority)}return[]}#n(e){return e.map(t=>this.nodesById[t]).filter(Boolean)}#i(e){return e.reduce((t,r)=>(t[r.properties.id]=r,t),{})}#o(){for(let e in this.nodesById)this.nodesById.hasOwnProperty(e)&&(this.nodesById[e].properties.neighbors=this.nodesById[e].properties.neighbors.filter(({id:t})=>!!this.nodesById[t]))}#s(e,t,r){e.forEach(o=>{let i=t==="default"?t:o.properties[t];this.nodesByGroup.has(i)||this.nodesByGroup.set(i,[]),this.nodesByGroup.get(i).push(o),this.edges[o.properties.id]=o.properties.neighbors.map(({id:s,weight:a})=>{let l=this.nodesById[s],c=Ee(o.geometry.coordinates,l.geometry.coordinates),u=xe(o.geometry.coordinates,l.geometry.coordinates);return new _e({origin:o,destination:l,pathWeight:a,distance:c,angle:u,multiplicativeDistanceWeightScaling:r?.multiplicativeDistanceWeightScaling})})})}#a(e,t){let r=[],o={},i={};return e.forEach(s=>{let a=this.getShortestEuclideanDistance(s,t);r.push({origin:s,priority:a}),o[s.properties.id]=null,i[s.properties.id]=0}),r.sort((s,a)=>s.priority-a.priority),{frontier:r,cameFrom:o,costSoFar:i}}#c(e,t){return t.some(r=>r.properties.id===e.properties.id)}#d(e,t){let r=[],o=e[t];for(;o;)r.push(o),o=e[o.origin.properties.id];return r.reverse()}#g=(e,t)=>{let r=0;for(let o of t)(!o[this.#e]||o[this.#e]===e.properties[this.#e])&&wt(e.geometry.coordinates,o.geometry.geometry)&&(r+=Math.max(0,o.cost));return r}};f();function ky(n,e,t,r){let o=t[n].origin,i=e===t.length?r:t[e].origin;return Ee(o.geometry.coordinates,i.geometry.coordinates)}function $h(n,e,t,r=Zn){if(n.length<3)return n;let o=1e-4,i=n.length,s=new Set;for(let h=0;h<i;h++)n[h].origin.properties.preventSmoothing&&s.add(h);let a=n[i-1].destination,l=new Array(i+1).fill(null).map(()=>({cost:1/0,prev:-1}));l[0]={cost:0,prev:-1};for(let h=0;h<i;h++){let g=!0;if(l[h].cost!==1/0){for(let b=h+1;b<=i;b++){let M=b===i?a:n[b].origin;if(Ee(n[h].origin.geometry.coordinates,M.geometry.coordinates)<.01)continue;let m=b===h+1&&b<i&&s.has(b),y=b===h+1&&s.has(h);if(!m&&!y&&!nt(n[h].origin,M,e,r))continue;if(b>h+1){let D=!1;for(let E=h+1;E<b;E++)if(s.has(E)){D=!0;break}if(D)continue}let v=ky(h,b,n,a),S=(b-h-1)*o,C=l[h].cost+v-S;C<l[b].cost&&(l[b]={cost:C,prev:h},g=!1)}g&&l[h+1].cost===1/0&&(l[h+1].cost=l[h].cost,l[h+1].prev=h)}}let c=[],u=i;for(;u!==-1;)c.unshift(u),u=l[u].prev===-1?u-1:l[u].prev;let d=[];for(let h=0;h<c.length-1;h++){let g=c[h],b=c[h+1],M=n[g].origin,p=b===i?a:n[b].origin;d.push(new _e({origin:M,destination:p,distance:Ee(M.geometry.coordinates,p.geometry.coordinates),angle:xe(M.geometry.coordinates,p.geometry.coordinates),multiplicativeDistanceWeightScaling:t}))}return d}f();var Kh=ln(_i());f();var qh=Gl("Navigator");function hs(n,e,t){if(n==null||n[e]==null)return!1;let r=1<<t;return(n[e]&r)!==0}f();var zy=.5;function Jh(n,e,t,r,o,i){if(!n?.geoJSON?.geometry?.coordinates)return null;let[s,a]=Yh(r,zy),l=s,c=a;if(o){let b=Math.sqrt(Math.pow(s.x-o.x,2)+Math.pow(s.y-o.y,2));Math.sqrt(Math.pow(a.x-o.x,2)+Math.pow(a.y-o.y,2))<b&&(l=a,c=s)}let u=i(l.x,l.y),d=i(c.x,c.y),h={type:"Feature",geometry:{type:"Point",coordinates:[u.lon,u.lat]},properties:{id:`${e}_buffer_entry`,map:t,neighbors:[],preventSmoothing:!0}},g={type:"Feature",geometry:{type:"Point",coordinates:[d.lon,d.lat]},properties:{id:`${e}_buffer_exit`,map:t,neighbors:[],preventSmoothing:!0}};return{entryNode:h,exitNode:g,entryMeters:l,exitMeters:c}}function Dt(n){return n.properties.floor??n.properties.map}function Qh(n,e,t,r){let o=[n[0].origin];for(let E=0;E<n.length;E++)o.push(n[E].destination);let i=new Map,s=new Map;for(let E=0;E<o.length;E++)i.set(o[E].properties.id,o[E]),s.set(E,o[E]);let a=o[0].geometry.coordinates[1],{toCartesian:l,toGeographic:c}=oi(a),u=o.map((E,T)=>{let P={x:0,y:0,nodeId:E.properties.id,originalIndex:T};return l(E.geometry.coordinates,P),P}),d=new Set,h=new Map,g=new Set;for(let E=0;E<o.length;E++){let T=e(o[E].properties.id);if(T&&(d.add(E),h.set(E,T)),E<o.length-1){let P=Dt(o[E]),I=Dt(o[E+1]);P!==I&&(g.add(E),g.add(E+1),E>0&&g.add(E-1))}}if(n.length<3&&d.size===0)return n;let b=n.length>=3?(0,Kh.default)(u,.7,!1):u,M=new Set;for(let E=0;E<b.length;E++)M.add(b[E].originalIndex);let p=[];for(let E of d)M.has(E)||p.push(E);let m=b.slice(),y=.25;for(let E of g){if(M.has(E))continue;let T=s.get(E);if(!T)continue;let P=-1;for(let I=0;I<m.length-1;I++)if(m[I].originalIndex<E&&m[I+1].originalIndex>E){P=I+1;break}if(P!==-1){let I={x:0,y:0,nodeId:T.properties.id,originalIndex:E};l(T.geometry.coordinates,I),m.splice(P,0,I)}}for(let E of p){let T=s.get(E);if(!T)continue;let P=-1;for(let I=0;I<m.length-1;I++)if(m[I].originalIndex<E&&m[I+1].originalIndex>E){P=I+1;break}if(P!==-1){let I={x:0,y:0,nodeId:T.properties.id,originalIndex:E};l(T.geometry.coordinates,I);let L=ga(I,m[P-1]),N=ga(I,m[P]);L<y?m[P-1]=I:N<y?m[P]=I:m.splice(P,0,I)}}let v=[],x={x:0,y:0},S={x:0,y:0},C=new Map;for(let E=0;E<m.length;E++)C.set(m[E].originalIndex,E);for(let E of d){let T=s.get(E);if(!T)continue;let P=h.get(E);if(!P)continue;let I=C.get(E)??-1;if(I!==-1){let L;I>0&&(L={x:m[I-1].x,y:m[I-1].y});let N=P.geoJSON.geometry.coordinates;l(N[0],x),l(N[1],S);let z=[x,S],j=T.properties.id,H=Dt(T)||"test-floor",Q=Jh(P,j,H,z,L,c);if(Q){let G={x:Q.entryMeters.x,y:Q.entryMeters.y,nodeId:Q.entryNode.properties.id,originalIndex:E-.5},J={x:Q.exitMeters.x,y:Q.exitMeters.y,nodeId:Q.exitNode.properties.id,originalIndex:E+.5};i.set(Q.entryNode.properties.id,Q.entryNode),i.set(Q.exitNode.properties.id,Q.exitNode),v.push(G,J)}}}if(m.push(...v),m.sort((E,T)=>E.originalIndex-T.originalIndex),r&&m.length>=3)for(let E=0;E<m.length-1;E++){let T=m[E];if(T.nodeId.endsWith("_buffer_exit")){let P=m[m.length-1];if(E<m.length-2){let I=!1;for(let L=E+1;L<m.length-1;L++)if(m[L].nodeId.endsWith("_buffer_entry")||m[L].nodeId.endsWith("_buffer_exit")){I=!0;break}if(!I){let L=i.get(T.nodeId),N=i.get(P.nodeId);if(L&&N){if(Dt(L)!==Dt(N))continue;if(nt(L,N,r,.1)){let z=m.length-E-2;m.splice(E+1,z)}}}}}}if(r&&m.length>=3){let E=m[0],T=-1;for(let P=1;P<m.length;P++)if(m[P].nodeId.endsWith("_buffer_entry")){T=P;break}if(T>1){let P=!1;for(let I=1;I<T;I++)if(m[I].nodeId.endsWith("_buffer_entry")||m[I].nodeId.endsWith("_buffer_exit")){P=!0;break}if(!P){let I=m[T],L=i.get(E.nodeId),N=i.get(I.nodeId);if(L&&N&&Dt(L)===Dt(N)){if(nt(L,N,r,.1)){let z=T-1;m.splice(1,z)}}}}}let D=[];for(let E=0;E<m.length-1;E++){let T=m[E],P=m[E+1],I=i.get(T.nodeId),L=i.get(P.nodeId);I&&L?D.push(new _e({origin:I,destination:L,distance:Ee(I.geometry.coordinates,L.geometry.coordinates),angle:xe(I.geometry.coordinates,L.geometry.coordinates),multiplicativeDistanceWeightScaling:t})):qh.warn(`Origin or destination node not found for point ${T.nodeId} or ${P.nodeId}`)}return D}function De(n,e){return new _e({origin:n,destination:e,distance:Ee(n.geometry.coordinates,e.geometry.coordinates),angle:xe(n.geometry.coordinates,e.geometry.coordinates)})}function ep(n,e,t,r=!0){if(n.length<3)return n;let o=new Set;for(let a=0;a<n.length;a++)if(n[a].origin.properties.preventSmoothing){if(o.add(a),r){for(let l=a-1;l>=0;l--)if(!n[l].origin.properties.preventSmoothing){o.add(l);break}}if(r){for(let l=a+1;l<n.length;l++)if(!n[l].origin.properties.preventSmoothing){o.add(l);break}}}if(n.length>0&&n[n.length-1].destination.properties.preventSmoothing&&(o.add(n.length-1),r)){for(let a=n.length-2;a>=0;a--)if(!n[a].origin.properties.preventSmoothing){o.add(a);break}}let i=[],s=0;for(let a=1;a<n.length;a++){let l=a===n.length-1,c=o.has(a),u=l?.05:.7,d=nt(n[s].origin,n[a].origin,e,u),h=n[a].origin.properties.preventSmoothing,g=a-1;if(c){s!==a&&(d?(i.push(De(n[s].origin,n[a].origin)),s=a):(s!==g&&(i.push(De(n[s].origin,n[g].origin)),s=g),s!==a&&(i.push(De(n[s].origin,n[a].origin)),s=a))),l&&i.push(De(n[a].origin,n[a].destination));continue}if(h)d?(i.push(De(n[s].origin,n[a].origin)),s=a):s!==g&&(i.push(De(n[s].origin,n[g].origin)),s=g),i.push(De(n[s].origin,n[a].origin)),s=a,l&&i.push(De(n[a].origin,n[a].destination));else if(d)l&&(nt(n[s].origin,n[a].destination,e,.7)?i.push(De(n[s].origin,n[a].destination)):(i.push(De(n[s].origin,n[a].origin)),i.push(De(n[a].origin,n[a].destination))),s=a);else{if(s===g){l&&(i.push(De(n[s].origin,n[a].origin)),i.push(De(n[a].origin,n[a].destination)));continue}i.push(De(n[s].origin,n[g].origin)),s=g,l&&(i.push(De(n[s].origin,n[a].origin)),i.push(De(n[a].origin,n[a].destination)))}}if(!1){let a=i[i.length-1];window.__DEBUG_PATH.finalSteps.push({nodeId:a.destination.properties.id,coordinate:a.destination.geometry.coordinates,floorId:Dt(a.destination)})}return i}f();function tp(n,e,t=.2,r={},o){if(n.length<3)return n;let i=[n[0]],s=1;for(let a=s+2;a<n.length;a++)if("outdoors"in r&&hs(n[s]?.origin?.properties?.flags??[],r.outdoors.index,r.outdoors.bit)||n[s].origin.properties.preventSmoothing||!nt(n[s].origin,n[a].origin,e,t)){let l=a-1;i.push(new _e({...n[s],destination:n[l].origin,distance:Ee(n[s].origin.geometry.coordinates,n[l].origin.geometry.coordinates),angle:xe(n[s].origin.geometry.coordinates,n[l].origin.geometry.coordinates)})),s=l}return i.push(new _e({...n[s],destination:n[n.length-1].origin,distance:Ee(n[s].origin.geometry.coordinates,n[n.length-1].origin.geometry.coordinates),angle:xe(n[s].origin.geometry.coordinates,n[n.length-1].origin.geometry.coordinates),multiplicativeDistanceWeightScaling:o}),n[n.length-1]),i}f();var rp=ln(_i());function np(n,e){let t=new Set;if(n.length<2)return t;let r=[n[0].origin];for(let b=0;b<n.length;b++)r.push(n[b].destination);let o=r[0].geometry.coordinates[1],{toCartesian:i}=oi(o),s=e;if(!s)return t;let a=r.map((b,M)=>{let p={x:0,y:0,nodeId:b.properties.id,originalIndex:M};return i(b.geometry.coordinates,p),p}),l=new Set,c=new Set;for(let b=0;b<a.length;b++)s(a[b].nodeId)&&(l.add(b),c.add(a[b].nodeId));if(l.size===0)return t;let u=a.length>=3?(0,rp.default)(a,.7,!1):a,d=new Map;for(let b=0;b<u.length;b++)d.set(u[b].originalIndex,b);let h=new Set;for(let b of l){let M=d.get(b);if(M!==void 0){if(M>0){let p=u[M-1].nodeId;h.add(p)}if(M<u.length-1){let p=u[M+1].nodeId;h.add(p)}}else{let p,m;for(let y=0;y<u.length-1;y++){let v=u[y].originalIndex,x=u[y+1].originalIndex;if(v<b&&b<x){p=u[y].nodeId,m=u[y+1].nodeId;break}}p&&h.add(p),m&&h.add(m)}}let g=0;for(let b of n)h.has(b.origin.properties.id)&&(b.origin.properties.preventSmoothing||(b.origin.properties.preventSmoothing=!0,t.add(b.origin.properties.id))),h.has(b.destination.properties.id)&&(b.destination.properties.preventSmoothing||(b.destination.properties.preventSmoothing=!0,t.add(b.destination.properties.id))),g++;return t}f();f();var ps={accessible:"accessible",outdoors:"outdoors",public:"public"};f();f();function Yn(n,e,t=[]){let r={...n};for(let[o,i]of Object.entries(e))if(i!==void 0)if(o in r){let s=o;if(Array.isArray(i)&&i.length>0){let a=Uy(i[0],t);if(a){let l=r[s];if(!Array.isArray(l))throw new Error(`Expected array at ${o}, got ${typeof l}`);let c=new Map(i.map(h=>[op(h,a),h])),d=l.map(h=>{let g=c.get(op(h,a));return g?Yn(h,g,t):h});r[s]=d}else r[s]=i}else{let a=r[s];typeof a=="object"&&a!==null&&typeof i=="object"&&i!==null?Object.keys(i).length===0?r[s]=i:r[s]=Yn(a,i,t):r[o]=i}}else r[o]=i;return r}function Uy(n,e){function t(r){if(typeof r!="object"||r===null)return null;for(let o of e)if(o in r&&typeof r[o]<"u")return[o];if(Array.isArray(r))return null;for(let[o,i]of Object.entries(r)){let s=t(i);if(s)return[o,...s]}return null}return t(n)}function op(n,e){return e.reduce((t,r)=>{if(t&&typeof t=="object")return t[r]},n)}f();var Hy=n=>{if(n==="space"||n==="obstruction"||n==="entrance")return{}},Vy=/\.json|\.geojson$/,ms=(n,e,t)=>{let r=n[e];if(typeof r!="object"||Object.keys(r).length===0)return Hy(e);let o={};for(let[i,s]of Object.entries(r)){let a=i.replace(Vy,"");o[a]=JSON.parse(t(s))}return o},Wy=["floorstack.json","styles.json","shapes.json","mapstack.json","floor.geojson","tileset.json","location.json","category.json","navigationFlags.json","annotation-symbols.json"],jy=Wy,Zy=["annotation","textAreas","enterprise","floorImages","shapeInstances","modelInstances","window","area","facade"],Xy=Zy,Yy=n=>{let e=new TextDecoder("utf-8"),t=e.decode.bind(e),r={"manifest.geojson":JSON.parse(t(n["manifest.geojson"])),"mapstack.geojson":JSON.parse(t(n["mapstack.geojson"])),"map.geojson":JSON.parse(t(n["map.geojson"])),"node.geojson":JSON.parse(t(n["node.geojson"])),"connection.json":JSON.parse(t(n["connection.json"])),space:ms(n,"space",t),obstruction:ms(n,"obstruction",t),entrance:ms(n,"entrance",t)};for(let o of jy)n[o]&&(r[o]=JSON.parse(t(n[o])));for(let o of Xy)n[o]&&(r[o]=ms(n,o,t));return r};f();f();f();var $n=["agriculture","airport","casino","city-district","convention-center","entertainment","event-centre","first-responder-building","government-building","grocery-store","healthcare","higher-education","hotel","library","manufacturing","medical-centre","mixed-use","multifamily","museum","office-building","oil-and-energy","other","parking-facility","religious-institution","resort","retail-store","schools-k-12","shopping-mall","stadium-or-arena","storage-facility","theme-park","transit","transportation-hub","warehousing"],$y=[...$n,"unknown"],yl=Object.freeze(Object.fromEntries([...$n,"unknown"].map(n=>[n,n])));f();var qn=["reference-point","checkpoint","checkpoint-passport","parent"],qy=[...qn,"unknown"],Jy=Object.freeze(Object.fromEntries([...qn,"unknown"].map(n=>[n,n])));var Jn=["closed-temporarily","new","pop-up","coming-soon","relocated"],Ky=[...Jn,"unknown"],Qy=Object.freeze(Object.fromEntries([...Jn,"unknown"].map(n=>[n,n])));f();var Kn=["left","center","right"],eb=[...Kn,"unknown"],tb=Object.freeze(Object.fromEntries([...Kn,"unknown"].map(n=>[n,n])));f();var Qn=["near","center"],rb=[...Qn,"unknown"],nb=Object.freeze(Object.fromEntries([...Qn,"unknown"].map(n=>[n,n])));f();var eo=["top","side"],ob=[...eo,"unknown"],ib=Object.freeze(Object.fromEntries([...eo,"unknown"].map(n=>[n,n])));var to=["inside","outside","both"],sb=[...to,"unknown"],ab=Object.freeze(Object.fromEntries([...to,"unknown"].map(n=>[n,n])));f();var fs=["elevator","escalator","travelator","stairs","door","ramp","ladder"],MO=[...fs,"unknown"],bl=Object.freeze(Object.fromEntries([...fs,"unknown"].map(n=>[n,n])));f();var gs=["room","hallway","wall","object","poi","area","window"],wO=[...gs,"unknown"],TO=Object.freeze(Object.fromEntries([...gs,"unknown"].map(n=>[n,n])));f();f();var ys=class{_value;constructor(e){this._value=e}[Symbol.iterator](){return this}next(){if(this._value==null)return{done:!0,value:void 0};let e=this._value;return this._value=null,{done:!1,value:e}}},bs=class{_tag="Some";_value;constructor(e){this._value=e}get value(){return this._value}isSome(){return!0}isSomeAnd(e){return e(this.value)}isNone(){return!1}equals(e){return e.isSome()&&e.value===this.value}expect(e){return this.value}unwrap(){return this.value}unwrapOr(e){return this.value}unwrapOrElse(e){return this.value}inspect(e){return e(this.value),this}inspectNone(e){return this}map(e){return ip(e(this.value))}mapAsync(e){return e(this.value).then(t=>ip(t))}mapOr(e,t){return this.map(e).unwrapOr(t)}mapOrAsync(e,t){return this.mapAsync(e).then(r=>r.unwrapOr(t))}mapOrElse(e,t){return this.map(e).unwrapOrElse(t)}mapOrElseAsync(e,t){return this.mapAsync(e).then(r=>r.unwrapOrElse(t))}and(e){return e}andThen(e){return e(this.value)}andThenAsync(e){return e(this.value)}filter(e){return e(this.value)?this:Kt()}or(e){return this}orElse(e){return this}xor(e){return e.isSome()?Kt():this}toString(){return`Some(${this.value})`}okOr(e){return ot(this.value)}okOrElse(e){return ot(this.value)}iter(){return new ys(this.value)}[Symbol.iterator](){return this.iter()}zip(e){return e.isSome()?tn([this.value,e.value]):Kt()}zipWith(e,t){return e.isSome()?tn(t(this.value,e.value)):Kt()}get[Symbol.toStringTag](){return"Some"}},vs=class{_tag="None";get value(){return null}isSome(){return!1}isSomeAnd(e){return!1}isNone(){return!0}equals(e){return e.isNone()}expect(e){throw new Error(e)}unwrap(){throw new Error("Tried to unwrap a None value!")}unwrapOr(e){return e}unwrapOrElse(e){return e()}inspect(e){return this}inspectNone(e){return e(),this}map(e){return this}mapAsync(e){return Promise.resolve(this)}mapOr(e,t){return t}mapOrAsync(e,t){return Promise.resolve(t)}mapOrElse(e,t){return t()}mapOrElseAsync(e,t){return t()}and(e){return this}andThen(e){return this}andThenAsync(e){return Promise.resolve(this)}filter(e){return this}or(e){return e}orElse(e){return e()}xor(e){return e}toString(){return"None"}okOr(e){return Qt(e)}okOrElse(e){return Qt(e())}iter(){return new ys(null)}[Symbol.iterator](){return this.iter()}zip(e){return this}zipWith(e,t){return this}get[Symbol.toStringTag](){return"None"}},tn=n=>new bs(n),Kt=()=>new vs,ip=n=>n instanceof bs||n instanceof vs?n:n==null?Kt():tn(n);var xs=class{_value;constructor(e){this._value=e}[Symbol.iterator](){return this}next(){if(this._value==null)return{done:!0,value:void 0};let e=this._value;return this._value=null,{done:!1,value:e}}},vl=class{_tag="Ok";_value;constructor(e){this._value=e}get value(){return this._value}get error(){return null}isOk(){return!0}isOkAnd(e){return e(this.value)}isErr(){return!1}isErrAnd(e){return!1}ok(){return tn(this.value)}err(){return Kt()}expect(e){return this.value}expectErr(e){throw new Error(e)}unwrap(){return this.value}unwrapOr(e){return this.value}unwrapOrElse(e){return this.value}inspect(e){return e(this.value),this}inspectErr(){return this}map(e){return ot(e(this.value))}async mapAsync(e){return e(this.value).then(ot)}mapOr(e,t){return e(this.value)}async mapOrAsync(e,t){return e(this.value)}mapOrElse(e,t){return e(this.value)}async mapOrElseAsync(e,t){return e(this.value)}mapErr(e){return this}iter(){return new xs(this.value)}[Symbol.iterator](){return this.iter()}and(e){return e}andThen(e){return e(this.value)}or(e){return this}orElse(e){return this}async andThenAsync(e){return e(this.value)}toString(){return`Ok(${this.value})`}get[Symbol.toStringTag](){return"Ok"}},xl=class n{_tag="Err";_error;constructor(e){this._error=e}get value(){return null}get error(){return this._error}isOk(){return!1}isOkAnd(e){return!1}isErr(){return!0}isErrAnd(e){return e(this.error)}ok(){return Kt()}err(){return tn(this.error)}expect(e){throw new Error(e)}expectErr(e){return this.error}unwrap(){throw this.error}unwrapOr(e){return e}unwrapOrElse(e){return e()}inspect(){return this}inspectErr(e){return e(this.error),this}map(e){return this}iter(){return new xs(null)}[Symbol.iterator](){return this.iter()}async mapAsync(e){return this}mapOr(e,t){return t}async mapOrAsync(e,t){return t}mapOrElse(e,t){return t()}async mapOrElseAsync(e,t){return t()}mapErr(e){return new n(e(this.error))}and(e){return this}andThen(e){return this}async andThenAsync(e){return this}or(e){return e}orElse(e){return e(this.error)}toString(){return`Err(${this.error})`}get[Symbol.toStringTag](){return"Err"}},ot=n=>new vl(n),Qt=n=>new xl(n);f();var We=Uint8Array,rn=Uint16Array,lb=Int32Array,sp=new We([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),ap=new We([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),cb=new We([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),lp=function(n,e){for(var t=new rn(31),r=0;r<31;++r)t[r]=e+=1<<n[r-1];for(var o=new lb(t[30]),r=1;r<30;++r)for(var i=t[r];i<t[r+1];++i)o[i]=i-t[r]<<5|r;return{b:t,r:o}},cp=lp(sp,2),up=cp.b,ub=cp.r;up[28]=258,ub[258]=28;var dp=lp(ap,0),db=dp.b,FO=dp.r,El=new rn(32768);for(q=0;q<32768;++q)Pt=(q&43690)>>1|(q&21845)<<1,Pt=(Pt&52428)>>2|(Pt&13107)<<2,Pt=(Pt&61680)>>4|(Pt&3855)<<4,El[q]=((Pt&65280)>>8|(Pt&255)<<8)>>1;var Pt,q,ro=(function(n,e,t){for(var r=n.length,o=0,i=new rn(e);o<r;++o)n[o]&&++i[n[o]-1];var s=new rn(e);for(o=1;o<e;++o)s[o]=s[o-1]+i[o-1]<<1;var a;if(t){a=new rn(1<<e);var l=15-e;for(o=0;o<r;++o)if(n[o])for(var c=o<<4|n[o],u=e-n[o],d=s[n[o]-1]++<<u,h=d|(1<<u)-1;d<=h;++d)a[El[d]>>l]=c}else for(a=new rn(r),o=0;o<r;++o)n[o]&&(a[o]=El[s[n[o]-1]++]>>15-n[o]);return a}),no=new We(288);for(q=0;q<144;++q)no[q]=8;var q;for(q=144;q<256;++q)no[q]=9;var q;for(q=256;q<280;++q)no[q]=7;var q;for(q=280;q<288;++q)no[q]=8;var q,hp=new We(32);for(q=0;q<32;++q)hp[q]=5;var q;var hb=ro(no,9,1);var pb=ro(hp,5,1),Sl=function(n){for(var e=n[0],t=1;t<n.length;++t)n[t]>e&&(e=n[t]);return e},it=function(n,e,t){var r=e/8|0;return(n[r]|n[r+1]<<8)>>(e&7)&t},Ml=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},mb=function(n){return(n+7)/8|0},Tl=function(n,e,t){return(e==null||e<0)&&(e=0),(t==null||t>n.length)&&(t=n.length),new We(n.subarray(e,t))};var fb=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Ke=function(n,e,t){var r=new Error(e||fb[n]);if(r.code=n,Error.captureStackTrace&&Error.captureStackTrace(r,Ke),!t)throw r;return r},gb=function(n,e,t,r){var o=n.length,i=r?r.length:0;if(!o||e.f&&!e.l)return t||new We(0);var s=!t,a=s||e.i!=2,l=e.i;s&&(t=new We(o*3));var c=function(Xe){var ft=t.length;if(Xe>ft){var Se=new We(Math.max(ft*2,Xe));Se.set(t),t=Se}},u=e.f||0,d=e.p||0,h=e.b||0,g=e.l,b=e.d,M=e.m,p=e.n,m=o*8;do{if(!g){u=it(n,d,1);var y=it(n,d+1,3);if(d+=3,y)if(y==1)g=hb,b=pb,M=9,p=5;else if(y==2){var C=it(n,d,31)+257,D=it(n,d+10,15)+4,E=C+it(n,d+5,31)+1;d+=14;for(var T=new We(E),P=new We(19),I=0;I<D;++I)P[cb[I]]=it(n,d+I*3,7);d+=D*3;for(var L=Sl(P),N=(1<<L)-1,z=ro(P,L,1),I=0;I<E;){var j=z[it(n,d,N)];d+=j&15;var v=j>>4;if(v<16)T[I++]=v;else{var H=0,Q=0;for(v==16?(Q=3+it(n,d,3),d+=2,H=T[I-1]):v==17?(Q=3+it(n,d,7),d+=3):v==18&&(Q=11+it(n,d,127),d+=7);Q--;)T[I++]=H}}var G=T.subarray(0,C),J=T.subarray(C);M=Sl(G),p=Sl(J),g=ro(G,M,1),b=ro(J,p,1)}else Ke(1);else{var v=mb(d)+4,x=n[v-4]|n[v-3]<<8,S=v+x;if(S>o){l&&Ke(0);break}a&&c(h+x),t.set(n.subarray(v,S),h),e.b=h+=x,e.p=d=S*8,e.f=u;continue}if(d>m){l&&Ke(0);break}}a&&c(h+131072);for(var ne=(1<<M)-1,je=(1<<p)-1,ye=d;;ye=d){var H=g[Ml(n,d)&ne],be=H>>4;if(d+=H&15,d>m){l&&Ke(0);break}if(H||Ke(2),be<256)t[h++]=be;else if(be==256){ye=d,g=null;break}else{var pt=be-254;if(be>264){var I=be-257,Ze=sp[I];pt=it(n,d,(1<<Ze)-1)+up[I],d+=Ze}var Qe=b[Ml(n,d)&je],mt=Qe>>4;Qe||Ke(3),d+=Qe&15;var J=db[mt];if(mt>3){var Ze=ap[mt];J+=Ml(n,d)&(1<<Ze)-1,d+=Ze}if(d>m){l&&Ke(0);break}a&&c(h+131072);var et=h+pt;if(h<J){var It=i-J,Fe=Math.min(J,et);for(It+h<0&&Ke(3);h<Fe;++h)t[h]=r[It+h]}for(;h<et;++h)t[h]=t[h-J]}}e.l=g,e.p=ye,e.b=h,e.f=u,g&&(u=1,e.m=M,e.d=b,e.n=p)}while(!u);return h!=t.length&&s?Tl(t,0,h):t.subarray(0,h)};var yb=new We(0);var ht=function(n,e){return n[e]|n[e+1]<<8},st=function(n,e){return(n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24)>>>0},Cl=function(n,e){return st(n,e)+st(n,e+4)*4294967296};function bb(n,e){return gb(n,{i:2},e&&e.out,e&&e.dictionary)}var wl=typeof TextDecoder<"u"&&new TextDecoder,vb=0;try{wl.decode(yb,{stream:!0}),vb=1}catch{}var xb=function(n){for(var e="",t=0;;){var r=n[t++],o=(r>127)+(r>223)+(r>239);if(t+o>n.length)return{s:e,r:Tl(n,t-1)};o?o==3?(r=((r&15)<<18|(n[t++]&63)<<12|(n[t++]&63)<<6|n[t++]&63)-65536,e+=String.fromCharCode(55296|r>>10,56320|r&1023)):o&1?e+=String.fromCharCode((r&31)<<6|n[t++]&63):e+=String.fromCharCode((r&15)<<12|(n[t++]&63)<<6|n[t++]&63):e+=String.fromCharCode(r)}};function Dl(n,e){if(e){for(var t="",r=0;r<n.length;r+=16384)t+=String.fromCharCode.apply(null,n.subarray(r,r+16384));return t}else{if(wl)return wl.decode(n);var o=xb(n),i=o.s,t=o.r;return t.length&&Ke(8),i}}var Sb=function(n,e){return e+30+ht(n,e+26)+ht(n,e+28)},Mb=function(n,e,t){var r=ht(n,e+28),o=Dl(n.subarray(e+46,e+46+r),!(ht(n,e+8)&2048)),i=e+46+r,s=st(n,e+20),a=t&&s==4294967295?Cb(n,i):[s,st(n,e+24),st(n,e+42)],l=a[0],c=a[1],u=a[2];return[ht(n,e+10),l,c,o,i+ht(n,e+30)+ht(n,e+32),u]},Cb=function(n,e){for(;ht(n,e)!=1;e+=4+ht(n,e+2));return[Cl(n,e+12),Cl(n,e+4),Cl(n,e+20)]};function pp(n,e){for(var t={},r=n.length-22;st(n,r)!=101010256;--r)(!r||n.length-r>65558)&&Ke(13);var o=ht(n,r+8);if(!o)return{};var i=st(n,r+16),s=i==4294967295||o==65535;if(s){var a=st(n,r-12);s=st(n,a)==101075792,s&&(o=st(n,a+32),i=st(n,a+48))}for(var l=e&&e.filter,c=0;c<o;++c){var u=Mb(n,i,s),d=u[0],h=u[1],g=u[2],b=u[3],M=u[4],p=u[5],m=Sb(n,p);i=M,(!l||l({name:b,size:h,originalSize:g,compression:d}))&&(d?d==8?t[b]=bb(n.subarray(m,m+h),{out:new We(g)}):Ke(14,"unknown compression type "+d):t[b]=Tl(n,m,m+h))}return t}f();f();f();f();var ge=n=>Object.entries(n);f();var oo=n=>Object.keys(n);function mp(n){return n.replace(/^g_/,"s_")}function Ss(n){return n.replace(/^g_/,"o_")}function Eb(n){return n.replace(/^g_/,"w_")}function fp(n){return n.replace(/^loci_/,"eli_")}function io(n){return n.replace(/^loc_/,"el_")}function Ms(n){return n.replace(/^lcat_/,"ec_")}function wb(n){return n.replace(/^g_/,"ar_")}function gp(n){return n.replace(/^n_/,"s_")}function Tb(n,e,t){switch(n.geometry.type){case"MultiPoint":case"MultiLineString":case"MultiPolygon":{let r=[],o=0,i=n.geometry.type.replace("Multi","");for(let s of n.geometry.coordinates)r.push({...n,geometry:{type:i,coordinates:s},properties:{...n.properties,id:`${e}-${o++}`,kind:t}});return r}default:return[{...n,properties:{...n.properties,id:e,kind:t}}]}}function nn(n,e,t,r){let o=new Map;for(let{feature:i,floorId:s}of n){let a=i.properties.id,l=r.get(a);if(e.has(a)){let c=Tb(i,t(a),l),u=c.map(h=>h.properties.id),d=u.map(h=>({geometryId:h,floorId:s}));o.set(a,{ids:u,features:c,anchors:d})}}return o}function yp(n){let e={space:new Map,obstruction:new Map,area:new Map,window:new Map,object:new Map};if(!n.geometry)return e;let t=Db(n),r=ge(n.geometry).flatMap(([c,u])=>(u?.features??[]).map(d=>({feature:d,floorId:c}))).flat(),o=new Set(Object.values(n.walkable??{}).filter(c=>c!==void 0).flatMap(oo)),i=new Set(Object.values(n.nonwalkable??{}).filter(c=>c!==void 0).flatMap(oo)),s=new Set(Array.from(t.entries()).filter(([c,u])=>u==="area").map(([c])=>c)),a=new Set(Array.from(t.entries()).filter(([c,u])=>u==="object").map(([c])=>c)),l=new Set(Array.from(t.entries()).filter(([c,u])=>u==="window").map(([c])=>c));return o.size>0&&(e.space=nn(r,o,mp,t)),i.size>0&&(e.obstruction=nn(r,i,Ss,t)),s.size>0&&(e.area=nn(r,s,wb,t)),a.size>0&&(e.object=nn(r,a,Ss,t)),l.size>0&&(e.window=nn(r,l,Eb,t)),o.size===0&&i.size===0&&s.size===0&&(e.space=nn(r,new Set(r.map(c=>c.feature.properties.id)),mp,t)),e}function Db(n){let e=new Map(Object.values(n.kinds??{}).filter(t=>t!==void 0).flatMap(ge));for(let t of n.connections?.filter(r=>r.type!=="door")??[]){for(let r of t.entrances)e.set(r.geometryId,`connection.${t.type}`);for(let r of t.exits)e.set(r.geometryId,`connection.${t.type}`)}return e}function bp(n){if(!n||n.length===0)return[];let e=Math.max(...n.map(t=>t.length));return n.reduce((t,r)=>t.map((o,i)=>o|(r[i]??0)),Array(e).fill(0))}f();var Ll=ln(Sp(),1),Ab=n=>{let e=n.geometry.coordinates[0],t=0;for(let r=0;r<e.length-1;r++)t+=e[r][0]*e[r+1][1]-e[r+1][0]*e[r][1];return Math.abs(t/2)},Mp=(n,e,t)=>{let r=!1;for(let o=0,i=t.length-1;o<t.length;i=o++){let s=t[o][0],a=t[o][1],l=t[i][0],c=t[i][1];a>e!=c>e&&n<(l-s)*(e-a)/(c-a)+s&&(r=!r)}return r},Rb=(n,e)=>{let[t,r]=n,o=e.geometry.coordinates;if(!Mp(t,r,o[0]))return!1;for(let i=1;i<o.length;i++)if(Mp(t,r,o[i]))return!1;return!0},_b=n=>{let e=n.geometry.coordinates,t=0,r=0,o=0;for(let g of e)for(let b=0;b<g.length-1;b++)t+=g[b][0],r+=g[b][1],o++;if(o===0)throw new Error("Polygon has no vertices");let i=t/o,s=r/o,a=0,l=0,c=0,u,d;for(let g of e)for(let b of g){let M=b[0]-i,p=b[1]-s;if(u!==void 0&&d!==void 0){let m=u*p-M*d;c+=m,a+=(u+M)*m,l+=(d+p)*m}u=M,d=p}if(c===0)return[i,s];let h=1/(3*c);return[i+h*a,s+h*l]},Cp=n=>{let e=Ab(n);return!Number.isFinite(e)||e<=0?1e-9:Math.sqrt(e)*.01},on=n=>{try{let e=_b(n);if(Rb(e,n))return ot(e);let t=(0,Ll.default)(n.geometry.coordinates,Cp(n));return ot([t[0],t[1]])}catch{return Qt(new Error("Unable to calculate center of polygon"))}},Fb=n=>{try{let e=(0,Ll.default)(n.geometry.coordinates,Cp(n));return ot([e[0],e[1]])}catch{return Qt(new Error("Unable to calculate center of polygon"))}},Ep=(n="center-of-mass")=>{if(typeof n=="function")return n;switch(n){case"visual-center":return Fb;case"center-of-mass":return on}};function wp(n,e){let{nodesByGeometryId:t,incomingEdgesByNodeId:r,nodesById:o}=Nb(n),i=yp(n),s=Bb(n),a=n.navigationFlags??{};return{geometryMaps:i,nodesByGeometryId:t,geometryFeatureById:s,navigationFlags:a,incomingEdgesByNodeId:r,nodesById:o,centerCalculator:Ep(e?.centerStrategy)}}function Nb(n){let e=new Map,t=new Map,r=new Map;for(let o of Object.values(n.nodes??{}))for(let i of o?.features??[]){if(r.set(i.properties.id,i),i.properties.geometryIds.length>0)for(let s of i.properties.geometryIds){let a=e.get(s)??[];a.push(i.properties.id),e.set(s,a)}if(i.properties.neighbors.length>0)for(let s of i.properties.neighbors){let a=t.get(s.id);a!=null?a.push(s):t.set(s.id,[s])}}return{nodesByGeometryId:e,incomingEdgesByNodeId:t,nodesById:r}}function Bb(n){let e=new Map;for(let t of Object.values(n.geometry??{}))for(let r of t?.features??[])e.set(r.properties.id,r);return e}f();function Tp(n,e){if(!n.annotations||!n.annotationSymbols||!n.geometry)return{};let t={};for(let[r,o]of ge(n.annotations)){if(!o||o.length===0||!n.geometry[r]||n.geometry[r].features.length===0)continue;let i=new Map(n.geometry[r].features.map(a=>[a.properties.id,a])),s={type:"FeatureCollection",features:[]};for(let a of o){let l=i.get(a.geometryId);if(!l||l.geometry.type!=="Point")continue;let c={id:a.id,externalId:a.externalId,symbolId:a.symbolKey};s.features.push({type:"Feature",geometry:l.geometry,properties:c})}t[r]=s}return{annotation:t}}f();f();function Dr(n,e){return e&&(n.flags[e.index]&1<<e.bit)!==0}f();var Al={accessible:"accessible",outdoors:"outdoors",public:"public"};function Dp(n,{nodesByGeometryId:e}){let t={"connection.json":[],entrance:{}},r=n.navigationFlags?.[Al.accessible],o=n.navigationFlags?.[Al.outdoors],i=new Map(Object.values(n.geometry??{}).flatMap(s=>s?.features??[]).map(s=>[s.properties.id,s]));for(let s of n.connections??[]){if(Rl(s,i)&&!Gb(s)){let d=kb(s,i,e,o);for(let[h,g]of d)t.entrance[h]||(t.entrance[h]={type:"FeatureCollection",features:[]}),t.entrance[h].features.push(g);continue}let a=r!=null&&s.entrances.some(d=>Dr(d,r))&&s.exits.some(d=>Dr(d,r)),l=Array.from(new Set([...s.entrances.map(d=>e.get(d.geometryId)),...s.exits.map(d=>e.get(d.geometryId))].flat().filter(d=>d!=null))),c=bp([...s.entrances.map(d=>d.flags),...s.exits.map(d=>d.flags)]),u={id:s.id,externalId:s.details?.externalId??"",type:s.type,accessible:a,nodes:l,flags:c};s.details?.name&&(u.details={name:s.details.name}),s.extra&&(u.extra=s.extra),t["connection.json"].push(u)}return t}function Rl(n,e){return n.type==bl.door&&n.entrances.every(t=>e.get(t.geometryId)?.geometry.type==="LineString")}function Gb(n){return n.entrances.length===0||n.exits.length===0?!1:new Set([...n.entrances.map(t=>t.floorId),...n.exits.map(t=>t.floorId)]).size>=2}function kb(n,e,t,r){if(n.type!==bl.door)return[];let o=[];for(let i of n.entrances){let s=e.get(i.geometryId);if(s?.geometry.type==="LineString"){let a={type:"Feature",geometry:s.geometry,properties:{id:n.id,externalId:n.details?.externalId??"",isExterior:zb(n,r)}},l=n.details;l&&(a.properties.details={name:l.name,description:l.description},l.icon&&(a.properties.details.images=[{url:l.icon,altText:`${l.name} icon`}]));let c=t.get(i.geometryId);c&&c.length>0&&(a.properties.node=c[0]),o.push([i.floorId,a])}}return o}function zb(n,e){return n.entrances.some(t=>Dr(t,e))||n.exits.some(t=>Dr(t,e))}f();function Ip(n,{geometryMaps:e,nodesByGeometryId:t}){let r={categories:[],locations:[],locationInstances:[],layers:[],venue:{slug:"",name:"",externalId:"",defaultLanguage:{name:"English",code:"en"},languages:[]}},o=n.manifest?.features[0];o&&(r.venue.defaultFloor=o.properties.defaultFloor,r.venue.tzid=o.properties.tzid,r.venue.name=o.properties.name,r.venue.defaultLanguage={name:o.properties.language??"English",code:o.properties.language??"en"});let i=n.cms?.venue;i&&(r.venue={...r.venue,slug:i.slug,name:i.details?.name??r.venue.name??o.properties.name,externalId:i.details?.externalId??"",defaultLanguage:i.defaultLanguage,languages:i.languages??[],countrycode:i.countrycode,coverImage:i.coverImage,logo:i.logo,icon:i.details?.icon,extra:i.extra,mappedinWebUrl:i.mappedinWebUrl,operationHours:i.operationHours,topLocations:i.topLocations,type:i.type&&i.type in yl?i.type:"unknown",propertyImage:i.propertyImage});let s=new Map,a=n.locations??[],l=n.cms?.locations??[],c=n.cms?.categories??[],u=new Map((c??[]).map(v=>[v.categoryId,v]));if(a.length>0){let v=new Map(l.map(x=>[x.locationId,x]));for(let x of a){let S=v.get(x.id)??{};if(x){let C=x.details,D={id:S?.cmsId!==void 0?`el_${S?.cmsId}`:io(x.id),name:C.name,externalId:C.externalId??"",type:S.type??"location",sortOrder:S.sortOrder??0,amenity:S.amenity,description:C.description,extra:x.extra,links:x.links,operationHours:x.openingHours,gallery:S.gallery,logo:x.logo,shortName:C.shortName,picture:S.picture,showFloatingLabelWhenImagePresent:S.showFloatingLabelWhenImagePresent,showLogo:S.showLogo,siblingGroups:S.siblingGroups,states:S.states,tags:S.tags,spaces:[],nodes:[],polygons:[],headerImage:S.headerImage};if(x.phone&&(D.phone={number:x.phone}),S.primaryCategory){let T=u.get(S.primaryCategory);T&&(D.primaryCategory=T.id)}let E=Pp(x.social);x.website&&(E.website=x.website.url),D.social=E;for(let T of x.geometryAnchors){let P=e.space.get(T.geometryId),I=e.obstruction.get(T.geometryId),L=P??I;if(L){let z=new Set(L.features.filter(j=>j.geometry.type==="Polygon").map(j=>j.properties.id));for(let j of L.anchors)P!=null&&L===P&&D.spaces.push({floor:j.floorId,id:j.geometryId}),z.has(j.geometryId)&&D.polygons.push({map:j.floorId,id:j.geometryId})}let N=t.get(T.geometryId);for(let z of N??[])D.nodes.push({map:T.floorId,id:z})}r.locations.push(D);for(let T of x.categories)s.set(T,[...s.get(T)??[],x.id])}}}let d=n.cms?.locationInstances??[],h=n.locationInstances;if(h){let v=new Map(d.map(S=>[S.locationInstanceId,S])),x=[];for(let S of h){let C=v.get(S.id)??{};if(S){let D={id:fp(S.id),parent:C.parentId??io(S.parentId),name:S.details?.name,externalId:S.details?.externalId,type:C.type,sortOrder:C.sortOrder,amenity:C.amenity,description:S.details?.description,extra:S.extra,links:S.links,operationHours:S.openingHours,gallery:C.gallery,picture:C.picture,showFloatingLabelWhenImagePresent:C.showFloatingLabelWhenImagePresent,showLogo:C.showLogo,siblingGroups:C.siblingGroups,states:C.states,tags:C.tags,logo:S.logo,shortName:S.details?.shortName,headerImage:C.headerImage};S.phone&&(D.phone={number:S.phone});let E=Pp(S.social??[]);if(S.website&&(E.website=S.website.url),Object.keys(E).length>0&&(D.social=E),S.geometryAnchors?.length){let T=S.geometryAnchors.flatMap(P=>e.space.get(P.geometryId)?.anchors??[]);T.length>0&&(D.spaces=T.map(P=>({floor:P.floorId,id:P.geometryId})))}if(S.geometryAnchors){D.spaces=[],D.polygons=[],D.nodes=[];for(let T of S.geometryAnchors){let P=e.space.get(T.geometryId);if(P){let L=new Set(P.features.filter(N=>N.geometry.type==="Polygon").map(N=>N.properties.id));for(let N of P.anchors)D.spaces.push({floor:N.floorId,id:N.geometryId}),L.has(N.geometryId)&&D.polygons.push({map:N.floorId,id:N.geometryId})}let I=t.get(T.geometryId);for(let L of I??[])D.nodes.push({map:T.floorId,id:L})}}x.push(D)}}x.length>0&&(r.locationInstances=x)}let g=n.locationCategories;if(g){let v=[],x=new Map(g.map(E=>[E.id,E])),S=new Map((c??[]).map(E=>[E.categoryId,E])),C=new Map;for(let E of g){let T=x.get(E.parent);if(T){let P=C.get(T.id)??[];P.push(E.id),C.set(T.id,P)}}for(let E of g){let T=S.get(E.id);if(E){let P=(C.get(E.id)??[]).map(Ms),I={id:Ms(E.id),name:E.details.name,externalId:E.details.externalId??"",sortOrder:T?.sortOrder??0,children:P,locations:(s.get(E.id)??[]).map(io),icon:E.details.icon,picture:T?.picture,color:T?.color,extra:E.extra,iconFromDefaultList:T?.iconFromDefaultList};v.push(I)}}r.categories=v;let D={};for(let E of a)D[io(E.id)]=E.categories.map(Ms).filter(T=>T!==void 0);r.categoryPriorities=D}let b={};for(let[v,x]of Object.entries(n.defaultStyle??{}))if(x.buffer){let S=x.geometryAnchors.flatMap(C=>e.space.get(C.geometryId)?.anchors??[]);b[v]={edgeOffset:x.buffer,geometryAnchors:S}}Object.keys(b).length>0&&(r.enterpriseStyles=b);let M=new Map;for(let v of Object.values(n.cms?.layers??{}))if(v)for(let[x,S]of ge(v)){if(typeof S!="string")continue;let C=M.get(S)??{name:S,id:`ely_${S}`,spaces:[]};C.spaces.push(...e.space.get(x)?.anchors.map(D=>({floorId:D.floorId,spaceId:D.geometryId}))??[]),M.set(S,C)}M.size>0&&(r.layers=Array.from(M.values()));let p=[];for(let v of Object.values(n.cms?.textures??{}))for(let x of v){let S=e.space.get(x.geometryId)?.anchors;!S||S.length<1||x.face==="unknown"||x.surface==="unknown"||p.push({repeat:x.repeat,offset:x.offset,rotation:x.rotation,path:x.path,face:x.face,surface:x.surface,bounds:x.bounds,geometryAnchors:S})}p.length>0&&(r.textures=p);let m={};for(let[v,x]of Object.entries(n.cms?.floorText??{})){let S={type:"FeatureCollection",features:[]};for(let C of x.features){if(C.properties.align==="unknown")continue;let D={align:C.properties.align,color:C.properties.color,fontFamily:C.properties.fontFamily,fontSize:C.properties.fontSize,rotation:C.properties.rotation,text:C.properties.text,visible:C.properties.visible};"geometryId"in C.properties?D.geometryId=C.properties.geometryId:D.verticalOffset=C.properties.verticalOffset,S.features.push({type:"Feature",geometry:C.geometry,properties:D})}S.features.length>0&&(m[v]=S)}Object.keys(m).length>0&&(r.floorText=m);let y={enterprise:r};if(n.cms?.textAreas){let v={};for(let[x,S]of ge(n.cms.textAreas)){let C={type:"FeatureCollection",features:[]};for(let D of S.features){if(D.properties.align==="unknown")continue;let E={align:D.properties.align,maxWidth:D.properties.maxWidth,maxHeight:D.properties.maxHeight,rotation:D.properties.rotation};"geometryId"in D.properties?E.anchorId=D.properties.geometryId:E.verticalOffset=D.properties.verticalOffset;let T={type:"Feature",geometry:D.geometry,properties:E};C.features.push(T)}v[x]=C}y.textAreas=v}return y}var Ub=["facebook","instagram","twitter"];function Pp(n){let e={};for(let{name:t,url:r}of n){let o=t.toLowerCase();Ub.includes(o)&&(e[o]=r)}return e}f();var Hb=n=>`fc_${n.slice(3)}`;function Op(n,{geometryMaps:e}){if(!n.facade)return{};let t={},r={};for(let[o,i]of ge(n.facade))if(i)for(let s of Object.values(i)){let{floorStackId:a,geometryIds:l}=s,c=Hb(a);r[a]??={id:c,spaces:[]},r[a].spaces.push(...l.map(u=>({floorId:o,spaceId:e.space.get(u)?.ids[0]??""})))}return Object.keys(r).length>0&&(t.facade=r),t}f();function Lp(n,e={}){let t={type:"FeatureCollection",features:[]},r=[];for(let o of n.floors.features)r.push({id:o.properties.id,externalId:o.properties.details?.externalId??"",elevation:o.properties.elevation,name:o.properties.details?.name??"",shortName:o.properties.details?.shortName??"",subtitle:o.properties.subtitle,maxHeight:o.properties.maxHeight}),t.features.push({type:"Feature",geometry:o.geometry,properties:{id:o.properties.id,externalId:o.properties.details?.externalId??"",elevation:o.properties.elevation,name:o.properties.details?.name??"",shortName:o.properties.details?.shortName??"",subtitle:o.properties.subtitle,maxHeight:o.properties.maxHeight}});return{"floor.geojson":t,"map.geojson":r}}f();function Ap(n,{geometryMaps:e}){let t={},r={};for(let[o,i]of ge(n.floorImages??{})){let s={features:[],type:"FeatureCollection"};for(let a of i?.features??[])if("verticalOffset"in a.properties)s.features.push(a);else{let{geometryId:l,...c}=a.properties,u=e.space.get(l)?.ids[0]??e.obstruction.get(l)?.ids[0];if(!u)continue;let d={geometry:a.geometry,properties:{...c,anchorId:u},type:a.type};s.features.push(d)}r[o]=s}return Object.keys(r).length>0&&(t.floorImages=r),t}f();function Rp(n,e={}){let t=[];for(let o of n?.floorStacks??[]){let i={id:o.id,floors:o.floors,maps:o.floors,externalId:o.details?.externalId??"",name:o.details?.name??"",shortName:o.details?.shortName??"",type:"Building"};o.defaultFloor&&(i.defaultFloor=o.defaultFloor),t.push(i)}if(n.outdoors&&n.outdoors.floors.length>0){let o={id:"outdoors",floors:n.outdoors.floors,maps:n.outdoors.floors,type:"Outdoor",name:"Outdoors",externalId:"outdoors"};t.push(o)}return{"floorstack.json":t,"mapstack.geojson":t}}f();function _l(n){return n?.geometry?.type==="Polygon"}function Fp(n,{geometryMaps:e,nodesByGeometryId:t,nodesById:r,centerCalculator:o=on}){let i=Zb(n.defaultStyle),s={},a={},l={},c={};for(let d of oo(n.geometry)){let h=n.geometry[d];if(!h)continue;let g=[],b=[],M=[],p=[];for(let m of h.features){let y=m.properties.id,v=i.has(y),x=t.get(y)??[];for(let S of e.space.get(y)?.features??[])g.push(_p(S,x,o));for(let S of e.obstruction.get(y)?.features??[])if(b.push(Vb(S,v,o)),e.object.has(y)){let C=t.get(y)??[],D=C.map(E=>r.get(E)).filter(E=>E!=null);for(let E of D){let T=_p({type:"Feature",geometry:E.geometry,properties:{id:gp(E.properties.id),kind:"desk-entrance",details:{externalId:Ss(y)}}},C,o);g.push(T)}}for(let S of e.area.get(y)?.features??[])M.push(Wb(S,x,o));for(let S of e.window.get(y)?.features??[])p.push(jb(S))}g.length>0&&(s[d]={type:"FeatureCollection",features:g.filter(m=>m!==null)}),b.length>0&&(a[d]={type:"FeatureCollection",features:b.filter(m=>m!==null)}),M.length>0&&(l[d]={type:"FeatureCollection",features:M.filter(m=>m!==null)}),p.length>0&&(c[d]={type:"FeatureCollection",features:p.filter(m=>m!==null)})}let u={space:s,obstruction:a};return Object.keys(l).length>0&&(u.area=l),Object.keys(c).length>0&&(u.window=c),u}function _p(n,e,t=on){switch(n.geometry.type){case"MultiPoint":case"MultiLineString":case"MultiPolygon":return null}let r={type:"Feature",geometry:n.geometry,properties:{destinationNodes:e,id:n.properties.id,externalId:n.properties.details?.externalId??"",kind:n.properties.kind}};return n.properties.details&&(r.properties.details={name:n.properties.details.name,description:n.properties.details.description,images:n.properties.details.icon?[{url:n.properties.details.icon,altText:n.properties.details.name?`${n.properties.details.name} icon`:"icon"}]:void 0}),_l(r)&&(r.properties.center=t(r).unwrapOr(void 0)),r}function Vb(n,e,t=on){switch(n.geometry.type){case"MultiPoint":case"MultiLineString":case"MultiPolygon":case"Point":return null}let r=n.properties,o={type:"Feature",geometry:n.geometry,properties:{id:r.id,externalId:r.details?.externalId??"",entrances:[],kind:r.kind,footprintComponent:e}};return _l(o)&&(o.properties.center=t(o).unwrapOr(void 0)),r.details&&(o.properties.details={name:r.details.name,description:r.details.description,images:r.details.icon?[{url:r.details.icon,altText:r.details.name?`${r.details.name} icon`:"icon"}]:void 0}),o}function Wb(n,e,t=on){if(n.geometry.type!=="Polygon")return null;let r=n.properties,o={type:"Feature",geometry:n.geometry,properties:{id:r.id,externalId:r.details?.externalId??"",destinationNodes:e}};return _l(o)&&(o.properties.center=t(o).unwrapOr(void 0)),r.details&&(o.properties.details={name:r.details.name,description:r.details.description,images:r.details.icon?[{url:r.details.icon,altText:r.details.name?`${r.details.name} icon`:"icon"}]:void 0}),o}function jb(n){return n.geometry.type!=="LineString"?null:{type:"Feature",geometry:n.geometry,properties:{id:n.properties.id}}}function Zb(n){return new Set((n?.ExteriorWalls?.geometryAnchors??[]).map(t=>t.geometryId))}f();function Np(n,{geometryMaps:e,geometryFeatureById:t}){if(!n.locationCategories&&!n.locations)return{};let r={};if(n.locationCategories?.length){let o=[];for(let i of n.locationCategories){let s={id:i.id,name:i.details.name,icon:i.details.icon??""};i.parent&&(s.parent=i.parent),o.push(s)}r["category.json"]=o}if(n.locations?.length){let o=Xb(n,{geometryFeatureById:t}),i=[];for(let s of n.locations){let a={id:s.id,name:s.details.name,categories:s.categories,spaces:[],obstructions:[],areas:[],annotations:[],connections:[],entrances:[],links:s.links,openingHoursSpecification:s.openingHours??[],pictures:s.images,social:s.social,description:s.details.description,externalId:s.details.externalId,icon:s.details.icon,logo:s.logo,phone:s.phone,website:s.website,searchTags:s.searchTags};i.push(a);for(let{geometryId:l,floorId:c}of s.geometryAnchors)a.spaces.push(...e.space.get(l)?.ids.map(u=>({id:u,floor:c}))??[]),a.obstructions.push(...e.obstruction.get(l)?.ids.map(u=>({id:u,floor:c}))??[]),a.areas.push(...e.area.get(l)?.ids.map(u=>({id:u,floor:c}))??[]),a.entrances.push(...o.entrancesByGeometryId.get(l)??[]),a.connections.push(...o.connectionsByGeometryId.get(l)??[]),a.annotations.push(...o.annotationsByGeometryId.get(l)??[])}r["location.json"]=i}return r}function Xb(n,{geometryFeatureById:e}){let t={annotationsByGeometryId:new Map,connectionsByGeometryId:new Map,entrancesByGeometryId:new Map};if(n.annotations)for(let[r,o]of ge(n.annotations))for(let i of o??[]){let s=i.geometryId,a=i.id,l=t.annotationsByGeometryId.get(s)??[];l.push({floor:r,id:a}),t.annotationsByGeometryId.set(s,l)}if(n.connections)for(let r of n.connections){let o=Rl(r,e),i=Array.from(new Map([...r.entrances,...r.exits].map(s=>[`${s.geometryId}_${s.floorId}`,s])).values());for(let s of i){let a=s.geometryId;if(o){let l=t.entrancesByGeometryId.get(a)??[];l.push({floor:s.floorId,id:r.id}),t.entrancesByGeometryId.set(a,l)}else{let l=t.connectionsByGeometryId.get(a)??[];l.push(r.id),t.connectionsByGeometryId.set(a,l)}}}return t}f();function Bp(n,e){let t={features:[],type:"FeatureCollection"},r={"manifest.geojson":t},o=n.manifest;if(o.features.length>0){let i=o.features[0],s=i.properties,a=s.details!=null?{...s.details.externalId!=null&&{externalId:s.details.externalId}}:void 0,l={type:"Feature",geometry:i.geometry,properties:{folder_struct:[],version:"2.0.0",time:s.time,name:s.name,naturalBearing:s.naturalBearing,tzid:s.tzid,map:s.mapId,org_id:s.orgId,language:s.language,...a!=null&&Object.keys(a).length>0&&{details:a}}};t.features.push(l)}return r}f();function Gp(n,{geometryMaps:e,navigationFlags:t,incomingEdgesByNodeId:r}){let o={"node.geojson":{type:"FeatureCollection",features:[]}},i=o["node.geojson"].features,s=Yb(n),a=$b(n),l=qb(n,a,s);for(let[c,u]of ge(n.nodes??{}))for(let d of u?.features??[]){let h=e.space.get(d.properties.geometryIds[0])?.features[0],g=h?.geometry.type==="Point"&&h?.properties.details?.externalId?h.properties.details.externalId:"",b=r.get(d.properties.id)??[],M=Object.keys(t??{}),p=[];for(let y of b)for(let v of M)Dr(y,t[v])&&p.push(t[v]);let m={type:"Feature",geometry:d.geometry,properties:{id:d.properties.id,floor:c,space:d.properties.geometryIds.map(y=>e.space.get(y)?.ids).flat().filter(y=>y!==void 0),neighbors:[...d.properties.neighbors.map(y=>({id:y.id,weight:y.extraCost})),...l.get(d.properties.id)??[]],map:c,externalId:g,flags:p.length>0?Jb(p):void 0}};i.push(m)}return o}function Yb(n){let e=new Map;for(let t of n.floors?.features??[])e.set(t.properties.id,t.properties.elevation);return e}function $b(n){let e=new Map;for(let t of Object.values(n.nodes??{}))for(let r of t?.features??[])if(r.properties.geometryIds.length!==0)for(let o of r.properties.geometryIds){let i=e.get(o)??[];i.includes(r.properties.id)||(i.push(r.properties.id),e.set(o,i))}return e}function qb(n,e,t){let r=new Map;for(let o of n.connections??[]){let i=o.exits.map(s=>({...s,nodes:e.get(s.geometryId)??[]}));for(let s of o.entrances){let a=e.get(s.geometryId)??[];for(let l of a)for(let c of i){let u=Math.abs((t.get(s.floorId)??0)-(t.get(c.floorId)??0))*o.floorCostMultiplier,d=r.get(l)??[];d.push(...c.nodes.filter(h=>h!==l).map(h=>({id:h,weight:u+o.entryCost}))),r.set(l,d)}}}return r}function Jb(n){if(n==null||n.length===0)return;let e=new Array(Math.max(...n.map(t=>t.index))+1).fill(0);for(let t of n)e[t.index]|=1<<t.bit;return e}f();function Kb(n,e){let t={};for(let r of n){let o=e.get(r);o&&(t[o]??=[],t[o].push(r))}return t}function kp(n,{geometryMaps:e}){if(!n.defaultStyle)return{};let t={},r={};t["styles.json"]=r;let o=[...Array.from(e.space.values()).map(s=>s.features),...Array.from(e.obstruction.values()).map(s=>s.features)],i=new Map(o.flatMap(s=>s.map(a=>[a.properties.id,a.geometry.type])));for(let[s,a]of ge(n.defaultStyle)){let l=Kb(a.geometryAnchors.flatMap(c=>[...e.space.get(c.geometryId)?.ids??[],...e.obstruction.get(c.geometryId)?.ids??[]]),i);if(l.Point&&l.Point.length>0){let c={points:Array.from(l.Point.values()),showImage:a.extra?.showImage!==void 0?a.extra?.showImage===!0:a.opacity!==0};r[`${s}.Point`]=c}if(l.LineString&&l.LineString.length>0){let c={lineStrings:Array.from(l.LineString.values()),altitude:a.altitude,color:a.color,height:a.height,opacity:a.opacity,width:a.buffer};a.topColor!==void 0&&(c.topColor=a.topColor),r[`${s}.LineString`]=c}if(l.Polygon&&l.Polygon.length>0){let c={polygons:Array.from(l.Polygon.values()),altitude:a.altitude,color:a.color,height:a.height,opacity:a.opacity};a.extra?.showImage!==void 0&&(c.showImage=a.extra.showImage===!0),a.topColor!==void 0&&(c.topColor=a.topColor),r[`${s}.Polygon`]=c}}return t}function zp(n,e){let t=wp(n,e),r=Lp(n,t),o=Fp(n,t),i=Gp(n,t),s=Dp(n,t),a=kp(n,t),l=Rp(n,t),c=Ap(n,t),u=Op(n,t),d=Tp(n,t),h=Np(n,t),g=Ip(n,t),b=Bp(n,t);return{...n.tileset?{"tileset.json":n.tileset}:{},...n.navigationFlags?{"navigationFlags.json":n.navigationFlags}:{},...n.annotationSymbols?{"annotation-symbols.json":n.annotationSymbols}:{},...r,...o,...i,...s,...a,...l,...c,...u,...d,...h,...g,...b}}var ae=n=>JSON.parse(Dl(n)),Qb=/^geometry\/(.+)\.geojson$/,ev=/^nodes\/(.+)\.(geo)?json$/,tv=/^floorImages\/(.+)\.geojson$/,rv=/^facade\/(.+)\.json$/,nv=/^walkable\/(.+)\.json$/,ov=/^nonwalkable\/(.+)\.json$/,iv=/^kinds\/(.+)\.json$/,sv=/^annotations\/(.+)\.json$/,av=/^cms\/(?:([^/]+)\/)?([^/]+)\.(?:json|geojson)$/,lv=[(n,e)=>n==="manifest.geojson"?{manifest:ae(e)}:void 0,(n,e)=>n==="floors.geojson"?{floors:ae(e)}:void 0,(n,e)=>{let t=n.match(Qb);return t?{geometry:{[t[1]]:ae(e)}}:void 0},(n,e)=>n==="connections.json"?{connections:ae(e)}:void 0,(n,e)=>n==="navigationFlags.json"?{navigationFlags:ae(e)}:void 0,(n,e)=>{let t=n.match(ev);return t?{nodes:{[t[1]]:ae(e)}}:void 0},(n,e)=>n==="default-style.json"?{defaultStyle:ae(e)}:void 0,(n,e)=>n==="floor-stacks.json"?{floorStacks:ae(e)}:void 0,(n,e)=>n==="outdoors.json"?{outdoors:ae(e)}:void 0,(n,e)=>n==="tileset.json"?{tileset:ae(e)}:void 0,(n,e)=>{let t=n.match(tv);return t?{floorImages:{[t[1]]:ae(e)}}:void 0},(n,e)=>{let t=n.match(rv);return t?{facade:{[t[1]]:ae(e)}}:void 0},(n,e)=>{let t=n.match(nv);return t?{walkable:{[t[1]]:ae(e)}}:void 0},(n,e)=>{let t=n.match(ov);return t?{nonwalkable:{[t[1]]:ae(e)}}:void 0},(n,e)=>{let t=n.match(iv);return t?{kinds:{[t[1]]:ae(e)}}:void 0},(n,e)=>n==="annotation-symbols.json"?{annotationSymbols:ae(e)}:void 0,(n,e)=>{let t=n.match(sv);return t?{annotations:{[t[1]]:ae(e)}}:void 0},(n,e)=>n==="locations.json"?{locations:ae(e)}:void 0,(n,e)=>n==="location-categories.json"?{locationCategories:ae(e)}:void 0,(n,e)=>n==="location-instances.json"?{locationInstances:ae(e)}:void 0,(n,e)=>{let t=n.match(av);if(!t)return;let[,r,o]=t;return r==="floorText"||r==="textures"||r==="textAreas"?{cms:{[r]:{[o]:ae(e)}}}:{cms:{[o]:ae(e)}}}],cv=new Set(fs),uv=new Set(gs),dv=new Set($n),hv=new Set(Jn),pv=new Set(qn),mv=new Set(Kn),fv=new Set(Qn),gv=new Set(eo),yv=new Set(to);function tr(n,e){return typeof n=="string"&&e.has(n)?n:"unknown"}function bv(n){let e=n.connections;if(Array.isArray(e))for(let a of e)a&&typeof a=="object"&&"type"in a&&(a.type=tr(a.type,cv));let t=n.kinds;if(t&&typeof t=="object"){for(let a of Object.values(t))if(a&&typeof a=="object"){let l=a;for(let c of Object.keys(l))l[c]=tr(l[c],uv)}}let r=n.cms;if(!r||typeof r!="object")return;let o=r,i=o.locations;if(Array.isArray(i))for(let a of i){if(!a||typeof a!="object")continue;let l=a;if("type"in l&&(l.type=tr(l.type,dv)),Array.isArray(l.states))for(let c of l.states)c&&typeof c=="object"&&"type"in c&&(c.type=tr(c.type,hv));if(Array.isArray(l.siblingGroups))for(let c of l.siblingGroups)c&&typeof c=="object"&&"type"in c&&(c.type=tr(c.type,pv))}for(let a of["floorText","textAreas"]){let l=a==="floorText"?mv:fv,c=o[a];if(!(!c||typeof c!="object"))for(let u of Object.values(c)){if(!u||typeof u!="object")continue;let d=u.features;if(Array.isArray(d))for(let h of d){if(!h||typeof h!="object")continue;let g=h.properties;g&&typeof g=="object"&&"alignment"in g&&(g.alignment=tr(g.alignment,l))}}}let s=o.textures;if(s&&typeof s=="object"){for(let a of Object.values(s))if(Array.isArray(a))for(let l of a){if(!l||typeof l!="object")continue;let c=l;"face"in c&&(c.face=tr(c.face,gv)),"surface"in c&&(c.surface=tr(c.surface,yv))}}}function vv(n){let e=pp(n),t={};for(let r of Object.keys(e))for(let o of lv){let i=o(r,e[r]);if(i){t=Yn(t,i,[]);break}}return bv(t),t}function Es(n){try{return ot(vv(n))}catch(e){return Qt(e instanceof Error?e:new Error(String(e)))}}var xv={decompressUnsafeSync:n=>Es(n),decompressUnsafe:n=>Promise.resolve(Es(n)),decompressSync:n=>Es(n),decompress:n=>Promise.resolve(Es(n))};var ws=class{groupBy;graph;geometryEdgesByMapId=new Map;flagDeclarations={};getDoorByNodeId;nonPublicNodeIds;constructor({nodes:e,geojsonCollection:t,groupBy:r="default",multiplicativeDistanceWeightScaling:o,flagDeclarations:i,getDoorByNodeId:s}){this.groupBy=r,this.graph=new ds({nodes:e,groupBy:this.groupBy,multiplicativeDistanceWeightScaling:o});let a=t?.features||[];this.flagDeclarations=i??{},this.getDoorByNodeId=s,this.nonPublicNodeIds=this.getNonPublicNodeIds(),a.forEach(l=>{let c=null;if(l.geometry.type==="LineString"?c=l.geometry.coordinates:l.geometry.type==="Polygon"&&(c=l.geometry.coordinates.flat()),c){let u=this.groupBy==="default"?this.groupBy:l.properties[this.groupBy];this.geometryEdgesByMapId.has(u)||this.geometryEdgesByMapId.set(u,[]),c.forEach((d,h)=>{this.geometryEdgesByMapId.get(u).push([d,c[h+1]||c[0]])})}})}getNonPublicNodeIds(){let e=new Set;if(ps.public in this.flagDeclarations)for(let t in this.graph.nodesById)hs(this.graph.nodesById[t].properties.flags,this.flagDeclarations[ps.public].index,this.flagDeclarations[ps.public].bit)||e.add(t);return e}getDirections({zones:e,originIds:t,from:r,to:o,destinationNodeIds:i,disabledConnectionNodeIds:s,simplify:a,multiplicativeDistanceWeightScaling:l,overrideEdgeWeights:c,includeNonPublic:u}){let d=a?.enabled??!0,h=e??[],g=this.graph.aStar({originIds:t,destinationNodeIds:i,zones:h,disabledConnectionNodeIds:new Set(s),overrideEdgeWeights:c,disabledNodeIds:u?void 0:this.nonPublicNodeIds});if(g.length===0)return{type:"FeatureCollection",features:[]};if(a?.__EXPERIMENTAL_METHOD!=="greedy-los"&&r&&o&&r.length===1&&o.length===1){let b=new _e({origin:r[0],destination:g[0].origin,distance:Ee(r[0].geometry.coordinates,g[0].origin.geometry.coordinates),angle:xe(r[0].geometry.coordinates,g[0].origin.geometry.coordinates),multiplicativeDistanceWeightScaling:l}),M=g.slice(),p=new _e({origin:g[g.length-1].destination,destination:o[0],distance:Ee(g[g.length-1].destination.geometry.coordinates,o[0].geometry.coordinates),angle:xe(g[g.length-1].destination.geometry.coordinates,o[0].geometry.coordinates),multiplicativeDistanceWeightScaling:l});M.unshift(b),M.push(p),g=M}return d&&(g=this.simplifyAllSteps(g,a,l)),this.generatePath(g)}generatePath=e=>{let{destination:t}=e[e.length-1],r={type:"FeatureCollection",features:[]};for(let i=0;i<e.length;i++){let{origin:s,destination:a}=e[i],l={id:s.properties.id,angle:e[i].angle,distance:e[i].distance,destination:a.properties.id,edges:this.graph.edges[s.properties.id]};this.groupBy!=="default"&&(l.groupBy=s.properties[this.groupBy]),r.features.push({type:"Feature",geometry:{type:"Point",coordinates:[s.geometry.coordinates[0],s.geometry.coordinates[1]]},properties:l})}let o={id:t.properties.id,edges:this.graph.edges[t.properties.id]};return this.groupBy!=="default"&&(o.groupBy=t.properties[this.groupBy]),r.features.push({type:"Feature",geometry:{type:"Point",coordinates:[t.geometry.coordinates[0],t.geometry.coordinates[1]]},properties:o}),r};simplifyAllSteps(e,t={enabled:!0,__EXPERIMENTAL_METHOD:"greedy-los"},r){let o=[],i=[e[0]],s=t.__EXPERIMENTAL_METHOD??"greedy-los",a=t.radius??Zn,l=s==="dp-optimal"?this.simplifyStepsWithDPMethod.bind(this):s==="rdp"?this.simplifyStepsImprovedWithSimplifyBeforeLoSChecks.bind(this):this.simplifySteps.bind(this);for(let h=1;h<e.length;h++)if(this.groupBy!=="default"&&e[h].origin.properties[this.groupBy]!==e[h-1].origin.properties[this.groupBy]){let g=e[h-1].origin.properties[this.groupBy],b=this.geometryEdgesByMapId.get(g)??[];o.push(...l(i,b,a,r,t)),i=[e[h]]}else i.push(e[h]);let c=e[e.length-1],u=this.groupBy==="default"?this.groupBy:c.origin.properties[this.groupBy],d=this.geometryEdgesByMapId.get(u)??[];return o.push(...l(i,d,a,r,t)),o}findNearestNodesOnGraph=(e,t,r,o,i=!1,s=1/0)=>this.graph.dijkstraFindWithinTravelDistance(e,t,o,this.geometryEdgesByMapId.get(r)??[],i,s);hasLineOfSight=(e,t,r,o)=>this.graph.hasLineOfSight(e,t,this.geometryEdgesByMapId.get(r),o);simplifySteps(e,t,r,o,i){return tp(e,t,r,this.flagDeclarations,o)}simplifyStepsImprovedWithSimplifyBeforeLoSChecks(e,t,r,o,i){if(e.length<3)return e;!1,e=Qh(e,this.getDoorByNodeId,o,t);let s=i?.__EXPERIMENTAL_METHOD==="rdp"?i.mustIncludeDoorBufferNodes??!0:!0;return ep(e,t,o,s)}simplifyStepsWithDPMethod(e,t,r,o,i){if(e.length<3)return e;let s=new Set;(i?.__EXPERIMENTAL_METHOD==="dp-optimal"?i.includeDoorBufferNodes??!1:!1)&&(s=np(e,this.getDoorByNodeId));for(let u=0;u<e.length-1;u++){let d=e[u].origin.properties.floor,h=e[u+1].origin.properties.floor;d!==h&&(e[u].origin.properties.preventSmoothing||(e[u].origin.properties.preventSmoothing=!0,s.add(e[u].origin.properties.id)),e[u+1].origin.properties.preventSmoothing||(e[u+1].origin.properties.preventSmoothing=!0,s.add(e[u+1].origin.properties.id)))}let l=e[e.length-1];l.origin.properties.floor!==l.destination.properties.floor&&(l.origin.properties.preventSmoothing||(l.origin.properties.preventSmoothing=!0,s.add(l.origin.properties.id))),!1;let c=$h(e,t,o,r);if(!1){let u=c[c.length-1];window.__DEBUG_PATH.finalSteps.push({nodeId:u.destination.properties.id,coordinate:u.destination.geometry.coordinates,floorId:u.destination.properties.map})}for(let u of e)s.has(u.origin.properties.id)&&delete u.origin.properties.preventSmoothing,s.has(u.destination.properties.id)&&delete u.destination.properties.preventSmoothing;return c}getDistance=(e,t)=>Ee(e,t);getAngle=(e,t)=>xe(e,t)};var Fl="https://tiles-cdn.mappedin.com/styles/mappedin/style.json",Sv="https://auth.mappedin.com/oauth2/token";async function bA(n,e){let t=e?.useWorkers??!0,r={...e,watermark:e?.watermark,attribution:e?.attribution,antialias:e?.antialias,occlusionEnabled:e?.occlusionEnabled,transformImageRequest:e?.transformImageRequest,naturalBearing:e?.naturalBearing??0,imagePlacementOptions:e?.imagePlacementOptions,onWebGLContextCreationError:e?.onWebGLContextCreationError,onWebGLContextLost:e?.onWebGLContextLost,onWebGLContextRestored:e?.onWebGLContextRestored,onWebGLRendererError:e?.onWebGLRendererError,useStandaloneCamera:e?.useStandaloneCamera??!1,useCollisionWorker:e?.useCollisionWorker??!0,useWorkers:t};if(t===!0&&e?.outdoorView?.enabled){let o=e.outdoorView.headers;o==null&&(o=await Fc(Sv));let i=e.center||[0,0];Fs&&Tc(Fs);let s=null,a=null;try{s=new wc({container:n,style:e.outdoorView.style||Fl,center:i,attributionControl:!1,zoom:e.zoomLevel??pl,pitch:e.pitch??dl,bearing:e.bearing??hl,transformRequest:Oc(o),trackResize:!1,pixelRatio:e.outdoorView.lowDpi?1:kr(),canvasContextAttributes:{antialias:typeof e.antialias=="boolean"?e.antialias:!0,powerPreference:"high-performance"},interactive:!1,validateStyle:!1,centerClampedToGround:!1,boxZoom:!1,doubleClickZoom:!1,scrollZoom:!1,dragPan:!1,dragRotate:!1,keyboard:!1,touchZoomRotate:!1}),await Lc(s,{timeout:1e4,styleUrl:e.outdoorView?.style||Fl})}catch(c){if(a=c,R.warn(`[MappedinJS] Outdoor view initialization failed: ${a.message}. Falling back to indoor-only rendering.`),s){try{s.remove()}catch{}s=null}}if(!s||a){let c=new Jt(n,r);return c.publish("outdoor-style-error",{error:a}),c}let l=null;try{let c=s.painter.context.gl;l=new Jt(n,{center:i,zoomLevel:s.getZoom(),pitch:s.getPitch(),bearing:s.getBearing(),gl:c,map:s,mode:"outdoors-interleaved",...r}),_o(s,l.camera.minZoomLevel,l.camera.maxZoomLevel),s.setMaxPitch(l.camera.maxPitch),s.setMinPitch(l.camera.minPitch),Zh(l,s);let u=mr.fromLngLat(i,0),d=Io(u,l.viewCamera,()=>{l?.renderSync()}),h=!1,g=!1,b="",M=async()=>{s&&(g=!1,s.addLayer(d),l?.renderSync())};l.onMapLibreEvent("style.load",M),M();let p=()=>{s&&(h||(l?.publish("outdoor-view-loaded"),h=!0),g||(g=!0,l?.publish("outdoor-style-loaded")))};l.onMapLibreEvent("idle",p);let m=C=>{C&&(C.sourceDataType==="metadata"||C.sourceDataType==="visibility"||C.dataType==="style"||C.type==="terrain")&&l?.getSystems().htmlControlsSystem.updateData(s)},y=C=>{if(s&&C&&C.dataType==="style"&&C.type==="styledata"){let D=C?.style?.stylesheet?.id;D&&D!==b&&(b=D,g=!1)}m(C)};l.onMapLibreEvent("styledata",y),l.onMapLibreEvent("sourcedata",m),l.onMapLibreEvent("terrain",m);let v=e.outdoorView?.refreshToken,x=v?jh({refreshOutdoorToken:v,headers:o,reloadSource:C=>s?.refreshTiles(C)}):void 0;x&&l.onAbort(()=>x.dispose());let S=C=>{if(C.error?.url===Fl){R.error(`Failed to load outdoor view style, possibly due to invalid token "${o["x-mappedin-tiles-key"]}"`);return}let D=C?.error?.status;if(x&&C?.tile&&(D===401||D===403)){x.recoverFromTileAuthError(C?.sourceId);return}R.warn(C)};return l.onMapLibreEvent("error",S),l}catch(c){if(l)try{l.destroy()}catch{}if(s)try{s.remove()}catch{}R.warn("Failed to initialize outdoor view, falling back to indoor-only rendering:",c);let u=new Jt(n,r);return u.publish("outdoor-style-error",{error:c}),u}}else return new Jt(n,r)}export{gS as a,ni as b,yS as c,Ee as d,ga as e,oi as f,bS as g,Ci as h,Er as i,Yr as j,BE as k,Yn as l,Yy as m,zp as n,xv as o,us as p,Li as q,wt as r,ws as s,Qs as t,ai as u,Ca as v,Oh as w,Jt as x,Ny as y,ml as z,bA as A};
|