ocearo-ui 0.1.22 → 2.0.1

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.
Files changed (158) hide show
  1. package/404.html +1 -1
  2. package/README.fr.md +141 -157
  3. package/README.md +137 -157
  4. package/__next.__PAGE__.txt +19 -5
  5. package/__next._full.txt +12 -12
  6. package/__next._tree.txt +2 -2
  7. package/_next/static/chunks/0-c2-u5p6bxzo.js +1 -0
  8. package/_next/static/chunks/0h2qsuyze9ds1.js +1 -0
  9. package/_next/static/chunks/0iqdztntvxh3c.js +119 -0
  10. package/_next/static/chunks/0iztd835j5p1n.js +700 -0
  11. package/_next/static/chunks/{2nxsyowmuwpjy.js → 0jfox92up1jvy.js} +1 -1
  12. package/_next/static/chunks/0jpa5m78l0ib0.js +1 -0
  13. package/_next/static/chunks/0kpstejrka-7k.js +1 -0
  14. package/_next/static/chunks/0m7wbuocx-b4_.js +9 -0
  15. package/_next/static/chunks/0n95joti2n2py.js +3 -0
  16. package/_next/static/chunks/0ohleay4roayh.js +353 -0
  17. package/_next/static/chunks/0on1skx9l54-9.js +1 -0
  18. package/_next/static/chunks/0voiofm58khqd.js +1 -0
  19. package/_next/static/chunks/0w_skktmh3e48.js +1 -0
  20. package/_next/static/chunks/0y-dctk-kmqss.js +1 -0
  21. package/_next/static/chunks/0zwc9m4qgtwle.js +1 -0
  22. package/_next/static/chunks/11awvgcou7v4r.js +1 -0
  23. package/_next/static/chunks/144mjqdrx42lq.js +1 -0
  24. package/_next/static/chunks/15imr2-f_8n-x.js +1 -0
  25. package/_next/static/chunks/18_i6mf6hb_c7.js +1 -0
  26. package/_next/static/chunks/1d81m3g9jqkob.js +1 -0
  27. package/_next/static/chunks/1ed7ayfg19cjb.js +1 -0
  28. package/_next/static/chunks/1epya-yh2wvj2.js +1 -0
  29. package/_next/static/chunks/1exvcc71cgr4t.js +446 -0
  30. package/_next/static/chunks/1g8fbzv0hu0i2.js +1 -0
  31. package/_next/static/chunks/1gq4t2dyr7rq3.js +1 -0
  32. package/_next/static/chunks/1gt2hhqk1821k.js +9 -0
  33. package/_next/static/chunks/1l-jew0-1-3eq.js +30 -0
  34. package/_next/static/chunks/1pa1cfmfts0i9.js +1 -0
  35. package/_next/static/chunks/1ptj3mv8b_tzs.js +1 -0
  36. package/_next/static/chunks/1w1xks0hp_tlr.js +346 -0
  37. package/_next/static/chunks/1xekc18cyi4sx.js +1 -0
  38. package/_next/static/chunks/1y35unwvy8p98.js +1 -0
  39. package/_next/static/chunks/1zm03hw2ylxw8.js +1 -0
  40. package/_next/static/chunks/2aq8orcir5h03.js +1 -0
  41. package/_next/static/chunks/2dvwb-mfasp68.js +1 -0
  42. package/_next/static/chunks/2fdpvhx4oo81h.js +1 -0
  43. package/_next/static/chunks/2g-xpe7xnropn.js +409 -0
  44. package/_next/static/chunks/2kmptoy43h0mx.js +1 -0
  45. package/_next/static/chunks/2kwn4iymxaom3.js +1 -0
  46. package/_next/static/chunks/2n86yq1wz1yx7.js +1 -0
  47. package/_next/static/chunks/2rebcvig176xk.js +564 -0
  48. package/_next/static/chunks/2ryo_bbmt6t74.css +3 -0
  49. package/_next/static/chunks/2s6w3x5jnc2tg.js +1 -0
  50. package/_next/static/chunks/2w44atvyp9o_w.js +1 -0
  51. package/_next/static/chunks/2w71oj1brox5z.js +1 -0
  52. package/_next/static/chunks/2wayx8t5r5fi9.js +1 -0
  53. package/_next/static/chunks/3--qzv1u6c7_7.js +1 -0
  54. package/_next/static/chunks/32yn_fc-es66m.js +22 -0
  55. package/_next/static/chunks/34wvn5zw0a69w.js +1 -0
  56. package/_next/static/chunks/37t6vg8fb1-z8.js +1 -0
  57. package/_next/static/chunks/3nm7o0eq5abhg.js +1 -0
  58. package/_next/static/chunks/3p9ziqn6r35qf.js +1 -0
  59. package/_next/static/chunks/3q8o52_juxmdp.js +1 -0
  60. package/_next/static/chunks/3s6nzrbk-8mnv.js +31 -0
  61. package/_next/static/chunks/3td9mnhvcj9cq.js +1 -0
  62. package/_next/static/chunks/3wwn1rti8oc_r.js +1 -0
  63. package/_next/static/chunks/3zqx8h9yg5-ch.js +1 -0
  64. package/_next/static/chunks/turbopack-1h111qg8l92rw.js +1 -0
  65. package/_not-found/__next._full.txt +13 -13
  66. package/_not-found/__next._not-found.__PAGE__.txt +19 -2
  67. package/_not-found/__next._tree.txt +2 -2
  68. package/_not-found.html +1 -1
  69. package/_not-found.txt +13 -13
  70. package/apple-touch-icon.png +0 -0
  71. package/boats/boats.json +40 -5
  72. package/favicon-96x96.png +0 -0
  73. package/favicon.ico +0 -0
  74. package/favicon.svg +1 -3
  75. package/icons/favicon-16x16.png +0 -0
  76. package/icons/favicon-32x32.png +0 -0
  77. package/icons/favicon-48x48.png +0 -0
  78. package/icons/icon-192x192.png +0 -0
  79. package/icons/icon-512x512.png +0 -0
  80. package/icons/ocearo.webp +0 -0
  81. package/index.html +1 -1
  82. package/index.txt +12 -12
  83. package/manifest.json +2 -3
  84. package/package.json +15 -14
  85. package/settings/__next._full.txt +15 -15
  86. package/settings/__next._tree.txt +2 -2
  87. package/settings/__next.settings.__PAGE__.txt +22 -5
  88. package/settings.html +1 -1
  89. package/settings.txt +15 -15
  90. package/__next._head.txt +0 -6
  91. package/__next._index.txt +0 -5
  92. package/_next/static/chunks/0-z15txb4-uhu.js +0 -409
  93. package/_next/static/chunks/009rlietvsaq2.js +0 -1
  94. package/_next/static/chunks/070stlm97b9a2.js +0 -1
  95. package/_next/static/chunks/0abo2oxxw3hpi.js +0 -1
  96. package/_next/static/chunks/0jzbiie0nzar2.js +0 -1
  97. package/_next/static/chunks/0kinaai2rvd43.js +0 -9
  98. package/_next/static/chunks/0l9s4rhr00adq.js +0 -1
  99. package/_next/static/chunks/0qj7yy4f6sk8y.js +0 -455
  100. package/_next/static/chunks/0ri_um14-5x7u.js +0 -1
  101. package/_next/static/chunks/0uvr7xkt_5uno.js +0 -1
  102. package/_next/static/chunks/0yf1ifg_o1bq6.js +0 -1
  103. package/_next/static/chunks/0zbzk2ob0li1n.js +0 -1
  104. package/_next/static/chunks/0zjxnzbxh76mt.js +0 -1
  105. package/_next/static/chunks/17ma1x64d-211.js +0 -1
  106. package/_next/static/chunks/19xb2y6sgfnza.js +0 -1
  107. package/_next/static/chunks/1bz0tcmhjmjgh.js +0 -1
  108. package/_next/static/chunks/1d4h-sglyo8ft.js +0 -1
  109. package/_next/static/chunks/1gizigk3w6q7j.js +0 -31
  110. package/_next/static/chunks/1ptwltjb3h6jf.js +0 -4
  111. package/_next/static/chunks/1q572rz5m8mb-.js +0 -1
  112. package/_next/static/chunks/1rkf8qtk5-48h.js +0 -1
  113. package/_next/static/chunks/1sq_733weprvs.js +0 -1
  114. package/_next/static/chunks/26e1o1as-77nq.js +0 -172
  115. package/_next/static/chunks/27hn45pv56pv7.js +0 -393
  116. package/_next/static/chunks/28y-j215vt42m.js +0 -1
  117. package/_next/static/chunks/2a0yjir_3mk1m.js +0 -1
  118. package/_next/static/chunks/2atijj_pkc4uc.js +0 -2
  119. package/_next/static/chunks/2ccpehidlaq88.js +0 -1
  120. package/_next/static/chunks/2fy4q1c5l3tpj.js +0 -1
  121. package/_next/static/chunks/2lvvt2f1l5sfu.js +0 -1
  122. package/_next/static/chunks/2lw7kypuhij1_.css +0 -3
  123. package/_next/static/chunks/2nd5amcst4lhp.js +0 -1
  124. package/_next/static/chunks/2pwmb4pkqygy_.js +0 -1
  125. package/_next/static/chunks/2q_83f24jeg0e.js +0 -1
  126. package/_next/static/chunks/2rsdqsatgq9ta.js +0 -1
  127. package/_next/static/chunks/2udirievybq_j.js +0 -1
  128. package/_next/static/chunks/2urimbxg5bqv3.js +0 -1
  129. package/_next/static/chunks/32cbrrsp-x35l.js +0 -1
  130. package/_next/static/chunks/36ra6xjie0dsv.js +0 -9
  131. package/_next/static/chunks/3iuz3f0429awx.js +0 -1
  132. package/_next/static/chunks/3jh1u-s3k0bkk.js +0 -1
  133. package/_next/static/chunks/3jupxlga7r_do.js +0 -1
  134. package/_next/static/chunks/3m57lnggu30tr.js +0 -243
  135. package/_next/static/chunks/3myql5zu0rstt.js +0 -425
  136. package/_next/static/chunks/3rhgquok36e79.js +0 -1
  137. package/_next/static/chunks/42dfiu6iby3fq.js +0 -1
  138. package/_next/static/chunks/43ps2cu5ahf8n.js +0 -3
  139. package/_next/static/chunks/turbopack-0pirmko-w-775.js +0 -1
  140. package/_not-found/__next._head.txt +0 -6
  141. package/_not-found/__next._index.txt +0 -5
  142. package/_not-found/__next._not-found.txt +0 -5
  143. package/boats/ais/ais-30.glb +0 -0
  144. package/boats/ais/ais-31.glb +0 -0
  145. package/boats/ais/ais-35.glb +0 -0
  146. package/boats/ais/ais-36.glb +0 -0
  147. package/boats/ais/ais-37.glb +0 -0
  148. package/boats/ais/ais-40.glb +0 -0
  149. package/boats/ais/ais-50.glb +0 -0
  150. package/boats/ais/ais-60.glb +0 -0
  151. package/boats/ais/ais-70.glb +0 -0
  152. package/boats/ais/ais-80.glb +0 -0
  153. package/settings/__next._head.txt +0 -6
  154. package/settings/__next._index.txt +0 -5
  155. package/settings/__next.settings.txt +0 -5
  156. /package/_next/static/{sct9rcMTcCyBLHTxQQ75- → 01VWnAYjs9QwBnnMyWbQF}/_buildManifest.js +0 -0
  157. /package/_next/static/{sct9rcMTcCyBLHTxQQ75- → 01VWnAYjs9QwBnnMyWbQF}/_clientMiddlewareManifest.js +0 -0
  158. /package/_next/static/{sct9rcMTcCyBLHTxQQ75- → 01VWnAYjs9QwBnnMyWbQF}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,13992,e=>{"use strict";var t=e.i(43476),a=e.i(71645),i=e.i(49721),n=e.i(68757);e.i(85269);var s=e.i(22831),l=e.i(66799),r=e.i(85709),o=e.i(46991),c=e.i(95430),d=e.i(71029);let u="px-3 py-2 rounded-lg font-bold uppercase tracking-wider text-label border-2 border-white/80 disabled:opacity-40 transition-colors",m=({mob:e,now:r,ownPosition:c,heading:m,canNavigate:h})=>{var g;let{t:b}=(0,s.useTranslation)(),[p,x]=(0,a.useState)(null),[f,v]=(0,a.useState)(!1),[N,M]=(0,a.useState)(null),w=(0,a.useRef)(null);(0,a.useEffect)(()=>()=>clearTimeout(w.current),[]);let j=e.status||{},S=e.createdAt?Date.parse(e.createdAt):NaN,T=(0,d.distanceAndBearing)(c,e.position),y=async(e,t)=>{x(e),M(null);try{await t()}catch(e){M(e?.message||String(e))}finally{x(null)}};return(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)(i.FontAwesomeIcon,{icon:n.faLifeRing,className:"text-3xl animate-pulse"}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)("div",{className:"text-label sm:text-value font-semibold uppercase tracking-wider leading-tight",children:b("mob.title")}),e.message&&"Person Overboard!"!==e.message&&(0,t.jsx)("div",{className:"text-label opacity-90 truncate",children:e.message})]}),(0,t.jsxs)("div",{className:"text-right font-mono",children:[(0,t.jsx)("div",{className:"text-value font-bold",children:(e=>{if(!Number.isFinite(e)||e<0)return"--:--";let t=Math.floor(e/1e3),a=Math.floor(t/3600),i=String(Math.floor(t%3600/60)).padStart(2,"0"),n=String(t%60).padStart(2,"0");return a>0?`${a}:${i}:${n}`:`${i}:${n}`})(r-S)}),(0,t.jsx)("div",{className:"text-caption uppercase opacity-80",children:b("mob.elapsed")})]})]}),(0,t.jsx)("div",{className:"flex items-center gap-4 font-mono text-value",children:T?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:(g=T.distance)<200?`${Math.round(g)} m`:`${(0,o.convertDistanceUnit)(g)} ${(0,o.getDistanceUnitLabel)()}`}),(0,t.jsxs)("span",{className:"flex items-center gap-2",children:[Number.isFinite(m)&&(0,t.jsx)(i.FontAwesomeIcon,{icon:n.faArrowUp,title:b("mob.relativeBearing"),style:{transform:`rotate(${T.bearing-180*m/Math.PI}deg)`}}),String(Math.round(T.bearing)%360).padStart(3,"0"),"°T"]})]}):(0,t.jsx)("span",{className:"text-label opacity-80",children:b("mob.noPosition")})}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[j.canAcknowledge&&!j.acknowledged&&(0,t.jsx)("button",{type:"button",className:`${u} bg-white text-oRed`,disabled:null!==p,onClick:()=>y("ack",()=>l.default.notificationAction(e.id,"acknowledge")),children:b("mob.acknowledge")}),h&&e.position&&(0,t.jsx)("button",{type:"button",className:`${u} hover:bg-white/20`,disabled:null!==p,onClick:()=>y("goto",()=>l.default.setDestinationPosition(e.position.latitude,e.position.longitude)),children:b("mob.navigateTo")}),!1!==j.canClear&&e.id&&(0,t.jsx)("button",{type:"button",className:`${u} ${f?"bg-white text-oRed":"hover:bg-white/20"}`,disabled:null!==p,onClick:()=>{if(!f){v(!0),w.current=setTimeout(()=>v(!1),5e3);return}clearTimeout(w.current),v(!1),y("clear",()=>l.default.clearNotification(e.id))},children:b(f?"mob.confirmClear":"mob.clear")})]}),N&&(0,t.jsx)("div",{className:"text-label bg-black/30 rounded px-2 py-1",children:N})]})},h=({mobs:e,canNavigate:i})=>{let n=(0,r.useSignalKPath)("navigation.position"),s=(0,r.useSignalKPath)("navigation.headingTrue"),l=(0,r.useSignalKPath)("navigation.courseOverGroundTrue"),o=Number.isFinite(s)?s:l,[d,u]=(0,a.useState)(()=>(0,c.vesselNow)().getTime());return(0,a.useEffect)(()=>{let e=setInterval(()=>u((0,c.vesselNow)().getTime()),1e3);return()=>clearInterval(e)},[]),(0,t.jsx)("div",{role:"alert",className:"absolute top-[calc(0.75rem+env(safe-area-inset-top))] left-1/2 -translate-x-1/2 z-40 w-[min(32rem,calc(100%-2rem))] max-h-[70%] overflow-y-auto bg-oRed text-white rounded-2xl shadow-2xl border-2 border-white/60 p-4 flex flex-col gap-4 divide-y divide-white/30",children:e.map(e=>(0,t.jsx)("div",{className:"pt-4 first:pt-0",children:(0,t.jsx)(m,{mob:e,now:d,ownPosition:n,heading:o,canNavigate:i})},e.path))})};e.s(["default",0,()=>{let e=(0,d.useActiveMobs)(),a=(0,d.useMobSupport)();return 0===e.length?null:(0,t.jsx)(h,{mobs:e,canNavigate:a.navigate})}])},50637,function(e){e.n(e.i(13992))},71029,e=>{"use strict";var t=e.i(71645),a=e.i(85709),i=e.i(66799),n=e.i(46991);let s="notifications.mob",l=e=>e*Math.PI/180;e.s(["distanceAndBearing",0,(e,t)=>{if(!Number.isFinite(e?.latitude)||!Number.isFinite(e?.longitude)||!Number.isFinite(t?.latitude)||!Number.isFinite(t?.longitude))return null;let a=l(e.latitude),i=l(t.latitude),s=l(t.longitude-e.longitude),r=Math.sin((i-a)/2)**2+Math.cos(a)*Math.cos(i)*Math.sin(s/2)**2;return{distance:2*n.EARTH_RADIUS_METERS*Math.asin(Math.min(1,Math.sqrt(r))),bearing:(180*Math.atan2(Math.sin(s)*Math.cos(i),Math.cos(a)*Math.sin(i)-Math.sin(a)*Math.cos(i)*Math.cos(s))/Math.PI+360)%360}},"useActiveMobs",0,()=>{let e=(0,a.useSignalKPrefix)(s);return(0,t.useMemo)(()=>Object.entries(e).filter(([e,t])=>(e===s||e.startsWith(`${s}.`))&&t?.state&&"normal"!==t.state).map(([e,t])=>({...t,path:e})).sort((e,t)=>String(e.createdAt??"").localeCompare(String(t.createdAt??""))),[e])},"useMobSupport",0,()=>{let e=(()=>{let[e,a]=(0,t.useState)(null);return(0,t.useEffect)(()=>{let e=!1,t=null,n=async()=>{let s=await i.default.getFeatures();e||(s?a(s):t=setTimeout(n,3e4))};return n(),()=>{e=!0,clearTimeout(t)}},[]),e})();return(0,t.useMemo)(()=>({raise:!!e?.apis.includes("notifications"),navigate:!!e?.apis.includes("course")}),[e])}],71029)}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,81694,e=>{"use strict";var t=e.i(43476),i=e.i(71645),n=e.i(70703);let r={toVector:(e,t)=>(void 0===e&&(e=t),Array.isArray(e)?e:[e,e]),add:(e,t)=>[e[0]+t[0],e[1]+t[1]],sub:(e,t)=>[e[0]-t[0],e[1]-t[1]],addTo(e,t){e[0]+=t[0],e[1]+=t[1]},subTo(e,t){e[0]-=t[0],e[1]-=t[1]}};function s(e,t,i){return 0===t||Math.abs(t)===1/0?Math.pow(e,5*i):e*t*i/(t+i*e)}function o(e,t,i,n=.15){return 0===n?Math.max(t,Math.min(e,i)):e<t?-s(t-e,i-t,n)+t:e>i?+s(e-i,i-t,n)+i:e}function a(e,t,i){var n;return(t="symbol"==typeof(n=function(e,t){if("object"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var n=i.call(e,t||"default");if("object"!=typeof n)return n;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(t,"string"))?n:String(n))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function l(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),i.push.apply(i,n)}return i}function c(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?l(Object(i),!0).forEach(function(t){a(e,t,i[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):l(Object(i)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))})}return e}let u={pointer:{start:"down",change:"move",end:"up"},mouse:{start:"down",change:"move",end:"up"},touch:{start:"start",change:"move",end:"end"},gesture:{start:"start",change:"change",end:"end"}};function d(e){return e?e[0].toUpperCase()+e.slice(1):""}let h=["enter","leave"],f=["gotpointercapture","lostpointercapture"];function p(e){return"touches"in e}function m(e){return p(e)?"touch":"pointerType"in e?e.pointerType:"mouse"}function v(e){return p(e)?("touchend"===e.type||"touchcancel"===e.type?e.changedTouches:e.targetTouches)[0]:e}function g(e){let t=v(e);return p(e)?t.identifier:t.pointerId}function b(e){let t=v(e);return[t.clientX,t.clientY]}function w(e,...t){return"function"==typeof e?e(...t):e}function x(){}function y(e,t){return Object.assign({},t,e||{})}class _{constructor(e,t,i){this.ctrl=e,this.args=t,this.key=i,this.state||(this.state={},this.computeValues([0,0]),this.computeInitial(),this.init&&this.init(),this.reset())}get state(){return this.ctrl.state[this.key]}set state(e){this.ctrl.state[this.key]=e}get shared(){return this.ctrl.state.shared}get eventStore(){return this.ctrl.gestureEventStores[this.key]}get timeoutStore(){return this.ctrl.gestureTimeoutStores[this.key]}get config(){return this.ctrl.config[this.key]}get sharedConfig(){return this.ctrl.config.shared}get handler(){return this.ctrl.handlers[this.key]}reset(){let{state:e,shared:t,ingKey:i,args:n}=this;t[i]=e._active=e.active=e._blocked=e._force=!1,e._step=[!1,!1],e.intentional=!1,e._movement=[0,0],e._distance=[0,0],e._direction=[0,0],e._delta=[0,0],e._bounds=[[-1/0,1/0],[-1/0,1/0]],e.args=n,e.axis=void 0,e.memo=void 0,e.elapsedTime=e.timeDelta=0,e.direction=[0,0],e.distance=[0,0],e.overflow=[0,0],e._movementBound=[!1,!1],e.velocity=[0,0],e.movement=[0,0],e.delta=[0,0],e.timeStamp=0}start(e){let t=this.state,i=this.config;t._active||(this.reset(),this.computeInitial(),t._active=!0,t.target=e.target,t.currentTarget=e.currentTarget,t.lastOffset=i.from?w(i.from,t):t.offset,t.offset=t.lastOffset,t.startTime=t.timeStamp=e.timeStamp)}computeValues(e){let t=this.state;t._values=e,t.values=this.config.transform(e)}computeInitial(){let e=this.state;e._initial=e._values,e.initial=e.values}compute(e){let{state:t,config:i,shared:n}=this;t.args=this.args;let s=0;if(e&&(t.event=e,i.preventDefault&&e.cancelable&&t.event.preventDefault(),t.type=e.type,n.touches=this.ctrl.pointerIds.size||this.ctrl.touchIds.size,n.locked=!!document.pointerLockElement,Object.assign(n,function(e){let t={};if("buttons"in e&&(t.buttons=e.buttons),"shiftKey"in e){let{shiftKey:i,altKey:n,metaKey:r,ctrlKey:s}=e;Object.assign(t,{shiftKey:i,altKey:n,metaKey:r,ctrlKey:s})}return t}(e)),n.down=n.pressed=n.buttons%2==1||n.touches>0,s=e.timeStamp-t.timeStamp,t.timeStamp=e.timeStamp,t.elapsedTime=t.timeStamp-t.startTime),t._active){let e=t._delta.map(Math.abs);r.addTo(t._distance,e)}this.axisIntent&&this.axisIntent(e);let[a,l]=t._movement,[c,u]=i.threshold,{_step:d,values:h}=t;if(i.hasCustomTransform?(!1===d[0]&&(d[0]=Math.abs(a)>=c&&h[0]),!1===d[1]&&(d[1]=Math.abs(l)>=u&&h[1])):(!1===d[0]&&(d[0]=Math.abs(a)>=c&&Math.sign(a)*c),!1===d[1]&&(d[1]=Math.abs(l)>=u&&Math.sign(l)*u)),t.intentional=!1!==d[0]||!1!==d[1],!t.intentional)return;let f=[0,0];if(i.hasCustomTransform){let[e,t]=h;f[0]=!1!==d[0]?e-d[0]:0,f[1]=!1!==d[1]?t-d[1]:0}else f[0]=!1!==d[0]?a-d[0]:0,f[1]=!1!==d[1]?l-d[1]:0;this.restrictToAxis&&!t._blocked&&this.restrictToAxis(f);let p=t.offset,m=t._active&&!t._blocked||t.active;m&&(t.first=t._active&&!t.active,t.last=!t._active&&t.active,t.active=n[this.ingKey]=t._active,e&&(t.first&&("bounds"in i&&(t._bounds=w(i.bounds,t)),this.setup&&this.setup()),t.movement=f,this.computeOffset()));let[v,g]=t.offset,[[b,x],[y,_]]=t._bounds;t.overflow=[v<b?-1:+(v>x),g<y?-1:+(g>_)],t._movementBound[0]=!!t.overflow[0]&&(!1===t._movementBound[0]?t._movement[0]:t._movementBound[0]),t._movementBound[1]=!!t.overflow[1]&&(!1===t._movementBound[1]?t._movement[1]:t._movementBound[1]);let S=t._active&&i.rubberband||[0,0];if(t.offset=function(e,[t,i],[n,r]){let[[s,a],[l,c]]=e;return[o(t,s,a,n),o(i,l,c,r)]}(t._bounds,t.offset,S),t.delta=r.sub(t.offset,p),this.computeMovement(),m&&(!t.last||s>32)){t.delta=r.sub(t.offset,p);let e=t.delta.map(Math.abs);r.addTo(t.distance,e),t.direction=t.delta.map(Math.sign),t._direction=t._delta.map(Math.sign),!t.first&&s>0&&(t.velocity=[e[0]/s,e[1]/s],t.timeDelta=s)}}emit(){let e=this.state,t=this.shared,i=this.config;if(e._active||this.clean(),(e._blocked||!e.intentional)&&!e._force&&!i.triggerAllEvents)return;let n=this.handler(c(c(c({},t),e),{},{[this.aliasKey]:e.values}));void 0!==n&&(e.memo=n)}clean(){this.eventStore.clean(),this.timeoutStore.clean()}}class S extends _{constructor(...e){super(...e),a(this,"aliasKey","xy")}reset(){super.reset(),this.state.axis=void 0}init(){this.state.offset=[0,0],this.state.lastOffset=[0,0]}computeOffset(){this.state.offset=r.add(this.state.lastOffset,this.state.movement)}computeMovement(){this.state.movement=r.sub(this.state.offset,this.state.lastOffset)}axisIntent(e){let t=this.state,i=this.config;if(!t.axis&&e){let n="object"==typeof i.axisThreshold?i.axisThreshold[m(e)]:i.axisThreshold;t.axis=function([e,t],i){let n=Math.abs(e),r=Math.abs(t);return n>r&&n>i?"x":r>n&&r>i?"y":void 0}(t._movement,n)}t._blocked=(i.lockDirection||!!i.axis)&&!t.axis||!!i.axis&&i.axis!==t.axis}restrictToAxis(e){if(this.config.axis||this.config.lockDirection)switch(this.state.axis){case"x":e[1]=0;break;case"y":e[0]=0}}}let T=e=>e,k={enabled:(e=!0)=>e,eventOptions:(e,t,i)=>c(c({},i.shared.eventOptions),e),preventDefault:(e=!1)=>e,triggerAllEvents:(e=!1)=>e,rubberband(e=0){switch(e){case!0:return[.15,.15];case!1:return[0,0];default:return r.toVector(e)}},from:e=>"function"==typeof e?e:null!=e?r.toVector(e):void 0,transform(e,t,i){let n=e||i.shared.transform;return this.hasCustomTransform=!!n,n||T},threshold:e=>r.toVector(e,0)},j=0,P=c(c({},k),{},{axis(e,t,{axis:i}){if(this.lockDirection="lock"===i,!this.lockDirection)return i},axisThreshold:(e=j)=>e,bounds(e={}){if("function"==typeof e)return t=>P.bounds(e(t));if("current"in e)return()=>e.current;if("function"==typeof HTMLElement&&e instanceof HTMLElement)return e;let{left:t=-1/0,right:i=1/0,top:n=-1/0,bottom:r=1/0}=e;return[[t,i],[n,r]]}}),A={ArrowRight:(e,t=1)=>[e*t,0],ArrowLeft:(e,t=1)=>[-1*e*t,0],ArrowUp:(e,t=1)=>[0,-1*e*t],ArrowDown:(e,t=1)=>[0,e*t]},O="u">typeof window&&window.document&&window.document.createElement;function E(){return O&&"ontouchstart"in window}let C={isBrowser:O,gesture:function(){try{return"constructor"in GestureEvent}catch(e){return!1}}(),touch:E(),touchscreen:E()||O&&window.navigator.maxTouchPoints>1,pointer:O&&"onpointerdown"in window,pointerLock:O&&"exitPointerLock"in window.document},D=10,I={mouse:0,touch:0,pen:8},M=c(c({},P),{},{device(e,t,{pointer:{touch:i=!1,lock:n=!1,mouse:r=!1}={}}){return(this.pointerLock=n&&C.pointerLock,C.touch&&i)?"touch":this.pointerLock?"mouse":C.pointer&&!r?"pointer":C.touch?"touch":"mouse"},preventScrollAxis(e,t,{preventScroll:i}){if(this.preventScrollDelay="number"==typeof i?i:i||void 0===i&&e?250:void 0,C.touchscreen&&!1!==i)return e||(void 0!==i?"y":void 0)},pointerCapture(e,t,{pointer:{capture:i=!0,buttons:n=1,keys:r=!0}={}}){return this.pointerButtons=n,this.keys=r,!this.pointerLock&&"pointer"===this.device&&i},threshold(e,t,{filterTaps:i=!1,tapsThreshold:n=3,axis:s}){let o=r.toVector(e,i?n:+!!s);return this.filterTaps=i,this.tapsThreshold=n,o},swipe({velocity:e=.5,distance:t=50,duration:i=250}={}){return{velocity:this.transform(r.toVector(e)),distance:this.transform(r.toVector(t)),duration:i}},delay(e=0){switch(e){case!0:return 180;case!1:return 0;default:return e}},axisThreshold:e=>e?c(c({},I),e):I,keyboardDisplacement:(e=D)=>e});c(c({},k),{},{device(e,t,{shared:i,pointer:{touch:n=!1}={}}){if(i.target&&!C.touch&&C.gesture)return"gesture";if(C.touch&&n)return"touch";if(C.touchscreen){if(C.pointer)return"pointer";if(C.touch)return"touch"}},bounds(e,t,{scaleBounds:i={},angleBounds:n={}}){let r=e=>{let t=y(w(i,e),{min:-1/0,max:1/0});return[t.min,t.max]},s=e=>{let t=y(w(n,e),{min:-1/0,max:1/0});return[t.min,t.max]};return"function"!=typeof i&&"function"!=typeof n?[r(),s()]:e=>[r(e),s(e)]},threshold(e,t,i){return this.lockDirection="lock"===i.axis,r.toVector(e,this.lockDirection?[.1,3]:0)},modifierKey:e=>void 0===e?"ctrlKey":e,pinchOnWheel:(e=!0)=>e}),c(c({},P),{},{mouseOnly:(e=!0)=>e}),c(c({},P),{},{mouseOnly:(e=!0)=>e});let B=new Map,L=new Map,N={key:"drag",engine:class extends S{constructor(...e){super(...e),a(this,"ingKey","dragging")}reset(){super.reset();let e=this.state;e._pointerId=void 0,e._pointerActive=!1,e._keyboardActive=!1,e._preventScroll=!1,e._delayed=!1,e.swipe=[0,0],e.tap=!1,e.canceled=!1,e.cancel=this.cancel.bind(this)}setup(){let e=this.state;if(e._bounds instanceof HTMLElement){let t=e._bounds.getBoundingClientRect(),i=e.currentTarget.getBoundingClientRect(),n={left:t.left-i.left+e.offset[0],right:t.right-i.right+e.offset[0],top:t.top-i.top+e.offset[1],bottom:t.bottom-i.bottom+e.offset[1]};e._bounds=P.bounds(n)}}cancel(){let e=this.state;e.canceled||(e.canceled=!0,e._active=!1,setTimeout(()=>{this.compute(),this.emit()},0))}setActive(){this.state._active=this.state._pointerActive||this.state._keyboardActive}clean(){this.pointerClean(),this.state._pointerActive=!1,this.state._keyboardActive=!1,super.clean()}pointerDown(e){let t=this.config,i=this.state;if(null!=e.buttons&&(Array.isArray(t.pointerButtons)?!t.pointerButtons.includes(e.buttons):-1!==t.pointerButtons&&t.pointerButtons!==e.buttons))return;let n=this.ctrl.setEventIds(e);t.pointerCapture&&e.target.setPointerCapture(e.pointerId),n&&n.size>1&&i._pointerActive||(this.start(e),this.setupPointer(e),i._pointerId=g(e),i._pointerActive=!0,this.computeValues(b(e)),this.computeInitial(),t.preventScrollAxis&&"mouse"!==m(e)?(i._active=!1,this.setupScrollPrevention(e)):t.delay>0?(this.setupDelayTrigger(e),t.triggerAllEvents&&(this.compute(e),this.emit())):this.startPointerDrag(e))}startPointerDrag(e){let t=this.state;t._active=!0,t._preventScroll=!0,t._delayed=!1,this.compute(e),this.emit()}pointerMove(e){let t=this.state,i=this.config;if(!t._pointerActive)return;let n=g(e);if(void 0!==t._pointerId&&n!==t._pointerId)return;let s=b(e);if(document.pointerLockElement===e.target?t._delta=[e.movementX,e.movementY]:(t._delta=r.sub(s,t._values),this.computeValues(s)),r.addTo(t._movement,t._delta),this.compute(e),t._delayed&&t.intentional){this.timeoutStore.remove("dragDelay"),t.active=!1,this.startPointerDrag(e);return}if(i.preventScrollAxis&&!t._preventScroll)if(!t.axis)return;else if(t.axis===i.preventScrollAxis||"xy"===i.preventScrollAxis){t._active=!1,this.clean();return}else{this.timeoutStore.remove("startPointerDrag"),this.startPointerDrag(e);return}this.emit()}pointerUp(e){this.ctrl.setEventIds(e);try{this.config.pointerCapture&&e.target.hasPointerCapture(e.pointerId)&&e.target.releasePointerCapture(e.pointerId)}catch(e){}let t=this.state,i=this.config;if(!t._active||!t._pointerActive)return;let n=g(e);if(void 0!==t._pointerId&&n!==t._pointerId)return;this.state._pointerActive=!1,this.setActive(),this.compute(e);let[r,s]=t._distance;if(t.tap=r<=i.tapsThreshold&&s<=i.tapsThreshold,t.tap&&i.filterTaps)t._force=!0;else{let[e,n]=t._delta,[r,s]=t._movement,[o,a]=i.swipe.velocity,[l,c]=i.swipe.distance,u=i.swipe.duration;if(t.elapsedTime<u){let i=Math.abs(e/t.timeDelta),u=Math.abs(n/t.timeDelta);i>o&&Math.abs(r)>l&&(t.swipe[0]=Math.sign(e)),u>a&&Math.abs(s)>c&&(t.swipe[1]=Math.sign(n))}}this.emit()}pointerClick(e){!this.state.tap&&e.detail>0&&(e.preventDefault(),e.stopPropagation())}setupPointer(e){let t=this.config,i=t.device;t.pointerLock&&e.currentTarget.requestPointerLock(),t.pointerCapture||(this.eventStore.add(this.sharedConfig.window,i,"change",this.pointerMove.bind(this)),this.eventStore.add(this.sharedConfig.window,i,"end",this.pointerUp.bind(this)),this.eventStore.add(this.sharedConfig.window,i,"cancel",this.pointerUp.bind(this)))}pointerClean(){this.config.pointerLock&&document.pointerLockElement===this.state.currentTarget&&document.exitPointerLock()}preventScroll(e){this.state._preventScroll&&e.cancelable&&e.preventDefault()}setupScrollPrevention(e){var t;this.state._preventScroll=!1,"persist"in(t=e)&&"function"==typeof t.persist&&t.persist();let i=this.eventStore.add(this.sharedConfig.window,"touch","change",this.preventScroll.bind(this),{passive:!1});this.eventStore.add(this.sharedConfig.window,"touch","end",i),this.eventStore.add(this.sharedConfig.window,"touch","cancel",i),this.timeoutStore.add("startPointerDrag",this.startPointerDrag.bind(this),this.config.preventScrollDelay,e)}setupDelayTrigger(e){this.state._delayed=!0,this.timeoutStore.add("dragDelay",()=>{this.state._step=[0,0],this.startPointerDrag(e)},this.config.delay)}keyDown(e){let t=A[e.key];if(t){let i=this.state,n=e.shiftKey?10:e.altKey?.1:1;this.start(e),i._delta=t(this.config.keyboardDisplacement,n),i._keyboardActive=!0,r.addTo(i._movement,i._delta),this.compute(e),this.emit()}}keyUp(e){e.key in A&&(this.state._keyboardActive=!1,this.setActive(),this.compute(e),this.emit())}bind(e){let t=this.config.device;e(t,"start",this.pointerDown.bind(this)),this.config.pointerCapture&&(e(t,"change",this.pointerMove.bind(this)),e(t,"end",this.pointerUp.bind(this)),e(t,"cancel",this.pointerUp.bind(this)),e("lostPointerCapture","",this.pointerUp.bind(this))),this.config.keys&&(e("key","down",this.keyDown.bind(this)),e("key","up",this.keyUp.bind(this))),this.config.filterTaps&&e("click","",this.pointerClick.bind(this),{capture:!0,passive:!1})}},resolver:M},R={target(e){if(e)return()=>"current"in e?e.current:e},enabled:(e=!0)=>e,window:(e=C.isBrowser?window:void 0)=>e,eventOptions:({passive:e=!0,capture:t=!1}={})=>({passive:e,capture:t}),transform:e=>e},V=["target","eventOptions","window","enabled","transform"];function K(e={},t){let i={};for(let[n,r]of Object.entries(t))switch(typeof r){case"function":i[n]=r.call(i,e[n],n,e);break;case"object":i[n]=K(e[n],r);break;case"boolean":r&&(i[n]=e[n])}return i}class U{constructor(e,t){a(this,"_listeners",new Set),this._ctrl=e,this._gestureKey=t}add(e,t,i,n,r){let s=this._listeners,o=function(e,t=""){let i=u[e];return e+(i&&i[t]||t)}(t,i),a=c(c({},this._gestureKey?this._ctrl.config[this._gestureKey].eventOptions:{}),r);e.addEventListener(o,n,a);let l=()=>{e.removeEventListener(o,n,a),s.delete(l)};return s.add(l),l}clean(){this._listeners.forEach(e=>e()),this._listeners.clear()}}class F{constructor(){a(this,"_timeouts",new Map)}add(e,t,i=140,...n){this.remove(e),this._timeouts.set(e,window.setTimeout(t,i,...n))}remove(e){let t=this._timeouts.get(e);t&&window.clearTimeout(t)}clean(){this._timeouts.forEach(e=>void window.clearTimeout(e)),this._timeouts.clear()}}class W{constructor(e){a(this,"gestures",new Set),a(this,"_targetEventStore",new U(this)),a(this,"gestureEventStores",{}),a(this,"gestureTimeoutStores",{}),a(this,"handlers",{}),a(this,"config",{}),a(this,"pointerIds",new Set),a(this,"touchIds",new Set),a(this,"state",{shared:{shiftKey:!1,metaKey:!1,ctrlKey:!1,altKey:!1}}),function(e,t){t.drag&&z(e,"drag"),t.wheel&&z(e,"wheel"),t.scroll&&z(e,"scroll"),t.move&&z(e,"move"),t.pinch&&z(e,"pinch"),t.hover&&z(e,"hover")}(this,e)}setEventIds(e){if(p(e))return this.touchIds=new Set(Array.from(e.touches).filter(t=>{var i,n;return t.target===e.currentTarget||(null==(i=e.currentTarget)||null==(n=i.contains)?void 0:n.call(i,t.target))}).map(e=>e.identifier)),this.touchIds;if("pointerId"in e)return"pointerup"===e.type||"pointercancel"===e.type?this.pointerIds.delete(e.pointerId):"pointerdown"===e.type&&this.pointerIds.add(e.pointerId),this.pointerIds}applyHandlers(e,t){this.handlers=e,this.nativeHandlers=t}applyConfig(e,t){this.config=function(e,t,i={}){let{target:n,eventOptions:r,window:s,enabled:o,transform:a}=e,l=function(e,t){if(null==e)return{};var i,n,r=function(e,t){if(null==e)return{};var i,n,r={},s=Object.keys(e);for(n=0;n<s.length;n++)i=s[n],t.indexOf(i)>=0||(r[i]=e[i]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)i=s[n],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}(e,V);if(i.shared=K({target:n,eventOptions:r,window:s,enabled:o,transform:a},R),t){let e=L.get(t);i[t]=K(c({shared:i.shared},l),e)}else for(let e in l){let t=L.get(e);t&&(i[e]=K(c({shared:i.shared},l[e]),t))}return i}(e,t,this.config)}clean(){for(let e of(this._targetEventStore.clean(),this.gestures))this.gestureEventStores[e].clean(),this.gestureTimeoutStores[e].clean()}effect(){return this.config.shared.target&&this.bind(),()=>this._targetEventStore.clean()}bind(...e){let t,i=this.config.shared,n={};if(!i.target||(t=i.target())){if(i.enabled){for(let i of this.gestures){let r=this.config[i],s=G(n,r.eventOptions,!!t);r.enabled&&new(B.get(i))(this,e,i).bind(s)}let r=G(n,i.eventOptions,!!t);for(let t in this.nativeHandlers)r(t,"",i=>this.nativeHandlers[t](c(c({},this.state.shared),{},{event:i,args:e})),void 0,!0)}for(let e in n)n[e]=function(...e){return 0===e.length?x:1===e.length?e[0]:function(){let t;for(let i of e)t=i.apply(this,arguments)||t;return t}}(...n[e]);if(!t)return n;for(let e in n){let{device:i,capture:r,passive:s}=function(e){let t=e.substring(2).toLowerCase(),i=!!~t.indexOf("passive");i&&(t=t.replace("passive",""));let n=f.includes(t)?"capturecapture":"capture",r=!!~t.indexOf(n);return r&&(t=t.replace("capture","")),{device:t,capture:r,passive:i}}(e);this._targetEventStore.add(t,i,"",n[e],{capture:r,passive:s})}}}}function z(e,t){e.gestures.add(t),e.gestureEventStores[t]=new U(e,t),e.gestureTimeoutStores[t]=new F}let G=(e,t,i)=>(n,r,s,o={},a=!1)=>{var l,c;let f=null!=(l=o.capture)?l:t.capture,p=null!=(c=o.passive)?c:t.passive,m=a?n:function(e,t="",i=!1){let n=u[e],r=n&&n[t]||t;return"on"+d(e)+d(r)+(!function(e=!1,t){return e&&!h.includes(t)}(i,r)?"":"Capture")}(n,r,f);i&&p&&(m+="Passive"),e[m]=e[m]||[],e[m].push(s)};var H=e.i(67561),q=e.i(62588),X=e.i(83934),Y=e.i(11426),$=i;class J extends $.default.Component{constructor(e){super(e),this.state={hasError:!1,error:null,errorInfo:null}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){this.setState({error:e,errorInfo:t}),console.error("Error caught in Error Boundary:",e,t)}handleRefresh=()=>{window.location.reload()};handleExitFullscreen=()=>{document.fullscreenElement&&(window.close(),document.exitFullscreen().catch(e=>{console.error("Failed to exit fullscreen:",e)}))};render(){if(this.state.hasError){let{error:e,errorInfo:i}=this.state;return(0,t.jsx)("div",{className:"flex flex-col items-center justify-center min-h-screen bg-hud-bg text-hud-main p-6",children:(0,t.jsxs)("div",{className:"tesla-card max-w-2xl w-full backdrop-blur-xl flex flex-col items-center text-center",children:[(0,t.jsx)("div",{className:"w-20 h-20 rounded-full bg-oRed/20 flex items-center justify-center mb-8",children:(0,t.jsx)("div",{className:"w-4 h-4 rounded-full bg-oRed animate-soft-pulse"})}),(0,t.jsx)("h1",{className:"text-value font-semibold uppercase tracking-tight text-oRed mb-6",children:"System Critical Error"}),(0,t.jsxs)("p",{className:"text-value font-medium text-hud-main/80 mb-8 max-w-md",children:[(0,t.jsx)("span",{className:"text-hud-muted uppercase text-caption font-semibold tracking-widest block mb-2",children:"Technical Status"}),e?e.toString():"Unknown exception detected in UI thread"]}),i&&(0,t.jsxs)("details",{className:"w-full whitespace-pre-wrap bg-hud-bg/5 p-6 rounded-2xl mb-10 text-left border border-hud group",children:[(0,t.jsxs)("summary",{className:"cursor-pointer text-oBlue text-caption font-semibold uppercase tracking-widest hover:text-hud-main transition-colors flex items-center justify-between",children:[(0,t.jsx)("span",{children:"Diagnostic Stack Trace"}),(0,t.jsx)("span",{className:"opacity-40 group-open:rotate-180 transition-transform",children:"▼"})]}),(0,t.jsx)("pre",{className:"mt-6 text-caption font-mono text-hud-muted overflow-auto max-h-60 custom-scrollbar leading-relaxed",children:i.componentStack})]}),(0,t.jsxs)("div",{className:"flex flex-col sm:flex-row gap-4 w-full justify-center",children:[(0,t.jsx)("button",{onClick:this.handleRefresh,className:"px-8 py-4 bg-oBlue hover:bg-blue-600 text-hud-main rounded-xl text-caption font-semibold uppercase tracking-[0.2em] transition-all duration-500 shadow-lg shadow-oBlue/20 active:scale-95",children:"Reboot Session"}),(0,t.jsx)("button",{onClick:this.handleExitFullscreen,className:"px-8 py-4 bg-hud-elevated hover:bg-hud-bg text-hud-main border border-hud rounded-xl text-caption font-semibold uppercase tracking-[0.2em] transition-all duration-500 active:scale-95",children:"Exit Console"})]})]})})}return this.props.children}}e.i(85269);var Q=e.i(71),Z=e.i(18850),ee=e.i(83402);function et({children:e}){return(0,i.useEffect)(()=>{let e=ee.default.get("language");e&&e!==Z.default.language&&Z.default.changeLanguage(e)},[]),(0,t.jsx)(Q.I18nextProvider,{i18n:Z.default,children:e})}var ei=e.i(44485),en=e.i(30206);let er=(e,t)=>{let i=e(t);return null==i?void 0:i},es=()=>{let{getSignalKValue:e,updateSignalKData:t}=(0,H.useOcearoContext)(),n=(0,i.useRef)(0);return(0,i.useEffect)(()=>{(0,en.setReplaySink)(t)},[t]),(0,i.useEffect)(()=>{if(!1===ee.default.get("recordVoyages"))return;let t=0,i=setInterval(()=>{if((0,en.isReplaying)()||ee.default.get("debugMode"))return;let i=er(e,"navigation.position");if(!Number.isFinite(i?.latitude)||!Number.isFinite(i?.longitude))return;let r=Date.now(),s=er(e,"navigation.speedOverGround")??0;if(s<.4&&r-n.current<6e4)return;n.current=r;let o=er(e,"navigation.attitude");(0,ei.addSample)({t:r,lat:i.latitude,lon:i.longitude,hdg:er(e,"navigation.headingTrue"),cog:er(e,"navigation.courseOverGroundTrue"),sog:s,stw:er(e,"navigation.speedThroughWater"),tws:er(e,"environment.wind.speedTrue"),twa:er(e,"environment.wind.angleTrueWater"),twd:er(e,"environment.wind.directionTrue"),aws:er(e,"environment.wind.speedApparent"),awa:er(e,"environment.wind.angleApparent"),rud:er(e,"steering.rudderAngle"),roll:o?.roll,depth:er(e,"environment.depth.belowKeel")??er(e,"environment.depth.belowTransducer")}).catch(()=>{}),++t%720==0&&(0,ei.trimSamples)().catch(()=>{})},5e3);return()=>clearInterval(i)},[e]),null},eo=(0,n.default)(()=>e.A(45344),{loadableGenerated:{modules:[42602]},loading:()=>(0,t.jsx)("div",{className:"w-full h-full flex items-center justify-center",children:"Loading..."})}),ea=(0,n.default)(()=>e.A(10520),{loadableGenerated:{modules:[61891]}}),el=(0,n.default)(()=>e.A(49063),{loadableGenerated:{modules:[85626]}}),ec=(0,n.default)(()=>e.A(23e3),{loadableGenerated:{modules:[50637]}}),eu=(0,n.default)(()=>e.A(13181),{loadableGenerated:{modules:[23595]},loading:()=>(0,t.jsx)("div",{className:"w-full h-full flex items-center justify-center",children:(0,t.jsx)("div",{className:"text-hud-main text-value",children:"Loading 3D View..."})}),ssr:!1}),ed={BOAT:"boat",APP:"app",SPLIT:"split"};e.s(["VIEW_MODES",0,ed,"default",0,function(){var e,n;let r=(0,i.useRef)(!1),s=(0,i.useRef)(null),[o,a]=(0,i.useState)(null),[l,c]=(0,i.useState)(!1);(0,i.useEffect)(()=>{let e=()=>c(window.innerWidth<768);return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let u=o===ed.SPLIT&&l?ed.BOAT:o,[d,h]=(0,i.useState)(()=>ee.default.getCurrentView()||"navigation"),[f,p]=(0,i.useState)(!1),[m,v]=(0,i.useState)(!1),g=(0,i.useRef)(!1);(0,i.useEffect)(()=>{},[]),(0,i.useEffect)(()=>{let e,t=ee.default.get("viewMode");a(Object.values(ed).includes(t)?t:window.innerWidth>=1366?ed.SPLIT:ed.BOAT),r.current=!0;let i=()=>{clearTimeout(e),e=setTimeout(()=>{g.current||ee.default.get("viewMode")||a(window.innerWidth>=1366?ed.SPLIT:ed.BOAT)},250)};return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i),clearTimeout(e)}},[]);let b=(0,i.useCallback)(()=>{p(e=>!e)},[]),w=(0,i.useCallback)(e=>{a(e),ee.default.set("viewMode",e)},[]),x=(e=({movement:[e]})=>{let t=window.innerWidth/5;e>t?w(ed.BOAT):e<-t?w(ed.APP):window.innerWidth<768||w(ed.SPLIT)},n={axis:"x"},B.set(N.key,N.engine),L.set(N.key,N.resolver),function(e,t={},n){let r=i.default.useMemo(()=>new W(e),[]);if(r.applyHandlers(e,void 0),r.applyConfig(t,n),i.default.useEffect(r.effect.bind(r)),i.default.useEffect(()=>r.clean.bind(r),[]),void 0===t.target)return r.bind.bind(r)}({drag:e},n||{},"drag")),y=(0,i.useCallback)(()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen().catch(e=>{console.error("Fullscreen error:",e.message)})},[]),_=(0,i.useCallback)(e=>{u===ed.BOAT&&w(ed.APP),h(e),ee.default.setCurrentView(e)},[u,w]);(0,i.useEffect)(()=>(0,en.subscribeReplay)(e=>{e.active&&u===ed.APP&&w(ed.SPLIT)}),[u,w]);let S=(0,i.useRef)(null),T=(0,i.useRef)(null),k=(0,i.useCallback)(()=>{if("settings"===d){g.current=!1,v(!1);let e=T.current||"navigation";h(e),ee.default.setCurrentView(e),w(S.current||ed.BOAT)}else S.current=u,T.current=d,g.current=!0,v(!0),_("settings"),a(ed.APP)},[d,u,w,_]);(0,i.useEffect)(()=>{if("settings"===d){g.current||(g.current=!0,v(!0));return}g.current&&(g.current=!1,v(!1))},[d]);let j=(0,i.useMemo)(()=>null===u?{}:{leftPane:`transition-all duration-300 ${u===ed.BOAT?"w-full":u===ed.APP?"hidden":"w-2/5"} bg-leftPaneBg h-full relative`,rightPane:`transition-all duration-300 ${u===ed.APP?"w-full":u===ed.BOAT?"hidden":"w-3/5"} h-full bg-rightPaneBg`},[u]);return r.current?(0,t.jsx)(J,{children:(0,t.jsx)(et,{children:(0,t.jsxs)(H.OcearoContextProvider,{children:[(0,t.jsx)(es,{}),(0,t.jsx)(q.AISProvider,{children:(0,t.jsx)(X.WeatherContextProvider,{children:(0,t.jsx)(Y.TideContextProvider,{children:(0,t.jsxs)("div",{className:"h-[100dvh] flex flex-col bg-hud-bg relative overflow-hidden pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)] pl-[env(safe-area-inset-left)] pr-[env(safe-area-inset-right)]",children:[(0,t.jsxs)("div",{className:"flex flex-1 min-h-0",children:[(0,t.jsx)("div",{className:j.leftPane,children:(0,t.jsx)(eu,{active:u!==ed.APP,fullscreen:u===ed.BOAT})}),(0,t.jsx)("div",{ref:s,...x(),className:"handle w-1 bg-leftPaneBg h-full cursor-col-resize transition-all duration-200 flex items-center justify-center touch-none",children:(0,t.jsx)("div",{className:"rounded-full w-3 bg-hud-dim h-40 transition-all duration-200 hover:bg-hud-muted border border-hud"})}),(0,t.jsx)("div",{className:j.rightPane,children:(0,t.jsx)(eo,{view:d})})]}),(0,t.jsx)("div",{className:"w-full h-16 min-h-16 bg-leftPaneBg border-t border-hud flex items-center justify-center shrink-0",children:(0,t.jsx)(ea,{setRightView:_,toggleAppMenu:b,toggleSettings:k})}),(0,t.jsx)(ec,{}),f&&(0,t.jsx)(el,{currentViewMode:u,canSplit:!l,toggleViewMode:w,handleSetRightView:_,toggleSettings:k,toggleFullscreen:y,setShowAppMenu:p})]})})})})]})})}):(0,t.jsx)("div",{className:"h-[100dvh] bg-hud-bg flex items-center justify-center",children:(0,t.jsx)("div",{className:"animate-pulse text-hud-main",children:"Loading..."})})}],81694)}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,90741,t=>{"use strict";var e=t.i(43476),a=t.i(71645);t.i(67561);var i=t.i(46991),l=t.i(83646),n=t.i(85709);t.i(85269);var s=t.i(22831);t.s(["default",0,function(){let{t}=(0,s.useTranslation)(),o=(0,l.default)(),r=(0,a.useRef)(null),[c,h]=(0,a.useState)("canvas"),d=(0,n.useSignalKPath)("navigation.attitude"),x=(0,a.useMemo)(()=>({roll:(0,i.toDegrees)(d?.roll)||0,pitch:(0,i.toDegrees)(d?.pitch)||0,yaw:(0,i.toDegrees)(d?.yaw)||0}),[d]);return(0,a.useEffect)(()=>{if("canvas"!==c||!r.current)return;let t=r.current.getContext("2d");if(!t)return;let{roll:e,pitch:a,yaw:i}=x;((t,e)=>{let{w:a,h:i,roll:l,pitch:n,yaw:s,tokens:o,showHeading:r=!0,showPitchScale:c=!0,showRollScale:h=!0,showBezel:d=!0,compact:x=!1,overrides:f={}}=e,u=a/2,m=i/2,M=Math.min(a,i)/(x?80:200),p=t=>t*M,b=t=>Math.max(.5,t*M),g={sky:o.instrument.sky,sea:o.instrument.sea,horizon:o.warn,bezel:o.instrument.bezel,text:o.textMain,boat:o.warn,rollScale:o.danger,headingMarks:o.textMain,pitchMarks:o.textSecondary,minorMarks:o.textMuted,boatOutline:o.neutral,...f};t.clearRect(0,0,a,i);let k=Math.min(u,m)-p(x?5:20);if(t.save(),t.beginPath(),t.arc(u,m,k,0,2*Math.PI),t.clip(),t.translate(u,m),t.rotate(l*Math.PI/180),t.translate(0,n/90*k*(x?1:1.5)),t.fillStyle=g.sky,t.fillRect(-a,-(2*i),2*a,2*i),t.fillStyle=g.sea,t.fillRect(-a,0,2*a,2*i),t.beginPath(),t.moveTo(-a,0),t.lineTo(a,0),t.strokeStyle=g.horizon,t.lineWidth=b(x?1.5:3),t.stroke(),c){t.strokeStyle=g.pitchMarks,t.fillStyle=g.pitchMarks,t.font=`${Math.round(p(x?8:12))}px sans-serif`,t.textAlign="center",t.textBaseline="middle";let e=x?60:30,a=x?20:10;for(let i=-e;i<=e;i+=a){if(0===i)continue;let e=-(i/90)*k*(x?1:1.5),a=p(Math.abs(i)%20!=0||x?x?15:30:50);t.beginPath(),t.moveTo(-a/2,e),t.lineTo(a/2,e),t.lineWidth=b(Math.abs(i)%20==0?2:1),t.stroke(),x&&Math.abs(i)%40!=0||(t.fillText(Math.abs(i)+"°",a/2+p(10),e),t.fillText(Math.abs(i)+"°",-a/2-p(10),e))}}if(t.restore(),d&&(t.beginPath(),t.arc(u,m,Math.min(u,m)-p(x?2:8),0,2*Math.PI),t.strokeStyle=g.bezel,t.lineWidth=b(x?2:12),t.stroke(),x||(t.beginPath(),t.arc(u,m,k,0,2*Math.PI),t.strokeStyle=g.bezel,t.lineWidth=b(2),t.stroke())),r){t.save(),t.translate(u,m),t.font=`bold ${Math.round(p(x?7:10))}px sans-serif`,t.textAlign="center";let e=x?15:10;for(let a=0;a<360;a+=e){let e=(a-s-90)*Math.PI/180,i=k+p(2*!!x),l=a%(x?90:30)==0,n=p(l?x?5:20:x?2:10),o=i*Math.cos(e),r=i*Math.sin(e),c=(i-n)*Math.cos(e),h=(i-n)*Math.sin(e);if(t.beginPath(),t.moveTo(o,r),t.lineTo(c,h),t.strokeStyle=l?g.headingMarks:g.minorMarks,t.lineWidth=b(l?1.5:x?.5:2),t.stroke(),l&&!x){let l=["N","E","S","W"];if(a%90==0){let n=(i-p(35))*Math.cos(e),s=(i-p(35))*Math.sin(e)+p(4);t.fillStyle=g.text,t.fillText(l[a/90],n,s)}}}t.restore()}if(t.save(),t.translate(u,m),x?(t.rotate(s*Math.PI/180),t.beginPath(),t.moveTo(0,-p(10)),t.lineTo(p(5),p(5)),t.lineTo(-p(5),p(5)),t.closePath(),t.fillStyle=g.boat,t.fill(),t.strokeStyle=g.boatOutline,t.lineWidth=b(1),t.stroke()):(t.beginPath(),t.moveTo(0,-p(25)),t.lineTo(p(12),p(12)),t.lineTo(0,p(8)),t.lineTo(-p(12),p(12)),t.closePath(),t.fillStyle=g.horizon,t.fill(),t.strokeStyle=g.text,t.lineWidth=b(2),t.stroke(),t.beginPath(),t.arc(0,0,p(3),0,2*Math.PI),t.fillStyle=g.text,t.fill()),t.restore(),h&&!x){t.save(),t.translate(u,m),t.rotate(l*Math.PI/180);for(let e=-60;e<=60;e+=30){if(0===e)continue;let a=e*Math.PI/180,i=Math.min(u,m)-p(30),l=i*Math.sin(a),n=-i*Math.cos(a),s=(i-p(15))*Math.sin(a),o=-(i-p(15))*Math.cos(a);t.beginPath(),t.moveTo(l,n),t.lineTo(s,o),t.strokeStyle=g.rollScale,t.lineWidth=b(3),t.stroke()}t.restore()}})(t,{w:80,h:80,roll:e,pitch:a,yaw:i,tokens:o,compact:!0,overrides:{sky:"transparent",sea:o.neutralStrong,horizon:o.accent,boat:o.accent,pitchMarks:o.neutral}})},[x,c,o]),(0,e.jsx)("div",{className:"mt-6 cursor-pointer select-none group",style:{width:"80px",minHeight:"80px",boxSizing:"content-box"},onClick:()=>{h(t=>"canvas"===t?"text":"canvas")},title:t("indicators.clickToToggle"),children:"canvas"===c?(0,e.jsx)("div",{className:"relative p-1 rounded-xl transition-all duration-300",children:(0,e.jsx)("canvas",{ref:r,width:80,height:80,className:"w-full h-full drop-shadow-lg"})}):(0,e.jsxs)("div",{className:"p-3 rounded-xl transition-all duration-300 flex flex-col items-end space-y-2 text-hud-main",children:[(0,e.jsxs)("div",{className:"flex flex-col items-end",children:[(0,e.jsx)("span",{className:"text-caption font-semibold uppercase tracking-widest leading-none mb-1 text-hud-dim",children:t("indicators.roll")}),(0,e.jsxs)("span",{className:"text-caption font-mono font-bold text-oRed",children:[x.roll.toFixed(1),"°"]})]}),(0,e.jsxs)("div",{className:"flex flex-col items-end",children:[(0,e.jsx)("span",{className:"text-caption font-semibold uppercase tracking-widest leading-none mb-1 text-hud-dim",children:t("indicators.pitch")}),(0,e.jsxs)("span",{className:"text-caption font-mono font-bold text-oBlue",children:[x.pitch.toFixed(1),"°"]})]}),(0,e.jsxs)("div",{className:"flex flex-col items-end",children:[(0,e.jsx)("span",{className:"text-caption font-semibold uppercase tracking-widest leading-none mb-1 text-hud-dim",children:t("indicators.yaw")}),(0,e.jsxs)("span",{className:"text-caption font-mono font-bold text-oYellow",children:[x.yaw.toFixed(1),"°"]})]})]})})}],90741)},84237,function(t){t.n(t.i(90741))},83646,t=>{"use strict";var e=t.i(67561);t.s(["default",0,()=>(0,e.useOcearoContext)().tokens])}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,58700,e=>{"use strict";var t=e.i(43476);e.i(71645);var s=e.i(49721),i=e.i(68757);e.s(["default",0,({content:e,onClose:n})=>{if(!e)return null;let a=e.split("\n").filter(e=>e.trim());return(0,t.jsxs)("div",{className:"tesla-card min-w-[180px] max-w-[240px] bg-hud-bg/90 backdrop-blur-xl ",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,t.jsx)("span",{className:"text-caption font-semibold uppercase tracking-[0.2em] text-hud-muted",children:"VESSEL"}),(0,t.jsx)("button",{onClick:e=>{e.stopPropagation(),n?.()},className:"w-5 h-5 flex items-center justify-center rounded-full bg-hud-elevated text-hud-muted hover:text-hud-main hover:bg-oRed/20 transition-all",children:(0,t.jsx)(s.FontAwesomeIcon,{icon:i.faTimes,className:"text-xs"})})]}),(0,t.jsx)("div",{className:"space-y-1.5",children:a.map((e,s)=>{let i=e.indexOf(":"),n=-1!==i?e.substring(0,i).trim():null,a=-1!==i?e.substring(i+1).trim():e.trim();return(0,t.jsxs)("div",{className:"flex items-baseline justify-between gap-3",children:[n&&(0,t.jsx)("span",{className:"text-caption font-semibold uppercase tracking-widest text-hud-muted whitespace-nowrap",children:n}),(0,t.jsx)("span",{className:"text-caption font-semibold text-hud-main truncate text-right",children:a})]},s)})})]})}])},77021,function(e){e.n(e.i(58700))}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,43322,t=>{t.v(e=>Promise.all(["static/chunks/2kmptoy43h0mx.js"].map(e=>t.l(e))).then(()=>e(56101)))},34882,t=>{t.v(e=>Promise.all(["static/chunks/1ed7ayfg19cjb.js"].map(e=>t.l(e))).then(()=>e(77021)))},59499,t=>{t.v(e=>Promise.all(["static/chunks/3td9mnhvcj9cq.js"].map(e=>t.l(e))).then(()=>e(85003)))},30150,t=>{t.v(e=>Promise.all(["static/chunks/1d81m3g9jqkob.js"].map(e=>t.l(e))).then(()=>e(84237)))},64390,t=>{t.v(e=>Promise.all(["static/chunks/3zqx8h9yg5-ch.js"].map(e=>t.l(e))).then(()=>e(39554)))},93170,t=>{t.v(e=>Promise.all(["static/chunks/0-c2-u5p6bxzo.js","static/chunks/11awvgcou7v4r.js"].map(e=>t.l(e))).then(()=>e(50226)))},48217,t=>{t.v(e=>Promise.all(["static/chunks/2n86yq1wz1yx7.js"].map(e=>t.l(e))).then(()=>e(14774)))},29882,t=>{t.v(e=>Promise.all(["static/chunks/2w71oj1brox5z.js"].map(e=>t.l(e))).then(()=>e(56665)))},93889,t=>{t.v(e=>Promise.all(["static/chunks/1ptj3mv8b_tzs.js"].map(e=>t.l(e))).then(()=>e(58166)))},36258,t=>{t.v(e=>Promise.all(["static/chunks/0iqdztntvxh3c.js","static/chunks/1exvcc71cgr4t.js","static/chunks/0iztd835j5p1n.js","static/chunks/1w1xks0hp_tlr.js"].map(e=>t.l(e))).then(()=>e(59465)))},97820,t=>{t.v(e=>Promise.all(["static/chunks/2wayx8t5r5fi9.js","static/chunks/1w1xks0hp_tlr.js","static/chunks/1exvcc71cgr4t.js"].map(e=>t.l(e))).then(()=>e(69675)))},82041,t=>{t.v(e=>Promise.all(["static/chunks/0w_skktmh3e48.js"].map(e=>t.l(e))).then(()=>e(41994)))},73321,t=>{t.v(e=>Promise.all(["static/chunks/1y35unwvy8p98.js"].map(e=>t.l(e))).then(()=>e(78938)))},11657,t=>{t.v(e=>Promise.all(["static/chunks/144mjqdrx42lq.js"].map(e=>t.l(e))).then(()=>e(75058)))},93540,t=>{t.v(e=>Promise.all(["static/chunks/1g8fbzv0hu0i2.js"].map(e=>t.l(e))).then(()=>e(84809)))},71762,t=>{t.v(e=>Promise.all(["static/chunks/3--qzv1u6c7_7.js"].map(e=>t.l(e))).then(()=>e(91999)))},32598,t=>{t.v(e=>Promise.all(["static/chunks/3nm7o0eq5abhg.js"].map(e=>t.l(e))).then(()=>e(79224)))},32673,t=>{t.v(e=>Promise.all(["static/chunks/2g-xpe7xnropn.js"].map(e=>t.l(e))).then(()=>e(36540)))},11220,t=>{t.v(e=>Promise.all(["static/chunks/1l-jew0-1-3eq.js","static/chunks/1w1xks0hp_tlr.js","static/chunks/1exvcc71cgr4t.js"].map(e=>t.l(e))).then(()=>e(27404)))},39271,t=>{"use strict";var e=t.i(43476),a=t.i(71645);t.i(85269);var s=t.i(22831),l=t.i(49721),n=t.i(68757),i=t.i(30206);let r=[10,30,60,120],c=()=>(0,a.useSyncExternalStore)(i.subscribeReplay,i.getReplayState,i.getReplayState);t.s(["default",0,()=>{let{t}=(0,s.useTranslation)(),a=c();if(!a.active)return null;let u=Math.max(1,a.end-a.start);return(0,e.jsxs)("div",{className:"hud-halo flex items-center gap-3 px-3 py-2 rounded-2xl bg-hud-bg/80 backdrop-blur select-none w-[min(40rem,100%)] flex-wrap",children:[(0,e.jsx)("span",{className:"text-caption font-semibold uppercase tracking-widest text-oBlue shrink-0",children:t("replay.title")}),(0,e.jsx)("button",{type:"button",onClick:i.togglePlay,"aria-label":t(a.playing?"replay.pause":"replay.play"),className:"w-9 h-9 rounded-full bg-hud-elevated text-hud-main flex items-center justify-center shrink-0",children:(0,e.jsx)(l.FontAwesomeIcon,{icon:a.playing?n.faPause:n.faPlay})}),(0,e.jsx)("input",{type:"range",min:a.start,max:a.end,step:1e3,value:a.time,onChange:t=>(0,i.seekReplay)(Number(t.target.value)),"aria-label":t("replay.timeline"),className:"flex-1 min-w-0 accent-oBlue"}),(0,e.jsx)("span",{className:"text-label font-semibold tabular-nums text-hud-main shrink-0",children:new Date(a.time).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),(0,e.jsxs)("span",{className:"text-caption text-hud-muted tabular-nums shrink-0",children:[Math.round((a.time-a.start)/u*100),"%"]}),(0,e.jsx)("div",{className:"flex gap-1 shrink-0",children:r.map(t=>(0,e.jsxs)("button",{type:"button",onClick:()=>(0,i.setReplaySpeed)(t),className:`px-2 py-1 rounded-lg text-caption font-semibold ${a.speed===t?"bg-oBlue text-white":"text-hud-muted hover:text-hud-main"}`,children:["×",t]},t))}),(0,e.jsx)("button",{type:"button",onClick:i.stopReplay,"aria-label":t("replay.close"),className:"w-8 h-8 rounded-full text-hud-muted hover:text-hud-main flex items-center justify-center shrink-0",children:(0,e.jsx)(l.FontAwesomeIcon,{icon:n.faXmark})})]})},"useReplay",0,c])},66984,t=>{t.v(e=>Promise.all(["static/chunks/0jpa5m78l0ib0.js"].map(e=>t.l(e))).then(()=>e(79261)))},72466,t=>{"use strict";let e={WARNING_THRESHOLD:50,DANGER_THRESHOLD:20,CHARGING_THRESHOLD:13.2,MIN_VOLTAGE:10.5,MAX_VOLTAGE:14.4};t.s(["BATTERY_CONFIG",0,e,"estimateStateOfCharge",0,t=>{if(!t||"number"!=typeof t)return 0;if(t>=13)return 100;if(t<=e.MIN_VOLTAGE)return 0;let a=[{voltage:12.85,soc:100},{voltage:12.75,soc:90},{voltage:12.65,soc:80},{voltage:12.55,soc:70},{voltage:12.45,soc:60},{voltage:12.35,soc:50},{voltage:12.25,soc:40},{voltage:12.15,soc:30},{voltage:12.05,soc:20},{voltage:11.95,soc:15},{voltage:11.8,soc:10},{voltage:11.6,soc:5},{voltage:10.5,soc:0}];for(let e=0;e<a.length-1;e++)if(t>=a[e+1].voltage){let s=a[e].voltage,l=a[e+1].voltage,n=a[e].soc,i=a[e+1].soc;return Math.round(i+(t-l)/(s-l)*(n-i))}return 0},"isBatteryCharging",0,t=>t>e.CHARGING_THRESHOLD])},58567,t=>{"use strict";var e=t.i(83402);t.s(["RENDER_QUALITIES",0,["auto","high","pi"],"getRenderProfile",0,()=>{let t=e.default.get("renderQuality")||"auto";return"pi"===t||"auto"===t&&(()=>{if("u"<typeof navigator)return!1;if(/aarch64|armv7|armv8|arm64|raspbian|raspberry/i.test(navigator.userAgent))return!0;let t=navigator.hardwareConcurrency||8,e=navigator.deviceMemory||8;return t<=4&&e<=4})()?{id:"pi",fps:30,dpr:1,antialias:!1}:{id:"high",fps:60,dpr:Math.min(window.devicePixelRatio||1,1.5),antialias:!0}}])},52822,(t,e,a)=>{"use strict";var s=t.r(71645),l=t.r(2239),n="function"==typeof Object.is?Object.is:function(t,e){return t===e&&(0!==t||1/t==1/e)||t!=t&&e!=e},i=l.useSyncExternalStore,r=s.useRef,c=s.useEffect,u=s.useMemo,o=s.useDebugValue;a.useSyncExternalStoreWithSelector=function(t,e,a,s,l){var h=r(null);if(null===h.current){var m={hasValue:!1,value:null};h.current=m}else m=h.current;var p=i(t,(h=u(function(){function t(t){if(!c){if(c=!0,i=t,t=s(t),void 0!==l&&m.hasValue){var e=m.value;if(l(e,t))return r=e}return r=t}if(e=r,n(i,t))return e;var a=s(t);return void 0!==l&&l(e,a)?(i=t,e):(i=t,r=a)}var i,r,c=!1,u=void 0===a?null:a;return[function(){return t(e())},null===u?void 0:function(){return t(u())}]},[e,a,s,l]))[0],h[1]);return c(function(){m.hasValue=!0,m.value=p},[p]),o(p),p}},30224,(t,e,a)=>{"use strict";t.i(47167),e.exports=t.r(52822)}]);
@@ -0,0 +1,446 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,78461,e=>{"use strict";var t=e.i(71645),n=e.i(85709),i=e.i(67561);let r=["navigation.headingTrue","navigation.headingMagnetic","navigation.courseOverGroundTrue","navigation.courseOverGroundMagnetic","navigation.position"],a=null;e.s(["default",0,()=>{let{convertLatLonToXY:e}=(0,i.useOcearoContext)(),o=(0,n.useSignalKPaths)(r),s=o["navigation.headingTrue"]??o["navigation.headingMagnetic"]??o["navigation.courseOverGroundTrue"]??o["navigation.courseOverGroundMagnetic"],l=Number.isFinite(s),u=o["navigation.position"],c=Number.isFinite(u?.latitude)&&Number.isFinite(u?.longitude);return{heading:l?s:0,offset:(0,t.useMemo)(()=>{if(!c)return{x:0,y:0};let t={lat:u.latitude,lon:u.longitude};return e(t,(a||(a=t),a))},[u,c,e]),hasFix:c,hasHeading:l}}])},5941,e=>{"use strict";let t=[1,.8,.6];function n(e){return t[Math.min(Math.max(e,0),2)]}function i(e,t){return Math.max(.05,Math.min(1,1-.6*e-.3*t))}function r(e,t){return Math.PI/6*Math.max(0,1-1.9438444924574*t/30)*(1-e)}function a(e,t,n){let i=Math.min(1,1.9438444924574*(e.tws||0)/30),r=t.tension||.5;switch(n){case"mainSheet":return Math.min(1,.5*i+.3*r+.3*t.mainCar);case"jibSheet":return Math.min(1,.5*i+.3*r+.3*t.jibCar);case"vang":return Math.min(1,.6*i+.4*r);case"cunningham":return Math.min(1,.4*i+.6*r);case"backstay":return Math.min(1,Math.max(0,1-Math.abs(Math.atan2(Math.sin(e.awa||0),Math.cos(e.awa||0)))/Math.PI)*i*.9+.3*r);default:return r}}function o(e){let t=Math.max(0,Math.min(1,e));if(t<=.5){let e=2*t;return{r:e,g:1-.3*e,b:0}}return{r:1,g:.7*(1-(t-.5)*2),b:0}}e.s(["getReefHeightFactor",0,n,"tensionToColor",0,o,"updateSailTrim",0,function({tws:e=0,twa:t=0,awa:s=0,mainCar:l=.5,jibCar:u=.5,tension:c=.5}){let d,f=(d=1.9438444924574*e)>25?2:+(d>18),p=n(f),m=i(l,c),h=i(u,c),v=r(l,e),g=r(u,e),y={tws:e,twa:t,awa:s},b={mainCar:l,jibCar:u,tension:c},x={mainSheet:a(y,b,"mainSheet"),jibSheet:a(y,b,"jibSheet"),vang:a(y,b,"vang"),cunningham:a(y,b,"cunningham"),backstay:a(y,b,"backstay")},w={mainSheet:o(x.mainSheet),jibSheet:o(x.jibSheet),vang:o(x.vang),cunningham:o(x.cunningham),backstay:o(x.backstay)};return{reefLevel:f,reefHeightFactor:p,mainCamber:m,jibCamber:h,mainTwist:v,jibTwist:g,tensions:x,tensionColors:w}}])},77291,e=>{"use strict";var t=e.i(71645),n=e.i(62588),i=e.i(85709),r=e.i(61969),a=e.i(539);let o=Math.PI/180,s={power:1,sail:2,fishing:3,restricted:4},l=e=>{let t=String(e.navState||"").toLowerCase();if(/not under command|restricted|constrained/.test(t))return"restricted";if(/fishing/.test(t))return"fishing";if(/sailing/.test(t))return"sail";if(/motoring|engine/.test(t))return"power";let n=Number(e.shipType);return 36===n?"sail":30===n?"fishing":33===n?"restricted":"power"},u=(e,t,n)=>(0,a.wrapPi)(Math.atan2(t.x-e.x,t.y-e.y)-n),c=(e,t,n)=>{let i={x:0,y:0},r=u(i,t,e.course),l=u(t,i,t.course),c=Math.sign(l)||1,d=e=>Math.abs(e)>112.5*o;if(d(r)&&t.speed>e.speed)return{ownRole:"stand-on",rule:"13",reason:"overtakenByTarget",targetTurn:0};if(d(l)&&e.speed>t.speed)return{ownRole:"give-way",rule:"13",reason:"overtaking",targetTurn:0};let f=s[e.category]??1,p=s[t.category]??1;if(f!==p)return f<p?{ownRole:"give-way",rule:"18",reason:`giveWayTo_${t.category}`,targetTurn:0}:{ownRole:"stand-on",rule:"18",reason:`standOnFrom_${t.category}`,targetTurn:c};if("sail"===e.category&&Number.isFinite(n)){let i=(0,a.wrapPi)(n-e.course)>=0?"starboard":"port";return i!==((0,a.wrapPi)(n-t.course)>=0?"starboard":"port")?"port"===i?{ownRole:"give-way",rule:"12a-i",reason:"portTack",targetTurn:0}:{ownRole:"stand-on",rule:"12a-i",reason:"targetPortTack",targetTurn:c}:t.x*Math.sin(n)+t.y*Math.cos(n)>0?{ownRole:"stand-on",rule:"12a-ii",reason:"targetWindward",targetTurn:c}:{ownRole:"give-way",rule:"12a-ii",reason:"ownWindward",targetTurn:0}}return Math.abs((0,a.wrapPi)(t.course-e.course-Math.PI))<10*o&&Math.abs(r)<6*o?{ownRole:"both",rule:"14",reason:"headOn",targetTurn:1}:r>0?{ownRole:"give-way",rule:"15",reason:"crossingStarboard",targetTurn:0}:{ownRole:"stand-on",rule:"15",reason:"crossingPort",targetTurn:c}};var d=e.i(83402),f=e.i(67561);let p=[],m=["navigation.speedOverGround","navigation.courseOverGroundTrue"];e.s(["default",0,({always:e=!1}={})=>{let a,o,{targets:s}=(0,n.useAIS)({passive:!0}),{states:u}=(0,f.useOcearoContext)(),h=e||u.ais?s:p,{twd:v,heading:g}=(0,r.default)(),y=(0,i.useSignalKPaths)(m),b=(a=(0,i.useSignalKPrefix)("propulsion."),o=d.default.get("ownVesselCategory"),(0,t.useMemo)(()=>"sail"===o||"power"===o?o:Object.entries(a).some(([e,t])=>e.endsWith(".revolutions")&&Number(t)>.5||e.endsWith(".state")&&"started"===t)?"power":"sail",[a,o])),x=d.default.get("aisLengthScalingFactor")||.7;return(0,t.useMemo)(()=>{let e=y["navigation.courseOverGroundTrue"]??g,t=y["navigation.speedOverGround"]??0,n=[];if(Number.isFinite(e))for(let i of h){if("danger"!==i.risk)continue;let r=i.cog??i.cogMagnetic??i.heading;if(!Number.isFinite(r)||null===i.sceneX)continue;let a=c({course:e,speed:t,category:b},{x:i.sceneX/x,y:-i.sceneZ/x,course:r,speed:i.sog??0,category:l(i)},v);n.push({target:{...i},role:a})}n.sort((e,t)=>(e.target.tcpaSeconds??1/0)-(t.target.tcpaSeconds??1/0));let i={};for(let e of h)"close"===e.risk?i[e.mmsi]="close":"danger"===e.risk&&(i[e.mmsi]="giveWay");for(let e of n)i[e.target.mmsi]="stand-on"===e.role.ownRole?"yields":"giveWay";let r=n.filter(e=>"stand-on"!==e.role.ownRole);return{ownCategory:b,encounters:n,statuses:i,giveWay:r.length>0,giveWayTo:r[0]||null,primary:n[0]||null}},[h,v,g,y,b,x])}],77291)},61969,e=>{"use strict";var t=e.i(71645),n=e.i(85709),i=e.i(539);let r=180/Math.PI,a=["navigation.speedThroughWater","navigation.speedOverGround","navigation.headingTrue","navigation.courseOverGroundTrue","environment.wind.speedTrue","environment.wind.angleTrueWater","environment.wind.directionTrue","performance.polarSpeed","performance.polarSpeedRatio","navigation.courseGreatCircle.nextPoint.bearingTrue"];e.s(["default",0,()=>{let e=(0,n.useSignalKPaths)(a);return(0,t.useMemo)(()=>{let t=e["navigation.speedThroughWater"]??e["navigation.speedOverGround"]??null,n=e["navigation.headingTrue"]??e["navigation.courseOverGroundTrue"]??null,a=e["environment.wind.speedTrue"]??null,o=e["environment.wind.angleTrueWater"]??null,s=e["environment.wind.directionTrue"]??null;null===s&&Number.isFinite(o)&&Number.isFinite(n)&&(s=(0,i.wrapPi)(n+o));let l=e["performance.polarSpeed"]??(Number.isFinite(a)&&Number.isFinite(o)?(0,i.polarSpeedSi)(a,o):null),u=e["performance.polarSpeedRatio"]??null;null===u&&Number.isFinite(t)&&Number.isFinite(l)&&l>.2&&(u=t/l);let c=Number.isFinite(t)&&Number.isFinite(l)?(t-l)*1.943844:null,d=null,f=null,p=!Number.isFinite(o)||Math.abs(o)<Math.PI/2;if(Number.isFinite(a)){let e=p?(0,i.optimalUpwind)(1.943844*a):(0,i.optimalDownwind)(1.943844*a);e&&(d=e.twa/r,Number.isFinite(s)&&Number.isFinite(o)&&(f=(0,i.wrapPi)(s-Math.sign(o||1)*d)))}let m=e["navigation.courseGreatCircle.nextPoint.bearingTrue"],h=null;if(Number.isFinite(m)&&Number.isFinite(s)&&Number.isFinite(a)){let e=(0,i.bestVmcHeading)({twd:s,tws:a,bearing:m}),t=Number.isFinite(n)?(0,i.vmcForHeading)({twd:s,tws:a,bearing:m,heading:n}):null;h=e?{bearing:m,best:e,current:t}:null}return{ratio:u,polarSpeed:l,boatSpeed:t,deltaKn:c,heading:n,twd:s,tws:a,twa:o,targetTwa:d,targetHeading:f,upwind:p,vmc:h}},[e])}])},83646,e=>{"use strict";var t=e.i(67561);e.s(["default",0,()=>(0,t.useOcearoContext)().tokens])},31067,e=>{"use strict";function t(){return(t=Object.assign.bind()).apply(null,arguments)}e.s(["default",()=>t])},43216,e=>{"use strict";let t,n;var i=e.i(31067),r=e.i(71645),a=e.i(90072),o=e.i(90874),s=a,l=e.i(32533),u=a,c=e.i(8560),d=e.i(31497);class f extends u.ShaderMaterial{constructor(e){super({type:"LineMaterial",uniforms:u.UniformsUtils.clone(u.UniformsUtils.merge([c.UniformsLib.common,c.UniformsLib.fog,{worldUnits:{value:1},linewidth:{value:1},resolution:{value:new u.Vector2(1,1)},dashOffset:{value:0},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1}}])),vertexShader:`
2
+ #include <common>
3
+ #include <fog_pars_vertex>
4
+ #include <logdepthbuf_pars_vertex>
5
+ #include <clipping_planes_pars_vertex>
6
+
7
+ uniform float linewidth;
8
+ uniform vec2 resolution;
9
+
10
+ attribute vec3 instanceStart;
11
+ attribute vec3 instanceEnd;
12
+
13
+ #ifdef USE_COLOR
14
+ #ifdef USE_LINE_COLOR_ALPHA
15
+ varying vec4 vLineColor;
16
+ attribute vec4 instanceColorStart;
17
+ attribute vec4 instanceColorEnd;
18
+ #else
19
+ varying vec3 vLineColor;
20
+ attribute vec3 instanceColorStart;
21
+ attribute vec3 instanceColorEnd;
22
+ #endif
23
+ #endif
24
+
25
+ #ifdef WORLD_UNITS
26
+
27
+ varying vec4 worldPos;
28
+ varying vec3 worldStart;
29
+ varying vec3 worldEnd;
30
+
31
+ #ifdef USE_DASH
32
+
33
+ varying vec2 vUv;
34
+
35
+ #endif
36
+
37
+ #else
38
+
39
+ varying vec2 vUv;
40
+
41
+ #endif
42
+
43
+ #ifdef USE_DASH
44
+
45
+ uniform float dashScale;
46
+ attribute float instanceDistanceStart;
47
+ attribute float instanceDistanceEnd;
48
+ varying float vLineDistance;
49
+
50
+ #endif
51
+
52
+ void trimSegment( const in vec4 start, inout vec4 end ) {
53
+
54
+ // trim end segment so it terminates between the camera plane and the near plane
55
+
56
+ // conservative estimate of the near plane
57
+ float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column
58
+ float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column
59
+ float nearEstimate = - 0.5 * b / a;
60
+
61
+ float alpha = ( nearEstimate - start.z ) / ( end.z - start.z );
62
+
63
+ end.xyz = mix( start.xyz, end.xyz, alpha );
64
+
65
+ }
66
+
67
+ void main() {
68
+
69
+ #ifdef USE_COLOR
70
+
71
+ vLineColor = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;
72
+
73
+ #endif
74
+
75
+ #ifdef USE_DASH
76
+
77
+ vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;
78
+ vUv = uv;
79
+
80
+ #endif
81
+
82
+ float aspect = resolution.x / resolution.y;
83
+
84
+ // camera space
85
+ vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );
86
+ vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );
87
+
88
+ #ifdef WORLD_UNITS
89
+
90
+ worldStart = start.xyz;
91
+ worldEnd = end.xyz;
92
+
93
+ #else
94
+
95
+ vUv = uv;
96
+
97
+ #endif
98
+
99
+ // special case for perspective projection, and segments that terminate either in, or behind, the camera plane
100
+ // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space
101
+ // but we need to perform ndc-space calculations in the shader, so we must address this issue directly
102
+ // perhaps there is a more elegant solution -- WestLangley
103
+
104
+ bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column
105
+
106
+ if ( perspective ) {
107
+
108
+ if ( start.z < 0.0 && end.z >= 0.0 ) {
109
+
110
+ trimSegment( start, end );
111
+
112
+ } else if ( end.z < 0.0 && start.z >= 0.0 ) {
113
+
114
+ trimSegment( end, start );
115
+
116
+ }
117
+
118
+ }
119
+
120
+ // clip space
121
+ vec4 clipStart = projectionMatrix * start;
122
+ vec4 clipEnd = projectionMatrix * end;
123
+
124
+ // ndc space
125
+ vec3 ndcStart = clipStart.xyz / clipStart.w;
126
+ vec3 ndcEnd = clipEnd.xyz / clipEnd.w;
127
+
128
+ // direction
129
+ vec2 dir = ndcEnd.xy - ndcStart.xy;
130
+
131
+ // account for clip-space aspect ratio
132
+ dir.x *= aspect;
133
+ dir = normalize( dir );
134
+
135
+ #ifdef WORLD_UNITS
136
+
137
+ // get the offset direction as perpendicular to the view vector
138
+ vec3 worldDir = normalize( end.xyz - start.xyz );
139
+ vec3 offset;
140
+ if ( position.y < 0.5 ) {
141
+
142
+ offset = normalize( cross( start.xyz, worldDir ) );
143
+
144
+ } else {
145
+
146
+ offset = normalize( cross( end.xyz, worldDir ) );
147
+
148
+ }
149
+
150
+ // sign flip
151
+ if ( position.x < 0.0 ) offset *= - 1.0;
152
+
153
+ float forwardOffset = dot( worldDir, vec3( 0.0, 0.0, 1.0 ) );
154
+
155
+ // don't extend the line if we're rendering dashes because we
156
+ // won't be rendering the endcaps
157
+ #ifndef USE_DASH
158
+
159
+ // extend the line bounds to encompass endcaps
160
+ start.xyz += - worldDir * linewidth * 0.5;
161
+ end.xyz += worldDir * linewidth * 0.5;
162
+
163
+ // shift the position of the quad so it hugs the forward edge of the line
164
+ offset.xy -= dir * forwardOffset;
165
+ offset.z += 0.5;
166
+
167
+ #endif
168
+
169
+ // endcaps
170
+ if ( position.y > 1.0 || position.y < 0.0 ) {
171
+
172
+ offset.xy += dir * 2.0 * forwardOffset;
173
+
174
+ }
175
+
176
+ // adjust for linewidth
177
+ offset *= linewidth * 0.5;
178
+
179
+ // set the world position
180
+ worldPos = ( position.y < 0.5 ) ? start : end;
181
+ worldPos.xyz += offset;
182
+
183
+ // project the worldpos
184
+ vec4 clip = projectionMatrix * worldPos;
185
+
186
+ // shift the depth of the projected points so the line
187
+ // segments overlap neatly
188
+ vec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;
189
+ clip.z = clipPose.z * clip.w;
190
+
191
+ #else
192
+
193
+ vec2 offset = vec2( dir.y, - dir.x );
194
+ // undo aspect ratio adjustment
195
+ dir.x /= aspect;
196
+ offset.x /= aspect;
197
+
198
+ // sign flip
199
+ if ( position.x < 0.0 ) offset *= - 1.0;
200
+
201
+ // endcaps
202
+ if ( position.y < 0.0 ) {
203
+
204
+ offset += - dir;
205
+
206
+ } else if ( position.y > 1.0 ) {
207
+
208
+ offset += dir;
209
+
210
+ }
211
+
212
+ // adjust for linewidth
213
+ offset *= linewidth;
214
+
215
+ // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...
216
+ offset /= resolution.y;
217
+
218
+ // select end
219
+ vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;
220
+
221
+ // back to clip space
222
+ offset *= clip.w;
223
+
224
+ clip.xy += offset;
225
+
226
+ #endif
227
+
228
+ gl_Position = clip;
229
+
230
+ vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation
231
+
232
+ #include <logdepthbuf_vertex>
233
+ #include <clipping_planes_vertex>
234
+ #include <fog_vertex>
235
+
236
+ }
237
+ `,fragmentShader:`
238
+ uniform vec3 diffuse;
239
+ uniform float opacity;
240
+ uniform float linewidth;
241
+
242
+ #ifdef USE_DASH
243
+
244
+ uniform float dashOffset;
245
+ uniform float dashSize;
246
+ uniform float gapSize;
247
+
248
+ #endif
249
+
250
+ varying float vLineDistance;
251
+
252
+ #ifdef WORLD_UNITS
253
+
254
+ varying vec4 worldPos;
255
+ varying vec3 worldStart;
256
+ varying vec3 worldEnd;
257
+
258
+ #ifdef USE_DASH
259
+
260
+ varying vec2 vUv;
261
+
262
+ #endif
263
+
264
+ #else
265
+
266
+ varying vec2 vUv;
267
+
268
+ #endif
269
+
270
+ #include <common>
271
+ #include <fog_pars_fragment>
272
+ #include <logdepthbuf_pars_fragment>
273
+ #include <clipping_planes_pars_fragment>
274
+
275
+ #ifdef USE_COLOR
276
+ #ifdef USE_LINE_COLOR_ALPHA
277
+ varying vec4 vLineColor;
278
+ #else
279
+ varying vec3 vLineColor;
280
+ #endif
281
+ #endif
282
+
283
+ vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {
284
+
285
+ float mua;
286
+ float mub;
287
+
288
+ vec3 p13 = p1 - p3;
289
+ vec3 p43 = p4 - p3;
290
+
291
+ vec3 p21 = p2 - p1;
292
+
293
+ float d1343 = dot( p13, p43 );
294
+ float d4321 = dot( p43, p21 );
295
+ float d1321 = dot( p13, p21 );
296
+ float d4343 = dot( p43, p43 );
297
+ float d2121 = dot( p21, p21 );
298
+
299
+ float denom = d2121 * d4343 - d4321 * d4321;
300
+
301
+ float numer = d1343 * d4321 - d1321 * d4343;
302
+
303
+ mua = numer / denom;
304
+ mua = clamp( mua, 0.0, 1.0 );
305
+ mub = ( d1343 + d4321 * ( mua ) ) / d4343;
306
+ mub = clamp( mub, 0.0, 1.0 );
307
+
308
+ return vec2( mua, mub );
309
+
310
+ }
311
+
312
+ void main() {
313
+
314
+ #include <clipping_planes_fragment>
315
+
316
+ #ifdef USE_DASH
317
+
318
+ if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps
319
+
320
+ if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX
321
+
322
+ #endif
323
+
324
+ float alpha = opacity;
325
+
326
+ #ifdef WORLD_UNITS
327
+
328
+ // Find the closest points on the view ray and the line segment
329
+ vec3 rayEnd = normalize( worldPos.xyz ) * 1e5;
330
+ vec3 lineDir = worldEnd - worldStart;
331
+ vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );
332
+
333
+ vec3 p1 = worldStart + lineDir * params.x;
334
+ vec3 p2 = rayEnd * params.y;
335
+ vec3 delta = p1 - p2;
336
+ float len = length( delta );
337
+ float norm = len / linewidth;
338
+
339
+ #ifndef USE_DASH
340
+
341
+ #ifdef USE_ALPHA_TO_COVERAGE
342
+
343
+ float dnorm = fwidth( norm );
344
+ alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );
345
+
346
+ #else
347
+
348
+ if ( norm > 0.5 ) {
349
+
350
+ discard;
351
+
352
+ }
353
+
354
+ #endif
355
+
356
+ #endif
357
+
358
+ #else
359
+
360
+ #ifdef USE_ALPHA_TO_COVERAGE
361
+
362
+ // artifacts appear on some hardware if a derivative is taken within a conditional
363
+ float a = vUv.x;
364
+ float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;
365
+ float len2 = a * a + b * b;
366
+ float dlen = fwidth( len2 );
367
+
368
+ if ( abs( vUv.y ) > 1.0 ) {
369
+
370
+ alpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );
371
+
372
+ }
373
+
374
+ #else
375
+
376
+ if ( abs( vUv.y ) > 1.0 ) {
377
+
378
+ float a = vUv.x;
379
+ float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;
380
+ float len2 = a * a + b * b;
381
+
382
+ if ( len2 > 1.0 ) discard;
383
+
384
+ }
385
+
386
+ #endif
387
+
388
+ #endif
389
+
390
+ vec4 diffuseColor = vec4( diffuse, alpha );
391
+ #ifdef USE_COLOR
392
+ #ifdef USE_LINE_COLOR_ALPHA
393
+ diffuseColor *= vLineColor;
394
+ #else
395
+ diffuseColor.rgb *= vLineColor;
396
+ #endif
397
+ #endif
398
+
399
+ #include <logdepthbuf_fragment>
400
+
401
+ gl_FragColor = diffuseColor;
402
+
403
+ #include <tonemapping_fragment>
404
+ #include <${d.version>=154?"colorspace_fragment":"encodings_fragment"}>
405
+ #include <fog_fragment>
406
+ #include <premultiplied_alpha_fragment>
407
+
408
+ }
409
+ `,clipping:!0}),this.isLineMaterial=!0,this.onBeforeCompile=function(){this.transparent?this.defines.USE_LINE_COLOR_ALPHA="1":delete this.defines.USE_LINE_COLOR_ALPHA},Object.defineProperties(this,{color:{enumerable:!0,get:function(){return this.uniforms.diffuse.value},set:function(e){this.uniforms.diffuse.value=e}},worldUnits:{enumerable:!0,get:function(){return"WORLD_UNITS"in this.defines},set:function(e){!0===e?this.defines.WORLD_UNITS="":delete this.defines.WORLD_UNITS}},linewidth:{enumerable:!0,get:function(){return this.uniforms.linewidth.value},set:function(e){this.uniforms.linewidth.value=e}},dashed:{enumerable:!0,get:function(){return"USE_DASH"in this.defines},set(e){!!e!="USE_DASH"in this.defines&&(this.needsUpdate=!0),!0===e?this.defines.USE_DASH="":delete this.defines.USE_DASH}},dashScale:{enumerable:!0,get:function(){return this.uniforms.dashScale.value},set:function(e){this.uniforms.dashScale.value=e}},dashSize:{enumerable:!0,get:function(){return this.uniforms.dashSize.value},set:function(e){this.uniforms.dashSize.value=e}},dashOffset:{enumerable:!0,get:function(){return this.uniforms.dashOffset.value},set:function(e){this.uniforms.dashOffset.value=e}},gapSize:{enumerable:!0,get:function(){return this.uniforms.gapSize.value},set:function(e){this.uniforms.gapSize.value=e}},opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(e){this.uniforms.opacity.value=e}},resolution:{enumerable:!0,get:function(){return this.uniforms.resolution.value},set:function(e){this.uniforms.resolution.value.copy(e)}},alphaToCoverage:{enumerable:!0,get:function(){return"USE_ALPHA_TO_COVERAGE"in this.defines},set:function(e){!!e!="USE_ALPHA_TO_COVERAGE"in this.defines&&(this.needsUpdate=!0),!0===e?(this.defines.USE_ALPHA_TO_COVERAGE="",this.extensions.derivatives=!0):(delete this.defines.USE_ALPHA_TO_COVERAGE,this.extensions.derivatives=!1)}}}),this.setValues(e)}}let p=d.version>=125?"uv1":"uv2",m=new s.Vector4,h=new s.Vector3,v=new s.Vector3,g=new s.Vector4,y=new s.Vector4,b=new s.Vector4,x=new s.Vector3,w=new s.Matrix4,S=new s.Line3,M=new s.Vector3,E=new s.Box3,_=new s.Sphere,A=new s.Vector4;function P(e,t,i){return A.set(0,0,-t,1).applyMatrix4(e.projectionMatrix),A.multiplyScalar(1/A.w),A.x=n/i.width,A.y=n/i.height,A.applyMatrix4(e.projectionMatrixInverse),A.multiplyScalar(1/A.w),Math.abs(Math.max(A.x,A.y))}class T extends s.Mesh{constructor(e=new l.LineSegmentsGeometry,t=new f({color:0xffffff*Math.random()})){super(e,t),this.isLineSegments2=!0,this.type="LineSegments2"}computeLineDistances(){let e=this.geometry,t=e.attributes.instanceStart,n=e.attributes.instanceEnd,i=new Float32Array(2*t.count);for(let e=0,r=0,a=t.count;e<a;e++,r+=2)h.fromBufferAttribute(t,e),v.fromBufferAttribute(n,e),i[r]=0===r?0:i[r-1],i[r+1]=i[r]+h.distanceTo(v);let r=new s.InstancedInterleavedBuffer(i,2,1);return e.setAttribute("instanceDistanceStart",new s.InterleavedBufferAttribute(r,1,0)),e.setAttribute("instanceDistanceEnd",new s.InterleavedBufferAttribute(r,1,1)),this}raycast(e,i){let r,a,o=this.material.worldUnits,l=e.camera;null!==l||o||console.error('LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.');let u=void 0!==e.params.Line2&&e.params.Line2.threshold||0;t=e.ray;let c=this.matrixWorld,d=this.geometry,f=this.material;if(n=f.linewidth+u,null===d.boundingSphere&&d.computeBoundingSphere(),_.copy(d.boundingSphere).applyMatrix4(c),o)r=.5*n;else{let e=Math.max(l.near,_.distanceToPoint(t.origin));r=P(l,e,f.resolution)}if(_.radius+=r,!1!==t.intersectsSphere(_)){if(null===d.boundingBox&&d.computeBoundingBox(),E.copy(d.boundingBox).applyMatrix4(c),o)a=.5*n;else{let e=Math.max(l.near,E.distanceToPoint(t.origin));a=P(l,e,f.resolution)}E.expandByScalar(a),!1!==t.intersectsBox(E)&&(o?function(e,i){let r=e.matrixWorld,a=e.geometry,o=a.attributes.instanceStart,l=a.attributes.instanceEnd,u=Math.min(a.instanceCount,o.count);for(let a=0;a<u;a++){S.start.fromBufferAttribute(o,a),S.end.fromBufferAttribute(l,a),S.applyMatrix4(r);let u=new s.Vector3,c=new s.Vector3;t.distanceSqToSegment(S.start,S.end,c,u),c.distanceTo(u)<.5*n&&i.push({point:c,pointOnLine:u,distance:t.origin.distanceTo(c),object:e,face:null,faceIndex:a,uv:null,[p]:null})}}(this,i):function(e,i,r){let a=i.projectionMatrix,o=e.material.resolution,l=e.matrixWorld,u=e.geometry,c=u.attributes.instanceStart,d=u.attributes.instanceEnd,f=Math.min(u.instanceCount,c.count),m=-i.near;t.at(1,b),b.w=1,b.applyMatrix4(i.matrixWorldInverse),b.applyMatrix4(a),b.multiplyScalar(1/b.w),b.x*=o.x/2,b.y*=o.y/2,b.z=0,x.copy(b),w.multiplyMatrices(i.matrixWorldInverse,l);for(let i=0;i<f;i++){if(g.fromBufferAttribute(c,i),y.fromBufferAttribute(d,i),g.w=1,y.w=1,g.applyMatrix4(w),y.applyMatrix4(w),g.z>m&&y.z>m)continue;if(g.z>m){let e=g.z-y.z,t=(g.z-m)/e;g.lerp(y,t)}else if(y.z>m){let e=y.z-g.z,t=(y.z-m)/e;y.lerp(g,t)}g.applyMatrix4(a),y.applyMatrix4(a),g.multiplyScalar(1/g.w),y.multiplyScalar(1/y.w),g.x*=o.x/2,g.y*=o.y/2,y.x*=o.x/2,y.y*=o.y/2,S.start.copy(g),S.start.z=0,S.end.copy(y),S.end.z=0;let u=S.closestPointToPointParameter(x,!0);S.at(u,M);let f=s.MathUtils.lerp(g.z,y.z,u),h=f>=-1&&f<=1,v=x.distanceTo(M)<.5*n;if(h&&v){S.start.fromBufferAttribute(c,i),S.end.fromBufferAttribute(d,i),S.start.applyMatrix4(l),S.end.applyMatrix4(l);let n=new s.Vector3,a=new s.Vector3;t.distanceSqToSegment(S.start,S.end,a,n),r.push({point:a,pointOnLine:n,distance:t.origin.distanceTo(a),object:e,face:null,faceIndex:i,uv:null,[p]:null})}}}(this,l,i))}}onBeforeRender(e){let t=this.material.uniforms;t&&t.resolution&&(e.getViewport(m),this.material.uniforms.resolution.value.set(m.z,m.w))}}var L=l;class O extends L.LineSegmentsGeometry{constructor(){super(),this.isLineGeometry=!0,this.type="LineGeometry"}setPositions(e){let t=e.length-3,n=new Float32Array(2*t);for(let i=0;i<t;i+=3)n[2*i]=e[i],n[2*i+1]=e[i+1],n[2*i+2]=e[i+2],n[2*i+3]=e[i+3],n[2*i+4]=e[i+4],n[2*i+5]=e[i+5];return super.setPositions(n),this}setColors(e,t=3){let n=e.length-t,i=new Float32Array(2*n);if(3===t)for(let r=0;r<n;r+=t)i[2*r]=e[r],i[2*r+1]=e[r+1],i[2*r+2]=e[r+2],i[2*r+3]=e[r+3],i[2*r+4]=e[r+4],i[2*r+5]=e[r+5];else for(let r=0;r<n;r+=t)i[2*r]=e[r],i[2*r+1]=e[r+1],i[2*r+2]=e[r+2],i[2*r+3]=e[r+3],i[2*r+4]=e[r+4],i[2*r+5]=e[r+5],i[2*r+6]=e[r+6],i[2*r+7]=e[r+7];return super.setColors(i,t),this}fromLine(e){let t=e.geometry;return this.setPositions(t.attributes.position.array),this}}class U extends T{constructor(e=new O,t=new f({color:0xffffff*Math.random()})){super(e,t),this.isLine2=!0,this.type="Line2"}}let z=r.forwardRef(function({points:e,color:t=0xffffff,vertexColors:n,linewidth:s,lineWidth:u,segments:c,dashed:d,...p},m){var h,v;let g=(0,o.useThree)(e=>e.size),y=r.useMemo(()=>c?new T:new U,[c]),[b]=r.useState(()=>new f),x=(null==n||null==(h=n[0])?void 0:h.length)===4?4:3,w=r.useMemo(()=>{let i=c?new l.LineSegmentsGeometry:new O,r=e.map(e=>{let t=Array.isArray(e);return e instanceof a.Vector3||e instanceof a.Vector4?[e.x,e.y,e.z]:e instanceof a.Vector2?[e.x,e.y,0]:t&&3===e.length?[e[0],e[1],e[2]]:t&&2===e.length?[e[0],e[1],0]:e});if(i.setPositions(r.flat()),n){t=0xffffff;let e=n.map(e=>e instanceof a.Color?e.toArray():e);i.setColors(e.flat(),x)}return i},[e,c,n,x]);return r.useLayoutEffect(()=>{y.computeLineDistances()},[e,y]),r.useLayoutEffect(()=>{d?b.defines.USE_DASH="":delete b.defines.USE_DASH,b.needsUpdate=!0},[d,b]),r.useEffect(()=>()=>{w.dispose(),b.dispose()},[w]),r.createElement("primitive",(0,i.default)({object:y,ref:m},p),r.createElement("primitive",{object:w,attach:"geometry"}),r.createElement("primitive",(0,i.default)({object:b,attach:"material",color:t,vertexColors:!!n,resolution:[g.width,g.height],linewidth:null!=(v=null!=s?s:u)?v:1,dashed:d,transparent:4===x},p)))});e.s(["Line",0,z],43216)},60099,95393,e=>{"use strict";let t,n;var i=e.i(31067),r=e.i(71645),a=e.i(88014),o=e.i(90072),s=e.i(90874),l=e.i(61949);e.s(["useFrame",()=>l.F],95393);var l=l;let u=new o.Vector3,c=new o.Vector3,d=new o.Vector3,f=new o.Vector2;function p(e,t,n){let i=u.setFromMatrixPosition(e.matrixWorld);i.project(t);let r=n.width/2,a=n.height/2;return[i.x*r+r,-(i.y*a)+a]}let m=e=>1e-10>Math.abs(e)?0:e;function h(e,t,n=""){let i="matrix3d(";for(let n=0;16!==n;n++)i+=m(t[n]*e.elements[n])+(15!==n?",":")");return n+i}let v=(t=[1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1],e=>h(e,t)),g=(n=e=>[1/e,1/e,1/e,1,-1/e,-1/e,-1/e,-1,1/e,1/e,1/e,1,1,1,1,1],(e,t)=>h(e,n(t),"translate(-50%,-50%)")),y=r.forwardRef(({children:e,eps:t=.001,style:n,className:h,prepend:y,center:b,fullscreen:x,portal:w,distanceFactor:S,sprite:M=!1,transform:E=!1,occlude:_,onOcclude:A,castShadow:P,receiveShadow:T,material:L,geometry:O,zIndexRange:U=[0x1000037,0],calculatePosition:z=p,as:C="div",wrapperClass:F,pointerEvents:R="auto",...B},N)=>{let{gl:I,camera:W,scene:D,size:j,raycaster:H,events:V,viewport:G}=(0,s.useThree)(),[k]=r.useState(()=>document.createElement(C)),$=r.useRef(null),q=r.useRef(null),K=r.useRef(0),X=r.useRef([0,0]),Z=r.useRef(null),J=r.useRef(null),Q=(null==w?void 0:w.current)||V.connected||I.domElement.parentNode,Y=r.useRef(null),ee=r.useRef(!1),et=r.useMemo(()=>{var e;return _&&"blending"!==_||Array.isArray(_)&&_.length&&(e=_[0])&&"object"==typeof e&&"current"in e},[_]);r.useLayoutEffect(()=>{let e=I.domElement;_&&"blending"===_?(e.style.zIndex=`${Math.floor(U[0]/2)}`,e.style.position="absolute",e.style.pointerEvents="none"):(e.style.zIndex=null,e.style.position=null,e.style.pointerEvents=null)},[_]),r.useLayoutEffect(()=>{if(q.current){let e=$.current=a.createRoot(k);if(D.updateMatrixWorld(),E)k.style.cssText="position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;";else{let e=z(q.current,W,j);k.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return Q&&(y?Q.prepend(k):Q.appendChild(k)),()=>{Q&&Q.removeChild(k),e.unmount()}}},[Q,E]),r.useLayoutEffect(()=>{F&&(k.className=F)},[F]);let en=r.useMemo(()=>E?{position:"absolute",top:0,left:0,width:j.width,height:j.height,transformStyle:"preserve-3d",pointerEvents:"none"}:{position:"absolute",transform:b?"translate3d(-50%,-50%,0)":"none",...x&&{top:-j.height/2,left:-j.width/2,width:j.width,height:j.height},...n},[n,b,x,j,E]),ei=r.useMemo(()=>({position:"absolute",pointerEvents:R}),[R]);r.useLayoutEffect(()=>{var t,i;ee.current=!1,E?null==(t=$.current)||t.render(r.createElement("div",{ref:Z,style:en},r.createElement("div",{ref:J,style:ei},r.createElement("div",{ref:N,className:h,style:n,children:e})))):null==(i=$.current)||i.render(r.createElement("div",{ref:N,style:en,className:h,children:e}))});let er=r.useRef(!0);(0,l.F)(e=>{if(q.current){W.updateMatrixWorld(),q.current.updateWorldMatrix(!0,!1);let e=E?X.current:z(q.current,W,j);if(E||Math.abs(K.current-W.zoom)>t||Math.abs(X.current[0]-e[0])>t||Math.abs(X.current[1]-e[1])>t){var n;let t,i,r,a,s=(n=q.current,t=u.setFromMatrixPosition(n.matrixWorld),i=c.setFromMatrixPosition(W.matrixWorld),r=t.sub(i),a=W.getWorldDirection(d),r.angleTo(a)>Math.PI/2),l=!1;et&&(Array.isArray(_)?l=_.map(e=>e.current):"blending"!==_&&(l=[D]));let p=er.current;l?er.current=function(e,t,n,i){let r=u.setFromMatrixPosition(e.matrixWorld),a=r.clone();a.project(t),f.set(a.x,a.y),n.setFromCamera(f,t);let o=n.intersectObjects(i,!0);if(o.length){let e=o[0].distance;return r.distanceTo(n.ray.origin)<e}return!0}(q.current,W,H,l)&&!s:er.current=!s,p!==er.current&&(A?A(!er.current):k.style.display=er.current?"block":"none");let h=Math.floor(U[0]/2),y=_?et?[U[0],h]:[h-1,0]:U;if(k.style.zIndex=`${function(e,t,n){if(t instanceof o.PerspectiveCamera||t instanceof o.OrthographicCamera){let i=u.setFromMatrixPosition(e.matrixWorld),r=c.setFromMatrixPosition(t.matrixWorld),a=i.distanceTo(r),o=(n[1]-n[0])/(t.far-t.near),s=n[1]-o*t.far;return Math.round(o*a+s)}}(q.current,W,y)}`,E){let[e,t]=[j.width/2,j.height/2],n=W.projectionMatrix.elements[5]*t,{isOrthographicCamera:i,top:r,left:a,bottom:o,right:s}=W,l=v(W.matrixWorldInverse),u=i?`scale(${n})translate(${m(-(s+a)/2)}px,${m((r+o)/2)}px)`:`translateZ(${n}px)`,c=q.current.matrixWorld;M&&((c=W.matrixWorldInverse.clone().transpose().copyPosition(c).scale(q.current.scale)).elements[3]=c.elements[7]=c.elements[11]=0,c.elements[15]=1),k.style.width=j.width+"px",k.style.height=j.height+"px",k.style.perspective=i?"":`${n}px`,Z.current&&J.current&&(Z.current.style.transform=`${u}${l}translate(${e}px,${t}px)`,J.current.style.transform=g(c,1/((S||10)/400)))}else{let t=void 0===S?1:function(e,t){if(t instanceof o.OrthographicCamera)return t.zoom;if(!(t instanceof o.PerspectiveCamera))return 1;{let n=u.setFromMatrixPosition(e.matrixWorld),i=c.setFromMatrixPosition(t.matrixWorld);return 1/(2*Math.tan(t.fov*Math.PI/180/2)*n.distanceTo(i))}}(q.current,W)*S;k.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}X.current=e,K.current=W.zoom}}if(!et&&Y.current&&!ee.current)if(E){if(Z.current){let e=Z.current.children[0];if(null!=e&&e.clientWidth&&null!=e&&e.clientHeight){let{isOrthographicCamera:t}=W;if(t||O)B.scale&&(Array.isArray(B.scale)?B.scale instanceof o.Vector3?Y.current.scale.copy(B.scale.clone().divideScalar(1)):Y.current.scale.set(1/B.scale[0],1/B.scale[1],1/B.scale[2]):Y.current.scale.setScalar(1/B.scale));else{let t=(S||10)/400,n=e.clientWidth*t,i=e.clientHeight*t;Y.current.scale.set(n,i,1)}ee.current=!0}}}else{let t=k.children[0];if(null!=t&&t.clientWidth&&null!=t&&t.clientHeight){let e=1/G.factor,n=t.clientWidth*e,i=t.clientHeight*e;Y.current.scale.set(n,i,1),ee.current=!0}Y.current.lookAt(e.camera.position)}});let ea=r.useMemo(()=>({vertexShader:E?void 0:`
410
+ /*
411
+ This shader is from the THREE's SpriteMaterial.
412
+ We need to turn the backing plane into a Sprite
413
+ (make it always face the camera) if "transfrom"
414
+ is false.
415
+ */
416
+ #include <common>
417
+
418
+ void main() {
419
+ vec2 center = vec2(0., 1.);
420
+ float rotation = 0.0;
421
+
422
+ // This is somewhat arbitrary, but it seems to work well
423
+ // Need to figure out how to derive this dynamically if it even matters
424
+ float size = 0.03;
425
+
426
+ vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
427
+ vec2 scale;
428
+ scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
429
+ scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );
430
+
431
+ bool isPerspective = isPerspectiveMatrix( projectionMatrix );
432
+ if ( isPerspective ) scale *= - mvPosition.z;
433
+
434
+ vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;
435
+ vec2 rotatedPosition;
436
+ rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
437
+ rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;
438
+ mvPosition.xy += rotatedPosition;
439
+
440
+ gl_Position = projectionMatrix * mvPosition;
441
+ }
442
+ `,fragmentShader:`
443
+ void main() {
444
+ gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
445
+ }
446
+ `}),[E]);return r.createElement("group",(0,i.default)({},B,{ref:q}),_&&!et&&r.createElement("mesh",{castShadow:P,receiveShadow:T,ref:Y},O||r.createElement("planeGeometry",null),L||r.createElement("shaderMaterial",{side:o.DoubleSide,vertexShader:ea.vertexShader,fragmentShader:ea.fragmentShader})))});e.s(["Html",0,y],60099)},31497,e=>{"use strict";let t=parseInt(e.i(90072).REVISION.replace(/\D+/g,""));e.s(["version",0,t])},32533,e=>{"use strict";var t=e.i(90072);let n=new t.Box3,i=new t.Vector3;class r extends t.InstancedBufferGeometry{constructor(){super(),this.isLineSegmentsGeometry=!0,this.type="LineSegmentsGeometry",this.setIndex([0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5]),this.setAttribute("position",new t.Float32BufferAttribute([-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],3)),this.setAttribute("uv",new t.Float32BufferAttribute([-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],2))}applyMatrix4(e){let t=this.attributes.instanceStart,n=this.attributes.instanceEnd;return void 0!==t&&(t.applyMatrix4(e),n.applyMatrix4(e),t.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}setPositions(e){let n;e instanceof Float32Array?n=e:Array.isArray(e)&&(n=new Float32Array(e));let i=new t.InstancedInterleavedBuffer(n,6,1);return this.setAttribute("instanceStart",new t.InterleavedBufferAttribute(i,3,0)),this.setAttribute("instanceEnd",new t.InterleavedBufferAttribute(i,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(e,n=3){let i;e instanceof Float32Array?i=e:Array.isArray(e)&&(i=new Float32Array(e));let r=new t.InstancedInterleavedBuffer(i,2*n,1);return this.setAttribute("instanceColorStart",new t.InterleavedBufferAttribute(r,n,0)),this.setAttribute("instanceColorEnd",new t.InterleavedBufferAttribute(r,n,n)),this}fromWireframeGeometry(e){return this.setPositions(e.attributes.position.array),this}fromEdgesGeometry(e){return this.setPositions(e.attributes.position.array),this}fromMesh(e){return this.fromWireframeGeometry(new t.WireframeGeometry(e.geometry)),this}fromLineSegments(e){let t=e.geometry;return this.setPositions(t.attributes.position.array),this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new t.Box3);let e=this.attributes.instanceStart,i=this.attributes.instanceEnd;void 0!==e&&void 0!==i&&(this.boundingBox.setFromBufferAttribute(e),n.setFromBufferAttribute(i),this.boundingBox.union(n))}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new t.Sphere),null===this.boundingBox&&this.computeBoundingBox();let e=this.attributes.instanceStart,n=this.attributes.instanceEnd;if(void 0!==e&&void 0!==n){let t=this.boundingSphere.center;this.boundingBox.getCenter(t);let r=0;for(let a=0,o=e.count;a<o;a++)i.fromBufferAttribute(e,a),r=Math.max(r,t.distanceToSquared(i)),i.fromBufferAttribute(n,a),r=Math.max(r,t.distanceToSquared(i));this.boundingSphere.radius=Math.sqrt(r),isNaN(this.boundingSphere.radius)&&console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.",this)}}toJSON(){}applyMatrix(e){return console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."),this.applyMatrix4(e)}}e.s(["LineSegmentsGeometry",0,r])},74452,(e,t,n)=>{t.exports={vpp:{angles:[52,60,75,90,110,120,135,150],speeds:[6,8,10,12,14,16,20],52:[4.98,5.86,6.31,6.45,6.51,6.52,6.41],60:[5.25,6.11,6.56,6.73,6.79,6.82,6.79],75:[5.45,6.33,6.77,7.01,7.13,7.2,7.24],90:[5.66,6.55,7,7.25,7.38,7.53,7.7],110:[5.49,6.49,7.04,7.4,7.69,7.97,8.38],120:[5.32,6.36,6.97,7.39,7.77,8.1,8.6],135:[4.81,5.92,6.68,7.15,7.55,7.95,8.85],150:[4.09,5.17,6.04,6.61,6.99,7.31,7.93],beat_angle:[43.6,42,41.2,41.2,41.7,42.1,44.2],beat_vmg:[3.26,3.91,4.24,4.34,4.36,4.34,4.16],run_angle:[144.8,147.8,148.5,149.6,171.8,175.4,177.2],run_vmg:[3.54,4.48,5.23,5.73,6.17,6.67,7.36]}}},539,e=>{"use strict";var t=e.i(74452);let n=180/Math.PI,i=t.default.vpp,r=(e,t,n)=>e+(t-e)*n,a=(e,t)=>{if(t<=e[0])return[0,0];let n=e.length-1;if(t>=e[n])return[n-1,1];let i=0;for(;t>e[i+1];)i++;return[i,(t-e[i])/(e[i+1]-e[i])]},o=i.speeds.map((e,t)=>(e=>{let t=i.beat_angle[e],r=i.run_angle[e],a=i.beat_vmg[e]/Math.cos(t/n),o=i.run_vmg[e]/Math.abs(Math.cos(r/n)),s=[[0,0],[.7*t,.55*a],[t,a]];for(let n of i.angles)n>t&&n<r&&s.push([n,i[String(n)][e]]);return s.push([r,o]),r<180&&s.push([180,i.run_vmg[e]]),s})(t)),s=(e,t)=>{let[n,i]=a(e.map(e=>e[0]),t);return r(e[n][1],e[n+1][1],i)},l=(e,t)=>{if(!Number.isFinite(e)||!Number.isFinite(t)||e<=0)return null;let n=Math.min(180,Math.abs((t+540)%360-180)),l=i.speeds;if(e<l[0])return s(o[0],n)*(e/l[0]);let[u,c]=a(l,e);return r(s(o[u],n),s(o[u+1],n),c)},u=(e,t)=>{let[n,o]=a(i.speeds,t);return r(e[n],e[n+1],o)},c=(e,t)=>{let i=l(1.943844*e,t*n);return null===i?null:i/1.943844},d=e=>{let t=(e+Math.PI)%(2*Math.PI);return t<0&&(t+=2*Math.PI),t-Math.PI};e.s(["bestVmcHeading",0,({twd:e,tws:t,bearing:i})=>{if(![e,t,i].every(Number.isFinite)||t<=0)return null;let r=null;for(let a=-100;a<=100;a++){let o=i+a/n,s=c(t,d(e-o));if(null===s)continue;let l=s*Math.cos(o-i);(!r||l>r.vmc)&&(r={heading:d(o),speed:s,vmc:l})}return r},"optimalDownwind",0,e=>{if(!Number.isFinite(e)||e<=0)return null;let t=u(i.run_angle,e),r=l(e,t);return{twa:t,speed:r,vmg:-r*Math.cos(t/n)}},"optimalUpwind",0,e=>{if(!Number.isFinite(e)||e<=0)return null;let t=u(i.beat_angle,e),r=l(e,t);return{twa:t,speed:r,vmg:r*Math.cos(t/n)}},"polarSpeed",0,l,"polarSpeedSi",0,c,"vmcForHeading",0,({twd:e,tws:t,bearing:n,heading:i})=>{if(![e,t,n,i].every(Number.isFinite))return null;let r=c(t,d(e-i));return null===r?null:r*Math.cos(i-n)},"wrapPi",0,d])}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,3925,e=>{"use strict";var t=e.i(43476),n=e.i(71645);e.i(85269);var s=e.i(22831),i=e.i(49721),a=e.i(68757),o=e.i(85709),r=e.i(14421),l=e.i(95430);let u=["navigation.position","environment.sun.sunrise","environment.sun.sunset","environment.outside.uvIndex"];e.s(["default",0,({compact:e=!1})=>{let{t:c}=(0,s.useTranslation)(),m=(0,o.useSignalKPaths)(u),[d,v]=(0,n.useState)(()=>(0,l.vesselNow)());(0,n.useEffect)(()=>{let e=setInterval(()=>v((0,l.vesselNow)()),3e4);return()=>clearInterval(e)},[]);let x=m["navigation.position"],p=(0,r.computeSunEvents)(x?.latitude,x?.longitude,d),g=[{at:(0,r.parseSunTime)(m["environment.sun.sunrise"],d)??p?.sunrise,rise:!0},{at:(0,r.parseSunTime)(m["environment.sun.sunset"],d)??p?.sunset,rise:!1}].filter(e=>e.at&&e.at>d).sort((e,t)=>e.at-t.at)[0],f=m["environment.outside.uvIndex"];return(0,t.jsxs)("div",{className:"flex items-center gap-3 text-label font-semibold tracking-[0.15em] text-hud-muted",children:[g&&!e&&(0,t.jsxs)("span",{className:"flex items-center gap-1.5",title:c(g.rise?"hud.sunrise":"hud.sunset"),children:[(0,t.jsx)(i.FontAwesomeIcon,{icon:g.rise?a.faSun:a.faMoon,className:"text-oYellow text-sm"}),(0,r.formatClockTime)(g.at)]}),Number.isFinite(f)&&!e&&(0,t.jsxs)("span",{className:"flex items-center gap-1",title:c("environmental.uvIndex"),children:[(0,t.jsx)("span",{className:`text-caption ${f<3?"text-oGreen":f<6?"text-oYellow":"text-oRed"}`,children:"UV"}),f.toFixed(0)]}),(0,t.jsx)("span",{className:"uppercase tracking-[0.2em]",children:d.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]})}])},84809,function(e){e.n(e.i(3925))}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,5445,t=>{"use strict";var e=t.i(71645),i=t.i(18566),a=t.i(83402);t.s(["default",0,function(){let t=(0,i.useRouter)();return(0,e.useEffect)(()=>{a.default.setCurrentView("settings"),t.replace("/")},[t]),null}])},18566,(t,e,i)=>{e.exports=t.r(76562)},79866,(t,e,i)=>{e.exports={boats:[{name:"Default",modelPath:"default",capabilities:["navigation","rudder","sail","color"]},{name:"Racer 10.8",modelPath:"racer",capabilities:["navigation","sail","color"]},{name:"Catamaran 14",modelPath:"catamaran",capabilities:["navigation","sail","color"]},{name:"Optimist",modelPath:"optimist",capabilities:["navigation","ais"]},{name:"Sailboat",modelPath:"sailboat",capabilities:["navigation","ais"]},{name:"Ship",modelPath:"ship",capabilities:["navigation","ais"]},{name:"Windsurf",modelPath:"windsurf",capabilities:["navigation","ais"]}]}},83402,t=>{"use strict";var e=t.i(79866);let i=new class{constructor(){this.defaultConfig={signalkUrl:"http://localhost:3000",username:"",password:"",useAuthentication:!1,signalKUrlSet:!1,debugMode:!1,selectedBoat:"Racer 10.8",primaryColor:null,metallicEffect:!1,aisLengthScalingFactor:.7,compassNorthUp:!1,hide3DCompass:!1,hideTrueWind:!1,showCustomUrls:!1,customExternalUrls:{},currentView:"default",theme:"dark",language:"en",distanceUnits:"nm",depthUnits:"m",speedUnits:"kn",temperatureUnits:"C",positionFormat:"DD",preferTrueValues:!0,preferredWindSpeedPath:"speedTrue",preferredWindDirectionPath:"directionTrue",preferredHeadingPath:"courseOverGroundTrue",debugWindOverride:!1,debugWindSpeed:10,debugWindDirection:0,debugShowAxes:!1,showSailTrimSliders:!0,showRigging:!0},this.configKey="ocearoConfig",this.inMemoryConfig={...this.defaultConfig},this.config=this.loadConfig()}isLocalStorageAvailable(){try{return"u">typeof localStorage}catch{return!1}}loadConfig(){if(this.isLocalStorageAvailable()){let t=localStorage.getItem(this.configKey);if(!t)return this.saveConfig(this.defaultConfig),{...this.defaultConfig};try{let e={...this.defaultConfig,...JSON.parse(t)};return(e.boatChosen||"Default"!==e.selectedBoat)&&"RM1080"!==e.selectedBoat||(e.selectedBoat="Racer 10.8"),e}catch(t){return console.error("Failed to parse stored configuration:",t),{...this.defaultConfig}}}return{...this.inMemoryConfig}}saveConfig(t){this.config={...this.config,...t},this.isLocalStorageAvailable()?localStorage.setItem(this.configKey,JSON.stringify(this.config)):this.inMemoryConfig={...this.config}}get(t){return this.config[t]}set(t,e){this.config[t]=e,this.saveConfig(this.config)}resetConfig(){this.config={...this.defaultConfig},this.isLocalStorageAvailable()?localStorage.setItem(this.configKey,JSON.stringify(this.config)):this.inMemoryConfig={...this.defaultConfig}}getAll(){return{...this.config}}getDefaultConfig(){return{...this.defaultConfig}}getSelectedBoat(){let t=this.config.selectedBoat;return t?this.getBoatsData().find(e=>e.name===t):null}getBoatsData(){return e.default.boats}getSignalKUrl(){return this.config.signalKUrlSet&&this.config.signalkUrl?this.config.signalkUrl:this.getComputedSignalKUrl()}getComputedSignalKUrl(){return this.config.debugMode?"https://demo.signalk.org:443":`${window.location.protocol}//${window.location.hostname}${window.location.port?":"+window.location.port:""}`}getCurrentView(){return this.config.currentView||this.defaultConfig.currentView}setCurrentView(t){this.set("currentView",t)}};t.s(["default",0,i])}]);