@mappedin/mappedin-js 6.24.1 → 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.
@@ -0,0 +1,1230 @@
1
+ import{$a as aa,$b as Fu,A as Mt,Aa as J,Ab as xu,Ac as Vr,Ba as Ur,Bb as Su,Bc as ie,Ca as ko,Cb as Mu,Cc as Ie,D as qs,Da as Tn,Db as Cu,Dc as se,E as dc,Eb as Eu,F as To,Fa as de,Fb as Sr,G as mr,Ga as Fe,Gb as Yo,H as Vt,Ha as Qe,Hb as Be,I as $s,Ia as sa,Ib as wu,Ja as Dt,Jb as Du,Ka as zo,Kb as Tu,La as Uo,Lb as ca,Ma as Ho,Mb as Pu,N as fr,Na as Qc,Nb as ua,O as Js,Oa as eu,Ob as ha,P as pc,Pa as xr,Pb as qo,Qa as tu,Qb as Iu,Ra as Hr,Rb as Ou,Sa as Pn,Sb as da,Ta as ru,Tb as Lu,Ub as Au,V as Ks,Va as nu,Vb as Ru,Wa as Wo,Wb as pa,X as Qs,Xa as ou,Xb as _u,Ya as iu,Yb as Mr,Za as su,Zb as $o,_ as mc,_a as au,_b as ma,aa as Hc,ab as lu,ac as Bu,ba as Wc,bb as cu,bc as fa,c as lc,cb as Wr,cc as Nu,da as Dn,db as uu,dc as An,e as A,ea as Vc,eb as Vo,ec as ga,f as Rr,fb as la,fc as Jo,g as bn,gb as hu,gc as Gu,h as Ht,hb as jo,hc as ya,i as Co,ib as In,ic as ku,j as Y,ja as No,jb as Tt,jc as zu,k as js,kb as Zo,kc as Uu,l as Eo,lb as Qt,lc as Hu,m as Zs,ma as Go,mb as er,n as wo,na as Kt,nb as du,nc as Wu,o as pr,oa as jc,oc as Vu,p as cc,pa as Zc,pc as ju,qa as Xc,qb as pu,qc as Zu,ra as Yc,rb as Xo,rc as Xu,s as uc,sa as qc,sb as mu,sc as gt,t as Xs,ta as $c,tb as On,tc as Yu,u as Do,ua as vr,ub as fu,uc as Ce,va as Jc,vb as gu,vc as qu,w as Ys,wa as Kc,wb as Ln,wc as Ko,x as Wt,xa as oa,xb as yu,xc as yt,ya as ia,yb as bu,yc as $u,z as hc,za as Ye,zb as vu,zc as tr}from"./chunk-I5GYZORE.js";import{a as We}from"./chunk-R4YYWOA4.js";import{$ as Z,A as Sc,Aa as Ro,Ba as Br,C as gr,Da as qt,E as Mc,F as he,G as Sn,H as yr,I as Lo,Ia as Oc,J as br,Ja as Lc,K as _r,Ka as _o,La as Ac,M as Cc,Ma as Rc,N as k,Na as Nr,O as U,Oa as Gr,P as Zt,Pa as kr,Q as I,Qa as _e,Ra as zr,Sa as _c,Ta as wn,Va as $t,W as Ec,Wa as Fc,X as Mn,Y as ye,Z as Cn,_ as wc,a as f,aa as Ct,b as E,ba as He,c as Po,ca as G,d as Io,da as Dc,db as Fo,e as fc,ea as Te,f as jt,fa as Pe,g as gc,ga as Et,gb as na,h as yc,ha as Xt,hb as Bo,i as vn,ia as W,ib as Bc,j as ea,ja as Yt,kb as Nc,l as ta,la as Ke,ma as Tc,mb as Gc,na as ra,o as xn,oa as Ao,ob as Jt,pa as wt,qb as kc,r as bc,rb as zc,s as vc,t as xc,tb as Uc,u as Oo,ua as Pc,wa as En,xa as Q,ya as Ic,za as Fr}from"./chunk-CO4ZOCZ7.js";import{b as ft,c as Dm,d as yn}from"./chunk-PWEV3AFA.js";var id=ft((Qa,el)=>{f();(function(n,e){typeof Qa=="object"&&typeof el<"u"?el.exports=e():typeof define=="function"&&define.amd?define(e):(n=n||self).RBush=e()})(Qa,function(){"use strict";function n(p,m,g,v,x){(function S(C,T,w,D,P){for(;D>w;){if(D-w>600){var O=D-w+1,L=T-w+1,_=Math.log(O),H=.5*Math.exp(2*_/3),V=.5*Math.sqrt(_*H*(O-H)/O)*(L-O/2<0?-1:1),B=Math.max(w,Math.floor(T-L*H/O+V)),ee=Math.min(D,Math.floor(T+(O-L)*H/O+V));S(C,T,B,ee,P)}var fe=C[T],$=w,N=D;for(e(C,w,T),P(C[D],fe)>0&&e(C,w,D);$<N;){for(e(C,$,N),$++,N--;P(C[$],fe)<0;)$++;for(;P(C[N],fe)>0;)N--}P(C[w],fe)===0?e(C,w,N):e(C,++N,D),N<=T&&(w=N+1),T<=N&&(D=N-1)}})(p,m,g||0,v||p.length-1,x||t)}function e(p,m,g){var v=p[m];p[m]=p[g],p[g]=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,g){if(!g)return m.indexOf(p);for(var v=0;v<m.length;v++)if(g(p,m[v]))return v;return-1}function i(p,m){s(p,0,p.children.length,m,p)}function s(p,m,g,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<g;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 h(p){return p.maxX-p.minX+(p.maxY-p.minY)}function d(p,m){return p.minX<=m.minX&&p.minY<=m.minY&&m.maxX<=p.maxX&&m.maxY<=p.maxY}function y(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,g,v,x){for(var S=[m,g];S.length;)if(!((g=S.pop())-(m=S.pop())<=v)){var C=m+Math.ceil((g-m)/v/2)*v;n(p,C,m,g,x),S.push(m,C,C,g)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(p){var m=this.data,g=[];if(!y(p,m))return g;for(var v=this.toBBox,x=[];m;){for(var S=0;S<m.children.length;S++){var C=m.children[S],T=m.leaf?v(C):C;y(p,T)&&(m.leaf?g.push(C):d(p,T)?this._all(C,g):x.push(C))}m=x.pop()}return g},r.prototype.collides=function(p){var m=this.data;if(!y(p,m))return!1;for(var g=[];m;){for(var v=0;v<m.children.length;v++){var x=m.children[v],S=m.leaf?this.toBBox(x):x;if(y(p,S)){if(m.leaf||d(p,S))return!0;g.push(x)}}m=g.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 g=this._build(p.slice(),0,p.length-1,0);if(this.data.children.length)if(this.data.height===g.height)this._splitRoot(this.data,g);else{if(this.data.height<g.height){var v=this.data;this.data=g,g=v}this._insert(g,this.data.height-g.height-1,!0)}else this.data=g;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 g,v,x,S=this.data,C=this.toBBox(p),T=[],w=[];S||T.length;){if(S||(S=T.pop(),v=T[T.length-1],g=w.pop(),x=!0),S.leaf){var D=o(p,S.children,m);if(D!==-1)return S.children.splice(D,1),T.push(S),this._condense(T),this}x||S.leaf||!d(S,C)?v?(g++,S=v.children[g],x=!1):S=null:(T.push(S),w.push(g),g=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 g=[];p;)p.leaf?m.push.apply(m,p.children):g.push.apply(g,p.children),p=g.pop();return m},r.prototype._build=function(p,m,g,v){var x,S=g-m+1,C=this._maxEntries;if(S<=C)return i(x=b(p.slice(m,g+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 T=Math.ceil(S/C),w=T*Math.ceil(Math.sqrt(C));M(p,m,g,w,this.compareMinX);for(var D=m;D<=g;D+=w){var P=Math.min(D+w-1,g);M(p,D,P,T,this.compareMinY);for(var O=D;O<=P;O+=T){var L=Math.min(O+T-1,P);x.children.push(this._build(p,O,L,v-1))}}return i(x,this.toBBox),x},r.prototype._chooseSubtree=function(p,m,g,v){for(;v.push(m),!m.leaf&&v.length-1!==g;){for(var x=1/0,S=1/0,C=void 0,T=0;T<m.children.length;T++){var w=m.children[T],D=u(w),P=(O=p,L=w,(Math.max(L.maxX,O.maxX)-Math.min(L.minX,O.minX))*(Math.max(L.maxY,O.maxY)-Math.min(L.minY,O.minY))-D);P<S?(S=P,x=D<x?D:x,C=w):P===S&&D<x&&(x=D,C=w)}m=C||m.children[0]}var O,L;return m},r.prototype._insert=function(p,m,g){var v=g?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 g=p[m],v=g.children.length,x=this._minEntries;this._chooseSplitAxis(g,x,v);var S=this._chooseSplitIndex(g,x,v),C=b(g.children.splice(S,g.children.length-S));C.height=g.height,C.leaf=g.leaf,i(g,this.toBBox),i(C,this.toBBox),m?p[m-1].children.push(C):this._splitRoot(g,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,g){for(var v,x,S,C,T,w,D,P=1/0,O=1/0,L=m;L<=g-m;L++){var _=s(p,0,L,this.toBBox),H=s(p,L,g,this.toBBox),V=(x=_,S=H,C=void 0,T=void 0,w=void 0,D=void 0,C=Math.max(x.minX,S.minX),T=Math.max(x.minY,S.minY),w=Math.min(x.maxX,S.maxX),D=Math.min(x.maxY,S.maxY),Math.max(0,w-C)*Math.max(0,D-T)),B=u(_)+u(H);V<P?(P=V,v=L,O=B<O?B:O):V===P&&B<O&&(O=B,v=L)}return v||g-m},r.prototype._chooseSplitAxis=function(p,m,g){var v=p.leaf?this.compareMinX:l,x=p.leaf?this.compareMinY:c;this._allDistMargin(p,m,g,v)<this._allDistMargin(p,m,g,x)&&p.children.sort(v)},r.prototype._allDistMargin=function(p,m,g,v){p.children.sort(v);for(var x=this.toBBox,S=s(p,0,m,x),C=s(p,g-m,g,x),T=h(S)+h(C),w=m;w<g-m;w++){var D=p.children[w];a(S,p.leaf?x(D):D),T+=h(S)}for(var P=g-m-1;P>=m;P--){var O=p.children[P];a(C,p.leaf?x(O):O),T+=h(C)}return T},r.prototype._adjustParentBBoxes=function(p,m,g){for(var v=g;v>=0;v--)a(m[v],p)},r.prototype._condense=function(p){for(var m=p.length-1,g=void 0;m>=0;m--)p[m].children.length===0?m>0?(g=p[m-1].children).splice(g.indexOf(p[m]),1):this.clear():i(p[m],this.toBBox)},r})});var il=ft(F=>{"use strict";f();Object.defineProperty(F,"__esModule",{value:!0});F.earthRadius=63710088e-1;F.factors={centimeters:F.earthRadius*100,centimetres:F.earthRadius*100,degrees:F.earthRadius/111325,feet:F.earthRadius*3.28084,inches:F.earthRadius*39.37,kilometers:F.earthRadius/1e3,kilometres:F.earthRadius/1e3,meters:F.earthRadius,metres:F.earthRadius,miles:F.earthRadius/1609.344,millimeters:F.earthRadius*1e3,millimetres:F.earthRadius*1e3,nauticalmiles:F.earthRadius/1852,radians:1,yards:F.earthRadius*1.0936};F.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/F.earthRadius,yards:1.0936133};F.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 nr(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}F.feature=nr;function cg(n,e,t){switch(t===void 0&&(t={}),n){case"Point":return tl(e).geometry;case"LineString":return nl(e).geometry;case"Polygon":return rl(e).geometry;case"MultiPoint":return ad(e).geometry;case"MultiLineString":return sd(e).geometry;case"MultiPolygon":return ld(e).geometry;default:throw new Error(n+" is invalid")}}F.geometry=cg;function tl(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(!Fi(n[0])||!Fi(n[1]))throw new Error("coordinates must contain numbers");var r={type:"Point",coordinates:n};return nr(r,e,t)}F.point=tl;function ug(n,e,t){return t===void 0&&(t={}),Bi(n.map(function(r){return tl(r,e)}),t)}F.points=ug;function rl(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 nr(a,e,t)}F.polygon=rl;function hg(n,e,t){return t===void 0&&(t={}),Bi(n.map(function(r){return rl(r,e)}),t)}F.polygons=hg;function nl(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 nr(r,e,t)}F.lineString=nl;function dg(n,e,t){return t===void 0&&(t={}),Bi(n.map(function(r){return nl(r,e)}),t)}F.lineStrings=dg;function Bi(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}F.featureCollection=Bi;function sd(n,e,t){t===void 0&&(t={});var r={type:"MultiLineString",coordinates:n};return nr(r,e,t)}F.multiLineString=sd;function ad(n,e,t){t===void 0&&(t={});var r={type:"MultiPoint",coordinates:n};return nr(r,e,t)}F.multiPoint=ad;function ld(n,e,t){t===void 0&&(t={});var r={type:"MultiPolygon",coordinates:n};return nr(r,e,t)}F.multiPolygon=ld;function pg(n,e,t){t===void 0&&(t={});var r={type:"GeometryCollection",geometries:n};return nr(r,e,t)}F.geometryCollection=pg;function mg(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}F.round=mg;function cd(n,e){e===void 0&&(e="kilometers");var t=F.factors[e];if(!t)throw new Error(e+" units is invalid");return n*t}F.radiansToLength=cd;function ol(n,e){e===void 0&&(e="kilometers");var t=F.factors[e];if(!t)throw new Error(e+" units is invalid");return n/t}F.lengthToRadians=ol;function fg(n,e){return ud(ol(n,e))}F.lengthToDegrees=fg;function gg(n){var e=n%360;return e<0&&(e+=360),e}F.bearingToAzimuth=gg;function ud(n){var e=n%(2*Math.PI);return e*180/Math.PI}F.radiansToDegrees=ud;function yg(n){var e=n%360;return e*Math.PI/180}F.degreesToRadians=yg;function bg(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 cd(ol(n,e),t)}F.convertLength=bg;function vg(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=F.areaFactors[e];if(!r)throw new Error("invalid original units");var o=F.areaFactors[t];if(!o)throw new Error("invalid final units");return n/r*o}F.convertArea=vg;function Fi(n){return!isNaN(n)&&n!==null&&!Array.isArray(n)}F.isNumber=Fi;function xg(n){return!!n&&n.constructor===Object}F.isObject=xg;function Sg(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(!Fi(e))throw new Error("bbox must only contain numbers")})}F.validateBBox=Sg;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")}F.validateId=Mg});var fd=ft(be=>{"use strict";f();Object.defineProperty(be,"__esModule",{value:!0});var Le=il();function qn(n,e,t){if(n!==null)for(var r,o,i,s,a,l,c,u=0,h=0,d,y=n.type,b=y==="FeatureCollection",M=y==="Feature",p=b?n.features.length:1,m=0;m<p;m++){c=b?n.features[m].geometry:M?n.geometry:n,d=c?c.type==="GeometryCollection":!1,a=d?c.geometries.length:1;for(var g=0;g<a;g++){var v=0,x=0;if(s=d?c.geometries[g]: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,h,m,v,x)===!1)return!1;h++,v++;break;case"LineString":case"MultiPoint":for(r=0;r<l.length;r++){if(e(l[r],h,m,v,x)===!1)return!1;h++,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],h,m,v,x)===!1)return!1;h++}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],h,m,v,x)===!1)return!1;h++}x++}v++}break;case"GeometryCollection":for(r=0;r<s.geometries.length;r++)if(qn(s.geometries[r],e,t)===!1)return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function Cg(n,e,t,r){var o=t;return qn(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 hd(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 Eg(n,e,t){var r=t;return hd(n,function(o,i){i===0&&t===void 0?r=o:r=e(r,o,i)}),r}function dd(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 wg(n,e,t){var r=t;return dd(n,function(o,i){i===0&&t===void 0?r=o:r=e(r,o,i)}),r}function Dg(n){var e=[];return qn(n,function(t){e.push(t)}),e}function sl(n,e){var t,r,o,i,s,a,l,c,u,h,d=0,y=n.type==="FeatureCollection",b=n.type==="Feature",M=y?n.features.length:1;for(t=0;t<M;t++){for(a=y?n.features[t].geometry:b?n.geometry:n,c=y?n.features[t].properties:b?n.properties:{},u=y?n.features[t].bbox:b?n.bbox:void 0,h=y?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,d,c,u,h)===!1)return!1;continue}switch(i.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":{if(e(i,d,c,u,h)===!1)return!1;break}case"GeometryCollection":{for(r=0;r<i.geometries.length;r++)if(e(i.geometries[r],d,c,u,h)===!1)return!1;break}default:throw new Error("Unknown Geometry Type")}}d++}}function Tg(n,e,t){var r=t;return sl(n,function(o,i,s,a,l){i===0&&t===void 0?r=o:r=e(r,o,i,s,a,l)}),r}function Ni(n,e){sl(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(Le.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],h={type:l,coordinates:u};if(e(Le.feature(h,o),r,c)===!1)return!1}})}function Pg(n,e,t){var r=t;return Ni(n,function(o,i,s){i===0&&s===0&&t===void 0?r=o:r=e(r,o,i,s)}),r}function pd(n,e){Ni(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(qn(t,function(h,d,y,b,M){if(a===void 0||r>l||b>c||M>u){a=h,l=r,c=b,u=M,i=0;return}var p=Le.lineString([a,h],t.properties);if(e(p,r,o,M,i)===!1)return!1;i++,a=h})===!1)return!1}}})}function Ig(n,e,t){var r=t,o=!1;return pd(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 md(n,e){if(!n)throw new Error("geojson is required");Ni(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(Le.lineString(s[a],t.properties),r,o,a)===!1)return!1;break}}})}function Og(n,e,t){var r=t;return md(n,function(o,i,s,a){i===0&&t===void 0?r=o:r=e(r,o,i,s,a)}),r}function Lg(n,e){if(e=e||{},!Le.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),Le.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),Le.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),Le.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),Le.lineString([l[r][o][i],l[r][o][i+1]],s,e)}throw new Error("geojson is invalid")}function Ag(n,e){if(e=e||{},!Le.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 Le.point(l,s,e);case"MultiPoint":return r<0&&(r=l.length+r),Le.point(l[r],s,e);case"LineString":return i<0&&(i=l.length+i),Le.point(l[i],s,e);case"Polygon":return o<0&&(o=l.length+o),i<0&&(i=l[o].length+i),Le.point(l[o][i],s,e);case"MultiLineString":return r<0&&(r=l.length+r),i<0&&(i=l[r].length+i),Le.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),Le.point(l[r][o][i],s,e)}throw new Error("geojson is invalid")}be.coordAll=Dg;be.coordEach=qn;be.coordReduce=Cg;be.featureEach=dd;be.featureReduce=wg;be.findPoint=Ag;be.findSegment=Lg;be.flattenEach=Ni;be.flattenReduce=Pg;be.geomEach=sl;be.geomReduce=Tg;be.lineEach=md;be.lineReduce=Og;be.propEach=hd;be.propReduce=Eg;be.segmentEach=pd;be.segmentReduce=Ig});var Sd=ft(q=>{"use strict";f();Object.defineProperty(q,"__esModule",{value:!0});var Ve=63710088e-1,ll={centimeters:Ve*100,centimetres:Ve*100,degrees:360/(2*Math.PI),feet:Ve*3.28084,inches:Ve*39.37,kilometers:Ve/1e3,kilometres:Ve/1e3,meters:Ve,metres:Ve,miles:Ve/1609.344,millimeters:Ve*1e3,millimetres:Ve*1e3,nauticalmiles:Ve/1852,radians:1,yards:Ve*1.0936},al={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 or(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 Rg(n,e,t={}){switch(n){case"Point":return cl(e).geometry;case"LineString":return hl(e).geometry;case"Polygon":return ul(e).geometry;case"MultiPoint":return yd(e).geometry;case"MultiLineString":return gd(e).geometry;case"MultiPolygon":return bd(e).geometry;default:throw new Error(n+" is invalid")}}function cl(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(!Gi(n[0])||!Gi(n[1]))throw new Error("coordinates must contain numbers");return or({type:"Point",coordinates:n},e,t)}function _g(n,e,t={}){return ki(n.map(r=>cl(r,e)),t)}function ul(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 or({type:"Polygon",coordinates:n},e,t)}function Fg(n,e,t={}){return ki(n.map(r=>ul(r,e)),t)}function hl(n,e,t={}){if(n.length<2)throw new Error("coordinates must be an array of two or more positions");return or({type:"LineString",coordinates:n},e,t)}function Bg(n,e,t={}){return ki(n.map(r=>hl(r,e)),t)}function ki(n,e={}){let t={type:"FeatureCollection"};return e.id&&(t.id=e.id),e.bbox&&(t.bbox=e.bbox),t.features=n,t}function gd(n,e,t={}){return or({type:"MultiLineString",coordinates:n},e,t)}function yd(n,e,t={}){return or({type:"MultiPoint",coordinates:n},e,t)}function bd(n,e,t={}){return or({type:"MultiPolygon",coordinates:n},e,t)}function Ng(n,e,t={}){return or({type:"GeometryCollection",geometries:n},e,t)}function Gg(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 vd(n,e="kilometers"){let t=ll[e];if(!t)throw new Error(e+" units is invalid");return n*t}function dl(n,e="kilometers"){let t=ll[e];if(!t)throw new Error(e+" units is invalid");return n/t}function kg(n,e){return xd(dl(n,e))}function zg(n){let e=n%360;return e<0&&(e+=360),e}function Ug(n){return n=n%360,n>180?n-360:n<-180?n+360:n}function xd(n){return n%(2*Math.PI)*180/Math.PI}function Hg(n){return n%360*Math.PI/180}function Wg(n,e="kilometers",t="kilometers"){if(!(n>=0))throw new Error("length must be a positive number");return vd(dl(n,e),t)}function Vg(n,e="meters",t="kilometers"){if(!(n>=0))throw new Error("area must be a positive number");let r=al[e];if(!r)throw new Error("invalid original units");let o=al[t];if(!o)throw new Error("invalid final units");return n/r*o}function Gi(n){return!isNaN(n)&&n!==null&&!Array.isArray(n)}function jg(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function Zg(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(!Gi(e))throw new Error("bbox must only contain numbers")})}function Xg(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")}q.areaFactors=al;q.azimuthToBearing=Ug;q.bearingToAzimuth=zg;q.convertArea=Vg;q.convertLength=Wg;q.degreesToRadians=Hg;q.earthRadius=Ve;q.factors=ll;q.feature=or;q.featureCollection=ki;q.geometry=Rg;q.geometryCollection=Ng;q.isNumber=Gi;q.isObject=jg;q.lengthToDegrees=kg;q.lengthToRadians=dl;q.lineString=hl;q.lineStrings=Bg;q.multiLineString=gd;q.multiPoint=yd;q.multiPolygon=bd;q.point=cl;q.points=_g;q.polygon=ul;q.polygons=Fg;q.radiansToDegrees=xd;q.radiansToLength=vd;q.round=Gg;q.validateBBox=Zg;q.validateId=Xg});var Dd=ft(ve=>{"use strict";f();Object.defineProperty(ve,"__esModule",{value:!0});var Ae=Sd();function $n(n,e,t){if(n!==null)for(var r,o,i,s,a,l,c,u=0,h=0,d,y=n.type,b=y==="FeatureCollection",M=y==="Feature",p=b?n.features.length:1,m=0;m<p;m++){c=b?n.features[m].geometry:M?n.geometry:n,d=c?c.type==="GeometryCollection":!1,a=d?c.geometries.length:1;for(var g=0;g<a;g++){var v=0,x=0;if(s=d?c.geometries[g]: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,h,m,v,x)===!1)return!1;h++,v++;break;case"LineString":case"MultiPoint":for(r=0;r<l.length;r++){if(e(l[r],h,m,v,x)===!1)return!1;h++,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],h,m,v,x)===!1)return!1;h++}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],h,m,v,x)===!1)return!1;h++}x++}v++}break;case"GeometryCollection":for(r=0;r<s.geometries.length;r++)if($n(s.geometries[r],e,t)===!1)return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function Yg(n,e,t,r){var o=t;return $n(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 Md(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 qg(n,e,t){var r=t;return Md(n,function(o,i){i===0&&t===void 0?r=o:r=e(r,o,i)}),r}function Cd(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 $g(n,e,t){var r=t;return Cd(n,function(o,i){i===0&&t===void 0?r=o:r=e(r,o,i)}),r}function Jg(n){var e=[];return $n(n,function(t){e.push(t)}),e}function pl(n,e){var t,r,o,i,s,a,l,c,u,h,d=0,y=n.type==="FeatureCollection",b=n.type==="Feature",M=y?n.features.length:1;for(t=0;t<M;t++){for(a=y?n.features[t].geometry:b?n.geometry:n,c=y?n.features[t].properties:b?n.properties:{},u=y?n.features[t].bbox:b?n.bbox:void 0,h=y?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,d,c,u,h)===!1)return!1;continue}switch(i.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":{if(e(i,d,c,u,h)===!1)return!1;break}case"GeometryCollection":{for(r=0;r<i.geometries.length;r++)if(e(i.geometries[r],d,c,u,h)===!1)return!1;break}default:throw new Error("Unknown Geometry Type")}}d++}}function Kg(n,e,t){var r=t;return pl(n,function(o,i,s,a,l){i===0&&t===void 0?r=o:r=e(r,o,i,s,a,l)}),r}function zi(n,e){pl(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(Ae.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],h={type:l,coordinates:u};if(e(Ae.feature.call(void 0,h,o),r,c)===!1)return!1}})}function Qg(n,e,t){var r=t;return zi(n,function(o,i,s){i===0&&s===0&&t===void 0?r=o:r=e(r,o,i,s)}),r}function Ed(n,e){zi(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($n(t,function(h,d,y,b,M){if(a===void 0||r>l||b>c||M>u){a=h,l=r,c=b,u=M,i=0;return}var p=Ae.lineString.call(void 0,[a,h],t.properties);if(e(p,r,o,M,i)===!1)return!1;i++,a=h})===!1)return!1}}})}function ey(n,e,t){var r=t,o=!1;return Ed(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 wd(n,e){if(!n)throw new Error("geojson is required");zi(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(Ae.lineString.call(void 0,s[a],t.properties),r,o,a)===!1)return!1;break}}})}function ty(n,e,t){var r=t;return wd(n,function(o,i,s,a){i===0&&t===void 0?r=o:r=e(r,o,i,s,a)}),r}function ry(n,e){if(e=e||{},!Ae.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),Ae.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),Ae.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),Ae.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),Ae.lineString.call(void 0,[l[r][o][i],l[r][o][i+1]],s,e)}throw new Error("geojson is invalid")}function ny(n,e){if(e=e||{},!Ae.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 Ae.point.call(void 0,l,s,e);case"MultiPoint":return r<0&&(r=l.length+r),Ae.point.call(void 0,l[r],s,e);case"LineString":return i<0&&(i=l.length+i),Ae.point.call(void 0,l[i],s,e);case"Polygon":return o<0&&(o=l.length+o),i<0&&(i=l[o].length+i),Ae.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),Ae.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),Ae.point.call(void 0,l[r][o][i],s,e)}throw new Error("geojson is invalid")}ve.coordAll=Jg;ve.coordEach=$n;ve.coordReduce=Yg;ve.featureEach=Cd;ve.featureReduce=$g;ve.findPoint=ny;ve.findSegment=ry;ve.flattenEach=zi;ve.flattenReduce=Qg;ve.geomEach=pl;ve.geomReduce=Kg;ve.lineEach=wd;ve.lineReduce=ty;ve.propEach=Md;ve.propReduce=qg;ve.segmentEach=Ed;ve.segmentReduce=ey});var Pd=ft(Ui=>{"use strict";f();Object.defineProperty(Ui,"__esModule",{value:!0});var oy=Dd();function Td(n,e={}){if(n.bbox!=null&&e.recompute!==!0)return n.bbox;let t=[1/0,1/0,-1/0,-1/0];return oy.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 iy=Td;Ui.bbox=Td;Ui.default=iy});var Rd=ft(($1,ml)=>{f();var bt=id(),Od=il(),Ld=fd(),Kr=Pd().default,sy=Ld.featureEach,Y1=Ld.coordEach,q1=Od.polygon,Id=Od.featureCollection;function Ad(n){var e=new bt(n);return e.insert=function(t){if(t.type!=="Feature")throw new Error("invalid feature");return t.bbox=t.bbox?t.bbox:Kr(t),bt.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:Kr(o),r.push(o)}):sy(t,function(o){if(o.type!=="Feature")throw new Error("invalid features");o.bbox=o.bbox?o.bbox:Kr(o),r.push(o)}),bt.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:Kr(t),bt.prototype.remove.call(this,t,r)},e.clear=function(){return bt.prototype.clear.call(this)},e.search=function(t){var r=bt.prototype.search.call(this,this.toBBox(t));return Id(r)},e.collides=function(t){return bt.prototype.collides.call(this,this.toBBox(t))},e.all=function(){var t=bt.prototype.all.call(this);return Id(t)},e.toJSON=function(){return bt.prototype.toJSON.call(this)},e.fromJSON=function(t){return bt.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=Kr(t);else if(t.type==="FeatureCollection")r=Kr(t);else throw new Error("invalid geojson");return{minX:r[0],minY:r[1],maxX:r[2],maxY:r[3]}},e}ml.exports=Ad;ml.exports.default=Ad});var ji=ft((bw,Vi)=>{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,h=l.x-c,d=l.y-u;if(h!==0||d!==0){var y=((s.x-c)*h+(s.y-u)*d)/(h*h+d*d);y>1?(c=l.x,u=l.y):y>0&&(c+=h*y,u+=d*y)}return h=s.x-c,d=s.y-u,h*h+d*d}function t(s,a){for(var l=s[0],c=[l],u,h=1,d=s.length;h<d;h++)u=s[h],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 h=c,d,y=a+1;y<l;y++){var b=e(s[y],s[a],s[l]);b>h&&(d=y,h=b)}h>c&&(d-a>1&&r(s,a,d,c,u),u.push(s[d]),l-d>1&&r(s,d,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 Vi<"u"?(Vi.exports=i,Vi.exports.default=i):typeof self<"u"?self.simplify=i:window.simplify=i})()});var nm=ft((Ql,ec)=>{f();(function(n,e){typeof Ql=="object"&&typeof ec<"u"?ec.exports=e():typeof define=="function"&&define.amd?define(e):(n=n||self,n.TinyQueue=e())})(Ql,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],h=c+1;if(h<this.length&&s(i[h],u)<0&&(c=h,u=i[h]),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 im=ft((nL,tc)=>{"use strict";f();var zs=nm();zs.default&&(zs=zs.default);tc.exports=om;tc.exports.default=om;function om(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,h=Math.min(c,u),d=h/2;if(h===0){var y=[r,o];return y.distance=0,y}for(var b=new zs(void 0,yv),M=r;M<i;M+=h)for(var p=o;p<s;p+=h)b.push(new hr(M+d,p+d,d,n));var m=vv(n),g=new hr(r+c/2,o+u/2,0,n);g.d>m.d&&(m=g);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)&&(d=x.h/2,b.push(new hr(x.x-d,x.y-d,d,n)),b.push(new hr(x.x+d,x.y-d,d,n)),b.push(new hr(x.x-d,x.y+d,d,n)),b.push(new hr(x.x+d,x.y+d,d,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 yv(n,e){return e.max-n.max}function hr(n,e,t,r){this.x=n,this.y=e,this.h=t,this.d=bv(n,e,r),this.max=this.d+this.h*Math.SQRT2}function bv(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],h=s[c];u[1]>e!=h[1]>e&&n<(h[0]-u[0])*(e-u[1])/(h[1]-u[1])+u[0]&&(r=!r),o=Math.min(o,xv(n,e,u,h))}return o===0?0:(r?1:-1)*Math.sqrt(o)}function vv(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 hr(o[0][0],o[0][1],0,n):new hr(t/e,r/e,0,n)}function xv(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 Ju="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 ba=class n extends Error{name="AssertionError";constructor(e){super(e),Error.captureStackTrace&&Error.captureStackTrace(this,n)}};function Ku(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||ba,o=new r(t);throw e?.captureStackTrace!==!1&&Error.captureStackTrace&&Error.captureStackTrace(o,Ku),o}}function va(n,e,t){if(Ku(n),n?.type!==e){let r=`Expected type ${e} but got ${n?.type}`;throw new Error(t??r)}}f();var Qo=class{backgroundAlpha=1;backgroundColor=new G;width=0;height=0;options={};renderer;constructor(e){try{this.options=e,mc()?(this.renderer={setSize:()=>{},state:{reset:()=>{}},properties:{get:()=>{}},getSize:()=>({width:window.innerWidth,height:innerHeight}),getDrawingBufferSize:()=>({width:window.innerWidth,height:innerHeight}),getClearAlpha:()=>1,getClearColor:()=>new G,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 Uc({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 G(e.backgroundColor??"#ffffff"),this.backgroundAlpha=e.backgroundAlpha??1}catch(t){A.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(de.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){E.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 ei=class{type;event;constructor(e){this.type=0,this.event=e}get timestamp(){return this.event.timeStamp}},ti=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 Sa(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 se&&r.type==="group-container"&&r.visible&&r.components[0]&&e.add(r)}return Array.from(e)}f();function Ma(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 Rn=class extends Y{raycaster=new Jt;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 jc(new Kt(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=Co(e=>{e&&(e.preventDefault(),this.updateInteractionStateIfPanning(e),(e.pointerType!=="touch"||e.pointerType===void 0&&this.hasTouched)&&this.handleHover(e),this.handleCursor())},E.env.NODE_ENV==="test"?0:16,{leading:!0});tapsControl=new ti;getThreeDIntersectsFromXY(e){this.raycaster.setFromCamera(e,this.camera),this.raycaster.layers.enable(de.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=Sa(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 ei(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=Om(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 ie&&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 U;intersect(e){let{offsetX:t,offsetY:r}=e,o=[t,r],s=this._quadtree.queryPoint(o).filter(g=>g.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=[],h;for(let g of a){if(g.object.name==="worldPlane"){h??=g;continue}if(g.object.name==="hole-fill-mesh"||!(g.object instanceof W)||g.object.material?.colorWrite===!1)continue;let v=g?.instanceId??g?.batchId,x=v!=null&&g?.object.userData.entities?g.object.userData.entities[v]:g.object.userData?.entityId,S=x?this.coreState.geometry3DMap.get(x):void 0;if(S instanceof J){let T=S.components[0];if(T instanceof ie&&T.pointerEventsPassThrough)continue}let C=g.object.userData?.entityId;if(C){let w=this.coreState.geometry3DMap.get(C)?.components[7];if(w?.verticalOffset!=null&&g.point.z>w.verticalOffset)continue}u.push(g),g.object.material.depthTest===!1?l.push(g):c.push(g)}let d=l[0]??c[0]??void 0,y=d?.point??h?.point,b,M;if(d!=null){let g=d?.instanceId??d?.batchId;b=g!=null&&d?.object.userData.entities?this.coreState.geometry3DMap.get(d?.object.userData.entities[g]):this.coreState.geometry3DMap.get(d?.object.userData.entityId),b?.components[2]&&(M=b)}let p=Sa(u),m=[];for(let g of s)if(g?.userData?.entityId==="watermark")m.push({id:"watermark"});else{let v=this.coreState.geometry2DMap.get(g?.userData.entityId);v&&m.push(v)}return Lm(m),{entity2D:m,entity3D:M,position:y,groupContainers:p.length>0?p:void 0}}detect3DEntityHover(e){return this.state.lastHover!==e&&(this.state.lastHover&&th(this.state.lastHover,!1,this.coreState),e&&th(e,!0,this.coreState)),this.state.hovered3DEntity!==e}detect3DContainerHover(e){return!Ma(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 th(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 Om(n,e,t){return e?"grabbing":n?"pointer":t?"grabbing":"grab"}function Lm(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 rh=new Z;function _n(n,e=!0){let t=new Xt,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 h=0;h<s;h++){let d=i+h;u[h*3]=a.array[d*3],u[h*3+1]=a.array[d*3+1],u[h*3+2]=a.array[d*3+2]}t.setAttribute("position",new Pe(u,3))}let l=r.getAttribute("normal");if(l){let u=new Float32Array(s*3);for(let h=0;h<s;h++){let d=i+h;u[h*3]=l.array[d*3],u[h*3+1]=l.array[d*3+1],u[h*3+2]=l.array[d*3+2]}t.setAttribute("normal",new Pe(u,3))}let c=r.getAttribute("uv");if(c){let u=new Float32Array(s*2);for(let h=0;h<s;h++){let d=i+h;u[h*2]=c.array[d*2],u[h*2+1]=c.array[d*2+1]}t.setAttribute("uv",new Pe(u,2))}if(r.index){let u=r.index,h=new Uint32Array(s);for(let d=0;d<s;d++)h[d]=u.array[i+d];t.setIndex(new Pe(h,1))}if(e&&n.instanceIndex!==-1&&Vr(n.mesh))try{n.mesh.getMatrixAt(n.instanceIndex,rh),t.applyMatrix4(rh)}catch(u){A.error(u)}return t}function nh(n,e,t){let r=_n(n,!1);if(!r||!Vr(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 oh(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 Fn=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 wt,s=new ye().setFromObject(this.#n.geometryScene);if(this.#s(this.#n.geometryScene,i,o),r){let a=new Bo(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-2YKLBCPY.js");this.#e=new e}return this.#e}#s=(e,t,r)=>{e.material&&e instanceof Ro&&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 wn({color:new G(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 I;return e.getWorldPosition(s),o.forEach(a=>{if(!a||!(a instanceof J))return;let l=a.components[1],c=a.components[2];if(!l.visible||l instanceof yt&&l.opacity===0||l instanceof In||l instanceof Zo)return;let h=`${c?.hover?l.hoverColor||this.#n.hoverColor:l.color}-${l.opacity}-${Number(l.visible)}`;i.has(h)||i.set(h,[]),i.get(h)?.push(a)}),i.forEach((a,l)=>{let[c,u,h]=l.split("-"),d=a.reduce((p,m)=>{if(m.type==="custom-geometry")return p;let g=m.components[0];if("geometry"in g&&g.geometry instanceof Xt){let v=g.geometry.clone();oh(v,s.z),p.push(v)}else if(g instanceof ie&&g.batchedProps){let v=_n(g);v&&(oh(v,s.z),p.push(v))}return p},[]);if(d.length===0){A.error("No geometries found for batched mesh");return}let y=this.#a(c,Number(u),e.material.transparent),b=We(d,!0);if(!b){A.error("No merged geometry found for batched mesh");return}let M=new W(b,y);M.position.copy(e.position),M.rotation.copy(e.rotation),M.scale.copy(e.scale),M.visible=!!h,this.#d(M.position,M.scale,M.rotation,M.quaternion),t.push(this.#h(M))}),t}#h=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.#d(o,a,i,s),u&&this.#r(u),r?.map&&t.type==="PlaneGeometry"&&(e.side=jt),e};#g=(e,t)=>{let r=new I,o=new I;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};#d=(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 Ct)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 Am="gray",Rm=.1,Bn=100,Ea=new gt.ClipperOffset;function Nn(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 wa(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 _m(n,e){Ea.Clear(),e/=2;let t=n.map(o=>({X:o.x*Bn,Y:o.y*Bn}));Ea.AddPath(t,gt.JoinType.jtMiter,gt.EndType.etClosedPolygon);let r=new gt.Paths;return Ea.Execute(r,e*Bn),r.length?r.map(i=>i.map(s=>({x:s.X/Bn,y:s.Y/Bn}))):[n]}function ni(n,e,t){let{color:r=Am,opacity:o=1,altitude:i=0,height:s=Rm}=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(y=>{let b=e(y[1],y[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=_m(c,n.properties?.style?.edgeOffset||0):c=[c];let u=[];for(let y of c){let b=new Gr,M=Nn(y),p=wa(y,M);b.moveTo(y[p].x,y[p].y);for(let x=1;x<M;x++){let S=(p+x)%M;b.lineTo(y[S].x,y[S].y)}let m=n.geometry.coordinates.slice(1);b.holes=m.map(x=>{let S=x.map(w=>e(w[1],w[0])),C=new Nr,T=Nn(S);C.moveTo(S[0].x,S[0].y);for(let w=1;w<T;w++)C.lineTo(S[w].x,S[w].y);return C});let g=Tn(t?.bevel,s),v=new kr(b,g);v.userData={style:{color:r,opacity:o},usedBevelSettings:g},u.push(v)}if(u.length===1)return u[0];let h=We(u);u.forEach(y=>y.dispose());let d=Tn(t?.bevel,s);return h.userData={style:{color:r,opacity:o},usedBevelSettings:d,_split:!0},h}f();var Fm="gray",Bm=.1;function oi(n,e,t){let{color:r=Fm,opacity:o=1,altitude:i=0,height:s=Bm}=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=Tn(t?.bevel,s),c=[];n.geometry.coordinates.forEach(h=>{let d=new Gr,y=h[0].map(g=>{let v=e(g[1],g[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=Nn(y),M=wa(y,b);d.moveTo(y[M].x,y[M].y);for(let g=1;g<b;g++){let v=(M+g)%b;d.lineTo(y[v].x,y[v].y)}let p=h.slice(1);d.holes=p.map(g=>{let v=g.map(C=>e(C[1],C[0])),x=new Nr,S=Nn(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 kr(d,l);c.push(m)});let u=We(c);return c.forEach(h=>h.dispose()),u.userData={style:{color:r,opacity:o},usedBevelSettings:l},u}f();var Ne=100,Nm=.22,Gm=.01;function ih(n,e,t={}){let{width:r=Nm,height:o=Gm,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 gt.ClipperOffset,h=n.geometry.coordinates.map(M=>M.map(p=>e(p[1],p[0])));u.AddPaths(h.map(M=>M.map(p=>({X:p.x*Ne,Y:p.y*Ne}))),gt.JoinType.jsMiter,gt.EndType.etOpenRound);let d=new gt.PolyTree;u.Execute(d,r/2*Ne);let y=[];for(let M of d.m_AllPolys){let p=new Gr;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/Ne,m[0].Y/Ne),m.slice(1).forEach(g=>p.lineTo(g.X/Ne,g.Y/Ne)),p.lineTo(m[0].X/Ne,m[0].Y/Ne),p.holes=M.m_Childs.map(g=>{let v=new Nr,x=g.m_polygon;return v.moveTo(x[0].X/Ne,x[0].Y/Ne),x.slice(1).forEach(S=>v.lineTo(S.X/Ne,S.Y/Ne)),v.lineTo(x[0].X/Ne,x[0].Y/Ne),v}),y.push(new kr(p,c))}let b=We(y);return b.translate(0,0,a||0),b.userData={style:{color:i,opacity:s}},u.Clear(),b}function km(n){let e=n[1],t=n[6],{opacity:r}=e??{},{texture:o,topTexture:i}=t??{};return`${r}${o?.path||""}${i?.path||""}`}var ii=class extends Y{state;convertTo3DMapPosition;constructor(e,t){super(),this.state=e,this.convertTo3DMapPosition=t}createEntityFromFeature(e,t,r){let o=new ie(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 J(o,new yt({...r,url:i?.image?.path,bevel:l}));if(r?.outline){let u=this.state.outlinesOptions?.darkenFactor;c.components[3]=new mu(bu(r.color,u))}return r?.focusable&&(c.components[4]=new Eu),i?.textures!=null&&Array.isArray(i.textures)&&i.textures.length>0?c.components[6]=new Sr(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 Sr(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 ie){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=We(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){A.warn(`Failed to create mesh for entity ${i}:`,s)}}return e}#e(e,t){let r;return e.geometry.type==="Polygon"?(r=ni(e,this.convertTo3DMapPosition,t),e.properties?.textures&&e.properties.textures.length>0&&vu(r,e.properties.textures,this.state.naturalBearing,this.convertTo3DMapPosition)):e.geometry.type==="MultiPolygon"?r=oi(e,this.convertTo3DMapPosition,t):e.geometry.type==="LineString"?r=Yu(e,this.convertTo3DMapPosition,t):e.geometry.type==="MultiLineString"&&(r=ih(e,this.convertTo3DMapPosition,t)),r}update(){for(let e of this.state.geometryGroupIdsToLoad.values()){let t=this.state.geometry3DMap.get(e);if(t instanceof Ie&&t.userData.dirty&&!t.userData.modelURL){try{this.populateEntityGroup(t.userData.entities3D)}catch(i){A.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 Hc({color:a.color}),c=new tr(s?.geometry,l);l.setColor(new G(a.color),new G(a.topColor??a.color)),c.renderOrder=de.GEOMETRY,c.frustumCulled=!0,c.userData.entityId=r.id,c.layers.enable(Fe.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=km(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=yu(o[i].entities,o[i].style);s.layers.enable(Fe.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 si=new ye,sh=new I;function zm(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 ai=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=On(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=zm(r,this.state.hoverColor);o.setColor(s[0],s[1]);let a=On(o);if(i.visible!==o.visible&&(o.visible=i.visible,o instanceof ie&&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*Wr(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(Fe.SHOULD_CAST_SHADOWS),this.transparencyChanged=!0):o.opacity===0&&l!==0&&(o.mesh.layers.enable(Fe.SHOULD_CAST_SHADOWS),this.transparencyChanged=!0),o.opacity=l}if(i.renderOrder!==o.renderOrder&&(o.renderOrder=i.renderOrder),a&&gu(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 ie&&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 ie){let c=r.components[6];c instanceof Sr&&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??Tt.color,s.outlineColor=o.hoverByPolygon?a:o.outlineColor??Tt.outlineColor,s.strokeColor=o.hoverByPolygon?a:o.strokeColor??Tt.strokeColor}else s.color=o.color??Tt.color,s.outlineColor=o.outlineColor??Tt.outlineColor,s.strokeColor=o.strokeColor??Tt.strokeColor;o.dirty=!1}else if(r?.type==="feature-collection"&&r?.userData.dirty===!1&&r?.userData.positionDirty){let o=r;if(o.userData.localCenter||(si.makeEmpty(),si.setFromObject(o),Ur(si)&&(si.getCenter(sh),o.userData.localCenter=sh.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 li=class extends Y{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(),su(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(),iu(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 R}from"zod";f();import{z as ci}from"zod";var jr=ci.object({type:ci.enum(["Point"]),coordinates:ci.array(ci.number()).min(2).max(3)});var Um=R.object({interactive:R.boolean().optional(),id:R.string().optional(),width:R.union([R.number(),R.string().regex(To),R.object({on:R.literal("zoom-level").optional(),input:R.array(R.number()).nonempty(),output:R.union([R.array(R.number()).nonempty(),R.array(R.string().regex(To)).nonempty()]),easing:R.string().optional()})]).optional(),accentColor:R.string().optional(),displayArrowsOnPath:R.boolean().optional(),animateArrowsOnPath:R.boolean().optional(),visibleThroughGeometry:R.boolean().optional(),dashed:R.boolean().optional(),dashDiscrete:R.boolean().optional(),dashCornerRadius:R.number().optional(),travelledEndFraction:R.number().optional(),travelledColor:R.string().optional(),smoothingTension:R.number().optional(),smoothingCornerRadius:R.number().optional(),dashLength:R.number().optional(),dashGap:R.number().optional(),dashRelativeToWidth:R.boolean().optional(),dashSize:R.number().optional(),gapSize:R.number().optional(),dashAbsolute:R.boolean().optional(),dashMeters:R.number().optional(),gapMeters:R.number().optional(),__EXPERIMENTAL_GEOMETRY:R.enum(["tube","ribbon"]).optional(),__EXPERIMENTAL_ENDCAP_EXTENSION:R.tuple([R.number(),R.number()]).optional(),__EXPERIMENTAL_BILLBOARDING:R.union([R.boolean(),R.number().min(0).max(90)]).optional(),__EXPERIMENTAL_BORDER:R.object({enabled:R.boolean(),color:R.string(),width:R.number().optional()}).optional(),__EXPERIMENTAL_PREVENT_SELF_OVERLAP:R.boolean().optional(),xrayStyle:R.object({color:R.string().optional(),tint:R.number().min(0).max(1).optional(),dithering:R.number().min(0).optional()}).optional()}),Hm=R.object({type:R.enum(["Feature"]),geometry:jr,properties:R.object({parentId:R.any().optional()})});function ah(n,e){R.object({features:R.array(Hm)}).parse(n),Um.parse(e)}function Wm(n,e){let t=$s(n);t&&e==="tube"&&(A.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"?Vt(o):Number(o)):mr(n)?r=[Vt(n)]:r=[n],{screenSpace:t,parsedOutputValues:r}}var Cr=class{type="path";mesh=new Ye;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;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;maxDashCount=0;dashCapWarned=!1;curveLength=0;dashDiscrete=!1;dashCornerRadius=1;smoothingTension=Dt.tension;smoothingCornerRadius=Dt.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.dashDiscrete=t?.dashDiscrete??this.dashDiscrete,this.dashCornerRadius=t?.dashCornerRadius??this.dashCornerRadius,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??Dt.tension,this.smoothingCornerRadius=t?.smoothingCornerRadius??Dt.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=Wm(this.width,this.isFlat?"ribbon":"tube");this.screenSpace=e.screenSpace,this.parsedOutputValues=e.parsedOutputValues}get isFlat(){return this.dashDiscrete||this.__EXPERIMENTAL_GEOMETRY==="ribbon"}setColor(){}setOpacity(){}set visible(e){this.mesh&&(this.mesh.visible=e)}get visible(){return this.mesh?this.mesh.visible:!1}position=new I;set complete(e){this.material&&(this.material.uniforms.complete.value=e,this.material.needsUpdate=!0)}};f();f();f();function Zr(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 lh=(n,e)=>(e-n+Math.PI)%(Math.PI*2)+Math.PI*2%(Math.PI*2)-Math.PI,ch=(n,e)=>new U(n.clientX-e.offsetLeft,n.clientY-e.offsetTop),Da=(n,e)=>Math.atan2(e.y-n.y,e.x-n.x),Gn=(n,e)=>Math.sqrt((e.y-n.y)**2+(e.x-n.x)**2),Ta=(n,e)=>new U((n.x+e.x)/2,(n.y+e.y)/2),Pa=n=>{let e=0,{wheelDelta:t,detail:r}=n;return t!==void 0?e=t:r!==void 0&&(e=-r),e};var ui=class{input1;input2;lastAngle;lastDistance;totalDistance;first;second;constructor(e,t){this.input1=e,this.input2=t,this.lastAngle=Da(e,t),this.lastDistance=Gn(e,t),this.totalDistance=0,this.first=e,this.second=t}update(e,t){let r=Gn(e,t);this.input1=e,this.input2=t;let o=Da(e,t);this.lastAngle=o,this.lastDistance=r,this.totalDistance+=(Gn(this.first,e)+Gn(this.second,t))/2,this.first=Ta(this.first,e),this.second=Ta(this.second,t)}};f();var kn=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 U(this.viewCoordinate.x,this.viewCoordinate.y);this.raycaster=this.raycaster||new Jt,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 U(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 ot={};Dm(ot,{BLOCK_MERCATOR_ZOOM_LEVEL:()=>jm,CLIPPING_RADIUS:()=>zn,CONTROL_OPTIONS:()=>Vm,DEFAULT_ANIMATION_DURATION:()=>Ra,DEFAULT_BEARING:()=>$m,DEFAULT_MAX_ZOOM_LEVEL:()=>Ym,DEFAULT_MIN_ZOOM_LEVEL:()=>Fa,DEFAULT_PITCH:()=>qm,DEFAULT_ZOOM_LEVEL:()=>Xm,EVENTS:()=>_a,MAPLIBRE_TILE_SIZE:()=>hi,MAX_LAT:()=>Oa,MAX_MERCATOR_ZOOM_LEVEL:()=>pi,MIN_LAT:()=>Ia,MIN_MERCATOR_ZOOM_LEVEL:()=>di,ROOM_MERCATOR_ZOOM_LEVEL:()=>Zm,TWO_PI:()=>La,WHEEL_ZOOM_MULTIPLIER:()=>Aa,ZRANGE:()=>Xr});f();var hi=512,Ia=-85.051129,Oa=85.051129,zn=1e4,Vm={chain:"chain",cancel:"cancel"},La=Math.PI*2,Xr=100,Aa=1e4,di=0,pi=24,jm=17,Zm=20,Ra=200,_a=["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"],Xm=18,Fa=12,Ym=22,qm=0,$m=0;f();f();var Er=class extends Error{};Er.prototype.name="InvalidTokenError";function Jm(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 Km(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 Jm(e)}catch{return atob(e)}}function uh(n,e){if(typeof n!="string")throw new Er("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 Er(`Invalid token specified: missing part #${t+1}`);let o;try{o=Km(r)}catch(i){throw new Er(`Invalid token specified: invalid base64 for part #${t+1} (${i.message})`)}try{return JSON.parse(o)}catch(i){throw new Er(`Invalid token specified: invalid json for part #${t+1} (${i.message})`)}}f();function qe(n,e,t,r){return(n<e||n>t)&&A.warn(r),Math.min(t,Math.max(e,n))}function iM(n){let e=uh(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 Pt(n){return n*(Math.PI/180)}function hh(n){return n*(180/Math.PI)}function mi(n,e){let t=Math.pow(10,e);return Math.sign(n)*Math.round(Math.abs(n)*t)/t}function dh(n,e){return(n%e+e)%e}function ph(n,e){let t=dh(n,Math.PI*2),r=dh(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 sM(){return typeof window<"u"&&window!==null}function mh(n,e){let[t,r]=n,[o,i]=e,s=Pt(o-t),a=Pt(i-r);return Math.sqrt(s*s+a*a)*Mt}function Oe(n,e){let[t,r]=n.map(u=>Pt(u)),[o,i]=e.map(u=>Pt(u)),s=i-r,l=(o-t)*Math.cos((r+i)/2),c=s;return Math.sqrt(l*l+c*c)*Mt}function Ba(n,e){return Math.sqrt(Math.pow(n.x-e.x,2)+Math.pow(n.y-e.y,2))}function fi(n){let e=Pt(n),r=Math.cos(e)*Mt;function o(s,a){let l=Pt(s[0]),c=Pt(s[1]),u=l*r,h=c*Mt;return a?(a.x=u,a.y=h,a):{x:u,y:h}}return{toCartesian:o,toGeographic:(s,a)=>{let l=hh(s/r),c=hh(a/Mt);return{lon:l,lat:c}}}}var aM=()=>{};var gi=!1,Qm=!1;var Yr=class extends Y{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 I(1/0,1/0),max:new I(-1/0,-1/0),center:new I(0,0,0),radius:1/0};minTilt=0;maxTilt=1.2;MOUSE_BUTTONS={ORBIT:Po.RIGHT,ZOOM:Po.MIDDLE,PAN:Po.LEFT};camera;scene;renderer;elevation;orbit;cameraPlane;raycaster=new Jt;rendererState;options;state=-1;intersection;viewState=null;tweens=new Map;clock=new Gc(!0);coords={mouse:new U,rotateStart:new U,rotateEnd:new U,rotateDelta:new U,panStart:new I,panCameraStart:new I,panEnd:new I,panDelta:new I,initialShiftPos:new U,initialPedestal:0,floorAnchor:new I};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 _a)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}=Uo(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}=Ho(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 I};isUserInteracting=()=>this.userInteracting;getPosition=()=>new I(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:g,end:v}=ph(this.getRotation(),e.rotation);l.rotation=g,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 h=l.zoom!==c.zoom,d=l.rotation!==c.rotation,y=l.tilt!==c.tilt,b=new pc(l).to(c,E.env.TESTING?0:t).onUpdate(g=>{this.setMulti({x:g.x,y:g.y,z:g.z},g.zoom,g.rotation,g.tilt)}).onComplete(()=>{this.completeTween(b),this.publish("multi-end",{zooming:h,rotating:d,tilting:y}),o&&o()}).onStart(()=>{this.state!==7&&(this.state=7,b.state=7,this.publish("multi-start",{zooming:h,rotating:d,tilting:y})),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(fr.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>zn&&(this.camera.near=t-zn,this.camera.far=t+zn):(this.camera.near=t/Xr,this.camera.far=t*Xr),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%La);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/Xr,this.camera.far=t*Xr,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)=>aa(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=gi?2e3:1e10,t=gi?100:1,r=new _e(e,e,t,t),o=new Te({color:0,wireframe:gi,visible:gi}),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 ui(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 U(this.touch.touches[0].x,this.touch.touches[0].y),i=new U(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 U(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.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 U(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 kn(this.touch.touches[0],this.camera,this.cameraPlane),this.touch.anchor2=new kn(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.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 U(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-Pa(e)*t/Aa*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 Ct;t.setFromRotationMatrix(e,"ZYX");let r=(e.elements[14]-this.cameraPlane.position.z)/Math.cos(t.x),o=t.z,i=new I(0,0,1);i.applyEuler(t),i.setLength(r);let s=new I;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,h=i.y-o.y,d=Math.atan2(h,u),y=a.x-s.x,b=a.y-s.y,M=Math.atan2(b,y),p=lh(d,M),m=new Z;m.makeRotationZ(-p);let g=m.clone();g.multiply(e.snapHolderMatrix);let v=(xo,z,oe)=>xo.elements[(z-1)*4+oe-1],x=v(r,1,1)*v(g,1,1)-l.x*v(r,3,4)*v(g,3,1),S=v(r,1,1)*v(g,1,2)-l.x*v(r,3,4)*v(g,3,2),C=v(r,1,1)*v(g,1,3)-l.x*v(r,3,4)*v(g,3,3),T=o.x*x+o.y*S+o.z*C,w=v(r,2,2)*v(g,2,1)-l.y*v(r,3,4)*v(g,3,1),D=v(r,2,2)*v(g,2,2)-l.y*v(r,3,4)*v(g,3,2),P=v(r,2,2)*v(g,2,3)-l.y*v(r,3,4)*v(g,3,3),O=o.x*w+o.y*D+o.z*P,L=v(r,1,1)*v(g,1,1)-c.x*v(r,3,4)*v(g,3,1),_=v(r,1,1)*v(g,1,2)-c.x*v(r,3,4)*v(g,3,2),H=v(r,1,1)*v(g,1,3)-c.x*v(r,3,4)*v(g,3,3),V=i.x*L+i.y*_+i.z*H,B=v(r,2,2)*v(g,2,1)-c.y*v(r,3,4)*v(g,3,1),ee=v(r,2,2)*v(g,2,2)-c.y*v(r,3,4)*v(g,3,2),fe=v(r,2,2)*v(g,2,3)-c.y*v(r,3,4)*v(g,3,3),$=i.x*B+i.y*ee+i.z*fe,N=Math.abs(L-x),xt=Math.abs(_-S),we=Math.abs(H-C),xe=Math.abs(L-w),Ze=Math.abs(_-D),ze=Math.abs(H-P),Rt=Math.abs(B-x),ct=Math.abs(ee-S),ut=Math.abs(fe-C),_t=Math.abs(B-w),De=Math.abs(ee-D),Je=Math.abs(fe-P),ht=Math.min(N+xt+we,xe+Ze+ze),Ft=Math.min(Rt+ct+ut,_t+De+Je);ht<Ft&&(L=B,_=ee,H=fe,V=$);let dt=w*C-x*P,ne=D*C-S*P,Bt=O*C-T*P,hn=L*P-w*H,Nt=_*P-D*H,Xe=V*P-O*H,ce=(Xe*ne-Bt*Nt)/(hn*ne-dt*Nt),Gt=(Xe*dt-Bt*hn)/(Nt*dt-ne*hn),kt=D*x-S*w,pe=P*x-C*w,Ue=O*x-T*w,vo=_*w-D*L,Ws=H*w-P*L,zt=((V*w-O*L)*kt-Ue*vo)/(Ws*kt-pe*vo),ue=g.clone();return ue.elements[12]=ce,ue.elements[13]=Gt,ue.elements[14]=zt,zt>0?ue: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=ch(o,this.touch.origin);this.touch.touches.push(new U(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=Pa(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 U(e.clientX,e.clientY);this.coords.initialShiftPos=t,this.coords.initialPedestal=this.getPedestal(),this.pedestalScaleFactor=aa(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=Ht(()=>{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(k.degToRad(t))*2*Math.PI*Mt/r;return k.clamp(Math.log2(o/512),di,pi)};convertZoomLevelToAltitude=e=>this.computeMetersPerPixelFromZoomLevel(e)*this.options.canvasHeight/2/Math.tan(k.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 He;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=Na(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(Qm){this.debugContainer&&Ce(this.debugContainer);let M=new Yt(4,4,4),p=new Te({color:65280,depthTest:!1}),m=new Q(M,p,e.length),g=new Z;e.forEach((v,x)=>{g.setPosition(v),m.setMatrixAt(x,g)}),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:E.env.TESTING==="true"?u=0:u=Ra;let h=t.padding,d=this.getRotation(),y=this.getTilt();t.rotation!=null&&this.setRotation(t.rotation),t.tilt!=null&&this.setTilt(t.tilt);let b=Na(e,{canvasHeight:c,paddingOption:h,canvasWidth:l,minZoom:s,maxZoom:a,camera:this.camera,orbit:this.orbit,position:this.getPosition(),verticalPadding:t.verticalPadding});this.setRotation(d),this.setTilt(y),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=k.clamp(e,di,pi),o=Math.pow(2,r),i=k.clamp(t,Ia,Oa),s=o*512;return Math.cos(k.degToRad(i))*Math.PI*2*Mt/s}computeMetersPerPixelFromAltitude(e){return e*2*Math.tan(k.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 Na(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 Yr.CAMERA_FRAME_PADDING_SIDES)typeof r[ne]!="number"&&(r[ne]=0);let h=Zr(r,e,i);if(h.left+h.right>=e||h.top+h.bottom>=i)return u;t.updateMatrixWorld();let d=l.matrixWorldInverse,y=l.fov*(Math.PI/180)/2,b=y,p=Math.atan(Math.tan(y)*(e/i)),m=new I(1/0,1/0,1/0),g=new I(-1/0,-1/0,-1/0),v=new ye,x=new I;for(let ne=0,Bt=n.length;ne<Bt;ne++)x.copy(n[ne]),v.expandByPoint(x),x.applyMatrix4(d),m.min(x),g.max(x),x.copy(n[ne]),x.z-=o,x.applyMatrix4(d),m.min(x),g.max(x),x.copy(n[ne]),x.z+=o,x.applyMatrix4(d),m.min(x),g.max(x);let S=g.x-m.x,C=g.y-m.y,T=e-h.left-h.right,w=i-h.top-h.bottom,D=(g.x+m.x)/2,P=(g.y+m.y)/2,O=S/T,L=C/w,_=s,H=a,V=_*Math.tan(p)*2,B=H*Math.tan(p)*2,ee=V/e,fe=B/e,$=Math.max(O,L);$=k.clamp($,ee,fe);let N=T*$,xt=w*$,we={min:{x:D-N/2-h.left*$,y:P-xt/2-h.bottom*$},max:{x:D+N/2+h.right*$,y:P+xt/2+h.top*$}},xe=(we.min.x+we.max.x)/2,Ze=(we.min.y+we.max.y)/2,ze=v.getCenter(new I),Rt=Math.abs(xe-we.min.x),ct=Math.abs(Ze-we.min.y),ut=Rt/Math.tan(p),_t=ct/Math.tan(b),De=new I;De.set(xe,Ze,g.z+Math.max(ut,_t)),De.applyMatrix4(l.matrixWorld);let Je=new I;Je.set(xe,Ze,g.z),Je.applyMatrix4(l.matrixWorld);let ht=new I().subVectors(Je,De),Ft=(ze.z-De.z)/ht.z,dt=new I().copy(De).add(ht.clone().multiplyScalar(Ft));return Je.set(dt.x,dt.y,dt.z),De.sub(Je),{position:dt,zoom:De.length()}}f();import{z as te}from"zod";var ef=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()}),tf=te.object({type:te.enum(["Feature"]),geometry:jr,properties:ef}),rf=te.object({type:te.enum(["FeatureCollection"]),features:te.array(tf)}),nf=te.object({color:te.string()}),of=te.object({url:te.string(),color:te.string().optional(),opacity:te.number().optional(),material:te.record(te.string(),nf).optional()});function fh(n,e,t){te.union([te.number(),te.string()]).parse(n),rf.parse(e),of.parse(t)}var wr=class{mesh;meshContainer=null;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 G;clippingPlane;get modelScene(){return this.clippingPlane?this.mesh?.children.find(e=>e.name!=="hole-fill-mesh"):this.mesh}position=new I;#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=de.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 Dr={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"}},Ga={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"}},yi=class n{#e;#n;#i=!1;#o=null;#s=null;#a=null;#c=null;#h=null;#g=null;#t=null;#d=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.#h=e.map(o=>o.clone()),this.#D()),this.#_(e,t,r))}setGetFocusOnTransformPointCloud(e,t,r){!this.#i&&!this.#r||(this.#i&&(this.#g=e.map(o=>o.clone()),this.#D()),this.#_(e,t,r))}setAnimateToPosition(e){this.#i&&(this.#t=e.clone(),this.#D())}#I(){let e=this.#e.container;if(!e)return;this.#o=document.createElement("div"),this.#o.dataset.debugCameraTargets="true",Object.assign(this.#o.style,Dr.container),this.#s=document.createElement("div"),this.#s.dataset.debugType="focusOn",Object.assign(this.#s.style,Dr.focusOnBox),this.#s.style.display="none";let t=document.createElement("span");Object.assign(t.style,Dr.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,Dr.getFocusOnTransformBox),this.#a.style.display="none";let r=document.createElement("span");Object.assign(r.style,Dr.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,Dr.animateToBox),this.#c.style.display="none";let o=document.createElement("span");Object.assign(o.style,Dr.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.#d=this.#e.on("post-render",()=>{this.#D()})}#w(){this.#d!==null&&(this.#d(),this.#d=null)}#O(e){let t=1/0,r=1/0,o=-1/0,i=-1/0,s=new U;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"}#D(){if(!(!this.#i||!this.#o))if(this.#s&&this.#F(this.#s,this.#h),this.#a&&this.#F(this.#a,this.#g),this.#c&&this.#t){let e=new U;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.#B(e,o,r),this.#M!==!1&&this.#L(e,o,r)}#B(e,t,r){let o=this.#e.getThreeScene();if(!o||e.length===0){this.#T(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.#T(this.#b,t);let u=new zr(i,8,6),h=new Te({color:a,depthTest:!1,transparent:!0,opacity:.3});l=new Q(u,h,e.length),l.renderOrder=9999,o.add(l),this.#b.set(t,l)}let c=new He;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()}#T(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.#T(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 ye().setFromPoints(l),u=c.getSize(new I),h=c.getCenter(new I),d=new Z().copy(a).invert(),y=h.applyMatrix4(d),b=new Zt().setFromRotationMatrix(s.matrixWorld);this.#T(this.#l,t);let M=new Yt(u.x,u.y,u.z),p=new _o(M);M.dispose();let m=new Br({color:i,depthTest:!1,transparent:!0,opacity:.5}),g=new qt(p,m);g.position.copy(y),g.quaternion.copy(b),g.renderOrder=9999,o.add(g),this.#l.set(t,g),this.#e.render()}showScreenOffsets(){this.#C||(this.#C=!0,this.#N())}hideScreenOffsets(){this.#C&&(this.#C=!1,this.#G())}#N(){let e=this.#e.container;if(!e)return;this.#p=document.createElement("div"),this.#p.dataset.debugScreenOffsets="true",Object.assign(this.#p.style,Ga.container);let t=r=>{let o=document.createElement("div");o.dataset.debugOffset=r,Object.assign(o.style,Ga[r]);let i=document.createElement("span");switch(Object.assign(i.style,Ga.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=Zr(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,h=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",h&&(h.textContent=`left: ${this.#v(e.left,e.type)}`)):u.style.display="none";let d=this.#y.right,y=d.querySelector("[data-debug-label]");i.right>0?(d.style.height="",d.style.top=`${i.top}px`,d.style.bottom=`${i.bottom}px`,d.style.width=`${i.right}px`,d.style.display="block",y&&(y.textContent=`right: ${this.#v(e.right,e.type)}`)):d.style.display="none"}#v(e,t){return t==="portion"?`${(e*100).toFixed(1)}%`:`${e}px`}destroy(){this.hideCameraTargets(),this.hideScreenOffsets(),this.hideFocusOnDebug()}};var sf=0,af=90,lf=(E.env.NODE_ENV==="test",!1),bi={linear:fr.Linear.None,"ease-in":fr.Quadratic.In,"ease-out":fr.Quadratic.Out,"ease-in-out":fr.Quadratic.InOut},cf=-50,vi=class extends Y{#e;#n;#i;#o;constructor(e,t,r){super(),this.#e=e,this.#n=t,this.#i=r,this.#o=new yi(e,this),this.#e.map&&this.#e.map.transform.setMinElevationForCurrentTile(cf),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(qe(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=qe(e,ot.MIN_MERCATOR_ZOOM_LEVEL,this.maxZoomLevel,`setMinZoomLevel was clamped. minZoomLevel must be between ${ot.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=qe(e,this.minZoomLevel,ot.MAX_MERCATOR_ZOOM_LEVEL,`setMaxZoomLevel was clamped. maxZoomLevel must be between minZoomLevel and ${ot.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?.():k.radToDeg(this.#n.cameraSystem.maxTilt)}get minPitch(){return this.#e.mode==="outdoors-overlay"&&this.#e.map?this.#e.map?.getMinPitch?.():k.radToDeg(this.#n.cameraSystem.minTilt)}setMinPitch(e){let t=Math.max(sf,e);this.#e.map?.setMinPitch(t),this.#n.cameraSystem.minTilt=k.degToRad(t)}setMaxPitch(e){let t=Math.min(af,e);this.#e.map?.setMaxPitch(t),this.#n.cameraSystem.maxTilt=k.degToRad(t)}get bearing(){return this.#e.mode==="outdoors-overlay"&&this.#e.map?this.#e.map?.getBearing():k.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(k.degToRad(e))}get pitch(){return this.#e.mode==="outdoors-overlay"&&this.#e.map?this.#e.map?.getPitch():k.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(k.degToRad(qe(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=qe(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=qe(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,bi[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(qe(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?k.degToRad(e.bearing):void 0,i=e.pitch!==void 0?k.degToRad(qe(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,bi[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}=gh(e,this.#e,this.#i.geometry3DMap);if(o.length===0)return A.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(qe(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(qe(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({},ko,e?.padding):this.insetsPadding,curve:bi[e?.easing||"ease-in-out"],rotation:e?.bearing===void 0?void 0:k.degToRad(e.bearing),tilt:e?.pitch!==void 0?k.degToRad(qe(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}=gh(e,this.#e,this.#i.geometry3DMap);return r.length===0?(A.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()}):(lf&&uf(this.#e,o),this.#e.map?.fitBounds(o,{duration:t?.duration??ot.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 ka(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 gh(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){A.error("Entity not found with id:",a);continue}let c=new ye;tu(e,"userData"in l?l.userData.entityId??l.id:l.id,r,c,l instanceof se?l.position.z:void 0);let u=e.convert3DMapPositionToCoordinate(c.min),h=e.convert3DMapPositionToCoordinate(c.max);ka(o,u),ka(o,h),i||(i=e.convert3DMapPositionToCoordinate(c.getCenter(new I)))}else r.push(e.convertTo3DMapPosition(a[1],a[0],a[2]||0)),ka(o,a),i||(i=a);return{pointCloud:r,geoBounds:o,firstPosition:i}}function uf(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 yh=`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 bh=`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 vh=4.291666666666667,xh=15,Sh=25,Mh=43/60;f();var Ch=["horizontal","icon"],hf=new Map([[Ch[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>`],[Ch[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>`]]),df=/<svg([^>]*)>/g;function Eh(n,e,t,r){let o=hf.get(n);return o?o.replace(df,`<svg$1 width="${t}" height="${r}" xmlns="http://www.w3.org/2000/svg" fill="${e}">`):""}f();var za=class n{static instance;loader;constructor(){this.loader=new Fo}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)})}},rr=za.getInstance();var wh=!1,xi=class extends Y{#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;#h=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?xh:75}get defaultWidth(){return this.#e.iconOnly?Sh:150}get aspectRatio(){return this.#e.iconOnly?Mh:vh}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 Eh(this.iconName,this.color,this.#c*this.#n.pixelRatio,this.#h*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.#h}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.#h),s=Math.min(e-this.#c,Math.max(0,r.x+o.x+i.x)),a=Math.min(t-this.#h,Math.max(0,r.y+o.y+i.y));this.setSize(this.#c/e,this.#h/t),this.setXY(s/e,a/t),this.#a=new Kt(s,a,this.#c,this.#h,{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.#h=this.#c/this.aspectRatio,rr.getLoader().load(`data:image/svg+xml;base64,${btoa(this.icon)}`,e=>{if(this.#s=new Ke({uniforms:{uTexture:{value:e},uSize:{value:new Ec(0,0,0,0)},uOpacity:{value:.7}},vertexShader:yh,fragmentShader:bh,depthWrite:!1,depthTest:!1,defines:{debug:wh},wireframe:wh,transparent:!0,visible:!0}),this.#o)this.#o.visible=!0,this.#o.material=this.#s,this.#o.material.needsUpdate=!0;else{let t=new _e(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 Yt(1,1,1),o=new W(r,new Te({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),Ce(this.#o)),this.#o=void 0,this.#s&&this.#s.dispose(),this.#s=void 0,this.#a=void 0}};f();var Si=100,ff=!1,Ci=class extends Y{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 ye,this.state.geometryScene.children.length===0?this.currentTotalBoundingBox.setFromCenterAndSize(new I(0,0,0),new I(Si*2,Si*2,0)):(this.currentTotalBoundingBox.setFromObject(this.state.geometryScene),this.currentTotalBoundingBox.expandByScalar(Si)));let e=new ye().setFromObject(this.state.geometryScene);this.currentTotalBoundingBox.union(e);let t=e.getSize(new I),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=Mi.copy(this.currentTotalBoundingBox).expandByScalar(Math.max(r,Si)).getBoundingSphere(gf).radius;if(this.cameraSystem.panBounds={center:this.currentTotalBoundingBox.getCenter(new I),min:Mi.min,max:Mi.max,radius:o},this.publish("update"),this.cameraSystem.dirty=!0,this.dirty=!1,ff&&this.state.geometryScene.parent instanceof wt){this.debugMesh&&(this.state.geometryScene.parent.remove(this.debugMesh),this.debugMesh=null),this.debugMesh=new He,this.debugMesh.add(new W(new zr(this.cameraSystem.panBounds.radius),new Te({color:16711680,transparent:!0,opacity:.2}))),this.debugMesh.position.copy(this.cameraSystem.panBounds.center),this.state.geometryScene.parent.add(this.debugMesh);let i=new I;Mi.getSize(i);let s=new Yt(i.x,i.y,i.z),a=new Te({color:65280,wireframe:!0,transparent:!0,opacity:.5}),l=new W(s,a);l.position.copy(this.currentTotalBoundingBox.getCenter(new I)),this.debugMesh.add(l)}}}},Mi=new ye,gf=new Cn;f();var Ua="\xA9 Mappedin",yf="https://info.mappedin.com/feedback",Wa=["top-left","top-right","bottom-left","bottom-right"],bf=640,vf=()=>`<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>`,Ha={custom:[],position:"bottom-right",feedback:!0},Ei=class{controlContainerEl;controlPositions;compact=void 0;#e;attribContainerEl;attribInnerEl;attribButtonEl;feedbackLinkEl;attribHTML=Ua;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=Wa.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=Ha){let t=e.position&&Wa.includes(e.position)?e.position:Ha.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=vf(),this.attribContainerEl.appendChild(this.attribButtonEl),this.attribInnerEl=document.createElement("div"),this.attribInnerEl.classList.add("mappedin-ctrl-attrib-inner"),this.attribHTML=this.#e?Ua:"",this.attribInnerEl.innerHTML=this.attribHTML,this.attribContainerEl.appendChild(this.attribInnerEl),(e.feedback??Ha.feedback)&&(this.feedbackLinkEl=document.createElement("a"),this.feedbackLinkEl.href=yf,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?[Ua]:[],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<=bf||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 qr=class{mesh;type="custom-geometry";dirty=!0;feature;builder;outline;constructor(e,t){this.mesh=new Ye,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 G;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 wi=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 Un(n){return n.children.some(e=>e.userData.isOutline)}function Dh(n){return n.children.find(e=>e.userData.isOutline)}function Hn(n,e){let t=n.userData.entities3D.values().next().value;return t?e.geometry3DMap.get(t)?.components[3]!==void 0:!1}function Th(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 d=(e.start+u)*3,y=s[d+2];a=Math.min(a,y),l=Math.max(l,y)}let c=l-a;if(!o||o.thickness===0||c===0)for(let u=0;u<e.count;u++){let d=(e.start+u)*3,y=s[d+2];Math.abs(y-l)<1e-4?s[d+2]=Math.max(t+r,2e-4+r):s[d+2]=r}else{let u=o.thickness,h=a+u,d=a+u,y=l-u,b=l-u,M=r-u,p=r,m=r,g=r+t,v=r+t,x=r+t+u;for(let S=0;S<e.count;S++){let T=(e.start+S)*3,w=s[T+2],D;if(w<=h){let P=u>0?(w-a)/u:0;D=M+P*(p-M)}else if(w>=b){let P=u>0?(w-b)/u:0;D=v+P*(x-v)}else{let P=y-d,O=P>0?(w-d)/P:0;D=m+O*(g-m)}s[T+2]=D}}n.attributes.position.needsUpdate=!0}f();f();var Ph=`// 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 Ih=`// 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 Wn=class extends Br{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=Ph,t.fragmentShader=Ih;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 Tr=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 Cf=80,Di=class extends Y{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 Tr(o),this.idleComputeBoundingSphereQueue=new Tr(o),this.idleBuildQueue.onComplete(this.#s)}#i=new Map;buildOutlines(e){let t=[];for(let h of e.userData.entities3D.values()){let d=this.rendererState.geometry3DMap.get(h);if(d instanceof J&&d.type==="geometry"&&d.components[3]&&d.components[3].dirty===!0&&d.components[0].material!=null){let y=d.components[0].geometry,b=!1;y||(y=_n(d.components[0]),b=!0);let M=d.components[1];t.push([d.components[3],new _o(y,M.bevel?.enabled?1:Cf)]),b&&(y?.dispose(),y=void 0)}}if(t.length===0)return;let r=We(t.map(h=>h[1]),!1);if(r==null)return;let o=r.getAttribute("position"),i=new Float32Array(o.count*4),s=new Pe(i,4);r.setAttribute("color",s);let a=new Uint8Array(o.count);a.fill(0);let l=new Pe(a,1,!1);r.setAttribute("visibility",l);let c=0;for(let h=0;h<t.length;h++){let[d,y]=t[h],b=y.getAttribute("position").count;d.edgeColors=s,d.edgeVisibility=l,d.geometry=r,d.ranges={count:b,start:c},c+=b,y.dispose()}let u=new qt(r,new Wn({vertexColors:!0,linewidth:1,transparent:!0,opacity:1,side:Io}));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"&&Hn(o,this.rendererState)&&!Un(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 Ie){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 G(s.color);for(let y=0;y<s.ranges.count;y++){let b=s.ranges.start+y;l.setXYZ(b,c.r,c.g,c.b)}let u=o.components[1].height,h=o.components[1].altitude,d=o.components[1]?.bevel;Th(i,s.ranges,u,h,d),i.attributes.color.needsUpdate=!0,this.#o(this.idleComputeBoundingSphereQueue,()=>i.computeBoundingSphere()),s.dirty=!1}else if(o.type==="feature-collection"&&Un(o)){let i=Dh(o);if(!i)continue;let s=i.material;if(!(s instanceof Wn))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?qs(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 ie){let i=o.components[3];if(i&&i.edgeColors&&i.geometry&&i.visible){let s=Math.min(r,o.components[1].opacity*Wr(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 Ge}from"zod";var Ti=class extends W{userData={entityId:"",cacheKey:"",isResizable:!1}},Ef=Ge.object({flipImageToFaceCamera:Ge.boolean().optional(),url:Ge.string(),maxImageSize:Ge.number().positive().optional(),interactive:Ge.boolean().optional()}),wf=Ge.object({type:Ge.enum(["Feature"]),properties:Ge.object({width:Ge.number(),height:Ge.number(),rotation:Ge.number().min(0).max(360).optional(),verticalOffset:Ge.number().optional()}),geometry:jr});function Oh(n,e,t){Ge.union([Ge.number(),Ge.string()]).parse(n),wf.parse(e),Ef.parse(t)}var Vn=class{mesh=new Ye;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 I};f();function ja(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 Df(n,e){return n.map(t=>ja(t,e))}function Tf(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 Pf(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 Lh(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 If(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 Of(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};Pf(l,n)&&(i[s][a]=1)}return i}function Lf(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)&&Lh(n,o,r,s,s);s++)i=s;t[r][o]=i}return t}function Af(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 h=Math.pow(e[c][u],2),d=t.minX+u*o,y=t.minY+c*i;s+=h,a+=d*h,l+=y*h}return{x:a/s,y:l/s}}function Rf(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 h=0;h<c;h++)for(let d=0;d<c;d++)if(n[h][d]===1)for(let y=1;y<=c-d;y++){let b=y;if(!(b>c-h)&&Lh(n,d,h,y,b)){let M=y*b,p=e.minX+(d+y/2)*t,m=e.minY+(h+b/2)*r,g={x:p,y:m},x=Math.sqrt(Math.pow(g.x-o.x,2)+Math.pow(g.y-o.y,2))/u,S=M*(1-i)-x*i*M;S>a&&(a=S,l={center:g,width:y*t*s,height:y*r*s})}}return l}function Za(n,e,t,r={}){let{scaleFactor:o=.9,centerPriority:i=.5,resolution:s=100,minimumSizeRatio:a=.5}=r,l=Pt(t),c=n.width/n.height,u=Df(e,l),h=Tf(u),{dx:d,dy:y,gridBounds:b}=If(h,c,s),M=Of(u,b,s,d,y),p=Lf(M,s),m=Af(M,p,b,s,d,y),g=Rf(M,b,d,y,m,i,o);return!g||g.width<n.width*a||g.height<n.height*a?n:{...g,center:ja(g.center,-l),rotation:t,polygonCenter:ja(m,-l)}}f();var re={HIGH:1,MEDIUM:.5,LOW:.25,VERY_LOW:.125},ae={[re.HIGH]:2048,[re.MEDIUM]:1024,[re.LOW]:512,[re.VERY_LOW]:256},Ah={[ae[re.HIGH]]:65280,[ae[re.MEDIUM]]:16776960,[ae[re.LOW]]:16753920,[ae[re.VERY_LOW]]:16711680},Pi={HIGH:50,MEDIUM:100,LOW:250},Rh="https://resize-worker.mappedin.com",_h=["cdn.mappedin.com","cdn.eu.mappedin.com"],Xa=["resize-worker.mappedin.com","resize-worker-staging.mappedin.net"],Ya=.01,jn=1024,Zn=256,Fh=512,Bh=2048,Nh=3,Gh=37,kh=16*1024*1024;f();function qa(n){try{let t=new URL(n).hostname;return _h.includes(t)||Xa.includes(t)}catch{return!1}}function _f(n){try{let e=new URL(n);return Xa.includes(e.hostname)}catch{return!1}}function $a(n,e){return _f(n)?n.replace(/\/resize:fit:\d+:\d+:(\d+)\//,`/resize:fit:${e}:${e}:$1/`):`${Rh}/resize:fit:${e}:${e}:0/plain/${n}`}function zh(n){return n<=Pi.HIGH?ae[re.HIGH]:n<=Pi.MEDIUM?ae[re.MEDIUM]:n<=Pi.LOW?ae[re.LOW]:ae[re.VERY_LOW]}function Uh(n){let e=n*Gh;return e<=ae[re.LOW]?ae[re.LOW]:e<=ae[re.MEDIUM]?ae[re.MEDIUM]:ae[re.HIGH]}function Hh(n,e){return qa(n)?n:`${n}|${e??jn}`}function Ii(n,e){n.color=new G(16777215),n.emissive=new G(Ah[e]),n.emissiveIntensity=.5}function Oi(n){n.color=new G(16777215),n.emissive=new G(0),n.emissiveIntensity=0}f();function Vh(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=Zc().isMobile?Fh:ae[re.HIGH];return s=Math.min(m,p),s}function u(p){return Math.min(p,c())}function h(p,m){return Math.min(u(zh(m)),Uh(p.maxLongEdge))}function d(p,m,g){if(p.base||p.basePending)return;p.basePending=!0;let v=p.isResizable?$a(m,g):m;Wh(v,S=>{let C=p.isResizable?S:Gf(S,g);return C.colorSpace=gr,p.base=C,p.basePending=!1,C},()=>{p.basePending=!1},l).then(()=>{a||r()}).catch(()=>{})}function y(p,m,g){p.hiLod!=null&&g<=p.hiLod||p.readyLod!=null&&g<=p.readyLod||(p.ready=m,p.readyLod=g,i.add(p))}function b(p){p.ready=null,p.readyLod=null,i.delete(p)}function M(p,m,g){if(!p.isResizable||p.hiLod!=null&&g<=p.hiLod||p.readyLod!=null&&g<=p.readyLod||p.pendingFetchLOD!=null&&g<=p.pendingFetchLOD)return;p.pendingFetchLOD=g;let v=()=>{p.pendingFetchLOD===g&&(p.pendingFetchLOD=null)},x=$a(m,g);Wh(x,C=>(C.colorSpace=gr,y(p,C,g),v(),C),()=>{v()},l).then(()=>{a||r()}).catch(()=>{})}return{register(p,m,g,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)),d(C,m,v?Zn:g),v){let w=h(C,x);w>Zn&&M(C,m,w)}},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 g=o.get(p);!g||!g.isResizable||(m<g.distance&&(g.distance=m),M(g,p,h(g,m)))},drainPromotions(){if(a||i.size===0)return;let p=0,m=0,g=Math.min(Nh,i.size);for(;p<g;){let v,x=1/0;for(let T of i)T.distance<x&&(x=T.distance,v=T);if(v==null)break;let S=Bf(v.ready);if(m>0&&m+S>kh)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??Zn},residentResolutionBucket(p){let m=o.get(p),g=m?.hi??m?.base;return Nf(Ff(g))},dispose(){a=!0;for(let p of o.values())p.base?.dispose(),p.hi?.dispose(),p.ready?.dispose();o.clear(),i.clear()}}}function Wh(n,e,t,r){let o=i=>new Promise((s,a)=>{if(r.isDisposed()){a(new Error("LOD control disposed"));return}rr.getLoader().load(i,l=>{if(r.isDisposed()){l.dispose(),a(new Error("LOD control disposed"));return}try{s(e(l))}catch(c){A.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}A.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()||(A.error("Failed to transform image request",{url:n,error:i}),t(i)),Promise.reject(i))):o(n)}var Pr={w:0,h:0};function jh(n){let e=n?.image;return e?e instanceof HTMLImageElement?(Pr.w=e.naturalWidth||0,Pr.h=e.naturalHeight||0):(Pr.w=e.width||0,Pr.h=e.height||0):(Pr.w=0,Pr.h=0),Pr}function Ff(n){let{w:e,h:t}=jh(n);return Math.max(e,t)}function Bf(n){let{w:e,h:t}=jh(n);return e*t*4}function Nf(n){return n>=ae[re.HIGH]?ae[re.HIGH]:n>=ae[re.MEDIUM]?ae[re.MEDIUM]:n>=ae[re.LOW]?ae[re.LOW]:Zn}function Gf(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=gr,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&&!Xc()?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 h=new Oc(c);return h.colorSpace=gr,h.needsUpdate=!0,h}var Xn=Math.PI*2,kf=Math.PI/2,zf=Math.PI*1.5,Uf=mi(kf,2),Hf=mi(zf,2),Li=class extends Y{rendererState;convertTo3DMapPosition;projectToScreen;initialBearing=0;naturalBearing=0;imagePlacementOptions;cameraFrustum=new Fr;cameraWorldPosition=new I;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=Vh({transformImageRequest:a,getMaxTextureSize:()=>this.rendererState.renderer?.capabilities?.maxTextureSize??Bh,publish:()=>this.publish("image-loaded")})}createImageMesh(e,t,r,o=0,i,s,a=jn){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?Za(l,s,l.rotation+90,this.imagePlacementOptions):l;case"fit-initial-bearing":return Za(l,s,this.initialBearing,this.imagePlacementOptions);case"default":case"none":default:return l}})();if(this.debug.imageContainers&&u.polygonCenter){let x=new W(new zr(1),new $t({color:65280}));x.position.set(u.polygonCenter.x,u.polygonCenter.y,o),this.rendererState.geometryScene.add(x)}let h=new $t({transparent:!0,depthWrite:!1,side:jt}),d=new _e(u.width,u.height),y=new Ti(d);y.visible=!1,y.renderOrder=de.IMAGE_MESH;let b=qa(t),M=o+Ya,p=this.rendererState.cameraObject.position.z,m=Math.abs(p-M),g=Hh(t,a),v=Math.max(u.width,u.height);if(this.lod.register(g,t,a??jn,b,m,v),y.userData.entityId=e,y.userData.cacheKey=g,y.userData.isResizable=b,y.material=h,this.debug.imageContainers){let x=new W(new _e(r.width,r.height),new $t({color:"gray"}));y.add(x);let S=new zc;y.add(S),S.scale.set(10,10,10)}return y.position.set(u.center.x,u.center.y,o+Ya),y.rotation.z=(-k.degToRad(u.rotation)+Xn)%Xn,y}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 $t){let{cacheKey:r,isResizable:o}=t.imageMesh.userData;o===!0?Ii(t.imageMesh.material,this.lod.residentResolutionBucket(r)):Oi(t.imageMesh.material)}}else if(e.type==="geometry"){let t=e.components[0];if(Array.isArray(t?.feature))continue;if(t?.imageMesh?.material instanceof $t){let{cacheKey:r,isResizable:o}=t.imageMesh.userData;o===!0?Ii(t.imageMesh.material,this.lod.residentResolutionBucket(r)):Oi(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 $t&&Oi(t.imageMesh.material)}}flipIfNeeded(e,t){if(e.imageMesh==null)return;let r=-t,o=e.imageMesh.rotation.z,i=mi((o-r+Xn)%Xn,2);if(i>Uf&&i<Hf){let s=e.imageMesh.matrixWorldAutoUpdate===!1;s&&Wo(e.imageMesh),e.imageMesh.rotation.z=(o+Math.PI)%Xn,e.imageMesh.updateMatrixWorld(),s&&ou(e.imageMesh)}}currentImageScreenBBoxes=[];viewProjectionMatrix=new Z;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&&Ii(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 $t&&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 h=this.convertTo3DMapPosition(u);return{x:h.x,y:h.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,h=!1;if(o&&l){let d=Math.abs(this.cameraWorldPosition.z-i.imageMesh.position.z);this.lod.requestUpgrade(c,d)}if(l){let d=i.imageMesh.material;h=this.reconcileMaterialTexture(d,c,u)}i.visible?s.showImage&&!i.imageMesh.visible?l?h&&(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 I;if(e.imageMesh.getWorldPosition(r),!this.cameraFrustum.containsPoint(r))return;let o=new U;this.projectToScreen(o,r);let i=[new I(t.min.x,t.min.y,t.min.z),new I(t.max.x,t.min.y,t.min.z),new I(t.min.x,t.max.y,t.min.z),new I(t.max.x,t.max.y,t.min.z),new I(t.min.x,t.min.y,t.max.z),new I(t.max.x,t.min.y,t.max.z),new I(t.min.x,t.max.y,t.max.z),new I(t.max.x,t.max.y,t.max.z)],s=[];for(let d of i){let y=d.clone().applyMatrix4(e.imageMesh.matrixWorld),b=new U;this.projectToScreen(b,y),s.push(b)}let a=1/0,l=1/0,c=-1/0,u=-1/0;for(let d of s)a=Math.min(a,d.x),l=Math.min(l,d.y),c=Math.max(c,d.x),u=Math.max(u,d.y);let h=new Kt(o.x,o.y,c-a,u-l);this.currentImageScreenBBoxes.push(h)}else A.warn("Bounding box for imageMesh does not exist.")}};f();f();function Ja(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 Wf(n,e){return!(n.maxX<e.minX||n.minX>e.maxX||n.maxY<e.minY||n.minY>e.maxY)}function Vf(n,e){if(!Wf(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 Zh(n,e){let t=Vf(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 jf(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 Zf(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,h=a*a+l*l;return u-h}return c>0?-1:1}),t}function Xf(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 Xh(n){if(n.length<3)return n.map((i,s)=>({point:i,index:s}));let e=jf(n),t=n.map((i,s)=>({point:i,index:s})),r=t[e];t.splice(e,1);let o=Zf(t,r.point);return Xf(o,r)}function Yn(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 Yf="2",qf="1000",$f="1002";function Jf(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=qf,e.appendChild(t),t}function Kf(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 Qf(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 eg(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 tg(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 rg(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 Yh(n,e){for(let[t,r]of n)e.has(t)||(r.remove(),n.delete(t))}function qh(n,e,t,r,o,i){let s=t.get(n);s||(s=Jf(n,r),t.set(n,s)),Kf(s,e.clippedScreenBBox??e.screenBBox),Qf(s,o);let a=eg(s),l=tg(s);return rg(a,l,n,o,i),s}function $h(){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:Yf}),document.body.append(n),n}function Jh(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=$f,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 Kh(n,e){n.textContent=e}function Qh(n,e){e!==void 0?n.textContent=`Score: ${e.toFixed(3)}`:n.textContent=""}f();function ed(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)ed(o,e,t)}function td(n,e){let t=[];return n instanceof He&&ed(n,t,e),t}var $r=.001;function rd(n){if(n.length===0)return[];let e=[],t=n[n.length-1],r=t.w>$r;for(let o=0;o<n.length;o++){let i=n[o],s=i.w>$r;if(s){if(!r){let a=($r-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:$r})}e.push(i)}else if(r){let a=($r-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:$r})}t=i,r=s}return e}function nd(n,e,t){if(n.length===0)return[];let r=n;return r=Yn(r,1,0,0),r=Yn(r,-1,0,e),r=Yn(r,0,1,0),r=Yn(r,0,-1,t),r}f();var Ai=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=Zr(r,e,t),a=s.left,l=s.top,c=e-s.left-s.right,u=t-s.top-s.bottom,h=new U(a+c/2,l+u/2),y=c/2*(2-2/1.2)/2,b=Math.max(a,h.x-y),M=Math.min(e-s.right,h.x+y),p=Math.max(l,h.y-y),m=Math.min(t-s.bottom,h.y+y),g=(b+M)/2,v=(p+m)/2;if(this.bbox={minX:b,maxX:M,minY:p,maxY:m},this.center=new U(g,v),o&&i){let{squareEl:x,labelEl:S,scoreLabelEl:C}=Jh(this.bbox,i);this.el=x,this.labelEl=S,this.scoreLabelEl=C}}updateLabel(e){this.labelEl&&Kh(this.labelEl,e)}updateScore(e){this.scoreLabelEl&&Qh(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 ng=250,Ri=class extends Y{cameraDirty=!0;focusablesDirty=!0;state;camera;cameraFrustum=new Fr;viewProjectionMatrix=new Z;tempScreenPos=new I;debugEl=null;collisions=new Map;focusableEntities=new Map;debug=!1;debugBBoxElements=new Map;viewfinder=new Ai;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=$h()),this.viewfinder.create(this.state.canvasWidth,this.state.canvasHeight,this.state.insetsPadding,this.debug,this.debugEl)}simplifyVertices(e){return e.length<3?e:Xh(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=rd(i);if(s.length<3)return;let a=1/0,l=[];for(let u of s){let h=u.x/u.w,d=u.y/u.w;l.push({x:(h+1)/2*this.state.canvasWidth,y:(-d+1)/2*this.state.canvasHeight}),u.w<a&&(a=u.w)}let c=nd(l,this.state.canvasWidth,this.state.canvasHeight);if(!(c.length<=0))return{screenBBox:Ja(l),clippedScreenBBox:this.debug?Ja(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 He?i=t:"object3d"in t&&t.object3d instanceof He&&(i=t.object3d),i&&(e.boundingBox=new ye().setFromObject(i),e.vertices=this.simplifyVertices(td(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>ng||(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)){Yh(this.debugBBoxElements,e);for(let[r,o]of e){let i=t.has(r),s=this.collisions.get(r);qh(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=Zh(l,this.viewfinder.bbox);if(c>0){e.push(i);let u=(l.minX+l.maxX)/2,h=(l.minY+l.maxY)/2,d=u-this.viewfinder.center.x,y=h-this.viewfinder.center.y,M=1/(1+Math.sqrt(d*d+y*y)/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 _i(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 Ir(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 Jr(n){return n.type==="Feature"?n.geometry:n}function D1(n,e){return n.type==="FeatureCollection"?"FeatureCollection":n.type==="GeometryCollection"?"GeometryCollection":n.type==="Feature"&&n.geometry!==null?n.geometry.type:n.type}function It(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=_i(n),o=Jr(e),i=o.type,s=e.bbox,a=o.coordinates;if(s&&og(r,s)===!1)return!1;i==="Polygon"&&(a=[a]);for(var l=!1,c=0;c<a.length&&!l;c++)if(od(r,a[c][0],t.ignoreBoundary)){for(var u=!1,h=1;h<a[c].length&&!u;)od(r,a[c][h],!t.ignoreBoundary)&&(u=!0),h++;u||(l=!0)}return l}function od(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 h=a>n[1]!=c>n[1]&&n[0]<(l-s)*(n[1]-a)/(c-a)+s;h&&(r=!r)}return r}function og(n,e){return e[0]<=n[0]&&e[1]<=n[1]&&e[2]>=n[0]&&e[3]>=n[1]}f();f();function ig(n){if(!n)throw new Error("geojson is required");var e=[];return Wt(n,function(t){sg(t,e)}),pr(e)}function sg(n,e){var t=[],r=n.geometry;if(r!==null){switch(r.type){case"Polygon":t=Ir(r);break;case"LineString":t=[Ir(r)]}t.forEach(function(o){var i=ag(o,n.properties);i.forEach(function(s){s.id=e.length,e.push(s)})})}}function ag(n,e){var t=[];return n.reduce(function(r,o){var i=wo([r,o],e);return i.bbox=lg(r,o),t.push(i),o}),t}function lg(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 Ka=ig;var Fd=yn(Rd(),1);function ay(n,e){var t={},r=[];if(n.type==="LineString"&&(n=js(n)),e.type==="LineString"&&(e=js(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=_d(n,e);return o&&r.push(o),pr(r)}var i=(0,Fd.default)();return i.load(Ka(e)),Ys(Ka(n),function(s){Ys(i.search(s),function(a){var l=_d(s,a);if(l){var c=Ir(l).join(",");t[c]||(t[c]=!0,r.push(l))}})}),pr(r)}function _d(n,e){var t=Ir(n),r=Ir(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],h=r[1][1],d=(h-c)*(s-o)-(u-l)*(a-i),y=(u-l)*(i-c)-(h-c)*(o-l),b=(s-o)*(i-c)-(a-i)*(o-l);if(d===0)return null;var M=y/d,p=b/d;if(M>=0&&M<=1&&p>=0&&p<=1){var m=o+M*(s-o),g=i+M*(a-i);return Eo([m,g])}return null}var Hi=ay;f();function Wi(n,e){e===void 0&&(e={});var t=Jr(n);switch(!e.properties&&n.type==="Feature"&&(e.properties=n.properties),t.type){case"Polygon":return ly(t,e);case"MultiPolygon":return cy(t,e);default:throw new Error("invalid poly")}}function ly(n,e){e===void 0&&(e={});var t=Jr(n),r=t.coordinates,o=e.properties?e.properties:n.type==="Feature"?n.properties:{};return Bd(r,o)}function cy(n,e){e===void 0&&(e={});var t=Jr(n),r=t.coordinates,o=e.properties?e.properties:n.type==="Feature"?n.properties:{},i=[];return r.forEach(function(s){i.push(Bd(s,o))}),pr(i)}function Bd(n,e){return n.length>1?cc(n,e):wo(n[0],e)}function uy(n,e){var t=!0;return Wt(n,function(r){Wt(e,function(o){if(t===!1)return!1;t=hy(r.geometry,o.geometry)})}),t}function hy(n,e){switch(n.type){case"Point":switch(e.type){case"Point":return!fy(n.coordinates,e.coordinates);case"LineString":return!Nd(e,n);case"Polygon":return!It(n,e)}break;case"LineString":switch(e.type){case"Point":return!Nd(n,e);case"LineString":return!dy(n,e);case"Polygon":return!Gd(e,n)}break;case"Polygon":switch(e.type){case"Point":return!It(e,n);case"LineString":return!Gd(n,e);case"Polygon":return!py(e,n)}}return!1}function Nd(n,e){for(var t=0;t<n.coordinates.length-1;t++)if(my(n.coordinates[t],n.coordinates[t+1],e.coordinates))return!0;return!1}function dy(n,e){var t=Hi(n,e);return t.features.length>0}function Gd(n,e){for(var t=0,r=e.coordinates;t<r.length;t++){var o=r[t];if(It(o,n))return!0}var i=Hi(e,Wi(n));return i.features.length>0}function py(n,e){for(var t=0,r=n.coordinates[0];t<r.length;t++){var o=r[t];if(It(o,e))return!0}for(var i=0,s=e.coordinates[0];i<s.length;i++){var a=s[i];if(It(a,n))return!0}var l=Hi(Wi(n),Wi(e));return l.features.length>0}function my(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 fy(n,e){return n[0]===e[0]&&n[1]===e[1]}var kd=uy;function fl(n,e){var t=!1;return Wt(n,function(r){Wt(e,function(o){if(t===!0)return!0;t=!kd(r.geometry,o.geometry)})}),t}var Hd=yn(ji());var gl="outdoor-system-debug-container",zd=!1;function gy(n,e,t){let r=Math.pow(2,n),o=new vr(e/r,t/r).toLngLat(),i=new vr((e+1)/r,(t+1)/r).toLngLat();return[o.lng,i.lat,i.lng,o.lat]}function yy(n,e){return n[0]<=e[2]&&n[2]>=e[0]&&n[1]<=e[3]&&n[3]>=e[1]}var by=15e-6;function vy(n,e){if(n.length<=5)return n;let t=(0,Hd.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 Ud(n){return{bbox:hc(Zs(n)),simplified:Zs(n.map(e=>vy(e,by)))}}function xy(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 h=0;h<u.length;h++){let d=u[h];d[0]<t&&(t=d[0]),d[0]>o&&(o=d[0]),d[1]<r&&(r=d[1]),d[1]>i&&(i=d[1])}}}return t<=e[2]&&o>=e[0]&&r<=e[3]&&i>=e[1]}var Sy=500,Zi=class extends Y{#e;idleQueue;#n="";#i=new Set;#o=[];#s=new Set;#a;#c=[];#h=My();#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 oa(i,a),new oa(o,s)]};#d=(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.#h.buildStart();let r=[];for(let o of e)if(o.geometry.type==="Polygon")r.push(Ud(o.geometry.coordinates));else if(o.geometry.type==="MultiPolygon")for(let i of o.geometry.coordinates)r.push(Ud(i));this.#a=r,this.#c=r.map((o,i)=>()=>this.#y(i)),this.#h.buildDone(this.#a.length);for(let o of t)this.#i.add(o);this.#C(),this.#p()}#l=Ht(()=>{this.#p()},Sy);constructor(e,t=3e3){super(),this.idleQueue=new Tr(t),e&&(this.#e=e,this.#d("styledata",this.#A),this.#d("sourcedata",r=>{this.#s.size>0&&!this.#s.has(r.sourceId)||r.tile!=null&&this.#M(r.tile)&&this.#E(r.tile)&&this.#l()})),zd&&this.#R()}#M(e){let t=e.tileID?.canonical;if(!t)return!0;let r=gy(t.z,t.x,t.y),o=this.#a;if(o){for(let i=0;i<o.length;i++)if(yy(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(zd&&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.#h.computeStart();let r=()=>{if(this.#g!==e)return;let o=this.#m.size-t;if(o>0){this.#h.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.#h.endSpan()}this.#h.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.#h.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"||xy(u,o)&&fl(r,u)&&this.#m.add(c)}this.#h.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.#h.styleLatch(r||"",t||""),this.#b(),this.#r(),this.#n=t,this.#C(),this.#l()}}};#R(){if(!document.getElementById(gl)&&this.#e){let e=document.createElement("div");e.id=gl,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(gl);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 Or(){return A.logState<=0}function My(){let n=0,e=0,t=0;return{buildStart(){Or()&&(t=performance.now())},buildDone(r){Or()&&A.debug(`[OutdoorLayers] built ${r} footprints in ${(performance.now()-t).toFixed(1)}ms`)},computeStart(){Or()&&(n=0)},beginSpan(){Or()&&(e=performance.now())},endSpan(){Or()&&(n+=performance.now()-e)},computeDone(r,o,i){Or()&&A.debug(`[OutdoorLayers] compute cpu ${n.toFixed(1)}ms | polys=${r} added=${o} matched=${i}`)},styleLatch(r,o){Or()&&A.debug(`[OutdoorLayers] styledata stylesheet id "${r}" => "${o}"${!r&&o?" (initial id latch)":""}`)}}}f();f();f();f();var Xi=class extends Xt{tangentData;parameters;constructor(e,t={}){super(),Object.defineProperty(this,"type",{value:"RibbonGeometry"}),this.parameters={path:e};let r=t.segments??64,o=new I,i=new I,s=new I(0,0,1),a=(r+1)*2,l=new Float32Array(a*3),c=new Float32Array(a*3),u=new Float32Array(a*2),h=new Float32Array(a),d=[];this.tangentData=new Float32Array((r+1)*3);let y=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 g=p*3;this.tangentData[g]=i.x,this.tangentData[g+1]=i.y,this.tangentData[g+2]=i.z,l[y++]=o.x,l[y++]=o.y,l[y++]=o.z,l[y++]=o.x,l[y++]=o.y,l[y++]=o.z,h[M++]=-1,h[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;d.push(m,m+2,m+1),d.push(m+1,m+2,m+3)}this.setIndex(d),this.setAttribute("position",new Et(l,3)),this.setAttribute("normal",new Et(c,3)),this.setAttribute("uv",new Et(u,2)),this.setAttribute("side",new Et(h,1))}};f();var Yi=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 I){let r=this.tStart+e*(this.tEnd-this.tStart);return this.innerCurve.getPoint(r,t)}};f();f();var Cy=[0,0,1,0,1,1,0,1],Ey=[0,1,2,0,2,3],qi=new I,$i=new I;function Vd(n,e){let t=Math.max(1,Math.floor(e)),r=new Float32Array(t*3),o=new Float32Array(t*3),i=new Float32Array(t),s=new Float32Array(t);for(let l=0,c=0;l<t;l++,c+=3){let u=(l+.5)/t;n.getPointAt(u,qi),n.getTangentAt(u,$i),r[c]=qi.x,r[c+1]=qi.y,r[c+2]=qi.z,o[c]=$i.x,o[c+1]=$i.y,o[c+2]=$i.z,i[l]=u,s[l]=l}let a=new Nc;return a.instanceCount=t,a.setIndex(new Pe(new Uint16Array(Ey),1)),a.setAttribute("uv",new Et(new Float32Array(Cy),2)),a.setAttribute("position",new En(r,3)),a.setAttribute("pathTangent",new En(o,3)),a.setAttribute("pathDistance",new En(i,1)),a.setAttribute("dashIndex",new En(s,1)),a}var Wd=128,Qr=2048,Ot=.6;function Ji(n,e,t){return n.dashAbsolute?n.dashMeters+n.gapMeters:n.dashRelativeToWidth?(n.dashSize+n.gapSize)*t:(n.dashLength+n.dashGap)*e}function jd(n,e,t){let r=Ji(n,e,t);if(r<=0)return Wd;let o=Math.ceil(e/r),i=Wd;for(;i<o&&i<Qr;)i*=2;return Math.min(i,Qr)}function en(n,e,t,r){let o=n.screenSpace?Math.max(t*2*r,Ot):t*2,i=Ji(n,e,o);return i>0?Math.max(1,Math.min(e/i,n.maxDashCount)):n.maxDashCount}var wy=8,Dy=2048,yl=new Cn,Zd=new Z,Xd=new wc,Ki=new I,Yd=new I,bl=new I,qd=new I,$d=new I,Qi=new I,es=new I,Jd="centerlineRaycast";function vl(n,e,t,r,o){if(n===e)return n;let i=r!==t?Math.max(0,Math.min(1,(o-t)/(r-t))):0;return n+(e-n)*i}function Ty(n){let e=n.nearRadius.value,t=n.farRadius.value,o=vl(e,t,n.nearZoom.value,n.farZoom.value,n.cameraParameters.value.x)*(n.screenSpace.value?n.metersPerPixel.value:1);return n.screenSpace.value?Math.max(o,Ot/2):o}function Py(n,e){let t=new Float32Array(e*3),r=new Float32Array(e*3),o=1/(e-1);for(let i=0;i<e;i++){n.getPointAt(i*o,Qi),n.getTangentAt(i*o,es);let s=i*3;t[s]=Qi.x,t[s+1]=Qi.y,t[s+2]=Qi.z,r[s]=es.x,r[s+1]=es.y,r[s+2]=es.z}return{positions:t,tangents:r}}function Kd(n){let e=n.getLength(),t=Math.max(2,Math.min(Dy,Math.ceil(e*wy))),{positions:r,tangents:o}=Py(n,t),i=Iy(r,t);return{positions:r,tangents:o,size:t,bounds:i}}function Iy(n,e){let t=1/0,r=1/0,o=1/0,i=-1/0,s=-1/0,a=-1/0;for(let d=0;d<e;d++){let y=d*3,b=n[y],M=n[y+1],p=n[y+2];b<t&&(t=b),M<r&&(r=M),p<o&&(o=p),b>i&&(i=b),M>s&&(s=M),p>a&&(a=p)}let l=(t+i)/2,c=(r+s)/2,u=(o+a)/2,h=0;for(let d=0;d<e;d++){let y=d*3,b=n[y]-l,M=n[y+1]-c,p=n[y+2]-u,m=b*b+M*M+p*p;m>h&&(h=m)}return new Cn(new I(l,c,u),Math.sqrt(h))}function Oy(n){return n.userData[Jd]}function Ly(n,e){let t=Oy(this.geometry);if(!t)return;let r=this.matrixWorld,o=this.material.uniforms,{centerline:i}=t,{positions:s,count:a,stride:l}=i;if(a<2)return;let c=t.bounds;if(c===null&&(this.geometry.boundingSphere===null&&this.geometry.computeBoundingSphere(),c=this.geometry.boundingSphere),c===null)return;let h=Ty(o)*Math.max(1,o.highlightWidthMultiplier.value);if(yl.copy(c).applyMatrix4(r),yl.radius+=h,!n.ray.intersectsSphere(yl))return;Zd.copy(r).invert(),Xd.copy(n.ray).applyMatrix4(Zd);let d=r.getMaxScaleOnAxis(),y=d!==0?h/d:h,b=y*y,M=1/0,p=1/0,m=-1;Ki.set(s[0],s[1],s[2]);for(let g=1;g<a;g++){Yd.copy(Ki);let v=g*l;Ki.set(s[v],s[v+1],s[v+2]);let x=Xd.distanceSqToSegment(Yd,Ki,bl,qd);if(x>b)continue;bl.applyMatrix4(r);let S=n.ray.origin.distanceTo(bl);S<n.near||S>n.far||!(S<M-h)&&!(S<=M+h&&x<p)||(M=S,p=x,m=g-1,$d.copy(qd))}m!==-1&&e.push({distance:M,point:$d.clone().applyMatrix4(r),index:m,face:null,faceIndex:null,object:this})}function xl(n,e,t){n.geometry.userData[Jd]={centerline:e,bounds:t},n.raycast=Ly}function Qd(n){let e=n.geometry.attributes.position;if(e===void 0)return;let t={positions:e.array,count:e.count>>>1,stride:6};xl(n,t,null)}f();function Ay(n,e,t){let r=new Float32Array(t*2*4),o=0,i=t*4;for(let a=0;a<t;a++){let l=a*3;r[o]=n[l],r[o+1]=n[l+1],r[o+2]=n[l+2],r[o+3]=1,r[i]=e[l],r[i+1]=e[l+1],r[i+2]=e[l+2],r[i+3]=0,o+=4,i+=4}let s=new Pc(r,t,2,Oo,xc);return s.minFilter=ta,s.magFilter=ta,s.wrapS=ea,s.wrapT=ea,s.needsUpdate=!0,{texture:s,size:t}}function ep({component:n,curve:e,baked:t,nearRadius:r,metersPerPixel:o,uniforms:i}){let s=e.getLength(),a=n.screenSpace?Ot:r*2,l=jd(n,s,a);n.maxDashCount=l,n.curveLength=s;let c=Vd(e,l);i.dashCount.value=en(n,s,r,o);let{texture:u,size:h}=Ay(t.positions,t.tangents,t.size);return i.curveTexture.value=u,i.curveTextureSize.value=h,{geometry:c}}f();var ts=`// 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
+ // Stable per-dash identity (discrete-dash geometry only). Drives formula placement
167
+ // and surplus-instance culling (see the isDiscreteDash block in main()).
168
+ attribute float dashIndex;
169
+
170
+
171
+ uniform vec2 uvScale;
172
+ uniform float vertexes;
173
+ uniform float complete;
174
+ uniform float nearRadius;
175
+ uniform float farRadius;
176
+ uniform float nearZoom;
177
+ uniform float farZoom;
178
+ uniform float pulse;
179
+ uniform float pulseLength;
180
+ uniform bool pathIsVertical;
181
+ uniform bool displayArrowsOnPath;
182
+ uniform vec2 cameraParameters;
183
+ uniform bool isRibbon;
184
+ uniform bool isDiscreteDash;
185
+ uniform float pathLength;
186
+ uniform float dashCount;
187
+
188
+ // A discrete-dash path is a dashed path whose dashes are separate primitives, so the
189
+ // dash's along-path extent is the dash "on" size in whichever mode is active \u2014
190
+ // there is no separate dash-length option. These mirror the fragment shader's
191
+ // dash uniforms; only the "on" side is needed here (the gap is already baked
192
+ // into dashCount as spacing).
193
+ uniform bool dashRelativeToWidth;
194
+ uniform bool dashAbsolute;
195
+ uniform float dashSize;
196
+ uniform float dashMeters;
197
+ uniform float dashLength;
198
+ uniform sampler2D curveTexture;
199
+ uniform float curveTextureSize;
200
+ uniform float billboardThreshold;
201
+ uniform mat4 cameraViewMatrix;
202
+ uniform bool screenSpace;
203
+ uniform float metersPerPixel;
204
+ uniform float minPathWidthMeters;
205
+
206
+ varying float zoomLevel;
207
+ varying float radius;
208
+ varying vec2 fragTexcoord;
209
+ varying float fragTopTextureU;
210
+ varying float fragPathDistance;
211
+ // Dash length \xF7 dash width. Derived here rather than passed as a uniform because
212
+ // the absolute and length-scaling modes divide a world length by the dash's
213
+ // width, and that width is only known after the screen-space px\u2192meters
214
+ // conversion below. The fragment shader needs the same ratio to keep the corner
215
+ // radius and the arrow isotropic in world space.
216
+ varying float fragDashAspect;
217
+
218
+ uniform float highlightStartFraction;
219
+ uniform float highlightEndFraction;
220
+ uniform float highlightCompleteFraction;
221
+ uniform float highlightWidthMultiplier;
222
+ uniform vec3 highlightColor;
223
+
224
+ uniform float travelledEndFraction;
225
+ uniform vec3 travelledColor;
226
+
227
+ float flattenFactor = 0.0;
228
+
229
+ // Map the x value from the range [xMin, xMax] to the range [yMin, yMax] using
230
+ // linear interpolation/extrapolation.
231
+ //
232
+ // This performs a pure linear mapping y = mx + b where
233
+ // 'm = (yMax - yMin) / (xMax - xMin)',
234
+ // 'b = -xMin * (yMax - yMin) / (xMax - xMin) + yMin'.
235
+ float remap(float x, float xMin, float xMax, float yMin, float yMax) {
236
+ return (x - xMin) / (xMax - xMin) * (yMax - yMin) + yMin;
237
+ }
238
+
239
+ // Map the x value from [xMin, xMax] to the range [yMin, yMax] using linear
240
+ // interpolation, clamping result values outside [yMin, yMax].
241
+ float clampRemap(float x, float xMin, float xMax, float yMin, float yMax) {
242
+ return clamp(remap(x, xMin, xMax, yMin, yMax), yMin, yMax);
243
+ }
244
+
245
+ // Sample the baked curve texture at arc-length fraction s (row 0 = positions,
246
+ // row 1 = tangents). Float textures aren't guaranteed to support hardware
247
+ // linear filtering, so we fetch the two neighbouring texels (Nearest) and lerp
248
+ // manually. This keeps flowing dashes smooth between samples on any GPU.
249
+ vec3 sampleCurveRow(float s, float row) {
250
+ float fu = clamp(s, 0.0, 1.0) * (curveTextureSize - 1.0);
251
+ float i0 = floor(fu);
252
+ float frac = fu - i0;
253
+ float u0 = (i0 + 0.5) / curveTextureSize;
254
+ float u1 = (i0 + 1.5) / curveTextureSize;
255
+ vec3 a = texture2D(curveTexture, vec2(u0, row)).xyz;
256
+ vec3 b = texture2D(curveTexture, vec2(u1, row)).xyz;
257
+ return mix(a, b, frac);
258
+ }
259
+
260
+ // Sample a discrete dash's arc-length fraction, centre, and tangent from the
261
+ // baked curve. Returns false when the instance is surplus (beyond the per-frame
262
+ // effective count), so the caller writes an off-screen vertex for the cost of a
263
+ // compare + branch rather than a texture fetch. The +0.5 mirrors the
264
+ // (dashIndex + 0.5) / dashCount placement: a dash is visible while its centre
265
+ // lands before s = 1, so a non-integer count never wraps its last visible dash
266
+ // back over dash 0.
267
+ bool sampleDiscreteDash(out vec3 center, out vec3 tangent, out float s) {
268
+ if (dashIndex + 0.5 >= dashCount) {
269
+ return false;
270
+ }
271
+ // Formula placement: every dash's arc-length position is derived from its
272
+ // index and the effective count (a per-frame uniform), not from a baked
273
+ // position. Each dash sits at (dashIndex + 0.5) / dashCount \u2014 its cell.
274
+ s = fract((dashIndex + 0.5) / dashCount);
275
+ center = sampleCurveRow(s, 0.25);
276
+ tangent = sampleCurveRow(s, 0.75);
277
+ return true;
278
+ }
279
+
280
+ // The dash's along-path half-extent relative to its width. Width-scaling is
281
+ // already a multiple of the width, so it *is* the aspect; the other two modes
282
+ // produce a world length that must be divided by the (possibly screen-space)
283
+ // width here, which is why this can't be a CPU-side uniform.
284
+ float computeDashAspect(float dashWorldRadius) {
285
+ float dashWorldLength;
286
+ if (dashRelativeToWidth) {
287
+ dashWorldLength = dashSize * dashWorldRadius * 2.0;
288
+ } else if (dashAbsolute) {
289
+ dashWorldLength = dashMeters;
290
+ } else {
291
+ dashWorldLength = dashLength * pathLength;
292
+ }
293
+ return max(dashWorldLength / max(dashWorldRadius * 2.0, 1e-4), 0.01);
294
+ }
295
+
296
+ // Build the (right, up) basis for one dash. Steep (near-vertical) sections
297
+ // billboard to face the camera so dashes on connection paths keep their shape
298
+ // instead of flattening into ellipses; this takes priority over arrow alignment
299
+ // because a vertical tangent has no usable ground-plane projection to align an
300
+ // arrow to. Returns false when no travel direction survives (near-vertical
301
+ // tangent with billboarding off), so the caller draws the dash square rather
302
+ // than elongate it along an arbitrary camera/world axis.
303
+ bool computeDashBasis(vec3 tangent, out vec3 right, out vec3 up) {
304
+ bool billboard = billboardThreshold >= 0.0 && abs(tangent.z) >= billboardThreshold;
305
+ if (billboard) {
306
+ // Rows 0 and 1 of the view matrix are the camera right/up axes in world space.
307
+ vec3 camRight = vec3(cameraViewMatrix[0][0], cameraViewMatrix[1][0], cameraViewMatrix[2][0]);
308
+ vec3 camUp = vec3(cameraViewMatrix[0][1], cameraViewMatrix[1][1], cameraViewMatrix[2][1]);
309
+ // Keep the disc camera-facing, but when it carries an arrow rotate its basis
310
+ // within the view plane so the arrow points along the travel direction (the
311
+ // tangent projected onto the screen). Using camUp directly would aim every
312
+ // arrow at the top of the screen, reversing arrows on descending connections.
313
+ float screenX = dot(tangent, camRight);
314
+ float screenY = dot(tangent, camUp);
315
+ float screenLen = sqrt(screenX * screenX + screenY * screenY);
316
+ if (screenLen > 0.001) {
317
+ screenX /= screenLen;
318
+ screenY /= screenLen;
319
+ up = camRight * screenX + camUp * screenY;
320
+ right = camRight * screenY - camUp * screenX;
321
+ return true;
322
+ }
323
+ // Tangent points almost straight at the camera: no usable projection to
324
+ // orient against, so fall back to the plain camera basis.
325
+ right = camRight;
326
+ up = camUp;
327
+ return false;
328
+ }
329
+ // Orient the dash along the full 3D tangent so its long axis (and arrow) tilts
330
+ // with the path slope instead of lying flat on the ground plane. right stays
331
+ // horizontal \u2014 perpendicular to both world-up and the tangent \u2014 so a flat path
332
+ // (tangent.z \u2248 0) keeps its existing orientation.
333
+ up = normalize(tangent);
334
+ right = cross(vec3(0.0, 0.0, 1.0), up);
335
+ float rightLen = length(right);
336
+ if (rightLen > 0.001) {
337
+ right /= rightLen;
338
+ return true;
339
+ }
340
+ // Near-vertical tangent with billboarding off: fall back to world axes.
341
+ up = vec3(0.0, 1.0, 0.0);
342
+ right = vec3(1.0, 0.0, 0.0);
343
+ return false;
344
+ }
345
+
346
+ void main() {
347
+ // Defensive guard: if the position attribute is NaN (which can happen
348
+ // transiently after a WebGL context loss + restore on iOS Safari, before
349
+ // per-vertex buffers have been re-uploaded), output a vertex outside the
350
+ // clip volume so the GPU discards it cleanly. Without this, the ribbon
351
+ // expansion below produces a "fan of lines" artifact emanating from a
352
+ // single point on the map. NaN is the only value where x != x.
353
+ if (position.x != position.x || position.y != position.y || position.z != position.z) {
354
+ gl_Position = vec4(2.0, 2.0, 2.0, 1.0);
355
+ return;
356
+ }
357
+
358
+ fragPathDistance = pathDistance;
359
+ // Written unconditionally: the fragment shader's reads are all guarded by
360
+ // isDiscreteDash today, but an unwritten varying is undefined behaviour and this
361
+ // costs nothing.
362
+ fragDashAspect = 1.0;
363
+
364
+ vec3 adjustedPosition = position;
365
+ zoomLevel = clampRemap(cameraParameters.x, nearZoom, farZoom, 0.0, 1.0);
366
+
367
+ // Screen-space-aware half-radii in world units. In screen-space mode
368
+ // nearRadius/farRadius are pixel half-widths (and equal), so scale by
369
+ // metersPerPixel to keep a constant pixel width on screen regardless of zoom.
370
+ // Shared by the discrete-dash and ribbon branches below.
371
+ // Floored at minPathWidthMeters * 0.5 so zoom-in (metersPerPixel -> 0) never
372
+ // shrinks the width below 0.6m \u2014 bounds the dash count and keeps the path
373
+ // visible. See ADR 0005.
374
+ float effNear = screenSpace ? max(nearRadius * metersPerPixel, minPathWidthMeters * 0.5) : nearRadius;
375
+ float effFar = screenSpace ? max(farRadius * metersPerPixel, minPathWidthMeters * 0.5) : farRadius;
376
+
377
+ // Only apply normal-based expansion for TubeGeometry
378
+ // Ribbons have normal=(0,0,1) which would shift them up incorrectly
379
+ if (!isRibbon && !isDiscreteDash) {
380
+ float expansionFactor = (farRadius - nearRadius) * zoomLevel;
381
+ adjustedPosition += normal * expansionFactor;
382
+ }
383
+
384
+ // Animate the reveal endpoint from highlightStartFraction to highlightEndFraction
385
+ // so the width expansion follows the same reveal as the fragment shader.
386
+ float revealedHighlightEnd = mix(highlightStartFraction, highlightEndFraction, highlightCompleteFraction);
387
+ bool isHighlighted = fragPathDistance > highlightStartFraction && fragPathDistance <= revealedHighlightEnd;
388
+
389
+ // For TubeGeometry: apply highlight width expansion using normal
390
+ if (!isRibbon && !isDiscreteDash && isHighlighted) {
391
+ adjustedPosition += normal * (highlightWidthMultiplier - 1.) / 2.;
392
+ }
393
+
394
+ // Discrete dashes: rebuild each dash's quad around its center. The local
395
+ // unit-quad corner is encoded in uv, so the size can scale with zoom and the
396
+ // highlight without touching the buffer; the fragment shader carves the
397
+ // rounded rectangle out of the quad.
398
+ //
399
+ // discUp is always the travel direction (tangent, or its screen projection
400
+ // when billboarding) and discRight is perpendicular to it. Unlike the circle
401
+ // this replaced, a rectangle is not rotationally symmetric, so the basis has
402
+ // to track the path even when no arrow is drawn \u2014 otherwise an elongated dash
403
+ // would point along a world/screen axis instead of along the path.
404
+ if (isDiscreteDash) {
405
+ vec2 discOffset = (uv - 0.5) * 2.0;
406
+
407
+ vec3 dashCenter;
408
+ vec3 dashTangent;
409
+ float s;
410
+ if (!sampleDiscreteDash(dashCenter, dashTangent, s)) {
411
+ gl_Position = vec4(2.0, 2.0, 2.0, 1.0);
412
+ return;
413
+ }
414
+ // Downstream reveal/highlight/travelled coloring follows the dash.
415
+ fragPathDistance = s;
416
+
417
+ float dashWorldRadius = mix(effNear, effFar, zoomLevel);
418
+ float dashAspect = computeDashAspect(dashWorldRadius);
419
+
420
+ vec3 discRight;
421
+ vec3 discUp;
422
+ if (!computeDashBasis(dashTangent, discRight, discUp)) {
423
+ dashAspect = 1.0;
424
+ }
425
+ fragDashAspect = dashAspect;
426
+
427
+ // discRadius is the half-width across the path; the along-path half-extent
428
+ // is stretched by dashAspect.
429
+ float discRadius = dashWorldRadius;
430
+ if (isHighlighted) {
431
+ discRadius *= highlightWidthMultiplier;
432
+ }
433
+ adjustedPosition = dashCenter + (discRight * discOffset.x + discUp * discOffset.y * dashAspect) * discRadius;
434
+ }
435
+
436
+ // Unified ribbon width handling for both billboarded and non-billboarded
437
+ if (isRibbon && !isDiscreteDash) {
438
+ vec3 right;
439
+
440
+ // Determine if this vertex should billboard
441
+ // billboardThreshold < 0: off, == 0: unconditional, > 0: precomputed sin(angle)
442
+ bool shouldBillboard = billboardThreshold >= 0.0
443
+ && abs(pathTangent.z) >= billboardThreshold;
444
+
445
+ if (shouldBillboard) {
446
+ // Camera-facing right vector
447
+ vec3 viewDir = -vec3(cameraViewMatrix[0][2], cameraViewMatrix[1][2], cameraViewMatrix[2][2]);
448
+ right = cross(pathTangent, viewDir);
449
+ float rightLen = length(right);
450
+ if (rightLen < 0.001) {
451
+ right = cross(pathTangent, vec3(0.0, 0.0, 1.0));
452
+ rightLen = length(right);
453
+ if (rightLen < 0.001) {
454
+ right = cross(pathTangent, vec3(0.0, 1.0, 0.0));
455
+ rightLen = length(right);
456
+ }
457
+ }
458
+ right = right / max(rightLen, 0.001);
459
+ } else {
460
+ // Flat world-space right vector (perpendicular in XY plane)
461
+ right = vec3(-pathTangent.y, pathTangent.x, 0.0);
462
+ float rightLen = length(right);
463
+ if (rightLen > 0.001) {
464
+ right /= rightLen;
465
+ } else {
466
+ right = vec3(1.0, 0.0, 0.0);
467
+ }
468
+ }
469
+
470
+ // Apply base half-width (geometry stores centerline only)
471
+ adjustedPosition += right * effNear * side;
472
+
473
+ // Shared: zoom-based expansion
474
+ float expansionFactor = (effFar - effNear) * zoomLevel;
475
+ adjustedPosition += right * expansionFactor * side;
476
+
477
+ // Shared: highlight width expansion (using right instead of normal)
478
+ if (isHighlighted) {
479
+ float highlightExpansion = effNear * (highlightWidthMultiplier - 1.0);
480
+ adjustedPosition += right * highlightExpansion * side;
481
+ }
482
+ }
483
+
484
+ // For TubeGeometry: flatten the bottom half of the tube
485
+ if (!isRibbon && !isDiscreteDash && !pathIsVertical) {
486
+ // We can get an origin point for the cross-section of the path by
487
+ // subtracting the surface normal times the radius, since the surface normal
488
+ // points strictly away from the centre.
489
+ vec3 origin = position - nearRadius * normal;
490
+
491
+ // Determine how far the path extends "up" or "down" in the direction of the
492
+ // path normal.
493
+ float height = dot(adjustedPosition - origin, pathNormal);
494
+
495
+ // For horizontal paths, flatten the bottom half entirely so that it's flat
496
+ // against the floor. This makes the path look nicer when it's
497
+ // semitransparent behind opaque geometry, so you don't see it
498
+ // peeking through.
499
+ float desiredHeight = max(height, 0.0);
500
+ desiredHeight = desiredHeight * flattenFactor;
501
+ float flattenMagnitude = height - desiredHeight;
502
+ adjustedPosition = adjustedPosition - pathNormal * flattenMagnitude;
503
+ }
504
+
505
+ // Transform the vertices into NDC.
506
+ vec4 mvPosition = modelViewMatrix * vec4(adjustedPosition, 1.0);
507
+ gl_Position = projectionMatrix * mvPosition;
508
+
509
+ fragTexcoord = uv;
510
+
511
+ // Compute fragTopTextureU for arrow texture mapping
512
+ if (isRibbon) {
513
+ // For RibbonGeometry: uv.x is already 0-1 across ribbon width
514
+ fragTopTextureU = uv.x;
515
+ } else {
516
+ // For TubeGeometry: compute texture coordinate to handle tube twisting
517
+ // We want the arrow texture to always be on the top of the path
518
+ vec3 bitangent = cross(normal, pathTangent);
519
+ fragTopTextureU = -dot(bitangent, pathNormal) * 0.5 + 0.5;
520
+ if (isHighlighted) {
521
+ fragTopTextureU = -dot(bitangent, pathNormal * highlightWidthMultiplier) * 0.5 + 0.5;
522
+ }
523
+ }
524
+
525
+ // For ribbon paths this equals mix(effNear, effFar, zoomLevel); tube geometry
526
+ // keeps its radius un-scaled, hence the explicit gate below.
527
+ radius = mix(nearRadius, farRadius, zoomLevel);
528
+ if (screenSpace && isRibbon) {
529
+ radius = radius * metersPerPixel;
530
+ }
531
+ }
532
+ `;f();var Sl=`#define ARROW_FADING_POINT 0.15
533
+
534
+ uniform float complete;
535
+ uniform float nearRadius;
536
+ uniform float farRadius;
537
+ uniform vec2 resolution;
538
+ uniform vec2 cameraParameters;
539
+ uniform vec3 color;
540
+ uniform float pathLength;
541
+ uniform bool showPulse;
542
+ uniform vec3 pulseColor;
543
+ uniform float pulse;
544
+ uniform float pulseLength;
545
+ uniform bool pathIsVertical;
546
+ uniform bool displayArrowsOnPath;
547
+ uniform float arrowAnimationTimer;
548
+ uniform float opacityMultiplier;
549
+ uniform bool dashed;
550
+ uniform float xrayDithering;
551
+ uniform float dashLength;
552
+ uniform float dashGap;
553
+ uniform bool dashRelativeToWidth;
554
+ uniform float dashSize;
555
+ uniform float gapSize;
556
+ uniform bool dashAbsolute;
557
+ uniform float dashMeters;
558
+ uniform float gapMeters;
559
+ uniform sampler2D arrowTexture;
560
+
561
+ varying float zoomLevel;
562
+ varying float radius;
563
+ varying vec2 fragTexcoord;
564
+ varying float fragTopTextureU;
565
+ varying float fragPathDistance;
566
+ // Dash length \xF7 dash width, derived in the vertex shader from the dash "on" size
567
+ // (see fragDashAspect there). Only meaningful when isDiscreteDash.
568
+ varying float fragDashAspect;
569
+
570
+
571
+ uniform float highlightStartFraction;
572
+ uniform float highlightEndFraction;
573
+ uniform float highlightCompleteFraction;
574
+ uniform vec3 highlightColor;
575
+ uniform bool highlightDisplayArrowsOnPath;
576
+
577
+ uniform float travelledEndFraction;
578
+ uniform vec3 travelledColor;
579
+
580
+ // Border uniforms for ribbon geometry
581
+ uniform bool borderEnabled;
582
+ uniform vec3 borderColor;
583
+ uniform float borderWidth;
584
+ uniform bool borderUseDarken;
585
+ uniform bool isRibbon;
586
+ uniform bool isDiscreteDash;
587
+ // Corner rounding of a dash, 0 = sharp rectangle, 1 = fully rounded (a circle
588
+ // when fragDashAspect is 1.0, a stadium when it is larger). Fraction of the short
589
+ // half-side, like a CSS border-radius in percent, so it stays proportional as
590
+ // the dash resizes with zoom.
591
+ uniform float dashCornerRadius;
592
+
593
+ // Endcap uniforms for ribbon geometry
594
+ // x = start cap enabled (>0), y = end cap enabled (>0)
595
+ uniform vec2 endcapEnabled;
596
+
597
+ // How long the arrow should be, as a factor of pathRadius. Since we've
598
+ // mostly flattened the top of the path, values near 2.0 (the diameter)
599
+ // will probably look best.
600
+ const float arrowLength = 2.0;
601
+
602
+ // How much of a relative margin the arrow texture should have inside the
603
+ // area laid out for it. Useful to pull the arrow away from the edges of the
604
+ // path, which slope down.
605
+ const float arrowMargin = 0.1;
606
+
607
+ // Fraction of a dash's width the per-dash arrow occupies. The arrow texture is
608
+ // mapped onto this centred fraction of the dash's uv square; the rest of the dash
609
+ // stays plain. Lower = smaller arrow inside the dash.
610
+ const float dashArrowFill = 0.55;
611
+
612
+ // How many arrow-lengths of space should be between arrows on a short path.
613
+ const float arrowSpacingOnShortPath = 6.0;
614
+
615
+ // How many arrow-lengths of space should be between arrows on a long path.
616
+ const float arrowSpacingOnLongPath = 7.5;
617
+
618
+ // How long a path must be to be considered "long", as a factor of
619
+ // the path radius.
620
+ const float longPathLength = 200.;
621
+
622
+ // How long a path must be to be considered "short", as a factor of the
623
+ // path radius.
624
+ const float shortPathLength = 75.;
625
+
626
+ // How much of the path's length the fade-in should comprise when going from
627
+ // zero opacity to full opacity.
628
+ const float completeLength = 0.1;
629
+
630
+ // Map the x value from the range [xMin, xMax] to the range [yMin, yMax] using
631
+ // linear interpolation/extrapolation.
632
+ //
633
+ // This performs a pure linear mapping 'y = mx + b' where
634
+ // 'm = (yMax - yMin) / (xMax - xMin)',
635
+ // 'b = -xMin * (yMax - yMin) / (xMax - xMin) + yMin'.
636
+ float remap(float x, float xMin, float xMax, float yMin, float yMax) {
637
+ return (x - xMin) / (xMax - xMin) * (yMax - yMin) + yMin;
638
+ }
639
+
640
+ // Map the x value from [xMin, xMax] to the range [yMin, yMax] using linear
641
+ // interpolation, clamping result values outside [yMin, yMax].
642
+ float clampRemap(float x, float xMin, float xMax, float yMin, float yMax) {
643
+ return clamp(remap(x, xMin, xMax, yMin, yMax), yMin, yMax);
644
+ }
645
+
646
+ // Signed distance to a rounded rectangle centred on the origin. Negative
647
+ // inside, zero on the edge. The standard construction: shrink the box by r,
648
+ // measure the distance to that inner box, then subtract r to round it back out.
649
+ //
650
+ // p - offset from the rectangle centre
651
+ // b - half-extents
652
+ // r - corner radius (must not exceed min(b.x, b.y))
653
+ float sdRoundBox(vec2 p, vec2 b, float r) {
654
+ vec2 q = abs(p) - b + r;
655
+ return min(max(q.x, q.y), 0.0) + length(max(q, vec2(0.0))) - r;
656
+ }
657
+
658
+ // Signed distance from a point in a dash's uv square to the dash's rounded-
659
+ // rectangle edge, in units of the across-path half-width.
660
+ //
661
+ // uv.y spans the length, which the vertex shader already stretched by
662
+ // fragDashAspect, so it is scaled back up here to put both axes in the same world
663
+ // units. Without that the corner radius would stretch along with the dash
664
+ // instead of staying circular.
665
+ //
666
+ // fragDashAspect 1 + dashCornerRadius 1 reduces to length(p) - 1: exactly the circle
667
+ // this shape replaced.
668
+ float dashSignedDistance(vec2 texcoord) {
669
+ vec2 p = (texcoord - 0.5) * 2.0;
670
+ p.y *= fragDashAspect;
671
+ vec2 b = vec2(1.0, fragDashAspect);
672
+ float r = clamp(dashCornerRadius, 0.0, 1.0) * min(b.x, b.y);
673
+ return sdRoundBox(p, b, r);
674
+ }
675
+
676
+ void main(void) {
677
+ // Compute the opacity of the path based on the distance from the current
678
+ // fragment to the 'complete' value as it varies from 0.0 to 1.0.
679
+ // Fragments that are at the 'complete' value or past it will be fully
680
+ // transparent, while fragments that are at 'complete - completeLength'
681
+ // or before it will be fully opaque. However, we adjust the 'complete'
682
+ // value here so that it overshoots by one full 'completeLength', so that
683
+ // the entire path will be opaque when the 'complete' value is at 1.0.
684
+ float completeLocation = complete * (1.0 + completeLength);
685
+ float completeAmount = clampRemap(
686
+ fragPathDistance,
687
+ completeLocation - completeLength,
688
+ completeLocation,
689
+ 0.0,
690
+ 1.0
691
+ );
692
+ float opacity = 1.0 - smoothstep(0.0, 1.0, completeAmount);
693
+
694
+ // 2020/01/09 Terence Dickson
695
+ // When we render the background and overlay for the mapbox outdoor context
696
+ // behind everything else in single-buffer rendering, the fact that the path
697
+ // writes to the depth buffer means that the background and overlay will not
698
+ // be drawn behind the path even when the path is still fading in. The effect
699
+ // is subtle and is only visible in single-buffer rendering so this quick fix
700
+ // prevents writes to the depth buffer for zero opacity fragments, which gets
701
+ // rid of the most visually-offensive ghosting.
702
+ if (opacity <= 0.0) {
703
+ discard;
704
+ }
705
+
706
+
707
+ // Carve the dash's rounded rectangle out of its quad. The geometry is only a
708
+ // bare quad, so this discard is what gives a dash its shape at all \u2014 unlike
709
+ // the ribbon endcaps below, it is not an optional refinement. The SDF is
710
+ // reused for the border ring below, so compute it once here.
711
+ float dashSDF = isDiscreteDash ? dashSignedDistance(fragTexcoord) : 0.0;
712
+ if (isDiscreteDash && dashSDF > 0.0) discard;
713
+
714
+ // Apply rounded endcaps for ribbon geometry using SDF
715
+ // endcapEnabled.x = start cap (>0 enabled), endcapEnabled.y = end cap (>0 enabled)
716
+ // Creates semicircular caps at start and/or end; disabled caps are square
717
+ float startCapOn = step(0.5, endcapEnabled.x);
718
+ float endCapOn = step(0.5, endcapEnabled.y);
719
+ if ((startCapOn > 0.5 || endCapOn > 0.5) && isRibbon) {
720
+ float endcapRadius = radius / pathLength;
721
+ float xDist = abs(fragTexcoord.x - 0.5);
722
+ float scaledXSq = xDist * xDist * 4.0;
723
+
724
+ // Start cap: only apply SDF when enabled
725
+ float startT = clamp(1.0 - fragPathDistance / endcapRadius, 0.0, 1.0);
726
+ float startSDF = startT * startT + scaledXSq - 1.0;
727
+ float inStartCap = step(fragPathDistance, endcapRadius);
728
+ float outsideStart = inStartCap * step(0.0, startSDF) * startCapOn;
729
+
730
+ // End cap: only apply SDF when enabled
731
+ float endCapPos = min(completeLocation, 1.0);
732
+ float endCapStart = endCapPos - endcapRadius;
733
+ float endT = clamp(1.0 - (endCapPos - fragPathDistance) / endcapRadius, 0.0, 1.0);
734
+ float endSDF = endT * endT + scaledXSq - 1.0;
735
+ float inEndCap = step(endCapStart, fragPathDistance);
736
+ float outsideEnd = inEndCap * step(0.0, endSDF) * endCapOn;
737
+
738
+ // Discard if outside semicircle in enabled cap region
739
+ if (max(outsideStart, outsideEnd) > 0.5) discard;
740
+ }
741
+
742
+ // Push in the texture coordinates so that they ramp up
743
+ // at 'arrowMargin' instead of at zero; this remapping looks somewhat
744
+ // like this:
745
+ // 1 ^ ___
746
+ // | /
747
+ // | /
748
+ // | /
749
+ // | /
750
+ // |___/
751
+ // 0 +---------->
752
+ // 0 ^ 1
753
+ // arrowMargin
754
+ // Making the arrows narrower on the path.
755
+ float u = fragTopTextureU;
756
+ u = clamp(
757
+ u * (1. / (1. - arrowMargin * 2.)) - (1. / (1. - arrowMargin * 2.) - 1.) / 2.,
758
+ 0.0,
759
+ 1.0
760
+ );
761
+
762
+ float arrowSpacing = clampRemap(
763
+ pathLength,
764
+ shortPathLength * radius,
765
+ longPathLength * radius,
766
+ arrowSpacingOnShortPath,
767
+ arrowSpacingOnLongPath
768
+ );
769
+
770
+ // Reduce the spacing between arrows when the camera zooms out, as increasing
771
+ // the path radius will increase the arrow size and thus be able to fit
772
+ // fewer arrows on in total, and this secondary movement of the arrows
773
+ // "zooming off" the end of the path is unpleasant
774
+ float expandAmount = mix(1.0, farRadius / nearRadius, zoomLevel);
775
+ float effectiveArrowSpacing =
776
+ arrowSpacing * 1.0 / expandAmount +
777
+ arrowMargin * 2.0;
778
+
779
+ float effectiveArrowLength = arrowLength * radius * (1. - arrowMargin * 2.0);
780
+
781
+ // Adjust the slope of the vertical texture coordinate so that it goes
782
+ // from 0 to 1 along the length of the arrow plus the spacing between
783
+ // arrows, and adjust its x-intercept so that one arrow moves to the
784
+ // exact position of the next arrow as 'arrowAnimationTimer' goes
785
+ // from 0 to 1
786
+ // Note: Using fragPathDistance (0-1 along path) for RibbonGeometry
787
+ float v = (
788
+ fragPathDistance * (pathLength / effectiveArrowLength)
789
+ - arrowAnimationTimer * (1. + effectiveArrowSpacing)
790
+ );
791
+
792
+ // Compute a "looping sawtooth" wave for determining the vertical texture
793
+ // coordinates of the arrow texture, roughly as follows:
794
+ // 3 ^ /
795
+ // | ___/
796
+ // 2 | /
797
+ // | ___/
798
+ // 1 | /
799
+ // |___/
800
+ // 0 +--------------->
801
+ // 0 ^ ^
802
+ // ^ |_|
803
+ // | effectiveArrowLength
804
+ // |___|
805
+ // effectiveArrowSpacing
806
+ //
807
+ // This is effectively equivalent to this sort of sawtooth wave:
808
+ // ^
809
+ // 1 | / / /
810
+ // |___/ ___/ ___/
811
+ // 0 +--------------->
812
+ //
813
+ // Causing the image of the arrow to repeat, with dead space (the bottom
814
+ // edge of the texture stretched out) between the arrows at the provided
815
+ // spacing. The reason why the "looping" design is preferred is because
816
+ // it takes advantage of WebGL's 'GL_REPEAT' texture wrapping behaviour
817
+ // to avoid the discontinuity that can end up causing visual artifacts.
818
+ if (mod(v, (1. + effectiveArrowSpacing)) < 1.) {
819
+ v = v - effectiveArrowSpacing * floor(v / (1. + effectiveArrowSpacing));
820
+ } else {
821
+ v = ceil(v / (1. + effectiveArrowSpacing));
822
+ }
823
+
824
+ // Use the r-component of the texture to determine whether the arrow covers
825
+ // this fragment or not.
826
+ //
827
+ // Discrete dashes draw one complete arrow per dash: the dash's own uv square
828
+ // is mapped straight onto the arrow texture instead of the path-length
829
+ // sawtooth, so every dash carries a single chevron. The arrow is centred and
830
+ // scaled to dashArrowFill of the dash's width so it sits comfortably inside
831
+ // the edge; fragments outside that region clamp to the (empty) texture edge.
832
+ // The vertex shader aligns the dash's up axis (uv.y) to the path tangent, so
833
+ // the arrow points in the direction of travel.
834
+ //
835
+ // The along-path axis is scaled by fragDashAspect so the chevron stays square
836
+ // in world space: on an elongated dash the arrow keeps its proportions and
837
+ // sits centred in the pill rather than stretching to fill it.
838
+ float arrowAmount = 0.0;
839
+ vec3 secondColor = pulseColor;
840
+
841
+ vec3 finalColor = color;
842
+
843
+ // Apply travelled color to the portion of the path that has been travelled.
844
+ if (fragPathDistance < travelledEndFraction) {
845
+ finalColor = travelledColor;
846
+ }
847
+
848
+ // Adjust the color based on the highlight but only if the fragment is within
849
+ // the highlight start and the currently revealed end. The revealed end animates
850
+ // from highlightStartFraction to highlightEndFraction so the reveal starts at
851
+ // the highlight's beginning regardless of where it sits along the path.
852
+ // [Anzor] 0.005 smooths the transition when the width multiplier is large.
853
+ float revealedHighlightEnd = mix(highlightStartFraction, highlightEndFraction, highlightCompleteFraction);
854
+ bool inHighlight = fragPathDistance > highlightStartFraction - 0.005 && fragPathDistance <= revealedHighlightEnd;
855
+ if (inHighlight) {
856
+ finalColor = highlightColor;
857
+ }
858
+
859
+ // Arrows can be toggled independently inside vs outside the highlight.
860
+ bool effectiveDisplayArrows = inHighlight ? highlightDisplayArrowsOnPath : displayArrowsOnPath;
861
+
862
+ // Apply border effect for ribbon geometry
863
+ // fragTexcoord.x: 0\u21921 across ribbon width; edgeDist = distance to nearest edge
864
+ if (borderEnabled && isRibbon) {
865
+ float edgeDist = min(fragTexcoord.x, 1.0 - fragTexcoord.x);
866
+
867
+ // For endcaps, compute radial distance from semicircle edge instead
868
+ float endcapRadius = radius / pathLength;
869
+ float endCapPos = min(completeLocation, 1.0);
870
+ float endCapStart = endCapPos - endcapRadius;
871
+
872
+ // Check each cap region independently
873
+ bool inStartRegion = fragPathDistance <= endcapRadius && startCapOn > 0.5;
874
+ bool inEndRegion = fragPathDistance > endCapStart && endCapOn > 0.5;
875
+
876
+ if (inStartRegion || inEndRegion) {
877
+ float xDist = abs(fragTexcoord.x - 0.5);
878
+ float scaledXSq = xDist * xDist * 4.0;
879
+
880
+ if (inStartRegion) {
881
+ float startT = 1.0 - fragPathDistance / endcapRadius;
882
+ float r = sqrt(startT * startT + scaledXSq);
883
+ edgeDist = 0.5 * (1.0 - r);
884
+ } else {
885
+ float endT = 1.0 - (endCapPos - fragPathDistance) / endcapRadius;
886
+ float r = sqrt(endT * endT + scaledXSq);
887
+ edgeDist = 0.5 * (1.0 - r);
888
+ }
889
+ }
890
+
891
+ if (edgeDist < borderWidth) {
892
+ finalColor = borderUseDarken ? finalColor * 0.6 : borderColor;
893
+ }
894
+ }
895
+
896
+ // Apply the border ring for discrete-dash paths. Reuse the same SDF that carved the
897
+ // shape so the border follows the rounded corners exactly instead of
898
+ // approximating them. The distance is negative inside and measured in
899
+ // across-path half-widths, so -d converts to the ribbon's edge-distance units
900
+ // (0 at the edge, 0.5 at the centre of a square dash) and borderWidth keeps
901
+ // behaving consistently across geometries.
902
+ if (borderEnabled && isDiscreteDash) {
903
+ float edgeDist = -dashSDF * 0.5;
904
+ if (edgeDist < borderWidth) {
905
+ finalColor = borderUseDarken ? finalColor * 0.6 : borderColor;
906
+ }
907
+ }
908
+
909
+ if (effectiveDisplayArrows) {
910
+ vec2 sampleTexcoord;
911
+ if (isDiscreteDash) {
912
+ vec2 dashOffset = fragTexcoord - 0.5;
913
+ dashOffset.y *= fragDashAspect;
914
+ sampleTexcoord = clamp(dashOffset / dashArrowFill + 0.5, 0.0, 1.0);
915
+ } else {
916
+ sampleTexcoord = vec2(u, v);
917
+ }
918
+ arrowAmount = texture2D(arrowTexture, sampleTexcoord).r;
919
+ float delta = 1.0 - abs(fragPathDistance * 2.0 - 1.0);
920
+ secondColor = mix(finalColor, pulseColor, 1.0 - smoothstep(ARROW_FADING_POINT, 0.0, delta));
921
+ }
922
+
923
+ if (dashed) {
924
+ float effectiveDashLength;
925
+ float effectiveGapLength;
926
+
927
+ if (dashAbsolute) {
928
+ // Absolute mode: dashMeters/gapMeters are in meters
929
+ // Convert to path-distance fraction using pathLength
930
+ effectiveDashLength = dashMeters / pathLength;
931
+ effectiveGapLength = gapMeters / pathLength;
932
+ } else if (dashRelativeToWidth) {
933
+ // Width-relative mode: dashSize/gapSize are multiples of path width
934
+ // Convert to path-distance fraction using radius
935
+ effectiveDashLength = (dashSize * radius * 2.0) / pathLength;
936
+ effectiveGapLength = (gapSize * radius * 2.0) / pathLength;
937
+ } else {
938
+ // Length-fraction mode: use dashLength/dashGap directly as path fractions
939
+ effectiveDashLength = dashLength;
940
+ effectiveGapLength = dashGap;
941
+ }
942
+
943
+ float totalLength = effectiveDashLength + effectiveGapLength;
944
+ float numSegments = ceil(1.0 / totalLength);
945
+ float adjustedTotalLength = 1.0 / numSegments;
946
+ float adjustedDashLength = adjustedTotalLength * (effectiveDashLength / totalLength);
947
+ float pattern = mod(fragPathDistance, adjustedTotalLength);
948
+ opacity = pattern < adjustedDashLength ? 1.0 : 0.0;
949
+ }
950
+
951
+
952
+
953
+ if (showPulse) {
954
+ // Add the pulse color to the path by determining how far the current fragment
955
+ // is from 'pulse'
956
+ float pulseLocation = remap(
957
+ pulse,
958
+ 0.0,
959
+ 1.0,
960
+ -pulseLength,
961
+ 1.0 + pulseLength
962
+ );
963
+ float pulseDistance = smoothstep(
964
+ 0.0,
965
+ pulseLength,
966
+ abs(fragPathDistance - pulseLocation)
967
+ );
968
+
969
+ // Blend the pulse color to the path based on how close this fragment is to
970
+ // the 'pulse' value and whether it's covered by an arrow -- but if it's
971
+ // covered by *both*, then we go back to using the regular path color
972
+ // (making arrows look like "holes" when they're overlapping the pulse.)
973
+ float pulseLevel = abs(1.0 - pulseDistance - arrowAmount);
974
+
975
+
976
+ gl_FragColor = vec4(mix(finalColor, secondColor, pulseLevel), opacity * opacityMultiplier);
977
+ } else if (effectiveDisplayArrows) {
978
+ gl_FragColor = vec4(mix(finalColor, pulseColor, arrowAmount), opacity * opacityMultiplier);
979
+ } else {
980
+
981
+ gl_FragColor = vec4(finalColor, opacity * opacityMultiplier);
982
+ }
983
+ // Checkerboard discard for x-ray effect. xrayDithering is a uniform so
984
+ // the outer branch is warp-coherent (zero cost when disabled).
985
+ if (xrayDithering > 0.0) {
986
+ float cx = floor(gl_FragCoord.x / xrayDithering);
987
+ float cy = floor(gl_FragCoord.y / xrayDithering);
988
+ if (mod(cx + cy, 2.0) < 0.5) discard;
989
+ }
990
+ #include <colorspace_fragment>
991
+ }
992
+ `;f();var tp=`uniform float complete;
993
+ uniform float nearRadius;
994
+ uniform float farRadius;
995
+ varying float fragPathDistance;
996
+ const float completeLength = 0.1;
997
+
998
+ // Map the x value from the range [xMin, xMax] to the range [yMin, yMax] using
999
+ // linear interpolation/extrapolation.
1000
+ //
1001
+ // This performs a pure linear mapping 'y = mx + b' where
1002
+ // 'm = (yMax - yMin) / (xMax - xMin)',
1003
+ // 'b = -xMin * (yMax - yMin) / (xMax - xMin) + yMin'.
1004
+ float remap(float x, float xMin, float xMax, float yMin, float yMax) {
1005
+ return (x - xMin) / (xMax - xMin) * (yMax - yMin) + yMin;
1006
+ }
1007
+
1008
+ // Map the x value from [xMin, xMax] to the range [yMin, yMax] using linear
1009
+ // interpolation, clamping result values outside [yMin, yMax].
1010
+ float clampRemap(float x, float xMin, float xMax, float yMin, float yMax) {
1011
+ return clamp(remap(x, xMin, xMax, yMin, yMax), yMin, yMax);
1012
+ }
1013
+
1014
+ void main(void) {
1015
+ // this ensures that the stencil mask moves along with the path above it, to avoid the progress bar effect
1016
+ float completeLocation = complete * (1.0 + completeLength);
1017
+ float completeAmount = clampRemap(
1018
+ fragPathDistance,
1019
+ completeLocation - completeLength,
1020
+ completeLocation,
1021
+ 0.0,
1022
+ 1.0
1023
+ );
1024
+ float opacity = 1.0 - smoothstep(0.0, 1.0, completeAmount);
1025
+
1026
+ // 2020/01/09 Terence Dickson
1027
+ // When we render the background and overlay for the mapbox outdoor context
1028
+ // behind everything else in single-buffer rendering, the fact that the path
1029
+ // writes to the depth buffer means that the background and overlay will not
1030
+ // be drawn behind the path even when the path is still fading in. The effect
1031
+ // is subtle and is only visible in single-buffer rendering so this quick fix
1032
+ // prevents writes to the depth buffer for zero opacity fragments, which gets
1033
+ // rid of the most visually-offensive ghosting.
1034
+ if (opacity <= 0.0) {
1035
+ discard;
1036
+ }
1037
+
1038
+ gl_FragColor = vec4(0.0, 1.0, 0.0, opacity);
1039
+ }`;var rp="data:image/png;base64,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";f();var rs=new I,ns=new I,tn=new I,np=new I,ir=new I,_y=.5,Fy=2;function By(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),h=Math.sqrt(s*s+a*a+l*l);if(u===0||h===0)return 0;let d=c/(u*h),y=Math.max(-1,Math.min(1,d));return Math.acos(y)}function ip(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&&(ir.subVectors(s,a).normalize(),tn.set(s.x-ir.x*r,s.y-ir.y*r,s.z-ir.z*r),o.push(tn.clone())),o.push(s),u>t&&(ir.subVectors(l,s).normalize(),tn.set(s.x+ir.x*r,s.y+ir.y*r,s.z+ir.z*r),o.push(tn.clone()))}return o.push(n[n.length-1]),o}var op=.0025;function sp(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<op||u<op){o.push(a);continue}if(By(s,a,l)<r){rs.subVectors(a,s).normalize(),ns.subVectors(l,a).normalize();let d=Math.sqrt(c),y=Math.sqrt(u),b=Math.max(_y,Math.min(Fy,e)),M=Math.min(b,d*.5),p=Math.min(b,y*.5);tn.set(a.x-rs.x*M,a.y-rs.y*M,a.z-rs.z*M),np.set(a.x+ns.x*p,a.y+ns.y*p,a.z+ns.z*p),o.push(tn.clone(),np.clone())}else o.push(a)}return o.push(n[n.length-1]),o}var Lr=8,Ml=jt,Ny=new Fo,os=new I,ap={h:0,s:0,l:0};function El(n,e,t=.2){return n.getHSL(ap),e.copy(n).offsetHSL(0,-ap.s*t,0)}function wl(n,e){n.stencilWrite=e,e&&(n.stencilRef=Qe.PATH,n.stencilFunc=br,n.stencilZPass=Sn,n.stencilZFail=he,n.stencilFail=he)}function Cl(n){n.addEventListener("dispose",()=>{let e=n.uniforms.curveTexture?.value;e&&(e.dispose(),n.uniforms.curveTexture.value=null)})}function Dl(n){return n===!1?-1:n===!0?0:Math.sin(n*Math.PI/180)}function cp(n,e,t){if(n.length<2){let z=new Ye;return z.userData={entityId:"",type:"path"},{mesh:z,material:null,center:new I}}let{breakpoint:r,width:o,accentColor:i,completeFraction:s,isVertical:a,visibleThroughGeometry:l,dashed:c,highlightCompleteFraction:u,highlightStartFraction:h,highlightEndFraction:d,highlightColor:y,highlightWidthMultiplier:b,highlightDisplayArrowsOnPath:M,travelledEndFraction:p,travelledColor:m,xrayOpacity:g,xrayStyle:v,__EXPERIMENTAL_BILLBOARDING:x,__EXPERIMENTAL_PREVENT_SELF_OVERLAP:S}=e,{color:C,metersPerPixel:T=1}=t,w=!0,D=0,P=1/0,O=e.displayArrowsOnPath,L=!0,_,H;if(mr(o)){let z=Vt(o)/2;_=z,H=z}else if(typeof o=="object"){let z=e.parsedOutputValues;_=z[r]/2,H=(z[r+1]??z[r])/2}else _=o/2,H=o/2;let V=e.dashDiscrete,B=e.isFlat,ee=B?Dl(x):-1,fe=Gy,$=0;n[0].z+=fe;for(let z=1;z<n.length;++z){n[z].z+=fe;let oe=n[z].x-n[z-1].x,ge=n[z].z-n[z-1].z;if(a)$+=Math.sqrt(oe*oe+ge*ge);else{let St=n[z].y-n[z-1].y;$+=Math.sqrt(oe*oe+St*St+ge*ge)}}let N=n,xt=e.smoothingCornerRadius??Dt.cornerRadius,we=e.smoothingTension??Dt.tension,xe=xt>0&&we>0;xe&&(N=ip(N),N=sp(N,xt,we));let[Ze,ze]=e.__EXPERIMENTAL_ENDCAP_EXTENSION;if((Ze>0||ze>0)&&!a&&!B){let z=N[0],oe=N[N.length-1],ge=xe?.01:-.01;N.push(oe.clone().setZ(oe.z+ge)),N.unshift(z.clone().setZ(z.z+ge))}if(B&&!a&&N.length>=2){if(Ze>0){let z=N[0],oe=N[1];os.subVectors(oe,z).normalize();let ge=z.clone().addScaledVector(os,-Ze);N.unshift(ge)}if(ze>0){let z=N[N.length-1],oe=N[N.length-2];os.subVectors(z,oe).normalize();let ge=z.clone().addScaledVector(os,ze);N.push(ge)}}let ct=Ny.load(rp);ct.colorSpace=gr;let ut=new G(C),_t=new G(i),De=e.__EXPERIMENTAL_BORDER,Je=De?.enabled??!1,ht=De?.color==="darken",Ft=De?.width??.1,dt=ht?ut.clone().multiplyScalar(.6):new G(De?.color??"#000000"),ne={vertexes:{type:"f",value:1},resolution:{type:"v2",value:new U(1,1)},cameraParameters:{type:"v2",value:new U(D,0)},complete:{type:"f",value:w?0:1},color:{type:"c",value:ut},pathLength:{type:"f",value:$},nearRadius:{type:"f",value:_},farRadius:{type:"f",value:H},nearZoom:{type:"f",value:D},farZoom:{type:"f",value:P},pulseColor:{type:"c",value:_t},pulse:{type:"f",value:0},pulseLength:{type:"f",value:.075},pathIsVertical:{type:"b",value:a},arrowAnimationTimer:{type:"f",value:0},arrowTexture:{type:"t",value:ct},displayArrowsOnPath:{type:"b",value:O},showPulse:{type:"b",value:L},opacityMultiplier:{type:"f",value:1},dashed:{type:"b",value:c},xrayDithering:{type:"f",value:0},highlightCompleteFraction:{type:"f",value:u},highlightStartFraction:{type:"f",value:h},highlightEndFraction:{type:"f",value:d},highlightColor:{type:"c",value:new G(y)},highlightWidthMultiplier:{type:"f",value:b},highlightDisplayArrowsOnPath:{type:"b",value:M},travelledEndFraction:{type:"f",value:p},travelledColor:{type:"c",value:new G(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:B},isDiscreteDash:{type:"b",value:V},dashCornerRadius:{type:"f",value:Math.min(Math.max(e.dashCornerRadius,0),1)},curveTexture:{type:"t",value:null},curveTextureSize:{type:"f",value:0},dashCount:{type:"f",value:0},billboardThreshold:{type:"f",value:ee},borderEnabled:{type:"b",value:Je},borderColor:{type:"c",value:dt},borderWidth:{type:"f",value:Ft},borderUseDarken:{type:"b",value:ht},endcapEnabled:{type:"v2",value:new U(B&&Ze>0?1:0,B&&ze>0?1:0)},cameraViewMatrix:{type:"m4",value:new Z},screenSpace:{type:"b",value:e.screenSpace},metersPerPixel:{type:"f",value:1},minPathWidthMeters:{type:"f",value:Ot}};if(xe&&N.length>=2){let z=N[0],oe=N[1],ge=N[N.length-1],St=N[N.length-2],Ut=z.clone().sub(oe).normalize(),mt=z.clone().add(Ut.multiplyScalar(lp));N.unshift(mt);let dn=ge.clone().sub(St).normalize(),pn=ge.clone().add(dn.multiplyScalar(lp));N.push(pn)}let Bt=new Rc(N);Bt.curveType="catmullrom",Bt.tension=xe?we:0;let hn=B&&xe,Nt=new Yi(Bt,N.length,hn),Xe=ky*N.length,ce,Gt;if(V?(Gt=Kd(Nt),{geometry:ce}=ep({component:e,curve:Nt,baked:Gt,nearRadius:_,metersPerPixel:T,uniforms:ne})):B?ce=new Xi(Nt,{segments:Xe,billboarded:ee>=0}):ce=new _c(Nt,Xe,_,Lr,!1),!V){let z=new Float32Array(ce.attributes.position.count),oe=new Pe(z,1);if(B)for(let j=0;j<=Xe;j++){let X=j/Xe;oe.setX(j*2,X),oe.setX(j*2+1,X)}else for(let j=0;j<=Xe;j++){let X=j/Xe;for(let nt=0;nt<=Lr;nt++)oe.setX(j*(Lr+1)+nt,X)}ce.setAttribute("pathDistance",oe);let ge=new Float32Array(ce.attributes.position.count*3),St=new Pe(ge,3),Ut,mt,dn,pn,Vs;if(B){let j=ce;for(let X=0;X<=Xe;X++)mt=X*3,dn=j.tangentData[mt],pn=j.tangentData[mt+1],Vs=j.tangentData[mt+2],St.setXYZ(X*2,dn,pn,Vs),St.setXYZ(X*2+1,dn,pn,Vs)}else{let j=ce;for(let X=0;X<=Xe;X++){Ut=j.tangents[X];for(let nt=0;nt<=Lr;nt++)St.setXYZ(X*(Lr+1)+nt,Ut.x,Ut.y,Ut.z)}}ce.setAttribute("pathTangent",St);let wm=new Float32Array(ce.attributes.position.count*3),So=new Pe(wm,3),mn,fn,gn,rt=new I,ac=j=>{a?(mn=j.x*j.y,fn=-1+j.y*j.y,gn=j.z*j.y):(mn=-j.x*j.z,fn=-j.y*j.z,gn=1-j.z*j.z);let X=Math.sqrt(mn*mn+fn*fn+gn*gn);return X===0&&(X=1),rt.set(mn/X,fn/X,gn/X),rt},Mo={x:0,y:0,z:0};if(B){let j=ce;for(let X=0;X<=Xe;X++)mt=X*3,Mo.x=j.tangentData[mt],Mo.y=j.tangentData[mt+1],Mo.z=j.tangentData[mt+2],ac(Mo),So.setXYZ(X*2,rt.x,rt.y,rt.z),So.setXYZ(X*2+1,rt.x,rt.y,rt.z)}else{let j=ce;for(let X=0;X<=Xe;X++){Ut=j.tangents[X],ac(Ut);for(let nt=0;nt<=Lr;nt++)So.setXYZ(X*(Lr+1)+nt,rt.x,rt.y,rt.z)}}ce.setAttribute("pathNormal",So)}let kt=new Ke({uniforms:ne,vertexShader:ts,fragmentShader:Sl,side:Ml});Cl(kt),kt.transparent=!0,kt.alphaTest=.5,ne.resolution.value.x=1,ne.resolution.value.y=1,ne.vertexes.value=ce.attributes.position.count,ne.arrowTexture.value.wrapS=vn,ne.arrowTexture.value.wrapT=vn,ne.arrowTexture.value.anisotropy=16;let pe=new W(ce,kt);pe.name="path";let Ue=pe.clone();Ue.name="xray";let vo=v?.color?new G(v.color):ut,Ws=El(vo,new G,v?.tint),pt={...ne,color:{type:"c",value:Ws},opacityMultiplier:{type:"f",value:g},pathIsVertical:{type:"b",value:a},xrayDithering:{type:"f",value:v?.dithering??0}};pt.complete.value=1,Ue.material=new Ke({uniforms:pt,vertexShader:ts,fragmentShader:Sl,side:Ml,transparent:!0}),Cl(Ue.material),Ue.material.alphaTest=.5,Ue.material.depthWrite=!1,Ue.material.depthTest=!1,wl(Ue.material,S),pt.resolution.value.x=1,pt.resolution.value.y=1,pt.vertexes.value=ce.attributes.position.count,pt.arrowTexture.value.wrapS=vn,pt.arrowTexture.value.wrapT=vn,pt.arrowTexture.value.anisotropy=16,pt.complete.value=s,pe.userData=Ue.userData=e.mesh.userData;let zt=e.mesh,ue=null;if(!l){let z=new Ke({uniforms:ne,vertexShader:ts,fragmentShader:tp,side:Ml});Cl(z),ue=new W(ce,z),ue.name="stencil",ue.material.colorWrite=!1,ue.material.stencilWrite=!0,ue.material.stencilRef=Qe.PATH,ue.material.stencilFunc=_r,ue.material.stencilZPass=Sn,ue.material.stencilZFail=he,ue.material.stencilFail=he,ue.material.depthWrite=!1,ue.material.depthTest=!0,ue.userData=e.mesh.userData,ue.raycast=Pn,zt.add(ue),zt.add(Ue),Ue.renderOrder=de.XRAY_PATH,pe.renderOrder=de.STENCIL_PATH}if(zt.add(pe),B&&!V&&(Qd(pe),Ue.raycast=Pn),V){if(!Gt)throw new Error("Error processing discrete curve.");xl(pe,{positions:Gt.positions,count:Gt.size,stride:3},Gt.bounds),Ue.raycast=Pn,ue&&(ue.raycast=Pn)}if(a&&!V){pe.geometry.computeBoundingBox();let z=pe.geometry.boundingBox,oe=new I;z.getCenter(oe),zt.children.forEach(ge=>{ge.geometry.center(),ge.position.copy(oe)})}l&&(pe.material.stencilWrite=!0,pe.material.stencilRef=Qe.PATH,pe.material.stencilFunc=br,pe.material.stencilZPass=he,pe.material.stencilZFail=he,pe.material.stencilFail=he,pe.material.needsUpdate=!0,pe.layers.disableAll(),pe.layers.enable(de.ALWAYS_ON_TOP_PATHS)),ce.computeBoundingBox();let xo=new I;return ce.boundingBox.getCenter(xo),{mesh:zt,material:kt,center:xo}}var Gy=.15,ky=30,lp=.01;var zy=.5,up=new G,Jn=class extends Y{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 Cr))continue;let u=[];if(a.dirty||l.dirty||c){if(a.mesh.parent!=null)for(let h=a.mesh.children.length-1;h>=0;h--)Ce(a.mesh.children[0]);if(a.feature.features.length===2&&a.feature.features[0].properties.parentId&&a.feature.features[1].properties.parentId){let h=a.feature.features[0],d=a.feature.features[a.feature.features.length-1],y,b,M=h.geometry.coordinates[2]||0,p=d.geometry.coordinates[2]||0;h.properties.parentId&&(y=this.getParentContainer(h.properties.parentId,!0),y!=null&&y.altitude!=null&&(M+=y.altitude,a.isVertical=!0)),d.properties.parentId&&(b=this.getParentContainer(d.properties.parentId,!0),b!=null&&b.altitude!=null&&(p+=b.altitude,a.isVertical=!0));let m=this.convertTo3DMapPosition(h.geometry.coordinates[1],h.geometry.coordinates[0],M),g=this.convertTo3DMapPosition(d.geometry.coordinates[1],d.geometry.coordinates[0],p);Math.abs(m.z-g.z)>zy&&y!=null&&y.visible&&b!=null&&b.visible&&(u=[m,g])}else{let h=a.feature.features;for(let d=0;d<h.length;d++)if(d===0||!Qc(h[d].geometry.coordinates,h[d-1].geometry.coordinates)){let y=this.convertTo3DMapPosition(h[d].geometry.coordinates[1],h[d].geometry.coordinates[0],h[d].geometry.coordinates[2]||0);u.push(y)}}if(u.length>1){let{mesh:h,material:d,center:y}=cp(u,a,{color:l.color,isVertical:a.isVertical,metersPerPixel:o});a.mesh=h,a.material=d,a.position=y}a.dirty&&typeof a.width=="object"&&a.width.on==="zoom-level"&&(a.altitudeBreakpoints=a.width.input.map(h=>this.convertZoomLevelToAltitude(h))),a.dirty=!1}l.dirty&&(a.mesh.children.forEach(h=>{h.name!=="stencil"&&(h.name==="xray"?dp(l.color,a,h.material.uniforms.color.value):h.material.uniforms.color.value.set(l.color),h.material.visible=l.visible,h.material.needsUpdate=!0,h.name!=="xray"&&a.__EXPERIMENTAL_BORDER?.color==="darken"&&h.material.uniforms.borderColor.value.copy(h.material.uniforms.color.value).multiplyScalar(.6))}),a.mesh.position.z=l.altitude,l.dirty=!1),a.material&&(a.mesh.children.forEach(h=>{let d=h.material.uniforms;if(h.name==="stencil"){a.materialDirty&&hp(a,h.material);return}if(a.materialDirty&&h.name==="xray"&&d.opacityMultiplier&&(d.opacityMultiplier.value=a.xrayOpacity,d.xrayDithering.value=a.xrayStyle?.dithering??0,dp(l.color,a,d.color.value),wl(h.material,a.__EXPERIMENTAL_PREVENT_SELF_OVERLAP)),typeof a.width=="object"&&a.width.on==="zoom-level"){a.altitudeBreakpoints&&a.altitudeBreakpoints.length>2&&A.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 b=dc(r,a.altitudeBreakpoints?.slice(0,2)??[e,t]);a.breakpoint=b,d.nearZoom.value=a.altitudeBreakpoints?.[b]??e,d.farZoom.value=a.altitudeBreakpoints?.[b+1]??t;let M=a.parsedOutputValues;d.nearRadius.value=M[b]/2,d.farRadius.value=(M[b+1]??M[b])/2}d.cameraParameters.value.x=r,d.metersPerPixel.value=o,d.cameraViewMatrix.value.copy(this.rendererState.cameraObject.matrixWorldInverse);let y=typeof a.width=="object"&&a.width.on==="zoom-level";if(a.dashDiscrete&&a.maxDashCount>0&&(a.screenSpace||y)){let b=vl(d.nearRadius.value,d.farRadius.value,d.nearZoom.value,d.farZoom.value,r);d.dashCount.value=en(a,a.curveLength,b,o)}if(a.materialDirty){let b=a.dashDiscrete;d.displayArrowsOnPath.value=a.displayArrowsOnPath,d.dashCornerRadius.value=Math.min(Math.max(a.dashCornerRadius,0),1),d.pulseColor.value.set(a.accentColor),d.complete.value=a.completeFraction,hp(a,h.material),d.dashed.value=b?!1:a.dashed,d.dashLength.value=a.dashLength,d.dashGap.value=a.dashGap,d.dashRelativeToWidth.value=a.dashRelativeToWidth,d.dashSize.value=a.dashSize,d.gapSize.value=a.gapSize,d.dashAbsolute.value=a.dashAbsolute,d.dashMeters.value=a.dashMeters,d.gapMeters.value=a.gapMeters;let M=typeof a.width=="object"&&a.width.on==="zoom-level";if(b&&a.maxDashCount>0){let v=a.screenSpace?Math.max(d.nearRadius.value*2*o,Ot):d.nearRadius.value*2,x=Ji(a,a.curveLength,v);if(x>0){let S=a.curveLength/x;S>a.maxDashCount&&a.maxDashCount<Qr&&(a.dirty=!0),S>Qr&&!a.dashCapWarned&&(A.warn(`Discrete dash path needs more than ${Qr} dashes; dash spacing is saturated.`),a.dashCapWarned=!0)}!a.screenSpace&&!M&&(d.dashCount.value=en(a,a.curveLength,d.nearRadius.value,o))}let p=a.__EXPERIMENTAL_BORDER;d.borderEnabled.value=p?.enabled??!1,d.borderWidth.value=p?.width??.1,p?.color==="darken"?d.borderColor.value.copy(d.color.value).multiplyScalar(.6):d.borderColor.value.set(p?.color??"#000000"),d.borderUseDarken.value=p?.color==="darken",d.billboardThreshold.value=Dl(a.__EXPERIMENTAL_BILLBOARDING);let[m,g]=a.__EXPERIMENTAL_ENDCAP_EXTENSION;if(d.endcapEnabled.value.set(b||m<=0?0:1,b||g<=0?0:1),d.screenSpace.value=a.screenSpace,mr(a.width)){d.nearZoom.value=e,d.farZoom.value=t;let v=Vt(a.width);d.nearRadius.value=v/2,d.farRadius.value=v/2}else typeof a.width=="number"&&(d.nearZoom.value=e,d.farZoom.value=t,d.nearRadius.value=Number(a.width)/2,d.farRadius.value=Number(a.width)/2)}}),(a.displayArrowsOnPath||a.highlightDisplayArrowsOnPath)&&a.animateArrowsOnPath&&(a.mesh.children.forEach(h=>{if(h.name==="stencil")return;let d=h.material.uniforms;d.arrowAnimationTimer.value=performance.now()/3e3,h.material.needsUpdate=!0}),i=!0),a.materialDirty=!1)}this.verticalDistanceDirty=!1,i&&this.publish("animate:path")}};function hp(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 dp(n,e,t){let r=e.xrayStyle?.color?up.set(e.xrayStyle.color):up.set(n);El(r,t,e.xrayStyle?.tint)}f();var is=class{rendererState;dirty=!1;constructor(e){this.rendererState=e}#e;#n;#i;#o=new Z;updateOne(e){if(e instanceof J&&e.components[0]instanceof ie&&e.components[1]instanceof yt&&e.parentObject3D instanceof Ie&&(this.#e=e.components[0],this.#i=e.components[1],!this.#e.detached&&this.#e.shouldDetach&&this.#e.mesh!=null&&this.#e.material instanceof Ln&&this.#e.batchedProps!=null)){this.#n=e.parentObject3D,this.#e.visible=!1;let t=this.#i.color,r=this.#i.opacity*Wr(e),o=this.#e.material,i=r??1,s=o.clone({color:t,side:fu(this.#i.side,i),opacity:i,transparent:i<1}),a=new $u(1,this.#e.batchedProps.positionCount,0,s);a.layers.enable(Fe.SHOULD_CAST_SHADOWS);let l=nh(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 G(t),this.#i.topColor?new G(this.#i.topColor):new G(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 sr=new Z,Kn=new I,ss=new Zt,Qn=new I;function Tl(n,e,t){let r=e||1e-4,o=r/Math.max(t,1e-4);return n.mesh instanceof tr?(n.mesh.scale.z=o,n.currentHeight=r,!0):n.batchedProps?.range&&Vr(n.mesh)&&n.instanceIndex!==-1?(n.mesh.getMatrixAt(n.instanceIndex,sr),sr.decompose(Kn,ss,Qn),Qn.z=o,sr.compose(Kn,ss,Qn),n.mesh.setMatrixAt(n.instanceIndex,sr),n.material&&(n.material.repeatYFactor=o),n.currentHeight=r,!0):!1}function pp(n,e){return Vr(n.mesh)&&n.instanceIndex!==-1?(n.mesh.getMatrixAt(n.instanceIndex,sr),sr.decompose(Kn,ss,Qn),Kn.z=e,sr.compose(Kn,ss,Qn),n.mesh.setMatrixAt(n.instanceIndex,sr),n.altitude=e,!0):!1}var as=class{rendererState;dirty=!1;constructor(e){this.rendererState=e}#e;#n;updateOne(e){if(e instanceof J&&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 tr){let t=!1;this.#n.height!==this.#e.currentHeight&&(t=Tl(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=Tl(this.#e,this.#n.height,this.#n.initialHeight)),this.#n.altitude!==this.#e.altitude&&(t=pp(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 Uy={showPolygonLabelTextAreaMesh:!1,showEnvMap:!1,showCollisionBoxes:!1,showGeometryInFocus:!1,showImageLOD:!1,showModelInstancingStats:!1,showScreenOffsets:!1,showCameraTargets:!1,focusOn:!1},ls=class{state=Uy;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 mp(){return typeof window<"u"&&window.__MAPPEDIN_E2E__===!0}var eo=9,Hy=!1,fp=.1,gp=9;function Wy(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 cs=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);Wy(o,r.count,t),e.setAttribute("color",new Pe(o,3))}createOccluderMesh(e,t){let r=new W(e,this.pickingMaterial);return r.layers.set(eo),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 Ke({glslVersion:Cc,vertexShader:`
1040
+ attribute vec3 color;
1041
+ varying vec3 vColor;
1042
+ void main() {
1043
+ vColor = color;
1044
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
1045
+ }
1046
+ `,fragmentShader:`
1047
+ varying vec3 vColor;
1048
+ out vec4 fragColor;
1049
+
1050
+ void main() {
1051
+ fragColor = vec4(vColor, 1.0);
1052
+ }
1053
+ `})}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 Mn(this.width,this.height,{format:Oo,type:bc,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=gp;update=()=>{if(mp()){this.updateImmediately();return}this.framesSinceLastUpdate++,this.framesSinceLastUpdate>=gp&&(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=ni(e,this.convertTo3DMapPosition,{color:"white",height:fp});t=this.createOccluderMesh(i,o.userData.occluderId),o.add(t)}else if(e.geometry.type==="MultiPolygon"){let i=oi(e,this.convertTo3DMapPosition,{color:"white",height:fp});t=this.createOccluderMesh(i,o.userData.occluderId),o?.add(t)}o.userData.occluderDirty=!1}this.renderer.setRenderTarget(this.pickingTexture);let r=new G(this.backgroundId);this.renderer.setClearColor(r),this.renderer.clear(),this.state.cameraObject.layers.disableAll(),this.state.cameraObject.layers.enable(eo),this.renderService.renderScene(this.state.geometryScene.parent,this.state.cameraObject),this.renderer.setRenderTarget(null),this.state.cameraObject.layers.disable(eo),Hy?this.renderService.enabledLayers.add(eo):this.renderService.enabledLayers.delete(eo),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||A.error(o)})};destroy(){this.destroyed=!0,this.pickingTexture?.dispose(),this.pickingMaterial.dispose(),this.pickingTexture=void 0,this.pixelBuffer=void 0}};f();var us=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 J&&t.type==="geometry"&&t.components[0]?.geometry!=null){let r=t.components[0];if(r.mesh instanceof tr)continue;r.geometry&&(r.geometry.dispose(),r.geometry=void 0)}}this.dirty=!1}}};f();var hs=class extends Y{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)=>{rr.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 J))continue;let t=e.components[6];if(!(t instanceof Sr))continue;let r=e.components[0];if(!(r instanceof ie)||!t.dirty)continue;let o=On(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 ds=class{currentOrder=de.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),de.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>de.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 Q){e.mesh.renderOrder=t;for(let i of e.mesh.children)i instanceof Q&&(i.renderOrder=t);if(e.mesh.userData?.detached)for(let i of e.mesh.children)i instanceof Q&&(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 ps=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"&&(!Hn(t,this.state)||Un(t)&&Hn(t,this.state))&&(e=t.components[0],e?.dirty&&(t.traverse(r=>{(r instanceof W||r instanceof qt)&&r.material instanceof Dc&&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=_r,e.stencilZPass=Sn,e.stencilZFail=he,e.stencilFail=he,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(de.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"?Lo:br,e.stencilZPass=he,e.stencilZFail=he,e.stencilFail=he,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(de.GEOMETRY),t.userData.originalRenderOrder!==void 0&&(t.renderOrder=t.userData.originalRenderOrder,delete t.userData.originalRenderOrder)}};f();var yp=.5,ms=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 Ic(new I(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 wn&&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 g=m.geometry.clone();if(m instanceof Q){let v=e.instanceIndex??0,x=new Z;m.getMatrixAt(v,x),g.applyMatrix4(x)}else m.updateWorldMatrix(!0,!1),g.applyMatrix4(m.matrixWorld);o.push(g),g.computeVertexNormals(),m.material.clippingPlanes=[t.plane]}});let i=We(o),s=new Ao,a=new Ao;i.computeBoundingBox();let l=i.boundingBox,c=(l.min.x+l.max.x)/2,u=(l.min.y+l.max.y)/2,h=l.max.x-l.min.x+yp*2,d=l.max.y-l.min.y+yp*2;t.bboxCenter={x:c,y:u};let y=new _e(h,d),b=this.createHoleFillGeometry(i,t.plane,1);b.name="hole-fill-group",t.holeFillGroup=b;let M=new wn({color:t.topColor??"#E67B5B",clippingPlanes:[],stencilWrite:!0,stencilRef:Qe.CLIPPING_BIT,stencilFunc:Lo,stencilFuncMask:Qe.CLIPPING_BIT,stencilWriteMask:Qe.CLIPPING_BIT,stencilFail:he,stencilZFail:he,stencilZPass:Mc}),p=new W(y,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 Ao,i=new Te;i.depthWrite=!1,i.depthTest=!1,i.colorWrite=!1,i.stencilWrite=!0,i.stencilFunc=_r,i.stencilWriteMask=Qe.CLIPPING_BIT;let s=i.clone();s.side=fc,s.clippingPlanes=[t],s.stencilFail=yr,s.stencilZFail=yr,s.stencilZPass=yr;let a=new W(e,s);a.renderOrder=r,o.add(a);let l=i.clone();l.side=Io,l.clippingPlanes=[t],l.stencilFail=yr,l.stencilZFail=yr,l.stencilZPass=yr;let c=new W(e,l);return c.renderOrder=r,o.add(c),o}};f();var fs=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 gs=class{type="occlusion2d";enabled=!0;id;constructor(e){this.id=e}};f();f();f();var bp=`varying vec4 vWorldPosition;
1054
+
1055
+ void main() {
1056
+ vWorldPosition = modelMatrix * vec4(position, 1.0);
1057
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
1058
+ }
1059
+
1060
+ `;f();var Pl=`uniform sampler2D shadowMap;
1061
+ uniform mat4 lightMatrix;
1062
+ uniform float shadowBias;
1063
+ uniform float shadowOpacity;
1064
+ uniform vec3 baseColor;
1065
+ uniform float shadowMapSize;
1066
+ uniform float pcfSpread;
1067
+ uniform float depthRangeMax;
1068
+ uniform bool shadowEnabled;
1069
+ varying vec4 vWorldPosition;
1070
+ float shadowThreshold = 0.05;
1071
+ float shadowStrengthMultiplier = 0.6;
1072
+
1073
+ /**
1074
+ * Interleaved gradient noise for temporal/spatial dithering of shadow samples
1075
+ */
1076
+ float interleavedGradientNoise(vec2 position) {
1077
+ vec3 magic = vec3(0.06711056, 0.00583715, 52.9829189);
1078
+ return fract(magic.z * fract(dot(position, magic.xy)));
1079
+ }
1080
+
1081
+ // Compile-time sample count for loop unrolling (injected via material)
1082
+ #ifndef PCF_SAMPLES
1083
+ #define PCF_SAMPLES 4
1084
+ #endif
1085
+
1086
+ // Poisson disk samples - only define what we need based on sample count
1087
+ #if PCF_SAMPLES <= 4
1088
+ const vec2 poissonDisk[4] = vec2[](
1089
+ vec2(-0.94201624, -0.39906216),
1090
+ vec2(0.94558609, -0.76890725),
1091
+ vec2(-0.094184101, -0.92938870),
1092
+ vec2(0.34495938, 0.29387760)
1093
+ );
1094
+ #elif PCF_SAMPLES <= 8
1095
+ const vec2 poissonDisk[8] = vec2[](
1096
+ vec2(-0.94201624, -0.39906216),
1097
+ vec2(0.94558609, -0.76890725),
1098
+ vec2(-0.094184101, -0.92938870),
1099
+ vec2(0.34495938, 0.29387760),
1100
+ vec2(-0.91588581, 0.45771432),
1101
+ vec2(-0.81544232, -0.87912464),
1102
+ vec2(-0.38277543, 0.27676845),
1103
+ vec2(0.97484398, 0.75648379)
1104
+ );
1105
+ #else
1106
+ const vec2 poissonDisk[16] = vec2[](
1107
+ vec2(-0.94201624, -0.39906216),
1108
+ vec2(0.94558609, -0.76890725),
1109
+ vec2(-0.094184101, -0.92938870),
1110
+ vec2(0.34495938, 0.29387760),
1111
+ vec2(-0.91588581, 0.45771432),
1112
+ vec2(-0.81544232, -0.87912464),
1113
+ vec2(-0.38277543, 0.27676845),
1114
+ vec2(0.97484398, 0.75648379),
1115
+ vec2(0.44323325, -0.97511554),
1116
+ vec2(0.53742981, -0.47373420),
1117
+ vec2(-0.26496911, -0.41893023),
1118
+ vec2(0.79197514, 0.19090188),
1119
+ vec2(-0.24188840, 0.99706507),
1120
+ vec2(-0.81409955, 0.91437590),
1121
+ vec2(0.19984126, 0.78641367),
1122
+ vec2(0.14383161, -0.14100790)
1123
+ );
1124
+ #endif
1125
+
1126
+ /**
1127
+ * Samples the shadow map using PCF (Percentage Closer Filtering)
1128
+ * Uses compile-time loop count for GPU optimization
1129
+ * @param lightSpacePos Position in light space coordinates
1130
+ * @returns Visibility factor (1.0 = fully lit, 0.0 = fully shadowed)
1131
+ */
1132
+ float sampleShadow(vec3 lightSpacePos) {
1133
+ float scaledTexelSize = (1.0 / shadowMapSize) * pcfSpread;
1134
+ float currentDepth = lightSpacePos.z * depthRangeMax;
1135
+
1136
+ // Rotation for temporal stability
1137
+ float noise = interleavedGradientNoise(gl_FragCoord.xy) * 6.283185;
1138
+ float cosNoise = cos(noise);
1139
+ float sinNoise = sin(noise);
1140
+ mat2 rotation = mat2(cosNoise, -sinNoise, sinNoise, cosNoise);
1141
+
1142
+ float shadow = 0.0;
1143
+
1144
+ // Compile-time unrolled loop - GPU can optimize this efficiently
1145
+ for(int i = 0; i < PCF_SAMPLES; i++) {
1146
+ vec2 offset = rotation * poissonDisk[i] * scaledTexelSize;
1147
+ vec2 uv = clamp(lightSpacePos.xy + offset, 0.0, 1.0);
1148
+
1149
+ float sampledDepth = texture2D(shadowMap, uv).r;
1150
+ shadow += step(sampledDepth + shadowBias, currentDepth);
1151
+ }
1152
+
1153
+ return 1.0 - shadow / float(PCF_SAMPLES);
1154
+ }
1155
+
1156
+ void main() {
1157
+ if (shadowEnabled) {
1158
+ // Transform world position to light space
1159
+ vec4 shadowCoord = lightMatrix * vWorldPosition;
1160
+ vec3 projCoords = shadowCoord.xyz / shadowCoord.w;
1161
+
1162
+ // Check if fragment is within shadow map bounds
1163
+ bool inBounds = projCoords.x >= 0.0 && projCoords.x <= 1.0 &&
1164
+ projCoords.y >= 0.0 && projCoords.y <= 1.0 &&
1165
+ projCoords.z >= 0.0 && projCoords.z <= 1.0;
1166
+
1167
+ if (inBounds) {
1168
+ float visibility = sampleShadow(projCoords);
1169
+ float shadowIntensity = 1.0 - visibility;
1170
+
1171
+ if (shadowIntensity > shadowThreshold) {
1172
+ float shadowStrength = shadowIntensity * shadowOpacity * shadowStrengthMultiplier;
1173
+ gl_FragColor = vec4(baseColor, shadowStrength);
1174
+ }
1175
+ }
1176
+ }
1177
+ }
1178
+
1179
+ `;var ys=class extends Ke{pcfSampleCount=4;constructor(){super({vertexShader:bp,fragmentShader:`#define PCF_SAMPLES 4
1180
+ `+Pl,uniforms:{shadowMap:{value:null},lightMatrix:{value:new Z},shadowBias:{value:8e-5},shadowOpacity:{value:.25},baseColor:{value:new G(8421504)},shadowMapSize:{value:4096},pcfSpread:{value:3.5},depthRangeMax:{value:1},shadowEnabled:{value:!1}},transparent:!0,depthWrite:!1,side:jt,stencilWrite:!0,stencilFunc:br,stencilRef:Qe.UNDERGROUND_MASK,stencilFail:he,stencilZFail:he,stencilZPass:he})}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}
1181
+ `+Pl,this.needsUpdate=!0)}};var et={enabled:!0,debug:!1,baseColor:"#a0a0a0",shadowOpacity:.25,pcfSamples:4,pcfSpread:3,shadowBias:.001,normalBias:.12,shadowMapSize:"auto",sunAzimuth:225,sunElevation:45,visibleAtZoomLevel:18},vp=1e4,jy=-.05,Zy=999,Xy=4096,Yy=2048,qy=20.5,$y=19.5,xp=.1,Jy=400,Ky=-200,Qy=50,eb=100,tb=-50,rb=40,rn=15,Lt=22,nb=100,ob=5,ib=50,sb=50,ab=40,lb=5,cb=.5,Il=1,Sp=1,ub=5,Se=256,hb=65535,db=.5,bs=.1,pb=1e3,mb=16737792,fb=.2,Mp=.2,gb=1001,yb=8900331,Ol=!0,vs=class{state;rendererService;depthMaterial;cameraOrbit;lightCamera;shadowRenderTarget;lightMatrix=new Z;currentSnapX=0;currentSnapY=0;shadowCenter=new I;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:Xy,low:Yy};shadowResolutionZoomThresholds={high:qy,low:$y};constructor(e,t,r,o){this.state=e,this.cameraOrbit=r,this.rendererService=t,this.options=Object.freeze({enabled:o?.enabled??et.enabled,debug:o?.debug??et.debug,baseColor:o?.baseColor??et.baseColor,shadowOpacity:o?.shadowOpacity??et.shadowOpacity,pcfSamples:o?.pcfSamples??et.pcfSamples,pcfSpread:o?.pcfSpread??et.pcfSpread,shadowBias:o?.shadowBias??et.shadowBias,normalBias:o?.normalBias??et.normalBias,shadowMapSize:o?.shadowMapSize??et.shadowMapSize,sunAzimuth:o?.sunAzimuth??et.sunAzimuth,sunElevation:o?.sunElevation??et.sunElevation,visibleAtZoomLevel:o?.visibleAtZoomLevel??et.visibleAtZoomLevel});let i=this.options.shadowMapSize==="auto"?this.shadowResolutionSizes.high:this.options.shadowMapSize;this.internal={baseColor:new G(this.options.baseColor),lightOrthoSize:Qy,sunDistance:eb,groundZPosition:tb,snapGridSize:rb,currentShadowMapSize:i,currentShadowResolutionMode:(this.options.shadowMapSize==="auto",null),sunDirection:new I,sunAzimuth:this.options.sunAzimuth,sunElevation:this.options.sunElevation},this.updateSunDirection(),this.lightCamera=new na(-this.internal.lightOrthoSize,this.internal.lightOrthoSize,this.internal.lightOrthoSize,-this.internal.lightOrthoSize,xp,Jy),this.lightCamera.layers.disableAll(),this.lightCamera.layers.enable(Fe.SHOULD_CAST_SHADOWS),this.lightCamera.position.copy(this.internal.sunDirection.clone().multiplyScalar(Ky)),this.lightCamera.lookAt(new I(0,0,0)),this.lightCamera.updateMatrixWorld(),this.lightCamera.updateProjectionMatrix(),this.shadowRenderTarget=this.createShadowRenderTarget(i),this.depthMaterial=new Fc,this.depthMaterial.depthPacking=Sc,this.depthMaterial.blending=gc,this.createShadowPlane(),this.options.debug&&this.setDebugEnabled(!0)}createShadowRenderTarget(e){let t=new Mn(e,e);return t.texture.minFilter=xn,t.texture.magFilter=xn,t.texture.generateMipmaps=!1,t.depthBuffer=!0,t.stencilBuffer=!1,t.depthTexture=new Lc(e,e,vc),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 _e(vp,vp);e.rotateX(0),this.shadowPlaneMaterial=new ys,this.shadowPlane=new W(e,this.shadowPlaneMaterial),this.shadowPlane.position.set(0,0,jy),this.shadowPlane.renderOrder=Zy,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 kc(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=ub,r=e*t*2,o=[];for(let a=-t;a<=t;a++){let l=a*e;o.push(l,-r/2,bs),o.push(l,r/2,bs)}for(let a=-t;a<=t;a++){let l=a*e;o.push(-r/2,l,bs),o.push(r/2,l,bs)}let i=new Xt;i.setAttribute("position",new Et(o,3));let s=new Br({color:hb,transparent:!0,opacity:db,depthTest:!1});this.debugGrid=new qt(i,s),this.debugGrid.name="ShadowDebugGrid",this.debugGrid.renderOrder=pb,this.debugGrid.frustumCulled=!1,this.state.threeJSScene.add(this.debugGrid)}createDebugCurrentCell(){if(this.debugCurrentCell)return;let e=this.internal.snapGridSize,t=new _e(e,e);this.debugCurrentCellMaterial=new Te({color:mb,transparent:!0,opacity:fb,depthTest:!1,side:2}),this.debugCurrentCell=new W(t,this.debugCurrentCellMaterial),this.debugCurrentCell.name="ShadowDebugCurrentCell",this.debugCurrentCell.renderOrder=gb,this.debugCurrentCell.frustumCulled=!1,this.debugCurrentCell.position.set(this.currentSnapX+e/2,this.currentSnapY+e/2,Mp),this.state.threeJSScene.add(this.debugCurrentCell)}createDebugCanvas(){if(this.debugCanvas)return;this.debugCanvas=document.createElement("canvas"),this.debugCanvas.width=Se,this.debugCanvas.height=Se,this.debugCanvas.style.cssText=`
1182
+ position: fixed;
1183
+ bottom: 16px;
1184
+ transform: rotate(-270deg);
1185
+ left: 16px;
1186
+ width: ${Se}px;
1187
+ height: ${Se}px;
1188
+ border: 2px solid #00ffff;
1189
+ border-radius: 4px;
1190
+ background: #000;
1191
+ z-index: 9999;
1192
+ pointer-events: none;
1193
+ `;let e=document.createElement("div");if(e.textContent=Ol?"Shadow Depth Map":"Light Camera View",e.style.cssText=`
1194
+ position: fixed;
1195
+ bottom: ${Se+20}px;
1196
+ left: 16px;
1197
+ color: #00ffff;
1198
+ font-family: monospace;
1199
+ font-size: 12px;
1200
+ z-index: 9999;
1201
+ pointer-events: none;
1202
+ `,e.id="shadow-debug-label",document.body.appendChild(this.debugCanvas),document.body.appendChild(e),this.debugCanvasCtx=this.debugCanvas.getContext("2d"),this.debugRenderTarget=new Mn(Se,Se),this.debugRenderTarget.texture.minFilter=xn,this.debugRenderTarget.texture.magFilter=xn,Ol){this.debugDepthMaterial=new Ke({uniforms:{depthTexture:{value:this.shadowRenderTarget.depthTexture}},vertexShader:`
1203
+ varying vec2 vUv;
1204
+ void main() {
1205
+ vUv = uv;
1206
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
1207
+ }
1208
+ `,fragmentShader:`
1209
+ uniform sampler2D depthTexture;
1210
+ varying vec2 vUv;
1211
+ void main() {
1212
+ float depth = texture2D(depthTexture, vUv).r;
1213
+ // Invert so near is bright, far is dark
1214
+ gl_FragColor = vec4(vec3(1.0 - depth), 1.0);
1215
+ }
1216
+ `});let t=new _e(2,2);this.debugDepthQuad=new W(t,this.debugDepthMaterial),this.debugDepthScene=new wt,this.debugDepthScene.add(this.debugDepthQuad),this.debugDepthCamera=new na(-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=Se*Se*4;(!this.debugPixelBuffer||this.debugPixelBuffer.length!==t)&&(this.debugPixelBuffer=new Uint8Array(t)),Ol&&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(yb,1),e.clear(),e.render(this.state.threeJSScene,this.lightCamera),e.setRenderTarget(null)),e.readRenderTargetPixels(this.debugRenderTarget,0,0,Se,Se,this.debugPixelBuffer);let r=this.debugCanvasCtx.createImageData(Se,Se),o=r.data,i,s;for(let a=0;a<Se;a++)for(let l=0;l<Se;l++)i=((Se-1-a)*Se+l)*4,s=(a*Se+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,Mp)}}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 Z().set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);matrix=new Z;updateLightMatrix(){this.lightCamera.position.copy(this.shadowCenter).add(this.internal.sunDirection.clone().multiplyScalar(-this.internal.sunDistance)),this.lightCamera.lookAt(this.shadowCenter),this.lightCamera.near=xp,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(rn,Math.min(Lt,e)),o=(Lt-r)/(Lt-rn),i=Math.max(t,nb*Math.pow(ob,o));Math.abs(this.internal.sunDistance-i)>Il&&(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(rn,Math.min(Lt,e)),o=(Lt-r)/(Lt-rn),i=Math.max(t,ib*Math.pow(sb,o));Math.abs(this.internal.lightOrthoSize-i)>Il&&(this.internal.lightOrthoSize=i,this.updateLightCamera(),this.needsRender=!0)}updateZoomVisibility(e){let t=this.options.visibleAtZoomLevel-Sp,r=this.options.visibleAtZoomLevel,o;e>=r?o=1:e<=t?o=0:o=(e-t)/Sp;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(rn,Math.min(Lt,e)),r=(Lt-t)/(Lt-rn),o=ab*Math.pow(lb,r);Math.abs(this.internal.snapGridSize-o)>Il&&(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 Ln){let i=r.mesh.material;i instanceof Ln&&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)>=cb,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 bb=[100,500,2e3,1e4];function to(n,e){return n.set(k.degToRad(e?.[0]??er[0]),k.degToRad(e?.[1]??er[1]),k.degToRad(e?.[2]??er[2]))}function ro(n,e){return n.set(e?.[0]??Qt[0],e?.[1]??Qt[1],e?.[2]??Qt[2])}function no(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 Q)){let s=t.material,a=t.color;if(s||a){let l=Cp(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 Cp(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 xs(n){n.traverse(e=>{e instanceof Q&&e.computeBoundingSphere()})}function Ep(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 wp(n,e=bb){for(let t of e)if(t>n)return t;return n*2}function Ll(n){for(;n.children.length>0;){let e=n.children[0];if(e instanceof Q)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 Ss(n){Ll(n),n.parent?.remove(n)}function Ms(n,e,t,r){let o=r||t?Cp(t,r):void 0;for(let i of n.children){if(!(i instanceof Q))continue;let s=Array.isArray(i.material)?i.material[0]?.name:i.material?.name,a=o?.[s],l=a?new G(a.color):t?new G(t):i.userData.originalColor;l&&(i.setColorAt(e,l),i.instanceColor&&(i.instanceColor.needsUpdate=!0))}}function nn(n,e){let t=new Ye;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 h=u.clone();return h.color?.setRGB(1,1,1),h})):(a=s.color?.clone(),s=s.clone(),s.color?.setRGB(1,1,1));let l=new Q(i,s,e);l.count=0,l.frustumCulled=!1,l.layers.enable(Fe.SHOULD_CAST_SHADOWS),l.userData={entities:{},originalColor:a},t.add(l)}}),t}function Al(n,e){let t=typeof e=="string"?new G(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 Rl(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 Dp(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 on(n,e){n.traverse(t=>{t instanceof Q&&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 _l(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 Tp(n){n.traverse(e=>{e instanceof Q&&(e.geometry.dispose(),Array.isArray(e.material)?e.material.forEach(t=>t.dispose()):e.material?.dispose())})}function ar(n,e){let t=e!==0,r=!1;return n.traverse(o=>{if(!(o instanceof Q)&&!("isMesh"in o&&o.isMesh))return;let i=o.layers.isEnabled(Fe.SHOULD_CAST_SHADOWS);t&&!i?(o.layers.enable(Fe.SHOULD_CAST_SHADOWS),r=!0):!t&&i&&(o.layers.disable(Fe.SHOULD_CAST_SHADOWS),r=!0)}),r}f();var Cs=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=`
1217
+ position: fixed;
1218
+ bottom: 10px;
1219
+ left: 10px;
1220
+ background: rgba(0, 0, 0, 0.8);
1221
+ color: #fff;
1222
+ font-family: monospace;
1223
+ font-size: 12px;
1224
+ padding: 10px;
1225
+ border-radius: 5px;
1226
+ z-index: 10000;
1227
+ max-height: 300px;
1228
+ overflow-y: auto;
1229
+ min-width: 200px;
1230
+ `,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)??"",h=t.get(c)??"";return u.localeCompare(h)});for(let l of a){let c=e.get(l);if(!c||c.size===0)continue;let u=t.get(l)??`unknown_${l}`,h=0;for(let y of c)h+=this.getActualInstanceCount(y);i+=c.size,s+=h,o+='<div style="margin: 6px 0 2px 0;">',o+=`<span style="color: #4fc3f7; font-weight: bold;">"${u}"</span>`,o+=`<span style="color: #aaa;"> (${h} total, ${c.size} batch${c.size!==1?"es":""})</span>`,o+="</div>";let d=Array.from(c).sort((y,b)=>y.id.localeCompare(b.id));for(let y of d){let b=this.getActualInstanceCount(y),M=y.count,p=b!==M,m=y.opacity===1?"":` @${(y.opacity*100).toFixed(0)}%`;o+='<div style="margin-left: 12px; color: #ccc; font-size: 11px;">',o+=`<span style="color: #81c784;">${y.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 sn=100,vb=!0,Es=class extends Y{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 Z;tempQuaternion=new Zt;tempEuler=new Ct;tempScale=new I;tempColor=new G;constructor(e,t){super(),this.state=e,this.convertTo3DMapPosition=t,this.debugUI=new Cs}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-VF2YNOHD.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=h=>{this.gltfCache.set(t,h),this.gltfLoadPromises.delete(t),a(h)},u=h=>{this.gltfLoadPromises.delete(t),l(h)};xu(e)?i.parse(Su(e),"",c,u):Mu(e)?i.parse(Cu(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 Ye;c.userData={nonInstanced:!0,entityId:String(e.id),type:"model"},l.traverse(p=>{let m=p;if("isMesh"in m&&m.isMesh===!0){let g=m.clone();g.geometry=m.geometry.clone(),g.geometry.applyMatrix4(m.matrixWorld),g.position.set(0,0,0),g.rotation.set(0,0,0),g.scale.set(1,1,1),Array.isArray(m.material)?g.material=m.material.map(v=>v.clone()):g.material=m.material.clone(),g.userData={entityId:String(e.id)},c.add(g)}});let{x:u,y:h}=this.convertTo3DMapPosition(a.geometry.coordinates[1],a.geometry.coordinates[0],0),d=a.geometry.coordinates[2]??0,y=(s.verticalOffset??0)+d;i.altitude=y,i.position.set(u,h,i.altitude);let b=s.scale??Qt,M=s.rotation??er;if(c.position.copy(i.position),c.rotation.set(k.degToRad(M[0]),k.degToRad(M[1]),k.degToRad(M[2])),c.scale.set(b[0],b[1],b[2]),s.color&&Al(c,s.color),s.opacity!=null&&s.opacity!==1&&Rl(c,s.opacity),s.visibleThroughGeometry&&Dp(c,!0),!s.EXPERIMENTAL_clippingEnabled){let p=s.opacity??1;ar(c,p)}r.add(c),i.mesh=c,i.meshContainer=c,i.instanceIndex=-1,no(e),this.nonInstancedModels.set(e.id,{urlHash:o,mesh:c}),this.updateDebugUI()}resizeInstanceContainer(e,t){let r=wp(e.maxCount),o=e.object,i=nn(t,r),s=o.children,a=i.children;for(let c=0;c<s.length;c++){let u=s[c],h=a[c];if(!(!(u instanceof Q)||!(h instanceof Q))){for(let d=0;d<e.count;d++)u.getMatrixAt(d,this.tempMatrix),h.setMatrixAt(d,this.tempMatrix),h.userData.entities[d]=u.userData.entities[d],u.instanceColor&&(u.getColorAt(d,this.tempColor),h.setColorAt(d,this.tempColor));h.count=e.count,h.instanceMatrix.needsUpdate=!0}}for(Ll(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=nn(r,sn);i={object:s,count:0,maxCount:sn},o.set(t,i);let a=this.createBatch(s,t,e,1,sn);i.batch=a}return i}createModelFromFeature(e,t,r){let o=new wr(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 Zo(i);o.instancingDisabled=s.visibleThroughGeometry===!0||s.EXPERIMENTAL_clippingEnabled===!0;let a=new J(o,s);return a.id=e,s.EXPERIMENTAL_clippingEnabled&&(a.components[7]=new Yo),a}async populateModelGroup(e,t,r){let o=bn(t),i=this.getOrLoadGLTF(t,o).then(l=>{let c=r.parent;if(!(c instanceof se))return;let u=c.userData.entityId,h=this.getOrCreateInstanceContainer(u,o,l);h.count+e.size>h.maxCount&&(h=this.resizeInstanceContainer(h,l)),h.object.parent||r.add(h.object);let y=new Z,b=new Ct,M=new Zt,p=new I,m,g,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(g=S.feature,S.instancingDisabled){this.createNonInstancedModel(v,l,r,o);continue}let T=C.opacity!=null&&C.opacity!==1;if(T){let P=C.opacity??1,O=Math.round(P*100),L,_,H=this.batchesByUrlHash.get(o);if(H){for(let B of H)if(B.containerId===c.userData.entityId&&Math.round(B.opacity*100)===O&&B.count<B.maxCount){L=B,_=B.mesh;break}}if(!L||!_){let B=nn(l,sn);B.userData.detached=!0,B.userData.sharedOpacity=P,r.add(B),L=this.createBatch(B,o,c.userData.entityId,P,sn),_=B,on(B,P),ar(B,P)}let V=L.count;S.mesh=_,S.instanceIndex=V,L.count++,this.detachedEntityIds.add(v.id)}else S.mesh=h.object,S.instanceIndex=h.count;no(v),C.dirty=!1,m=this.convertTo3DMapPosition(g.geometry.coordinates[1],g.geometry.coordinates[0],0),S.position.set(m.x,m.y,S.altitude),to(b,C.rotation),ro(p,C.scale),M.setFromEuler(b),y.compose(S.position,M,p);let w=S.mesh,D=S.instanceIndex;for(let P of w.children)P instanceof Q&&(P.setMatrixAt(D,y),P.userData.entities[D]=v.id,P.count=D+1,P.instanceMatrix.needsUpdate=!0);if(Ms(w,D,C.color,C.material),!T){h.count++;let P=this.getBatchForMesh(h.object);P&&(P.count=h.count)}xs(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 Ye}update(){for(let t of this.state.geometryGroupIdsToLoad.values()){let r=this.state.geometry3DMap.get(t);r instanceof Ie&&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(!vb||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 Ie))continue;let h=u.userData.modelURL;if(!h)continue;let d=bn(h),y=i.opacity??1,b=Math.round(y*100);e.has(d)||e.set(d,new Map);let M=e.get(d);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 se?a.userData.entityId:"unknown",c=nn(t,e.length);c.userData.detached=!0,c.userData.sharedOpacity=r,s.add(c);let u=this.createBatch(c,o,l,r,e.length);on(c,r),ar(c,r);let h=new Z,d=new Ct,y=new Zt,b=new I,M,p,m=0;for(let g of e){let v=g.components[0],x=g.components[1],S=v.mesh;if(S){let C=this.getBatchForMesh(S);C&&this.removeBatch(C),Ss(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),to(d,x.rotation),ro(b,x.scale),x.visible===!1&&b.set(0,0,0),y.setFromEuler(d),h.compose(v.position,y,b);for(let C of c.children)C instanceof Q&&(C.setMatrixAt(m,h),C.userData.entities[m]=g.id,C.count=m+1,C.instanceMatrix.needsUpdate=!0);Ms(c,m,x.color,x.material),m++}u.count=m,xs(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 Q&&(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),Ss(t),this.updateDebugUI();return}for(let l of t.children)if(l instanceof Q){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}),no(e),this.updateInstanceTransform(e),this.updateInstanceColor(e,t.color,t.material),r.mesh?.userData?.detached&&r.mesh){let h=t.opacity??1;on(r.mesh,h),ar(r.mesh,h)&&(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),h=`${s}_${a}_${u}`,d=t.get(h);d||(d={entities:[],targetOpacity:i,urlHash:s,containerId:a,gltf:l,parent:c},t.set(h,d)),d.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 Ie))continue;let u=c.userData.modelURL;if(!u)continue;let h=bn(u),d=this.gltfCache.get(h);if(!d)continue;let y=c.parent,b=y instanceof se?y.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,h,b,d,c)}else r(o,i,h,b,d,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,on(o.mesh,a),ar(o.mesh,a)&&(this.transparencyChanged=!0);else{let d=s[0]?.components[0]?.mesh?.parent;if(d instanceof Ie){let y=d.userData.modelURL;if(y){let b=bn(y),M=this.gltfCache.get(b),p=d.parent,m=p instanceof se?p.userData.entityId:"unknown";if(M)for(let g of s)r(g,a,b,m,M,d)}}}}for(let o of t.values()){let{entities:i,targetOpacity:s,urlHash:a,containerId:l,gltf:c,parent:u}=o,h=Math.round(s*100);for(let m of i){let g=m.components[0],v=g.mesh,x=this.getBatchForMesh(v),S=g.instanceIndex;x&&S!=null&&S>=0&&this.removeInstanceFromBatch(x,v,S)}let d,y,b=this.batchesByUrlHash.get(a);if(b){for(let m of b)if(m.containerId===l&&Math.round(m.opacity*100)===h&&m.count+i.length<=m.maxCount){d=m,y=m.mesh;break}}if(!d||!y){let m=Math.max(sn,i.length),g=nn(c,m);g.userData.detached=!0,g.userData.sharedOpacity=s,u.add(g),d=this.createBatch(g,a,l,s,m),y=g,on(g,s),ar(g,s)&&(this.transparencyChanged=!0)}let M,p;for(let m of i){let g=m.components[0],v=m.components[1],x=d.count;g.mesh=y,g.instanceIndex=x,p=g.feature,M=this.convertTo3DMapPosition(p.geometry.coordinates[1],p.geometry.coordinates[0],0),g.position.set(M.x,M.y,g.altitude),to(this.tempEuler,v.rotation),ro(this.tempScale,v.scale),v.visible===!1&&this.tempScale.set(0,0,0),this.tempQuaternion.setFromEuler(this.tempEuler),this.tempMatrix.compose(g.position,this.tempQuaternion,this.tempScale);for(let S of y.children)S instanceof Q&&(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),d.count++,y.userData.detached?this.detachedEntityIds.add(m.id):this.detachedEntityIds.delete(m.id)}xs(y),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),to(this.tempEuler,r.rotation),r.visible===!1?this.tempScale.set(0,0,0):ro(this.tempScale,r.scale),t.instancingDisabled){let a=t.meshContainer??t.mesh;a.position.copy(t.position),a.rotation.set(this.tempEuler.x,this.tempEuler.y,this.tempEuler.z),a.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 Q&&Ep(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;no(e),this.updateInstanceTransform(e);let o=r.opacity??1;Rl(t.mesh,o,r.visibleThroughGeometry),r.EXPERIMENTAL_clippingEnabled||ar(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||Ms(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&&(_l(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 Q&&(b.count=0,b.instanceMatrix.needsUpdate=!0);let y=this.instanceMap.get(r.containerId)?.get(r.urlHash);return y&&y.object===r.mesh&&(y.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),h=!1;if(u){for(let d of u)if(d.count>0){h=!0;break}}return Ss(t.mesh),t.mesh=null,this.updateDebugUI(),!h}for(let c of t.mesh.children)if(c instanceof Q){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 h=this.state.geometry3DMap.get(u);h?h.components[0].instanceIndex=o:A.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())Tp(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&&(_l(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 ws=class{#e;#n;#i=new I;#o=new U;constructor(e,t,r,o,i={}){this.#e=t,this.#n=new Yc(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 J)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 Pp=new Jt;var{DEFAULT_PITCH:Bl,DEFAULT_BEARING:Nl,DEFAULT_ZOOM_LEVEL:Gl,DEFAULT_MIN_ZOOM_LEVEL:xb,DEFAULT_MAX_ZOOM_LEVEL:Sb}=ot,Mb=k.radToDeg(.6435011087932844),Fl=class extends Y{options;container;Debug;#e;#n;#i;#o;get viewCamera(){return this.#o}get cameraObject(){return this.#n}#s;#a;#c;#h;get canvasWidth(){return this.#t.canvasWidth}get canvasHeight(){return this.#t.canvasHeight}rendererDomElement;get resolutionScale(){return this.map?._getClampedPixelRatio(this.canvasWidth,this.canvasHeight)??Hr()}#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;#d;#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 se("__scene"),hoverColor:"#f6efff",text3dHoverColor:"white",disableUpdateStateValidation:t.disableUpdateStateValidation??!1,insetsPadding:ko,shouldMeasureCanvas:!0,pixelRatio:this.resolutionScale,canvasWidth:0,canvasHeight:0,internalTweenGroup:new Js,externalTweenGroup:new Js,cameraObject:new ra,naturalBearing:0,containerOffset:[0,0],useStandaloneCamera:!1,directionalLight:new Bo(16777215,.3*Math.PI),ambientLight:new Bc(16777215,.741*Math.PI),renderer:void 0,threeJSScene:new wt,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 Ei(this.container,{outdoorEnabled:!!this.map})),this.#r.maskingSystem=this.#u(new ps(this.#t)),this.#p!=="outdoors-overlay"&&this.#r.htmlControlsSystem.addAttributionControl(this.options.attribution),window.MappedinDebug||(window.MappedinDebug={}),E.env.NODE_ENV==="test"&&(window.MappedinDebug.mapViewCoreInstance=this),this.#d=new Qo({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.#d.renderer,this.#e=this.#t.threeJSScene,this.#e.matrixWorldAutoUpdate=!1,this.#p!=="standalone"&&this.#e.add(uu()),this.#e.add(this.#t.geometryScene);let o=window.__THREE_DEVTOOLS__;E.env.NODE_ENV==="dev"&&typeof o<"u"&&(o.dispatchEvent(new CustomEvent("observe",{detail:this.#e})),o.dispatchEvent(new CustomEvent("observe",{detail:this.#d}))),this.#n=new ra(Mb,this.aspect,50,1e5),this.#t.cameraObject=this.#n,this.#o=new Tc,this.#o.matrixWorldAutoUpdate=!1,this.#n.renderOrder=999;let i=new He;i.add(this.#n),this.#h=new He,this.#h.add(i),this.#e.add(this.#h),this.#n.updateProjectionMatrix(),this.#n.updateMatrixWorld(!0),t.__EXPERIMENTAL_shadows?.enabled&&(this.#r.shadowsSystem=this.#u(new vs(this.#t,this.#d,this.#h,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.#d.domElement(),this.#s=new U;let s=new _e(1e6,1e6),a=new Te({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"&&E.env?.NODE_ENV!=="test"&&(this.#c=new ResizeObserver(Co(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%",E.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 xi(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 Yr(this.#n,this.#e,this.#d.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 Jn(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 Ci(this.#t,this.#r.cameraSystem));let u=()=>{let{panBounds:p,fov:m,convertAltitudeToZoomLevel:g}=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:T}=this.#r.cameraSystem.panBounds,w=C/S,D=this.getThreeCamera().getWorldPosition(new I),P=T.distanceTo(D),O=Math.abs(D.z-T.z),L=w*O/P,_=g(L);cu(_,this.camera.minZoomLevel)&&this.camera.setMinZoomLevel(_)}this.publish("pan-bounds-change",this.#r.cameraSystem.panBounds)};this.#r.panBoundsSystem.on("update",u,{signal:this.signal}),this.camera=this.#u(new vi(this,this.#r,this.#t));let h=()=>{this.#r.geometryInFocusSystem&&this.#r.geometryInFocusSystem.resize(),this.render()};this.camera.on("padding-change",h,{signal:this.signal}),this.camera.setZoomLevel(t.zoomLevel??Gl),this.camera.setBearing(t.bearing??Nl),this.camera.setPitch(t.pitch??Bl),this.camera.setMaxZoomLevel(Sb),this.camera.setMinZoomLevel(xb),this.#r.twoDEntitySystem=this.#u(new ws(this.container,this.#t,this.#t.geometry2DState,this.project,{workerUrl:Ks||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 Rn(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:sa,easing:"ease-out"})}),this.#r.interactionSystem.on("singletap-with-twofinger",()=>{this.#r.cameraSystem.enableZoom&&this.camera.animateTo({zoomLevel:this.camera.zoomLevel-1,duration:sa,easing:"ease-out"})}),this.#r.interactionSystem.on("hover",this.render),this.#r.interactionSystem.on("click",p=>{if(p.entity2D.some(g=>g.id==="watermark")&&typeof this.#r.watermarkSystem.options.onClick=="function"&&this.#r.watermarkSystem.options.interactive){this.#r.watermarkSystem.options.onClick();return}if(!p.position){A.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 Ri(this.#t,this.#w));let d=p=>{this.publish("geometry-in-focus",p)};this.#r.geometryInFocusSystem.on("geometry-in-focus",d,{signal:this.signal}),this.#r.drawSystem=this.#u(new ai(this.#t,this.convertTo3DMapPosition,this.convert3DMapPositionToCoordinate)),this.#r.exporterSystem=this.#u(new Fn(this.#t)),this.#r.batchedMeshSystem=this.#u(new ii(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 Es(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 is(this.#t)),this.#r.meshModificationSystem=this.#u(new as(this.#t)),this.#r.geometryDisposalSystem=this.#u(new us(this.#t)),this.#r.textureSystem=this.#u(new hs(this.#t)),this.#r.textureSystem.on("texture-added",this.render,{signal:this.signal}),this.#r.borderSystem=this.#u(new qu(this.#t,this.convertTo3DMapPosition)),this.#r.clippingPlaneSystem=this.#u(new ms(this.#t)),this.#r.renderOrderSystem=this.#u(new ds(this.#t)),this.#r.pluginSystem=this.#u(new fs),this.#r.customGeometrySystem=this.#u(new wi(this.#t,this.convertTo3DMapPosition));let y=typeof t.outlines=="object"?t.outlines:void 0;y&&(this.#t.outlinesOptions=y);let b=t.__TEST_synchronousIdleWork,M=b?.enabled&&typeof b.maxDelay=="number"?b.maxDelay:void 0;this.#r.outlineInterpolationSystem=this.#u(new Di(this.#t,y,!0,M)),this.#r.outlineInterpolationSystem.on("needs-render",this.render,{signal:this.signal}),this.#r.renderSystem=this.#u(new li(this.#d,this.#t,this.mode,this.#e,this.#n,this.viewCamera,this.#r)),this.#r.imageSystem=this.#u(new Li(this.#t,this.convertTo3DMapPosition,this.project,t.bearing,t.naturalBearing,t.imagePlacementOptions,t.transformImageRequest)),this.#r.text3DSystem=this.#u(new du(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.#B,{signal:this.signal}),this.#r.outdoorLayersSystem=this.#u(new Zi(this.map,M)),this.#r.occlusion2DSystem=this.#u(new cs(this.#t,this.convertTo3DMapPosition,this.#d)),t.occlusionEnabled&&this.#r.occlusion2DSystem.enable(),this.Debug=new ls(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(Hr()),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(Hr()),this.#B(),this.#C(),this.#r.cameraSystem.resize(this.canvasWidth,this.canvasHeight),this.#r.cameraSystem.dirty=!0,this.#r.cameraSystem.stateDirty=!0,this.map!=null){jo(this.map,this.camera.minZoomLevel,this.camera.maxZoomLevel);let l=this.camera.zoomLevel,c=k.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()};#D=new I;project=(e,t)=>{if(this.#n.position.z+this.camera.elevation>t.z){this.#D.copy(t);let r=this.#D.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 I&&(e.z=r.z)}else e.x=-1e3,e.y=-1e3,e instanceof I&&(e.z=1/0)};#_=(e,t)=>{this.#d.setBufferSize(e,t),this.#n.aspect=e/t,this.#n.updateProjectionMatrix(),this.#n.updateMatrixWorld(!0),this.#s.x=e,this.#s.y=t};#B=()=>{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 se(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&&Be(o,t.interactive,this.#t),t?.focusable!==void 0&&Jo(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 se&&i.addEntity(o),this.#l(),this.render()}else A.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 se?r:(A.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 se)return r}return t?this.#t.geometryScene:void 0};addCustomGeometry(e,t,r,o,i){if(this.#t.geometry3DMap.has(e))A.error(`Custom geometry with ID '${e}' already exists. The custom geometry cannot be added.`);else{let s=new qr(t,r),a=new J(s,new yt(o));o?.interactive!==void 0&&Be(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 se?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 Ie(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:Ko}),this.#t.geometry3DMap.set(e,s),a==="batched")for(let h of t.features){if(h.geometry==null||!["Polygon","MultiPolygon","LineString","MultiLineString"].includes(h.geometry.type))continue;let d=h?.id||h?.properties?.id||Rr(),y=l(h)??{color:Ko},b=this.#r.batchedMeshSystem.createEntityFromFeature(d,h,{outline:!0,...y});this.#t.geometry3DMap.set(d,b),s.userData.entities3D.add(d),this.#r.textureSystem.dirty=!0}else if(a==="merged"){let h=l()??{color:Ko},d=this.#r.batchedMeshSystem.createEntityFromFeature(e,t.features,{outline:!0,...h});this.#t.geometry3DMap.set(d.id,d),s.userData.entities3D.add(d.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&&fa(s,{enabled:c.__EXPERIMENTAL_maskEnabled,maskId:c.__EXPERIMENTAL_maskId,effect:c.__EXPERIMENTAL_maskEffect,mode:c.__EXPERIMENTAL_maskMode});let u=this.getParentContainer(i);u instanceof se&&u.addEntity(s),this.#r.panBoundsSystem.dirty=!0,this.#l(),this.render()}else A.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{Oh(e,t,r)}catch(i){A.error(i);return}if(!this.#t.geometry3DMap.has(e)&&!this.#t.geometry2DMap.has(e)){let i=new Vn(t),s=new J(i,new yt(r));s.id=e||Rr(),i.mesh.userData={entityId:s.id,type:"path"},this.#t.geometry3DMap.set(s.id,s),r?.interactive!=null&&Be(s,r.interactive,this.#t);let a=this.getParentContainer(o);a instanceof se&&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 A.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{fh(e,t,r)}catch(s){A.error(s);return}if(!this.#t.geometry3DMap.has(e)&&!this.#t.geometry2DMap.has(e)){let s=new Ie(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||Rr(),h=this.#r.modelSystem.createModelFromFeature(u,c,{...r});(c.properties.interactive!==void 0||r.interactive!=null)&&Be(h,c.properties.interactive??r.interactive,this.#t),r.clippingPlaneZOffset!=null&&(h.components[7]=new Yo,h.components[7].verticalOffset=r.clippingPlaneZOffset,r.clippingPlaneTopColor!=null&&(h.components[7].topColor=r.clippingPlaneTopColor),r.clippingPlaneTopVisible!=null&&(h.components[7].topVisible=r.clippingPlaneTopVisible)),h.parentId=s.userData.entityId,this.#t.geometry3DMap.set(u,h),s.userData.entities3D.add(u)}let a=this.getParentContainer(o);a instanceof se&&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 A.error(`Model group with ID '${e}' already exists. The model group cannot be added.`);return{id:e,type:"feature-collection"}}#T(e,t,r,o){let i=new ia(t,this.convertTo3DMapPosition(e[1],e[0],e[2]||0),o);return i.components[2]=new gs(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{$c(e,t,r||{})}catch(s){A.error(s);return}if(i===void 0||!this.#t.geometry2DMap.has(i)&&!this.#t.geometry3DMap.has(i)){let s=this.#T(e,new Go(t,r),r?.occluderId,r?.verticalOffset);s.id=i||String(s.id),i=s.id,r?.interactive!=null&&r.interactive!=="pointer-events-auto"&&Be(s,r?.interactive,this.#t),r?.enabled!=null&&qo(s,r.enabled),r?.occlude!=null&&da(s,r.occlude);let a=typeof r?.attachTo=="string"||typeof r?.attachTo=="number"?this.#t.geometry3DMap.get(r.attachTo):void 0;a instanceof J&&a.attach(s),this.getParentContainer(o)?.addEntity(s),this.#r.panBoundsSystem.expandBoundsIfOutside(s.object3d.position),this.render()}else A.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 Xo({...t,properties:{...t.properties,id:e,content:t.properties.text}}),s=new J(i,new In(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 se&&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 A.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");pu.parse(r)}catch(c){A.error(c);return}let o=this.#t.geometry3DMap.get(e);if(o?.type!=="geometry"){A.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"){A.error(".labelText3D failed: existing text3d not found");return}return{id:c.id,type:c.type}}let a=new Xo({type:"Feature",geometry:{coordinates:s?.position,type:"Point"},properties:{textArea:s,content:t,id:Rr()}});a.polygonEntityId=e;let l=new J(a,new In(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{qc(e,t,r||{})}catch(s){A.error(s);return}if(i===void 0||!this.#t.geometry2DMap.has(i)&&!this.#t.geometry3DMap.has(i)){let s=this.#T(e,new No(t,r||{},this.#t.pixelRatio),r?.occluderId,r?.verticalOffset);s.id=i||String(s.id),i=s.id,r?.interactive!=null&&Be(s,r?.interactive,this.#t),r?.enabled!=null&&qo(s,r.enabled),r?.occlude!=null&&da(s,r.occlude);let a=typeof r?.attachTo=="string"||typeof r?.attachTo=="number"?this.#t.geometry3DMap.get(r.attachTo):void 0;a instanceof J&&a.attach(s),this.getParentContainer(o)?.addEntity(s),this.#r.panBoundsSystem.expandBoundsIfOutside(s.object3d.position),this.#f(),this.render()}else A.error(`Label2D with ID '${i}' already exists. The label cannot be added.`);return{id:i,type:"label"}}addPath(e,t={},r){try{ah(e,t||{})}catch(a){A.error(a);return}let o=new Cr(e,Uu(t)),i=new J(o,new yt({color:t?.color??"#ff834c",altitude:t?.verticalOffset??.1}));i.id=t?.id||Rr(),o.mesh.userData={entityId:i.id,type:"path"},this.#t.geometry3DMap.set(i.id,i),t?.interactive!=null&&Be(i,t?.interactive,this.#t);let s=this.getParentContainer(r);return s instanceof se&&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&&Ce(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);Ce(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);Ce(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 Ie&&i.userData.entities3D.delete(t.id)}if(t.type==="model"){if(this.#r.modelSystem.removeInstance(t)&&t.object3d&&Ce(t.object3d),o){let s=this.#t.geometry3DMap.get(o);if(s instanceof Ie&&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&&Ce(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 J&&o.detach(t)}t.object3d&&Ce(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&&Ce(t.object3d),this.#t.geometry3DMap.delete(t.id),this.#l();else if(t.type==="text3d"){Ce(t.object3d);let{batchedText:r,textMesh:o,polygonEntityId:i}=t.components[0];if(o&&(r&&r.removeText(o),Ce(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 ye;if(e==null)t.setFromObject(this.#t.geometryScene);else{let r=xr(this.#t,e);if(r?.type==="geometry"&&r?.object3d!=null){let o=r.components[0],i=o instanceof ie?o.geometry:void 0;o.mesh instanceof Ro&&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(Ur(t))return eu(t).map(this.convert3DMapPositionToCoordinate)}hasState(e){return xr(this.#t,e)!=null}getState(e){if(e==null)return{type:"map-view",hoverColor:this.#t.hoverColor,text3dHoverColor:this.#t.text3dHoverColor};let t=xr(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:Xu(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 Zu(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:Dn(r.initialRank),verticalOffset:t.verticalOffset,options:{rank:Dn(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:Dn(r.initialRank),contentHTML:r.contentHtml,options:{rank:Dn(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],h=t.components[1],d=t.components[6],y=t.components[2],b=t.components[3],M=t.parentObject3D;return{id:t.id,type:"geometry",opacity:h.opacity,initialColor:i,color:r,focusable:u!=null&&u.vertices!=null&&u.vertices.length>0,initialTopColor:s,topColor:a,side:h.side,hoverColor:o,hovered:!!y?.hover,height:h.height,visible:h.visible,outline:b?.enabled,showImage:h.showImage,texture:d?.texture?.path,topTexture:d?.topTexture?.path,flipImageToFaceCamera:h.flipImageToFaceCamera,enableImageCollisions:h.enableImageCollisions,parent:{id:M?.userData.entityId,type:M?.type},altitude:l,bevel:h.bevel,position:this.convert3DMapPositionToCoordinate(c.position),interactive:c.pointerEventsPassThrough?"pass-through":t.components[2]!=null,borderVisible:h.borderVisible,borderColor:h.borderColor,borderWidth:h.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??er,scale:o.scale??Qt,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,dashDiscrete:r.dashDiscrete,dashCornerRadius:r.dashCornerRadius,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 Xo){Hu(t);let r=t.components[0],o=t.components[1],{textMesh:i}=r,s=r.feature.properties,a=r.mesh?.parent;a instanceof se&&a.children.find(d=>d.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({},Tt,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=xr(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&&(Wc(e.hoverColor)?this.#t.hoverColor=e.hoverColor??this.#t.hoverColor:A.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=xr(this.#t,e);if(r!=null){if(r.type==="custom-geometry"){let o=this.#t.geometry3DMap.get(r.id);if(o instanceof J&&o.components[0]instanceof qr){let i=t;Mr(r,this.#t,i.visible),An(r,this.#t,i.altitude),ua(r,i.position,this.convertTo3DMapPosition,this.#r.panBoundsSystem),ha(r,this.getParentContainer(i.parent,!1)),Be(r,i.interactive,this.#t)&&this.#l()}}else if(r.type==="path"){let o=t;Be(r,o.interactive,this.#t)&&this.#l(),An(r,this.#t,o.verticalOffset),zu(r,this.#t,o)}else if(r.type==="model"){let o=t;Be(r,o.interactive,this.#t)&&this.#l(),Mr(r,this.#t,o.visible),Vu(r,o,this.convertTo3DMapPosition,this.#r.panBoundsSystem),ju(r,o)}else if(r.type==="group-container"){let o=t;Mr(r,this.#t,o.visible)&&(this.#r.pathSystem.verticalDistanceDirty=!0,this.#r.geometryInFocusSystem.focusablesDirty=!0),An(r,this.#t,o.altitude)&&(this.#r.pathSystem.verticalDistanceDirty=!0),Be(r,o.interactive,this.#t)&&this.#l(),$o(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),Jo(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()),wu(r,this.#t,o),Au(r,this.#t,o.hoverColor),ga(r,this.#t,o.outline),o.height!=null&&ca(r,this.#t,o.height),ma(r,this.#t,o)&&(this.#r.textureSystem.dirty=!0),ma(r,this.#t,o),Du(r,this.#t,o.shading),$o(r,this.#t,o.opacity)&&(this.#r.outlineInterpolationSystem.outlineOpacitiesDirty=!0),Be(r,o.interactive,this.#t)&&(this.#l(),this.#f(),this.#r.interactionSystem.dirty3D=!0),ya(r,this.#t,o.side),fa(r,{maskId:o.maskId,enabled:o.maskEnabled,effect:o.maskEffect,mode:o.maskMode}),Bu(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 ie){let o=t;if(Mr(r,this.#t,o.visible)&&this.#l(),ga(r,this.#t,o.outline),Tu(r,o),Jo(r,o.focusable)&&(this.#r.geometryInFocusSystem.focusablesDirty=!0),Gu(r,o.renderOrder)&&(this.#r.meshDetachmentSystem.dirty=!0),Nu(r,o.opacity)&&(this.#r.meshDetachmentSystem.dirty=!0,this.#r.interactionSystem.dirty3D=!0,this.#r.outlineInterpolationSystem.outlineOpacitiesDirty=!0),pa(r,o.flipImageToFaceCamera),_u(r,o.enableImageCollisions),An(r,this.#t,o.altitude)){let i=r.components[1],s=(i.altitude??0)+(i.height??0);this.#r.panBoundsSystem.expandBoundsIfOutside(new I(0,0,s)),this.#r.shadowsSystem&&(this.#r.shadowsSystem.needsRender=!0)}if(o.height!=null&&ca(r,this.#t,o.height)){let i=r.components[1],s=(i.altitude??0)+(i.height??0);this.#r.panBoundsSystem.expandBoundsIfOutside(new I(0,0,s)),this.#r.shadowsSystem&&(this.#r.shadowsSystem.needsRender=!0)}Fu(r,o)&&(this.#r.meshDetachmentSystem.dirty=!0,this.#r.textureSystem.dirty=!0),Pu(r,o,this.#t.outlinesOptions?.darkenFactor),Lu(r,o.hoverColor),Be(r,o.interactive,this.#t)&&(this.#r.interactionSystem.dirty3D=!0),Ru(r,o.hovered),ya(r,this.#t,o.side),ku(r,o)}}else if(r.type==="label"||r.type==="marker"){let o=t;Ou(r,o,this.#t),Iu(r,o,this.#t)&&(this.#f(),this.#r.twoDEntitySystem.markDirty()),ua(r,o.position,this.convertTo3DMapPosition,this.#r.panBoundsSystem),ha(r,this.getParentContainer(o.parent,!1))&&(this.#f(),this.#r.panBoundsSystem.dirty=!0),qo(r,o.enabled),Mr(r,this.#t,o.visible)}else if(r.type==="image"){let o=t;Mr(r,this.#t,o.visible),$o(r,this.#t,o.opacity),pa(r,o.flipImageToFaceCamera),Be(r,o.interactive,this.#t)&&this.#l()}else if(r.type==="text3d"){let o=t;Wu(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 U(i,s),l,c;if(r?(Pp.setFromCamera(a,this.#n),l=Pp.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 U;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}=Ho(this.#t.center?.[1]??0,this.#t.center?.[0]??0,e,t);return o?(o.set(i,s,r),o):new I(i,s,r)}convert3DMapPositionToCoordinate=e=>{let{lat:t,lon:r}=Uo(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 Go?o.push(l.id):l.components[0]instanceof No&&i.push(l.id));let s=e.entity3D?.components[0],a=e.entity3D?.id;return{coordinate:this.convert3DMapPositionToCoordinate(t),geometry:r,paths:s instanceof Cr&&a!==void 0?[a]:[],markers:o,models:s instanceof wr&&a!==void 0?[a]:[],images:s instanceof Vn&&a!==void 0?[a]:[],labels:i,containers:Array.isArray(e.groupContainers)?e.groupContainers.map(l=>l.userData.entityId):[]}};setBackgroundColor=(e,t)=>{this.#d.setBackgroundColor(e,t)};get backgroundColor(){return typeof this.#d.backgroundColor=="string"?this.#d.backgroundColor:`#${this.#d.backgroundColor.getHexString()}`}get backgroundAlpha(){return this.#d.backgroundAlpha}getThreeRenderer(){return this.#d}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?lu(t):void 0}#L=new Fr;#N=new Z;isInView(e){let t=xr(this.#t,e);if(this.#N.identity().multiply(this.#n.projectionMatrix).multiply(this.#n.matrixWorldInverse),this.#L.setFromProjectionMatrix(this.#N),t instanceof ia)return this.#L.containsPoint(t.position);if(t instanceof J){let r=t?.components[0];if(r instanceof qr||r instanceof wr)return this.#L.containsPoint(this.convertTo3DMapPosition(r.feature.geometry.coordinates));if(r instanceof ie){let o=new ye(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]=hu(this.container,t),l=new Kt(o,i,s,a);return this.#r.twoDEntitySystem.visibleCollidersQTree.queryRect(l).filter(d=>r?l.contains(d):l.intersects(d)).map(d=>this.#t.geometry2DMap.get(d.userData.entityId)).filter(d=>d!=null).filter(d=>d.components[0]instanceof No||d.components[0]instanceof Go).map(d=>d.id.toString())}#G=e=>{A.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=Ht(()=>{this.publish("user-interaction-start",void 0)},0,!0);#v=Ht(()=>{this.publish("user-interaction-end",void 0),this.render()},0,!0);onMapLibreEvent(e,t){if(!this.map){A.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 rr.load(Ju).then(e=>(this.#e&&(this.#e.environment?.dispose(),e.mapping=yc,this.#e.environment=e,this.render()),e))}computeMinZOffsetBetweenContainers(e,t,r){if(!e||!t)return-1;va(e,"group-container"),va(t,"group-container"),e.updateMatrixWorld(!0),t.updateMatrixWorld(!0);let o=Vo(e,this.getThreeCamera()),i=t.clone(!0);Wo(i,!0),i.updateMatrixWorld();let s=Vo(i,this.getThreeCamera());if(!Ur(o)||!Ur(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(),Vo(i,this.#n,s),l=o.intersectsBox(s),r){let c=la(o,"blue",this.container),u=la(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"&&E.env.NODE_ENV!=="test"&&(A.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){A.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.#d.destroy(),this.#e?.traverse(e=>{Ce(e),"dispose"in e&&typeof e.dispose=="function"&&e.dispose()}),this.#e=void 0,this.#r=void 0,this.#H(),this.#d=void 0)};#k=new I;#U=new I},lr=Fl;f();var Cb=5,Eb=2e3;function Ip({refreshOutdoorToken:n,headers:e,reloadSource:t,maxAttempts:r=Cb,backoffMs:o=Eb,now:i=()=>Date.now()}){let s=!1,a=0,l=0,c,u=b=>{if(b)try{t(b)}catch(M){A.warn("Failed to reload outdoor source after token refresh:",M)}},h=b=>{a+=1,!(a>=r||c!==void 0)&&(c=setTimeout(()=>{c=void 0,d(b)},o))},d=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"]){h(b);return}e["x-mappedin-tiles-key"]=p,a=0,u(b)}catch(p){A.warn("Failed to refresh outdoor tiles token:",p),h(b)}finally{s=!1}}};return{recoverFromTileAuthError:d,dispose:()=>{c!==void 0&&(clearTimeout(c),c=void 0)}}}f();function Op(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(k.degToRad(e.getBearing())),t.setTilt(k.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 wb(n,e){Db(n,e)(n.getScene(),e),Tb(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 Db(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?Vc(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 Tb(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 kl=class extends Y{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(k.degToRad(this.map.getBearing())),this.cameraSystem.setTilt(k.degToRad(this.map.getPitch()))};handleMoveEnd=()=>{this.cameraSystem.endGesture()};handleError=e=>{A.warn(e)};onAdd(e){this.origin=this.origin||e.getCenter().toArray(),this.gl=e.painter.context.gl,this.core=new lr(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=vr.fromLngLat(this.origin,0);return this.layer=zo(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 ke=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 Ee([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 Ds(n,e,t,r){let[o,i]=n,[s,a]=e,[l,c]=t,[u,h]=r;if(i===a&&o===s||c===h&&l===u)return null;let d=(u-l)*(a-i)-(h-c)*(s-o);if(d===0)return null;let y=((h-c)*(o-l)-(u-l)*(i-c))/d,b=((a-i)*(o-l)-(s-o)*(i-c))/d;if(y<0||y>1||b<0||b>1)return null;let M=i+y*(a-i);return[o+y*(s-o),M]}f();f();function Ts(n,e,t,r){r===void 0&&(r={});var o=_i(n),i=Do(o[0]),s=Do(o[1]),a=Do(t),l=uc(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)),h=Xs(u),d=Xs(c);return Eo([h,d],r.properties)}function zl(n,e,t,r){let o=Ts(n,t/1e3,r),i=Ts(e,t/1e3,r);return[o.geometry.coordinates,i.geometry.coordinates]}f();function Ul(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 Lp=111e3;function it(n,e,t=[],r=0){let o=!0,i=n.geometry.coordinates,s=e.geometry.coordinates,a=Ul(Ee(i,s)-Math.PI/2),l=Ul(Ee(i,s)+Math.PI/2),c=r/Lp,u=r/(Lp*Math.cos(i[1]*Math.PI/180)),h=Math.min(i[1],s[1])-c,d=Math.max(i[1],s[1])+c,y=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])<h||Math.min(M[0][1],M[1][1])>d||Math.max(M[0][0],M[1][0])<y||Math.min(M[0][0],M[1][0])>b)){if(r>0){let p=zl(i,s,r,a),m=zl(i,s,r,l);if(Ds(p[0],p[1],M[0],M[1])||Ds(m[0],m[1],M[0],M[1]))return o=!1,!1}else if(Ds(i,s,M[0],M[1]))return o=!1,!1}return o}f();function Ap(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),h=l/u,d=c/u,y={x:o+h*e,y:i+d*e},b={x:o-h*e,y:i-d*e};return[y,b]}var oo=.4,Ps=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=mh(e.geometry.coordinates,o.geometry.coordinates);return Math.min(r,i)},Number.MAX_VALUE)}hasLineOfSight=(e,t,r=[],o=oo)=>it({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={},h=new Set,d=[];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 y=l.shift();if(!y)break;let b=y.node,M=y.distance;if(!h.has(b.properties.id)){if(h.add(b.properties.id),d.length>=s)break;b.properties.id!=null&&r.includes(b.properties.id?.toString())&&(i?this.hasLineOfSight(a.geometry.coordinates,b.geometry.coordinates,o)&&d.push({feature:b,distance:M}):d.push({feature:b,distance:M}));for(let p of this.edges[b.properties.id]){let m=p.destination,g=M+p.distance,v=u[b.properties.id]+p.weight;g>t||h.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:g}))}}}return d.sort((y,b)=>y.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:h}=this.#a(a,l);for(;c.length>0;){let d=c.shift();if(!d)break;if(this.#c(d.origin,l))return this.#h(u,d.origin.properties.id);for(let y of this.edges[d.origin.properties.id]){let b=i?.get(y)??y.weight,M=y.destination.properties.map!==y.origin.properties.map,p=r?.has(y.destination.properties.id);if(r?.has(y.origin.properties.id)&&(M||p)||s?.has(y.origin.properties.id))continue;let m=h[d.origin.properties.id]+b+this.#g(y.destination,o);if(m!==1/0&&(h[y.destination.properties.id]==null||m<h[y.destination.properties.id])){let g=m+this.getShortestEuclideanDistance(y.destination,l);h[y.destination.properties.id]=m,u[y.destination.properties.id]=y,c.push({origin:y.destination,priority:g})}}c.sort((y,b)=>y.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=Oe(o.geometry.coordinates,l.geometry.coordinates),u=Ee(o.geometry.coordinates,l.geometry.coordinates);return new ke({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)}#h(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])&&It(e.geometry.coordinates,o.geometry.geometry)&&(r+=Math.max(0,o.cost));return r}};f();function Pb(n,e,t,r){let o=t[n].origin,i=e===t.length?r:t[e].origin;return Oe(o.geometry.coordinates,i.geometry.coordinates)}function Rp(n,e,t,r=oo){if(n.length<3)return n;let o=1e-4,i=n.length,s=new Set;for(let d=0;d<i;d++)n[d].origin.properties.preventSmoothing&&s.add(d);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 d=0;d<i;d++){let y=!0;if(l[d].cost!==1/0){for(let b=d+1;b<=i;b++){let M=b===i?a:n[b].origin;if(Oe(n[d].origin.geometry.coordinates,M.geometry.coordinates)<.01)continue;let m=b===d+1&&b<i&&s.has(b),g=b===d+1&&s.has(d);if(!m&&!g&&!it(n[d].origin,M,e,r))continue;if(b>d+1){let T=!1;for(let w=d+1;w<b;w++)if(s.has(w)){T=!0;break}if(T)continue}let v=Pb(d,b,n,a),S=(b-d-1)*o,C=l[d].cost+v-S;C<l[b].cost&&(l[b]={cost:C,prev:d},y=!1)}y&&l[d+1].cost===1/0&&(l[d+1].cost=l[d].cost,l[d+1].prev=d)}}let c=[],u=i;for(;u!==-1;)c.unshift(u),u=l[u].prev===-1?u-1:l[u].prev;let h=[];for(let d=0;d<c.length-1;d++){let y=c[d],b=c[d+1],M=n[y].origin,p=b===i?a:n[b].origin;h.push(new ke({origin:M,destination:p,distance:Oe(M.geometry.coordinates,p.geometry.coordinates),angle:Ee(M.geometry.coordinates,p.geometry.coordinates),multiplicativeDistanceWeightScaling:t}))}return h}f();var Bp=yn(ji());f();var _p=lc("Navigator");function Is(n,e,t){if(n==null||n[e]==null)return!1;let r=1<<t;return(n[e]&r)!==0}f();var Ib=.5;function Fp(n,e,t,r,o,i){if(!n?.geoJSON?.geometry?.coordinates)return null;let[s,a]=Ap(r,Ib),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),h=i(c.x,c.y),d={type:"Feature",geometry:{type:"Point",coordinates:[u.lon,u.lat]},properties:{id:`${e}_buffer_entry`,map:t,neighbors:[],preventSmoothing:!0}},y={type:"Feature",geometry:{type:"Point",coordinates:[h.lon,h.lat]},properties:{id:`${e}_buffer_exit`,map:t,neighbors:[],preventSmoothing:!0}};return{entryNode:d,exitNode:y,entryMeters:l,exitMeters:c}}function je(n){return n.properties.floor??n.properties.map}function Np(n,e,t,r){let o=[n[0].origin];for(let w=0;w<n.length;w++)o.push(n[w].destination);let i=new Map,s=new Map;for(let w=0;w<o.length;w++)i.set(o[w].properties.id,o[w]),s.set(w,o[w]);let a=o[0].geometry.coordinates[1],{toCartesian:l,toGeographic:c}=fi(a),u=o.map((w,D)=>{let P={x:0,y:0,nodeId:w.properties.id,originalIndex:D};return l(w.geometry.coordinates,P),P}),h=new Set,d=new Map,y=new Set;for(let w=0;w<o.length;w++){let D=e(o[w].properties.id);if(D&&(h.add(w),d.set(w,D)),w<o.length-1){let P=je(o[w]),O=je(o[w+1]);P!==O&&(y.add(w),y.add(w+1),w>0&&y.add(w-1))}}if(n.length<3&&h.size===0)return n;let b=n.length>=3?(0,Bp.default)(u,.7,!1):u,M=new Set;for(let w=0;w<b.length;w++)M.add(b[w].originalIndex);let p=[];for(let w of h)M.has(w)||p.push(w);let m=b.slice(),g=.25;for(let w of y){if(M.has(w))continue;let D=s.get(w);if(!D)continue;let P=-1;for(let O=0;O<m.length-1;O++)if(m[O].originalIndex<w&&m[O+1].originalIndex>w){P=O+1;break}if(P!==-1){let O={x:0,y:0,nodeId:D.properties.id,originalIndex:w};l(D.geometry.coordinates,O),m.splice(P,0,O)}}for(let w of p){let D=s.get(w);if(!D)continue;let P=-1;for(let O=0;O<m.length-1;O++)if(m[O].originalIndex<w&&m[O+1].originalIndex>w){P=O+1;break}if(P!==-1){let O={x:0,y:0,nodeId:D.properties.id,originalIndex:w};l(D.geometry.coordinates,O);let L=Ba(O,m[P-1]),_=Ba(O,m[P]);L<g?m[P-1]=O:_<g?m[P]=O:m.splice(P,0,O)}}let v=[],x={x:0,y:0},S={x:0,y:0},C=new Map;for(let w=0;w<m.length;w++)C.set(m[w].originalIndex,w);for(let w of h){let D=s.get(w);if(!D)continue;let P=d.get(w);if(!P)continue;let O=C.get(w)??-1;if(O!==-1){let L;O>0&&(L={x:m[O-1].x,y:m[O-1].y});let _=P.geoJSON.geometry.coordinates;l(_[0],x),l(_[1],S);let H=[x,S],V=D.properties.id,B=je(D)||"test-floor",ee=Fp(P,V,B,H,L,c);if(ee){let fe={x:ee.entryMeters.x,y:ee.entryMeters.y,nodeId:ee.entryNode.properties.id,originalIndex:w-.5},$={x:ee.exitMeters.x,y:ee.exitMeters.y,nodeId:ee.exitNode.properties.id,originalIndex:w+.5};i.set(ee.entryNode.properties.id,ee.entryNode),i.set(ee.exitNode.properties.id,ee.exitNode),v.push(fe,$)}}}if(m.push(...v),m.sort((w,D)=>w.originalIndex-D.originalIndex),r&&m.length>=3)for(let w=0;w<m.length-1;w++){let D=m[w];if(D.nodeId.endsWith("_buffer_exit")){let P=m[m.length-1];if(w<m.length-2){let O=!1;for(let L=w+1;L<m.length-1;L++)if(m[L].nodeId.endsWith("_buffer_entry")||m[L].nodeId.endsWith("_buffer_exit")){O=!0;break}if(!O){let L=i.get(D.nodeId),_=i.get(P.nodeId);if(L&&_){if(je(L)!==je(_))continue;if(it(L,_,r,.1)){let H=m.length-w-2;m.splice(w+1,H)}}}}}}if(r&&m.length>=3){let w=m[0],D=-1;for(let P=1;P<m.length;P++)if(m[P].nodeId.endsWith("_buffer_entry")){D=P;break}if(D>1){let P=!1;for(let O=1;O<D;O++)if(m[O].nodeId.endsWith("_buffer_entry")||m[O].nodeId.endsWith("_buffer_exit")){P=!0;break}if(!P){let O=m[D],L=i.get(w.nodeId),_=i.get(O.nodeId);if(L&&_&&je(L)===je(_)){if(it(L,_,r,.1)){let H=D-1;m.splice(1,H)}}}}}let T=[];for(let w=0;w<m.length-1;w++){let D=m[w],P=m[w+1],O=i.get(D.nodeId),L=i.get(P.nodeId);O&&L?T.push(new ke({origin:O,destination:L,distance:Oe(O.geometry.coordinates,L.geometry.coordinates),angle:Ee(O.geometry.coordinates,L.geometry.coordinates),multiplicativeDistanceWeightScaling:t})):_p.warn(`Origin or destination node not found for point ${D.nodeId} or ${P.nodeId}`)}return T}function Re(n,e){return new ke({origin:n,destination:e,distance:Oe(n.geometry.coordinates,e.geometry.coordinates),angle:Ee(n.geometry.coordinates,e.geometry.coordinates)})}function Gp(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,h=it(n[s].origin,n[a].origin,e,u),d=n[a].origin.properties.preventSmoothing,y=a-1;if(c){s!==a&&(h?(i.push(Re(n[s].origin,n[a].origin)),s=a):(s!==y&&(i.push(Re(n[s].origin,n[y].origin)),s=y),s!==a&&(i.push(Re(n[s].origin,n[a].origin)),s=a))),l&&i.push(Re(n[a].origin,n[a].destination));continue}if(d)h?(i.push(Re(n[s].origin,n[a].origin)),s=a):s!==y&&(i.push(Re(n[s].origin,n[y].origin)),s=y),i.push(Re(n[s].origin,n[a].origin)),s=a,l&&i.push(Re(n[a].origin,n[a].destination));else if(h)l&&(it(n[s].origin,n[a].destination,e,.7)?i.push(Re(n[s].origin,n[a].destination)):(i.push(Re(n[s].origin,n[a].origin)),i.push(Re(n[a].origin,n[a].destination))),s=a);else{if(s===y){l&&(i.push(Re(n[s].origin,n[a].origin)),i.push(Re(n[a].origin,n[a].destination)));continue}i.push(Re(n[s].origin,n[y].origin)),s=y,l&&(i.push(Re(n[s].origin,n[a].origin)),i.push(Re(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:je(a.destination)})}return i}f();function kp(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&&Is(n[s]?.origin?.properties?.flags??[],r.outdoors.index,r.outdoors.bit)||n[s].origin.properties.preventSmoothing||!it(n[s].origin,n[a].origin,e,t)){let l=a-1;i.push(new ke({...n[s],destination:n[l].origin,distance:Oe(n[s].origin.geometry.coordinates,n[l].origin.geometry.coordinates),angle:Ee(n[s].origin.geometry.coordinates,n[l].origin.geometry.coordinates)})),s=l}return i.push(new ke({...n[s],destination:n[n.length-1].origin,distance:Oe(n[s].origin.geometry.coordinates,n[n.length-1].origin.geometry.coordinates),angle:Ee(n[s].origin.geometry.coordinates,n[n.length-1].origin.geometry.coordinates),multiplicativeDistanceWeightScaling:o}),n[n.length-1]),i}f();var zp=yn(ji());function Up(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}=fi(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,zp.default)(a,.7,!1):a,h=new Map;for(let b=0;b<u.length;b++)h.set(u[b].originalIndex,b);let d=new Set;for(let b of l){let M=h.get(b);if(M!==void 0){if(M>0){let p=u[M-1].nodeId;d.add(p)}if(M<u.length-1){let p=u[M+1].nodeId;d.add(p)}}else{let p,m;for(let g=0;g<u.length-1;g++){let v=u[g].originalIndex,x=u[g+1].originalIndex;if(v<b&&b<x){p=u[g].nodeId,m=u[g+1].nodeId;break}}p&&d.add(p),m&&d.add(m)}}let y=0;for(let b of n)d.has(b.origin.properties.id)&&(b.origin.properties.preventSmoothing||(b.origin.properties.preventSmoothing=!0,t.add(b.origin.properties.id))),d.has(b.destination.properties.id)&&(b.destination.properties.preventSmoothing||(b.destination.properties.preventSmoothing=!0,t.add(b.destination.properties.id))),y++;return t}f();f();var Os={accessible:"accessible",outdoors:"outdoors",public:"public"};f();f();function so(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=Ob(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(d=>[Hp(d,a),d])),h=l.map(d=>{let y=c.get(Hp(d,a));return y?so(d,y,t):d});r[s]=h}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]=so(a,i,t):r[o]=i}}else r[o]=i;return r}function Ob(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 Hp(n,e){return e.reduce((t,r)=>{if(t&&typeof t=="object")return t[r]},n)}f();var Lb=n=>{if(n==="space"||n==="obstruction"||n==="entrance")return{}},Ab=/\.json|\.geojson$/,Ls=(n,e,t)=>{let r=n[e];if(typeof r!="object"||Object.keys(r).length===0)return Lb(e);let o={};for(let[i,s]of Object.entries(r)){let a=i.replace(Ab,"");o[a]=JSON.parse(t(s))}return o},Rb=["floorstack.json","styles.json","shapes.json","mapstack.json","floor.geojson","tileset.json","location.json","category.json","navigationFlags.json","annotation-symbols.json"],_b=Rb,Fb=["annotation","textAreas","enterprise","floorImages","shapeInstances","modelInstances","window","area","facade"],Bb=Fb,Nb=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:Ls(n,"space",t),obstruction:Ls(n,"obstruction",t),entrance:Ls(n,"entrance",t)};for(let o of _b)n[o]&&(r[o]=JSON.parse(t(n[o])));for(let o of Bb)n[o]&&(r[o]=Ls(n,o,t));return r};f();f();f();var ao=["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"],Gb=[...ao,"unknown"],Hl=Object.freeze(Object.fromEntries([...ao,"unknown"].map(n=>[n,n])));f();var lo=["reference-point","checkpoint","checkpoint-passport","parent"],kb=[...lo,"unknown"],zb=Object.freeze(Object.fromEntries([...lo,"unknown"].map(n=>[n,n])));var co=["closed-temporarily","new","pop-up","coming-soon","relocated"],Ub=[...co,"unknown"],Hb=Object.freeze(Object.fromEntries([...co,"unknown"].map(n=>[n,n])));f();var uo=["left","center","right"],Wb=[...uo,"unknown"],Vb=Object.freeze(Object.fromEntries([...uo,"unknown"].map(n=>[n,n])));f();var ho=["near","center"],jb=[...ho,"unknown"],Zb=Object.freeze(Object.fromEntries([...ho,"unknown"].map(n=>[n,n])));f();var po=["top","side"],Xb=[...po,"unknown"],Yb=Object.freeze(Object.fromEntries([...po,"unknown"].map(n=>[n,n])));var mo=["inside","outside","both"],qb=[...mo,"unknown"],$b=Object.freeze(Object.fromEntries([...mo,"unknown"].map(n=>[n,n])));f();var As=["elevator","escalator","travelator","stairs","door","ramp","ladder"],AO=[...As,"unknown"],Wl=Object.freeze(Object.fromEntries([...As,"unknown"].map(n=>[n,n])));f();var Rs=["room","hallway","wall","object","poi","area","window"],FO=[...Rs,"unknown"],BO=Object.freeze(Object.fromEntries([...Rs,"unknown"].map(n=>[n,n])));f();f();var _s=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}}},Fs=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 Wp(e(this.value))}mapAsync(e){return e(this.value).then(t=>Wp(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:cr()}or(e){return this}orElse(e){return this}xor(e){return e.isSome()?cr():this}toString(){return`Some(${this.value})`}okOr(e){return st(this.value)}okOrElse(e){return st(this.value)}iter(){return new _s(this.value)}[Symbol.iterator](){return this.iter()}zip(e){return e.isSome()?an([this.value,e.value]):cr()}zipWith(e,t){return e.isSome()?an(t(this.value,e.value)):cr()}get[Symbol.toStringTag](){return"Some"}},Bs=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 ur(e)}okOrElse(e){return ur(e())}iter(){return new _s(null)}[Symbol.iterator](){return this.iter()}zip(e){return this}zipWith(e,t){return this}get[Symbol.toStringTag](){return"None"}},an=n=>new Fs(n),cr=()=>new Bs,Wp=n=>n instanceof Fs||n instanceof Bs?n:n==null?cr():an(n);var Ns=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 an(this.value)}err(){return cr()}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 st(e(this.value))}async mapAsync(e){return e(this.value).then(st)}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 Ns(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"}},jl=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 cr()}err(){return an(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 Ns(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"}},st=n=>new Vl(n),ur=n=>new jl(n);f();var $e=Uint8Array,ln=Uint16Array,Jb=Int32Array,Vp=new $e([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]),jp=new $e([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]),Kb=new $e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Zp=function(n,e){for(var t=new ln(31),r=0;r<31;++r)t[r]=e+=1<<n[r-1];for(var o=new Jb(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}},Xp=Zp(Vp,2),Yp=Xp.b,Qb=Xp.r;Yp[28]=258,Qb[258]=28;var qp=Zp(jp,0),ev=qp.b,jO=qp.r,ql=new ln(32768);for(K=0;K<32768;++K)At=(K&43690)>>1|(K&21845)<<1,At=(At&52428)>>2|(At&13107)<<2,At=(At&61680)>>4|(At&3855)<<4,ql[K]=((At&65280)>>8|(At&255)<<8)>>1;var At,K,fo=(function(n,e,t){for(var r=n.length,o=0,i=new ln(e);o<r;++o)n[o]&&++i[n[o]-1];var s=new ln(e);for(o=1;o<e;++o)s[o]=s[o-1]+i[o-1]<<1;var a;if(t){a=new ln(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],h=s[n[o]-1]++<<u,d=h|(1<<u)-1;h<=d;++h)a[ql[h]>>l]=c}else for(a=new ln(r),o=0;o<r;++o)n[o]&&(a[o]=ql[s[n[o]-1]++]>>15-n[o]);return a}),go=new $e(288);for(K=0;K<144;++K)go[K]=8;var K;for(K=144;K<256;++K)go[K]=9;var K;for(K=256;K<280;++K)go[K]=7;var K;for(K=280;K<288;++K)go[K]=8;var K,$p=new $e(32);for(K=0;K<32;++K)$p[K]=5;var K;var tv=fo(go,9,1);var rv=fo($p,5,1),Zl=function(n){for(var e=n[0],t=1;t<n.length;++t)n[t]>e&&(e=n[t]);return e},at=function(n,e,t){var r=e/8|0;return(n[r]|n[r+1]<<8)>>(e&7)&t},Xl=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},nv=function(n){return(n+7)/8|0},Jl=function(n,e,t){return(e==null||e<0)&&(e=0),(t==null||t>n.length)&&(t=n.length),new $e(n.subarray(e,t))};var ov=["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"],tt=function(n,e,t){var r=new Error(e||ov[n]);if(r.code=n,Error.captureStackTrace&&Error.captureStackTrace(r,tt),!t)throw r;return r},iv=function(n,e,t,r){var o=n.length,i=r?r.length:0;if(!o||e.f&&!e.l)return t||new $e(0);var s=!t,a=s||e.i!=2,l=e.i;s&&(t=new $e(o*3));var c=function(Je){var ht=t.length;if(Je>ht){var Ft=new $e(Math.max(ht*2,Je));Ft.set(t),t=Ft}},u=e.f||0,h=e.p||0,d=e.b||0,y=e.l,b=e.d,M=e.m,p=e.n,m=o*8;do{if(!y){u=at(n,h,1);var g=at(n,h+1,3);if(h+=3,g)if(g==1)y=tv,b=rv,M=9,p=5;else if(g==2){var C=at(n,h,31)+257,T=at(n,h+10,15)+4,w=C+at(n,h+5,31)+1;h+=14;for(var D=new $e(w),P=new $e(19),O=0;O<T;++O)P[Kb[O]]=at(n,h+O*3,7);h+=T*3;for(var L=Zl(P),_=(1<<L)-1,H=fo(P,L,1),O=0;O<w;){var V=H[at(n,h,_)];h+=V&15;var v=V>>4;if(v<16)D[O++]=v;else{var B=0,ee=0;for(v==16?(ee=3+at(n,h,3),h+=2,B=D[O-1]):v==17?(ee=3+at(n,h,7),h+=3):v==18&&(ee=11+at(n,h,127),h+=7);ee--;)D[O++]=B}}var fe=D.subarray(0,C),$=D.subarray(C);M=Zl(fe),p=Zl($),y=fo(fe,M,1),b=fo($,p,1)}else tt(1);else{var v=nv(h)+4,x=n[v-4]|n[v-3]<<8,S=v+x;if(S>o){l&&tt(0);break}a&&c(d+x),t.set(n.subarray(v,S),d),e.b=d+=x,e.p=h=S*8,e.f=u;continue}if(h>m){l&&tt(0);break}}a&&c(d+131072);for(var N=(1<<M)-1,xt=(1<<p)-1,we=h;;we=h){var B=y[Xl(n,h)&N],xe=B>>4;if(h+=B&15,h>m){l&&tt(0);break}if(B||tt(2),xe<256)t[d++]=xe;else if(xe==256){we=h,y=null;break}else{var Ze=xe-254;if(xe>264){var O=xe-257,ze=Vp[O];Ze=at(n,h,(1<<ze)-1)+Yp[O],h+=ze}var Rt=b[Xl(n,h)&xt],ct=Rt>>4;Rt||tt(3),h+=Rt&15;var $=ev[ct];if(ct>3){var ze=jp[ct];$+=Xl(n,h)&(1<<ze)-1,h+=ze}if(h>m){l&&tt(0);break}a&&c(d+131072);var ut=d+Ze;if(d<$){var _t=i-$,De=Math.min($,ut);for(_t+d<0&&tt(3);d<De;++d)t[d]=r[_t+d]}for(;d<ut;++d)t[d]=t[d-$]}}e.l=y,e.p=we,e.b=d,e.f=u,y&&(u=1,e.m=M,e.d=b,e.n=p)}while(!u);return d!=t.length&&s?Jl(t,0,d):t.subarray(0,d)};var sv=new $e(0);var vt=function(n,e){return n[e]|n[e+1]<<8},lt=function(n,e){return(n[e]|n[e+1]<<8|n[e+2]<<16|n[e+3]<<24)>>>0},Yl=function(n,e){return lt(n,e)+lt(n,e+4)*4294967296};function av(n,e){return iv(n,{i:2},e&&e.out,e&&e.dictionary)}var $l=typeof TextDecoder<"u"&&new TextDecoder,lv=0;try{$l.decode(sv,{stream:!0}),lv=1}catch{}var cv=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:Jl(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 Kl(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($l)return $l.decode(n);var o=cv(n),i=o.s,t=o.r;return t.length&&tt(8),i}}var uv=function(n,e){return e+30+vt(n,e+26)+vt(n,e+28)},hv=function(n,e,t){var r=vt(n,e+28),o=Kl(n.subarray(e+46,e+46+r),!(vt(n,e+8)&2048)),i=e+46+r,s=lt(n,e+20),a=t&&s==4294967295?dv(n,i):[s,lt(n,e+24),lt(n,e+42)],l=a[0],c=a[1],u=a[2];return[vt(n,e+10),l,c,o,i+vt(n,e+30)+vt(n,e+32),u]},dv=function(n,e){for(;vt(n,e)!=1;e+=4+vt(n,e+2));return[Yl(n,e+12),Yl(n,e+4),Yl(n,e+20)]};function Jp(n,e){for(var t={},r=n.length-22;lt(n,r)!=101010256;--r)(!r||n.length-r>65558)&&tt(13);var o=vt(n,r+8);if(!o)return{};var i=lt(n,r+16),s=i==4294967295||o==65535;if(s){var a=lt(n,r-12);s=lt(n,a)==101075792,s&&(o=lt(n,a+32),i=lt(n,a+48))}for(var l=e&&e.filter,c=0;c<o;++c){var u=hv(n,i,s),h=u[0],d=u[1],y=u[2],b=u[3],M=u[4],p=u[5],m=uv(n,p);i=M,(!l||l({name:b,size:d,originalSize:y,compression:h}))&&(h?h==8?t[b]=av(n.subarray(m,m+d),{out:new $e(y)}):tt(14,"unknown compression type "+h):t[b]=Jl(n,m,m+d))}return t}f();f();f();f();var Me=n=>Object.entries(n);f();var yo=n=>Object.keys(n);function Kp(n){return n.replace(/^g_/,"s_")}function Gs(n){return n.replace(/^g_/,"o_")}function pv(n){return n.replace(/^g_/,"w_")}function Qp(n){return n.replace(/^loci_/,"eli_")}function bo(n){return n.replace(/^loc_/,"el_")}function ks(n){return n.replace(/^lcat_/,"ec_")}function mv(n){return n.replace(/^g_/,"ar_")}function em(n){return n.replace(/^n_/,"s_")}function fv(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 cn(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=fv(i,t(a),l),u=c.map(d=>d.properties.id),h=u.map(d=>({geometryId:d,floorId:s}));o.set(a,{ids:u,features:c,anchors:h})}}return o}function tm(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=gv(n),r=Me(n.geometry).flatMap(([c,u])=>(u?.features??[]).map(h=>({feature:h,floorId:c}))).flat(),o=new Set(Object.values(n.walkable??{}).filter(c=>c!==void 0).flatMap(yo)),i=new Set(Object.values(n.nonwalkable??{}).filter(c=>c!==void 0).flatMap(yo)),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=cn(r,o,Kp,t)),i.size>0&&(e.obstruction=cn(r,i,Gs,t)),s.size>0&&(e.area=cn(r,s,mv,t)),a.size>0&&(e.object=cn(r,a,Gs,t)),l.size>0&&(e.window=cn(r,l,pv,t)),o.size===0&&i.size===0&&s.size===0&&(e.space=cn(r,new Set(r.map(c=>c.feature.properties.id)),Kp,t)),e}function gv(n){let e=new Map(Object.values(n.kinds??{}).filter(t=>t!==void 0).flatMap(Me));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 rm(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 rc=yn(im(),1),Sv=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)},sm=(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},Mv=(n,e)=>{let[t,r]=n,o=e.geometry.coordinates;if(!sm(t,r,o[0]))return!1;for(let i=1;i<o.length;i++)if(sm(t,r,o[i]))return!1;return!0},Cv=n=>{let e=n.geometry.coordinates,t=0,r=0,o=0;for(let y of e)for(let b=0;b<y.length-1;b++)t+=y[b][0],r+=y[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,h;for(let y of e)for(let b of y){let M=b[0]-i,p=b[1]-s;if(u!==void 0&&h!==void 0){let m=u*p-M*h;c+=m,a+=(u+M)*m,l+=(h+p)*m}u=M,h=p}if(c===0)return[i,s];let d=1/(3*c);return[i+d*a,s+d*l]},am=n=>{let e=Sv(n);return!Number.isFinite(e)||e<=0?1e-9:Math.sqrt(e)*.01},un=n=>{try{let e=Cv(n);if(Mv(e,n))return st(e);let t=(0,rc.default)(n.geometry.coordinates,am(n));return st([t[0],t[1]])}catch{return ur(new Error("Unable to calculate center of polygon"))}},Ev=n=>{try{let e=(0,rc.default)(n.geometry.coordinates,am(n));return st([e[0],e[1]])}catch{return ur(new Error("Unable to calculate center of polygon"))}},lm=(n="center-of-mass")=>{if(typeof n=="function")return n;switch(n){case"visual-center":return Ev;case"center-of-mass":return un}};function cm(n,e){let{nodesByGeometryId:t,incomingEdgesByNodeId:r,nodesById:o}=wv(n),i=tm(n),s=Dv(n),a=n.navigationFlags??{};return{geometryMaps:i,nodesByGeometryId:t,geometryFeatureById:s,navigationFlags:a,incomingEdgesByNodeId:r,nodesById:o,centerCalculator:lm(e?.centerStrategy)}}function wv(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 Dv(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 um(n,e){if(!n.annotations||!n.annotationSymbols||!n.geometry)return{};let t={};for(let[r,o]of Me(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 Ar(n,e){return e&&(n.flags[e.index]&1<<e.bit)!==0}f();var nc={accessible:"accessible",outdoors:"outdoors",public:"public"};function hm(n,{nodesByGeometryId:e}){let t={"connection.json":[],entrance:{}},r=n.navigationFlags?.[nc.accessible],o=n.navigationFlags?.[nc.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(oc(s,i)&&!Tv(s)){let h=Pv(s,i,e,o);for(let[d,y]of h)t.entrance[d]||(t.entrance[d]={type:"FeatureCollection",features:[]}),t.entrance[d].features.push(y);continue}let a=r!=null&&s.entrances.some(h=>Ar(h,r))&&s.exits.some(h=>Ar(h,r)),l=Array.from(new Set([...s.entrances.map(h=>e.get(h.geometryId)),...s.exits.map(h=>e.get(h.geometryId))].flat().filter(h=>h!=null))),c=rm([...s.entrances.map(h=>h.flags),...s.exits.map(h=>h.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 oc(n,e){return n.type==Wl.door&&n.entrances.every(t=>e.get(t.geometryId)?.geometry.type==="LineString")}function Tv(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 Pv(n,e,t,r){if(n.type!==Wl.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:Iv(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 Iv(n,e){return n.entrances.some(t=>Ar(t,e))||n.exits.some(t=>Ar(t,e))}f();function pm(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 Hl?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,T={id:S?.cmsId!==void 0?`el_${S?.cmsId}`:bo(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&&(T.phone={number:x.phone}),S.primaryCategory){let D=u.get(S.primaryCategory);D&&(T.primaryCategory=D.id)}let w=dm(x.social);x.website&&(w.website=x.website.url),T.social=w;for(let D of x.geometryAnchors){let P=e.space.get(D.geometryId),O=e.obstruction.get(D.geometryId),L=P??O;if(L){let H=new Set(L.features.filter(V=>V.geometry.type==="Polygon").map(V=>V.properties.id));for(let V of L.anchors)P!=null&&L===P&&T.spaces.push({floor:V.floorId,id:V.geometryId}),H.has(V.geometryId)&&T.polygons.push({map:V.floorId,id:V.geometryId})}let _=t.get(D.geometryId);for(let H of _??[])T.nodes.push({map:D.floorId,id:H})}r.locations.push(T);for(let D of x.categories)s.set(D,[...s.get(D)??[],x.id])}}}let h=n.cms?.locationInstances??[],d=n.locationInstances;if(d){let v=new Map(h.map(S=>[S.locationInstanceId,S])),x=[];for(let S of d){let C=v.get(S.id)??{};if(S){let T={id:Qp(S.id),parent:C.parentId??bo(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&&(T.phone={number:S.phone});let w=dm(S.social??[]);if(S.website&&(w.website=S.website.url),Object.keys(w).length>0&&(T.social=w),S.geometryAnchors?.length){let D=S.geometryAnchors.flatMap(P=>e.space.get(P.geometryId)?.anchors??[]);D.length>0&&(T.spaces=D.map(P=>({floor:P.floorId,id:P.geometryId})))}if(S.geometryAnchors){T.spaces=[],T.polygons=[],T.nodes=[];for(let D of S.geometryAnchors){let P=e.space.get(D.geometryId);if(P){let L=new Set(P.features.filter(_=>_.geometry.type==="Polygon").map(_=>_.properties.id));for(let _ of P.anchors)T.spaces.push({floor:_.floorId,id:_.geometryId}),L.has(_.geometryId)&&T.polygons.push({map:_.floorId,id:_.geometryId})}let O=t.get(D.geometryId);for(let L of O??[])T.nodes.push({map:D.floorId,id:L})}}x.push(T)}}x.length>0&&(r.locationInstances=x)}let y=n.locationCategories;if(y){let v=[],x=new Map(y.map(w=>[w.id,w])),S=new Map((c??[]).map(w=>[w.categoryId,w])),C=new Map;for(let w of y){let D=x.get(w.parent);if(D){let P=C.get(D.id)??[];P.push(w.id),C.set(D.id,P)}}for(let w of y){let D=S.get(w.id);if(w){let P=(C.get(w.id)??[]).map(ks),O={id:ks(w.id),name:w.details.name,externalId:w.details.externalId??"",sortOrder:D?.sortOrder??0,children:P,locations:(s.get(w.id)??[]).map(bo),icon:w.details.icon,picture:D?.picture,color:D?.color,extra:w.extra,iconFromDefaultList:D?.iconFromDefaultList};v.push(O)}}r.categories=v;let T={};for(let w of a)T[bo(w.id)]=w.categories.map(ks).filter(D=>D!==void 0);r.categoryPriorities=T}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 Me(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(T=>({floorId:T.floorId,spaceId:T.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 T={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?T.geometryId=C.properties.geometryId:T.verticalOffset=C.properties.verticalOffset,S.features.push({type:"Feature",geometry:C.geometry,properties:T})}S.features.length>0&&(m[v]=S)}Object.keys(m).length>0&&(r.floorText=m);let g={enterprise:r};if(n.cms?.textAreas){let v={};for(let[x,S]of Me(n.cms.textAreas)){let C={type:"FeatureCollection",features:[]};for(let T of S.features){if(T.properties.align==="unknown")continue;let w={align:T.properties.align,maxWidth:T.properties.maxWidth,maxHeight:T.properties.maxHeight,rotation:T.properties.rotation};"geometryId"in T.properties?w.anchorId=T.properties.geometryId:w.verticalOffset=T.properties.verticalOffset;let D={type:"Feature",geometry:T.geometry,properties:w};C.features.push(D)}v[x]=C}g.textAreas=v}return g}var Ov=["facebook","instagram","twitter"];function dm(n){let e={};for(let{name:t,url:r}of n){let o=t.toLowerCase();Ov.includes(o)&&(e[o]=r)}return e}f();var Lv=n=>`fc_${n.slice(3)}`;function mm(n,{geometryMaps:e}){if(!n.facade)return{};let t={},r={};for(let[o,i]of Me(n.facade))if(i)for(let s of Object.values(i)){let{floorStackId:a,geometryIds:l}=s,c=Lv(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 fm(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 gm(n,{geometryMaps:e}){let t={},r={};for(let[o,i]of Me(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 h={geometry:a.geometry,properties:{...c,anchorId:u},type:a.type};s.features.push(h)}r[o]=s}return Object.keys(r).length>0&&(t.floorImages=r),t}f();function ym(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 ic(n){return n?.geometry?.type==="Polygon"}function vm(n,{geometryMaps:e,nodesByGeometryId:t,nodesById:r,centerCalculator:o=un}){let i=Fv(n.defaultStyle),s={},a={},l={},c={};for(let h of yo(n.geometry)){let d=n.geometry[h];if(!d)continue;let y=[],b=[],M=[],p=[];for(let m of d.features){let g=m.properties.id,v=i.has(g),x=t.get(g)??[];for(let S of e.space.get(g)?.features??[])y.push(bm(S,x,o));for(let S of e.obstruction.get(g)?.features??[])if(b.push(Av(S,v,o)),e.object.has(g)){let C=t.get(g)??[],T=C.map(w=>r.get(w)).filter(w=>w!=null);for(let w of T){let D=bm({type:"Feature",geometry:w.geometry,properties:{id:em(w.properties.id),kind:"desk-entrance",details:{externalId:Gs(g)}}},C,o);y.push(D)}}for(let S of e.area.get(g)?.features??[])M.push(Rv(S,x,o));for(let S of e.window.get(g)?.features??[])p.push(_v(S))}y.length>0&&(s[h]={type:"FeatureCollection",features:y.filter(m=>m!==null)}),b.length>0&&(a[h]={type:"FeatureCollection",features:b.filter(m=>m!==null)}),M.length>0&&(l[h]={type:"FeatureCollection",features:M.filter(m=>m!==null)}),p.length>0&&(c[h]={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 bm(n,e,t=un){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}),ic(r)&&(r.properties.center=t(r).unwrapOr(void 0)),r}function Av(n,e,t=un){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 ic(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 Rv(n,e,t=un){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 ic(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 _v(n){return n.geometry.type!=="LineString"?null:{type:"Feature",geometry:n.geometry,properties:{id:n.properties.id}}}function Fv(n){return new Set((n?.ExteriorWalls?.geometryAnchors??[]).map(t=>t.geometryId))}f();function xm(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=Bv(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 Bv(n,{geometryFeatureById:e}){let t={annotationsByGeometryId:new Map,connectionsByGeometryId:new Map,entrancesByGeometryId:new Map};if(n.annotations)for(let[r,o]of Me(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=oc(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 Sm(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 Mm(n,{geometryMaps:e,navigationFlags:t,incomingEdgesByNodeId:r}){let o={"node.geojson":{type:"FeatureCollection",features:[]}},i=o["node.geojson"].features,s=Nv(n),a=Gv(n),l=kv(n,a,s);for(let[c,u]of Me(n.nodes??{}))for(let h of u?.features??[]){let d=e.space.get(h.properties.geometryIds[0])?.features[0],y=d?.geometry.type==="Point"&&d?.properties.details?.externalId?d.properties.details.externalId:"",b=r.get(h.properties.id)??[],M=Object.keys(t??{}),p=[];for(let g of b)for(let v of M)Ar(g,t[v])&&p.push(t[v]);let m={type:"Feature",geometry:h.geometry,properties:{id:h.properties.id,floor:c,space:h.properties.geometryIds.map(g=>e.space.get(g)?.ids).flat().filter(g=>g!==void 0),neighbors:[...h.properties.neighbors.map(g=>({id:g.id,weight:g.extraCost})),...l.get(h.properties.id)??[]],map:c,externalId:y,flags:p.length>0?zv(p):void 0}};i.push(m)}return o}function Nv(n){let e=new Map;for(let t of n.floors?.features??[])e.set(t.properties.id,t.properties.elevation);return e}function Gv(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 kv(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,h=r.get(l)??[];h.push(...c.nodes.filter(d=>d!==l).map(d=>({id:d,weight:u+o.entryCost}))),r.set(l,h)}}}return r}function zv(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 Uv(n,e){let t={};for(let r of n){let o=e.get(r);o&&(t[o]??=[],t[o].push(r))}return t}function Cm(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 Me(n.defaultStyle)){let l=Uv(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 Em(n,e){let t=cm(n,e),r=fm(n,t),o=vm(n,t),i=Mm(n,t),s=hm(n,t),a=Cm(n,t),l=ym(n,t),c=gm(n,t),u=mm(n,t),h=um(n,t),d=xm(n,t),y=pm(n,t),b=Sm(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,...h,...d,...y,...b}}var le=n=>JSON.parse(Kl(n)),Hv=/^geometry\/(.+)\.geojson$/,Wv=/^nodes\/(.+)\.(geo)?json$/,Vv=/^floorImages\/(.+)\.geojson$/,jv=/^facade\/(.+)\.json$/,Zv=/^walkable\/(.+)\.json$/,Xv=/^nonwalkable\/(.+)\.json$/,Yv=/^kinds\/(.+)\.json$/,qv=/^annotations\/(.+)\.json$/,$v=/^cms\/(?:([^/]+)\/)?([^/]+)\.(?:json|geojson)$/,Jv=[(n,e)=>n==="manifest.geojson"?{manifest:le(e)}:void 0,(n,e)=>n==="floors.geojson"?{floors:le(e)}:void 0,(n,e)=>{let t=n.match(Hv);return t?{geometry:{[t[1]]:le(e)}}:void 0},(n,e)=>n==="connections.json"?{connections:le(e)}:void 0,(n,e)=>n==="navigationFlags.json"?{navigationFlags:le(e)}:void 0,(n,e)=>{let t=n.match(Wv);return t?{nodes:{[t[1]]:le(e)}}:void 0},(n,e)=>n==="default-style.json"?{defaultStyle:le(e)}:void 0,(n,e)=>n==="floor-stacks.json"?{floorStacks:le(e)}:void 0,(n,e)=>n==="outdoors.json"?{outdoors:le(e)}:void 0,(n,e)=>n==="tileset.json"?{tileset:le(e)}:void 0,(n,e)=>{let t=n.match(Vv);return t?{floorImages:{[t[1]]:le(e)}}:void 0},(n,e)=>{let t=n.match(jv);return t?{facade:{[t[1]]:le(e)}}:void 0},(n,e)=>{let t=n.match(Zv);return t?{walkable:{[t[1]]:le(e)}}:void 0},(n,e)=>{let t=n.match(Xv);return t?{nonwalkable:{[t[1]]:le(e)}}:void 0},(n,e)=>{let t=n.match(Yv);return t?{kinds:{[t[1]]:le(e)}}:void 0},(n,e)=>n==="annotation-symbols.json"?{annotationSymbols:le(e)}:void 0,(n,e)=>{let t=n.match(qv);return t?{annotations:{[t[1]]:le(e)}}:void 0},(n,e)=>n==="locations.json"?{locations:le(e)}:void 0,(n,e)=>n==="location-categories.json"?{locationCategories:le(e)}:void 0,(n,e)=>n==="location-instances.json"?{locationInstances:le(e)}:void 0,(n,e)=>{let t=n.match($v);if(!t)return;let[,r,o]=t;return r==="floorText"||r==="textures"||r==="textAreas"?{cms:{[r]:{[o]:le(e)}}}:{cms:{[o]:le(e)}}}],Kv=new Set(As),Qv=new Set(Rs),e0=new Set(ao),t0=new Set(co),r0=new Set(lo),n0=new Set(uo),o0=new Set(ho),i0=new Set(po),s0=new Set(mo);function dr(n,e){return typeof n=="string"&&e.has(n)?n:"unknown"}function a0(n){let e=n.connections;if(Array.isArray(e))for(let a of e)a&&typeof a=="object"&&"type"in a&&(a.type=dr(a.type,Kv));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]=dr(l[c],Qv)}}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=dr(l.type,e0)),Array.isArray(l.states))for(let c of l.states)c&&typeof c=="object"&&"type"in c&&(c.type=dr(c.type,t0));if(Array.isArray(l.siblingGroups))for(let c of l.siblingGroups)c&&typeof c=="object"&&"type"in c&&(c.type=dr(c.type,r0))}for(let a of["floorText","textAreas"]){let l=a==="floorText"?n0:o0,c=o[a];if(!(!c||typeof c!="object"))for(let u of Object.values(c)){if(!u||typeof u!="object")continue;let h=u.features;if(Array.isArray(h))for(let d of h){if(!d||typeof d!="object")continue;let y=d.properties;y&&typeof y=="object"&&"alignment"in y&&(y.alignment=dr(y.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=dr(c.face,i0)),"surface"in c&&(c.surface=dr(c.surface,s0))}}}function l0(n){let e=Jp(n),t={};for(let r of Object.keys(e))for(let o of Jv){let i=o(r,e[r]);if(i){t=so(t,i,[]);break}}return a0(t),t}function Us(n){try{return st(l0(n))}catch(e){return ur(e instanceof Error?e:new Error(String(e)))}}var c0={decompressUnsafeSync:n=>Us(n),decompressUnsafe:n=>Promise.resolve(Us(n)),decompressSync:n=>Us(n),decompress:n=>Promise.resolve(Us(n))};var Hs=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 Ps({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((h,d)=>{this.geometryEdgesByMapId.get(u).push([h,c[d+1]||c[0]])})}})}getNonPublicNodeIds(){let e=new Set;if(Os.public in this.flagDeclarations)for(let t in this.graph.nodesById)Is(this.graph.nodesById[t].properties.flags,this.flagDeclarations[Os.public].index,this.flagDeclarations[Os.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 h=a?.enabled??!0,d=e??[],y=this.graph.aStar({originIds:t,destinationNodeIds:i,zones:d,disabledConnectionNodeIds:new Set(s),overrideEdgeWeights:c,disabledNodeIds:u?void 0:this.nonPublicNodeIds});if(y.length===0)return{type:"FeatureCollection",features:[]};if(a?.__EXPERIMENTAL_METHOD!=="greedy-los"&&r&&o&&r.length===1&&o.length===1){let b=new ke({origin:r[0],destination:y[0].origin,distance:Oe(r[0].geometry.coordinates,y[0].origin.geometry.coordinates),angle:Ee(r[0].geometry.coordinates,y[0].origin.geometry.coordinates),multiplicativeDistanceWeightScaling:l}),M=y.slice(),p=new ke({origin:y[y.length-1].destination,destination:o[0],distance:Oe(y[y.length-1].destination.geometry.coordinates,o[0].geometry.coordinates),angle:Ee(y[y.length-1].destination.geometry.coordinates,o[0].geometry.coordinates),multiplicativeDistanceWeightScaling:l});M.unshift(b),M.push(p),y=M}return h&&(y=this.simplifyAllSteps(y,a,l)),this.generatePath(y)}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??oo,l=s==="dp-optimal"?this.simplifyStepsWithDPMethod.bind(this):s==="rdp"?this.simplifyStepsImprovedWithSimplifyBeforeLoSChecks.bind(this):this.simplifySteps.bind(this);for(let d=1;d<e.length;d++)if(this.groupBy!=="default"&&e[d].origin.properties[this.groupBy]!==e[d-1].origin.properties[this.groupBy]){let y=e[d-1].origin.properties[this.groupBy],b=this.geometryEdgesByMapId.get(y)??[];o.push(...l(i,b,a,r,t)),i=[e[d]]}else i.push(e[d]);let c=e[e.length-1],u=this.groupBy==="default"?this.groupBy:c.origin.properties[this.groupBy],h=this.geometryEdgesByMapId.get(u)??[];return o.push(...l(i,h,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 kp(e,t,r,this.flagDeclarations,o)}simplifyStepsImprovedWithSimplifyBeforeLoSChecks(e,t,r,o,i){if(e.length<3)return e;!1,e=Np(e,this.getDoorByNodeId,o,t);let s=i?.__EXPERIMENTAL_METHOD==="rdp"?i.mustIncludeDoorBufferNodes??!0:!0;return Gp(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=Up(e,this.getDoorByNodeId));for(let u=0;u<e.length-1;u++){let h=je(e[u].origin),d=je(e[u+1].origin);h!==d&&(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];je(l.origin)!==je(l.destination)&&(l.origin.properties.preventSmoothing||(l.origin.properties.preventSmoothing=!0,s.add(l.origin.properties.id))),!1;let c=Rp(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)=>Oe(e,t);getAngle=(e,t)=>Ee(e,t)};var sc="https://tiles-cdn.mappedin.com/styles/mappedin/style.json",u0="https://auth.mappedin.com/oauth2/token";async function PR(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 au(u0));let i=e.center||[0,0];Qs&&Kc(Qs);let s=null,a=null;try{s=new Jc({container:n,style:e.outdoorView.style||sc,center:i,attributionControl:!1,zoom:e.zoomLevel??Gl,pitch:e.pitch??Bl,bearing:e.bearing??Nl,transformRequest:ru(o),trackResize:!1,pixelRatio:e.outdoorView.lowDpi?1:Hr(),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 nu(s,{timeout:1e4,styleUrl:e.outdoorView?.style||sc})}catch(c){if(a=c,A.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 lr(n,r);return c.publish("outdoor-style-error",{error:a}),c}let l=null;try{let c=s.painter.context.gl;l=new lr(n,{center:i,zoomLevel:s.getZoom(),pitch:s.getPitch(),bearing:s.getBearing(),gl:c,map:s,mode:"outdoors-interleaved",...r}),jo(s,l.camera.minZoomLevel,l.camera.maxZoomLevel),s.setMaxPitch(l.camera.maxPitch),s.setMinPitch(l.camera.minPitch),Op(l,s);let u=vr.fromLngLat(i,0),h=zo(u,l.viewCamera,()=>{l?.renderSync()}),d=!1,y=!1,b="",M=async()=>{s&&(y=!1,s.addLayer(h),l?.renderSync())};l.onMapLibreEvent("style.load",M),M();let p=()=>{s&&(d||(l?.publish("outdoor-view-loaded"),d=!0),y||(y=!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)},g=C=>{if(s&&C&&C.dataType==="style"&&C.type==="styledata"){let T=C?.style?.stylesheet?.id;T&&T!==b&&(b=T,y=!1)}m(C)};l.onMapLibreEvent("styledata",g),l.onMapLibreEvent("sourcedata",m),l.onMapLibreEvent("terrain",m);let v=e.outdoorView?.refreshToken,x=v?Ip({refreshOutdoorToken:v,headers:o,reloadSource:C=>s?.refreshTiles(C)}):void 0;x&&l.onAbort(()=>x.dispose());let S=C=>{if(C.error?.url===sc){A.error(`Failed to load outdoor view style, possibly due to invalid token "${o["x-mappedin-tiles-key"]}"`);return}let T=C?.error?.status;if(x&&C?.tile&&(T===401||T===403)){x.recoverFromTileAuthError(C?.sourceId);return}A.warn(C)};return l.onMapLibreEvent("error",S),l}catch(c){if(l)try{l.destroy()}catch{}if(s)try{s.remove()}catch{}A.warn("Failed to initialize outdoor view, falling back to indoor-only rendering:",c);let u=new lr(n,r);return u.publish("outdoor-style-error",{error:c}),u}}else return new lr(n,r)}export{iM as a,mi as b,sM as c,Oe as d,Ba as e,fi as f,aM as g,_i as h,Ir as i,Jr as j,D1 as k,so as l,Nb as m,Em as n,c0 as o,Ts as p,Hi as q,It as r,Hs as s,va as t,bi as u,Wa as v,mp as w,lr as x,wb as y,kl as z,PR as A};