ocearo-ui 0.1.9 → 0.1.10
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/_next/static/chunks/73.007aee417f54ff9d.js +1 -0
- package/_next/static/chunks/890.5c51beba1d47e5ff.js +1 -0
- package/_next/static/chunks/909.5efafce6b421c83d.js +1 -0
- package/_next/static/chunks/app/page-e4b029f836d524dc.js +1 -0
- package/_next/static/chunks/webpack-0478fe45d39f1cb5.js +1 -0
- package/_next/static/css/b15803f8682c0ad5.css +3 -0
- package/index.html +1 -1
- package/index.txt +2 -2
- package/{ocearo-ui-0.1.9.tgz → ocearo-ui-0.1.10.tgz} +0 -0
- package/package.json +1 -1
- package/_next/static/chunks/73.082ba53f0fe04b93.js +0 -1
- package/_next/static/chunks/890.6c4341abc0cc6952.js +0 -1
- package/_next/static/chunks/909.d374a5e93b208fb5.js +0 -1
- package/_next/static/chunks/app/page-e48f8e53cd8e002b.js +0 -1
- package/_next/static/chunks/webpack-9a7f6430a15895de.js +0 -1
- package/_next/static/css/6325556caecccba7.css +0 -3
- /package/_next/static/{nyFVKP2yXAawJ4xdgBsdG → ED8qlar36uSDUQ_aF23bd}/_buildManifest.js +0 -0
- /package/_next/static/{nyFVKP2yXAawJ4xdgBsdG → ED8qlar36uSDUQ_aF23bd}/_ssgManifest.js +0 -0
package/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/ocearo-ui/_next/static/media/4473ecc91f70f139-s.p.woff" as="font" crossorigin="" type="font/woff"/><link rel="preload" href="/ocearo-ui/_next/static/media/463dafcda517f24f-s.p.woff" as="font" crossorigin="" type="font/woff"/><link rel="stylesheet" href="/ocearo-ui/_next/static/css/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/ocearo-ui/_next/static/media/4473ecc91f70f139-s.p.woff" as="font" crossorigin="" type="font/woff"/><link rel="preload" href="/ocearo-ui/_next/static/media/463dafcda517f24f-s.p.woff" as="font" crossorigin="" type="font/woff"/><link rel="stylesheet" href="/ocearo-ui/_next/static/css/b15803f8682c0ad5.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/ocearo-ui/_next/static/chunks/webpack-0478fe45d39f1cb5.js"/><script src="/ocearo-ui/_next/static/chunks/fd9d1056-50d0a3499460e502.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/117-1ad4a6b37bfc6738.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/main-app-ed02033afba81a43.js" async=""></script><meta name="robots" content="noindex"/><link rel="manifest" href="./manifest.json"/><meta name="theme-color" content="#4bbcd8"/><link rel="icon" type="image/png" href="./favicon-96x96.png" sizes="96x96"/><link rel="icon" type="image/svg+xml" href="./favicon.svg"/><link rel="shortcut icon" href="./favicon.ico"/><link rel="apple-touch-icon" sizes="180x180" href="./apple-touch-icon.png"/><meta name="apple-mobile-web-app-title" content="Ocearo"/><title>404: This page could not be found.</title><title>Ocearo</title><meta name="description" content="Sailing made smarter"/><meta name="next-size-adjust"/><script src="/ocearo-ui/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_873ced __variable_6df010 antialiased"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><script src="/ocearo-ui/_next/static/chunks/webpack-0478fe45d39f1cb5.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/ocearo-ui/_next/static/media/4473ecc91f70f139-s.p.woff\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff\"}]\n2:HL[\"/ocearo-ui/_next/static/media/463dafcda517f24f-s.p.woff\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff\"}]\n3:HL[\"/ocearo-ui/_next/static/css/b15803f8682c0ad5.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"4:I[12846,[],\"\"]\n6:I[4707,[],\"\"]\n7:I[36423,[],\"\"]\nd:I[61060,[],\"\"]\n8:{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"}\n9:{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"}\na:{\"display\":\"inline-block\"}\nb:{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0}\ne:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L4\",null,{\"buildId\":\"ED8qlar36uSDUQ_aF23bd\",\"assetPrefix\":\"/ocearo-ui\",\"urlParts\":[\"\",\"_not-found\"],\"initialTree\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},[[\"$L5\",[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null],null],null]},[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"/_not-found\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\"}]],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/css/b15803f8682c0ad5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"manifest\",\"href\":\"./manifest.json\"}],[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"content\":\"#4bbcd8\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"type\":\"image/png\",\"href\":\"./favicon-96x96.png\",\"sizes\":\"96x96\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"type\":\"image/svg+xml\",\"href\":\"./favicon.svg\"}],[\"$\",\"link\",null,{\"rel\":\"shortcut icon\",\"href\":\"./favicon.ico\"}],[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"sizes\":\"180x180\",\"href\":\"./apple-touch-icon.png\"}],[\"$\",\"meta\",null,{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Ocearo\"}]]}],[\"$\",\"body\",null,{\"className\":\"__variable_873ced __variable_6df010 antialiased\",\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$8\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$9\",\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":\"$a\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$b\",\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],\"$Lc\"],\"globalErrorComponent\":\"$d\",\"missingSlots\":\"$We\"}]\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Ocearo\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Sailing made smarter\"}],[\"$\",\"meta\",\"4\",{\"name\":\"next-size-adjust\"}]]\n5:null\n"])</script></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[73],{69073:function(e,s,a){a.r(s);var l=a(57437),t=a(2265),n=a(63321);s.default=e=>{var s;let{onSave:a}=e,c=n.Z.getAll(),i=n.Z.getComputedSignalKUrl(),r=n.Z.getBoatsData(),[d,o]=(0,t.useState)(c),[m,h]=(0,t.useState)(c.useAuthentication||!!c.username||!!c.password),[x,u]=(0,t.useState)(c.signalKUrlSet||!1),[g,p]=(0,t.useState)(null),[b,j]=(0,t.useState)(!1),[N,v]=(0,t.useState)({visible:!1,message:""}),f=(0,t.useCallback)(e=>{j(JSON.stringify(e)!==JSON.stringify(c))},[c]);(0,t.useEffect)(()=>{(async()=>{let e=n.Z.getAll();o(e),u(e.signalKUrlSet||!1),h(e.useAuthentication||!!e.username||!!e.password),e.selectedBoat&&p(r.find(s=>s.name===e.selectedBoat)||null)})()},[r]);let k=e=>{let s={...d,...e};o(s),f(s);let l={...s};e.hasOwnProperty("signalKUrlSet")?!1===e.signalKUrlSet&&(l.signalkUrl=i,l.username="",l.password=""):x||e.hasOwnProperty("signalkUrl")?m||(l.username="",l.password=""):(l.signalkUrl=i,l.username="",l.password=""),n.Z.saveConfig(l),null==a||a(l),j(!1),v({visible:!0,message:"Settings saved automatically"}),setTimeout(()=>v({visible:!1,message:""}),2e3)};return(0,l.jsxs)("div",{className:"p-4 text-white",children:[(0,l.jsxs)("h1",{className:"text-2xl font-bold mb-4 flex justify-between items-center",children:["Ocearo Configuration",N.visible&&(0,l.jsx)("span",{className:"text-sm font-normal bg-green-500 text-white px-3 py-1 rounded-full animate-pulse",children:N.message})]}),(0,l.jsxs)("div",{className:"space-y-4",children:[(0,l.jsxs)("div",{className:"space-y-4",children:[(0,l.jsx)("h2",{className:"text-xl font-semibold",children:"Connection Settings"}),(0,l.jsx)("div",{children:(0,l.jsxs)("label",{className:"flex items-center",children:[(0,l.jsx)("input",{type:"checkbox",className:"mr-2",checked:x,onChange:e=>{u(e.target.checked),k({signalKUrlSet:e.target.checked})}}),"Set SignalK URL",!x&&(0,l.jsxs)("span",{className:"ml-2",children:["(",i,")"]})]})}),x&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"block font-medium mb-1",children:"SignalK Server URL:"}),(0,l.jsx)("input",{type:"text",className:"border p-2 w-full text-black rounded",value:d.signalkUrl||"",onChange:e=>k({signalkUrl:e.target.value})})]}),(0,l.jsx)("div",{children:(0,l.jsxs)("label",{className:"flex items-center",children:[(0,l.jsx)("input",{type:"checkbox",className:"mr-2",checked:m,onChange:e=>{h(e.target.checked),k({useAuthentication:e.target.checked})}}),"Use Authentication"]})}),m&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"block font-medium mb-1",children:"Username:"}),(0,l.jsx)("input",{type:"text",className:"border p-2 w-full text-black rounded",value:d.username||"",onChange:e=>k({username:e.target.value})})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"block font-medium mb-1",children:"Password:"}),(0,l.jsx)("input",{type:"password",className:"border p-2 w-full text-black rounded",value:d.password||"",onChange:e=>k({password:e.target.value})})]})]})]})]}),(0,l.jsxs)("div",{className:"space-y-4",children:[(0,l.jsx)("h2",{className:"text-xl font-semibold",children:"Vessel Settings"}),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"block font-medium mb-1",children:"Select Vessel:"}),(0,l.jsxs)("select",{className:"border p-2 w-full text-black rounded",value:d.selectedBoat||"",onChange:e=>{let s=e.target.value;p(r.find(e=>e.name===s)||null),k({selectedBoat:s})},children:[(0,l.jsx)("option",{value:"",children:"-- Select a Vessel --"}),r.map(e=>(0,l.jsx)("option",{value:e.name,children:e.name},e.name))]})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("label",{className:"block font-medium mb-1",children:"Vessel Color:"}),(0,l.jsx)("input",{type:"color",className:"w-full h-10 rounded",value:d.primaryColor||"#000000",onChange:e=>k({primaryColor:e.target.value})})]}),(0,l.jsx)("div",{children:(0,l.jsxs)("label",{className:"flex items-center",children:[(0,l.jsx)("input",{type:"checkbox",className:"mr-2",checked:d.metallicEffect||!1,onChange:e=>k({metallicEffect:e.target.checked})}),"Enable Metallic Effect"]})})]}),(0,l.jsxs)("div",{className:"space-y-4",children:[(0,l.jsx)("h2",{className:"text-xl font-semibold",children:"Display Settings"}),(0,l.jsx)("div",{children:(0,l.jsxs)("label",{className:"flex items-center text-base",children:[(0,l.jsx)("input",{type:"checkbox",className:"mr-3 h-5 w-5",checked:d.compassNorthUp||!1,onChange:e=>k({compassNorthUp:e.target.checked})}),(0,l.jsxs)("span",{children:["Compass Mode: North at Top",(0,l.jsx)("div",{className:"text-sm text-gray-400",children:d.compassNorthUp?"North at top (land navigation style)":"North at bottom (marine navigation style)"})]})]})})]}),(0,l.jsxs)("div",{className:"space-y-4",children:[(0,l.jsx)("h2",{className:"text-xl font-semibold",children:"Advanced Settings"}),(0,l.jsx)("div",{children:(0,l.jsxs)("label",{className:"flex items-center",children:[(0,l.jsx)("input",{type:"checkbox",className:"mr-2",checked:d.debugMode||!1,onChange:e=>k({debugMode:e.target.checked,signalkUrl:i})}),"Debug Mode"]})}),(0,l.jsxs)("div",{className:"space-y-2",children:[(0,l.jsxs)("label",{className:"block text-sm font-medium",children:["AIS Length Scaling Factor",(0,l.jsx)("div",{className:"text-xs text-gray-500",children:"Controls the scaling of AIS boats on the map (0.1 - 2.0)"})]}),(0,l.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,l.jsx)("span",{className:"text-sm",children:"0.1"}),(0,l.jsx)("input",{type:"range",className:"w-full h-10 appearance-none bg-gray-700 rounded-lg outline-none cursor-pointer",style:{WebkitAppearance:"none",appearance:"none",height:"20px",background:"linear-gradient(to right, #1E3A8A, #3B82F6)",borderRadius:"10px"},min:"0.1",max:"2.0",step:"0.1",value:d.aisLengthScalingFactor||.7,onChange:e=>k({aisLengthScalingFactor:parseFloat(e.target.value)})}),(0,l.jsx)("span",{className:"text-sm",children:"2.0"}),(0,l.jsx)("span",{className:"text-base font-semibold bg-blue-500 px-3 py-1 rounded-lg min-w-[3.5rem] text-center",children:d.aisLengthScalingFactor||.7})]})]}),g&&d.debugMode&&(0,l.jsxs)("div",{className:"space-y-2 text-sm text-gray-400",children:[(0,l.jsxs)("div",{children:["3D Model: ",g.modelPath]}),(0,l.jsxs)("div",{children:["Features: ",null===(s=g.capabilities)||void 0===s?void 0:s.join(", ")]})]})]}),(0,l.jsx)("div",{className:"flex space-x-4 pt-4",children:(0,l.jsx)("button",{onClick:()=>{let e=n.Z.getDefaultConfig();o(e),h(!1),e.useAuthentication=!1,u(!1),e.signalKUrlSet=!1,n.Z.saveConfig(e),j(!1)},className:"bg-oRed text-white px-4 py-2 rounded hover:bg-red-600",children:"Reset Configuration"})})]})]})}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[890],{29927:function(e,n,t){var r={"./default/Scene.jsx":[42967,967],"./optimist/Scene.jsx":[96154,154],"./sailboat/Scene.jsx":[82274,274],"./ship/Scene.jsx":[75221,221],"./windsurf/Scene.jsx":[92975,975]};function o(e){if(!t.o(r,e))return Promise.resolve().then(function(){var n=Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n});var n=r[e],o=n[0];return t.e(n[1]).then(function(){return t(o)})}o.keys=function(){return Object.keys(r)},o.id=29927,e.exports=o},10890:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return X}});var r=t(57437),o=t(2265),a=t(68328),i=t(44725),l=t(85903),s=t(5550),c=t(11909),u=t(21276),d=t(88345),g=t(72079),h=t(53082);let m=(0,d.g)({time:0,speed:1,scale:3,opacity:.5,color:new g.Ilk(7895160),foamColor:new g.Ilk(16777215),waterColor:new g.Ilk(26367),rainbowActive:0},"\n varying vec2 vUv;\n varying float vElevation;\n \n void main() {\n vUv = uv;\n \n // Add subtle vertex displacement for a wavy effect.\n float elevation = sin(position.x * 0.2 + position.y * 0.3) * 0.1;\n vElevation = elevation;\n vec3 newPosition = position + normal * elevation;\n \n gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);\n }\n ","\n uniform float time;\n uniform float speed;\n uniform float scale;\n uniform float opacity;\n uniform vec3 color;\n uniform vec3 foamColor;\n uniform vec3 waterColor;\n uniform float rainbowActive; // Controls whether the rainbow effect is applied.\n\n varying vec2 vUv;\n varying float vElevation;\n\n // Standard noise functions.\n vec4 permute(vec4 x) {\n return mod(((x * 34.0) + 1.0) * x, 289.0);\n }\n\n vec2 fade(vec2 t) {\n return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\n }\n\n float cnoise(vec2 P) {\n vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0);\n vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0);\n Pi = mod(Pi, 289.0);\n vec4 ix = Pi.xzxz;\n vec4 iy = Pi.yyww;\n vec4 fx = Pf.xzxz;\n vec4 fy = Pf.yyww;\n vec4 i = permute(permute(ix) + iy);\n vec4 gx = 2.0 * fract(i * 0.0243902439) - 1.0;\n vec4 gy = abs(gx) - 0.5;\n vec4 tx = floor(gx + 0.5);\n gx = gx - tx;\n vec2 g00 = vec2(gx.x, gy.x);\n vec2 g10 = vec2(gx.y, gy.y);\n vec2 g01 = vec2(gx.z, gy.z);\n vec2 g11 = vec2(gx.w, gy.w);\n vec4 norm = 1.79284291400159 - 0.85373472095314 *\n vec4(dot(g00, g00), dot(g10, g10), dot(g01, g01), dot(g11, g11));\n g00 *= norm.x;\n g10 *= norm.y;\n g01 *= norm.z;\n g11 *= norm.w;\n float n00 = dot(g00, vec2(fx.x, fy.x));\n float n10 = dot(g10, vec2(fx.y, fy.y));\n float n01 = dot(g01, vec2(fx.z, fy.z));\n float n11 = dot(g11, vec2(fx.w, fy.w));\n vec2 fade_xy = fade(Pf.xy);\n vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x);\n float n_xy = mix(n_x.x, n_x.y, fade_xy.y);\n return 2.3 * n_xy;\n }\n\n // HSL to RGB conversion function.\n vec3 hsl2rgb(vec3 hsl) {\n vec3 rgb = clamp(abs(mod(hsl.x * 6.0 + vec3(0.0, 4.0, 2.0), 6.0) - 3.0) - 1.0,\n 0.0, 1.0);\n rgb = rgb * rgb * (3.0 - 2.0 * rgb);\n return hsl.z + hsl.y * (rgb - 0.5) * (1.0 - abs(2.0 * hsl.z - 1.0));\n }\n\n void main() {\n // Combine multiple layers of noise to build a complex water pattern.\n float baseNoise = cnoise(vUv * scale + vec2(time * speed, 0.0));\n float detailNoise = cnoise(vUv * scale * 2.0 + vec2(time * speed * 1.5, 0.0)) * 0.5;\n float turbulence = cnoise(vUv * scale * 4.0 + vec2(time * speed * 2.0, 0.0)) * 0.25;\n float noise = baseNoise + detailNoise + turbulence;\n \n // Create a wake pattern.\n float wake = smoothstep(0.3, 0.7, 1.0 - abs(vUv.x - 0.5) * 2.0);\n \n // Create a foam effect.\n float foam = smoothstep(0.4, 0.6, noise + wake);\n \n // Mix water and foam colors, then blend in the base color.\n vec3 finalColor = mix(waterColor, foamColor, foam);\n finalColor = mix(finalColor, color, wake * 0.5);\n \n // Adjust dynamic opacity.\n float alpha = opacity * (wake + foam * 0.5) * (1.0 - vUv.y);\n \n // Add wave highlights.\n float highlight = smoothstep(0.2, 0.4, noise + wake) *\n (1.0 - smoothstep(0.4, 0.6, noise + wake));\n finalColor += highlight * foamColor * 0.5;\n \n // --- Rainbow Effect ---\n // When rainbowActive is enabled, overlay a dynamic rainbow gradient.\n if (rainbowActive > 0.5) {\n // Cycle the hue based on the horizontal UV and time.\n float rainbowHue = mod(vUv.x + time * 0.5, 1.0);\n vec3 rainbowColor = hsl2rgb(vec3(rainbowHue, 1.0, 0.5));\n // Blend the rainbow with the original finalColor.\n finalColor = mix(finalColor, rainbowColor, 0.7);\n }\n \n gl_FragColor = vec4(finalColor, alpha);\n }\n ");(0,u.e)({TrailShaderMaterial:m});let f=e=>{let{color:n="#787878",waterColor:t="#0066ff",foamColor:a="#ffffff",speed:i=1,scale:l=3,opacity:s=.5}=e,c=(0,o.useRef)(),{getSignalKValue:d}=(0,h.yC)();return(0,u.F)((e,n)=>{if(c.current){c.current.uniforms.time.value+=n;let e="auto"==d("steering.autopilot.state");c.current.uniforms.rainbowActive.value=e?1:0}}),(0,r.jsxs)("mesh",{rotation:[-Math.PI/2,0,Math.PI/2],position:[0,0,22.5],children:[(0,r.jsx)("planeGeometry",{args:[40,2.2,128,32]}),(0,r.jsx)("trailShaderMaterial",{ref:c,color:new g.Ilk(n),waterColor:new g.Ilk(t),foamColor:new g.Ilk(a),speed:i,scale:l,opacity:s,transparent:!0,depthWrite:!1,blending:g.WMw})]})};var v=t(54752),p=t(33866),x=t(79257);(0,u.e)({Water:v.B,Sky:p.q});var w=function(){let{nightMode:e}=(0,h.yC)(),n=(0,o.useRef)(),t=(0,o.useRef)(),a=(0,o.useRef)(),i=(0,u.D)(e=>e.gl),l=(0,u.D)(e=>e.scene),s=(0,o.useMemo)(()=>new g.Pa4,[]),c=(0,x.mE)("assets/moon.jpg"),d=(0,u.H)(g.dpR,"assets/waternormals.jpg");(0,o.useMemo)(()=>{d.wrapS=d.wrapT=g.rpg},[d]);let m=(0,o.useMemo)(()=>new g._12(1e4,1e4,32,32),[]),f=(0,o.useMemo)(()=>({textureWidth:256,textureHeight:256,waterNormals:d,sunDirection:new g.Pa4,sunColor:e?12642559:16777215,waterColor:e?6702:30668,distortionScale:2,format:i.outputColorSpace,reflectivity:0}),[d,i.outputColorSpace,e]);(0,u.F)(()=>{let r=e?45:2,o=e?30:180;if(t.current){let a=t.current.material.uniforms;e?(a.turbidity.value=.2,a.rayleigh.value=.5,a.mieCoefficient.value=.01,a.mieDirectionalG.value=.8):(a.turbidity.value=1,a.rayleigh.value=1,a.mieCoefficient.value=.003,a.mieDirectionalG.value=.5);let i=g.M8C.degToRad(90-r),l=g.M8C.degToRad(o);s.setFromSphericalCoords(1,i,l),a.sunPosition.value.copy(s),n.current&&n.current.material.uniforms.sunDirection.value.copy(s).normalize()}}),(0,o.useEffect)(()=>{e?l.background=new g.Ilk(2068):l.background=new g.Ilk(8900331);let n=new g.Ilk(e?4640:8900331);return l.fog=new g.yo9(n,15e-5),i.outputColorSpace=g.KI_,()=>{l.background=null,l.environment=null,l.fog=null}},[l,e,i]);let v=0;return(0,u.F)((e,t)=>{(v+=t)>.1&&(n.current&&(n.current.material.uniforms.time.value+=.5*v),v=0)}),(0,r.jsxs)(r.Fragment,{children:[!e&&(0,r.jsx)("sky",{ref:t,scale:45e4}),e&&(0,r.jsxs)("mesh",{ref:a,position:[600,200,-1500],children:[(0,r.jsx)("sphereGeometry",{args:[80,32,32]}),(0,r.jsx)("meshStandardMaterial",{map:c,emissive:16777215,emissiveIntensity:.8})]}),(0,r.jsx)("water",{ref:n,args:[m,f],"rotation-x":-Math.PI/2,position:[0,-1,0]})]})},y=t(14578),M=t(63321);let b=(0,o.createContext)(),j=()=>(0,o.useContext)(b),C=(e,n,t,r)=>{let o=t.split(".").reduce((e,n)=>null==e?void 0:e[n],r);void 0!==o&&(e[n]=o)},S=e=>{let{children:n}=e,[t,a]=(0,o.useState)({}),[i,l]=(0,o.useState)([]),s=(0,o.useRef)(null),c=(0,o.useRef)({});return(0,o.useEffect)(()=>{let e=async e=>{console.log("Fetching static vessel information...");try{let n=await e.API().then(e=>e.vessels()),t=Object.entries(n).map(e=>{let[n,t]=e,r={mmsi:n};return C(r,"name","name",t),C(r,"latitude","navigation.position.value.latitude",t),C(r,"longitude","navigation.position.value.longitude",t),C(r,"sog","navigation.speedOverGround.value",t),C(r,"cog","navigation.courseOverGroundTrue.value",t),C(r,"cogMagnetic","navigation.courseOverGroundMagnetic.value",t),C(r,"heading","navigation.headingTrue.value",t),C(r,"headingMagnetic","navigation.headingMagnetic.value",t),C(r,"length","design.length.value.overall",t),C(r,"beam","design.beam.value",t),C(r,"callsign","communication.callsignVhf",t),C(r,"shipType","design.aisShipType.value.id",t),r.lastUpdate=Date.now(),r});console.log("Fetched ".concat(t.length," vessels.")),l(t);let r={};t.forEach(e=>{e.mmsi&&(null!==e.latitude||null!==e.longitude)&&(r[e.mmsi]=e)}),Object.keys(r).length>0&&(console.log("Initializing AIS data with ".concat(Object.keys(r).length," vessels")),a(r))}catch(e){console.error("Error fetching static vessel info:",e)}},n=e=>{if(!(null==e?void 0:e.updates)){console.warn("Delta is missing or does not contain updates:",e);return}let n=e=>({mmsi:e,name:"unknown",latitude:null,longitude:null,sog:null,cog:null,cogMagnetic:null,heading:null,headingMagnetic:null}),t=e.context.replace("vessels.","");if(!t){console.warn("Update missing MMSI context:",e);return}c.current[t]=Date.now(),a(r=>{let o=r[t]||n(t);return o.lastUpdate=c.current[t],e.updates.forEach(e=>{e.values.forEach(e=>{switch(e.path){case"name":o.name=e.value;break;case"navigation.position":o.latitude=e.value.latitude,o.longitude=e.value.longitude;break;case"navigation.speedOverGround":o.sog=e.value;break;case"navigation.courseOverGroundTrue":o.cog=e.value;break;case"navigation.courseOverGroundMagnetic":o.cogMagnetic=e.value;break;case"navigation.headingTrue":o.heading=e.value;break;case"navigation.headingMagnetic":o.headingMagnetic=e.value}})}),{...r,[t]:o}})};return(async()=>{try{let{signalkUrl:t}=M.Z.getAll();if(console.log("SignalK URL:",t),!t)throw Error("SignalK URL is undefined or invalid.");let[r,o]=t.replace(/https?:\/\//,"").split(":");console.log("Connecting to SignalK at hostname: ".concat(r,", port: ").concat(o));let a=new y.default({hostname:r||"localhost",port:parseInt(o)||3e3,useTLS:t.startsWith("https"),reconnect:!0,autoConnect:!1,notifications:!1,subscriptions:[{context:"vessels.*",subscribe:[{path:"navigation.position"},{path:"navigation.speedOverGround"},{path:"navigation.courseOverGroundTrue"},{path:"navigation.courseOverGroundMagnetic"},{path:"navigation.headingTrue"},{path:"navigation.headingMagnetic"}]}]});s.current=a,await a.connect(),console.log("SignalK client connected."),await e(a),a.on("delta",n)}catch(e){console.error("Error connecting to SignalK:",e)}})(),()=>{var e;console.log("Disconnecting SignalK client..."),null===(e=s.current)||void 0===e||e.disconnect()}},[]),(0,r.jsx)(b.Provider,{value:{aisData:t,vesselIds:i},children:n})};var R=t(45476);let I=async e=>{try{let n=await t(29927)("./".concat(e,"/Scene.jsx"));return n.default?n.default:n.Model}catch(n){throw console.error("Error loading ".concat(e," component:"),n),n}},P=e=>0===e?"windsurf":30===e?"optimist":36===e?"sailboat":"ship",E=(0,o.forwardRef)((e,n)=>{let{position:t,visible:a,boatData:i,onHover:l}=e,[s,c]=(0,o.useState)(null),u=P(i.shipType);if((0,o.useEffect)(()=>{let e=!0;return I(u).then(n=>{e&&c(()=>n)}).catch(e=>console.error("Failed to load ".concat(u,":"),e)),()=>{e=!1}},[u]),!s)return null;let d=[i.name?function(e,n){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=null!=n?"".concat(n).concat(t):"N/A";return"".concat(e,": ").concat(r,"\n")}("Name",i.name,""):"MMSI ".concat(i.mmsi.replace("urn:mrn:imo:mmsi:",""),"\n")].join(""),g=Math.max(i.length||10,4)/10;return(0,r.jsxs)("group",{ref:n,position:t,visible:a,children:[(0,r.jsx)("group",{onClick:e=>{e.stopPropagation(),s&&l&&l(i),console.log("Clicked on boat:",i.name||i.mmsi)},children:(0,r.jsx)(s,{scale:[g,g,g]})}),(0,r.jsx)("group",{position:[1.5,4,0],children:(0,r.jsx)(R.x,{position:[0,0,0],fontSize:.4,maxWidth:3,lineHeight:1.2,textAlign:"left",color:"white",anchorX:"center",anchorY:"middle",font:"fonts/Roboto-Bold.ttf",renderOrder:1e3,depthTest:!1,children:d})})]})});E.displayName="AISBoat";let O=e=>{if(e.material)return e;for(let n of e.children){let e=O(n);if(e)return e}return null},T=function(e,n,t){let r=!(arguments.length>3)||void 0===arguments[3]||arguments[3],o=M.Z.get("aisLengthScalingFactor")||.7,a=n*o,i=t*o;r?(e.position.x+=(a-e.position.x)*.1,e.position.z+=(i-e.position.z)*.1):e.position.set(a,0,i)},_=function(e,n){let t=!(arguments.length>2)||void 0===arguments[2]||arguments[2],r=-n;t?e.children[0].rotation.y=e.children[0].rotation.y+(r-e.children[0].rotation.y)*.1:e.children[0].rotation.y=r};var k=e=>{let{onUpdateInfoPanel:n}=e,{aisData:t,vesselIds:a}=j(),i=(0,o.useRef)({}),l=(0,o.useRef)(null),{getSignalKValue:s,getBoatRotationAngle:c,getAISBoatRotationAngle:d,convertLatLonToXY:g}=(0,h.yC)(),[m,f]=(0,o.useState)(null),v=(0,o.useRef)(0),p=()=>M.Z.get("aisLengthScalingFactor")||.7,x=500*p(),w=550*p(),y=3e3*p();(0,o.useRef)(!1),(0,u.F)(()=>{let e=s("navigation.position"),n=c();v.current=n,l.current=e,(null==e?void 0:e.latitude)&&(null==e?void 0:e.longitude)&&Object.keys(i.current).length&&(performance.now(),Object.values(t).forEach(n=>{if(null==n.latitude||null==n.longitude||!i.current[n.mmsi])return;let t=i.current[n.mmsi];if(!t)return;n.lastUpdate;let{x:r,y:o}=g({lat:n.latitude,lon:n.longitude},{lat:e.latitude,lon:e.longitude});T(t,r,o,!0),_(t,d(n),!0);let a=Math.sqrt((r*p())**2+(o*p())**2);if(0===r&&0===o){t.visible=!1;return}if(a>0&&a<=y){t.visible=!0,t.currentColor||(t.currentColor=a<x?"red":"white");let e=t.currentColor;"red"===t.currentColor&&a>w?e="white":"white"===t.currentColor&&a<x&&(e="red");let r=O(t.children[0]);r?(t.redMaterial||(t.redMaterial=r.material.clone(),t.redMaterial.color.set("red")),t.whiteMaterial||(t.whiteMaterial=r.material.clone(),t.whiteMaterial.color.set("white")),"red"===e&&"red"!==t.currentMaterial?(r.material=t.redMaterial,t.currentMaterial="red"):"white"===e&&"white"!==t.currentMaterial&&(r.material=t.whiteMaterial,t.currentMaterial="white"),t.currentColor=e):console.warn("Material not found for boat ".concat(n.mmsi))}else t.visible=!1}))});let b=(0,o.useMemo)(()=>{let e=l.current;return(null==e?void 0:e.latitude)&&(null==e?void 0:e.longitude)?a.filter(e=>{if(!e.mmsi||e.mmsi.startsWith("urn:mrn:signalk:uuid:")||e.mmsi.startsWith("227925790")||e.mmsi.startsWith("urn:mrn:imo:mmsi:230035780"))return!1;let n=t[e.mmsi];return!!n&&null!==n.latitude&&null!==n.longitude}).map(n=>{let o=t[n.mmsi],a=g({lat:o.latitude,lon:o.longitude},{lat:e.latitude,lon:e.longitude});if(0===a.x&&0===a.y)return!1;let l=M.Z.get("aisLengthScalingFactor")||.7,s=a.x*l,c=a.y*l,u=Math.sqrt(s*s+c*c)<=y;return(0,r.jsx)(E,{ref:e=>{e&&(e.mmsi=n.mmsi,i.current[n.mmsi]=e)},position:[s,0,c],visible:u,boatData:{...n,...o},onHover:e=>{m&&e&&m.mmsi===e.mmsi?f(null):f(e)}},n.mmsi)}):[]},[a,t,y,m,g]),C=function(e,n){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];return null==n||""===n||"string"==typeof n&&0===n.trim().length?null:(r&&null!==n&&(n=(0,h.Ux)(n)),o&&null!==n&&(n=(0,h.Qj)(n)),"".concat(e,": ").concat(n).concat(t))},S=m?[C("Name",m.name),C("MMSI",(e=>{if(!e)return null;let n=e;for(let e of["urn:mrn:imo:mmsi:","urn:mrn:signalk:uuid:"])if(n.startsWith(e)){n=n.substring(e.length);break}return n})(m.mmsi)),C("Distance",(e=>{if(!e||!l.current)return null;let n=l.current;if(!(null==n?void 0:n.latitude)||!(null==n?void 0:n.longitude)||!e.latitude||!e.longitude)return null;let{x:t,y:r}=g({lat:e.latitude,lon:e.longitude},{lat:n.latitude,lon:n.longitude});return Math.round(Math.sqrt(t*t+r*r)/1852*10)/10})(m)," NM"),C("Length",m.length,"m"),C("Type",m.shipType),C("SOG",m.sog," kts",!1,!0),C("COG",m.cog,"\xb0",!0),C("Heading",m.heading,"\xb0",!0),C("Beam",m.beam,"m"),C("Draft",m.draft,"m"),C("Callsign",m.callsign),C("Destination",m.destination)].filter(e=>null!==e).join("\n"):"";return o.useEffect(()=>{n&&n(S)},[m,S,n]),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("group",{rotation:[0,-v.current,0],children:b}),m&&(0,r.jsx)("group",{position:[0,1,0],children:(0,r.jsxs)("mesh",{scale:[.1,.1,.1],visible:!1,children:[(0,r.jsx)("boxGeometry",{}),(0,r.jsx)("meshBasicMaterial",{color:"yellow"})]})})]})},N=t(1);let A=o.memo(e=>{let{radius:n,isOuter:t,markerColorPrimary:a,markerColorGreen:i,markerColorRed:l}=e,s=(0,o.useMemo)(()=>{let e=[];for(let o=0;o<360;o+=10){let s=g.M8C.degToRad(o-90),c=o%30==0,u=t?c?.4:.2:c?.3:.15,d=(n+.5*u+.2)*Math.cos(s),h=(n+.5*u+.2)*Math.sin(s),m=t&&o>0&&o<61,f=t&&o>=300&&o<360,v=m?i:f?l:a;if(!t&&c){let n;n=0===o?"N":90===o?"E":180===o?"S":270===o?"W":o.toString(),e.push((0,r.jsx)(R.x,{characters:"NESW0123456789",position:[d,.01,h],color:a,fontSize:.5,rotation:[-Math.PI/2,0,Math.PI/2-s],font:"fonts/Roboto-Bold.ttf",anchorY:"middle",children:n},"text-".concat(o)))}else e.push((0,r.jsx)(N.aL,{args:[u/2,16,16],position:[d,0,h],children:(0,r.jsx)("meshBasicMaterial",{color:v})},"marker-".concat(t?"outer":"inner","-").concat(o)))}return e},[n,t,a,i,l]);return(0,r.jsx)(r.Fragment,{children:s})});A.displayName="StaticMarkers";let F=o.memo(e=>{let{innerRadius:n,outerRadius:t,dialColor:o,opacity:a=1,transparent:i=!1}=e;return(0,r.jsx)(N.FM,{args:[n,t,64],rotation:[Math.PI/2,0,0],children:(0,r.jsx)("meshBasicMaterial",{color:o,side:g.ehD,transparent:i,opacity:a})})});F.displayName="StaticRing";let G=e=>{let{outerRadius:n,innerRadius:t}=e,a=h.FV,i=h.HH,{nightMode:l,getSignalKValue:s,getBoatRotationAngle:c}=(0,h.yC)(),u=l?h.eF:16777215,d=c(),g=M.Z.get("compassNorthUp"),m=(0,o.useMemo)(()=>({innerRadius:t,outerRadius:n,dialColor:u,markerColorPrimary:0,markerColorGreen:a,markerColorRed:i}),[t,n,u,0,a,i]);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("group",{rotation:[0,d+(g?0:Math.PI),0],children:[(0,r.jsx)(F,{innerRadius:m.innerRadius,outerRadius:m.outerRadius,dialColor:m.dialColor}),(0,r.jsx)(A,{radius:m.innerRadius,isOuter:!1,markerColorPrimary:m.markerColorPrimary,markerColorGreen:m.markerColorGreen,markerColorRed:m.markerColorRed})]}),(0,r.jsxs)("group",{children:[(0,r.jsx)(F,{innerRadius:m.innerRadius+1,outerRadius:m.outerRadius+1,dialColor:m.dialColor,transparent:!0,opacity:.5}),(0,r.jsx)(A,{radius:m.innerRadius+1,isOuter:!0,markerColorPrimary:m.markerColorPrimary,markerColorGreen:m.markerColorGreen,markerColorRed:m.markerColorRed})]})]})};G.displayName="CompassDial";var D=t(95723),U=()=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(G,{outerRadius:5.6,innerRadius:5}),(0,r.jsx)(D.Z,{outerRadius:5.6+1.1})]}),L=t(58181),z=JSON.parse('{"N":{"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],"angles":[52,60,75,90,110,120,135,150],"speeds":[6,8,10,12,14,16,20],"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]}}');let H={DEG2RAD:Math.PI/180,ROTATION_INTERPOLATION_FACTOR:.05,SOG_SMOOTHING_FACTOR:.1,DEFAULT_SOG:3,ANGLE_INCREMENT:10,SPHERE_SIZE:.4,SPHERE_SEGMENTS:32,DEFAULT_LINE_WIDTH:1,PLOTS_COUNT:5,FRAME_TO_MINUTE_RATIO:3600},W=(e,n)=>26.8224*e*n*.1,Z=(e,n,t)=>{if(!e||!n)return new g.Pa4(0,0,0);let r=e*H.DEG2RAD,o=W(n,t);return new g.Pa4(o*Math.sin(r),0,-o*Math.cos(r))},B=(e,n)=>{if(!(null==e?void 0:e.length))return 0;let t=0,r=e.length-1;for(;t<r;){let o=Math.floor((t+r)/2);e[o]<n?t=o+1:r=o}return t},q=e=>{let{position:n,color:t}=e;return n?(0,r.jsxs)("mesh",{position:n,children:[(0,r.jsx)("sphereGeometry",{args:[H.SPHERE_SIZE,H.SPHERE_SEGMENTS,H.SPHERE_SEGMENTS]}),(0,r.jsx)("meshStandardMaterial",{color:t})]}):null},K=e=>{let{points:n,color:t}=e;return(null==n?void 0:n.length)?(0,r.jsx)(L.x,{points:n,color:t,lineWidth:H.DEFAULT_LINE_WIDTH}):null},V=o.memo(e=>{let{timeInMinute:n,windSpeed:t}=e,a=(0,o.useRef)(z.N),i=(0,o.useCallback)((e,n,t,r)=>{if(!(null==e?void 0:e.length)||!(null==n?void 0:n.length)||e.length<=t||n.length<=t)return console.warn("Invalid angle or VMG data"),null;let o=e[t],a=n[t],i=o*H.DEG2RAD,l=W(a,r);return new g.Pa4(l*Math.sin(i),0,-l*Math.cos(i))},[]),l=(0,o.useCallback)((e,n)=>{let{speeds:t,angles:r,beat_angle:o,beat_vmg:i,run_angle:l,run_vmg:s}=a.current;if(!(null==t?void 0:t.length)||!(null==r?void 0:r.length))return console.warn("Invalid polar data"),null;let c=(e,n,t)=>e+t*(n-e),u=[],d=(e,t,r)=>{for(let o=e;o<=t;o+=H.ANGLE_INCREMENT)u.push(Z(o,r(o),n))};d(0,o[e]-H.ANGLE_INCREMENT,n=>c(0,i[e],n/o[e]));let h=Z(o[e],i[e],n);u.push(h),r.forEach(t=>{if(t>o[e]&&t<l[e]){var r;let o=(null===(r=a.current[Math.floor(t)])||void 0===r?void 0:r[e])||0;u.push(Z(t,o,n))}});let m=Z(l[e],s[e],n);return u.push(m),d(l[e]+H.ANGLE_INCREMENT,180,()=>s[e]),new g.YT8(u,!0)},[]),s=(0,o.useMemo)(()=>{var e;let r=a.current;if(!(null==r?void 0:null===(e=r.speeds)||void 0===e?void 0:e.length))return console.warn("Invalid polar data structure"),{curve:null,beat:null,run:null};let o=B(r.speeds,t);return{curve:l(o,n),beat:i(r.beat_angle,r.beat_vmg,o,n),run:i(r.run_angle,r.run_vmg,o,n)}},[n,t,i,l]);return(0,r.jsx)(r.Fragment,{children:[0,-Math.PI].map((e,n)=>(0,r.jsxs)("group",{position:[0,-.7,0],rotation:[0,0,e],children:[s.curve&&(0,r.jsx)(K,{points:s.curve.getPoints(100),color:h.gK}),(0,r.jsx)(q,{position:s.beat,color:h.FV}),(0,r.jsx)(q,{position:s.run,color:h.HH})]},n))})});V.displayName="PolarPlot";var Q=function(){let e=(0,o.useRef)([]),[n,t]=(0,o.useState)([]),a=(0,o.useRef)(0),i=(0,o.useRef)([]),l=(0,o.useRef)(H.DEFAULT_SOG),{getSignalKValue:s}=(0,h.yC)(),c=-s("environment.wind.angleApparent"),d=(0,h.HQ)(s("environment.wind.speedOverGround"))||0,m=s("navigation.speedOverGround")||H.DEFAULT_SOG,f=(0,o.useRef)(d),[v,p]=(0,o.useState)(Date.now()),x=(0,o.useRef)(null);return(0,o.useEffect)(()=>{let n=Array.from({length:H.PLOTS_COUNT},(e,n)=>({id:n,timeInMinute:5*(n+1)}));return t(n),e.current=n.map(()=>new g.ZAu),i.current=Array(H.PLOTS_COUNT).fill(0),x.current=setInterval(()=>{p(Date.now()),a.current=0,console.log("Forcing redraw of polar plots")},12e4),()=>{x.current&&clearInterval(x.current)}},[]),(0,o.useEffect)(()=>{Math.abs(f.current-d)>5&&(console.log("Wind speed changed from ".concat(f.current," to ").concat(d,", recreating polar curves")),p(Date.now()),a.current=0,f.current=d)},[d]),(0,u.F)((t,r)=>{a.current+=1,l.current=g.M8C.lerp(l.current,m,H.SOG_SMOOTHING_FACTOR),n.forEach((n,t)=>{let r=e.current[t];if(r&&n.timeInMinute-a.current/H.FRAME_TO_MINUTE_RATIO>0){let e=i.current[t],n=g.M8C.lerp(e,c,H.ROTATION_INTERPOLATION_FACTOR);r.rotation.set(0,n,0),i.current[t]=n}})}),(0,r.jsx)(r.Fragment,{children:n.map((n,t)=>(0,r.jsx)("group",{ref:n=>{n&&(e.current[t]=n)},children:(0,r.jsx)(V,{timeInMinute:n.timeInMinute,windSpeed:d},"plot-".concat(v,"-").concat(t))},"".concat(n.id,"-").concat(v)))})},Y=()=>{let{states:e,nightMode:n}=(0,h.yC)(),t=n?.2:.4;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("ambientLight",{intensity:n?.3:.5}),(0,r.jsx)("directionalLight",{position:[0,70,-100],intensity:n?.8:1.4,castShadow:!0,"shadow-mapSize-width":1024,"shadow-mapSize-height":1024,"shadow-camera-near":.5,"shadow-camera-far":200,"shadow-camera-left":-50,"shadow-camera-right":50,"shadow-camera-top":50,"shadow-camera-bottom":-50,"shadow-bias":-.0001,color:n?"#c8e6ff":"#ffffff"}),(0,r.jsx)("pointLight",{position:[0,40,-80],intensity:2.5*t,distance:150,decay:2}),(0,r.jsx)("pointLight",{position:[0,30,100],intensity:.8*t,distance:120,decay:2})]})},X=e=>{let{onUpdateInfoPanel:n}=e,{states:t,getSignalKValue:u}=(0,h.yC)();M.Z.getAll();let d=(0,o.useRef)();return(0,r.jsxs)(o.Suspense,{fallback:(0,r.jsx)(a.V,{children:"Loading..."}),children:[(0,r.jsx)(i.c,{makeDefault:!0,fov:60,near:5,far:500,position:[0,5,20]}),(0,r.jsx)(l.z,{enableZoom:!0,enableRotate:!0,maxPolarAngle:Math.PI/2,minPolarAngle:Math.PI/4,enableDamping:!1,zoomSpeed:.5,rotateSpeed:.5}),(0,r.jsx)(s.qA,{files:"./assets/ocearo_env.hdr",background:!1,intensity:.8,resolution:256}),(0,r.jsx)(Y,{}),(0,r.jsxs)("group",{position:[0,-3,0],children:[(0,r.jsx)(c.Z,{position:[0,0,.7],scale:[.7,.7,.7],ref:d,showSail:!0,onUpdateInfoPanel:n}),t.showOcean&&(0,r.jsx)(w,{}),(0,r.jsx)(f,{}),t.showPolar&&!t.showOcean&&(0,r.jsx)(Q,{}),t.ais&&(0,r.jsx)(S,{children:(0,r.jsx)(k,{onUpdateInfoPanel:n})}),(0,r.jsx)(U,{visible:!1})]})]})}},95723:function(e,n,t){"use strict";var r=t(57437),o=t(2265),a=t(40718),i=t.n(a),l=t(53082),s=t(72079),c=t(45476);let u={TRUE_WIND:1,APP_WIND:1},d=e=>{let{position:n=[0,0,0],rotation:t=[0,0,0],speed:o,color:a="#ffffff",fontSize:i=.5,textPosition:l=[0,.8,0],arrowSize:u=1}=e;return(0,r.jsxs)("group",{position:n,rotation:t,children:[(0,r.jsx)(c.x,{characters:".0123456789",color:a,fontSize:i*u,position:l,font:"fonts/Roboto-Bold.ttf",anchorX:"center",anchorY:"middle",children:o.toFixed(1)}),(0,r.jsxs)("mesh",{children:[(0,r.jsx)("shapeGeometry",{args:[new s.bnF([new s.FM8(0,0),new s.FM8(.5*u*Math.cos(5*Math.PI/6),.5*u*Math.sin(5*Math.PI/6)),new s.FM8(0,-.577*u),new s.FM8(-.5*u*Math.cos(5*Math.PI/6),.5*u*Math.sin(5*Math.PI/6)),new s.FM8(0,0)])]}),(0,r.jsx)("meshStandardMaterial",{color:a,side:s.ehD})]})]})};d.propTypes={position:i().oneOfType([i().instanceOf(s.Pa4),i().arrayOf(i().number)]).isRequired,rotation:i().arrayOf(i().number).isRequired,speed:i().number.isRequired,color:i().oneOfType([i().string,i().number]).isRequired,fontSize:i().number,textPosition:i().arrayOf(i().number),arrowSize:i().number};let g=e=>{let{outerRadius:n}=e,{getSignalKValue:t}=(0,l.yC)(),a=Math.PI/2-t("environment.wind.angleTrueGround")||0,i=(0,l.HQ)(t("environment.wind.speedOverGround"))||0,c=Math.PI/2-t("environment.wind.angleApparent")||0,g=(0,l.HQ)(t("environment.wind.speedApparent"))||0,h=(0,o.useMemo)(()=>new s.Pa4((n+.7)*Math.cos(a),0,-(n+.7)*Math.sin(a)),[n,a]),m=(0,o.useMemo)(()=>new s.Pa4((n+.7)*Math.cos(c),0,-(n+.7)*Math.sin(c)),[n,c]);return(0,r.jsxs)("group",{children:[i>0&&(0,r.jsx)(d,{position:h,rotation:[-Math.PI/2,0,-(Math.PI/2-a)],speed:i,color:"#0000FF",fontSize:u.TRUE_WIND}),g>0&&(0,r.jsx)(d,{position:m,rotation:[-Math.PI/2,0,-(Math.PI/2-c)],speed:g,color:l.gK,fontSize:u.APP_WIND})]})};g.propTypes={outerRadius:i().number.isRequired},n.Z=g}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[909],{11909:function(e,t,a){a.d(t,{Z:function(){return I}});var o=a(57437),r=a(2265),i=a(21276),s=a(53082),n=a(63321),l=a(41106),m=a(72079);function h(e,t,a){return e/1.9438444924574*Math.pow(t/10,a)*1.9438444924574}var c=a(53359),u=a(31378),g=a(70262),p=new WeakMap,d=new WeakMap;class f{calcShape(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;(0,g._)(this,d,[]);let t=this.chordTackLevel/((0,c._)(this,p)[(0,c._)(this,p).length-1].x-(0,c._)(this,p)[0].x);for(let a of(0,c._)(this,p)){let o=a.clone().multiplyScalar(t);1!==e&&(o.y*=e),(0,c._)(this,d).push(o)}let a=new m.FM8(0,0);for(let e of(0,c._)(this,d))e.y>a.y&&(a=e);this.draftDepth=a.y,this.draftPosition=a.x,this.girth=0;let o=null;for(let e of(0,c._)(this,d))null!==o&&(this.girth+=e.distanceTo(o)),o=e;this.sag=this.chordTackLevel-this.girth,this.entryAngleRad=(0,c._)(this,d)[1].clone().sub((0,c._)(this,d)[0]).angle(),this.exitAngleRad=(0,c._)(this,d)[(0,c._)(this,d).length-1].clone().sub((0,c._)(this,d)[(0,c._)(this,d).length-2]).angle()-2*Math.PI,this.mastAngleRad=this.calcMastAngle(),this.forceAngleRad=(this.entryAngleRad+this.exitAngleRad)/2,this.draftDepthRatio=this.draftDepth/this.chordTackLevel,this.draftPositionRatio=this.draftPosition/this.chordTackLevel}calcMastAngle(){let e=0,t=null,a=this.mastWidth*this.chordTackLevel/this.chordMastTop;for(let o of(0,c._)(this,d)){if(null!==t&&(e+=o.distanceTo(t))>=a)return o.angle();t=o}return NaN}getVerticesAngles(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=(this.girth-t)/(e-1),r=0,i=0,s=[],n=null;for(let l of(0,c._)(this,d)){if(null!==n&&(((i+=l.distanceTo(n))>=r*o+t||a&&i>a)&&(r++,s.push(l.angle())),r>=e))break;n=l}return s}pointAtGirthDistance(e){let t=0,a=null;for(let o of(0,c._)(this,d))if(null!==a&&(t+=o.distanceTo(a)),a=o,t>=e)return a.clone()}constructor(e,t,a,o=1){(0,u._)(this,p,{writable:!0,value:void 0}),(0,u._)(this,d,{writable:!0,value:void 0}),(0,g._)(this,p,[]),(0,g._)(this,d,[]),this.chordMastTop=t,this.chordTackLevel=e,this.mastWidth=a;let r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new m.FM8(t*e**2,2*t*e)},i=1.001+.95*(o-1)/10,s=(i-.001)/1e3,n=r(.001),l=r(i).clone().sub(n).angle(),h=new m.FM8(0,0);for(let e=.001;e<=i;e+=s){let t=r(e);t.sub(n),t.rotateAround(h,-l),(0,c._)(this,p).push(t)}this.calcShape(1-.25*(o-1)/10)}}let y=Math.floor(20),_=Math.ceil(160),M={waterlineToMastFootHeight:.45,maxMastRotation:Math.PI/2,maxChordRotationPerSailLevel:Math.PI/3*2};var x=e=>{let{windParams:t={speed:5,hellman:.27},boatParams:a={mastrotation:0,heading:130,speed:5},sailParams:i={mastArea:0,sailArea:0,cunningham:1,angleOfAttack:20}}=e,{getSignalKValue:n}=(0,s.yC)(),l=(0,r.useRef)(),c=(0,r.useRef)(null),u=(0,r.useRef)(0),g=(0,r.useRef)(null),p=(0,r.useRef)(null),d=(0,r.useRef)(),x=(0,r.useRef)({}),b=(0,r.useMemo)(()=>{let e=new m.ZAu,t=new m.b_z(.1,.2,12),a=new m.Wid({color:s.gK,opacity:.5,transparent:!0}),o=new m.Kj0(t,a);return o.position.set(0,-.1,0),e.add(o),e},[]);(0,r.useEffect)(()=>{let e=new m.ZAu,t={};for(let a=0;a<8;a+=.5){let o=b.clone();o.position.set(0,a,0),t[2*a]=o,e.add(o)}return e.position.set(0,0,0),d.current&&d.current.add(e),x.current=t,()=>{e.clear()}},[b]);let P=(e,t)=>{let a=x.current;if(!a){console.error("apparentWindField is not initialized.");return}for(let o=0;o<8;o+=.5){let r=h(e,o,t),i=a[2*o];if(!i){console.warn("Apparent wind field cone at height ".concat(o," is not defined."));continue}i.scale.set(.1*r,r,.1*r),i.rotation.set(0,-Math.PI,Math.PI/2)}},{geometry:v,sailClipWidthPerLevel:j}=(0,r.useMemo)(()=>{let e=new m.u9r,t=[],a=[],o=[];for(let e=0;e<=_;e++){let r,i;let s=Math.min(50*e,8e3);s<900?(r=3600,i=3800+-200*s/900):i=r=3600-3210*(s-900)/7100+600*Math.sin((s-900)/7100*Math.PI);let n=0;for(let o=0;o<y;o++){let l=r/(y-1),m=l*o-i,h=l;m>.1&&(h=m>l?0:l-m),t.push(0===o?0:(n+h)/1e3,s/1e3,0),n=0===o?0:n+h;let c=Math.floor(_/10);a.push(...e%c==0?[.8,0,.047]:[.596,.596,.596])}o.push(i===r?null:i)}let r=[];for(let e=0;e<_;e++)for(let t=1;t<y;t++){let a=e*y+t;r.push(a-1,a,a+y-1,a,a+y,a+y-1)}return e.setAttribute("position",new m.a$l(t,3)),e.setAttribute("color",new m.a$l(a,3)),e.setIndex(r),e.computeVertexNormals(),{geometry:e,sailClipWidthPerLevel:o}},[]),I=(0,r.useMemo)(()=>n("environment.wind.angleApparent")||0,[n]),A=(0,r.useMemo)(()=>n("environment.wind.speedApparent")||0,[n]);return(0,r.useEffect)(()=>{if(!l.current)return;P(A,t.hellman);let e=l.current.geometry,o=e.attributes.position.array;i.cunningham!==g.current&&(p.current=new f(3600,390,200,i.cunningham),g.current=i.cunningham),c.current||(c.current=e.clone());let r=1e3*M.waterlineToMastFootHeight,s=I;for(;s<0;)s+=2*Math.PI;for(;s>=2*Math.PI;)s-=2*Math.PI;let n=s>Math.PI?-1:1,d=s;d>Math.PI&&(d=2*Math.PI-d);let x=m.M8C.degToRad(i.angleOfAttack),b=p.current.mastAngleRad;d<.01&&(x=0);let v=Math.min(d-x+b,M.maxMastRotation),w=new m.Pa4(0,1,0),R=null;for(let e=0;e<=_;e++){h(A,(50*e+r)/1e3,t.hellman);let a=d-x;a<0?a=0:a>Math.PI/2&&(a=Math.PI/2);let i=a-v;R&&i-R>M.maxChordRotationPerSailLevel&&(i=R+M.maxChordRotationPerSailLevel),R=i;let s=j[e],l=p.current.getVerticesAngles(y,200,s);for(let t=1;t<y;t++){let a=(e*y+t)*3,r=new m.Pa4(c.current.attributes.position.array[a],c.current.attributes.position.array[a+1],c.current.attributes.position.array[a+2]);r.applyAxisAngle(w,-(i+l[t])*n),o[a]=r.x,o[a+1]=r.y,o[a+2]=r.z}}e.attributes.position.needsUpdate=!0;let T={...a,mastrotation:v*n};l.current&&l.current.rotateY(u.current-T.mastrotation),u.current=T.mastrotation},[A,I,t.hellman,i.cunningham,i.angleOfAttack,a,j]),(0,o.jsxs)("mesh",{ref:l,position:[0,2,-1],rotation:[0,-Math.PI/2,0],children:[(0,o.jsx)("bufferGeometry",{...v}),(0,o.jsx)("group",{ref:d}),(0,o.jsx)("meshBasicMaterial",{vertexColors:!0,transparent:!0,opacity:.7,side:m.ehD})]})};let b=a(40257).env.ASSET_PREFIX||"./",P=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default";return"".concat(b,"/boats/").concat(e,"/assets/scene-transformed.glb")},v={name:"Default",modelPath:"default",capabilities:["navigation","rudder","sail","color"]},j=(0,r.forwardRef)((e,t)=>{let{showSail:a=!1,onUpdateInfoPanel:h,...c}=e,u=(0,r.useRef)(),g=(0,r.useRef)(),{getSignalKValue:p}=(0,s.yC)(),d=n.Z.getAll(),[f,y]=(0,r.useState)(()=>n.Z.getSelectedBoat()||v);(0,r.useEffect)(()=>{y(n.Z.getSelectedBoat()||v)},[d]);let _=(0,r.useMemo)(()=>P(f.modelPath),[f]),M=(null==f?void 0:f.capabilities)||[],{nodes:j,materials:I}=(0,l.L)(_,"".concat(b,"/draco/")),A=(0,r.useMemo)(()=>({primaryColor:d.primaryColor,metallicEffect:d.metallicEffect||!1}),[d.primaryColor,d.metallicEffect]);(0,r.useEffect)(()=>{if("default"===f.modelPath){if(!(null==I?void 0:I.fiberglass))return;I.fiberglass.color.set(A.primaryColor),I.fiberglass.metalness=A.metallicEffect?1:0,I.fiberglass.roughness=A.metallicEffect?.2:1}else u.current&&u.current.traverse(e=>{e.isMesh&&e.material&&(Array.isArray(e.material)?e.material.forEach(e=>{e.color.set(A.primaryColor),e.metalness=A.metallicEffect?1:0,e.roughness=A.metallicEffect?.2:1}):(e.material.color.set(A.primaryColor),e.material.metalness=A.metallicEffect?1:0,e.material.roughness=A.metallicEffect?.2:1))});Object.values(I).forEach(e=>{e.map&&(e.map.minFilter=m.wem,e.map.magFilter=m.wem,e.map.anisotropy=1)})},[I,A,f,u]);let w=(0,r.useMemo)(()=>new m.yGw,[]),R=(0,r.useMemo)(()=>new m.Pa4(1,0,0),[]);(0,i.F)(()=>{if(!u.current)return;let e=p("navigation.attitude.roll")||0,t=p("steering.rudderAngle")||0;u.current.rotation.z!==e&&(u.current.rotation.z=e),g.current&&(w.makeRotationFromEuler(new m.USm(-Math.PI/2,Math.PI/2,0)),g.current.setRotationFromMatrix(w),g.current.rotateOnAxis(R,-m.M8C.degToRad(180*t/Math.PI)))});let T=(0,r.useMemo)(()=>{let e={Default:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("mesh",{geometry:j.baba_metal_0.geometry,material:I.metal,position:[.24,.895,-5.546],rotation:[-Math.PI/2,0,1.968],scale:.027}),(0,o.jsx)("mesh",{geometry:j.camadadirek_fiberglass_0.geometry,material:I.fiberglass,position:[0,5.267,-3.711],rotation:[2.054,0,Math.PI],scale:[-.042,.042,4.707]}),(0,o.jsx)("mesh",{geometry:j.camadanyelkeni_bez_0.geometry,material:I.mcaterial,position:[0,5.267,-3.711],rotation:[2.054,0,Math.PI],scale:[-.042,.042,4.707]}),(0,o.jsx)("mesh",{geometry:j.camadaonbaglay_metal_0.geometry,material:I.metal,position:[0,.891,-5.958],rotation:[-Math.PI/2,0,0],scale:.02}),(0,o.jsx)("mesh",{geometry:j.capa_metal_0.geometry,material:I.metal,position:[0,.671,-6.173],rotation:[-Math.PI/2,0,0],scale:.348}),(0,o.jsx)("mesh",{geometry:j.direk_fiberglass_0.geometry,material:I.fiberglass,position:[0,4.315,-1.056],rotation:[Math.PI/2,0,Math.PI],scale:[-.113,.113,5.203]}),(0,o.jsx)("mesh",{geometry:j.duman_ahsap_0.geometry,material:I.ahsap,position:[-.011,.854,3.487],rotation:[Math.PI,0,Math.PI/2],scale:[.045,.045,.011]}),(0,o.jsx)("mesh",{geometry:j.dumenyuvasi_ahsap_0.geometry,material:I.ahsap,position:[-.011,.299,3.441],rotation:[-Math.PI/2,0,1.571],scale:.094}),(0,o.jsx)("mesh",{geometry:j.dumenyuvasi_cam_0.geometry,material:I.material_5,position:[-.011,.299,3.441],rotation:[-Math.PI/2,0,1.571],scale:.094}),(0,o.jsx)("mesh",{geometry:j.dumenyuvasi_fiberglass_0.geometry,material:I.fiberglass,position:[-.011,.299,3.441],rotation:[-Math.PI/2,0,1.571],scale:.094}),(0,o.jsx)("mesh",{geometry:j.govde_fiberglass2_0.geometry,material:I.fiberglass2,position:[0,.32,-.897],rotation:[0,Math.PI/2,0],scale:[5.11,.454,1.212]}),(0,o.jsx)("mesh",{geometry:j.govde_fiberglass_0.geometry,material:I.fiberglass,position:[0,.32,-.897],rotation:[0,Math.PI/2,0],scale:[5.11,.454,1.212]}),(0,o.jsx)("mesh",{geometry:j.govde_metal_0.geometry,material:I.metal,position:[0,.32,-.897],rotation:[0,Math.PI/2,0],scale:[5.11,.454,1.212]}),(0,o.jsx)("mesh",{geometry:j.halattutucu_fiberglass2_0.geometry,material:I.fiberglass2,position:[-1.044,.939,1.809],rotation:[-Math.PI/2,0,0],scale:[.016,.059,.016]}),(0,o.jsx)("mesh",{geometry:j.ip001_metal_0.geometry,material:I.metal,position:[-.231,7.608,-.621],rotation:[-2.322,.222,-1.556],scale:[.007,.007,.011]}),(0,o.jsx)("mesh",{geometry:j.pervan_fiberglass_0.geometry,material:I.fiberglass,position:[0,-1.005,1.561],rotation:[-Math.PI/2,Math.PI/2,0],scale:[.154,.094,.104]}),(0,o.jsx)("mesh",{geometry:j.pervane_metal_0.geometry,material:I.metal,position:[0,-1.122,1.75],scale:.034}),(0,o.jsx)("mesh",{ref:g,geometry:j.rudder_fiberglass_0.geometry,material:I.fiberglass,position:[0,-1.153,3.486],rotation:[-Math.PI/2,Math.PI/2,0],scale:[.573,.262,.262]}),(0,o.jsx)("mesh",{geometry:j.salma_fiberglass_0.geometry,material:I.fiberglass,position:[0,-1.953,-.739],scale:[.149,.108,.756]}),(0,o.jsx)("mesh",{geometry:j.ustcam_cam_0.geometry,material:I.material_5,position:[-.337,.974,-3.127],rotation:[-Math.PI/2,0,0],scale:[-.183,.133,.025]}),(0,o.jsx)("mesh",{geometry:j.ustcam_fiberglass_0.geometry,material:I.fiberglass,position:[-.337,.974,-3.127],rotation:[-Math.PI/2,0,0],scale:[-.183,.133,.025]}),(0,o.jsx)("mesh",{geometry:j.ustgovde_fiberglass_0.geometry,material:I.fiberglass,position:[0,.832,-2.741],rotation:[-Math.PI/2,0,0],scale:[.566,.7,1.212]}),(0,o.jsx)("mesh",{geometry:j.ustgovdekzak_ahsap_0.geometry,material:I.ahsap,position:[0,.862,-2.741],rotation:[-Math.PI/2,0,0],scale:[.566,.7,1.212]}),(0,o.jsx)("mesh",{geometry:j.vinc_metal_0.geometry,material:I.metal,position:[-1.07,.977,2.02],rotation:[-Math.PI/2,0,0],scale:.065}),(0,o.jsx)("mesh",{geometry:j.yancam002_cam_0.geometry,material:I.material_5,position:[-.984,.591,-3.772],rotation:[Math.PI,-1.241,-Math.PI/2],scale:[.095,.28,.014]}),(0,o.jsx)("mesh",{geometry:j.yancam002_fiberglass_0.geometry,material:I.fiberglass,position:[-.984,.591,-3.772],rotation:[Math.PI,-1.241,-Math.PI/2],scale:[.095,.28,.014]}),(0,o.jsx)("mesh",{geometry:j.yankoruma_metal_0.geometry,material:I.metal,position:[-1.641,.946,2.868],rotation:[-Math.PI/2,0,0],scale:[.01,.01,.159]}),(0,o.jsx)("mesh",{geometry:j.yankoruma_metal_0001.geometry,material:I.metal,position:[-1.641,.946,2.868],rotation:[-Math.PI/2,0,0],scale:[.01,.01,.159]}),(0,o.jsx)("mesh",{geometry:j.yankoruma_metal_0002.geometry,material:I.metal,position:[-1.641,.946,2.868],rotation:[-Math.PI/2,0,0],scale:[.01,.01,.159]}),(0,o.jsx)("mesh",{geometry:j.zincir_metal_0.geometry,material:I.metal,position:[-.001,.88,-6.258],rotation:[-1.56,-.031,-.149],scale:.004}),(0,o.jsx)("mesh",{geometry:j.zincir_metal_0001.geometry,material:I.metal,position:[-.001,.88,-6.258],rotation:[-1.56,-.031,-.149],scale:.004}),(0,o.jsx)("mesh",{geometry:j.zincirdeposu_fiberglass2_0.geometry,material:I.fiberglass2,position:[0,.863,-5.779],rotation:[-Math.PI/2,0,0],scale:[.103,.088,.009]}),(0,o.jsx)("mesh",{geometry:j.zincirmakara_metal_0.geometry,material:I.metal,position:[0,.869,-6.305],rotation:[-2.159,1.564,.59],scale:[.01,.01,.016]}),(0,o.jsx)("mesh",{geometry:j.zincirray_ahsap_0.geometry,material:I.ahsap,position:[0,.864,-6.113],rotation:[-Math.PI/2,0,0],scale:[.017,.181,.003]})]}),Optimist:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("mesh",{geometry:j.body_body_0.geometry,material:I.body,position:[-.054,.272,-.022],rotation:[-1.571,.01,.01],scale:[1,5.242,1]}),(0,o.jsx)("mesh",{geometry:j.boom_aluminium_0.geometry,material:I.aluminium,position:[-.019,2.771,.964],rotation:[0,.01,-.01],scale:[.15,.15,4.609]}),(0,o.jsx)("mesh",{geometry:j.rubber_joint__0.geometry,material:I.rubber_joint__0,position:[-.008,1.407,3.453],rotation:[1.571,-.01,-.01],scale:[-.037,.056,.079]}),(0,o.jsx)("mesh",{geometry:j.sail_sail_0.geometry,material:I.sail,position:[.038,8.739,.698],rotation:[2.356,1.557,2.356],scale:[-5.728,4.361,4.361]})]}),Ship:()=>(0,o.jsx)("mesh",{geometry:j.Object_10.geometry,material:I.material_0,position:[0,-.55,0],rotation:[-1.558,.002,3.139],scale:.004}),Windsurf:()=>(0,o.jsx)("mesh",{geometry:j["body_Material_#30_0"].geometry,material:I.Material_30,position:[-.007,0,-.071],rotation:[-Math.PI/2,0,0],scale:.002}),Sailboat:()=>(0,o.jsx)("mesh",{geometry:j.sailboat.geometry,material:I.texture,position:[0,-1.5,0],rotation:[-Math.PI,.011,-Math.PI],scale:.219})};return e[f.name]||e.Default},[f.name,j,I]),k=(0,r.useMemo)(()=>({name:f.name||"Sailboat",type:"sailboat",trueWindAngle:p("environment.wind.angleTrueWater")||0,trueWindSpeed:p("environment.wind.speedTrue")||0,appWindAngle:p("environment.wind.angleApparent")||0,appWindSpeed:p("environment.wind.speedApparent")||0,beatAngle:p("performance.beatAngle")||0,polarSpeed:p("performance.polarSpeed")||0,polarSpeedRatio:p("performance.polarSpeedRatio")||0,velocityMadeGood:p("performance.velocityMadeGood")||0,speedThroughWater:p("navigation.speedThroughWater")||0,headingTrue:p("navigation.headingTrue")||0,courseOverGroundTrue:p("navigation.courseOverGroundTrue")||0,position:p("navigation.position")||{latitude:0,longitude:0}}),[p,f.name]),S=e=>{let t=[];return e.name&&t.push("Name: ".concat(e.name)),e.trueWindSpeed&&t.push("Wind: ".concat((0,s.Qj)(e.trueWindSpeed),"kn @ ").concat((0,s.Ux)(e.trueWindAngle),"\xb0")),e.appWindSpeed&&t.push("App Wind: ".concat((0,s.Qj)(e.appWindSpeed),"kn @ ").concat((0,s.Ux)(e.appWindAngle),"\xb0")),e.speedThroughWater&&t.push("Speed: ".concat((0,s.Qj)(e.speedThroughWater),"kn")),void 0!==e.headingTrue&&null!==e.headingTrue&&t.push("Heading: ".concat((0,s.Ux)(e.headingTrue),"\xb0")),void 0!==e.courseOverGroundTrue&&null!==e.courseOverGroundTrue&&t.push("COG: ".concat((0,s.Ux)(e.courseOverGroundTrue),"\xb0")),e.velocityMadeGood&&t.push("VMG: ".concat((0,s.Qj)(e.velocityMadeGood),"kn")),e.polarSpeedRatio&&t.push("Polar: ".concat((100*e.polarSpeedRatio).toFixed(0),"%")),e.position&&void 0!==e.position.latitude&&void 0!==e.position.longitude&&t.push("Position: ".concat(e.position.latitude.toFixed(4),"\xb0, ").concat(e.position.longitude.toFixed(4),"\xb0")),t.join("\n")},[W,E]=(0,r.useState)(!1);return(0,o.jsxs)("group",{...c,ref:u,dispose:null,onClick:()=>{let e=!W;E(e),h&&h(e?S(k):null)},children:[M.includes("sail")&&a&&(0,o.jsx)(x,{}),(0,o.jsx)(T,{})]})});l.L.preload(P(),"".concat(b,"/draco/")),j.displayName="SailBoat3D";var I=j}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{87343:function(e,t,n){Promise.resolve().then(n.bind(n,99670))},53082:function(e,t,n){"use strict";n.d(t,{$:function(){return w},FV:function(){return u},G5:function(){return p},HH:function(){return d},HQ:function(){return v},NU:function(){return M},Qj:function(){return f},Ux:function(){return h},YH:function(){return S},eF:function(){return g},gK:function(){return c},yC:function(){return C}});var i=n(57437),a=n(2265),r=n(14578),o=n(63321),l=n(72079);let s=(0,a.createContext)(),c="#09bfff",d="#cc000c",u="#0fcd4f",g="#ef4444",h=e=>null==e?null:Math.round((180*e/Math.PI+360)%360),f=e=>null==e?null:(e*m).toFixed(1),m=1.94384,p=e=>null!=e?Math.round((e-273.15)*10)/10:null,v=e=>null!=e?Math.round(19.4384*e)/10:null,w=v,M=e=>null!=e?Math.round(e/100*10)/10:null,b={autopilot:!0,anchorWatch:!1,parkingMode:!1,mob:!1,showOcean:!1,ais:!1,showPolar:!0},x={wind:{"environment.wind.angleTrueWater":l.M8C.degToRad(0),"environment.wind.speedTrue":10.288,"environment.wind.angleApparent":l.M8C.degToRad(0),"environment.wind.speedApparent":10.288},temperature:{"environment.water.temperature":290.15,"environment.outside.temperature":294.15,"propulsion.main.exhaustTemperature":368.15,"environment.inside.fridge.temperature":277.15},environment:{"environment.outside.pressure":102300,"environment.inside.relativeHumidity":.74,"environment.inside.voc":.03},performance:{"performance.beatAngle":l.M8C.degToRad(45),"performance.gybeAngle":l.M8C.degToRad(135),"performance.beatAngleVelocityMadeGood":6,"performance.gybeAngleVelocityMadeGood":5,"performance.targetAngle":l.M8C.degToRad(45),"performance.polarSpeed":8,"performance.polarSpeedRatio":.95,"performance.velocityMadeGood":5,"performance.polarVelocityMadeGood":6,"performance.polarVelocityMadeGoodRatio":.9},navigation:{"navigation.speedThroughWater":7,"navigation.headingTrue":l.M8C.degToRad(0),"navigation.courseOverGround":l.M8C.degToRad(20),"navigation.courseGreatCircle.nextPoint.bearingTrue":l.M8C.degToRad(30),"navigation.attitude.roll":l.M8C.degToRad(5)},racing:{"navigation.racing.layline":l.M8C.degToRad(10),"navigation.racing.layline.distance":100,"navigation.racing.layline.time":180,"navigation.racing.oppositeLayline":l.M8C.degToRad(45),"navigation.racing.oppositeLayline.distance":80,"navigation.racing.oppositeLayline.time":180,"navigation.racing.startLineStb":{latitude:0,longitude:0,altitude:0},"navigation.racing.startLinePort":{latitude:0,longitude:0,altitude:0},"navigation.racing.distanceStartline":50,"navigation.racing.timeToStart":120,"navigation.racing.timePortDown":60,"navigation.racing.timePortUp":70,"navigation.racing.timeStbdDown":65,"navigation.racing.timeStbdUp":75}},S=e=>{let{children:t}=e,[n,c]=(0,a.useState)({}),[d,u]=(0,a.useState)(!1),[g,h]=(0,a.useState)(b),f=e=>n[e]||null,m=(0,a.useRef)(null),p=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let e=!0,t=async()=>{let e=new Date,t=e.getFullYear(),n=(e.getMonth()+1).toString().padStart(2,"0"),i="tides/larochelle/".concat(n,"_").concat(t,".json"),a=await fetch(i);if(a.ok){let t=await a.json(),n=e.toISOString().split("T")[0];if(t[n]){let e=null,i=null,a=new Date,r=60*a.getHours()+a.getMinutes();if(t[n].forEach(t=>{let[n,a,o,l]=t,[s,c]=a.split(":").map(Number),d=60*s+c;"tide.high"===n&&(!e||Math.abs(r-d)<Math.abs(r-e.timeInMinutes))?e={height:parseFloat(o),time:a,timeInMinutes:d,coef:l}:"tide.low"===n&&(!i||Math.abs(r-d)<Math.abs(r-i.timeInMinutes))&&(i={height:parseFloat(o),time:a,timeInMinutes:d})}),e&&i){let t="".concat(a.getHours().toString().padStart(2,"0"),":").concat(a.getMinutes().toString().padStart(2,"0")),n=y(e.height,i.height,t,e.time,i.time);c(t=>({...t,"environment.tide.heightNow":n,"environment.tide.heightHigh":e.height,"environment.tide.heightLow":i.height,"environment.tide.timeLow":i.time,"environment.tide.timeHigh":e.time,"environment.tide.coeffNow":e.coef}))}else throw Error("Tide data for today is incomplete.")}}else console.warn("No tide data found")};return(async()=>{let{signalkUrl:t,debugMode:n}=o.Z.getAll(),i=()=>{p.current&&clearInterval(p.current);let e=0;p.current=setInterval(()=>{let t=Math.floor(91*Math.random())-45;e=(e+5)%360,c(n=>({...n,"steering.rudderAngle":l.M8C.degToRad(t),"environment.wind.angleApparent":l.M8C.degToRad(e),"environment.wind.angleTrueWater":x.wind["environment.wind.angleTrueWater"],"environment.wind.speedTrue":x.wind["environment.wind.speedTrue"],"environment.wind.speedApparent":x.wind["environment.wind.speedApparent"],...x.temperature,...x.environment,...x.performance,...x.navigation,...x.racing}))},1e3)};try{if(!n){let[n,i]=t.replace(/https?:\/\//,"").split(":"),a=new r.default({hostname:n||"localhost",port:parseInt(i)||3e3,useTLS:t.startsWith("https"),reconnect:!0,autoConnect:!1,notifications:!1,deltaStreamBehaviour:"self",sendMeta:"all",wsKeepaliveInterval:10});m.current=a,await a.connect(),a.on("delta",t=>{e&&t.updates.forEach(e=>{e.values&&e.values.forEach(e=>{c(t=>({...t,[e.path]:e.value}))})})})}n&&i()}catch(e){console.error("Failed to connect to SignalK:",e),i()}})(),t(),()=>{e=!1,m.current&&m.current.disconnect(),p.current&&clearInterval(p.current)}},[]),(0,i.jsx)(s.Provider,{value:{getSignalKValue:f,getBoatRotationAngle:()=>{let e=f("navigation.headingTrue")||f("navigation.headingMagnetic");return f("navigation.courseOverGroundTrue")||f("navigation.courseOverGroundMagnetic")||e||0},getAISBoatRotationAngle:e=>e?null!==e.cog&&void 0!==e.cog?e.cog:null!==e.cogMagnetic&&void 0!==e.cogMagnetic?e.cogMagnetic:null!==e.heading&&void 0!==e.heading?e.heading:null!==e.headingMagnetic&&void 0!==e.headingMagnetic?e.headingMagnetic:0:0,convertLatLonToXY:(e,t)=>{if(!e||!t)return{x:0,y:0};let n=t.lat*Math.PI/180,i=t.lon*Math.PI/180,a=e.lat*Math.PI/180,r=e.lon*Math.PI/180,o=r-i,l=Math.atan2(Math.sin(o)*Math.cos(a),Math.cos(n)*Math.sin(a)-Math.sin(n)*Math.cos(a)*Math.cos(o)),s=Math.sin((a-n)/2)*Math.sin((a-n)/2)+Math.cos(n)*Math.cos(a)*Math.sin((r-i)/2)*Math.sin((r-i)/2),c=2*Math.atan2(Math.sqrt(s),Math.sqrt(1-s))*6371e3;return{x:c*Math.sin(l),y:-c*Math.cos(l)}},nightMode:d,setNightMode:u,states:g,toggleState:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;h(n=>({...n,[e]:void 0!==t?t:!n[e]}))}},children:t})},C=()=>(0,a.useContext)(s),y=function(e,t,n,i,a){let r,o,l,s;if(!n||!i||!a||!/^\d{1,2}:\d{2}$/.test(n)||!/^\d{1,2}:\d{2}$/.test(i)||!/^\d{1,2}:\d{2}$/.test(a))return console.error("Invalid time format provided to calculateTideHeightUsingTwelfths"),(e+t)/2;let c=e=>{let[t,n]=e.split(":").map(Number);return 60*t+n},d=c(i),u=c(a),g=c(n),h=!1;u<=g&&g<=d?(h=!0,r=t,o=e,l=u,s=d):(r=e,o=t,l=d,s=u+(u<d?1440:0));let f=Math.abs(s-l),m=Math.abs(o-r),p=g-l;p<0&&(p+=1440);let v=m/12,w=0;return w=p<=f/6?v*Math.ceil(p/(f/12)):p<=2*f/6?2*v+v*Math.ceil((p-f/6)/(f/12)):p<=3*f/6?5*v:p<=4*f/6?8*v:p<=5*f/6?10*v:m,h?r+w:r-w}},63321:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});var i=JSON.parse('{"F":[{"name":"Default","modelPath":"default","capabilities":["navigation","rudder","sail","color"]},{"name":"Optimist","modelPath":"optimist","capabilities":["navigation","ais"]},{"name":"Sailboat","modelPath":"sailboat","capabilities":["navigation","ais"]},{"name":"Ship","modelPath":"ship","capabilities":["navigation","ais"]},{"name":"Windsurf","modelPath":"windsurf","capabilities":["navigation","ais"]}]}');class a{isLocalStorageAvailable(){try{return"undefined"!=typeof localStorage}catch(e){return!1}}loadConfig(){if(this.isLocalStorageAvailable()){let e=localStorage.getItem(this.configKey);if(!e)return this.saveConfig(this.defaultConfig),{...this.defaultConfig};try{return JSON.parse(e)}catch(e){return console.error("Failed to parse stored configuration:",e),{...this.defaultConfig}}}return{...this.inMemoryConfig}}saveConfig(e){this.config={...this.config,...e},this.isLocalStorageAvailable()?localStorage.setItem(this.configKey,JSON.stringify(this.config)):this.inMemoryConfig={...this.config}}get(e){return this.config[e]}set(e,t){this.config[e]=t,this.saveConfig(this.config)}resetConfig(){this.config={...this.defaultConfig},this.isLocalStorageAvailable()?localStorage.setItem(this.configKey,JSON.stringify(this.config)):this.inMemoryConfig={...this.defaultConfig}}getAll(){return{...this.config}}getDefaultConfig(){return{...this.defaultConfig}}getSelectedBoat(){let e=this.config.selectedBoat;return e?this.getBoatsData().find(t=>t.name===e):[]}getBoatsData(){return i.F}getComputedSignalKUrl(){return this.config.debugMode?"https://demo.signalk.org:443":"".concat(window.location.protocol,"//").concat(window.location.hostname).concat(window.location.port?":"+window.location.port:"")}constructor(){this.defaultConfig={signalkUrl:"https://demo.signalk.org:443",username:"",password:"",debugMode:!1,selectedBoat:"Default",primaryColor:null,metallicEffect:!1,aisLengthScalingFactor:.7,compassNorthUp:!1},this.configKey="ocearoConfig",this.inMemoryConfig={...this.defaultConfig},this.config=this.loadConfig()}}var r=new a},99670:function(e,t,n){"use strict";n.r(t),n.d(t,{VIEW_MODES:function(){return f},default:function(){return p}});var i=n(57437),a=n(2265),r=n(30166),o=n(20376),l=n.n(o),s=n(53082);class c extends a.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){this.setState({error:e,errorInfo:t}),console.error("Error caught in Error Boundary:",e,t)}render(){if(this.state.hasError){let{error:e,errorInfo:t}=this.state;return(0,i.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-screen bg-gray-100 text-gray-900",children:[(0,i.jsx)("h1",{className:"text-3xl font-bold text-red-600 mb-4",children:"Something went wrong."}),(0,i.jsxs)("p",{className:"text-lg mb-2",children:[(0,i.jsx)("strong",{children:"Error:"})," ",e?e.toString():"Unknown error"]}),t&&(0,i.jsxs)("details",{className:"whitespace-pre-wrap bg-gray-200 p-4 rounded-lg mb-4",children:[(0,i.jsx)("summary",{className:"cursor-pointer text-blue-500 underline",children:"Stack Trace"}),(0,i.jsx)("pre",{className:"mt-2",children:t.componentStack})]}),(0,i.jsxs)("div",{className:"flex space-x-4",children:[(0,i.jsx)("button",{onClick:this.handleRefresh,className:"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600",children:"Refresh Page"}),(0,i.jsx)("button",{onClick:this.handleExitFullscreen,className:"px-4 py-2 bg-green-500 text-white rounded hover:bg-green-600",children:"Exit Fullscreen"})]})]})}return this.props.children}constructor(e){super(e),this.handleRefresh=()=>{window.location.reload()},this.handleExitFullscreen=()=>{document.fullscreenElement&&(window.close(),document.exitFullscreen().catch(e=>{console.error("Failed to exit fullscreen:",e)}))},this.state={hasError:!1,error:null,errorInfo:null}}}let d=(0,r.default)(()=>n.e(252).then(n.bind(n,7252)),{loadableGenerated:{webpack:()=>[7252]},loading:()=>(0,i.jsx)("div",{className:"w-full h-full flex items-center justify-center",children:"Loading..."})}),u=(0,r.default)(()=>Promise.all([n.e(676),n.e(268),n.e(12)]).then(n.bind(n,12012)),{loadableGenerated:{webpack:()=>[12012]}}),g=(0,r.default)(()=>Promise.all([n.e(676),n.e(268),n.e(936)]).then(n.bind(n,72936)),{loadableGenerated:{webpack:()=>[72936]}}),h=(0,r.default)(()=>Promise.all([n.e(676),n.e(689),n.e(268),n.e(496),n.e(412)]).then(n.bind(n,6412)),{loadableGenerated:{webpack:()=>[6412]},loading:()=>(0,i.jsx)("div",{className:"w-full h-full flex items-center justify-center",children:(0,i.jsx)("div",{className:"text-white text-2xl",children:"Loading 3D View..."})}),ssr:!1}),f={BOAT:"boat",APP:"app",SPLIT:"split"},m=()=>window.innerWidth>=1366;function p(){let e=(0,a.useRef)(!1),[t,n]=(0,a.useState)(null),[r,o]=(0,a.useState)("navigation"),[p,v]=(0,a.useState)(!1),[w,M]=(0,a.useState)(!1);(0,a.useEffect)(()=>{let t;n(m()?f.SPLIT:f.BOAT),e.current=!0;let i=()=>{clearTimeout(t),t=setTimeout(()=>{n(m()?f.SPLIT:f.BOAT)},250)};return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i),clearTimeout(t)}},[]);let b=(0,a.useCallback)(()=>{v(e=>!e)},[]),x=(0,a.useCallback)(e=>{n(e)},[]),S=(0,a.useCallback)((e,t)=>{let n=window.innerWidth/5;t.x>n?x(f.BOAT):t.x<-n?x(f.APP):x(f.SPLIT)},[x]),C=(0,a.useCallback)(()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen().catch(e=>{console.error("Fullscreen error:",e.message)})},[]),y=(0,a.useCallback)(e=>{t===f.BOAT&&x(f.APP),o(e)},[t,x]),T=(0,a.useCallback)(()=>{w?(x(f.BOAT),M(!1)):(y("settings"),M(!0))},[w,x,y]),P=(0,a.useMemo)(()=>null===t?{}:{leftPane:"transition-all duration-300 ".concat(t===f.BOAT?"w-full":t===f.APP?"hidden":"w-2/5"," bg-leftPaneBg h-full relative"),rightPane:"transition-all duration-300 ".concat(t===f.APP?"w-full":t===f.BOAT?"hidden":"w-3/5"," h-full bg-rightPaneBg p-4")},[t]);return e.current?(0,i.jsx)(c,{children:(0,i.jsx)(s.YH,{children:(0,i.jsxs)("div",{className:"h-screen flex flex-col bg-black relative overflow-hidden",children:[(0,i.jsxs)("div",{className:"flex flex-1 min-h-0",children:[(0,i.jsx)("div",{className:P.leftPane,children:(0,i.jsx)(h,{})}),(0,i.jsx)(l(),{axis:"x",onDrag:S,position:{x:0,y:0},handle:".handle",bounds:"parent",children:(0,i.jsx)("div",{className:"handle w-1 bg-leftPaneBg h-full cursor-col-resize transition-all duration-200 flex items-center justify-center",children:(0,i.jsx)("div",{className:"rounded-full w-3 bg-gray-600 h-40 transition-all duration-200 hover:bg-gray-500"})})}),(0,i.jsx)("div",{className:P.rightPane,children:(0,i.jsx)(d,{view:r})})]}),(0,i.jsx)("div",{className:"w-full h-16 min-h-16 bg-black flex items-center justify-center shrink-0",children:(0,i.jsx)(u,{setRightView:y,toggleAppMenu:b,toggleSettings:T})}),p&&(0,i.jsx)(g,{currentViewMode:t,toggleViewMode:x,handleSetRightView:y,toggleFullscreen:C,setShowAppMenu:v})]})})}):(0,i.jsx)("div",{className:"h-screen bg-black flex items-center justify-center",children:(0,i.jsx)("div",{className:"animate-pulse text-white",children:"Loading..."})})}}},function(e){e.O(0,[870,746,971,117,744],function(){return e(e.s=87343)}),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
!function(){"use strict";var e,t,n,r,o,c,u,f,a,i={},d={};function l(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}},r=!0;try{i[e].call(n.exports,n,n.exports,l),r=!1}finally{r&&delete d[e]}return n.exports}l.m=i,e=[],l.O=function(t,n,r,o){if(n){o=o||0;for(var c=e.length;c>0&&e[c-1][2]>o;c--)e[c]=e[c-1];e[c]=[n,r,o];return}for(var u=1/0,c=0;c<e.length;c++){for(var n=e[c][0],r=e[c][1],o=e[c][2],f=!0,a=0;a<n.length;a++)u>=o&&Object.keys(l.O).every(function(e){return l.O[e](n[a])})?n.splice(a--,1):(f=!1,o<u&&(u=o));if(f){e.splice(c--,1);var i=r();void 0!==i&&(t=i)}}return t},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},l.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var o=Object.create(null);l.r(o);var c={};t=t||[null,n({}),n([]),n(n)];for(var u=2&r&&e;"object"==typeof u&&!~t.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(t){c[t]=function(){return e[t]}});return c.default=function(){return e},l.d(o,c),o},l.d=function(e,t){for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.f={},l.e=function(e){return Promise.all(Object.keys(l.f).reduce(function(t,n){return l.f[n](e,t),t},[]))},l.u=function(e){return"static/chunks/"+(({676:"870fdd6f",689:"b536a0f1",918:"0f8af13e"})[e]||e)+"."+({12:"a4273af9b82657f2",59:"c2dfec0c5e965cb5",73:"007aee417f54ff9d",79:"c90ea1de476d64c2",138:"b9389f70773e44e6",145:"9caac3d586b84999",154:"4e0902ce8b0f7ad1",188:"1839b14fedef7718",197:"bcdd8d0debcb7089",199:"8b338263b2a6aa7d",221:"a545399d0aaf207f",226:"8e9a3229837caa21",250:"b26c37701919cf5c",252:"7d334947f15ddf30",268:"8ed821c518bf7977",274:"f21dd1bea1190823",353:"c2bc481b7d81054f",412:"9a891f540865cbd8",496:"c440e137e5877fb7",610:"44fac6b8e6928564",676:"a18fe21a954fd3ab",687:"798c6b33d9165736",689:"0563944ec53282b3",728:"3987afab39b00f4e",751:"a180d553d77914d3",890:"5c51beba1d47e5ff",909:"5efafce6b421c83d",918:"af14efcb2d26c639",936:"e779b5632883831e",949:"e273523eaad35cc5",967:"83ea5cd9e6c9bb4c",975:"8821fdf115b619c5"})[e]+".js"},l.miniCssF=function(e){},l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="_N_E:",l.l=function(e,t,n,c){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var u,f,a=document.getElementsByTagName("script"),i=0;i<a.length;i++){var d=a[i];if(d.getAttribute("src")==e||d.getAttribute("data-webpack")==o+n){u=d;break}}u||(f=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,l.nc&&u.setAttribute("nonce",l.nc),u.setAttribute("data-webpack",o+n),u.src=l.tu(e)),r[e]=[t];var b=function(t,n){u.onerror=u.onload=null,clearTimeout(s);var o=r[e];if(delete r[e],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach(function(e){return e(n)}),t)return t(n)},s=setTimeout(b.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=b.bind(null,u.onerror),u.onload=b.bind(null,u.onload),f&&document.head.appendChild(u)},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.tt=function(){return void 0===c&&(c={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(c=trustedTypes.createPolicy("nextjs#bundler",c))),c},l.tu=function(e){return l.tt().createScriptURL(e)},l.p="/ocearo-ui/_next/",u={272:0,446:0},l.f.j=function(e,t){var n=l.o(u,e)?u[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(/^(272|446)$/.test(e))u[e]=0;else{var r=new Promise(function(t,r){n=u[e]=[t,r]});t.push(n[2]=r);var o=l.p+l.u(e),c=Error();l.l(o,function(t){if(l.o(u,e)&&(0!==(n=u[e])&&(u[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",c.name="ChunkLoadError",c.type=r,c.request=o,n[1](c)}},"chunk-"+e,e)}}},l.O.j=function(e){return 0===u[e]},f=function(e,t){var n,r,o=t[0],c=t[1],f=t[2],a=0;if(o.some(function(e){return 0!==u[e]})){for(n in c)l.o(c,n)&&(l.m[n]=c[n]);if(f)var i=f(l)}for(e&&e(t);a<o.length;a++)r=o[a],l.o(u,r)&&u[r]&&u[r][0](),u[r]=0;return l.O(i)},(a=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(f.bind(null,0)),a.push=f.bind(null,a.push.bind(a))}();
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
@font-face{font-family:__geistSans_873ced;src:url(/ocearo-ui/_next/static/media/4473ecc91f70f139-s.p.woff) format("woff");font-display:swap;font-weight:100 900}@font-face{font-family:__geistSans_Fallback_873ced;src:local("Arial");ascent-override:85.83%;descent-override:20.52%;line-gap-override:9.33%;size-adjust:107.19%}.__className_873ced{font-family:__geistSans_873ced,__geistSans_Fallback_873ced}.__variable_873ced{--font-geist-sans:"__geistSans_873ced","__geistSans_Fallback_873ced"}@font-face{font-family:__geistMono_6df010;src:url(/ocearo-ui/_next/static/media/463dafcda517f24f-s.p.woff) format("woff");font-display:swap;font-weight:100 900}@font-face{font-family:__geistMono_Fallback_6df010;src:local("Arial");ascent-override:69.97%;descent-override:16.73%;line-gap-override:7.61%;size-adjust:131.49%}.__className_6df010{font-family:__geistMono_6df010,__geistMono_Fallback_6df010}.__variable_6df010{--font-geist-mono:"__geistMono_6df010","__geistMono_Fallback_6df010"}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
|
|
2
|
+
! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com
|
|
3
|
+
*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.-left-10{left:-2.5rem}.-left-20{left:-5rem}.-right-1{right:-.25rem}.bottom-0{bottom:0}.bottom-2{bottom:.5rem}.bottom-20{bottom:5rem}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.right-0{right:0}.right-2{right:.5rem}.top-0{top:0}.top-1{top:.25rem}.top-2{top:.5rem}.top-6{top:1.5rem}.top-\[-1\.5rem\]{top:-1.5rem}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-10{height:2.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-60{height:15rem}.h-\[10\%\]{height:10%}.h-\[90\%\]{height:90%}.h-full{height:100%}.h-screen{height:100vh}.min-h-0{min-height:0}.min-h-16{min-height:4rem}.min-h-screen{min-height:100vh}.w-0\.5{width:.125rem}.w-1{width:.25rem}.w-2{width:.5rem}.w-2\/5{width:40%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/5{width:60%}.w-32{width:8rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-\[40\%\]{width:40%}.w-full{width:100%}.w-px{width:1px}.min-w-\[3\.5rem\]{min-width:3.5rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.origin-bottom{transform-origin:bottom}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.rotate-180{--tw-rotate:180deg}.rotate-180,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.resize{resize:both}.appearance-none{appearance:none}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2.5rem * var(--tw-space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.border-oGray{--tw-border-opacity:1;border-color:rgb(152 152 152/var(--tw-border-opacity,1))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity,1))}.bg-leftPaneBg{--tw-bg-opacity:1;background-color:rgb(14 14 14/var(--tw-bg-opacity,1))}.bg-oBlue{--tw-bg-opacity:1;background-color:rgb(9 191 255/var(--tw-bg-opacity,1))}.bg-oGray{--tw-bg-opacity:1;background-color:rgb(152 152 152/var(--tw-bg-opacity,1))}.bg-oGray2{--tw-bg-opacity:1;background-color:rgb(66 66 66/var(--tw-bg-opacity,1))}.bg-oGreen{--tw-bg-opacity:1;background-color:rgb(15 205 79/var(--tw-bg-opacity,1))}.bg-oNight{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-oRed{--tw-bg-opacity:1;background-color:rgb(204 0 12/var(--tw-bg-opacity,1))}.bg-oYellow{--tw-bg-opacity:1;background-color:rgb(255 190 0/var(--tw-bg-opacity,1))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.bg-rightPaneBg{--tw-bg-opacity:1;background-color:rgb(30 30 30/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity,1))}.bg-opacity-10{--tw-bg-opacity:0.1}.bg-opacity-70{--tw-bg-opacity:0.7}.object-contain{object-fit:contain}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem}.pb-2,.py-2{padding-bottom:.5rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-cyan-500{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity,1))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity,1))}.text-oBlue{--tw-text-opacity:1;color:rgb(9 191 255/var(--tw-text-opacity,1))}.text-oGray{--tw-text-opacity:1;color:rgb(152 152 152/var(--tw-text-opacity,1))}.text-oGreen{--tw-text-opacity:1;color:rgb(15 205 79/var(--tw-text-opacity,1))}.text-oNight{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-oRed{--tw-text-opacity:1;color:rgb(204 0 12/var(--tw-text-opacity,1))}.text-oYellow{--tw-text-opacity:1;color:rgb(255 190 0/var(--tw-text-opacity,1))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity,1))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-20{opacity:.2}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.drop-shadow-lg{--tw-drop-shadow:drop-shadow(0 10px 8px rgba(0,0,0,.04)) drop-shadow(0 4px 3px rgba(0,0,0,.1))}.drop-shadow-lg,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-opacity{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{--background:#fff;--foreground:#171717}@media (prefers-color-scheme:dark){:root{--background:#0a0a0a;--foreground:#ededed}}body{color:var(--foreground);background:var(--background);font-family:Arial,Helvetica,sans-serif}:root{--primary-color:#1976d2;--accent-color:#ff4081;--warn-color:#f44336;--background-color:#fff;--foreground-color:#000;--foreground-text:#212121}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.hover\:bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\:bg-gray-800\/10:hover{background-color:rgba(31,41,55,.1)}.hover\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.hover\:bg-oGray:hover{--tw-bg-opacity:1;background-color:rgb(152 152 152/var(--tw-bg-opacity,1))}.hover\:bg-oRed:hover{--tw-bg-opacity:1;background-color:rgb(204 0 12/var(--tw-bg-opacity,1))}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.hover\:text-oRed:hover{--tw-text-opacity:1;color:rgb(204 0 12/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:row-span-2{grid-row:span 2/span 2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}
|
package/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/ocearo-ui/_next/static/media/4473ecc91f70f139-s.p.woff" as="font" crossorigin="" type="font/woff"/><link rel="preload" href="/ocearo-ui/_next/static/media/463dafcda517f24f-s.p.woff" as="font" crossorigin="" type="font/woff"/><link rel="stylesheet" href="/ocearo-ui/_next/static/css/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/ocearo-ui/_next/static/media/4473ecc91f70f139-s.p.woff" as="font" crossorigin="" type="font/woff"/><link rel="preload" href="/ocearo-ui/_next/static/media/463dafcda517f24f-s.p.woff" as="font" crossorigin="" type="font/woff"/><link rel="stylesheet" href="/ocearo-ui/_next/static/css/b15803f8682c0ad5.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/ocearo-ui/_next/static/chunks/webpack-0478fe45d39f1cb5.js"/><script src="/ocearo-ui/_next/static/chunks/fd9d1056-50d0a3499460e502.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/117-1ad4a6b37bfc6738.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/main-app-ed02033afba81a43.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/bd904a5c-fce155daf9e9ba55.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/746-6aad160476963b55.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/app/page-e4b029f836d524dc.js" async=""></script><link rel="manifest" href="./manifest.json"/><meta name="theme-color" content="#4bbcd8"/><link rel="icon" type="image/png" href="./favicon-96x96.png" sizes="96x96"/><link rel="icon" type="image/svg+xml" href="./favicon.svg"/><link rel="shortcut icon" href="./favicon.ico"/><link rel="apple-touch-icon" sizes="180x180" href="./apple-touch-icon.png"/><meta name="apple-mobile-web-app-title" content="Ocearo"/><title>Ocearo</title><meta name="description" content="Sailing made smarter"/><meta name="next-size-adjust"/><script src="/ocearo-ui/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_873ced __variable_6df010 antialiased"><div class="h-screen bg-black flex items-center justify-center"><div class="animate-pulse text-white">Loading...</div></div><script src="/ocearo-ui/_next/static/chunks/webpack-0478fe45d39f1cb5.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/ocearo-ui/_next/static/media/4473ecc91f70f139-s.p.woff\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff\"}]\n2:HL[\"/ocearo-ui/_next/static/media/463dafcda517f24f-s.p.woff\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff\"}]\n3:HL[\"/ocearo-ui/_next/static/css/b15803f8682c0ad5.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"4:I[12846,[],\"\"]\n6:I[19107,[],\"ClientPageRoot\"]\n7:I[99670,[\"870\",\"static/chunks/bd904a5c-fce155daf9e9ba55.js\",\"746\",\"static/chunks/746-6aad160476963b55.js\",\"931\",\"static/chunks/app/page-e4b029f836d524dc.js\"],\"default\",1]\n8:I[4707,[],\"\"]\n9:I[36423,[],\"\"]\nb:I[61060,[],\"\"]\nc:[]\n"])</script><script>self.__next_f.push([1,"0:[\"$\",\"$L4\",null,{\"buildId\":\"ED8qlar36uSDUQ_aF23bd\",\"assetPrefix\":\"/ocearo-ui\",\"urlParts\":[\"\",\"\"],\"initialTree\":[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"__PAGE__\",{},[[\"$L5\",[\"$\",\"$L6\",null,{\"props\":{\"params\":{},\"searchParams\":{}},\"Component\":\"$7\"}],null],null],null]},[[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/css/b15803f8682c0ad5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"manifest\",\"href\":\"./manifest.json\"}],[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"content\":\"#4bbcd8\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"type\":\"image/png\",\"href\":\"./favicon-96x96.png\",\"sizes\":\"96x96\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"type\":\"image/svg+xml\",\"href\":\"./favicon.svg\"}],[\"$\",\"link\",null,{\"rel\":\"shortcut icon\",\"href\":\"./favicon.ico\"}],[\"$\",\"link\",null,{\"rel\":\"apple-touch-icon\",\"sizes\":\"180x180\",\"href\":\"./apple-touch-icon.png\"}],[\"$\",\"meta\",null,{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Ocearo\"}]]}],[\"$\",\"body\",null,{\"className\":\"__variable_873ced __variable_6df010 antialiased\",\"children\":[\"$\",\"$L8\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L9\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[]}]}]]}]],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$La\"],\"globalErrorComponent\":\"$b\",\"missingSlots\":\"$Wc\"}]\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"Ocearo\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Sailing made smarter\"}],[\"$\",\"meta\",\"4\",{\"name\":\"next-size-adjust\"}]]\n5:null\n"])</script></body></html>
|
package/index.txt
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
2:I[19107,[],"ClientPageRoot"]
|
|
2
|
-
3:I[99670,["870","static/chunks/bd904a5c-fce155daf9e9ba55.js","746","static/chunks/746-6aad160476963b55.js","931","static/chunks/app/page-
|
|
2
|
+
3:I[99670,["870","static/chunks/bd904a5c-fce155daf9e9ba55.js","746","static/chunks/746-6aad160476963b55.js","931","static/chunks/app/page-e4b029f836d524dc.js"],"default",1]
|
|
3
3
|
4:I[4707,[],""]
|
|
4
4
|
5:I[36423,[],""]
|
|
5
|
-
0:["
|
|
5
|
+
0:["ED8qlar36uSDUQ_aF23bd",[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",{"children":["__PAGE__",{},[["$L1",["$","$L2",null,{"props":{"params":{},"searchParams":{}},"Component":"$3"}],null],null],null]},[[[["$","link","0",{"rel":"stylesheet","href":"/ocearo-ui/_next/static/css/b15803f8682c0ad5.css","precedence":"next","crossOrigin":"$undefined"}]],["$","html",null,{"lang":"en","children":[["$","head",null,{"children":[["$","link",null,{"rel":"manifest","href":"./manifest.json"}],["$","meta",null,{"name":"theme-color","content":"#4bbcd8"}],["$","link",null,{"rel":"icon","type":"image/png","href":"./favicon-96x96.png","sizes":"96x96"}],["$","link",null,{"rel":"icon","type":"image/svg+xml","href":"./favicon.svg"}],["$","link",null,{"rel":"shortcut icon","href":"./favicon.ico"}],["$","link",null,{"rel":"apple-touch-icon","sizes":"180x180","href":"./apple-touch-icon.png"}],["$","meta",null,{"name":"apple-mobile-web-app-title","content":"Ocearo"}]]}],["$","body",null,{"className":"__variable_873ced __variable_6df010 antialiased","children":["$","$L4",null,{"parallelRouterKey":"children","segmentPath":["children"],"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[]}]}]]}]],null],null],["$L6",null]]]]
|
|
6
6
|
6:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"Ocearo"}],["$","meta","3",{"name":"description","content":"Sailing made smarter"}],["$","meta","4",{"name":"next-size-adjust"}]]
|
|
7
7
|
1:null
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[73],{69073:function(e,s,l){l.r(s);var a=l(57437),t=l(2265),n=l(63321);s.default=e=>{var s;let{onSave:l}=e,c=n.Z.getAll(),i=n.Z.getComputedSignalKUrl(),r=n.Z.getBoatsData(),[d,o]=(0,t.useState)(c),[m,x]=(0,t.useState)(!!c.username||!!c.password),[u,h]=(0,t.useState)(!1),[g,b]=(0,t.useState)(null),[p,j]=(0,t.useState)(!1),v=(0,t.useCallback)(e=>{j(JSON.stringify(e)!==JSON.stringify(c))},[c]);(0,t.useEffect)(()=>{(async()=>{let e=n.Z.getAll();o(e),e.selectedBoat&&b(r.find(s=>s.name===e.selectedBoat)||null)})()},[r]);let f=e=>{let s={...d,...e};o(s),v(s);let a={...s};u?m||(a.username="",a.password=""):(a.signalkUrl=i,a.username="",a.password=""),n.Z.saveConfig(a),null==l||l(a),j(!1)};return(0,a.jsxs)("div",{className:"p-4 text-white",children:[(0,a.jsx)("h1",{className:"text-2xl font-bold mb-4",children:"Ocearo Configuration"}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("h2",{className:"text-xl font-semibold",children:"Connection Settings"}),(0,a.jsx)("div",{children:(0,a.jsxs)("label",{className:"flex items-center",children:[(0,a.jsx)("input",{type:"checkbox",className:"mr-2",checked:u,onChange:e=>{h(e.target.checked),v(d)}}),"Set SignalK URL",!u&&(0,a.jsxs)("span",{className:"ml-2",children:["(",i,")"]})]})}),u&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block font-medium mb-1",children:"SignalK Server URL:"}),(0,a.jsx)("input",{type:"text",className:"border p-2 w-full text-black rounded",value:d.signalkUrl||"",onChange:e=>f({signalkUrl:e.target.value})})]}),(0,a.jsx)("div",{children:(0,a.jsxs)("label",{className:"flex items-center",children:[(0,a.jsx)("input",{type:"checkbox",className:"mr-2",checked:m,onChange:e=>{x(e.target.checked),v(d)}}),"Use Authentication"]})}),m&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block font-medium mb-1",children:"Username:"}),(0,a.jsx)("input",{type:"text",className:"border p-2 w-full text-black rounded",value:d.username||"",onChange:e=>f({username:e.target.value})})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block font-medium mb-1",children:"Password:"}),(0,a.jsx)("input",{type:"password",className:"border p-2 w-full text-black rounded",value:d.password||"",onChange:e=>f({password:e.target.value})})]})]})]})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("h2",{className:"text-xl font-semibold",children:"Vessel Settings"}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block font-medium mb-1",children:"Select Vessel:"}),(0,a.jsxs)("select",{className:"border p-2 w-full text-black rounded",value:d.selectedBoat||"",onChange:e=>{let s=e.target.value;b(r.find(e=>e.name===s)||null),f({selectedBoat:s})},children:[(0,a.jsx)("option",{value:"",children:"-- Select a Vessel --"}),r.map(e=>(0,a.jsx)("option",{value:e.name,children:e.name},e.name))]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"block font-medium mb-1",children:"Vessel Color:"}),(0,a.jsx)("input",{type:"color",className:"w-full h-10 rounded",value:d.primaryColor||"#000000",onChange:e=>f({primaryColor:e.target.value})})]}),(0,a.jsx)("div",{children:(0,a.jsxs)("label",{className:"flex items-center",children:[(0,a.jsx)("input",{type:"checkbox",className:"mr-2",checked:d.metallicEffect||!1,onChange:e=>f({metallicEffect:e.target.checked})}),"Enable Metallic Effect"]})})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("h2",{className:"text-xl font-semibold",children:"Advanced Settings"}),(0,a.jsx)("div",{children:(0,a.jsxs)("label",{className:"flex items-center",children:[(0,a.jsx)("input",{type:"checkbox",className:"mr-2",checked:d.debugMode||!1,onChange:e=>f({debugMode:e.target.checked,signalkUrl:i})}),"Debug Mode"]})}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("label",{className:"block text-sm font-medium",children:["AIS Length Scaling Factor",(0,a.jsx)("div",{className:"text-xs text-gray-500",children:"Controls the scaling of AIS boats on the map (default: 0.7)"})]}),(0,a.jsx)("input",{type:"number",className:"w-full p-2 border rounded text-black",value:d.aisLengthScalingFactor||.7,step:"0.1",min:"0.1",max:"2.0",onChange:e=>f({aisLengthScalingFactor:parseFloat(e.target.value)})})]}),g&&d.debugMode&&(0,a.jsxs)("div",{className:"space-y-2 text-sm text-gray-400",children:[(0,a.jsxs)("div",{children:["3D Model: ",g.modelPath]}),(0,a.jsxs)("div",{children:["Features: ",null===(s=g.capabilities)||void 0===s?void 0:s.join(", ")]})]})]}),(0,a.jsxs)("div",{className:"flex space-x-4 pt-4",children:[(0,a.jsx)("button",{onClick:()=>{let e={...d};u?m||(e.username="",e.password=""):(e.signalkUrl=i,e.username="",e.password=""),n.Z.saveConfig(e),null==l||l(e),j(!1)},disabled:!p,className:"px-4 py-2 rounded ".concat(p?"bg-oBlue text-white hover:bg-blue-600":"bg-gray-300 text-gray-500 cursor-not-allowed"),children:p?"Save Changes":"Saved"}),(0,a.jsx)("button",{onClick:()=>{let e=n.Z.getDefaultConfig();o(e),x(!1),h(!1),n.Z.saveConfig(e),j(!1)},className:"bg-oRed text-white px-4 py-2 rounded hover:bg-red-600",children:"Reset Configuration"})]})]})]})}}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[890],{29927:function(e,n,t){var o={"./default/Scene.jsx":[42967,967],"./optimist/Scene.jsx":[96154,154],"./sailboat/Scene.jsx":[82274,274],"./ship/Scene.jsx":[75221,221],"./windsurf/Scene.jsx":[92975,975]};function a(e){if(!t.o(o,e))return Promise.resolve().then(function(){var n=Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n});var n=o[e],a=n[0];return t.e(n[1]).then(function(){return t(a)})}a.keys=function(){return Object.keys(o)},a.id=29927,e.exports=a},10890:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return $}});var o=t(57437),a=t(2265),r=t(68328),i=t(44725),l=t(85903),s=t(5550),c=t(11909),u=t(21276),d=t(88345),g=t(72079),h=t(53082);let m=(0,d.g)({time:0,speed:1,scale:3,opacity:.5,color:new g.Ilk(7895160),foamColor:new g.Ilk(16777215),waterColor:new g.Ilk(26367),rainbowActive:0},"\n varying vec2 vUv;\n varying float vElevation;\n \n void main() {\n vUv = uv;\n \n // Add subtle vertex displacement for a wavy effect.\n float elevation = sin(position.x * 0.2 + position.y * 0.3) * 0.1;\n vElevation = elevation;\n vec3 newPosition = position + normal * elevation;\n \n gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);\n }\n ","\n uniform float time;\n uniform float speed;\n uniform float scale;\n uniform float opacity;\n uniform vec3 color;\n uniform vec3 foamColor;\n uniform vec3 waterColor;\n uniform float rainbowActive; // Controls whether the rainbow effect is applied.\n\n varying vec2 vUv;\n varying float vElevation;\n\n // Standard noise functions.\n vec4 permute(vec4 x) {\n return mod(((x * 34.0) + 1.0) * x, 289.0);\n }\n\n vec2 fade(vec2 t) {\n return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\n }\n\n float cnoise(vec2 P) {\n vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0);\n vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0);\n Pi = mod(Pi, 289.0);\n vec4 ix = Pi.xzxz;\n vec4 iy = Pi.yyww;\n vec4 fx = Pf.xzxz;\n vec4 fy = Pf.yyww;\n vec4 i = permute(permute(ix) + iy);\n vec4 gx = 2.0 * fract(i * 0.0243902439) - 1.0;\n vec4 gy = abs(gx) - 0.5;\n vec4 tx = floor(gx + 0.5);\n gx = gx - tx;\n vec2 g00 = vec2(gx.x, gy.x);\n vec2 g10 = vec2(gx.y, gy.y);\n vec2 g01 = vec2(gx.z, gy.z);\n vec2 g11 = vec2(gx.w, gy.w);\n vec4 norm = 1.79284291400159 - 0.85373472095314 *\n vec4(dot(g00, g00), dot(g10, g10), dot(g01, g01), dot(g11, g11));\n g00 *= norm.x;\n g10 *= norm.y;\n g01 *= norm.z;\n g11 *= norm.w;\n float n00 = dot(g00, vec2(fx.x, fy.x));\n float n10 = dot(g10, vec2(fx.y, fy.y));\n float n01 = dot(g01, vec2(fx.z, fy.z));\n float n11 = dot(g11, vec2(fx.w, fy.w));\n vec2 fade_xy = fade(Pf.xy);\n vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x);\n float n_xy = mix(n_x.x, n_x.y, fade_xy.y);\n return 2.3 * n_xy;\n }\n\n // HSL to RGB conversion function.\n vec3 hsl2rgb(vec3 hsl) {\n vec3 rgb = clamp(abs(mod(hsl.x * 6.0 + vec3(0.0, 4.0, 2.0), 6.0) - 3.0) - 1.0,\n 0.0, 1.0);\n rgb = rgb * rgb * (3.0 - 2.0 * rgb);\n return hsl.z + hsl.y * (rgb - 0.5) * (1.0 - abs(2.0 * hsl.z - 1.0));\n }\n\n void main() {\n // Combine multiple layers of noise to build a complex water pattern.\n float baseNoise = cnoise(vUv * scale + vec2(time * speed, 0.0));\n float detailNoise = cnoise(vUv * scale * 2.0 + vec2(time * speed * 1.5, 0.0)) * 0.5;\n float turbulence = cnoise(vUv * scale * 4.0 + vec2(time * speed * 2.0, 0.0)) * 0.25;\n float noise = baseNoise + detailNoise + turbulence;\n \n // Create a wake pattern.\n float wake = smoothstep(0.3, 0.7, 1.0 - abs(vUv.x - 0.5) * 2.0);\n \n // Create a foam effect.\n float foam = smoothstep(0.4, 0.6, noise + wake);\n \n // Mix water and foam colors, then blend in the base color.\n vec3 finalColor = mix(waterColor, foamColor, foam);\n finalColor = mix(finalColor, color, wake * 0.5);\n \n // Adjust dynamic opacity.\n float alpha = opacity * (wake + foam * 0.5) * (1.0 - vUv.y);\n \n // Add wave highlights.\n float highlight = smoothstep(0.2, 0.4, noise + wake) *\n (1.0 - smoothstep(0.4, 0.6, noise + wake));\n finalColor += highlight * foamColor * 0.5;\n \n // --- Rainbow Effect ---\n // When rainbowActive is enabled, overlay a dynamic rainbow gradient.\n if (rainbowActive > 0.5) {\n // Cycle the hue based on the horizontal UV and time.\n float rainbowHue = mod(vUv.x + time * 0.5, 1.0);\n vec3 rainbowColor = hsl2rgb(vec3(rainbowHue, 1.0, 0.5));\n // Blend the rainbow with the original finalColor.\n finalColor = mix(finalColor, rainbowColor, 0.7);\n }\n \n gl_FragColor = vec4(finalColor, alpha);\n }\n ");(0,u.e)({TrailShaderMaterial:m});let f=e=>{let{color:n="#787878",waterColor:t="#0066ff",foamColor:r="#ffffff",speed:i=1,scale:l=3,opacity:s=.5}=e,c=(0,a.useRef)(),{getSignalKValue:d}=(0,h.yC)();return(0,u.F)((e,n)=>{if(c.current){c.current.uniforms.time.value+=n;let e="auto"==d("steering.autopilot.state");c.current.uniforms.rainbowActive.value=e?1:0}}),(0,o.jsxs)("mesh",{rotation:[-Math.PI/2,0,Math.PI/2],position:[0,0,22.5],children:[(0,o.jsx)("planeGeometry",{args:[40,2.2,128,32]}),(0,o.jsx)("trailShaderMaterial",{ref:c,color:new g.Ilk(n),waterColor:new g.Ilk(t),foamColor:new g.Ilk(r),speed:i,scale:l,opacity:s,transparent:!0,depthWrite:!1,blending:g.WMw})]})};var v=t(54752),p=t(33866),x=t(79257);(0,u.e)({Water:v.B,Sky:p.q});var M=function(){let{nightMode:e}=(0,h.yC)(),n=(0,a.useRef)(),t=(0,a.useRef)(),r=(0,a.useRef)(),i=(0,u.D)(e=>e.gl),l=(0,u.D)(e=>e.scene),s=(0,a.useMemo)(()=>new g.Pa4,[]),c=(0,x.mE)("assets/moon.jpg"),d=(0,u.H)(g.dpR,"assets/waternormals.jpg");(0,a.useMemo)(()=>{d.wrapS=d.wrapT=g.rpg},[d]);let m=(0,a.useMemo)(()=>new g._12(5e3,5e3,32,32),[]),f=(0,a.useMemo)(()=>({textureWidth:256,textureHeight:256,waterNormals:d,sunDirection:new g.Pa4,sunColor:e?12642559:16777215,waterColor:e?6702:30668,distortionScale:2,format:i.encoding,reflectivity:0}),[d,i.encoding,e]);(0,u.F)(()=>{let o=e?45:2,a=e?30:180;if(t.current){let r=t.current.material.uniforms;e?(r.turbidity.value=.2,r.rayleigh.value=.5,r.mieCoefficient.value=.01,r.mieDirectionalG.value=.8):(r.turbidity.value=1,r.rayleigh.value=1,r.mieCoefficient.value=.003,r.mieDirectionalG.value=.5);let i=g.M8C.degToRad(90-o),l=g.M8C.degToRad(a);s.setFromSphericalCoords(1,i,l),r.sunPosition.value.copy(s),n.current&&n.current.material.uniforms.sunDirection.value.copy(s).normalize()}},[]),(0,a.useEffect)(()=>(e?l.background=new g.Ilk(2068):l.background=new g.Ilk(8900331),()=>{l.background=null,l.environment=null}),[l,e]);let v=0;return(0,u.F)((e,t)=>{(v+=t)>.1&&(n.current&&(n.current.material.uniforms.time.value+=.5*v),v=0)}),(0,o.jsxs)(o.Fragment,{children:[!e&&(0,o.jsx)("sky",{ref:t,scale:1e4}),e&&(0,o.jsxs)("mesh",{ref:r,position:[600,200,-1500],children:[(0,o.jsx)("sphereGeometry",{args:[80,32,32]}),(0,o.jsx)("meshStandardMaterial",{map:c,emissive:16777215,emissiveIntensity:.8})]}),(0,o.jsx)("water",{ref:n,args:[m,f],"rotation-x":-Math.PI/2,position:[0,-.5,0]})]})},w=t(14578),y=t(63321);let b=(0,a.createContext)(),j=()=>(0,a.useContext)(b),P=(e,n,t,o)=>{let a=t.split(".").reduce((e,n)=>null==e?void 0:e[n],o);void 0!==a&&(e[n]=a)},C=e=>{let{children:n}=e,[t,r]=(0,a.useState)({}),[i,l]=(0,a.useState)([]),s=(0,a.useRef)(null),c=(0,a.useRef)({});return(0,a.useEffect)(()=>{let e=async e=>{console.log("Fetching static vessel information...");try{let n=await e.API().then(e=>e.vessels()),t=Object.entries(n).map(e=>{let[n,t]=e,o={mmsi:n};return P(o,"name","name",t),P(o,"latitude","navigation.position.value.latitude",t),P(o,"longitude","navigation.position.value.longitude",t),P(o,"sog","navigation.speedOverGround.value",t),P(o,"cog","navigation.courseOverGroundTrue.value",t),P(o,"cogMagnetic","navigation.courseOverGroundMagnetic.value",t),P(o,"heading","navigation.headingTrue.value",t),P(o,"headingMagnetic","navigation.headingMagnetic.value",t),P(o,"length","design.length.value.overall",t),P(o,"beam","design.beam.value",t),P(o,"callsign","communication.callsignVhf",t),P(o,"shipType","design.aisShipType.value.id",t),o.lastUpdate=Date.now(),o});console.log("Fetched ".concat(t.length," vessels.")),l(t);let o={};t.forEach(e=>{e.mmsi&&(null!==e.latitude||null!==e.longitude)&&(o[e.mmsi]=e)}),Object.keys(o).length>0&&(console.log("Initializing AIS data with ".concat(Object.keys(o).length," vessels")),r(o))}catch(e){console.error("Error fetching static vessel info:",e)}},n=e=>{if(!(null==e?void 0:e.updates)){console.warn("Delta is missing or does not contain updates:",e);return}let n=e=>({mmsi:e,name:"unknown",latitude:null,longitude:null,sog:null,cog:null,cogMagnetic:null,heading:null,headingMagnetic:null}),t=e.context.replace("vessels.","");if(!t){console.warn("Update missing MMSI context:",e);return}c.current[t]=Date.now(),r(o=>{let a=o[t]||n(t);return a.lastUpdate=c.current[t],e.updates.forEach(e=>{e.values.forEach(e=>{switch(e.path){case"name":a.name=e.value;break;case"navigation.position":a.latitude=e.value.latitude,a.longitude=e.value.longitude;break;case"navigation.speedOverGround":a.sog=e.value;break;case"navigation.courseOverGroundTrue":a.cog=e.value;break;case"navigation.courseOverGroundMagnetic":a.cogMagnetic=e.value;break;case"navigation.headingTrue":a.heading=e.value;break;case"navigation.headingMagnetic":a.headingMagnetic=e.value}})}),{...o,[t]:a}})};return(async()=>{try{let{signalkUrl:t}=y.Z.getAll();if(console.log("SignalK URL:",t),!t)throw Error("SignalK URL is undefined or invalid.");let[o,a]=t.replace(/https?:\/\//,"").split(":");console.log("Connecting to SignalK at hostname: ".concat(o,", port: ").concat(a));let r=new w.default({hostname:o||"localhost",port:parseInt(a)||3e3,useTLS:t.startsWith("https"),reconnect:!0,autoConnect:!1,notifications:!1,subscriptions:[{context:"vessels.*",subscribe:[{path:"navigation.position"},{path:"navigation.speedOverGround"},{path:"navigation.courseOverGroundTrue"},{path:"navigation.courseOverGroundMagnetic"},{path:"navigation.headingTrue"},{path:"navigation.headingMagnetic"}]}]});s.current=r,await r.connect(),console.log("SignalK client connected."),await e(r),r.on("delta",n)}catch(e){console.error("Error connecting to SignalK:",e)}})(),()=>{var e;console.log("Disconnecting SignalK client..."),null===(e=s.current)||void 0===e||e.disconnect()}},[]),(0,o.jsx)(b.Provider,{value:{aisData:t,vesselIds:i},children:n})};var I=t(45476);let S=async e=>{try{let n=await t(29927)("./".concat(e,"/Scene.jsx"));return n.default?n.default:n.Model}catch(n){throw console.error("Error loading ".concat(e," component:"),n),n}},R=e=>0===e?"windsurf":30===e?"optimist":36===e?"sailboat":"ship",E=(0,a.forwardRef)((e,n)=>{let{position:t,visible:r,boatData:i,onHover:l}=e,[s,c]=(0,a.useState)(null),u=R(i.shipType);if((0,a.useEffect)(()=>{let e=!0;return S(u).then(n=>{e&&c(()=>n)}).catch(e=>console.error("Failed to load ".concat(u,":"),e)),()=>{e=!1}},[u]),!s)return null;let d=[i.name?function(e,n){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o=null!=n?"".concat(n).concat(t):"N/A";return"".concat(e,": ").concat(o,"\n")}("Name",i.name,""):"MMSI ".concat(i.mmsi.replace("urn:mrn:imo:mmsi:",""),"\n")].join(""),g=Math.max(i.length||10,4)/10;return(0,o.jsxs)("group",{ref:n,position:t,visible:r,children:[(0,o.jsx)("group",{onClick:e=>{e.stopPropagation(),s&&l&&l(i),console.log("Clicked on boat:",i.name||i.mmsi)},children:(0,o.jsx)(s,{scale:[g,g,g]})}),(0,o.jsx)("group",{position:[1.5,4,0],children:(0,o.jsx)(I.x,{position:[0,0,0],fontSize:.4,maxWidth:3,lineHeight:1.2,textAlign:"left",color:"white",anchorX:"center",anchorY:"middle",font:"fonts/Roboto-Bold.ttf",renderOrder:1e3,depthTest:!1,children:d})})]})});E.displayName="AISBoat";let O=e=>{if(e.material)return e;for(let n of e.children){let e=O(n);if(e)return e}return null},T=(e,n,t,o)=>void 0===e||void 0===n||void 0===t||void 0===o?{x:0,y:0}:{x:-(Math.PI/180*(n-o)*6371e3)*Math.cos(Math.PI/180*t),y:Math.PI/180*(e-t)*6371e3},_=(e,n)=>{let t=y.Z.get("aisLengthScalingFactor")||.7;if(null!=e.sog&&null!=e.cog){let o=.51444*e.sog;return{deltaX:o*n*Math.sin(e.cog*Math.PI/180)*t,deltaY:o*n*Math.cos(e.cog*Math.PI/180)*t}}return{deltaX:0,deltaY:0}},k=function(e,n,t){let o=!(arguments.length>3)||void 0===arguments[3]||arguments[3],a=y.Z.get("aisLengthScalingFactor")||.7,r=n*a,i=t*a;o?(e.position.x+=(r-e.position.x)*.1,e.position.z+=(i-e.position.z)*.1):e.position.set(r,0,i)},N=function(e,n){let t=!(arguments.length>2)||void 0===arguments[2]||arguments[2],o=-n*Math.PI/180%(2*Math.PI);t?e.children[0].rotation.y=e.children[0].rotation.y+(o-e.children[0].rotation.y)*.1:e.children[0].rotation.y=o,e.mmsi&&1>Math.abs(n%45)&&console.log("Boat ".concat(e.mmsi," rotation: ").concat(n,"\xb0 (").concat(o," rad)"))};var A=e=>{let{onUpdateInfoPanel:n}=e,{aisData:t,vesselIds:r}=j(),i=(0,a.useRef)({}),l=(0,a.useRef)(null),{getSignalKValue:s}=(0,h.yC)(),[c,d]=(0,a.useState)(null),g=(0,a.useRef)(0),m=()=>y.Z.get("aisLengthScalingFactor")||.7,f=500*m(),v=550*m(),p=3e3*m();(0,a.useRef)(!1),(0,u.F)(()=>{let e=s("navigation.position"),n=s("navigation.speedOverGround"),o=s("navigation.headingTrue")||s("navigation.headingMagnetic"),a=s("navigation.courseOverGroundTrue")||s("navigation.courseOverGroundMagnetic"),r=(a?180/Math.PI*a:null)||(o?180/Math.PI*o:null)||0;if(g.current=r,0!==r&&console.log("My boat rotation angle: ".concat(r.toFixed(1),"\xb0 (converted from ").concat((r*Math.PI/180).toFixed(2)," radians)")),l.current=e,!(null==e?void 0:e.latitude)||!(null==e?void 0:e.longitude)||!Object.keys(i.current).length)return;let c=performance.now();Object.values(t).forEach(t=>{if(null==t.latitude||null==t.longitude||!i.current[t.mmsi])return;let o=i.current[t.mmsi];if(!o)return;let a=t.lastUpdate||c,{x:r,y:l}=T(t.latitude,t.longitude,e.latitude,e.longitude),s=0,u=0;null!=n&&n>0&&c-a>1e3&&({deltaX:s,deltaY:u}=_(t,(c-a)/1e3));let d=r+s,h=l+u,x=Math.sqrt((d*m())**2+(h*m())**2);if(0===d&&0===h){o.visible=!1;return}if(x>0&&x<=p){o.visible=!0,o.currentColor||(o.currentColor=x<f?"red":"white");let e=o.currentColor;"red"===o.currentColor&&x>v?e="white":"white"===o.currentColor&&x<f&&(e="red"),k(o,d,h,!0);let n=null!==t.cog?180/Math.PI*t.cog:null!==t.cogMagnetic?180/Math.PI*t.cogMagnetic:null,a=null!==t.heading?180/Math.PI*t.heading:null!==t.headingMagnetic?180/Math.PI*t.headingMagnetic:null,r=null!==n?n:null!==a?a:0,i=r-g.current;o.mmsi&&Math.abs(r-(o.lastLoggedAngle||0))>10&&(console.log("Boat ".concat(o.mmsi," - Absolute angle: ").concat(r.toFixed(1),"\xb0, Relative: ").concat(i.toFixed(1),"\xb0")),o.lastLoggedAngle=r),N(o,i,!0);let l=O(o.children[0]);l?(o.redMaterial||(o.redMaterial=l.material.clone(),o.redMaterial.color.set("red")),o.whiteMaterial||(o.whiteMaterial=l.material.clone(),o.whiteMaterial.color.set("white")),"red"===e&&"red"!==o.currentMaterial?(l.material=o.redMaterial,o.currentMaterial="red",console.log("Swapped material to red for boat ".concat(t.mmsi))):"white"===e&&"white"!==o.currentMaterial&&(l.material=o.whiteMaterial,o.currentMaterial="white",console.log("Swapped material to white for boat ".concat(t.mmsi))),o.currentColor=e):console.warn("Material not found for boat ".concat(t.mmsi))}else o.visible=!1})});let x=(0,a.useMemo)(()=>{let e=l.current;return(null==e?void 0:e.latitude)&&(null==e?void 0:e.longitude)?r.filter(e=>{if(!e.mmsi||e.mmsi.startsWith("urn:mrn:signalk:uuid:")||e.mmsi.startsWith("227925790")||e.mmsi.startsWith("urn:mrn:imo:mmsi:230035780"))return!1;let n=t[e.mmsi];return!!n&&null!==n.latitude&&null!==n.longitude}).map(n=>{let a=t[n.mmsi],r=T(a.latitude,a.longitude,e.latitude,e.longitude);if(0===r.x&&0===r.y)return!1;let l=y.Z.get("aisLengthScalingFactor")||.7,s=r.x*l,u=r.y*l,g=Math.sqrt(s*s+u*u)<=p;return(0,o.jsx)(E,{ref:e=>{e&&(e.mmsi=n.mmsi,i.current[n.mmsi]=e)},position:[s,0,u],visible:g,boatData:{...n,...a},onHover:e=>{c&&e&&c.mmsi===e.mmsi?d(null):d(e)}},n.mmsi)}):[]},[r,t,p,c]),M=function(e,n){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return null==n||""===n||"string"==typeof n&&0===n.trim().length?null:(o&&(n=Math.abs(n)<=2*Math.PI?Math.round((180*n/Math.PI+360)%360):Math.round(n)),"".concat(e,": ").concat(n).concat(t))},w=c?[M("Name",c.name),M("MMSI",(e=>{if(!e)return null;let n=e;for(let e of["urn:mrn:imo:mmsi:","urn:mrn:signalk:uuid:"])if(n.startsWith(e)){n=n.substring(e.length);break}return n})(c.mmsi)),M("Distance",(e=>{if(!e||!l.current)return null;let n=l.current;if(!(null==n?void 0:n.latitude)||!(null==n?void 0:n.longitude)||!e.latitude||!e.longitude)return null;let{x:t,y:o}=T(e.latitude,e.longitude,n.latitude,n.longitude);return Math.round(Math.sqrt(t*t+o*o)/1852*10)/10})(c)," NM"),M("Length",c.length,"m"),M("Type",c.shipType),M("SOG",c.sog," kts"),M("COG",c.cog,"\xb0",!0),M("Heading",c.heading,"\xb0",!0),M("Beam",c.beam,"m"),M("Draft",c.draft,"m"),M("Callsign",c.callsign),M("Destination",c.destination)].filter(e=>null!==e).join("\n"):"";return a.useEffect(()=>{n&&n(w)},[c,w,n]),(0,o.jsxs)(o.Fragment,{children:[x,c&&(0,o.jsx)("group",{position:[0,1,0],children:(0,o.jsxs)("mesh",{scale:[.1,.1,.1],visible:!1,children:[(0,o.jsx)("boxGeometry",{}),(0,o.jsx)("meshBasicMaterial",{color:"yellow"})]})})]})},F=t(1);let G=a.memo(e=>{let{radius:n,isOuter:t,markerColorPrimary:r,markerColorGreen:i,markerColorRed:l}=e,s=(0,a.useMemo)(()=>{let e=[];for(let a=0;a<360;a+=10){let s=g.M8C.degToRad(a-90),c=a%30==0,u=t?c?.4:.2:c?.3:.15,d=(n+.5*u+.2)*Math.cos(s),h=(n+.5*u+.2)*Math.sin(s),m=t&&a>0&&a<61,f=t&&a>=300&&a<360,v=m?i:f?l:r;if(!t&&c){let n=0===a?"N":a.toString();e.push((0,o.jsx)(I.x,{characters:"N0123456789",position:[d,.01,h],color:r,fontSize:.5,rotation:[-Math.PI/2,0,Math.PI/2-s],font:"fonts/Roboto-Bold.ttf",anchorY:"middle",children:n},"text-".concat(a)))}else e.push((0,o.jsx)(F.aL,{args:[u/2,16,16],position:[d,0,h],children:(0,o.jsx)("meshBasicMaterial",{color:v})},"marker-".concat(t?"outer":"inner","-").concat(a)))}return e},[n,t,r,i,l]);return(0,o.jsx)(o.Fragment,{children:s})});G.displayName="StaticMarkers";let D=a.memo(e=>{let{innerRadius:n,outerRadius:t,dialColor:a,opacity:r=1,transparent:i=!1}=e;return(0,o.jsx)(F.FM,{args:[n,t,64],rotation:[Math.PI/2,0,0],children:(0,o.jsx)("meshBasicMaterial",{color:a,side:g.ehD,transparent:i,opacity:r})})});D.displayName="StaticRing";let L=e=>{let{outerRadius:n,innerRadius:t}=e,r=h.FV,i=h.HH,{nightMode:l,getSignalKValue:s}=(0,h.yC)(),c=l?h.eF:16777215,u=s("navigation.headingTrue")||s("navigation.headingMagnetic"),d=s("navigation.courseOverGroundTrue")||s("navigation.courseOverGroundMagnetic"),g=(0,a.useMemo)(()=>({innerRadius:t,outerRadius:n,dialColor:c,markerColorPrimary:0,markerColorGreen:r,markerColorRed:i}),[t,n,c,0,r,i]);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)("group",{rotation:[0,(d||u||0)+Math.PI,0],children:[(0,o.jsx)(D,{innerRadius:g.innerRadius,outerRadius:g.outerRadius,dialColor:g.dialColor}),(0,o.jsx)(G,{radius:g.innerRadius,isOuter:!1,markerColorPrimary:g.markerColorPrimary,markerColorGreen:g.markerColorGreen,markerColorRed:g.markerColorRed})]}),(0,o.jsxs)("group",{children:[(0,o.jsx)(D,{innerRadius:g.innerRadius+1,outerRadius:g.outerRadius+1,dialColor:g.dialColor,transparent:!0,opacity:.5}),(0,o.jsx)(G,{radius:g.innerRadius+1,isOuter:!0,markerColorPrimary:g.markerColorPrimary,markerColorGreen:g.markerColorGreen,markerColorRed:g.markerColorRed})]})]})};L.displayName="CompassDial";var U=t(95723),z=()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(L,{outerRadius:5.6,innerRadius:5}),(0,o.jsx)(U.Z,{outerRadius:5.6+1.1})]}),H=t(58181),W=JSON.parse('{"N":{"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],"angles":[52,60,75,90,110,120,135,150],"speeds":[6,8,10,12,14,16,20],"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]}}');let B={DEG2RAD:Math.PI/180,ROTATION_INTERPOLATION_FACTOR:.05,SOG_SMOOTHING_FACTOR:.1,DEFAULT_SOG:3,ANGLE_INCREMENT:10,SPHERE_SIZE:.4,SPHERE_SEGMENTS:32,DEFAULT_LINE_WIDTH:1,PLOTS_COUNT:5,FRAME_TO_MINUTE_RATIO:3600},Z=(e,n)=>26.8224*e*n*.1,q=(e,n,t)=>{if(!e||!n)return new g.Pa4(0,0,0);let o=e*B.DEG2RAD,a=Z(n,t);return new g.Pa4(a*Math.sin(o),0,-a*Math.cos(o))},K=(e,n)=>{if(!(null==e?void 0:e.length))return 0;let t=0,o=e.length-1;for(;t<o;){let a=Math.floor((t+o)/2);e[a]<n?t=a+1:o=a}return t},V=e=>{let{position:n,color:t}=e;return n?(0,o.jsxs)("mesh",{position:n,children:[(0,o.jsx)("sphereGeometry",{args:[B.SPHERE_SIZE,B.SPHERE_SEGMENTS,B.SPHERE_SEGMENTS]}),(0,o.jsx)("meshStandardMaterial",{color:t})]}):null},Y=e=>{let{points:n,color:t}=e;return(null==n?void 0:n.length)?(0,o.jsx)(H.x,{points:n,color:t,lineWidth:B.DEFAULT_LINE_WIDTH}):null},X=a.memo(e=>{let{timeInMinute:n,windSpeed:t}=e,r=(0,a.useRef)(W.N),i=(0,a.useCallback)((e,n,t,o)=>{if(!(null==e?void 0:e.length)||!(null==n?void 0:n.length)||e.length<=t||n.length<=t)return console.warn("Invalid angle or VMG data"),null;let a=e[t],r=n[t],i=a*B.DEG2RAD,l=Z(r,o);return new g.Pa4(l*Math.sin(i),0,-l*Math.cos(i))},[]),l=(0,a.useCallback)((e,n)=>{let{speeds:t,angles:o,beat_angle:a,beat_vmg:i,run_angle:l,run_vmg:s}=r.current;if(!(null==t?void 0:t.length)||!(null==o?void 0:o.length))return console.warn("Invalid polar data"),null;let c=(e,n,t)=>e+t*(n-e),u=[],d=(e,t,o)=>{for(let a=e;a<=t;a+=B.ANGLE_INCREMENT)u.push(q(a,o(a),n))};d(0,a[e]-B.ANGLE_INCREMENT,n=>c(0,i[e],n/a[e]));let h=q(a[e],i[e],n);u.push(h),o.forEach(t=>{if(t>a[e]&&t<l[e]){var o;let a=(null===(o=r.current[Math.floor(t)])||void 0===o?void 0:o[e])||0;u.push(q(t,a,n))}});let m=q(l[e],s[e],n);return u.push(m),d(l[e]+B.ANGLE_INCREMENT,180,()=>s[e]),new g.YT8(u,!0)},[]),s=(0,a.useMemo)(()=>{var e;let o=r.current;if(!(null==o?void 0:null===(e=o.speeds)||void 0===e?void 0:e.length))return console.warn("Invalid polar data structure"),{curve:null,beat:null,run:null};let a=K(o.speeds,t);return{curve:l(a,n),beat:i(o.beat_angle,o.beat_vmg,a,n),run:i(o.run_angle,o.run_vmg,a,n)}},[n,t,i,l]);return(0,o.jsx)(o.Fragment,{children:[0,-Math.PI].map((e,n)=>(0,o.jsxs)("group",{position:[0,-.7,0],rotation:[0,0,e],children:[s.curve&&(0,o.jsx)(Y,{points:s.curve.getPoints(100),color:h.gK}),(0,o.jsx)(V,{position:s.beat,color:h.FV}),(0,o.jsx)(V,{position:s.run,color:h.HH})]},n))})});X.displayName="PolarPlot";var Q=function(){let e=(0,a.useRef)([]),[n,t]=(0,a.useState)([]),r=(0,a.useRef)(0),i=(0,a.useRef)([]),l=(0,a.useRef)(B.DEFAULT_SOG),{getSignalKValue:s}=(0,h.yC)(),c=-s("environment.wind.angleApparent"),d=(0,h.HQ)(s("environment.wind.speedOverGround"))||0,m=s("navigation.speedOverGround")||B.DEFAULT_SOG,f=(0,a.useRef)(d),[v,p]=(0,a.useState)(Date.now()),x=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let n=Array.from({length:B.PLOTS_COUNT},(e,n)=>({id:n,timeInMinute:5*(n+1)}));return t(n),e.current=n.map(()=>new g.ZAu),i.current=Array(B.PLOTS_COUNT).fill(0),x.current=setInterval(()=>{p(Date.now()),r.current=0,console.log("Forcing redraw of polar plots")},12e4),()=>{x.current&&clearInterval(x.current)}},[]),(0,a.useEffect)(()=>{Math.abs(f.current-d)>5&&(console.log("Wind speed changed from ".concat(f.current," to ").concat(d,", recreating polar curves")),p(Date.now()),r.current=0,f.current=d)},[d]),(0,u.F)((t,o)=>{r.current+=1,l.current=g.M8C.lerp(l.current,m,B.SOG_SMOOTHING_FACTOR),n.forEach((n,t)=>{let o=e.current[t];if(o&&n.timeInMinute-r.current/B.FRAME_TO_MINUTE_RATIO>0){let e=i.current[t],n=g.M8C.lerp(e,c,B.ROTATION_INTERPOLATION_FACTOR);o.rotation.set(0,n,0),i.current[t]=n}})}),(0,o.jsx)(o.Fragment,{children:n.map((n,t)=>(0,o.jsx)("group",{ref:n=>{n&&(e.current[t]=n)},children:(0,o.jsx)(X,{timeInMinute:n.timeInMinute,windSpeed:d},"plot-".concat(v,"-").concat(t))},"".concat(n.id,"-").concat(v)))})},J=()=>{let{states:e,nightMode:n}=(0,h.yC)(),t=n?.2:.4;return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("ambientLight",{intensity:n?.3:.5}),(0,o.jsx)("directionalLight",{position:[0,70,-100],intensity:n?.8:1.4,castShadow:!0,"shadow-mapSize-width":1024,"shadow-mapSize-height":1024,"shadow-camera-near":.5,"shadow-camera-far":200,"shadow-camera-left":-50,"shadow-camera-right":50,"shadow-camera-top":50,"shadow-camera-bottom":-50,"shadow-bias":-.0001,color:n?"#c8e6ff":"#ffffff"}),(0,o.jsx)("pointLight",{position:[0,40,-80],intensity:2.5*t,distance:150,decay:2}),(0,o.jsx)("pointLight",{position:[0,30,100],intensity:.8*t,distance:120,decay:2})]})},$=e=>{let{onUpdateInfoPanel:n}=e,{states:t,getSignalKValue:u}=(0,h.yC)();y.Z.getAll();let d=(0,a.useRef)();return(0,o.jsxs)(a.Suspense,{fallback:(0,o.jsx)(r.V,{children:"Loading..."}),children:[(0,o.jsx)(i.c,{makeDefault:!0,fov:60,near:5,far:500,position:[0,5,20]}),(0,o.jsx)(l.z,{enableZoom:!0,enableRotate:!0,maxPolarAngle:Math.PI/2,minPolarAngle:Math.PI/4,enableDamping:!1,zoomSpeed:.5,rotateSpeed:.5}),(0,o.jsx)(s.qA,{files:"./assets/ocearo_env.hdr",background:!1,intensity:.8,resolution:256}),(0,o.jsx)(J,{}),(0,o.jsxs)("group",{position:[0,-3,0],children:[(0,o.jsx)(c.Z,{position:[0,0,.7],scale:[.7,.7,.7],ref:d,showSail:!0,onUpdateInfoPanel:n}),t.showOcean&&(0,o.jsx)(M,{}),(0,o.jsx)(f,{}),t.showPolar&&!t.showOcean&&(0,o.jsx)(Q,{}),t.ais&&(0,o.jsx)(C,{children:(0,o.jsx)(A,{onUpdateInfoPanel:n})}),(0,o.jsx)(z,{visible:!1})]})]})}},95723:function(e,n,t){"use strict";var o=t(57437),a=t(2265),r=t(40718),i=t.n(r),l=t(53082),s=t(72079),c=t(45476);let u={TRUE_WIND:1,APP_WIND:1},d=e=>{let{position:n=[0,0,0],rotation:t=[0,0,0],speed:a,color:r="#ffffff",fontSize:i=.5,textPosition:l=[0,.8,0],arrowSize:u=1}=e;return(0,o.jsxs)("group",{position:n,rotation:t,children:[(0,o.jsx)(c.x,{characters:".0123456789",color:r,fontSize:i*u,position:l,font:"fonts/Roboto-Bold.ttf",anchorX:"center",anchorY:"middle",children:a.toFixed(1)}),(0,o.jsxs)("mesh",{children:[(0,o.jsx)("shapeGeometry",{args:[new s.bnF([new s.FM8(0,0),new s.FM8(.5*u*Math.cos(5*Math.PI/6),.5*u*Math.sin(5*Math.PI/6)),new s.FM8(0,-.577*u),new s.FM8(-.5*u*Math.cos(5*Math.PI/6),.5*u*Math.sin(5*Math.PI/6)),new s.FM8(0,0)])]}),(0,o.jsx)("meshStandardMaterial",{color:r,side:s.ehD})]})]})};d.propTypes={position:i().oneOfType([i().instanceOf(s.Pa4),i().arrayOf(i().number)]).isRequired,rotation:i().arrayOf(i().number).isRequired,speed:i().number.isRequired,color:i().oneOfType([i().string,i().number]).isRequired,fontSize:i().number,textPosition:i().arrayOf(i().number),arrowSize:i().number};let g=e=>{let{outerRadius:n}=e,{getSignalKValue:t}=(0,l.yC)(),r=Math.PI/2-t("environment.wind.angleTrueGround")||0,i=(0,l.HQ)(t("environment.wind.speedOverGround"))||0,c=Math.PI/2-t("environment.wind.angleApparent")||0,g=(0,l.HQ)(t("environment.wind.speedApparent"))||0,h=(0,a.useMemo)(()=>new s.Pa4((n+.7)*Math.cos(r),0,-(n+.7)*Math.sin(r)),[n,r]),m=(0,a.useMemo)(()=>new s.Pa4((n+.7)*Math.cos(c),0,-(n+.7)*Math.sin(c)),[n,c]);return(0,o.jsxs)("group",{children:[i>0&&(0,o.jsx)(d,{position:h,rotation:[-Math.PI/2,0,-(Math.PI/2-r)],speed:i,color:"#0000FF",fontSize:u.TRUE_WIND}),g>0&&(0,o.jsx)(d,{position:m,rotation:[-Math.PI/2,0,-(Math.PI/2-c)],speed:g,color:l.gK,fontSize:u.APP_WIND})]})};g.propTypes={outerRadius:i().number.isRequired},n.Z=g}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[909],{11909:function(e,t,a){a.d(t,{Z:function(){return v}});var o=a(57437),r=a(2265),i=a(21276),s=a(53082),n=a(63321),l=a(41106),m=a(72079);function c(e,t,a){return e/1.9438444924574*Math.pow(t/10,a)*1.9438444924574}var h=a(53359),g=a(31378),u=a(70262),d=new WeakMap,p=new WeakMap;class f{calcShape(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;(0,u._)(this,p,[]);let t=this.chordTackLevel/((0,h._)(this,d)[(0,h._)(this,d).length-1].x-(0,h._)(this,d)[0].x);for(let a of(0,h._)(this,d)){let o=a.clone().multiplyScalar(t);1!==e&&(o.y*=e),(0,h._)(this,p).push(o)}let a=new m.FM8(0,0);for(let e of(0,h._)(this,p))e.y>a.y&&(a=e);this.draftDepth=a.y,this.draftPosition=a.x,this.girth=0;let o=null;for(let e of(0,h._)(this,p))null!==o&&(this.girth+=e.distanceTo(o)),o=e;this.sag=this.chordTackLevel-this.girth,this.entryAngleRad=(0,h._)(this,p)[1].clone().sub((0,h._)(this,p)[0]).angle(),this.exitAngleRad=(0,h._)(this,p)[(0,h._)(this,p).length-1].clone().sub((0,h._)(this,p)[(0,h._)(this,p).length-2]).angle()-2*Math.PI,this.mastAngleRad=this.calcMastAngle(),this.forceAngleRad=(this.entryAngleRad+this.exitAngleRad)/2,this.draftDepthRatio=this.draftDepth/this.chordTackLevel,this.draftPositionRatio=this.draftPosition/this.chordTackLevel}calcMastAngle(){let e=0,t=null,a=this.mastWidth*this.chordTackLevel/this.chordMastTop;for(let o of(0,h._)(this,p)){if(null!==t&&(e+=o.distanceTo(t))>=a)return o.angle();t=o}return NaN}getVerticesAngles(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,o=(this.girth-t)/(e-1),r=0,i=0,s=[],n=null;for(let l of(0,h._)(this,p)){if(null!==n&&(((i+=l.distanceTo(n))>=r*o+t||a&&i>a)&&(r++,s.push(l.angle())),r>=e))break;n=l}return s}pointAtGirthDistance(e){let t=0,a=null;for(let o of(0,h._)(this,p))if(null!==a&&(t+=o.distanceTo(a)),a=o,t>=e)return a.clone()}constructor(e,t,a,o=1){(0,g._)(this,d,{writable:!0,value:void 0}),(0,g._)(this,p,{writable:!0,value:void 0}),(0,u._)(this,d,[]),(0,u._)(this,p,[]),this.chordMastTop=t,this.chordTackLevel=e,this.mastWidth=a;let r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new m.FM8(t*e**2,2*t*e)},i=1.001+.95*(o-1)/10,s=(i-.001)/1e3,n=r(.001),l=r(i).clone().sub(n).angle(),c=new m.FM8(0,0);for(let e=.001;e<=i;e+=s){let t=r(e);t.sub(n),t.rotateAround(c,-l),(0,h._)(this,d).push(t)}this.calcShape(1-.25*(o-1)/10)}}let y=Math.floor(20),_=Math.ceil(160),M={waterlineToMastFootHeight:.45,maxMastRotation:Math.PI/2,maxChordRotationPerSailLevel:Math.PI/3*2};var x=e=>{let{windParams:t={speed:5,hellman:.27},boatParams:a={mastrotation:0,heading:130,speed:5},sailParams:i={mastArea:0,sailArea:0,cunningham:1,angleOfAttack:20}}=e,{getSignalKValue:n}=(0,s.yC)(),l=(0,r.useRef)(),h=(0,r.useRef)(null),g=(0,r.useRef)(0),u=(0,r.useRef)(null),d=(0,r.useRef)(null),p=(0,r.useRef)(),x=(0,r.useRef)({}),b=(0,r.useMemo)(()=>{let e=new m.ZAu,t=new m.b_z(.1,.2,12),a=new m.Wid({color:s.gK,opacity:.5,transparent:!0}),o=new m.Kj0(t,a);return o.position.set(0,-.1,0),e.add(o),e},[]);(0,r.useEffect)(()=>{let e=new m.ZAu,t={};for(let a=0;a<8;a+=.5){let o=b.clone();o.position.set(0,a,0),t[2*a]=o,e.add(o)}return e.position.set(0,0,0),p.current&&p.current.add(e),x.current=t,()=>{e.clear()}},[b]);let P=(e,t)=>{let a=x.current;if(!a){console.error("apparentWindField is not initialized.");return}for(let o=0;o<8;o+=.5){let r=c(e,o,t),i=a[2*o];if(!i){console.warn("Apparent wind field cone at height ".concat(o," is not defined."));continue}i.scale.set(.1*r,r,.1*r),i.rotation.set(0,-Math.PI,Math.PI/2)}},{geometry:I,sailClipWidthPerLevel:j}=(0,r.useMemo)(()=>{let e=new m.u9r,t=[],a=[],o=[];for(let e=0;e<=_;e++){let r,i;let s=Math.min(50*e,8e3);s<900?(r=3600,i=3800+-200*s/900):i=r=3600-3210*(s-900)/7100+600*Math.sin((s-900)/7100*Math.PI);let n=0;for(let o=0;o<y;o++){let l=r/(y-1),m=l*o-i,c=l;m>.1&&(c=m>l?0:l-m),t.push(0===o?0:(n+c)/1e3,s/1e3,0),n=0===o?0:n+c;let h=Math.floor(_/10);a.push(...e%h==0?[.8,0,.047]:[.596,.596,.596])}o.push(i===r?null:i)}let r=[];for(let e=0;e<_;e++)for(let t=1;t<y;t++){let a=e*y+t;r.push(a-1,a,a+y-1,a,a+y,a+y-1)}return e.setAttribute("position",new m.a$l(t,3)),e.setAttribute("color",new m.a$l(a,3)),e.setIndex(r),e.computeVertexNormals(),{geometry:e,sailClipWidthPerLevel:o}},[]),v=(0,r.useMemo)(()=>n("environment.wind.angleApparent")||0,[n]),A=(0,r.useMemo)(()=>n("environment.wind.speedApparent")||0,[n]);return(0,r.useEffect)(()=>{if(!l.current)return;P(A,t.hellman);let e=l.current.geometry,o=e.attributes.position.array;i.cunningham!==u.current&&(d.current=new f(3600,390,200,i.cunningham),u.current=i.cunningham),h.current||(h.current=e.clone());let r=1e3*M.waterlineToMastFootHeight,s=v;for(;s<0;)s+=2*Math.PI;for(;s>=2*Math.PI;)s-=2*Math.PI;let n=s>Math.PI?-1:1,p=s;p>Math.PI&&(p=2*Math.PI-p);let x=m.M8C.degToRad(i.angleOfAttack),b=d.current.mastAngleRad;p<.01&&(x=0);let I=Math.min(p-x+b,M.maxMastRotation),w=new m.Pa4(0,1,0),R=null;for(let e=0;e<=_;e++){c(A,(50*e+r)/1e3,t.hellman);let a=p-x;a<0?a=0:a>Math.PI/2&&(a=Math.PI/2);let i=a-I;R&&i-R>M.maxChordRotationPerSailLevel&&(i=R+M.maxChordRotationPerSailLevel),R=i;let s=j[e],l=d.current.getVerticesAngles(y,200,s);for(let t=1;t<y;t++){let a=(e*y+t)*3,r=new m.Pa4(h.current.attributes.position.array[a],h.current.attributes.position.array[a+1],h.current.attributes.position.array[a+2]);r.applyAxisAngle(w,-(i+l[t])*n),o[a]=r.x,o[a+1]=r.y,o[a+2]=r.z}}e.attributes.position.needsUpdate=!0;let k={...a,mastrotation:I*n};l.current&&l.current.rotateY(g.current-k.mastrotation),g.current=k.mastrotation},[A,v,t.hellman,i.cunningham,i.angleOfAttack,a,j]),(0,o.jsxs)("mesh",{ref:l,position:[0,2,-1],rotation:[0,-Math.PI/2,0],children:[(0,o.jsx)("bufferGeometry",{...I}),(0,o.jsx)("group",{ref:p}),(0,o.jsx)("meshBasicMaterial",{vertexColors:!0,transparent:!0,opacity:.7,side:m.ehD})]})};let b=a(40257).env.ASSET_PREFIX||"./",P=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default";return"".concat(b,"/boats/").concat(e,"/assets/scene-transformed.glb")},I={name:"Default",modelPath:"default",capabilities:["navigation","rudder","sail","color"]},j=(0,r.forwardRef)((e,t)=>{let{showSail:a=!1,onUpdateInfoPanel:c,...h}=e,g=(0,r.useRef)(),u=(0,r.useRef)(),{getSignalKValue:d}=(0,s.yC)(),p=n.Z.getAll(),[f,y]=(0,r.useState)(()=>n.Z.getSelectedBoat()||I);(0,r.useEffect)(()=>{y(n.Z.getSelectedBoat()||I)},[p]);let _=(0,r.useMemo)(()=>P(f.modelPath),[f]),M=(null==f?void 0:f.capabilities)||[],{nodes:j,materials:v}=(0,l.L)(_,"".concat(b,"/draco/")),A=(0,r.useMemo)(()=>({primaryColor:p.primaryColor,metallicEffect:p.metallicEffect||!1}),[p.primaryColor,p.metallicEffect]);(0,r.useEffect)(()=>{if("default"===f.modelPath){if(!(null==v?void 0:v.fiberglass))return;v.fiberglass.color.set(A.primaryColor),v.fiberglass.metalness=A.metallicEffect?1:0,v.fiberglass.roughness=A.metallicEffect?.2:1}else g.current&&g.current.traverse(e=>{e.isMesh&&e.material&&(Array.isArray(e.material)?e.material.forEach(e=>{e.color.set(A.primaryColor),e.metalness=A.metallicEffect?1:0,e.roughness=A.metallicEffect?.2:1}):(e.material.color.set(A.primaryColor),e.material.metalness=A.metallicEffect?1:0,e.material.roughness=A.metallicEffect?.2:1))});Object.values(v).forEach(e=>{e.map&&(e.map.minFilter=m.wem,e.map.magFilter=m.wem,e.map.anisotropy=1)})},[v,A,f,g]);let w=(0,r.useMemo)(()=>new m.yGw,[]),R=(0,r.useMemo)(()=>new m.Pa4(1,0,0),[]);(0,i.F)(()=>{if(!g.current)return;let e=d("navigation.attitude.roll")||0,t=d("steering.rudderAngle")||0;g.current.rotation.z!==e&&(g.current.rotation.z=e),u.current&&(w.makeRotationFromEuler(new m.USm(-Math.PI/2,Math.PI/2,0)),u.current.setRotationFromMatrix(w),u.current.rotateOnAxis(R,-m.M8C.degToRad(180*t/Math.PI)))});let k=(0,r.useMemo)(()=>{let e={Default:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("mesh",{geometry:j.baba_metal_0.geometry,material:v.metal,position:[.24,.895,-5.546],rotation:[-Math.PI/2,0,1.968],scale:.027}),(0,o.jsx)("mesh",{geometry:j.camadadirek_fiberglass_0.geometry,material:v.fiberglass,position:[0,5.267,-3.711],rotation:[2.054,0,Math.PI],scale:[-.042,.042,4.707]}),(0,o.jsx)("mesh",{geometry:j.camadanyelkeni_bez_0.geometry,material:v.mcaterial,position:[0,5.267,-3.711],rotation:[2.054,0,Math.PI],scale:[-.042,.042,4.707]}),(0,o.jsx)("mesh",{geometry:j.camadaonbaglay_metal_0.geometry,material:v.metal,position:[0,.891,-5.958],rotation:[-Math.PI/2,0,0],scale:.02}),(0,o.jsx)("mesh",{geometry:j.capa_metal_0.geometry,material:v.metal,position:[0,.671,-6.173],rotation:[-Math.PI/2,0,0],scale:.348}),(0,o.jsx)("mesh",{geometry:j.direk_fiberglass_0.geometry,material:v.fiberglass,position:[0,4.315,-1.056],rotation:[Math.PI/2,0,Math.PI],scale:[-.113,.113,5.203]}),(0,o.jsx)("mesh",{geometry:j.duman_ahsap_0.geometry,material:v.ahsap,position:[-.011,.854,3.487],rotation:[Math.PI,0,Math.PI/2],scale:[.045,.045,.011]}),(0,o.jsx)("mesh",{geometry:j.dumenyuvasi_ahsap_0.geometry,material:v.ahsap,position:[-.011,.299,3.441],rotation:[-Math.PI/2,0,1.571],scale:.094}),(0,o.jsx)("mesh",{geometry:j.dumenyuvasi_cam_0.geometry,material:v.material_5,position:[-.011,.299,3.441],rotation:[-Math.PI/2,0,1.571],scale:.094}),(0,o.jsx)("mesh",{geometry:j.dumenyuvasi_fiberglass_0.geometry,material:v.fiberglass,position:[-.011,.299,3.441],rotation:[-Math.PI/2,0,1.571],scale:.094}),(0,o.jsx)("mesh",{geometry:j.govde_fiberglass2_0.geometry,material:v.fiberglass2,position:[0,.32,-.897],rotation:[0,Math.PI/2,0],scale:[5.11,.454,1.212]}),(0,o.jsx)("mesh",{geometry:j.govde_fiberglass_0.geometry,material:v.fiberglass,position:[0,.32,-.897],rotation:[0,Math.PI/2,0],scale:[5.11,.454,1.212]}),(0,o.jsx)("mesh",{geometry:j.govde_metal_0.geometry,material:v.metal,position:[0,.32,-.897],rotation:[0,Math.PI/2,0],scale:[5.11,.454,1.212]}),(0,o.jsx)("mesh",{geometry:j.halattutucu_fiberglass2_0.geometry,material:v.fiberglass2,position:[-1.044,.939,1.809],rotation:[-Math.PI/2,0,0],scale:[.016,.059,.016]}),(0,o.jsx)("mesh",{geometry:j.ip001_metal_0.geometry,material:v.metal,position:[-.231,7.608,-.621],rotation:[-2.322,.222,-1.556],scale:[.007,.007,.011]}),(0,o.jsx)("mesh",{geometry:j.pervan_fiberglass_0.geometry,material:v.fiberglass,position:[0,-1.005,1.561],rotation:[-Math.PI/2,Math.PI/2,0],scale:[.154,.094,.104]}),(0,o.jsx)("mesh",{geometry:j.pervane_metal_0.geometry,material:v.metal,position:[0,-1.122,1.75],scale:.034}),(0,o.jsx)("mesh",{ref:u,geometry:j.rudder_fiberglass_0.geometry,material:v.fiberglass,position:[0,-1.153,3.486],rotation:[-Math.PI/2,Math.PI/2,0],scale:[.573,.262,.262]}),(0,o.jsx)("mesh",{geometry:j.salma_fiberglass_0.geometry,material:v.fiberglass,position:[0,-1.953,-.739],scale:[.149,.108,.756]}),(0,o.jsx)("mesh",{geometry:j.ustcam_cam_0.geometry,material:v.material_5,position:[-.337,.974,-3.127],rotation:[-Math.PI/2,0,0],scale:[-.183,.133,.025]}),(0,o.jsx)("mesh",{geometry:j.ustcam_fiberglass_0.geometry,material:v.fiberglass,position:[-.337,.974,-3.127],rotation:[-Math.PI/2,0,0],scale:[-.183,.133,.025]}),(0,o.jsx)("mesh",{geometry:j.ustgovde_fiberglass_0.geometry,material:v.fiberglass,position:[0,.832,-2.741],rotation:[-Math.PI/2,0,0],scale:[.566,.7,1.212]}),(0,o.jsx)("mesh",{geometry:j.ustgovdekzak_ahsap_0.geometry,material:v.ahsap,position:[0,.862,-2.741],rotation:[-Math.PI/2,0,0],scale:[.566,.7,1.212]}),(0,o.jsx)("mesh",{geometry:j.vinc_metal_0.geometry,material:v.metal,position:[-1.07,.977,2.02],rotation:[-Math.PI/2,0,0],scale:.065}),(0,o.jsx)("mesh",{geometry:j.yancam002_cam_0.geometry,material:v.material_5,position:[-.984,.591,-3.772],rotation:[Math.PI,-1.241,-Math.PI/2],scale:[.095,.28,.014]}),(0,o.jsx)("mesh",{geometry:j.yancam002_fiberglass_0.geometry,material:v.fiberglass,position:[-.984,.591,-3.772],rotation:[Math.PI,-1.241,-Math.PI/2],scale:[.095,.28,.014]}),(0,o.jsx)("mesh",{geometry:j.yankoruma_metal_0.geometry,material:v.metal,position:[-1.641,.946,2.868],rotation:[-Math.PI/2,0,0],scale:[.01,.01,.159]}),(0,o.jsx)("mesh",{geometry:j.yankoruma_metal_0001.geometry,material:v.metal,position:[-1.641,.946,2.868],rotation:[-Math.PI/2,0,0],scale:[.01,.01,.159]}),(0,o.jsx)("mesh",{geometry:j.yankoruma_metal_0002.geometry,material:v.metal,position:[-1.641,.946,2.868],rotation:[-Math.PI/2,0,0],scale:[.01,.01,.159]}),(0,o.jsx)("mesh",{geometry:j.zincir_metal_0.geometry,material:v.metal,position:[-.001,.88,-6.258],rotation:[-1.56,-.031,-.149],scale:.004}),(0,o.jsx)("mesh",{geometry:j.zincir_metal_0001.geometry,material:v.metal,position:[-.001,.88,-6.258],rotation:[-1.56,-.031,-.149],scale:.004}),(0,o.jsx)("mesh",{geometry:j.zincirdeposu_fiberglass2_0.geometry,material:v.fiberglass2,position:[0,.863,-5.779],rotation:[-Math.PI/2,0,0],scale:[.103,.088,.009]}),(0,o.jsx)("mesh",{geometry:j.zincirmakara_metal_0.geometry,material:v.metal,position:[0,.869,-6.305],rotation:[-2.159,1.564,.59],scale:[.01,.01,.016]}),(0,o.jsx)("mesh",{geometry:j.zincirray_ahsap_0.geometry,material:v.ahsap,position:[0,.864,-6.113],rotation:[-Math.PI/2,0,0],scale:[.017,.181,.003]})]}),Optimist:()=>(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("mesh",{geometry:j.body_body_0.geometry,material:v.body,position:[-.054,.272,-.022],rotation:[-1.571,.01,.01],scale:[1,5.242,1]}),(0,o.jsx)("mesh",{geometry:j.boom_aluminium_0.geometry,material:v.aluminium,position:[-.019,2.771,.964],rotation:[0,.01,-.01],scale:[.15,.15,4.609]}),(0,o.jsx)("mesh",{geometry:j.rubber_joint__0.geometry,material:v.rubber_joint__0,position:[-.008,1.407,3.453],rotation:[1.571,-.01,-.01],scale:[-.037,.056,.079]}),(0,o.jsx)("mesh",{geometry:j.sail_sail_0.geometry,material:v.sail,position:[.038,8.739,.698],rotation:[2.356,1.557,2.356],scale:[-5.728,4.361,4.361]})]}),Ship:()=>(0,o.jsx)("mesh",{geometry:j.Object_10.geometry,material:v.material_0,position:[0,-.55,0],rotation:[-1.558,.002,3.139],scale:.004}),Windsurf:()=>(0,o.jsx)("mesh",{geometry:j["body_Material_#30_0"].geometry,material:v.Material_30,position:[-.007,0,-.071],rotation:[-Math.PI/2,0,0],scale:.002}),Sailboat:()=>(0,o.jsx)("mesh",{geometry:j.sailboat.geometry,material:v.texture,position:[0,-1.5,0],rotation:[-Math.PI,.011,-Math.PI],scale:.219})};return e[f.name]||e.Default},[f.name,j,v]),T=(0,r.useMemo)(()=>({name:f.name||"Sailboat",type:"sailboat",trueWindAngle:d("environment.wind.angleTrueWater")||0,trueWindSpeed:d("environment.wind.speedTrue")||0,appWindAngle:d("environment.wind.angleApparent")||0,appWindSpeed:d("environment.wind.speedApparent")||0,beatAngle:d("performance.beatAngle")||0,polarSpeed:d("performance.polarSpeed")||0,polarSpeedRatio:d("performance.polarSpeedRatio")||0,velocityMadeGood:d("performance.velocityMadeGood")||0,speedThroughWater:d("navigation.speedThroughWater")||0,headingTrue:d("navigation.headingTrue")||0,courseOverGroundTrue:d("navigation.courseOverGroundTrue")||0,position:d("navigation.position")||{latitude:0,longitude:0}}),[d,f.name]),S=e=>{let t=e=>Math.round((180*e/Math.PI+360)%360);return["Name: ".concat(e.name),"Wind: ".concat(e.trueWindSpeed.toFixed(1),"kn @ ").concat(t(e.trueWindAngle),"\xb0"),"App Wind: ".concat(e.appWindSpeed.toFixed(1),"kn @ ").concat(t(e.appWindAngle),"\xb0"),"Speed: ".concat(e.speedThroughWater.toFixed(1),"kn"),"Heading: ".concat(t(e.headingTrue),"\xb0"),"COG: ".concat(t(e.courseOverGroundTrue),"\xb0"),"VMG: ".concat(e.velocityMadeGood.toFixed(1),"kn"),"Polar: ".concat((100*e.polarSpeedRatio).toFixed(0),"%"),"Position: ".concat(e.position.latitude.toFixed(4),"\xb0, ").concat(e.position.longitude.toFixed(4),"\xb0")].join("\n")},[F,W]=(0,r.useState)(!1);return(0,o.jsxs)("group",{...h,ref:g,dispose:null,onClick:()=>{let e=!F;W(e),c&&c(e?S(T):null)},children:[M.includes("sail")&&a&&(0,o.jsx)(x,{}),(0,o.jsx)(k,{})]})});l.L.preload(P(),"".concat(b,"/draco/")),j.displayName="SailBoat3D";var v=j}}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{87343:function(e,t,n){Promise.resolve().then(n.bind(n,99670))},53082:function(e,t,n){"use strict";n.d(t,{$:function(){return m},FV:function(){return u},G5:function(){return h},HH:function(){return d},HQ:function(){return f},NU:function(){return p},YH:function(){return b},eF:function(){return g},gK:function(){return c},yC:function(){return x}});var i=n(57437),a=n(2265),r=n(14578),o=n(63321),l=n(72079);let s=(0,a.createContext)(),c="#09bfff",d="#cc000c",u="#0fcd4f",g="#ef4444",h=e=>null!=e?Math.round((e-273.15)*10)/10:null,f=e=>null!=e?Math.round(19.4384*e)/10:null,m=f,p=e=>null!=e?Math.round(e/100*10)/10:null,v={autopilot:!0,anchorWatch:!1,parkingMode:!1,mob:!1,showOcean:!1,ais:!1,showPolar:!0},w={wind:{"environment.wind.angleTrueWater":l.M8C.degToRad(0),"environment.wind.speedTrue":10.288,"environment.wind.angleApparent":l.M8C.degToRad(0),"environment.wind.speedApparent":10.288},temperature:{"environment.water.temperature":290.15,"environment.outside.temperature":294.15,"propulsion.main.exhaustTemperature":368.15,"environment.inside.fridge.temperature":277.15},environment:{"environment.outside.pressure":102300,"environment.inside.relativeHumidity":.74,"environment.inside.voc":.03},performance:{"performance.beatAngle":l.M8C.degToRad(45),"performance.gybeAngle":l.M8C.degToRad(135),"performance.beatAngleVelocityMadeGood":6,"performance.gybeAngleVelocityMadeGood":5,"performance.targetAngle":l.M8C.degToRad(45),"performance.polarSpeed":8,"performance.polarSpeedRatio":.95,"performance.velocityMadeGood":5,"performance.polarVelocityMadeGood":6,"performance.polarVelocityMadeGoodRatio":.9},navigation:{"navigation.speedThroughWater":7,"navigation.headingTrue":l.M8C.degToRad(0),"navigation.courseOverGround":l.M8C.degToRad(20),"navigation.courseGreatCircle.nextPoint.bearingTrue":l.M8C.degToRad(30),"navigation.attitude.roll":l.M8C.degToRad(5)},racing:{"navigation.racing.layline":l.M8C.degToRad(10),"navigation.racing.layline.distance":100,"navigation.racing.layline.time":180,"navigation.racing.oppositeLayline":l.M8C.degToRad(45),"navigation.racing.oppositeLayline.distance":80,"navigation.racing.oppositeLayline.time":180,"navigation.racing.startLineStb":{latitude:0,longitude:0,altitude:0},"navigation.racing.startLinePort":{latitude:0,longitude:0,altitude:0},"navigation.racing.distanceStartline":50,"navigation.racing.timeToStart":120,"navigation.racing.timePortDown":60,"navigation.racing.timePortUp":70,"navigation.racing.timeStbdDown":65,"navigation.racing.timeStbdUp":75}},b=e=>{let{children:t}=e,[n,c]=(0,a.useState)({}),[d,u]=(0,a.useState)(!1),[g,h]=(0,a.useState)(v),f=(0,a.useRef)(null),m=(0,a.useRef)(null);return(0,a.useEffect)(()=>{let e=!0,t=async()=>{let e=new Date,t=e.getFullYear(),n=(e.getMonth()+1).toString().padStart(2,"0"),i="tides/larochelle/".concat(n,"_").concat(t,".json"),a=await fetch(i);if(a.ok){let t=await a.json(),n=e.toISOString().split("T")[0];if(t[n]){let e=null,i=null,a=new Date,r=60*a.getHours()+a.getMinutes();if(t[n].forEach(t=>{let[n,a,o,l]=t,[s,c]=a.split(":").map(Number),d=60*s+c;"tide.high"===n&&(!e||Math.abs(r-d)<Math.abs(r-e.timeInMinutes))?e={height:parseFloat(o),time:a,timeInMinutes:d,coef:l}:"tide.low"===n&&(!i||Math.abs(r-d)<Math.abs(r-i.timeInMinutes))&&(i={height:parseFloat(o),time:a,timeInMinutes:d})}),e&&i){let t="".concat(a.getHours().toString().padStart(2,"0"),":").concat(a.getMinutes().toString().padStart(2,"0")),n=S(e.height,i.height,t,e.time,i.time);c(t=>({...t,"environment.tide.heightNow":n,"environment.tide.heightHigh":e.height,"environment.tide.heightLow":i.height,"environment.tide.timeLow":i.time,"environment.tide.timeHigh":e.time,"environment.tide.coeffNow":e.coef}))}else throw Error("Tide data for today is incomplete.")}}else console.warn("No tide data found")};return(async()=>{let{signalkUrl:t,debugMode:n}=o.Z.getAll(),i=()=>{m.current&&clearInterval(m.current);let e=0;m.current=setInterval(()=>{let t=Math.floor(91*Math.random())-45;e=(e+5)%360,c(n=>({...n,"steering.rudderAngle":l.M8C.degToRad(t),"environment.wind.angleApparent":l.M8C.degToRad(e),"environment.wind.angleTrueWater":w.wind["environment.wind.angleTrueWater"],"environment.wind.speedTrue":w.wind["environment.wind.speedTrue"],"environment.wind.speedApparent":w.wind["environment.wind.speedApparent"],...w.temperature,...w.environment,...w.performance,...w.navigation,...w.racing}))},1e3)};try{if(!n){let[n,i]=t.replace(/https?:\/\//,"").split(":"),a=new r.default({hostname:n||"localhost",port:parseInt(i)||3e3,useTLS:t.startsWith("https"),reconnect:!0,autoConnect:!1,notifications:!1,deltaStreamBehaviour:"self",sendMeta:"all",wsKeepaliveInterval:10});f.current=a,await a.connect(),a.on("delta",t=>{e&&t.updates.forEach(e=>{e.values&&e.values.forEach(e=>{c(t=>({...t,[e.path]:e.value}))})})})}n&&i()}catch(e){console.error("Failed to connect to SignalK:",e),i()}})(),t(),()=>{e=!1,f.current&&f.current.disconnect(),m.current&&clearInterval(m.current)}},[]),(0,i.jsx)(s.Provider,{value:{getSignalKValue:e=>n[e]||null,nightMode:d,setNightMode:u,states:g,toggleState:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;h(n=>({...n,[e]:void 0!==t?t:!n[e]}))}},children:t})},x=()=>(0,a.useContext)(s),S=function(e,t,n,i,a){let r,o,l,s;if(!n||!i||!a||!/^\d{1,2}:\d{2}$/.test(n)||!/^\d{1,2}:\d{2}$/.test(i)||!/^\d{1,2}:\d{2}$/.test(a))return console.error("Invalid time format provided to calculateTideHeightUsingTwelfths"),(e+t)/2;let c=e=>{let[t,n]=e.split(":").map(Number);return 60*t+n},d=c(i),u=c(a),g=c(n),h=!1;u<=g&&g<=d?(h=!0,r=t,o=e,l=u,s=d):(r=e,o=t,l=d,s=u+(u<d?1440:0));let f=Math.abs(s-l),m=Math.abs(o-r),p=g-l;p<0&&(p+=1440);let v=m/12,w=0;return w=p<=f/6?v*Math.ceil(p/(f/12)):p<=2*f/6?2*v+v*Math.ceil((p-f/6)/(f/12)):p<=3*f/6?5*v:p<=4*f/6?8*v:p<=5*f/6?10*v:m,h?r+w:r-w}},63321:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});var i=JSON.parse('{"F":[{"name":"Default","modelPath":"default","capabilities":["navigation","rudder","sail","color"]},{"name":"Optimist","modelPath":"optimist","capabilities":["navigation","ais"]},{"name":"Sailboat","modelPath":"sailboat","capabilities":["navigation","ais"]},{"name":"Ship","modelPath":"ship","capabilities":["navigation","ais"]},{"name":"Windsurf","modelPath":"windsurf","capabilities":["navigation","ais"]}]}');class a{isLocalStorageAvailable(){try{return"undefined"!=typeof localStorage}catch(e){return!1}}loadConfig(){if(this.isLocalStorageAvailable()){let e=localStorage.getItem(this.configKey);if(!e)return this.saveConfig(this.defaultConfig),{...this.defaultConfig};try{return JSON.parse(e)}catch(e){return console.error("Failed to parse stored configuration:",e),{...this.defaultConfig}}}return{...this.inMemoryConfig}}saveConfig(e){this.config={...this.config,...e},this.isLocalStorageAvailable()?localStorage.setItem(this.configKey,JSON.stringify(this.config)):this.inMemoryConfig={...this.config}}get(e){return this.config[e]}set(e,t){this.config[e]=t,this.saveConfig(this.config)}resetConfig(){this.config={...this.defaultConfig},this.isLocalStorageAvailable()?localStorage.setItem(this.configKey,JSON.stringify(this.config)):this.inMemoryConfig={...this.defaultConfig}}getAll(){return{...this.config}}getDefaultConfig(){return{...this.defaultConfig}}getSelectedBoat(){let e=this.config.selectedBoat;return e?this.getBoatsData().find(t=>t.name===e):[]}getBoatsData(){return i.F}getComputedSignalKUrl(){return this.config.debugMode?"https://demo.signalk.org:443":"".concat(window.location.protocol,"//").concat(window.location.hostname).concat(window.location.port?":"+window.location.port:"")}constructor(){this.defaultConfig={signalkUrl:"https://demo.signalk.org:443",username:"",password:"",debugMode:!1,selectedBoat:"Default",primaryColor:null,metallicEffect:!1,aisLengthScalingFactor:.7},this.configKey="ocearoConfig",this.inMemoryConfig={...this.defaultConfig},this.config=this.loadConfig()}}var r=new a},99670:function(e,t,n){"use strict";n.r(t),n.d(t,{VIEW_MODES:function(){return f},default:function(){return p}});var i=n(57437),a=n(2265),r=n(30166),o=n(20376),l=n.n(o),s=n(53082);class c extends a.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){this.setState({error:e,errorInfo:t}),console.error("Error caught in Error Boundary:",e,t)}render(){if(this.state.hasError){let{error:e,errorInfo:t}=this.state;return(0,i.jsxs)("div",{className:"flex flex-col items-center justify-center min-h-screen bg-gray-100 text-gray-900",children:[(0,i.jsx)("h1",{className:"text-3xl font-bold text-red-600 mb-4",children:"Something went wrong."}),(0,i.jsxs)("p",{className:"text-lg mb-2",children:[(0,i.jsx)("strong",{children:"Error:"})," ",e?e.toString():"Unknown error"]}),t&&(0,i.jsxs)("details",{className:"whitespace-pre-wrap bg-gray-200 p-4 rounded-lg mb-4",children:[(0,i.jsx)("summary",{className:"cursor-pointer text-blue-500 underline",children:"Stack Trace"}),(0,i.jsx)("pre",{className:"mt-2",children:t.componentStack})]}),(0,i.jsxs)("div",{className:"flex space-x-4",children:[(0,i.jsx)("button",{onClick:this.handleRefresh,className:"px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600",children:"Refresh Page"}),(0,i.jsx)("button",{onClick:this.handleExitFullscreen,className:"px-4 py-2 bg-green-500 text-white rounded hover:bg-green-600",children:"Exit Fullscreen"})]})]})}return this.props.children}constructor(e){super(e),this.handleRefresh=()=>{window.location.reload()},this.handleExitFullscreen=()=>{document.fullscreenElement&&(window.close(),document.exitFullscreen().catch(e=>{console.error("Failed to exit fullscreen:",e)}))},this.state={hasError:!1,error:null,errorInfo:null}}}let d=(0,r.default)(()=>n.e(252).then(n.bind(n,7252)),{loadableGenerated:{webpack:()=>[7252]},loading:()=>(0,i.jsx)("div",{className:"w-full h-full flex items-center justify-center",children:"Loading..."})}),u=(0,r.default)(()=>Promise.all([n.e(676),n.e(268),n.e(12)]).then(n.bind(n,12012)),{loadableGenerated:{webpack:()=>[12012]}}),g=(0,r.default)(()=>Promise.all([n.e(676),n.e(268),n.e(936)]).then(n.bind(n,72936)),{loadableGenerated:{webpack:()=>[72936]}}),h=(0,r.default)(()=>Promise.all([n.e(676),n.e(689),n.e(268),n.e(496),n.e(412)]).then(n.bind(n,6412)),{loadableGenerated:{webpack:()=>[6412]},loading:()=>(0,i.jsx)("div",{className:"w-full h-full flex items-center justify-center",children:(0,i.jsx)("div",{className:"text-white text-2xl",children:"Loading 3D View..."})}),ssr:!1}),f={BOAT:"boat",APP:"app",SPLIT:"split"},m=()=>window.innerWidth>=1366;function p(){let e=(0,a.useRef)(!1),[t,n]=(0,a.useState)(null),[r,o]=(0,a.useState)("navigation"),[p,v]=(0,a.useState)(!1),[w,b]=(0,a.useState)(!1);(0,a.useEffect)(()=>{let t;n(m()?f.SPLIT:f.BOAT),e.current=!0;let i=()=>{clearTimeout(t),t=setTimeout(()=>{n(m()?f.SPLIT:f.BOAT)},250)};return window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i),clearTimeout(t)}},[]);let x=(0,a.useCallback)(()=>{v(e=>!e)},[]),S=(0,a.useCallback)(e=>{n(e)},[]),C=(0,a.useCallback)((e,t)=>{let n=window.innerWidth/5;t.x>n?S(f.BOAT):t.x<-n?S(f.APP):S(f.SPLIT)},[S]),M=(0,a.useCallback)(()=>{document.fullscreenElement?document.exitFullscreen():document.documentElement.requestFullscreen().catch(e=>{console.error("Fullscreen error:",e.message)})},[]),y=(0,a.useCallback)(e=>{t===f.BOAT&&S(f.APP),o(e)},[t,S]),T=(0,a.useCallback)(()=>{w?(S(f.BOAT),b(!1)):(y("settings"),b(!0))},[w,S,y]),j=(0,a.useMemo)(()=>null===t?{}:{leftPane:"transition-all duration-300 ".concat(t===f.BOAT?"w-full":t===f.APP?"hidden":"w-2/5"," bg-leftPaneBg h-full relative"),rightPane:"transition-all duration-300 ".concat(t===f.APP?"w-full":t===f.BOAT?"hidden":"w-3/5"," h-full bg-rightPaneBg p-4")},[t]);return e.current?(0,i.jsx)(c,{children:(0,i.jsx)(s.YH,{children:(0,i.jsxs)("div",{className:"h-screen flex flex-col bg-black relative overflow-hidden",children:[(0,i.jsxs)("div",{className:"flex flex-1 min-h-0",children:[(0,i.jsx)("div",{className:j.leftPane,children:(0,i.jsx)(h,{})}),(0,i.jsx)(l(),{axis:"x",onDrag:C,position:{x:0,y:0},handle:".handle",bounds:"parent",children:(0,i.jsx)("div",{className:"handle w-1 bg-leftPaneBg h-full cursor-col-resize transition-all duration-200 flex items-center justify-center",children:(0,i.jsx)("div",{className:"rounded-full w-3 bg-gray-600 h-40 transition-all duration-200 hover:bg-gray-500"})})}),(0,i.jsx)("div",{className:j.rightPane,children:(0,i.jsx)(d,{view:r})})]}),(0,i.jsx)("div",{className:"w-full h-16 min-h-16 bg-black flex items-center justify-center shrink-0",children:(0,i.jsx)(u,{setRightView:y,toggleAppMenu:x,toggleSettings:T})}),p&&(0,i.jsx)(g,{currentViewMode:t,toggleViewMode:S,handleSetRightView:y,toggleFullscreen:M,setShowAppMenu:v})]})})}):(0,i.jsx)("div",{className:"h-screen bg-black flex items-center justify-center",children:(0,i.jsx)("div",{className:"animate-pulse text-white",children:"Loading..."})})}}},function(e){e.O(0,[870,746,971,117,744],function(){return e(e.s=87343)}),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
!function(){"use strict";var e,t,n,r,o,f,c,u,i,a={},d={};function l(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}},r=!0;try{a[e].call(n.exports,n,n.exports,l),r=!1}finally{r&&delete d[e]}return n.exports}l.m=a,e=[],l.O=function(t,n,r,o){if(n){o=o||0;for(var f=e.length;f>0&&e[f-1][2]>o;f--)e[f]=e[f-1];e[f]=[n,r,o];return}for(var c=1/0,f=0;f<e.length;f++){for(var n=e[f][0],r=e[f][1],o=e[f][2],u=!0,i=0;i<n.length;i++)c>=o&&Object.keys(l.O).every(function(e){return l.O[e](n[i])})?n.splice(i--,1):(u=!1,o<c&&(c=o));if(u){e.splice(f--,1);var a=r();void 0!==a&&(t=a)}}return t},l.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},l.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var o=Object.create(null);l.r(o);var f={};t=t||[null,n({}),n([]),n(n)];for(var c=2&r&&e;"object"==typeof c&&!~t.indexOf(c);c=n(c))Object.getOwnPropertyNames(c).forEach(function(t){f[t]=function(){return e[t]}});return f.default=function(){return e},l.d(o,f),o},l.d=function(e,t){for(var n in t)l.o(t,n)&&!l.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},l.f={},l.e=function(e){return Promise.all(Object.keys(l.f).reduce(function(t,n){return l.f[n](e,t),t},[]))},l.u=function(e){return"static/chunks/"+(({676:"870fdd6f",689:"b536a0f1",918:"0f8af13e"})[e]||e)+"."+({12:"a4273af9b82657f2",59:"c2dfec0c5e965cb5",73:"082ba53f0fe04b93",79:"c90ea1de476d64c2",138:"b9389f70773e44e6",145:"9caac3d586b84999",154:"4e0902ce8b0f7ad1",188:"1839b14fedef7718",197:"bcdd8d0debcb7089",199:"8b338263b2a6aa7d",221:"a545399d0aaf207f",226:"8e9a3229837caa21",250:"b26c37701919cf5c",252:"7d334947f15ddf30",268:"8ed821c518bf7977",274:"f21dd1bea1190823",353:"c2bc481b7d81054f",412:"9a891f540865cbd8",496:"c440e137e5877fb7",610:"44fac6b8e6928564",676:"a18fe21a954fd3ab",687:"798c6b33d9165736",689:"0563944ec53282b3",728:"3987afab39b00f4e",751:"a180d553d77914d3",890:"6c4341abc0cc6952",909:"d374a5e93b208fb5",918:"af14efcb2d26c639",936:"e779b5632883831e",949:"e273523eaad35cc5",967:"83ea5cd9e6c9bb4c",975:"8821fdf115b619c5"})[e]+".js"},l.miniCssF=function(e){},l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="_N_E:",l.l=function(e,t,n,f){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var c,u,i=document.getElementsByTagName("script"),a=0;a<i.length;a++){var d=i[a];if(d.getAttribute("src")==e||d.getAttribute("data-webpack")==o+n){c=d;break}}c||(u=!0,(c=document.createElement("script")).charset="utf-8",c.timeout=120,l.nc&&c.setAttribute("nonce",l.nc),c.setAttribute("data-webpack",o+n),c.src=l.tu(e)),r[e]=[t];var s=function(t,n){c.onerror=c.onload=null,clearTimeout(b);var o=r[e];if(delete r[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach(function(e){return e(n)}),t)return t(n)},b=setTimeout(s.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=s.bind(null,c.onerror),c.onload=s.bind(null,c.onload),u&&document.head.appendChild(c)},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.tt=function(){return void 0===f&&(f={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(f=trustedTypes.createPolicy("nextjs#bundler",f))),f},l.tu=function(e){return l.tt().createScriptURL(e)},l.p="/ocearo-ui/_next/",c={272:0,446:0},l.f.j=function(e,t){var n=l.o(c,e)?c[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(/^(272|446)$/.test(e))c[e]=0;else{var r=new Promise(function(t,r){n=c[e]=[t,r]});t.push(n[2]=r);var o=l.p+l.u(e),f=Error();l.l(o,function(t){if(l.o(c,e)&&(0!==(n=c[e])&&(c[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;f.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",f.name="ChunkLoadError",f.type=r,f.request=o,n[1](f)}},"chunk-"+e,e)}}},l.O.j=function(e){return 0===c[e]},u=function(e,t){var n,r,o=t[0],f=t[1],u=t[2],i=0;if(o.some(function(e){return 0!==c[e]})){for(n in f)l.o(f,n)&&(l.m[n]=f[n]);if(u)var a=u(l)}for(e&&e(t);i<o.length;i++)r=o[i],l.o(c,r)&&c[r]&&c[r][0](),c[r]=0;return l.O(a)},(i=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(u.bind(null,0)),i.push=u.bind(null,i.push.bind(i))}();
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
@font-face{font-family:__geistSans_873ced;src:url(/ocearo-ui/_next/static/media/4473ecc91f70f139-s.p.woff) format("woff");font-display:swap;font-weight:100 900}@font-face{font-family:__geistSans_Fallback_873ced;src:local("Arial");ascent-override:85.83%;descent-override:20.52%;line-gap-override:9.33%;size-adjust:107.19%}.__className_873ced{font-family:__geistSans_873ced,__geistSans_Fallback_873ced}.__variable_873ced{--font-geist-sans:"__geistSans_873ced","__geistSans_Fallback_873ced"}@font-face{font-family:__geistMono_6df010;src:url(/ocearo-ui/_next/static/media/463dafcda517f24f-s.p.woff) format("woff");font-display:swap;font-weight:100 900}@font-face{font-family:__geistMono_Fallback_6df010;src:local("Arial");ascent-override:69.97%;descent-override:16.73%;line-gap-override:7.61%;size-adjust:131.49%}.__className_6df010{font-family:__geistMono_6df010,__geistMono_Fallback_6df010}.__variable_6df010{--font-geist-mono:"__geistMono_6df010","__geistMono_Fallback_6df010"}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
|
|
2
|
-
! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com
|
|
3
|
-
*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.-left-10{left:-2.5rem}.-left-20{left:-5rem}.-right-1{right:-.25rem}.bottom-0{bottom:0}.bottom-2{bottom:.5rem}.bottom-20{bottom:5rem}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.right-0{right:0}.right-2{right:.5rem}.top-0{top:0}.top-1{top:.25rem}.top-2{top:.5rem}.top-6{top:1.5rem}.top-\[-1\.5rem\]{top:-1.5rem}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-10{height:2.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-48{height:12rem}.h-60{height:15rem}.h-\[10\%\]{height:10%}.h-\[90\%\]{height:90%}.h-full{height:100%}.h-screen{height:100vh}.min-h-0{min-height:0}.min-h-16{min-height:4rem}.min-h-screen{min-height:100vh}.w-0\.5{width:.125rem}.w-1{width:.25rem}.w-2{width:.5rem}.w-2\/5{width:40%}.w-20{width:5rem}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/5{width:60%}.w-32{width:8rem}.w-8{width:2rem}.w-\[40\%\]{width:40%}.w-full{width:100%}.w-px{width:1px}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.origin-bottom{transform-origin:bottom}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.rotate-180{--tw-rotate:180deg}.rotate-180,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-col-resize{cursor:col-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(2.5rem * var(--tw-space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-full{border-top-left-radius:9999px;border-top-right-radius:9999px}.rounded-t-sm{border-top-left-radius:.125rem;border-top-right-radius:.125rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.border-oGray{--tw-border-opacity:1;border-color:rgb(152 152 152/var(--tw-border-opacity,1))}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity,1))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-900{--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.bg-indigo-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity,1))}.bg-leftPaneBg{--tw-bg-opacity:1;background-color:rgb(14 14 14/var(--tw-bg-opacity,1))}.bg-oBlue{--tw-bg-opacity:1;background-color:rgb(9 191 255/var(--tw-bg-opacity,1))}.bg-oGray{--tw-bg-opacity:1;background-color:rgb(152 152 152/var(--tw-bg-opacity,1))}.bg-oGray2{--tw-bg-opacity:1;background-color:rgb(66 66 66/var(--tw-bg-opacity,1))}.bg-oGreen{--tw-bg-opacity:1;background-color:rgb(15 205 79/var(--tw-bg-opacity,1))}.bg-oNight{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-oRed{--tw-bg-opacity:1;background-color:rgb(204 0 12/var(--tw-bg-opacity,1))}.bg-oYellow{--tw-bg-opacity:1;background-color:rgb(255 190 0/var(--tw-bg-opacity,1))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.bg-rightPaneBg{--tw-bg-opacity:1;background-color:rgb(30 30 30/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-700{--tw-bg-opacity:1;background-color:rgb(161 98 7/var(--tw-bg-opacity,1))}.bg-opacity-10{--tw-bg-opacity:0.1}.bg-opacity-70{--tw-bg-opacity:0.7}.object-contain{object-fit:contain}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem}.pb-2,.py-2{padding-bottom:.5rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-cyan-500{--tw-text-opacity:1;color:rgb(6 182 212/var(--tw-text-opacity,1))}.text-emerald-500{--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-200{--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.text-indigo-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity,1))}.text-oBlue{--tw-text-opacity:1;color:rgb(9 191 255/var(--tw-text-opacity,1))}.text-oGray{--tw-text-opacity:1;color:rgb(152 152 152/var(--tw-text-opacity,1))}.text-oGreen{--tw-text-opacity:1;color:rgb(15 205 79/var(--tw-text-opacity,1))}.text-oNight{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-oRed{--tw-text-opacity:1;color:rgb(204 0 12/var(--tw-text-opacity,1))}.text-oYellow{--tw-text-opacity:1;color:rgb(255 190 0/var(--tw-text-opacity,1))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-100{--tw-text-opacity:1;color:rgb(254 249 195/var(--tw-text-opacity,1))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-20{opacity:.2}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.drop-shadow-lg{--tw-drop-shadow:drop-shadow(0 10px 8px rgba(0,0,0,.04)) drop-shadow(0 4px 3px rgba(0,0,0,.1))}.drop-shadow-lg,.invert{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert:invert(100%)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-opacity{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{--background:#fff;--foreground:#171717}@media (prefers-color-scheme:dark){:root{--background:#0a0a0a;--foreground:#ededed}}body{color:var(--foreground);background:var(--background);font-family:Arial,Helvetica,sans-serif}:root{--primary-color:#1976d2;--accent-color:#ff4081;--warn-color:#f44336;--background-color:#fff;--foreground-color:#000;--foreground-text:#212121}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.hover\:bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\:bg-gray-800\/10:hover{background-color:rgba(31,41,55,.1)}.hover\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.hover\:bg-oGray:hover{--tw-bg-opacity:1;background-color:rgb(152 152 152/var(--tw-bg-opacity,1))}.hover\:bg-oRed:hover{--tw-bg-opacity:1;background-color:rgb(204 0 12/var(--tw-bg-opacity,1))}.hover\:bg-red-600:hover{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.hover\:text-blue-300:hover{--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity,1))}.hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.hover\:text-oRed:hover{--tw-text-opacity:1;color:rgb(204 0 12/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:row-span-2{grid-row:span 2/span 2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}
|
|
File without changes
|
|
File without changes
|