ocearo-ui 2.1.0 → 2.1.2

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 (57) hide show
  1. package/404.html +1 -1
  2. package/__next.__PAGE__.txt +3 -3
  3. package/__next._full.txt +3 -3
  4. package/__next._tree.txt +2 -2
  5. package/_next/static/chunks/0-19-ljntm5ig.js +1 -0
  6. package/_next/static/chunks/{096zaxs1gf_3q.js → 0-g-ujyrfgutp.js} +2 -2
  7. package/_next/static/chunks/0c91q-13wh8hk.js +1 -0
  8. package/_next/static/chunks/{2aivnrnff0avu.js → 0fv1wwxeyagln.js} +2 -2
  9. package/_next/static/chunks/0nq1o9-m7bhjg.js +1 -0
  10. package/_next/static/chunks/0o7hu-sypv2u9.js +1 -0
  11. package/_next/static/chunks/{2wayx8t5r5fi9.js → 0ujzg6ofy2r73.js} +1 -1
  12. package/_next/static/chunks/162bfkgcudvew.js +9 -0
  13. package/_next/static/chunks/{1l-jew0-1-3eq.js → 1bvrvkcwf3ge-.js} +2 -2
  14. package/_next/static/chunks/{33u782y6vhw-f.js → 1do-2zwq3ws0f.js} +1 -1
  15. package/_next/static/chunks/{1u6o5_s2b39xh.js → 1ho2ekxa9io1_.js} +1 -1
  16. package/_next/static/chunks/1m3-nchdgcxy1.css +3 -0
  17. package/_next/static/chunks/{3qik_nv7zlj4e.js → 1quvj-861o57h.js} +1 -1
  18. package/_next/static/chunks/{0j11dppxb9l0b.js → 1zuex-na8y-w4.js} +1 -1
  19. package/_next/static/chunks/{2r98jty3a4wel.js → 271ys-u920uqd.js} +5 -5
  20. package/_next/static/chunks/2_iau6x7s0vil.js +1131 -0
  21. package/_next/static/chunks/2ab6q6u6uo_bf.js +1 -0
  22. package/_next/static/chunks/2pt-apz8_pa4j.js +1 -0
  23. package/_next/static/chunks/2rnpgrmuyhpkd.js +119 -0
  24. package/_next/static/chunks/3e5jmzthktu9w.js +1 -0
  25. package/_next/static/chunks/3l25j666ze4c1.js +1 -0
  26. package/_next/static/chunks/3r8nellt-dsed.js +1 -0
  27. package/_next/static/chunks/{2gr1d26f-ymoh.js → 3utjjgdhnlx86.js} +1 -1
  28. package/_next/static/chunks/44f5hh9caupby.js +1 -0
  29. package/_not-found/__next._full.txt +2 -2
  30. package/_not-found/__next._not-found.__PAGE__.txt +2 -2
  31. package/_not-found/__next._tree.txt +2 -2
  32. package/_not-found.html +1 -1
  33. package/_not-found.txt +2 -2
  34. package/index.html +1 -1
  35. package/index.txt +3 -3
  36. package/package.json +1 -1
  37. package/settings/__next._full.txt +3 -3
  38. package/settings/__next._tree.txt +2 -2
  39. package/settings/__next.settings.__PAGE__.txt +3 -3
  40. package/settings.html +1 -1
  41. package/settings.txt +3 -3
  42. package/_next/static/chunks/0b3cus8izqkmg.js +0 -119
  43. package/_next/static/chunks/0zvzu5fnwh4_a.js +0 -9
  44. package/_next/static/chunks/1_g85m2d7jjpo.css +0 -3
  45. package/_next/static/chunks/1arvue9o-atui.js +0 -739
  46. package/_next/static/chunks/1cp1kkarm5gxz.js +0 -1
  47. package/_next/static/chunks/1hz_mzl8l35j8.js +0 -1
  48. package/_next/static/chunks/1k72cpd0x8veh.js +0 -1
  49. package/_next/static/chunks/2fe99e03gnvg9.js +0 -1
  50. package/_next/static/chunks/2fthh9f57zzm2.js +0 -1
  51. package/_next/static/chunks/2v6ebsavxlgyw.js +0 -1
  52. package/_next/static/chunks/3qzb9nvvw-b-k.js +0 -1
  53. package/_next/static/chunks/3td9mnhvcj9cq.js +0 -1
  54. package/_next/static/chunks/41mro59si-xxc.js +0 -1
  55. /package/_next/static/{EuchA2ImhjrwCnR5WjCLX → m52l9mE01yTljNwbWjYQ7}/_buildManifest.js +0 -0
  56. /package/_next/static/{EuchA2ImhjrwCnR5WjCLX → m52l9mE01yTljNwbWjYQ7}/_clientMiddlewareManifest.js +0 -0
  57. /package/_next/static/{EuchA2ImhjrwCnR5WjCLX → m52l9mE01yTljNwbWjYQ7}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
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}},"getSessionOrigin",0,()=>a])},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,24752,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}};e.s(["rightOfWay",0,c,"targetCategory",0,l],24752);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:`
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}},"getSessionOrigin",0,()=>a])},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},w={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")},x={mainSheet:o(w.mainSheet),jibSheet:o(w.jibSheet),vang:o(w.vang),cunningham:o(w.cunningham),backstay:o(w.backstay)};return{reefLevel:f,reefHeightFactor:p,mainCamber:m,jibCamber:h,mainTwist:v,jibTwist:g,tensions:w,tensionColors:x}}])},77291,24752,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}};e.s(["rightOfWay",0,c,"targetCategory",0,l],24752);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=u.anchorWatch||u.parkingMode||u.moored,v=(e||u.ais)&&!h?s:p,{twd:g,heading:y}=(0,r.default)(),b=(0,i.useSignalKPaths)(m),w=(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=b["navigation.courseOverGroundTrue"]??y,t=b["navigation.speedOverGround"]??0,n=[];if(Number.isFinite(e))for(let i of v){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:w},{x:i.sceneX/x,y:-i.sceneZ/x,course:r,speed:i.sog??0,category:l(i)},g);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 v)"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:w,encounters:n,statuses:i,giveWay:r.length>0,giveWayTo:r[0]||null,primary:n[0]||null}},[v,g,y,b,w,x])}],77291)},61969,e=>{"use strict";var t=e.i(71645),n=e.i(85709),i=e.i(539),r=e.i(37256);let a=180/Math.PI,o=["navigation.speedThroughWater","navigation.speedOverGround","navigation.headingTrue","navigation.courseOverGroundTrue","environment.wind.speedTrue","environment.wind.angleTrueWater","environment.wind.directionTrue","performance.polarSpeed","performance.polarSpeedRatio",...(0,r.coursePaths)("bearingTrue")];e.s(["default",0,()=>{let e=(0,n.useSignalKPaths)(o);return(0,t.useMemo)(()=>{let t=e["navigation.speedThroughWater"]??e["navigation.speedOverGround"]??null,n=e["navigation.headingTrue"]??e["navigation.courseOverGroundTrue"]??null,o=e["environment.wind.speedTrue"]??null,s=e["environment.wind.angleTrueWater"]??null,l=e["environment.wind.directionTrue"]??null;null===l&&Number.isFinite(s)&&Number.isFinite(n)&&(l=(0,i.wrapPi)(n+s));let u=e["performance.polarSpeed"]??(Number.isFinite(o)&&Number.isFinite(s)?(0,i.polarSpeedSi)(o,s):null),c=e["performance.polarSpeedRatio"]??null;null===c&&Number.isFinite(t)&&Number.isFinite(u)&&u>.2&&(c=t/u);let d=Number.isFinite(t)&&Number.isFinite(u)?(t-u)*1.943844:null,f=null,p=null,m=!Number.isFinite(s)||Math.abs(s)<Math.PI/2;if(Number.isFinite(o)){let e=m?(0,i.optimalUpwind)(1.943844*o):(0,i.optimalDownwind)(1.943844*o);e&&(f=e.twa/a,Number.isFinite(l)&&Number.isFinite(s)&&(p=(0,i.wrapPi)(l-Math.sign(s||1)*f)))}let h=(0,r.courseValue)(e,"bearingTrue"),v=null;if(Number.isFinite(h)&&Number.isFinite(l)&&Number.isFinite(o)){let e=(0,i.bestVmcHeading)({twd:l,tws:o,bearing:h}),t=Number.isFinite(n)?(0,i.vmcForHeading)({twd:l,tws:o,bearing:h,heading:n}):null;v=e?{bearing:h,best:e,current:t}:null}return{ratio:c,polarSpeed:u,boatSpeed:t,deltaKn:d,heading:n,twd:l,tws:o,twa:s,targetTwa:f,targetHeading:p,upwind:m,vmc:v}},[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
2
  #include <common>
3
3
  #include <fog_pars_vertex>
4
4
  #include <logdepthbuf_pars_vertex>
@@ -406,7 +406,7 @@
406
406
  #include <premultiplied_alpha_fragment>
407
407
 
408
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:`
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,w=new s.Vector3,x=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,w.copy(b),x.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(x),y.applyMatrix4(x),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(w,!0);S.at(u,M);let f=s.MathUtils.lerp(g.z,y.z,u),h=f>=-1&&f<=1,v=w.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),w=(null==n||null==(h=n[0])?void 0:h.length)===4?4:3,x=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(),w)}return i},[e,c,n,w]);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(()=>()=>{x.dispose(),b.dispose()},[x]),r.createElement("primitive",(0,i.default)({object:y,ref:m},p),r.createElement("primitive",{object:x,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===w},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:w,portal:x,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:V,events:H,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==x?void 0:x.current)||H.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",...w&&{top:-j.height/2,left:-j.width/2,width:j.width,height:j.height},...n},[n,b,w,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,V,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
410
  /*
411
411
  This shader is from the THREE's SpriteMaterial.
412
412
  We need to turn the backing plane into a Sprite
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,20705,e=>{"use strict";let r=["north","east","south","west"],t=["port","starboard","preferred_channel_port","preferred_channel_starboard"],n=e=>{let n=Number(e);return n>=9&&n<=12?{kind:"cardinal",beacon:!0,category:r[n-9]}:n>=13&&n<=16?{kind:"lateral",beacon:!0,category:t[n-13]}:17===n?{kind:"isolated_danger",beacon:!0}:18===n?{kind:"safe_water",beacon:!0}:19===n?{kind:"special_purpose",beacon:!0}:n>=20&&n<=23?{kind:"cardinal",beacon:!1,category:r[n-20]}:n>=24&&n<=27?{kind:"lateral",beacon:!1,category:t[n-24]}:28===n?{kind:"isolated_danger",beacon:!1}:29===n?{kind:"safe_water",beacon:!1}:30===n?{kind:"special_purpose",beacon:!1}:4===n?{kind:"special_purpose",beacon:!1,colours:["blue","yellow"],pattern:"vertical",topmark:{shape:"cross",colours:["yellow"]}}:{kind:"station",beacon:!0}},i=e=>{let r=n(e.atonType);return{id:`ais:${e.id}`,lat:e.latitude,lon:e.longitude,name:e.name||"",kind:r.kind,beacon:r.beacon,category:r.category||"",shape:"",colours:r.colours||[],pattern:r.pattern||"",system:"",height:null,topmark:r.topmark||null,light:null,ais:!0,virtual:e.virtual,offPosition:e.offPosition}},a=(e,r)=>Math.hypot((r.lat-e.lat)*111320,(r.lon-e.lon)*111320*Math.cos(e.lat*Math.PI/180));e.s(["atonKind",0,n,"mergeAtons",0,(e,r)=>{if(!r.length)return e;let t=e.map(e=>({...e})),n=[];for(let e of r){if(!Number.isFinite(e.latitude)||!Number.isFinite(e.longitude))continue;let r=i(e),o=!r.virtual&&t.find(e=>!e.ais&&("station"===r.kind||e.kind===r.kind)&&60>=a(e,r));o?(o.ais=!0,o.offPosition=r.offPosition,o.name||(o.name=r.name)):n.push(r)}return[...t,...n]}])},77291,24752,e=>{"use strict";var r=e.i(71645),t=e.i(62588),n=e.i(85709),i=e.i(61969),a=e.i(539);let o=Math.PI/180,s={power:1,sail:2,fishing:3,restricted:4},l=e=>{let r=String(e.navState||"").toLowerCase();if(/not under command|restricted|constrained/.test(r))return"restricted";if(/fishing/.test(r))return"fishing";if(/sailing/.test(r))return"sail";if(/motoring|engine/.test(r))return"power";let t=Number(e.shipType);return 36===t?"sail":30===t?"fishing":33===t?"restricted":"power"},u=(e,r,t)=>(0,a.wrapPi)(Math.atan2(r.x-e.x,r.y-e.y)-t),c=(e,r,t)=>{let n={x:0,y:0},i=u(n,r,e.course),l=u(r,n,r.course),c=Math.sign(l)||1,g=e=>Math.abs(e)>112.5*o;if(g(i)&&r.speed>e.speed)return{ownRole:"stand-on",rule:"13",reason:"overtakenByTarget",targetTurn:0};if(g(l)&&e.speed>r.speed)return{ownRole:"give-way",rule:"13",reason:"overtaking",targetTurn:0};let d=s[e.category]??1,p=s[r.category]??1;if(d!==p)return d<p?{ownRole:"give-way",rule:"18",reason:`giveWayTo_${r.category}`,targetTurn:0}:{ownRole:"stand-on",rule:"18",reason:`standOnFrom_${r.category}`,targetTurn:c};if("sail"===e.category&&Number.isFinite(t)){let n=(0,a.wrapPi)(t-e.course)>=0?"starboard":"port";return n!==((0,a.wrapPi)(t-r.course)>=0?"starboard":"port")?"port"===n?{ownRole:"give-way",rule:"12a-i",reason:"portTack",targetTurn:0}:{ownRole:"stand-on",rule:"12a-i",reason:"targetPortTack",targetTurn:c}:r.x*Math.sin(t)+r.y*Math.cos(t)>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)(r.course-e.course-Math.PI))<10*o&&Math.abs(i)<6*o?{ownRole:"both",rule:"14",reason:"headOn",targetTurn:1}:i>0?{ownRole:"give-way",rule:"15",reason:"crossingStarboard",targetTurn:0}:{ownRole:"stand-on",rule:"15",reason:"crossingPort",targetTurn:c}};e.s(["rightOfWay",0,c,"targetCategory",0,l],24752);var g=e.i(83402),d=e.i(67561);let p=[],m=["navigation.speedOverGround","navigation.courseOverGroundTrue"];e.s(["default",0,({always:e=!1}={})=>{let a,o,{targets:s}=(0,t.useAIS)({passive:!0}),{states:u}=(0,d.useOcearoContext)(),v=u.anchorWatch||u.parkingMode||u.moored,h=(e||u.ais)&&!v?s:p,{twd:b,heading:f}=(0,i.default)(),w=(0,n.useSignalKPaths)(m),T=(a=(0,n.useSignalKPrefix)("propulsion."),o=g.default.get("ownVesselCategory"),(0,r.useMemo)(()=>"sail"===o||"power"===o?o:Object.entries(a).some(([e,r])=>e.endsWith(".revolutions")&&Number(r)>.5||e.endsWith(".state")&&"started"===r)?"power":"sail",[a,o])),y=g.default.get("aisLengthScalingFactor")||.7;return(0,r.useMemo)(()=>{let e=w["navigation.courseOverGroundTrue"]??f,r=w["navigation.speedOverGround"]??0,t=[];if(Number.isFinite(e))for(let n of h){if("danger"!==n.risk)continue;let i=n.cog??n.cogMagnetic??n.heading;if(!Number.isFinite(i)||null===n.sceneX)continue;let a=c({course:e,speed:r,category:T},{x:n.sceneX/y,y:-n.sceneZ/y,course:i,speed:n.sog??0,category:l(n)},b);t.push({target:{...n},role:a})}t.sort((e,r)=>(e.target.tcpaSeconds??1/0)-(r.target.tcpaSeconds??1/0));let n={};for(let e of h)"close"===e.risk?n[e.mmsi]="close":"danger"===e.risk&&(n[e.mmsi]="giveWay");for(let e of t)n[e.target.mmsi]="stand-on"===e.role.ownRole?"yields":"giveWay";let i=t.filter(e=>"stand-on"!==e.role.ownRole);return{ownCategory:T,encounters:t,statuses:n,giveWay:i.length>0,giveWayTo:i[0]||null,primary:t[0]||null}},[h,b,f,w,T,y])}],77291)},61969,e=>{"use strict";var r=e.i(71645),t=e.i(85709),n=e.i(539),i=e.i(37256);let a=180/Math.PI,o=["navigation.speedThroughWater","navigation.speedOverGround","navigation.headingTrue","navigation.courseOverGroundTrue","environment.wind.speedTrue","environment.wind.angleTrueWater","environment.wind.directionTrue","performance.polarSpeed","performance.polarSpeedRatio",...(0,i.coursePaths)("bearingTrue")];e.s(["default",0,()=>{let e=(0,t.useSignalKPaths)(o);return(0,r.useMemo)(()=>{let r=e["navigation.speedThroughWater"]??e["navigation.speedOverGround"]??null,t=e["navigation.headingTrue"]??e["navigation.courseOverGroundTrue"]??null,o=e["environment.wind.speedTrue"]??null,s=e["environment.wind.angleTrueWater"]??null,l=e["environment.wind.directionTrue"]??null;null===l&&Number.isFinite(s)&&Number.isFinite(t)&&(l=(0,n.wrapPi)(t+s));let u=e["performance.polarSpeed"]??(Number.isFinite(o)&&Number.isFinite(s)?(0,n.polarSpeedSi)(o,s):null),c=e["performance.polarSpeedRatio"]??null;null===c&&Number.isFinite(r)&&Number.isFinite(u)&&u>.2&&(c=r/u);let g=Number.isFinite(r)&&Number.isFinite(u)?(r-u)*1.943844:null,d=null,p=null,m=!Number.isFinite(s)||Math.abs(s)<Math.PI/2;if(Number.isFinite(o)){let e=m?(0,n.optimalUpwind)(1.943844*o):(0,n.optimalDownwind)(1.943844*o);e&&(d=e.twa/a,Number.isFinite(l)&&Number.isFinite(s)&&(p=(0,n.wrapPi)(l-Math.sign(s||1)*d)))}let v=(0,i.courseValue)(e,"bearingTrue"),h=null;if(Number.isFinite(v)&&Number.isFinite(l)&&Number.isFinite(o)){let e=(0,n.bestVmcHeading)({twd:l,tws:o,bearing:v}),r=Number.isFinite(t)?(0,n.vmcForHeading)({twd:l,tws:o,bearing:v,heading:t}):null;h=e?{bearing:v,best:e,current:r}:null}return{ratio:c,polarSpeed:u,boatSpeed:r,deltaKn:g,heading:t,twd:l,tws:o,twa:s,targetTwa:d,targetHeading:p,upwind:m,vmc:h}},[e])}])},83646,e=>{"use strict";var r=e.i(67561);e.s(["default",0,()=>(0,r.useOcearoContext)().tokens])},37256,e=>{"use strict";let r={bearingTrue:["navigation.course.calcValues.bearingTrue","navigation.courseGreatCircle.nextPoint.bearingTrue","navigation.courseRhumbline.nextPoint.bearingTrue"],distance:["navigation.course.calcValues.distance","navigation.courseGreatCircle.nextPoint.distance","navigation.courseRhumbline.nextPoint.distance"],timeToGo:["navigation.course.calcValues.timeToGo","navigation.courseGreatCircle.nextPoint.timeToGo","navigation.courseRhumbline.nextPoint.timeToGo"],crossTrackError:["navigation.course.calcValues.crossTrackError","navigation.courseGreatCircle.crossTrackError","navigation.courseRhumbline.crossTrackError"],velocityMadeGood:["navigation.course.calcValues.velocityMadeGood","navigation.courseGreatCircle.velocityMadeGood","navigation.courseRhumbline.velocityMadeGood"]};e.s(["coursePaths",0,(...e)=>e.flatMap(e=>r[e]),"courseValue",0,(e,t)=>{for(let n of r[t]){let r=e?.[n];if(Number.isFinite(r))return r}}])},74452,(e,r,t)=>{r.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 r=e.i(74452);let t=180/Math.PI,n=r.default.vpp,i=(e,r,t)=>e+(r-e)*t,a=(e,r)=>{if(r<=e[0])return[0,0];let t=e.length-1;if(r>=e[t])return[t-1,1];let n=0;for(;r>e[n+1];)n++;return[n,(r-e[n])/(e[n+1]-e[n])]},o=n.speeds.map((e,r)=>(e=>{let r=n.beat_angle[e],i=n.run_angle[e],a=n.beat_vmg[e]/Math.cos(r/t),o=n.run_vmg[e]/Math.abs(Math.cos(i/t)),s=[[0,0],[.7*r,.55*a],[r,a]];for(let t of n.angles)t>r&&t<i&&s.push([t,n[String(t)][e]]);return s.push([i,o]),i<180&&s.push([180,n.run_vmg[e]]),s})(r)),s=(e,r)=>{let[t,n]=a(e.map(e=>e[0]),r);return i(e[t][1],e[t+1][1],n)},l=(e,r)=>{if(!Number.isFinite(e)||!Number.isFinite(r)||e<=0)return null;let t=Math.min(180,Math.abs((r+540)%360-180)),l=n.speeds;if(e<l[0])return s(o[0],t)*(e/l[0]);let[u,c]=a(l,e);return i(s(o[u],t),s(o[u+1],t),c)},u=(e,r)=>{let[t,o]=a(n.speeds,r);return i(e[t],e[t+1],o)},c=(e,r)=>{let n=l(1.943844*e,r*t);return null===n?null:n/1.943844},g=e=>{let r=(e+Math.PI)%(2*Math.PI);return r<0&&(r+=2*Math.PI),r-Math.PI};e.s(["bestVmcHeading",0,({twd:e,tws:r,bearing:n})=>{if(![e,r,n].every(Number.isFinite)||r<=0)return null;let i=null;for(let a=-100;a<=100;a++){let o=n+a/t,s=c(r,g(e-o));if(null===s)continue;let l=s*Math.cos(o-n);(!i||l>i.vmc)&&(i={heading:g(o),speed:s,vmc:l})}return i},"optimalDownwind",0,e=>{if(!Number.isFinite(e)||e<=0)return null;let r=u(n.run_angle,e),i=l(e,r);return{twa:r,speed:i,vmg:-i*Math.cos(r/t)}},"optimalUpwind",0,e=>{if(!Number.isFinite(e)||e<=0)return null;let r=u(n.beat_angle,e),i=l(e,r);return{twa:r,speed:i,vmg:i*Math.cos(r/t)}},"polarSpeed",0,l,"polarSpeedSi",0,c,"vmcForHeading",0,({twd:e,tws:r,bearing:t,heading:n})=>{if(![e,r,t,n].every(Number.isFinite))return null;let i=c(r,g(e-n));return null===i?null:i*Math.cos(n-t)},"wrapPi",0,g])}]);
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,43322,e=>{e.v(t=>Promise.all(["static/chunks/3l25j666ze4c1.js"].map(t=>e.l(t))).then(()=>t(56101)))},34882,e=>{e.v(t=>Promise.all(["static/chunks/1zuex-na8y-w4.js"].map(t=>e.l(t))).then(()=>t(77021)))},59499,e=>{e.v(t=>Promise.all(["static/chunks/3e5jmzthktu9w.js"].map(t=>e.l(t))).then(()=>t(85003)))},30150,e=>{e.v(t=>Promise.all(["static/chunks/1d81m3g9jqkob.js"].map(t=>e.l(t))).then(()=>t(84237)))},64390,e=>{e.v(t=>Promise.all(["static/chunks/3zqx8h9yg5-ch.js"].map(t=>e.l(t))).then(()=>t(39554)))},93170,e=>{e.v(t=>Promise.all(["static/chunks/0-c2-u5p6bxzo.js","static/chunks/11awvgcou7v4r.js"].map(t=>e.l(t))).then(()=>t(50226)))},48217,e=>{e.v(t=>Promise.all(["static/chunks/2n86yq1wz1yx7.js"].map(t=>e.l(t))).then(()=>t(14774)))},29882,e=>{e.v(t=>Promise.all(["static/chunks/2w71oj1brox5z.js"].map(t=>e.l(t))).then(()=>t(56665)))},93889,e=>{e.v(t=>Promise.all(["static/chunks/1mtfh1vqpvit2.js"].map(t=>e.l(t))).then(()=>t(58166)))},36258,e=>{e.v(t=>Promise.all(["static/chunks/2rnpgrmuyhpkd.js","static/chunks/0fv1wwxeyagln.js","static/chunks/2_iau6x7s0vil.js","static/chunks/1do-2zwq3ws0f.js"].map(t=>e.l(t))).then(()=>t(59465)))},97820,e=>{e.v(t=>Promise.all(["static/chunks/0ujzg6ofy2r73.js","static/chunks/1do-2zwq3ws0f.js","static/chunks/0fv1wwxeyagln.js"].map(t=>e.l(t))).then(()=>t(69675)))},82041,e=>{e.v(t=>Promise.all(["static/chunks/0-jqvc-r0kh0c.js"].map(t=>e.l(t))).then(()=>t(41994)))},73321,e=>{e.v(t=>Promise.all(["static/chunks/44f5hh9caupby.js"].map(t=>e.l(t))).then(()=>t(78938)))},11657,e=>{e.v(t=>Promise.all(["static/chunks/07gn9z0d6clzs.js"].map(t=>e.l(t))).then(()=>t(75058)))},93540,e=>{e.v(t=>Promise.all(["static/chunks/1g8fbzv0hu0i2.js"].map(t=>e.l(t))).then(()=>t(84809)))},71762,e=>{e.v(t=>Promise.all(["static/chunks/1bo0ke8gjc1c2.js"].map(t=>e.l(t))).then(()=>t(91999)))},9617,e=>{"use strict";let t={moved:!1,placingWaypoint:!1,message:null},a=new Set,s=new Set,n=e=>{t={...t,...e},a.forEach(e=>e())},i=e=>{t.moved!==e&&n({moved:e})};e.s(["getViewState",0,()=>t,"onRecenter",0,e=>(s.add(e),()=>s.delete(e)),"requestRecenter",0,()=>{s.forEach(e=>e()),i(!1)},"setCameraMoved",0,i,"setPlacingWaypoint",0,e=>n({placingWaypoint:e,message:null}),"setViewMessage",0,e=>n({message:e}),"subscribeView",0,e=>(a.add(e),()=>a.delete(e))])},32598,e=>{e.v(t=>Promise.all(["static/chunks/0-19-ljntm5ig.js"].map(t=>e.l(t))).then(()=>t(79224)))},32673,e=>{e.v(t=>Promise.all(["static/chunks/05do10p9ldt1p.js"].map(t=>e.l(t))).then(()=>t(36540)))},11220,e=>{e.v(t=>Promise.all(["static/chunks/1bvrvkcwf3ge-.js","static/chunks/1do-2zwq3ws0f.js","static/chunks/0fv1wwxeyagln.js"].map(t=>e.l(t))).then(()=>t(27404)))},39271,e=>{"use strict";var t=e.i(43476),a=e.i(71645);e.i(85269);var s=e.i(22831),n=e.i(49721),i=e.i(68757),r=e.i(30206);let l=[10,30,60,120],o=()=>(0,a.useSyncExternalStore)(r.subscribeReplay,r.getReplayState,r.getReplayState);e.s(["default",0,()=>{let{t:e}=(0,s.useTranslation)(),a=o();if(!a.active)return null;let c=Math.max(1,a.end-a.start);return(0,t.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,t.jsx)("span",{className:"text-caption font-semibold uppercase tracking-widest text-oBlue shrink-0",children:e("replay.title")}),(0,t.jsx)("button",{type:"button",onClick:r.togglePlay,"aria-label":e(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,t.jsx)(n.FontAwesomeIcon,{icon:a.playing?i.faPause:i.faPlay})}),(0,t.jsx)("input",{type:"range",min:a.start,max:a.end,step:1e3,value:a.time,onChange:e=>(0,r.seekReplay)(Number(e.target.value)),"aria-label":e("replay.timeline"),className:"flex-1 min-w-0 accent-oBlue"}),(0,t.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,t.jsxs)("span",{className:"text-caption text-hud-muted tabular-nums shrink-0",children:[Math.round((a.time-a.start)/c*100),"%"]}),(0,t.jsx)("div",{className:"flex gap-1 shrink-0",children:l.map(e=>(0,t.jsxs)("button",{type:"button",onClick:()=>(0,r.setReplaySpeed)(e),className:`px-2 py-1 rounded-lg text-caption font-semibold ${a.speed===e?"bg-oBlue text-white":"text-hud-muted hover:text-hud-main"}`,children:["×",e]},e))}),(0,t.jsx)("button",{type:"button",onClick:r.stopReplay,"aria-label":e("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,t.jsx)(n.FontAwesomeIcon,{icon:i.faXmark})})]})},"useReplay",0,o])},66984,e=>{e.v(t=>Promise.all(["static/chunks/0jpa5m78l0ib0.js"].map(t=>e.l(t))).then(()=>t(79261)))},72466,e=>{"use strict";let t={WARNING_THRESHOLD:50,DANGER_THRESHOLD:20,CHARGING_THRESHOLD:13.2,MIN_VOLTAGE:10.5,MAX_VOLTAGE:14.4};e.s(["BATTERY_CONFIG",0,t,"estimateStateOfCharge",0,e=>{if(!e||"number"!=typeof e)return 0;if(e>=13)return 100;if(e<=t.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 t=0;t<a.length-1;t++)if(e>=a[t+1].voltage){let s=a[t].voltage,n=a[t+1].voltage,i=a[t].soc,r=a[t+1].soc;return Math.round(r+(e-n)/(s-n)*(i-r))}return 0},"isBatteryCharging",0,e=>e>t.CHARGING_THRESHOLD])},58567,e=>{"use strict";var t=e.i(83402);e.s(["RENDER_QUALITIES",0,["auto","high","pi"],"getRenderProfile",0,()=>{let e=t.default.get("renderQuality")||"auto";return"pi"===e||"auto"===e&&(()=>{if("u"<typeof navigator)return!1;if(/aarch64|armv7|armv8|arm64|raspbian|raspberry/i.test(navigator.userAgent))return!0;let e=navigator.hardwareConcurrency||8,t=navigator.deviceMemory||8;return e<=4&&t<=4})()?{id:"pi",fps:30,dpr:1,antialias:!1}:{id:"high",fps:60,dpr:Math.min(window.devicePixelRatio||1,1.5),antialias:!0}}])},37256,e=>{"use strict";let t={bearingTrue:["navigation.course.calcValues.bearingTrue","navigation.courseGreatCircle.nextPoint.bearingTrue","navigation.courseRhumbline.nextPoint.bearingTrue"],distance:["navigation.course.calcValues.distance","navigation.courseGreatCircle.nextPoint.distance","navigation.courseRhumbline.nextPoint.distance"],timeToGo:["navigation.course.calcValues.timeToGo","navigation.courseGreatCircle.nextPoint.timeToGo","navigation.courseRhumbline.nextPoint.timeToGo"],crossTrackError:["navigation.course.calcValues.crossTrackError","navigation.courseGreatCircle.crossTrackError","navigation.courseRhumbline.crossTrackError"],velocityMadeGood:["navigation.course.calcValues.velocityMadeGood","navigation.courseGreatCircle.velocityMadeGood","navigation.courseRhumbline.velocityMadeGood"]};e.s(["coursePaths",0,(...e)=>e.flatMap(e=>t[e]),"courseValue",0,(e,a)=>{for(let s of t[a]){let t=e?.[s];if(Number.isFinite(t))return t}}])},52822,(e,t,a)=>{"use strict";var s=e.r(71645),n=e.r(2239),i="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},r=n.useSyncExternalStore,l=s.useRef,o=s.useEffect,c=s.useMemo,u=s.useDebugValue;a.useSyncExternalStoreWithSelector=function(e,t,a,s,n){var h=l(null);if(null===h.current){var m={hasValue:!1,value:null};h.current=m}else m=h.current;var v=r(e,(h=c(function(){function e(e){if(!o){if(o=!0,r=e,e=s(e),void 0!==n&&m.hasValue){var t=m.value;if(n(t,e))return l=t}return l=e}if(t=l,i(r,e))return t;var a=s(e);return void 0!==n&&n(t,a)?(r=e,t):(r=e,l=a)}var r,l,o=!1,c=void 0===a?null:a;return[function(){return e(t())},null===c?void 0:function(){return e(c())}]},[t,a,s,n]))[0],h[1]);return o(function(){m.hasValue=!0,m.value=v},[v]),u(v),v}},30224,(e,t,a)=>{"use strict";e.i(47167),t.exports=e.r(52822)}]);
@@ -1 +1 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,8418,e=>{"use strict";var t=e.i(43476),n=e.i(71645),i=e.i(90874),l=e.i(30297),a=e.i(82897),r=e.i(60099),o=e.i(73919),u=e.i(20440),s=e.i(66326),c=e.i(90072),h=e.i(43216),d=e.i(83646),g=e.i(85709),p=e.i(48390);let f="ocearo.anchorTrack",m=(e,t)=>{let n=e=>e*Math.PI/180,i=n(t.latitude),l=n(e.latitude);return[6371e3*n(e.longitude-t.longitude)*Math.cos((i+l)/2)/1,-(6371e3*(l-i))/1]},x=()=>{let{warn:e,danger:i,neutral:l}=(0,d.default)(),a=(0,g.useSignalKPath)("navigation.position"),r=(0,g.useSignalKPath)("navigation.anchor.position"),o=(0,g.useSignalKPath)("navigation.anchor.maxRadius"),u=(0,g.useSignalKPath)("navigation.headingTrue"),s=(0,g.useSignalKPath)("navigation.headingMagnetic"),x=(0,g.useSignalKPath)("navigation.courseOverGroundTrue"),[M,y]=(0,n.useState)([]),[j,P]=(0,n.useState)(()=>(()=>{try{return JSON.parse(sessionStorage.getItem(f)||"null")||{anchor:null,points:[]}}catch{return{anchor:null,points:[]}}})());(0,n.useEffect)(()=>{let e=!1,t=null,n=0,i=!1,l=e=>{t&&clearInterval(t),t=setInterval(a,e)},a=async()=>{if(!i){i=!0;try{let t=await (0,p.getAnchorTrack)();if(e)return;n>=3&&l(15e3),n=0,y(Array.isArray(t?.track)?t.track:[])}catch{if(e)return;3==++n&&l(12e4)}finally{i=!1}}};return a(),l(15e3),()=>{e=!0,t&&clearInterval(t)}},[]);let v=(0,n.useMemo)(()=>r?.latitude!=null&&r?.longitude!=null?{latitude:r.latitude,longitude:r.longitude}:null,[r]);(0,n.useEffect)(()=>{if(a?.latitude==null||a?.longitude==null)return;let e=v?`${v.latitude.toFixed(5)},${v.longitude.toFixed(5)}`:null;P(t=>{let n=t.anchor===e?t.points:[],i=n[n.length-1];if(i){let[l,r]=m(a,i);if(1>Math.hypot(l,r))return t.anchor===e?t:{anchor:e,points:n}}let l={anchor:e,points:[...n,{latitude:a.latitude,longitude:a.longitude}].slice(-1500)};try{sessionStorage.setItem(f,JSON.stringify(l))}catch{}return l})},[a,v]);let S=Number.isFinite(o)&&o>0,b=(S?o:30)/1,I=(0,n.useMemo)(()=>{if(a?.latitude==null||a?.longitude==null)return null;if(!v)return[0,-6.9,0];let[e,t]=m(v,a);return[e,-6.9,t]},[v,a]),T=(0,n.useMemo)(()=>{let e=u??s??x??0;return Number.isFinite(e)?e:0},[u,s,x]),A=(0,n.useMemo)(()=>{let e=[];for(let t=0;t<=64;t++){let n=t/64*Math.PI*2;e.push([b*Math.cos(n),0,b*Math.sin(n)])}return e},[b]),K=(0,n.useMemo)(()=>A.map(([e,t,n])=>[.8*e,t,.8*n]),[A]),C=(0,n.useMemo)(()=>{if(a?.latitude==null||a?.longitude==null)return null;let e=M.length?M:j.points;if(!e.length)return null;let t=e.filter(e=>Number.isFinite(e?.latitude)&&Number.isFinite(e?.longitude)).map(e=>{let[t,n]=m(e,a);return[t,-6.9+.05,n]});return t.push([0,-6.9+.05,0]),t.length>=2?t:null},[M,j,a]),k=(0,n.useMemo)(()=>{if(!C)return null;let t=new c.Color(e),n=new c.Color(l);return C.map((e,i)=>n.clone().lerp(t,(i/(C.length-1))**1.5).toArray())},[C,e,l]),F=(0,n.useMemo)(()=>I&&v?[I,[0,-6.9,0]]:null,[I,v]);if(!I)return null;let N=null!==v&&S&&Math.hypot(I[0],I[2])>b;return(0,t.jsxs)("group",{rotation:[0,T,0],children:[(0,t.jsxs)("group",{position:I,children:[(0,t.jsx)(h.Line,{points:A,color:N?i:e,lineWidth:2,transparent:!0,opacity:.7}),(0,t.jsx)(h.Line,{points:K,color:l,lineWidth:1,dashed:!0,dashSize:2,gapSize:2,transparent:!0,opacity:.35}),(0,t.jsxs)("mesh",{position:[0,.1,0],rotation:[-Math.PI/2,0,0],children:[(0,t.jsx)("circleGeometry",{args:[Math.max(.6,.03*b),16]}),(0,t.jsx)("meshBasicMaterial",{color:e,transparent:!0,opacity:.9})]})]}),F&&(0,t.jsx)(h.Line,{points:F,color:l,lineWidth:1,transparent:!0,opacity:.5}),C&&(0,t.jsx)(h.Line,{points:C,color:N?i:"#ffffff",vertexColors:N?void 0:k,lineWidth:2.5,transparent:!0,opacity:.9})]})};e.s(["default",0,({onUpdateInfoPanel:e})=>{let c=(0,n.useRef)(),{size:h}=(0,i.useThree)(),d=h.width/h.height;return(0,t.jsxs)(n.Suspense,{fallback:(0,t.jsx)(r.Html,{children:"Loading..."}),children:[(0,t.jsx)(a.PerspectiveCamera,{makeDefault:!0,fov:25,aspect:d,near:1,far:1e3,position:[32,10,-32]}),(0,t.jsx)(l.OrbitControls,{enableZoom:!0,enableRotate:!0,maxPolarAngle:Math.PI/2,minPolarAngle:Math.PI/4}),(0,t.jsx)(o.default,{}),(0,t.jsx)(s.default,{ref:c,scale:[1.3,1.3,1.3],position:[0,-6,0],onUpdateInfoPanel:e}),(0,t.jsx)(x,{}),(0,t.jsx)(u.default,{y:-7})]})}],8418)},69675,function(e){e.n(e.i(8418))}]);
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,8418,e=>{"use strict";var t=e.i(43476),n=e.i(71645),i=e.i(90874),l=e.i(82897),a=e.i(60099),r=e.i(44909),o=e.i(73919),u=e.i(20440),s=e.i(66326),h=e.i(90072),c=e.i(43216),d=e.i(83646),g=e.i(85709),p=e.i(48390);let f="ocearo.anchorTrack",m=(e,t)=>{let n=e=>e*Math.PI/180,i=n(t.latitude),l=n(e.latitude);return[6371e3*n(e.longitude-t.longitude)*Math.cos((i+l)/2)/1,-(6371e3*(l-i))/1]},x=()=>{let{warn:e,danger:i,neutral:l}=(0,d.default)(),a=(0,g.useSignalKPath)("navigation.position"),r=(0,g.useSignalKPath)("navigation.anchor.position"),o=(0,g.useSignalKPath)("navigation.anchor.maxRadius"),u=(0,g.useSignalKPath)("navigation.headingTrue"),s=(0,g.useSignalKPath)("navigation.headingMagnetic"),x=(0,g.useSignalKPath)("navigation.courseOverGroundTrue"),[M,y]=(0,n.useState)([]),[j,P]=(0,n.useState)(()=>(()=>{try{return JSON.parse(sessionStorage.getItem(f)||"null")||{anchor:null,points:[]}}catch{return{anchor:null,points:[]}}})());(0,n.useEffect)(()=>{let e=!1,t=null,n=0,i=!1,l=e=>{t&&clearInterval(t),t=setInterval(a,e)},a=async()=>{if(!i){i=!0;try{let t=await (0,p.getAnchorTrack)();if(e)return;n>=3&&l(15e3),n=0,y(Array.isArray(t?.track)?t.track:[])}catch{if(e)return;3==++n&&l(12e4)}finally{i=!1}}};return a(),l(15e3),()=>{e=!0,t&&clearInterval(t)}},[]);let v=(0,n.useMemo)(()=>r?.latitude!=null&&r?.longitude!=null?{latitude:r.latitude,longitude:r.longitude}:null,[r]);(0,n.useEffect)(()=>{if(a?.latitude==null||a?.longitude==null)return;let e=v?`${v.latitude.toFixed(5)},${v.longitude.toFixed(5)}`:null;P(t=>{let n=t.anchor===e?t.points:[],i=n[n.length-1];if(i){let[l,r]=m(a,i);if(1>Math.hypot(l,r))return t.anchor===e?t:{anchor:e,points:n}}let l={anchor:e,points:[...n,{latitude:a.latitude,longitude:a.longitude}].slice(-1500)};try{sessionStorage.setItem(f,JSON.stringify(l))}catch{}return l})},[a,v]);let S=Number.isFinite(o)&&o>0,I=(S?o:30)/1,b=(0,n.useMemo)(()=>{if(a?.latitude==null||a?.longitude==null)return null;if(!v)return[0,-6.9,0];let[e,t]=m(v,a);return[e,-6.9,t]},[v,a]),T=(0,n.useMemo)(()=>{let e=u??s??x??0;return Number.isFinite(e)?e:0},[u,s,x]),A=(0,n.useMemo)(()=>{let e=[];for(let t=0;t<=64;t++){let n=t/64*Math.PI*2;e.push([I*Math.cos(n),0,I*Math.sin(n)])}return e},[I]),K=(0,n.useMemo)(()=>A.map(([e,t,n])=>[.8*e,t,.8*n]),[A]),k=(0,n.useMemo)(()=>{if(a?.latitude==null||a?.longitude==null)return null;let e=M.length?M:j.points;if(!e.length)return null;let t=e.filter(e=>Number.isFinite(e?.latitude)&&Number.isFinite(e?.longitude)).map(e=>{let[t,n]=m(e,a);return[t,-6.9+.05,n]});return t.push([0,-6.9+.05,0]),t.length>=2?t:null},[M,j,a]),C=(0,n.useMemo)(()=>{if(!k)return null;let t=new h.Color(e),n=new h.Color(l);return k.map((e,i)=>n.clone().lerp(t,(i/(k.length-1))**1.5).toArray())},[k,e,l]),F=(0,n.useMemo)(()=>b&&v?[b,[0,-6.9,0]]:null,[b,v]);if(!b)return null;let N=null!==v&&S&&Math.hypot(b[0],b[2])>I;return(0,t.jsxs)("group",{rotation:[0,T,0],children:[(0,t.jsxs)("group",{position:b,children:[(0,t.jsx)(c.Line,{points:A,color:N?i:e,lineWidth:2,transparent:!0,opacity:.7}),(0,t.jsx)(c.Line,{points:K,color:l,lineWidth:1,dashed:!0,dashSize:2,gapSize:2,transparent:!0,opacity:.35}),(0,t.jsxs)("mesh",{position:[0,.1,0],rotation:[-Math.PI/2,0,0],children:[(0,t.jsx)("circleGeometry",{args:[Math.max(.6,.03*I),16]}),(0,t.jsx)("meshBasicMaterial",{color:e,transparent:!0,opacity:.9})]})]}),F&&(0,t.jsx)(c.Line,{points:F,color:l,lineWidth:1,transparent:!0,opacity:.5}),k&&(0,t.jsx)(c.Line,{points:k,color:N?i:"#ffffff",vertexColors:N?void 0:C,lineWidth:2.5,transparent:!0,opacity:.9})]})},M=[32,10,-32];e.s(["default",0,({onUpdateInfoPanel:e})=>{let h=(0,n.useRef)(),{size:c}=(0,i.useThree)(),d=c.width/c.height;return(0,t.jsxs)(n.Suspense,{fallback:(0,t.jsx)(a.Html,{children:"Loading..."}),children:[(0,t.jsx)(l.PerspectiveCamera,{makeDefault:!0,fov:25,aspect:d,near:1,far:1e3,position:[32,10,-32]}),(0,t.jsx)(r.default,{home:M,enableZoom:!0,enableRotate:!0,maxPolarAngle:Math.PI/2,minPolarAngle:Math.PI/4}),(0,t.jsx)(o.default,{}),(0,t.jsx)(s.default,{ref:h,scale:[1.3,1.3,1.3],position:[0,-6,0],onUpdateInfoPanel:e}),(0,t.jsx)(x,{}),(0,t.jsx)(u.default,{y:-7})]})}],8418)},69675,function(e){e.n(e.i(8418))}]);
@@ -0,0 +1,9 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,68192,e=>{"use strict";var t=e.i(43476),n=e.i(71645),s=e.i(70703),l=e.i(46932),o=e.i(88653);e.i(85269);var r=e.i(22831),a=e.i(85709),i=e.i(83402);let u=({messageKey:e})=>{let{t:n}=(0,r.useTranslation)();return(0,t.jsx)("div",{className:"w-full h-full flex items-center justify-center text-hud-main",children:n(e)})},c=(0,s.default)(()=>e.A(26949),{loadableGenerated:{modules:[23298]},loading:()=>(0,t.jsx)(u,{messageKey:"common.loadingDocuments"})}),d=(0,s.default)(()=>e.A(22155),{loadableGenerated:{modules:[34900]},loading:()=>(0,t.jsx)(u,{messageKey:"common.loadingSettings"})}),m=(0,s.default)(()=>e.A(30455),{loadableGenerated:{modules:[13268]},loading:()=>(0,t.jsx)(u,{messageKey:"common.loadingMediaPlayer"})}),h=(0,s.default)(()=>e.A(71074),{loadableGenerated:{modules:[65862]},loading:()=>(0,t.jsx)(u,{messageKey:"common.loadingBatteryMonitor"})}),f=(0,s.default)(()=>e.A(3523),{loadableGenerated:{modules:[8161]},loading:()=>(0,t.jsx)(u,{messageKey:"common.loadingEngineMonitor"})}),p=(0,s.default)(()=>e.A(88913),{loadableGenerated:{modules:[25294]},loading:()=>(0,t.jsx)(u,{messageKey:"common.loadingDashboard"})}),g=(0,s.default)(()=>e.A(26371),{loadableGenerated:{modules:[70127]},loading:()=>(0,t.jsx)(u,{messageKey:"common.loadingLogbook"})}),x=(0,s.default)(()=>e.A(58293),{loadableGenerated:{modules:[33946]},loading:()=>(0,t.jsx)(u,{messageKey:"common.loadingAutopilot"})}),j=(0,s.default)(()=>e.A(47853),{loadableGenerated:{modules:[58652]},loading:()=>(0,t.jsx)(u,{messageKey:"common.loading"})}),b={latitude:46.1591,longitude:-1.1522},y={navigation:e=>!e||e.includes("localhost:3000")?null:`${e}/@signalk/freeboard-sk/`,instrument:e=>`${e}/@mxtommy/kip/`,dashboard:e=>e.replace(":3000",":3001")+"/grafana",webcam1:()=>"https://pv.viewsurf.com/2080/Chatelaillon-Port?i=NzU4Mjp1bmRlZmluZWQ",webcam2:()=>"https://pv.viewsurf.com/1478/Chatelaillon-Plage?i=NTkyMDp1bmRlZmluZWQ",weather:(e,t)=>t&&`https://embed.windy.com/embed.html?type=map&location=coordinates&metricRain=mm&metricTemp=\xb0C&metricWind=kt&zoom=10&overlay=wind&product=ecmwf&level=surface&lat=${t.latitude}&lon=${t.longitude}&message=true`};e.s(["default",0,({view:e})=>{let{t:s}=(0,r.useTranslation)(),[u,v]=(0,n.useState)(b),[k,w]=(0,n.useState)(null);i.default.getAll();let P=i.default.getSignalKUrl(),E=(0,a.useSignalKPath)("navigation.position");(0,n.useEffect)(()=>{w(null)},[e]),(0,n.useEffect)(()=>{E&&v(e=>e?Math.abs(e.latitude-E.latitude)>.01||Math.abs(e.longitude-E.longitude)>.01?E:e:E)},[E]);let C=(0,n.useMemo)(()=>{let t=i.default.getAll(),n=t.customExternalUrls||{};if(t.showCustomUrls&&n[e])try{if("string"==typeof n[e]&&n[e].includes("${signalkUrl}"))return n[e].replace("${signalkUrl}",P).replace("${latitude}",u?.latitude||b.latitude).replace("${longitude}",u?.longitude||b.longitude);return n[e]}catch(e){console.error("Error using custom URL:",e)}let s=y[e];if(!s)return null;try{return s(P,u)}catch(e){return console.error("Error generating URL:",e),null}},[e,u,P]),$=["motor","logbook","autopilot","battery","dashboard","debug"].includes(e);return(0,t.jsx)("div",{className:"flex flex-col w-full h-full overflow-hidden bg-hud-bg backdrop-blur-sm relative z-0",children:(0,t.jsx)(o.AnimatePresence,{mode:"wait",children:(0,t.jsx)(l.motion.div,{initial:{opacity:0,x:10,scale:.99},animate:{opacity:1,x:0,scale:1},exit:{opacity:0,x:-10,scale:.99},transition:{duration:.4,ease:[.16,1,.3,1]},style:{flex:"1 1 0%",minHeight:0},className:`flex flex-col w-full absolute inset-0 ${$?"overflow-hidden":"overflow-auto"}`,children:(()=>{if(k)return(0,t.jsx)("div",{className:"text-oRed p-4 font-semibold uppercase text-caption",children:k});switch(e){case"manual":return(0,t.jsx)(c,{path:"./docs"});case"settings":return(0,t.jsx)(d,{});case"mediaplayer":return(0,t.jsx)(m,{});case"battery":return(0,t.jsx)(h,{});case"motor":return(0,t.jsx)(f,{});case"dashboard":return(0,t.jsx)(p,{});case"logbook":return(0,t.jsx)(g,{});case"autopilot":return(0,t.jsx)(x,{});case"debug":return(0,t.jsx)(j,{});default:if(!C)return(0,t.jsx)("div",{className:"text-hud-muted p-4 text-label",children:s("errors.failedToLoadExternal")});return(0,t.jsx)("iframe",{className:"flex-grow border-none",src:C,title:"External Application",onError:()=>w(s("errors.failedToLoadExternal"))})}})()},e)})})}])},42602,function(e){e.n(e.i(68192))},58293,e=>{e.v(t=>Promise.all(["static/chunks/2dvwb-mfasp68.js","static/chunks/3utjjgdhnlx86.js"].map(t=>e.l(t))).then(()=>t(33946)))},71074,e=>{e.v(t=>Promise.all(["static/chunks/1xekc18cyi4sx.js","static/chunks/3utjjgdhnlx86.js","static/chunks/2s6w3x5jnc2tg.js"].map(t=>e.l(t))).then(()=>t(65862)))},88913,e=>{e.v(t=>Promise.all(["static/chunks/0nq1o9-m7bhjg.js","static/chunks/3utjjgdhnlx86.js","static/chunks/1quvj-861o57h.js"].map(t=>e.l(t))).then(()=>t(25294)))},47853,e=>{e.v(t=>Promise.all(["static/chunks/2fdpvhx4oo81h.js"].map(t=>e.l(t))).then(()=>t(58652)))},26949,e=>{e.v(t=>Promise.all(["static/chunks/1e-w_-usen7fy.js","static/chunks/3utjjgdhnlx86.js"].map(t=>e.l(t))).then(()=>t(23298)))},3523,e=>{e.v(t=>Promise.all(["static/chunks/1pa1cfmfts0i9.js","static/chunks/3utjjgdhnlx86.js"].map(t=>e.l(t))).then(()=>t(8161)))},26371,e=>{e.v(t=>Promise.all(["static/chunks/3wwn1rti8oc_r.js","static/chunks/3utjjgdhnlx86.js"].map(t=>e.l(t))).then(()=>t(70127)))},30455,e=>{e.v(t=>Promise.all(["static/chunks/0n95joti2n2py.js","static/chunks/3utjjgdhnlx86.js"].map(t=>e.l(t))).then(()=>t(13268)))},22155,e=>{e.v(t=>Promise.all(["static/chunks/0jucaltuccn03.js","static/chunks/271ys-u920uqd.js","static/chunks/3utjjgdhnlx86.js","static/chunks/0ohleay4roayh.js"].map(t=>e.l(t))).then(()=>t(34900)))},88653,e=>{"use strict";var t=e.i(43476),n=e.i(71645),s=e.i(31178),l=e.i(47414),o=e.i(74008),r=e.i(21476),a=e.i(72846),i=n,u=e.i(37806);function c(e,t){if("function"==typeof e)return e(t);null!=e&&(e.current=t)}class d extends i.Component{getSnapshotBeforeUpdate(e){let t=this.props.childRef.current;if((0,a.isHTMLElement)(t)&&e.isPresent&&!this.props.isPresent&&!1!==this.props.pop){let e=t.offsetParent,n=(0,a.isHTMLElement)(e)&&e.offsetWidth||0,s=(0,a.isHTMLElement)(e)&&e.offsetHeight||0,l=getComputedStyle(t),o=this.props.sizeRef.current;o.height=parseFloat(l.height),o.width=parseFloat(l.width),o.top=t.offsetTop,o.left=t.offsetLeft,o.right=n-o.width-o.left,o.bottom=s-o.height-o.top,o.direction=l.direction}return null}componentDidUpdate(){}render(){return this.props.children}}function m({children:e,isPresent:s,anchorX:l,anchorY:o,root:r,pop:a}){let h=(0,i.useId)(),f=(0,i.useRef)(null),p=(0,i.useRef)({width:0,height:0,top:0,left:0,right:0,bottom:0,direction:"ltr"}),{nonce:g}=(0,i.useContext)(u.MotionConfigContext),x=function(...e){return n.useCallback(function(...e){return t=>{let n=!1,s=e.map(e=>{let s=c(e,t);return n||"function"!=typeof s||(n=!0),s});if(n)return()=>{for(let t=0;t<s.length;t++){let n=s[t];"function"==typeof n?n():c(e[t],null)}}}}(...e),e)}(f,!1!==a?e.props?.ref??e?.ref:void 0);return(0,i.useInsertionEffect)(()=>{let{width:e,height:t,top:n,left:i,right:u,bottom:c,direction:d}=p.current;if(s||!1===a||!f.current||!e||!t)return;let m="rtl"===d,x="left"===l?m?`right: ${u}`:`left: ${i}`:m?`left: ${i}`:`right: ${u}`,j="bottom"===o?`bottom: ${c}`:`top: ${n}`;f.current.dataset.motionPopId=h;let b=document.createElement("style");g&&(b.nonce=g);let y=r??document.head;return y.appendChild(b),b.sheet&&b.sheet.insertRule(`
2
+ [data-motion-pop-id="${h}"] {
3
+ position: absolute !important;
4
+ width: ${e}px !important;
5
+ height: ${t}px !important;
6
+ ${x}px !important;
7
+ ${j}px !important;
8
+ }
9
+ `),()=>{f.current?.removeAttribute("data-motion-pop-id"),y.contains(b)&&y.removeChild(b)}},[s]),(0,t.jsx)(d,{isPresent:s,childRef:f,sizeRef:p,pop:a,children:!1===a?e:i.cloneElement(e,{ref:x})})}let h=({children:e,initial:s,isPresent:a,onExitComplete:i,custom:u,presenceAffectsLayout:c,mode:d,anchorX:h,anchorY:p,root:g})=>{let x=(0,l.useConstant)(f),j=(0,n.useId)(),b=(0,n.useRef)(a),y=(0,n.useRef)(i);(0,o.useIsomorphicLayoutEffect)(()=>{b.current=a,y.current=i});let v=!0,k=(0,n.useMemo)(()=>(v=!1,{id:j,initial:s,isPresent:a,custom:u,onExitComplete:e=>{for(let t of(x.set(e,!0),x.values()))if(!t)return;i&&i()},register:e=>(x.set(e,!1),()=>{x.delete(e),b.current||x.size||y.current?.()})}),[a,x,i]);return c&&v&&(k={...k}),(0,n.useMemo)(()=>{x.forEach((e,t)=>x.set(t,!1))},[a]),n.useEffect(()=>{a||x.size||!i||i()},[a]),e=(0,t.jsx)(m,{pop:"popLayout"===d,isPresent:a,anchorX:h,anchorY:p,root:g,children:e}),(0,t.jsx)(r.PresenceContext.Provider,{value:k,children:e})};function f(){return new Map}var p=e.i(64978);let g=e=>e.key||"";function x(e){let t=[];return n.Children.forEach(e,e=>{(0,n.isValidElement)(e)&&t.push(e)}),t}e.s(["AnimatePresence",0,({children:e,custom:r,initial:a=!0,onExitComplete:i,presenceAffectsLayout:u=!0,mode:c="sync",propagate:d=!1,anchorX:m="left",anchorY:f="top",root:j})=>{let[b,y]=(0,p.usePresence)(d),v=(0,n.useMemo)(()=>x(e),[e]),k=d&&!b?[]:v.map(g),w=(0,n.useRef)(!0),P=(0,l.useConstant)(()=>new Map),E=(0,n.useRef)(new Set),[C,$]=(0,n.useState)(v),[A,R]=(0,n.useState)(v);(0,o.useIsomorphicLayoutEffect)(()=>{!d||b||A.length||y?.()},[b,d,A.length,y]),(0,o.useIsomorphicLayoutEffect)(()=>{w.current=!1;for(let e=0;e<A.length;e++){let t=g(A[e]);k.includes(t)?(P.delete(t),E.current.delete(t)):!0!==P.get(t)&&P.set(t,!1)}},[A,k.length,k.join("-")]);let M=[];if(v!==C){let e=[...v],t=0;for(let n of A){let s=k.indexOf(g(n));-1===s?(e.splice(t++,0,n),M.push(n)):t=s+M.length+1}return M.every(e=>P.get(g(e)))?e=v:"wait"===c&&(e=M),R(x(e)),$(v),null}let{forceRender:L}=(0,n.useContext)(s.LayoutGroupContext);return(0,t.jsx)(t.Fragment,{children:A.map(e=>{let n=g(e),s=(!d||!!b)&&(v===A||k.includes(n));return(0,t.jsx)(h,{isPresent:s,initial:(!w.current||!!a)&&void 0,custom:r,presenceAffectsLayout:u,mode:c,root:j,onExitComplete:s?void 0:()=>{if(E.current.has(n)||!P.has(n))return;E.current.add(n),P.set(n,!0);let e=!0;P.forEach(t=>{t||(e=!1)}),e&&(L?.(),$([]),d&&y?.(),i&&i())},anchorX:m,anchorY:f,children:e},n)})})}],88653)}]);
@@ -1,4 +1,4 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,84226,e=>{"use strict";var t=e.i(43476),r=e.i(71645),n=e.i(57384);e.i(67561);var o=e.i(46991),i=e.i(85709),a=e.i(83402),s=e.i(90072),u=e.i(16196),l=e.i(83646);let d=({position:e=[0,0,0],rotation:r=[0,0,0],speed:n,color:o,fontSize:i=.5,textPosition:a=[0,.8,0],arrowSize:d=1})=>{let{scene:p}=(0,l.default)(),c=o||p.wind;return(0,t.jsxs)("group",{position:e,rotation:r,children:[(0,t.jsx)(u.Text,{characters:".0123456789",color:c,fontSize:i*d,position:a,font:"fonts/Roboto-Bold.ttf",anchorX:"center",anchorY:"middle",children:n.toFixed(1)}),(0,t.jsxs)("mesh",{children:[(0,t.jsx)("shapeGeometry",{args:[new s.Shape([new s.Vector2(0,0),new s.Vector2(.5*d*Math.cos(5*Math.PI/6),.5*d*Math.sin(5*Math.PI/6)),new s.Vector2(0,-.577*d),new s.Vector2(0,-.577*d),new s.Vector2(-.5*d*Math.cos(5*Math.PI/6),.5*d*Math.sin(5*Math.PI/6)),new s.Vector2(0,0)])]}),(0,t.jsx)("meshStandardMaterial",{color:c,side:s.DoubleSide})]})]})};d.propTypes={position:n.default.oneOfType([n.default.instanceOf(s.Vector3),n.default.arrayOf(n.default.number)]).isRequired,rotation:n.default.arrayOf(n.default.number).isRequired,speed:n.default.number.isRequired,color:n.default.oneOfType([n.default.string,n.default.number]).isRequired,fontSize:n.default.number,textPosition:n.default.arrayOf(n.default.number),arrowSize:n.default.number};let p=({outerRadius:e})=>{let n=a.default.get("preferredWindSpeedPath")||"speedTrue",u=a.default.get("preferredWindDirectionPath")||"directionTrue",p=a.default.get("preferredHeadingPath")||"courseOverGroundTrue",c=(0,r.useMemo)(()=>["environment.wind.angleTrueGround","environment.wind.speedOverGround","environment.wind.directionTrue","environment.wind.speedTrue","environment.wind.angleApparent","environment.wind.speedApparent","environment.wind.angleTrueWater","navigation.headingTrue","navigation.headingMagnetic","navigation.courseOverGroundTrue","navigation.courseOverGroundMagnetic"],[]),h=(0,i.useSignalKPaths)(c),f=(0,r.useMemo)(()=>{if("directionTrue"===u){let e=h[`environment.wind.${u}`]??h["environment.wind.directionTrue"];if(null!=e)return Math.PI/2-(e-(h[`navigation.${p}`]??h["navigation.headingTrue"]??h["navigation.courseOverGroundTrue"]??0));let t=h["environment.wind.angleTrueGround"]??h["environment.wind.angleTrueWater"];if(null!=t)return Math.PI/2-t}else{let e=h[`environment.wind.${u}`]??h["environment.wind.angleTrueGround"]??h["environment.wind.angleTrueWater"];if(null!=e)return Math.PI/2-e;let t=h["environment.wind.directionTrue"];if(null!=t)return Math.PI/2-(t-(h[`navigation.${p}`]??h["navigation.headingTrue"]??h["navigation.courseOverGroundTrue"]??0))}return Math.PI/2},[h,u,p]),m=(0,r.useMemo)(()=>{let e=h[`environment.wind.${n}`]??h["environment.wind.speedOverGround"]??h["environment.wind.speedTrue"];return(0,o.convertSpeedUnit)(e)||0},[h,n]),g=(0,r.useMemo)(()=>Math.PI/2-(h["environment.wind.angleApparent"]||0),[h]),v=(0,r.useMemo)(()=>(0,o.convertSpeedUnit)(h["environment.wind.speedApparent"])||0,[h]),x=(0,r.useMemo)(()=>new s.Vector3((e+.7)*Math.cos(f),0,-(e+.7)*Math.sin(f)),[e,f]),M=(0,r.useMemo)(()=>new s.Vector3((e+.7)*Math.cos(g),0,-(e+.7)*Math.sin(g)),[e,g]),w=(0,l.default)();return(0,t.jsxs)("group",{children:[m>0&&!0!==a.default.get("hideTrueWind")&&(0,t.jsx)(d,{position:x,rotation:[-Math.PI/2,0,-(Math.PI/2-f)],speed:m,color:w.ok,fontSize:1}),v>0&&(0,t.jsx)(d,{position:M,rotation:[-Math.PI/2,0,-(Math.PI/2-g)],speed:v,color:w.accent,fontSize:1})]})};p.propTypes={outerRadius:n.default.number.isRequired},e.s(["default",0,p])},35235,e=>{"use strict";var t=e.i(43476),r=e.i(71645),n=e.i(30297),o=e.i(82897),i=e.i(60099),a=e.i(66326),s=e.i(73919),u=e.i(20440),l=e.i(85709),d=e.i(83646),p=e.i(84226),c=e.i(57384),h=e.i(16196),f=e.i(90072);let m=.5,g=({position:e,rotation:r,speed:n,color:o,fontSize:i=m,textPosition:a=[0,.8,0],arrowSize:s=1})=>{let{scene:u}=(0,d.default)(),l=o||u.wind;return(0,t.jsxs)("group",{position:e,rotation:r,children:[(0,t.jsx)(h.Text,{characters:"0123456789.",color:l,fontSize:i*s,position:a,font:"fonts/Roboto-Bold.ttf",anchorX:"center",anchorY:"middle",fillOpacity:.9,children:n.toFixed(1)}),(0,t.jsxs)("mesh",{children:[(0,t.jsx)("shapeGeometry",{args:[new f.Shape([new f.Vector2(0,0),new f.Vector2(.4*s,.3*s),new f.Vector2(0,-.6*s),new f.Vector2(-.4*s,.3*s),new f.Vector2(0,0)])]}),(0,t.jsx)("meshBasicMaterial",{color:l,side:f.DoubleSide,transparent:!0,opacity:.8})]})]})};g.propTypes={position:c.default.arrayOf(c.default.number),rotation:c.default.arrayOf(c.default.number),speed:c.default.number.isRequired,color:c.default.string,fontSize:c.default.number,textPosition:c.default.arrayOf(c.default.number),arrowSize:c.default.number},g.defaultProps={position:[0,0,0],rotation:[0,0,0],color:null,fontSize:m,textPosition:[0,.8,0],arrowSize:1};let v=({outerRadius:e})=>{let n=(0,l.useSignalKPath)("environment.current"),o=(0,r.useMemo)(()=>n||{setTrue:0,drift:0},[n]),i=(0,r.useMemo)(()=>{let t=o.setTrue||0;return[(e+.7)*Math.cos(t),0,-(e+.7)*Math.sin(t)]},[e,o.setTrue]),{scene:a}=(0,d.default)();return!o.drift||o.drift<=0?null:(0,t.jsx)("group",{children:(0,t.jsx)(g,{position:i,rotation:[-Math.PI/2,0,-(Math.PI/2-(o.setTrue||0))],speed:o.drift,color:a.current,arrowSize:1.2})})};v.propTypes={outerRadius:c.default.number.isRequired};var x=e.i(95393);let M=`
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,84226,e=>{"use strict";var t=e.i(43476),r=e.i(71645),n=e.i(57384);e.i(67561);var o=e.i(46991),i=e.i(85709),a=e.i(83402),s=e.i(90072),u=e.i(16196),l=e.i(83646);let d=({position:e=[0,0,0],rotation:r=[0,0,0],speed:n,color:o,fontSize:i=.5,textPosition:a=[0,.8,0],arrowSize:d=1})=>{let{scene:p}=(0,l.default)(),c=o||p.wind;return(0,t.jsxs)("group",{position:e,rotation:r,children:[(0,t.jsx)(u.Text,{characters:".0123456789",color:c,fontSize:i*d,position:a,font:"fonts/Roboto-Bold.ttf",anchorX:"center",anchorY:"middle",children:n.toFixed(1)}),(0,t.jsxs)("mesh",{children:[(0,t.jsx)("shapeGeometry",{args:[new s.Shape([new s.Vector2(0,0),new s.Vector2(.5*d*Math.cos(5*Math.PI/6),.5*d*Math.sin(5*Math.PI/6)),new s.Vector2(0,-.577*d),new s.Vector2(0,-.577*d),new s.Vector2(-.5*d*Math.cos(5*Math.PI/6),.5*d*Math.sin(5*Math.PI/6)),new s.Vector2(0,0)])]}),(0,t.jsx)("meshStandardMaterial",{color:c,side:s.DoubleSide})]})]})};d.propTypes={position:n.default.oneOfType([n.default.instanceOf(s.Vector3),n.default.arrayOf(n.default.number)]).isRequired,rotation:n.default.arrayOf(n.default.number).isRequired,speed:n.default.number.isRequired,color:n.default.oneOfType([n.default.string,n.default.number]).isRequired,fontSize:n.default.number,textPosition:n.default.arrayOf(n.default.number),arrowSize:n.default.number};let p=({outerRadius:e})=>{let n=a.default.get("preferredWindSpeedPath")||"speedTrue",u=a.default.get("preferredWindDirectionPath")||"directionTrue",p=a.default.get("preferredHeadingPath")||"courseOverGroundTrue",c=(0,r.useMemo)(()=>["environment.wind.angleTrueGround","environment.wind.speedOverGround","environment.wind.directionTrue","environment.wind.speedTrue","environment.wind.angleApparent","environment.wind.speedApparent","environment.wind.angleTrueWater","navigation.headingTrue","navigation.headingMagnetic","navigation.courseOverGroundTrue","navigation.courseOverGroundMagnetic"],[]),h=(0,i.useSignalKPaths)(c),f=(0,r.useMemo)(()=>{if("directionTrue"===u){let e=h[`environment.wind.${u}`]??h["environment.wind.directionTrue"];if(null!=e)return Math.PI/2-(e-(h[`navigation.${p}`]??h["navigation.headingTrue"]??h["navigation.courseOverGroundTrue"]??0));let t=h["environment.wind.angleTrueGround"]??h["environment.wind.angleTrueWater"];if(null!=t)return Math.PI/2-t}else{let e=h[`environment.wind.${u}`]??h["environment.wind.angleTrueGround"]??h["environment.wind.angleTrueWater"];if(null!=e)return Math.PI/2-e;let t=h["environment.wind.directionTrue"];if(null!=t)return Math.PI/2-(t-(h[`navigation.${p}`]??h["navigation.headingTrue"]??h["navigation.courseOverGroundTrue"]??0))}return Math.PI/2},[h,u,p]),m=(0,r.useMemo)(()=>{let e=h[`environment.wind.${n}`]??h["environment.wind.speedOverGround"]??h["environment.wind.speedTrue"];return(0,o.convertSpeedUnit)(e)||0},[h,n]),g=(0,r.useMemo)(()=>Math.PI/2-(h["environment.wind.angleApparent"]||0),[h]),v=(0,r.useMemo)(()=>(0,o.convertSpeedUnit)(h["environment.wind.speedApparent"])||0,[h]),x=(0,r.useMemo)(()=>new s.Vector3((e+.7)*Math.cos(f),0,-(e+.7)*Math.sin(f)),[e,f]),M=(0,r.useMemo)(()=>new s.Vector3((e+.7)*Math.cos(g),0,-(e+.7)*Math.sin(g)),[e,g]),w=(0,l.default)();return(0,t.jsxs)("group",{children:[m>0&&!0!==a.default.get("hideTrueWind")&&(0,t.jsx)(d,{position:x,rotation:[-Math.PI/2,0,-(Math.PI/2-f)],speed:m,color:w.ok,fontSize:1}),v>0&&(0,t.jsx)(d,{position:M,rotation:[-Math.PI/2,0,-(Math.PI/2-g)],speed:v,color:w.accent,fontSize:1})]})};p.propTypes={outerRadius:n.default.number.isRequired},e.s(["default",0,p])},35235,e=>{"use strict";var t=e.i(43476),r=e.i(71645),n=e.i(82897),o=e.i(60099),i=e.i(44909),a=e.i(66326),s=e.i(73919),u=e.i(20440),l=e.i(85709),d=e.i(83646),p=e.i(84226),c=e.i(57384),h=e.i(16196),f=e.i(90072);let m=.5,g=({position:e,rotation:r,speed:n,color:o,fontSize:i=m,textPosition:a=[0,.8,0],arrowSize:s=1})=>{let{scene:u}=(0,d.default)(),l=o||u.wind;return(0,t.jsxs)("group",{position:e,rotation:r,children:[(0,t.jsx)(h.Text,{characters:"0123456789.",color:l,fontSize:i*s,position:a,font:"fonts/Roboto-Bold.ttf",anchorX:"center",anchorY:"middle",fillOpacity:.9,children:n.toFixed(1)}),(0,t.jsxs)("mesh",{children:[(0,t.jsx)("shapeGeometry",{args:[new f.Shape([new f.Vector2(0,0),new f.Vector2(.4*s,.3*s),new f.Vector2(0,-.6*s),new f.Vector2(-.4*s,.3*s),new f.Vector2(0,0)])]}),(0,t.jsx)("meshBasicMaterial",{color:l,side:f.DoubleSide,transparent:!0,opacity:.8})]})]})};g.propTypes={position:c.default.arrayOf(c.default.number),rotation:c.default.arrayOf(c.default.number),speed:c.default.number.isRequired,color:c.default.string,fontSize:c.default.number,textPosition:c.default.arrayOf(c.default.number),arrowSize:c.default.number},g.defaultProps={position:[0,0,0],rotation:[0,0,0],color:null,fontSize:m,textPosition:[0,.8,0],arrowSize:1};let v=({outerRadius:e})=>{let n=(0,l.useSignalKPath)("environment.current"),o=(0,r.useMemo)(()=>n||{setTrue:0,drift:0},[n]),i=(0,r.useMemo)(()=>{let t=o.setTrue||0;return[(e+.7)*Math.cos(t),0,-(e+.7)*Math.sin(t)]},[e,o.setTrue]),{scene:a}=(0,d.default)();return!o.drift||o.drift<=0?null:(0,t.jsx)("group",{children:(0,t.jsx)(g,{position:i,rotation:[-Math.PI/2,0,-(Math.PI/2-(o.setTrue||0))],speed:o.drift,color:a.current,arrowSize:1.2})})};v.propTypes={outerRadius:c.default.number.isRequired};var x=e.i(95393);let M=`
2
2
  attribute float aAlong;
3
3
  varying vec2 vUv;
4
4
  varying float vAlong;
@@ -27,4 +27,4 @@
27
27
  gl_FragColor = vec4(color, alpha);
28
28
  #include <colorspace_fragment>
29
29
  }
30
- `,y=({points:e,width:n=2,color:o,glow:i,y:a=.05,opacity:s=1})=>{let u=(0,r.useMemo)(()=>new f.ShaderMaterial({uniforms:{uColor:{value:new f.Color},uGlow:{value:new f.Color},uTime:{value:0},uOpacity:{value:1}},vertexShader:M,fragmentShader:w,transparent:!0,depthWrite:!1,side:f.DoubleSide}),[]);(0,r.useEffect)(()=>{u.uniforms.uColor.value.set(o),u.uniforms.uGlow.value.set(i||o),u.uniforms.uOpacity.value=s},[u,o,i,s]),(0,r.useEffect)(()=>()=>u.dispose(),[u]),(0,x.useFrame)((e,t)=>{u.uniforms.uTime.value+=t});let l=(0,r.useMemo)(()=>{let t=e.length,r=new Float32Array(2*t*3),o=new Float32Array(2*t*2),i=new Float32Array(2*t),s=0,u=e.reduce((t,r,n)=>n?t+Math.hypot(r[0]-e[n-1][0],r[1]-e[n-1][1]):0,0)||1;for(let l=0;l<t;l++){let d=e[Math.max(0,l-1)],p=e[Math.min(t-1,l+1)],c=p[0]-d[0],h=p[1]-d[1],f=Math.hypot(c,h)||1;c/=f,h/=f,l>0&&(s+=Math.hypot(e[l][0]-e[l-1][0],e[l][1]-e[l-1][1]));let m=-h*n/2,g=c*n/2;r.set([e[l][0]+m,a,e[l][1]+g,e[l][0]-m,a,e[l][1]-g],6*l),o.set([0,s/u,1,s/u],4*l),i.set([s,s],2*l)}let l=[];for(let e=0;e<t-1;e++){let t=2*e;l.push(t,t+1,t+2,t+1,t+3,t+2)}let d=new f.BufferGeometry;return d.setAttribute("position",new f.BufferAttribute(r,3)),d.setAttribute("uv",new f.BufferAttribute(o,2)),d.setAttribute("aAlong",new f.BufferAttribute(i,1)),d.setIndex(l),d},[e,n,a]);return((0,r.useEffect)(()=>()=>l.dispose(),[l]),e.length<2)?null:(0,t.jsx)("mesh",{geometry:l,material:u,renderOrder:2})};var b=e.i(76247),T=e.i(43216);let j=35*Math.PI/180,P=({rudder:e=0,speed:t=0,seconds:r=20,current:n=null,wind:o=null,steps:i=48})=>{let a=Math.tan(Math.max(-j,Math.min(j,e||0)))/4.2,s=0,u=0;if(n&&Number.isFinite(n.set)&&Number.isFinite(n.drift)&&(s+=n.drift*Math.sin(n.set),u-=n.drift*Math.cos(n.set)),o&&Number.isFinite(o.angle)&&Number.isFinite(o.speed)){let e=.035*o.speed;s-=e*Math.sin(o.angle),u+=e*Math.cos(o.angle)}let l=r/i,d=0,p=0,c=0,h=[[0,0]];for(let e=0;e<i;e++)d+=(t*Math.sin(c)+s)*l,p+=(-t*Math.cos(c)+u)*l,c+=t*a*l,h.push([d,p]);return h};var O=e.i(539);let S=["steering.rudderAngle","navigation.speedThroughWater","navigation.speedOverGround","propulsion.0.transmission.gear","propulsion.main.transmission.gear","propulsion.port.transmission.gear","environment.current","environment.wind.speedTrue","environment.wind.angleTrueWater","navigation.headingTrue","navigation.courseOverGroundTrue"];e.s(["default",0,({onUpdateInfoPanel:e})=>{let{scene:c,accent:h}=(0,d.default)(),f=(0,r.useRef)(),m=(0,l.useSignalKPaths)(S),g=m["steering.rudderAngle"]??0,x=Math.abs(m["navigation.speedThroughWater"]??m["navigation.speedOverGround"]??0),M=m["propulsion.0.transmission.gear"]??m["propulsion.main.transmission.gear"]??m["propulsion.port.transmission.gear"],w=-1===M||"string"==typeof M&&M.trim().toLowerCase().startsWith("rev"),j=m["navigation.headingTrue"]??m["navigation.courseOverGroundTrue"],I=m["environment.current"],A=m["environment.wind.speedTrue"],G=m["environment.wind.angleTrueWater"],{path:R,noDrift:W}=(0,r.useMemo)(()=>{let e=w?-x:x,t=I&&Number.isFinite(j)?{set:(0,O.wrapPi)((I.setTrue??0)-j),drift:I.drift??0}:null,r=Number.isFinite(A)&&Number.isFinite(G)?{angle:G,speed:A}:null,n=(w?1:-1)*5.4,o=([e,t])=>[.5*e,(t+n)*.5];return{path:P({rudder:g,speed:e,seconds:20,current:t,wind:r}).map(o),noDrift:P({rudder:g,speed:e,seconds:20}).map(o)}},[g,x,w,j,I,A,G]);return(0,t.jsxs)(r.Suspense,{fallback:(0,t.jsx)(i.Html,{center:!0,children:"Loading..."}),children:[(0,t.jsx)(o.PerspectiveCamera,{makeDefault:!0,fov:50,near:1,far:1e3,position:[0,30,12]}),(0,t.jsx)(n.OrbitControls,{target:[0,-3,-2],enableZoom:!0,enableRotate:!0,maxPolarAngle:Math.PI/2.4,minPolarAngle:0}),(0,t.jsx)(s.default,{fogNear:120,fogFar:400}),(0,t.jsxs)("group",{position:[0,-3,0],children:[(0,t.jsx)(u.default,{}),(0,t.jsx)(b.default,{scale:.5}),(0,t.jsx)(a.default,{position:[0,0,0],scale:[.5,.5,.5],ref:f,showSail:!1,onUpdateInfoPanel:e}),(0,t.jsx)(y,{points:R,width:1.95,color:h,glow:c.routeGlow}),(0,t.jsx)(T.Line,{points:W.map(([e,t])=>[e,.06,t]),color:c.compassDim,lineWidth:1.5,dashed:!0,dashSize:.6,gapSize:.5}),(0,t.jsx)(p.default,{outerRadius:5}),(0,t.jsx)(v,{outerRadius:5})]})]})}],35235)},27404,function(e){e.n(e.i(35235))},76247,37369,e=>{"use strict";var t=e.i(43476),r=e.i(71645),n=e.i(43216),o=e.i(83646),i=e.i(78461);let a={type:"bow",side:"starboard",pose:null,source:"virtual"},s=new Set,u=()=>a,l=e=>{a={...a,...e},s.forEach(e=>e())},d=e=>(s.add(e),()=>s.delete(e)),p=()=>(0,r.useSyncExternalStore)(d,u,u),c=(e,t,r=a.type,n=22)=>{l({type:r,pose:{x:e.x+Math.sin(t)*n,y:e.y+Math.cos(t)*n,heading:"stern"===r?t+Math.PI:t},source:"virtual"})};e.s(["BERTH_TYPES",0,["bow","stern","side","buoy"],"getBerth",0,u,"placeVirtualBerth",0,c,"setBerth",0,l,"useBerth",0,p],37369);let h={length:10.8,beam:3.9},f=h.length/2,m=h.beam/2,g=({size:e,position:r,color:n,opacity:o=1})=>(0,t.jsxs)("mesh",{position:r,children:[(0,t.jsx)("boxGeometry",{args:e}),(0,t.jsx)("meshLambertMaterial",{color:n,transparent:o<1,opacity:o})]}),v=({position:e,rotation:r=0,color:n,length:o=4})=>(0,t.jsxs)("group",{position:e,rotation:[0,r,0],children:[(0,t.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.07,o/2-.6],children:[(0,t.jsx)("planeGeometry",{args:[.7,o-1.2]}),(0,t.jsx)("meshBasicMaterial",{color:n,transparent:!0,opacity:.85,depthWrite:!1})]}),(0,t.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.07,-.6],children:[(0,t.jsx)("circleGeometry",{args:[1.2,3,Math.PI/2]}),(0,t.jsx)("meshBasicMaterial",{color:n,transparent:!0,opacity:.85,depthWrite:!1})]})]}),x=({type:e,side:o,colors:i})=>{let a,s=(0,r.useMemo)(()=>(()=>{let e=-f+3.5,t=[[-m,f],[m,f],[m,e]];for(let r=1;r<=8;r++){let n=r/8;t.push([m*(1-n)**1.6,e-(e+f)*Math.sin(n*Math.PI/2)])}for(let r=7;r>=0;r--){let n=r/8;t.push([-m*(1-n)**1.6,e-(e+f)*Math.sin(n*Math.PI/2)])}return t.push([-m,f]),t.map(([e,t])=>[e,.06,t])})(),[]),u="port"===o?-1:1;return(0,t.jsxs)("group",{children:[(0,t.jsx)(n.Line,{points:s,color:i.target,lineWidth:2.5,dashed:!0,dashSize:.8,gapSize:.5}),(0,t.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.04,.3],children:[(0,t.jsx)("planeGeometry",{args:[.9*h.beam,h.length-1.6]}),(0,t.jsx)("meshBasicMaterial",{color:i.target,transparent:!0,opacity:.12,depthWrite:!1})]}),("bow"===e||"stern"===e)&&(a="bow"===e?-1:1,(0,t.jsxs)("group",{children:[(0,t.jsx)(g,{size:[32,.35,2.2],position:[0,.17,a*(f+.45+1.1)],color:i.pontoon}),(0,t.jsx)(g,{size:[.8,.3,9],position:[m+.45+.4,.15,a*(f-4.5+.45)],color:i.pontoon}),(0,t.jsx)(g,{size:[.95*h.beam,1,.95*h.length],position:[-(h.beam+.9),.5,0],color:i.neighbour,opacity:.45}),(0,t.jsx)(v,{position:[0,0,-a*(f+7)],rotation:"bow"===e?0:Math.PI,color:i.target})]})),"side"===e&&(0,t.jsxs)("group",{children:[(0,t.jsx)(g,{size:[2.4,.35,26],position:[u*(m+.45+1.2),.17,0],color:i.pontoon}),(0,t.jsx)(v,{position:[-(2.5*u),0,f+6],rotation:.25*u,color:i.target})]}),"buoy"===e&&(0,t.jsxs)("group",{children:[(0,t.jsxs)("mesh",{position:[0,.5,-(f+2.5)],children:[(0,t.jsx)("sphereGeometry",{args:[.6,20,14]}),(0,t.jsx)("meshLambertMaterial",{color:i.buoy})]}),(0,t.jsx)(n.Line,{points:[[0,.3,-(f+2.5)],[0,.3,-f]],color:i.pontoon,lineWidth:2}),(0,t.jsx)(v,{position:[0,0,f+6],color:i.target})]})]})};e.s(["BOAT",0,h,"default",0,({scale:e=.5})=>{let{scene:n,accent:a}=(0,o.default)(),{heading:s,offset:l,hasFix:d,hasHeading:h}=(0,i.default)(),f=p();(0,r.useEffect)(()=>{d&&h&&!u().pose&&c(l,s)},[l,s,d,h]);let m=(0,r.useMemo)(()=>({target:a,pontoon:n.rigging,neighbour:n.vessel,buoy:n.target}),[n,a]);if(!f.pose)return null;let{x:g,y:v,heading:M}=f.pose;return(0,t.jsx)("group",{rotation:[0,s,0],children:(0,t.jsx)("group",{position:[(g-l.x)*e,0,-(v-l.y)*e],rotation:[0,-M,0],scale:[e,e,e],children:(0,t.jsx)(x,{type:f.type,side:f.side,colors:m})})})}],76247)},32189,(e,t,r)=>{"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},65156,(e,t,r)=>{"use strict";var n=e.r(32189);function o(){}function i(){}i.resetWarningCache=o,t.exports=function(){function e(e,t,r,o,i,a){if(a!==n){var s=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return r.PropTypes=r,r}},57384,(e,t,r)=>{e.i(47167),t.exports=e.r(65156)()}]);
30
+ `,y=({points:e,width:n=2,color:o,glow:i,y:a=.05,opacity:s=1})=>{let u=(0,r.useMemo)(()=>new f.ShaderMaterial({uniforms:{uColor:{value:new f.Color},uGlow:{value:new f.Color},uTime:{value:0},uOpacity:{value:1}},vertexShader:M,fragmentShader:w,transparent:!0,depthWrite:!1,side:f.DoubleSide}),[]);(0,r.useEffect)(()=>{u.uniforms.uColor.value.set(o),u.uniforms.uGlow.value.set(i||o),u.uniforms.uOpacity.value=s},[u,o,i,s]),(0,r.useEffect)(()=>()=>u.dispose(),[u]),(0,x.useFrame)((e,t)=>{u.uniforms.uTime.value+=t});let l=(0,r.useMemo)(()=>{let t=e.length,r=new Float32Array(2*t*3),o=new Float32Array(2*t*2),i=new Float32Array(2*t),s=0,u=e.reduce((t,r,n)=>n?t+Math.hypot(r[0]-e[n-1][0],r[1]-e[n-1][1]):0,0)||1;for(let l=0;l<t;l++){let d=e[Math.max(0,l-1)],p=e[Math.min(t-1,l+1)],c=p[0]-d[0],h=p[1]-d[1],f=Math.hypot(c,h)||1;c/=f,h/=f,l>0&&(s+=Math.hypot(e[l][0]-e[l-1][0],e[l][1]-e[l-1][1]));let m=-h*n/2,g=c*n/2;r.set([e[l][0]+m,a,e[l][1]+g,e[l][0]-m,a,e[l][1]-g],6*l),o.set([0,s/u,1,s/u],4*l),i.set([s,s],2*l)}let l=[];for(let e=0;e<t-1;e++){let t=2*e;l.push(t,t+1,t+2,t+1,t+3,t+2)}let d=new f.BufferGeometry;return d.setAttribute("position",new f.BufferAttribute(r,3)),d.setAttribute("uv",new f.BufferAttribute(o,2)),d.setAttribute("aAlong",new f.BufferAttribute(i,1)),d.setIndex(l),d},[e,n,a]);return((0,r.useEffect)(()=>()=>l.dispose(),[l]),e.length<2)?null:(0,t.jsx)("mesh",{geometry:l,material:u,renderOrder:2})};var b=e.i(76247),T=e.i(43216);let j=35*Math.PI/180,P=({rudder:e=0,speed:t=0,seconds:r=20,current:n=null,wind:o=null,steps:i=48})=>{let a=Math.tan(Math.max(-j,Math.min(j,e||0)))/4.2,s=0,u=0;if(n&&Number.isFinite(n.set)&&Number.isFinite(n.drift)&&(s+=n.drift*Math.sin(n.set),u-=n.drift*Math.cos(n.set)),o&&Number.isFinite(o.angle)&&Number.isFinite(o.speed)){let e=.035*o.speed;s-=e*Math.sin(o.angle),u+=e*Math.cos(o.angle)}let l=r/i,d=0,p=0,c=0,h=[[0,0]];for(let e=0;e<i;e++)d+=(t*Math.sin(c)+s)*l,p+=(-t*Math.cos(c)+u)*l,c+=t*a*l,h.push([d,p]);return h};var S=e.i(539);let O=[0,30,12],I=[0,-3,-2],A=["steering.rudderAngle","navigation.speedThroughWater","navigation.speedOverGround","propulsion.0.transmission.gear","propulsion.main.transmission.gear","propulsion.port.transmission.gear","environment.current","environment.wind.speedTrue","environment.wind.angleTrueWater","navigation.headingTrue","navigation.courseOverGroundTrue"];e.s(["default",0,({onUpdateInfoPanel:e})=>{let{scene:c,accent:h}=(0,d.default)(),f=(0,r.useRef)(),m=(0,l.useSignalKPaths)(A),g=m["steering.rudderAngle"]??0,x=Math.abs(m["navigation.speedThroughWater"]??m["navigation.speedOverGround"]??0),M=m["propulsion.0.transmission.gear"]??m["propulsion.main.transmission.gear"]??m["propulsion.port.transmission.gear"],w=-1===M||"string"==typeof M&&M.trim().toLowerCase().startsWith("rev"),j=m["navigation.headingTrue"]??m["navigation.courseOverGroundTrue"],G=m["environment.current"],R=m["environment.wind.speedTrue"],W=m["environment.wind.angleTrueWater"],{path:z,noDrift:B}=(0,r.useMemo)(()=>{let e=w?-x:x,t=G&&Number.isFinite(j)?{set:(0,S.wrapPi)((G.setTrue??0)-j),drift:G.drift??0}:null,r=Number.isFinite(R)&&Number.isFinite(W)?{angle:W,speed:R}:null,n=(w?1:-1)*5.4,o=([e,t])=>[.5*e,(t+n)*.5];return{path:P({rudder:g,speed:e,seconds:20,current:t,wind:r}).map(o),noDrift:P({rudder:g,speed:e,seconds:20}).map(o)}},[g,x,w,j,G,R,W]);return(0,t.jsxs)(r.Suspense,{fallback:(0,t.jsx)(o.Html,{center:!0,children:"Loading..."}),children:[(0,t.jsx)(n.PerspectiveCamera,{makeDefault:!0,fov:50,near:1,far:1e3,position:O}),(0,t.jsx)(i.default,{home:O,homeTarget:I,enableZoom:!0,enableRotate:!0,maxPolarAngle:Math.PI/2.4,minPolarAngle:0}),(0,t.jsx)(s.default,{fogNear:120,fogFar:400}),(0,t.jsxs)("group",{position:[0,-3,0],children:[(0,t.jsx)(u.default,{}),(0,t.jsx)(b.default,{scale:.5}),(0,t.jsx)(a.default,{position:[0,0,0],scale:[.5,.5,.5],ref:f,showSail:!1,onUpdateInfoPanel:e}),(0,t.jsx)(y,{points:z,width:1.95,color:h,glow:c.routeGlow}),(0,t.jsx)(T.Line,{points:B.map(([e,t])=>[e,.06,t]),color:c.compassDim,lineWidth:1.5,dashed:!0,dashSize:.6,gapSize:.5}),(0,t.jsx)(p.default,{outerRadius:5}),(0,t.jsx)(v,{outerRadius:5})]})]})}],35235)},27404,function(e){e.n(e.i(35235))},76247,37369,e=>{"use strict";var t=e.i(43476),r=e.i(71645),n=e.i(43216),o=e.i(83646),i=e.i(78461);let a={type:"bow",side:"starboard",pose:null,source:"virtual"},s=new Set,u=()=>a,l=e=>{a={...a,...e},s.forEach(e=>e())},d=e=>(s.add(e),()=>s.delete(e)),p=()=>(0,r.useSyncExternalStore)(d,u,u),c=(e,t,r=a.type,n=22)=>{l({type:r,pose:{x:e.x+Math.sin(t)*n,y:e.y+Math.cos(t)*n,heading:"stern"===r?t+Math.PI:t},source:"virtual"})};e.s(["BERTH_TYPES",0,["bow","stern","side","buoy"],"getBerth",0,u,"placeVirtualBerth",0,c,"setBerth",0,l,"useBerth",0,p],37369);let h={length:10.8,beam:3.9},f=h.length/2,m=h.beam/2,g=({size:e,position:r,color:n,opacity:o=1})=>(0,t.jsxs)("mesh",{position:r,children:[(0,t.jsx)("boxGeometry",{args:e}),(0,t.jsx)("meshLambertMaterial",{color:n,transparent:o<1,opacity:o})]}),v=({position:e,rotation:r=0,color:n,length:o=4})=>(0,t.jsxs)("group",{position:e,rotation:[0,r,0],children:[(0,t.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.07,o/2-.6],children:[(0,t.jsx)("planeGeometry",{args:[.7,o-1.2]}),(0,t.jsx)("meshBasicMaterial",{color:n,transparent:!0,opacity:.85,depthWrite:!1})]}),(0,t.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.07,-.6],children:[(0,t.jsx)("circleGeometry",{args:[1.2,3,Math.PI/2]}),(0,t.jsx)("meshBasicMaterial",{color:n,transparent:!0,opacity:.85,depthWrite:!1})]})]}),x=({type:e,side:o,colors:i})=>{let a,s=(0,r.useMemo)(()=>(()=>{let e=-f+3.5,t=[[-m,f],[m,f],[m,e]];for(let r=1;r<=8;r++){let n=r/8;t.push([m*(1-n)**1.6,e-(e+f)*Math.sin(n*Math.PI/2)])}for(let r=7;r>=0;r--){let n=r/8;t.push([-m*(1-n)**1.6,e-(e+f)*Math.sin(n*Math.PI/2)])}return t.push([-m,f]),t.map(([e,t])=>[e,.06,t])})(),[]),u="port"===o?-1:1;return(0,t.jsxs)("group",{children:[(0,t.jsx)(n.Line,{points:s,color:i.target,lineWidth:2.5,dashed:!0,dashSize:.8,gapSize:.5}),(0,t.jsxs)("mesh",{rotation:[-Math.PI/2,0,0],position:[0,.04,.3],children:[(0,t.jsx)("planeGeometry",{args:[.9*h.beam,h.length-1.6]}),(0,t.jsx)("meshBasicMaterial",{color:i.target,transparent:!0,opacity:.12,depthWrite:!1})]}),("bow"===e||"stern"===e)&&(a="bow"===e?-1:1,(0,t.jsxs)("group",{children:[(0,t.jsx)(g,{size:[32,.35,2.2],position:[0,.17,a*(f+.45+1.1)],color:i.pontoon}),(0,t.jsx)(g,{size:[.8,.3,9],position:[m+.45+.4,.15,a*(f-4.5+.45)],color:i.pontoon}),(0,t.jsx)(g,{size:[.95*h.beam,1,.95*h.length],position:[-(h.beam+.9),.5,0],color:i.neighbour,opacity:.45}),(0,t.jsx)(v,{position:[0,0,-a*(f+7)],rotation:"bow"===e?0:Math.PI,color:i.target})]})),"side"===e&&(0,t.jsxs)("group",{children:[(0,t.jsx)(g,{size:[2.4,.35,26],position:[u*(m+.45+1.2),.17,0],color:i.pontoon}),(0,t.jsx)(v,{position:[-(2.5*u),0,f+6],rotation:.25*u,color:i.target})]}),"buoy"===e&&(0,t.jsxs)("group",{children:[(0,t.jsxs)("mesh",{position:[0,.5,-(f+2.5)],children:[(0,t.jsx)("sphereGeometry",{args:[.6,20,14]}),(0,t.jsx)("meshLambertMaterial",{color:i.buoy})]}),(0,t.jsx)(n.Line,{points:[[0,.3,-(f+2.5)],[0,.3,-f]],color:i.pontoon,lineWidth:2}),(0,t.jsx)(v,{position:[0,0,f+6],color:i.target})]})]})};e.s(["BOAT",0,h,"default",0,({scale:e=.5})=>{let{scene:n,accent:a}=(0,o.default)(),{heading:s,offset:l,hasFix:d,hasHeading:h}=(0,i.default)(),f=p();(0,r.useEffect)(()=>{d&&h&&!u().pose&&c(l,s)},[l,s,d,h]);let m=(0,r.useMemo)(()=>({target:a,pontoon:n.rigging,neighbour:n.vessel,buoy:n.target}),[n,a]);if(!f.pose)return null;let{x:g,y:v,heading:M}=f.pose;return(0,t.jsx)("group",{rotation:[0,s,0],children:(0,t.jsx)("group",{position:[(g-l.x)*e,0,-(v-l.y)*e],rotation:[0,-M,0],scale:[e,e,e],children:(0,t.jsx)(x,{type:f.type,side:f.side,colors:m})})})}],76247)},32189,(e,t,r)=>{"use strict";t.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},65156,(e,t,r)=>{"use strict";var n=e.r(32189);function o(){}function i(){}i.resetWarningCache=o,t.exports=function(){function e(e,t,r,o,i,a){if(a!==n){var s=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return r.PropTypes=r,r}},57384,(e,t,r)=>{e.i(47167),t.exports=e.r(65156)()}]);