ocearo-ui 2.0.2 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/404.html +1 -1
- package/README.fr.md +23 -3
- package/README.md +23 -3
- package/__next.__PAGE__.txt +3 -3
- package/__next._full.txt +3 -3
- package/__next._tree.txt +2 -2
- package/_next/static/chunks/0-jqvc-r0kh0c.js +1 -0
- package/_next/static/chunks/{2g-xpe7xnropn.js → 05do10p9ldt1p.js} +1 -1
- package/_next/static/chunks/07gn9z0d6clzs.js +1 -0
- package/_next/static/chunks/{2w44atvyp9o_w.js → 096zaxs1gf_3q.js} +2 -1
- package/_next/static/chunks/0b3cus8izqkmg.js +119 -0
- package/_next/static/chunks/0j11dppxb9l0b.js +1 -0
- package/_next/static/chunks/0jucaltuccn03.js +1 -0
- package/_next/static/chunks/{1gt2hhqk1821k.js → 0zvzu5fnwh4_a.js} +3 -3
- package/_next/static/chunks/1_g85m2d7jjpo.css +3 -0
- package/_next/static/chunks/1arvue9o-atui.js +739 -0
- package/_next/static/chunks/1bo0ke8gjc1c2.js +1 -0
- package/_next/static/chunks/1cp1kkarm5gxz.js +1 -0
- package/_next/static/chunks/1e-w_-usen7fy.js +3 -0
- package/_next/static/chunks/1hz_mzl8l35j8.js +1 -0
- package/_next/static/chunks/1k72cpd0x8veh.js +1 -0
- package/_next/static/chunks/1mtfh1vqpvit2.js +1 -0
- package/_next/static/chunks/{1exvcc71cgr4t.js → 2aivnrnff0avu.js} +1 -1
- package/_next/static/chunks/{3nm7o0eq5abhg.js → 2fthh9f57zzm2.js} +1 -1
- package/_next/static/chunks/{0jfox92up1jvy.js → 2gr1d26f-ymoh.js} +1 -1
- package/_next/static/chunks/2mzecccvvbjr1.js +1 -0
- package/_next/static/chunks/2r98jty3a4wel.js +564 -0
- package/_next/static/chunks/2v6ebsavxlgyw.js +1 -0
- package/_next/static/chunks/{1w1xks0hp_tlr.js → 33u782y6vhw-f.js} +9 -9
- package/_next/static/chunks/3qik_nv7zlj4e.js +1 -0
- package/_next/static/chunks/3qzb9nvvw-b-k.js +1 -0
- package/_next/static/chunks/3r8nellt-dsed.js +1 -0
- package/_next/static/chunks/41odv061mfm6t.js +1 -0
- package/_next/static/chunks/432vtxrssprta.js +1 -0
- package/_not-found/__next._full.txt +2 -2
- package/_not-found/__next._not-found.__PAGE__.txt +2 -2
- package/_not-found/__next._tree.txt +2 -2
- package/_not-found.html +1 -1
- package/_not-found.txt +2 -2
- package/docs/index.json +10 -5
- package/docs/signalk-server.html +3751 -0
- package/docs/signalk-specification.html +8507 -0
- package/guide/anchor.jpg +0 -0
- package/guide/bathymetry.jpg +0 -0
- package/guide/dashboard.jpg +0 -0
- package/guide/hero.jpg +0 -0
- package/guide/logbook.jpg +0 -0
- package/guide/mob.jpg +0 -0
- package/guide/parking.jpg +0 -0
- package/guide/polars.jpg +0 -0
- package/guide/traffic.jpg +0 -0
- package/guide/weather.jpg +0 -0
- package/index.html +1 -1
- package/index.txt +3 -3
- package/package.json +1 -1
- package/settings/__next._full.txt +3 -3
- package/settings/__next._tree.txt +2 -2
- package/settings/__next.settings.__PAGE__.txt +3 -3
- package/settings.html +1 -1
- package/settings.txt +3 -3
- package/_next/static/chunks/0iqdztntvxh3c.js +0 -119
- package/_next/static/chunks/0iztd835j5p1n.js +0 -700
- package/_next/static/chunks/0voiofm58khqd.js +0 -1
- package/_next/static/chunks/0w_skktmh3e48.js +0 -1
- package/_next/static/chunks/0zwc9m4qgtwle.js +0 -1
- package/_next/static/chunks/144mjqdrx42lq.js +0 -1
- package/_next/static/chunks/1ed7ayfg19cjb.js +0 -1
- package/_next/static/chunks/1epya-yh2wvj2.js +0 -1
- package/_next/static/chunks/1gq4t2dyr7rq3.js +0 -1
- package/_next/static/chunks/1ptj3mv8b_tzs.js +0 -1
- package/_next/static/chunks/1y35unwvy8p98.js +0 -1
- package/_next/static/chunks/1zm03hw2ylxw8.js +0 -1
- package/_next/static/chunks/2aq8orcir5h03.js +0 -1
- package/_next/static/chunks/2kmptoy43h0mx.js +0 -1
- package/_next/static/chunks/2kwn4iymxaom3.js +0 -1
- package/_next/static/chunks/2rebcvig176xk.js +0 -564
- package/_next/static/chunks/2ryo_bbmt6t74.css +0 -3
- package/_next/static/chunks/3--qzv1u6c7_7.js +0 -1
- package/_next/static/chunks/37t6vg8fb1-z8.js +0 -1
- package/_next/static/chunks/3p9ziqn6r35qf.js +0 -1
- package/_next/static/chunks/3q8o52_juxmdp.js +0 -1
- package/docs/opencpn.pdf +0 -0
- package/docs/signalk.pdf +0 -0
- /package/_next/static/{_UKzzvfzAh-9NIsngWWio → QMD1VkISjzTIQCzLSHPpB}/_buildManifest.js +0 -0
- /package/_next/static/{_UKzzvfzAh-9NIsngWWio → QMD1VkISjzTIQCzLSHPpB}/_clientMiddlewareManifest.js +0 -0
- /package/_next/static/{_UKzzvfzAh-9NIsngWWio → QMD1VkISjzTIQCzLSHPpB}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,20705,e=>{"use strict";let t=["north","east","south","west"],r=["port","starboard","preferred_channel_port","preferred_channel_starboard"],n=e=>{let n=Number(e);return n>=9&&n<=12?{kind:"cardinal",beacon:!0,category:t[n-9]}:n>=13&&n<=16?{kind:"lateral",beacon:!0,category:r[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:t[n-20]}:n>=24&&n<=27?{kind:"lateral",beacon:!1,category:r[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 t=n(e.atonType);return{id:`ais:${e.id}`,lat:e.latitude,lon:e.longitude,name:e.name||"",kind:t.kind,beacon:t.beacon,category:t.category||"",shape:"",colours:t.colours||[],pattern:t.pattern||"",system:"",height:null,topmark:t.topmark||null,light:null,ais:!0,virtual:e.virtual,offPosition:e.offPosition}},a=(e,t)=>Math.hypot((t.lat-e.lat)*111320,(t.lon-e.lon)*111320*Math.cos(e.lat*Math.PI/180));e.s(["atonKind",0,n,"mergeAtons",0,(e,t)=>{if(!t.length)return e;let r=e.map(e=>({...e})),n=[];for(let e of t){if(!Number.isFinite(e.latitude)||!Number.isFinite(e.longitude))continue;let t=i(e),o=!t.virtual&&r.find(e=>!e.ais&&("station"===t.kind||e.kind===t.kind)&&60>=a(e,t));o?(o.ais=!0,o.offPosition=t.offPosition,o.name||(o.name=t.name)):n.push(t)}return[...r,...n]}])},77291,24752,e=>{"use strict";var t=e.i(71645),r=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 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 r=Number(e.shipType);return 36===r?"sail":30===r?"fishing":33===r?"restricted":"power"},u=(e,t,r)=>(0,a.wrapPi)(Math.atan2(t.x-e.x,t.y-e.y)-r),d=(e,t,r)=>{let n={x:0,y:0},i=u(n,t,e.course),l=u(t,n,t.course),d=Math.sign(l)||1,g=e=>Math.abs(e)>112.5*o;if(g(i)&&t.speed>e.speed)return{ownRole:"stand-on",rule:"13",reason:"overtakenByTarget",targetTurn:0};if(g(l)&&e.speed>t.speed)return{ownRole:"give-way",rule:"13",reason:"overtaking",targetTurn:0};let c=s[e.category]??1,p=s[t.category]??1;if(c!==p)return c<p?{ownRole:"give-way",rule:"18",reason:`giveWayTo_${t.category}`,targetTurn:0}:{ownRole:"stand-on",rule:"18",reason:`standOnFrom_${t.category}`,targetTurn:d};if("sail"===e.category&&Number.isFinite(r)){let n=(0,a.wrapPi)(r-e.course)>=0?"starboard":"port";return n!==((0,a.wrapPi)(r-t.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:d}:t.x*Math.sin(r)+t.y*Math.cos(r)>0?{ownRole:"stand-on",rule:"12a-ii",reason:"targetWindward",targetTurn:d}:{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(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:d}};e.s(["rightOfWay",0,d,"targetCategory",0,l],24752);var g=e.i(83402),c=e.i(67561);let p=[],m=["navigation.speedOverGround","navigation.courseOverGroundTrue"];e.s(["default",0,({always:e=!1}={})=>{let a,o,{targets:s}=(0,r.useAIS)({passive:!0}),{states:u}=(0,c.useOcearoContext)(),h=e||u.ais?s:p,{twd:b,heading:f}=(0,i.default)(),v=(0,n.useSignalKPaths)(m),w=(a=(0,n.useSignalKPrefix)("propulsion."),o=g.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])),y=g.default.get("aisLengthScalingFactor")||.7;return(0,t.useMemo)(()=>{let e=v["navigation.courseOverGroundTrue"]??f,t=v["navigation.speedOverGround"]??0,r=[];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=d({course:e,speed:t,category:w},{x:n.sceneX/y,y:-n.sceneZ/y,course:i,speed:n.sog??0,category:l(n)},b);r.push({target:{...n},role:a})}r.sort((e,t)=>(e.target.tcpaSeconds??1/0)-(t.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 r)n[e.target.mmsi]="stand-on"===e.role.ownRole?"yields":"giveWay";let i=r.filter(e=>"stand-on"!==e.role.ownRole);return{ownCategory:w,encounters:r,statuses:n,giveWay:i.length>0,giveWayTo:i[0]||null,primary:r[0]||null}},[h,b,f,v,w,y])}],77291)},61969,e=>{"use strict";var t=e.i(71645),r=e.i(85709),n=e.i(539);let i=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,r.useSignalKPaths)(a);return(0,t.useMemo)(()=>{let t=e["navigation.speedThroughWater"]??e["navigation.speedOverGround"]??null,r=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(r)&&(s=(0,n.wrapPi)(r+o));let l=e["performance.polarSpeed"]??(Number.isFinite(a)&&Number.isFinite(o)?(0,n.polarSpeedSi)(a,o):null),u=e["performance.polarSpeedRatio"]??null;null===u&&Number.isFinite(t)&&Number.isFinite(l)&&l>.2&&(u=t/l);let d=Number.isFinite(t)&&Number.isFinite(l)?(t-l)*1.943844:null,g=null,c=null,p=!Number.isFinite(o)||Math.abs(o)<Math.PI/2;if(Number.isFinite(a)){let e=p?(0,n.optimalUpwind)(1.943844*a):(0,n.optimalDownwind)(1.943844*a);e&&(g=e.twa/i,Number.isFinite(s)&&Number.isFinite(o)&&(c=(0,n.wrapPi)(s-Math.sign(o||1)*g)))}let m=e["navigation.courseGreatCircle.nextPoint.bearingTrue"],h=null;if(Number.isFinite(m)&&Number.isFinite(s)&&Number.isFinite(a)){let e=(0,n.bestVmcHeading)({twd:s,tws:a,bearing:m}),t=Number.isFinite(r)?(0,n.vmcForHeading)({twd:s,tws:a,bearing:m,heading:r}):null;h=e?{bearing:m,best:e,current:t}:null}return{ratio:u,polarSpeed:l,boatSpeed:t,deltaKn:d,heading:r,twd:s,tws:a,twa:o,targetTwa:g,targetHeading:c,upwind:p,vmc:h}},[e])}])},83646,e=>{"use strict";var t=e.i(67561);e.s(["default",0,()=>(0,t.useOcearoContext)().tokens])},74452,(e,t,r)=>{t.exports={vpp:{angles:[52,60,75,90,110,120,135,150],speeds:[6,8,10,12,14,16,20],52:[4.98,5.86,6.31,6.45,6.51,6.52,6.41],60:[5.25,6.11,6.56,6.73,6.79,6.82,6.79],75:[5.45,6.33,6.77,7.01,7.13,7.2,7.24],90:[5.66,6.55,7,7.25,7.38,7.53,7.7],110:[5.49,6.49,7.04,7.4,7.69,7.97,8.38],120:[5.32,6.36,6.97,7.39,7.77,8.1,8.6],135:[4.81,5.92,6.68,7.15,7.55,7.95,8.85],150:[4.09,5.17,6.04,6.61,6.99,7.31,7.93],beat_angle:[43.6,42,41.2,41.2,41.7,42.1,44.2],beat_vmg:[3.26,3.91,4.24,4.34,4.36,4.34,4.16],run_angle:[144.8,147.8,148.5,149.6,171.8,175.4,177.2],run_vmg:[3.54,4.48,5.23,5.73,6.17,6.67,7.36]}}},539,e=>{"use strict";var t=e.i(74452);let r=180/Math.PI,n=t.default.vpp,i=(e,t,r)=>e+(t-e)*r,a=(e,t)=>{if(t<=e[0])return[0,0];let r=e.length-1;if(t>=e[r])return[r-1,1];let n=0;for(;t>e[n+1];)n++;return[n,(t-e[n])/(e[n+1]-e[n])]},o=n.speeds.map((e,t)=>(e=>{let t=n.beat_angle[e],i=n.run_angle[e],a=n.beat_vmg[e]/Math.cos(t/r),o=n.run_vmg[e]/Math.abs(Math.cos(i/r)),s=[[0,0],[.7*t,.55*a],[t,a]];for(let r of n.angles)r>t&&r<i&&s.push([r,n[String(r)][e]]);return s.push([i,o]),i<180&&s.push([180,n.run_vmg[e]]),s})(t)),s=(e,t)=>{let[r,n]=a(e.map(e=>e[0]),t);return i(e[r][1],e[r+1][1],n)},l=(e,t)=>{if(!Number.isFinite(e)||!Number.isFinite(t)||e<=0)return null;let r=Math.min(180,Math.abs((t+540)%360-180)),l=n.speeds;if(e<l[0])return s(o[0],r)*(e/l[0]);let[u,d]=a(l,e);return i(s(o[u],r),s(o[u+1],r),d)},u=(e,t)=>{let[r,o]=a(n.speeds,t);return i(e[r],e[r+1],o)},d=(e,t)=>{let n=l(1.943844*e,t*r);return null===n?null:n/1.943844},g=e=>{let t=(e+Math.PI)%(2*Math.PI);return t<0&&(t+=2*Math.PI),t-Math.PI};e.s(["bestVmcHeading",0,({twd:e,tws:t,bearing:n})=>{if(![e,t,n].every(Number.isFinite)||t<=0)return null;let i=null;for(let a=-100;a<=100;a++){let o=n+a/r,s=d(t,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 t=u(n.run_angle,e),i=l(e,t);return{twa:t,speed:i,vmg:-i*Math.cos(t/r)}},"optimalUpwind",0,e=>{if(!Number.isFinite(e)||e<=0)return null;let t=u(n.beat_angle,e),i=l(e,t);return{twa:t,speed:i,vmg:i*Math.cos(t/r)}},"polarSpeed",0,l,"polarSpeedSi",0,d,"vmcForHeading",0,({twd:e,tws:t,bearing:r,heading:n})=>{if(![e,t,r,n].every(Number.isFinite))return null;let i=d(t,g(e-n));return null===i?null:i*Math.cos(n-r)},"wrapPi",0,g])}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,9229,e=>{"use strict";var t=e.i(43476),i=e.i(71645),l=e.i(78954);e.i(85269);var n=e.i(22831),s=e.i(95430);let o={BACKGROUND:"bg-oGreen",TEXT:"text-oGreen"},a={BACKGROUND:"bg-oYellow",TEXT:"text-oYellow"};e.s(["default",0,()=>{let{t:e}=(0,n.useTranslation)(),[r,u]=(0,i.useState)(240),m=(0,l.default)(),h=(0,i.useCallback)(e=>{if(!e)return null;if("string"==typeof e&&(e.includes("T")||e.includes("-"))){let t=new Date(e);if(!isNaN(t.getTime()))return t.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1})}return e},[]),d=(0,i.useCallback)((e,t,i)=>i<=t||!e?0:Math.min(100,Math.max(0,(e-t)/(i-t)*100)),[]);(0,i.useEffect)(()=>{let e=()=>{let e=window.innerHeight;u(e<640?Math.min(.25*e,240):Math.min(.35*e,240))};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]);let{level:c,high:g,low:p,timeLow:f,timeHigh:v,coefficient:x,isRising:w}=(0,i.useMemo)(()=>{let{hasData:e,chartData:t,coefficient:i,timeLow:l,timeHigh:n}=m;if(!e||t.length<2)return{level:null,high:null,low:null,timeLow:null,timeHigh:null,coefficient:null,isRising:null};let o=t[0].ms,a=t[t.length-1].ms,r=Math.min(1,Math.max(0,((0,s.vesselNow)().getTime()-o)/(a-o)))*(t.length-1),u=Math.min(t.length-2,Math.floor(r)),h=t[u].height+(t[u+1].height-t[u].height)*(r-u),d=t.map(e=>e.height);return{level:Number.isFinite(m.level)?m.level:h,high:m.high??Math.max(...d),low:m.low??Math.min(...d),timeLow:l,timeHigh:n,coefficient:i,isRising:m.isRising}},[m]),N="text-hud-main",T=w?o:a,b=(0,i.useMemo)(()=>d(c,p,g),[c,p,g,d]);return null===c||null===g||null===p?null:(0,t.jsxs)("div",{className:"flex flex-col items-center group p-3 transition-all duration-300",children:[(0,t.jsx)("div",{className:`text-caption font-semibold uppercase tracking-[0.2em] mb-1 opacity-40 group-hover:opacity-100 transition-opacity ${N}`,children:e("indicators.tide")}),(0,t.jsxs)("div",{className:`text-caption font-semibold uppercase tracking-widest mb-4 ${N} flex items-center gap-1.5 opacity-60`,children:[(0,t.jsx)("span",{className:"text-oBlue",children:h(v)}),(0,t.jsx)("span",{className:`inline-block transform ${!w&&"rotate-180"} ${T.TEXT} text-caption`,children:"▲"}),null!=x&&(0,t.jsxs)("span",{className:"text-hud-muted",children:["C",x]})]}),(0,t.jsxs)("div",{className:"relative flex flex-col w-12",style:{height:r},children:[(0,t.jsx)("div",{className:"absolute left-0 top-0 w-1.5 h-full bg-hud-elevated rounded-full overflow-hidden",children:(0,t.jsx)("div",{role:"progressbar",className:`${T.BACKGROUND} w-full rounded-full transition-all duration-1000 ease-in-out absolute bottom-0 left-0`,"aria-valuenow":b,"aria-valuemin":"0","aria-valuemax":"100","aria-label":`Tide level: ${c.toFixed(2)} meters`,style:{height:`${b}%`}})}),(0,t.jsxs)("div",{className:"ml-4 h-full relative",children:[(0,t.jsxs)("span",{className:`absolute ${N} text-caption font-semibold uppercase tracking-tighter opacity-30`,style:{top:"0%"},children:[Number(g).toFixed(1),"m"]}),b>10&&b<90&&(0,t.jsxs)("div",{className:"absolute transition-all duration-500 flex items-center space-x-1",style:{bottom:`${b}%`,transform:"translateY(50%)"},children:[(0,t.jsx)("div",{className:`w-2 h-[1px] ${T.BACKGROUND} opacity-50`}),(0,t.jsxs)("span",{className:`${N} text-caption font-semibold tracking-tight`,children:[c.toFixed(2),"m"]})]}),(0,t.jsxs)("span",{className:`absolute ${N} text-caption font-semibold uppercase tracking-tighter opacity-30`,style:{bottom:"0%"},children:[Number(p).toFixed(1),"m"]})]})]}),(0,t.jsx)("div",{className:`text-caption font-semibold uppercase tracking-widest mt-4 opacity-40 ${N}`,children:h(f)})]})}])},58166,function(e){e.n(e.i(9229))},78954,e=>{"use strict";var t=e.i(71645),i=e.i(11426),l=e.i(85709),n=e.i(83402),s=e.i(83646),o=e.i(95430);let a=(e,t,i,l,n)=>{let s=i.getTime(),o=((e,t,i,l)=>{let n=i.getTime(),s=l.getTime(),o=i=>"high"===i?e:t,a=e=>"high"===e?"low":"high",r=n<s?{time:n,type:"high"}:{time:s,type:"low"},u=n<s?{time:s,type:"low"}:{time:n,type:"high"},m=[];for(let e=5;e>=1;e--){let t=e%2?a(r.type):r.type;m.push({time:r.time-22356e3*e,height:o(t),type:t})}m.push({...r,height:o(r.type)},{...u,height:o(u.type)});for(let e=1;e<=5;e++){let t=e%2?a(u.type):u.type;m.push({time:u.time+22356e3*e,height:o(t),type:t})}return m})(e,t,l,n);for(let i=0;i<o.length-1;i++)if(s>=o[i].time&&s<=o[i+1].time){let l=o[i].height,n=o[i+1].height,a=o[i+1].time-o[i].time;if(a<=0)return(e+t)/2;return parseFloat((l+(n-l)*((1-Math.cos((s-o[i].time)/a*Math.PI))/2)).toFixed(2))}return(e+t)/2},r=e=>{if(!e)return null;if(e.includes("T")||e.includes("-")){let t=new Date(e);return isNaN(t.getTime())?null:t}let t=e.split(":").map(Number);if(t.length<2)return null;let i=(0,o.vesselNow)();return i.setHours(t[0],t[1],0,0),i};e.s(["default",0,()=>{let e=(0,s.default)(),u=n.default.get("debugMode"),m=(0,t.useMemo)(()=>["environment.tide.heightNow","environment.tide.heightHigh","environment.tide.heightLow","environment.tide.timeLow","environment.tide.timeHigh","environment.tide.coeffNow"],[]),h=(0,l.useSignalKPaths)(m),{tideData:d}=(0,i.useTide)(),c=h["environment.tide.heightNow"]??d?.level??null,g=h["environment.tide.heightHigh"]??d?.high??null,p=h["environment.tide.heightLow"]??d?.low??null,f=h["environment.tide.timeLow"]??d?.timeLow??null,v=h["environment.tide.timeHigh"]??d?.timeHigh??null,x=h["environment.tide.coeffNow"]??d?.coefficient??null,w=null!==c||null!==g||null!==p||u,N=(0,t.useMemo)(()=>r(v),[v]),T=(0,t.useMemo)(()=>r(f),[f]),b=(0,t.useMemo)(()=>{let e,t,i=g||4.2,l=p||.8,n=N||((e=(0,o.vesselNow)()).setHours(14,0,0,0),e),s=T||((t=(0,o.vesselNow)()).setHours(8,0,0,0),t),r=[],u=(0,o.vesselNow)(),m=new Date(u);m.setHours(0,0,0,0);for(let e=0;e<=48;e++){let t=new Date(m.getTime()+30*e*6e4),o=a(i,l,t,n,s);r.push({time:t.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1}),height:o,ms:t.getTime(),isNow:9e5>Math.abs(t.getTime()-u.getTime())})}return r},[g,p,N,T]),y=(0,t.useMemo)(()=>{if(N&&T)return N.getTime()<T.getTime();let e=(0,o.vesselNow)().getTime(),t=b.findIndex(t=>t.ms>e);return!(t<=0)&&b[t].height>b[t-1].height},[N,T,b]),M=y?e.ok:e.accent;return{hasData:w,level:c,high:g,low:p,timeHigh:v,timeLow:f,coefficient:x,isRising:y,tideColor:M,chartData:b}},"formatTideTime",0,e=>{if(!e)return null;if(e.includes("T")||e.includes("-")){let t=new Date(e);if(!isNaN(t.getTime()))return t.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit",hour12:!1})}return e}])},83646,e=>{"use strict";var t=e.i(67561);e.s(["default",0,()=>(0,t.useOcearoContext)().tokens])}]);
|
|
@@ -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}}])},5941,e=>{"use strict";let t=[1,.8,.6];function n(e){return t[Math.min(Math.max(e,0),2)]}function i(e,t){return Math.max(.05,Math.min(1,1-.6*e-.3*t))}function r(e,t){return Math.PI/6*Math.max(0,1-1.9438444924574*t/30)*(1-e)}function a(e,t,n){let i=Math.min(1,1.9438444924574*(e.tws||0)/30),r=t.tension||.5;switch(n){case"mainSheet":return Math.min(1,.5*i+.3*r+.3*t.mainCar);case"jibSheet":return Math.min(1,.5*i+.3*r+.3*t.jibCar);case"vang":return Math.min(1,.6*i+.4*r);case"cunningham":return Math.min(1,.4*i+.6*r);case"backstay":return Math.min(1,Math.max(0,1-Math.abs(Math.atan2(Math.sin(e.awa||0),Math.cos(e.awa||0)))/Math.PI)*i*.9+.3*r);default:return r}}function o(e){let t=Math.max(0,Math.min(1,e));if(t<=.5){let e=2*t;return{r:e,g:1-.3*e,b:0}}return{r:1,g:.7*(1-(t-.5)*2),b:0}}e.s(["getReefHeightFactor",0,n,"tensionToColor",0,o,"updateSailTrim",0,function({tws:e=0,twa:t=0,awa:s=0,mainCar:l=.5,jibCar:u=.5,tension:c=.5}){let d,f=(d=1.9438444924574*e)>25?2:+(d>18),p=n(f),m=i(l,c),h=i(u,c),v=r(l,e),g=r(u,e),y={tws:e,twa:t,awa:s},b={mainCar:l,jibCar:u,tension:c},x={mainSheet:a(y,b,"mainSheet"),jibSheet:a(y,b,"jibSheet"),vang:a(y,b,"vang"),cunningham:a(y,b,"cunningham"),backstay:a(y,b,"backstay")},w={mainSheet:o(x.mainSheet),jibSheet:o(x.jibSheet),vang:o(x.vang),cunningham:o(x.cunningham),backstay:o(x.backstay)};return{reefLevel:f,reefHeightFactor:p,mainCamber:m,jibCamber:h,mainTwist:v,jibTwist:g,tensions:x,tensionColors:w}}])},77291,e=>{"use strict";var t=e.i(71645),n=e.i(62588),i=e.i(85709),r=e.i(61969),a=e.i(539);let o=Math.PI/180,s={power:1,sail:2,fishing:3,restricted:4},l=e=>{let t=String(e.navState||"").toLowerCase();if(/not under command|restricted|constrained/.test(t))return"restricted";if(/fishing/.test(t))return"fishing";if(/sailing/.test(t))return"sail";if(/motoring|engine/.test(t))return"power";let n=Number(e.shipType);return 36===n?"sail":30===n?"fishing":33===n?"restricted":"power"},u=(e,t,n)=>(0,a.wrapPi)(Math.atan2(t.x-e.x,t.y-e.y)-n),c=(e,t,n)=>{let i={x:0,y:0},r=u(i,t,e.course),l=u(t,i,t.course),c=Math.sign(l)||1,d=e=>Math.abs(e)>112.5*o;if(d(r)&&t.speed>e.speed)return{ownRole:"stand-on",rule:"13",reason:"overtakenByTarget",targetTurn:0};if(d(l)&&e.speed>t.speed)return{ownRole:"give-way",rule:"13",reason:"overtaking",targetTurn:0};let f=s[e.category]??1,p=s[t.category]??1;if(f!==p)return f<p?{ownRole:"give-way",rule:"18",reason:`giveWayTo_${t.category}`,targetTurn:0}:{ownRole:"stand-on",rule:"18",reason:`standOnFrom_${t.category}`,targetTurn:c};if("sail"===e.category&&Number.isFinite(n)){let i=(0,a.wrapPi)(n-e.course)>=0?"starboard":"port";return i!==((0,a.wrapPi)(n-t.course)>=0?"starboard":"port")?"port"===i?{ownRole:"give-way",rule:"12a-i",reason:"portTack",targetTurn:0}:{ownRole:"stand-on",rule:"12a-i",reason:"targetPortTack",targetTurn:c}:t.x*Math.sin(n)+t.y*Math.cos(n)>0?{ownRole:"stand-on",rule:"12a-ii",reason:"targetWindward",targetTurn:c}:{ownRole:"give-way",rule:"12a-ii",reason:"ownWindward",targetTurn:0}}return Math.abs((0,a.wrapPi)(t.course-e.course-Math.PI))<10*o&&Math.abs(r)<6*o?{ownRole:"both",rule:"14",reason:"headOn",targetTurn:1}:r>0?{ownRole:"give-way",rule:"15",reason:"crossingStarboard",targetTurn:0}:{ownRole:"stand-on",rule:"15",reason:"crossingPort",targetTurn:c}};var d=e.i(83402),f=e.i(67561);let p=[],m=["navigation.speedOverGround","navigation.courseOverGroundTrue"];e.s(["default",0,({always:e=!1}={})=>{let a,o,{targets:s}=(0,n.useAIS)({passive:!0}),{states:u}=(0,f.useOcearoContext)(),h=e||u.ais?s:p,{twd:v,heading:g}=(0,r.default)(),y=(0,i.useSignalKPaths)(m),b=(a=(0,i.useSignalKPrefix)("propulsion."),o=d.default.get("ownVesselCategory"),(0,t.useMemo)(()=>"sail"===o||"power"===o?o:Object.entries(a).some(([e,t])=>e.endsWith(".revolutions")&&Number(t)>.5||e.endsWith(".state")&&"started"===t)?"power":"sail",[a,o])),x=d.default.get("aisLengthScalingFactor")||.7;return(0,t.useMemo)(()=>{let e=y["navigation.courseOverGroundTrue"]??g,t=y["navigation.speedOverGround"]??0,n=[];if(Number.isFinite(e))for(let i of h){if("danger"!==i.risk)continue;let r=i.cog??i.cogMagnetic??i.heading;if(!Number.isFinite(r)||null===i.sceneX)continue;let a=c({course:e,speed:t,category:b},{x:i.sceneX/x,y:-i.sceneZ/x,course:r,speed:i.sog??0,category:l(i)},v);n.push({target:{...i},role:a})}n.sort((e,t)=>(e.target.tcpaSeconds??1/0)-(t.target.tcpaSeconds??1/0));let i={};for(let e of h)"close"===e.risk?i[e.mmsi]="close":"danger"===e.risk&&(i[e.mmsi]="giveWay");for(let e of n)i[e.target.mmsi]="stand-on"===e.role.ownRole?"yields":"giveWay";let r=n.filter(e=>"stand-on"!==e.role.ownRole);return{ownCategory:b,encounters:n,statuses:i,giveWay:r.length>0,giveWayTo:r[0]||null,primary:n[0]||null}},[h,v,g,y,b,x])}],77291)},61969,e=>{"use strict";var t=e.i(71645),n=e.i(85709),i=e.i(539);let r=180/Math.PI,a=["navigation.speedThroughWater","navigation.speedOverGround","navigation.headingTrue","navigation.courseOverGroundTrue","environment.wind.speedTrue","environment.wind.angleTrueWater","environment.wind.directionTrue","performance.polarSpeed","performance.polarSpeedRatio","navigation.courseGreatCircle.nextPoint.bearingTrue"];e.s(["default",0,()=>{let e=(0,n.useSignalKPaths)(a);return(0,t.useMemo)(()=>{let t=e["navigation.speedThroughWater"]??e["navigation.speedOverGround"]??null,n=e["navigation.headingTrue"]??e["navigation.courseOverGroundTrue"]??null,a=e["environment.wind.speedTrue"]??null,o=e["environment.wind.angleTrueWater"]??null,s=e["environment.wind.directionTrue"]??null;null===s&&Number.isFinite(o)&&Number.isFinite(n)&&(s=(0,i.wrapPi)(n+o));let l=e["performance.polarSpeed"]??(Number.isFinite(a)&&Number.isFinite(o)?(0,i.polarSpeedSi)(a,o):null),u=e["performance.polarSpeedRatio"]??null;null===u&&Number.isFinite(t)&&Number.isFinite(l)&&l>.2&&(u=t/l);let c=Number.isFinite(t)&&Number.isFinite(l)?(t-l)*1.943844:null,d=null,f=null,p=!Number.isFinite(o)||Math.abs(o)<Math.PI/2;if(Number.isFinite(a)){let e=p?(0,i.optimalUpwind)(1.943844*a):(0,i.optimalDownwind)(1.943844*a);e&&(d=e.twa/r,Number.isFinite(s)&&Number.isFinite(o)&&(f=(0,i.wrapPi)(s-Math.sign(o||1)*d)))}let m=e["navigation.courseGreatCircle.nextPoint.bearingTrue"],h=null;if(Number.isFinite(m)&&Number.isFinite(s)&&Number.isFinite(a)){let e=(0,i.bestVmcHeading)({twd:s,tws:a,bearing:m}),t=Number.isFinite(n)?(0,i.vmcForHeading)({twd:s,tws:a,bearing:m,heading:n}):null;h=e?{bearing:m,best:e,current:t}:null}return{ratio:u,polarSpeed:l,boatSpeed:t,deltaKn:c,heading:n,twd:s,tws:a,twa:o,targetTwa:d,targetHeading:f,upwind:p,vmc:h}},[e])}])},83646,e=>{"use strict";var t=e.i(67561);e.s(["default",0,()=>(0,t.useOcearoContext)().tokens])},31067,e=>{"use strict";function t(){return(t=Object.assign.bind()).apply(null,arguments)}e.s(["default",()=>t])},43216,e=>{"use strict";let t,n;var i=e.i(31067),r=e.i(71645),a=e.i(90072),o=e.i(90874),s=a,l=e.i(32533),u=a,c=e.i(8560),d=e.i(31497);class f extends u.ShaderMaterial{constructor(e){super({type:"LineMaterial",uniforms:u.UniformsUtils.clone(u.UniformsUtils.merge([c.UniformsLib.common,c.UniformsLib.fog,{worldUnits:{value:1},linewidth:{value:1},resolution:{value:new u.Vector2(1,1)},dashOffset:{value:0},dashScale:{value:1},dashSize:{value:1},gapSize:{value:1}}])),vertexShader:`
|
|
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:`
|
|
2
2
|
#include <common>
|
|
3
3
|
#include <fog_pars_vertex>
|
|
4
4
|
#include <logdepthbuf_pars_vertex>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,23320,e=>{"use strict";var t=e.i(43476),a=e.i(71645);e.i(85269);var r=e.i(22831),o=e.i(88608),i=e.i(3666);e.s(["default",0,()=>{let{t:e}=(0,r.useTranslation)(),l=(0,a.useSyncExternalStore)(o.subscribeForecast,o.getForecastHour,o.getForecastHour),n=new Date(Date.now()+36e5*l),s=i.WINDY_SCALE.filter(([e])=>e<=25).map(([e,[t,a,r]])=>`rgb(${t},${a},${r}) ${e/25*100}%`).join(", ");return(0,t.jsxs)("div",{className:"hud-halo flex flex-col gap-1 px-3 py-2 rounded-2xl bg-hud-bg/80 backdrop-blur select-none w-[min(30rem,100%)]",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("span",{className:"text-caption font-semibold uppercase tracking-widest text-hud-muted shrink-0",children:e("meteo.forecast")}),(0,t.jsx)("input",{type:"range",min:0,max:47,step:1,value:l,onChange:e=>(0,o.setForecastHour)(Number(e.target.value)),"aria-label":e("meteo.forecast"),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:0===l?e("meteo.now"):`+${l} h \xb7 ${n.toLocaleTimeString([],{weekday:"short",hour:"2-digit",minute:"2-digit"})}`})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("div",{className:"flex-1 h-2 rounded-full",style:{background:`linear-gradient(to right, ${s})`}}),(0,t.jsxs)("span",{className:"text-caption text-hud-muted tabular-nums shrink-0",children:["0 – ",Math.round(48.5961)," kn"]})]})]})}])},79224,function(e){e.n(e.i(23320))},88608,e=>{"use strict";let t=0,a=new Set;e.s(["getForecastHour",0,()=>t,"setForecastHour",0,e=>{t=Math.max(0,e),a.forEach(e=>e(t))},"subscribeForecast",0,e=>(a.add(e),()=>a.delete(e))])},3666,3950,e=>{"use strict";let t="ocearo-offline-v2",a=["ocearo-offline-v1"],r=!1,o=async(e,{kind:o="tile"}={})=>{if(!("u">typeof caches))return fetch(e,{referrerPolicy:"strict-origin-when-cross-origin"});r||(r=!0,a.forEach(e=>caches.delete(e).catch(()=>{})));let i=await caches.open(t);if("tile"===o){let t=await i.match(e);if(t)return t}try{let t=await fetch(e,{mode:"cors",referrerPolicy:"strict-origin-when-cross-origin"});return t.ok&&await i.put(e,t.clone()),t}catch(a){let t=await i.match(e);if(t)return t;throw a}},i=async e=>{let t=await o(e,{kind:"tile"});if(!t.ok)throw Error(`${t.status} ${e}`);return createImageBitmap(await t.blob())},l=(e,t,a,r)=>{let o=2**r,i=(e,t)=>({x:Math.floor((t+180)/360*o),y:Math.floor((1-Math.log(Math.tan(e*Math.PI/180)+1/Math.cos(e*Math.PI/180))/Math.PI)/2*o)}),l=a/111320,n=a/(111320*Math.cos(e*Math.PI/180)),s=i(e+l,t-n),c=i(e-l,t+n),h=[];for(let e=s.x;e<=c.x;e++)for(let t=s.y;t<=c.y;t++)h.push({z:r,x:e,y:t});return h},n=async({lat:e,lon:t,radiusM:a,layers:r,urls:i=[],onProgress:n})=>{let s=[];for(let{template:o,zooms:i}of r)for(let r of i)for(let i of l(e,t,a,r))s.push(o.replace("{z}",i.z).replace("{x}",i.x).replace("{y}",i.y));s.push(...i);let c=0,h=0,u=[...s],f=async()=>{for(;u.length;){let e=u.shift();try{!(await o(e,{kind:e.includes("forecast")?"forecast":"tile"})).ok&&h++}catch{h++}c++,n?.(c,s.length,h)}};return await Promise.all(Array.from({length:4},f)),{done:c,failed:h,total:s.length}},s=async()=>{if(navigator.storage?.estimate){let{usage:e}=await navigator.storage.estimate();return e}return null};e.s(["cachedFetch",0,o,"cachedImage",0,i,"clearOfflineCache",0,()=>"u">typeof caches?caches.delete(t):Promise.resolve(!1),"offlineCacheSize",0,s,"prefetchArea",0,n],3950);let
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,23320,e=>{"use strict";var t=e.i(43476),a=e.i(71645);e.i(85269);var r=e.i(22831),o=e.i(88608),i=e.i(3666);e.s(["default",0,()=>{let{t:e}=(0,r.useTranslation)(),l=(0,a.useSyncExternalStore)(o.subscribeForecast,o.getForecastHour,o.getForecastHour),n=new Date(Date.now()+36e5*l),s=i.WINDY_SCALE.filter(([e])=>e<=25).map(([e,[t,a,r]])=>`rgb(${t},${a},${r}) ${e/25*100}%`).join(", ");return(0,t.jsxs)("div",{className:"hud-halo flex flex-col gap-1 px-3 py-2 rounded-2xl bg-hud-bg/80 backdrop-blur select-none w-[min(30rem,100%)]",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("span",{className:"text-caption font-semibold uppercase tracking-widest text-hud-muted shrink-0",children:e("meteo.forecast")}),(0,t.jsx)("input",{type:"range",min:0,max:47,step:1,value:l,onChange:e=>(0,o.setForecastHour)(Number(e.target.value)),"aria-label":e("meteo.forecast"),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:0===l?e("meteo.now"):`+${l} h \xb7 ${n.toLocaleTimeString([],{weekday:"short",hour:"2-digit",minute:"2-digit"})}`})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("div",{className:"flex-1 h-2 rounded-full",style:{background:`linear-gradient(to right, ${s})`}}),(0,t.jsxs)("span",{className:"text-caption text-hud-muted tabular-nums shrink-0",children:["0 – ",Math.round(48.5961)," kn"]})]})]})}])},79224,function(e){e.n(e.i(23320))},88608,e=>{"use strict";let t=0,a=new Set;e.s(["getForecastHour",0,()=>t,"setForecastHour",0,e=>{t=Math.max(0,e),a.forEach(e=>e(t))},"subscribeForecast",0,e=>(a.add(e),()=>a.delete(e))])},3666,3950,e=>{"use strict";let t="ocearo-offline-v2",a=["ocearo-offline-v1"],r=!1,o=async(e,{kind:o="tile"}={})=>{if(!("u">typeof caches))return fetch(e,{referrerPolicy:"strict-origin-when-cross-origin"});r||(r=!0,a.forEach(e=>caches.delete(e).catch(()=>{})));let i=await caches.open(t);if("tile"===o){let t=await i.match(e);if(t)return t}try{let t=await fetch(e,{mode:"cors",referrerPolicy:"strict-origin-when-cross-origin"});return t.ok&&await i.put(e,t.clone()),t}catch(a){let t=await i.match(e);if(t)return t;throw a}},i=async e=>{let t=await o(e,{kind:"tile"});if(!t.ok)throw Error(`${t.status} ${e}`);return createImageBitmap(await t.blob())},l=(e,t,a,r)=>{let o=2**r,i=(e,t)=>({x:Math.floor((t+180)/360*o),y:Math.floor((1-Math.log(Math.tan(e*Math.PI/180)+1/Math.cos(e*Math.PI/180))/Math.PI)/2*o)}),l=a/111320,n=a/(111320*Math.cos(e*Math.PI/180)),s=i(e+l,t-n),c=i(e-l,t+n),h=[];for(let e=s.x;e<=c.x;e++)for(let t=s.y;t<=c.y;t++)h.push({z:r,x:e,y:t});return h},n=async({lat:e,lon:t,radiusM:a,layers:r,urls:i=[],onProgress:n})=>{let s=[];for(let{template:o,zooms:i}of r)for(let r of i)for(let i of l(e,t,a,r))s.push(o.replace("{z}",i.z).replace("{x}",i.x).replace("{y}",i.y));s.push(...i);let c=0,h=0,u=[...s],f=async()=>{for(;u.length;){let e=u.shift();try{!(await o(e,{kind:e.includes("forecast")?"forecast":"tile"})).ok&&h++}catch{h++}c++,n?.(c,s.length,h)}};return await Promise.all(Array.from({length:4},f)),{done:c,failed:h,total:s.length}},s=async()=>{if(navigator.storage?.estimate){let{usage:e}=await navigator.storage.estimate();return e}return null},c=async(e,a)=>{if(!("u">typeof caches))return!1;let r=await caches.open(t);return await r.put(e,a),!0},h=async e=>{if(!("u">typeof caches))return null;let a=await caches.open(t);return await a.match(e)||null};e.s(["cachedFetch",0,o,"cachedImage",0,i,"clearOfflineCache",0,()=>"u">typeof caches?caches.delete(t):Promise.resolve(!1),"offlineCacheSize",0,s,"prefetchArea",0,n,"readCached",0,h,"storeCached",0,c],3950);let u={key:null,at:0,field:null},f=(e,t,a,r)=>({lat:e+(r/8*2-1)*4e4/6371e3*180/Math.PI,lon:t+(a/8*2-1)*4e4/(6371e3*Math.cos(e*Math.PI/180))*180/Math.PI}),d=(e,t)=>{let a=[],r=[];for(let o=0;o<9;o++)for(let i=0;i<9;i++){let l=f(e,t,i,o);a.push(l.lat.toFixed(4)),r.push(l.lon.toFixed(4))}return`https://api.open-meteo.com/v1/forecast?latitude=${a.join(",")}&longitude=${r.join(",")}&hourly=wind_speed_10m,wind_direction_10m&wind_speed_unit=ms&forecast_hours=48&timezone=GMT`},m=async(e,t)=>{let a=`${e.toFixed(1)},${t.toFixed(1)}`;if(u.field&&u.key===a&&Date.now()-u.at<18e5)return u.field;let r=d(e,t),i=await o(r,{kind:"forecast"});if(!i.ok)throw Error(`Open-Meteo ${i.status}`);let l=await i.json(),n=Array.isArray(l)?l:[l],s=n[0]?.hourly?.time||[],c=s.length,h=[],f=[];for(let e=0;e<c;e++){let t=new Float32Array(81),a=new Float32Array(81);n.forEach((r,o)=>{let i=r.hourly.wind_speed_10m[e]??0,l=(r.hourly.wind_direction_10m[e]??0)*Math.PI/180;t[o]=-i*Math.sin(l),a[o]=-i*Math.cos(l)}),h.push(t),f.push(a)}let m={origin:{lat:e,lon:t},start:Date.parse(`${s[0]}Z`),hours:c,u:h,v:f,source:"open-meteo"};return u={key:a,at:Date.now(),field:m},m},p=[[0,[98,113,183]],[1,[57,97,159]],[3,[74,148,169]],[5,[77,141,123]],[7,[83,165,83]],[9,[53,159,53]],[11,[167,157,81]],[13,[159,127,58]],[15,[161,108,92]],[17,[129,58,78]],[19,[175,80,136]],[21,[117,74,147]],[24,[109,97,163]],[27,[68,105,141]],[29,[92,144,152]],[36,[125,68,165]]];e.s(["HALF_EXTENT_M",0,4e4,"WINDY_SCALE",0,p,"fetchWindField",0,m,"sampleWind",0,(e,t,a,r=0)=>{let o=Math.min(9-1.001,Math.max(0,(t/4e4+1)/2*8)),i=Math.min(9-1.001,Math.max(0,(a/4e4+1)/2*8)),l=Math.floor(o),n=Math.floor(i),s=o-l,c=i-n,h=Math.min(e.hours-1,Math.max(0,Math.floor(r))),u=Math.min(e.hours-1,h+1),f=Math.min(1,Math.max(0,r-h)),d=(e,t)=>{let a=e[t],r=9*n+l;return(a[r]*(1-s)+a[r+1]*s)*(1-c)+(a[r+9]*(1-s)+a[r+9+1]*s)*c};return{u:d(e.u,h)*(1-f)+d(e.u,u)*f,v:d(e.v,h)*(1-f)+d(e.v,u)*f}},"uniformField",0,(e,t,a,r)=>{let o=new Float32Array(81).fill(-a*Math.sin(r)),i=new Float32Array(81).fill(-a*Math.cos(r));return{origin:{lat:e,lon:t},start:Date.now(),hours:1,u:[o],v:[i],source:"boat"}},"windColor",0,e=>{if(e<=p[0][0])return p[0][1];for(let t=1;t<p.length;t++)if(e<=p[t][0]){let[a,r]=p[t-1],[o,i]=p[t],l=(e-a)/(o-a);return r.map((e,t)=>e+(i[t]-e)*l)}return p[p.length-1][1]},"windFieldUrl",0,d],3666)}]);
|