@mappedin/blue-dot 6.17.1-beta.0 → 6.18.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/lib/esm/chunk-IPNIME5I.js +1 -0
- package/lib/esm/{chunk-UZOPCEME.js → chunk-QFCRWBSD.js} +1 -1
- package/lib/esm/debug/index.d.ts +25 -6
- package/lib/esm/debug/index.js +1 -1
- package/lib/esm/index.d.ts +25 -6
- package/lib/esm/index.js +1 -1
- package/lib/esm/react/index.d.ts +25 -6
- package/lib/esm/react/index.js +1 -1
- package/lib/rn/fusion/algorithms/heading-filter.d.ts +9 -0
- package/lib/rn/index-rn.js +2 -2
- package/lib/rn/types.d.ts +16 -0
- package/lib/rn/utils.d.ts +17 -2
- package/package.json +6 -6
- package/lib/esm/chunk-NUHGT3O3.js +0 -1
package/README.md
CHANGED
|
@@ -477,6 +477,11 @@ interface Options {
|
|
|
477
477
|
* Options for the accuracy ring around the BlueDot.
|
|
478
478
|
*/
|
|
479
479
|
accuracyRing?: {
|
|
480
|
+
/**
|
|
481
|
+
* Whether the accuracy ring is visible.
|
|
482
|
+
* @default true
|
|
483
|
+
*/
|
|
484
|
+
visible?: boolean;
|
|
480
485
|
/**
|
|
481
486
|
* The color of the accuracy ring.
|
|
482
487
|
* @default #2266ff
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as x,b as wt,c as l,d as Qi,e as Zo,f as Xo,g as T,h as e,i as u,j as s,k as g,l as _t,m as f,n as p}from"./chunk-QFCRWBSD.js";var _o=Zo((yl,Gi)=>{f();(function(){"use strict";function a(d,h){var c=d.x-h.x,m=d.y-h.y;return c*c+m*m}l(a,"getSqDist");function i(d,h,c){var m=h.x,b=h.y,y=c.x-m,v=c.y-b;if(y!==0||v!==0){var O=((d.x-m)*y+(d.y-b)*v)/(y*y+v*v);O>1?(m=c.x,b=c.y):O>0&&(m+=y*O,b+=v*O)}return y=d.x-m,v=d.y-b,y*y+v*v}l(i,"getSqSegDist");function t(d,h){for(var c=d[0],m=[c],b,y=1,v=d.length;y<v;y++)b=d[y],a(b,c)>h&&(m.push(b),c=b);return c!==b&&m.push(b),m}l(t,"simplifyRadialDist");function n(d,h,c,m,b){for(var y=m,v,O=h+1;O<c;O++){var W=i(d[O],d[h],d[c]);W>y&&(v=O,y=W)}y>m&&(v-h>1&&n(d,h,v,m,b),b.push(d[v]),c-v>1&&n(d,v,c,m,b))}l(n,"simplifyDPStep");function o(d,h){var c=d.length-1,m=[d[0]];return n(d,0,c,h,m),m.push(d[c]),m}l(o,"simplifyDouglasPeucker");function r(d,h,c){if(d.length<=2)return d;var m=h!==void 0?h*h:1;return d=c?d:t(d,m),d=o(d,m),d}l(r,"simplify"),typeof define=="function"&&define.amd?define(function(){return r}):typeof Gi<"u"?(Gi.exports=r,Gi.exports.default=r):typeof self<"u"?self.simplify=r:window.simplify=r})()});f();f();var en=class en{constructor(){T(this,"_subscribers",{});T(this,"_abortController",new AbortController)}get signal(){return this._abortController.signal}publish(i,t){!this._subscribers||!this._subscribers[i]||this.signal.aborted||this._subscribers[i].forEach(function(n){typeof n=="function"&&n(t)})}onAbort(i){this.signal.addEventListener("abort",()=>i(),{once:!0})}on(i,t,n){let o=n==null?void 0:n.signal;if(o!=null&&o.aborted||this._abortController&&this._abortController.signal.aborted)return()=>{};this._subscribers||(this._subscribers={}),this._subscribers[i]=this._subscribers[i]||[],this._subscribers[i].push(t);let r=l(()=>{this.off(i,t)},"cleanup");return o&&o.addEventListener("abort",r,{once:!0}),r}off(i,t){if(!this._subscribers||this._subscribers[i]==null||this.signal.aborted)return;let n=this._subscribers[i].indexOf(t);n!==-1&&this._subscribers[i].splice(n,1)}destroy(){this.signal.aborted||(this._subscribers={},this._abortController.abort())}};l(en,"PubSub");var k=en;var tn=class tn extends k{constructor(){super();T(this,"enabled",!1)}get isEnabled(){return this.enabled}onFusedPosition(t){}setAnchor(t){var r,d;let n={latitude:t.latitude,longitude:t.longitude,heading:t.heading,floorLevel:t.floorLevel,sensorId:this.id,timestamp:Date.now(),ttl:(r=t.ttl)!=null?r:3e4,confidence:(d=t.confidence)!=null?d:1},o=t.anchorOnlyPeriodMs!=null?{anchorOnlyPeriodMs:t.anchorOnlyPeriodMs}:void 0;this.publish("anchor-set",{sensorId:this.id,anchor:n,configOverride:o})}clearAnchor(){this.publish("anchor-clear",{sensorId:this.id})}async enable(){if(this.enabled)return"granted";if(this.requiresPermission){let t=await this.checkPermission();if(t==="unavailable")return p.error('Sensor "'.concat(this.id,'" is unavailable on this device.')),t;let n=await this.requestPermission();if(n!=="granted")return p.error('Permission declined for sensor "'.concat(this.id,'".')),n}try{return await this.start(),this.enabled=!0,"granted"}catch(t){return p.error('Error starting sensor "'.concat(this.id,'".'),t),"unavailable"}}disable(){this.stop(),this.enabled=!1}};l(tn,"BaseSensor");var me=tn;f();var Pe,nn=class nn extends me{constructor(){super(...arguments);T(this,"id","manual");T(this,"requiresPermission",!1);u(this,Pe,!1)}reportPosition(t){var o,r;if(!e(this,Pe))return;let n={latitude:t.latitude,longitude:t.longitude,accuracy:t.accuracy,heading:t.heading,floorLevel:t.floorLevel,confidence:(o=t.confidence)!=null?o:.5,timestamp:(r=t.timestamp)!=null?r:Date.now()};this.publish("absolute-update",{sensorId:this.id,update:n})}reportDisplacement(t){var o,r;if(!e(this,Pe))return;let n={dx:t.dx,dy:t.dy,heading:t.heading,confidence:(o=t.confidence)!=null?o:.8,timestamp:(r=t.timestamp)!=null?r:Date.now()};this.publish("relative-update",{sensorId:this.id,update:n})}forcePosition(t){var o;if(!e(this,Pe))return;let n=(o=t.ttl)!=null?o:3e4;this.setAnchor({latitude:t.latitude,longitude:t.longitude,heading:t.heading,floorLevel:t.floorLevel,ttl:n,confidence:1,anchorOnlyPeriodMs:n})}clearForcedPosition(){e(this,Pe)&&this.clearAnchor()}async start(){s(this,Pe,!0)}stop(){s(this,Pe,!1)}async checkPermission(){return"granted"}async requestPermission(){return"granted"}};Pe=new WeakMap,l(nn,"ManualSensor");var vi=nn;f();f();function Ot(){return typeof window<"u"&&window!==null}l(Ot,"isBrowser");function Yo(a){return Ot()?(typeof a=="object"||typeof a=="function")&&a!==null&&"requestPermission"in a&&typeof a.requestPermission=="function":!1}l(Yo,"hasRequestPermission");async function Qo(a){if(!Yo(a))return"unavailable";try{return await a.requestPermission()}catch(i){return"denied"}}l(Qo,"requestPermission");function on(a){return Ot()?typeof a<"u"&&a!=null:!1}l(on,"supportsEvent");async function rn(a){if(!on(a))return"unavailable";let i=await Qo(a);return i!=="unavailable"?i:"granted"}l(rn,"requestEventPermission");function er(a){return Ot()?typeof navigator<"u"&&navigator!=null&&typeof navigator[a]<"u"&&navigator[a]!=null:!1}l(er,"supportsNavigatorAPI");async function Gn(){return er("geolocation")?new Promise(a=>{navigator.geolocation.getCurrentPosition(()=>a("granted"),i=>{i.code===i.PERMISSION_DENIED?a("denied"):a("granted")},{enableHighAccuracy:!0})}):"unavailable"}l(Gn,"requestGeolocationPermission");var tr=(()=>{let a;return{getDeviceType(){if(a)return a;let{userAgent:i,platform:t,maxTouchPoints:n}=window.navigator,o=/(iphone|ipod|ipad)/i.test(i),r=t==="iPad"||t.indexOf("Mac")===0&&n>0&&!window.MSStream,d=/android/i.test(i);return a={isIpad:r,isMobile:d||o||r,isIOS:o,isAndroid:d,isSafari12:/Version\/12.+Safari/.test(i),isFirefox:/Firefox/.test(i),isWindows:/windows/i.test(i)},a},_reset(){a=void 0}}})(),Se=tr.getDeviceType,Fn=(()=>{let a,i,t;function n(){if(i!==void 0)return i;a||(a=document.createElement("canvas"));let r=a.getContext("webgl")||a.getContext("experimental-webgl");if(!r)return i;try{let d=Se().isFirefox?null:r.getExtension("WEBGL_debug_renderer_info");return i=d?r.getParameter(d.UNMASKED_RENDERER_WEBGL):r.getParameter(r.RENDERER),i}catch(d){let h=new Error("Failed getting device info");throw h.name="FailedGettingDeviceInfo",h}}l(n,"getInfo");function o(){var d,h;if(!Se().isWindows)return!1;if(t!==void 0)return t;let r=(h=(d=ir())==null?void 0:d.toLowerCase())!=null?h:"";return t=r.includes("intel")&&(r.includes("uhd")||r.includes("iris")),t}return l(o,"shouldDisableOffscreenCanvas"),{getInfo:n,shouldDisableOffscreenCanvas:o,_setCanvas(r){a=r,i=void 0,t=void 0}}})(),ir=Fn.getInfo,Qr=Fn.shouldDisableOffscreenCanvas;f();f();function Ei(a,i,t){let n=null,o=null,r,d=null,h=0;t||(t={});let c=l(function(){h=t.leading===!1?0:Date.now(),d=null,o&&(r=a.apply(n,o)),d||(n=o=null)},"later");return function(...m){let b=Date.now();!h&&t.leading===!1&&(h=b);let y=i-(b-h);return y<=0||y>i?(d&&(clearTimeout(d),d=null),h=b,r=a.apply(this,m),d||(n=o=null)):!d&&t.trailing!==!1&&(n=this,o=m,d=setTimeout(c,y)),r}}l(Ei,"throttle");f();f();f();var Nn=["devicemotion","deviceorientation","deviceorientationabsolute","geolocation"];var Je,Di,Bn,an=class an{constructor(){u(this,Di);u(this,Je,new Map);this.reset()}async check(i){var t;return(t=e(this,Je).get(i))!=null?t:"unavailable"}async request(i){let t="unavailable";switch(i){case"geolocation":t=await Gn();break;case"devicemotion":t=await rn(window==null?void 0:window.DeviceMotionEvent);break;case"deviceorientation":t=await rn(window==null?void 0:window.DeviceOrientationEvent);break;case"deviceorientationabsolute":t="granted";break;default:p.warn("Unsupported permission type requested: ".concat(i));break}return g(this,Di,Bn).call(this,i,t),t}reset(){for(let i of Nn)e(this,Je).set(i,"prompt")}};Je=new WeakMap,Di=new WeakSet,Bn=l(function(i,t){e(this,Je).get(i)!==t&&e(this,Je).set(i,t)},"#updatePermissionState"),l(an,"BrowserPermissions");var sn=an,ve=new sn;var Oe,nt,ot,It,ln=class ln extends me{constructor(){super();T(this,"id","deviceorientation");u(this,Oe);u(this,nt,null);u(this,ot,2);T(this,"start",l(async()=>{window.addEventListener(e(this,Oe),e(this,It))},"start"));T(this,"stop",l(()=>{window.removeEventListener(e(this,Oe),e(this,It))},"stop"));T(this,"checkPermission",l(async()=>ve.check(e(this,Oe)),"checkPermission"));T(this,"requestPermission",l(async()=>ve.request(e(this,Oe)),"requestPermission"));u(this,It,Ei(t=>{var r,d,h;let n=Math.round((d=t.webkitCompassHeading)!=null?d:-((r=t.alpha)!=null?r:0)),o=n-((h=e(this,nt))!=null?h:0);if(typeof n=="number"&&Math.abs(o)>e(this,ot)){let c=e(this,nt)==null;s(this,nt,n),c&&p.log("Compass: first heading ".concat(n,"\xB0")),this.publish("absolute-update",{sensorId:this.id,update:{heading:n,timestamp:Date.now(),confidence:1}})}},100));s(this,Oe,typeof DeviceOrientationEvent<"u"&&(on(DeviceOrientationEvent)||Se().isIOS)?"deviceorientation":"deviceorientationabsolute")}get requiresPermission(){return Se().isIOS}configure(t){t.deltaThreshold!==void 0&&s(this,ot,Math.max(t.deltaThreshold,.5))}getConfig(){return{deltaThreshold:e(this,ot)}}};Oe=new WeakMap,nt=new WeakMap,ot=new WeakMap,It=new WeakMap,l(ln,"DeviceOrientationSensor");var xi=ln;f();f();import G from"zod";var Un=G.object({coords:G.object({latitude:G.number(),longitude:G.number(),accuracy:G.number(),altitude:G.number().optional().nullable(),altitudeAccuracy:G.number().optional().nullable(),heading:G.number().optional().nullable(),speed:G.number().optional().nullable(),floorLevel:G.number().optional().nullable()}),timestamp:G.number()}),$n=G.object({latitude:G.number(),longitude:G.number(),floor:G.any().optional(),accuracy:G.number().optional(),heading:G.number().optional().nullable(),timestamp:G.number().optional()});import sr from"zod";f();var Hn={maxPlausibleSpeed:10,minTimeForSpeedCheck:500};function or(a,i,t,n){let o=111320*Math.cos(a*Math.PI/180),r=(t-a)*111320,d=(n-i)*o;return Math.sqrt(r*r+d*d)}l(or,"calculateDistance");function rr(a,i,t){let n=or(a.latitude,a.longitude,i.latitude,i.longitude),o=(i.timestamp-a.timestamp)/1e3;if(o<t.minTimeForSpeedCheck/1e3)return{isOutlier:!1,distance:n,timeDelta:o,impliedSpeed:0};let r=n/o;return{isOutlier:r>t.maxPlausibleSpeed,distance:n,timeDelta:o,impliedSpeed:r}}l(rr,"checkForOutlier");function Vn(a,i,t){return a==null?{isOutlier:!1,distance:0,timeDelta:0,impliedSpeed:0}:rr(a,i,t)}l(Vn,"checkForOutlierSafe");var Ie,rt,st,qe,Ai,Rt,wi,_i,un=class un extends me{constructor(){super(...arguments);T(this,"id","geolocation");T(this,"requiresPermission",!1);u(this,Ie);u(this,rt,!1);u(this,st);u(this,qe,Hn);u(this,Ai,l(t=>{var d;if(this.isEnabled===!1)return;if(t==null||t.coords==null){let h={code:2,message:"Invalid position received",PERMISSION_DENIED:1,POSITION_UNAVAILABLE:2,TIMEOUT:3};e(this,Rt).call(this,h);return}let n=e(this,wi).call(this,t);if(n==null)return;let o={latitude:n.latitude,longitude:n.longitude,timestamp:(d=n.timestamp)!=null?d:Date.now()},r=Vn(e(this,st),o,e(this,qe));if(r.isOutlier){p.warn("GPS outlier rejected: ".concat(r.distance.toFixed(0),"m in ").concat(r.timeDelta.toFixed(1),"s ")+"(implied ".concat(r.impliedSpeed.toFixed(1)," m/s, max ").concat(e(this,qe).maxPlausibleSpeed," m/s)"));return}s(this,st,o),this.publish("absolute-update",{sensorId:this.id,update:n})},"#onSuccess"));u(this,Rt,l(t=>{switch(t.code){case t.PERMISSION_DENIED:p.error("Geolocation permission denied by the user.",t);break;case t.POSITION_UNAVAILABLE:p.error("Geolocation position unavailable.",t);break;case t.TIMEOUT:p.error("Geolocation request timed out.",t);break;default:p.error("An unknown geolocation error occurred.",t);break}this.publish("error",{sensorId:this.id,error:t})},"#onError"));u(this,wi,l(t=>{try{Un.parse(t)}catch(r){this.publish("error",{sensorId:this.id,error:r}),p.error("Browser sent invalid position",r instanceof sr.ZodError?r.message:String(r));return}let n=t.coords.floorLevel!=null,o=e(this,rt);return s(this,rt,n),n&&!o?p.log("Geolocation: Likely switched to IPS (Indoor Positioning System) - floor level detected"):!n&&o&&p.log("Geolocation: Likely switched to GPS - no floor level"),{latitude:t.coords.latitude,longitude:t.coords.longitude,accuracy:t.coords.accuracy,heading:t.coords.heading,floorLevel:t.coords.floorLevel,timestamp:t.timestamp,confidence:e(this,_i).call(this,t.coords.accuracy,n)}},"#createPositionUpdate"));u(this,_i,l((t,n)=>n?t<=5?.9:t<=10?.7:t<=20?.5:.3:t<3?.1:t<=10?.15:t<=20?.1:.05,"#calculateConfidence"))}get isLikelyIPS(){return e(this,rt)}configureOutlierDetection(t){s(this,qe,x(x({},e(this,qe)),t))}async enable(){return this.enabled||(await this.start(),this.enabled=!0),"granted"}async start(){if(e(this,Ie)!=null){p.warn("Geolocation sensor already started.");return}s(this,Ie,navigator.geolocation.watchPosition(t=>e(this,Ai).call(this,t),t=>e(this,Rt).call(this,t),{enableHighAccuracy:!0}))}stop(){e(this,Ie)!=null&&(navigator.geolocation.clearWatch(e(this,Ie)),s(this,Ie,void 0)),s(this,st,void 0)}async checkPermission(){return ve.check(this.id)}async requestPermission(){return ve.request(this.id)}};Ie=new WeakMap,rt=new WeakMap,st=new WeakMap,qe=new WeakMap,Ai=new WeakMap,Rt=new WeakMap,wi=new WeakMap,_i=new WeakMap,l(un,"GeolocationSensor");var Mi=un;f();f();f();function Jn(a,i,t){let n=kn(i);if(a===void 0)return n;let o=n-a;o>180&&(o-=360),o<-180&&(o+=360);let r=a+o*t;return kn(r)}l(Jn,"smoothHeading");function kn(a){let i=a%360;return i<0&&(i+=360),i===0?0:i}l(kn,"normalizeAngle");function dn(a,i,t){let n=Math.abs(i-9.81),o=i>a.lastMagnitude;return{isPeak:a.wasRising&&!o&&a.lastNetAcceleration>t,nextState:{wasRising:o,lastMagnitude:i,lastNetAcceleration:n}}}l(dn,"detectStepPeak");function qn(a,i,t,n,o){if(o<=0)return a;let r=i.filter(W=>t-W<n);if(r.length<2)return a;let d=r[0],h=(t-d)/1e3/60,v=1+((r.length-1)/h/110-1)*o,O=Math.min(Math.max(v,.7),1.3);return a*O}l(qn,"calculateAdaptiveStepLength");function zn(a,i){let t=a*Math.PI/180;return{dx:i*Math.sin(t),dy:i*Math.cos(t)}}l(zn,"calculateStepDisplacement");function Kn(a,i,t,n,o,r){return!o||!(t-a<r.zuptDelayMs)||n>r.tiltThreshold||t-i<r.minStepInterval}l(Kn,"shouldSuppressStepDetection");function Wn(a){return Math.abs(a-9.81)}l(Wn,"calculateNetAcceleration");function jn(a,i,t){return Math.sqrt(a*a+i*i+t*t)}l(jn,"calculateAccelerationMagnitude");function Zn(a,i,t){return Math.sqrt(a*a+i*i+t*t)}l(Zn,"calculateRotationMagnitude");function Xn(a,i,t){return a.filter(n=>i-n<t)}l(Xn,"pruneOldTimestamps");var te,ie,Oi,ze,Ke,Ct,at,lt,Gt,Ft,We,ut,dt,ht,ct,Nt,fe,Yn,Qn,eo,Bt,to,hn=class hn extends me{constructor(){super(...arguments);u(this,fe);T(this,"id","devicemotion");u(this,te,!1);u(this,ie);u(this,Oi,.3);u(this,ze,{wasRising:!1,lastMagnitude:9.81,lastNetAcceleration:0});u(this,Ke,[]);u(this,Ct,5e3);u(this,at,0);u(this,lt,0);u(this,Gt,0);u(this,Ft,{zuptDelayMs:500,tiltThreshold:50,minStepInterval:300});u(this,We,1);u(this,ut,.7);u(this,dt,0);u(this,ht,.5);u(this,ct,!0);T(this,"start",l(async()=>{if(this.enabled){p.warn("Device motion sensor already started.");return}this.enabled=!0,window.addEventListener("devicemotion",e(this,Nt))},"start"));T(this,"stop",l(()=>{if(!this.enabled){p.warn("Device motion sensor not started.");return}this.enabled=!1,window.removeEventListener("devicemotion",e(this,Nt))},"stop"));T(this,"checkPermission",l(async()=>ve.check("devicemotion"),"checkPermission"));T(this,"requestPermission",l(async()=>ve.request("devicemotion"),"requestPermission"));u(this,Nt,Ei(t=>{let n=Date.now();g(this,fe,Yn).call(this,t.rotationRate,n),g(this,fe,Qn).call(this,t.accelerationIncludingGravity,n)},50));u(this,Bt,0)}get requiresPermission(){return Se().isIOS}get isMoving(){return e(this,te)}setHeading(t){var o;let n=e(this,ie)==null;s(this,ie,Jn(e(this,ie),t,e(this,Oi))),n&&p.log("PDR heading initialized: ".concat((o=e(this,ie))==null?void 0:o.toFixed(1),"\xB0"))}configure(t){t.stepDetectionThreshold!==void 0&&s(this,We,Math.max(t.stepDetectionThreshold,.1)),t.stepLength!==void 0&&s(this,ut,Math.min(Math.max(t.stepLength,.2),2)),t.strideAdaptation!==void 0&&s(this,dt,Math.min(Math.max(t.strideAdaptation,0),1)),t.motionThreshold!==void 0&&s(this,ht,Math.max(t.motionThreshold,.1)),t.pdrEnabled!==void 0&&s(this,ct,t.pdrEnabled)}getConfig(){return{stepDetectionThreshold:e(this,We),stepLength:e(this,ut),strideAdaptation:e(this,dt),motionThreshold:e(this,ht),pdrEnabled:e(this,ct)}}};te=new WeakMap,ie=new WeakMap,Oi=new WeakMap,ze=new WeakMap,Ke=new WeakMap,Ct=new WeakMap,at=new WeakMap,lt=new WeakMap,Gt=new WeakMap,Ft=new WeakMap,We=new WeakMap,ut=new WeakMap,dt=new WeakMap,ht=new WeakMap,ct=new WeakMap,Nt=new WeakMap,fe=new WeakSet,Yn=l(function(t,n){t!=null&&(t.alpha!=null&&this.publish("absolute-update",{sensorId:this.id,update:{angularVelocity:t.alpha,timestamp:n,confidence:.9}}),t.alpha!=null&&t.beta!=null&&t.gamma!=null&&s(this,Gt,Zn(t.alpha,t.beta,t.gamma)))},"#processGyroscope"),Qn=l(function(t,n){if(t==null)return;let{x:o,y:r,z:d}=t;if(o==null||r==null||d==null)return;let h=jn(o,r,d),c=Wn(h);if(g(this,fe,eo).call(this,c,n),e(this,ct))g(this,fe,to).call(this,h,n);else{let m=dn(e(this,ze),h,e(this,We));s(this,ze,m.nextState)}},"#processAccelerometer"),eo=l(function(t,n){let o=e(this,te);if(s(this,te,t>e(this,ht)),e(this,te)&&s(this,lt,n),o!==e(this,te)){e(this,te)&&p.log("Motion: MOVING, accel=".concat(t.toFixed(2)," m/s\xB2"));let r=e(this,te)?.7:1;this.publish("absolute-update",{sensorId:this.id,update:{timestamp:n,confidence:r,speed:e(this,te)?t:0}})}},"#updateMotionState"),Bt=new WeakMap,to=l(function(t,n){var y;let o=dn(e(this,ze),t,e(this,We));if(s(this,ze,o.nextState),!o.isPeak)return;p.log("Peak detected: magnitude=".concat(t.toFixed(2)," m/s\xB2"));let r=e(this,ie)!=null,d=n-e(this,lt)<e(this,Ft).zuptDelayMs,h=n-e(this,at);if(Kn(e(this,lt),e(this,at),n,e(this,Gt),r,e(this,Ft))){p.warn("Step suppressed: hasHeading=".concat(r,", recentlyMoving=").concat(d,", timeSinceLastStep=").concat(h,"ms"));return}s(this,at,n),e(this,Ke).push(n),s(this,Ke,Xn(e(this,Ke),n,e(this,Ct)));let m=qn(e(this,ut),e(this,Ke),n,e(this,Ct),e(this,dt)),b=zn(e(this,ie),m);_t(this,Bt)._++,p.log("Step #".concat(e(this,Bt),": heading=").concat((y=e(this,ie))==null?void 0:y.toFixed(1),"\xB0, dx=").concat(b.dx.toFixed(3),"m, dy=").concat(b.dy.toFixed(3),"m")),this.publish("relative-update",{sensorId:this.id,update:{dx:b.dx,dy:b.dy,heading:e(this,ie),timestamp:n,confidence:.7}})},"#processPDR"),l(hn,"DeviceMotionSensor");var Lt=hn;var ne,Ut,Re,mt,$t,Ht,Vt,kt,Jt,cn=class cn extends k{constructor(){super();u(this,Re);u(this,ne,new Map);u(this,Ut,!1);u(this,$t,l(({sensorId:t,update:n})=>{if(this.publish("absolute-update",{sensorId:t,update:n}),(t==="deviceorientation"||t==="manual")&&n.heading!=null){let o=e(this,ne).get("devicemotion");o instanceof Lt&&(e(this,Ut)||(s(this,Ut,!0),p.log("Registry: forwarding heading ".concat(n.heading,"\xB0 from ").concat(t," to PDR"))),o.setHeading(n.heading))}},"#handleAbsoluteUpdate"));u(this,Ht,l(({sensorId:t,update:n})=>{this.publish("relative-update",{sensorId:t,update:n})},"#handleRelativeUpdate"));u(this,Vt,l(t=>{this.publish("anchor-set",t)},"#handleAnchorSet"));u(this,kt,l(t=>{this.publish("anchor-clear",t)},"#handleAnchorClear"));u(this,Jt,l(({sensorId:t,error:n})=>{this.publish("error",{sensorId:t,error:n})},"#handleError"));Ot()&&(g(this,Re,mt).call(this,new Mi),g(this,Re,mt).call(this,new xi),g(this,Re,mt).call(this,new Lt),g(this,Re,mt).call(this,new vi))}register(t){return g(this,Re,mt).call(this,t)}get(t){return e(this,ne).get(t)}unregister(t){let n=typeof t=="string"?t:t.id,o=e(this,ne).get(n);o&&(o.isEnabled&&o.disable(),o.off("absolute-update",e(this,$t)),o.off("relative-update",e(this,Ht)),o.off("anchor-set",e(this,Vt)),o.off("anchor-clear",e(this,kt)),o.off("error",e(this,Jt)),e(this,ne).delete(n))}getAll(){return e(this,ne).entries()}destroy(){let t=[...e(this,ne).keys()];for(let n of t)this.unregister(n);super.destroy()}};ne=new WeakMap,Ut=new WeakMap,Re=new WeakSet,mt=l(function(t){let n=t.id;if(e(this,ne).has(n)){p.warn("Sensor with id ".concat(n," already registered. Please use a different id."));return}return e(this,ne).set(n,t),t.on("absolute-update",e(this,$t)),t.on("relative-update",e(this,Ht)),t.on("anchor-set",e(this,Vt)),t.on("anchor-clear",e(this,kt)),t.on("error",e(this,Jt)),t},"#registerInternal"),$t=new WeakMap,Ht=new WeakMap,Vt=new WeakMap,kt=new WeakMap,Jt=new WeakMap,l(cn,"SensorRegistry");var Ii=cn;f();import{Coordinate as In}from"@mappedin/mappedin-js";import $r from"zod";f();var mn="#2266ff",cr="#808080";var io={visible:!0,radius:10,color:mn,inactiveColor:cr,heading:{visible:!0,color:mn,opacity:.7,displayWhenInactive:!1},accuracyRing:{visible:!0,color:mn,opacity:.3},timeout:3e4,watchDevicePosition:!0,debug:!1,accuracyThreshold:50,initialState:"hidden",preventOutOfBounds:!0,discardStaleUpdates:!0};f();import{ANIMATION_TWEENS as Pn,Coordinate as yo}from"@mappedin/mappedin-js";var no="data:application/octet-stream;base64,Z2xURgIAAAAcIAAAgAQAAEpTT057ImFzc2V0Ijp7InZlcnNpb24iOiIyLjAifSwic2NlbmVzIjpbeyJub2RlcyI6WzBdfV0sInNjZW5lIjowLCJub2RlcyI6W3sibWVzaCI6MH1dLCJidWZmZXJWaWV3cyI6W3siYnVmZmVyIjowLCJieXRlT2Zmc2V0IjowLCJieXRlTGVuZ3RoIjoyMzUyLCJ0YXJnZXQiOjM0OTYyLCJieXRlU3RyaWRlIjoxMn0seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjIzNTIsImJ5dGVMZW5ndGgiOjIzNTIsInRhcmdldCI6MzQ5NjIsImJ5dGVTdHJpZGUiOjEyfSx7ImJ1ZmZlciI6MCwiYnl0ZU9mZnNldCI6NDcwNCwiYnl0ZUxlbmd0aCI6MTU2OCwidGFyZ2V0IjozNDk2MiwiYnl0ZVN0cmlkZSI6OH0seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjYyNzIsImJ5dGVMZW5ndGgiOjc2OCwidGFyZ2V0IjozNDk2M31dLCJidWZmZXJzIjpbeyJieXRlTGVuZ3RoIjo3MDQwfV0sImFjY2Vzc29ycyI6W3siYnVmZmVyVmlldyI6MCwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjE5NiwibWF4IjpbMSwxLDAuMDI1MDAwMDAwMzcyNTI5MDNdLCJtaW4iOlstMSwtMSwtMC4wMjUwMDAwMDAzNzI1MjkwM10sInR5cGUiOiJWRUMzIn0seyJidWZmZXJWaWV3IjoxLCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6MTk2LCJtYXgiOlsxLDEsMV0sIm1pbiI6Wy0xLC0xLC0xXSwidHlwZSI6IlZFQzMifSx7ImJ1ZmZlclZpZXciOjIsImNvbXBvbmVudFR5cGUiOjUxMjYsImNvdW50IjoxOTYsIm1heCI6WzEsMV0sIm1pbiI6WzAsMF0sInR5cGUiOiJWRUMyIn0seyJidWZmZXJWaWV3IjozLCJjb21wb25lbnRUeXBlIjo1MTIzLCJjb3VudCI6Mzg0LCJtYXgiOlsxOTVdLCJtaW4iOlswXSwidHlwZSI6IlNDQUxBUiJ9XSwibWF0ZXJpYWxzIjpbeyJwYnJNZXRhbGxpY1JvdWdobmVzcyI6eyJiYXNlQ29sb3JGYWN0b3IiOlswLjAxNTk5NjI5MzM2MTQ0NjI4OCwwLjEzMjg2ODMyMTU0NDE0NjI3LDEsMV0sIm1ldGFsbGljRmFjdG9yIjowLCJyb3VnaG5lc3NGYWN0b3IiOjF9LCJhbHBoYU1vZGUiOiJCTEVORCIsIm5hbWUiOiJBY2N1cmFjeVJpbmcifV0sIm1lc2hlcyI6W3sicHJpbWl0aXZlcyI6W3sibW9kZSI6NCwiYXR0cmlidXRlcyI6eyJQT1NJVElPTiI6MCwiTk9STUFMIjoxLCJURVhDT09SRF8wIjoyfSwiaW5kaWNlcyI6MywibWF0ZXJpYWwiOjB9XX1dfSCAGwAAQklOAAAAAAAAAIC/zczMPMLFRz6+FHu/zczMPBXvwz5eg2y/zczMPNo5Dj8x21S/zczMPPMENT/zBDW/zczMPDHbVD/aOQ6/zczMPF6DbD8V78O+zczMPL4Uez/CxUe+zczMPAAAgD9lZICkzczMPL4Uez/CxUc+zczMPF6DbD8V78M+zczMPDHbVD/aOQ4/zczMPPMENT/zBDU/zczMPNo5Dj8x21Q/zczMPBXvwz5eg2w/zczMPMLFRz6+FHs/zczMPDIxDSUAAIA/zczMPMLFR76+FHs/zczMPBXvw75eg2w/zczMPNo5Dr8x21Q/zczMPPMENb/zBDU/zczMPDHbVL/aOQ4/zczMPF6DbL8V78M+zczMPL4Ue7/CxUc+zczMPAAAgL8wMFolzczMPL4Ue7/CxUe+zczMPF6DbL8V78O+zczMPDHbVL/aOQ6/zczMPPMENb/zBDW/zczMPNo5Dr8x21S/zczMPBXvw75eg2y/zczMPMLFR76+FHu/zczMPDIxjaUAAIC/zczMPAAAAAAAAIC/zczMvMLFRz6+FHu/zczMvBXvwz5eg2y/zczMvNo5Dj8x21S/zczMvPMENT/zBDW/zczMvDHbVD/aOQ6/zczMvF6DbD8V78O+zczMvL4Uez/CxUe+zczMvAAAgD///ZmkzczMvL4Uez/CxUc+zczMvF6DbD8V78M+zczMvDHbVD/aOQ4/zczMvPMENT/zBDU/zczMvNo5Dj8x21Q/zczMvBXvwz5eg2w/zczMvMLFRz6+FHs/zczMvDIxDSUAAIA/zczMvMLFR76+FHs/zczMvBXvw75eg2w/zczMvNo5Dr8x21Q/zczMvPMENb/zBDU/zczMvDHbVL/aOQ4/zczMvF6DbL8V78M+zczMvL4Ue7/CxUc+zczMvAAAgL9kY00lzczMvL4Ue7/CxUe+zczMvF6DbL8V78O+zczMvDHbVL/aOQ6/zczMvPMENb/zBDW/zczMvNo5Dr8x21S/zczMvBXvw75eg2y/zczMvMLFR76+FHu/zczMvDIxjaUAAIC/zczMvAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAADNzMwizczMPAAAAAAAAIC/zczMPMLFRz6+FHu/zczMPBXvwz5eg2y/zczMPNo5Dj8x21S/zczMPPMENT/zBDW/zczMPDHbVD/aOQ6/zczMPF6DbD8V78O+zczMPL4Uez/CxUe+zczMPAAAgD9lZICkzczMPL4Uez/CxUc+zczMPF6DbD8V78M+zczMPDHbVD/aOQ4/zczMPPMENT/zBDU/zczMPNo5Dj8x21Q/zczMPBXvwz5eg2w/zczMPMLFRz6+FHs/zczMPDIxDSUAAIA/zczMPMLFR76+FHs/zczMPBXvw75eg2w/zczMPNo5Dr8x21Q/zczMPPMENb/zBDU/zczMPDHbVL/aOQ4/zczMPF6DbL8V78M+zczMPL4Ue7/CxUc+zczMPAAAgL8wMFolzczMPL4Ue7/CxUe+zczMPF6DbL8V78O+zczMPDHbVL/aOQ6/zczMPPMENb/zBDW/zczMPNo5Dr8x21S/zczMPBXvw75eg2y/zczMPMLFR76+FHu/zczMPDIxjaUAAIC/zczMPAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAADNzMyizczMvAAAAAAAAIC/zczMvMLFRz6+FHu/zczMvBXvwz5eg2y/zczMvNo5Dj8x21S/zczMvPMENT/zBDW/zczMvDHbVD/aOQ6/zczMvF6DbD8V78O+zczMvL4Uez/CxUe+zczMvAAAgD///ZmkzczMvL4Uez/CxUc+zczMvF6DbD8V78M+zczMvDHbVD/aOQ4/zczMvPMENT/zBDU/zczMvNo5Dj8x21Q/zczMvBXvwz5eg2w/zczMvMLFRz6+FHs/zczMvDIxDSUAAIA/zczMvMLFR76+FHs/zczMvBXvw75eg2w/zczMvNo5Dr8x21Q/zczMvPMENb/zBDU/zczMvDHbVL/aOQ4/zczMvF6DbL8V78M+zczMvL4Ue7/CxUc+zczMvAAAgL9kY00lzczMvL4Ue7/CxUe+zczMvF6DbL8V78O+zczMvDHbVL/aOQ6/zczMvPMENb/zBDW/zczMvNo5Dr8x21S/zczMvBXvw75eg2y/zczMvMLFR76+FHu/zczMvDIxjaUAAIC/zczMvAAAAAAAAIC/AACAJcLFRz6+FHu/vhR7JRXvwz5eg2y/XoNsJdo5Dj8x21S/MdtUJfMENT/zBDW/8wQ1JTHbVD/aOQ6/2jkOJV6DbD8V78O+Fe/DJL4Uez/CxUe+wsVHJAAAgD8yMY2kMjGNCr4Uez/CxUc+wsVHpF6DbD8V78M+Fe/DpDHbVD/aOQ4/2jkOpfMENT/zBDU/8wQ1pdo5Dj8x21Q/MdtUpRXvwz5eg2w/XoNspcLFRz6+FHs/vhR7pTIxDSUAAIA/AACApcLFR76+FHs/vhR7pRXvw75eg2w/XoNspdo5Dr8x21Q/MdtUpfMENb/zBDU/8wQ1pTHbVL/aOQ4/2jkOpV6DbL8V78M+Fe/DpL4Ue7/CxUc+wsVHpAAAgL/KyVMlyslTi74Ue7/CxUe+wsVHJF6DbL8V78O+Fe/DJDHbVL/aOQ6/2jkOJfMENb/zBDW/8wQ1Jdo5Dr8x21S/MdtUJRXvw75eg2y/XoNsJcLFR76+FHu/vhR7JTIxjaUAAIC/AACAJQAAAAAAAIC/AACAJcLFRz6+FHu/vhR7JRXvwz5eg2y/XoNsJdo5Dj8x21S/MdtUJfMENT/zBDW/8wQ1JTHbVD/aOQ6/2jkOJV6DbD8V78O+Fe/DJL4Uez/CxUe+wsVHJAAAgD8yMY2kMjGNCr4Uez/CxUc+wsVHpF6DbD8V78M+Fe/DpDHbVD/aOQ4/2jkOpfMENT/zBDU/8wQ1pdo5Dj8x21Q/MdtUpRXvwz5eg2w/XoNspcLFRz6+FHs/vhR7pTIxDSUAAIA/AACApcLFR76+FHs/vhR7pRXvw75eg2w/XoNspdo5Dr8x21Q/MdtUpfMENb/zBDU/8wQ1pTHbVL/aOQ4/2jkOpV6DbL8V78M+Fe/DpL4Ue7/CxUc+wsVHpAAAgL/KyVMlyslTi74Ue7/CxUe+wsVHJF6DbL8V78O+Fe/DJDHbVL/aOQ6/2jkOJfMENb/zBDW/8wQ1Jdo5Dr8x21S/MdtUJRXvw75eg2y/XoNsJcLFR76+FHu/vhR7JTIxjaUAAIC/AACAJQAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIAlAACAPwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIA/AAAAPQAAgD8AAIA9AACAPwAAwD0AAIA/AAAAPgAAgD8AACA+AACAPwAAQD4AAIA/AABgPgAAgD8AAIA+AACAPwAAkD4AAIA/AACgPgAAgD8AALA+AACAPwAAwD4AAIA/AADQPgAAgD8AAOA+AACAPwAA8D4AAIA/AAAAPwAAgD8AAAg/AACAPwAAED8AAIA/AAAYPwAAgD8AACA/AACAPwAAKD8AAIA/AAAwPwAAgD8AADg/AACAPwAAQD8AAIA/AABIPwAAgD8AAFA/AACAPwAAWD8AAIA/AABgPwAAgD8AAGg/AACAPwAAcD8AAIA/AAB4PwAAgD8AAIA/AACAPwAAAAAAAAAAAAAAPQAAAAAAAIA9AAAAAAAAwD0AAAAAAAAAPgAAAAAAACA+AAAAAAAAQD4AAAAAAABgPgAAAAAAAIA+AAAAAAAAkD4AAAAAAACgPgAAAAAAALA+AAAAAAAAwD4AAAAAAADQPgAAAAAAAOA+AAAAAAAA8D4AAAAAAAAAPwAAAAAAAAg/AAAAAAAAED8AAAAA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";var oo="data:application/octet-stream;base64,Z2xURgIAAAAcQAAAAAkAAEpTT057ImFzc2V0Ijp7InZlcnNpb24iOiIyLjAifSwic2NlbmVzIjpbeyJub2RlcyI6WzJdfV0sInNjZW5lIjowLCJub2RlcyI6W3sibWVzaCI6MH0seyJtZXNoIjoxfSx7ImNoaWxkcmVuIjpbMCwxXX1dLCJidWZmZXJWaWV3cyI6W3siYnVmZmVyIjowLCJieXRlT2Zmc2V0IjowLCJieXRlTGVuZ3RoIjoyMzUyLCJ0YXJnZXQiOjM0OTYyLCJieXRlU3RyaWRlIjoxMn0seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjIzNTIsImJ5dGVMZW5ndGgiOjIzNTIsInRhcmdldCI6MzQ5NjIsImJ5dGVTdHJpZGUiOjEyfSx7ImJ1ZmZlciI6MCwiYnl0ZU9mZnNldCI6NDcwNCwiYnl0ZUxlbmd0aCI6MTU2OCwidGFyZ2V0IjozNDk2MiwiYnl0ZVN0cmlkZSI6OH0seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjYyNzIsImJ5dGVMZW5ndGgiOjc2OCwidGFyZ2V0IjozNDk2M30seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjcwNDAsImJ5dGVMZW5ndGgiOjIzNTIsInRhcmdldCI6MzQ5NjIsImJ5dGVTdHJpZGUiOjEyfSx7ImJ1ZmZlciI6MCwiYnl0ZU9mZnNldCI6OTM5MiwiYnl0ZUxlbmd0aCI6MjM1MiwidGFyZ2V0IjozNDk2MiwiYnl0ZVN0cmlkZSI6MTJ9LHsiYnVmZmVyIjowLCJieXRlT2Zmc2V0IjoxMTc0NCwiYnl0ZUxlbmd0aCI6MTU2OCwidGFyZ2V0IjozNDk2MiwiYnl0ZVN0cmlkZSI6OH0seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjEzMzEyLCJieXRlTGVuZ3RoIjo3NjgsInRhcmdldCI6MzQ5NjN9XSwiYnVmZmVycyI6W3siYnl0ZUxlbmd0aCI6MTQwODB9XSwiYWNjZXNzb3JzIjpbeyJidWZmZXJWaWV3IjowLCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6MTk2LCJtYXgiOlswLjM0OTk5OTk5NDAzOTUzNTUsMC4zNDk5OTk5OTQwMzk1MzU1LDAuMDcwMDAwMDAwMjk4MDIzMjJdLCJtaW4iOlstMC4zNDk5OTk5OTQwMzk1MzU1LC0wLjM0OTk5OTk5NDAzOTUzNTUsLTEuNDkwMTE2OTE4NzQ1MzQzNGUtMTBdLCJ0eXBlIjoiVkVDMyJ9LHsiYnVmZmVyVmlldyI6MSwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjE5NiwibWF4IjpbMSwxLDFdLCJtaW4iOlstMSwtMSwtMV0sInR5cGUiOiJWRUMzIn0seyJidWZmZXJWaWV3IjoyLCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6MTk2LCJtYXgiOlsxLDFdLCJtaW4iOlswLDBdLCJ0eXBlIjoiVkVDMiJ9LHsiYnVmZmVyVmlldyI6MywiY29tcG9uZW50VHlwZSI6NTEyMywiY291bnQiOjM4NCwibWF4IjpbMTk1XSwibWluIjpbMF0sInR5cGUiOiJTQ0FMQVIifSx7ImJ1ZmZlclZpZXciOjQsImNvbXBvbmVudFR5cGUiOjUxMjYsImNvdW50IjoxOTYsIm1heCI6WzAuMjgwMDAwMDAxMTkyMDkyOSwwLjI4MDAwMDAwMTE5MjA5MjksMC4wNzUwMDAwMDI5ODAyMzIyNF0sIm1pbiI6Wy0wLjI4MDAwMDAwMTE5MjA5MjksLTAuMjgwMDAwMDAxMTkyMDkyOSwwLjA2NDk5OTk5NzYxNTgxNDIxXSwidHlwZSI6IlZFQzMifSx7ImJ1ZmZlclZpZXciOjUsImNvbXBvbmVudFR5cGUiOjUxMjYsImNvdW50IjoxOTYsIm1heCI6WzEsMSwxXSwibWluIjpbLTEsLTEsLTFdLCJ0eXBlIjoiVkVDMyJ9LHsiYnVmZmVyVmlldyI6NiwiY29tcG9uZW50VHlwZSI6NTEyNiwiY291bnQiOjE5NiwibWF4IjpbMSwxXSwibWluIjpbMCwwXSwidHlwZSI6IlZFQzIifSx7ImJ1ZmZlclZpZXciOjcsImNvbXBvbmVudFR5cGUiOjUxMjMsImNvdW50IjozODQsIm1heCI6WzE5NV0sIm1pbiI6WzBdLCJ0eXBlIjoiU0NBTEFSIn1dLCJtYXRlcmlhbHMiOlt7InBick1ldGFsbGljUm91Z2huZXNzIjp7ImJhc2VDb2xvckZhY3RvciI6WzAu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AACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIClAACAvwAAAAAAAIA/AAAAPQAAgD8AAIA9AACAPwAAwD0AAIA/AAAAPgAAgD8AACA+AACAPwAAQD4AAIA/AABgPgAAgD8AAIA+AACAPwAAkD4AAIA/AACgPgAAgD8AALA+AACAPwAAwD4AAIA/AADQPgAAgD8AAOA+AACAPwAA8D4AAIA/AAAAPwAAgD8AAAg/AACAPwAAED8AAIA/AAAYPwAAgD8AACA/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I2ZuPghLHz64HoU93b1KPt29Sj64HoU9CEsfPiNmbj64HoU9LHLbPYdyhD64HoU9xb5fPfqajD64HoU9niIeJClcjz64HoU9xb5fvfqajD64HoU9LHLbvYdyhD64HoU9CEsfviNmbj64HoU93b1Kvt29Sj64HoU9I2ZuvghLHz64HoU9h3KEvixy2z24HoU9+pqMvsW+Xz24HoU9KVyPvjUVaCS4HoU9+pqMvsW+X724HoU9h3KEvixy2724HoU9I2ZuvghLH764HoU93b1Kvt29Sr64HoU9CEsfviNmbr64HoU9LHLbvYdyhL64HoU9xb5fvfqajL64HoU9niKepClcj764HoU9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAArXoyGamZk9AAAAAClcj76amZk9xb5fPfqajL6amZk9LHLbPYdyhL6amZk9CEsfPiNmbr6amZk93b1KPt29Sr6amZk9I2ZuPghLH76amZk9h3KEPixy272amZk9+pqMPsW+X72amZk9KVyPPi3lk6OamZk9+pqMPsW+Xz2amZk9h3KEPixy2z2amZk9I2ZuPghLHz6amZk93b1KPt29Sj6amZk9CEsfPiNmbj6amZk9LHLbPYdyhD6amZk9xb5fPfqajD6amZk9niIeJClcjz6amZk9xb5fvfqajD6amZk9LHLbvYdyhD6amZk9CEsfviNmbj6amZk93b1Kvt29Sj6amZk9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AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgCUAAIA/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgKUAAIC/AAAAAAAAgD8AAAA9AACAPwAAgD0AAIA/AADAPQAAgD8AAAA+AACAPwAAID4AAIA/AABAPgAAgD8AAGA+AACAPwAAgD4AAIA/AACQPgAAgD8AAKA+AACAPwAAsD4AAIA/AADAPgAAgD8AANA+AACAPwAA4D4AAIA/AADwPgAAgD8AAAA/AACAPwAACD8AAIA/AAAQPwAAgD8AABg/AACAPwAAID8AAIA/AAAoPwAAgD8AADA/AACAPwAAOD8AAIA/AABAPwAAgD8AAEg/AACAPwAAUD8AAIA/AABYPwAAgD8AAGA/AACAPwAAaD8AAIA/AABwPwAAgD8AAHg/AACAPwAAgD8AAIA/AAAAAAAAAAAAAAA9AAAAAAAAgD0AAAAAAADAPQAAAAAAAAA+AAAAAAAAID4AAAAAAABAPgAAAAAAAGA+AAAAAAAAgD4AAAAAAACQPgAAAAAAAKA+AAAAAAAAsD4AAAAAAADAPgAAAAAAANA+AAAAAAAA4D4AAAAAAADwPgAAAAAAAAA/AAAAAAAACD8AAAAAAAAQPwAAAAAAABg/AAAAAAAAID8AAAAAAAAoPwAAAAAAADA/AAAAAAAAOD8AAAAAAABAPwAAAAAAAEg/AAAAAAAAUD8AAAAAAABYPwAAAAAAAGA/AAAAAAAAaD8AAAAAAABwPwAAAAAAAHg/AAAAAAAAgD8AAAAAAAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAgD8AAAA/X4p9P7j4GD+vQXY/xfswP5ltaj/tHEc/eoJaP3qCWj/tHEc/mW1qP8X7MD+vQXY/uPgYP1+KfT8AAAA/AACAP5AOzj5fin0/dQiePq9Bdj9MjGM+mW1qPxr2FT56glo/O5OsPe0cRz8M5Rs9xfswPzBoHTy4+Bg/AAAAAAAAAD8waB08kA7OPgzlGz11CJ4+O5OsPUyMYz4a9hU+GvYVPkyMYz47k6w9dQiePgzlGz2QDs4+MGgdPAAAAD8AAAAAuPgYPzBoHTzF+zA/DOUbPe0cRz87k6w9eoJaPxr2FT6ZbWo/TIxjPq9Bdj91CJ4+X4p9P5AOzj4AAIA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAIA/AAAAP1+KfT+QDs4+r0F2P3UInj6ZbWo/TIxjPnqCWj8a9hU+7RxHPzuTrD3F+zA/DOUbPbj4GD8waB08AAAAPwAAAACQDs4+MGgdPHUInj4M5Rs9TIxjPjuTrD0a9hU+GvYVPjuTrD1MjGM+DOUbPXUInj4waB08kA7OPgAAAAAAAAA/MGgdPLj4GD8M5Rs9xfswPzuTrD3tHEc/GvYVPnqCWj9MjGM+mW1qP3UInj6vQXY/kA7OPl+KfT8AAAA/AACAP7j4GD9fin0/xfswP69Bdj/tHEc/mW1qP3qCWj96glo/mW1qP+0cRz+vQXY/xfswP1+KfT+4+Bg/AACAPwAAAD8AACEAAQAhACIAAQABACIAAgAiACMAAgACACMAAwAjACQAAwADACQABAAkACUABAAEACUABQAlACYABQAFACYABgAmACcABgAGACcABwAnACgABwAHACgACAAoACkACAAIACkACQApACoACQAJACoACgAqACsACgAKACsACwArACwACwALACwADAAsAC0ADAAMAC0ADQAtAC4ADQANAC4ADgAuAC8ADgAOAC8ADwAvADAADwAPADAAEAAwADEAEAAQADEAEQAxADIAEQARADIAEgAyADMAEgASADMAEwAzADQAEwATADQAFAA0ADUAFAAUADUAFQA1ADYAFQAVADYAFgA2ADcAFgAWADcAFwA3ADgAFwAXADgAGAA4ADkAGAAYADkAGQA5ADoAGQAZADoAGgA6ADsAGgAaADsAGwA7ADwAGwAbADwAHAA8AD0AHAAcAD0AHQA9AD4AHQAdAD4AHgA+AD8AHgAeAD8AHwA/AEAAHwAfAEAAIABAAEEAIABiAGMAQgBjAGQAQwBkAGUARABlAGYARQBmAGcARgBnAGgARwBoAGkASABpAGoASQBqAGsASgBrAGwASwBsAG0ATABtAG4ATQBuAG8ATgBvAHAATwBwAHEAUABxAHIAUQByAHMAUgBzAHQAUwB0AHUAVAB1AHYAVQB2AHcAVgB3AHgAVwB4AHkAWAB5AHoAWQB6AHsAWgB7AHwAWwB8AH0AXAB9AH4AXQB+AH8AXgB/AIAAXwCAAIEAYACBAIIAYQCkAKMAgwClAKQAhACmAKUAhQCnAKYAhgCoAKcAhwCpAKgAiACqAKkAiQCrAKoAigCsAKsAiwCtAKwAjACuAK0AjQCvAK4AjgCwAK8AjwCxALAAkACyALEAkQCzALIAkgC0ALMAkwC1ALQAlAC2ALUAlQC3ALYAlgC4ALcAlwC5ALgAmAC6ALkAmQC7ALoAmgC8ALsAmwC9ALwAnAC+AL0AnQC/AL4AngDAAL8AnwDBAMAAoADCAMEAoQDDAMIAogA=";var ro="data:application/octet-stream;base64,Z2xURgIAAABQMgAANAUAAEpTT057ImFzc2V0Ijp7InZlcnNpb24iOiIyLjAiLCJnZW5lcmF0b3IiOiJUSFJFRS5HTFRGRXhwb3J0ZXIgcjE3MyJ9LCJzY2VuZXMiOlt7Im5hbWUiOiJBdXhTY2VuZSIsIm5vZGVzIjpbMF19XSwic2NlbmUiOjAsIm5vZGVzIjpbeyJtZXNoIjowfV0sImJ1ZmZlclZpZXdzIjpbeyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjAsImJ5dGVMZW5ndGgiOjI4ODAsInRhcmdldCI6MzQ5NjIsImJ5dGVTdHJpZGUiOjEyfSx7ImJ1ZmZlciI6MCwiYnl0ZU9mZnNldCI6Mjg4MCwiYnl0ZUxlbmd0aCI6MTkyMCwidGFyZ2V0IjozNDk2MiwiYnl0ZVN0cmlkZSI6OH0seyJidWZmZXIiOjAsImJ5dGVPZmZzZXQiOjQ4MDAsImJ5dGVMZW5ndGgiOjI4ODAsInRhcmdldCI6MzQ5NjIsImJ5dGVTdHJpZGUiOjEyfSx7ImJ1ZmZlciI6MCwiYnl0ZU9mZnNldCI6NzY4MCwiYnl0ZUxlbmd0aCI6Mzg0MCwidGFyZ2V0IjozNDk2MiwiYnl0ZVN0cmlkZSI6MTZ9XSwiYnVmZmVycyI6W3siYnl0ZUxlbmd0aCI6MTE1MjB9XSwiYWNjZXNzb3JzIjpbeyJidWZmZXJWaWV3IjowLCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6MjQwLCJtYXgiOlswLjU3MjIzNDU3MDk4MDA3MiwxLjQ0NjA3ODQxOTY4NTM2MzgsMC4xMDAwMDAwMDE0OTAxMTYxMl0sIm1pbiI6Wy0wLjcxMjM0NjY3MzAxMTc3OTgsMCwwXSwidHlwZSI6IlZFQzMifSx7ImJ1ZmZlclZpZXciOjEsImNvbXBvbmVudFR5cGUiOjUxMjYsImNvdW50IjoyNDAsIm1heCI6WzAsMV0sIm1pbiI6WzAsMF0sInR5cGUiOiJWRUMyIn0seyJidWZmZXJWaWV3IjoyLCJjb21wb25lbnRUeXBlIjo1MTI2LCJjb3VudCI6MjQwLCJtYXgiOlswLjk4NzY4ODMwMjk5Mzc3NDQsMC45OTk2NTczMzI4OTcxODYzLDFdLCJtaW4iOlstMC45ODc2ODgz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AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAIAAAACAAACAvwAAAIAAAACAAACAvwAAAIAAAACAAACAvwAAAIAAAACAAACAvwAAAIAAAACAAACAvwAAAIAAAACAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAIAAAACAAACAvwAAAIAAAACAAACAvwAAAIAAAACAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwEZZD9wcei+AAAAAAEZZD9wcei+AAAAAAEZZD9wcei+AAAAAAEZZD9wcei+AAAAAAEZZD9wcei+AAAAAAEZZD9wcei+AAAAAPMENT/zBDW/AAAAAPMENT/zBDW/AAAAAPMENT/zBDW/AAAAAPMENT/zBDW/AAAAAPMENT/zBDW/AAAAAPMENT/zBDW/AAAAAHBx6D4BGWS/AAAAAHBx6D4BGWS/AAAAAHBx6D4BGWS/AAAAAHBx6D4BGWS/AAAAAHBx6D4BGWS/AAAAAHBx6D4BGWS/AAAAAF8wID4k2Xy/AAAAAF8wID4k2Xy/AAAAAF8wID4k2Xy/AAAAAF8wID4k2Xy/AAAAAF8wID4k2Xy/AAAAAF8wID4k2Xy/AAAAAF8wIL4k2Xy/AAAAAF8wIL4k2Xy/AAAAAF8wIL4k2Xy/AAAAAF8wIL4k2Xy/AAAAgF8wIL4k2Xy/AAAAgF8wIL4k2Xy/AAAAgHBx6L4BGWS/AAAAAHBx6L4BGWS/AAAAAHBx6L4BGWS/AAAAAHBx6L4BGWS/AAAAgHBx6L4BGWS/AAAAgHBx6L4BGWS/AAAAgPMENb/zBDW/AAAAAPMENb/zBDW/AAAAAPMENb/zBDW/AAAAAPMENb/zBDW/AAAAgPMENb/zBDW/AAAAgPMENb/zBDW/AAAAgAEZZL9wcei+AAAAAAEZZL9wcei+AAAAAAEZZL9wcei+AAAAAAEZZL9wcei+AAAAgAEZZL9wcei+AAAAgAEZZL9wcei+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AACAPwAAgD8AAIA/B+hKPwAAgD8AAIA/AACAPwfoSj8AAIA/AACAPwAAgD/+bEg/AACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAA==";f();f();f();var pn=class pn extends Error{};l(pn,"InvalidTokenError");var fn=pn;fn.prototype.name="InvalidTokenError";f();var so=63710088e-1;f();f();function oe(a){return a*(Math.PI/180)}l(oe,"toRadians");function Ri(a){return a*(180/Math.PI)}l(Ri,"toDegrees");function ao(a,i){return(a%i+i)%i}l(ao,"euclideanModulo");function bn([a,i],[t,n]){let o=oe(n-i),r=oe(t-a),d=oe(i),h=oe(n),c=Math.sin(o/2)*Math.sin(o/2)+Math.sin(r/2)*Math.sin(r/2)*Math.cos(d)*Math.cos(h),m=2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c));return so*m}l(bn,"haversineDistance");function lo([a,i],[t,n]){let o=oe(i),r=oe(a),d=oe(n),c=oe(t)-r,m=Math.sin(c)*Math.cos(d),b=Math.cos(o)*Math.sin(d)-Math.sin(o)*Math.cos(d)*Math.cos(c);return Ri((Math.atan2(m,b)+Math.PI*2)%(Math.PI*2))}l(lo,"getForwardBearing");function uo(a,i){let t=ao(a,Math.PI*2),n=ao(i,Math.PI*2),o=n-t,r=n+(o>Math.PI?-Math.PI*2:o<-Math.PI?Math.PI*2:0);return{start:t,end:r}}l(uo,"shortestTweenRotation");function gn(a,i){if(i==null)return a;let t=x({},a);for(let n in i){let o=i[n];o!==void 0&&n!=="accuracyRing"&&n!=="heading"&&(t[n]=o)}if(i.accuracyRing!=null){t.accuracyRing=x({},a.accuracyRing);for(let n in i.accuracyRing){let o=i.accuracyRing[n];o!==void 0&&(t.accuracyRing[n]=o)}}if(i.heading!=null){t.heading=x({},a.heading);for(let n in i.heading){let o=i.heading[n];o!==void 0&&(t.heading[n]=o)}}return t}l(gn,"deepMergeState");function gr([a,i],[t,n],[o,r]){let d=t-a,h=n-i,c=d**2+h**2;if(c===0)return;let m=((o-a)*d+(r-i)*h)/c,b;m<=0?b=[a,i]:m>=1?b=[t,n]:b=[a+m*d,i+m*h];let y=bn([o,r],b);return{proportion:Math.max(0,Math.min(1,m)),intersection:b,distance:y}}l(gr,"getPointLineIntersection");function ho(a,i){if(a==null||a.length<2)return;let t=Number.MAX_SAFE_INTEGER,n,o=0,r=0;for(let d=0;d<a.length-1;d++){let h=a[d],c=a[d+1],m=gr(h,c,i);m!=null&&m.distance<t&&(t=m.distance,n=m.intersection,o=d,r=m.proportion)}if(n)return{intersection:n,distance:t,segmentIndex:o,proportion:r}}l(ho,"findBlueDotOnPath");function co(a,i){if(i==null)return a;let t={latitude:a==null?void 0:a.latitude,longitude:a==null?void 0:a.longitude,accuracy:a==null?void 0:a.accuracy,floor:a==null?void 0:a.floor,heading:a==null?void 0:a.heading,timestamp:a==null?void 0:a.timestamp};return"latitude"in i&&(t.latitude=(i==null?void 0:i.latitude)==null||i.latitude==="device"?a==null?void 0:a.latitude:i.latitude),"longitude"in i&&(t.longitude=i.longitude==null||i.longitude==="device"?a==null?void 0:a.longitude:i.longitude),"accuracy"in i&&(t.accuracy=i.accuracy==="device"?a==null?void 0:a.accuracy:i.accuracy),"floor"in i&&(t.floor=i.floor==="device"?a==null?void 0:a.floor:i.floor),"heading"in i&&(t.heading=i.heading==="device"?a==null?void 0:a.heading:i.heading),"timestamp"in i&&(t.timestamp=i.timestamp),t}l(co,"getPositionWithOverrides");function mo({longitude:a,latitude:i},{radius:t,center:n}){return bn([a,i],[n.longitude,n.latitude])<=t}l(mo,"isWithinPanBounds");function fo(a,i){let t=a*i/.35;return Math.max(t,1)}l(fo,"computeBlueDotScale");function po(a,i,t,n=!0){return n?i!=null&&(a==="active"||a==="inactive"&&t):!1}l(po,"shouldShowHeadingCone");function bo(a,i=!0){return i?a!=="hidden"&&a!=="disabled":!1}l(bo,"shouldShowBlueDot");function go(a,i,t=!0){return t&&a==="active"&&i!=null}l(go,"shouldShowAccuracyRing");function yn(a,i,t){if(t!=null&&"discardStaleUpdates"in t&&t.discardStaleUpdates===!1)return!1;let n=a!=null&&i!=null&&a<i;return n&&(t==null?void 0:t.debug)===!0&&p.log("Stale timestamp discarded (incoming: ".concat(a,", current: ").concat(i,")")),n}l(yn,"isStaleTimestamp");f();function Tn(a,i){let t=a!=null?oe(a):0,n=i!=null?oe(-i):0,{start:o,end:r}=uo(t,n);return[Ri(o),Ri(r)]}l(Tn,"computeHeadingRotation");f();var To=1e4,P,H,F,qt,Le,re,se,ae,le,ue,de,Ee,Ce,Ge,De,zt,ft,pt,E,Po,je,Sn,So,vo,Kt,Eo,Wt,vn,Do,xo,Mo,Ao,En=class En{constructor(i,t){u(this,E);u(this,P);u(this,H);u(this,F,1);u(this,qt,0);u(this,Le,!1);u(this,re);u(this,se);u(this,ae);u(this,le);u(this,ue);u(this,de);u(this,Ee);u(this,Ce);u(this,Ge);u(this,De);T(this,"dot");T(this,"accuracyRing");T(this,"headingCone");u(this,zt,l(i=>{e(this,Wt).call(this,i)},"#handleCameraChange"));T(this,"add",l(i=>{var n;this.remove(),e(this,Wt).call(this,{zoomLevel:e(this,P).Camera.zoomLevel}),s(this,Ee,i.floor);let t=new yo({latitude:i.latitude,longitude:i.longitude});this.accuracyRing=e(this,P).Models.add(t,no,{visible:!1,scale:(n=i.accuracy)!=null?n:0,rotation:[0,0,0],color:e(this,H).getState().accuracyRing.color,opacity:e(this,H).getState().accuracyRing.opacity,visibleThroughGeometry:!0}),this.headingCone=e(this,P).Models.add(t,ro,{visible:!1,scale:e(this,F),rotation:[0,0,0],color:e(this,H).getState().heading.color,opacity:e(this,H).getState().heading.opacity,visibleThroughGeometry:!0}),this.dot=e(this,P).Models.add(t,oo,{visible:!1,scale:e(this,F),rotation:[0,0,0],interactive:!0,visibleThroughGeometry:!0,material:{Inner:{color:e(this,H).status==="inactive"?e(this,H).getState().inactiveColor:e(this,H).getState().color}}})},"add"));u(this,ft);u(this,pt);T(this,"update",l((i,t={})=>{let{position:n,status:o,accuracy:r,heading:d}=i;r!=null&&s(this,ft,r),d!=null&&s(this,pt,d),o&&g(this,E,Ao).call(this,o),t.animate?g(this,E,vo).call(this,n,r,d):(g(this,E,Sn).call(this),g(this,E,So).call(this,n,r,d))},"update"));u(this,Kt,l(()=>{g(this,E,Eo).call(this),e(this,Le)&&(s(this,Le,!1),g(this,E,vn).call(this))},"#handlePreRender"));u(this,Wt,l(i=>{let t=Math.round(i.zoomLevel*To)/To;if(t===e(this,qt))return;s(this,qt,t);let n=e(this,P).getMetersPerPixel(),o=fo(e(this,H).getState().radius,n);o!==e(this,F)&&(s(this,F,o),this.dot&&e(this,P).updateState(this.dot,{scale:[e(this,F),e(this,F),e(this,F)]}),this.headingCone&&e(this,P).updateState(this.headingCone,{scale:[e(this,F),e(this,F),1]}))},"#syncScale"));T(this,"remove",l(()=>{g(this,E,Sn).call(this),s(this,re,void 0),s(this,se,void 0),s(this,ae,void 0),s(this,Ee,void 0),s(this,Ce,void 0),s(this,Ge,void 0),s(this,De,void 0),s(this,ft,void 0),s(this,pt,void 0),this.dot&&(e(this,P).Models.remove(this.dot),this.dot=void 0),this.accuracyRing&&(e(this,P).Models.remove(this.accuracyRing),this.accuracyRing=void 0),this.headingCone&&(e(this,P).Models.remove(this.headingCone),this.headingCone=void 0)},"remove"));T(this,"destroy",l(()=>{this.remove(),e(this,P).off("pre-render",e(this,Kt)),e(this,P).off("camera-change",e(this,zt))},"destroy"));s(this,P,i),s(this,H,t),e(this,P).on("pre-render",e(this,Kt)),e(this,P).on("camera-change",e(this,zt))}getPosition(){if(this.dot!=null)return e(this,P).getState(this.dot).position}updateFloor(i){var t,n;((t=e(this,Ee))==null?void 0:t.id)!==(i==null?void 0:i.id)&&(s(this,Ge,Date.now()),s(this,De,(n=e(this,Ce))!=null?n:g(this,E,Po).call(this)),s(this,Ee,i))}};P=new WeakMap,H=new WeakMap,F=new WeakMap,qt=new WeakMap,Le=new WeakMap,re=new WeakMap,se=new WeakMap,ae=new WeakMap,le=new WeakMap,ue=new WeakMap,de=new WeakMap,Ee=new WeakMap,Ce=new WeakMap,Ge=new WeakMap,De=new WeakMap,zt=new WeakMap,ft=new WeakMap,pt=new WeakMap,E=new WeakSet,Po=l(function(){var t;if(!this.dot)return 0;let i=e(this,P).getState(this.dot);return(t=i==null?void 0:i.verticalOffset)!=null?t:0},"#getCurrentAltitude"),je=l(function(i){i&&(i.stop(),e(this,P).removeTween(i))},"#stopTween"),Sn=l(function(){s(this,le,g(this,E,je).call(this,e(this,le))),s(this,ue,g(this,E,je).call(this,e(this,ue))),s(this,de,g(this,E,je).call(this,e(this,de)))},"#stopAllTweens"),So=l(function(i,t,n){if(i&&s(this,re,{longitude:i.longitude,latitude:i.latitude}),t!=null&&s(this,se,t),n!=null){let[,o]=Tn(e(this,ae),n);s(this,ae,o)}g(this,E,vn).call(this)},"#setImmediate"),vo=l(function(i,t,n){var o,r,d,h,c;if(i){let m={longitude:i.longitude,latitude:i.latitude},b=(r=(o=e(this,re))!=null?o:g(this,E,Do).call(this))!=null?r:m;s(this,re,x({},b)),s(this,le,g(this,E,je).call(this,e(this,le))),s(this,le,e(this,P).tween({longitude:b.longitude,latitude:b.latitude}).to(m,1e3).easing(Pn["ease-out"]).onUpdate(({longitude:y,latitude:v})=>{s(this,re,{longitude:y,latitude:v}),s(this,Le,!0)}).onComplete(()=>{e(this,le)&&(e(this,P).removeTween(e(this,le)),s(this,le,void 0))}).start())}if(t!=null){let m=t,b=(h=(d=e(this,se))!=null?d:g(this,E,xo).call(this))!=null?h:m;s(this,se,b),s(this,ue,g(this,E,je).call(this,e(this,ue))),s(this,ue,e(this,P).tween({scale:b}).to({scale:m},150).easing(Pn.linear).onUpdate(({scale:y})=>{s(this,se,y),s(this,Le,!0)}).onComplete(()=>{e(this,ue)&&(e(this,P).removeTween(e(this,ue)),s(this,ue,void 0))}).start())}if(n!=null){let[m,b]=Tn((c=e(this,ae))!=null?c:g(this,E,Mo).call(this),n);s(this,ae,m),s(this,de,g(this,E,je).call(this,e(this,de))),s(this,de,e(this,P).tween({rotation:m}).to({rotation:b},150).easing(Pn.linear).onUpdate(({rotation:y})=>{s(this,ae,y),s(this,Le,!0)}).onComplete(()=>{e(this,de)&&(e(this,P).removeTween(e(this,de)),s(this,de,void 0))}).start())}},"#animateToTarget"),Kt=new WeakMap,Eo=l(function(){var n,o,r,d;if(!this.dot||e(this,H).status==="hidden"||e(this,H).status==="disabled")return;let i=e(this,Ee)?(o=(n=e(this,P).getState(e(this,Ee)))==null?void 0:n.altitude)!=null?o:0:(d=(r=e(this,P).getState(e(this,P).currentFloor))==null?void 0:r.altitude)!=null?d:0,t=i;if(e(this,Ge)!=null&&e(this,De)!=null){let h=Date.now()-e(this,Ge),c=Math.min(h/1e3,1);if(c<1){let m=1-Math.pow(1-c,3);t=e(this,De)+(i-e(this,De))*m}else s(this,Ge,void 0),s(this,De,void 0)}if(e(this,Ce)==null||Math.abs(e(this,Ce)-t)>.001){s(this,Ce,t);let h={verticalOffset:t};e(this,P).updateState(this.dot,h),this.accuracyRing&&e(this,P).updateState(this.accuracyRing,h),this.headingCone&&e(this,P).updateState(this.headingCone,h)}},"#syncAltitude"),Wt=new WeakMap,vn=l(function(){let i=e(this,re)?new yo({latitude:e(this,re).latitude,longitude:e(this,re).longitude}):void 0;if(this.dot){let t={scale:[e(this,F),e(this,F),e(this,F)]};i&&(t.position=i),e(this,P).updateState(this.dot,t)}if(this.accuracyRing){let t={};i&&(t.position=i),e(this,se)!=null&&(t.scale=[e(this,se),e(this,se),1]),e(this,P).updateState(this.accuracyRing,t)}if(this.headingCone){let t={scale:[e(this,F),e(this,F),1]};i&&(t.position=i),e(this,ae)!=null&&(t.rotation=[0,0,e(this,ae)]),e(this,P).updateState(this.headingCone,t)}},"#applyAllModels"),Do=l(function(){if(!this.dot)return;let i=e(this,P).getState(this.dot);if(i!=null&&i.position)return{longitude:i.position.longitude,latitude:i.position.latitude}},"#readCurrentPosition"),xo=l(function(){var t;if(!this.accuracyRing)return;let i=e(this,P).getState(this.accuracyRing);return(t=i==null?void 0:i.scale)==null?void 0:t[0]},"#readCurrentAccuracyScale"),Mo=l(function(){var t;if(!this.headingCone)return;let i=e(this,P).getState(this.headingCone);return(t=i==null?void 0:i.rotation)==null?void 0:t[2]},"#readCurrentHeadingRotation"),Ao=l(function(i){let t=e(this,H).getState(),n=i==="active",o=bo(i,t.visible);if(this.dot){let r={visible:o};o&&(r.material={Inner:{color:n?t.color:t.inactiveColor}}),e(this,P).updateState(this.dot,r)}this.accuracyRing&&e(this,P).updateState(this.accuracyRing,{visible:go(i,e(this,ft),t.accuracyRing.visible)}),this.headingCone&&e(this,P).updateState(this.headingCone,{visible:po(i,e(this,pt),t.heading.displayWhenInactive,t.heading.visible),color:n?t.heading.color:t.inactiveColor})},"#applyStatusAndAppearance"),l(En,"ModelManager");var Li=En;f();f();var wo={hidden:{actions:{enable:"hidden",error:"hidden","position-update":"active",initialize:"inactive",disable:"disabled",timeout:"hidden"}},active:{actions:{enable:"active",disable:"disabled","position-update":"active",error:"inactive",timeout:"inactive"}},inactive:{actions:{enable:"inactive",disable:"disabled","position-update":"active",error:"inactive",timeout:"inactive"}},disabled:{actions:{enable:"hidden",disable:"disabled"}}};var Y,pe,bt,Dn=class Dn extends k{constructor(){super();u(this,Y,"disabled");u(this,pe);u(this,bt,!1)}get current(){return e(this,Y)}get isEnabled(){return e(this,Y)!=="disabled"}setDebug(t){s(this,bt,t)}transitionTo(t){let n=wo[e(this,Y)].actions[t];if(n==null){p.warn("Invalid state transition from ".concat(e(this,Y)," to ").concat(n," using ").concat(t));return}n!==e(this,Y)&&(e(this,bt)&&p.log("Transitioning from ".concat(e(this,Y)," to ").concat(n," using ").concat(t)),s(this,Y,n),this.publish("status-change",{status:n,action:t}))}resetTimer(t){e(this,pe)&&(clearTimeout(e(this,pe)),s(this,pe,void 0)),typeof t=="number"&&t<1/0&&s(this,pe,setTimeout(()=>{e(this,bt)&&p.log("Position timed out after ".concat(t,"ms")),this.transitionTo("timeout")},t))}clearTimer(){e(this,pe)&&(clearTimeout(e(this,pe)),s(this,pe,void 0))}disable(){this.clearTimer(),this.transitionTo("disable")}shouldUpdateGeometry(){return e(this,Y)!=="hidden"&&e(this,Y)!=="disabled"}destroy(){this.clearTimer(),super.destroy()}};Y=new WeakMap,pe=new WeakMap,bt=new WeakMap,l(Dn,"StatusManager");var Ci=Dn;f();f();var Oo=Xo(_o());f();function Mr(a,i){let t=a.x-i.x,n=a.y-i.y;return Math.sqrt(t*t+n*n)}l(Mr,"calculatePixelDistance");function Ar(a){return{x:a.width/2,y:a.height/2}}l(Ar,"getContainerCenter");function Io(a,i){if(i.width===0||i.height===0)return;let t=Ar(i);return Mr(a,t)}l(Io,"calculateDistanceFromCenter");function Ro(a){let t=Math.min(a.width,a.height)*.22;return Math.max(96,Math.min(180,t))}l(Ro,"computePanExitThresholdPixels");function Lo(a,i){return a!=null&&a>i}l(Lo,"shouldExitFollowMode");function Co(a,i){var t,n;return{zoomLevel:(t=i==null?void 0:i.zoomLevel)!=null?t:21,bearing:a==="position-only"?i==null?void 0:i.bearing:void 0,pitch:(n=i==null?void 0:i.pitch)!=null?n:45}}l(Co,"createDefaultCameraTarget");function Go(a){var i,t;return{duration:(i=a==null?void 0:a.duration)!=null?i:1e3,easing:(t=a==null?void 0:a.easing)!=null?t:"ease-in-out"}}l(Go,"createDefaultCameraOptions");function Fo(a,i,t=1e-5){let o=a.filter(d=>d.floorId===i).map(d=>({x:d.longitude,y:d.latitude}));return(0,Oo.default)(o,t).map(d=>[d.x,d.y])}l(Fo,"simplifyPathCoordinates");function wr(a,i){let t=ho(a,i);if(t==null)return;let n=a[t.segmentIndex],o=a[t.segmentIndex+1];if(!(n==null||o==null))return lo(n,o)}l(wr,"computePathBearing");function No(a,i,t,n,o){if(a==="position-and-heading")return i!=null?i:void 0;if(a==="position-and-path-direction"&&n!=null)return wr(n,o);if(a==="position-only"&&t!=null)return t}l(No,"computeFollowBearing");var M,Fe,xe,Ze,Q,Xe,Ne,Be,jt,Zt,Xt,gt,Bo,Yt,Uo,xn=class xn extends k{constructor(t){super();u(this,gt);u(this,M);u(this,Fe,!1);u(this,xe);u(this,Ze);u(this,Q);u(this,Xe);u(this,Ne,!1);u(this,Be);T(this,"cancel",l(()=>{e(this,M).Camera.isAnimating&&e(this,M).Camera.cancelAnimation(),s(this,Fe,!1),s(this,Ne,!1),s(this,xe,void 0),s(this,Ze,void 0),s(this,Q,void 0),s(this,Xe,void 0),s(this,Be,void 0),e(this,M).off("user-interaction-start",e(this,jt)),e(this,M).off("user-interaction-end",e(this,Zt)),e(this,M).off("camera-change",e(this,Xt)),e(this,M).off("navigation-active-path-change",e(this,Yt)),this.publish("follow-change",{following:!1})},"cancel"));u(this,jt,l(()=>{s(this,Ne,!0),e(this,M).Camera.isAnimating&&e(this,M).Camera.cancelAnimation()},"#handleUserInteractionStart"));u(this,Zt,l(()=>{s(this,Ne,!1),e(this,Q)!=null&&(e(this,Q).zoomLevel=e(this,M).Camera.zoomLevel,e(this,Q).pitch=e(this,M).Camera.pitch)},"#handleUserInteractionEnd"));u(this,Xt,l(()=>{if(!e(this,Ne)||e(this,Be)==null)return;let t=e(this,M).container.getBoundingClientRect(),n=g(this,gt,Bo).call(this,t),o=Ro({width:t.width,height:t.height});Lo(n,o)&&this.cancel()},"#handleCameraChange"));u(this,Yt,l(()=>{s(this,xe,void 0)},"#handlePathChange"));s(this,M,t)}get isFollowing(){return e(this,Fe)}start(t,n){if(t===!1){this.cancel();return}t!=="position-only"&&(n==null?void 0:n.bearing)!=null&&p.warn("Camera bearing option will be ignored in follow mode '".concat(t,"'. To control the bearing manually, use mode 'position-only'.")),s(this,Ze,t),s(this,Q,Co(t,n)),s(this,Xe,Go(n)),e(this,Fe)||(s(this,Fe,!0),e(this,M).on("user-interaction-start",e(this,jt)),e(this,M).on("user-interaction-end",e(this,Zt)),e(this,M).on("camera-change",e(this,Xt)),e(this,M).on("navigation-active-path-change",e(this,Yt))),this.publish("follow-change",{following:!0,mode:t})}handlePositionUpdate(t){if(!e(this,Fe)||!e(this,Ze)||!e(this,Q)||!e(this,Xe))return;let{coordinate:n,heading:o,floor:r}=t;if(s(this,Be,n),e(this,Ne))return;r!=null&&r.id!==e(this,M).currentFloor.id&&(e(this,M).setFloor(r.id),s(this,xe,void 0));let d=No(e(this,Ze),o,e(this,Q).bearing,g(this,gt,Uo).call(this),[n.longitude,n.latitude]),h={center:n,zoomLevel:e(this,Q).zoomLevel,pitch:e(this,Q).pitch,bearing:d};e(this,M).Camera.animateTo(h,e(this,Xe))}destroy(){this.cancel(),super.destroy()}};M=new WeakMap,Fe=new WeakMap,xe=new WeakMap,Ze=new WeakMap,Q=new WeakMap,Xe=new WeakMap,Ne=new WeakMap,Be=new WeakMap,jt=new WeakMap,Zt=new WeakMap,Xt=new WeakMap,gt=new WeakSet,Bo=l(function(t){if(e(this,Be)==null)return;let n=e(this,M).getScreenCoordinateFromCoordinate(e(this,Be));return Io(n,{width:t.width,height:t.height})},"#getPixelDistanceFromCenter"),Yt=new WeakMap,Uo=l(function(){if(e(this,xe)==null&&e(this,M).Navigation.activeDirections!=null){let t=Array.isArray(e(this,M).Navigation.activeDirections)?e(this,M).Navigation.activeDirections.flatMap(n=>n.coordinates):e(this,M).Navigation.activeDirections.coordinates;s(this,xe,Fo(t,e(this,M).currentFloor.id))}return e(this,xe)},"#getSimplifiedDirections"),l(xn,"FollowController");var Fi=xn;f();f();f();function yt(a,i,t,n){if(a==null||i==null)return"none";let o=t-i;return o>=a.ttl?"none":o<n.anchorOnlyPeriodMs?"anchor-only":"transition"}l(yt,"getAnchorState");function $o(a,i,t,n){let r=i-a-t.anchorOnlyPeriodMs;if(r<=0)return 1;let d=Math.LN2/n;return Math.exp(-d*r)}l($o,"getAnchorConfidenceDecay");var Ho={anchorOnlyPeriodMs:5e3,halfLifeMs:1e4,maxAgeMs:5e3},Vo=3e4;f();var _r=.7,Or=1,Ir=2e3,Rr=1,Lr=30,Cr=100,ko=5;function Ue(a){return(a%360+360)%360}l(Ue,"normalizeAngle");function Mn(a,i){let t=Ue(i)-Ue(a);return t>180?t-360:t<-180?t+360:t}l(Mn,"angleDifference");var C,Tt,Me,Pt,St,vt,Et,Qt,$e,ee,He,Bi,Jo,An=class An{constructor(){u(this,Bi);u(this,C,null);u(this,Tt,null);u(this,Me,null);u(this,Pt,_r);u(this,St,Rr);u(this,vt,Lr);u(this,Et,!0);u(this,Qt,2);u(this,$e,0);u(this,ee,[]);u(this,He,!1)}updateCompass(i,t){let n=Ue(i+e(this,$e));if(s(this,Tt,n),e(this,Et)&&(e(this,ee).push(n),e(this,ee).length>ko&&e(this,ee).shift(),s(this,He,g(this,Bi,Jo).call(this))),e(this,C)===null){s(this,C,n);return}let o=Mn(e(this,C),n);if(Math.abs(o)>e(this,vt)){s(this,C,n);return}let r=1-e(this,Pt);e(this,He)&&(r*=.1),!e(this,He)&&Math.abs(o)<30&&(r=Math.max(.01,r)),s(this,C,Ue(e(this,C)+o*r))}updateGyro(i,t){if(e(this,C)===null){s(this,Me,t);return}if(e(this,Me)!==null){let n=(t-e(this,Me))/1e3;if(n>Ir/1e3||n<0){s(this,Me,t);return}if(Math.abs(i)>e(this,St)){let{isIOS:o}=Se(),r=o?-i*n:i*n;s(this,C,Ue(e(this,C)+r))}}s(this,Me,t)}correctWithGps(i,t,n=1){if(t<Or)return;if(e(this,C)===null){s(this,C,Ue(i));return}let o=Ue(i),r=Mn(e(this,C),o),d=Math.min(.5,n*.5);s(this,C,Ue(e(this,C)+r*d))}setCalibrationOffset(i){s(this,$e,i)}configure(i){i.complementaryAlpha!==void 0&&s(this,Pt,Math.min(Math.max(i.complementaryAlpha,0),1)),i.gyroNoiseThreshold!==void 0&&s(this,St,Math.max(i.gyroNoiseThreshold,0)),i.maxHeadingError!==void 0&&s(this,vt,Math.min(Math.max(i.maxHeadingError,1),180)),i.magneticGatingEnabled!==void 0&&s(this,Et,i.magneticGatingEnabled),i.deltaThreshold!==void 0&&s(this,Qt,Math.max(i.deltaThreshold,0)),i.calibrationOffset!==void 0&&s(this,$e,i.calibrationOffset)}getConfig(){return{complementaryAlpha:e(this,Pt),gyroNoiseThreshold:e(this,St),maxHeadingError:e(this,vt),magneticGatingEnabled:e(this,Et),deltaThreshold:e(this,Qt),calibrationOffset:e(this,$e)}}isMagneticDisturbanceActive(){return e(this,He)}getHeading(){return e(this,C)}isInitialized(){return e(this,C)!==null}getLastCompassHeading(){return e(this,Tt)}reset(){s(this,C,null),s(this,Tt,null),s(this,Me,null),s(this,ee,[]),s(this,He,!1),s(this,$e,0)}};C=new WeakMap,Tt=new WeakMap,Me=new WeakMap,Pt=new WeakMap,St=new WeakMap,vt=new WeakMap,Et=new WeakMap,Qt=new WeakMap,$e=new WeakMap,ee=new WeakMap,He=new WeakMap,Bi=new WeakSet,Jo=l(function(){if(e(this,ee).length<ko)return!1;let i=0,t=e(this,ee)[0];for(let o=1;o<e(this,ee).length;o++){let r=Mn(t,e(this,ee)[o]);i+=r*r}return i/(e(this,ee).length-1)>Cr},"#detectMagneticDisturbance"),l(An,"HeadingFusionFilter");var Ni=An;f();var Gr={halfLifeMs:1e4},Fr=15e3,Nr=1e-8,Br=1e-6,qo=111320,D,N,j,ei,ti,ii,wn,_n=class _n{constructor(i){u(this,ii);u(this,D,null);u(this,N,null);u(this,j,null);u(this,ei);u(this,ti);s(this,ei,x(x({},Gr),i)),s(this,ti,Math.LN2/e(this,ei).halfLifeMs)}predict(i){if(e(this,D)===null||e(this,N)===null||e(this,j)===null)return;let t=i-e(this,j);if(t>Fr||t<0){this.reset();return}if(t===0)return;let n=t/1e3;e(this,D)[0]+=e(this,D)[2]*n,e(this,D)[1]+=e(this,D)[3]*n;let o=e(this,N),r=n*n,d=Nr*e(this,ti)*t,h=o[0]+2*n*o[2]+r*o[10],c=o[5]+2*n*o[7]+r*o[15],m=o[2]+n*o[10],b=o[7]+n*o[15];o[0]=h+d*r,o[5]=c+d*r,o[2]=m,o[8]=m,o[7]=b,o[13]=b,o[10]+=d*n,o[15]+=d*n,s(this,j,i)}updatePosition(i,t,n,o){if(e(this,D)===null||e(this,N)===null||e(this,j)===null){g(this,ii,wn).call(this,i,t,n,o);return}if(this.predict(o),e(this,D)===null||e(this,N)===null){g(this,ii,wn).call(this,i,t,n,o);return}let r=e(this,N),d=n,h=i-e(this,D)[0],c=t-e(this,D)[1],m=r[0]+d,b=r[5]+d,y=r[0]/m,v=r[5]/b,O=r[2]/m,W=r[7]/b;e(this,D)[0]+=y*h,e(this,D)[1]+=v*c,e(this,D)[2]+=O*h,e(this,D)[3]+=W*c,r[0]=(1-y)*r[0],r[2]=(1-y)*r[2],r[5]=(1-v)*r[5],r[7]=(1-v)*r[7],r[10]=r[10]-O*r[2],r[15]=r[15]-W*r[7],s(this,j,o)}updateOdometry(i,t,n,o){if(e(this,D)===null||e(this,N)===null||e(this,j)===null||(this.predict(o),e(this,D)===null||e(this,N)===null))return;let r=t/qo,d=qo*Math.cos(e(this,D)[0]*Math.PI/180),h=i/d;e(this,D)[0]+=r,e(this,D)[1]+=h;let c=n;e(this,N)[0]+=c,e(this,N)[5]+=c,s(this,j,o)}getPosition(){return e(this,D)===null?null:{latitude:e(this,D)[0],longitude:e(this,D)[1]}}getVelocity(){return e(this,D)===null?null:{vLat:e(this,D)[2],vLon:e(this,D)[3]}}getUncertainty(){return e(this,N)===null?1/0:e(this,N)[0]+e(this,N)[5]}getLastTimestamp(){return e(this,j)}isInitialized(){return e(this,D)!==null}reset(){s(this,D,null),s(this,N,null),s(this,j,null)}};D=new WeakMap,N=new WeakMap,j=new WeakMap,ei=new WeakMap,ti=new WeakMap,ii=new WeakSet,wn=l(function(i,t,n,o){s(this,D,[i,t,0,0]);let r=n,d=Br;s(this,N,[r,0,0,0,0,r,0,0,0,0,d,0,0,0,0,d]),s(this,j,o)},"#initialize"),l(_n,"MultiSensorEKF");var Ui=_n;f();function $i(a,i){let t=Math.max(.01,Math.min(1,a));return i*i*1e-10/t}l($i,"confidenceToNoise");var Ur=1,J,be,q,Z,B,z,oi,A,X,Ve,V,ge,Qe,et,ke,ri,si,ai,I,Ye,Hi,zo,Dt,ni,li,ki,Ji,ui,di,Ko,qi,On=class On extends k{constructor(t,n){super();u(this,I);u(this,J);u(this,be);u(this,q);u(this,Z);u(this,B);u(this,z);u(this,oi,0);u(this,A);u(this,X);u(this,Ve);u(this,V,{dx:0,dy:0});u(this,ge);u(this,Qe);u(this,et);u(this,ke);u(this,ri,l(({error:t})=>{this.publish("error",{error:t})},"#handleError"));u(this,si,l(({anchor:t,configOverride:n})=>{this.setAnchor(t,n)},"#handleAnchorSetEvent"));u(this,ai,l(()=>{this.clearAnchor()},"#handleAnchorClearEvent"));u(this,Dt,0);u(this,li,l(({sensorId:t,update:n})=>{var o,r;n.latitude!=null&&n.longitude!=null?e(this,qi).call(this,t,n):n.heading!=null&&n.angularVelocity==null?e(this,ki).call(this,n.heading,(o=n.timestamp)!=null?o:Date.now()):n.angularVelocity!=null&&e(this,Ji).call(this,n.angularVelocity,(r=n.timestamp)!=null?r:Date.now())},"#handleAbsoluteUpdate"));u(this,ki,l((t,n)=>{e(this,Z).updateCompass(t,n);let o=e(this,Z).getHeading();o!=null&&e(this,ui).call(this,o,n)},"#handleCompassUpdate"));u(this,Ji,l((t,n)=>{e(this,Z).updateGyro(t,n);let o=e(this,Z).getHeading();o!=null&&(e(this,B)!=null&&Math.abs(o-e(this,B))<.5||e(this,ui).call(this,o,n))},"#handleGyroUpdate"));u(this,ui,l((t,n)=>{s(this,B,t),this.publish("heading-update",{heading:t}),e(this,q).isInitialized()?g(this,I,ni).call(this,n):e(this,z)!=null&&this.publish("fused-position",{position:wt(x({},e(this,z)),{heading:t,timestamp:n})})},"#emitFusedHeading"));u(this,di,l(({sensorId:t,update:n})=>{let o=n.timestamp,r=yt(e(this,A),e(this,X),o,g(this,I,Ye).call(this));if(p.log("PDR received: dx=".concat(n.dx.toFixed(3),"m, dy=").concat(n.dy.toFixed(3),"m, anchorState=").concat(r)),r==="none"){p.warn('Relative update from sensor "'.concat(t,'" ignored: no anchor set. Set an anchor first via VPS/AI Localizer.'));return}e(this,V).dx+=n.dx,e(this,V).dy+=n.dy;let d=$i(n.confidence,.5);e(this,q).updateOdometry(n.dx,n.dy,d,o),n.heading!=null&&s(this,B,n.heading),_t(this,oi)._++,p.log("PDR #".concat(e(this,oi)," ACCEPTED: total dx=").concat(e(this,V).dx.toFixed(2),"m, dy=").concat(e(this,V).dy.toFixed(2),"m")),p.log('Relative update from "'.concat(t,'": dx=').concat(n.dx.toFixed(2),"m, dy=").concat(n.dy.toFixed(2),"m. ")+"Total displacement: dx=".concat(e(this,V).dx.toFixed(2),"m, dy=").concat(e(this,V).dy.toFixed(2),"m")),g(this,I,ni).call(this,o)},"#handleRelativeUpdate"));u(this,qi,l((t,n)=>{var c,m,b,y,v,O,W;let o=(c=n.timestamp)!=null?c:Date.now();n.heading!=null&&s(this,Qe,n.heading),n.floorLevel!=null&&s(this,et,n.floorLevel),n.accuracy!=null&&s(this,ke,n.accuracy);let r=yt(e(this,A),e(this,X),o,g(this,I,Ye).call(this));if(r==="anchor-only"){p.log("GPS update rejected during anchor-only period");return}if(n.heading!=null&&((m=n.speed)!=null?m:0)>=Ur){e(this,Z).correctWithGps(n.heading,(b=n.speed)!=null?b:0,(y=n.confidence)!=null?y:.15);let _e=e(this,Z).getHeading();_e!=null&&s(this,B,_e)}if(r==="none"){g(this,I,Ko).call(this,t,n,o);return}let d=$i((v=n.confidence)!=null?v:.5,(O=n.accuracy)!=null?O:10),h={sensorId:t,weight:(W=n.confidence)!=null?W:.5,position:n};if(e(this,q).updatePosition(n.latitude,n.longitude,d,o),g(this,I,ni).call(this,o),e(this,z)!=null){let _e=e(this,z).contributions.findIndex(Si=>Si.sensorId===t);_e>=0?e(this,z).contributions[_e]=h:e(this,z).contributions.push(h)}},"#handlePositionUpdate"));s(this,J,t),s(this,be,x(x({},Ho),n)),s(this,q,new Ui({halfLifeMs:e(this,be).halfLifeMs})),s(this,Z,new Ni),e(this,J).on("absolute-update",e(this,li)),e(this,J).on("relative-update",e(this,di)),e(this,J).on("anchor-set",e(this,si)),e(this,J).on("anchor-clear",e(this,ai)),e(this,J).on("error",e(this,ri))}get config(){return x({},e(this,be))}getAnchorState(t){return yt(e(this,A),e(this,X),t!=null?t:Date.now(),g(this,I,Ye).call(this))}get anchor(){if(!(e(this,A)==null||yt(e(this,A),e(this,X),Date.now(),g(this,I,Ye).call(this))==="none"))return x({},e(this,A))}get displacement(){return x({},e(this,V))}setAnchor(t,n){var d;let o=Date.now();g(this,I,Hi).call(this),s(this,A,t),s(this,X,o),(n==null?void 0:n.anchorOnlyPeriodMs)!=null?s(this,ge,{anchorOnlyPeriodMs:n.anchorOnlyPeriodMs}):s(this,ge,void 0),s(this,V,{dx:0,dy:0}),s(this,z,void 0),e(this,q).reset();let r=$i((d=t.confidence)!=null?d:1,1);e(this,q).updatePosition(t.latitude,t.longitude,r,o),p.log('Anchor set from sensor "'.concat(t.sensorId,'" at [').concat(t.latitude,", ").concat(t.longitude,"]")),p.log("ANCHOR SET from ".concat(t.sensorId,", anchorOnlyPeriodMs=").concat(g(this,I,Ye).call(this).anchorOnlyPeriodMs)),this.publish("anchor-set",{anchor:x({},t)}),g(this,I,ni).call(this,o),t.ttl!==1/0&&s(this,Ve,setTimeout(()=>{g(this,I,zo).call(this)},t.ttl))}clearAnchor(){g(this,I,Hi).call(this),s(this,A,void 0),s(this,X,void 0),s(this,ge,void 0),s(this,V,{dx:0,dy:0}),p.log("Anchor cleared")}resetEKF(){e(this,q).reset()}resetHeadingFilter(){e(this,Z).reset(),s(this,B,void 0)}get headingFilter(){return e(this,Z)}get ekf(){return e(this,q)}getLastPosition(){return e(this,z)}destroy(){e(this,J).off("absolute-update",e(this,li)),e(this,J).off("relative-update",e(this,di)),e(this,J).off("anchor-set",e(this,si)),e(this,J).off("anchor-clear",e(this,ai)),e(this,J).off("error",e(this,ri)),g(this,I,Hi).call(this),e(this,q).reset(),e(this,Z).reset(),s(this,A,void 0),s(this,X,void 0),s(this,ge,void 0),s(this,V,{dx:0,dy:0}),s(this,B,void 0),s(this,z,void 0),s(this,Qe,void 0),s(this,et,void 0),s(this,ke,void 0),super.destroy()}};J=new WeakMap,be=new WeakMap,q=new WeakMap,Z=new WeakMap,B=new WeakMap,z=new WeakMap,oi=new WeakMap,A=new WeakMap,X=new WeakMap,Ve=new WeakMap,V=new WeakMap,ge=new WeakMap,Qe=new WeakMap,et=new WeakMap,ke=new WeakMap,ri=new WeakMap,si=new WeakMap,ai=new WeakMap,I=new WeakSet,Ye=l(function(){return e(this,ge)?x(x({},e(this,be)),e(this,ge)):e(this,be)},"#getEffectiveConfig"),Hi=l(function(){e(this,Ve)!=null&&(clearTimeout(e(this,Ve)),s(this,Ve,void 0))},"#clearAnchorTimer"),zo=l(function(){if(e(this,A)==null)return;let t=x({},e(this,A));s(this,A,void 0),s(this,X,void 0),s(this,Ve,void 0),s(this,ge,void 0),s(this,V,{dx:0,dy:0}),p.log('Anchor from sensor "'.concat(t.sensorId,'" expired after ').concat(t.ttl,"ms")),this.publish("anchor-expired",{anchor:t})},"#expireAnchor"),Dt=new WeakMap,ni=l(function(t){var v,O,W,_e,Si,Ln,Cn;_t(this,Dt)._++;let n=e(this,q).getPosition();if(n==null){p.warn("emitFusedPosition #".concat(e(this,Dt)," FAILED: EKF position is null"));return}let o=yt(e(this,A),e(this,X),t,g(this,I,Ye).call(this)),r=o!=="none",d=e(this,q).getUncertainty(),h=Math.max(.1,Math.min(1,1/(1+d*1e9))),c=(W=(v=e(this,B))!=null?v:e(this,Qe))!=null?W:(O=e(this,A))==null?void 0:O.heading,m=(Si=(_e=e(this,A))==null?void 0:_e.floorLevel)!=null?Si:e(this,et),b;e(this,ke)!=null?b=e(this,ke):r&&e(this,A)!=null?b=3:b=Math.min(50,Math.max(1,Math.sqrt(d)*1e5));let y={latitude:n.latitude,longitude:n.longitude,accuracy:b,heading:c,floorLevel:m,timestamp:t,confidence:h,sensorId:"fusion",isCalibrated:r,displacement:r?x({},e(this,V)):void 0,contributions:[]};if(e(this,A)!=null&&r){let jo=o==="transition"?$o(e(this,X),t,e(this,be),e(this,be).halfLifeMs):1;y.contributions.push({sensorId:e(this,A).sensorId,weight:jo,position:{latitude:e(this,A).latitude,longitude:e(this,A).longitude,heading:e(this,A).heading,floorLevel:e(this,A).floorLevel,timestamp:e(this,A).timestamp,confidence:(Ln=e(this,A).confidence)!=null?Ln:1}})}e(this,B)!=null&&e(this,B)!==((Cn=e(this,A))==null?void 0:Cn.heading)&&y.contributions.push({sensorId:"deviceorientation",weight:0,position:{heading:e(this,B),timestamp:t,confidence:1}}),s(this,z,y),p.log("EMIT fused-position #".concat(e(this,Dt),": ").concat(y.latitude.toFixed(6),", ").concat(y.longitude.toFixed(6))),this.publish("fused-position",{position:y})},"#emitFusedPosition"),li=new WeakMap,ki=new WeakMap,Ji=new WeakMap,ui=new WeakMap,di=new WeakMap,Ko=l(function(t,n,o){var m,b,y,v,O;let r=(m=e(this,B))!=null?m:e(this,Qe),d=(y=(b=n.accuracy)!=null?b:e(this,ke))!=null?y:10,h=[{sensorId:t,weight:(v=n.confidence)!=null?v:.5,position:n}];e(this,B)!=null&&h.push({sensorId:"deviceorientation",weight:0,position:{heading:e(this,B),timestamp:o,confidence:1}});let c={latitude:n.latitude,longitude:n.longitude,accuracy:d,heading:r,floorLevel:e(this,et),timestamp:o,confidence:(O=n.confidence)!=null?O:.5,sensorId:"fusion",isCalibrated:!1,contributions:h};s(this,z,c),p.log("EMIT direct-position: ".concat(c.latitude.toFixed(6),", ").concat(c.longitude.toFixed(6))),this.publish("fused-position",{position:c})},"#emitDirectPosition"),qi=new WeakMap,l(On,"FusionEngine");var Vi=On;var K,ye,Ae,R,he,U,ce,tt,$,L,Te,w,we,_,xt,Mt,At,hi,ci,mi,fi,pi,it,zi,Ki,Wi,ji,Zi,bi,Xi,Yi,gi,yi,Ti,Pi,Rn=class Rn{constructor(i){u(this,K,new k);u(this,ye);u(this,Ae);u(this,R);u(this,he);u(this,U);u(this,ce);u(this,tt);u(this,$);u(this,L);u(this,Te);u(this,w);u(this,we);u(this,_,io);u(this,xt,new Map);u(this,Mt);u(this,At);T(this,"enable",l(i=>{s(this,_,gn(e(this,_),i)),e(this,R).setDebug(e(this,_).debug),this.isEnabled||(e(this,L).on("fused-position",e(this,hi)),e(this,L).on("heading-update",e(this,ci)),e(this,L).on("error",e(this,mi)),e(this,L).on("anchor-set",e(this,fi)),e(this,L).on("anchor-expired",e(this,pi))),e(this,R).transitionTo("enable"),this.watchDevicePosition(e(this,_).watchDevicePosition),e(this,_).initialState==="inactive"&&e(this,R).transitionTo("initialize")},"enable"));T(this,"disable",l(()=>{e(this,L).off("fused-position",e(this,hi)),e(this,L).off("heading-update",e(this,ci)),e(this,L).off("error",e(this,mi)),e(this,L).off("anchor-set",e(this,fi)),e(this,L).off("anchor-expired",e(this,pi)),e(this,L).clearAnchor(),e(this,U).remove(),e(this,R).clearTimer(),e(this,he).isFollowing&&e(this,he).cancel(),this.watchDevicePosition(!1),this.watchDeviceOrientation(!1),s(this,w,void 0),s(this,Te,void 0),e(this,xt).clear(),e(this,R).transitionTo("disable")},"disable"));T(this,"on",l((i,t)=>e(this,K).on(i,t),"on"));T(this,"off",l((i,t)=>{e(this,K).off(i,t)},"off"));T(this,"updateState",l(i=>{let t=e(this,_).watchDevicePosition;s(this,_,gn(e(this,_),i)),i.debug!=null&&e(this,R).setDebug(i.debug),e(this,U).update({status:this.status},{animate:!1}),i.watchDevicePosition!=null&&i.watchDevicePosition!==t&&this.watchDevicePosition(i.watchDevicePosition),i.timeout!=null&&this.status==="active"&&e(this,R).resetTimer(e(this,_).timeout)},"updateState"));T(this,"watchDevicePosition",l(i=>{s(this,ce,void 0);let t=e(this,$).get("geolocation");if(!t){p.warn("Geolocation sensor unavailable. watchDevicePosition requires a browser environment.");return}if(e(this,At)!=null&&(navigator.geolocation.clearWatch(e(this,At)),s(this,At,void 0)),!i){t.disable(),e(this,L).resetEKF(),e(this,L).resetHeadingFilter();return}if(!this.isEnabled){p.warn("BlueDot must be enabled before watching browser position.");return}t.enable()},"watchDevicePosition"));T(this,"watchDeviceOrientation",l(async i=>{s(this,tt,void 0);let t=e(this,$).get("deviceorientation");if(!t){p.warn("Device orientation sensor unavailable. watchDeviceOrientation requires a browser environment.");return}i?await t.enable()!=="granted"&&p.error('Device orientation permission denied. "deviceorientation" event must be enabled in response to a transient activation. https://www.w3.org/TR/orientation-event/#dom-deviceorientationevent-requestpermission'):t.disable()},"watchDeviceOrientation"));u(this,hi,l(async i=>{var d,h,c;let{position:t}=i;if(!this.isEnabled)return;let n=await e(this,bi).call(this,t.floorLevel,t.latitude,t.longitude);if(!this.isEnabled)return;let o={latitude:t.latitude,longitude:t.longitude,accuracy:(d=t.accuracy)!=null?d:void 0,heading:(h=t.heading)!=null?h:void 0,floor:n,timestamp:t.timestamp},r=o;if(e(this,Mt)){let m=e(this,Yi).call(this,o);if(m==null){e(this,_).debug&&p.log("Position update discarded by position processor");return}r=m}yn(r.timestamp,(c=e(this,w))==null?void 0:c.timestamp,e(this,_))||(s(this,ce,r),e(this,it).call(this,r))},"#handleFusedPosition"));u(this,ci,l(i=>{let{heading:t}=i;s(this,tt,t),this.status==="active"&&e(this,Wi).call(this,t)},"#handleHeadingUpdate"));u(this,mi,l(i=>{let{error:t}=i;if(e(this,R).transitionTo("error"),t!=null&&typeof t=="object"&&"code"in t&&typeof t.code=="number"){let n=t;n.code===1&&e(this,gi).call(this).sendWatchPositionDenied(),e(this,K).publish("error",n)}},"#handleGeolocationError"));u(this,fi,l(i=>{e(this,K).publish("anchor-set",i)},"#handleAnchorSet"));u(this,pi,l(i=>{e(this,K).publish("anchor-expired",i)},"#handleAnchorExpired"));u(this,it,l((i,t)=>{let n;try{e(this,tt)!=null&&(i=Object.assign({},i,{heading:e(this,tt)})),n=$n.parse(co(i,e(this,Te)))}catch(o){e(this,R).transitionTo("error"),p.error("Position parse failed",o instanceof $r.ZodError?o.message:String(o));return}if(e(this,_).debug&&p.log("Parsed position",n),e(this,_).preventOutOfBounds){let{radius:o,center:r}=e(this,ye).Camera.bounds;if(o!=null&&isFinite(o)&&r!=null&&!mo({longitude:n.longitude,latitude:n.latitude},{radius:o,center:r})){p.warn("Position [".concat(n.longitude,", ").concat(n.latitude,"] is outside map bounds. Position update will be discarded."));return}}if(!e(this,Xi).call(this,n.accuracy)){p.log("Dropping position update with accuracy ".concat(n.accuracy,"m (exceeds threshold ").concat(e(this,_).accuracyThreshold,"m)"));return}if(t!=null&&t.silent?e(this,U).update({status:this.status},{animate:!1}):e(this,R).transitionTo("position-update"),!e(this,R).shouldUpdateGeometry()){p.warn("Cannot update position because BlueDot state is '".concat(this.status,"'. BlueDot must be enabled first."));return}e(this,zi).call(this,n,t)},"#setPosition"));u(this,zi,l((i,t)=>{var h,c,m;if(yn(i.timestamp,(h=e(this,w))==null?void 0:h.timestamp,e(this,_)))return;s(this,w,i),t!=null&&t.silent||(e(this,R).resetTimer(e(this,_).timeout),e(this,gi).call(this).updateState({userPosition:{bluedotTimestamp:Date.now(),latitude:i.latitude,longitude:i.longitude,floorLevel:(c=i.floor)==null?void 0:c.elevation,accuracy:i.accuracy}})),this.dotModel||e(this,U).add(i),e(this,U).updateFloor(i.floor);let n=new In({latitude:i.latitude,longitude:i.longitude}),o=this.status==="active"?i.accuracy:void 0,r=e(this,Ki).call(this)&&(m=i.heading)!=null?m:void 0,d=(t==null?void 0:t.animate)!==!1;if(e(this,U).update({position:n,accuracy:o,heading:r,status:this.status},{animate:d}),!(t!=null&&t.silent)){let b={floor:this.floor,heading:this.heading,accuracy:this.accuracy,coordinate:this.coordinate};e(this,K).publish("position-update",b),e(this,he).handlePositionUpdate(b)}},"#applyPosition"));u(this,Ki,l(()=>this.heading==null?!1:this.status==="active"?!0:e(this,_).heading.displayWhenInactive,"#shouldShowHeading"));u(this,Wi,l(i=>{if(!e(this,R).shouldUpdateGeometry()){p.warn("Cannot update orientation because BlueDot state is '".concat(this.status,"'. BlueDot must be enabled first."));return}if(e(this,w)==null){e(this,_).debug&&p.log("Cannot update orientation before a valid position has been applied.");return}s(this,w,wt(x({},e(this,w)),{heading:i})),e(this,U).update({heading:i},{animate:!0}),e(this,K).publish("device-orientation-update",{heading:i})},"#setOrientation"));T(this,"update",l((i,t)=>{if(!this.isEnabled)return;if(i==null){s(this,Te,void 0),e(this,ce)!=null&&e(this,it).call(this,e(this,ce),t);return}if("coords"in i){e(this,ji).call(this,i,t);return}let h=i,{timestamp:n}=h,o=Qi(h,["timestamp"]),r=Object.assign({},e(this,Te),o);if("floorOrFloorId"in i){let{floorOrFloorId:c}=i;c==null?r.floor=void 0:c==="device"?r.floor="device":typeof c=="string"?r.floor=e(this,Zi).call(this,c):r.floor=c}s(this,Te,r),(r.latitude!=null&&r.longitude!=null||e(this,ce)!=null)&&e(this,it).call(this,e(this,ce),t)},"update"));u(this,ji,l(async(i,t)=>{let n=await e(this,bi).call(this,i.coords.floorLevel,i.coords.latitude,i.coords.longitude);if(!this.isEnabled)return;let c=i,{timestamp:o}=c,r=Qi(c,["timestamp"]),d=Object.assign({},e(this,Te),wt(x({},r.coords),{floor:n}));s(this,Te,d),(d.latitude!=null&&d.longitude!=null||e(this,ce)!=null)&&e(this,it).call(this,e(this,ce),t)},"#processAsyncGeolocation"));u(this,Zi,l(i=>e(this,Ae).getById("floor",i),"#getFloorByFloorId"));u(this,bi,l(async(i,t,n)=>{if(i==null)return;let o=e(this,xt).get(i);if(o==null&&(o=e(this,Ae).getByType("floor").filter(r=>r.elevation===i),e(this,xt).set(i,o)),o.length===0){p.warn("Received elevation level ".concat(i," but no floors could be found at that elevation."));return}if(o.length===1)return o[0];if(t!=null&&n!=null){let r=new In({latitude:t,longitude:n,floorId:o[0].id}),d=await e(this,Ae).Query.nearest(r,e(this,Ae).getByType("node"),{limit:"same-elevation",mode:"absolute-distance",maxResults:1});if(d&&d.length>0&&d[0].feature!=null&&d[0].feature.floor!=null)return d[0].feature.floor}return e(this,ye).currentFloorStack.floors.find(r=>r.elevation===i)},"#getFloorByFloorLevel"));T(this,"follow",l((i,t)=>{e(this,he).start(i,t)},"follow"));u(this,Xi,l(i=>i==null?this.status!=="disabled":i<=e(this,_).accuracyThreshold,"#isAccurateEnough"));u(this,Yi,l(i=>{var n,o,r,d,h,c;let t={latitude:(n=e(this,w))==null?void 0:n.latitude,longitude:(o=e(this,w))==null?void 0:o.longitude,accuracy:(r=e(this,w))==null?void 0:r.accuracy,heading:(d=e(this,w))==null?void 0:d.heading,floor:(h=e(this,w))==null?void 0:h.floor,timestamp:(c=e(this,w))==null?void 0:c.timestamp};try{return e(this,Mt).call(this,t,i)}catch(m){return p.error("Position processor callback threw an error",m instanceof Error?m.message:String(m)),i}},"#processIncomingPosition"));T(this,"destroy",l(()=>{this.disable(),e(this,L).destroy(),e(this,$).destroy(),e(this,U).destroy(),e(this,R).destroy(),e(this,he).destroy(),e(this,ye).off("click",e(this,Ti)),e(this,ye).off("hover",e(this,Pi)),e(this,K).destroy()},"destroy"));u(this,gi,l(()=>e(this,_).preventOutOfBounds?e(this,Ae).internal.Analytics:{sendWatchPositionDenied:l(()=>{},"sendWatchPositionDenied"),updateState:l(()=>{},"updateState")},"#getAnalyticsIfEnabled"));u(this,yi,l(i=>t=>{t.models==null||t.models.length===0||this.dotModel==null||t.models.find(o=>{var r;return o.id===((r=this.dotModel)==null?void 0:r.id)})==null||e(this,K).publish(i,{coordinate:t.coordinate})},"#handleClickOrHover"));u(this,Ti,e(this,yi).call(this,"click"));u(this,Pi,e(this,yi).call(this,"hover"));s(this,ye,i),s(this,Ae,i.getMapData()),s(this,R,new Ci),s(this,he,new Fi(i)),s(this,U,new Li(i,this)),s(this,$,new Ii),s(this,L,new Vi(e(this,$))),e(this,R).on("status-change",t=>{e(this,U).update({status:t.status},{animate:!1}),e(this,K).publish("status-change",t)}),e(this,he).on("follow-change",t=>{e(this,K).publish("follow-change",t)}),e(this,ye).on("click",e(this,Ti)),e(this,ye).on("hover",e(this,Pi))}get Sensors(){return e(this,$)}get Fusion(){return e(this,L)}get anchor(){return e(this,L).anchor}get displacement(){return e(this,L).displacement}get dotModel(){return e(this,U).dot}get accuracyRingModel(){return e(this,U).accuracyRing}get headingConeModel(){return e(this,U).headingCone}get isEnabled(){return e(this,R).isEnabled}get status(){return e(this,R).current}get isFollowing(){return e(this,he).isFollowing}get heading(){var i;return(i=e(this,w))==null?void 0:i.heading}get accuracy(){var i;return(i=e(this,w))==null?void 0:i.accuracy}get coordinate(){var i,t;if(e(this,w)!=null)return(e(this,we)==null||((i=this.floor)==null?void 0:i.id)!==e(this,we).floorId||e(this,w).latitude!==e(this,we).latitude||e(this,w).longitude!==e(this,we).longitude)&&s(this,we,new In({latitude:e(this,w).latitude,longitude:e(this,w).longitude,floorId:(t=this.floor)==null?void 0:t.id})),e(this,we)}getState(){return x({},e(this,_))}get floor(){var i;return(i=e(this,w))==null?void 0:i.floor}forcePosition(i,t=Vo){let n=e(this,$).get("manual");if(n==null){p.warn("Manual sensor not available");return}this.isEnabled||this.enable(),n.isEnabled||n.enable(),n.forcePosition({latitude:i.latitude,longitude:i.longitude,heading:i.heading,floorLevel:i.floorLevel,ttl:t})}reportPosition(i){let t=e(this,$).get("manual");if(t==null){p.warn("Manual sensor not available");return}this.isEnabled||this.enable(),t.isEnabled||t.enable(),t.reportPosition(i)}async __enableSensor(i){let t=e(this,$).get(i);return t==null?(p.warn("Sensor '".concat(i,"' not found")),"unavailable"):t.enable()}__disableSensor(i){let t=e(this,$).get(i);if(t==null){p.warn("Sensor '".concat(i,"' not found"));return}t.disable()}async __checkSensorPermission(i){let t=e(this,$).get(i);return t==null?(p.warn("Sensor '".concat(i,"' not found")),"unavailable"):t.checkPermission()}async __requestSensorPermission(i){let t=e(this,$).get(i);return t==null?(p.warn("Sensor '".concat(i,"' not found")),"unavailable"):t.requestPermission()}__isSensorEnabled(i){let t=e(this,$).get(i);return t==null?(p.warn("Sensor '".concat(i,"' not found")),!1):t.isEnabled}setPositionProcessor(i){s(this,Mt,i)}};K=new WeakMap,ye=new WeakMap,Ae=new WeakMap,R=new WeakMap,he=new WeakMap,U=new WeakMap,ce=new WeakMap,tt=new WeakMap,$=new WeakMap,L=new WeakMap,Te=new WeakMap,w=new WeakMap,we=new WeakMap,_=new WeakMap,xt=new WeakMap,Mt=new WeakMap,At=new WeakMap,hi=new WeakMap,ci=new WeakMap,mi=new WeakMap,fi=new WeakMap,pi=new WeakMap,it=new WeakMap,zi=new WeakMap,Ki=new WeakMap,Wi=new WeakMap,ji=new WeakMap,Zi=new WeakMap,bi=new WeakMap,Xi=new WeakMap,Yi=new WeakMap,gi=new WeakMap,yi=new WeakMap,Ti=new WeakMap,Pi=new WeakMap,l(Rn,"BlueDot");var Wo=Rn;export{me as a,vi as b,Ii as c,Wo as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var d=Object.create;var E=Object.defineProperty,R=Object.defineProperties,w=Object.getOwnPropertyDescriptor,D=Object.getOwnPropertyDescriptors,N=Object.getOwnPropertyNames,L=Object.getOwnPropertySymbols,m=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable;var u=e=>{throw TypeError(e)};var a=(e,o,t)=>o in e?E(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t,V=(e,o)=>{for(var t in o||(o={}))c.call(o,t)&&a(e,t,o[t]);if(L)for(var t of L(o))l.call(o,t)&&a(e,t,o[t]);return e},h=(e,o)=>R(e,D(o)),g=(e,o)=>E(e,"name",{value:o,configurable:!0});var K=(e,o)=>{var t={};for(var r in e)c.call(e,r)&&o.indexOf(r)<0&&(t[r]=e[r]);if(e!=null&&L)for(var r of L(e))o.indexOf(r)<0&&l.call(e,r)&&(t[r]=e[r]);return t};var G=(e,o)=>()=>(e&&(o=e(e=0)),o);var T=(e,o)=>()=>(o||e((o={exports:{}}).exports,o),o.exports);var x=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of N(o))!c.call(e,n)&&n!==t&&E(e,n,{get:()=>o[n],enumerable:!(r=w(o,n))||r.enumerable});return e};var k=(e,o,t)=>(t=e!=null?d(m(e)):{},x(o||!e||!e.__esModule?E(t,"default",{value:e,enumerable:!0}):t,e));var A=(e,o,t)=>a(e,typeof o!="symbol"?o+"":o,t),p=(e,o,t)=>o.has(e)||u("Cannot "+t);var y=(e,o,t)=>(p(e,o,"read from private field"),t?t.call(e):o.get(e)),B=(e,o,t)=>o.has(e)?u("Cannot add the same private member more than once"):o instanceof WeakSet?o.add(e):o.set(e,t),$=(e,o,t,r)=>(p(e,o,"write to private field"),r?r.call(e,t):o.set(e,t),t),M=(e,o,t)=>(p(e,o,"access private method"),t);var W=(e,o,t,r)=>({set _(n){$(e,o,n,t)},get _(){return y(e,o,r)}});var _,i=G(()=>{_={env:{NODE_ENV:"production",npm_package_version:"6.
|
|
1
|
+
var d=Object.create;var E=Object.defineProperty,R=Object.defineProperties,w=Object.getOwnPropertyDescriptor,D=Object.getOwnPropertyDescriptors,N=Object.getOwnPropertyNames,L=Object.getOwnPropertySymbols,m=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable;var u=e=>{throw TypeError(e)};var a=(e,o,t)=>o in e?E(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t,V=(e,o)=>{for(var t in o||(o={}))c.call(o,t)&&a(e,t,o[t]);if(L)for(var t of L(o))l.call(o,t)&&a(e,t,o[t]);return e},h=(e,o)=>R(e,D(o)),g=(e,o)=>E(e,"name",{value:o,configurable:!0});var K=(e,o)=>{var t={};for(var r in e)c.call(e,r)&&o.indexOf(r)<0&&(t[r]=e[r]);if(e!=null&&L)for(var r of L(e))o.indexOf(r)<0&&l.call(e,r)&&(t[r]=e[r]);return t};var G=(e,o)=>()=>(e&&(o=e(e=0)),o);var T=(e,o)=>()=>(o||e((o={exports:{}}).exports,o),o.exports);var x=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of N(o))!c.call(e,n)&&n!==t&&E(e,n,{get:()=>o[n],enumerable:!(r=w(o,n))||r.enumerable});return e};var k=(e,o,t)=>(t=e!=null?d(m(e)):{},x(o||!e||!e.__esModule?E(t,"default",{value:e,enumerable:!0}):t,e));var A=(e,o,t)=>a(e,typeof o!="symbol"?o+"":o,t),p=(e,o,t)=>o.has(e)||u("Cannot "+t);var y=(e,o,t)=>(p(e,o,"read from private field"),t?t.call(e):o.get(e)),B=(e,o,t)=>o.has(e)?u("Cannot add the same private member more than once"):o instanceof WeakSet?o.add(e):o.set(e,t),$=(e,o,t,r)=>(p(e,o,"write to private field"),r?r.call(e,t):o.set(e,t),t),M=(e,o,t)=>(p(e,o,"access private method"),t);var W=(e,o,t,r)=>({set _(n){$(e,o,n,t)},get _(){return y(e,o,r)}});var _,i=G(()=>{_={env:{NODE_ENV:"production",npm_package_version:"6.18.0-beta.0"}}});i();i();var I="[MappedinJS]";function f(e="",{prefix:o=I}={}){let t="".concat(o).concat(e?"-".concat(e):""),r=g((n,S)=>{if(typeof window<"u"&&window.rnDebug){let O=S.map(s=>s instanceof Error&&s.stack?"".concat(s.message,"\n").concat(s.stack):s);window.rnDebug("".concat(e," ").concat(n,": ").concat(O.join(" ")))}},"rnDebug");return{logState:_.env.NODE_ENV==="test"?3:0,log(...n){this.logState<=0&&(console.log(t,...n),r("log",n))},warn(...n){this.logState<=1&&(console.warn(t,...n),r("warn",n))},error(...n){this.logState<=2&&(console.error(t,...n),r("error",n))},assert(...n){console.assert(...n)},time(n){console.time(n)},timeEnd(n){console.timeEnd(n)},setLevel(n){0<=n&&n<=3&&(this.logState=n)}}}g(f,"createLogger");var J=f();var C=f("",{prefix:"[BlueDot]"});export{V as a,h as b,g as c,K as d,T as e,k as f,A as g,y as h,B as i,$ as j,M as k,W as l,i as m,C as n};
|
package/lib/esm/debug/index.d.ts
CHANGED
|
@@ -1290,6 +1290,12 @@ type BlueDotEventPayloads = {
|
|
|
1290
1290
|
};
|
|
1291
1291
|
};
|
|
1292
1292
|
type BlueDotState = {
|
|
1293
|
+
/**
|
|
1294
|
+
* Whether the BlueDot core element is visible. When false, the dot is hidden but the accuracy ring
|
|
1295
|
+
* and heading cone may still render based on their own visibility settings.
|
|
1296
|
+
* @default true
|
|
1297
|
+
*/
|
|
1298
|
+
visible: boolean;
|
|
1293
1299
|
/**
|
|
1294
1300
|
* The radius of the BlueDot in pixels. The BlueDot will maintain this size clamped to a minimum of 0.35 metres.
|
|
1295
1301
|
* @default 10
|
|
@@ -1309,6 +1315,11 @@ type BlueDotState = {
|
|
|
1309
1315
|
* Options for the accuracy ring around the BlueDot.
|
|
1310
1316
|
*/
|
|
1311
1317
|
accuracyRing: {
|
|
1318
|
+
/**
|
|
1319
|
+
* Whether the accuracy ring is visible.
|
|
1320
|
+
* @default true
|
|
1321
|
+
*/
|
|
1322
|
+
visible: boolean;
|
|
1312
1323
|
/**
|
|
1313
1324
|
* The color of the accuracy ring.
|
|
1314
1325
|
* @default #2266ff
|
|
@@ -1324,6 +1335,11 @@ type BlueDotState = {
|
|
|
1324
1335
|
* Options for the heading directional indicator.
|
|
1325
1336
|
*/
|
|
1326
1337
|
heading: {
|
|
1338
|
+
/**
|
|
1339
|
+
* Whether the heading cone is visible.
|
|
1340
|
+
* @default true
|
|
1341
|
+
*/
|
|
1342
|
+
visible: boolean;
|
|
1327
1343
|
/**
|
|
1328
1344
|
* The color of the heading cone.
|
|
1329
1345
|
* @default #2266ff
|
|
@@ -1460,12 +1476,6 @@ declare class PubSub<EVENT_PAYLOAD, EVENT extends keyof EVENT_PAYLOAD = keyof EV
|
|
|
1460
1476
|
* AbortController for managing lifecycle and cleanup
|
|
1461
1477
|
*/
|
|
1462
1478
|
private _abortController;
|
|
1463
|
-
/**
|
|
1464
|
-
* @protected
|
|
1465
|
-
* @internal
|
|
1466
|
-
* Tracks all cleanup functions for subscriptions made via on()
|
|
1467
|
-
*/
|
|
1468
|
-
protected _cleanupFunctions: Array<() => void>;
|
|
1469
1479
|
/**
|
|
1470
1480
|
* Returns the AbortSignal for this PubSub instance.
|
|
1471
1481
|
* Use this signal with APIs that support cancellation (fetch, addEventListener, etc.)
|
|
@@ -2021,6 +2031,8 @@ interface HeadingFilterConfig {
|
|
|
2021
2031
|
magneticGatingEnabled: boolean;
|
|
2022
2032
|
/** Minimum heading delta to emit updates (degrees). */
|
|
2023
2033
|
deltaThreshold: number;
|
|
2034
|
+
/** Calibration offset applied to all compass readings (degrees). Set from VPS ground truth. */
|
|
2035
|
+
calibrationOffset: number;
|
|
2024
2036
|
}
|
|
2025
2037
|
/**
|
|
2026
2038
|
* Complementary filter for heading fusion.
|
|
@@ -2073,6 +2085,13 @@ declare class HeadingFusionFilter implements HeadingFusionAlgorithm {
|
|
|
2073
2085
|
* @param confidence GPS confidence (0-1), affects how much GPS heading influences result
|
|
2074
2086
|
*/
|
|
2075
2087
|
correctWithGps(gpsHeading: number, speed: number, confidence?: number): void;
|
|
2088
|
+
/**
|
|
2089
|
+
* Set a calibration offset derived from a known ground-truth heading (e.g. VPS).
|
|
2090
|
+
* The offset is applied to all subsequent compass readings to correct systematic
|
|
2091
|
+
* magnetic bias at the calibration location.
|
|
2092
|
+
* @param offsetDegrees Offset in degrees (groundTruthHeading - deviceCompassHeading)
|
|
2093
|
+
*/
|
|
2094
|
+
setCalibrationOffset(offsetDegrees: number): void;
|
|
2076
2095
|
/**
|
|
2077
2096
|
* Configure the filter parameters at runtime.
|
|
2078
2097
|
* @param config Partial configuration to apply
|
package/lib/esm/debug/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as S,c as d,g as L,h as e,i as h,j as u,k as s,m as D,n as w}from"../chunk-UZOPCEME.js";D();D();D();function Ke(l){var r,m;let t={};for(let[p,c]of l.Sensors.getAll())t[p]={enabled:c.isEnabled};let n={timestamp:Date.now(),state:l.getState(),position:l.coordinate?{lat:l.coordinate.latitude,lon:l.coordinate.longitude,floor:(r=l.floor)==null?void 0:r.name}:null,accuracy:l.accuracy,heading:l.heading,sensors:t,anchor:l.anchor,displacement:l.displacement},i=new Blob([JSON.stringify(n,null,2)],{type:"application/json"}),a=new File([i],"bluedot-debug-".concat(Date.now(),".json"),{type:"application/json"});(m=navigator.canShare)!=null&&m.call(navigator,{files:[a]})?navigator.share({files:[a]}).catch(()=>{Je(i,a.name)}):Je(i,a.name)}d(Ke,"exportDebugData");function Je(l,t){let n=URL.createObjectURL(l),i=document.createElement("a");i.href=n,i.download=t,i.click(),URL.revokeObjectURL(n)}d(Je,"downloadFile");D();var V={heading:{headingResponsiveness:40,compassNoiseTolerance:30,headingSnapThreshold:10,magneticDisturbanceGating:!0,headingChangeThreshold:2},motion:{stepSensitivity:50,averageStepLength:.7,strideVariability:0,motionResponsiveness:50,pdrEnabled:!0}};function $e(l){return{complementaryAlpha:.99-l.headingResponsiveness/100*.79,gyroNoiseThreshold:.1+l.compassNoiseTolerance/100*4.9,maxHeadingError:l.headingSnapThreshold,magneticGatingEnabled:l.magneticDisturbanceGating,deltaThreshold:l.headingChangeThreshold}}d($e,"headingConfigToFilterParams");function Ae(l){return{stepDetectionThreshold:2-l.stepSensitivity/100*1.5,stepLength:l.averageStepLength,strideAdaptation:l.strideVariability/100*.3,motionThreshold:1-l.motionResponsiveness/100*.8,pdrEnabled:l.pdrEnabled}}d(Ae,"motionConfigToSensorParams");function I(l,t,n){return Math.min(Math.max(l,t),n)}d(I,"clamp");function rt(l){var n,i,a,r,m,p,c,b,_,y;let t=S({},V);return l.heading&&(t.heading={headingResponsiveness:I((n=l.heading.headingResponsiveness)!=null?n:30,0,100),compassNoiseTolerance:I((i=l.heading.compassNoiseTolerance)!=null?i:50,0,100),headingSnapThreshold:I((a=l.heading.headingSnapThreshold)!=null?a:30,10,90),magneticDisturbanceGating:(r=l.heading.magneticDisturbanceGating)!=null?r:!0,headingChangeThreshold:I((m=l.heading.headingChangeThreshold)!=null?m:2,1,10)}),l.motion&&(t.motion={stepSensitivity:I((p=l.motion.stepSensitivity)!=null?p:50,0,100),averageStepLength:I((c=l.motion.averageStepLength)!=null?c:.7,.4,1.2),strideVariability:I((b=l.motion.strideVariability)!=null?b:0,0,100),motionResponsiveness:I((_=l.motion.motionResponsiveness)!=null?_:50,0,100),pdrEnabled:(y=l.motion.pdrEnabled)!=null?y:!0}),t}d(rt,"normalizeTuningConfig");var Qe=".bluedot-hud {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n pointer-events: none;\n}\n\n.bluedot-hud--expanded {\n top: 0;\n display: flex;\n flex-direction: column;\n}\n\n.bluedot-hud * {\n box-sizing: border-box;\n}\n\n/* Collapsed bar */\n.bluedot-hud__collapsed {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n background: rgba(0, 0, 0, 0.85);\n color: #fff;\n pointer-events: auto;\n cursor: pointer;\n min-height: 36px;\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n}\n\n.bluedot-hud__status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.bluedot-hud__status-dot--active {\n background: #4ade80;\n box-shadow: 0 0 4px #4ade80;\n}\n\n.bluedot-hud__status-dot--inactive {\n background: #9ca3af;\n}\n\n.bluedot-hud__status-dot--error {\n background: #f87171;\n box-shadow: 0 0 4px #f87171;\n}\n\n.bluedot-hud__status-text {\n font-weight: 600;\n font-size: 12px;\n}\n\n.bluedot-hud__coords {\n color: #94a3b8;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 10px;\n flex: 1;\n}\n\n.bluedot-hud__heading {\n color: #60a5fa;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 11px;\n font-weight: 600;\n}\n\n/* Expanded panel */\n.bluedot-hud__expanded {\n display: none;\n flex-direction: column;\n background: rgba(0, 0, 0, 0.92);\n color: #fff;\n pointer-events: auto;\n flex: 1;\n overflow: hidden;\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n}\n\n.bluedot-hud__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n cursor: pointer;\n min-height: 40px;\n}\n\n.bluedot-hud__title {\n font-weight: 600;\n font-size: 14px;\n}\n\n.bluedot-hud__header-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bluedot-hud__export-btn {\n background: #3b82f6;\n color: #fff;\n border: none;\n border-radius: 4px;\n padding: 6px 12px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.bluedot-hud__export-btn:active {\n background: #2563eb;\n}\n\n.bluedot-hud__collapse-icon {\n font-size: 12px;\n color: #94a3b8;\n}\n\n.bluedot-hud__content {\n padding: 4px 0;\n flex: 1;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.bluedot-hud__section {\n padding: 6px 12px;\n}\n\n.bluedot-hud__section:not(:last-child) {\n border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n}\n\n.bluedot-hud__section-title {\n font-weight: 600;\n font-size: 10px;\n color: #64748b;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n}\n\n.bluedot-hud__row {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 1px 0;\n margin-right: 12px;\n}\n\n.bluedot-hud__label {\n color: #94a3b8;\n font-size: 11px;\n}\n\n.bluedot-hud__value {\n color: #fff;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 11px;\n word-break: break-all;\n}\n\n.bluedot-hud__value--enabled {\n color: #4ade80;\n}\n\n.bluedot-hud__value--disabled {\n color: #6b7280;\n}\n\n.bluedot-hud__value--warning {\n color: #fbbf24;\n}\n\n.bluedot-hud__sensors {\n display: flex;\n flex-wrap: wrap;\n}\n\n/* Heading section with compass */\n.bluedot-hud__heading-content {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n}\n\n/* Compass */\n.bluedot-hud__compass {\n position: relative;\n width: 56px;\n height: 56px;\n flex-shrink: 0;\n}\n\n.bluedot-hud__compass-ring {\n position: absolute;\n inset: 0;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-radius: 50%;\n}\n\n.bluedot-hud__compass-dir {\n position: absolute;\n font-size: 8px;\n font-weight: 600;\n color: #94a3b8;\n}\n\n.bluedot-hud__compass-dir--n {\n top: 2px;\n left: 50%;\n transform: translateX(-50%);\n color: #f87171;\n}\n\n.bluedot-hud__compass-dir--e {\n right: 2px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n.bluedot-hud__compass-dir--s {\n bottom: 2px;\n left: 50%;\n transform: translateX(-50%);\n}\n\n.bluedot-hud__compass-dir--w {\n left: 2px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n.bluedot-hud__compass-needle {\n position: absolute;\n left: 50%;\n top: 50%;\n width: 3px;\n height: 20px;\n background: linear-gradient(to top, #3b82f6 0%, #60a5fa 100%);\n border-radius: 2px;\n transform-origin: bottom center;\n transform: translate(-50%, -100%) rotate(0deg);\n transition: transform 0.15s ease-out;\n}\n\n.bluedot-hud__compass-needle::before {\n content: '';\n position: absolute;\n top: -4px;\n left: 50%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-bottom: 6px solid #60a5fa;\n}\n\n.bluedot-hud__compass-center {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 6px;\n height: 6px;\n background: #fff;\n border-radius: 50%;\n border: 1px solid #3b82f6;\n}\n\n/* Heading comparison list */\n.bluedot-hud__headings {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.bluedot-hud__heading-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 2px 6px;\n background: rgba(255, 255, 255, 0.05);\n border-radius: 3px;\n font-size: 10px;\n}\n\n.bluedot-hud__heading-row--displayed {\n background: rgba(59, 130, 246, 0.2);\n border: 1px solid rgba(59, 130, 246, 0.3);\n}\n\n.bluedot-hud__heading-label {\n color: #94a3b8;\n font-size: 10px;\n}\n\n.bluedot-hud__heading-value {\n color: #fff;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 10px;\n}\n\n.bluedot-hud__heading-diff {\n color: #94a3b8;\n margin-left: 3px;\n font-size: 9px;\n}\n\n.bluedot-hud__heading-diff--warning {\n color: #fbbf24;\n}\n\n/* State modifiers */\n.bluedot-hud--collapsed .bluedot-hud__collapsed {\n display: flex;\n}\n\n.bluedot-hud--collapsed .bluedot-hud__expanded {\n display: none;\n}\n\n.bluedot-hud--expanded .bluedot-hud__collapsed {\n display: none;\n}\n\n.bluedot-hud--expanded .bluedot-hud__expanded {\n display: flex;\n}\n\n/* Tuning section */\n.bluedot-hud__tuning {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.bluedot-hud__tuning-group {\n background: rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n padding: 8px;\n}\n\n.bluedot-hud__tuning-group-title {\n color: #94a3b8;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n}\n\n.bluedot-hud__tuning-row {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin-bottom: 10px;\n}\n\n.bluedot-hud__tuning-row--toggle {\n flex-direction: row;\n justify-content: space-between;\n align-items: flex-start;\n gap: 8px;\n}\n\n.bluedot-hud__tuning-label-col {\n flex: 1;\n}\n\n.bluedot-hud__tuning-label {\n color: #e2e8f0;\n font-size: 12px;\n}\n\n.bluedot-hud__tuning-desc {\n color: #64748b;\n font-size: 10px;\n line-height: 1.3;\n margin-top: 1px;\n}\n\n.bluedot-hud__tuning-control {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.bluedot-hud__slider {\n flex: 1;\n height: 4px;\n background: #334155;\n border-radius: 2px;\n outline: none;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.bluedot-hud__slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 14px;\n height: 14px;\n background: #3b82f6;\n border-radius: 50%;\n cursor: pointer;\n}\n\n.bluedot-hud__slider::-moz-range-thumb {\n width: 14px;\n height: 14px;\n background: #3b82f6;\n border-radius: 50%;\n cursor: pointer;\n border: none;\n}\n\n.bluedot-hud__slider-value {\n color: #94a3b8;\n font-size: 11px;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n min-width: 40px;\n text-align: right;\n}\n\n.bluedot-hud__toggle {\n width: 36px;\n height: 20px;\n background: #334155;\n border-radius: 10px;\n position: relative;\n -webkit-appearance: none;\n appearance: none;\n outline: none;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n.bluedot-hud__toggle:checked {\n background: #3b82f6;\n}\n\n.bluedot-hud__toggle::before {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n background: #fff;\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.bluedot-hud__toggle:checked::before {\n transform: translateX(16px);\n}\n\n.bluedot-hud__reset-btn {\n background: #334155;\n color: #e2e8f0;\n border: none;\n border-radius: 4px;\n padding: 8px 12px;\n font-size: 12px;\n cursor: pointer;\n transition: background 0.2s;\n margin-top: 8px;\n}\n\n.bluedot-hud__reset-btn:hover {\n background: #475569;\n}\n\n/* Console section */\n.bluedot-hud__console-header {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 6px;\n}\n\n.bluedot-hud__console-clear {\n background: #334155;\n color: #94a3b8;\n border: none;\n border-radius: 3px;\n padding: 4px 8px;\n font-size: 10px;\n cursor: pointer;\n}\n\n.bluedot-hud__console-clear:active {\n background: #475569;\n}\n\n.bluedot-hud__console {\n background: rgba(0, 0, 0, 0.4);\n border-radius: 4px;\n padding: 6px;\n max-height: 200px;\n overflow-y: auto;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 10px;\n line-height: 1.4;\n -webkit-overflow-scrolling: touch;\n}\n\n.bluedot-hud__console-line {\n padding: 2px 0;\n word-break: break-word;\n color: #d1d5db;\n}\n\n.bluedot-hud__console-line--warn {\n color: #fbbf24;\n}\n\n.bluedot-hud__console-line--error {\n color: #f87171;\n}\n\n.bluedot-hud__console-time {\n color: #6b7280;\n margin-right: 6px;\n}\n";var Ze="bluedot-debug-hud-css",ht="bluedot-debug-hud",ct=200;function pt(l,t){let n=document.getElementById(t);if(n instanceof HTMLStyleElement){n.textContent=l;return}n=document.createElement("style"),n.id=t,n.textContent=l,document.head.appendChild(n)}d(pt,"injectCSS");function mt(l){let t=Math.floor((Date.now()-l)/1e3);if(t<60)return"".concat(t,"s ago");let n=Math.floor(t/60);return n<60?"".concat(n,"m ago"):"".concat(Math.floor(n/60),"h ago")}d(mt,"formatTimeAgo");function gt(l,t){let n=Math.max(0,Math.floor((l+t-Date.now())/1e3));return n<=0?"expired":n<60?"".concat(n,"s"):"".concat(Math.floor(n/60),"m ").concat(n%60,"s")}d(gt,"formatTimeRemaining");var f,C,T,R,me,ge,g,$,X,P,Y,Z,ee,be,fe,_e,xe,U,W,A,te,ne,oe,ie,G,N,E,B,M,o,et,tt,Ee,Re,nt,ot,z,he,ce,F,we,O,Ue,H,it,Ie,st,at,ze,Pe,Ge,Se,dt,pe,Le,Be=class Be{constructor(t){h(this,o);h(this,f);h(this,C);h(this,T,!0);h(this,R,[]);h(this,me,new Map);h(this,ge,new Map);h(this,g,{heading:S({},V.heading),motion:S({},V.motion)});h(this,$);h(this,X);h(this,P);h(this,Y);h(this,Z);h(this,ee);h(this,be);h(this,fe);h(this,_e);h(this,xe);h(this,U);h(this,W);h(this,A);h(this,te);h(this,ne);h(this,oe);h(this,ie);h(this,G);h(this,N);h(this,E);h(this,B,[]);h(this,M,null);if(u(this,f,t),pt(Qe,Ze),u(this,C,s(this,o,ot).call(this)),!document.body)throw new Error("DebugHUD: document.body is not available. Ensure the DOM is ready before creating the HUD.");document.body.appendChild(e(this,C)),s(this,o,et).call(this),s(this,o,st).call(this),s(this,o,at).call(this)}clearConsole(){u(this,B,[]),s(this,o,Re).call(this)}getTuningConfig(){return S({},e(this,g))}setTuningConfig(t){t.heading&&(e(this,g).heading=S(S({},e(this,g).heading),t.heading)),t.motion&&(e(this,g).motion=S(S({},e(this,g).motion),t.motion)),s(this,o,H).call(this),e(this,N).innerHTML="",s(this,o,we).call(this,e(this,N))}show(){e(this,C).style.display=""}hide(){e(this,C).style.display="none"}get isExpanded(){return!e(this,T)}expand(){e(this,T)&&(u(this,T,!1),e(this,C).classList.remove("bluedot-hud--collapsed"),e(this,C).classList.add("bluedot-hud--expanded"))}collapse(){e(this,T)||(u(this,T,!0),e(this,C).classList.add("bluedot-hud--collapsed"),e(this,C).classList.remove("bluedot-hud--expanded"))}toggleExpanded(){return e(this,T)?this.expand():this.collapse(),!e(this,T)}destroy(){s(this,o,tt).call(this);for(let n of e(this,R))n();u(this,R,[]),e(this,C).remove();let t=document.getElementById(Ze);t&&t.remove()}};f=new WeakMap,C=new WeakMap,T=new WeakMap,R=new WeakMap,me=new WeakMap,ge=new WeakMap,g=new WeakMap,$=new WeakMap,X=new WeakMap,P=new WeakMap,Y=new WeakMap,Z=new WeakMap,ee=new WeakMap,be=new WeakMap,fe=new WeakMap,_e=new WeakMap,xe=new WeakMap,U=new WeakMap,W=new WeakMap,A=new WeakMap,te=new WeakMap,ne=new WeakMap,oe=new WeakMap,ie=new WeakMap,G=new WeakMap,N=new WeakMap,E=new WeakMap,B=new WeakMap,M=new WeakMap,o=new WeakSet,et=d(function(){u(this,M,{log:w.log.bind(w),warn:w.warn.bind(w),error:w.error.bind(w)}),w.log=(...t)=>{e(this,M).log(...t),s(this,o,Ee).call(this,"log",t.map(String).join(" "))},w.warn=(...t)=>{e(this,M).warn(...t),s(this,o,Ee).call(this,"warn",t.map(String).join(" "))},w.error=(...t)=>{e(this,M).error(...t),s(this,o,Ee).call(this,"error",t.map(String).join(" "))}},"#interceptLogger"),tt=d(function(){e(this,M)&&(w.log=e(this,M).log,w.warn=e(this,M).warn,w.error=e(this,M).error,u(this,M,null))},"#restoreLogger"),Ee=d(function(t,n){let i={time:Date.now(),level:t,message:n};e(this,B).push(i),e(this,B).length>ct&&e(this,B).shift(),s(this,o,Re).call(this)},"#addLogEntry"),Re=d(function(){if(!e(this,E))return;let t=e(this,E).scrollHeight-e(this,E).scrollTop<=e(this,E).clientHeight+5;e(this,E).innerHTML="";for(let n of e(this,B)){let i=document.createElement("div");i.className="bluedot-hud__console-line bluedot-hud__console-line--".concat(n.level);let a=new Date(n.time),r="".concat(a.getHours().toString().padStart(2,"0"),":").concat(a.getMinutes().toString().padStart(2,"0"),":").concat(a.getSeconds().toString().padStart(2,"0"),".").concat(a.getMilliseconds().toString().padStart(3,"0"));i.innerHTML='<span class="bluedot-hud__console-time">'.concat(r,"</span> ").concat(s(this,o,nt).call(this,n.message)),e(this,E).appendChild(i)}t&&(e(this,E).scrollTop=e(this,E).scrollHeight)},"#updateConsole"),nt=d(function(t){let n=document.createElement("div");return n.textContent=t,n.innerHTML},"#escapeHtml"),ot=d(function(){let t=document.createElement("div");t.id=ht,t.className="bluedot-hud bluedot-hud--collapsed";let n=document.createElement("div");n.className="bluedot-hud__collapsed",n.addEventListener("click",()=>s(this,o,Ie).call(this)),u(this,$,document.createElement("span")),e(this,$).className="bluedot-hud__status-dot",u(this,X,document.createElement("span")),e(this,X).className="bluedot-hud__status-text",u(this,P,document.createElement("span")),e(this,P).className="bluedot-hud__coords",u(this,Y,document.createElement("span")),e(this,Y).className="bluedot-hud__heading",n.appendChild(e(this,$)),n.appendChild(e(this,X)),n.appendChild(e(this,P)),n.appendChild(e(this,Y));let i=document.createElement("div");i.className="bluedot-hud__expanded";let a=document.createElement("div");a.className="bluedot-hud__header",a.addEventListener("click",()=>s(this,o,Ie).call(this));let r=document.createElement("span");r.className="bluedot-hud__title",r.textContent="BlueDot Debug";let m=document.createElement("div");m.className="bluedot-hud__header-right";let p=document.createElement("button");p.className="bluedot-hud__export-btn",p.textContent="Export",p.addEventListener("click",Ce=>{Ce.stopPropagation(),Ke(e(this,f))});let c=document.createElement("span");c.className="bluedot-hud__collapse-icon",c.textContent="\u25BC",m.appendChild(p),m.appendChild(c),a.appendChild(r),a.appendChild(m);let b=document.createElement("div");b.className="bluedot-hud__content";let _=s(this,o,z).call(this,"Status"),y=document.createElement("div");y.className="bluedot-hud__row",u(this,Z,s(this,o,ce).call(this,"--")),u(this,ee,s(this,o,ce).call(this,"no")),y.appendChild(s(this,o,he).call(this,"Status:")),y.appendChild(e(this,Z)),y.appendChild(s(this,o,he).call(this,"Following:")),y.appendChild(e(this,ee)),_.appendChild(y);let x=s(this,o,z).call(this,"Position");u(this,be,s(this,o,F).call(this,x,"Lat")),u(this,fe,s(this,o,F).call(this,x,"Lon")),u(this,_e,s(this,o,F).call(this,x,"Accuracy")),u(this,xe,s(this,o,F).call(this,x,"Floor"));let re=s(this,o,z).call(this,"Heading"),ve=document.createElement("div");ve.className="bluedot-hud__heading-content";let ue=document.createElement("div");ue.className="bluedot-hud__compass";let Ne=document.createElement("div");Ne.className="bluedot-hud__compass-ring",u(this,W,document.createElement("div")),e(this,W).className="bluedot-hud__compass-needle";let Ye=document.createElement("div");Ye.className="bluedot-hud__compass-center";let lt=["N","E","S","W"];for(let Ce of lt){let Fe=document.createElement("span");Fe.className="bluedot-hud__compass-dir bluedot-hud__compass-dir--".concat(Ce.toLowerCase()),Fe.textContent=Ce,Ne.appendChild(Fe)}ue.appendChild(Ne),ue.appendChild(e(this,W)),ue.appendChild(Ye),u(this,U,document.createElement("div")),e(this,U).className="bluedot-hud__headings",ve.appendChild(ue),ve.appendChild(e(this,U)),re.appendChild(ve);let Q=s(this,o,z).call(this,"Anchor");u(this,A,s(this,o,F).call(this,Q,"Status")),u(this,te,s(this,o,F).call(this,Q,"Position")),u(this,ne,s(this,o,F).call(this,Q,"Set")),u(this,oe,s(this,o,F).call(this,Q,"TTL")),u(this,ie,s(this,o,F).call(this,Q,"Drift"));let We=s(this,o,z).call(this,"Sensors");u(this,G,document.createElement("div")),e(this,G).className="bluedot-hud__sensors",We.appendChild(e(this,G));let qe=s(this,o,z).call(this,"Tuning");u(this,N,document.createElement("div")),e(this,N).className="bluedot-hud__tuning",s(this,o,we).call(this,e(this,N)),qe.appendChild(e(this,N));let ke=s(this,o,z).call(this,"Console"),De=document.createElement("div");De.className="bluedot-hud__console-header";let ye=document.createElement("button");return ye.className="bluedot-hud__console-clear",ye.textContent="Clear",ye.addEventListener("click",()=>this.clearConsole()),De.appendChild(ye),ke.appendChild(De),u(this,E,document.createElement("div")),e(this,E).className="bluedot-hud__console",ke.appendChild(e(this,E)),b.appendChild(_),b.appendChild(x),b.appendChild(re),b.appendChild(Q),b.appendChild(We),b.appendChild(qe),b.appendChild(ke),i.appendChild(a),i.appendChild(b),t.appendChild(n),t.appendChild(i),t},"#createDOM"),z=d(function(t){let n=document.createElement("div");n.className="bluedot-hud__section";let i=document.createElement("div");return i.className="bluedot-hud__section-title",i.textContent=t,n.appendChild(i),n},"#createSection"),he=d(function(t){let n=document.createElement("span");return n.className="bluedot-hud__label",n.textContent=t,n},"#createLabel"),ce=d(function(t){let n=document.createElement("span");return n.className="bluedot-hud__value",n.textContent=t,n},"#createValue"),F=d(function(t,n){let i=document.createElement("div");i.className="bluedot-hud__row",i.appendChild(s(this,o,he).call(this,"".concat(n,":")));let a=s(this,o,ce).call(this,"--");return i.appendChild(a),t.appendChild(i),a},"#appendRow"),we=d(function(t){let n=document.createElement("div");n.className="bluedot-hud__tuning-group",n.innerHTML='<div class="bluedot-hud__tuning-group-title">Heading</div>',s(this,o,O).call(this,n,{id:"heading-responsiveness",label:"Heading responsiveness",description:"Higher = compass corrects heading faster (may jump)",min:0,max:100,value:e(this,g).heading.headingResponsiveness,onChange:d(r=>{e(this,g).heading.headingResponsiveness=r,s(this,o,H).call(this)},"onChange")}),s(this,o,O).call(this,n,{id:"compass-noise",label:"Rotation filtering",description:"Higher = ignore small turns, steadier heading",min:0,max:100,value:e(this,g).heading.compassNoiseTolerance,onChange:d(r=>{e(this,g).heading.compassNoiseTolerance=r,s(this,o,H).call(this)},"onChange")}),s(this,o,O).call(this,n,{id:"snap-threshold",label:"Heading snap threshold",description:"Higher = tolerate more drift before jumping",min:10,max:90,value:e(this,g).heading.headingSnapThreshold,unit:"\xB0",onChange:d(r=>{e(this,g).heading.headingSnapThreshold=r,s(this,o,H).call(this)},"onChange")}),s(this,o,Ue).call(this,n,{id:"magnetic-gating",label:"Magnetic disturbance gating",description:"On = ignore compass near metal/magnets",value:e(this,g).heading.magneticDisturbanceGating,onChange:d(r=>{e(this,g).heading.magneticDisturbanceGating=r,s(this,o,H).call(this)},"onChange")});let i=document.createElement("div");i.className="bluedot-hud__tuning-group",i.innerHTML='<div class="bluedot-hud__tuning-group-title">Motion (PDR)</div>',s(this,o,Ue).call(this,i,{id:"pdr-enabled",label:"PDR enabled",description:"On = dot moves with detected steps",value:e(this,g).motion.pdrEnabled,onChange:d(r=>{e(this,g).motion.pdrEnabled=r,s(this,o,H).call(this)},"onChange")}),s(this,o,O).call(this,i,{id:"step-sensitivity",label:"Step sensitivity",description:"Higher = more steps detected, more false positives",min:0,max:100,value:e(this,g).motion.stepSensitivity,onChange:d(r=>{e(this,g).motion.stepSensitivity=r,s(this,o,H).call(this)},"onChange")}),s(this,o,O).call(this,i,{id:"step-length",label:"Average step length",description:"Higher = dot moves farther per step",min:.4,max:1.2,step:.05,value:e(this,g).motion.averageStepLength,unit:"m",onChange:d(r=>{e(this,g).motion.averageStepLength=r,s(this,o,H).call(this)},"onChange")}),s(this,o,O).call(this,i,{id:"stride-variability",label:"Stride variability",description:"Higher = faster walking = longer steps",min:0,max:100,value:e(this,g).motion.strideVariability,onChange:d(r=>{e(this,g).motion.strideVariability=r,s(this,o,H).call(this)},"onChange")});let a=document.createElement("button");a.className="bluedot-hud__reset-btn",a.textContent="Reset to Defaults",a.addEventListener("click",()=>s(this,o,it).call(this)),t.appendChild(n),t.appendChild(i),t.appendChild(a)},"#createTuningControls"),O=d(function(t,n){var _,y;let i=document.createElement("div");i.className="bluedot-hud__tuning-row";let a=document.createElement("div");a.className="bluedot-hud__tuning-label-row";let r=document.createElement("label");r.className="bluedot-hud__tuning-label",r.htmlFor="bluedot-tuning-".concat(n.id),r.textContent=n.label;let m=document.createElement("div");m.className="bluedot-hud__tuning-desc",m.textContent=n.description,a.appendChild(r),a.appendChild(m);let p=document.createElement("div");p.className="bluedot-hud__tuning-control";let c=document.createElement("input");c.type="range",c.id="bluedot-tuning-".concat(n.id),c.className="bluedot-hud__slider",c.min=String(n.min),c.max=String(n.max),c.step=String((_=n.step)!=null?_:1),c.value=String(n.value);let b=document.createElement("span");b.className="bluedot-hud__slider-value",b.textContent="".concat(n.value).concat((y=n.unit)!=null?y:""),c.addEventListener("input",()=>{var re;let x=parseFloat(c.value);b.textContent="".concat(n.step&&n.step<1?x.toFixed(2):x).concat((re=n.unit)!=null?re:""),n.onChange(x)}),p.appendChild(c),p.appendChild(b),i.appendChild(a),i.appendChild(p),t.appendChild(i)},"#createSlider"),Ue=d(function(t,n){let i=document.createElement("div");i.className="bluedot-hud__tuning-row bluedot-hud__tuning-row--toggle";let a=document.createElement("div");a.className="bluedot-hud__tuning-label-col";let r=document.createElement("label");r.className="bluedot-hud__tuning-label",r.htmlFor="bluedot-tuning-".concat(n.id),r.textContent=n.label;let m=document.createElement("div");m.className="bluedot-hud__tuning-desc",m.textContent=n.description,a.appendChild(r),a.appendChild(m);let p=document.createElement("input");p.type="checkbox",p.id="bluedot-tuning-".concat(n.id),p.className="bluedot-hud__toggle",p.checked=n.value,p.addEventListener("change",()=>{n.onChange(p.checked)}),i.appendChild(a),i.appendChild(p),t.appendChild(i)},"#createToggle"),H=d(function(){let t=$e(e(this,g).heading);e(this,f).Fusion.headingFilter.configure(t);let n=Ae(e(this,g).motion),i=e(this,f).Sensors.get("devicemotion");i==null||i.configure(n);let a=e(this,f).Sensors.get("deviceorientation");a==null||a.configure({deltaThreshold:e(this,g).heading.headingChangeThreshold})},"#applyTuning"),it=d(function(){u(this,g,{heading:S({},V.heading),motion:S({},V.motion)}),s(this,o,H).call(this),e(this,N).innerHTML="",s(this,o,we).call(this,e(this,N))},"#resetTuning"),Ie=d(function(){u(this,T,!e(this,T)),e(this,C).classList.toggle("bluedot-hud--collapsed",e(this,T)),e(this,C).classList.toggle("bluedot-hud--expanded",!e(this,T))},"#toggle"),st=d(function(){let t=e(this,f).on("position-update",()=>s(this,o,Pe).call(this)),n=e(this,f).on("status-change",()=>s(this,o,ze).call(this)),i=e(this,f).on("follow-change",()=>s(this,o,Ge).call(this)),a=e(this,f).on("anchor-set",()=>s(this,o,pe).call(this)),r=e(this,f).on("anchor-expired",()=>s(this,o,pe).call(this));e(this,R).push(t,n,i,a,r);let m=e(this,f).Sensors.on("absolute-update",({sensorId:b,update:_})=>{_.heading!==void 0&&(e(this,me).set(b,_.heading),s(this,o,Se).call(this)),(_.accuracy!==void 0||_.confidence!==void 0)&&(e(this,ge).set(b,{accuracy:_.accuracy,confidence:_.confidence}),s(this,o,Le).call(this))});e(this,R).push(m);let p=setInterval(()=>s(this,o,pe).call(this),1e3);e(this,R).push(()=>clearInterval(p));let c=setInterval(()=>s(this,o,Le).call(this),1e3);e(this,R).push(()=>clearInterval(c))},"#subscribeToEvents"),at=d(function(){s(this,o,ze).call(this),s(this,o,Pe).call(this),s(this,o,Ge).call(this),s(this,o,Se).call(this),s(this,o,pe).call(this),s(this,o,Le).call(this)},"#updateAll"),ze=d(function(){let t=e(this,f).status;e(this,X).textContent=t,e(this,Z).textContent=t,e(this,$).classList.remove("bluedot-hud__status-dot--active","bluedot-hud__status-dot--inactive","bluedot-hud__status-dot--error"),t==="active"?e(this,$).classList.add("bluedot-hud__status-dot--active"):t==="inactive"||t==="hidden"?e(this,$).classList.add("bluedot-hud__status-dot--inactive"):e(this,$).classList.add("bluedot-hud__status-dot--error")},"#updateStatus"),Pe=d(function(){var a;let t=e(this,f).coordinate,n=e(this,f).accuracy,i=e(this,f).floor;t?e(this,P).textContent="".concat(t.latitude.toFixed(5),", ").concat(t.longitude.toFixed(5)):e(this,P).textContent="--",e(this,be).textContent=t?t.latitude.toFixed(6):"--",e(this,fe).textContent=t?t.longitude.toFixed(6):"--",e(this,_e).textContent=n!=null?"".concat(n.toFixed(1),"m"):"--",e(this,xe).textContent=(a=i==null?void 0:i.name)!=null?a:"--",s(this,o,Se).call(this)},"#updatePosition"),Ge=d(function(){e(this,ee).textContent=e(this,f).isFollowing?"yes":"no"},"#updateFollowing"),Se=d(function(){let t=e(this,f).heading;e(this,Y).textContent=t!=null?"".concat(t.toFixed(0),"\xB0"):"--",t!=null&&(e(this,W).style.transform="translate(-50%, -100%) rotate(".concat(t,"deg)")),e(this,U).innerHTML="";let n=document.createElement("div");n.className="bluedot-hud__heading-row bluedot-hud__heading-row--displayed",n.innerHTML='\n <span class="bluedot-hud__heading-label">Displayed</span>\n <span class="bluedot-hud__heading-value">'.concat(t!=null?"".concat(t.toFixed(0),"\xB0"):"--","</span>\n "),e(this,U).appendChild(n);for(let[i,a]of e(this,me)){let r=document.createElement("div");r.className="bluedot-hud__heading-row";let m=a!=null&&t!=null?s(this,o,dt).call(this,a-t):null,p=m!=null?" (".concat(m>=0?"+":"").concat(m.toFixed(0),"\xB0)"):"",c=m!=null&&Math.abs(m)>10?"bluedot-hud__heading-diff--warning":"";r.innerHTML='\n <span class="bluedot-hud__heading-label">'.concat(i,'</span>\n <span class="bluedot-hud__heading-value">').concat(a!=null?"".concat(a.toFixed(0),"\xB0"):"--",'<span class="bluedot-hud__heading-diff ').concat(c,'">').concat(p,"</span></span>\n "),e(this,U).appendChild(r)}},"#updateHeadings"),dt=d(function(t){for(;t>180;)t-=360;for(;t<-180;)t+=360;return t},"#normalizeAngleDiff"),pe=d(function(){let t=e(this,f).anchor,n=e(this,f).displacement;if(t){e(this,A).textContent="set (".concat(t.sensorId,")"),e(this,A).classList.add("bluedot-hud__value--enabled"),e(this,A).classList.remove("bluedot-hud__value--disabled"),e(this,te).textContent="".concat(t.latitude.toFixed(6),", ").concat(t.longitude.toFixed(6)),e(this,ne).textContent=mt(t.timestamp),e(this,oe).textContent=gt(t.timestamp,t.ttl);let i=Math.sqrt(n.dx**2+n.dy**2);e(this,ie).textContent="dx=".concat(n.dx>=0?"+":"").concat(n.dx.toFixed(2),"m, dy=").concat(n.dy>=0?"+":"").concat(n.dy.toFixed(2),"m (").concat(i.toFixed(2),"m)")}else e(this,A).textContent="none",e(this,A).classList.remove("bluedot-hud__value--enabled"),e(this,A).classList.add("bluedot-hud__value--disabled"),e(this,te).textContent="--",e(this,ne).textContent="--",e(this,oe).textContent="--",e(this,ie).textContent="--"},"#updateAnchor"),Le=d(function(){var t;e(this,G).innerHTML="";for(let[n,i]of e(this,f).Sensors.getAll()){let a=document.createElement("div");a.className="bluedot-hud__row";let r="".concat(n,":");n==="geolocation"&&(r=i.isLikelyIPS?"IPS (Wi-Fi):":"GPS:");let m=s(this,o,he).call(this,r),p=i.isEnabled?"enabled":"disabled",c=e(this,ge).get(n);if(i.isEnabled&&c){let x=[];c.accuracy!==void 0&&x.push("".concat(c.accuracy.toFixed(1),"m")),c.confidence!==void 0&&x.push("conf=".concat((c.confidence*100).toFixed(0),"%")),x.length>0&&(p=x.join(", "))}let b=s(this,o,ce).call(this,p);b.classList.add(i.isEnabled?"bluedot-hud__value--enabled":"bluedot-hud__value--disabled");let _=n==="geolocation"?i:null,y=(t=_==null?void 0:_.isLikelyIPS)!=null?t:!1;(c==null?void 0:c.confidence)!==void 0&&c.confidence<.5&&!y&&b.classList.add("bluedot-hud__value--warning"),a.appendChild(m),a.appendChild(b),e(this,G).appendChild(a)}},"#updateSensors"),d(Be,"DebugHUD");var Me=Be;D();var v,se,ae,Ve=class Ve{constructor(t=100){h(this,v,[]);h(this,se);h(this,ae,0);u(this,se,t)}record(t,n=Date.now()){e(this,v).push(t),e(this,v).length>e(this,se)&&e(this,v).shift(),u(this,ae,n)}getRate(){if(e(this,v).length<2)return 0;let t=e(this,ae)-(Date.now()-e(this,se)*100);return t>0?e(this,v).length/t*1e3:0}getAverage(){if(e(this,v).length===0)return 0;let t=0;for(let n of e(this,v))t+=n;return t/e(this,v).length}getLatest(){return e(this,v)[e(this,v).length-1]}getCount(){return e(this,v).length}clear(){u(this,v,[]),u(this,ae,0)}};v=new WeakMap,se=new WeakMap,ae=new WeakMap,d(Ve,"MetricTracker");var q=Ve,k,de,le,He,Oe=class Oe{constructor(t=5e3){h(this,le);h(this,k,[]);h(this,de);u(this,de,t)}tick(t=Date.now()){e(this,k).push(t),s(this,le,He).call(this,t)}getRate(t=Date.now()){return s(this,le,He).call(this,t),e(this,k).length===0?0:e(this,k).length/e(this,de)*1e3}getCount(t=Date.now()){return s(this,le,He).call(this,t),e(this,k).length}clear(){u(this,k,[])}};k=new WeakMap,de=new WeakMap,le=new WeakSet,He=d(function(t){let n=t-e(this,de);for(;e(this,k).length>0&&e(this,k)[0]<n;)e(this,k).shift()},"#prune"),d(Oe,"EventCounter");var J=Oe,K,j,Xe=class Xe{constructor(){h(this,K,new Map);h(this,j,!1);L(this,"compassUpdates",new J);L(this,"gyroUpdates",new J);L(this,"stepsDetected",new J);L(this,"positionUpdates",new J);L(this,"compassHeading",new q(50));L(this,"gyroAngularVelocity",new q(50));L(this,"stepLength",new q(20));L(this,"positionAccuracy",new q(20));L(this,"isMoving",!1);L(this,"magneticDisturbanceActive",!1);L(this,"lastFusedHeading",null)}enable(){u(this,j,!0)}disable(){u(this,j,!1)}get isEnabled(){return e(this,j)}emit(t,n){if(!e(this,j))return;let i=Date.now();switch(t){case"compass-update":this.compassUpdates.tick(i),this.compassHeading.record(n.heading,i);break;case"gyro-update":this.gyroUpdates.tick(i),this.gyroAngularVelocity.record(n.angularVelocity,i);break;case"step-detected":this.stepsDetected.tick(i),this.stepLength.record(n.stepLength,i);break;case"motion-state":this.isMoving=n.isMoving;break;case"magnetic-disturbance":this.magneticDisturbanceActive=n.active;break;case"heading-fused":this.lastFusedHeading=n.heading;break;case"position-update":this.positionUpdates.tick(i),this.positionAccuracy.record(n.accuracy,i);break}let a=e(this,K).get(t);if(a)for(let r of a)r(n)}on(t,n){let i=e(this,K).get(t);return i||(i=new Set,e(this,K).set(t,i)),i.add(n),()=>{i.delete(n)}}getSummary(){return{compassRate:this.compassUpdates.getRate(),gyroRate:this.gyroUpdates.getRate(),stepRate:this.stepsDetected.getRate(),positionRate:this.positionUpdates.getRate(),avgCompassHeading:this.compassHeading.getAverage(),avgGyroVelocity:this.gyroAngularVelocity.getAverage(),avgStepLength:this.stepLength.getAverage(),avgAccuracy:this.positionAccuracy.getAverage(),isMoving:this.isMoving,magneticDisturbanceActive:this.magneticDisturbanceActive,lastFusedHeading:this.lastFusedHeading}}clear(){this.compassUpdates.clear(),this.gyroUpdates.clear(),this.stepsDetected.clear(),this.positionUpdates.clear(),this.compassHeading.clear(),this.gyroAngularVelocity.clear(),this.stepLength.clear(),this.positionAccuracy.clear(),this.isMoving=!1,this.magneticDisturbanceActive=!1,this.lastFusedHeading=null}destroy(){this.clear(),e(this,K).clear(),u(this,j,!1)}};K=new WeakMap,j=new WeakMap,d(Xe,"Telemetry");var je=Xe;function $t(l){return new Me(l)}d($t,"enableDebugHUD");export{V as DEFAULT_TUNING_CONFIG,J as EventCounter,q as MetricTracker,je as Telemetry,$t as enableDebugHUD,$e as headingConfigToFilterParams,Ae as motionConfigToSensorParams,rt as normalizeTuningConfig};
|
|
1
|
+
import{a as S,c as d,g as L,h as e,i as h,j as u,k as s,m as D,n as w}from"../chunk-QFCRWBSD.js";D();D();D();function Ke(l){var r,m;let t={};for(let[p,c]of l.Sensors.getAll())t[p]={enabled:c.isEnabled};let n={timestamp:Date.now(),state:l.getState(),position:l.coordinate?{lat:l.coordinate.latitude,lon:l.coordinate.longitude,floor:(r=l.floor)==null?void 0:r.name}:null,accuracy:l.accuracy,heading:l.heading,sensors:t,anchor:l.anchor,displacement:l.displacement},i=new Blob([JSON.stringify(n,null,2)],{type:"application/json"}),a=new File([i],"bluedot-debug-".concat(Date.now(),".json"),{type:"application/json"});(m=navigator.canShare)!=null&&m.call(navigator,{files:[a]})?navigator.share({files:[a]}).catch(()=>{Je(i,a.name)}):Je(i,a.name)}d(Ke,"exportDebugData");function Je(l,t){let n=URL.createObjectURL(l),i=document.createElement("a");i.href=n,i.download=t,i.click(),URL.revokeObjectURL(n)}d(Je,"downloadFile");D();var V={heading:{headingResponsiveness:40,compassNoiseTolerance:30,headingSnapThreshold:10,magneticDisturbanceGating:!0,headingChangeThreshold:2},motion:{stepSensitivity:50,averageStepLength:.7,strideVariability:0,motionResponsiveness:50,pdrEnabled:!0}};function $e(l){return{complementaryAlpha:.99-l.headingResponsiveness/100*.79,gyroNoiseThreshold:.1+l.compassNoiseTolerance/100*4.9,maxHeadingError:l.headingSnapThreshold,magneticGatingEnabled:l.magneticDisturbanceGating,deltaThreshold:l.headingChangeThreshold}}d($e,"headingConfigToFilterParams");function Ae(l){return{stepDetectionThreshold:2-l.stepSensitivity/100*1.5,stepLength:l.averageStepLength,strideAdaptation:l.strideVariability/100*.3,motionThreshold:1-l.motionResponsiveness/100*.8,pdrEnabled:l.pdrEnabled}}d(Ae,"motionConfigToSensorParams");function I(l,t,n){return Math.min(Math.max(l,t),n)}d(I,"clamp");function rt(l){var n,i,a,r,m,p,c,b,_,y;let t=S({},V);return l.heading&&(t.heading={headingResponsiveness:I((n=l.heading.headingResponsiveness)!=null?n:30,0,100),compassNoiseTolerance:I((i=l.heading.compassNoiseTolerance)!=null?i:50,0,100),headingSnapThreshold:I((a=l.heading.headingSnapThreshold)!=null?a:30,10,90),magneticDisturbanceGating:(r=l.heading.magneticDisturbanceGating)!=null?r:!0,headingChangeThreshold:I((m=l.heading.headingChangeThreshold)!=null?m:2,1,10)}),l.motion&&(t.motion={stepSensitivity:I((p=l.motion.stepSensitivity)!=null?p:50,0,100),averageStepLength:I((c=l.motion.averageStepLength)!=null?c:.7,.4,1.2),strideVariability:I((b=l.motion.strideVariability)!=null?b:0,0,100),motionResponsiveness:I((_=l.motion.motionResponsiveness)!=null?_:50,0,100),pdrEnabled:(y=l.motion.pdrEnabled)!=null?y:!0}),t}d(rt,"normalizeTuningConfig");var Qe=".bluedot-hud {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 10000;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-size: 14px;\n pointer-events: none;\n}\n\n.bluedot-hud--expanded {\n top: 0;\n display: flex;\n flex-direction: column;\n}\n\n.bluedot-hud * {\n box-sizing: border-box;\n}\n\n/* Collapsed bar */\n.bluedot-hud__collapsed {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 8px 12px;\n background: rgba(0, 0, 0, 0.85);\n color: #fff;\n pointer-events: auto;\n cursor: pointer;\n min-height: 36px;\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n}\n\n.bluedot-hud__status-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.bluedot-hud__status-dot--active {\n background: #4ade80;\n box-shadow: 0 0 4px #4ade80;\n}\n\n.bluedot-hud__status-dot--inactive {\n background: #9ca3af;\n}\n\n.bluedot-hud__status-dot--error {\n background: #f87171;\n box-shadow: 0 0 4px #f87171;\n}\n\n.bluedot-hud__status-text {\n font-weight: 600;\n font-size: 12px;\n}\n\n.bluedot-hud__coords {\n color: #94a3b8;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 10px;\n flex: 1;\n}\n\n.bluedot-hud__heading {\n color: #60a5fa;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 11px;\n font-weight: 600;\n}\n\n/* Expanded panel */\n.bluedot-hud__expanded {\n display: none;\n flex-direction: column;\n background: rgba(0, 0, 0, 0.92);\n color: #fff;\n pointer-events: auto;\n flex: 1;\n overflow: hidden;\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n}\n\n.bluedot-hud__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n cursor: pointer;\n min-height: 40px;\n}\n\n.bluedot-hud__title {\n font-weight: 600;\n font-size: 14px;\n}\n\n.bluedot-hud__header-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.bluedot-hud__export-btn {\n background: #3b82f6;\n color: #fff;\n border: none;\n border-radius: 4px;\n padding: 6px 12px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.bluedot-hud__export-btn:active {\n background: #2563eb;\n}\n\n.bluedot-hud__collapse-icon {\n font-size: 12px;\n color: #94a3b8;\n}\n\n.bluedot-hud__content {\n padding: 4px 0;\n flex: 1;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.bluedot-hud__section {\n padding: 6px 12px;\n}\n\n.bluedot-hud__section:not(:last-child) {\n border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n}\n\n.bluedot-hud__section-title {\n font-weight: 600;\n font-size: 10px;\n color: #64748b;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n}\n\n.bluedot-hud__row {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 1px 0;\n margin-right: 12px;\n}\n\n.bluedot-hud__label {\n color: #94a3b8;\n font-size: 11px;\n}\n\n.bluedot-hud__value {\n color: #fff;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 11px;\n word-break: break-all;\n}\n\n.bluedot-hud__value--enabled {\n color: #4ade80;\n}\n\n.bluedot-hud__value--disabled {\n color: #6b7280;\n}\n\n.bluedot-hud__value--warning {\n color: #fbbf24;\n}\n\n.bluedot-hud__sensors {\n display: flex;\n flex-wrap: wrap;\n}\n\n/* Heading section with compass */\n.bluedot-hud__heading-content {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n}\n\n/* Compass */\n.bluedot-hud__compass {\n position: relative;\n width: 56px;\n height: 56px;\n flex-shrink: 0;\n}\n\n.bluedot-hud__compass-ring {\n position: absolute;\n inset: 0;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-radius: 50%;\n}\n\n.bluedot-hud__compass-dir {\n position: absolute;\n font-size: 8px;\n font-weight: 600;\n color: #94a3b8;\n}\n\n.bluedot-hud__compass-dir--n {\n top: 2px;\n left: 50%;\n transform: translateX(-50%);\n color: #f87171;\n}\n\n.bluedot-hud__compass-dir--e {\n right: 2px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n.bluedot-hud__compass-dir--s {\n bottom: 2px;\n left: 50%;\n transform: translateX(-50%);\n}\n\n.bluedot-hud__compass-dir--w {\n left: 2px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n.bluedot-hud__compass-needle {\n position: absolute;\n left: 50%;\n top: 50%;\n width: 3px;\n height: 20px;\n background: linear-gradient(to top, #3b82f6 0%, #60a5fa 100%);\n border-radius: 2px;\n transform-origin: bottom center;\n transform: translate(-50%, -100%) rotate(0deg);\n transition: transform 0.15s ease-out;\n}\n\n.bluedot-hud__compass-needle::before {\n content: '';\n position: absolute;\n top: -4px;\n left: 50%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-bottom: 6px solid #60a5fa;\n}\n\n.bluedot-hud__compass-center {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 6px;\n height: 6px;\n background: #fff;\n border-radius: 50%;\n border: 1px solid #3b82f6;\n}\n\n/* Heading comparison list */\n.bluedot-hud__headings {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.bluedot-hud__heading-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 2px 6px;\n background: rgba(255, 255, 255, 0.05);\n border-radius: 3px;\n font-size: 10px;\n}\n\n.bluedot-hud__heading-row--displayed {\n background: rgba(59, 130, 246, 0.2);\n border: 1px solid rgba(59, 130, 246, 0.3);\n}\n\n.bluedot-hud__heading-label {\n color: #94a3b8;\n font-size: 10px;\n}\n\n.bluedot-hud__heading-value {\n color: #fff;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 10px;\n}\n\n.bluedot-hud__heading-diff {\n color: #94a3b8;\n margin-left: 3px;\n font-size: 9px;\n}\n\n.bluedot-hud__heading-diff--warning {\n color: #fbbf24;\n}\n\n/* State modifiers */\n.bluedot-hud--collapsed .bluedot-hud__collapsed {\n display: flex;\n}\n\n.bluedot-hud--collapsed .bluedot-hud__expanded {\n display: none;\n}\n\n.bluedot-hud--expanded .bluedot-hud__collapsed {\n display: none;\n}\n\n.bluedot-hud--expanded .bluedot-hud__expanded {\n display: flex;\n}\n\n/* Tuning section */\n.bluedot-hud__tuning {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.bluedot-hud__tuning-group {\n background: rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n padding: 8px;\n}\n\n.bluedot-hud__tuning-group-title {\n color: #94a3b8;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n}\n\n.bluedot-hud__tuning-row {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin-bottom: 10px;\n}\n\n.bluedot-hud__tuning-row--toggle {\n flex-direction: row;\n justify-content: space-between;\n align-items: flex-start;\n gap: 8px;\n}\n\n.bluedot-hud__tuning-label-col {\n flex: 1;\n}\n\n.bluedot-hud__tuning-label {\n color: #e2e8f0;\n font-size: 12px;\n}\n\n.bluedot-hud__tuning-desc {\n color: #64748b;\n font-size: 10px;\n line-height: 1.3;\n margin-top: 1px;\n}\n\n.bluedot-hud__tuning-control {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.bluedot-hud__slider {\n flex: 1;\n height: 4px;\n background: #334155;\n border-radius: 2px;\n outline: none;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.bluedot-hud__slider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 14px;\n height: 14px;\n background: #3b82f6;\n border-radius: 50%;\n cursor: pointer;\n}\n\n.bluedot-hud__slider::-moz-range-thumb {\n width: 14px;\n height: 14px;\n background: #3b82f6;\n border-radius: 50%;\n cursor: pointer;\n border: none;\n}\n\n.bluedot-hud__slider-value {\n color: #94a3b8;\n font-size: 11px;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n min-width: 40px;\n text-align: right;\n}\n\n.bluedot-hud__toggle {\n width: 36px;\n height: 20px;\n background: #334155;\n border-radius: 10px;\n position: relative;\n -webkit-appearance: none;\n appearance: none;\n outline: none;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n.bluedot-hud__toggle:checked {\n background: #3b82f6;\n}\n\n.bluedot-hud__toggle::before {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n background: #fff;\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.bluedot-hud__toggle:checked::before {\n transform: translateX(16px);\n}\n\n.bluedot-hud__reset-btn {\n background: #334155;\n color: #e2e8f0;\n border: none;\n border-radius: 4px;\n padding: 8px 12px;\n font-size: 12px;\n cursor: pointer;\n transition: background 0.2s;\n margin-top: 8px;\n}\n\n.bluedot-hud__reset-btn:hover {\n background: #475569;\n}\n\n/* Console section */\n.bluedot-hud__console-header {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 6px;\n}\n\n.bluedot-hud__console-clear {\n background: #334155;\n color: #94a3b8;\n border: none;\n border-radius: 3px;\n padding: 4px 8px;\n font-size: 10px;\n cursor: pointer;\n}\n\n.bluedot-hud__console-clear:active {\n background: #475569;\n}\n\n.bluedot-hud__console {\n background: rgba(0, 0, 0, 0.4);\n border-radius: 4px;\n padding: 6px;\n max-height: 200px;\n overflow-y: auto;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 10px;\n line-height: 1.4;\n -webkit-overflow-scrolling: touch;\n}\n\n.bluedot-hud__console-line {\n padding: 2px 0;\n word-break: break-word;\n color: #d1d5db;\n}\n\n.bluedot-hud__console-line--warn {\n color: #fbbf24;\n}\n\n.bluedot-hud__console-line--error {\n color: #f87171;\n}\n\n.bluedot-hud__console-time {\n color: #6b7280;\n margin-right: 6px;\n}\n";var Ze="bluedot-debug-hud-css",ht="bluedot-debug-hud",ct=200;function pt(l,t){let n=document.getElementById(t);if(n instanceof HTMLStyleElement){n.textContent=l;return}n=document.createElement("style"),n.id=t,n.textContent=l,document.head.appendChild(n)}d(pt,"injectCSS");function mt(l){let t=Math.floor((Date.now()-l)/1e3);if(t<60)return"".concat(t,"s ago");let n=Math.floor(t/60);return n<60?"".concat(n,"m ago"):"".concat(Math.floor(n/60),"h ago")}d(mt,"formatTimeAgo");function gt(l,t){let n=Math.max(0,Math.floor((l+t-Date.now())/1e3));return n<=0?"expired":n<60?"".concat(n,"s"):"".concat(Math.floor(n/60),"m ").concat(n%60,"s")}d(gt,"formatTimeRemaining");var f,C,T,R,me,ge,g,$,X,P,Y,Z,ee,be,fe,_e,xe,U,W,A,te,ne,oe,ie,G,N,E,B,M,o,et,tt,Ee,Re,nt,ot,z,he,ce,F,we,O,Ue,H,it,Ie,st,at,ze,Pe,Ge,Se,dt,pe,Le,Be=class Be{constructor(t){h(this,o);h(this,f);h(this,C);h(this,T,!0);h(this,R,[]);h(this,me,new Map);h(this,ge,new Map);h(this,g,{heading:S({},V.heading),motion:S({},V.motion)});h(this,$);h(this,X);h(this,P);h(this,Y);h(this,Z);h(this,ee);h(this,be);h(this,fe);h(this,_e);h(this,xe);h(this,U);h(this,W);h(this,A);h(this,te);h(this,ne);h(this,oe);h(this,ie);h(this,G);h(this,N);h(this,E);h(this,B,[]);h(this,M,null);if(u(this,f,t),pt(Qe,Ze),u(this,C,s(this,o,ot).call(this)),!document.body)throw new Error("DebugHUD: document.body is not available. Ensure the DOM is ready before creating the HUD.");document.body.appendChild(e(this,C)),s(this,o,et).call(this),s(this,o,st).call(this),s(this,o,at).call(this)}clearConsole(){u(this,B,[]),s(this,o,Re).call(this)}getTuningConfig(){return S({},e(this,g))}setTuningConfig(t){t.heading&&(e(this,g).heading=S(S({},e(this,g).heading),t.heading)),t.motion&&(e(this,g).motion=S(S({},e(this,g).motion),t.motion)),s(this,o,H).call(this),e(this,N).innerHTML="",s(this,o,we).call(this,e(this,N))}show(){e(this,C).style.display=""}hide(){e(this,C).style.display="none"}get isExpanded(){return!e(this,T)}expand(){e(this,T)&&(u(this,T,!1),e(this,C).classList.remove("bluedot-hud--collapsed"),e(this,C).classList.add("bluedot-hud--expanded"))}collapse(){e(this,T)||(u(this,T,!0),e(this,C).classList.add("bluedot-hud--collapsed"),e(this,C).classList.remove("bluedot-hud--expanded"))}toggleExpanded(){return e(this,T)?this.expand():this.collapse(),!e(this,T)}destroy(){s(this,o,tt).call(this);for(let n of e(this,R))n();u(this,R,[]),e(this,C).remove();let t=document.getElementById(Ze);t&&t.remove()}};f=new WeakMap,C=new WeakMap,T=new WeakMap,R=new WeakMap,me=new WeakMap,ge=new WeakMap,g=new WeakMap,$=new WeakMap,X=new WeakMap,P=new WeakMap,Y=new WeakMap,Z=new WeakMap,ee=new WeakMap,be=new WeakMap,fe=new WeakMap,_e=new WeakMap,xe=new WeakMap,U=new WeakMap,W=new WeakMap,A=new WeakMap,te=new WeakMap,ne=new WeakMap,oe=new WeakMap,ie=new WeakMap,G=new WeakMap,N=new WeakMap,E=new WeakMap,B=new WeakMap,M=new WeakMap,o=new WeakSet,et=d(function(){u(this,M,{log:w.log.bind(w),warn:w.warn.bind(w),error:w.error.bind(w)}),w.log=(...t)=>{e(this,M).log(...t),s(this,o,Ee).call(this,"log",t.map(String).join(" "))},w.warn=(...t)=>{e(this,M).warn(...t),s(this,o,Ee).call(this,"warn",t.map(String).join(" "))},w.error=(...t)=>{e(this,M).error(...t),s(this,o,Ee).call(this,"error",t.map(String).join(" "))}},"#interceptLogger"),tt=d(function(){e(this,M)&&(w.log=e(this,M).log,w.warn=e(this,M).warn,w.error=e(this,M).error,u(this,M,null))},"#restoreLogger"),Ee=d(function(t,n){let i={time:Date.now(),level:t,message:n};e(this,B).push(i),e(this,B).length>ct&&e(this,B).shift(),s(this,o,Re).call(this)},"#addLogEntry"),Re=d(function(){if(!e(this,E))return;let t=e(this,E).scrollHeight-e(this,E).scrollTop<=e(this,E).clientHeight+5;e(this,E).innerHTML="";for(let n of e(this,B)){let i=document.createElement("div");i.className="bluedot-hud__console-line bluedot-hud__console-line--".concat(n.level);let a=new Date(n.time),r="".concat(a.getHours().toString().padStart(2,"0"),":").concat(a.getMinutes().toString().padStart(2,"0"),":").concat(a.getSeconds().toString().padStart(2,"0"),".").concat(a.getMilliseconds().toString().padStart(3,"0"));i.innerHTML='<span class="bluedot-hud__console-time">'.concat(r,"</span> ").concat(s(this,o,nt).call(this,n.message)),e(this,E).appendChild(i)}t&&(e(this,E).scrollTop=e(this,E).scrollHeight)},"#updateConsole"),nt=d(function(t){let n=document.createElement("div");return n.textContent=t,n.innerHTML},"#escapeHtml"),ot=d(function(){let t=document.createElement("div");t.id=ht,t.className="bluedot-hud bluedot-hud--collapsed";let n=document.createElement("div");n.className="bluedot-hud__collapsed",n.addEventListener("click",()=>s(this,o,Ie).call(this)),u(this,$,document.createElement("span")),e(this,$).className="bluedot-hud__status-dot",u(this,X,document.createElement("span")),e(this,X).className="bluedot-hud__status-text",u(this,P,document.createElement("span")),e(this,P).className="bluedot-hud__coords",u(this,Y,document.createElement("span")),e(this,Y).className="bluedot-hud__heading",n.appendChild(e(this,$)),n.appendChild(e(this,X)),n.appendChild(e(this,P)),n.appendChild(e(this,Y));let i=document.createElement("div");i.className="bluedot-hud__expanded";let a=document.createElement("div");a.className="bluedot-hud__header",a.addEventListener("click",()=>s(this,o,Ie).call(this));let r=document.createElement("span");r.className="bluedot-hud__title",r.textContent="BlueDot Debug";let m=document.createElement("div");m.className="bluedot-hud__header-right";let p=document.createElement("button");p.className="bluedot-hud__export-btn",p.textContent="Export",p.addEventListener("click",Ce=>{Ce.stopPropagation(),Ke(e(this,f))});let c=document.createElement("span");c.className="bluedot-hud__collapse-icon",c.textContent="\u25BC",m.appendChild(p),m.appendChild(c),a.appendChild(r),a.appendChild(m);let b=document.createElement("div");b.className="bluedot-hud__content";let _=s(this,o,z).call(this,"Status"),y=document.createElement("div");y.className="bluedot-hud__row",u(this,Z,s(this,o,ce).call(this,"--")),u(this,ee,s(this,o,ce).call(this,"no")),y.appendChild(s(this,o,he).call(this,"Status:")),y.appendChild(e(this,Z)),y.appendChild(s(this,o,he).call(this,"Following:")),y.appendChild(e(this,ee)),_.appendChild(y);let x=s(this,o,z).call(this,"Position");u(this,be,s(this,o,F).call(this,x,"Lat")),u(this,fe,s(this,o,F).call(this,x,"Lon")),u(this,_e,s(this,o,F).call(this,x,"Accuracy")),u(this,xe,s(this,o,F).call(this,x,"Floor"));let re=s(this,o,z).call(this,"Heading"),ve=document.createElement("div");ve.className="bluedot-hud__heading-content";let ue=document.createElement("div");ue.className="bluedot-hud__compass";let Ne=document.createElement("div");Ne.className="bluedot-hud__compass-ring",u(this,W,document.createElement("div")),e(this,W).className="bluedot-hud__compass-needle";let Ye=document.createElement("div");Ye.className="bluedot-hud__compass-center";let lt=["N","E","S","W"];for(let Ce of lt){let Fe=document.createElement("span");Fe.className="bluedot-hud__compass-dir bluedot-hud__compass-dir--".concat(Ce.toLowerCase()),Fe.textContent=Ce,Ne.appendChild(Fe)}ue.appendChild(Ne),ue.appendChild(e(this,W)),ue.appendChild(Ye),u(this,U,document.createElement("div")),e(this,U).className="bluedot-hud__headings",ve.appendChild(ue),ve.appendChild(e(this,U)),re.appendChild(ve);let Q=s(this,o,z).call(this,"Anchor");u(this,A,s(this,o,F).call(this,Q,"Status")),u(this,te,s(this,o,F).call(this,Q,"Position")),u(this,ne,s(this,o,F).call(this,Q,"Set")),u(this,oe,s(this,o,F).call(this,Q,"TTL")),u(this,ie,s(this,o,F).call(this,Q,"Drift"));let We=s(this,o,z).call(this,"Sensors");u(this,G,document.createElement("div")),e(this,G).className="bluedot-hud__sensors",We.appendChild(e(this,G));let qe=s(this,o,z).call(this,"Tuning");u(this,N,document.createElement("div")),e(this,N).className="bluedot-hud__tuning",s(this,o,we).call(this,e(this,N)),qe.appendChild(e(this,N));let ke=s(this,o,z).call(this,"Console"),De=document.createElement("div");De.className="bluedot-hud__console-header";let ye=document.createElement("button");return ye.className="bluedot-hud__console-clear",ye.textContent="Clear",ye.addEventListener("click",()=>this.clearConsole()),De.appendChild(ye),ke.appendChild(De),u(this,E,document.createElement("div")),e(this,E).className="bluedot-hud__console",ke.appendChild(e(this,E)),b.appendChild(_),b.appendChild(x),b.appendChild(re),b.appendChild(Q),b.appendChild(We),b.appendChild(qe),b.appendChild(ke),i.appendChild(a),i.appendChild(b),t.appendChild(n),t.appendChild(i),t},"#createDOM"),z=d(function(t){let n=document.createElement("div");n.className="bluedot-hud__section";let i=document.createElement("div");return i.className="bluedot-hud__section-title",i.textContent=t,n.appendChild(i),n},"#createSection"),he=d(function(t){let n=document.createElement("span");return n.className="bluedot-hud__label",n.textContent=t,n},"#createLabel"),ce=d(function(t){let n=document.createElement("span");return n.className="bluedot-hud__value",n.textContent=t,n},"#createValue"),F=d(function(t,n){let i=document.createElement("div");i.className="bluedot-hud__row",i.appendChild(s(this,o,he).call(this,"".concat(n,":")));let a=s(this,o,ce).call(this,"--");return i.appendChild(a),t.appendChild(i),a},"#appendRow"),we=d(function(t){let n=document.createElement("div");n.className="bluedot-hud__tuning-group",n.innerHTML='<div class="bluedot-hud__tuning-group-title">Heading</div>',s(this,o,O).call(this,n,{id:"heading-responsiveness",label:"Heading responsiveness",description:"Higher = compass corrects heading faster (may jump)",min:0,max:100,value:e(this,g).heading.headingResponsiveness,onChange:d(r=>{e(this,g).heading.headingResponsiveness=r,s(this,o,H).call(this)},"onChange")}),s(this,o,O).call(this,n,{id:"compass-noise",label:"Rotation filtering",description:"Higher = ignore small turns, steadier heading",min:0,max:100,value:e(this,g).heading.compassNoiseTolerance,onChange:d(r=>{e(this,g).heading.compassNoiseTolerance=r,s(this,o,H).call(this)},"onChange")}),s(this,o,O).call(this,n,{id:"snap-threshold",label:"Heading snap threshold",description:"Higher = tolerate more drift before jumping",min:10,max:90,value:e(this,g).heading.headingSnapThreshold,unit:"\xB0",onChange:d(r=>{e(this,g).heading.headingSnapThreshold=r,s(this,o,H).call(this)},"onChange")}),s(this,o,Ue).call(this,n,{id:"magnetic-gating",label:"Magnetic disturbance gating",description:"On = ignore compass near metal/magnets",value:e(this,g).heading.magneticDisturbanceGating,onChange:d(r=>{e(this,g).heading.magneticDisturbanceGating=r,s(this,o,H).call(this)},"onChange")});let i=document.createElement("div");i.className="bluedot-hud__tuning-group",i.innerHTML='<div class="bluedot-hud__tuning-group-title">Motion (PDR)</div>',s(this,o,Ue).call(this,i,{id:"pdr-enabled",label:"PDR enabled",description:"On = dot moves with detected steps",value:e(this,g).motion.pdrEnabled,onChange:d(r=>{e(this,g).motion.pdrEnabled=r,s(this,o,H).call(this)},"onChange")}),s(this,o,O).call(this,i,{id:"step-sensitivity",label:"Step sensitivity",description:"Higher = more steps detected, more false positives",min:0,max:100,value:e(this,g).motion.stepSensitivity,onChange:d(r=>{e(this,g).motion.stepSensitivity=r,s(this,o,H).call(this)},"onChange")}),s(this,o,O).call(this,i,{id:"step-length",label:"Average step length",description:"Higher = dot moves farther per step",min:.4,max:1.2,step:.05,value:e(this,g).motion.averageStepLength,unit:"m",onChange:d(r=>{e(this,g).motion.averageStepLength=r,s(this,o,H).call(this)},"onChange")}),s(this,o,O).call(this,i,{id:"stride-variability",label:"Stride variability",description:"Higher = faster walking = longer steps",min:0,max:100,value:e(this,g).motion.strideVariability,onChange:d(r=>{e(this,g).motion.strideVariability=r,s(this,o,H).call(this)},"onChange")});let a=document.createElement("button");a.className="bluedot-hud__reset-btn",a.textContent="Reset to Defaults",a.addEventListener("click",()=>s(this,o,it).call(this)),t.appendChild(n),t.appendChild(i),t.appendChild(a)},"#createTuningControls"),O=d(function(t,n){var _,y;let i=document.createElement("div");i.className="bluedot-hud__tuning-row";let a=document.createElement("div");a.className="bluedot-hud__tuning-label-row";let r=document.createElement("label");r.className="bluedot-hud__tuning-label",r.htmlFor="bluedot-tuning-".concat(n.id),r.textContent=n.label;let m=document.createElement("div");m.className="bluedot-hud__tuning-desc",m.textContent=n.description,a.appendChild(r),a.appendChild(m);let p=document.createElement("div");p.className="bluedot-hud__tuning-control";let c=document.createElement("input");c.type="range",c.id="bluedot-tuning-".concat(n.id),c.className="bluedot-hud__slider",c.min=String(n.min),c.max=String(n.max),c.step=String((_=n.step)!=null?_:1),c.value=String(n.value);let b=document.createElement("span");b.className="bluedot-hud__slider-value",b.textContent="".concat(n.value).concat((y=n.unit)!=null?y:""),c.addEventListener("input",()=>{var re;let x=parseFloat(c.value);b.textContent="".concat(n.step&&n.step<1?x.toFixed(2):x).concat((re=n.unit)!=null?re:""),n.onChange(x)}),p.appendChild(c),p.appendChild(b),i.appendChild(a),i.appendChild(p),t.appendChild(i)},"#createSlider"),Ue=d(function(t,n){let i=document.createElement("div");i.className="bluedot-hud__tuning-row bluedot-hud__tuning-row--toggle";let a=document.createElement("div");a.className="bluedot-hud__tuning-label-col";let r=document.createElement("label");r.className="bluedot-hud__tuning-label",r.htmlFor="bluedot-tuning-".concat(n.id),r.textContent=n.label;let m=document.createElement("div");m.className="bluedot-hud__tuning-desc",m.textContent=n.description,a.appendChild(r),a.appendChild(m);let p=document.createElement("input");p.type="checkbox",p.id="bluedot-tuning-".concat(n.id),p.className="bluedot-hud__toggle",p.checked=n.value,p.addEventListener("change",()=>{n.onChange(p.checked)}),i.appendChild(a),i.appendChild(p),t.appendChild(i)},"#createToggle"),H=d(function(){let t=$e(e(this,g).heading);e(this,f).Fusion.headingFilter.configure(t);let n=Ae(e(this,g).motion),i=e(this,f).Sensors.get("devicemotion");i==null||i.configure(n);let a=e(this,f).Sensors.get("deviceorientation");a==null||a.configure({deltaThreshold:e(this,g).heading.headingChangeThreshold})},"#applyTuning"),it=d(function(){u(this,g,{heading:S({},V.heading),motion:S({},V.motion)}),s(this,o,H).call(this),e(this,N).innerHTML="",s(this,o,we).call(this,e(this,N))},"#resetTuning"),Ie=d(function(){u(this,T,!e(this,T)),e(this,C).classList.toggle("bluedot-hud--collapsed",e(this,T)),e(this,C).classList.toggle("bluedot-hud--expanded",!e(this,T))},"#toggle"),st=d(function(){let t=e(this,f).on("position-update",()=>s(this,o,Pe).call(this)),n=e(this,f).on("status-change",()=>s(this,o,ze).call(this)),i=e(this,f).on("follow-change",()=>s(this,o,Ge).call(this)),a=e(this,f).on("anchor-set",()=>s(this,o,pe).call(this)),r=e(this,f).on("anchor-expired",()=>s(this,o,pe).call(this));e(this,R).push(t,n,i,a,r);let m=e(this,f).Sensors.on("absolute-update",({sensorId:b,update:_})=>{_.heading!==void 0&&(e(this,me).set(b,_.heading),s(this,o,Se).call(this)),(_.accuracy!==void 0||_.confidence!==void 0)&&(e(this,ge).set(b,{accuracy:_.accuracy,confidence:_.confidence}),s(this,o,Le).call(this))});e(this,R).push(m);let p=setInterval(()=>s(this,o,pe).call(this),1e3);e(this,R).push(()=>clearInterval(p));let c=setInterval(()=>s(this,o,Le).call(this),1e3);e(this,R).push(()=>clearInterval(c))},"#subscribeToEvents"),at=d(function(){s(this,o,ze).call(this),s(this,o,Pe).call(this),s(this,o,Ge).call(this),s(this,o,Se).call(this),s(this,o,pe).call(this),s(this,o,Le).call(this)},"#updateAll"),ze=d(function(){let t=e(this,f).status;e(this,X).textContent=t,e(this,Z).textContent=t,e(this,$).classList.remove("bluedot-hud__status-dot--active","bluedot-hud__status-dot--inactive","bluedot-hud__status-dot--error"),t==="active"?e(this,$).classList.add("bluedot-hud__status-dot--active"):t==="inactive"||t==="hidden"?e(this,$).classList.add("bluedot-hud__status-dot--inactive"):e(this,$).classList.add("bluedot-hud__status-dot--error")},"#updateStatus"),Pe=d(function(){var a;let t=e(this,f).coordinate,n=e(this,f).accuracy,i=e(this,f).floor;t?e(this,P).textContent="".concat(t.latitude.toFixed(5),", ").concat(t.longitude.toFixed(5)):e(this,P).textContent="--",e(this,be).textContent=t?t.latitude.toFixed(6):"--",e(this,fe).textContent=t?t.longitude.toFixed(6):"--",e(this,_e).textContent=n!=null?"".concat(n.toFixed(1),"m"):"--",e(this,xe).textContent=(a=i==null?void 0:i.name)!=null?a:"--",s(this,o,Se).call(this)},"#updatePosition"),Ge=d(function(){e(this,ee).textContent=e(this,f).isFollowing?"yes":"no"},"#updateFollowing"),Se=d(function(){let t=e(this,f).heading;e(this,Y).textContent=t!=null?"".concat(t.toFixed(0),"\xB0"):"--",t!=null&&(e(this,W).style.transform="translate(-50%, -100%) rotate(".concat(t,"deg)")),e(this,U).innerHTML="";let n=document.createElement("div");n.className="bluedot-hud__heading-row bluedot-hud__heading-row--displayed",n.innerHTML='\n <span class="bluedot-hud__heading-label">Displayed</span>\n <span class="bluedot-hud__heading-value">'.concat(t!=null?"".concat(t.toFixed(0),"\xB0"):"--","</span>\n "),e(this,U).appendChild(n);for(let[i,a]of e(this,me)){let r=document.createElement("div");r.className="bluedot-hud__heading-row";let m=a!=null&&t!=null?s(this,o,dt).call(this,a-t):null,p=m!=null?" (".concat(m>=0?"+":"").concat(m.toFixed(0),"\xB0)"):"",c=m!=null&&Math.abs(m)>10?"bluedot-hud__heading-diff--warning":"";r.innerHTML='\n <span class="bluedot-hud__heading-label">'.concat(i,'</span>\n <span class="bluedot-hud__heading-value">').concat(a!=null?"".concat(a.toFixed(0),"\xB0"):"--",'<span class="bluedot-hud__heading-diff ').concat(c,'">').concat(p,"</span></span>\n "),e(this,U).appendChild(r)}},"#updateHeadings"),dt=d(function(t){for(;t>180;)t-=360;for(;t<-180;)t+=360;return t},"#normalizeAngleDiff"),pe=d(function(){let t=e(this,f).anchor,n=e(this,f).displacement;if(t){e(this,A).textContent="set (".concat(t.sensorId,")"),e(this,A).classList.add("bluedot-hud__value--enabled"),e(this,A).classList.remove("bluedot-hud__value--disabled"),e(this,te).textContent="".concat(t.latitude.toFixed(6),", ").concat(t.longitude.toFixed(6)),e(this,ne).textContent=mt(t.timestamp),e(this,oe).textContent=gt(t.timestamp,t.ttl);let i=Math.sqrt(n.dx**2+n.dy**2);e(this,ie).textContent="dx=".concat(n.dx>=0?"+":"").concat(n.dx.toFixed(2),"m, dy=").concat(n.dy>=0?"+":"").concat(n.dy.toFixed(2),"m (").concat(i.toFixed(2),"m)")}else e(this,A).textContent="none",e(this,A).classList.remove("bluedot-hud__value--enabled"),e(this,A).classList.add("bluedot-hud__value--disabled"),e(this,te).textContent="--",e(this,ne).textContent="--",e(this,oe).textContent="--",e(this,ie).textContent="--"},"#updateAnchor"),Le=d(function(){var t;e(this,G).innerHTML="";for(let[n,i]of e(this,f).Sensors.getAll()){let a=document.createElement("div");a.className="bluedot-hud__row";let r="".concat(n,":");n==="geolocation"&&(r=i.isLikelyIPS?"IPS (Wi-Fi):":"GPS:");let m=s(this,o,he).call(this,r),p=i.isEnabled?"enabled":"disabled",c=e(this,ge).get(n);if(i.isEnabled&&c){let x=[];c.accuracy!==void 0&&x.push("".concat(c.accuracy.toFixed(1),"m")),c.confidence!==void 0&&x.push("conf=".concat((c.confidence*100).toFixed(0),"%")),x.length>0&&(p=x.join(", "))}let b=s(this,o,ce).call(this,p);b.classList.add(i.isEnabled?"bluedot-hud__value--enabled":"bluedot-hud__value--disabled");let _=n==="geolocation"?i:null,y=(t=_==null?void 0:_.isLikelyIPS)!=null?t:!1;(c==null?void 0:c.confidence)!==void 0&&c.confidence<.5&&!y&&b.classList.add("bluedot-hud__value--warning"),a.appendChild(m),a.appendChild(b),e(this,G).appendChild(a)}},"#updateSensors"),d(Be,"DebugHUD");var Me=Be;D();var v,se,ae,Ve=class Ve{constructor(t=100){h(this,v,[]);h(this,se);h(this,ae,0);u(this,se,t)}record(t,n=Date.now()){e(this,v).push(t),e(this,v).length>e(this,se)&&e(this,v).shift(),u(this,ae,n)}getRate(){if(e(this,v).length<2)return 0;let t=e(this,ae)-(Date.now()-e(this,se)*100);return t>0?e(this,v).length/t*1e3:0}getAverage(){if(e(this,v).length===0)return 0;let t=0;for(let n of e(this,v))t+=n;return t/e(this,v).length}getLatest(){return e(this,v)[e(this,v).length-1]}getCount(){return e(this,v).length}clear(){u(this,v,[]),u(this,ae,0)}};v=new WeakMap,se=new WeakMap,ae=new WeakMap,d(Ve,"MetricTracker");var q=Ve,k,de,le,He,Oe=class Oe{constructor(t=5e3){h(this,le);h(this,k,[]);h(this,de);u(this,de,t)}tick(t=Date.now()){e(this,k).push(t),s(this,le,He).call(this,t)}getRate(t=Date.now()){return s(this,le,He).call(this,t),e(this,k).length===0?0:e(this,k).length/e(this,de)*1e3}getCount(t=Date.now()){return s(this,le,He).call(this,t),e(this,k).length}clear(){u(this,k,[])}};k=new WeakMap,de=new WeakMap,le=new WeakSet,He=d(function(t){let n=t-e(this,de);for(;e(this,k).length>0&&e(this,k)[0]<n;)e(this,k).shift()},"#prune"),d(Oe,"EventCounter");var J=Oe,K,j,Xe=class Xe{constructor(){h(this,K,new Map);h(this,j,!1);L(this,"compassUpdates",new J);L(this,"gyroUpdates",new J);L(this,"stepsDetected",new J);L(this,"positionUpdates",new J);L(this,"compassHeading",new q(50));L(this,"gyroAngularVelocity",new q(50));L(this,"stepLength",new q(20));L(this,"positionAccuracy",new q(20));L(this,"isMoving",!1);L(this,"magneticDisturbanceActive",!1);L(this,"lastFusedHeading",null)}enable(){u(this,j,!0)}disable(){u(this,j,!1)}get isEnabled(){return e(this,j)}emit(t,n){if(!e(this,j))return;let i=Date.now();switch(t){case"compass-update":this.compassUpdates.tick(i),this.compassHeading.record(n.heading,i);break;case"gyro-update":this.gyroUpdates.tick(i),this.gyroAngularVelocity.record(n.angularVelocity,i);break;case"step-detected":this.stepsDetected.tick(i),this.stepLength.record(n.stepLength,i);break;case"motion-state":this.isMoving=n.isMoving;break;case"magnetic-disturbance":this.magneticDisturbanceActive=n.active;break;case"heading-fused":this.lastFusedHeading=n.heading;break;case"position-update":this.positionUpdates.tick(i),this.positionAccuracy.record(n.accuracy,i);break}let a=e(this,K).get(t);if(a)for(let r of a)r(n)}on(t,n){let i=e(this,K).get(t);return i||(i=new Set,e(this,K).set(t,i)),i.add(n),()=>{i.delete(n)}}getSummary(){return{compassRate:this.compassUpdates.getRate(),gyroRate:this.gyroUpdates.getRate(),stepRate:this.stepsDetected.getRate(),positionRate:this.positionUpdates.getRate(),avgCompassHeading:this.compassHeading.getAverage(),avgGyroVelocity:this.gyroAngularVelocity.getAverage(),avgStepLength:this.stepLength.getAverage(),avgAccuracy:this.positionAccuracy.getAverage(),isMoving:this.isMoving,magneticDisturbanceActive:this.magneticDisturbanceActive,lastFusedHeading:this.lastFusedHeading}}clear(){this.compassUpdates.clear(),this.gyroUpdates.clear(),this.stepsDetected.clear(),this.positionUpdates.clear(),this.compassHeading.clear(),this.gyroAngularVelocity.clear(),this.stepLength.clear(),this.positionAccuracy.clear(),this.isMoving=!1,this.magneticDisturbanceActive=!1,this.lastFusedHeading=null}destroy(){this.clear(),e(this,K).clear(),u(this,j,!1)}};K=new WeakMap,j=new WeakMap,d(Xe,"Telemetry");var je=Xe;function $t(l){return new Me(l)}d($t,"enableDebugHUD");export{V as DEFAULT_TUNING_CONFIG,J as EventCounter,q as MetricTracker,je as Telemetry,$t as enableDebugHUD,$e as headingConfigToFilterParams,Ae as motionConfigToSensorParams,rt as normalizeTuningConfig};
|