winga-chart-plotter-signalk 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/public/assets/{index-DA2nyVao.js → index-DmvOLAb-.js} +15 -15
- package/public/assets/signalk.worker-BA8YHNLb.js +1 -0
- package/public/assets/signalk_chart_core_bg-Bx5Ksw6d.wasm +0 -0
- package/public/index.html +1 -1
- package/public/sw.js +1 -1
- package/public/assets/signalk.worker-oIy9vdMV.js +0 -1
- package/public/assets/signalk_chart_core_bg-231oCTjv.wasm +0 -0
package/package.json
CHANGED
|
@@ -556,7 +556,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
556
556
|
}`;function Ss(){var e=ko,t=Ao,n=K.cssPrefix,r=K.replacementClass,i=xs;if(n!==e||r!==t){var a=RegExp(`\\.${e}\\-`,`g`),o=RegExp(`\\--${e}\\-`,`g`),s=RegExp(`\\.${t}`,`g`);i=i.replace(a,`.${n}-`).replace(o,`--${n}-`).replace(s,`.${r}`)}return i}var Cs=!1;function ws(){K.autoAddCss&&!Cs&&(us(Ss()),Cs=!0)}var Ts={mixout:function(){return{dom:{css:Ss,insertCss:ws}}},hooks:function(){return{beforeDOMElementCreation:function(){ws()},beforeI2svg:function(){ws()}}}},Es=oa||{};Es[Do]||(Es[Do]={}),Es[Do].styles||(Es[Do].styles={}),Es[Do].hooks||(Es[Do].hooks={}),Es[Do].shims||(Es[Do].shims=[]);var Ds=Es[Do],Os=[],ks=function(){sa.removeEventListener(`DOMContentLoaded`,ks),As=1,Os.map(function(e){return e()})},As=!1;ua&&(As=(sa.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(sa.readyState),As||sa.addEventListener(`DOMContentLoaded`,ks));function js(e){ua&&(As?setTimeout(e,0):Os.push(e))}function Ms(e){var t=e.tag,n=e.attributes,r=n===void 0?{}:n,i=e.children,a=i===void 0?[]:i;return typeof e==`string`?hs(e):`<${t} ${gs(r)}>${a.map(Ms).join(``)}</${t}>`}function Ns(e,t,n){if(e&&e[t]&&e[t][n])return{prefix:t,iconName:n,icon:e[t][n]}}var Ps=function(e,t){return function(n,r,i,a){return e.call(t,n,r,i,a)}},Fs=function(e,t,n,r){var i=Object.keys(e),a=i.length,o=r===void 0?t:Ps(t,r),s,c,l;for(n===void 0?(s=1,l=e[i[0]]):(s=0,l=n);s<a;s++)c=i[s],l=o(l,e[c],c,e);return l};function Is(e){return Ji(e).length===1?e.codePointAt(0).toString(16):null}function Ls(e){return Object.keys(e).reduce(function(t,n){var r=e[n];return r.icon?t[r.iconName]=r.icon:t[n]=r,t},{})}function Rs(e,t){var n=(arguments.length>2&&arguments[2]!==void 0?arguments[2]:{}).skipHooks,r=n===void 0?!1:n,i=Ls(t);typeof Ds.hooks.addPack==`function`&&!r?Ds.hooks.addPack(e,Ls(t)):Ds.styles[e]=G(G({},Ds.styles[e]||{}),i),e===`fas`&&Rs(`fa`,t)}var zs=Ds.styles,Bs=Ds.shims,Vs=Object.keys(qo),Hs=Vs.reduce(function(e,t){return e[t]=Object.keys(qo[t]),e},{}),Us=null,Ws={},Gs={},Ks={},qs={},Js={};function Ys(e){return~es.indexOf(e)}function Xs(e,t){var n=t.split(`-`),r=n[0],i=n.slice(1).join(`-`);return r===e&&i!==``&&!Ys(i)?i:null}var Zs=function(){var e=function(e){return Fs(zs,function(t,n,r){return t[r]=Fs(n,e,{}),t},{})};Ws=e(function(e,t,n){return t[3]&&(e[t[3]]=n),t[2]&&t[2].filter(function(e){return typeof e==`number`}).forEach(function(t){e[t.toString(16)]=n}),e}),Gs=e(function(e,t,n){return e[n]=n,t[2]&&t[2].filter(function(e){return typeof e==`string`}).forEach(function(t){e[t]=n}),e}),Js=e(function(e,t,n){var r=t[2];return e[n]=n,r.forEach(function(t){e[t]=n}),e});var t=`far`in zs||K.autoFetchSvg,n=Fs(Bs,function(e,n){var r=n[0],i=n[1],a=n[2];return i===`far`&&!t&&(i=`fas`),typeof r==`string`&&(e.names[r]={prefix:i,iconName:a}),typeof r==`number`&&(e.unicodes[r.toString(16)]={prefix:i,iconName:a}),e},{names:{},unicodes:{}});Ks=n.names,qs=n.unicodes,Us=oc(K.styleDefault,{family:K.familyDefault})};ss(function(e){Us=oc(e.styleDefault,{family:K.familyDefault})}),Zs();function Qs(e,t){return(Ws[e]||{})[t]}function $s(e,t){return(Gs[e]||{})[t]}function ec(e,t){return(Js[e]||{})[t]}function tc(e){return Ks[e]||{prefix:null,iconName:null}}function nc(e){var t=qs[e],n=Qs(`fas`,e);return t||(n?{prefix:`fas`,iconName:n}:null)||{prefix:null,iconName:null}}function rc(){return Us}var ic=function(){return{prefix:null,iconName:null,rest:[]}};function ac(e){var t=va,n=Vs.reduce(function(e,t){return e[t]=`${K.cssPrefix}-${t}`,e},{});return no.forEach(function(r){(e.includes(n[r])||e.some(function(e){return Hs[r].includes(e)}))&&(t=r)}),t}function oc(e){var t=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{}).family,n=t===void 0?va:t,r=Uo[n][e];if(n===ya&&!e)return`fad`;var i=Go[n][e]||Go[n][r],a=e in Ds.styles?e:null;return i||a||null}function sc(e){var t=[],n=null;return e.forEach(function(e){var r=Xs(K.cssPrefix,e);r?n=r:e&&t.push(e)}),{iconName:n,rest:t}}function cc(e){return e.sort().filter(function(e,t,n){return n.indexOf(e)===t})}var lc=xo.concat(so);function uc(e){var t=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{}).skipLookups,n=t===void 0?!1:t,r=null,i=cc(e.filter(function(e){return lc.includes(e)})),a=cc(e.filter(function(e){return!lc.includes(e)})),o=qi(i.filter(function(e){return r=e,!_a.includes(e)}),1)[0],s=o===void 0?null:o,c=ac(i),l=G(G({},sc(a)),{},{prefix:oc(s,{family:c})});return G(G(G({},l),mc({values:e,family:c,styles:zs,config:K,canonical:l,givenPrefix:r})),dc(n,r,l))}function dc(e,t,n){var r=n.prefix,i=n.iconName;if(e||!r||!i)return{prefix:r,iconName:i};var a=t===`fa`?tc(i):{},o=ec(r,i);return i=a.iconName||o||i,r=a.prefix||r,r===`far`&&!zs.far&&zs.fas&&!K.autoFetchSvg&&(r=`fas`),{prefix:r,iconName:i}}var fc=no.filter(function(e){return e!==va||e!==ya}),pc=Object.keys(bo).filter(function(e){return e!==va}).map(function(e){return Object.keys(bo[e])}).flat();function mc(e){var t=e.values,n=e.family,r=e.canonical,i=e.givenPrefix,a=i===void 0?``:i,o=e.styles,s=o===void 0?{}:o,c=e.config,l=c===void 0?{}:c,u=n===ya,d=t.includes(`fa-duotone`)||t.includes(`fad`),f=l.familyDefault===`duotone`,p=r.prefix===`fad`||r.prefix===`fa-duotone`;return!u&&(d||f||p)&&(r.prefix=`fad`),(t.includes(`fa-brands`)||t.includes(`fab`))&&(r.prefix=`fab`),!r.prefix&&fc.includes(n)&&(Object.keys(s).find(function(e){return pc.includes(e)})||l.autoFetchSvg)&&(r.prefix=ao.get(n).defaultShortPrefixId,r.iconName=ec(r.prefix,r.iconName)||r.iconName),(r.prefix===`fa`||a===`fa`)&&(r.prefix=rc()||`fas`),r}var hc=function(){function e(){Ri(this,e),this.definitions={}}return Bi(e,[{key:`add`,value:function(){var e=this,t=[...arguments].reduce(this._pullDefinitions,{});Object.keys(t).forEach(function(n){e.definitions[n]=G(G({},e.definitions[n]||{}),t[n]),Rs(n,t[n]);var r=qo[va][n];r&&Rs(r,t[n]),Zs()})}},{key:`reset`,value:function(){this.definitions={}}},{key:`_pullDefinitions`,value:function(e,t){var n=t.prefix&&t.iconName&&t.icon?{0:t}:t;return Object.keys(n).map(function(t){var r=n[t],i=r.prefix,a=r.iconName,o=r.icon,s=o[2];e[i]||(e[i]={}),s.length>0&&s.forEach(function(t){typeof t==`string`&&(e[i][t]=o)}),e[i][a]=o}),e}}])}(),gc=[],_c={},vc={},yc=Object.keys(vc);function bc(e,t){var n=t.mixoutsTo;return gc=e,_c={},Object.keys(vc).forEach(function(e){yc.indexOf(e)===-1&&delete vc[e]}),gc.forEach(function(e){var t=e.mixout?e.mixout():{};if(Object.keys(t).forEach(function(e){typeof t[e]==`function`&&(n[e]=t[e]),Zi(t[e])===`object`&&Object.keys(t[e]).forEach(function(r){n[e]||(n[e]={}),n[e][r]=t[e][r]})}),e.hooks){var r=e.hooks();Object.keys(r).forEach(function(e){_c[e]||(_c[e]=[]),_c[e].push(r[e])})}e.provides&&e.provides(vc)}),n}function xc(e,t){var n=[...arguments].slice(2);return(_c[e]||[]).forEach(function(e){t=e.apply(null,[t].concat(n))}),t}function Sc(e){var t=[...arguments].slice(1);(_c[e]||[]).forEach(function(e){e.apply(null,t)})}function Cc(){var e=arguments[0],t=Array.prototype.slice.call(arguments,1);return vc[e]?vc[e].apply(null,t):void 0}function wc(e){e.prefix===`fa`&&(e.prefix=`fas`);var t=e.iconName,n=e.prefix||rc();if(t)return t=ec(n,t)||t,Ns(Tc.definitions,n,t)||Ns(Ds.styles,n,t)}var Tc=new hc,Ec={noAuto:function(){K.autoReplaceSvg=!1,K.observeMutations=!1,Sc(`noAuto`)},config:K,dom:{i2svg:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return ua?(Sc(`beforeI2svg`,e),Cc(`pseudoElements2svg`,e),Cc(`i2svg`,e)):Promise.reject(Error(`Operation requires a DOM of some kind.`))},watch:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},t=e.autoReplaceSvgRoot;K.autoReplaceSvg===!1&&(K.autoReplaceSvg=!0),K.observeMutations=!0,js(function(){Dc({autoReplaceSvgRoot:t}),Sc(`watch`,e)})}},parse:{icon:function(e){if(e===null)return null;if(Zi(e)===`object`&&e.prefix&&e.iconName)return{prefix:e.prefix,iconName:ec(e.prefix,e.iconName)||e.iconName};if(Array.isArray(e)&&e.length===2){var t=e[1].indexOf(`fa-`)===0?e[1].slice(3):e[1],n=oc(e[0]);return{prefix:n,iconName:ec(n,t)||t}}if(typeof e==`string`&&(e.indexOf(`${K.cssPrefix}-`)>-1||e.match(Yo))){var r=uc(e.split(` `),{skipLookups:!0});return{prefix:r.prefix||rc(),iconName:ec(r.prefix,r.iconName)||r.iconName}}if(typeof e==`string`){var i=rc();return{prefix:i,iconName:ec(i,e)||e}}}},library:Tc,findIconDefinition:wc,toHtml:Ms},Dc=function(){var e=(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}).autoReplaceSvgRoot,t=e===void 0?sa:e;(Object.keys(Ds.styles).length>0||K.autoFetchSvg)&&ua&&K.autoReplaceSvg&&Ec.dom.i2svg({node:t})};function Oc(e,t){return Object.defineProperty(e,"abstract",{get:t}),Object.defineProperty(e,"html",{get:function(){return e.abstract.map(function(e){return Ms(e)})}}),Object.defineProperty(e,"node",{get:function(){if(ua){var t=sa.createElement(`div`);return t.innerHTML=e.html,t.children}}}),e}function kc(e){var t=e.children,n=e.main,r=e.mask,i=e.attributes,a=e.styles,o=e.transform;if(vs(o)&&n.found&&!r.found){var s={x:n.width/n.height/2,y:.5};i.style=_s(G(G({},a),{},{"transform-origin":`${s.x+o.x/16}em ${s.y+o.y/16}em`}))}return[{tag:`svg`,attributes:i,children:t}]}function Ac(e){var t=e.prefix,n=e.iconName,r=e.children,i=e.attributes,a=e.symbol,o=a===!0?`${t}-${K.cssPrefix}-${n}`:a;return[{tag:`svg`,attributes:{style:`display: none;`},children:[{tag:`symbol`,attributes:G(G({},i),{},{id:o}),children:r}]}]}function jc(e){return[`aria-label`,`aria-labelledby`,`title`,`role`].some(function(t){return t in e})}function Mc(e){var t=e.icons,n=t.main,r=t.mask,i=e.prefix,a=e.iconName,o=e.transform,s=e.symbol,c=e.maskId,l=e.extra,u=e.watchable,d=u===void 0?!1:u,f=r.found?r:n,p=f.width,m=f.height,h=[K.replacementClass,a?`${K.cssPrefix}-${a}`:``].filter(function(e){return l.classes.indexOf(e)===-1}).filter(function(e){return e!==``||!!e}).concat(l.classes).join(` `),g={children:[],attributes:G(G({},l.attributes),{},{"data-prefix":i,"data-icon":a,class:h,role:l.attributes.role||`img`,viewBox:`0 0 ${p} ${m}`})};!jc(l.attributes)&&!l.attributes[`aria-hidden`]&&(g.attributes[`aria-hidden`]=`true`),d&&(g.attributes[jo]=``);var _=G(G({},g),{},{prefix:i,iconName:a,main:n,mask:r,maskId:c,transform:o,symbol:s,styles:G({},l.styles)}),v=r.found&&n.found?Cc(`generateAbstractMask`,_)||{children:[],attributes:{}}:Cc(`generateAbstractIcon`,_)||{children:[],attributes:{}},y=v.children,b=v.attributes;return _.children=y,_.attributes=b,s?Ac(_):kc(_)}function Nc(e){var t=e.content,n=e.width,r=e.height,i=e.transform,a=e.extra,o=e.watchable,s=o===void 0?!1:o,c=G(G({},a.attributes),{},{class:a.classes.join(` `)});s&&(c[jo]=``);var l=G({},a.styles);vs(i)&&(l.transform=bs({transform:i,startCentered:!0,width:n,height:r}),l[`-webkit-transform`]=l.transform);var u=_s(l);u.length>0&&(c.style=u);var d=[];return d.push({tag:`span`,attributes:c,children:[t]}),d}function Pc(e){var t=e.content,n=e.extra,r=G(G({},n.attributes),{},{class:n.classes.join(` `)}),i=_s(n.styles);i.length>0&&(r.style=i);var a=[];return a.push({tag:`span`,attributes:r,children:[t]}),a}var Fc=Ds.styles;function Ic(e){var t=e[0],n=e[1],r=qi(e.slice(4),1)[0],i=null;return i=Array.isArray(r)?{tag:`g`,attributes:{class:`${K.cssPrefix}-${$o.GROUP}`},children:[{tag:`path`,attributes:{class:`${K.cssPrefix}-${$o.SECONDARY}`,fill:`currentColor`,d:r[0]}},{tag:`path`,attributes:{class:`${K.cssPrefix}-${$o.PRIMARY}`,fill:`currentColor`,d:r[1]}}]}:{tag:`path`,attributes:{fill:`currentColor`,d:r}},{found:!0,width:t,height:n,icon:i}}var Lc={found:!1,width:512,height:512};function Rc(e,t){!Bo&&!K.showMissingIcons&&e&&console.error(`Icon with name "${e}" and prefix "${t}" is missing.`)}function zc(e,t){var n=t;return t===`fa`&&K.styleDefault!==null&&(t=rc()),new Promise(function(r,i){if(n===`fa`){var a=tc(e)||{};e=a.iconName||e,t=a.prefix||t}if(e&&t&&Fc[t]&&Fc[t][e]){var o=Fc[t][e];return r(Ic(o))}Rc(e,t),r(G(G({},Lc),{},{icon:K.showMissingIcons&&e&&Cc(`missingIconAbstract`)||{}}))})}var Bc=function(){},Vc=K.measurePerformance&&la&&la.mark&&la.measure?la:{mark:Bc,measure:Bc},Hc=`FA "7.2.0"`,Uc=function(e){return Vc.mark(`${Hc} ${e} begins`),function(){return Wc(e)}},Wc=function(e){Vc.mark(`${Hc} ${e} ends`),Vc.measure(`${Hc} ${e}`,`${Hc} ${e} begins`,`${Hc} ${e} ends`)},Gc={begin:Uc,end:Wc},Kc=function(){};function qc(e){return typeof(e.getAttribute?e.getAttribute(jo):null)==`string`}function Jc(e){var t=e.getAttribute?e.getAttribute(Po):null,n=e.getAttribute?e.getAttribute(Fo):null;return t&&n}function Yc(e){return e&&e.classList&&e.classList.contains&&e.classList.contains(K.replacementClass)}function Xc(){return K.autoReplaceSvg===!0?tl.replace:tl[K.autoReplaceSvg]||tl.replace}function Zc(e){return sa.createElementNS(`http://www.w3.org/2000/svg`,e)}function Qc(e){return sa.createElement(e)}function $c(e){var t=(arguments.length>1&&arguments[1]!==void 0?arguments[1]:{}).ceFn,n=t===void 0?e.tag===`svg`?Zc:Qc:t;if(typeof e==`string`)return sa.createTextNode(e);var r=n(e.tag);return Object.keys(e.attributes||[]).forEach(function(t){r.setAttribute(t,e.attributes[t])}),(e.children||[]).forEach(function(e){r.appendChild($c(e,{ceFn:n}))}),r}function el(e){var t=` ${e.outerHTML} `;return t=`${t}Font Awesome fontawesome.com `,t}var tl={replace:function(e){var t=e[0];if(t.parentNode)if(e[1].forEach(function(e){t.parentNode.insertBefore($c(e),t)}),t.getAttribute(jo)===null&&K.keepOriginalSource){var n=sa.createComment(el(t));t.parentNode.replaceChild(n,t)}else t.remove()},nest:function(e){var t=e[0],n=e[1];if(~ms(t).indexOf(K.replacementClass))return tl.replace(e);var r=RegExp(`${K.cssPrefix}-.*`);if(delete n[0].attributes.id,n[0].attributes.class){var i=n[0].attributes.class.split(` `).reduce(function(e,t){return t===K.replacementClass||t.match(r)?e.toSvg.push(t):e.toNode.push(t),e},{toNode:[],toSvg:[]});n[0].attributes.class=i.toSvg.join(` `),i.toNode.length===0?t.removeAttribute(`class`):t.setAttribute(`class`,i.toNode.join(` `))}var a=n.map(function(e){return Ms(e)}).join(`
|
|
557
557
|
`);t.setAttribute(jo,``),t.innerHTML=a}};function nl(e){e()}function rl(e,t){var n=typeof t==`function`?t:Kc;if(e.length===0)n();else{var r=nl;K.mutateApproach===Lo&&(r=oa.requestAnimationFrame||nl),r(function(){var t=Xc(),r=Gc.begin(`mutate`);e.map(t),r(),n()})}}var il=!1;function al(){il=!0}function ol(){il=!1}var sl=null;function cl(e){if(ca&&K.observeMutations){var t=e.treeCallback,n=t===void 0?Kc:t,r=e.nodeCallback,i=r===void 0?Kc:r,a=e.pseudoElementsCallback,o=a===void 0?Kc:a,s=e.observeMutationsRoot,c=s===void 0?sa:s;sl=new ca(function(e){if(!il){var t=rc();ps(e).forEach(function(e){if(e.type===`childList`&&e.addedNodes.length>0&&!qc(e.addedNodes[0])&&(K.searchPseudoElements&&o(e.target),n(e.target)),e.type===`attributes`&&e.target.parentNode&&K.searchPseudoElements&&o([e.target],!0),e.type===`attributes`&&qc(e.target)&&~Qo.indexOf(e.attributeName))if(e.attributeName===`class`&&Jc(e.target)){var r=uc(ms(e.target)),a=r.prefix,s=r.iconName;e.target.setAttribute(Po,a||t),s&&e.target.setAttribute(Fo,s)}else Yc(e.target)&&i(e.target)})}}),ua&&sl.observe(c,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}function ll(){sl&&sl.disconnect()}function ul(e){var t=e.getAttribute(`style`),n=[];return t&&(n=t.split(`;`).reduce(function(e,t){var n=t.split(`:`),r=n[0],i=n.slice(1);return r&&i.length>0&&(e[r]=i.join(`:`).trim()),e},{})),n}function dl(e){var t=e.getAttribute(`data-prefix`),n=e.getAttribute(`data-icon`),r=e.innerText===void 0?``:e.innerText.trim(),i=uc(ms(e));return i.prefix||=rc(),t&&n&&(i.prefix=t,i.iconName=n),i.iconName&&i.prefix?i:(i.prefix&&r.length>0&&(i.iconName=$s(i.prefix,e.innerText)||Qs(i.prefix,Is(e.innerText))),!i.iconName&&K.autoFetchSvg&&e.firstChild&&e.firstChild.nodeType===Node.TEXT_NODE&&(i.iconName=e.firstChild.data),i)}function fl(e){return ps(e.attributes).reduce(function(e,t){return e.name!==`class`&&e.name!==`style`&&(e[t.name]=t.value),e},{})}function pl(){return{iconName:null,prefix:null,transform:ls,symbol:!1,mask:{iconName:null,prefix:null,rest:[]},maskId:null,extra:{classes:[],styles:{},attributes:{}}}}function ml(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{styleParser:!0},n=dl(e),r=n.iconName,i=n.prefix,a=n.rest,o=fl(e),s=xc(`parseNodeAttributes`,{},e);return G({iconName:r,prefix:i,transform:ls,mask:{iconName:null,prefix:null,rest:[]},maskId:null,symbol:!1,extra:{classes:a,styles:t.styleParser?ul(e):[],attributes:o}},s)}var hl=Ds.styles;function gl(e){var t=K.autoReplaceSvg===`nest`?ml(e,{styleParser:!1}):ml(e);return~t.extra.classes.indexOf(Xo)?Cc(`generateLayersText`,e,t):Cc(`generateSvgReplacementMutation`,e,t)}function _l(){return[].concat(Ji(so),Ji(xo))}function vl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(!ua)return Promise.resolve();var n=sa.documentElement.classList,r=function(e){return n.add(`${Io}-${e}`)},i=function(e){return n.remove(`${Io}-${e}`)},a=K.autoFetchSvg?_l():_a.concat(Object.keys(hl));a.includes(`fa`)||a.push(`fa`);var o=[`.${Xo}:not([${jo}])`].concat(a.map(function(e){return`.${e}:not([${jo}])`})).join(`, `);if(o.length===0)return Promise.resolve();var s=[];try{s=ps(e.querySelectorAll(o))}catch{}if(s.length>0)r(`pending`),i(`complete`);else return Promise.resolve();var c=Gc.begin(`onTree`),l=s.reduce(function(e,t){try{var n=gl(t);n&&e.push(n)}catch(e){Bo||e.name===`MissingIcon`&&console.error(e)}return e},[]);return new Promise(function(e,n){Promise.all(l).then(function(n){rl(n,function(){r(`active`),r(`complete`),i(`pending`),typeof t==`function`&&t(),c(),e()})}).catch(function(e){c(),n(e)})})}function yl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;gl(e).then(function(e){e&&rl([e],t)})}function bl(e){return function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=(t||{}).icon?t:wc(t||{}),i=n.mask;return i&&=(i||{}).icon?i:wc(i||{}),e(r,G(G({},n),{},{mask:i}))}}var xl=function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=t.transform,r=n===void 0?ls:n,i=t.symbol,a=i===void 0?!1:i,o=t.mask,s=o===void 0?null:o,c=t.maskId,l=c===void 0?null:c,u=t.classes,d=u===void 0?[]:u,f=t.attributes,p=f===void 0?{}:f,m=t.styles,h=m===void 0?{}:m;if(e){var g=e.prefix,_=e.iconName,v=e.icon;return Oc(G({type:`icon`},e),function(){return Sc(`beforeDOMElementCreation`,{iconDefinition:e,params:t}),Mc({icons:{main:Ic(v),mask:s?Ic(s.icon):{found:!1,width:null,height:null,icon:{}}},prefix:g,iconName:_,transform:G(G({},ls),r),symbol:a,maskId:l,extra:{attributes:p,styles:h,classes:d}})})}},Sl={mixout:function(){return{icon:bl(xl)}},hooks:function(){return{mutationObserverCallbacks:function(e){return e.treeCallback=vl,e.nodeCallback=yl,e}}},provides:function(e){e.i2svg=function(e){var t=e.node,n=t===void 0?sa:t,r=e.callback;return vl(n,r===void 0?function(){}:r)},e.generateSvgReplacementMutation=function(e,t){var n=t.iconName,r=t.prefix,i=t.transform,a=t.symbol,o=t.mask,s=t.maskId,c=t.extra;return new Promise(function(t,l){Promise.all([zc(n,r),o.iconName?zc(o.iconName,o.prefix):Promise.resolve({found:!1,width:512,height:512,icon:{}})]).then(function(o){var l=qi(o,2),u=l[0],d=l[1];t([e,Mc({icons:{main:u,mask:d},prefix:r,iconName:n,transform:i,symbol:a,maskId:s,extra:c,watchable:!0})])}).catch(l)})},e.generateAbstractIcon=function(e){var t=e.children,n=e.attributes,r=e.main,i=e.transform,a=e.styles,o=_s(a);o.length>0&&(n.style=o);var s;return vs(i)&&(s=Cc(`generateAbstractTransformGrouping`,{main:r,transform:i,containerWidth:r.width,iconWidth:r.width})),t.push(s||r.icon),{children:t,attributes:n}}}},Cl={mixout:function(){return{layer:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=t.classes,r=n===void 0?[]:n;return Oc({type:`layer`},function(){Sc(`beforeDOMElementCreation`,{assembler:e,params:t});var n=[];return e(function(e){Array.isArray(e)?e.map(function(e){n=n.concat(e.abstract)}):n=n.concat(e.abstract)}),[{tag:`span`,attributes:{class:[`${K.cssPrefix}-layers`].concat(Ji(r)).join(` `)},children:n}]})}}}},wl={mixout:function(){return{counter:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=t.title,r=n===void 0?null:n,i=t.classes,a=i===void 0?[]:i,o=t.attributes,s=o===void 0?{}:o,c=t.styles,l=c===void 0?{}:c;return Oc({type:`counter`,content:e},function(){return Sc(`beforeDOMElementCreation`,{content:e,params:t}),Pc({content:e.toString(),title:r,extra:{attributes:s,styles:l,classes:[`${K.cssPrefix}-layers-counter`].concat(Ji(a))}})})}}}},Tl={mixout:function(){return{text:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=t.transform,r=n===void 0?ls:n,i=t.classes,a=i===void 0?[]:i,o=t.attributes,s=o===void 0?{}:o,c=t.styles,l=c===void 0?{}:c;return Oc({type:`text`,content:e},function(){return Sc(`beforeDOMElementCreation`,{content:e,params:t}),Nc({content:e,transform:G(G({},ls),r),extra:{attributes:s,styles:l,classes:[`${K.cssPrefix}-layers-text`].concat(Ji(a))}})})}}},provides:function(e){e.generateLayersText=function(e,t){var n=t.transform,r=t.extra,i=null,a=null;if(da){var o=parseInt(getComputedStyle(e).fontSize,10),s=e.getBoundingClientRect();i=s.width/o,a=s.height/o}return Promise.resolve([e,Nc({content:e.innerHTML,width:i,height:a,transform:n,extra:r,watchable:!0})])}}},El=RegExp(`"`,`ug`),Dl=[1105920,1112319],Ol=G(G(G(G({},{FontAwesome:{normal:`fas`,400:`fas`}}),io),Eo),fo),kl=Object.keys(Ol).reduce(function(e,t){return e[t.toLowerCase()]=Ol[t],e},{}),Al=Object.keys(kl).reduce(function(e,t){var n=kl[t];return e[t]=n[900]||Ji(Object.entries(n))[0][1],e},{});function jl(e){return Is(Ji(e.replace(El,``))[0]||``)}function Ml(e){var t=e.getPropertyValue(`font-feature-settings`).includes(`ss01`),n=e.getPropertyValue(`content`).replace(El,``),r=n.codePointAt(0),i=r>=Dl[0]&&r<=Dl[1],a=n.length===2?n[0]===n[1]:!1;return i||a||t}function Nl(e,t){var n=e.replace(/^['"]|['"]$/g,``).toLowerCase(),r=parseInt(t),i=isNaN(r)?`normal`:r;return(kl[n]||{})[i]||Al[n]}function Pl(e,t){var n=`${No}${t.replace(`:`,`-`)}`;return new Promise(function(r,i){if(e.getAttribute(n)!==null)return r();var a=ps(e.children).filter(function(e){return e.getAttribute(Mo)===t})[0],o=oa.getComputedStyle(e,t),s=o.getPropertyValue(`font-family`),c=s.match(Zo),l=o.getPropertyValue(`font-weight`),u=o.getPropertyValue(`content`);if(a&&!c)return e.removeChild(a),r();if(c&&u!==`none`&&u!==``){var d=o.getPropertyValue(`content`),f=Nl(s,l),p=jl(d),m=c[0].startsWith(`FontAwesome`),h=Ml(o),g=Qs(f,p),_=g;if(m){var v=nc(p);v.iconName&&v.prefix&&(g=v.iconName,f=v.prefix)}if(g&&!h&&(!a||a.getAttribute(Po)!==f||a.getAttribute(Fo)!==_)){e.setAttribute(n,_),a&&e.removeChild(a);var y=pl(),b=y.extra;b.attributes[Mo]=t,zc(g,f).then(function(i){var a=Mc(G(G({},y),{},{icons:{main:i,mask:ic()},prefix:f,iconName:_,extra:b,watchable:!0})),o=sa.createElementNS(`http://www.w3.org/2000/svg`,`svg`);t===`::before`?e.insertBefore(o,e.firstChild):e.appendChild(o),o.outerHTML=a.map(function(e){return Ms(e)}).join(`
|
|
558
558
|
`),e.removeAttribute(n),r()}).catch(i)}else r()}else r()})}function Fl(e){return Promise.all([Pl(e,`::before`),Pl(e,`::after`)])}function Il(e){return e.parentNode!==document.head&&!~Ro.indexOf(e.tagName.toUpperCase())&&!e.getAttribute(Mo)&&(!e.parentNode||e.parentNode.tagName!==`svg`)}var Ll=function(e){return!!e&&zo.some(function(t){return e.includes(t)})},Rl=function(e){if(!e)return[];var t=new Set,n=e.split(/,(?![^()]*\))/).map(function(e){return e.trim()});n=n.flatMap(function(e){return e.includes(`(`)?e:e.split(`,`).map(function(e){return e.trim()})});var r=Vi(n),i;try{for(r.s();!(i=r.n()).done;){var a=i.value;if(Ll(a)){var o=zo.reduce(function(e,t){return e.replace(t,``)},a);o!==``&&o!==`*`&&t.add(o)}}}catch(e){r.e(e)}finally{r.f()}return t};function zl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(ua){var n;if(t)n=e;else if(K.searchPseudoElementsFullScan)n=e.querySelectorAll(`*`);else{var r=new Set,i=Vi(document.styleSheets),a;try{for(i.s();!(a=i.n()).done;){var o=a.value;try{var s=Vi(o.cssRules),c;try{for(s.s();!(c=s.n()).done;){var l=c.value,u=Vi(Rl(l.selectorText)),d;try{for(u.s();!(d=u.n()).done;){var f=d.value;r.add(f)}}catch(e){u.e(e)}finally{u.f()}}}catch(e){s.e(e)}finally{s.f()}}catch(e){K.searchPseudoElementsWarnings&&console.warn(`Font Awesome: cannot parse stylesheet: ${o.href} (${e.message})
|
|
559
|
-
If it declares any Font Awesome CSS pseudo-elements, they will not be rendered as SVG icons. Add crossorigin="anonymous" to the <link>, enable searchPseudoElementsFullScan for slower but more thorough DOM parsing, or suppress this warning by setting searchPseudoElementsWarnings to false.`)}}}catch(e){i.e(e)}finally{i.f()}if(!r.size)return;var p=Array.from(r).join(`, `);try{n=e.querySelectorAll(p)}catch{}}return new Promise(function(e,t){var r=ps(n).filter(Il).map(Fl),i=Gc.begin(`searchPseudoElements`);al(),Promise.all(r).then(function(){i(),ol(),e()}).catch(function(){i(),ol(),t()})})}}var Bl={hooks:function(){return{mutationObserverCallbacks:function(e){return e.pseudoElementsCallback=zl,e}}},provides:function(e){e.pseudoElements2svg=function(e){var t=e.node,n=t===void 0?sa:t;K.searchPseudoElements&&zl(n)}}},Vl=!1,Hl={mixout:function(){return{dom:{unwatch:function(){al(),Vl=!0}}}},hooks:function(){return{bootstrap:function(){cl(xc(`mutationObserverCallbacks`,{}))},noAuto:function(){ll()},watch:function(e){var t=e.observeMutationsRoot;Vl?ol():cl(xc(`mutationObserverCallbacks`,{observeMutationsRoot:t}))}}}},Ul=function(e){return e.toLowerCase().split(` `).reduce(function(e,t){var n=t.toLowerCase().split(`-`),r=n[0],i=n.slice(1).join(`-`);if(r&&i===`h`)return e.flipX=!0,e;if(r&&i===`v`)return e.flipY=!0,e;if(i=parseFloat(i),isNaN(i))return e;switch(r){case`grow`:e.size+=i;break;case`shrink`:e.size-=i;break;case`left`:e.x-=i;break;case`right`:e.x+=i;break;case`up`:e.y-=i;break;case`down`:e.y+=i;break;case`rotate`:e.rotate+=i;break}return e},{size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0})},Wl={mixout:function(){return{parse:{transform:function(e){return Ul(e)}}}},hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute(`data-fa-transform`);return n&&(e.transform=Ul(n)),e}}},provides:function(e){e.generateAbstractTransformGrouping=function(e){var t=e.main,n=e.transform,r=e.containerWidth,i=e.iconWidth,a={outer:{transform:`translate(${r/2} 256)`},inner:{transform:`${`translate(${n.x*32}, ${n.y*32}) `} ${`scale(${n.size/16*(n.flipX?-1:1)}, ${n.size/16*(n.flipY?-1:1)}) `} ${`rotate(${n.rotate} 0 0)`}`},path:{transform:`translate(${i/2*-1} -256)`}};return{tag:`g`,attributes:G({},a.outer),children:[{tag:`g`,attributes:G({},a.inner),children:[{tag:t.icon.tag,children:t.icon.children,attributes:G(G({},t.icon.attributes),a.path)}]}]}}}},Gl={x:0,y:0,width:`100%`,height:`100%`};function Kl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return e.attributes&&(e.attributes.fill||t)&&(e.attributes.fill=`black`),e}function ql(e){return e.tag===`g`?e.children:[e]}bc([Ts,Sl,Cl,wl,Tl,Bl,Hl,Wl,{hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute(`data-fa-mask`),r=n?uc(n.split(` `).map(function(e){return e.trim()})):ic();return r.prefix||=rc(),e.mask=r,e.maskId=t.getAttribute(`data-fa-mask-id`),e}}},provides:function(e){e.generateAbstractMask=function(e){var t=e.children,n=e.attributes,r=e.main,i=e.mask,a=e.maskId,o=e.transform,s=r.width,c=r.icon,l=i.width,u=i.icon,d=ys({transform:o,containerWidth:l,iconWidth:s}),f={tag:`rect`,attributes:G(G({},Gl),{},{fill:`white`})},p=c.children?{children:c.children.map(Kl)}:{},m={tag:`g`,attributes:G({},d.inner),children:[Kl(G({tag:c.tag,attributes:G(G({},c.attributes),d.path)},p))]},h={tag:`g`,attributes:G({},d.outer),children:[m]},g=`mask-${a||fs()}`,_=`clip-${a||fs()}`,v={tag:`mask`,attributes:G(G({},Gl),{},{id:g,maskUnits:`userSpaceOnUse`,maskContentUnits:`userSpaceOnUse`}),children:[f,h]},y={tag:`defs`,children:[{tag:`clipPath`,attributes:{id:_},children:ql(u)},v]};return t.push(y,{tag:`rect`,attributes:G({fill:`currentColor`,"clip-path":`url(#${_})`,mask:`url(#${g})`},Gl)}),{children:t,attributes:n}}}},{provides:function(e){var t=!1;oa.matchMedia&&(t=oa.matchMedia(`(prefers-reduced-motion: reduce)`).matches),e.missingIconAbstract=function(){var e=[],n={fill:`currentColor`},r={attributeType:`XML`,repeatCount:`indefinite`,dur:`2s`};e.push({tag:`path`,attributes:G(G({},n),{},{d:`M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z`})});var i=G(G({},r),{},{attributeName:`opacity`}),a={tag:`circle`,attributes:G(G({},n),{},{cx:`256`,cy:`364`,r:`28`}),children:[]};return t||a.children.push({tag:`animate`,attributes:G(G({},r),{},{attributeName:`r`,values:`28;14;28;28;14;28;`})},{tag:`animate`,attributes:G(G({},i),{},{values:`1;0;1;1;0;1;`})}),e.push(a),e.push({tag:`path`,attributes:G(G({},n),{},{opacity:`1`,d:`M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z`}),children:t?[]:[{tag:`animate`,attributes:G(G({},i),{},{values:`1;0;0;0;0;1;`})}]}),t||e.push({tag:`path`,attributes:G(G({},n),{},{opacity:`0`,d:`M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z`}),children:[{tag:`animate`,attributes:G(G({},i),{},{values:`0;0;1;1;0;0;`})}]}),{tag:`g`,attributes:{class:`missing`},children:e}}}},{hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute(`data-fa-symbol`);return e.symbol=n===null?!1:n===``?!0:n,e}}}}],{mixoutsTo:Ec}),Ec.noAuto,Ec.config,Ec.library,Ec.dom,Ec.parse,Ec.findIconDefinition,Ec.toHtml;var Jl=Ec.icon;Ec.layer,Ec.text,Ec.counter;function Yl(e,t){Ge(t,!0);let n=Gt(()=>Jl(t.icon).html[0]);var r=Rr();oi(bn(r),()=>B(n)),U(e,r),Ke()}var Xl={prefix:`fas`,iconName:`expand`,icon:[448,512,[],`f065`,`M32 32C14.3 32 0 46.3 0 64l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM64 352c0-17.7-14.3-32-32-32S0 334.3 0 352l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96z`]},Zl={prefix:`fas`,iconName:`map`,icon:[512,512,[128506,62072],`f279`,`M512 48c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4L349.5 77.5 170.1 17.6c-8.1-2.7-16.8-2.1-24.4 1.7l-128 64C6.8 88.8 0 99.9 0 112L0 464c0 11.1 5.7 21.4 15.2 27.2s21.2 6.4 31.1 1.4l116.1-58.1 179.4 59.8c8.1 2.7 16.8 2.1 24.4-1.7l128-64c10.8-5.4 17.7-16.5 17.7-28.6l0-352zM192 376.9l0-284.5 128 42.7 0 284.5-128-42.7z`]},Ql={prefix:`fas`,iconName:`gear`,icon:[512,512,[9881,`cog`],`f013`,`M195.1 9.5C198.1-5.3 211.2-16 226.4-16l59.8 0c15.2 0 28.3 10.7 31.3 25.5L332 79.5c14.1 6 27.3 13.7 39.3 22.8l67.8-22.5c14.4-4.8 30.2 1.2 37.8 14.4l29.9 51.8c7.6 13.2 4.9 29.8-6.5 39.9L447 233.3c.9 7.4 1.3 15 1.3 22.7s-.5 15.3-1.3 22.7l53.4 47.5c11.4 10.1 14 26.8 6.5 39.9l-29.9 51.8c-7.6 13.1-23.4 19.2-37.8 14.4l-67.8-22.5c-12.1 9.1-25.3 16.7-39.3 22.8l-14.4 69.9c-3.1 14.9-16.2 25.5-31.3 25.5l-59.8 0c-15.2 0-28.3-10.7-31.3-25.5l-14.4-69.9c-14.1-6-27.2-13.7-39.3-22.8L73.5 432.3c-14.4 4.8-30.2-1.2-37.8-14.4L5.8 366.1c-7.6-13.2-4.9-29.8 6.5-39.9l53.4-47.5c-.9-7.4-1.3-15-1.3-22.7s.5-15.3 1.3-22.7L12.3 185.8c-11.4-10.1-14-26.8-6.5-39.9L35.7 94.1c7.6-13.2 23.4-19.2 37.8-14.4l67.8 22.5c12.1-9.1 25.3-16.7 39.3-22.8L195.1 9.5zM256.3 336a80 80 0 1 0 -.6-160 80 80 0 1 0 .6 160z`]},$l={prefix:`fas`,iconName:`ruler`,icon:[576,512,[128207],`f545`,`M209.1 516.2c-18.7 18.7-49.1 18.7-67.9 0L28.1 403.1c-18.7-18.7-18.7-49.1 0-67.9l17-17 73.5 73.5c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-73.5-73.5 33.9-33.9 50.9 50.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-50.9-50.9 33.9-33.9 73.5 73.5c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-73.5-73.5 33.9-33.9 50.9 50.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-50.9-50.9 33.9-33.9 73.5 73.5c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-73.5-73.5 17-17c18.7-18.7 49.1-18.7 67.9 0L548.5 108.9c18.7 18.7 18.7 49.1 0 67.9L209.1 516.2z`]},eu={prefix:`fas`,iconName:`globe`,icon:[512,512,[127760],`f0ac`,`M351.9 280l-190.9 0c2.9 64.5 17.2 123.9 37.5 167.4 11.4 24.5 23.7 41.8 35.1 52.4 11.2 10.5 18.9 12.2 22.9 12.2s11.7-1.7 22.9-12.2c11.4-10.6 23.7-28 35.1-52.4 20.3-43.5 34.6-102.9 37.5-167.4zM160.9 232l190.9 0C349 167.5 334.7 108.1 314.4 64.6 303 40.2 290.7 22.8 279.3 12.2 268.1 1.7 260.4 0 256.4 0s-11.7 1.7-22.9 12.2c-11.4 10.6-23.7 28-35.1 52.4-20.3 43.5-34.6 102.9-37.5 167.4zm-48 0C116.4 146.4 138.5 66.9 170.8 14.7 78.7 47.3 10.9 131.2 1.5 232l111.4 0zM1.5 280c9.4 100.8 77.2 184.7 169.3 217.3-32.3-52.2-54.4-131.7-57.9-217.3L1.5 280zm398.4 0c-3.5 85.6-25.6 165.1-57.9 217.3 92.1-32.7 159.9-116.5 169.3-217.3l-111.4 0zm111.4-48C501.9 131.2 434.1 47.3 342 14.7 374.3 66.9 396.4 146.4 399.9 232l111.4 0z`]},tu={prefix:`fas`,iconName:`compress`,icon:[448,512,[],`f066`,`M160 64c0-17.7-14.3-32-32-32S96 46.3 96 64l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96zM32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM352 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 320c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0z`]},nu={prefix:`fas`,iconName:`location-crosshairs`,icon:[576,512,[`location`],`f601`,`M288-16c17.7 0 32 14.3 32 32l0 18.3c98.1 14 175.7 91.6 189.7 189.7l18.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.3 0c-14 98.1-91.6 175.7-189.7 189.7l0 18.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.3C157.9 463.7 80.3 386.1 66.3 288L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.3 0C80.3 125.9 157.9 48.3 256 34.3L256 16c0-17.7 14.3-32 32-32zM128 256a160 160 0 1 0 320 0 160 160 0 1 0 -320 0zm160-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z`]},ru={prefix:`fas`,iconName:`layer-group`,icon:[512,512,[],`f5fd`,`M232.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 149.8C5.4 145.8 0 137.3 0 128s5.4-17.9 13.9-21.8L232.5 5.2zM48.1 218.4l164.3 75.9c27.7 12.8 59.6 12.8 87.3 0l164.3-75.9 34.1 15.8c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 277.8C5.4 273.8 0 265.3 0 256s5.4-17.9 13.9-21.8l34.1-15.8zM13.9 362.2l34.1-15.8 164.3 75.9c27.7 12.8 59.6 12.8 87.3 0l164.3-75.9 34.1 15.8c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 405.8C5.4 401.8 0 393.3 0 384s5.4-17.9 13.9-21.8z`]},iu=t(n()),au=st({position:null,cog:null,sog:null,heading:null}),ou=`signalk-chart-settings`,su={...lu(),useGeoLocation:!1,targetFps:60,appearance:{vesselColor:`#2563eb`,vesselSize:24,heading:{color:`#ffffff`,width:2,style:`solid`,lengthUnit:`nm`,lengthValue:.2},cog:{color:`#f59e0b`,width:2,style:`dashed`,lengthUnit:`min`,lengthValue:3},gc:{color:`#22c55e`,width:2,style:`dashed`,lengthUnit:`min`,lengthValue:3},ais:{vesselColor:`#f59e0b`,vesselSize:16,cog:{color:`#f59e0b`,width:1.5,style:`dashed`,lengthMinutes:3}},ruler:{color:`#ffdc32`,width:2}}},cu=`/signalk/v1/stream?subscribe=self`;function lu(){let e=window.location,t=parseInt(e.port||(e.protocol===`https:`?`443`:`80`));return{signalkProtocol:e.protocol===`https:`?`wss`:`ws`,signalkHost:e.hostname,signalkPort:t}}function uu(){try{let e=localStorage.getItem(ou);if(e){let t=JSON.parse(e);if(typeof t==`object`&&t){let e=t;return{...su,...e,useGeoLocation:typeof e.useGeoLocation==`boolean`?e.useGeoLocation:su.useGeoLocation,targetFps:typeof e.targetFps==`number`&&e.targetFps>0?e.targetFps:su.targetFps,appearance:{...su.appearance,...e.appearance??{},heading:{...su.appearance.heading,...e.appearance?.heading??{}},cog:{...su.appearance.cog,...e.appearance?.cog??{}},gc:{...su.appearance.gc,...e.appearance?.gc??{}},ais:{...su.appearance.ais,...e.appearance?.ais??{},cog:{...su.appearance.ais.cog,...e.appearance?.ais?.cog??{}}},ruler:{...su.appearance.ruler,...e.appearance?.ruler??{}}}}}}}catch{}return structuredClone(su)}function du(){let e=ln(uu()),t=P(null);return{get protocol(){return e.signalkProtocol},get host(){return e.signalkHost},get port(){return e.signalkPort},get useGeoLocation(){return e.useGeoLocation},get geoError(){return B(t)},get appearance(){return e.appearance},get targetFps(){return e.targetFps},get signalkUrl(){return`${e.signalkProtocol}://${e.signalkHost}:${String(e.signalkPort)}${cu}`},get signalkHttpUrl(){return`${e.signalkProtocol===`wss`?`https`:`http`}://${e.signalkHost}:${String(e.signalkPort)}`},apply(n){n.signalkProtocol!==void 0&&(e.signalkProtocol=n.signalkProtocol),n.signalkHost!==void 0&&(e.signalkHost=n.signalkHost),n.signalkPort!==void 0&&(e.signalkPort=n.signalkPort),n.useGeoLocation!==void 0&&(e.useGeoLocation=n.useGeoLocation,n.useGeoLocation&&F(t,null)),n.appearance!==void 0&&(e.appearance=n.appearance),n.targetFps!==void 0&&(e.targetFps=n.targetFps),localStorage.setItem(ou,JSON.stringify(e))},setGeoError(e){F(t,e,!0)},setTargetFps(t){e.targetFps=t,localStorage.setItem(ou,JSON.stringify(e))}}}var q=du();function fu(){let e=P(0);return{get value(){return B(e)},set(t){F(e,t,!0)}}}var pu=fu();function mu(){let e=P(!1);return{get following(){return B(e)},set following(t){F(e,t,!0)}}}var hu=mu(),gu=[`north`,`cog`,`heading`,`course`],_u={north:`N`,cog:`COG`,heading:`HDG`,course:`BRG`,manual:`MAN`};function vu(){let e=P(`north`),t=P(`north`);function n(e,t,n){return e===`heading`?t:e===`course`?n:!0}return{get mode(){return B(e)},get resumeMode(){return B(t)},get label(){return _u[B(e)]},setManual(){B(e)!==`manual`&&(F(t,B(e),!0),F(e,`manual`))},toggle(r,i){if(B(e)===`manual`){F(e,B(t),!0);return}let a=B(e),o=gu.indexOf(a);for(let t=1;t<=gu.length;t++){let a=gu[(o+t)%gu.length];if(n(a,r,i)){F(e,a,!0);return}}}}}var yu=vu(),bu=[`forEach`,`isDisjointFrom`,`isSubsetOf`,`isSupersetOf`],xu=[`difference`,`intersection`,`symmetricDifference`,`union`],Su=!1,Cu=class e extends Set{#e=new Map;#t=P(0);#n=P(0);#r=hr||-1;constructor(e){if(super(),e){for(var t of e)super.add(t);this.#n.v=super.size}Su||this.#a()}#i(e){return hr===this.#r?P(e):tn(e)}#a(){Su=!0;var t=e.prototype,n=Set.prototype;for(let e of bu)t[e]=function(...t){return B(this.#t),n[e].apply(this,t)};for(let r of xu)t[r]=function(...t){return B(this.#t),new e(n[r].apply(this,t))}}has(e){var t=super.has(e),n=this.#e,r=n.get(e);if(r===void 0){if(!t)return B(this.#t),!1;r=this.#i(!0),n.set(e,r)}return B(r),t}add(e){return super.has(e)||(super.add(e),F(this.#n,super.size),sn(this.#t)),this}delete(e){var t=super.delete(e),n=this.#e,r=n.get(e);return r!==void 0&&(n.delete(e),F(r,!1)),t&&(F(this.#n,super.size),sn(this.#t)),t}clear(){if(super.size!==0){super.clear();var e=this.#e;for(var t of e.values())F(t,!1);e.clear(),F(this.#n,0),sn(this.#t)}}keys(){return this.values()}values(){return B(this.#t),super.values()}entries(){return B(this.#t),super.entries()}[Symbol.iterator](){return this.keys()}get size(){return B(this.#n)}},wu=class extends Map{#e=new Map;#t=P(0);#n=P(0);#r=hr||-1;constructor(e){if(super(),e){for(var[t,n]of e)super.set(t,n);this.#n.v=super.size}}#i(e){return hr===this.#r?P(e):tn(e)}has(e){var t=this.#e,n=t.get(e);if(n===void 0)if(super.has(e))n=this.#i(0),t.set(e,n);else return B(this.#t),!1;return B(n),!0}forEach(e,t){this.#a(),super.forEach(e,t)}get(e){var t=this.#e,n=t.get(e);if(n===void 0)if(super.has(e))n=this.#i(0),t.set(e,n);else{B(this.#t);return}return B(n),super.get(e)}set(e,t){var n=this.#e,r=n.get(e),i=super.get(e),a=super.set(e,t),o=this.#t;if(r===void 0)r=this.#i(0),n.set(e,r),F(this.#n,super.size),sn(o);else if(i!==t){sn(r);var s=o.reactions===null?null:new Set(o.reactions);(s===null||!r.reactions?.every(e=>s.has(e)))&&sn(o)}return a}delete(e){var t=this.#e,n=t.get(e),r=super.delete(e);return n!==void 0&&(t.delete(e),F(n,-1)),r&&(F(this.#n,super.size),sn(this.#t)),r}clear(){if(super.size!==0){super.clear();var e=this.#e;F(this.#n,0);for(var t of e.values())F(t,-1);sn(this.#t),e.clear()}}#a(){B(this.#t);var e=this.#e;if(this.#n.v!==e.size){for(var t of super.keys())if(!e.has(t)){var n=this.#i(0);e.set(t,n)}}for([,n]of this.#e)B(n)}keys(){return B(this.#t),super.keys()}values(){return this.#a(),super.values()}entries(){return this.#a(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return B(this.#n),super.size}};function Tu(e,t){if(!e.url)return null;let n=e.url.startsWith(`/`)?`${t}${e.url}`:e.url;if(e.type===`WMS`){let t=e.layers?.join(`,`)??``,r=Eu(e.format),i=e.wmsVersion??`1.3.0`,a=i.startsWith(`1.1`)?`SRS`:`CRS`;return`${n}${n.includes(`?`)?`&`:`?`}SERVICE=WMS&VERSION=${i}&REQUEST=GetMap&${a}=EPSG:3857&BBOX={bbox-epsg-3857}&WIDTH=256&HEIGHT=256&LAYERS=${encodeURIComponent(t)}&STYLES=&FORMAT=${encodeURIComponent(r)}&TRANSPARENT=TRUE`}if(e.type===`WMTS`){if(!n.includes(`{z}`)){let t=e.layers?.[0]??``,r=Eu(e.format);return`${n}${n.includes(`?`)?`&`:`?`}SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=${encodeURIComponent(t)}&TILEMATRIXSET=EPSG:3857&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=${encodeURIComponent(r)}`}return n}return n}function Eu(e){switch(e.toLowerCase()){case`png`:return`image/png`;case`jpg`:case`jpeg`:return`image/jpeg`;case`pbf`:return`application/vnd.mapbox-vector-tile`;case`webp`:return`image/webp`;default:return`image/${e}`}}async function Du(e){let t=await fetch(`${e}/signalk/v2/api/resources/charts`);if(!t.ok)throw Error(`Charts API error: ${String(t.status)} ${t.statusText}`);return t.json()}async function Ou(e){let t=await fetch(`${e}/signalk/v1/api/vessels`);if(!t.ok)return new Map;let n=await t.json(),r=new Map;for(let[e,t]of Object.entries(n)){let n=t.design,i={};t.name&&(i.name=t.name),t.port&&(i.port=t.port),t.flag&&(i.flag=t.flag),t.communication?.callsignVhf&&(i.callsign=t.communication.callsignVhf),t.communication?.callsignHf&&(i.callsignHf=t.communication.callsignHf),t.communication?.skipperName&&(i.skipperName=t.communication.skipperName),t.navigation?.state?.value&&(i.navState=t.navigation.state.value),n?.aisShipType?.value?.name&&(i.shipType=n.aisShipType.value.name),n?.length?.value?.overall!==void 0&&(i.lengthM=n.length.value.overall),typeof n?.beam?.value==`number`&&(i.beamM=n.beam.value);let a=n?.draft?.value?.current??n?.draft?.value?.maximum;a!==void 0&&(i.draftM=a),typeof n?.airHeight?.value==`number`&&(i.airHeightM=n.airHeight.value),r.set(e,i)}return r}async function ku(e,t){let n=e.replace(/\/+$/,``),r=[`${n}${n.includes(`?`)?`&`:`?`}SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetCapabilities`,`${n}/WMTSCapabilities.xml`,`${n}/1.0.0/WMTSCapabilities.xml`],i=[];for(let n of r)try{let r=await fetch(n,{signal:AbortSignal.timeout(3e4)});if(!r.ok){i.push(`${n} → ${r.status}`);continue}let a=await r.text(),o=new DOMParser().parseFromString(a,`text/xml`);if(!o.querySelector(`Capabilities, WMT_MS_Capabilities`)){i.push(`${n} → not a WMTS capabilities document`);continue}return Au(o,e,t)}catch(e){i.push(`${n} → ${String(e)}`)}throw Error(`WMTS GetCapabilities failed:\n${i.join(`
|
|
559
|
+
If it declares any Font Awesome CSS pseudo-elements, they will not be rendered as SVG icons. Add crossorigin="anonymous" to the <link>, enable searchPseudoElementsFullScan for slower but more thorough DOM parsing, or suppress this warning by setting searchPseudoElementsWarnings to false.`)}}}catch(e){i.e(e)}finally{i.f()}if(!r.size)return;var p=Array.from(r).join(`, `);try{n=e.querySelectorAll(p)}catch{}}return new Promise(function(e,t){var r=ps(n).filter(Il).map(Fl),i=Gc.begin(`searchPseudoElements`);al(),Promise.all(r).then(function(){i(),ol(),e()}).catch(function(){i(),ol(),t()})})}}var Bl={hooks:function(){return{mutationObserverCallbacks:function(e){return e.pseudoElementsCallback=zl,e}}},provides:function(e){e.pseudoElements2svg=function(e){var t=e.node,n=t===void 0?sa:t;K.searchPseudoElements&&zl(n)}}},Vl=!1,Hl={mixout:function(){return{dom:{unwatch:function(){al(),Vl=!0}}}},hooks:function(){return{bootstrap:function(){cl(xc(`mutationObserverCallbacks`,{}))},noAuto:function(){ll()},watch:function(e){var t=e.observeMutationsRoot;Vl?ol():cl(xc(`mutationObserverCallbacks`,{observeMutationsRoot:t}))}}}},Ul=function(e){return e.toLowerCase().split(` `).reduce(function(e,t){var n=t.toLowerCase().split(`-`),r=n[0],i=n.slice(1).join(`-`);if(r&&i===`h`)return e.flipX=!0,e;if(r&&i===`v`)return e.flipY=!0,e;if(i=parseFloat(i),isNaN(i))return e;switch(r){case`grow`:e.size+=i;break;case`shrink`:e.size-=i;break;case`left`:e.x-=i;break;case`right`:e.x+=i;break;case`up`:e.y-=i;break;case`down`:e.y+=i;break;case`rotate`:e.rotate+=i;break}return e},{size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0})},Wl={mixout:function(){return{parse:{transform:function(e){return Ul(e)}}}},hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute(`data-fa-transform`);return n&&(e.transform=Ul(n)),e}}},provides:function(e){e.generateAbstractTransformGrouping=function(e){var t=e.main,n=e.transform,r=e.containerWidth,i=e.iconWidth,a={outer:{transform:`translate(${r/2} 256)`},inner:{transform:`${`translate(${n.x*32}, ${n.y*32}) `} ${`scale(${n.size/16*(n.flipX?-1:1)}, ${n.size/16*(n.flipY?-1:1)}) `} ${`rotate(${n.rotate} 0 0)`}`},path:{transform:`translate(${i/2*-1} -256)`}};return{tag:`g`,attributes:G({},a.outer),children:[{tag:`g`,attributes:G({},a.inner),children:[{tag:t.icon.tag,children:t.icon.children,attributes:G(G({},t.icon.attributes),a.path)}]}]}}}},Gl={x:0,y:0,width:`100%`,height:`100%`};function Kl(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return e.attributes&&(e.attributes.fill||t)&&(e.attributes.fill=`black`),e}function ql(e){return e.tag===`g`?e.children:[e]}bc([Ts,Sl,Cl,wl,Tl,Bl,Hl,Wl,{hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute(`data-fa-mask`),r=n?uc(n.split(` `).map(function(e){return e.trim()})):ic();return r.prefix||=rc(),e.mask=r,e.maskId=t.getAttribute(`data-fa-mask-id`),e}}},provides:function(e){e.generateAbstractMask=function(e){var t=e.children,n=e.attributes,r=e.main,i=e.mask,a=e.maskId,o=e.transform,s=r.width,c=r.icon,l=i.width,u=i.icon,d=ys({transform:o,containerWidth:l,iconWidth:s}),f={tag:`rect`,attributes:G(G({},Gl),{},{fill:`white`})},p=c.children?{children:c.children.map(Kl)}:{},m={tag:`g`,attributes:G({},d.inner),children:[Kl(G({tag:c.tag,attributes:G(G({},c.attributes),d.path)},p))]},h={tag:`g`,attributes:G({},d.outer),children:[m]},g=`mask-${a||fs()}`,_=`clip-${a||fs()}`,v={tag:`mask`,attributes:G(G({},Gl),{},{id:g,maskUnits:`userSpaceOnUse`,maskContentUnits:`userSpaceOnUse`}),children:[f,h]},y={tag:`defs`,children:[{tag:`clipPath`,attributes:{id:_},children:ql(u)},v]};return t.push(y,{tag:`rect`,attributes:G({fill:`currentColor`,"clip-path":`url(#${_})`,mask:`url(#${g})`},Gl)}),{children:t,attributes:n}}}},{provides:function(e){var t=!1;oa.matchMedia&&(t=oa.matchMedia(`(prefers-reduced-motion: reduce)`).matches),e.missingIconAbstract=function(){var e=[],n={fill:`currentColor`},r={attributeType:`XML`,repeatCount:`indefinite`,dur:`2s`};e.push({tag:`path`,attributes:G(G({},n),{},{d:`M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z`})});var i=G(G({},r),{},{attributeName:`opacity`}),a={tag:`circle`,attributes:G(G({},n),{},{cx:`256`,cy:`364`,r:`28`}),children:[]};return t||a.children.push({tag:`animate`,attributes:G(G({},r),{},{attributeName:`r`,values:`28;14;28;28;14;28;`})},{tag:`animate`,attributes:G(G({},i),{},{values:`1;0;1;1;0;1;`})}),e.push(a),e.push({tag:`path`,attributes:G(G({},n),{},{opacity:`1`,d:`M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z`}),children:t?[]:[{tag:`animate`,attributes:G(G({},i),{},{values:`1;0;0;0;0;1;`})}]}),t||e.push({tag:`path`,attributes:G(G({},n),{},{opacity:`0`,d:`M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z`}),children:[{tag:`animate`,attributes:G(G({},i),{},{values:`0;0;1;1;0;0;`})}]}),{tag:`g`,attributes:{class:`missing`},children:e}}}},{hooks:function(){return{parseNodeAttributes:function(e,t){var n=t.getAttribute(`data-fa-symbol`);return e.symbol=n===null?!1:n===``?!0:n,e}}}}],{mixoutsTo:Ec}),Ec.noAuto,Ec.config,Ec.library,Ec.dom,Ec.parse,Ec.findIconDefinition,Ec.toHtml;var Jl=Ec.icon;Ec.layer,Ec.text,Ec.counter;function Yl(e,t){Ge(t,!0);let n=Gt(()=>Jl(t.icon).html[0]);var r=Rr();oi(bn(r),()=>B(n)),U(e,r),Ke()}var Xl={prefix:`fas`,iconName:`expand`,icon:[448,512,[],`f065`,`M32 32C14.3 32 0 46.3 0 64l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L32 32zM64 352c0-17.7-14.3-32-32-32S0 334.3 0 352l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 32c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM448 352c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96z`]},Zl={prefix:`fas`,iconName:`map`,icon:[512,512,[128506,62072],`f279`,`M512 48c0-11.1-5.7-21.4-15.2-27.2s-21.2-6.4-31.1-1.4L349.5 77.5 170.1 17.6c-8.1-2.7-16.8-2.1-24.4 1.7l-128 64C6.8 88.8 0 99.9 0 112L0 464c0 11.1 5.7 21.4 15.2 27.2s21.2 6.4 31.1 1.4l116.1-58.1 179.4 59.8c8.1 2.7 16.8 2.1 24.4-1.7l128-64c10.8-5.4 17.7-16.5 17.7-28.6l0-352zM192 376.9l0-284.5 128 42.7 0 284.5-128-42.7z`]},Ql={prefix:`fas`,iconName:`gear`,icon:[512,512,[9881,`cog`],`f013`,`M195.1 9.5C198.1-5.3 211.2-16 226.4-16l59.8 0c15.2 0 28.3 10.7 31.3 25.5L332 79.5c14.1 6 27.3 13.7 39.3 22.8l67.8-22.5c14.4-4.8 30.2 1.2 37.8 14.4l29.9 51.8c7.6 13.2 4.9 29.8-6.5 39.9L447 233.3c.9 7.4 1.3 15 1.3 22.7s-.5 15.3-1.3 22.7l53.4 47.5c11.4 10.1 14 26.8 6.5 39.9l-29.9 51.8c-7.6 13.1-23.4 19.2-37.8 14.4l-67.8-22.5c-12.1 9.1-25.3 16.7-39.3 22.8l-14.4 69.9c-3.1 14.9-16.2 25.5-31.3 25.5l-59.8 0c-15.2 0-28.3-10.7-31.3-25.5l-14.4-69.9c-14.1-6-27.2-13.7-39.3-22.8L73.5 432.3c-14.4 4.8-30.2-1.2-37.8-14.4L5.8 366.1c-7.6-13.2-4.9-29.8 6.5-39.9l53.4-47.5c-.9-7.4-1.3-15-1.3-22.7s.5-15.3 1.3-22.7L12.3 185.8c-11.4-10.1-14-26.8-6.5-39.9L35.7 94.1c7.6-13.2 23.4-19.2 37.8-14.4l67.8 22.5c12.1-9.1 25.3-16.7 39.3-22.8L195.1 9.5zM256.3 336a80 80 0 1 0 -.6-160 80 80 0 1 0 .6 160z`]},$l={prefix:`fas`,iconName:`ruler`,icon:[576,512,[128207],`f545`,`M209.1 516.2c-18.7 18.7-49.1 18.7-67.9 0L28.1 403.1c-18.7-18.7-18.7-49.1 0-67.9l17-17 73.5 73.5c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-73.5-73.5 33.9-33.9 50.9 50.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-50.9-50.9 33.9-33.9 73.5 73.5c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-73.5-73.5 33.9-33.9 50.9 50.9c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-50.9-50.9 33.9-33.9 73.5 73.5c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9l-73.5-73.5 17-17c18.7-18.7 49.1-18.7 67.9 0L548.5 108.9c18.7 18.7 18.7 49.1 0 67.9L209.1 516.2z`]},eu={prefix:`fas`,iconName:`globe`,icon:[512,512,[127760],`f0ac`,`M351.9 280l-190.9 0c2.9 64.5 17.2 123.9 37.5 167.4 11.4 24.5 23.7 41.8 35.1 52.4 11.2 10.5 18.9 12.2 22.9 12.2s11.7-1.7 22.9-12.2c11.4-10.6 23.7-28 35.1-52.4 20.3-43.5 34.6-102.9 37.5-167.4zM160.9 232l190.9 0C349 167.5 334.7 108.1 314.4 64.6 303 40.2 290.7 22.8 279.3 12.2 268.1 1.7 260.4 0 256.4 0s-11.7 1.7-22.9 12.2c-11.4 10.6-23.7 28-35.1 52.4-20.3 43.5-34.6 102.9-37.5 167.4zm-48 0C116.4 146.4 138.5 66.9 170.8 14.7 78.7 47.3 10.9 131.2 1.5 232l111.4 0zM1.5 280c9.4 100.8 77.2 184.7 169.3 217.3-32.3-52.2-54.4-131.7-57.9-217.3L1.5 280zm398.4 0c-3.5 85.6-25.6 165.1-57.9 217.3 92.1-32.7 159.9-116.5 169.3-217.3l-111.4 0zm111.4-48C501.9 131.2 434.1 47.3 342 14.7 374.3 66.9 396.4 146.4 399.9 232l111.4 0z`]},tu={prefix:`fas`,iconName:`compress`,icon:[448,512,[],`f066`,`M160 64c0-17.7-14.3-32-32-32S96 46.3 96 64l0 64-64 0c-17.7 0-32 14.3-32 32s14.3 32 32 32l96 0c17.7 0 32-14.3 32-32l0-96zM32 320c-17.7 0-32 14.3-32 32s14.3 32 32 32l64 0 0 64c0 17.7 14.3 32 32 32s32-14.3 32-32l0-96c0-17.7-14.3-32-32-32l-96 0zM352 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32l96 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-64 0 0-64zM320 320c-17.7 0-32 14.3-32 32l0 96c0 17.7 14.3 32 32 32s32-14.3 32-32l0-64 64 0c17.7 0 32-14.3 32-32s-14.3-32-32-32l-96 0z`]},nu={prefix:`fas`,iconName:`location-crosshairs`,icon:[576,512,[`location`],`f601`,`M288-16c17.7 0 32 14.3 32 32l0 18.3c98.1 14 175.7 91.6 189.7 189.7l18.3 0c17.7 0 32 14.3 32 32s-14.3 32-32 32l-18.3 0c-14 98.1-91.6 175.7-189.7 189.7l0 18.3c0 17.7-14.3 32-32 32s-32-14.3-32-32l0-18.3C157.9 463.7 80.3 386.1 66.3 288L48 288c-17.7 0-32-14.3-32-32s14.3-32 32-32l18.3 0C80.3 125.9 157.9 48.3 256 34.3L256 16c0-17.7 14.3-32 32-32zM128 256a160 160 0 1 0 320 0 160 160 0 1 0 -320 0zm160-96a96 96 0 1 1 0 192 96 96 0 1 1 0-192z`]},ru={prefix:`fas`,iconName:`layer-group`,icon:[512,512,[],`f5fd`,`M232.5 5.2c14.9-6.9 32.1-6.9 47 0l218.6 101c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 149.8C5.4 145.8 0 137.3 0 128s5.4-17.9 13.9-21.8L232.5 5.2zM48.1 218.4l164.3 75.9c27.7 12.8 59.6 12.8 87.3 0l164.3-75.9 34.1 15.8c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 277.8C5.4 273.8 0 265.3 0 256s5.4-17.9 13.9-21.8l34.1-15.8zM13.9 362.2l34.1-15.8 164.3 75.9c27.7 12.8 59.6 12.8 87.3 0l164.3-75.9 34.1 15.8c8.5 3.9 13.9 12.4 13.9 21.8s-5.4 17.9-13.9 21.8l-218.6 101c-14.9 6.9-32.1 6.9-47 0L13.9 405.8C5.4 401.8 0 393.3 0 384s5.4-17.9 13.9-21.8z`]},iu=t(n()),au=st({position:null,cog:null,sog:null,heading:null}),ou=`signalk-chart-settings`,su={...lu(),useGeoLocation:!1,targetFps:60,appearance:{vesselColor:`#2563eb`,vesselSize:24,heading:{color:`#ffffff`,width:2,style:`solid`,lengthUnit:`nm`,lengthValue:.2},cog:{color:`#f59e0b`,width:2,style:`dashed`,lengthUnit:`min`,lengthValue:3},gc:{color:`#22c55e`,width:2,style:`dashed`,lengthUnit:`min`,lengthValue:3},ais:{vesselColor:`#f59e0b`,vesselSize:16,cog:{color:`#f59e0b`,width:1.5,style:`dashed`,lengthMinutes:3}},ruler:{color:`#ffdc32`,width:2},route:{bearing:{color:`#ff6d00`,width:2,style:`dashed`},segment:{color:`#e040fb`,width:2.5,style:`solid`},remaining:{color:`#e040fb`,width:2,style:`dashed`}}}},cu=`/signalk/v1/stream?subscribe=self`;function lu(){let e=window.location,t=parseInt(e.port||(e.protocol===`https:`?`443`:`80`));return{signalkProtocol:e.protocol===`https:`?`wss`:`ws`,signalkHost:e.hostname,signalkPort:t}}function uu(){try{let e=localStorage.getItem(ou);if(e){let t=JSON.parse(e);if(typeof t==`object`&&t){let e=t;return{...su,...e,useGeoLocation:typeof e.useGeoLocation==`boolean`?e.useGeoLocation:su.useGeoLocation,targetFps:typeof e.targetFps==`number`&&e.targetFps>0?e.targetFps:su.targetFps,appearance:{...su.appearance,...e.appearance??{},heading:{...su.appearance.heading,...e.appearance?.heading??{}},cog:{...su.appearance.cog,...e.appearance?.cog??{}},gc:{...su.appearance.gc,...e.appearance?.gc??{}},ais:{...su.appearance.ais,...e.appearance?.ais??{},cog:{...su.appearance.ais.cog,...e.appearance?.ais?.cog??{}}},ruler:{...su.appearance.ruler,...e.appearance?.ruler??{}},route:{bearing:{...su.appearance.route.bearing,...e.appearance?.route?.bearing??{}},segment:{...su.appearance.route.segment,...e.appearance?.route?.segment??{}},remaining:{...su.appearance.route.remaining,...e.appearance?.route?.remaining??{}}}}}}}}catch{}return structuredClone(su)}function du(){let e=ln(uu()),t=P(null);return{get protocol(){return e.signalkProtocol},get host(){return e.signalkHost},get port(){return e.signalkPort},get useGeoLocation(){return e.useGeoLocation},get geoError(){return B(t)},get appearance(){return e.appearance},get targetFps(){return e.targetFps},get signalkUrl(){return`${e.signalkProtocol}://${e.signalkHost}:${String(e.signalkPort)}${cu}`},get signalkHttpUrl(){return`${e.signalkProtocol===`wss`?`https`:`http`}://${e.signalkHost}:${String(e.signalkPort)}`},apply(n){n.signalkProtocol!==void 0&&(e.signalkProtocol=n.signalkProtocol),n.signalkHost!==void 0&&(e.signalkHost=n.signalkHost),n.signalkPort!==void 0&&(e.signalkPort=n.signalkPort),n.useGeoLocation!==void 0&&(e.useGeoLocation=n.useGeoLocation,n.useGeoLocation&&F(t,null)),n.appearance!==void 0&&(e.appearance=n.appearance),n.targetFps!==void 0&&(e.targetFps=n.targetFps),localStorage.setItem(ou,JSON.stringify(e))},setGeoError(e){F(t,e,!0)},setTargetFps(t){e.targetFps=t,localStorage.setItem(ou,JSON.stringify(e))}}}var q=du();function fu(){let e=P(0);return{get value(){return B(e)},set(t){F(e,t,!0)}}}var pu=fu();function mu(){let e=P(!1);return{get following(){return B(e)},set following(t){F(e,t,!0)}}}var hu=mu(),gu=[`north`,`cog`,`heading`,`course`],_u={north:`N`,cog:`COG`,heading:`HDG`,course:`BRG`,manual:`MAN`};function vu(){let e=P(`north`),t=P(`north`);function n(e,t,n){return e===`heading`?t:e===`course`?n:!0}return{get mode(){return B(e)},get resumeMode(){return B(t)},get label(){return _u[B(e)]},setManual(){B(e)!==`manual`&&(F(t,B(e),!0),F(e,`manual`))},toggle(r,i){if(B(e)===`manual`){F(e,B(t),!0);return}let a=B(e),o=gu.indexOf(a);for(let t=1;t<=gu.length;t++){let a=gu[(o+t)%gu.length];if(n(a,r,i)){F(e,a,!0);return}}}}}var yu=vu(),bu=[`forEach`,`isDisjointFrom`,`isSubsetOf`,`isSupersetOf`],xu=[`difference`,`intersection`,`symmetricDifference`,`union`],Su=!1,Cu=class e extends Set{#e=new Map;#t=P(0);#n=P(0);#r=hr||-1;constructor(e){if(super(),e){for(var t of e)super.add(t);this.#n.v=super.size}Su||this.#a()}#i(e){return hr===this.#r?P(e):tn(e)}#a(){Su=!0;var t=e.prototype,n=Set.prototype;for(let e of bu)t[e]=function(...t){return B(this.#t),n[e].apply(this,t)};for(let r of xu)t[r]=function(...t){return B(this.#t),new e(n[r].apply(this,t))}}has(e){var t=super.has(e),n=this.#e,r=n.get(e);if(r===void 0){if(!t)return B(this.#t),!1;r=this.#i(!0),n.set(e,r)}return B(r),t}add(e){return super.has(e)||(super.add(e),F(this.#n,super.size),sn(this.#t)),this}delete(e){var t=super.delete(e),n=this.#e,r=n.get(e);return r!==void 0&&(n.delete(e),F(r,!1)),t&&(F(this.#n,super.size),sn(this.#t)),t}clear(){if(super.size!==0){super.clear();var e=this.#e;for(var t of e.values())F(t,!1);e.clear(),F(this.#n,0),sn(this.#t)}}keys(){return this.values()}values(){return B(this.#t),super.values()}entries(){return B(this.#t),super.entries()}[Symbol.iterator](){return this.keys()}get size(){return B(this.#n)}},wu=class extends Map{#e=new Map;#t=P(0);#n=P(0);#r=hr||-1;constructor(e){if(super(),e){for(var[t,n]of e)super.set(t,n);this.#n.v=super.size}}#i(e){return hr===this.#r?P(e):tn(e)}has(e){var t=this.#e,n=t.get(e);if(n===void 0)if(super.has(e))n=this.#i(0),t.set(e,n);else return B(this.#t),!1;return B(n),!0}forEach(e,t){this.#a(),super.forEach(e,t)}get(e){var t=this.#e,n=t.get(e);if(n===void 0)if(super.has(e))n=this.#i(0),t.set(e,n);else{B(this.#t);return}return B(n),super.get(e)}set(e,t){var n=this.#e,r=n.get(e),i=super.get(e),a=super.set(e,t),o=this.#t;if(r===void 0)r=this.#i(0),n.set(e,r),F(this.#n,super.size),sn(o);else if(i!==t){sn(r);var s=o.reactions===null?null:new Set(o.reactions);(s===null||!r.reactions?.every(e=>s.has(e)))&&sn(o)}return a}delete(e){var t=this.#e,n=t.get(e),r=super.delete(e);return n!==void 0&&(t.delete(e),F(n,-1)),r&&(F(this.#n,super.size),sn(this.#t)),r}clear(){if(super.size!==0){super.clear();var e=this.#e;F(this.#n,0);for(var t of e.values())F(t,-1);sn(this.#t),e.clear()}}#a(){B(this.#t);var e=this.#e;if(this.#n.v!==e.size){for(var t of super.keys())if(!e.has(t)){var n=this.#i(0);e.set(t,n)}}for([,n]of this.#e)B(n)}keys(){return B(this.#t),super.keys()}values(){return this.#a(),super.values()}entries(){return this.#a(),super.entries()}[Symbol.iterator](){return this.entries()}get size(){return B(this.#n),super.size}};function Tu(e,t){if(!e.url)return null;let n=e.url.startsWith(`/`)?`${t}${e.url}`:e.url;if(e.type===`WMS`){let t=e.layers?.join(`,`)??``,r=Eu(e.format),i=e.wmsVersion??`1.3.0`,a=i.startsWith(`1.1`)?`SRS`:`CRS`;return`${n}${n.includes(`?`)?`&`:`?`}SERVICE=WMS&VERSION=${i}&REQUEST=GetMap&${a}=EPSG:3857&BBOX={bbox-epsg-3857}&WIDTH=256&HEIGHT=256&LAYERS=${encodeURIComponent(t)}&STYLES=&FORMAT=${encodeURIComponent(r)}&TRANSPARENT=TRUE`}if(e.type===`WMTS`){if(!n.includes(`{z}`)){let t=e.layers?.[0]??``,r=Eu(e.format);return`${n}${n.includes(`?`)?`&`:`?`}SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=${encodeURIComponent(t)}&TILEMATRIXSET=EPSG:3857&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=${encodeURIComponent(r)}`}return n}return n}function Eu(e){switch(e.toLowerCase()){case`png`:return`image/png`;case`jpg`:case`jpeg`:return`image/jpeg`;case`pbf`:return`application/vnd.mapbox-vector-tile`;case`webp`:return`image/webp`;default:return`image/${e}`}}async function Du(e){let t=await fetch(`${e}/signalk/v2/api/resources/charts`);if(!t.ok)throw Error(`Charts API error: ${String(t.status)} ${t.statusText}`);return t.json()}async function Ou(e){let t=await fetch(`${e}/signalk/v1/api/vessels`);if(!t.ok)return new Map;let n=await t.json(),r=new Map;for(let[e,t]of Object.entries(n)){let n=t.design,i={};t.name&&(i.name=t.name),t.port&&(i.port=t.port),t.flag&&(i.flag=t.flag),t.communication?.callsignVhf&&(i.callsign=t.communication.callsignVhf),t.communication?.callsignHf&&(i.callsignHf=t.communication.callsignHf),t.communication?.skipperName&&(i.skipperName=t.communication.skipperName),t.navigation?.state?.value&&(i.navState=t.navigation.state.value),n?.aisShipType?.value?.name&&(i.shipType=n.aisShipType.value.name),n?.length?.value?.overall!==void 0&&(i.lengthM=n.length.value.overall),typeof n?.beam?.value==`number`&&(i.beamM=n.beam.value);let a=n?.draft?.value?.current??n?.draft?.value?.maximum;a!==void 0&&(i.draftM=a),typeof n?.airHeight?.value==`number`&&(i.airHeightM=n.airHeight.value),r.set(e,i)}return r}async function ku(e,t){let n=e.replace(/\/+$/,``),r=[`${n}${n.includes(`?`)?`&`:`?`}SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetCapabilities`,`${n}/WMTSCapabilities.xml`,`${n}/1.0.0/WMTSCapabilities.xml`],i=[];for(let n of r)try{let r=await fetch(n,{signal:AbortSignal.timeout(3e4)});if(!r.ok){i.push(`${n} → ${r.status}`);continue}let a=await r.text(),o=new DOMParser().parseFromString(a,`text/xml`);if(!o.querySelector(`Capabilities, WMT_MS_Capabilities`)){i.push(`${n} → not a WMTS capabilities document`);continue}return Au(o,e,t)}catch(e){i.push(`${n} → ${String(e)}`)}throw Error(`WMTS GetCapabilities failed:\n${i.join(`
|
|
560
560
|
`)}`)}function Au(e,t,n){let r=Mu(e);if(r.size===0)throw Error(`No EPSG:3857 / WebMercatorQuad tile matrix sets`);let i=Array.from(e.querySelectorAll(`Contents > Layer`));if(i.length===0)throw Error(`No layers in capabilities document`);let a=i.map(e=>({id:Fu(e,`Identifier`)??``,title:Fu(e,`Title`)??Fu(e,`Identifier`)??``})),o=Nu(i,r,n);return ju(t,t.includes(`?`)?`&`:`?`,o,r,a)}function ju(e,t,n,r,i){let a=Fu(n,`Identifier`)??``,o=Fu(n,`Format`)??`image/png`,s=Pu(n,r),c=n.querySelector(`ResourceURL[resourceType="tile"]`);return c?{tileUrlTemplate:(c.getAttribute(`template`)??``).replace(/\{TileMatrixSet\}/g,s).replace(/\{TileMatrix\}/g,`{z}`).replace(/\{TileRow\}/g,`{y}`).replace(/\{TileCol\}/g,`{x}`),layerName:a,tileMatrixSet:s,format:o,availableLayers:i}:{tileUrlTemplate:`${e}${t}SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=${encodeURIComponent(a)}&TILEMATRIXSET=${encodeURIComponent(s)}&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=${encodeURIComponent(o)}`,layerName:a,tileMatrixSet:s,format:o,availableLayers:i}}function Mu(e){let t=new Set;for(let n of e.querySelectorAll(`Contents > TileMatrixSet`)){let e=Fu(n,`Identifier`)??``,r=Fu(n,`SupportedCRS`)??``;(e===`WebMercatorQuad`||e===`GoogleMapsCompatible`||r.includes(`3857`)||r.includes(`900913`))&&t.add(e)}return t}function Nu(e,t,n){if(n){let t=e.find(e=>Fu(e,`Identifier`)===n);if(t)return t}for(let n of e)for(let e of n.querySelectorAll(`TileMatrixSetLink > TileMatrixSet`))if(t.has(e.textContent??``))return n;return e[0]}function Pu(e,t){for(let n of e.querySelectorAll(`TileMatrixSetLink > TileMatrixSet`)){let e=n.textContent??``;if(t.has(e))return e}return t.values().next().value??`WebMercatorQuad`}function Fu(e,t){return e.querySelector(t)?.textContent??null}function Iu(e,t){return ku(e,t)}function Lu(e,t){return ku(e,t)}var Ru=`chart-wmts-overrides`,zu=`chart-wmts-layer-sel`,Bu=`chart-selected`;function Vu(e){try{let t=localStorage.getItem(e);if(t)return new Map(JSON.parse(t))}catch{}return new Map}function Hu(){try{let e=localStorage.getItem(Bu);if(e)return new Set(JSON.parse(e))}catch{}return new Set}function Uu(e,t){localStorage.setItem(e,JSON.stringify([...t]))}function Wu(){let e=P(ln({})),t=new Cu,n=Hu(),r=P(!1),i=P(null),a=``,o=new wu,s=new Cu,c=Vu(Ru),l=new wu,u=new wu,d=new Cu,f=Vu(zu);return{get available(){return B(e)},get selected(){return t},get loading(){return B(r)},get error(){return B(i)},get wmtsFailed(){return s},visibleLayers(e){return d.has(e)?l.get(e)??[]:u.get(e)??l.get(e)??[]},hasFilter(e){return(u.get(e)?.length??0)>0},isShowingAll(e){return d.has(e)},toggleShowAll(e){d.has(e)?d.delete(e):d.add(e)},needsManualUrl(t){let n=B(e)[t];return!!n&&n.type===`WMTS`&&s.has(t)&&!c.has(t)},getOverride(e){return c.get(e)??``},getLayerSel(e){return f.get(e)??``},setOverride(e,t){t.trim()?c.set(e,t.trim()):c.delete(e),Uu(Ru,c),s.delete(e),s.add(e)},async selectLayer(t,n){let r=B(e)[t];if(!r||r.type!==`WMTS`)return;let i=r.url&&r.url.startsWith(`/`)?`${a}${r.url}`:r.url??``;try{let e=await Lu(i,n);o.set(t,e.tileUrlTemplate),l.set(t,e.availableLayers),f.set(t,e.layerName),Uu(zu,f)}catch(e){console.warn(`[charts] WMTS layer switch failed for ${t}:`,e)}},tileUrl(e){return e.type===`WMTS`?c.get(e.identifier)??o.get(e.identifier)??``:Tu(e,a)??``},styleUrl(e){return e.style?e.style.startsWith(`/`)?`${a}${e.style}`:e.style:null},async load(d){a=d,F(r,!0),F(i,null);try{F(e,await Du(d),!0);for(let r of n)r in B(e)&&t.add(r);n.clear();let r=Object.values(B(e)).filter(e=>e.type===`WMTS`&&!c.has(e.identifier)).map(async e=>{let t=e.url&&e.url.startsWith(`/`)?`${d}${e.url}`:e.url??``;if(!t){s.add(e.identifier);return}let n=f.get(e.identifier)??e.layers?.[0];try{let r=await Iu(t,n);if(o.set(e.identifier,r.tileUrlTemplate),l.set(e.identifier,r.availableLayers),e.layers&&e.layers.length>0){let t=new Map(r.availableLayers.map(e=>[e.id,e])),n=e.layers.map(e=>t.get(e)).filter(Boolean);n.length>0&&u.set(e.identifier,n)}f.has(e.identifier)||f.set(e.identifier,r.layerName)}catch{s.add(e.identifier)}});await Promise.allSettled(r)}catch(e){F(i,String(e),!0)}finally{F(r,!1)}},toggle(e){t.has(e)?t.delete(e):t.add(e),localStorage.setItem(Bu,JSON.stringify([...t]))}}}var J=Wu(),Gu=[{id:`osm`,name:`OpenStreetMap`},{id:`seamarks`,name:`OpenSeaMap`}],Ku=`base-layers-enabled`;function qu(){try{let e=localStorage.getItem(Ku);if(e)return JSON.parse(e)}catch{}return Gu.map(e=>e.id)}function Ju(){let e=new Cu(qu());return{get enabled(){return e},toggle(t){e.has(t)?e.delete(t):e.add(t),localStorage.setItem(Ku,JSON.stringify([...e]))}}}var Yu=Ju();function Xu(){let e=P(null),t=P(ln([])),n=new Map,r=P(0);return{get hotData(){return B(e)},get ids(){return B(t)},get coldMap(){return n},get coldVersion(){return B(r)},get count(){return B(t).length},updateBinary(r,i,a){F(e,new Float64Array(r),!0),F(t,i,!0);for(let e of a){let t=n.get(e.id);n.set(e.id,{...t,id:e.id,name:e.name??t?.name,mmsi:e.mmsi??t?.mmsi})}},setInfoCache(e){for(let[t,r]of e){let e=n.get(t)??{id:t};n.set(t,{...e,name:r.name??e.name,callsign:r.callsign??e.callsign,callsignHf:r.callsignHf??e.callsignHf,skipperName:r.skipperName??e.skipperName,port:r.port??e.port,flag:r.flag??e.flag,shipType:r.shipType??e.shipType,navState:r.navState??e.navState,lengthM:r.lengthM??e.lengthM,beamM:r.beamM??e.beamM,draftM:r.draftM??e.draftM,airHeightM:r.airHeightM??e.airHeightM})}on(r)},getTarget(r){if(!B(e)||r<0||r>=B(t).length)return null;let i=r*7,a=B(t)[r],o=n.get(a),s=B(e)[i+0],c=B(e)[i+1],l=B(e)[i+2],u=B(e)[i+3],d=B(e)[i+4],f=B(e)[i+5],p=B(e)[i+6];return{id:a,mmsi:o?.mmsi,name:o?.name,position:{longitude:s,latitude:c},cog:isNaN(l)?void 0:l,sog:isNaN(u)?void 0:u,heading:isNaN(d)?void 0:d,rot:isNaN(f)?void 0:f,lastPositionUpdateMs:Date.now()-p*1e3,shipType:o?.shipType,navState:o?.navState,callsign:o?.callsign,callsignHf:o?.callsignHf,skipperName:o?.skipperName,port:o?.port,flag:o?.flag,lengthM:o?.lengthM,beamM:o?.beamM,draftM:o?.draftM,airHeightM:o?.airHeightM}}}}var Zu=Xu();function Qu(e,t){if(!e)throw Error(t||`loader assertion failed.`)}var $u={self:typeof self<`u`&&self,window:typeof window<`u`&&window,global:typeof global<`u`&&global,document:typeof document<`u`&&document};$u.self||$u.window||$u.global,$u.window||$u.self||$u.global,$u.global||$u.self||$u.window,$u.document;var ed=!!(typeof process!=`object`||String(process)!==`[object process]`||process.browser),td=typeof process<`u`&&process.version&&/v([0-9]*)/.exec(process.version);td&&parseFloat(td[1]);var nd=globalThis;globalThis.document;var rd=globalThis.process||{};globalThis.console;var id=globalThis.navigator||{};function ad(e){if(typeof window<`u`&&window.process?.type===`renderer`||typeof process<`u`&&process.versions?.electron)return!0;let t=typeof navigator<`u`&&navigator.userAgent,n=e||t;return!!(n&&n.indexOf(`Electron`)>=0)}function od(){return!(typeof process==`object`&&String(process)===`[object process]`&&!process?.browser)||ad()}function sd(e){return!e&&!od()?`Node`:ad(e)?`Electron`:(e||id.userAgent||``).indexOf(`Edge`)>-1?`Edge`:globalThis.chrome?`Chrome`:globalThis.safari?`Safari`:globalThis.mozInnerScreenX?`Firefox`:`Unknown`}var cd=`4.1.1`;function ld(e,t){if(!e)throw Error(t||`Assertion failed`)}function ud(e){if(!e)return 0;let t;switch(typeof e){case`number`:t=e;break;case`object`:t=e.logLevel||e.priority||0;break;default:return 0}return ld(Number.isFinite(t)&&t>=0),t}function dd(e){let{logLevel:t,message:n}=e;e.logLevel=ud(t);let r=e.args?Array.from(e.args):[];for(;r.length&&r.shift()!==n;);switch(typeof t){case`string`:case`function`:n!==void 0&&r.unshift(n),e.message=t;break;case`object`:Object.assign(e,t);break;default:}typeof e.message==`function`&&(e.message=e.message());let i=typeof e.message;return ld(i===`string`||i===`object`),Object.assign(e,{args:r},e.opts)}var fd=()=>{},pd=class{constructor({level:e=0}={}){this.userData={},this._onceCache=new Set,this._level=e}set level(e){this.setLevel(e)}get level(){return this.getLevel()}setLevel(e){return this._level=e,this}getLevel(){return this._level}warn(e,...t){return this._log(`warn`,0,e,t,{once:!0})}error(e,...t){return this._log(`error`,0,e,t)}log(e,t,...n){return this._log(`log`,e,t,n)}info(e,t,...n){return this._log(`info`,e,t,n)}once(e,t,...n){return this._log(`once`,e,t,n,{once:!0})}_log(e,t,n,r,i={}){let a=dd({logLevel:t,message:n,args:this._buildArgs(t,n,r),opts:i});return this._createLogFunction(e,a,i)}_buildArgs(e,t,n){return[e,t,...n]}_createLogFunction(e,t,n){if(!this._shouldLog(t.logLevel))return fd;let r=this._getOnceTag(n.tag??t.tag??t.message);if((n.once||t.once)&&r!==void 0){if(this._onceCache.has(r))return fd;this._onceCache.add(r)}return this._emit(e,t)}_shouldLog(e){return this.getLevel()>=ud(e)}_getOnceTag(e){if(e!==void 0)try{return typeof e==`string`?e:String(e)}catch{return}}};function md(e){try{let t=window[e],n=`__storage_test__`;return t.setItem(n,n),t.removeItem(n),t}catch{return null}}var hd=class{constructor(e,t,n=`sessionStorage`){this.storage=md(n),this.id=e,this.config=t,this._loadConfiguration()}getConfiguration(){return this.config}setConfiguration(e){if(Object.assign(this.config,e),this.storage){let e=JSON.stringify(this.config);this.storage.setItem(this.id,e)}}_loadConfiguration(){let e={};if(this.storage){let t=this.storage.getItem(this.id);e=t?JSON.parse(t):{}}return Object.assign(this.config,e),this}};function gd(e){let t;return t=e<10?`${e.toFixed(2)}ms`:e<100?`${e.toFixed(1)}ms`:e<1e3?`${e.toFixed(0)}ms`:`${(e/1e3).toFixed(2)}s`,t}function _d(e,t=8){let n=Math.max(t-e.length,0);return`${` `.repeat(n)}${e}`}var vd;(function(e){e[e.BLACK=30]=`BLACK`,e[e.RED=31]=`RED`,e[e.GREEN=32]=`GREEN`,e[e.YELLOW=33]=`YELLOW`,e[e.BLUE=34]=`BLUE`,e[e.MAGENTA=35]=`MAGENTA`,e[e.CYAN=36]=`CYAN`,e[e.WHITE=37]=`WHITE`,e[e.BRIGHT_BLACK=90]=`BRIGHT_BLACK`,e[e.BRIGHT_RED=91]=`BRIGHT_RED`,e[e.BRIGHT_GREEN=92]=`BRIGHT_GREEN`,e[e.BRIGHT_YELLOW=93]=`BRIGHT_YELLOW`,e[e.BRIGHT_BLUE=94]=`BRIGHT_BLUE`,e[e.BRIGHT_MAGENTA=95]=`BRIGHT_MAGENTA`,e[e.BRIGHT_CYAN=96]=`BRIGHT_CYAN`,e[e.BRIGHT_WHITE=97]=`BRIGHT_WHITE`})(vd||={});var yd=10;function bd(e){return typeof e==`string`?(e=e.toUpperCase(),vd[e]||vd.WHITE):e}function xd(e,t,n){return!od&&typeof e==`string`&&(t&&(e=`\u001b[${bd(t)}m${e}\u001b[39m`),n&&(e=`\u001b[${bd(n)+yd}m${e}\u001b[49m`)),e}function Sd(e,t=[`constructor`]){let n=Object.getOwnPropertyNames(Object.getPrototypeOf(e)),r=e;for(let i of n){let n=r[i];typeof n==`function`&&(t.find(e=>i===e)||(r[i]=n.bind(e)))}}function Cd(){let e;if(od()&&nd.performance)e=nd?.performance?.now?.();else if(`hrtime`in rd){let t=rd?.hrtime?.();e=t[0]*1e3+t[1]/1e6}else e=Date.now();return e}var wd={debug:od()&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},Td={enabled:!0,level:0},Ed=class extends pd{constructor({id:e}={id:``}){super({level:0}),this.VERSION=cd,this._startTs=Cd(),this._deltaTs=Cd(),this.userData={},this.LOG_THROTTLE_TIMEOUT=0,this.id=e,this.userData={},this._storage=new hd(`__probe-${this.id}__`,{[this.id]:Td}),this.timeStamp(`${this.id} started`),Sd(this),Object.seal(this)}isEnabled(){return this._getConfiguration().enabled}getLevel(){return this._getConfiguration().level}getTotal(){return Number((Cd()-this._startTs).toPrecision(10))}getDelta(){return Number((Cd()-this._deltaTs).toPrecision(10))}set priority(e){this.level=e}get priority(){return this.level}getPriority(){return this.level}enable(e=!0){return this._updateConfiguration({enabled:e}),this}setLevel(e){return this._updateConfiguration({level:e}),this}get(e){return this._getConfiguration()[e]}set(e,t){this._updateConfiguration({[e]:t})}settings(){console.table?console.table(this._storage.config):console.log(this._storage.config)}assert(e,t){if(!e)throw Error(t||`Assertion failed`)}warn(e,...t){return this._log(`warn`,0,e,t,{method:wd.warn,once:!0})}error(e,...t){return this._log(`error`,0,e,t,{method:wd.error})}deprecated(e,t){return this.warn(`\`${e}\` is deprecated and will be removed \
|
|
561
561
|
in a later version. Use \`${t}\` instead`)}removed(e,t){return this.error(`\`${e}\` has been removed. Use \`${t}\` instead`)}probe(e,t,...n){return this._log(`log`,e,t,n,{method:wd.log,time:!0,once:!0})}log(e,t,...n){return this._log(`log`,e,t,n,{method:wd.debug})}info(e,t,...n){return this._log(`info`,e,t,n,{method:console.info})}once(e,t,...n){return this._log(`once`,e,t,n,{method:wd.debug||wd.info,once:!0})}table(e,t,n){return t?this._log(`table`,e,t,n&&[n]||[],{method:console.table||fd,tag:Od(t)}):fd}time(e,t){return this._log(`time`,e,t,[],{method:console.time?console.time:console.info})}timeEnd(e,t){return this._log(`time`,e,t,[],{method:console.timeEnd?console.timeEnd:console.info})}timeStamp(e,t){return this._log(`time`,e,t,[],{method:console.timeStamp||fd})}group(e,t,n={collapsed:!1}){let r=(n.collapsed?console.groupCollapsed:console.group)||console.info;return this._log(`group`,e,t,[],{method:r})}groupCollapsed(e,t,n={}){return this.group(e,t,Object.assign({},n,{collapsed:!0}))}groupEnd(e){return this._log(`groupEnd`,e,``,[],{method:console.groupEnd||fd})}withGroup(e,t,n){this.group(e,t)();try{n()}finally{this.groupEnd(e)()}}trace(){console.trace&&console.trace()}_shouldLog(e){return this.isEnabled()&&super._shouldLog(e)}_emit(e,t){let n=t.method;ld(n),t.total=this.getTotal(),t.delta=this.getDelta(),this._deltaTs=Cd();let r=Dd(this.id,t.message,t);return n.bind(console,r,...t.args)}_getConfiguration(){return this._storage.config[this.id]||this._updateConfiguration(Td),this._storage.config[this.id]}_updateConfiguration(e){let t=this._storage.config[this.id]||{...Td};this._storage.setConfiguration({[this.id]:{...t,...e}})}};Ed.VERSION=cd;function Dd(e,t,n){if(typeof t==`string`){let r=n.time?_d(gd(n.total)):``;t=n.time?`${e}: ${r} ${t}`:`${e}: ${t}`,t=xd(t,n.color,n.background)}return t}function Od(e){for(let t in e)for(let n in e[t])return n||`untitled`;return`empty`}var kd=`v4.4.2`;function Ad(){let e=new Ed({id:`loaders.gl`});return globalThis.loaders||={},globalThis.loaders.log=e,globalThis.loaders.version=kd,globalThis.probe||={},globalThis.probe.loaders=e,e}var jd=Ad(),Md=e=>typeof e==`boolean`,Nd=e=>typeof e==`function`,Pd=e=>typeof e==`object`&&!!e,Fd=e=>Pd(e)&&e.constructor==={}.constructor,Id=e=>typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer,Ld=e=>Pd(e)&&typeof e.byteLength==`number`&&typeof e.slice==`function`,Rd=e=>!!e&&Nd(e[Symbol.iterator]),zd=e=>!!e&&Nd(e[Symbol.asyncIterator]),Bd=e=>typeof Response<`u`&&e instanceof Response||Pd(e)&&Nd(e.arrayBuffer)&&Nd(e.text)&&Nd(e.json),Vd=e=>typeof Blob<`u`&&e instanceof Blob,Hd=e=>typeof ReadableStream<`u`&&e instanceof ReadableStream||Pd(e)&&Nd(e.tee)&&Nd(e.cancel)&&Nd(e.getReader),Ud=e=>Pd(e)&&Nd(e.read)&&Nd(e.pipe)&&Md(e.readable),Wd=e=>Hd(e)||Ud(e);function Gd(e,t){return Kd(e||{},t)}function Kd(e,t,n=0){if(n>3)return t;let r={...e};for(let[e,i]of Object.entries(t))i&&typeof i==`object`&&!Array.isArray(i)?r[e]=Kd(r[e]||{},t[e],n+1):r[e]=t[e];return r}var qd=`latest`;function Jd(){return globalThis._loadersgl_?.version||(globalThis._loadersgl_=globalThis._loadersgl_||{},globalThis._loadersgl_.version=`4.4.2`),globalThis._loadersgl_.version}var Yd=Jd();function Xd(e,t){if(!e)throw Error(t||`loaders.gl assertion failed.`)}var Zd={self:typeof self<`u`&&self,window:typeof window<`u`&&window,global:typeof global<`u`&&global,document:typeof document<`u`&&document};Zd.self||Zd.window||Zd.global,Zd.window||Zd.self||Zd.global,Zd.global||Zd.self||Zd.window,Zd.document;var Qd=typeof process!=`object`||String(process)!==`[object process]`||process.browser,$d=typeof window<`u`&&window.orientation!==void 0,ef=typeof process<`u`&&process.version&&/v([0-9]*)/.exec(process.version);ef&&parseFloat(ef[1]);var tf=class{name;workerThread;isRunning=!0;result;_resolve=()=>{};_reject=()=>{};constructor(e,t){this.name=e,this.workerThread=t,this.result=new Promise((e,t)=>{this._resolve=e,this._reject=t})}postMessage(e,t){this.workerThread.postMessage({source:`loaders.gl`,type:e,payload:t})}done(e){Xd(this.isRunning),this.isRunning=!1,this._resolve(e)}error(e){Xd(this.isRunning),this.isRunning=!1,this._reject(e)}},nf=class{terminate(){}},rf=new Map;function af(e){Xd(e.source&&!e.url||!e.source&&e.url);let t=rf.get(e.source||e.url);return t||(e.url&&(t=of(e.url),rf.set(e.url,t)),e.source&&(t=sf(e.source),rf.set(e.source,t))),Xd(t),t}function of(e){return e.startsWith(`http`)?sf(cf(e)):e}function sf(e){let t=new Blob([e],{type:`application/javascript`});return URL.createObjectURL(t)}function cf(e){return`\
|
|
562
562
|
try {
|
|
@@ -3445,13 +3445,13 @@ isInside = step(-1.0, vPathPosition.x) * step(vPathPosition.x, 1.0);
|
|
|
3445
3445
|
if (isInside == 0.0) {
|
|
3446
3446
|
discard;
|
|
3447
3447
|
}
|
|
3448
|
-
`}},aL={getDashArray:{type:`accessor`,value:[0,0]},getOffset:{type:`accessor`,value:0},dashJustified:!1,dashGapPickable:!1},oL=class extends FP{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:n=!1}={}){super({dash:e||n,offset:t,highPrecisionDash:n})}getLayerType(e){if(`pathTesselator`in e.state)return`path`;let t=e.constructor.layerName;return t===`ScatterplotLayer`?`scatterplot`:t===`TextBackgroundLayer`?`textBackground`:null}isEnabled(e){return this.getLayerType(e)!==null}getShaders(e){let t=e.getLayerType(this);if(!t)return null;if(t===`scatterplot`||t===`textBackground`)return e.opts.dash?{modules:[{name:`pathStyle`,inject:t===`scatterplot`?nL.inject:rL.inject,uniformTypes:{dashGapPickable:`i32`}}]}:null;let n={},r={};e.opts.dash&&(n=RN(n,tL),e.opts.highPrecisionDash&&(r.HIGH_PRECISION_DASH=!0)),e.opts.offset&&(n=RN(n,iL));let{inject:i}=n;return{modules:[{name:`pathStyle`,inject:i,uniformTypes:{dashAlignMode:`f32`,dashGapPickable:`i32`}}],defines:r}}initializeState(e,t){let n=this.getAttributeManager(),r=t.getLayerType(this);!n||!r||(t.opts.dash&&n.addInstanced({instanceDashArrays:{size:2,accessor:`getDashArray`},...r===`path`&&t.opts.highPrecisionDash?{instanceDashOffsets:{size:1,accessor:`getPath`,transform:t.getDashOffsets.bind(this)}}:{}}),r===`path`&&t.opts.offset&&n.addInstanced({instanceOffsets:{size:1,accessor:`getOffset`}}))}updateState(e,t){if(t.isEnabled(this)&&t.opts.dash){let e=t.getLayerType(this);if(e===`scatterplot`||e===`textBackground`){let e={dashGapPickable:!!this.props.dashGapPickable};this.setShaderModuleProps({pathStyle:e})}else{let e={dashAlignMode:+!!this.props.dashJustified,dashGapPickable:!!this.props.dashGapPickable};this.setShaderModuleProps({pathStyle:e})}}}getDashOffsets(e){let t=[0],n=this.props.positionFormat===`XY`?2:3,r=Array.isArray(e[0]),i=r?e.length:e.length/n,a,o;for(let s=0;s<i-1;s++)a=r?e[s]:e.slice(s*n,s*n+n),a=this.projectPosition(a),s>0&&(t[s]=t[s-1]+$_(o,a)),o=a;return t[i-1]=0,t}};oL.defaultProps=aL,oL.extensionName=`PathStyleExtension`;function sL(e,t,n,r){let i=t*Math.PI/180,a=r*Math.PI/180,o=(n-e)*Math.PI/180,s=Math.sin(o)*Math.cos(a),c=Math.cos(i)*Math.sin(a)-Math.sin(i)*Math.cos(a)*Math.cos(o);return(Math.atan2(s,c)*180/Math.PI+360)%360}function cL(e,t,n,r){let i=t*Math.PI/180,a=r*Math.PI/180,o=(r-t)*Math.PI/180,s=(n-e)*Math.PI/180,c=Math.sin(o/2)**2+Math.cos(i)*Math.cos(a)*Math.sin(s/2)**2;return 2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))*3440.065}function lL(e,t,n,r,i=64){let a=t*Math.PI/180,o=e*Math.PI/180,s=r*Math.PI/180,c=n*Math.PI/180,l=2*Math.asin(Math.sqrt(Math.sin((s-a)/2)**2+Math.cos(a)*Math.cos(s)*Math.sin((c-o)/2)**2));if(l<1e-10)return[[e,t],[n,r]];let u=[],d=o;for(let e=0;e<=i;e++){let t=e/i,n=Math.sin((1-t)*l)/Math.sin(l),r=Math.sin(t*l)/Math.sin(l),f=n*Math.cos(a)*Math.cos(o)+r*Math.cos(s)*Math.cos(c),p=n*Math.cos(a)*Math.sin(o)+r*Math.cos(s)*Math.sin(c),m=n*Math.sin(a)+r*Math.sin(s),h=Math.atan2(m,Math.sqrt(f*f+p*p)),g=Math.atan2(p,f)-d,_=d+g-Math.round(g/(2*Math.PI))*2*Math.PI;d=_,u.push([_*180/Math.PI,h*180/Math.PI])}return u}function uL(e){return sL(e.a.lon,e.a.lat,e.b.lon,e.b.lat).toFixed(0).padStart(3,`0`)+`° T`}function dL(e){let t=cL(e.a.lon,e.a.lat,e.b.lon,e.b.lat);return(t<10?t.toFixed(2):t.toFixed(1))+` NM`}function fL(){return Math.random().toString(36).slice(2,9)}function pL(){let e=P(ln([]));return{get rulers(){return B(e)},add(t,n,r,i){F(e,[...B(e),{id:fL(),a:{lon:t,lat:n},b:{lon:r,lat:i}}],!0)},remove(t){F(e,B(e).filter(e=>e.id!==t),!0)},moveEndpoint(t,n,r,i){F(e,B(e).map(e=>{if(e.id!==t)return e;let a={lon:r,lat:i};return{...e,[n]:a}}),!0)},snapEndpoint(t,n,r,i,a){F(e,B(e).map(e=>{if(e.id!==t)return e;let o=r?{lon:i,lat:a,snapId:r}:{lon:i,lat:a};return{...e,[n]:o}}),!0)},syncSnapped(t){let n=new Map(t.map(e=>[e.id,e])),r=!1,i=B(e).map(e=>{let{a:t,b:i}=e;if(t.snapId){let e=n.get(t.snapId);e?.position&&(e.position.longitude!==t.lon||e.position.latitude!==t.lat)&&(t={...t,lon:e.position.longitude,lat:e.position.latitude},r=!0)}if(i.snapId){let e=n.get(i.snapId);e?.position&&(e.position.longitude!==i.lon||e.position.latitude!==i.lat)&&(i={...i,lon:e.position.longitude,lat:e.position.latitude},r=!0)}return r?{...e,a:t,b:i}:e});r&&F(e,i,!0)}}}var mL=pL(),hL={"Open Sans Regular":`Roboto Regular`,"Open Sans Bold":`Roboto Bold`,"Open Sans SemiBold":`Roboto Medium`,"Open Sans Italic":`Roboto Italic`,"Open Sans Bold Italic":`Roboto Bold`,"Arial Unicode MS Regular":`Roboto Regular`,"Arial Unicode MS Bold":`Roboto Bold`,"Arial Unicode MS":`Roboto Regular`};function
|
|
3448
|
+
`}},aL={getDashArray:{type:`accessor`,value:[0,0]},getOffset:{type:`accessor`,value:0},dashJustified:!1,dashGapPickable:!1},oL=class extends FP{constructor({dash:e=!1,offset:t=!1,highPrecisionDash:n=!1}={}){super({dash:e||n,offset:t,highPrecisionDash:n})}getLayerType(e){if(`pathTesselator`in e.state)return`path`;let t=e.constructor.layerName;return t===`ScatterplotLayer`?`scatterplot`:t===`TextBackgroundLayer`?`textBackground`:null}isEnabled(e){return this.getLayerType(e)!==null}getShaders(e){let t=e.getLayerType(this);if(!t)return null;if(t===`scatterplot`||t===`textBackground`)return e.opts.dash?{modules:[{name:`pathStyle`,inject:t===`scatterplot`?nL.inject:rL.inject,uniformTypes:{dashGapPickable:`i32`}}]}:null;let n={},r={};e.opts.dash&&(n=RN(n,tL),e.opts.highPrecisionDash&&(r.HIGH_PRECISION_DASH=!0)),e.opts.offset&&(n=RN(n,iL));let{inject:i}=n;return{modules:[{name:`pathStyle`,inject:i,uniformTypes:{dashAlignMode:`f32`,dashGapPickable:`i32`}}],defines:r}}initializeState(e,t){let n=this.getAttributeManager(),r=t.getLayerType(this);!n||!r||(t.opts.dash&&n.addInstanced({instanceDashArrays:{size:2,accessor:`getDashArray`},...r===`path`&&t.opts.highPrecisionDash?{instanceDashOffsets:{size:1,accessor:`getPath`,transform:t.getDashOffsets.bind(this)}}:{}}),r===`path`&&t.opts.offset&&n.addInstanced({instanceOffsets:{size:1,accessor:`getOffset`}}))}updateState(e,t){if(t.isEnabled(this)&&t.opts.dash){let e=t.getLayerType(this);if(e===`scatterplot`||e===`textBackground`){let e={dashGapPickable:!!this.props.dashGapPickable};this.setShaderModuleProps({pathStyle:e})}else{let e={dashAlignMode:+!!this.props.dashJustified,dashGapPickable:!!this.props.dashGapPickable};this.setShaderModuleProps({pathStyle:e})}}}getDashOffsets(e){let t=[0],n=this.props.positionFormat===`XY`?2:3,r=Array.isArray(e[0]),i=r?e.length:e.length/n,a,o;for(let s=0;s<i-1;s++)a=r?e[s]:e.slice(s*n,s*n+n),a=this.projectPosition(a),s>0&&(t[s]=t[s-1]+$_(o,a)),o=a;return t[i-1]=0,t}};oL.defaultProps=aL,oL.extensionName=`PathStyleExtension`;function sL(e,t,n,r){let i=t*Math.PI/180,a=r*Math.PI/180,o=(n-e)*Math.PI/180,s=Math.sin(o)*Math.cos(a),c=Math.cos(i)*Math.sin(a)-Math.sin(i)*Math.cos(a)*Math.cos(o);return(Math.atan2(s,c)*180/Math.PI+360)%360}function cL(e,t,n,r){let i=t*Math.PI/180,a=r*Math.PI/180,o=(r-t)*Math.PI/180,s=(n-e)*Math.PI/180,c=Math.sin(o/2)**2+Math.cos(i)*Math.cos(a)*Math.sin(s/2)**2;return 2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))*3440.065}function lL(e,t,n,r,i=64){let a=t*Math.PI/180,o=e*Math.PI/180,s=r*Math.PI/180,c=n*Math.PI/180,l=2*Math.asin(Math.sqrt(Math.sin((s-a)/2)**2+Math.cos(a)*Math.cos(s)*Math.sin((c-o)/2)**2));if(l<1e-10)return[[e,t],[n,r]];let u=[],d=o;for(let e=0;e<=i;e++){let t=e/i,n=Math.sin((1-t)*l)/Math.sin(l),r=Math.sin(t*l)/Math.sin(l),f=n*Math.cos(a)*Math.cos(o)+r*Math.cos(s)*Math.cos(c),p=n*Math.cos(a)*Math.sin(o)+r*Math.cos(s)*Math.sin(c),m=n*Math.sin(a)+r*Math.sin(s),h=Math.atan2(m,Math.sqrt(f*f+p*p)),g=Math.atan2(p,f)-d,_=d+g-Math.round(g/(2*Math.PI))*2*Math.PI;d=_,u.push([_*180/Math.PI,h*180/Math.PI])}return u}function uL(e){return sL(e.a.lon,e.a.lat,e.b.lon,e.b.lat).toFixed(0).padStart(3,`0`)+`° T`}function dL(e){let t=cL(e.a.lon,e.a.lat,e.b.lon,e.b.lat);return(t<10?t.toFixed(2):t.toFixed(1))+` NM`}function fL(){return Math.random().toString(36).slice(2,9)}function pL(){let e=P(ln([]));return{get rulers(){return B(e)},add(t,n,r,i){F(e,[...B(e),{id:fL(),a:{lon:t,lat:n},b:{lon:r,lat:i}}],!0)},remove(t){F(e,B(e).filter(e=>e.id!==t),!0)},moveEndpoint(t,n,r,i){F(e,B(e).map(e=>{if(e.id!==t)return e;let a={lon:r,lat:i};return{...e,[n]:a}}),!0)},snapEndpoint(t,n,r,i,a){F(e,B(e).map(e=>{if(e.id!==t)return e;let o=r?{lon:i,lat:a,snapId:r}:{lon:i,lat:a};return{...e,[n]:o}}),!0)},syncSnapped(t){let n=new Map(t.map(e=>[e.id,e])),r=!1,i=B(e).map(e=>{let{a:t,b:i}=e;if(t.snapId){let e=n.get(t.snapId);e?.position&&(e.position.longitude!==t.lon||e.position.latitude!==t.lat)&&(t={...t,lon:e.position.longitude,lat:e.position.latitude},r=!0)}if(i.snapId){let e=n.get(i.snapId);e?.position&&(e.position.longitude!==i.lon||e.position.latitude!==i.lat)&&(i={...i,lon:e.position.longitude,lat:e.position.latitude},r=!0)}return r?{...e,a:t,b:i}:e});r&&F(e,i,!0)}}}var mL=pL(),hL=P(null),gL=P(null),_L=P(null),vL=P(null),yL=P(0),bL=P(!1),xL=P(null),SL=P(!1),CL=P(null);async function wL(e,t){let n;n=t.startsWith(`http`)?t:`${e}/signalk/v2/api${t.startsWith(`/signalk/v2/api`)||t.startsWith(`/signalk/v1/api`)?t.slice(15):t.startsWith(`/v1/api`)?t.slice(7):t}`,console.debug(`[route] fetching geometry from`,n);let r=await fetch(n);if(!r.ok)throw Error(`Route fetch failed: ${r.status} ${r.statusText}`);let i=await r.json();if(console.debug(`[route] REST response keys:`,Object.keys(i??{}),`type:`,i?.type,`featureType:`,i?.feature?.type),i?.feature?.geometry?.type===`LineString`)return i.feature;if(i?.type===`Feature`&&i?.geometry?.type===`LineString`)return i;if(i?.type===`FeatureCollection`){let e=i.features.find(e=>e.geometry?.type===`LineString`);if(e)return e}return console.warn(`[route] unrecognised route REST response format:`,JSON.stringify(i).slice(0,300)),null}function TL(){return{get nextPoint(){return B(hL)},get previousPoint(){return B(gL)},get activeHref(){return B(_L)},get routeName(){return B(vL)},get pointIndex(){return B(yL)},get reverse(){return B(bL)},get geometry(){return B(xL)},get loading(){return B(SL)},get error(){return B(CL)},update(e,t){F(hL,t?.nextPoint??null,!0),F(gL,t?.previousPoint??null,!0);let n=t?.activeRoute,r=n?.href??null;console.debug(`[route] update — nextPoint:`,!!B(hL),`prevPoint:`,!!B(gL),`href:`,r),n&&(F(vL,n.name??null,!0),F(yL,n.pointIndex,!0),F(bL,n.reverse,!0)),r!==B(_L)&&(F(_L,r,!0),F(xL,null),F(CL,null),r?(F(SL,!0),wL(e,r).then(e=>{F(xL,e,!0),F(SL,!1),console.debug(`[route] geometry loaded:`,!!e)}).catch(e=>{F(CL,String(e),!0),F(SL,!1),console.warn(`[route] fetch error:`,e)})):F(SL,!1))},clear(){F(hL,F(gL,F(_L,F(vL,F(xL,F(CL,null),!0),!0),!0),!0),!0),F(yL,0),F(bL,F(SL,!1),!0)}}}var EL=TL(),DL={"Open Sans Regular":`Roboto Regular`,"Open Sans Bold":`Roboto Bold`,"Open Sans SemiBold":`Roboto Medium`,"Open Sans Italic":`Roboto Italic`,"Open Sans Bold Italic":`Roboto Bold`,"Arial Unicode MS Regular":`Roboto Regular`,"Arial Unicode MS Bold":`Roboto Bold`,"Arial Unicode MS":`Roboto Regular`};function OL(e){if(typeof e==`string`)return DL[e]??e;if(Array.isArray(e))return e.map(OL);if(typeof e==`object`&&e){let t={};for(let[n,r]of Object.entries(e))t[n]=OL(r);return t}return e}async function kL(e){let t=await fetch(e);if(!t.ok)throw Error(`Failed to fetch style ${e}: ${t.status} ${t.statusText}`);let n=OL(await t.json()),r=n.schema,i=new Map;if(r)for(let[e,t]of Object.entries(r))i.set(e,t.default);let a=jL(n,i),o=a.sources,s=new Set;if(o)for(let[e,t]of Object.entries(o))typeof t.url==`string`&&t.url.startsWith(`mapbox://`)&&(s.add(e),delete o[e]);return Array.isArray(a.layers)&&(a.layers=a.layers.filter(e=>e.type!==`slot`&&!s.has(e.source))),a}var AL=new Set([`pitch`,`distance-from-center`]);function jL(e,t){if(!Array.isArray(e)){if(typeof e==`object`&&e){let n={};for(let[r,i]of Object.entries(e))n[r]=jL(i,t);return n}return e}let n=e[0];return n===`config`&&e.length===2&&typeof e[1]==`string`?t.has(e[1])?t.get(e[1]):null:typeof n==`string`&&AL.has(n)&&e.length===1?0:ML(e.map(e=>jL(e,t)))}function ML(e){let t=e[0];if(typeof t!=`string`)return e;if(t.includes(` `)&&e.every(e=>typeof e==`string`))return[`literal`,e];if(e.length<2)return e;let n=e.slice(1);if(n.every(e=>typeof e==`number`)){let r=n;switch(t){case`*`:return r.reduce((e,t)=>e*t);case`/`:return r.length===2&&r[1]!==0?r[0]/r[1]:e;case`+`:return r.reduce((e,t)=>e+t);case`-`:return r.length===2?r[0]-r[1]:e;case`^`:return r.length===2?r[0]**+r[1]:e;case`min`:return Math.min(...r);case`max`:return Math.max(...r);case`abs`:return r.length===1?Math.abs(r[0]):e;case`ceil`:return r.length===1?Math.ceil(r[0]):e;case`floor`:return r.length===1?Math.floor(r[0]):e;case`round`:return r.length===1?Math.round(r[0]):e}}if(t===`coalesce`){let e=n.find(e=>e!=null);if(e!==void 0)return e}if(t===`step`){let t=[...e];for(let e=2;e<t.length;e+=2)t[e]=NL(t[e]);return t}if(t===`match`){let t=[...e];for(let e=3;e<t.length-1;e+=2)t[e]=NL(t[e]);return t[t.length-1]=NL(t[t.length-1]),t}if(t===`case`){let t=[...e];for(let e=2;e<t.length-1;e+=2)t[e]=NL(t[e]);return t[t.length-1]=NL(t[t.length-1]),t}return e}function NL(e){return Array.isArray(e)&&e.length>0&&e.every(e=>typeof e==`string`)&&typeof e[0]==`string`&&e[0].includes(` `)?[`literal`,e]:e}var PL=`uniform aisHullUniforms {
|
|
3449
3449
|
float timeSinceUpload;
|
|
3450
3450
|
float zoom;
|
|
3451
3451
|
float settingsIconSize;
|
|
3452
3452
|
float opacity;
|
|
3453
3453
|
} aisHull;
|
|
3454
|
-
`,
|
|
3454
|
+
`,FL={name:`aisHull`,vs:PL,fs:PL,uniformTypes:{timeSinceUpload:`f32`,zoom:`f32`,settingsIconSize:`f32`,opacity:`f32`}},IL=`#version 300 es
|
|
3455
3455
|
#define SHADER_NAME ais-hull-layer-vertex-shader
|
|
3456
3456
|
|
|
3457
3457
|
in vec3 positions; // hull vertex in local space (X=sb, Y=bow, unit [-1,1])
|
|
@@ -3564,7 +3564,7 @@ void main(void) {
|
|
|
3564
3564
|
geometry.pickingColor = instancePickingColors;
|
|
3565
3565
|
DECKGL_FILTER_COLOR(vColor, geometry);
|
|
3566
3566
|
}
|
|
3567
|
-
`,
|
|
3567
|
+
`,LL=`#version 300 es
|
|
3568
3568
|
precision highp float;
|
|
3569
3569
|
#define SHADER_NAME ais-hull-layer-fragment-shader
|
|
3570
3570
|
|
|
@@ -3575,7 +3575,7 @@ void main(void) {
|
|
|
3575
3575
|
fragColor = vColor;
|
|
3576
3576
|
DECKGL_FILTER_COLOR(fragColor, geometry);
|
|
3577
3577
|
}
|
|
3578
|
-
`,
|
|
3578
|
+
`,RL=new Float32Array([0,1,0,1,.6,0,1,-1,0,0,1,0,1,-1,0,-1,-1,0,0,1,0,-1,-1,0,-1,.6,0]),zL=9,BL={getPosition:{type:`accessor`,value:[0,0]},getSog:{type:`accessor`,value:0},getCog:{type:`accessor`,value:0},getHeading:{type:`accessor`,value:0},getRot:{type:`accessor`,value:0},getAgeAtUpload:{type:`accessor`,value:0},getLength:{type:`accessor`,value:50},getBeam:{type:`accessor`,value:10},getColor:{type:`accessor`,value:[0,100,200,220]},uploadTimestamp:0,selfAnimate:!1,settingsIconSize:1,opacity:1},VL=class extends xP{static layerName=`AisHullLayer`;static defaultProps=BL;getShaders(){return super.getShaders({vs:IL,fs:LL,modules:[lw,tT,FL]})}initializeState(){this.getAttributeManager().addInstanced({instancePositions:{size:3,type:`float64`,fp64:this.use64bitPositions(),transition:!0,accessor:`getPosition`,defaultValue:[0,0,0]},instanceSog:{size:1,accessor:`getSog`,defaultValue:0},instanceCog:{size:1,accessor:`getCog`,defaultValue:0},instanceHeading:{size:1,accessor:`getHeading`,defaultValue:0},instanceRot:{size:1,accessor:`getRot`,defaultValue:0},instanceAgeAtUpload:{size:1,accessor:`getAgeAtUpload`,defaultValue:0},instanceLength:{size:1,accessor:`getLength`,defaultValue:50},instanceBeam:{size:1,accessor:`getBeam`,defaultValue:10},instanceColor:{size:4,type:`unorm8`,accessor:`getColor`,defaultValue:[0,100,200,220]}})}updateState(e){super.updateState(e),e.changeFlags.extensionsChanged&&(this.state.model?.destroy(),this.state.model=this._getModel(),this.getAttributeManager().invalidateAll()),e.changeFlags.propsChanged&&this.setNeedsRedraw()}draw({uniforms:e}){let{uploadTimestamp:t,selfAnimate:n,settingsIconSize:r,opacity:i}=this.props,a=n?Math.max(0,(Date.now()-(t??0))/1e3):0,o=this.context.viewport.zoom,s=this.state.model;s.shaderInputs.setProps({aisHull:{timeSinceUpload:a,zoom:o,settingsIconSize:r??1,opacity:i??1}}),s.draw(this.context.renderPass),n&&this.setNeedsRedraw()}_getModel(){return new cD(this.context.device,{...this.getShaders(),id:this.props.id,bufferLayout:this.getAttributeManager().getBufferLayouts(),geometry:new dD({topology:`triangle-list`,attributes:{positions:{size:3,value:RL}},vertexCount:zL}),isInstanced:!0})}},HL=`#version 300 es
|
|
3579
3579
|
#define SHADER_NAME ais-hull-decoration-vertex-shader
|
|
3580
3580
|
|
|
3581
3581
|
in vec3 positions;
|
|
@@ -3636,7 +3636,7 @@ void main(void) {
|
|
|
3636
3636
|
float t01 = clamp((aisHull.zoom - transitionZoom + 1.0) / 2.0, 0.0, 1.0);
|
|
3637
3637
|
vOpacity = t01;
|
|
3638
3638
|
}
|
|
3639
|
-
`,
|
|
3639
|
+
`,UL=`#version 300 es
|
|
3640
3640
|
precision highp float;
|
|
3641
3641
|
#define SHADER_NAME ais-hull-decoration-fragment-shader
|
|
3642
3642
|
|
|
@@ -3647,13 +3647,13 @@ void main(void) {
|
|
|
3647
3647
|
fragColor = vec4(0.0, 0.0, 0.0, vOpacity);
|
|
3648
3648
|
DECKGL_FILTER_COLOR(fragColor, geometry);
|
|
3649
3649
|
}
|
|
3650
|
-
`;function
|
|
3650
|
+
`;function WL(e){return{positions:new Float32Array(e),vertexCount:e.length/3}}function GL(e,t,n,r){let i=[];for(let a=0;a<r;a++){let o=a/r*2*Math.PI,s=(a+1)/r*2*Math.PI;i.push(e,t,0,e+n*Math.sin(o),t+n*Math.cos(o),0,e+n*Math.sin(s),t+n*Math.cos(s),0)}return i}function KL(e,t,n,r){return[e,t,0,n,t,0,n,r,0,e,t,0,n,r,0,e,r,0]}function qL(e,t,n){let r=[];for(let i=0;i<n;i++){let a=i/n*2*Math.PI,o=(i+1)/n*2*Math.PI;r.push(e*Math.sin(a),e*Math.cos(a),0,t*Math.sin(a),t*Math.cos(a),0,t*Math.sin(o),t*Math.cos(o),0,e*Math.sin(a),e*Math.cos(a),0,t*Math.sin(o),t*Math.cos(o),0,e*Math.sin(o),e*Math.cos(o),0)}return r}function JL(e,t,n,r){return[e,t,0,e,t+r,0,e+n,t,0,e,t,0,e+n,t,0,e,t-r,0,e,t,0,e,t-r,0,e-n,t,0,e,t,0,e-n,t,0,e,t+r,0]}function YL(e,t,n,r,i){let a=n-e,o=r-t,s=Math.sqrt(a*a+o*o),c=-o/s*i,l=a/s*i;return[e+c,t+l,0,e-c,t-l,0,n-c,r-l,0,e+c,t+l,0,n-c,r-l,0,n+c,r+l,0]}function XL(e,t,n,r,i,a,o){let s=[];for(let c=0;c<o;c++){let l=c/o,u=(c+1)/o,d=(i+(a-i)*l)*Math.PI/180,f=(i+(a-i)*u)*Math.PI/180,p=Math.sin(d),m=Math.cos(d),h=Math.sin(f),g=Math.cos(f);s.push(e+n*p,t+n*m,0,e+r*p,t+r*m,0,e+r*h,t+r*g,0,e+n*p,t+n*m,0,e+r*h,t+r*g,0,e+n*h,t+n*g,0)}return s}var ZL=WL(GL(0,.65,.12,8)),QL=WL([...KL(-1.35,-.55,-1.1,.22),...KL(1.1,-.55,1.35,.22)]),$L=WL(qL(1.3,1.5,16)),eR=WL([...YL(-.8,0,-1.5,-.5,.055),...YL(.8,0,1.5,-.5,.055),...XL(0,.3,1.62,1.78,242,118,18)]),tR=WL([...GL(0,.45,.1,10),...GL(0,.12,.1,10)]),nR=WL([...GL(0,.55,.09,10),...JL(0,.15,.13,.13),...GL(0,-.25,.09,10)]),rR=WL([...KL(-1.35,-.85,-1.1,.85),...KL(1.1,-.85,1.35,.85)]),iR={getPosition:{type:`accessor`,value:[0,0]},getSog:{type:`accessor`,value:0},getCog:{type:`accessor`,value:0},getHeading:{type:`accessor`,value:0},getRot:{type:`accessor`,value:0},getAgeAtUpload:{type:`accessor`,value:0},getLength:{type:`accessor`,value:50},getBeam:{type:`accessor`,value:10},uploadTimestamp:0,selfAnimate:!1,settingsIconSize:1,decoration:{type:`object`,value:ZL}},aR=class extends xP{static layerName=`AisHullDecorationLayer`;static defaultProps=iR;getShaders(){return super.getShaders({vs:HL,fs:UL,modules:[lw,FL]})}initializeState(){this.getAttributeManager().addInstanced({instancePositions:{size:3,type:`float64`,fp64:this.use64bitPositions(),transition:!0,accessor:`getPosition`,defaultValue:[0,0,0]},instanceSog:{size:1,accessor:`getSog`,defaultValue:0},instanceCog:{size:1,accessor:`getCog`,defaultValue:0},instanceHeading:{size:1,accessor:`getHeading`,defaultValue:0},instanceRot:{size:1,accessor:`getRot`,defaultValue:0},instanceAgeAtUpload:{size:1,accessor:`getAgeAtUpload`,defaultValue:0},instanceLength:{size:1,accessor:`getLength`,defaultValue:50},instanceBeam:{size:1,accessor:`getBeam`,defaultValue:10}})}updateState(e){super.updateState(e),(e.changeFlags.extensionsChanged||e.changeFlags.propsChanged&&e.oldProps.decoration!==e.props.decoration)&&(this.state.model?.destroy(),this.state.model=this._getModel(),this.getAttributeManager().invalidateAll()),e.changeFlags.propsChanged&&this.setNeedsRedraw()}draw({uniforms:e}){let{uploadTimestamp:t,selfAnimate:n,settingsIconSize:r}=this.props,i=n?Math.max(0,(Date.now()-(t??0))/1e3):0,a=this.context.viewport.zoom,o=this.state.model;o.shaderInputs.setProps({aisHull:{timeSinceUpload:i,zoom:a,settingsIconSize:r??1,opacity:1}}),o.draw(this.context.renderPass),n&&this.setNeedsRedraw()}_getModel(){let{positions:e,vertexCount:t}=this.props.decoration;return new cD(this.context.device,{...this.getShaders(),id:this.props.id,bufferLayout:this.getAttributeManager().getBufferLayouts(),geometry:new dD({topology:`triangle-list`,attributes:{positions:{size:3,value:e}},vertexCount:t}),isInstanced:!0})}},oR=`uniform aisIconUniforms {
|
|
3651
3651
|
float timeSinceUpload;
|
|
3652
3652
|
float zoom;
|
|
3653
3653
|
float settingsIconSize;
|
|
3654
3654
|
float opacity;
|
|
3655
3655
|
} aisIcon;
|
|
3656
|
-
`,
|
|
3656
|
+
`,sR={name:`aisIcon`,vs:oR,fs:oR,uniformTypes:{timeSinceUpload:`f32`,zoom:`f32`,settingsIconSize:`f32`,opacity:`f32`}},cR=`#version 300 es
|
|
3657
3657
|
#define SHADER_NAME ais-icon-layer-vertex-shader
|
|
3658
3658
|
|
|
3659
3659
|
// Per-vertex: arrow mesh in local space (bow = +Y, starboard = +X, range [-1, 1])
|
|
@@ -3781,7 +3781,7 @@ void main(void) {
|
|
|
3781
3781
|
geometry.pickingColor = instancePickingColors;
|
|
3782
3782
|
DECKGL_FILTER_COLOR(vColor, geometry);
|
|
3783
3783
|
}
|
|
3784
|
-
`,
|
|
3784
|
+
`,lR=`#version 300 es
|
|
3785
3785
|
precision highp float;
|
|
3786
3786
|
#define SHADER_NAME ais-icon-layer-fragment-shader
|
|
3787
3787
|
|
|
@@ -3792,10 +3792,10 @@ void main(void) {
|
|
|
3792
3792
|
fragColor = vColor;
|
|
3793
3793
|
DECKGL_FILTER_COLOR(fragColor, geometry);
|
|
3794
3794
|
}
|
|
3795
|
-
`,QL=[0,1,0,.5,.333,0,.5,-.75,0,0,1,0,.5,-.75,0,0,-.5,0,0,1,0,0,-.5,0,-.5,-.75,0,0,1,0,-.5,-.75,0,-.5,.333,0];function $L(e,t,n,r){let i=[];for(let a=0;a<r;a++){let o=a/r*2*Math.PI,s=(a+1)/r*2*Math.PI;i.push(e,t,0,e+n*Math.sin(o),t+n*Math.cos(o),0,e+n*Math.sin(s),t+n*Math.cos(s),0)}return i}function eR(e,t,n,r){return[e,t,0,n,t,0,n,r,0,e,t,0,n,r,0,e,r,0]}function tR(e,t,n,r,i){let a=n-e,o=r-t,s=Math.sqrt(a*a+o*o),c=-o/s*i,l=a/s*i;return[e+c,t+l,0,e-c,t-l,0,n-c,r-l,0,e+c,t+l,0,n-c,r-l,0,n+c,r+l,0]}function nR(e,t,n,r){return[e,t,0,e,t+r,0,e+n,t,0,e,t,0,e+n,t,0,e,t-r,0,e,t,0,e,t-r,0,e-n,t,0,e,t,0,e-n,t,0,e,t+r,0]}function rR(e,t,n,r){let i=[];for(let a=0;a<r;a++){let o=-Math.PI/2+Math.PI*a/r,s=-Math.PI/2+Math.PI*(a+1)/r;i.push(e,t,0,e+n*Math.sin(o),t+n*Math.cos(o),0,e+n*Math.sin(s),t+n*Math.cos(s),0)}return i}function iR(e,t,n,r,i,a,o){let s=[];for(let c=0;c<o;c++){let l=(i+(a-i)*(c/o))*Math.PI/180,u=(i+(a-i)*((c+1)/o))*Math.PI/180,d=Math.sin(l),f=Math.cos(l),p=Math.sin(u),m=Math.cos(u);s.push(e+n*d,t+n*f,0,e+r*d,t+r*f,0,e+r*p,t+r*m,0,e+n*d,t+n*f,0,e+r*p,t+r*m,0,e+n*p,t+n*m,0)}return s}function aR(e,t=[]){let n=e.length/3,r=t.length/3,i=n+r;return{positions:new Float32Array([...e,...t,...e,...t]),isOutline:new Float32Array([...Array(i).fill(1),...Array(i).fill(0)]),isIndicator:new Float32Array([...Array(i).fill(0),...Array(n).fill(0),...Array(r).fill(1)]),vertexCount:i*2}}var oR=aR(QL),sR=aR([],$L(0,.65,.18,8)),cR=(()=>{let e=1.55,t=1.35,n=[];for(let r=0;r<16;r++){let i=r/16*2*Math.PI,a=(r+1)/16*2*Math.PI;n.push(t*Math.sin(i),t*Math.cos(i),0,e*Math.sin(i),e*Math.cos(i),0,e*Math.sin(a),e*Math.cos(a),0,t*Math.sin(i),t*Math.cos(i),0,e*Math.sin(a),e*Math.cos(a),0,t*Math.sin(a),t*Math.cos(a),0)}return aR([],n)})(),lR=aR([],[...eR(-1.38,-.55,-1.13,.22),...eR(1.13,-.55,1.38,.22)]),uR=aR([],[...tR(-.8,0,-1.5,-.5,.08),...tR(.8,0,1.5,-.5,.08),...iR(0,.3,1.6,1.78,242,118,14)]),dR=aR([],[...$L(0,.45,.15,10),...$L(0,.1,.15,10)]),fR=aR([],[...$L(0,.57,.13,10),...nR(0,.15,.17,.17),...$L(0,-.28,.13,10)]),pR=aR([],[...eR(-1,-.8,-.75,.85),...eR(.75,-.8,1,.85)]),mR=aR($L(0,0,1.1,16),[...$L(0,.62,.2,12),...tR(-.19,.32,-.78,.5,.08),...tR(.19,.32,.78,.5,.08),...eR(-.15,-.3,.15,.32),...rR(-.42,-.55,.18,8),...rR(.42,-.55,.18,8),...eR(-.83,-.8,.83,-.55)]),hR={getPosition:{type:`accessor`,value:[0,0]},getSog:{type:`accessor`,value:0},getCog:{type:`accessor`,value:0},getHeading:{type:`accessor`,value:0},getRot:{type:`accessor`,value:0},getAgeAtUpload:{type:`accessor`,value:0},getLength:{type:`accessor`,value:0},getColor:{type:`accessor`,value:[255,255,255,255]},uploadTimestamp:0,selfAnimate:!1,settingsIconSize:1,opacity:1},gR=class extends xP{static layerName=`AisIconLayer`;static defaultProps=hR;getShaders(){return super.getShaders({vs:XL,fs:ZL,modules:[lw,tT,YL]})}initializeState(){this.getAttributeManager().addInstanced({instancePositions:{size:3,type:`float64`,fp64:this.use64bitPositions(),transition:!0,accessor:`getPosition`,defaultValue:[0,0,0]},instanceSog:{size:1,accessor:`getSog`,defaultValue:0},instanceCog:{size:1,accessor:`getCog`,defaultValue:0},instanceHeading:{size:1,accessor:`getHeading`,defaultValue:0},instanceRot:{size:1,accessor:`getRot`,defaultValue:0},instanceAgeAtUpload:{size:1,accessor:`getAgeAtUpload`,defaultValue:0},instanceLength:{size:1,accessor:`getLength`,defaultValue:0},instanceColor:{size:4,type:`unorm8`,accessor:`getColor`,defaultValue:[255,255,255,255]}})}updateState(e){super.updateState(e),(e.changeFlags.extensionsChanged||e.props.iconGeometry!==e.oldProps.iconGeometry)&&(this.state.model?.destroy(),this.state.model=this._getModel(),this.getAttributeManager().invalidateAll()),e.changeFlags.propsChanged&&this.setNeedsRedraw()}draw({uniforms:e}){let{uploadTimestamp:t,selfAnimate:n,settingsIconSize:r,opacity:i}=this.props,a=n?Math.max(0,(Date.now()-(t??0))/1e3):0,o=this.context.viewport.zoom,s=this.state.model;s.shaderInputs.setProps({aisIcon:{timeSinceUpload:a,zoom:o,settingsIconSize:r??1,opacity:i??1}}),s.draw(this.context.renderPass),n&&this.setNeedsRedraw()}_getModel(){let e=this.props.iconGeometry??oR;return new cD(this.context.device,{...this.getShaders(),id:this.props.id,bufferLayout:this.getAttributeManager().getBufferLayouts(),geometry:new dD({topology:`triangle-list`,attributes:{positions:{size:3,value:e.positions},aIsOutline:{size:1,value:e.isOutline},aIsIndicator:{size:1,value:e.isIndicator}},vertexCount:e.vertexCount}),isInstanced:!0})}};function _R(e,t,n,r,i,a,o){let s=(o-a)/1e3;if(s===0||r<.01)return[e,t];let c,l;if(Math.abs(i)>1e-4){let e=n+i*s,t=r/i;c=t*(Math.cos(n)-Math.cos(e)),l=t*(Math.sin(e)-Math.sin(n))}else c=r*s*Math.sin(n),l=r*s*Math.cos(n);let u=111320*Math.cos(t*Math.PI/180);return[e+c/u,t+l/111320]}function vR(e,t,n){let r=t/2,i=t/2,a=t/32;e.beginPath(),e.moveTo(r,i-12*a),e.lineTo(r+8*a,i-4*a),e.lineTo(r+8*a,i+9*a),e.lineTo(r,i+6*a),e.lineTo(r-8*a,i+9*a),e.lineTo(r-8*a,i-4*a),e.closePath(),e.fillStyle=n,e.fill(),e.strokeStyle=`#ffffff`,e.lineWidth=1.5*a,e.lineJoin=`round`,e.stroke()}function yR(e,t){let n=document.createElement(`canvas`);n.width=e,n.height=e;let r=n.getContext(`2d`);if(!r)throw Error(`Could not get 2D canvas context`);return vR(r,e,t),n}function bR(e,t){return yR(e,t).getContext(`2d`).getImageData(0,0,e,e)}var xR=H(`<div style="width: 100%; height: 100%;"></div> <div class="projection-picker svelte-c20cna"><button> </button> <button class="proj-btn svelte-c20cna"><!></button> <button class="proj-btn svelte-c20cna"><!></button></div> <button aria-label="Reset to North-Up"><svg width="44" height="44" viewBox="0 0 44 44" aria-hidden="true"><circle cx="22" cy="22" r="21" fill="rgba(0,0,0,0.72)" stroke="rgba(255,255,255,0.18)" stroke-width="1" class="svelte-c20cna"></circle><g><polygon points="22,5 17,23 22,20 27,23" fill="#e53e3e"></polygon><polygon points="22,39 17,21 22,24 27,21" fill="rgba(200,200,200,0.75)"></polygon></g><text x="22" y="15.5" text-anchor="middle" font-size="7" font-family="system-ui,sans-serif" fill="rgba(255,255,255,0.55)">N</text></svg></button>`,1);function SR(e,t){Ge(t,!0);let n=()=>dt(au,`$vesselState`,r),[r,i]=ft(),a={version:8,projection:{type:`mercator`},sources:{"osm-tiles":{type:`raster`,tiles:[`https://tile.openstreetmap.org/{z}/{x}/{y}.png`],tileSize:256,attribution:`© OpenStreetMap contributors`},openseamap:{type:`raster`,tiles:[`https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png`],tileSize:256}},layers:[{id:`osm`,type:`raster`,source:`osm-tiles`},{id:`seamarks`,type:`raster`,source:`openseamap`}]},o,s,c=P(!!document.fullscreenElement),l=()=>{};function u(){document.fullscreenElement?document.exitFullscreen().catch(()=>{}):document.documentElement.requestFullscreen().catch(()=>{})}function d(){if(hu.following){hu.following=!1;return}hu.following=!0}let f=P(!1),p=P(10),m=P(0),h=P(`mercator`),g=null,_=!1,v=!1,y=null,b=null,x=0,S=null,C=null;function w(e){if(e!==`globe`&&B(h)===`globe`){let e=s?.style?.projection?._verticalPerspectiveProjection;e&&(g=e._errorCorrectionUsable)}if(F(h,e,!0),s?.setProjection({type:e}),e===`globe`&&g!==null){let e=s?.style?.projection?._verticalPerspectiveProjection;e&&(e._errorCorrectionUsable=g,e._errorCorrectionPreviousValue=g,e._errorMeasurementLastValue=-g),_=!0,requestAnimationFrame(()=>{if(!_)return;_=!1;let e=s?.style?.projection?._verticalPerspectiveProjection;e?._errorMeasurement&&g!==null&&(e._errorMeasurement._measuredError=-g,e._errorMeasurementLastValue=-g,e._errorMeasurementLastChangeTime=performance.now()-1e4)})}else _=!1}let T=`vessel`,E=`vessel-cog`,ee=`vessel-hdg`,te=`vessel-gc`,ne=`ais-targets`,D={type:`FeatureCollection`,features:[]},O=new Map,k=null;function re(e,t){let n=Math.max(1,t);switch(e){case`dashed`:return[5,3];case`dotted`:return[n,3];case`dash-dot`:return[5,3,1,3];default:return null}}function ie(e,t,n,r){let i=r/6371e3,a=t*Math.PI/180,o=a+i*Math.cos(n),s=Math.log(Math.tan(o/2+Math.PI/4)/Math.tan(a/2+Math.PI/4)),c=Math.abs(s)>1e-10?(o-a)/s:Math.cos(a);return[(e*Math.PI/180+i*Math.sin(n)/c)*180/Math.PI,o*180/Math.PI]}function ae(e,t,n,r){let i=t*Math.PI/180,a=Math.cos(n);if(Math.abs(a)>1e-10){let e=((a>0?85*Math.PI/180:-(85*Math.PI)/180)-i)/a*6371e3;e>0&&e<r&&(r=e)}let o=[],s=e*Math.PI/180;for(let i=0;i<=256;i++){let[a,c]=ie(e,t,n,i/256*r),l=a*Math.PI/180-s,u=s+l-Math.round(l/(2*Math.PI))*2*Math.PI;s=u,o.push([u*180/Math.PI,c])}return o}function oe(e,t,n,r){let i=t*Math.PI/180,a=e*Math.PI/180,o=[],s=a;for(let e=0;e<=256;e++){let t=e/256*r/6371e3,c=Math.asin(Math.sin(i)*Math.cos(t)+Math.cos(i)*Math.sin(t)*Math.cos(n)),l=a+Math.atan2(Math.sin(n)*Math.sin(t)*Math.cos(i),Math.cos(t)-Math.sin(i)*Math.sin(c))-s,u=s+l-Math.round(l/(2*Math.PI))*2*Math.PI;s=u,o.push([u*180/Math.PI,c*180/Math.PI])}return o}function se(e,t=255){let n=e.replace(`#`,``),r=parseInt(n.slice(0,2),16),i=parseInt(n.slice(2,4),16),a=parseInt(n.slice(4,6),16);return[isNaN(r)?0:r,isNaN(i)?0:i,isNaN(a)?0:a,t]}function ce(e,t){let n=Math.max(1,t);switch(e){case`dashed`:return[6*n,3*n];case`dotted`:return[n,2*n];case`dash-dot`:return[6*n,2*n];default:return[0,0]}}function le(){if(!s)return;let e=o.clientWidth,t=o.clientHeight,n=e/2,r=t*.75,i=e/8,a=s.unproject([n-i,r]),c=s.unproject([n+i,r]);mL.add(a.lng,a.lat,c.lng,c.lat)}let ue=null,de=!1;function fe(e){e!==de&&(de=e,o.style.cursor=e?`grab`:``,e?s?.dragPan.disable():ue||s?.dragPan.enable())}function pe(e){if(!ve||!s)return;let t=o.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=ve.pickObject({x:n,y:r,radius:12,layerIds:[`ruler-delete`]});if(i?.object){let t=i.object;mL.remove(t.rulerId),e.stopPropagation();return}let a=ve.pickObject({x:n,y:r,radius:10,layerIds:[`ruler-handles`]});if(!a?.object)return;let c=a.object;ue={rulerId:c.rulerId,endpoint:c.endpoint},s.dragPan.disable(),o.style.cursor=`grabbing`,o.setPointerCapture(e.pointerId),e.stopPropagation()}function me(e){if(!s)return;let t=o.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;if(!ue){ve&&fe(!!ve.pickObject({x:n,y:r,radius:10,layerIds:[`ruler-handles`]})?.object);return}let i=s.unproject([n,r]);mL.moveEndpoint(ue.rulerId,ue.endpoint,i.lng,i.lat),e.stopPropagation()}function he(e){if(!ue||!s)return;let t=o.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=s.unproject([n,r]),a,c=i.lng,l=i.lat;for(let e of _e){let t=s.project([e.position.longitude,e.position.latitude]);if(Math.hypot(t.x-n,t.y-r)<ge){a=e.id,c=e.position.longitude,l=e.position.latitude;break}}mL.snapEndpoint(ue.rulerId,ue.endpoint,a,c,l),ue=null,o.style.cursor=de?`grab`:``,de||s.dragPan.enable(),o.releasePointerCapture(e.pointerId)}let ge=24,_e=[],ve=null,ye=null,be=[],xe=0,Se=[],Ce=[];function we(){ve?.setProps({layers:[...Se,...Ce]})}let Te=0,Ee=null,De=[];Pn(()=>{q.targetFps,cancelAnimationFrame(Te),clearTimeout(Te),De.length=0,pu.set(0),Ee?.()}),qr(()=>{s=new iu.default.Map({container:o,style:a,center:[10.75,59.91],zoom:10,maxPitch:85,bearingSnap:0}),s.addControl(new iu.default.NavigationControl({showCompass:!1}),`top-right`),s.addControl(new iu.default.ScaleControl({unit:`nautical`}),`bottom-left`),ve=new nF({layers:[],interleaved:!1,parameters:{depthCompare:`always`,cullMode:`none`}}),s.addControl(ve),we();function e(){let e=performance.now();De.push(e);let n=e-3e3;for(;De.length>2&&De[0]<n;)De.shift();if(De.length>=2){let e=De[De.length-1]-De[0];pu.set((De.length-1)/(e/1e3))}if(ve!==null){let e=Date.now(),t=ct(au).position;{let n=e,r=[];if(ye&&be.length>0){let e=ye,t=be,i=t.length;for(let a=0;a<i;a++){let i=e[a*7+0],o=e[a*7+1];r.push({id:t[a],position:{longitude:i,latitude:o}});let s=e[a*7+2],c=e[a*7+3];if(!isNaN(s)&&!isNaN(c)&&c>.1){let l=e[a*7+5],u=xe-e[a*7+6]*1e3,[d,f]=_R(i,o,s,c,isNaN(l)?0:l,u,n);r.push({id:t[a]+`:ghost`,position:{longitude:d,latitude:f}})}}}t&&r.push({id:`own-vessel`,position:{longitude:t.longitude,latitude:t.latitude}}),_e=r,mL.syncSnapped(_e)}let n=mL.rulers;if(n.length>0){let e=q.appearance.ruler.color,t=q.appearance.ruler.width;function r(e,t){let n=parseInt(e.replace(`#`,``),16);return[n>>16&255,n>>8&255,n&255,Math.round(t*255)]}let i=r(e,.87),a=r(e,.9),o=n.flatMap(e=>{if(s){let t=s.project([e.a.lon,e.a.lat]),n=s.project([e.b.lon,e.b.lat]);if(Math.hypot(n.x-t.x,n.y-t.y)<100)return[]}let t=lL(e.a.lon,e.a.lat,e.b.lon,e.b.lat),n=t[Math.floor(t.length/2)];return[{ruler:e,lon:n[0],lat:n[1]}]}),c=n.flatMap(e=>[{rulerId:e.id,endpoint:`a`,lon:e.a.lon,lat:e.a.lat,snapId:e.a.snapId},{rulerId:e.id,endpoint:`b`,lon:e.b.lon,lat:e.b.lat,snapId:e.b.snapId}]),l=n.flatMap(e=>{if(s){let t=s.project([e.a.lon,e.a.lat]),n=s.project([e.b.lon,e.b.lat]);if(Math.hypot(n.x-t.x,n.y-t.y)<100)return[]}return[{rulerId:e.id,endpoint:`b`,lon:e.b.lon,lat:e.b.lat}]});Ce=[new rI({id:`ruler-line`,data:n.map(e=>({ruler:e})),getPath:e=>lL(e.ruler.a.lon,e.ruler.a.lat,e.ruler.b.lon,e.ruler.b.lat),getColor:()=>i,getWidth:t,widthUnits:`pixels`,widthMinPixels:1,pickable:!1,updateTriggers:{getPath:[n]}}),new MF({id:`ruler-handles`,data:c,getPosition:e=>[e.lon,e.lat,0],getRadius:7,radiusUnits:`pixels`,getFillColor:e=>e.snapId?[255,100,50,230]:a,getLineColor:[255,255,255,180],lineWidthUnits:`pixels`,getLineWidth:1.5,stroked:!0,pickable:!0,updateTriggers:{getPosition:[n],getFillColor:[n,e]}}),new eL({id:`ruler-labels`,data:o,getText:e=>`${uL(e.ruler)} · ${dL(e.ruler)}`,getPosition:e=>[e.lon,e.lat,0],getSize:13,getColor:[255,240,180,230],getBackgroundColor:[0,0,0,160],background:!0,backgroundPadding:[4,2,4,2],getTextAnchor:`middle`,getAlignmentBaseline:`center`,fontFamily:`monospace`,characterSet:[...`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 °·.,'-/T`],pickable:!1,updateTriggers:{getText:[n],getPosition:[n]}}),new eL({id:`ruler-delete`,data:l,getText:()=>`✕`,getPosition:e=>[e.lon,e.lat,0],getPixelOffset:[14,-14],getSize:11,getColor:[255,100,100,220],getBackgroundColor:[30,10,10,180],background:!0,backgroundPadding:[3,1,3,1],getTextAnchor:`middle`,getAlignmentBaseline:`center`,characterSet:[`✕`],pickable:!0,updateTriggers:{getPosition:[n]}})],we()}else Ce.length>0&&(Ce=[],we())}t()}function t(){let t=1e3/q.targetFps;Te=t<=17?requestAnimationFrame(e):setTimeout(e,t)}Ee=t,t(),o.addEventListener(`pointerdown`,pe,{capture:!0}),o.addEventListener(`pointermove`,me,{capture:!0}),o.addEventListener(`pointerup`,he,{capture:!0}),o.addEventListener(`pointercancel`,he,{capture:!0}),l=()=>{F(c,!!document.fullscreenElement)},document.addEventListener(`fullscreenchange`,l),s.on(`zoom`,()=>{F(p,s?.getZoom()??B(p),!0)}),s.on(`rotate`,()=>{F(m,s?.getBearing()??B(m),!0)}),s.on(`movestart`,e=>{e.originalEvent&&(v=!0)}),s.on(`moveend`,()=>{v=!1}),s.on(`dragstart`,()=>{ue||(hu.following=!1)}),s.on(`rotatestart`,e=>{e.originalEvent&&yu.setManual()}),s.on(`click`,e=>{if(!ve)return;let{x:t,y:n}=e.point,r=ve.pickMultipleObjects({x:t,y:n,radius:5,layerIds:[`ais-confirmed-icon`,`ais-hull-ghost`,`ais-hull-confirmed`,`ais-ghost-icon`,`ais-mob-icon`]}),i=new Set,a=[];for(let e of r){let t=e.object;t!=null&&(i.has(t)||(i.add(t),e.coordinate&&a.push({idx:t,coordinate:e.coordinate})))}if(a.length===0)return;let o=a[0].coordinate;if(a.length===1){let e=Zu.getTarget(a[0].idx);if(!e?.position)return;je(o,e);return}A(o,a.map(e=>e.idx))}),s.on(`style.load`,()=>{let e=s;if(!e)return;let t=q.appearance;e.hasImage(`vessel-icon`)||e.addImage(`vessel-icon`,{width:64,height:64,data:bR(64,t.vesselColor).data}),e.getSource(T)||e.addSource(T,{type:`geojson`,data:D}),e.getSource(E)||e.addSource(E,{type:`geojson`,data:D}),e.getSource(ee)||e.addSource(ee,{type:`geojson`,data:D}),e.getSource(te)||e.addSource(te,{type:`geojson`,data:D}),e.getSource(ne)||e.addSource(ne,{type:`geojson`,data:D}),e.getLayer(`vessel-gc-line`)||e.addLayer({id:`vessel-gc-line`,type:`line`,source:te,paint:{"line-color":t.gc.color,"line-width":t.gc.width,...re(t.gc.style,t.gc.width)!==null&&{"line-dasharray":re(t.gc.style,t.gc.width)}}}),e.getLayer(`ais-label`)||e.addLayer({id:`ais-label`,type:`symbol`,source:ne,layout:{"text-field":[`get`,`label`],"text-font":[`Roboto Regular`],"text-size":10,"text-anchor":`top`,"text-offset":[0,.8],"text-optional":!0},paint:{"text-color":q.appearance.ais.vesselColor,"text-halo-color":`#000`,"text-halo-width":1}}),e.getLayer(`vessel-cog-line`)||e.addLayer({id:`vessel-cog-line`,type:`line`,source:E,paint:{"line-color":t.cog.color,"line-width":t.cog.width,...re(t.cog.style,t.cog.width)!==null&&{"line-dasharray":re(t.cog.style,t.cog.width)}}}),e.getLayer(`vessel-hdg-line`)||e.addLayer({id:`vessel-hdg-line`,type:`line`,source:ee,paint:{"line-color":t.heading.color,"line-width":t.heading.width}}),e.getLayer(`vessel-icon`)||e.addLayer({id:`vessel-icon`,type:`symbol`,source:T,layout:{"icon-image":`vessel-icon`,"icon-size":t.vesselSize/64,"icon-rotate":[`get`,`bearing_deg`],"icon-rotation-alignment":`map`,"icon-allow-overlap":!0,"icon-ignore-placement":!0}}),F(p,s.getZoom(),!0),F(m,s.getBearing(),!0),F(f,!0)}),s.on(`webglcontextlost`,()=>{console.warn(`[map] WebGL context lost`),F(f,!1),O.clear(),k=null}),s.on(`webglcontextrestored`,()=>{console.info(`[map] WebGL context restored`)}),s.on(`error`,e=>{console.error(`[map] error`,e.error??e)})}),Jr(()=>{cancelAnimationFrame(Te),clearTimeout(Te),ve?.finalize(),document.removeEventListener(`fullscreenchange`,l),o.removeEventListener(`pointerdown`,pe,{capture:!0}),o.removeEventListener(`pointermove`,me,{capture:!0}),o.removeEventListener(`pointerup`,he,{capture:!0}),o.removeEventListener(`pointercancel`,he,{capture:!0}),s?.remove()});function Oe(e){let t=(e,t,n=``)=>`<tr><td>${e}</td><td><b>${t===null?`<span style="opacity:0.4">—</span>`:`${String(t)}${n}`}</b></td></tr>`,n=e.rot===void 0?null:e.rot*180/Math.PI*60,r=n===null?null:`${n>0?`▶ `:n<0?`◀ `:``}${Math.abs(n).toFixed(1)}°/min`,i=e.mmsi?`<div class="ais-links">
|
|
3795
|
+
`,uR=[0,1,0,.5,.333,0,.5,-.75,0,0,1,0,.5,-.75,0,0,-.5,0,0,1,0,0,-.5,0,-.5,-.75,0,0,1,0,-.5,-.75,0,-.5,.333,0];function dR(e,t,n,r){let i=[];for(let a=0;a<r;a++){let o=a/r*2*Math.PI,s=(a+1)/r*2*Math.PI;i.push(e,t,0,e+n*Math.sin(o),t+n*Math.cos(o),0,e+n*Math.sin(s),t+n*Math.cos(s),0)}return i}function fR(e,t,n,r){return[e,t,0,n,t,0,n,r,0,e,t,0,n,r,0,e,r,0]}function pR(e,t,n,r,i){let a=n-e,o=r-t,s=Math.sqrt(a*a+o*o),c=-o/s*i,l=a/s*i;return[e+c,t+l,0,e-c,t-l,0,n-c,r-l,0,e+c,t+l,0,n-c,r-l,0,n+c,r+l,0]}function mR(e,t,n,r){return[e,t,0,e,t+r,0,e+n,t,0,e,t,0,e+n,t,0,e,t-r,0,e,t,0,e,t-r,0,e-n,t,0,e,t,0,e-n,t,0,e,t+r,0]}function hR(e,t,n,r){let i=[];for(let a=0;a<r;a++){let o=-Math.PI/2+Math.PI*a/r,s=-Math.PI/2+Math.PI*(a+1)/r;i.push(e,t,0,e+n*Math.sin(o),t+n*Math.cos(o),0,e+n*Math.sin(s),t+n*Math.cos(s),0)}return i}function gR(e,t,n,r,i,a,o){let s=[];for(let c=0;c<o;c++){let l=(i+(a-i)*(c/o))*Math.PI/180,u=(i+(a-i)*((c+1)/o))*Math.PI/180,d=Math.sin(l),f=Math.cos(l),p=Math.sin(u),m=Math.cos(u);s.push(e+n*d,t+n*f,0,e+r*d,t+r*f,0,e+r*p,t+r*m,0,e+n*d,t+n*f,0,e+r*p,t+r*m,0,e+n*p,t+n*m,0)}return s}function _R(e,t=[]){let n=e.length/3,r=t.length/3,i=n+r;return{positions:new Float32Array([...e,...t,...e,...t]),isOutline:new Float32Array([...Array(i).fill(1),...Array(i).fill(0)]),isIndicator:new Float32Array([...Array(i).fill(0),...Array(n).fill(0),...Array(r).fill(1)]),vertexCount:i*2}}var vR=_R(uR),yR=_R([],dR(0,.65,.18,8)),bR=(()=>{let e=1.55,t=1.35,n=[];for(let r=0;r<16;r++){let i=r/16*2*Math.PI,a=(r+1)/16*2*Math.PI;n.push(t*Math.sin(i),t*Math.cos(i),0,e*Math.sin(i),e*Math.cos(i),0,e*Math.sin(a),e*Math.cos(a),0,t*Math.sin(i),t*Math.cos(i),0,e*Math.sin(a),e*Math.cos(a),0,t*Math.sin(a),t*Math.cos(a),0)}return _R([],n)})(),xR=_R([],[...fR(-1.38,-.55,-1.13,.22),...fR(1.13,-.55,1.38,.22)]),SR=_R([],[...pR(-.8,0,-1.5,-.5,.08),...pR(.8,0,1.5,-.5,.08),...gR(0,.3,1.6,1.78,242,118,14)]),CR=_R([],[...dR(0,.45,.15,10),...dR(0,.1,.15,10)]),wR=_R([],[...dR(0,.57,.13,10),...mR(0,.15,.17,.17),...dR(0,-.28,.13,10)]),TR=_R([],[...fR(-1,-.8,-.75,.85),...fR(.75,-.8,1,.85)]),ER=_R(dR(0,0,1.1,16),[...dR(0,.62,.2,12),...pR(-.19,.32,-.78,.5,.08),...pR(.19,.32,.78,.5,.08),...fR(-.15,-.3,.15,.32),...hR(-.42,-.55,.18,8),...hR(.42,-.55,.18,8),...fR(-.83,-.8,.83,-.55)]),DR={getPosition:{type:`accessor`,value:[0,0]},getSog:{type:`accessor`,value:0},getCog:{type:`accessor`,value:0},getHeading:{type:`accessor`,value:0},getRot:{type:`accessor`,value:0},getAgeAtUpload:{type:`accessor`,value:0},getLength:{type:`accessor`,value:0},getColor:{type:`accessor`,value:[255,255,255,255]},uploadTimestamp:0,selfAnimate:!1,settingsIconSize:1,opacity:1},OR=class extends xP{static layerName=`AisIconLayer`;static defaultProps=DR;getShaders(){return super.getShaders({vs:cR,fs:lR,modules:[lw,tT,sR]})}initializeState(){this.getAttributeManager().addInstanced({instancePositions:{size:3,type:`float64`,fp64:this.use64bitPositions(),transition:!0,accessor:`getPosition`,defaultValue:[0,0,0]},instanceSog:{size:1,accessor:`getSog`,defaultValue:0},instanceCog:{size:1,accessor:`getCog`,defaultValue:0},instanceHeading:{size:1,accessor:`getHeading`,defaultValue:0},instanceRot:{size:1,accessor:`getRot`,defaultValue:0},instanceAgeAtUpload:{size:1,accessor:`getAgeAtUpload`,defaultValue:0},instanceLength:{size:1,accessor:`getLength`,defaultValue:0},instanceColor:{size:4,type:`unorm8`,accessor:`getColor`,defaultValue:[255,255,255,255]}})}updateState(e){super.updateState(e),(e.changeFlags.extensionsChanged||e.props.iconGeometry!==e.oldProps.iconGeometry)&&(this.state.model?.destroy(),this.state.model=this._getModel(),this.getAttributeManager().invalidateAll()),e.changeFlags.propsChanged&&this.setNeedsRedraw()}draw({uniforms:e}){let{uploadTimestamp:t,selfAnimate:n,settingsIconSize:r,opacity:i}=this.props,a=n?Math.max(0,(Date.now()-(t??0))/1e3):0,o=this.context.viewport.zoom,s=this.state.model;s.shaderInputs.setProps({aisIcon:{timeSinceUpload:a,zoom:o,settingsIconSize:r??1,opacity:i??1}}),s.draw(this.context.renderPass),n&&this.setNeedsRedraw()}_getModel(){let e=this.props.iconGeometry??vR;return new cD(this.context.device,{...this.getShaders(),id:this.props.id,bufferLayout:this.getAttributeManager().getBufferLayouts(),geometry:new dD({topology:`triangle-list`,attributes:{positions:{size:3,value:e.positions},aIsOutline:{size:1,value:e.isOutline},aIsIndicator:{size:1,value:e.isIndicator}},vertexCount:e.vertexCount}),isInstanced:!0})}};function kR(e,t,n,r,i,a,o){let s=(o-a)/1e3;if(s===0||r<.01)return[e,t];let c,l;if(Math.abs(i)>1e-4){let e=n+i*s,t=r/i;c=t*(Math.cos(n)-Math.cos(e)),l=t*(Math.sin(e)-Math.sin(n))}else c=r*s*Math.sin(n),l=r*s*Math.cos(n);let u=111320*Math.cos(t*Math.PI/180);return[e+c/u,t+l/111320]}function AR(e,t,n){let r=t/2,i=t/2,a=t/32;e.beginPath(),e.moveTo(r,i-12*a),e.lineTo(r+8*a,i-4*a),e.lineTo(r+8*a,i+9*a),e.lineTo(r,i+6*a),e.lineTo(r-8*a,i+9*a),e.lineTo(r-8*a,i-4*a),e.closePath(),e.fillStyle=n,e.fill(),e.strokeStyle=`#ffffff`,e.lineWidth=1.5*a,e.lineJoin=`round`,e.stroke()}function jR(e,t){let n=document.createElement(`canvas`);n.width=e,n.height=e;let r=n.getContext(`2d`);if(!r)throw Error(`Could not get 2D canvas context`);return AR(r,e,t),n}function MR(e,t){return jR(e,t).getContext(`2d`).getImageData(0,0,e,e)}var NR=H(`<div style="width: 100%; height: 100%;"></div> <div class="projection-picker svelte-c20cna"><button> </button> <button class="proj-btn svelte-c20cna"><!></button> <button class="proj-btn svelte-c20cna"><!></button></div> <button aria-label="Reset to North-Up"><svg width="44" height="44" viewBox="0 0 44 44" aria-hidden="true"><circle cx="22" cy="22" r="21" fill="rgba(0,0,0,0.72)" stroke="rgba(255,255,255,0.18)" stroke-width="1" class="svelte-c20cna"></circle><g><polygon points="22,5 17,23 22,20 27,23" fill="#e53e3e"></polygon><polygon points="22,39 17,21 22,24 27,21" fill="rgba(200,200,200,0.75)"></polygon></g><text x="22" y="15.5" text-anchor="middle" font-size="7" font-family="system-ui,sans-serif" fill="rgba(255,255,255,0.55)">N</text></svg></button>`,1);function PR(e,t){Ge(t,!0);let n=()=>dt(au,`$vesselState`,r),[r,i]=ft(),a={version:8,projection:{type:`mercator`},sources:{"osm-tiles":{type:`raster`,tiles:[`https://tile.openstreetmap.org/{z}/{x}/{y}.png`],tileSize:256,attribution:`© OpenStreetMap contributors`},openseamap:{type:`raster`,tiles:[`https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png`],tileSize:256}},layers:[{id:`osm`,type:`raster`,source:`osm-tiles`},{id:`seamarks`,type:`raster`,source:`openseamap`}]},o,s,c=P(!!document.fullscreenElement),l=()=>{};function u(){document.fullscreenElement?document.exitFullscreen().catch(()=>{}):document.documentElement.requestFullscreen().catch(()=>{})}function d(){if(hu.following){hu.following=!1;return}hu.following=!0}let f=P(!1),p=P(10),m=P(0),h=P(`mercator`),g=null,_=!1,v=!1,y=null,b=null,x=0,S=null,C=null;function w(e){if(e!==`globe`&&B(h)===`globe`){let e=s?.style?.projection?._verticalPerspectiveProjection;e&&(g=e._errorCorrectionUsable)}if(F(h,e,!0),s?.setProjection({type:e}),e===`globe`&&g!==null){let e=s?.style?.projection?._verticalPerspectiveProjection;e&&(e._errorCorrectionUsable=g,e._errorCorrectionPreviousValue=g,e._errorMeasurementLastValue=-g),_=!0,requestAnimationFrame(()=>{if(!_)return;_=!1;let e=s?.style?.projection?._verticalPerspectiveProjection;e?._errorMeasurement&&g!==null&&(e._errorMeasurement._measuredError=-g,e._errorMeasurementLastValue=-g,e._errorMeasurementLastChangeTime=performance.now()-1e4)})}else _=!1}let T=`vessel`,E=`vessel-cog`,ee=`vessel-hdg`,te=`vessel-gc`,ne=`ais-targets`,D=`route-lines`,O=`route-waypoints`,k={type:`FeatureCollection`,features:[]},re=new Map,ie=null;function ae(e,t){let n=Math.max(1,t);switch(e){case`dashed`:return[5,3];case`dotted`:return[n,3];case`dash-dot`:return[5,3,1,3];default:return null}}function oe(e,t,n,r){let i=r/6371e3,a=t*Math.PI/180,o=a+i*Math.cos(n),s=Math.log(Math.tan(o/2+Math.PI/4)/Math.tan(a/2+Math.PI/4)),c=Math.abs(s)>1e-10?(o-a)/s:Math.cos(a);return[(e*Math.PI/180+i*Math.sin(n)/c)*180/Math.PI,o*180/Math.PI]}function se(e,t,n,r){let i=t*Math.PI/180,a=Math.cos(n);if(Math.abs(a)>1e-10){let e=((a>0?85*Math.PI/180:-(85*Math.PI)/180)-i)/a*6371e3;e>0&&e<r&&(r=e)}let o=[],s=e*Math.PI/180;for(let i=0;i<=256;i++){let[a,c]=oe(e,t,n,i/256*r),l=a*Math.PI/180-s,u=s+l-Math.round(l/(2*Math.PI))*2*Math.PI;s=u,o.push([u*180/Math.PI,c])}return o}function ce(e,t,n,r){let i=t*Math.PI/180,a=e*Math.PI/180,o=[],s=a;for(let e=0;e<=256;e++){let t=e/256*r/6371e3,c=Math.asin(Math.sin(i)*Math.cos(t)+Math.cos(i)*Math.sin(t)*Math.cos(n)),l=a+Math.atan2(Math.sin(n)*Math.sin(t)*Math.cos(i),Math.cos(t)-Math.sin(i)*Math.sin(c))-s,u=s+l-Math.round(l/(2*Math.PI))*2*Math.PI;s=u,o.push([u*180/Math.PI,c*180/Math.PI])}return o}function le(e,t=255){let n=e.replace(`#`,``),r=parseInt(n.slice(0,2),16),i=parseInt(n.slice(2,4),16),a=parseInt(n.slice(4,6),16);return[isNaN(r)?0:r,isNaN(i)?0:i,isNaN(a)?0:a,t]}function ue(e,t){let n=Math.max(1,t);switch(e){case`dashed`:return[6*n,3*n];case`dotted`:return[n,2*n];case`dash-dot`:return[6*n,2*n];default:return[0,0]}}function de(){if(!s)return;let e=o.clientWidth,t=o.clientHeight,n=e/2,r=t*.75,i=e/8,a=s.unproject([n-i,r]),c=s.unproject([n+i,r]);mL.add(a.lng,a.lat,c.lng,c.lat)}let fe=null,pe=!1;function me(e){e!==pe&&(pe=e,o.style.cursor=e?`grab`:``,e?s?.dragPan.disable():fe||s?.dragPan.enable())}function he(e){if(!be||!s)return;let t=o.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=be.pickObject({x:n,y:r,radius:12,layerIds:[`ruler-delete`]});if(i?.object){let t=i.object;mL.remove(t.rulerId),e.stopPropagation();return}let a=be.pickObject({x:n,y:r,radius:10,layerIds:[`ruler-handles`]});if(!a?.object)return;let c=a.object;fe={rulerId:c.rulerId,endpoint:c.endpoint},s.dragPan.disable(),o.style.cursor=`grabbing`,o.setPointerCapture(e.pointerId),e.stopPropagation()}function ge(e){if(!s)return;let t=o.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;if(!fe){be&&me(!!be.pickObject({x:n,y:r,radius:10,layerIds:[`ruler-handles`]})?.object);return}let i=s.unproject([n,r]);mL.moveEndpoint(fe.rulerId,fe.endpoint,i.lng,i.lat),e.stopPropagation()}function _e(e){if(!fe||!s)return;let t=o.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=s.unproject([n,r]),a,c=i.lng,l=i.lat;for(let e of ye){let t=s.project([e.position.longitude,e.position.latitude]);if(Math.hypot(t.x-n,t.y-r)<ve){a=e.id,c=e.position.longitude,l=e.position.latitude;break}}mL.snapEndpoint(fe.rulerId,fe.endpoint,a,c,l),fe=null,o.style.cursor=pe?`grab`:``,pe||s.dragPan.enable(),o.releasePointerCapture(e.pointerId)}let ve=24,ye=[],be=null,xe=null,Se=[],Ce=0,we=[],Te=[];function Ee(){be?.setProps({layers:[...we,...Te]})}let De=0,Oe=null,ke=[];Pn(()=>{q.targetFps,cancelAnimationFrame(De),clearTimeout(De),ke.length=0,pu.set(0),Oe?.()}),qr(()=>{s=new iu.default.Map({container:o,style:a,center:[10.75,59.91],zoom:10,maxPitch:85,bearingSnap:0}),s.addControl(new iu.default.NavigationControl({showCompass:!1}),`top-right`),s.addControl(new iu.default.ScaleControl({unit:`nautical`}),`bottom-left`),be=new nF({layers:[],interleaved:!1,parameters:{depthCompare:`always`,cullMode:`none`}}),s.addControl(be),Ee();function e(){let e=performance.now();ke.push(e);let n=e-3e3;for(;ke.length>2&&ke[0]<n;)ke.shift();if(ke.length>=2){let e=ke[ke.length-1]-ke[0];pu.set((ke.length-1)/(e/1e3))}if(be!==null){let e=Date.now(),t=ct(au).position;{let n=e,r=[];if(xe&&Se.length>0){let e=xe,t=Se,i=t.length;for(let a=0;a<i;a++){let i=e[a*7+0],o=e[a*7+1];r.push({id:t[a],position:{longitude:i,latitude:o}});let s=e[a*7+2],c=e[a*7+3];if(!isNaN(s)&&!isNaN(c)&&c>.1){let l=e[a*7+5],u=Ce-e[a*7+6]*1e3,[d,f]=kR(i,o,s,c,isNaN(l)?0:l,u,n);r.push({id:t[a]+`:ghost`,position:{longitude:d,latitude:f}})}}}t&&r.push({id:`own-vessel`,position:{longitude:t.longitude,latitude:t.latitude}}),ye=r,mL.syncSnapped(ye)}let n=mL.rulers;if(n.length>0){let e=q.appearance.ruler.color,t=q.appearance.ruler.width;function r(e,t){let n=parseInt(e.replace(`#`,``),16);return[n>>16&255,n>>8&255,n&255,Math.round(t*255)]}let i=r(e,.87),a=r(e,.9),o=n.flatMap(e=>{if(s){let t=s.project([e.a.lon,e.a.lat]),n=s.project([e.b.lon,e.b.lat]);if(Math.hypot(n.x-t.x,n.y-t.y)<100)return[]}let t=lL(e.a.lon,e.a.lat,e.b.lon,e.b.lat),n=t[Math.floor(t.length/2)];return[{ruler:e,lon:n[0],lat:n[1]}]}),c=n.flatMap(e=>[{rulerId:e.id,endpoint:`a`,lon:e.a.lon,lat:e.a.lat,snapId:e.a.snapId},{rulerId:e.id,endpoint:`b`,lon:e.b.lon,lat:e.b.lat,snapId:e.b.snapId}]),l=n.flatMap(e=>{if(s){let t=s.project([e.a.lon,e.a.lat]),n=s.project([e.b.lon,e.b.lat]);if(Math.hypot(n.x-t.x,n.y-t.y)<100)return[]}return[{rulerId:e.id,endpoint:`b`,lon:e.b.lon,lat:e.b.lat}]});Te=[new rI({id:`ruler-line`,data:n.map(e=>({ruler:e})),getPath:e=>lL(e.ruler.a.lon,e.ruler.a.lat,e.ruler.b.lon,e.ruler.b.lat),getColor:()=>i,getWidth:t,widthUnits:`pixels`,widthMinPixels:1,pickable:!1,updateTriggers:{getPath:[n]}}),new MF({id:`ruler-handles`,data:c,getPosition:e=>[e.lon,e.lat,0],getRadius:7,radiusUnits:`pixels`,getFillColor:e=>e.snapId?[255,100,50,230]:a,getLineColor:[255,255,255,180],lineWidthUnits:`pixels`,getLineWidth:1.5,stroked:!0,pickable:!0,updateTriggers:{getPosition:[n],getFillColor:[n,e]}}),new eL({id:`ruler-labels`,data:o,getText:e=>`${uL(e.ruler)} · ${dL(e.ruler)}`,getPosition:e=>[e.lon,e.lat,0],getSize:13,getColor:[255,240,180,230],getBackgroundColor:[0,0,0,160],background:!0,backgroundPadding:[4,2,4,2],getTextAnchor:`middle`,getAlignmentBaseline:`center`,fontFamily:`monospace`,characterSet:[...`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 °·.,'-/T`],pickable:!1,updateTriggers:{getText:[n],getPosition:[n]}}),new eL({id:`ruler-delete`,data:l,getText:()=>`✕`,getPosition:e=>[e.lon,e.lat,0],getPixelOffset:[14,-14],getSize:11,getColor:[255,100,100,220],getBackgroundColor:[30,10,10,180],background:!0,backgroundPadding:[3,1,3,1],getTextAnchor:`middle`,getAlignmentBaseline:`center`,characterSet:[`✕`],pickable:!0,updateTriggers:{getPosition:[n]}})],Ee()}else Te.length>0&&(Te=[],Ee())}t()}function t(){let t=1e3/q.targetFps;De=t<=17?requestAnimationFrame(e):setTimeout(e,t)}Oe=t,t(),o.addEventListener(`pointerdown`,he,{capture:!0}),o.addEventListener(`pointermove`,ge,{capture:!0}),o.addEventListener(`pointerup`,_e,{capture:!0}),o.addEventListener(`pointercancel`,_e,{capture:!0}),l=()=>{F(c,!!document.fullscreenElement)},document.addEventListener(`fullscreenchange`,l),s.on(`zoom`,()=>{F(p,s?.getZoom()??B(p),!0)}),s.on(`rotate`,()=>{F(m,s?.getBearing()??B(m),!0)}),s.on(`movestart`,e=>{e.originalEvent&&(v=!0)}),s.on(`moveend`,()=>{v=!1}),s.on(`dragstart`,()=>{fe||(hu.following=!1)}),s.on(`rotatestart`,e=>{e.originalEvent&&yu.setManual()}),s.on(`click`,e=>{if(!be)return;let{x:t,y:n}=e.point,r=be.pickMultipleObjects({x:t,y:n,radius:5,layerIds:[`ais-confirmed-icon`,`ais-hull-ghost`,`ais-hull-confirmed`,`ais-ghost-icon`,`ais-mob-icon`]}),i=new Set,a=[];for(let e of r){let t=e.object;t!=null&&(i.has(t)||(i.add(t),e.coordinate&&a.push({idx:t,coordinate:e.coordinate})))}if(a.length===0)return;let o=a[0].coordinate;if(a.length===1){let e=Zu.getTarget(a[0].idx);if(!e?.position)return;Me(o,e);return}j(o,a.map(e=>e.idx))}),s.on(`style.load`,()=>{let e=s;if(!e)return;let t=q.appearance;e.hasImage(`vessel-icon`)||e.addImage(`vessel-icon`,{width:64,height:64,data:MR(64,t.vesselColor).data}),e.getSource(T)||e.addSource(T,{type:`geojson`,data:k}),e.getSource(E)||e.addSource(E,{type:`geojson`,data:k}),e.getSource(ee)||e.addSource(ee,{type:`geojson`,data:k}),e.getSource(te)||e.addSource(te,{type:`geojson`,data:k}),e.getSource(ne)||e.addSource(ne,{type:`geojson`,data:k}),e.getSource(D)||e.addSource(D,{type:`geojson`,data:k}),e.getSource(O)||e.addSource(O,{type:`geojson`,data:k}),e.getLayer(`vessel-gc-line`)||e.addLayer({id:`vessel-gc-line`,type:`line`,source:te,paint:{"line-color":t.gc.color,"line-width":t.gc.width,...ae(t.gc.style,t.gc.width)!==null&&{"line-dasharray":ae(t.gc.style,t.gc.width)}}}),e.getLayer(`ais-label`)||e.addLayer({id:`ais-label`,type:`symbol`,source:ne,layout:{"text-field":[`get`,`label`],"text-font":[`Roboto Regular`],"text-size":10,"text-anchor":`top`,"text-offset":[0,.8],"text-optional":!0},paint:{"text-color":q.appearance.ais.vesselColor,"text-halo-color":`#000`,"text-halo-width":1}}),e.getLayer(`vessel-cog-line`)||e.addLayer({id:`vessel-cog-line`,type:`line`,source:E,paint:{"line-color":t.cog.color,"line-width":t.cog.width,...ae(t.cog.style,t.cog.width)!==null&&{"line-dasharray":ae(t.cog.style,t.cog.width)}}}),e.getLayer(`vessel-hdg-line`)||e.addLayer({id:`vessel-hdg-line`,type:`line`,source:ee,paint:{"line-color":t.heading.color,"line-width":t.heading.width}}),e.getLayer(`vessel-icon`)||e.addLayer({id:`vessel-icon`,type:`symbol`,source:T,layout:{"icon-image":`vessel-icon`,"icon-size":t.vesselSize/64,"icon-rotate":[`get`,`bearing_deg`],"icon-rotation-alignment":`map`,"icon-allow-overlap":!0,"icon-ignore-placement":!0}}),e.getLayer(`route-full`)||e.addLayer({id:`route-full`,type:`line`,source:D,filter:[`==`,[`get`,`kind`],`full`],paint:{"line-color":`#e040fb`,"line-width":2,"line-dasharray":[6,4],"line-opacity":.65}},`vessel-gc-line`),e.getLayer(`route-leg`)||e.addLayer({id:`route-leg`,type:`line`,source:D,filter:[`==`,[`get`,`kind`],`leg`],paint:{"line-color":`#e040fb`,"line-width":2.5}},`vessel-gc-line`),e.getLayer(`route-bearing`)||e.addLayer({id:`route-bearing`,type:`line`,source:D,filter:[`==`,[`get`,`kind`],`bearing`],paint:{"line-color":`#ff6d00`,"line-width":2,"line-dasharray":[4,3]}},`vessel-gc-line`),e.getLayer(`route-waypoints`)||e.addLayer({id:`route-waypoints`,type:`circle`,source:O,paint:{"circle-radius":[`match`,[`get`,`wtype`],`next`,7,5],"circle-color":[`match`,[`get`,`wtype`],`next`,`#e040fb`,`#9c27b0`],"circle-opacity":.9,"circle-stroke-color":`#fff`,"circle-stroke-width":1.5}},`vessel-icon`),F(p,s.getZoom(),!0),F(m,s.getBearing(),!0),F(f,!0)}),s.on(`webglcontextlost`,()=>{console.warn(`[map] WebGL context lost`),F(f,!1),re.clear(),ie=null}),s.on(`webglcontextrestored`,()=>{console.info(`[map] WebGL context restored`)}),s.on(`error`,e=>{console.error(`[map] error`,e.error??e)})}),Jr(()=>{cancelAnimationFrame(De),clearTimeout(De),be?.finalize(),document.removeEventListener(`fullscreenchange`,l),o.removeEventListener(`pointerdown`,he,{capture:!0}),o.removeEventListener(`pointermove`,ge,{capture:!0}),o.removeEventListener(`pointerup`,_e,{capture:!0}),o.removeEventListener(`pointercancel`,_e,{capture:!0}),s?.remove()});function Ae(e){let t=(e,t,n=``)=>`<tr><td>${e}</td><td><b>${t===null?`<span style="opacity:0.4">—</span>`:`${String(t)}${n}`}</b></td></tr>`,n=e.rot===void 0?null:e.rot*180/Math.PI*60,r=n===null?null:`${n>0?`▶ `:n<0?`◀ `:``}${Math.abs(n).toFixed(1)}°/min`,i=e.mmsi?`<div class="ais-links">
|
|
3796
3796
|
<a href="https://www.vesselfinder.com/vessels/details/${e.mmsi}" target="_blank" rel="noopener">VesselFinder</a>
|
|
3797
3797
|
<a href="https://www.myshiptracking.com/?mmsi=${e.mmsi}" target="_blank" rel="noopener">MyShipTracking</a>
|
|
3798
|
-
</div>`:``,a=e.position?.longitude,o=e.position?.latitude,s=e.lastPositionUpdateMs,c=new Date(s).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`}),l=
|
|
3798
|
+
</div>`:``,a=e.position?.longitude,o=e.position?.latitude,s=e.lastPositionUpdateMs,c=new Date(s).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`}),l=A(s);return`
|
|
3799
3799
|
<div class="ais-popup">
|
|
3800
3800
|
<div class="ais-popup-title">${e.name??e.mmsi??`Unknown vessel`}</div>
|
|
3801
3801
|
<table>
|
|
@@ -3821,11 +3821,11 @@ void main(void) {
|
|
|
3821
3821
|
${t(`Air height`,e.airHeightM??null,` m`)}
|
|
3822
3822
|
</table>
|
|
3823
3823
|
${i}
|
|
3824
|
-
</div>`}let
|
|
3824
|
+
</div>`}let je=null;function A(e){let t=Math.round((Date.now()-e)/1e3);return t<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ${t%60}s ago`:`${Math.floor(t/3600)}h ${Math.floor(t%3600/60)}m ago`}function Me(e,t){if(!t.position)return!1;je!==null&&(clearInterval(je),je=null);let n=new iu.default.Popup({closeButton:!0,maxWidth:`280px`}).setLngLat(e).setHTML(Ae(t)).addTo(s);return je=setInterval(()=>{let e=document.getElementById(`ais-age`);if(!e){clearInterval(je),je=null;return}e.textContent=`(${A(Number(e.dataset.posms))})`},1e3),n.on(`close`,()=>{je!==null&&(clearInterval(je),je=null)}),!0}function j(e,t){let n=t.map(e=>({idx:e,target:Zu.getTarget(e)})).filter(e=>e.target?.position!=null);if(n.length===0)return;if(n.length===1){Me(e,n[0].target);return}let r=`
|
|
3825
3825
|
<div class="ais-disambig">
|
|
3826
3826
|
<div class="ais-popup-title">Multiple vessels</div>
|
|
3827
3827
|
<ul class="ais-disambig-list">${n.map(({idx:e,target:t})=>`<li class="ais-disambig-item" data-idx="${e}">${t.name??t.mmsi??`Unknown vessel`}</li>`).join(``)}</ul>
|
|
3828
|
-
</div>`,i=new iu.default.Popup({closeButton:!0,maxWidth:`220px`}).setLngLat(e).setHTML(r).addTo(s);i.getElement().addEventListener(`click`,t=>{let n=t.target.closest(`[data-idx]`);if(!n)return;let r=Number(n.dataset.idx),a=Zu.getTarget(r);a?.position&&(i.remove(),je(e,a))})}Pn(()=>{if(!s||!B(f))return;let e=s,t=J.selected,n=J.available,r=Object.values(n).find(e=>t.has(e.identifier)&&!!e.style),i=r?J.styleUrl(r):null;if(i!==k){F(f,!1),O.clear(),k=i,i?_L(i).then(t=>e.setStyle(t,{diff:!1})).catch(e=>{console.error(`[map] Failed to load style`,i,e),k=null,F(f,!0)}):e.setStyle(a,{diff:!1});return}for(let r of Object.keys(n)){if(t.has(r)&&!n[r].style)continue;let i=`chart-layer-${r}`,a=`chart-${r}`;e.getLayer(i)&&e.removeLayer(i),e.getSource(a)&&e.removeSource(a),O.delete(r)}for(let[r,i]of Object.entries(n)){if(!t.has(r)||i.style)continue;let n=J.tileUrl(i);if(!n)continue;let a=`chart-${r}`,o=`chart-layer-${r}`;if(O.get(r)!==n&&(e.getLayer(o)&&e.removeLayer(o),e.getSource(a)&&e.removeSource(a),O.set(r,n)),!e.getSource(a)){let t=n.includes(`{-y}`),r=t?n.replace(`{-y}`,`{y}`):n;i.format===`pbf`?e.addSource(a,{type:`vector`,tiles:[r]}):e.addSource(a,{type:`raster`,tiles:[r],tileSize:256,scheme:t?`tms`:`xyz`,minzoom:i.minzoom??0,maxzoom:i.maxzoom??22})}if(!e.getLayer(o))if(i.format===`pbf`){let t=i.layers?.[0]??r;e.addLayer({id:o,type:`fill`,source:a,"source-layer":t},`vessel-gc-line`)}else e.addLayer({id:o,type:`raster`,source:a},`vessel-gc-line`)}}),Pn(()=>{if(!s||!B(f))return;let e=Yu.enabled;for(let t of Gu)s.getLayer(t.id)&&s.setLayoutProperty(t.id,`visibility`,e.has(t.id)?`visible`:`none`)}),Pn(()=>{if(!s||!B(f))return;let e=bR(64,q.appearance.vesselColor);s.updateImage(`vessel-icon`,{width:64,height:64,data:e.data})}),Pn(()=>{!s||!B(f)||s.setPaintProperty(`ais-label`,`text-color`,q.appearance.ais.vesselColor)}),Pn(()=>{if(!s||!B(f))return;let e=s.getSource(ne);if(!(e instanceof iu.default.GeoJSONSource))return;let t=Zu.hotData,n=Zu.ids,r=Zu.coldMap;Zu.coldVersion;let i=[];if(t&&n.length>0)for(let e=0;e<n.length;e++)i.push({type:`Feature`,geometry:{type:`Point`,coordinates:[t[e*7+0],t[e*7+1]]},properties:{label:r.get(n[e])?.name??``}});let a=()=>{x=Date.now(),e.setData({type:`FeatureCollection`,features:i}),window.__mapDiag&&window.__mapDiag.aisLabels++};C=a;let o=1e3-(Date.now()-x);o<=0?(S!==null&&(clearTimeout(S),S=null),a(),C=null):S===null&&(S=setTimeout(()=>{S=null,C?.(),C=null},o))}),Pn(()=>{let e=Zu.hotData,t=Zu.ids,n=Zu.coldMap;Zu.coldVersion;let r=q.appearance.ais,i=r.vesselSize/64,a=Date.now(),o=r.cog.color,s=r.cog.width,c=r.cog.style,l=r.cog.lengthMinutes;if(!e||t.length===0){Se=[],we(),ye=null,be=[],xe=0;return}let u=t.length,d=[],f=[],p=[],m=[],h=[],g=[],_=[],v=[],y=[],b=[],x=[],S=[],C=[],w=[],T=[],E=[],ee=[],te=[],ne=[];for(let r=0;r<u;r++){let i=n.get(t[r]),a=i?.navState?.toLowerCase()??``;if(a.includes(`sart`)||a.includes(`transponder`)){S.push(r);continue}d.push(r);let o=e[r*7+3],s=e[r*7+2];!isNaN(s)&&!isNaN(o)&&o>.1&&(f.push(r),p.push(r));let c=e[r*7+4],l=!isNaN(c)&&(i?.lengthM??0)>0&&(i?.beamM??0)>0;l&&m.push(r),a.includes(`aground`)?(g.push(r),l&&w.push(r)):a.includes(`anchor`)?(h.push(r),l&&C.push(r)):a.includes(`moor`)?(_.push(r),l&&T.push(r)):a.includes(`fishing`)?(v.push(r),l&&E.push(r)):a.includes(`command`)?(y.push(r),l&&ee.push(r)):a.includes(`restrict`)?(b.push(r),l&&te.push(r)):a.includes(`draught`)&&(x.push(r),l&&ne.push(r))}ye=e,be=t,xe=a;let D=se(r.vesselColor,220),O=se(r.vesselColor,130),k=t=>[e[t*7+0],e[t*7+1],0],re=t=>{let n=e[t*7+3];return isNaN(n)?0:n},ie=t=>{let n=e[t*7+2];return isNaN(n)?0:n},ae=t=>{let n=e[t*7+4];if(!isNaN(n))return n;let r=e[t*7+2];return isNaN(r)?0:r},oe=t=>{let n=e[t*7+4];return isNaN(n)?0:n},le=t=>{let n=e[t*7+5];return isNaN(n)?0:n},ue=t=>e[t*7+6],de=(e,r)=>n.get(t[e])?.lengthM??r,fe=(e,r)=>n.get(t[e])?.beamM??r,pe=new Set(m),me=e=>pe.has(e)?de(e,0):0,he=f.length>0?new gR({id:`ais-ghost-icon`,data:f,getPosition:k,getSog:re,getCog:ie,getHeading:ae,getRot:le,getAgeAtUpload:ue,getLength:me,getColor:O,uploadTimestamp:a,selfAnimate:!0,settingsIconSize:i,pickable:!0}):null,ge=new gR({id:`ais-confirmed-icon`,data:d,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,pickable:!0}),_e=h.length>0?new gR({id:`ais-anchored-icon`,data:h,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:sR,pickable:!1}):null,ve=_.length>0?new gR({id:`ais-moored-icon`,data:_,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:lR,pickable:!1}):null,Ce=g.length>0?new gR({id:`ais-aground-icon`,data:g,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:cR,pickable:!1}):null,Te=v.length>0?new gR({id:`ais-fishing-icon`,data:v,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:uR,pickable:!1}):null,Ee=y.length>0?new gR({id:`ais-nuc-icon`,data:y,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:dR,pickable:!1}):null,De=b.length>0?new gR({id:`ais-restricted-icon`,data:b,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:fR,pickable:!1}):null,Oe=x.length>0?new gR({id:`ais-draught-icon`,data:x,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:pR,pickable:!1}):null,ke=S.length>0?new gR({id:`ais-mob-icon`,data:S,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:()=>0,getRot:()=>0,getAgeAtUpload:()=>0,getLength:()=>0,getColor:()=>[255,40,40,220],uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:mR,pickable:!0}):null,Ae=m.length>0?new kL({id:`ais-hull-ghost`,data:m,getPosition:k,getSog:re,getCog:ie,getHeading:oe,getRot:le,getAgeAtUpload:ue,getLength:e=>de(e,50),getBeam:e=>fe(e,10),getColor:D,uploadTimestamp:a,selfAnimate:!0,settingsIconSize:i,opacity:.75,pickable:!0}):null,je=m.length>0?new kL({id:`ais-hull-confirmed`,data:m,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:oe,getRot:()=>0,getAgeAtUpload:()=>0,getLength:e=>de(e,50),getBeam:e=>fe(e,10),getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,opacity:1,pickable:!0}):null,A=(e,t,n,r)=>t.length>0?new qL({id:e,data:t,getPosition:k,getSog:r?re:()=>0,getCog:r?ie:()=>0,getHeading:oe,getRot:r?le:()=>0,getAgeAtUpload:r?ue:()=>0,getLength:e=>de(e,50),getBeam:e=>fe(e,10),uploadTimestamp:a,selfAnimate:r,settingsIconSize:i,decoration:n}):null,Me=A(`ais-anchored-hull`,C,zL,!1),j=A(`ais-moored-hull`,T,BL,!1),Ne=A(`ais-aground-hull`,w,VL,!1),Pe=A(`ais-fishing-hull`,E,HL,!1),M=A(`ais-nuc-hull`,ee,UL,!1),Fe=A(`ais-restricted-hull`,te,WL,!1),Ie=A(`ais-draught-hull`,ne,GL,!1),Le=A(`ais-anchored-hull-ghost`,C,zL,!0),Re=A(`ais-moored-hull-ghost`,T,BL,!0),ze=A(`ais-aground-hull-ghost`,w,VL,!0),Be=A(`ais-fishing-hull-ghost`,E,HL,!0),Ve=A(`ais-nuc-hull-ghost`,ee,UL,!0),He=A(`ais-restricted-hull-ghost`,te,WL,!0),Ue=A(`ais-draught-hull-ghost`,ne,GL,!0);Se=[...je?[je]:[],...Me?[Me]:[],...j?[j]:[],...Ne?[Ne]:[],...Pe?[Pe]:[],...M?[M]:[],...Fe?[Fe]:[],...Ie?[Ie]:[],...Ae?[Ae]:[],...Le?[Le]:[],...Re?[Re]:[],...ze?[ze]:[],...Be?[Be]:[],...Ve?[Ve]:[],...He?[He]:[],...Ue?[Ue]:[],new rI({id:`ais-cog`,data:p,getPath:t=>{let n=e[t*7+0],r=e[t*7+1],i=e[t*7+2],a=e[t*7+3],o=e[t*7+5],s=l*60,c=isNaN(o)?0:o;if(Math.abs(c)<1e-4){let[e,t]=_R(n,r,i,isNaN(a)?0:a,0,0,s*1e3);return[[n,r],[e,t]]}let u=2*Math.PI/Math.abs(c),d=Math.min(s,u);return Array.from({length:25},(e,t)=>{let[o,s]=_R(n,r,i,isNaN(a)?0:a,c,0,d*t/24*1e3);return[o,s]})},getColor:()=>se(o,200),getWidth:s,getDashArray:ce(c,s),widthUnits:`pixels`,widthMinPixels:1,pickable:!1,extensions:[new oL({dash:!0})],updateTriggers:{getPath:[l],getColor:[o],getWidth:[s],getDashArray:[c,s]}}),...he?[he]:[],ge,..._e?[_e]:[],...Ce?[Ce]:[],...ve?[ve]:[],...Te?[Te]:[],...Ee?[Ee]:[],...De?[De]:[],...Oe?[Oe]:[],...ke?[ke]:[]],we()}),Pn(()=>{let e=q.appearance,t=n(),r=B(p);if(!s||!B(f)||(s.setPaintProperty(`vessel-gc-line`,`line-color`,e.gc.color),s.setPaintProperty(`vessel-gc-line`,`line-width`,e.gc.width),s.setPaintProperty(`vessel-gc-line`,`line-dasharray`,re(e.gc.style,e.gc.width)??void 0),s.setPaintProperty(`vessel-cog-line`,`line-color`,e.cog.color),s.setPaintProperty(`vessel-cog-line`,`line-width`,e.cog.width),s.setPaintProperty(`vessel-cog-line`,`line-dasharray`,re(e.cog.style,e.cog.width)??void 0),s.setPaintProperty(`vessel-hdg-line`,`line-color`,e.heading.color),s.setPaintProperty(`vessel-hdg-line`,`line-width`,e.heading.width),s.setPaintProperty(`vessel-hdg-line`,`line-dasharray`,re(e.heading.style,e.heading.width)??void 0),s.setLayoutProperty(`vessel-icon`,`icon-size`,e.vesselSize/64),!t.position))return;let{longitude:i,latitude:a}=t.position;function o(e,t){if(e.lengthUnit===`nm`)return e.lengthValue*1852;if(e.lengthUnit===`min`)return t===null?0:e.lengthValue*60*t;let n=Math.cos(a*Math.PI/180)*40075016.686/(512*2**r);return e.lengthValue*n}let c=t.heading??t.cog??null,l=c===null?0:c*180/Math.PI,u={type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`Point`,coordinates:[i,a]},properties:{bearing_deg:l}}]},d=t.cog===null?D:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:ae(i,a,t.cog,o(e.cog,t.sog))},properties:{}}]},m=t.cog===null?D:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:oe(i,a,t.cog,o(e.gc,t.sog))},properties:{}}]},g=t.heading===null?D:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:(B(h)===`globe`?oe:ae)(i,a,t.heading,o(e.heading,t.sog))},properties:{}}]},_=s;b=()=>{let e=_.getSource(T),t=_.getSource(E),n=_.getSource(te),r=_.getSource(ee);e instanceof iu.default.GeoJSONSource&&t instanceof iu.default.GeoJSONSource&&n instanceof iu.default.GeoJSONSource&&r instanceof iu.default.GeoJSONSource&&(e.setData(u),t.setData(d),n.setData(m),r.setData(g),window.__mapDiag&&window.__mapDiag.ownVessel++)},y===null&&(y=requestAnimationFrame(()=>{y=null,b?.(),b=null}))}),Pn(()=>{if(!s)return;let e=n(),t=e.position,r=yu.mode,i;if(r===`north`?i=0:r===`cog`&&e.cog!==null?i=e.cog*180/Math.PI:r===`heading`&&e.heading!==null&&(i=e.heading*180/Math.PI),t&&hu.following){let e=s.getCenter(),n=Math.hypot(e.lng-t.longitude,e.lat-t.latitude),r=i===void 0?{}:{bearing:i};n>1?s.flyTo({center:[t.longitude,t.latitude],speed:1.5,...r}):s.easeTo({center:[t.longitude,t.latitude],duration:1e3,...r})}else i!==void 0&&!v&&s.easeTo({bearing:i,duration:300})});var Me={flyToVessel:d,addRuler:le},j=xR(),Ne=bn(j);Pi(Ne,e=>o=e,()=>o);var Pe=L(Ne,2),Fe=I(Pe);let Ie;var Le=I(Fe,!0);M(Fe);var Re=L(Fe,2),ze=I(Re);{let e=Gt(()=>B(h)===`mercator`?eu:Zl);Yl(ze,{get icon(){return B(e)}})}M(Re);var Be=L(Re,2),Ve=I(Be);{let e=Gt(()=>B(c)?tu:Xl);Yl(Ve,{get icon(){return B(e)}})}M(Be),M(Pe);var He=L(Pe,2);let Ue;var We=I(He),qe=L(I(We)),Je=L(qe);M(We),M(He),Bn((e,t)=>{Ie=fi(Fe,1,`proj-btn svelte-c20cna`,null,Ie,{"proj-btn--manual":yu.mode===`manual`}),Ei(Fe,`title`,`Rotation mode: ${yu.label??``}`),Vr(Le,yu.label),Ei(Re,`title`,`Switch to ${B(h)===`mercator`?`Globe`:`Mercator`}`),Ei(Be,`title`,B(c)?`Exit fullscreen`:`Enter fullscreen`),Ue=fi(He,1,`north-indicator svelte-c20cna`,null,Ue,e),Ei(He,`title`,`Tap to reset to North-Up (bearing ${t??``}°)`),Ei(qe,`transform`,`rotate(${-B(m)}, 22, 22)`),Ei(Je,`transform`,`rotate(${-B(m)}, 22, 22)`)},[()=>({"north-indicator--visible":Math.abs(B(m))>.5}),()=>B(m).toFixed(1)]),V(`click`,Fe,()=>yu.toggle(n().heading!==null,!1)),V(`click`,Re,()=>{w(B(h)===`mercator`?`globe`:`mercator`)}),V(`click`,Be,u),V(`click`,He,()=>s?.easeTo({bearing:0,duration:300})),U(e,j);var Ye=Ke(Me);return i(),Ye}jr([`click`]);var CR=H(`<p class="geo-error-note svelte-1u3w06f"> </p>`),wR=H(`<p class="section-title svelte-1u3w06f">Signal K server</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Protocol</label> <div class="field svelte-1u3w06f"><select class="svelte-1u3w06f"><option>ws://</option><option>wss://</option></select></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Host</label> <div class="field svelte-1u3w06f"><input type="text" placeholder="192.168.1.1" style="flex:1; font-family: monospace;" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Port</label> <div class="field svelte-1u3w06f"><input type="number" min="1" max="65535" class="svelte-1u3w06f"/></div></div> <p class="hint svelte-1u3w06f"> </p> <p class="section-title svelte-1u3w06f">Position source</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Browser GPS</label> <div class="field svelte-1u3w06f"><label class="toggle svelte-1u3w06f"><input type="checkbox" class="svelte-1u3w06f"/> <span class="toggle-track svelte-1u3w06f"><span class="toggle-thumb svelte-1u3w06f"></span></span></label> <span class="toggle-label svelte-1u3w06f">Use device GPS instead of Signal K position</span></div></div> <!>`,1),TR=H(`<p class="section-title svelte-1u3w06f">Rhumb Line predictor</p>`),ER=H(`<p class="section-title svelte-1u3w06f">Great Circle predictor</p>`),DR=H(`<p class="section-title svelte-1u3w06f">AIS targets</p>`),OR=H(`<div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Color</label> <div class="field svelte-1u3w06f"><input type="color" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Width</label> <div class="field svelte-1u3w06f"><input type="number" min="1" max="8" step="0.5" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">px</span></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Style</label> <div class="field svelte-1u3w06f"><select class="svelte-1u3w06f"><option>Solid</option><option>Dashed</option><option>Dotted</option><option>Dash-dot</option></select></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Length</label> <div class="field svelte-1u3w06f"><input type="number" min="0" step="0.1" style="width:72px" class="svelte-1u3w06f"/> <select class="svelte-1u3w06f"><option>nm</option><option>min at SOG</option><option>px</option></select></div></div> <!>`,1),kR=H(`<p class="section-title svelte-1u3w06f">Vessel</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Color</label> <div class="field svelte-1u3w06f"><input type="color" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Size</label> <div class="field svelte-1u3w06f"><input type="number" min="8" max="64" step="2" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">px</span></div></div> <p class="section-title svelte-1u3w06f">Heading line</p> <!> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Color</label> <div class="field svelte-1u3w06f"><input type="color" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Size</label> <div class="field svelte-1u3w06f"><input type="number" min="8" max="48" step="2" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">px</span></div></div> <p class="section-title svelte-1u3w06f">AIS COG line</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Color</label> <div class="field svelte-1u3w06f"><input type="color" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Width</label> <div class="field svelte-1u3w06f"><input type="number" min="1" max="8" step="0.5" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">px</span></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Style</label> <div class="field svelte-1u3w06f"><select class="svelte-1u3w06f"><option>Solid</option><option>Dashed</option><option>Dotted</option><option>Dash-dot</option></select></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Length</label> <div class="field svelte-1u3w06f"><input type="number" min="1" max="60" step="1" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">min</span></div></div> <p class="section-title svelte-1u3w06f">Ruler</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Color</label> <div class="field svelte-1u3w06f"><input type="color" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Width</label> <div class="field svelte-1u3w06f"><input type="number" min="1" max="8" step="0.5" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">px</span></div></div> <p class="section-title svelte-1u3w06f">Performance</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Frame rate</label> <div class="fps-field svelte-1u3w06f"><input type="range" class="fps-slider svelte-1u3w06f" min="0" max="1000"/> <span class="fps-target svelte-1u3w06f"> </span> <span class="fps-actual svelte-1u3w06f"> </span></div></div>`,1),AR=H(`<button class="btn btn-cancel svelte-1u3w06f">Cancel</button> <button class="btn btn-save svelte-1u3w06f">Save & reconnect</button>`,1),jR=H(`<button class="btn btn-cancel svelte-1u3w06f">Cancel</button> <button class="btn btn-save svelte-1u3w06f">Close</button>`,1),MR=H(`<div class="backdrop svelte-1u3w06f"></div> <div class="modal svelte-1u3w06f"><h2 class="svelte-1u3w06f">Settings</h2> <div class="tabs svelte-1u3w06f"><button>Connection</button> <button>Appearance</button></div> <!> <!> <div class="actions svelte-1u3w06f"><!></div></div>`,1),NR=H(`<button title="Settings" class="gear-btn svelte-1u3w06f"><!></button> <!>`,1);function PR(e,t){Ge(t,!0);let n=P(!1),r=P(`connection`),i=P(ln({protocol:q.protocol,host:q.host,port:q.port})),a=``;function o(e){return Math.round((Math.log10(e)+1)/(Math.log10(60)+1)*1e3)}function s(e){let t=10**(-1+e/1e3*(Math.log10(60)+1));return t>=10?Math.round(t):Math.round(t*10)/10}function c(e){return e>=10?`${Math.round(e)} fps`:e>=1?`${e.toFixed(1)} fps`:`every ${Math.round(1/e)}s`}function l(e){return e<=0?``:e>=10?`${Math.round(e)} fps`:`${e.toFixed(1)} fps`}function u(){F(i,{protocol:q.protocol,host:q.host,port:q.port},!0),a=JSON.stringify({appearance:q.appearance,targetFps:q.targetFps}),F(r,`connection`),F(n,!0)}function d(){q.apply({signalkProtocol:B(i).protocol,signalkHost:B(i).host,signalkPort:B(i).port,useGeoLocation:q.useGeoLocation,appearance:q.appearance,targetFps:q.targetFps}),F(n,!1)}function f(){let e=JSON.parse(a);q.apply({signalkProtocol:q.protocol,signalkHost:q.host,signalkPort:q.port,useGeoLocation:q.useGeoLocation,appearance:e.appearance,targetFps:e.targetFps}),F(n,!1)}function p(){F(n,!1)}function m(){q.apply({signalkProtocol:q.protocol,signalkHost:q.host,signalkPort:q.port,useGeoLocation:q.useGeoLocation,appearance:q.appearance,targetFps:q.targetFps})}var h=NR(),g=bn(h);Yl(I(g),{get icon(){return Ql}}),M(g);var _=L(g,2),v=e=>{var t=MR(),n=bn(t),a=L(n,2),u=L(I(a),2),h=I(u);let g;var _=L(h,2);let v;M(u);var y=L(u,2),b=e=>{var t=wR(),n=L(bn(t),2),r=L(I(n),2),a=I(r),o=I(a);o.value=o.__value=`ws`;var s=L(o);s.value=s.__value=`wss`,M(a),M(r),M(n);var c=L(n,2),l=L(I(c),2),u=I(l);Ci(u),M(l),M(c);var d=L(c,2),f=L(I(d),2),p=I(f);Ci(p),M(f),M(d);var m=L(d,2),h=I(m);M(m);var g=L(m,4),_=L(I(g),2),v=I(_),y=I(v);Ci(y),Fe(2),M(v),Fe(2),M(_),M(g);var b=L(g,2),x=e=>{var t=CR(),n=I(t);M(t),Bn(()=>Vr(n,`⚠ ${q.geoError??``}`)),U(e,t)};Xr(b,e=>{q.geoError&&!q.useGeoLocation&&e(x)}),Bn(()=>{Vr(h,`→ ${B(i).protocol??``}://${B(i).host??``}:${B(i).port??``}/signalk/v1/stream?subscribe=self`),Ti(y,q.useGeoLocation)}),_i(a,()=>B(i).protocol,e=>B(i).protocol=e),Ai(u,()=>B(i).host,e=>B(i).host=e),Ai(p,()=>B(i).port,e=>B(i).port=e),V(`change`,y,e=>{let t=e.target.checked;t&&`geolocation`in navigator&&navigator.geolocation.getCurrentPosition(()=>{},()=>{}),q.apply({useGeoLocation:t})}),U(e,t)};Xr(y,e=>{B(r)===`connection`&&e(b)});var x=L(y,2),S=e=>{var t=kR(),n=L(bn(t),2),r=L(I(n),2),i=I(r);Ci(i),M(r),M(n);var a=L(n,2),u=L(I(a),2),d=I(u);Ci(d),Fe(2),M(u),M(a);var f=L(a,4);ei(f,16,()=>[{key:`heading`},{key:`cog`},{key:`gc`}],({key:e})=>e,(e,t)=>{let n=()=>t.key,r=Gt(()=>n()===`heading`?q.appearance.heading:n()===`cog`?q.appearance.cog:q.appearance.gc);var i=OR(),a=bn(i),o=L(I(a),2),s=I(o);Ci(s),M(o),M(a);var c=L(a,2),l=L(I(c),2),u=I(l);Ci(u),Fe(2),M(l),M(c);var d=L(c,2),f=L(I(d),2),p=I(f),h=I(p);h.value=h.__value=`solid`;var g=L(h);g.value=g.__value=`dashed`;var _=L(g);_.value=_.__value=`dotted`;var v=L(_);v.value=v.__value=`dash-dot`,M(p),M(f),M(d);var y=L(d,2),b=L(I(y),2),x=I(b);Ci(x);var S=L(x,2),C=I(S);C.value=C.__value=`nm`;var w=L(C);w.value=w.__value=`min`;var T=L(w);T.value=T.__value=`px`,M(S),M(b),M(y);var E=L(y,2),ee=e=>{U(e,TR())},te=e=>{U(e,ER())},ne=e=>{U(e,DR())};Xr(E,e=>{n()===`heading`?e(ee):n()===`cog`?e(te,1):n()===`gc`&&e(ne,2)}),V(`input`,s,m),Ai(s,()=>B(r).color,e=>B(r).color=e),V(`input`,u,m),Ai(u,()=>B(r).width,e=>B(r).width=e),V(`change`,p,m),_i(p,()=>B(r).style,e=>B(r).style=e),V(`input`,x,m),Ai(x,()=>B(r).lengthValue,e=>B(r).lengthValue=e),V(`change`,S,m),_i(S,()=>B(r).lengthUnit,e=>B(r).lengthUnit=e),U(e,i)});var p=L(f,2),h=L(I(p),2),g=I(h);Ci(g),M(h),M(p);var _=L(p,2),v=L(I(_),2),y=I(v);Ci(y),Fe(2),M(v),M(_);var b=L(_,4),x=L(I(b),2),S=I(x);Ci(S),M(x),M(b);var C=L(b,2),w=L(I(C),2),T=I(w);Ci(T),Fe(2),M(w),M(C);var E=L(C,2),ee=L(I(E),2),te=I(ee),ne=I(te);ne.value=ne.__value=`solid`;var D=L(ne);D.value=D.__value=`dashed`;var O=L(D);O.value=O.__value=`dotted`;var k=L(O);k.value=k.__value=`dash-dot`,M(te),M(ee),M(E);var re=L(E,2),ie=L(I(re),2),ae=I(ie);Ci(ae),Fe(2),M(ie),M(re);var oe=L(re,4),se=L(I(oe),2),ce=I(se);Ci(ce),M(se),M(oe);var le=L(oe,2),ue=L(I(le),2),de=I(ue);Ci(de),Fe(2),M(ue),M(le);var fe=L(le,4),pe=L(I(fe),2),me=I(pe);Ci(me);var he=L(me,2),ge=I(he,!0);M(he);var _e=L(he,2),ve=I(_e,!0);M(_e),M(pe),M(fe),Bn((e,t,n)=>{wi(me,e),Vr(ge,t),Vr(ve,n)},[()=>o(q.targetFps),()=>c(q.targetFps),()=>l(pu.value)]),V(`input`,i,m),Ai(i,()=>q.appearance.vesselColor,e=>q.appearance.vesselColor=e),V(`input`,d,m),Ai(d,()=>q.appearance.vesselSize,e=>q.appearance.vesselSize=e),V(`input`,g,m),Ai(g,()=>q.appearance.ais.vesselColor,e=>q.appearance.ais.vesselColor=e),V(`input`,y,m),Ai(y,()=>q.appearance.ais.vesselSize,e=>q.appearance.ais.vesselSize=e),V(`input`,S,m),Ai(S,()=>q.appearance.ais.cog.color,e=>q.appearance.ais.cog.color=e),V(`input`,T,m),Ai(T,()=>q.appearance.ais.cog.width,e=>q.appearance.ais.cog.width=e),V(`change`,te,m),_i(te,()=>q.appearance.ais.cog.style,e=>q.appearance.ais.cog.style=e),V(`input`,ae,m),Ai(ae,()=>q.appearance.ais.cog.lengthMinutes,e=>q.appearance.ais.cog.lengthMinutes=e),V(`input`,ce,m),Ai(ce,()=>q.appearance.ruler.color,e=>q.appearance.ruler.color=e),V(`input`,de,m),Ai(de,()=>q.appearance.ruler.width,e=>q.appearance.ruler.width=e),V(`input`,me,e=>q.setTargetFps(s(+e.target.value))),U(e,t)};Xr(x,e=>{B(r)===`appearance`&&e(S)});var C=L(x,2),w=I(C),T=e=>{var t=AR(),n=bn(t),r=L(n,2);V(`click`,n,f),V(`click`,r,d),U(e,t)},E=e=>{var t=jR(),n=bn(t),r=L(n,2);V(`click`,n,f),V(`click`,r,p),U(e,t)};Xr(w,e=>{B(r)===`connection`?e(T):e(E,-1)}),M(C),M(a),Bn(()=>{g=fi(h,1,`tab svelte-1u3w06f`,null,g,{active:B(r)===`connection`}),v=fi(_,1,`tab svelte-1u3w06f`,null,v,{active:B(r)===`appearance`})}),V(`click`,n,p),V(`click`,h,()=>F(r,`connection`)),V(`click`,_,()=>F(r,`appearance`)),U(e,t)};Xr(_,e=>{B(n)&&e(v)}),V(`click`,g,u),U(e,h),Ke()}jr([`click`,`change`,`input`]);var FR=H(`<li class="chart-row svelte-1mbfew2"><input type="checkbox" class="svelte-1mbfew2"/> <label class="chart-name svelte-1mbfew2"> </label></li>`),IR=H(`<li class="chart-row hint-row svelte-1mbfew2">Loading charts…</li>`),LR=H(`<li class="chart-row hint-row error svelte-1mbfew2"> </li>`),RR=H(`<span class="badge svelte-1mbfew2">WMS</span>`),zR=H(`<span class="badge svelte-1mbfew2">WMTS</span>`),BR=H(`<span class="chart-desc svelte-1mbfew2"> </span>`),VR=H(`<span class="wmts-warning svelte-1mbfew2">⚠ Cannot auto-discover tile URL (CORS). Enter template manually:</span> <div class="wmts-manual svelte-1mbfew2"><input type="text" class="wmts-input svelte-1mbfew2"/> <button class="wmts-apply svelte-1mbfew2">Apply</button></div>`,1),HR=H(`<span class="wmts-ok svelte-1mbfew2">✓ Custom URL active</span> <button class="wmts-clear svelte-1mbfew2">Clear</button>`,1),UR=H(`<option> </option>`),WR=H(`<label class="wmts-showall-label svelte-1mbfew2" title="Show all layers from capabilities"><input type="checkbox" class="svelte-1mbfew2"/> All</label>`),GR=H(`<div class="wmts-layer-row svelte-1mbfew2"><label class="wmts-layer-label svelte-1mbfew2">Layer</label> <select class="wmts-layer-select svelte-1mbfew2"></select> <!></div>`),KR=H(`<span class="wmts-ok svelte-1mbfew2"> </span>`),qR=H(`<li class="chart-row svelte-1mbfew2"><input type="checkbox" class="svelte-1mbfew2"/> <div class="chart-info svelte-1mbfew2"><label class="chart-name svelte-1mbfew2"> <!> <!></label> <!> <span class="chart-meta svelte-1mbfew2"> </span> <!></div></li>`),JR=H(`<div class="backdrop svelte-1mbfew2"></div> <div class="panel svelte-1mbfew2"><div class="panel-header svelte-1mbfew2"><span class="panel-title svelte-1mbfew2">Layers</span> <button class="close-btn svelte-1mbfew2" title="Close">✕</button></div> <ul class="chart-list svelte-1mbfew2"><!> <!></ul></div>`,1),YR=H(`<button title="Charts"><!></button> <!>`,1);function XR(e,t){Ge(t,!0);let n=P(!1),r=ln({});function i(){F(n,!B(n))}function a(){F(n,!1)}function o(e){J.setOverride(e,r[e]??``)}var s=YR(),c=bn(s);let l;Yl(I(c),{get icon(){return ru}}),M(c);var u=L(c,2),d=e=>{var t=JR(),n=bn(t),i=L(n,2),s=I(i),c=L(I(s),2);M(s);var l=L(s,2),u=I(l);ei(u,17,()=>Gu,e=>e.id,(e,t)=>{var n=FR(),r=I(n);Ci(r);var i=L(r,2),a=I(i,!0);M(i),M(n),Bn(e=>{Ei(r,`id`,`base-${B(t).id??``}`),Ti(r,e),Ei(i,`for`,`base-${B(t).id??``}`),Vr(a,B(t).name)},[()=>Yu.enabled.has(B(t).id)]),V(`change`,r,()=>{Yu.toggle(B(t).id)}),U(e,n)});var d=L(u,2),f=e=>{U(e,IR())},p=e=>{var t=LR(),n=I(t);M(t),Bn(()=>Vr(n,`⚠ ${J.error??``}`)),U(e,t)},m=e=>{var t=Rr();ei(bn(t),17,()=>Object.entries(J.available),([e,t])=>e,(e,t)=>{var n=Gt(()=>S(B(t),2));let i=()=>B(n)[0],a=()=>B(n)[1];var s=qR(),c=I(s);Ci(c);var l=L(c,2),u=I(l),d=I(u),f=L(d),p=e=>{U(e,RR())};Xr(f,e=>{a().type===`WMS`&&e(p)});var m=L(f,2),h=e=>{U(e,zR())};Xr(m,e=>{a().type===`WMTS`&&e(h)}),M(u);var g=L(u,2),_=e=>{var t=BR(),n=I(t,!0);M(t),Bn(()=>Vr(n,a().description)),U(e,t)};Xr(g,e=>{a().description&&e(_)});var v=L(g,2),y=I(v);M(v);var b=L(v,2),x=e=>{var t=VR(),n=L(bn(t),2),a=I(n);Ci(a),Ei(a,`placeholder`,`https://…/{z}/{x}/{y}.png`);var s=L(a,2);M(n),Bn(e=>wi(a,e),[()=>r[i()]??J.getOverride(i())]),V(`input`,a,e=>{r[i()]=e.target.value}),V(`keydown`,a,e=>{e.key===`Enter`&&o(i())}),V(`click`,s,()=>o(i())),U(e,t)},C=Gt(()=>J.needsManualUrl(i())),w=e=>{var t=HR();V(`click`,L(bn(t),2),()=>{J.setOverride(i(),``),r[i()]=``}),U(e,t)},T=Gt(()=>a().type===`WMTS`&&J.getOverride(i())),E=e=>{var t=Rr(),n=bn(t),r=e=>{var t=GR(),n=I(t),r=L(n,2);ei(r,21,()=>J.visibleLayers(i()),e=>e.id,(e,t)=>{var n=UR(),r=I(n,!0);M(n);var i={};Bn(()=>{Vr(r,B(t).title),i!==(i=B(t).id)&&(n.value=(n.__value=B(t).id)??``)}),U(e,n)}),M(r);var a;gi(r);var o=L(r,2),s=e=>{var t=WR(),n=I(t);Ci(n),Fe(),M(t),Bn(e=>Ti(n,e),[()=>J.isShowingAll(i())]),V(`change`,n,()=>J.toggleShowAll(i())),U(e,t)},c=Gt(()=>J.hasFilter(i()));Xr(o,e=>{B(c)&&e(s)}),M(t),Bn(e=>{Ei(n,`for`,`wmts-layer-${i()??``}`),Ei(r,`id`,`wmts-layer-${i()??``}`),a!==(a=e)&&(r.value=(r.__value=e)??``,hi(r,e))},[()=>J.getLayerSel(i())]),V(`change`,r,e=>{J.selectLayer(i(),e.target.value)}),U(e,t)},a=Gt(()=>J.visibleLayers(i()).length>1),o=e=>{var t=KR(),n=I(t);M(t),Bn(e=>Vr(n,`Layer: ${e??``}`),[()=>J.visibleLayers(i())[0]?.title]),U(e,t)},s=Gt(()=>J.visibleLayers(i()).length===1);Xr(n,e=>{B(a)?e(r):B(s)&&e(o,1)}),U(e,t)};Xr(b,e=>{B(C)?e(x):B(T)?e(w,1):a().type===`WMTS`&&e(E,2)}),M(l),M(s),Bn((e,t,n,r)=>{Ei(c,`id`,`cp-chart-${i()??``}`),Ti(c,e),c.disabled=t,Ei(u,`for`,`cp-chart-${i()??``}`),Vr(d,`${a().name??``} `),Vr(y,`${n??``}${r??``}`)},[()=>J.selected.has(i()),()=>J.needsManualUrl(i()),()=>a().format.toUpperCase(),()=>a().scale?` · 1:${a().scale.toLocaleString()}`:``]),V(`change`,c,()=>{J.toggle(i())}),U(e,s)}),U(e,t)};Xr(d,e=>{J.loading?e(f):J.error?e(p,1):e(m,-1)}),M(l),M(i),V(`click`,n,a),V(`keydown`,n,a),V(`click`,c,a),U(e,t)};Xr(u,e=>{B(n)&&e(d)}),Bn(()=>l=fi(c,1,`charts-btn svelte-1mbfew2`,null,l,{active:B(n)})),V(`click`,c,i),U(e,s),Ke()}jr([`click`,`keydown`,`change`,`input`]);var ZR=H(`<span style="color: #f87171"> </span>`),QR=H(`<div style="position: relative; width: 100%; height: 100%;"><!> <!> <!> <div style="
|
|
3828
|
+
</div>`,i=new iu.default.Popup({closeButton:!0,maxWidth:`220px`}).setLngLat(e).setHTML(r).addTo(s);i.getElement().addEventListener(`click`,t=>{let n=t.target.closest(`[data-idx]`);if(!n)return;let r=Number(n.dataset.idx),a=Zu.getTarget(r);a?.position&&(i.remove(),Me(e,a))})}Pn(()=>{if(!s||!B(f))return;let e=s,t=J.selected,n=J.available,r=Object.values(n).find(e=>t.has(e.identifier)&&!!e.style),i=r?J.styleUrl(r):null;if(i!==ie){F(f,!1),re.clear(),ie=i,i?kL(i).then(t=>e.setStyle(t,{diff:!1})).catch(e=>{console.error(`[map] Failed to load style`,i,e),ie=null,F(f,!0)}):e.setStyle(a,{diff:!1});return}for(let r of Object.keys(n)){if(t.has(r)&&!n[r].style)continue;let i=`chart-layer-${r}`,a=`chart-${r}`;e.getLayer(i)&&e.removeLayer(i),e.getSource(a)&&e.removeSource(a),re.delete(r)}for(let[r,i]of Object.entries(n)){if(!t.has(r)||i.style)continue;let n=J.tileUrl(i);if(!n)continue;let a=`chart-${r}`,o=`chart-layer-${r}`;if(re.get(r)!==n&&(e.getLayer(o)&&e.removeLayer(o),e.getSource(a)&&e.removeSource(a),re.set(r,n)),!e.getSource(a)){let t=n.includes(`{-y}`),r=t?n.replace(`{-y}`,`{y}`):n;i.format===`pbf`?e.addSource(a,{type:`vector`,tiles:[r]}):e.addSource(a,{type:`raster`,tiles:[r],tileSize:256,scheme:t?`tms`:`xyz`,minzoom:i.minzoom??0,maxzoom:i.maxzoom??22})}if(!e.getLayer(o))if(i.format===`pbf`){let t=i.layers?.[0]??r;e.addLayer({id:o,type:`fill`,source:a,"source-layer":t},`vessel-gc-line`)}else e.addLayer({id:o,type:`raster`,source:a},`vessel-gc-line`)}}),Pn(()=>{if(!s||!B(f))return;let e=Yu.enabled;for(let t of Gu)s.getLayer(t.id)&&s.setLayoutProperty(t.id,`visibility`,e.has(t.id)?`visible`:`none`)}),Pn(()=>{if(!s||!B(f))return;let e=MR(64,q.appearance.vesselColor);s.updateImage(`vessel-icon`,{width:64,height:64,data:e.data})}),Pn(()=>{!s||!B(f)||s.setPaintProperty(`ais-label`,`text-color`,q.appearance.ais.vesselColor)}),Pn(()=>{if(!s||!B(f))return;let e=s.getSource(ne);if(!(e instanceof iu.default.GeoJSONSource))return;let t=Zu.hotData,n=Zu.ids,r=Zu.coldMap;Zu.coldVersion;let i=[];if(t&&n.length>0)for(let e=0;e<n.length;e++)i.push({type:`Feature`,geometry:{type:`Point`,coordinates:[t[e*7+0],t[e*7+1]]},properties:{label:r.get(n[e])?.name??``}});let a=()=>{x=Date.now(),e.setData({type:`FeatureCollection`,features:i}),window.__mapDiag&&window.__mapDiag.aisLabels++};C=a;let o=1e3-(Date.now()-x);o<=0?(S!==null&&(clearTimeout(S),S=null),a(),C=null):S===null&&(S=setTimeout(()=>{S=null,C?.(),C=null},o))}),Pn(()=>{let e=Zu.hotData,t=Zu.ids,n=Zu.coldMap;Zu.coldVersion;let r=q.appearance.ais,i=r.vesselSize/64,a=Date.now(),o=r.cog.color,s=r.cog.width,c=r.cog.style,l=r.cog.lengthMinutes;if(!e||t.length===0){we=[],Ee(),xe=null,Se=[],Ce=0;return}let u=t.length,d=[],f=[],p=[],m=[],h=[],g=[],_=[],v=[],y=[],b=[],x=[],S=[],C=[],w=[],T=[],E=[],ee=[],te=[],ne=[];for(let r=0;r<u;r++){let i=n.get(t[r]),a=i?.navState?.toLowerCase()??``;if(a.includes(`sart`)||a.includes(`transponder`)){S.push(r);continue}d.push(r);let o=e[r*7+3],s=e[r*7+2];!isNaN(s)&&!isNaN(o)&&o>.1&&(f.push(r),p.push(r));let c=e[r*7+4],l=!isNaN(c)&&(i?.lengthM??0)>0&&(i?.beamM??0)>0;l&&m.push(r),a.includes(`aground`)?(g.push(r),l&&w.push(r)):a.includes(`anchor`)?(h.push(r),l&&C.push(r)):a.includes(`moor`)?(_.push(r),l&&T.push(r)):a.includes(`fishing`)?(v.push(r),l&&E.push(r)):a.includes(`command`)?(y.push(r),l&&ee.push(r)):a.includes(`restrict`)?(b.push(r),l&&te.push(r)):a.includes(`draught`)&&(x.push(r),l&&ne.push(r))}xe=e,Se=t,Ce=a;let D=le(r.vesselColor,220),O=le(r.vesselColor,130),k=t=>[e[t*7+0],e[t*7+1],0],re=t=>{let n=e[t*7+3];return isNaN(n)?0:n},ie=t=>{let n=e[t*7+2];return isNaN(n)?0:n},ae=t=>{let n=e[t*7+4];if(!isNaN(n))return n;let r=e[t*7+2];return isNaN(r)?0:r},oe=t=>{let n=e[t*7+4];return isNaN(n)?0:n},se=t=>{let n=e[t*7+5];return isNaN(n)?0:n},ce=t=>e[t*7+6],de=(e,r)=>n.get(t[e])?.lengthM??r,fe=(e,r)=>n.get(t[e])?.beamM??r,pe=new Set(m),me=e=>pe.has(e)?de(e,0):0,he=f.length>0?new OR({id:`ais-ghost-icon`,data:f,getPosition:k,getSog:re,getCog:ie,getHeading:ae,getRot:se,getAgeAtUpload:ce,getLength:me,getColor:O,uploadTimestamp:a,selfAnimate:!0,settingsIconSize:i,pickable:!0}):null,ge=new OR({id:`ais-confirmed-icon`,data:d,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,pickable:!0}),_e=h.length>0?new OR({id:`ais-anchored-icon`,data:h,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:yR,pickable:!1}):null,ve=_.length>0?new OR({id:`ais-moored-icon`,data:_,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:xR,pickable:!1}):null,ye=g.length>0?new OR({id:`ais-aground-icon`,data:g,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:bR,pickable:!1}):null,be=v.length>0?new OR({id:`ais-fishing-icon`,data:v,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:SR,pickable:!1}):null,Te=y.length>0?new OR({id:`ais-nuc-icon`,data:y,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:CR,pickable:!1}):null,De=b.length>0?new OR({id:`ais-restricted-icon`,data:b,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:wR,pickable:!1}):null,Oe=x.length>0?new OR({id:`ais-draught-icon`,data:x,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:ae,getRot:()=>0,getAgeAtUpload:()=>0,getLength:me,getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:TR,pickable:!1}):null,ke=S.length>0?new OR({id:`ais-mob-icon`,data:S,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:()=>0,getRot:()=>0,getAgeAtUpload:()=>0,getLength:()=>0,getColor:()=>[255,40,40,220],uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,iconGeometry:ER,pickable:!0}):null,Ae=m.length>0?new VL({id:`ais-hull-ghost`,data:m,getPosition:k,getSog:re,getCog:ie,getHeading:oe,getRot:se,getAgeAtUpload:ce,getLength:e=>de(e,50),getBeam:e=>fe(e,10),getColor:D,uploadTimestamp:a,selfAnimate:!0,settingsIconSize:i,opacity:.75,pickable:!0}):null,je=m.length>0?new VL({id:`ais-hull-confirmed`,data:m,getPosition:k,getSog:()=>0,getCog:()=>0,getHeading:oe,getRot:()=>0,getAgeAtUpload:()=>0,getLength:e=>de(e,50),getBeam:e=>fe(e,10),getColor:D,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,opacity:1,pickable:!0}):null,A=(e,t,n,r)=>t.length>0?new aR({id:e,data:t,getPosition:k,getSog:r?re:()=>0,getCog:r?ie:()=>0,getHeading:oe,getRot:r?se:()=>0,getAgeAtUpload:r?ce:()=>0,getLength:e=>de(e,50),getBeam:e=>fe(e,10),uploadTimestamp:a,selfAnimate:r,settingsIconSize:i,decoration:n}):null,Me=A(`ais-anchored-hull`,C,ZL,!1),j=A(`ais-moored-hull`,T,QL,!1),Ne=A(`ais-aground-hull`,w,$L,!1),Pe=A(`ais-fishing-hull`,E,eR,!1),M=A(`ais-nuc-hull`,ee,tR,!1),Fe=A(`ais-restricted-hull`,te,nR,!1),Ie=A(`ais-draught-hull`,ne,rR,!1),Le=A(`ais-anchored-hull-ghost`,C,ZL,!0),Re=A(`ais-moored-hull-ghost`,T,QL,!0),ze=A(`ais-aground-hull-ghost`,w,$L,!0),Be=A(`ais-fishing-hull-ghost`,E,eR,!0),Ve=A(`ais-nuc-hull-ghost`,ee,tR,!0),He=A(`ais-restricted-hull-ghost`,te,nR,!0),Ue=A(`ais-draught-hull-ghost`,ne,rR,!0);we=[...je?[je]:[],...Me?[Me]:[],...j?[j]:[],...Ne?[Ne]:[],...Pe?[Pe]:[],...M?[M]:[],...Fe?[Fe]:[],...Ie?[Ie]:[],...Ae?[Ae]:[],...Le?[Le]:[],...Re?[Re]:[],...ze?[ze]:[],...Be?[Be]:[],...Ve?[Ve]:[],...He?[He]:[],...Ue?[Ue]:[],new rI({id:`ais-cog`,data:p,getPath:t=>{let n=e[t*7+0],r=e[t*7+1],i=e[t*7+2],a=e[t*7+3],o=e[t*7+5],s=l*60,c=isNaN(o)?0:o;if(Math.abs(c)<1e-4){let[e,t]=kR(n,r,i,isNaN(a)?0:a,0,0,s*1e3);return[[n,r],[e,t]]}let u=2*Math.PI/Math.abs(c),d=Math.min(s,u);return Array.from({length:25},(e,t)=>{let[o,s]=kR(n,r,i,isNaN(a)?0:a,c,0,d*t/24*1e3);return[o,s]})},getColor:()=>le(o,200),getWidth:s,getDashArray:ue(c,s),widthUnits:`pixels`,widthMinPixels:1,pickable:!1,extensions:[new oL({dash:!0})],updateTriggers:{getPath:[l],getColor:[o],getWidth:[s],getDashArray:[c,s]}}),...he?[he]:[],ge,..._e?[_e]:[],...ye?[ye]:[],...ve?[ve]:[],...be?[be]:[],...Te?[Te]:[],...De?[De]:[],...Oe?[Oe]:[],...ke?[ke]:[]],Ee()}),Pn(()=>{let e=q.appearance,t=n(),r=B(p);if(!s||!B(f)||(s.setPaintProperty(`vessel-gc-line`,`line-color`,e.gc.color),s.setPaintProperty(`vessel-gc-line`,`line-width`,e.gc.width),s.setPaintProperty(`vessel-gc-line`,`line-dasharray`,ae(e.gc.style,e.gc.width)??void 0),s.setPaintProperty(`vessel-cog-line`,`line-color`,e.cog.color),s.setPaintProperty(`vessel-cog-line`,`line-width`,e.cog.width),s.setPaintProperty(`vessel-cog-line`,`line-dasharray`,ae(e.cog.style,e.cog.width)??void 0),s.setPaintProperty(`vessel-hdg-line`,`line-color`,e.heading.color),s.setPaintProperty(`vessel-hdg-line`,`line-width`,e.heading.width),s.setPaintProperty(`vessel-hdg-line`,`line-dasharray`,ae(e.heading.style,e.heading.width)??void 0),s.setLayoutProperty(`vessel-icon`,`icon-size`,e.vesselSize/64),!t.position))return;let{longitude:i,latitude:a}=t.position;function o(e,t){if(e.lengthUnit===`nm`)return e.lengthValue*1852;if(e.lengthUnit===`min`)return t===null?0:e.lengthValue*60*t;let n=Math.cos(a*Math.PI/180)*40075016.686/(512*2**r);return e.lengthValue*n}let c=t.heading??t.cog??null,l=c===null?0:c*180/Math.PI,u={type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`Point`,coordinates:[i,a]},properties:{bearing_deg:l}}]},d=t.cog===null?k:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:se(i,a,t.cog,o(e.cog,t.sog))},properties:{}}]},m=t.cog===null?k:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:ce(i,a,t.cog,o(e.gc,t.sog))},properties:{}}]},g=t.heading===null?k:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:(B(h)===`globe`?ce:se)(i,a,t.heading,o(e.heading,t.sog))},properties:{}}]},_=s;b=()=>{let e=_.getSource(T),t=_.getSource(E),n=_.getSource(te),r=_.getSource(ee);e instanceof iu.default.GeoJSONSource&&t instanceof iu.default.GeoJSONSource&&n instanceof iu.default.GeoJSONSource&&r instanceof iu.default.GeoJSONSource&&(e.setData(u),t.setData(d),n.setData(m),r.setData(g),window.__mapDiag&&window.__mapDiag.ownVessel++)},y===null&&(y=requestAnimationFrame(()=>{y=null,b?.(),b=null}))}),Pn(()=>{let e=EL.geometry,t=EL.nextPoint,r=EL.previousPoint,i=n().position,a=q.appearance.route;if(!s||!B(f))return;let o=s.getSource(D),c=s.getSource(O);if(!(o instanceof iu.default.GeoJSONSource)||!(c instanceof iu.default.GeoJSONSource))return;s.setPaintProperty(`route-full`,`line-color`,a.remaining.color),s.setPaintProperty(`route-full`,`line-width`,a.remaining.width),s.setPaintProperty(`route-full`,`line-dasharray`,ae(a.remaining.style,a.remaining.width)??void 0),s.setPaintProperty(`route-leg`,`line-color`,a.segment.color),s.setPaintProperty(`route-leg`,`line-width`,a.segment.width),s.setPaintProperty(`route-leg`,`line-dasharray`,ae(a.segment.style,a.segment.width)??void 0),s.setPaintProperty(`route-bearing`,`line-color`,a.bearing.color),s.setPaintProperty(`route-bearing`,`line-width`,a.bearing.width),s.setPaintProperty(`route-bearing`,`line-dasharray`,ae(a.bearing.style,a.bearing.width)??void 0);let l=[];e&&l.push({type:`Feature`,geometry:e.geometry,properties:{kind:`full`}}),t&&r&&l.push({type:`Feature`,geometry:{type:`LineString`,coordinates:[[r.longitude,r.latitude],[t.longitude,t.latitude]]},properties:{kind:`leg`}}),t&&i&&l.push({type:`Feature`,geometry:{type:`LineString`,coordinates:[[i.longitude,i.latitude],[t.longitude,t.latitude]]},properties:{kind:`bearing`}}),o.setData({type:`FeatureCollection`,features:l});let u=[];t&&u.push({type:`Feature`,geometry:{type:`Point`,coordinates:[t.longitude,t.latitude]},properties:{wtype:`next`}}),r&&u.push({type:`Feature`,geometry:{type:`Point`,coordinates:[r.longitude,r.latitude]},properties:{wtype:`prev`}}),c.setData({type:`FeatureCollection`,features:u})}),Pn(()=>{if(!s)return;let e=n(),t=e.position,r=yu.mode,i;if(r===`north`?i=0:r===`cog`&&e.cog!==null?i=e.cog*180/Math.PI:r===`heading`&&e.heading!==null&&(i=e.heading*180/Math.PI),t&&hu.following){let e=s.getCenter(),n=Math.hypot(e.lng-t.longitude,e.lat-t.latitude),r=i===void 0?{}:{bearing:i};n>1?s.flyTo({center:[t.longitude,t.latitude],speed:1.5,...r}):s.easeTo({center:[t.longitude,t.latitude],duration:1e3,...r})}else i!==void 0&&!v&&s.easeTo({bearing:i,duration:300})});var Ne={flyToVessel:d,addRuler:de},Pe=NR(),Fe=bn(Pe);Pi(Fe,e=>o=e,()=>o);var Ie=L(Fe,2),Le=I(Ie);let Re;var ze=I(Le,!0);M(Le);var Be=L(Le,2),Ve=I(Be);{let e=Gt(()=>B(h)===`mercator`?eu:Zl);Yl(Ve,{get icon(){return B(e)}})}M(Be);var He=L(Be,2),Ue=I(He);{let e=Gt(()=>B(c)?tu:Xl);Yl(Ue,{get icon(){return B(e)}})}M(He),M(Ie);var We=L(Ie,2);let qe;var Je=I(We),Ye=L(I(Je)),Xe=L(Ye);M(Je),M(We),Bn((e,t)=>{Re=fi(Le,1,`proj-btn svelte-c20cna`,null,Re,{"proj-btn--manual":yu.mode===`manual`}),Ei(Le,`title`,`Rotation mode: ${yu.label??``}`),Vr(ze,yu.label),Ei(Be,`title`,`Switch to ${B(h)===`mercator`?`Globe`:`Mercator`}`),Ei(He,`title`,B(c)?`Exit fullscreen`:`Enter fullscreen`),qe=fi(We,1,`north-indicator svelte-c20cna`,null,qe,e),Ei(We,`title`,`Tap to reset to North-Up (bearing ${t??``}°)`),Ei(Ye,`transform`,`rotate(${-B(m)}, 22, 22)`),Ei(Xe,`transform`,`rotate(${-B(m)}, 22, 22)`)},[()=>({"north-indicator--visible":Math.abs(B(m))>.5}),()=>B(m).toFixed(1)]),V(`click`,Le,()=>yu.toggle(n().heading!==null,!1)),V(`click`,Be,()=>{w(B(h)===`mercator`?`globe`:`mercator`)}),V(`click`,He,u),V(`click`,We,()=>s?.easeTo({bearing:0,duration:300})),U(e,Pe);var Ze=Ke(Ne);return i(),Ze}jr([`click`]);var FR=H(`<p class="geo-error-note svelte-1u3w06f"> </p>`),IR=H(`<p class="section-title svelte-1u3w06f">Signal K server</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Protocol</label> <div class="field svelte-1u3w06f"><select class="svelte-1u3w06f"><option>ws://</option><option>wss://</option></select></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Host</label> <div class="field svelte-1u3w06f"><input type="text" placeholder="192.168.1.1" style="flex:1; font-family: monospace;" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Port</label> <div class="field svelte-1u3w06f"><input type="number" min="1" max="65535" class="svelte-1u3w06f"/></div></div> <p class="hint svelte-1u3w06f"> </p> <p class="section-title svelte-1u3w06f">Position source</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Browser GPS</label> <div class="field svelte-1u3w06f"><label class="toggle svelte-1u3w06f"><input type="checkbox" class="svelte-1u3w06f"/> <span class="toggle-track svelte-1u3w06f"><span class="toggle-thumb svelte-1u3w06f"></span></span></label> <span class="toggle-label svelte-1u3w06f">Use device GPS instead of Signal K position</span></div></div> <!>`,1),LR=H(`<p class="section-title svelte-1u3w06f">Rhumb Line predictor</p>`),RR=H(`<p class="section-title svelte-1u3w06f">Great Circle predictor</p>`),zR=H(`<p class="section-title svelte-1u3w06f">AIS targets</p>`),BR=H(`<div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Color</label> <div class="field svelte-1u3w06f"><input type="color" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Width</label> <div class="field svelte-1u3w06f"><input type="number" min="1" max="8" step="0.5" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">px</span></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Style</label> <div class="field svelte-1u3w06f"><select class="svelte-1u3w06f"><option>Solid</option><option>Dashed</option><option>Dotted</option><option>Dash-dot</option></select></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Length</label> <div class="field svelte-1u3w06f"><input type="number" min="0" step="0.1" style="width:72px" class="svelte-1u3w06f"/> <select class="svelte-1u3w06f"><option>nm</option><option>min at SOG</option><option>px</option></select></div></div> <!>`,1),VR=H(`<p class="section-title svelte-1u3w06f">Route — active segment</p>`),HR=H(`<p class="section-title svelte-1u3w06f">Route — remaining route</p>`),UR=H(`<div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Color</label> <div class="field svelte-1u3w06f"><input type="color" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Width</label> <div class="field svelte-1u3w06f"><input type="number" min="1" max="8" step="0.5" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">px</span></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Style</label> <div class="field svelte-1u3w06f"><select class="svelte-1u3w06f"><option>Solid</option><option>Dashed</option><option>Dotted</option><option>Dash-dot</option></select></div></div> <!>`,1),WR=H(`<p class="section-title svelte-1u3w06f">Vessel</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Color</label> <div class="field svelte-1u3w06f"><input type="color" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Size</label> <div class="field svelte-1u3w06f"><input type="number" min="8" max="64" step="2" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">px</span></div></div> <p class="section-title svelte-1u3w06f">Heading line</p> <!> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Color</label> <div class="field svelte-1u3w06f"><input type="color" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Size</label> <div class="field svelte-1u3w06f"><input type="number" min="8" max="48" step="2" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">px</span></div></div> <p class="section-title svelte-1u3w06f">AIS COG line</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Color</label> <div class="field svelte-1u3w06f"><input type="color" class="svelte-1u3w06f"/></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Width</label> <div class="field svelte-1u3w06f"><input type="number" min="1" max="8" step="0.5" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">px</span></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Style</label> <div class="field svelte-1u3w06f"><select class="svelte-1u3w06f"><option>Solid</option><option>Dashed</option><option>Dotted</option><option>Dash-dot</option></select></div></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Length</label> <div class="field svelte-1u3w06f"><input type="number" min="1" max="60" step="1" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">min</span></div></div> <p class="section-title svelte-1u3w06f">Route — bearing to waypoint</p> <!> <p class="section-title svelte-1u3w06f">Ruler</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Color</label> <input type="color" class="svelte-1u3w06f"/></div> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Width</label> <div class="field svelte-1u3w06f"><input type="number" min="1" max="8" step="0.5" class="svelte-1u3w06f"/> <span class="unit svelte-1u3w06f">px</span></div></div> <p class="section-title svelte-1u3w06f">Performance</p> <div class="row svelte-1u3w06f"><label class="svelte-1u3w06f">Frame rate</label> <div class="fps-field svelte-1u3w06f"><input type="range" class="fps-slider svelte-1u3w06f" min="0" max="1000"/> <span class="fps-target svelte-1u3w06f"> </span> <span class="fps-actual svelte-1u3w06f"> </span></div></div>`,1),GR=H(`<button class="btn btn-cancel svelte-1u3w06f">Cancel</button> <button class="btn btn-save svelte-1u3w06f">Save & reconnect</button>`,1),KR=H(`<button class="btn btn-cancel svelte-1u3w06f">Cancel</button> <button class="btn btn-save svelte-1u3w06f">Close</button>`,1),qR=H(`<div class="backdrop svelte-1u3w06f"></div> <div class="modal svelte-1u3w06f"><h2 class="svelte-1u3w06f">Settings</h2> <div class="tabs svelte-1u3w06f"><button>Connection</button> <button>Appearance</button></div> <!> <!> <div class="actions svelte-1u3w06f"><!></div></div>`,1),JR=H(`<button title="Settings" class="gear-btn svelte-1u3w06f"><!></button> <!>`,1);function YR(e,t){Ge(t,!0);let n=P(!1),r=P(`connection`),i=P(ln({protocol:q.protocol,host:q.host,port:q.port})),a=``;function o(e){return Math.round((Math.log10(e)+1)/(Math.log10(60)+1)*1e3)}function s(e){let t=10**(-1+e/1e3*(Math.log10(60)+1));return t>=10?Math.round(t):Math.round(t*10)/10}function c(e){return e>=10?`${Math.round(e)} fps`:e>=1?`${e.toFixed(1)} fps`:`every ${Math.round(1/e)}s`}function l(e){return e<=0?``:e>=10?`${Math.round(e)} fps`:`${e.toFixed(1)} fps`}function u(){F(i,{protocol:q.protocol,host:q.host,port:q.port},!0),a=JSON.stringify({appearance:q.appearance,targetFps:q.targetFps}),F(r,`connection`),F(n,!0)}function d(){q.apply({signalkProtocol:B(i).protocol,signalkHost:B(i).host,signalkPort:B(i).port,useGeoLocation:q.useGeoLocation,appearance:q.appearance,targetFps:q.targetFps}),F(n,!1)}function f(){let e=JSON.parse(a);q.apply({signalkProtocol:q.protocol,signalkHost:q.host,signalkPort:q.port,useGeoLocation:q.useGeoLocation,appearance:e.appearance,targetFps:e.targetFps}),F(n,!1)}function p(){F(n,!1)}function m(){q.apply({signalkProtocol:q.protocol,signalkHost:q.host,signalkPort:q.port,useGeoLocation:q.useGeoLocation,appearance:q.appearance,targetFps:q.targetFps})}var h=JR(),g=bn(h);Yl(I(g),{get icon(){return Ql}}),M(g);var _=L(g,2),v=e=>{var t=qR(),n=bn(t),a=L(n,2),u=L(I(a),2),h=I(u);let g;var _=L(h,2);let v;M(u);var y=L(u,2),b=e=>{var t=IR(),n=L(bn(t),2),r=L(I(n),2),a=I(r),o=I(a);o.value=o.__value=`ws`;var s=L(o);s.value=s.__value=`wss`,M(a),M(r),M(n);var c=L(n,2),l=L(I(c),2),u=I(l);Ci(u),M(l),M(c);var d=L(c,2),f=L(I(d),2),p=I(f);Ci(p),M(f),M(d);var m=L(d,2),h=I(m);M(m);var g=L(m,4),_=L(I(g),2),v=I(_),y=I(v);Ci(y),Fe(2),M(v),Fe(2),M(_),M(g);var b=L(g,2),x=e=>{var t=FR(),n=I(t);M(t),Bn(()=>Vr(n,`⚠ ${q.geoError??``}`)),U(e,t)};Xr(b,e=>{q.geoError&&!q.useGeoLocation&&e(x)}),Bn(()=>{Vr(h,`→ ${B(i).protocol??``}://${B(i).host??``}:${B(i).port??``}/signalk/v1/stream?subscribe=self`),Ti(y,q.useGeoLocation)}),_i(a,()=>B(i).protocol,e=>B(i).protocol=e),Ai(u,()=>B(i).host,e=>B(i).host=e),Ai(p,()=>B(i).port,e=>B(i).port=e),V(`change`,y,e=>{let t=e.target.checked;t&&`geolocation`in navigator&&navigator.geolocation.getCurrentPosition(()=>{},()=>{}),t&&typeof window.DeviceOrientationEvent.requestPermission==`function`&&window.DeviceOrientationEvent.requestPermission().then(e=>{e!==`granted`&&q.setGeoError(`Compass access denied — heading unavailable`)}).catch(()=>{}),q.apply({useGeoLocation:t})}),U(e,t)};Xr(y,e=>{B(r)===`connection`&&e(b)});var x=L(y,2),S=e=>{var t=WR(),n=L(bn(t),2),r=L(I(n),2),i=I(r);Ci(i),M(r),M(n);var a=L(n,2),u=L(I(a),2),d=I(u);Ci(d),Fe(2),M(u),M(a);var f=L(a,4);ei(f,16,()=>[{key:`heading`},{key:`cog`},{key:`gc`}],({key:e})=>e,(e,t)=>{let n=()=>t.key,r=Gt(()=>n()===`heading`?q.appearance.heading:n()===`cog`?q.appearance.cog:q.appearance.gc);var i=BR(),a=bn(i),o=L(I(a),2),s=I(o);Ci(s),M(o),M(a);var c=L(a,2),l=L(I(c),2),u=I(l);Ci(u),Fe(2),M(l),M(c);var d=L(c,2),f=L(I(d),2),p=I(f),h=I(p);h.value=h.__value=`solid`;var g=L(h);g.value=g.__value=`dashed`;var _=L(g);_.value=_.__value=`dotted`;var v=L(_);v.value=v.__value=`dash-dot`,M(p),M(f),M(d);var y=L(d,2),b=L(I(y),2),x=I(b);Ci(x);var S=L(x,2),C=I(S);C.value=C.__value=`nm`;var w=L(C);w.value=w.__value=`min`;var T=L(w);T.value=T.__value=`px`,M(S),M(b),M(y);var E=L(y,2),ee=e=>{U(e,LR())},te=e=>{U(e,RR())},ne=e=>{U(e,zR())};Xr(E,e=>{n()===`heading`?e(ee):n()===`cog`?e(te,1):n()===`gc`&&e(ne,2)}),V(`input`,s,m),Ai(s,()=>B(r).color,e=>B(r).color=e),V(`input`,u,m),Ai(u,()=>B(r).width,e=>B(r).width=e),V(`change`,p,m),_i(p,()=>B(r).style,e=>B(r).style=e),V(`input`,x,m),Ai(x,()=>B(r).lengthValue,e=>B(r).lengthValue=e),V(`change`,S,m),_i(S,()=>B(r).lengthUnit,e=>B(r).lengthUnit=e),U(e,i)});var p=L(f,2),h=L(I(p),2),g=I(h);Ci(g),M(h),M(p);var _=L(p,2),v=L(I(_),2),y=I(v);Ci(y),Fe(2),M(v),M(_);var b=L(_,4),x=L(I(b),2),S=I(x);Ci(S),M(x),M(b);var C=L(b,2),w=L(I(C),2),T=I(w);Ci(T),Fe(2),M(w),M(C);var E=L(C,2),ee=L(I(E),2),te=I(ee),ne=I(te);ne.value=ne.__value=`solid`;var D=L(ne);D.value=D.__value=`dashed`;var O=L(D);O.value=O.__value=`dotted`;var k=L(O);k.value=k.__value=`dash-dot`,M(te),M(ee),M(E);var re=L(E,2),ie=L(I(re),2),ae=I(ie);Ci(ae),Fe(2),M(ie),M(re);var oe=L(re,4);ei(oe,16,()=>[{key:`bearing`,label:`Route — bearing to waypoint`},{key:`segment`,label:`Route — active segment`},{key:`remaining`,label:`Route — remaining route`}],({key:e,label:t})=>e,(e,t)=>{let n=()=>t.key,r=Gt(()=>n()===`bearing`?q.appearance.route.bearing:n()===`segment`?q.appearance.route.segment:q.appearance.route.remaining);var i=UR(),a=bn(i),o=L(I(a),2),s=I(o);Ci(s),M(o),M(a);var c=L(a,2),l=L(I(c),2),u=I(l);Ci(u),Fe(2),M(l),M(c);var d=L(c,2),f=L(I(d),2),p=I(f),h=I(p);h.value=h.__value=`solid`;var g=L(h);g.value=g.__value=`dashed`;var _=L(g);_.value=_.__value=`dotted`;var v=L(_);v.value=v.__value=`dash-dot`,M(p),M(f),M(d);var y=L(d,2),b=e=>{U(e,VR())},x=e=>{U(e,HR())};Xr(y,e=>{n()===`bearing`?e(b):n()===`segment`&&e(x,1)}),V(`input`,s,m),Ai(s,()=>B(r).color,e=>B(r).color=e),V(`input`,u,m),Ai(u,()=>B(r).width,e=>B(r).width=e),V(`change`,p,m),_i(p,()=>B(r).style,e=>B(r).style=e),U(e,i)});var se=L(oe,4),ce=L(I(se),2);Ci(ce),M(se);var le=L(se,2),ue=L(I(le),2),de=I(ue);Ci(de),Fe(2),M(ue),M(le);var fe=L(le,4),pe=L(I(fe),2),me=I(pe);Ci(me);var he=L(me,2),ge=I(he,!0);M(he);var _e=L(he,2),ve=I(_e,!0);M(_e),M(pe),M(fe),Bn((e,t,n)=>{wi(me,e),Vr(ge,t),Vr(ve,n)},[()=>o(q.targetFps),()=>c(q.targetFps),()=>l(pu.value)]),V(`input`,i,m),Ai(i,()=>q.appearance.vesselColor,e=>q.appearance.vesselColor=e),V(`input`,d,m),Ai(d,()=>q.appearance.vesselSize,e=>q.appearance.vesselSize=e),V(`input`,g,m),Ai(g,()=>q.appearance.ais.vesselColor,e=>q.appearance.ais.vesselColor=e),V(`input`,y,m),Ai(y,()=>q.appearance.ais.vesselSize,e=>q.appearance.ais.vesselSize=e),V(`input`,S,m),Ai(S,()=>q.appearance.ais.cog.color,e=>q.appearance.ais.cog.color=e),V(`input`,T,m),Ai(T,()=>q.appearance.ais.cog.width,e=>q.appearance.ais.cog.width=e),V(`change`,te,m),_i(te,()=>q.appearance.ais.cog.style,e=>q.appearance.ais.cog.style=e),V(`input`,ae,m),Ai(ae,()=>q.appearance.ais.cog.lengthMinutes,e=>q.appearance.ais.cog.lengthMinutes=e),V(`input`,ce,m),Ai(ce,()=>q.appearance.ruler.color,e=>q.appearance.ruler.color=e),V(`input`,de,m),Ai(de,()=>q.appearance.ruler.width,e=>q.appearance.ruler.width=e),V(`input`,me,e=>q.setTargetFps(s(+e.target.value))),U(e,t)};Xr(x,e=>{B(r)===`appearance`&&e(S)});var C=L(x,2),w=I(C),T=e=>{var t=GR(),n=bn(t),r=L(n,2);V(`click`,n,f),V(`click`,r,d),U(e,t)},E=e=>{var t=KR(),n=bn(t),r=L(n,2);V(`click`,n,f),V(`click`,r,p),U(e,t)};Xr(w,e=>{B(r)===`connection`?e(T):e(E,-1)}),M(C),M(a),Bn(()=>{g=fi(h,1,`tab svelte-1u3w06f`,null,g,{active:B(r)===`connection`}),v=fi(_,1,`tab svelte-1u3w06f`,null,v,{active:B(r)===`appearance`})}),V(`click`,n,p),V(`click`,h,()=>F(r,`connection`)),V(`click`,_,()=>F(r,`appearance`)),U(e,t)};Xr(_,e=>{B(n)&&e(v)}),V(`click`,g,u),U(e,h),Ke()}jr([`click`,`change`,`input`]);var XR=H(`<li class="chart-row svelte-1mbfew2"><input type="checkbox" class="svelte-1mbfew2"/> <label class="chart-name svelte-1mbfew2"> </label></li>`),ZR=H(`<li class="chart-row hint-row svelte-1mbfew2">Loading charts…</li>`),QR=H(`<li class="chart-row hint-row error svelte-1mbfew2"> </li>`),$R=H(`<span class="badge svelte-1mbfew2">WMS</span>`),ez=H(`<span class="badge svelte-1mbfew2">WMTS</span>`),tz=H(`<span class="chart-desc svelte-1mbfew2"> </span>`),nz=H(`<span class="wmts-warning svelte-1mbfew2">⚠ Cannot auto-discover tile URL (CORS). Enter template manually:</span> <div class="wmts-manual svelte-1mbfew2"><input type="text" class="wmts-input svelte-1mbfew2"/> <button class="wmts-apply svelte-1mbfew2">Apply</button></div>`,1),rz=H(`<span class="wmts-ok svelte-1mbfew2">✓ Custom URL active</span> <button class="wmts-clear svelte-1mbfew2">Clear</button>`,1),iz=H(`<option> </option>`),az=H(`<label class="wmts-showall-label svelte-1mbfew2" title="Show all layers from capabilities"><input type="checkbox" class="svelte-1mbfew2"/> All</label>`),oz=H(`<div class="wmts-layer-row svelte-1mbfew2"><label class="wmts-layer-label svelte-1mbfew2">Layer</label> <select class="wmts-layer-select svelte-1mbfew2"></select> <!></div>`),sz=H(`<span class="wmts-ok svelte-1mbfew2"> </span>`),cz=H(`<li class="chart-row svelte-1mbfew2"><input type="checkbox" class="svelte-1mbfew2"/> <div class="chart-info svelte-1mbfew2"><label class="chart-name svelte-1mbfew2"> <!> <!></label> <!> <span class="chart-meta svelte-1mbfew2"> </span> <!></div></li>`),lz=H(`<div class="backdrop svelte-1mbfew2"></div> <div class="panel svelte-1mbfew2"><div class="panel-header svelte-1mbfew2"><span class="panel-title svelte-1mbfew2">Layers</span> <button class="close-btn svelte-1mbfew2" title="Close">✕</button></div> <ul class="chart-list svelte-1mbfew2"><!> <!></ul></div>`,1),uz=H(`<button title="Charts"><!></button> <!>`,1);function dz(e,t){Ge(t,!0);let n=P(!1),r=ln({});function i(){F(n,!B(n))}function a(){F(n,!1)}function o(e){J.setOverride(e,r[e]??``)}var s=uz(),c=bn(s);let l;Yl(I(c),{get icon(){return ru}}),M(c);var u=L(c,2),d=e=>{var t=lz(),n=bn(t),i=L(n,2),s=I(i),c=L(I(s),2);M(s);var l=L(s,2),u=I(l);ei(u,17,()=>Gu,e=>e.id,(e,t)=>{var n=XR(),r=I(n);Ci(r);var i=L(r,2),a=I(i,!0);M(i),M(n),Bn(e=>{Ei(r,`id`,`base-${B(t).id??``}`),Ti(r,e),Ei(i,`for`,`base-${B(t).id??``}`),Vr(a,B(t).name)},[()=>Yu.enabled.has(B(t).id)]),V(`change`,r,()=>{Yu.toggle(B(t).id)}),U(e,n)});var d=L(u,2),f=e=>{U(e,ZR())},p=e=>{var t=QR(),n=I(t);M(t),Bn(()=>Vr(n,`⚠ ${J.error??``}`)),U(e,t)},m=e=>{var t=Rr();ei(bn(t),17,()=>Object.entries(J.available),([e,t])=>e,(e,t)=>{var n=Gt(()=>S(B(t),2));let i=()=>B(n)[0],a=()=>B(n)[1];var s=cz(),c=I(s);Ci(c);var l=L(c,2),u=I(l),d=I(u),f=L(d),p=e=>{U(e,$R())};Xr(f,e=>{a().type===`WMS`&&e(p)});var m=L(f,2),h=e=>{U(e,ez())};Xr(m,e=>{a().type===`WMTS`&&e(h)}),M(u);var g=L(u,2),_=e=>{var t=tz(),n=I(t,!0);M(t),Bn(()=>Vr(n,a().description)),U(e,t)};Xr(g,e=>{a().description&&e(_)});var v=L(g,2),y=I(v);M(v);var b=L(v,2),x=e=>{var t=nz(),n=L(bn(t),2),a=I(n);Ci(a),Ei(a,`placeholder`,`https://…/{z}/{x}/{y}.png`);var s=L(a,2);M(n),Bn(e=>wi(a,e),[()=>r[i()]??J.getOverride(i())]),V(`input`,a,e=>{r[i()]=e.target.value}),V(`keydown`,a,e=>{e.key===`Enter`&&o(i())}),V(`click`,s,()=>o(i())),U(e,t)},C=Gt(()=>J.needsManualUrl(i())),w=e=>{var t=rz();V(`click`,L(bn(t),2),()=>{J.setOverride(i(),``),r[i()]=``}),U(e,t)},T=Gt(()=>a().type===`WMTS`&&J.getOverride(i())),E=e=>{var t=Rr(),n=bn(t),r=e=>{var t=oz(),n=I(t),r=L(n,2);ei(r,21,()=>J.visibleLayers(i()),e=>e.id,(e,t)=>{var n=iz(),r=I(n,!0);M(n);var i={};Bn(()=>{Vr(r,B(t).title),i!==(i=B(t).id)&&(n.value=(n.__value=B(t).id)??``)}),U(e,n)}),M(r);var a;gi(r);var o=L(r,2),s=e=>{var t=az(),n=I(t);Ci(n),Fe(),M(t),Bn(e=>Ti(n,e),[()=>J.isShowingAll(i())]),V(`change`,n,()=>J.toggleShowAll(i())),U(e,t)},c=Gt(()=>J.hasFilter(i()));Xr(o,e=>{B(c)&&e(s)}),M(t),Bn(e=>{Ei(n,`for`,`wmts-layer-${i()??``}`),Ei(r,`id`,`wmts-layer-${i()??``}`),a!==(a=e)&&(r.value=(r.__value=e)??``,hi(r,e))},[()=>J.getLayerSel(i())]),V(`change`,r,e=>{J.selectLayer(i(),e.target.value)}),U(e,t)},a=Gt(()=>J.visibleLayers(i()).length>1),o=e=>{var t=sz(),n=I(t);M(t),Bn(e=>Vr(n,`Layer: ${e??``}`),[()=>J.visibleLayers(i())[0]?.title]),U(e,t)},s=Gt(()=>J.visibleLayers(i()).length===1);Xr(n,e=>{B(a)?e(r):B(s)&&e(o,1)}),U(e,t)};Xr(b,e=>{B(C)?e(x):B(T)?e(w,1):a().type===`WMTS`&&e(E,2)}),M(l),M(s),Bn((e,t,n,r)=>{Ei(c,`id`,`cp-chart-${i()??``}`),Ti(c,e),c.disabled=t,Ei(u,`for`,`cp-chart-${i()??``}`),Vr(d,`${a().name??``} `),Vr(y,`${n??``}${r??``}`)},[()=>J.selected.has(i()),()=>J.needsManualUrl(i()),()=>a().format.toUpperCase(),()=>a().scale?` · 1:${a().scale.toLocaleString()}`:``]),V(`change`,c,()=>{J.toggle(i())}),U(e,s)}),U(e,t)};Xr(d,e=>{J.loading?e(f):J.error?e(p,1):e(m,-1)}),M(l),M(i),V(`click`,n,a),V(`keydown`,n,a),V(`click`,c,a),U(e,t)};Xr(u,e=>{B(n)&&e(d)}),Bn(()=>l=fi(c,1,`charts-btn svelte-1mbfew2`,null,l,{active:B(n)})),V(`click`,c,i),U(e,s),Ke()}jr([`click`,`keydown`,`change`,`input`]);var fz=H(`<span style="color: #f87171"> </span>`),pz=H(`<div style="position: relative; width: 100%; height: 100%;"><!> <!> <!> <div style="
|
|
3829
3829
|
position: absolute; top: 10px; left: 10px; z-index: 10;
|
|
3830
3830
|
background: rgba(0,0,0,0.7); color: white;
|
|
3831
3831
|
padding: 6px 12px; border-radius: 6px; font: 12px monospace;
|
|
@@ -3835,7 +3835,7 @@ void main(void) {
|
|
|
3835
3835
|
background: rgba(0,0,0,0.7); border: 1px solid transparent; color: white;
|
|
3836
3836
|
padding: 6px 10px; border-radius: 6px; cursor: pointer;
|
|
3837
3837
|
font-size: 16px;
|
|
3838
|
-
"><!></button></div>`);function
|
|
3838
|
+
"><!></button></div>`);function mz(e,t){Ge(t,!0);let n=()=>dt(au,`$vesselState`,r),[r,i]=ft(),a=P(null),o=P(!1),s=P(null),c=null,l=null,u=2e3,d=null;Pn(()=>{if(!q.useGeoLocation||!(`geolocation`in navigator))return;let e=navigator.geolocation.watchPosition(e=>{let{longitude:t,latitude:n,speed:r,heading:i}=e.coords;au.set({position:{longitude:t,latitude:n},cog:i!==null&&isFinite(i)?Math.PI/180*i:null,sog:r!==null&&isFinite(r)?r:null,heading:d})},e=>{console.warn(`[geolocation] error`,e.code,e.message),e.code===GeolocationPositionError.PERMISSION_DENIED?(q.setGeoError(`Location access denied — check browser/OS permissions`),q.apply({useGeoLocation:!1})):e.code===GeolocationPositionError.POSITION_UNAVAILABLE?q.setGeoError(`Location unavailable — GPS signal lost`):q.setGeoError(`Location error: ${e.message}`)},{enableHighAccuracy:!0,maximumAge:2e3,timeout:15e3});return()=>{navigator.geolocation.clearWatch(e),d=null}}),Pn(()=>{if(!q.useGeoLocation||!(`DeviceOrientationEvent`in window))return;let e=!1;function t(e){return(360-e)%360*(Math.PI/180)}function n(n){n.alpha!==null&&(e=!0,d=t(n.alpha),au.update(e=>({...e,heading:d})))}function r(n){if(e)return;let r=n.webkitCompassHeading;if(typeof r==`number`&&isFinite(r))d=Math.PI/180*r;else if(n.absolute&&n.alpha!==null)d=t(n.alpha);else return;au.update(e=>({...e,heading:d}))}return window.addEventListener(`deviceorientationabsolute`,n),window.addEventListener(`deviceorientation`,r),()=>{window.removeEventListener(`deviceorientationabsolute`,n),window.removeEventListener(`deviceorientation`,r),d=null,au.update(e=>({...e,heading:null}))}});function f(){l===null&&(l=setTimeout(()=>{l=null;let e=q.signalkUrl;e&&c?.postMessage({type:`connect`,url:e})},u),u=Math.min(u*2,3e4))}qr(()=>{c=new Worker(new URL(``+new URL(`signalk.worker-BA8YHNLb.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),c.onmessage=e=>{let t=e.data;if(t.type===`state`){let e=t.state.position;q.useGeoLocation||e&&au.set({position:{longitude:e.longitude,latitude:e.latitude},cog:t.state.cog??null,sog:t.state.sog??null,heading:t.state.heading??null,course:t.state.course}),EL.update(q.signalkHttpUrl,t.state.course)}else t.type===`status`?(F(o,t.status===1),t.status===1?(u=2e3,(J.error||Object.keys(J.available).length===0)&&J.load(q.signalkHttpUrl)):(t.status===2||t.status===3)&&(t.status===3&&F(s,`Connection error`),f()),t.status===2&&F(s,null)):t.type===`ais`?Zu.updateBinary(t.hot,t.ids,t.cold):(F(s,`Signal K client failed: ${t.message}`),console.error(`[signalk] worker error`,t.message))};let e=()=>{if(document.visibilityState===`visible`&&!B(o)){l!==null&&(clearTimeout(l),l=null);let e=q.signalkUrl;e&&c?.postMessage({type:`connect`,url:e})}};return document.addEventListener(`visibilitychange`,e),()=>{document.removeEventListener(`visibilitychange`,e),l!==null&&clearTimeout(l),c?.postMessage({type:`disconnect`}),c?.terminate()}});let p=``,m=null;Pn(()=>{let e=q.signalkHttpUrl;if(e===p)return;p=e,J.load(e),m!==null&&clearInterval(m);let t=()=>void Ou(e).then(e=>Zu.setInfoCache(e));return t(),m=setInterval(t,18e4),()=>{m!==null&&clearInterval(m)}});let h=``;Pn(()=>{let e=q.signalkUrl;e!==h&&(h=e,F(o,!1),F(s,null),u=2e3,l!==null&&(clearTimeout(l),l=null),c?.postMessage({type:`connect`,url:e}))});var g=pz(),_=I(g);Pi(PR(_,{}),e=>F(a,e,!0),()=>B(a));var v=L(_,2);YR(v,{});var y=L(v,2);dz(y,{});var b=L(y,2),x=I(b),S=L(x,2),C=e=>{var t=fz(),n=I(t);M(t),Bn(()=>Vr(n,`⚠ ${B(s)??``}`)),U(e,t)};Xr(S,e=>{B(s)&&e(C)}),M(b);var w=L(b,2);Yl(I(w),{get icon(){return nu}}),M(w);var T=L(w,2);Yl(I(T),{get icon(){return $l}}),M(T),M(g),Bn(()=>{mi(x,`color: ${B(o)?`#4ade80`:`#f87171`}`),Ei(w,`title`,hu.following?`Stop following vessel`:`Follow vessel`),w.disabled=!n().position,mi(w,`
|
|
3839
3839
|
position: absolute; top: 120px; left: 10px; z-index: 10;
|
|
3840
3840
|
background: ${hu.following?`rgba(255,255,255,0.9)`:`rgba(0,0,0,0.7)`};
|
|
3841
3841
|
border: none;
|
|
@@ -3843,4 +3843,4 @@ void main(void) {
|
|
|
3843
3843
|
padding: 6px 10px; border-radius: 6px; cursor: pointer;
|
|
3844
3844
|
font-size: 16px; transition: background 0.15s, color 0.15s;
|
|
3845
3845
|
opacity: ${n().position?1:.35};
|
|
3846
|
-
`)}),V(`click`,
|
|
3846
|
+
`)}),V(`click`,w,()=>B(a)?.flyToVessel()),V(`click`,T,()=>B(a)?.addRuler()),U(e,g),Ke(),i()}jr([`click`]);var hz=document.getElementById(`app`);if(!hz)throw Error(`No #app element found`);Hr(mz,{target:hz});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(){Object.freeze({Connecting:0,0:`Connecting`,Connected:1,1:`Connected`,Disconnected:2,2:`Disconnected`,Error:3,3:`Error`});var e=class e{static __wrap(t){let n=Object.create(e.prototype);return n.__wbg_ptr=t,l.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,l.unregister(this),e}free(){let e=this.__destroy_into_raw();P.__wbg_position_free(e,0)}get altitude(){let e=P.__wbg_get_position_altitude(this.__wbg_ptr);return e[0]===0?void 0:e[1]}get latitude(){return P.__wbg_get_position_latitude(this.__wbg_ptr)}get longitude(){return P.__wbg_get_position_longitude(this.__wbg_ptr)}constructor(e,t){let n=P.position_new(e,t);return this.__wbg_ptr=n,l.register(this,this.__wbg_ptr,this),this}set altitude(e){P.__wbg_set_position_altitude(this.__wbg_ptr,!T(e),T(e)?0:e)}set latitude(e){P.__wbg_set_position_latitude(this.__wbg_ptr,e)}set longitude(e){P.__wbg_set_position_longitude(this.__wbg_ptr,e)}};Symbol.dispose&&(e.prototype[Symbol.dispose]=e.prototype.free);var t=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,u.unregister(this),e}free(){let e=this.__destroy_into_raw();P.__wbg_signalkclient_free(e,0)}close(){P.signalkclient_close(this.__wbg_ptr)}constructor(e,t,n,r){let i=D(e,P.__wbindgen_malloc,P.__wbindgen_realloc),a=N,o=P.signalkclient_new(i,a,t,n,r);if(o[2])throw O(o[1]);return this.__wbg_ptr=o[0],u.register(this,this.__wbg_ptr,this),this}};Symbol.dispose&&(t.prototype[Symbol.dispose]=t.prototype.free);var n=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,d.unregister(this),e}free(){let e=this.__destroy_into_raw();P.__wbg_vesselstate_free(e,0)}get cog(){let e=P.__wbg_get_vesselstate_cog(this.__wbg_ptr);return e[0]===0?void 0:e[1]}get heading(){let e=P.__wbg_get_vesselstate_heading(this.__wbg_ptr);return e[0]===0?void 0:e[1]}get position(){let t=P.__wbg_get_vesselstate_position(this.__wbg_ptr);return t===0?void 0:e.__wrap(t)}get sog(){let e=P.__wbg_get_vesselstate_sog(this.__wbg_ptr);return e[0]===0?void 0:e[1]}set cog(e){P.__wbg_set_vesselstate_cog(this.__wbg_ptr,!T(e),T(e)?0:e)}set heading(e){P.__wbg_set_vesselstate_heading(this.__wbg_ptr,!T(e),T(e)?0:e)}set position(t){let n=0;T(t)||(p(t,e),n=t.__destroy_into_raw()),P.__wbg_set_vesselstate_position(this.__wbg_ptr,n)}set sog(e){P.__wbg_set_vesselstate_sog(this.__wbg_ptr,!T(e),T(e)?0:e)}constructor(){let e=P.vesselstate_new();return this.__wbg_ptr=e,d.register(this,this.__wbg_ptr,this),this}};Symbol.dispose&&(n.prototype[Symbol.dispose]=n.prototype.free);function r(){return{__proto__:null,"./signalk_chart_core_bg.js":{__proto__:null,__wbg_Error_bce6d499ff0a4aff:function(e,t){return Error(x(e,t))},__wbg___wbindgen_debug_string_edece8177ad01481:function(e,t){let n=D(h(t),P.__wbindgen_malloc,P.__wbindgen_realloc),r=N;v().setInt32(e+4,r,!0),v().setInt32(e+0,n,!0)},__wbg___wbindgen_is_undefined_35bb9f4c7fd651d5:function(e){return e===void 0},__wbg___wbindgen_string_get_d109740c0d18f4d7:function(e,t){let n=t,r=typeof n==`string`?n:void 0;var i=T(r)?0:D(r,P.__wbindgen_malloc,P.__wbindgen_realloc),a=N;v().setInt32(e+4,a,!0),v().setInt32(e+0,i,!0)},__wbg___wbindgen_throw_9c31b086c2b26051:function(e,t){throw Error(x(e,t))},__wbg__wbg_cb_unref_3fa391f3fcdb55f8:function(e){e._wbg_cb_unref()},__wbg_buffer_765a8f5ca0b6d2ab:function(e){return e.buffer},__wbg_call_dfde26266607c996:function(){return w(function(e,t,n){return e.call(t,n)},arguments)},__wbg_clearTimeout_b339cb81aa470a3e:function(e,t){e.clearTimeout(t)},__wbg_close_e323e9eee669c291:function(){return w(function(e){e.close()},arguments)},__wbg_data_5fc79a19e47d1531:function(e){return e.data},__wbg_instanceof_WorkerGlobalScope_a93ee1765e6a23bf:function(e){let t;try{t=e instanceof WorkerGlobalScope}catch{t=!1}return t},__wbg_new_02d162bc6cf02f60:function(){return{}},__wbg_new_310879b66b6e95e1:function(){return[]},__wbg_new_b1280f836646084c:function(){return w(function(e,t){return new WebSocket(x(e,t))},arguments)},__wbg_new_from_slice_02962bf7778cf945:function(e,t){return new Float64Array(g(e,t))},__wbg_new_with_length_1278c16a5c5b497f:function(e){return new Float64Array(e>>>0)},__wbg_new_with_length_c2a8f9ac6aaaac03:function(e){return Array(e>>>0)},__wbg_now_81363d44c96dd239:function(){return Date.now()},__wbg_send_e1d2f71ce4473d1e:function(){return w(function(e,t,n){e.send(x(t,n))},arguments)},__wbg_setTimeout_a2b48e67340623fd:function(){return w(function(e,t,n){return e.setTimeout(t,n)},arguments)},__wbg_set_6be42768c690e380:function(e,t,n){e[t]=n},__wbg_set_78ea6a19f4818587:function(e,t,n){e[t>>>0]=n},__wbg_set_a0e911be3da02782:function(){return w(function(e,t,n){return Reflect.set(e,t,n)},arguments)},__wbg_set_onclose_3121e15055418a37:function(e,t){e.onclose=t},__wbg_set_onerror_1dd52df6279c8dd2:function(e,t){e.onerror=t},__wbg_set_onmessage_9eb2cf76e70783ad:function(e,t){e.onmessage=t},__wbg_set_onopen_6f3fc5e2ad3144f1:function(e,t){e.onopen=t},__wbg_static_accessor_GLOBAL_THIS_02344c9b09eb08a9:function(){let e=typeof globalThis>`u`?null:globalThis;return T(e)?0:f(e)},__wbg_static_accessor_GLOBAL_ac6d4ac874d5cd54:function(){let e=typeof global>`u`?null:global;return T(e)?0:f(e)},__wbg_static_accessor_SELF_9b2406c23aeb2023:function(){let e=typeof self>`u`?null:self;return T(e)?0:f(e)},__wbg_static_accessor_WINDOW_b34d2126934e16ba:function(){let e=typeof window>`u`?null:window;return T(e)?0:f(e)},__wbindgen_cast_0000000000000001:function(e,t){return E(e,t,a)},__wbindgen_cast_0000000000000002:function(e,t){return E(e,t,o)},__wbindgen_cast_0000000000000003:function(e,t){return E(e,t,s)},__wbindgen_cast_0000000000000004:function(e,t){return E(e,t,c)},__wbindgen_cast_0000000000000005:function(e,t){return E(e,t,i)},__wbindgen_cast_0000000000000006:function(e){return e},__wbindgen_cast_0000000000000007:function(e){return e},__wbindgen_cast_0000000000000008:function(e,t){return x(e,t)},__wbindgen_init_externref_table:function(){let e=P.__wbindgen_externrefs,t=e.grow(4);e.set(0,void 0),e.set(t+0,void 0),e.set(t+1,null),e.set(t+2,!0),e.set(t+3,!1)}}}}function i(e,t){P.wasm_bindgen__convert__closures_____invoke__hf9cd37beb7bb93c2(e,t)}function a(e,t,n){P.wasm_bindgen__convert__closures_____invoke__h064a3f5788f1fd2a(e,t,n)}function o(e,t,n){P.wasm_bindgen__convert__closures_____invoke__h064a3f5788f1fd2a_1(e,t,n)}function s(e,t,n){P.wasm_bindgen__convert__closures_____invoke__h064a3f5788f1fd2a_2(e,t,n)}function c(e,t,n){P.wasm_bindgen__convert__closures_____invoke__h064a3f5788f1fd2a_3(e,t,n)}let l=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>P.__wbg_position_free(e,1)),u=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>P.__wbg_signalkclient_free(e,1)),d=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>P.__wbg_vesselstate_free(e,1));function f(e){let t=P.__externref_table_alloc();return P.__wbindgen_externrefs.set(t,e),t}function p(e,t){if(!(e instanceof t))throw Error(`expected instance of ${t.name}`)}let m=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>P.__wbindgen_destroy_closure(e.a,e.b));function h(e){let t=typeof e;if(t==`number`||t==`boolean`||e==null)return`${e}`;if(t==`string`)return`"${e}"`;if(t==`symbol`){let t=e.description;return t==null?`Symbol`:`Symbol(${t})`}if(t==`function`){let t=e.name;return typeof t==`string`&&t.length>0?`Function(${t})`:`Function`}if(Array.isArray(e)){let t=e.length,n=`[`;t>0&&(n+=h(e[0]));for(let r=1;r<t;r++)n+=`, `+h(e[r]);return n+=`]`,n}let n=/\[object ([^\]]+)\]/.exec(toString.call(e)),r;if(n&&n.length>1)r=n[1];else return toString.call(e);if(r==`Object`)try{return`Object(`+JSON.stringify(e)+`)`}catch{return`Object`}return e instanceof Error?`${e.name}: ${e.message}\n${e.stack}`:r}function g(e,t){return e>>>=0,b().subarray(e/8,e/8+t)}let _=null;function v(){return(_===null||_.buffer.detached===!0||_.buffer.detached===void 0&&_.buffer!==P.memory.buffer)&&(_=new DataView(P.memory.buffer)),_}let y=null;function b(){return(y===null||y.byteLength===0)&&(y=new Float64Array(P.memory.buffer)),y}function x(e,t){return j(e>>>0,t)}let S=null;function C(){return(S===null||S.byteLength===0)&&(S=new Uint8Array(P.memory.buffer)),S}function w(e,t){try{return e.apply(this,t)}catch(e){let t=f(e);P.__wbindgen_exn_store(t)}}function T(e){return e==null}function E(e,t,n){let r={a:e,b:t,cnt:1},i=(...e)=>{r.cnt++;let t=r.a;r.a=0;try{return n(t,r.b,...e)}finally{r.a=t,i._wbg_cb_unref()}};return i._wbg_cb_unref=()=>{--r.cnt===0&&(P.__wbindgen_destroy_closure(r.a,r.b),r.a=0,m.unregister(r))},m.register(i,r,r),i}function D(e,t,n){if(n===void 0){let n=M.encode(e),r=t(n.length,1)>>>0;return C().subarray(r,r+n.length).set(n),N=n.length,r}let r=e.length,i=t(r,1)>>>0,a=C(),o=0;for(;o<r;o++){let t=e.charCodeAt(o);if(t>127)break;a[i+o]=t}if(o!==r){o!==0&&(e=e.slice(o)),i=n(i,r,r=o+e.length*3,1)>>>0;let t=C().subarray(i+o,i+r),a=M.encodeInto(e,t);o+=a.written,i=n(i,r,o,1)>>>0}return N=o,i}function O(e){let t=P.__wbindgen_externrefs.get(e);return P.__externref_table_dealloc(e),t}let k=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0});k.decode();let A=0;function j(e,t){return A+=t,A>=2146435072&&(k=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0}),k.decode(),A=t),k.decode(C().subarray(e,e+t))}let M=new TextEncoder;`encodeInto`in M||(M.encodeInto=function(e,t){let n=M.encode(e);return t.set(n),{read:e.length,written:n.length}});let N=0,P;function F(e,t){return P=e.exports,_=null,y=null,S=null,P.__wbindgen_start(),P}async function I(e,t){if(typeof Response==`function`&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming==`function`)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if(e.ok&&n(e.type)&&e.headers.get(`Content-Type`)!==`application/wasm`)console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",t);else throw t}let r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{let n=await WebAssembly.instantiate(e,t);return n instanceof WebAssembly.Instance?{instance:n,module:e}:n}function n(e){switch(e){case`basic`:case`cors`:case`default`:return!0}return!1}}async function L(e){if(P!==void 0)return P;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn(`using deprecated parameters for the initialization function; pass a single object instead`)),e===void 0&&(e=new URL(``+new URL(`signalk_chart_core_bg-Bx5Ksw6d.wasm`,self.location.href).href,``+self.location.href));let t=r();(typeof e==`string`||typeof Request==`function`&&e instanceof Request||typeof URL==`function`&&e instanceof URL)&&(e=fetch(e));let{instance:n,module:i}=await I(await e,t);return F(n,i)}let R=null,z=!1;async function B(){z||=(await L(),!0)}self.onmessage=async e=>{let n=e.data;if(n.type===`connect`){await B(),R?.close();try{R=new t(n.url,e=>{self.postMessage({type:`state`,state:e})},e=>{self.postMessage({type:`status`,status:e})},e=>{self.postMessage({type:`ais`,hot:e.hot,ids:e.ids,cold:e.cold},[e.hot])})}catch(e){self.postMessage({type:`error`,message:String(e)})}}else R?.close(),R=null}})();
|
|
Binary file
|
package/public/index.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
11
11
|
html, body, #app { width: 100%; height: 100%; overflow: hidden; }
|
|
12
12
|
</style>
|
|
13
|
-
<script type="module" crossorigin src="./assets/index-
|
|
13
|
+
<script type="module" crossorigin src="./assets/index-DmvOLAb-.js"></script>
|
|
14
14
|
<link rel="modulepreload" crossorigin href="./assets/rolldown-runtime-QTnfLwEv.js">
|
|
15
15
|
<link rel="modulepreload" crossorigin href="./assets/maplibre-gl-TciDBW6i.js">
|
|
16
16
|
<link rel="stylesheet" crossorigin href="./assets/maplibre-gl-B2k4QVOw.css">
|
package/public/sw.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const l=e||("document"in self?document.currentScript.src:"")||location.href;if(s[l])return;let o={};const t=e=>i(e,l),
|
|
1
|
+
if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const l=e||("document"in self?document.currentScript.src:"")||location.href;if(s[l])return;let o={};const t=e=>i(e,l),u={module:{uri:l},exports:o,require:t};s[l]=Promise.all(n.map(e=>u[e]||t(e))).then(e=>(r(...e),o))}}define(["./workbox-9c191d2f"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"index.html",revision:"a377dd532a5cf52630745c1e572b52e9"},{url:"icon-512.png",revision:"0657088dc11293c0b742467b3d9aa0e6"},{url:"icon-192.png",revision:"63ee319f3a9e92cea460048feeeacc26"},{url:"favicon.png",revision:"8a0854348265db4022235b1c95e57bbd"},{url:"assets/signalk_chart_core_bg-Bx5Ksw6d.wasm",revision:null},{url:"assets/signalk.worker-BA8YHNLb.js",revision:null},{url:"assets/rolldown-runtime-QTnfLwEv.js",revision:null},{url:"assets/maplibre-gl-TciDBW6i.js",revision:null},{url:"assets/maplibre-gl-B2k4QVOw.css",revision:null},{url:"assets/index-DmvOLAb-.js",revision:null},{url:"assets/index-C_KbDiXV.css",revision:null}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{denylist:[/^\/tiles\//,/^\/signalk\//,/^\/v1\//]}))});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){Object.freeze({Connecting:0,0:`Connecting`,Connected:1,1:`Connected`,Disconnected:2,2:`Disconnected`,Error:3,3:`Error`});var e=class e{static __wrap(t){let n=Object.create(e.prototype);return n.__wbg_ptr=t,l.register(n,n.__wbg_ptr,n),n}__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,l.unregister(this),e}free(){let e=this.__destroy_into_raw();P.__wbg_position_free(e,0)}get altitude(){let e=P.__wbg_get_position_altitude(this.__wbg_ptr);return e[0]===0?void 0:e[1]}get latitude(){return P.__wbg_get_position_latitude(this.__wbg_ptr)}get longitude(){return P.__wbg_get_position_longitude(this.__wbg_ptr)}constructor(e,t){let n=P.position_new(e,t);return this.__wbg_ptr=n,l.register(this,this.__wbg_ptr,this),this}set altitude(e){P.__wbg_set_position_altitude(this.__wbg_ptr,!T(e),T(e)?0:e)}set latitude(e){P.__wbg_set_position_latitude(this.__wbg_ptr,e)}set longitude(e){P.__wbg_set_position_longitude(this.__wbg_ptr,e)}};Symbol.dispose&&(e.prototype[Symbol.dispose]=e.prototype.free);var t=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,u.unregister(this),e}free(){let e=this.__destroy_into_raw();P.__wbg_signalkclient_free(e,0)}close(){P.signalkclient_close(this.__wbg_ptr)}constructor(e,t,n,r){let i=D(e,P.__wbindgen_malloc,P.__wbindgen_realloc),a=N,o=P.signalkclient_new(i,a,t,n,r);if(o[2])throw O(o[1]);return this.__wbg_ptr=o[0],u.register(this,this.__wbg_ptr,this),this}};Symbol.dispose&&(t.prototype[Symbol.dispose]=t.prototype.free);var n=class{__destroy_into_raw(){let e=this.__wbg_ptr;return this.__wbg_ptr=0,d.unregister(this),e}free(){let e=this.__destroy_into_raw();P.__wbg_vesselstate_free(e,0)}get cog(){let e=P.__wbg_get_vesselstate_cog(this.__wbg_ptr);return e[0]===0?void 0:e[1]}get heading(){let e=P.__wbg_get_vesselstate_heading(this.__wbg_ptr);return e[0]===0?void 0:e[1]}get position(){let t=P.__wbg_get_vesselstate_position(this.__wbg_ptr);return t===0?void 0:e.__wrap(t)}get sog(){let e=P.__wbg_get_vesselstate_sog(this.__wbg_ptr);return e[0]===0?void 0:e[1]}set cog(e){P.__wbg_set_vesselstate_cog(this.__wbg_ptr,!T(e),T(e)?0:e)}set heading(e){P.__wbg_set_vesselstate_heading(this.__wbg_ptr,!T(e),T(e)?0:e)}set position(t){let n=0;T(t)||(p(t,e),n=t.__destroy_into_raw()),P.__wbg_set_vesselstate_position(this.__wbg_ptr,n)}set sog(e){P.__wbg_set_vesselstate_sog(this.__wbg_ptr,!T(e),T(e)?0:e)}constructor(){let e=P.vesselstate_new();return this.__wbg_ptr=e,d.register(this,this.__wbg_ptr,this),this}};Symbol.dispose&&(n.prototype[Symbol.dispose]=n.prototype.free);function r(){return{__proto__:null,"./signalk_chart_core_bg.js":{__proto__:null,__wbg___wbindgen_debug_string_edece8177ad01481:function(e,t){let n=D(h(t),P.__wbindgen_malloc,P.__wbindgen_realloc),r=N;v().setInt32(e+4,r,!0),v().setInt32(e+0,n,!0)},__wbg___wbindgen_is_undefined_35bb9f4c7fd651d5:function(e){return e===void 0},__wbg___wbindgen_string_get_d109740c0d18f4d7:function(e,t){let n=t,r=typeof n==`string`?n:void 0;var i=T(r)?0:D(r,P.__wbindgen_malloc,P.__wbindgen_realloc),a=N;v().setInt32(e+4,a,!0),v().setInt32(e+0,i,!0)},__wbg___wbindgen_throw_9c31b086c2b26051:function(e,t){throw Error(x(e,t))},__wbg__wbg_cb_unref_3fa391f3fcdb55f8:function(e){e._wbg_cb_unref()},__wbg_buffer_765a8f5ca0b6d2ab:function(e){return e.buffer},__wbg_call_dfde26266607c996:function(){return w(function(e,t,n){return e.call(t,n)},arguments)},__wbg_clearTimeout_b339cb81aa470a3e:function(e,t){e.clearTimeout(t)},__wbg_close_e323e9eee669c291:function(){return w(function(e){e.close()},arguments)},__wbg_data_5fc79a19e47d1531:function(e){return e.data},__wbg_instanceof_WorkerGlobalScope_a93ee1765e6a23bf:function(e){let t;try{t=e instanceof WorkerGlobalScope}catch{t=!1}return t},__wbg_new_02d162bc6cf02f60:function(){return{}},__wbg_new_310879b66b6e95e1:function(){return[]},__wbg_new_b1280f836646084c:function(){return w(function(e,t){return new WebSocket(x(e,t))},arguments)},__wbg_new_from_slice_02962bf7778cf945:function(e,t){return new Float64Array(g(e,t))},__wbg_new_with_length_1278c16a5c5b497f:function(e){return new Float64Array(e>>>0)},__wbg_new_with_length_c2a8f9ac6aaaac03:function(e){return Array(e>>>0)},__wbg_now_81363d44c96dd239:function(){return Date.now()},__wbg_send_e1d2f71ce4473d1e:function(){return w(function(e,t,n){e.send(x(t,n))},arguments)},__wbg_setTimeout_a2b48e67340623fd:function(){return w(function(e,t,n){return e.setTimeout(t,n)},arguments)},__wbg_set_6be42768c690e380:function(e,t,n){e[t]=n},__wbg_set_78ea6a19f4818587:function(e,t,n){e[t>>>0]=n},__wbg_set_a0e911be3da02782:function(){return w(function(e,t,n){return Reflect.set(e,t,n)},arguments)},__wbg_set_onclose_3121e15055418a37:function(e,t){e.onclose=t},__wbg_set_onerror_1dd52df6279c8dd2:function(e,t){e.onerror=t},__wbg_set_onmessage_9eb2cf76e70783ad:function(e,t){e.onmessage=t},__wbg_set_onopen_6f3fc5e2ad3144f1:function(e,t){e.onopen=t},__wbg_static_accessor_GLOBAL_THIS_02344c9b09eb08a9:function(){let e=typeof globalThis>`u`?null:globalThis;return T(e)?0:f(e)},__wbg_static_accessor_GLOBAL_ac6d4ac874d5cd54:function(){let e=typeof global>`u`?null:global;return T(e)?0:f(e)},__wbg_static_accessor_SELF_9b2406c23aeb2023:function(){let e=typeof self>`u`?null:self;return T(e)?0:f(e)},__wbg_static_accessor_WINDOW_b34d2126934e16ba:function(){let e=typeof window>`u`?null:window;return T(e)?0:f(e)},__wbindgen_cast_0000000000000001:function(e,t){return E(e,t,a)},__wbindgen_cast_0000000000000002:function(e,t){return E(e,t,o)},__wbindgen_cast_0000000000000003:function(e,t){return E(e,t,s)},__wbindgen_cast_0000000000000004:function(e,t){return E(e,t,c)},__wbindgen_cast_0000000000000005:function(e,t){return E(e,t,i)},__wbindgen_cast_0000000000000006:function(e){return e},__wbindgen_cast_0000000000000007:function(e,t){return x(e,t)},__wbindgen_init_externref_table:function(){let e=P.__wbindgen_externrefs,t=e.grow(4);e.set(0,void 0),e.set(t+0,void 0),e.set(t+1,null),e.set(t+2,!0),e.set(t+3,!1)}}}}function i(e,t){P.wasm_bindgen__convert__closures_____invoke__hf9cd37beb7bb93c2(e,t)}function a(e,t,n){P.wasm_bindgen__convert__closures_____invoke__h064a3f5788f1fd2a(e,t,n)}function o(e,t,n){P.wasm_bindgen__convert__closures_____invoke__h064a3f5788f1fd2a_1(e,t,n)}function s(e,t,n){P.wasm_bindgen__convert__closures_____invoke__h064a3f5788f1fd2a_2(e,t,n)}function c(e,t,n){P.wasm_bindgen__convert__closures_____invoke__h064a3f5788f1fd2a_3(e,t,n)}let l=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>P.__wbg_position_free(e,1)),u=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>P.__wbg_signalkclient_free(e,1)),d=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>P.__wbg_vesselstate_free(e,1));function f(e){let t=P.__externref_table_alloc();return P.__wbindgen_externrefs.set(t,e),t}function p(e,t){if(!(e instanceof t))throw Error(`expected instance of ${t.name}`)}let m=typeof FinalizationRegistry>`u`?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(e=>P.__wbindgen_destroy_closure(e.a,e.b));function h(e){let t=typeof e;if(t==`number`||t==`boolean`||e==null)return`${e}`;if(t==`string`)return`"${e}"`;if(t==`symbol`){let t=e.description;return t==null?`Symbol`:`Symbol(${t})`}if(t==`function`){let t=e.name;return typeof t==`string`&&t.length>0?`Function(${t})`:`Function`}if(Array.isArray(e)){let t=e.length,n=`[`;t>0&&(n+=h(e[0]));for(let r=1;r<t;r++)n+=`, `+h(e[r]);return n+=`]`,n}let n=/\[object ([^\]]+)\]/.exec(toString.call(e)),r;if(n&&n.length>1)r=n[1];else return toString.call(e);if(r==`Object`)try{return`Object(`+JSON.stringify(e)+`)`}catch{return`Object`}return e instanceof Error?`${e.name}: ${e.message}\n${e.stack}`:r}function g(e,t){return e>>>=0,b().subarray(e/8,e/8+t)}let _=null;function v(){return(_===null||_.buffer.detached===!0||_.buffer.detached===void 0&&_.buffer!==P.memory.buffer)&&(_=new DataView(P.memory.buffer)),_}let y=null;function b(){return(y===null||y.byteLength===0)&&(y=new Float64Array(P.memory.buffer)),y}function x(e,t){return j(e>>>0,t)}let S=null;function C(){return(S===null||S.byteLength===0)&&(S=new Uint8Array(P.memory.buffer)),S}function w(e,t){try{return e.apply(this,t)}catch(e){let t=f(e);P.__wbindgen_exn_store(t)}}function T(e){return e==null}function E(e,t,n){let r={a:e,b:t,cnt:1},i=(...e)=>{r.cnt++;let t=r.a;r.a=0;try{return n(t,r.b,...e)}finally{r.a=t,i._wbg_cb_unref()}};return i._wbg_cb_unref=()=>{--r.cnt===0&&(P.__wbindgen_destroy_closure(r.a,r.b),r.a=0,m.unregister(r))},m.register(i,r,r),i}function D(e,t,n){if(n===void 0){let n=M.encode(e),r=t(n.length,1)>>>0;return C().subarray(r,r+n.length).set(n),N=n.length,r}let r=e.length,i=t(r,1)>>>0,a=C(),o=0;for(;o<r;o++){let t=e.charCodeAt(o);if(t>127)break;a[i+o]=t}if(o!==r){o!==0&&(e=e.slice(o)),i=n(i,r,r=o+e.length*3,1)>>>0;let t=C().subarray(i+o,i+r),a=M.encodeInto(e,t);o+=a.written,i=n(i,r,o,1)>>>0}return N=o,i}function O(e){let t=P.__wbindgen_externrefs.get(e);return P.__externref_table_dealloc(e),t}let k=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0});k.decode();let A=0;function j(e,t){return A+=t,A>=2146435072&&(k=new TextDecoder(`utf-8`,{ignoreBOM:!0,fatal:!0}),k.decode(),A=t),k.decode(C().subarray(e,e+t))}let M=new TextEncoder;`encodeInto`in M||(M.encodeInto=function(e,t){let n=M.encode(e);return t.set(n),{read:e.length,written:n.length}});let N=0,P;function F(e,t){return P=e.exports,_=null,y=null,S=null,P.__wbindgen_start(),P}async function I(e,t){if(typeof Response==`function`&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming==`function`)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if(e.ok&&n(e.type)&&e.headers.get(`Content-Type`)!==`application/wasm`)console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",t);else throw t}let r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{let n=await WebAssembly.instantiate(e,t);return n instanceof WebAssembly.Instance?{instance:n,module:e}:n}function n(e){switch(e){case`basic`:case`cors`:case`default`:return!0}return!1}}async function L(e){if(P!==void 0)return P;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn(`using deprecated parameters for the initialization function; pass a single object instead`)),e===void 0&&(e=new URL(``+new URL(`signalk_chart_core_bg-231oCTjv.wasm`,self.location.href).href,``+self.location.href));let t=r();(typeof e==`string`||typeof Request==`function`&&e instanceof Request||typeof URL==`function`&&e instanceof URL)&&(e=fetch(e));let{instance:n,module:i}=await I(await e,t);return F(n,i)}let R=null,z=!1;async function B(){z||=(await L(),!0)}self.onmessage=async e=>{let n=e.data;if(n.type===`connect`){await B(),R?.close();try{R=new t(n.url,e=>{self.postMessage({type:`state`,state:e})},e=>{self.postMessage({type:`status`,status:e})},e=>{self.postMessage({type:`ais`,hot:e.hot,ids:e.ids,cold:e.cold},[e.hot])})}catch(e){self.postMessage({type:`error`,message:String(e)})}}else R?.close(),R=null}})();
|
|
Binary file
|