signalk-binnacle 0.6.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/README.md +13 -28
- package/package.json +1 -1
- package/public/assets/{TrendCharts-Bd7hSoMu.js → TrendCharts-BajKdV4q.js} +1 -1
- package/public/assets/{index-CAjHX3-B.css → index-CHwGT9zB.css} +1 -1
- package/public/assets/{index-NGypZbKU.js → index-CuQ3O73e.js} +16 -16
- package/public/assets/{route-edit-DxrqIXLA.js → route-edit-D936jsBL.js} +1 -1
- package/public/index.html +2 -2
- package/public/sw.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,40 @@ All notable changes to Binnacle are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project aims to follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
<a id="v061"></a>
|
|
8
|
+
|
|
9
|
+
## [0.6.1] - 2026-06-12
|
|
10
|
+
|
|
11
|
+
Quick access from community feedback: the chart actions a navigator reaches for stay within one
|
|
12
|
+
or two taps, and the weather panel's layer row scrolls honestly instead of clipping its last pill.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- Measure from the chart: the long-press and right-click menu gains "Measure from here", arming
|
|
17
|
+
the measure tool with its first point at the pressed position, so measuring starts where you
|
|
18
|
+
are looking instead of via the app menu. Re-arming mid-measurement deliberately starts fresh;
|
|
19
|
+
extending an in-progress measurement is a plain chart tap.
|
|
20
|
+
- A Charts pill on the bottom status strip opens Layers and charts in one tap, beside Center,
|
|
21
|
+
Follow, and Forecast, so switching charts no longer goes through the app menu.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- The weather panel's layer pills no longer render the last label clipped: the edge fade shows
|
|
26
|
+
only while there is actually more to scroll, lifts at the end of the scroll, and the pills
|
|
27
|
+
keep their natural width instead of compressing when the panel narrows, so the row genuinely
|
|
28
|
+
scrolls.
|
|
29
|
+
- The chart context menu sizes itself to its longest label, so its edge-clamp math matches the
|
|
30
|
+
rendered box.
|
|
31
|
+
- Voice control can activate the Charts pill by its visible word, its expanded state is not
|
|
32
|
+
announced while it is still disabled during chart load, and its tooltip says the chart is
|
|
33
|
+
loading while it is.
|
|
34
|
+
|
|
35
|
+
### Internal
|
|
36
|
+
|
|
37
|
+
- One armMeasure helper replaces the duplicated reveal-then-arm sequence, new measure tests pin
|
|
38
|
+
the seed-after-arm contract and the deliberate reset on re-arm, and CI test flakes from cold
|
|
39
|
+
ICU loading are prevented by a per-worker warm-up rather than per-test timeouts.
|
|
40
|
+
|
|
7
41
|
<a id="v060"></a>
|
|
8
42
|
|
|
9
43
|
## [0.6.0] - 2026-06-12
|
package/README.md
CHANGED
|
@@ -15,34 +15,19 @@ A WebGL chart plotter for [Signal K](https://signalk.org).
|
|
|
15
15
|
> is also not certified for safety-of-life navigation. Always carry redundant means of navigation,
|
|
16
16
|
> cross-check against your primary instruments, and treat every display as advisory.
|
|
17
17
|
|
|
18
|
-
## What's new in 0.6.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
- **
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
nautical.
|
|
32
|
-
- **A launcher menu and an Alarms panel.** The menu is now large icon tiles grouped Navigate,
|
|
33
|
-
Conditions, Safety, and Settings, and a new Alarms panel collects every active alert on the
|
|
34
|
-
boat with one-tap Silence and Acknowledge that propagate to every station.
|
|
35
|
-
- **Trends and track history.** Depth, apparent wind, pressure, and speed over the last 24 hours
|
|
36
|
-
as themed graphs from the server's v2 History API, falling back to live session sampling
|
|
37
|
-
without a provider, plus a dashed 24 hour track-history chart layer.
|
|
38
|
-
- **Standard waypoints, worldwide tides, AIS trails, and chart symbols.** Waypoints live in the
|
|
39
|
-
server's own resources, tides ride the signalk-tides plugin with NOAA CO-OPS as the fallback,
|
|
40
|
-
AIS targets get faded wakes from the tracks plugin, and signalk-symbol-manager artwork renders
|
|
41
|
-
on notes and waypoints, remapped into the red band at night.
|
|
42
|
-
- **Background-tab safety.** Delta batching and AIS pruning moved off the render loop, so live
|
|
43
|
-
data, the collision watch, and the anchor alarm keep working while the browser tab is hidden.
|
|
44
|
-
|
|
45
|
-
See the [changelog](CHANGELOG.md#v060) for the full list.
|
|
18
|
+
## What's new in 0.6.1
|
|
19
|
+
|
|
20
|
+
Quick access, straight from community feedback:
|
|
21
|
+
|
|
22
|
+
- **Measure from here.** Long-press or right-click the chart and start measuring at that exact
|
|
23
|
+
spot; no trip to the app menu, and your focus never leaves the map.
|
|
24
|
+
- **A Charts button on the map.** The bottom strip gains a Charts pill beside Center, Follow,
|
|
25
|
+
and Forecast, so the Layers and charts panel is one tap away and switching charts is two.
|
|
26
|
+
- **Honest scrolling in the weather header.** The layer pills keep their full labels at every
|
|
27
|
+
width: the row scrolls when it must, and the edge fade appears only while there is more to
|
|
28
|
+
scroll to.
|
|
29
|
+
|
|
30
|
+
See the [changelog](CHANGELOG.md#v061) for the full list.
|
|
46
31
|
|
|
47
32
|
## What it does
|
|
48
33
|
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{C as e,D as t,E as n,O as r,S as i,T as a,_ as o,a as s,b as c,c as l,f as u,g as d,h as f,i as p,k as m,m as h,o as g,p as _,r as v,s as y,t as b,v as x,w as S,x as C,y as w}from"./index-
|
|
1
|
+
import{C as e,D as t,E as n,O as r,S as i,T as a,_ as o,a as s,b as c,c as l,f as u,g as d,h as f,i as p,k as m,m as h,o as g,p as _,r as v,s as y,t as b,v as x,w as S,x as C,y as w}from"./index-CuQ3O73e.js";var T=!0,E=`uplot`,ee=`u-hz`,te=`u-vt`,ne=`u-title`,re=`u-wrap`,ie=`u-under`,ae=`u-over`,oe=`u-axis`,se=`u-off`,ce=`u-select`,le=`u-cursor-x`,ue=`u-cursor-y`,de=`u-cursor-pt`,fe=`u-legend`,pe=`u-live`,me=`u-inline`,he=`u-series`,ge=`u-marker`,_e=`u-label`,ve=`u-value`,ye=`width`,be=`height`,xe=`top`,Se=`bottom`,Ce=`left`,we=`right`,Te=`#000`,Ee=`#0000`,De=`mousemove`,Oe=`mousedown`,ke=`mouseup`,Ae=`mouseenter`,je=`mouseleave`,Me=`dblclick`,D=`resize`,Ne=`scroll`,Pe=`change`,Fe=`dppxchange`,Ie=`--`,Le=typeof window<`u`,Re=Le?document:null,ze=Le?window:null,O=Le?navigator:null,k,Be;function Ve(){let e=devicePixelRatio;k!=e&&(k=e,Be&&et(Pe,Be,Ve),Be=matchMedia(`(min-resolution: ${k-.001}dppx) and (max-resolution: ${k+.001}dppx)`),$e(Pe,Be,Ve),ze.dispatchEvent(new CustomEvent(Fe)))}function He(e,t){if(t!=null){let n=e.classList;!n.contains(t)&&n.add(t)}}function Ue(e,t){let n=e.classList;n.contains(t)&&n.remove(t)}function A(e,t,n){e.style[t]=n+`px`}function We(e,t,n,r){let i=Re.createElement(e);return t!=null&&He(i,t),n?.insertBefore(i,r),i}function Ge(e,t){return We(`div`,e,t)}var Ke=new WeakMap;function qe(e,t,n,r,i){let a=`translate(`+t+`px,`+n+`px)`;a!=Ke.get(e)&&(e.style.transform=a,Ke.set(e,a),t<0||n<0||t>r||n>i?He(e,se):Ue(e,se))}var Je=new WeakMap;function Ye(e,t,n){let r=t+n;r!=Je.get(e)&&(Je.set(e,r),e.style.background=t,e.style.borderColor=n)}var Xe=new WeakMap;function Ze(e,t,n,r){let i=t+``+n;i!=Xe.get(e)&&(Xe.set(e,i),e.style.height=n+`px`,e.style.width=t+`px`,e.style.marginLeft=r?-t/2+`px`:0,e.style.marginTop=r?-n/2+`px`:0)}var Qe={passive:!0},j={...Qe,capture:!0};function $e(e,t,n,r){t.addEventListener(e,n,r?j:Qe)}function et(e,t,n,r){t.removeEventListener(e,n,Qe)}Le&&Ve();function tt(e,t,n,r){let i;n||=0,r||=t.length-1;let a=r<=2147483647;for(;r-n>1;)i=a?n+r>>1:vt((n+r)/2),t[i]<e?n=i:r=i;return e-t[n]<=t[r]-e?n:r}function M(e){return(t,n,r)=>{let i=-1,a=-1;for(let a=n;a<=r;a++)if(e(t[a])){i=a;break}for(let i=r;i>=n;i--)if(e(t[i])){a=i;break}return[i,a]}}var nt=e=>e!=null,rt=e=>e!=null&&e>0,N=M(nt),it=M(rt);function at(e,t,n,r=0,i=!1){let a=i?it:N,o=i?rt:nt;[t,n]=a(e,t,n);let s=e[t],c=e[t];if(t>-1)if(r==1)s=e[t],c=e[n];else if(r==-1)s=e[n],c=e[t];else for(let r=t;r<=n;r++){let t=e[r];o(t)&&(t<s?s=t:t>c&&(c=t))}return[s??R,c??-R]}function ot(e,t,n,r){let i=Ct(e),a=Ct(t);e==t&&(i==-1?(e*=n,t/=n):(e/=n,t*=n));let o=n==10?wt:Tt,s=i==1?vt:yt,c=a==1?yt:vt,l=s(o(I(e))),u=c(o(I(t))),d=St(n,l),f=St(n,u);return n==10&&(l<0&&(d=B(d,-l)),u<0&&(f=B(f,-u))),r||n==2?(e=d*i,t=f*a):(e=Vt(e,d),t=Bt(t,f)),[e,t]}function st(e,t,n,r){let i=ot(e,t,n,r);return e==0&&(i[0]=0),t==0&&(i[1]=0),i}var ct=.1,lt={mode:3,pad:ct},ut={pad:0,soft:null,mode:0},dt={min:ut,max:ut};function ft(e,t,n,r){return Xt(n)?mt(e,t,n):(ut.pad=n,ut.soft=r?0:null,ut.mode=r?3:0,mt(e,t,dt))}function P(e,t){return e??t}function pt(e,t,n){for(t=P(t,0),n=P(n,e.length-1);t<=n;){if(e[t]!=null)return!0;t++}return!1}function mt(e,t,n){let r=n.min,i=n.max,a=P(r.pad,0),o=P(i.pad,0),s=P(r.hard,-R),c=P(i.hard,R),l=P(r.soft,R),u=P(i.soft,-R),d=P(r.mode,0),f=P(i.mode,0),p=t-e,m=wt(p),h=xt(I(e),I(t)),g=I(wt(h)-m);(p<1e-24||g>10)&&(p=0,(e==0||t==0)&&(p=1e-24,d==2&&l!=R&&(a=0),f==2&&u!=-R&&(o=0)));let _=p||h||1e3,v=St(10,vt(wt(_))),y=B(Vt(e-_*(p==0?e==0?.1:1:a),v/10),24),b=e>=l&&(d==1||d==3&&y<=l||d==2&&y>=l)?l:R,x=xt(s,y<b&&e>=b?b:bt(b,y)),S=B(Bt(t+_*(p==0?t==0?.1:1:o),v/10),24),C=t<=u&&(f==1||f==3&&S>=u||f==2&&S<=u)?u:-R,w=bt(c,S>C&&t<=C?C:xt(C,S));return x==w&&x==0&&(w=100),[x,w]}var ht=new Intl.NumberFormat(Le?O.language:`en-US`),gt=e=>ht.format(e),F=Math,_t=F.PI,I=F.abs,vt=F.floor,L=F.round,yt=F.ceil,bt=F.min,xt=F.max,St=F.pow,Ct=F.sign,wt=F.log10,Tt=F.log2,Et=(e,t=1)=>F.sinh(e)*t,Dt=(e,t=1)=>F.asinh(e/t),R=1/0;function Ot(e){return(wt((e^e>>31)-(e>>31))|0)+1}function kt(e,t,n){return bt(xt(e,t),n)}function At(e){return typeof e==`function`}function z(e){return At(e)?e:()=>e}var jt=()=>{},Mt=e=>e,Nt=(e,t)=>t,Pt=e=>null,Ft=e=>!0,It=(e,t)=>e==t,Lt=/\.\d*?(?=9{6,}|0{6,})/gm,Rt=e=>{if(H(e)||Ht.has(e))return e;let t=`${e}`,n=t.match(Lt);if(n==null)return e;let r=n[0].length-1;if(t.indexOf(`e-`)!=-1){let[e,n]=t.split(`e`);return+`${Rt(e)}e${n}`}return B(e,r)};function zt(e,t){return Rt(B(Rt(e/t))*t)}function Bt(e,t){return Rt(yt(Rt(e/t))*t)}function Vt(e,t){return Rt(vt(Rt(e/t))*t)}function B(e,t=0){if(H(e))return e;let n=10**t;return L(e*n*(1+2**-52))/n}var Ht=new Map;function Ut(e){return((``+e).split(`.`)[1]||``).length}function V(e,t,n,r){let i=[],a=r.map(Ut);for(let o=t;o<n;o++){let t=I(o),n=B(St(e,o),t);for(let s=0;s<r.length;s++){let c=e==10?+`${r[s]}e${o}`:r[s]*n,l=(o>=0?0:t)+(o>=a[s]?0:a[s]),u=e==10?c:B(c,l);i.push(u),Ht.set(u,l)}}return i}var Wt={},Gt=[],Kt=[null,null],qt=Array.isArray,H=Number.isInteger,Jt=e=>e===void 0;function Yt(e){return typeof e==`string`}function Xt(e){let t=!1;if(e!=null){let n=e.constructor;t=n==null||n==Object}return t}function Zt(e){return typeof e==`object`&&!!e}var Qt=Object.getPrototypeOf(Uint8Array),$t=`__proto__`;function en(e,t=Xt){let n;if(qt(e)){let r=e.find(e=>e!=null);if(qt(r)||t(r)){n=Array(e.length);for(let r=0;r<e.length;r++)n[r]=en(e[r],t)}else n=e.slice()}else if(e instanceof Qt)n=e.slice();else if(t(e)){n={};for(let r in e)r!=$t&&(n[r]=en(e[r],t))}else n=e;return n}function U(e){let t=arguments;for(let n=1;n<t.length;n++){let r=t[n];for(let t in r)t!=$t&&(Xt(e[t])?U(e[t],en(r[t])):e[t]=en(r[t]))}return e}var tn=0,nn=1,rn=2;function an(e,t,n){for(let r=0,i,a=-1;r<t.length;r++){let o=t[r];if(o>a){for(i=o-1;i>=0&&e[i]==null;)e[i--]=null;for(i=o+1;i<n&&e[i]==null;)e[a=i++]=null}}}function on(e,t){if(ln(e)){let t=e[0].slice();for(let n=1;n<e.length;n++)t.push(...e[n].slice(1));return un(t[0])||(t=cn(t)),t}let n=new Set;for(let t=0;t<e.length;t++){let r=e[t][0],i=r.length;for(let e=0;e<i;e++)n.add(r[e])}let r=[Array.from(n).sort((e,t)=>e-t)],i=r[0].length,a=new Map;for(let e=0;e<i;e++)a.set(r[0][e],e);for(let n=0;n<e.length;n++){let o=e[n],s=o[0];for(let e=1;e<o.length;e++){let c=o[e],l=Array(i).fill(void 0),u=t?t[n][e]:nn,d=[];for(let e=0;e<c.length;e++){let t=c[e],n=a.get(s[e]);t===null?u!=tn&&(l[n]=t,u==rn&&d.push(n)):l[n]=t}an(l,d,i),r.push(l)}}return r}var sn=typeof queueMicrotask>`u`?e=>Promise.resolve().then(e):queueMicrotask;function cn(e){let t=e[0],n=t.length,r=Array(n);for(let e=0;e<r.length;e++)r[e]=e;r.sort((e,n)=>t[e]-t[n]);let i=[];for(let t=0;t<e.length;t++){let a=e[t],o=Array(n);for(let e=0;e<n;e++)o[e]=a[r[e]];i.push(o)}return i}function ln(e){let t=e[0][0],n=t.length;for(let r=1;r<e.length;r++){let i=e[r][0];if(i.length!=n)return!1;if(i!=t){for(let e=0;e<n;e++)if(i[e]!=t[e])return!1}}return!0}function un(e,t=100){let n=e.length;if(n<=1)return!0;let r=0,i=n-1;for(;r<=i&&e[r]==null;)r++;for(;i>=r&&e[i]==null;)i--;if(i<=r)return!0;let a=xt(1,vt((i-r+1)/t));for(let t=e[r],n=r+a;n<=i;n+=a){let r=e[n];if(r!=null){if(r<=t)return!1;t=r}}return!0}var dn=[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`],fn=[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`];function pn(e){return e.slice(0,3)}var mn=fn.map(pn),hn={MMMM:dn,MMM:dn.map(pn),WWWW:fn,WWW:mn};function gn(e){return(e<10?`0`:``)+e}function _n(e){return(e<10?`00`:e<100?`0`:``)+e}var vn={YYYY:e=>e.getFullYear(),YY:e=>(e.getFullYear()+``).slice(2),MMMM:(e,t)=>t.MMMM[e.getMonth()],MMM:(e,t)=>t.MMM[e.getMonth()],MM:e=>gn(e.getMonth()+1),M:e=>e.getMonth()+1,DD:e=>gn(e.getDate()),D:e=>e.getDate(),WWWW:(e,t)=>t.WWWW[e.getDay()],WWW:(e,t)=>t.WWW[e.getDay()],HH:e=>gn(e.getHours()),H:e=>e.getHours(),h:e=>{let t=e.getHours();return t==0?12:t>12?t-12:t},AA:e=>e.getHours()>=12?`PM`:`AM`,aa:e=>e.getHours()>=12?`pm`:`am`,a:e=>e.getHours()>=12?`p`:`a`,mm:e=>gn(e.getMinutes()),m:e=>e.getMinutes(),ss:e=>gn(e.getSeconds()),s:e=>e.getSeconds(),fff:e=>_n(e.getMilliseconds())};function yn(e,t){t||=hn;let n=[],r=/\{([a-z]+)\}|[^{]+/gi,i;for(;i=r.exec(e);)n.push(i[0][0]==`{`?vn[i[1]]:i[0]);return e=>{let r=``;for(let i=0;i<n.length;i++)r+=typeof n[i]==`string`?n[i]:n[i](e,t);return r}}var bn=new Intl.DateTimeFormat().resolvedOptions().timeZone;function xn(e,t){let n;return t==`UTC`||t==`Etc/UTC`?n=new Date(+e+e.getTimezoneOffset()*6e4):t==bn?n=e:(n=new Date(e.toLocaleString(`en-US`,{timeZone:t})),n.setMilliseconds(e.getMilliseconds())),n}var Sn=e=>e%1==0,Cn=[1,2,2.5,5],wn=V(10,-32,0,Cn),W=V(10,0,32,Cn),Tn=W.filter(Sn),En=wn.concat(W),Dn=`{YYYY}`,On=`
|
|
2
2
|
{YYYY}`,kn=`{M}/{D}`,An=`
|
|
3
3
|
{M}/{D}`,jn=`
|
|
4
4
|
{M}/{D}/{YY}`,Mn=`{h}:{mm}{aa}`,Nn=`
|