winga-chart-plotter-signalk 0.2.1 → 0.3.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
CHANGED
|
@@ -556,8 +556,8 @@ 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(),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,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());return{get protocol(){return e.signalkProtocol},get host(){return e.signalkHost},get port(){return e.signalkPort},get appearance(){return e.appearance},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(t){e.signalkProtocol=t.signalkProtocol,e.signalkHost=t.signalkHost,e.signalkPort=t.signalkPort,e.appearance=t.appearance,localStorage.setItem(ou,JSON.stringify(e))}}}var q=du();function fu(){let e=P(!1);return{get following(){return B(e)},set following(t){F(e,t,!0)}}}var pu=fu(),mu=[`north`,`cog`,`heading`,`course`],hu={north:`N`,cog:`COG`,heading:`HDG`,course:`BRG`,manual:`MAN`};function gu(){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 hu[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=mu.indexOf(a);for(let t=1;t<=mu.length;t++){let a=mu[(o+t)%mu.length];if(n(a,r,i)){F(e,a,!0);return}}}}}var _u=gu(),vu=[`forEach`,`isDisjointFrom`,`isSubsetOf`,`isSupersetOf`],yu=[`difference`,`intersection`,`symmetricDifference`,`union`],bu=!1,xu=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}bu||this.#a()}#i(e){return hr===this.#r?P(e):tn(e)}#a(){bu=!0;var t=e.prototype,n=Set.prototype;for(let e of vu)t[e]=function(...t){return B(this.#t),n[e].apply(this,t)};for(let r of yu)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)}},Su=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 Cu(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=wu(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=wu(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 wu(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 Tu(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 Eu(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),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),r.set(e,i)}return r}async function Du(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 Ou(o,e,t)}catch(e){i.push(`${n} → ${String(e)}`)}throw Error(`WMTS GetCapabilities failed:\n${i.join(`
|
|
560
|
-
`)}`)}function Ou(e,t,n){let r=Au(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:Nu(e,`Identifier`)??``,title:Nu(e,`Title`)??Nu(e,`Identifier`)??``})),o=ju(i,r,n);return ku(t,t.includes(`?`)?`&`:`?`,o,r,a)}function ku(e,t,n,r,i){let a=Nu(n,`Identifier`)??``,o=Nu(n,`Format`)??`image/png`,s=Mu(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 Au(e){let t=new Set;for(let n of e.querySelectorAll(`Contents > TileMatrixSet`)){let e=Nu(n,`Identifier`)??``,r=Nu(n,`SupportedCRS`)??``;(e===`WebMercatorQuad`||e===`GoogleMapsCompatible`||r.includes(`3857`)||r.includes(`900913`))&&t.add(e)}return t}function ju(e,t,n){if(n){let t=e.find(e=>Nu(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 Mu(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 Nu(e,t){return e.querySelector(t)?.textContent??null}function Pu(e,t){return Du(e,t)}function Fu(e,t){return Du(e,t)}var Iu=`chart-wmts-overrides`,Lu=`chart-wmts-layer-sel`,Ru=`chart-selected`;function zu(e){try{let t=localStorage.getItem(e);if(t)return new Map(JSON.parse(t))}catch{}return new Map}function Bu(){try{let e=localStorage.getItem(Ru);if(e)return new Set(JSON.parse(e))}catch{}return new Set}function Vu(e,t){localStorage.setItem(e,JSON.stringify([...t]))}function Hu(){let e=P(ln({})),t=new xu,n=Bu(),r=P(!1),i=P(null),a=``,o=new Su,s=new xu,c=zu(Iu),l=new Su,u=new Su,d=new xu,f=zu(Lu);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),Vu(Iu,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 Fu(i,n);o.set(t,e.tileUrlTemplate),l.set(t,e.availableLayers),f.set(t,e.layerName),Vu(Lu,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)??``:Cu(e,a)??``},async load(d){a=d,F(r,!0),F(i,null);try{F(e,await Tu(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 Pu(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(Ru,JSON.stringify([...t]))}}}var Uu=Hu(),Wu=[{id:`osm`,name:`OpenStreetMap`},{id:`seamarks`,name:`OpenSeaMap`}],Gu=`base-layers-enabled`;function Ku(){try{let e=localStorage.getItem(Gu);if(e)return JSON.parse(e)}catch{}return Wu.map(e=>e.id)}function qu(){let e=new xu(Ku());return{get enabled(){return e},toggle(t){e.has(t)?e.delete(t):e.add(t),localStorage.setItem(Gu,JSON.stringify([...e]))}}}var Ju=qu();function Yu(){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,shipType:r.shipType??e.shipType,lengthM:r.lengthM??e.lengthM,beamM:r.beamM??e.beamM,draftM:r.draftM??e.draftM})}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,lengthM:o?.lengthM,beamM:o?.beamM,draftM:o?.draftM}}}}var Xu=Yu();function Zu(e,t){if(!e)throw Error(t||`loader assertion failed.`)}var Qu={self:typeof self<`u`&&self,window:typeof window<`u`&&window,global:typeof global<`u`&&global,document:typeof document<`u`&&document};Qu.self||Qu.window||Qu.global,Qu.window||Qu.self||Qu.global,Qu.global||Qu.self||Qu.window,Qu.document;var $u=!!(typeof process!=`object`||String(process)!==`[object process]`||process.browser),ed=typeof process<`u`&&process.version&&/v([0-9]*)/.exec(process.version);ed&&parseFloat(ed[1]);var td=globalThis;globalThis.document;var nd=globalThis.process||{};globalThis.console;var rd=globalThis.navigator||{};function id(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 ad(){return!(typeof process==`object`&&String(process)===`[object process]`&&!process?.browser)||id()}function od(e){return!e&&!ad()?`Node`:id(e)?`Electron`:(e||rd.userAgent||``).indexOf(`Edge`)>-1?`Edge`:globalThis.chrome?`Chrome`:globalThis.safari?`Safari`:globalThis.mozInnerScreenX?`Firefox`:`Unknown`}var sd=`4.1.1`;function cd(e,t){if(!e)throw Error(t||`Assertion failed`)}function ld(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 cd(Number.isFinite(t)&&t>=0),t}function ud(e){let{logLevel:t,message:n}=e;e.logLevel=ld(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 cd(i===`string`||i===`object`),Object.assign(e,{args:r},e.opts)}var dd=()=>{},fd=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=ud({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 dd;let r=this._getOnceTag(n.tag??t.tag??t.message);if((n.once||t.once)&&r!==void 0){if(this._onceCache.has(r))return dd;this._onceCache.add(r)}return this._emit(e,t)}_shouldLog(e){return this.getLevel()>=ld(e)}_getOnceTag(e){if(e!==void 0)try{return typeof e==`string`?e:String(e)}catch{return}}};function pd(e){try{let t=window[e],n=`__storage_test__`;return t.setItem(n,n),t.removeItem(n),t}catch{return null}}var md=class{constructor(e,t,n=`sessionStorage`){this.storage=pd(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 hd(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 gd(e,t=8){let n=Math.max(t-e.length,0);return`${` `.repeat(n)}${e}`}var _d;(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`})(_d||={});var vd=10;function yd(e){return typeof e==`string`?(e=e.toUpperCase(),_d[e]||_d.WHITE):e}function bd(e,t,n){return!ad&&typeof e==`string`&&(t&&(e=`\u001b[${yd(t)}m${e}\u001b[39m`),n&&(e=`\u001b[${yd(n)+vd}m${e}\u001b[49m`)),e}function xd(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 Sd(){let e;if(ad()&&td.performance)e=td?.performance?.now?.();else if(`hrtime`in nd){let t=nd?.hrtime?.();e=t[0]*1e3+t[1]/1e6}else e=Date.now();return e}var Cd={debug:ad()&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},wd={enabled:!0,level:0},Td=class extends fd{constructor({id:e}={id:``}){super({level:0}),this.VERSION=sd,this._startTs=Sd(),this._deltaTs=Sd(),this.userData={},this.LOG_THROTTLE_TIMEOUT=0,this.id=e,this.userData={},this._storage=new md(`__probe-${this.id}__`,{[this.id]:wd}),this.timeStamp(`${this.id} started`),xd(this),Object.seal(this)}isEnabled(){return this._getConfiguration().enabled}getLevel(){return this._getConfiguration().level}getTotal(){return Number((Sd()-this._startTs).toPrecision(10))}getDelta(){return Number((Sd()-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:Cd.warn,once:!0})}error(e,...t){return this._log(`error`,0,e,t,{method:Cd.error})}deprecated(e,t){return this.warn(`\`${e}\` is deprecated and will be removed \
|
|
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(),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,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());return{get protocol(){return e.signalkProtocol},get host(){return e.signalkHost},get port(){return e.signalkPort},get appearance(){return e.appearance},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(t){e.signalkProtocol=t.signalkProtocol,e.signalkHost=t.signalkHost,e.signalkPort=t.signalkPort,e.appearance=t.appearance,localStorage.setItem(ou,JSON.stringify(e))}}}var q=du();function fu(){let e=P(!1);return{get following(){return B(e)},set following(t){F(e,t,!0)}}}var pu=fu(),mu=[`north`,`cog`,`heading`,`course`],hu={north:`N`,cog:`COG`,heading:`HDG`,course:`BRG`,manual:`MAN`};function gu(){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 hu[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=mu.indexOf(a);for(let t=1;t<=mu.length;t++){let a=mu[(o+t)%mu.length];if(n(a,r,i)){F(e,a,!0);return}}}}}var _u=gu(),vu=[`forEach`,`isDisjointFrom`,`isSubsetOf`,`isSupersetOf`],yu=[`difference`,`intersection`,`symmetricDifference`,`union`],bu=!1,xu=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}bu||this.#a()}#i(e){return hr===this.#r?P(e):tn(e)}#a(){bu=!0;var t=e.prototype,n=Set.prototype;for(let e of vu)t[e]=function(...t){return B(this.#t),n[e].apply(this,t)};for(let r of yu)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)}},Su=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 Cu(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=wu(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=wu(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 wu(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 Tu(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 Eu(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 Du(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 Ou(o,e,t)}catch(e){i.push(`${n} → ${String(e)}`)}throw Error(`WMTS GetCapabilities failed:\n${i.join(`
|
|
560
|
+
`)}`)}function Ou(e,t,n){let r=Au(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:Nu(e,`Identifier`)??``,title:Nu(e,`Title`)??Nu(e,`Identifier`)??``})),o=ju(i,r,n);return ku(t,t.includes(`?`)?`&`:`?`,o,r,a)}function ku(e,t,n,r,i){let a=Nu(n,`Identifier`)??``,o=Nu(n,`Format`)??`image/png`,s=Mu(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 Au(e){let t=new Set;for(let n of e.querySelectorAll(`Contents > TileMatrixSet`)){let e=Nu(n,`Identifier`)??``,r=Nu(n,`SupportedCRS`)??``;(e===`WebMercatorQuad`||e===`GoogleMapsCompatible`||r.includes(`3857`)||r.includes(`900913`))&&t.add(e)}return t}function ju(e,t,n){if(n){let t=e.find(e=>Nu(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 Mu(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 Nu(e,t){return e.querySelector(t)?.textContent??null}function Pu(e,t){return Du(e,t)}function Fu(e,t){return Du(e,t)}var Iu=`chart-wmts-overrides`,Lu=`chart-wmts-layer-sel`,Ru=`chart-selected`;function zu(e){try{let t=localStorage.getItem(e);if(t)return new Map(JSON.parse(t))}catch{}return new Map}function Bu(){try{let e=localStorage.getItem(Ru);if(e)return new Set(JSON.parse(e))}catch{}return new Set}function Vu(e,t){localStorage.setItem(e,JSON.stringify([...t]))}function Hu(){let e=P(ln({})),t=new xu,n=Bu(),r=P(!1),i=P(null),a=``,o=new Su,s=new xu,c=zu(Iu),l=new Su,u=new Su,d=new xu,f=zu(Lu);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),Vu(Iu,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 Fu(i,n);o.set(t,e.tileUrlTemplate),l.set(t,e.availableLayers),f.set(t,e.layerName),Vu(Lu,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)??``:Cu(e,a)??``},async load(d){a=d,F(r,!0),F(i,null);try{F(e,await Tu(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 Pu(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(Ru,JSON.stringify([...t]))}}}var Uu=Hu(),Wu=[{id:`osm`,name:`OpenStreetMap`},{id:`seamarks`,name:`OpenSeaMap`}],Gu=`base-layers-enabled`;function Ku(){try{let e=localStorage.getItem(Gu);if(e)return JSON.parse(e)}catch{}return Wu.map(e=>e.id)}function qu(){let e=new xu(Ku());return{get enabled(){return e},toggle(t){e.has(t)?e.delete(t):e.add(t),localStorage.setItem(Gu,JSON.stringify([...e]))}}}var Ju=qu();function Yu(){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 Xu=Yu();function Zu(e,t){if(!e)throw Error(t||`loader assertion failed.`)}var Qu={self:typeof self<`u`&&self,window:typeof window<`u`&&window,global:typeof global<`u`&&global,document:typeof document<`u`&&document};Qu.self||Qu.window||Qu.global,Qu.window||Qu.self||Qu.global,Qu.global||Qu.self||Qu.window,Qu.document;var $u=!!(typeof process!=`object`||String(process)!==`[object process]`||process.browser),ed=typeof process<`u`&&process.version&&/v([0-9]*)/.exec(process.version);ed&&parseFloat(ed[1]);var td=globalThis;globalThis.document;var nd=globalThis.process||{};globalThis.console;var rd=globalThis.navigator||{};function id(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 ad(){return!(typeof process==`object`&&String(process)===`[object process]`&&!process?.browser)||id()}function od(e){return!e&&!ad()?`Node`:id(e)?`Electron`:(e||rd.userAgent||``).indexOf(`Edge`)>-1?`Edge`:globalThis.chrome?`Chrome`:globalThis.safari?`Safari`:globalThis.mozInnerScreenX?`Firefox`:`Unknown`}var sd=`4.1.1`;function cd(e,t){if(!e)throw Error(t||`Assertion failed`)}function ld(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 cd(Number.isFinite(t)&&t>=0),t}function ud(e){let{logLevel:t,message:n}=e;e.logLevel=ld(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 cd(i===`string`||i===`object`),Object.assign(e,{args:r},e.opts)}var dd=()=>{},fd=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=ud({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 dd;let r=this._getOnceTag(n.tag??t.tag??t.message);if((n.once||t.once)&&r!==void 0){if(this._onceCache.has(r))return dd;this._onceCache.add(r)}return this._emit(e,t)}_shouldLog(e){return this.getLevel()>=ld(e)}_getOnceTag(e){if(e!==void 0)try{return typeof e==`string`?e:String(e)}catch{return}}};function pd(e){try{let t=window[e],n=`__storage_test__`;return t.setItem(n,n),t.removeItem(n),t}catch{return null}}var md=class{constructor(e,t,n=`sessionStorage`){this.storage=pd(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 hd(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 gd(e,t=8){let n=Math.max(t-e.length,0);return`${` `.repeat(n)}${e}`}var _d;(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`})(_d||={});var vd=10;function yd(e){return typeof e==`string`?(e=e.toUpperCase(),_d[e]||_d.WHITE):e}function bd(e,t,n){return!ad&&typeof e==`string`&&(t&&(e=`\u001b[${yd(t)}m${e}\u001b[39m`),n&&(e=`\u001b[${yd(n)+vd}m${e}\u001b[49m`)),e}function xd(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 Sd(){let e;if(ad()&&td.performance)e=td?.performance?.now?.();else if(`hrtime`in nd){let t=nd?.hrtime?.();e=t[0]*1e3+t[1]/1e6}else e=Date.now();return e}var Cd={debug:ad()&&console.debug||console.log,log:console.log,info:console.info,warn:console.warn,error:console.error},wd={enabled:!0,level:0},Td=class extends fd{constructor({id:e}={id:``}){super({level:0}),this.VERSION=sd,this._startTs=Sd(),this._deltaTs=Sd(),this.userData={},this.LOG_THROTTLE_TIMEOUT=0,this.id=e,this.userData={},this._storage=new md(`__probe-${this.id}__`,{[this.id]:wd}),this.timeStamp(`${this.id} started`),xd(this),Object.seal(this)}isEnabled(){return this._getConfiguration().enabled}getLevel(){return this._getConfiguration().level}getTotal(){return Number((Sd()-this._startTs).toPrecision(10))}getDelta(){return Number((Sd()-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:Cd.warn,once:!0})}error(e,...t){return this._log(`error`,0,e,t,{method:Cd.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:Cd.log,time:!0,once:!0})}log(e,t,...n){return this._log(`log`,e,t,n,{method:Cd.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:Cd.debug||Cd.info,once:!0})}table(e,t,n){return t?this._log(`table`,e,t,n&&[n]||[],{method:console.table||dd,tag:Dd(t)}):dd}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||dd})}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||dd})}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;cd(n),t.total=this.getTotal(),t.delta=this.getDelta(),this._deltaTs=Sd();let r=Ed(this.id,t.message,t);return n.bind(console,r,...t.args)}_getConfiguration(){return this._storage.config[this.id]||this._updateConfiguration(wd),this._storage.config[this.id]}_updateConfiguration(e){let t=this._storage.config[this.id]||{...wd};this._storage.setConfiguration({[this.id]:{...t,...e}})}};Td.VERSION=sd;function Ed(e,t,n){if(typeof t==`string`){let r=n.time?gd(hd(n.total)):``;t=n.time?`${e}: ${r} ${t}`:`${e}: ${t}`,t=bd(t,n.color,n.background)}return t}function Dd(e){for(let t in e)for(let n in e[t])return n||`untitled`;return`empty`}var Od=`v4.4.2`;function kd(){let e=new Td({id:`loaders.gl`});return globalThis.loaders||={},globalThis.loaders.log=e,globalThis.loaders.version=Od,globalThis.probe||={},globalThis.probe.loaders=e,e}var Ad=kd(),jd=e=>typeof e==`boolean`,Md=e=>typeof e==`function`,Nd=e=>typeof e==`object`&&!!e,Pd=e=>Nd(e)&&e.constructor==={}.constructor,Fd=e=>typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer,Id=e=>Nd(e)&&typeof e.byteLength==`number`&&typeof e.slice==`function`,Ld=e=>!!e&&Md(e[Symbol.iterator]),Rd=e=>!!e&&Md(e[Symbol.asyncIterator]),zd=e=>typeof Response<`u`&&e instanceof Response||Nd(e)&&Md(e.arrayBuffer)&&Md(e.text)&&Md(e.json),Bd=e=>typeof Blob<`u`&&e instanceof Blob,Vd=e=>typeof ReadableStream<`u`&&e instanceof ReadableStream||Nd(e)&&Md(e.tee)&&Md(e.cancel)&&Md(e.getReader),Hd=e=>Nd(e)&&Md(e.read)&&Md(e.pipe)&&jd(e.readable),Ud=e=>Vd(e)||Hd(e);function Wd(e,t){return Gd(e||{},t)}function Gd(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]=Gd(r[e]||{},t[e],n+1):r[e]=t[e];return r}var Kd=`latest`;function qd(){return globalThis._loadersgl_?.version||(globalThis._loadersgl_=globalThis._loadersgl_||{},globalThis._loadersgl_.version=`4.4.2`),globalThis._loadersgl_.version}var Jd=qd();function Yd(e,t){if(!e)throw Error(t||`loaders.gl assertion failed.`)}var Xd={self:typeof self<`u`&&self,window:typeof window<`u`&&window,global:typeof global<`u`&&global,document:typeof document<`u`&&document};Xd.self||Xd.window||Xd.global,Xd.window||Xd.self||Xd.global,Xd.global||Xd.self||Xd.window,Xd.document;var Zd=typeof process!=`object`||String(process)!==`[object process]`||process.browser,Qd=typeof window<`u`&&window.orientation!==void 0,$d=typeof process<`u`&&process.version&&/v([0-9]*)/.exec(process.version);$d&&parseFloat($d[1]);var ef=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){Yd(this.isRunning),this.isRunning=!1,this._resolve(e)}error(e){Yd(this.isRunning),this.isRunning=!1,this._reject(e)}},tf=class{terminate(){}},nf=new Map;function rf(e){Yd(e.source&&!e.url||!e.source&&e.url);let t=nf.get(e.source||e.url);return t||(e.url&&(t=af(e.url),nf.set(e.url,t)),e.source&&(t=of(e.source),nf.set(e.source,t))),Yd(t),t}function af(e){return e.startsWith(`http`)?of(sf(e)):e}function of(e){let t=new Blob([e],{type:`application/javascript`});return URL.createObjectURL(t)}function sf(e){return`\
|
|
562
562
|
try {
|
|
563
563
|
importScripts('${e}');
|
|
@@ -3714,17 +3714,23 @@ void main(void) {
|
|
|
3714
3714
|
fragColor = vColor;
|
|
3715
3715
|
DECKGL_FILTER_COLOR(fragColor, geometry);
|
|
3716
3716
|
}
|
|
3717
|
-
`,TL=[0,1,0,1,.333,0,1,-.75,0,0,1,0,1,-.75,0,0,-.5,0,0,1,0,0,-.5,0,-1,-.75,0,0,1,0,-1,-.75,0,-1,.333,0],EL=new Float32Array([...TL,...TL]),DL=24,OL=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0]),kL={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},AL=class extends yP{static layerName=`AisIconLayer`;static defaultProps=kL;getShaders(){return super.getShaders({vs:CL,fs:wL,modules:[sw,$w,SL]})}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&&(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(){return new oD(this.context.device,{...this.getShaders(),id:this.props.id,bufferLayout:this.getAttributeManager().getBufferLayouts(),geometry:new lD({topology:`triangle-list`,attributes:{positions:{size:3,value:EL},aIsOutline:{size:1,value:OL}},vertexCount:DL}),isInstanced:!0})}};function jL(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 ML(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 NL(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 ML(r,e,t),n}function PL(e,t){return NL(e,t).getContext(`2d`).getImageData(0,0,e,e)}var FL=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>`,1);function IL(e,t){Ge(t,!0);let n=()=>dt(au,`$vesselState`,r),[r,i]=ft(),a,o,s=P(!!document.fullscreenElement),c=()=>{};function l(){document.fullscreenElement?document.exitFullscreen().catch(()=>{}):document.documentElement.requestFullscreen().catch(()=>{})}function u(){if(pu.following){pu.following=!1;return}pu.following=!0}let d=P(!1),f=P(10),p=P(0),m=P(`mercator`),h=null,g=!1,_=!1,v=null,y=null,b=0,x=null,S=null;function C(e){if(e!==`globe`&&B(m)===`globe`){let e=o?.style?.projection?._verticalPerspectiveProjection;e&&(h=e._errorCorrectionUsable)}if(F(m,e,!0),o?.setProjection({type:e}),e===`globe`&&h!==null){let e=o?.style?.projection?._verticalPerspectiveProjection;e&&(e._errorCorrectionUsable=h,e._errorCorrectionPreviousValue=h,e._errorMeasurementLastValue=-h),g=!0,requestAnimationFrame(()=>{if(!g)return;g=!1;let e=o?.style?.projection?._verticalPerspectiveProjection;e?._errorMeasurement&&h!==null&&(e._errorMeasurement._measuredError=-h,e._errorMeasurementLastValue=-h,e._errorMeasurementLastChangeTime=performance.now()-1e4)})}else g=!1}let w=`vessel`,T=`vessel-cog`,E=`vessel-hdg`,ee=`vessel-gc`,te=`ais-targets`,D={type:`FeatureCollection`,features:[]},O=new Map;function k(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 ne(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 re(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]=ne(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 ie(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 ae(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 oe(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 se(){if(!o)return;let e=a.clientWidth,t=a.clientHeight,n=e/2,r=t*.75,i=e/8,s=o.unproject([n-i,r]),c=o.unproject([n+i,r]);fL.add(s.lng,s.lat,c.lng,c.lat)}let ce=null,le=!1;function ue(e){e!==le&&(le=e,a.style.cursor=e?`grab`:``,e?o?.dragPan.disable():ce||o?.dragPan.enable())}function de(e){if(!ge||!o)return;let t=a.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=ge.pickObject({x:n,y:r,radius:12,layerIds:[`ruler-delete`]});if(i?.object){let t=i.object;fL.remove(t.rulerId),e.stopPropagation();return}let s=ge.pickObject({x:n,y:r,radius:10,layerIds:[`ruler-handles`]});if(!s?.object)return;let c=s.object;ce={rulerId:c.rulerId,endpoint:c.endpoint},o.dragPan.disable(),a.style.cursor=`grabbing`,a.setPointerCapture(e.pointerId),e.stopPropagation()}function fe(e){if(!o)return;let t=a.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;if(!ce){ge&&ue(!!ge.pickObject({x:n,y:r,radius:10,layerIds:[`ruler-handles`]})?.object);return}let i=o.unproject([n,r]);fL.moveEndpoint(ce.rulerId,ce.endpoint,i.lng,i.lat),e.stopPropagation()}function pe(e){if(!ce||!o)return;let t=a.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=o.unproject([n,r]),s,c=i.lng,l=i.lat;for(let e of he){let t=o.project([e.position.longitude,e.position.latitude]);if(Math.hypot(t.x-n,t.y-r)<me){s=e.id,c=e.position.longitude,l=e.position.latitude;break}}fL.snapEndpoint(ce.rulerId,ce.endpoint,s,c,l),ce=null,a.style.cursor=le?`grab`:``,le||o.dragPan.enable(),a.releasePointerCapture(e.pointerId)}let me=24,he=[],ge=null,_e=null,ve=[],ye=0,be=[],xe=[];function Se(){ge?.setProps({layers:[...be,...xe]})}let Ce=0;qr(()=>{o=new iu.default.Map({container:a,style:{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`}]},center:[10.75,59.91],zoom:10}),o.addControl(new iu.default.NavigationControl({showCompass:!1}),`top-right`),o.addControl(new iu.default.ScaleControl,`bottom-left`),ge=new eF({layers:[],interleaved:!1,parameters:{depthCompare:`always`,cullMode:`none`}}),o.addControl(ge),Se();function e(){if(ge!==null){let e=Date.now(),t=ct(au).position;{let n=e,r=[];if(_e&&ve.length>0){let e=_e,t=ve,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=ye-e[a*7+6]*1e3,[d,f]=jL(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}}),he=r,fL.syncSnapped(he)}let n=fL.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),s=n.flatMap(e=>{if(o){let t=o.project([e.a.lon,e.a.lat]),n=o.project([e.b.lon,e.b.lat]);if(Math.hypot(n.x-t.x,n.y-t.y)<100)return[]}let t=sL(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(o){let t=o.project([e.a.lon,e.a.lat]),n=o.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}]});xe=[new tI({id:`ruler-line`,data:n.map(e=>({ruler:e})),getPath:e=>sL(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 AF({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 QI({id:`ruler-labels`,data:s,getText:e=>`${cL(e.ruler)} · ${lL(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 QI({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]}})],Se()}else xe.length>0&&(xe=[],Se())}Ce=requestAnimationFrame(e)}Ce=requestAnimationFrame(e),a.addEventListener(`pointerdown`,de,{capture:!0}),a.addEventListener(`pointermove`,fe,{capture:!0}),a.addEventListener(`pointerup`,pe,{capture:!0}),a.addEventListener(`pointercancel`,pe,{capture:!0}),c=()=>{F(s,!!document.fullscreenElement)},document.addEventListener(`fullscreenchange`,c),o.on(`zoom`,()=>{F(f,o?.getZoom()??B(f),!0)}),o.on(`rotate`,()=>{F(p,o?.getBearing()??B(p),!0)}),o.on(`movestart`,e=>{e.originalEvent&&(_=!0)}),o.on(`moveend`,()=>{_=!1}),o.on(`dragstart`,()=>{ce||(pu.following=!1)}),o.on(`rotatestart`,e=>{e.originalEvent&&_u.setManual()}),o.on(`click`,e=>{if(!ge)return;let{x:t,y:n}=e.point,r=ge.pickObject({x:t,y:n,radius:5,layerIds:[`ais-confirmed-icon`,`ais-hull-ghost`,`ais-hull-confirmed`,`ais-ghost-icon`]});if(r===null)return;let i=r.object;if(i==null)return;let a=Xu.getTarget(i);!a?.position||!r.coordinate||Te({...r,object:a})}),o.on(`style.load`,()=>{let e=o;if(!e)return;let t=q.appearance;e.addImage(`vessel-icon`,{width:64,height:64,data:PL(64,t.vesselColor).data}),e.addSource(w,{type:`geojson`,data:D}),e.addSource(T,{type:`geojson`,data:D}),e.addSource(E,{type:`geojson`,data:D}),e.addSource(ee,{type:`geojson`,data:D}),e.addSource(te,{type:`geojson`,data:D}),e.addLayer({id:`vessel-gc-line`,type:`line`,source:ee,paint:{"line-color":t.gc.color,"line-width":t.gc.width,...k(t.gc.style,t.gc.width)!==null&&{"line-dasharray":k(t.gc.style,t.gc.width)}}}),e.addLayer({id:`ais-label`,type:`symbol`,source:te,layout:{"text-field":[`get`,`label`],"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.addLayer({id:`vessel-cog-line`,type:`line`,source:T,paint:{"line-color":t.cog.color,"line-width":t.cog.width,...k(t.cog.style,t.cog.width)!==null&&{"line-dasharray":k(t.cog.style,t.cog.width)}}}),e.addLayer({id:`vessel-hdg-line`,type:`line`,source:E,paint:{"line-color":t.heading.color,"line-width":t.heading.width}}),e.addLayer({id:`vessel-icon`,type:`symbol`,source:w,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(f,o.getZoom(),!0),F(p,o.getBearing(),!0),F(d,!0)}),o.on(`webglcontextlost`,()=>{console.warn(`[map] WebGL context lost`),F(d,!1),O.clear()}),o.on(`webglcontextrestored`,()=>{console.info(`[map] WebGL context restored`)}),o.on(`error`,e=>{console.error(`[map] error`,e.error??e)})}),Jr(()=>{cancelAnimationFrame(Ce),ge?.finalize(),document.removeEventListener(`fullscreenchange`,c),a.removeEventListener(`pointerdown`,de,{capture:!0}),a.removeEventListener(`pointermove`,fe,{capture:!0}),a.removeEventListener(`pointerup`,pe,{capture:!0}),a.removeEventListener(`pointercancel`,pe,{capture:!0}),o?.remove()});function we(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">
|
|
3717
|
+
`,TL=[0,1,0,1,.333,0,1,-.75,0,0,1,0,1,-.75,0,0,-.5,0,0,1,0,0,-.5,0,-1,-.75,0,0,1,0,-1,-.75,0,-1,.333,0],EL=new Float32Array([...TL,...TL]),DL=24,OL=new Float32Array([1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0]),kL={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},AL=class extends yP{static layerName=`AisIconLayer`;static defaultProps=kL;getShaders(){return super.getShaders({vs:CL,fs:wL,modules:[sw,$w,SL]})}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&&(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(){return new oD(this.context.device,{...this.getShaders(),id:this.props.id,bufferLayout:this.getAttributeManager().getBufferLayouts(),geometry:new lD({topology:`triangle-list`,attributes:{positions:{size:3,value:EL},aIsOutline:{size:1,value:OL}},vertexCount:DL}),isInstanced:!0})}};function jL(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 ML(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 NL(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 ML(r,e,t),n}function PL(e,t){return NL(e,t).getContext(`2d`).getImageData(0,0,e,e)}var FL=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>`,1);function IL(e,t){Ge(t,!0);let n=()=>dt(au,`$vesselState`,r),[r,i]=ft(),a,o,s=P(!!document.fullscreenElement),c=()=>{};function l(){document.fullscreenElement?document.exitFullscreen().catch(()=>{}):document.documentElement.requestFullscreen().catch(()=>{})}function u(){if(pu.following){pu.following=!1;return}pu.following=!0}let d=P(!1),f=P(10),p=P(0),m=P(`mercator`),h=null,g=!1,_=!1,v=null,y=null,b=0,x=null,S=null;function C(e){if(e!==`globe`&&B(m)===`globe`){let e=o?.style?.projection?._verticalPerspectiveProjection;e&&(h=e._errorCorrectionUsable)}if(F(m,e,!0),o?.setProjection({type:e}),e===`globe`&&h!==null){let e=o?.style?.projection?._verticalPerspectiveProjection;e&&(e._errorCorrectionUsable=h,e._errorCorrectionPreviousValue=h,e._errorMeasurementLastValue=-h),g=!0,requestAnimationFrame(()=>{if(!g)return;g=!1;let e=o?.style?.projection?._verticalPerspectiveProjection;e?._errorMeasurement&&h!==null&&(e._errorMeasurement._measuredError=-h,e._errorMeasurementLastValue=-h,e._errorMeasurementLastChangeTime=performance.now()-1e4)})}else g=!1}let w=`vessel`,T=`vessel-cog`,E=`vessel-hdg`,ee=`vessel-gc`,te=`ais-targets`,D={type:`FeatureCollection`,features:[]},O=new Map;function k(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 ne(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 re(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]=ne(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 ie(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 ae(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 oe(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 se(){if(!o)return;let e=a.clientWidth,t=a.clientHeight,n=e/2,r=t*.75,i=e/8,s=o.unproject([n-i,r]),c=o.unproject([n+i,r]);fL.add(s.lng,s.lat,c.lng,c.lat)}let ce=null,le=!1;function ue(e){e!==le&&(le=e,a.style.cursor=e?`grab`:``,e?o?.dragPan.disable():ce||o?.dragPan.enable())}function de(e){if(!ge||!o)return;let t=a.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=ge.pickObject({x:n,y:r,radius:12,layerIds:[`ruler-delete`]});if(i?.object){let t=i.object;fL.remove(t.rulerId),e.stopPropagation();return}let s=ge.pickObject({x:n,y:r,radius:10,layerIds:[`ruler-handles`]});if(!s?.object)return;let c=s.object;ce={rulerId:c.rulerId,endpoint:c.endpoint},o.dragPan.disable(),a.style.cursor=`grabbing`,a.setPointerCapture(e.pointerId),e.stopPropagation()}function fe(e){if(!o)return;let t=a.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;if(!ce){ge&&ue(!!ge.pickObject({x:n,y:r,radius:10,layerIds:[`ruler-handles`]})?.object);return}let i=o.unproject([n,r]);fL.moveEndpoint(ce.rulerId,ce.endpoint,i.lng,i.lat),e.stopPropagation()}function pe(e){if(!ce||!o)return;let t=a.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=o.unproject([n,r]),s,c=i.lng,l=i.lat;for(let e of he){let t=o.project([e.position.longitude,e.position.latitude]);if(Math.hypot(t.x-n,t.y-r)<me){s=e.id,c=e.position.longitude,l=e.position.latitude;break}}fL.snapEndpoint(ce.rulerId,ce.endpoint,s,c,l),ce=null,a.style.cursor=le?`grab`:``,le||o.dragPan.enable(),a.releasePointerCapture(e.pointerId)}let me=24,he=[],ge=null,_e=null,ve=[],ye=0,be=[],xe=[];function Se(){ge?.setProps({layers:[...be,...xe]})}let Ce=0;qr(()=>{o=new iu.default.Map({container:a,style:{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`}]},center:[10.75,59.91],zoom:10}),o.addControl(new iu.default.NavigationControl({showCompass:!1}),`top-right`),o.addControl(new iu.default.ScaleControl,`bottom-left`),ge=new eF({layers:[],interleaved:!1,parameters:{depthCompare:`always`,cullMode:`none`}}),o.addControl(ge),Se();function e(){if(ge!==null){let e=Date.now(),t=ct(au).position;{let n=e,r=[];if(_e&&ve.length>0){let e=_e,t=ve,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=ye-e[a*7+6]*1e3,[d,f]=jL(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}}),he=r,fL.syncSnapped(he)}let n=fL.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),s=n.flatMap(e=>{if(o){let t=o.project([e.a.lon,e.a.lat]),n=o.project([e.b.lon,e.b.lat]);if(Math.hypot(n.x-t.x,n.y-t.y)<100)return[]}let t=sL(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(o){let t=o.project([e.a.lon,e.a.lat]),n=o.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}]});xe=[new tI({id:`ruler-line`,data:n.map(e=>({ruler:e})),getPath:e=>sL(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 AF({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 QI({id:`ruler-labels`,data:s,getText:e=>`${cL(e.ruler)} · ${lL(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 QI({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]}})],Se()}else xe.length>0&&(xe=[],Se())}Ce=requestAnimationFrame(e)}Ce=requestAnimationFrame(e),a.addEventListener(`pointerdown`,de,{capture:!0}),a.addEventListener(`pointermove`,fe,{capture:!0}),a.addEventListener(`pointerup`,pe,{capture:!0}),a.addEventListener(`pointercancel`,pe,{capture:!0}),c=()=>{F(s,!!document.fullscreenElement)},document.addEventListener(`fullscreenchange`,c),o.on(`zoom`,()=>{F(f,o?.getZoom()??B(f),!0)}),o.on(`rotate`,()=>{F(p,o?.getBearing()??B(p),!0)}),o.on(`movestart`,e=>{e.originalEvent&&(_=!0)}),o.on(`moveend`,()=>{_=!1}),o.on(`dragstart`,()=>{ce||(pu.following=!1)}),o.on(`rotatestart`,e=>{e.originalEvent&&_u.setManual()}),o.on(`click`,e=>{if(!ge)return;let{x:t,y:n}=e.point,r=ge.pickObject({x:t,y:n,radius:5,layerIds:[`ais-confirmed-icon`,`ais-hull-ghost`,`ais-hull-confirmed`,`ais-ghost-icon`]});if(r===null)return;let i=r.object;if(i==null)return;let a=Xu.getTarget(i);!a?.position||!r.coordinate||De({...r,object:a})}),o.on(`style.load`,()=>{let e=o;if(!e)return;let t=q.appearance;e.addImage(`vessel-icon`,{width:64,height:64,data:PL(64,t.vesselColor).data}),e.addSource(w,{type:`geojson`,data:D}),e.addSource(T,{type:`geojson`,data:D}),e.addSource(E,{type:`geojson`,data:D}),e.addSource(ee,{type:`geojson`,data:D}),e.addSource(te,{type:`geojson`,data:D}),e.addLayer({id:`vessel-gc-line`,type:`line`,source:ee,paint:{"line-color":t.gc.color,"line-width":t.gc.width,...k(t.gc.style,t.gc.width)!==null&&{"line-dasharray":k(t.gc.style,t.gc.width)}}}),e.addLayer({id:`ais-label`,type:`symbol`,source:te,layout:{"text-field":[`get`,`label`],"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.addLayer({id:`vessel-cog-line`,type:`line`,source:T,paint:{"line-color":t.cog.color,"line-width":t.cog.width,...k(t.cog.style,t.cog.width)!==null&&{"line-dasharray":k(t.cog.style,t.cog.width)}}}),e.addLayer({id:`vessel-hdg-line`,type:`line`,source:E,paint:{"line-color":t.heading.color,"line-width":t.heading.width}}),e.addLayer({id:`vessel-icon`,type:`symbol`,source:w,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(f,o.getZoom(),!0),F(p,o.getBearing(),!0),F(d,!0)}),o.on(`webglcontextlost`,()=>{console.warn(`[map] WebGL context lost`),F(d,!1),O.clear()}),o.on(`webglcontextrestored`,()=>{console.info(`[map] WebGL context restored`)}),o.on(`error`,e=>{console.error(`[map] error`,e.error??e)})}),Jr(()=>{cancelAnimationFrame(Ce),ge?.finalize(),document.removeEventListener(`fullscreenchange`,c),a.removeEventListener(`pointerdown`,de,{capture:!0}),a.removeEventListener(`pointermove`,fe,{capture:!0}),a.removeEventListener(`pointerup`,pe,{capture:!0}),a.removeEventListener(`pointercancel`,pe,{capture:!0}),o?.remove()});function we(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">
|
|
3718
3718
|
<a href="https://www.vesselfinder.com/vessels/details/${e.mmsi}" target="_blank" rel="noopener">VesselFinder</a>
|
|
3719
3719
|
<a href="https://www.myshiptracking.com/?mmsi=${e.mmsi}" target="_blank" rel="noopener">MyShipTracking</a>
|
|
3720
|
-
</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=
|
|
3720
|
+
</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=Ee(s);return`
|
|
3721
3721
|
<div class="ais-popup">
|
|
3722
3722
|
<div class="ais-popup-title">${e.name??e.mmsi??`Unknown vessel`}</div>
|
|
3723
3723
|
<table>
|
|
3724
3724
|
${t(`MMSI`,e.mmsi??null)}
|
|
3725
|
+
${t(`Callsign VHF`,e.callsign??null)}
|
|
3726
|
+
${t(`Callsign HF`,e.callsignHf??null)}
|
|
3727
|
+
${t(`Skipper`,e.skipperName??null)}
|
|
3725
3728
|
${t(`Type`,e.shipType??null)}
|
|
3729
|
+
${t(`Status`,e.navState??null)}
|
|
3730
|
+
${t(`Flag`,e.flag??null)}
|
|
3731
|
+
${t(`Port`,e.port??null)}
|
|
3726
3732
|
${t(`Position`,a!==void 0&&o!==void 0?`${o.toFixed(5)}°N, ${a.toFixed(5)}°E`:null)}
|
|
3727
|
-
${t(`Updated`,`${c} <span style="opacity:0.6;font-size:0.85em">(${
|
|
3733
|
+
${t(`Updated`,`${c} <span id="ais-age" data-posms="${s}" style="opacity:0.6;font-size:0.85em">(${l})</span>`)}
|
|
3728
3734
|
<tr><td colspan="2" class="ais-section">Navigation</td></tr>
|
|
3729
3735
|
${t(`SOG`,e.sog===void 0?null:(e.sog*1.94384).toFixed(1),` kn`)}
|
|
3730
3736
|
${t(`COG`,e.cog===void 0?null:(e.cog*180/Math.PI).toFixed(1),`°`)}
|
|
@@ -3734,9 +3740,10 @@ void main(void) {
|
|
|
3734
3740
|
${t(`Length`,e.lengthM??null,` m`)}
|
|
3735
3741
|
${t(`Beam`,e.beamM??null,` m`)}
|
|
3736
3742
|
${t(`Draft`,e.draftM??null,` m`)}
|
|
3743
|
+
${t(`Air height`,e.airHeightM??null,` m`)}
|
|
3737
3744
|
</table>
|
|
3738
3745
|
${i}
|
|
3739
|
-
</div>`}function Te(e){let t=e.object;return!t?.position||!e.coordinate?!1:(new iu.default.Popup({closeButton:!0,maxWidth:`280px`}).setLngLat(e.coordinate).setHTML(we(t)).addTo(o),!0)}Pn(()=>{if(!o||!B(d))return;let e=o,t=Uu.selected,n=Uu.available;for(let r of Object.keys(n))if(!t.has(r)){let t=`chart-layer-${r}`,n=`chart-${r}`;e.getLayer(t)&&e.removeLayer(t),e.getSource(n)&&e.removeSource(n),O.delete(r)}for(let[r,i]of Object.entries(n)){if(!t.has(r))continue;let n=Uu.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)||(i.format===`pbf`?e.addSource(a,{type:`vector`,tiles:[n]}):e.addSource(a,{type:`raster`,tiles:[n],tileSize:256,minzoom:i.minzoom??0,maxzoom:i.maxzoom??22})),!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(!o||!B(d))return;let e=Ju.enabled;for(let t of Wu)o.setLayoutProperty(t.id,`visibility`,e.has(t.id)?`visible`:`none`)}),Pn(()=>{if(!o||!B(d))return;let e=PL(64,q.appearance.vesselColor);o.updateImage(`vessel-icon`,{width:64,height:64,data:e.data})}),Pn(()=>{!o||!B(d)||o.setPaintProperty(`ais-label`,`text-color`,q.appearance.ais.vesselColor)}),Pn(()=>{if(!o||!B(d))return;let e=o.getSource(te);if(!(e instanceof iu.default.GeoJSONSource))return;let t=Xu.hotData,n=Xu.ids,r=Xu.coldMap;Xu.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=()=>{b=Date.now(),e.setData({type:`FeatureCollection`,features:i}),window.__mapDiag&&window.__mapDiag.aisLabels++};S=a;let s=1e3-(Date.now()-b);s<=0?(x!==null&&(clearTimeout(x),x=null),a(),S=null):x===null&&(x=setTimeout(()=>{x=null,S?.(),S=null},s))}),Pn(()=>{let e=Xu.hotData,t=Xu.ids,n=Xu.coldMap;Xu.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){be=[],Se(),_e=null,ve=[],ye=0;return}let u=t.length,d=[],f=[],p=[],m=[];for(let r=0;r<u;r++){d.push(r);let i=e[r*7+2],a=e[r*7+3];!isNaN(i)&&!isNaN(a)&&a>.1&&(f.push(r),m.push(r));let o=e[r*7+4],s=n.get(t[r]);!isNaN(o)&&(s?.lengthM??0)>0&&(s?.beamM??0)>0&&p.push(r)}_e=e,ve=t,ye=a;let h=ae(r.vesselColor,220),g=ae(r.vesselColor,130),_=t=>[e[t*7+0],e[t*7+1],0],v=t=>{let n=e[t*7+3];return isNaN(n)?0:n},y=t=>{let n=e[t*7+2];return isNaN(n)?0:n},b=t=>{let n=e[t*7+4];if(!isNaN(n))return n;let r=e[t*7+2];return isNaN(r)?0:r},x=t=>{let n=e[t*7+4];return isNaN(n)?0:n},S=t=>{let n=e[t*7+5];return isNaN(n)?0:n},C=t=>e[t*7+6],w=(e,r)=>n.get(t[e])?.lengthM??r,T=(e,r)=>n.get(t[e])?.beamM??r,E=f.length>0?new AL({id:`ais-ghost-icon`,data:f,getPosition:_,getSog:v,getCog:y,getHeading:b,getRot:S,getAgeAtUpload:C,getLength:e=>w(e,0),getColor:g,uploadTimestamp:a,selfAnimate:!0,settingsIconSize:i,pickable:!0}):null,ee=d.length>0?new AL({id:`ais-confirmed-icon`,data:d,getPosition:_,getSog:()=>0,getCog:()=>0,getHeading:b,getRot:()=>0,getAgeAtUpload:()=>0,getLength:e=>w(e,0),getColor:h,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,pickable:!0}):null,te=p.length>0?new bL({id:`ais-hull-ghost`,data:p,getPosition:_,getSog:v,getCog:y,getHeading:x,getRot:S,getAgeAtUpload:C,getLength:e=>w(e,50),getBeam:e=>T(e,10),getColor:h,uploadTimestamp:a,selfAnimate:!0,settingsIconSize:i,opacity:.75,pickable:!0}):null,D=p.length>0?new bL({id:`ais-hull-confirmed`,data:p,getPosition:_,getSog:()=>0,getCog:()=>0,getHeading:x,getRot:()=>0,getAgeAtUpload:()=>0,getLength:e=>w(e,50),getBeam:e=>T(e,10),getColor:h,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,opacity:1,pickable:!0}):null;be=[...D?[D]:[],...te?[te]:[],new tI({id:`ais-cog`,data:m,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]=jL(n,r,i,isNaN(a)?0:a,0,0,s*1e3);return[[n,r],[e,t]]}return Array.from({length:25},(e,t)=>{let[o,l]=jL(n,r,i,isNaN(a)?0:a,c,0,s*t/24*1e3);return[o,l]})},getColor:()=>ae(o,200),getWidth:s,getDashArray:oe(c,s),widthUnits:`pixels`,widthMinPixels:1,pickable:!1,extensions:[new iL({dash:!0})],updateTriggers:{getPath:[l],getColor:[o],getWidth:[s],getDashArray:[c,s]}}),...E?[E]:[],...ee?[ee]:[]],Se()}),Pn(()=>{let e=q.appearance,t=n(),r=B(f);if(!o||!B(d)||(o.setPaintProperty(`vessel-gc-line`,`line-color`,e.gc.color),o.setPaintProperty(`vessel-gc-line`,`line-width`,e.gc.width),o.setPaintProperty(`vessel-gc-line`,`line-dasharray`,k(e.gc.style,e.gc.width)??void 0),o.setPaintProperty(`vessel-cog-line`,`line-color`,e.cog.color),o.setPaintProperty(`vessel-cog-line`,`line-width`,e.cog.width),o.setPaintProperty(`vessel-cog-line`,`line-dasharray`,k(e.cog.style,e.cog.width)??void 0),o.setPaintProperty(`vessel-hdg-line`,`line-color`,e.heading.color),o.setPaintProperty(`vessel-hdg-line`,`line-width`,e.heading.width),o.setPaintProperty(`vessel-hdg-line`,`line-dasharray`,k(e.heading.style,e.heading.width)??void 0),o.setLayoutProperty(`vessel-icon`,`icon-size`,e.vesselSize/64),!t.position))return;let{longitude:i,latitude:a}=t.position;function s(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}}]},p=t.cog===null?D:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:re(i,a,t.cog,s(e.cog,t.sog))},properties:{}}]},h=t.cog===null?D:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:ie(i,a,t.cog,s(e.gc,t.sog))},properties:{}}]},g=t.heading===null?D:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:(B(m)===`globe`?ie:re)(i,a,t.heading,s(e.heading,t.sog))},properties:{}}]},_=o;y=()=>{let e=_.getSource(w),t=_.getSource(T),n=_.getSource(ee),r=_.getSource(E);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(p),n.setData(h),r.setData(g),window.__mapDiag&&window.__mapDiag.ownVessel++)},v===null&&(v=requestAnimationFrame(()=>{v=null,y?.(),y=null}))}),Pn(()=>{if(!o)return;let e=n(),t=e.position,r=_u.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&&pu.following){let e=o.getCenter(),n=Math.hypot(e.lng-t.longitude,e.lat-t.latitude),r=i===void 0?{}:{bearing:i};n>1?o.flyTo({center:[t.longitude,t.latitude],speed:1.5,...r}):o.easeTo({center:[t.longitude,t.latitude],duration:1e3,...r})}else i!==void 0&&!_&&o.easeTo({bearing:i,duration:300})});var Ee={flyToVessel:u,addRuler:se},De=FL(),Oe=bn(De);Pi(Oe,e=>a=e,()=>a);var ke=L(Oe,2),Ae=I(ke);let je;var A=I(Ae,!0);M(Ae);var Me=L(Ae,2),j=I(Me);{let e=Gt(()=>B(m)===`mercator`?eu:Zl);Yl(j,{get icon(){return B(e)}})}M(Me);var Ne=L(Me,2),Pe=I(Ne);{let e=Gt(()=>B(s)?tu:Xl);Yl(Pe,{get icon(){return B(e)}})}M(Ne),M(ke),Bn(()=>{je=fi(Ae,1,`proj-btn svelte-c20cna`,null,je,{"proj-btn--manual":_u.mode===`manual`}),Ei(Ae,`title`,`Rotation mode: ${_u.label??``}`),Vr(A,_u.label),Ei(Me,`title`,`Switch to ${B(m)===`mercator`?`Globe`:`Mercator`}`),Ei(Ne,`title`,B(s)?`Exit fullscreen`:`Enter fullscreen`)}),V(`click`,Ae,()=>_u.toggle(n().heading!==null,!1)),V(`click`,Me,()=>{C(B(m)===`mercator`?`globe`:`mercator`)}),V(`click`,Ne,l),U(e,De);var Fe=Ke(Ee);return i(),Fe}jr([`click`]);var LL=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>`,1),RL=H(`<p class="section-title svelte-1u3w06f">Rhumb Line predictor</p>`),zL=H(`<p class="section-title svelte-1u3w06f">Great Circle predictor</p>`),BL=H(`<p class="section-title svelte-1u3w06f">AIS targets</p>`),VL=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),HL=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>`,1),UL=H(`<button class="btn btn-cancel svelte-1u3w06f">Cancel</button> <button class="btn btn-save svelte-1u3w06f">Save & reconnect</button>`,1),WL=H(`<button class="btn btn-cancel svelte-1u3w06f">Cancel</button> <button class="btn btn-save svelte-1u3w06f">Close</button>`,1),GL=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),KL=H(`<button title="Settings" class="gear-btn svelte-1u3w06f"><!></button> <!>`,1);function qL(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(){F(i,{protocol:q.protocol,host:q.host,port:q.port},!0),a=JSON.stringify(q.appearance),F(r,`connection`),F(n,!0)}function s(){q.apply({signalkProtocol:B(i).protocol,signalkHost:B(i).host,signalkPort:B(i).port,appearance:q.appearance}),F(n,!1)}function c(){q.apply({signalkProtocol:q.protocol,signalkHost:q.host,signalkPort:q.port,appearance:JSON.parse(a)}),F(n,!1)}function l(){F(n,!1)}function u(){q.apply({signalkProtocol:q.protocol,signalkHost:q.host,signalkPort:q.port,appearance:q.appearance})}var d=KL(),f=bn(d);Yl(I(f),{get icon(){return Ql}}),M(f);var p=L(f,2),m=e=>{var t=GL(),n=bn(t),a=L(n,2),o=L(I(a),2),d=I(o);let f;var p=L(d,2);let m;M(o);var h=L(o,2),g=e=>{var t=LL(),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),Bn(()=>Vr(h,`→ ${B(i).protocol??``}://${B(i).host??``}:${B(i).port??``}/signalk/v1/stream?subscribe=self`)),_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),U(e,t)};Xr(h,e=>{B(r)===`connection`&&e(g)});var _=L(h,2),v=e=>{var t=HL(),n=L(bn(t),2),r=L(I(n),2),i=I(r);Ci(i),M(r),M(n);var a=L(n,2),o=L(I(a),2),s=I(o);Ci(s),Fe(2),M(o),M(a);var c=L(a,4);ei(c,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=VL(),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),d=I(l);Ci(d),Fe(2),M(l),M(c);var f=L(c,2),p=L(I(f),2),m=I(p),h=I(m);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(m),M(p),M(f);var y=L(f,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,RL())},te=e=>{U(e,zL())},D=e=>{U(e,BL())};Xr(E,e=>{n()===`heading`?e(ee):n()===`cog`?e(te,1):n()===`gc`&&e(D,2)}),V(`input`,s,u),Ai(s,()=>B(r).color,e=>B(r).color=e),V(`input`,d,u),Ai(d,()=>B(r).width,e=>B(r).width=e),V(`change`,m,u),_i(m,()=>B(r).style,e=>B(r).style=e),V(`input`,x,u),Ai(x,()=>B(r).lengthValue,e=>B(r).lengthValue=e),V(`change`,S,u),_i(S,()=>B(r).lengthUnit,e=>B(r).lengthUnit=e),U(e,i)});var l=L(c,2),d=L(I(l),2),f=I(d);Ci(f),M(d),M(l);var p=L(l,2),m=L(I(p),2),h=I(m);Ci(h),Fe(2),M(m),M(p);var g=L(p,4),_=L(I(g),2),v=I(_);Ci(v),M(_),M(g);var y=L(g,2),b=L(I(y),2),x=I(b);Ci(x),Fe(2),M(b),M(y);var S=L(y,2),C=L(I(S),2),w=I(C),T=I(w);T.value=T.__value=`solid`;var E=L(T);E.value=E.__value=`dashed`;var ee=L(E);ee.value=ee.__value=`dotted`;var te=L(ee);te.value=te.__value=`dash-dot`,M(w),M(C),M(S);var D=L(S,2),O=L(I(D),2),k=I(O);Ci(k),Fe(2),M(O),M(D);var ne=L(D,4),re=L(I(ne),2),ie=I(re);Ci(ie),M(re),M(ne);var ae=L(ne,2),oe=L(I(ae),2),se=I(oe);Ci(se),Fe(2),M(oe),M(ae),V(`input`,i,u),Ai(i,()=>q.appearance.vesselColor,e=>q.appearance.vesselColor=e),V(`input`,s,u),Ai(s,()=>q.appearance.vesselSize,e=>q.appearance.vesselSize=e),V(`input`,f,u),Ai(f,()=>q.appearance.ais.vesselColor,e=>q.appearance.ais.vesselColor=e),V(`input`,h,u),Ai(h,()=>q.appearance.ais.vesselSize,e=>q.appearance.ais.vesselSize=e),V(`input`,v,u),Ai(v,()=>q.appearance.ais.cog.color,e=>q.appearance.ais.cog.color=e),V(`input`,x,u),Ai(x,()=>q.appearance.ais.cog.width,e=>q.appearance.ais.cog.width=e),V(`change`,w,u),_i(w,()=>q.appearance.ais.cog.style,e=>q.appearance.ais.cog.style=e),V(`input`,k,u),Ai(k,()=>q.appearance.ais.cog.lengthMinutes,e=>q.appearance.ais.cog.lengthMinutes=e),V(`input`,ie,u),Ai(ie,()=>q.appearance.ruler.color,e=>q.appearance.ruler.color=e),V(`input`,se,u),Ai(se,()=>q.appearance.ruler.width,e=>q.appearance.ruler.width=e),U(e,t)};Xr(_,e=>{B(r)===`appearance`&&e(v)});var y=L(_,2),b=I(y),x=e=>{var t=UL(),n=bn(t),r=L(n,2);V(`click`,n,c),V(`click`,r,s),U(e,t)},S=e=>{var t=WL(),n=bn(t),r=L(n,2);V(`click`,n,c),V(`click`,r,l),U(e,t)};Xr(b,e=>{B(r)===`connection`?e(x):e(S,-1)}),M(y),M(a),Bn(()=>{f=fi(d,1,`tab svelte-1u3w06f`,null,f,{active:B(r)===`connection`}),m=fi(p,1,`tab svelte-1u3w06f`,null,m,{active:B(r)===`appearance`})}),V(`click`,n,l),V(`click`,d,()=>F(r,`connection`)),V(`click`,p,()=>F(r,`appearance`)),U(e,t)};Xr(p,e=>{B(n)&&e(m)}),V(`click`,f,o),U(e,d),Ke()}jr([`click`,`input`,`change`]);var JL=H(`<li class="chart-row svelte-1mbfew2"><input type="checkbox" class="svelte-1mbfew2"/> <label class="chart-name svelte-1mbfew2"> </label></li>`),YL=H(`<li class="chart-row hint-row svelte-1mbfew2">Loading charts…</li>`),XL=H(`<li class="chart-row hint-row error svelte-1mbfew2"> </li>`),ZL=H(`<span class="badge svelte-1mbfew2">WMS</span>`),QL=H(`<span class="badge svelte-1mbfew2">WMTS</span>`),$L=H(`<span class="chart-desc svelte-1mbfew2"> </span>`),eR=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),tR=H(`<span class="wmts-ok svelte-1mbfew2">✓ Custom URL active</span> <button class="wmts-clear svelte-1mbfew2">Clear</button>`,1),nR=H(`<option> </option>`),rR=H(`<label class="wmts-showall-label svelte-1mbfew2" title="Show all layers from capabilities"><input type="checkbox" class="svelte-1mbfew2"/> All</label>`),iR=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>`),aR=H(`<span class="wmts-ok svelte-1mbfew2"> </span>`),oR=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>`),sR=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),cR=H(`<button title="Charts"><!></button> <!>`,1);function lR(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){Uu.setOverride(e,r[e]??``)}var s=cR(),c=bn(s);let l;Yl(I(c),{get icon(){return ru}}),M(c);var u=L(c,2),d=e=>{var t=sR(),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,()=>Wu,e=>e.id,(e,t)=>{var n=JL(),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)},[()=>Ju.enabled.has(B(t).id)]),V(`change`,r,()=>{Ju.toggle(B(t).id)}),U(e,n)});var d=L(u,2),f=e=>{U(e,YL())},p=e=>{var t=XL(),n=I(t);M(t),Bn(()=>Vr(n,`⚠ ${Uu.error??``}`)),U(e,t)},m=e=>{var t=Rr();ei(bn(t),17,()=>Object.entries(Uu.available),([e,t])=>e,(e,t)=>{var n=Gt(()=>S(B(t),2));let i=()=>B(n)[0],a=()=>B(n)[1];var s=oR(),c=I(s);Ci(c);var l=L(c,2),u=I(l),d=I(u),f=L(d),p=e=>{U(e,ZL())};Xr(f,e=>{a().type===`WMS`&&e(p)});var m=L(f,2),h=e=>{U(e,QL())};Xr(m,e=>{a().type===`WMTS`&&e(h)}),M(u);var g=L(u,2),_=e=>{var t=$L(),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=eR(),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()]??Uu.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(()=>Uu.needsManualUrl(i())),w=e=>{var t=tR();V(`click`,L(bn(t),2),()=>{Uu.setOverride(i(),``),r[i()]=``}),U(e,t)},T=Gt(()=>a().type===`WMTS`&&Uu.getOverride(i())),E=e=>{var t=Rr(),n=bn(t),r=e=>{var t=iR(),n=I(t),r=L(n,2);ei(r,21,()=>Uu.visibleLayers(i()),e=>e.id,(e,t)=>{var n=nR(),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=rR(),n=I(t);Ci(n),Fe(),M(t),Bn(e=>Ti(n,e),[()=>Uu.isShowingAll(i())]),V(`change`,n,()=>Uu.toggleShowAll(i())),U(e,t)},c=Gt(()=>Uu.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))},[()=>Uu.getLayerSel(i())]),V(`change`,r,e=>{Uu.selectLayer(i(),e.target.value)}),U(e,t)},a=Gt(()=>Uu.visibleLayers(i()).length>1),o=e=>{var t=aR(),n=I(t);M(t),Bn(e=>Vr(n,`Layer: ${e??``}`),[()=>Uu.visibleLayers(i())[0]?.title]),U(e,t)},s=Gt(()=>Uu.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??``}`)},[()=>Uu.selected.has(i()),()=>Uu.needsManualUrl(i()),()=>a().format.toUpperCase(),()=>a().scale?` · 1:${a().scale.toLocaleString()}`:``]),V(`change`,c,()=>{Uu.toggle(i())}),U(e,s)}),U(e,t)};Xr(d,e=>{Uu.loading?e(f):Uu.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 uR=H(`<span style="color: #f87171"> </span>`),dR=H(`<div style="position: relative; width: 100%; height: 100%;"><!> <!> <!> <div style="
|
|
3746
|
+
</div>`}let Te=null;function Ee(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 De(e){let t=e.object;if(!t?.position||!e.coordinate)return!1;Te!==null&&(clearInterval(Te),Te=null);let n=new iu.default.Popup({closeButton:!0,maxWidth:`280px`}).setLngLat(e.coordinate).setHTML(we(t)).addTo(o);return Te=setInterval(()=>{let e=document.getElementById(`ais-age`);if(!e){clearInterval(Te),Te=null;return}e.textContent=`(${Ee(Number(e.dataset.posms))})`},1e3),n.on(`close`,()=>{Te!==null&&(clearInterval(Te),Te=null)}),!0}Pn(()=>{if(!o||!B(d))return;let e=o,t=Uu.selected,n=Uu.available;for(let r of Object.keys(n))if(!t.has(r)){let t=`chart-layer-${r}`,n=`chart-${r}`;e.getLayer(t)&&e.removeLayer(t),e.getSource(n)&&e.removeSource(n),O.delete(r)}for(let[r,i]of Object.entries(n)){if(!t.has(r))continue;let n=Uu.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)||(i.format===`pbf`?e.addSource(a,{type:`vector`,tiles:[n]}):e.addSource(a,{type:`raster`,tiles:[n],tileSize:256,minzoom:i.minzoom??0,maxzoom:i.maxzoom??22})),!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(!o||!B(d))return;let e=Ju.enabled;for(let t of Wu)o.setLayoutProperty(t.id,`visibility`,e.has(t.id)?`visible`:`none`)}),Pn(()=>{if(!o||!B(d))return;let e=PL(64,q.appearance.vesselColor);o.updateImage(`vessel-icon`,{width:64,height:64,data:e.data})}),Pn(()=>{!o||!B(d)||o.setPaintProperty(`ais-label`,`text-color`,q.appearance.ais.vesselColor)}),Pn(()=>{if(!o||!B(d))return;let e=o.getSource(te);if(!(e instanceof iu.default.GeoJSONSource))return;let t=Xu.hotData,n=Xu.ids,r=Xu.coldMap;Xu.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=()=>{b=Date.now(),e.setData({type:`FeatureCollection`,features:i}),window.__mapDiag&&window.__mapDiag.aisLabels++};S=a;let s=1e3-(Date.now()-b);s<=0?(x!==null&&(clearTimeout(x),x=null),a(),S=null):x===null&&(x=setTimeout(()=>{x=null,S?.(),S=null},s))}),Pn(()=>{let e=Xu.hotData,t=Xu.ids,n=Xu.coldMap;Xu.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){be=[],Se(),_e=null,ve=[],ye=0;return}let u=t.length,d=[],f=[],p=[],m=[];for(let r=0;r<u;r++){d.push(r);let i=e[r*7+2],a=e[r*7+3];!isNaN(i)&&!isNaN(a)&&a>.1&&(f.push(r),m.push(r));let o=e[r*7+4],s=n.get(t[r]);!isNaN(o)&&(s?.lengthM??0)>0&&(s?.beamM??0)>0&&p.push(r)}_e=e,ve=t,ye=a;let h=ae(r.vesselColor,220),g=ae(r.vesselColor,130),_=t=>[e[t*7+0],e[t*7+1],0],v=t=>{let n=e[t*7+3];return isNaN(n)?0:n},y=t=>{let n=e[t*7+2];return isNaN(n)?0:n},b=t=>{let n=e[t*7+4];if(!isNaN(n))return n;let r=e[t*7+2];return isNaN(r)?0:r},x=t=>{let n=e[t*7+4];return isNaN(n)?0:n},S=t=>{let n=e[t*7+5];return isNaN(n)?0:n},C=t=>e[t*7+6],w=(e,r)=>n.get(t[e])?.lengthM??r,T=(e,r)=>n.get(t[e])?.beamM??r,E=f.length>0?new AL({id:`ais-ghost-icon`,data:f,getPosition:_,getSog:v,getCog:y,getHeading:b,getRot:S,getAgeAtUpload:C,getLength:e=>w(e,0),getColor:g,uploadTimestamp:a,selfAnimate:!0,settingsIconSize:i,pickable:!0}):null,ee=d.length>0?new AL({id:`ais-confirmed-icon`,data:d,getPosition:_,getSog:()=>0,getCog:()=>0,getHeading:b,getRot:()=>0,getAgeAtUpload:()=>0,getLength:e=>w(e,0),getColor:h,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,pickable:!0}):null,te=p.length>0?new bL({id:`ais-hull-ghost`,data:p,getPosition:_,getSog:v,getCog:y,getHeading:x,getRot:S,getAgeAtUpload:C,getLength:e=>w(e,50),getBeam:e=>T(e,10),getColor:h,uploadTimestamp:a,selfAnimate:!0,settingsIconSize:i,opacity:.75,pickable:!0}):null,D=p.length>0?new bL({id:`ais-hull-confirmed`,data:p,getPosition:_,getSog:()=>0,getCog:()=>0,getHeading:x,getRot:()=>0,getAgeAtUpload:()=>0,getLength:e=>w(e,50),getBeam:e=>T(e,10),getColor:h,uploadTimestamp:a,selfAnimate:!1,settingsIconSize:i,opacity:1,pickable:!0}):null;be=[...D?[D]:[],...te?[te]:[],new tI({id:`ais-cog`,data:m,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]=jL(n,r,i,isNaN(a)?0:a,0,0,s*1e3);return[[n,r],[e,t]]}return Array.from({length:25},(e,t)=>{let[o,l]=jL(n,r,i,isNaN(a)?0:a,c,0,s*t/24*1e3);return[o,l]})},getColor:()=>ae(o,200),getWidth:s,getDashArray:oe(c,s),widthUnits:`pixels`,widthMinPixels:1,pickable:!1,extensions:[new iL({dash:!0})],updateTriggers:{getPath:[l],getColor:[o],getWidth:[s],getDashArray:[c,s]}}),...E?[E]:[],...ee?[ee]:[]],Se()}),Pn(()=>{let e=q.appearance,t=n(),r=B(f);if(!o||!B(d)||(o.setPaintProperty(`vessel-gc-line`,`line-color`,e.gc.color),o.setPaintProperty(`vessel-gc-line`,`line-width`,e.gc.width),o.setPaintProperty(`vessel-gc-line`,`line-dasharray`,k(e.gc.style,e.gc.width)??void 0),o.setPaintProperty(`vessel-cog-line`,`line-color`,e.cog.color),o.setPaintProperty(`vessel-cog-line`,`line-width`,e.cog.width),o.setPaintProperty(`vessel-cog-line`,`line-dasharray`,k(e.cog.style,e.cog.width)??void 0),o.setPaintProperty(`vessel-hdg-line`,`line-color`,e.heading.color),o.setPaintProperty(`vessel-hdg-line`,`line-width`,e.heading.width),o.setPaintProperty(`vessel-hdg-line`,`line-dasharray`,k(e.heading.style,e.heading.width)??void 0),o.setLayoutProperty(`vessel-icon`,`icon-size`,e.vesselSize/64),!t.position))return;let{longitude:i,latitude:a}=t.position;function s(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}}]},p=t.cog===null?D:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:re(i,a,t.cog,s(e.cog,t.sog))},properties:{}}]},h=t.cog===null?D:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:ie(i,a,t.cog,s(e.gc,t.sog))},properties:{}}]},g=t.heading===null?D:{type:`FeatureCollection`,features:[{type:`Feature`,geometry:{type:`LineString`,coordinates:(B(m)===`globe`?ie:re)(i,a,t.heading,s(e.heading,t.sog))},properties:{}}]},_=o;y=()=>{let e=_.getSource(w),t=_.getSource(T),n=_.getSource(ee),r=_.getSource(E);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(p),n.setData(h),r.setData(g),window.__mapDiag&&window.__mapDiag.ownVessel++)},v===null&&(v=requestAnimationFrame(()=>{v=null,y?.(),y=null}))}),Pn(()=>{if(!o)return;let e=n(),t=e.position,r=_u.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&&pu.following){let e=o.getCenter(),n=Math.hypot(e.lng-t.longitude,e.lat-t.latitude),r=i===void 0?{}:{bearing:i};n>1?o.flyTo({center:[t.longitude,t.latitude],speed:1.5,...r}):o.easeTo({center:[t.longitude,t.latitude],duration:1e3,...r})}else i!==void 0&&!_&&o.easeTo({bearing:i,duration:300})});var Oe={flyToVessel:u,addRuler:se},ke=FL(),Ae=bn(ke);Pi(Ae,e=>a=e,()=>a);var je=L(Ae,2),A=I(je);let Me;var j=I(A,!0);M(A);var Ne=L(A,2),Pe=I(Ne);{let e=Gt(()=>B(m)===`mercator`?eu:Zl);Yl(Pe,{get icon(){return B(e)}})}M(Ne);var Fe=L(Ne,2),Ie=I(Fe);{let e=Gt(()=>B(s)?tu:Xl);Yl(Ie,{get icon(){return B(e)}})}M(Fe),M(je),Bn(()=>{Me=fi(A,1,`proj-btn svelte-c20cna`,null,Me,{"proj-btn--manual":_u.mode===`manual`}),Ei(A,`title`,`Rotation mode: ${_u.label??``}`),Vr(j,_u.label),Ei(Ne,`title`,`Switch to ${B(m)===`mercator`?`Globe`:`Mercator`}`),Ei(Fe,`title`,B(s)?`Exit fullscreen`:`Enter fullscreen`)}),V(`click`,A,()=>_u.toggle(n().heading!==null,!1)),V(`click`,Ne,()=>{C(B(m)===`mercator`?`globe`:`mercator`)}),V(`click`,Fe,l),U(e,ke);var Le=Ke(Oe);return i(),Le}jr([`click`]);var LL=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>`,1),RL=H(`<p class="section-title svelte-1u3w06f">Rhumb Line predictor</p>`),zL=H(`<p class="section-title svelte-1u3w06f">Great Circle predictor</p>`),BL=H(`<p class="section-title svelte-1u3w06f">AIS targets</p>`),VL=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),HL=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>`,1),UL=H(`<button class="btn btn-cancel svelte-1u3w06f">Cancel</button> <button class="btn btn-save svelte-1u3w06f">Save & reconnect</button>`,1),WL=H(`<button class="btn btn-cancel svelte-1u3w06f">Cancel</button> <button class="btn btn-save svelte-1u3w06f">Close</button>`,1),GL=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),KL=H(`<button title="Settings" class="gear-btn svelte-1u3w06f"><!></button> <!>`,1);function qL(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(){F(i,{protocol:q.protocol,host:q.host,port:q.port},!0),a=JSON.stringify(q.appearance),F(r,`connection`),F(n,!0)}function s(){q.apply({signalkProtocol:B(i).protocol,signalkHost:B(i).host,signalkPort:B(i).port,appearance:q.appearance}),F(n,!1)}function c(){q.apply({signalkProtocol:q.protocol,signalkHost:q.host,signalkPort:q.port,appearance:JSON.parse(a)}),F(n,!1)}function l(){F(n,!1)}function u(){q.apply({signalkProtocol:q.protocol,signalkHost:q.host,signalkPort:q.port,appearance:q.appearance})}var d=KL(),f=bn(d);Yl(I(f),{get icon(){return Ql}}),M(f);var p=L(f,2),m=e=>{var t=GL(),n=bn(t),a=L(n,2),o=L(I(a),2),d=I(o);let f;var p=L(d,2);let m;M(o);var h=L(o,2),g=e=>{var t=LL(),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),Bn(()=>Vr(h,`→ ${B(i).protocol??``}://${B(i).host??``}:${B(i).port??``}/signalk/v1/stream?subscribe=self`)),_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),U(e,t)};Xr(h,e=>{B(r)===`connection`&&e(g)});var _=L(h,2),v=e=>{var t=HL(),n=L(bn(t),2),r=L(I(n),2),i=I(r);Ci(i),M(r),M(n);var a=L(n,2),o=L(I(a),2),s=I(o);Ci(s),Fe(2),M(o),M(a);var c=L(a,4);ei(c,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=VL(),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),d=I(l);Ci(d),Fe(2),M(l),M(c);var f=L(c,2),p=L(I(f),2),m=I(p),h=I(m);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(m),M(p),M(f);var y=L(f,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,RL())},te=e=>{U(e,zL())},D=e=>{U(e,BL())};Xr(E,e=>{n()===`heading`?e(ee):n()===`cog`?e(te,1):n()===`gc`&&e(D,2)}),V(`input`,s,u),Ai(s,()=>B(r).color,e=>B(r).color=e),V(`input`,d,u),Ai(d,()=>B(r).width,e=>B(r).width=e),V(`change`,m,u),_i(m,()=>B(r).style,e=>B(r).style=e),V(`input`,x,u),Ai(x,()=>B(r).lengthValue,e=>B(r).lengthValue=e),V(`change`,S,u),_i(S,()=>B(r).lengthUnit,e=>B(r).lengthUnit=e),U(e,i)});var l=L(c,2),d=L(I(l),2),f=I(d);Ci(f),M(d),M(l);var p=L(l,2),m=L(I(p),2),h=I(m);Ci(h),Fe(2),M(m),M(p);var g=L(p,4),_=L(I(g),2),v=I(_);Ci(v),M(_),M(g);var y=L(g,2),b=L(I(y),2),x=I(b);Ci(x),Fe(2),M(b),M(y);var S=L(y,2),C=L(I(S),2),w=I(C),T=I(w);T.value=T.__value=`solid`;var E=L(T);E.value=E.__value=`dashed`;var ee=L(E);ee.value=ee.__value=`dotted`;var te=L(ee);te.value=te.__value=`dash-dot`,M(w),M(C),M(S);var D=L(S,2),O=L(I(D),2),k=I(O);Ci(k),Fe(2),M(O),M(D);var ne=L(D,4),re=L(I(ne),2),ie=I(re);Ci(ie),M(re),M(ne);var ae=L(ne,2),oe=L(I(ae),2),se=I(oe);Ci(se),Fe(2),M(oe),M(ae),V(`input`,i,u),Ai(i,()=>q.appearance.vesselColor,e=>q.appearance.vesselColor=e),V(`input`,s,u),Ai(s,()=>q.appearance.vesselSize,e=>q.appearance.vesselSize=e),V(`input`,f,u),Ai(f,()=>q.appearance.ais.vesselColor,e=>q.appearance.ais.vesselColor=e),V(`input`,h,u),Ai(h,()=>q.appearance.ais.vesselSize,e=>q.appearance.ais.vesselSize=e),V(`input`,v,u),Ai(v,()=>q.appearance.ais.cog.color,e=>q.appearance.ais.cog.color=e),V(`input`,x,u),Ai(x,()=>q.appearance.ais.cog.width,e=>q.appearance.ais.cog.width=e),V(`change`,w,u),_i(w,()=>q.appearance.ais.cog.style,e=>q.appearance.ais.cog.style=e),V(`input`,k,u),Ai(k,()=>q.appearance.ais.cog.lengthMinutes,e=>q.appearance.ais.cog.lengthMinutes=e),V(`input`,ie,u),Ai(ie,()=>q.appearance.ruler.color,e=>q.appearance.ruler.color=e),V(`input`,se,u),Ai(se,()=>q.appearance.ruler.width,e=>q.appearance.ruler.width=e),U(e,t)};Xr(_,e=>{B(r)===`appearance`&&e(v)});var y=L(_,2),b=I(y),x=e=>{var t=UL(),n=bn(t),r=L(n,2);V(`click`,n,c),V(`click`,r,s),U(e,t)},S=e=>{var t=WL(),n=bn(t),r=L(n,2);V(`click`,n,c),V(`click`,r,l),U(e,t)};Xr(b,e=>{B(r)===`connection`?e(x):e(S,-1)}),M(y),M(a),Bn(()=>{f=fi(d,1,`tab svelte-1u3w06f`,null,f,{active:B(r)===`connection`}),m=fi(p,1,`tab svelte-1u3w06f`,null,m,{active:B(r)===`appearance`})}),V(`click`,n,l),V(`click`,d,()=>F(r,`connection`)),V(`click`,p,()=>F(r,`appearance`)),U(e,t)};Xr(p,e=>{B(n)&&e(m)}),V(`click`,f,o),U(e,d),Ke()}jr([`click`,`input`,`change`]);var JL=H(`<li class="chart-row svelte-1mbfew2"><input type="checkbox" class="svelte-1mbfew2"/> <label class="chart-name svelte-1mbfew2"> </label></li>`),YL=H(`<li class="chart-row hint-row svelte-1mbfew2">Loading charts…</li>`),XL=H(`<li class="chart-row hint-row error svelte-1mbfew2"> </li>`),ZL=H(`<span class="badge svelte-1mbfew2">WMS</span>`),QL=H(`<span class="badge svelte-1mbfew2">WMTS</span>`),$L=H(`<span class="chart-desc svelte-1mbfew2"> </span>`),eR=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),tR=H(`<span class="wmts-ok svelte-1mbfew2">✓ Custom URL active</span> <button class="wmts-clear svelte-1mbfew2">Clear</button>`,1),nR=H(`<option> </option>`),rR=H(`<label class="wmts-showall-label svelte-1mbfew2" title="Show all layers from capabilities"><input type="checkbox" class="svelte-1mbfew2"/> All</label>`),iR=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>`),aR=H(`<span class="wmts-ok svelte-1mbfew2"> </span>`),oR=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>`),sR=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),cR=H(`<button title="Charts"><!></button> <!>`,1);function lR(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){Uu.setOverride(e,r[e]??``)}var s=cR(),c=bn(s);let l;Yl(I(c),{get icon(){return ru}}),M(c);var u=L(c,2),d=e=>{var t=sR(),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,()=>Wu,e=>e.id,(e,t)=>{var n=JL(),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)},[()=>Ju.enabled.has(B(t).id)]),V(`change`,r,()=>{Ju.toggle(B(t).id)}),U(e,n)});var d=L(u,2),f=e=>{U(e,YL())},p=e=>{var t=XL(),n=I(t);M(t),Bn(()=>Vr(n,`⚠ ${Uu.error??``}`)),U(e,t)},m=e=>{var t=Rr();ei(bn(t),17,()=>Object.entries(Uu.available),([e,t])=>e,(e,t)=>{var n=Gt(()=>S(B(t),2));let i=()=>B(n)[0],a=()=>B(n)[1];var s=oR(),c=I(s);Ci(c);var l=L(c,2),u=I(l),d=I(u),f=L(d),p=e=>{U(e,ZL())};Xr(f,e=>{a().type===`WMS`&&e(p)});var m=L(f,2),h=e=>{U(e,QL())};Xr(m,e=>{a().type===`WMTS`&&e(h)}),M(u);var g=L(u,2),_=e=>{var t=$L(),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=eR(),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()]??Uu.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(()=>Uu.needsManualUrl(i())),w=e=>{var t=tR();V(`click`,L(bn(t),2),()=>{Uu.setOverride(i(),``),r[i()]=``}),U(e,t)},T=Gt(()=>a().type===`WMTS`&&Uu.getOverride(i())),E=e=>{var t=Rr(),n=bn(t),r=e=>{var t=iR(),n=I(t),r=L(n,2);ei(r,21,()=>Uu.visibleLayers(i()),e=>e.id,(e,t)=>{var n=nR(),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=rR(),n=I(t);Ci(n),Fe(),M(t),Bn(e=>Ti(n,e),[()=>Uu.isShowingAll(i())]),V(`change`,n,()=>Uu.toggleShowAll(i())),U(e,t)},c=Gt(()=>Uu.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))},[()=>Uu.getLayerSel(i())]),V(`change`,r,e=>{Uu.selectLayer(i(),e.target.value)}),U(e,t)},a=Gt(()=>Uu.visibleLayers(i()).length>1),o=e=>{var t=aR(),n=I(t);M(t),Bn(e=>Vr(n,`Layer: ${e??``}`),[()=>Uu.visibleLayers(i())[0]?.title]),U(e,t)},s=Gt(()=>Uu.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??``}`)},[()=>Uu.selected.has(i()),()=>Uu.needsManualUrl(i()),()=>a().format.toUpperCase(),()=>a().scale?` · 1:${a().scale.toLocaleString()}`:``]),V(`change`,c,()=>{Uu.toggle(i())}),U(e,s)}),U(e,t)};Xr(d,e=>{Uu.loading?e(f):Uu.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 uR=H(`<span style="color: #f87171"> </span>`),dR=H(`<div style="position: relative; width: 100%; height: 100%;"><!> <!> <!> <div style="
|
|
3740
3747
|
position: absolute; top: 10px; left: 10px; z-index: 10;
|
|
3741
3748
|
background: rgba(0,0,0,0.7); color: white;
|
|
3742
3749
|
padding: 6px 12px; border-radius: 6px; font: 12px monospace;
|
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-CzmdtA0l.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,l)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let o={};const t=e=>i(e,r),u={module:{uri:r},exports:o,require:t};s[r]=Promise.all(n.map(e=>u[e]||t(e))).then(e=>(l(...e),o))}}define(["./workbox-9c191d2f"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"index.html",revision:"
|
|
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,l)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let o={};const t=e=>i(e,r),u={module:{uri:r},exports:o,require:t};s[r]=Promise.all(n.map(e=>u[e]||t(e))).then(e=>(l(...e),o))}}define(["./workbox-9c191d2f"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"index.html",revision:"1e893c6022becc87d3d68a62bf49f685"},{url:"icon-512.png",revision:"0657088dc11293c0b742467b3d9aa0e6"},{url:"icon-192.png",revision:"63ee319f3a9e92cea460048feeeacc26"},{url:"favicon.png",revision:"8a0854348265db4022235b1c95e57bbd"},{url:"assets/signalk_chart_core_bg-leOhlBKH.wasm",revision:null},{url:"assets/signalk.worker-dgQh6yBR.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-DzKMgFRV.css",revision:null},{url:"assets/index-CzmdtA0l.js",revision:null}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{denylist:[/^\/tiles\//,/^\/signalk\//,/^\/v1\//]}))});
|